@casus-campus/ngx-gallery 0.20.0 → 0.21.1

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 +1 @@
1
- {"version":3,"file":"casus-campus-ngx-gallery.mjs","sources":["../../../projects/ngx-gallery/src/lib/svg/arrow.model.ts","../../../projects/ngx-gallery/src/lib/svg/icon.model.ts","../../../projects/ngx-gallery/src/lib/svg/point.model.ts","../../../projects/ngx-gallery/src/lib/svg/polygon.model.ts","../../../projects/ngx-gallery/src/lib/utils/logging.service.ts","../../../projects/ngx-gallery/src/lib/utils/cc-media.service.ts","../../../projects/ngx-gallery/src/lib/svg/ngx-gallery-svg-polygon.component.ts","../../../projects/ngx-gallery/src/lib/svg/ngx-gallery-svg-polygon.component.html","../../../projects/ngx-gallery/src/lib/svg/ngx-gallery-svg-icon.component.ts","../../../projects/ngx-gallery/src/lib/svg/ngx-gallery-svg-icon.component.html","../../../projects/ngx-gallery/src/lib/svg/ngx-gallery-svg-arrow.component.ts","../../../projects/ngx-gallery/src/lib/svg/ngx-gallery-svg-arrow.component.html","../../../projects/ngx-gallery/src/lib/svg/ngx-gallery-svg-text.component.ts","../../../projects/ngx-gallery/src/lib/svg/ngx-gallery-svg-text.component.html","../../../projects/ngx-gallery/src/lib/image/ngx-gallery-image-svg.component.ts","../../../projects/ngx-gallery/src/lib/image/ngx-gallery-image-svg.component.html","../../../projects/ngx-gallery/src/lib/ngx-gallery-action/ngx-gallery-action.component.ts","../../../projects/ngx-gallery/src/lib/ngx-gallery-arrows/ngx-gallery-arrows.component.ts","../../../projects/ngx-gallery/src/lib/ngx-gallery-bullets/ngx-gallery-bullets.component.ts","../../../projects/ngx-gallery/src/lib/models/ngx-gallery-animation.model.ts","../../../projects/ngx-gallery/src/lib/ngx-gallery-helper.service.ts","../../../projects/ngx-gallery/src/lib/models/ngx-gallery-ordered-image.model.ts","../../../projects/ngx-gallery/src/lib/utils/utils-script.component.ts","../../../projects/ngx-gallery/src/lib/utils/utils-script.component.html","../../../projects/ngx-gallery/src/lib/ngx-gallery-video/ngx-gallery-video.component.ts","../../../projects/ngx-gallery/src/lib/ngx-gallery-video/ngx-gallery-video.component.html","../../../projects/ngx-gallery/src/lib/ngx-gallery-image/ngx-gallery-image.component.ts","../../../projects/ngx-gallery/src/lib/ngx-gallery-image/ngx-gallery-image.component.html","../../../projects/ngx-gallery/src/lib/ngx-gallery-preview/ngx-gallery-preview.component.ts","../../../projects/ngx-gallery/src/lib/ngx-gallery-preview/ngx-gallery-preview.component.html","../../../projects/ngx-gallery/src/lib/models/ngx-gallery-order.model.ts","../../../projects/ngx-gallery/src/lib/ngx-gallery-thumbnails/ngx-gallery-thumbnails.component.ts","../../../projects/ngx-gallery/src/lib/ngx-gallery-thumbnails/ngx-gallery-thumbnails.component.html","../../../projects/ngx-gallery/src/lib/models/ngx-gallery-image-size.model.ts","../../../projects/ngx-gallery/src/lib/cc-custom-options.ts","../../../projects/ngx-gallery/src/lib/models/ngx-gallery-layout.model.ts","../../../projects/ngx-gallery/src/lib/models/ngx-gallery-action.model.ts","../../../projects/ngx-gallery/src/lib/models/ngx-gallery-options.model.ts","../../../projects/ngx-gallery/src/lib/utils/ngx-preview-loader.component.ts","../../../projects/ngx-gallery/src/lib/ngx-gallery.component.ts","../../../projects/ngx-gallery/src/lib/ngx-gallery.component.html","../../../projects/ngx-gallery/src/lib/utils/custom-hammer-config.service.ts","../../../projects/ngx-gallery/src/lib/ngx-gallery.module.ts","../../../projects/ngx-gallery/src/lib/models/ngx-gallery-image.model.ts","../../../projects/ngx-gallery/src/public-api.ts","../../../projects/ngx-gallery/src/casus-campus-ngx-gallery.ts"],"sourcesContent":["import { Point } from './point.model';\n\n// TODO refactor to interface\nexport class Arrow {\n startP: Point;\n endP: Point;\n color: string;\n\n constructor(\n startP: Point,\n endP: Point,\n color: string\n ) {\n this.startP = startP;\n this.endP = endP;\n this.color = color;\n }\n\n getStartPoint(): Point {\n return this.startP;\n }\n\n getDestPoint(): Point {\n return this.endP;\n }\n\n getColor(): string {\n return this.color;\n }\n}\n","import { IMedium } from '@casus-campus/cc-support';\n\nimport { Point } from './point.model';\n\n// TODO refactor to interface\nexport class Icon {\n iconImageUrl: string;\n target: IMedium;\n description: string;\n point: Point;\n width: number;\n height: number;\n color: string;\n\n constructor(\n iconImageUrl: string,\n target: IMedium,\n description: string,\n point: Point,\n width: number,\n height: number,\n color: string\n ) {\n this.iconImageUrl = iconImageUrl;\n this.target = target;\n this.description = description;\n this.point = point;\n this.width = width;\n this.height = height;\n this.color = color;\n }\n\n public getPoint(): Point {\n return this.point;\n }\n\n public getIconImageUrl(): string {\n return this.iconImageUrl;\n }\n\n public getTarget(): IMedium {\n return this.target;\n }\n\n public getWidth(): number {\n return this.width;\n }\n\n public getDescription(): string {\n return this.description;\n }\n\n public getColor(): string {\n return this.color;\n }\n}\n","// TODO change to interface\nexport class Point {\n posx: number;\n posy: number;\n text?: string;\n color?: string;\n\n constructor(\n posx: number,\n posy: number,\n text?: string,\n color?: string\n ) {\n this.posx = posx;\n this.posy = posy;\n this.text = text || '';\n this.color = color || 'black';\n }\n\n public getPosX(): number {\n return this.posx;\n }\n\n public getPosY(): number {\n return this.posy;\n }\n\n public getText(): string {\n return this.text;\n }\n\n public getColor(): string {\n return this.color;\n }\n}\n","import { IMedium } from '@casus-campus/cc-support';\n\nimport { Point } from './point.model';\n\n// TODO change to interface\nexport class Polygon {\n text: string;\n points: Point[];\n target: IMedium;\n color: string;\n\n constructor(\n text: string,\n points: Point[],\n target: IMedium,\n color: string\n ) {\n this.text = text;\n this.points = points;\n this.target = target;\n this.color = color;\n }\n\n public getPoints(): Point[] {\n return this.points;\n }\n\n public getSVGPoints(): string {\n return [this.points[0], ...this.points]\n .map(point => point.getPosX() + ',' + point.getPosY())\n .join(' ');\n }\n\n public getSVGPointsPolyline(): string {\n return [this.points[0], ...this.points, this.points[0]]\n .map(point => point.getPosX() + ',' + point.getPosY())\n .join(' ');\n }\n\n public getText(): string {\n return this.text.trim();\n }\n\n public getColor(): string {\n return this.color;\n }\n}\n","import { Injectable } from '@angular/core';\n\n// TODO: change to decorator @log\n@Injectable({\n providedIn: 'root',\n})\nexport class LogService {\n\n private prioLevel: number;\n private PRIO_ERROR = 1;\n private PRIO_BASE = 0;\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n log(fName: string, msg: string, prioLevel?: number) {\n // console.log((new Date()).getTime() + ' ' + fName + ': ' + msg);\n }\n\n}\n","import { Injectable, inject } from '@angular/core';\nimport { CcSupportService, IMedium, IOpenMediumHyperlinkEvent } from '@casus-campus/cc-support';\nimport { BehaviorSubject } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { NgxGalleryImage } from '../models/ngx-gallery-image.model';\nimport { LogService } from './logging.service';\nimport { MediaDimension } from './media-dimension.interface';\nimport { NgxGalleryDimensions } from './ngx-gallery-dimensions.interface';\n\n\n@Injectable()\nexport class CcMediaService {\n private logService = inject(LogService);\n private ccSuportService = inject(CcSupportService);\n\n\n /* eslint-disable @typescript-eslint/naming-convention, no-underscore-dangle, id-blacklist, id-match */\n private readonly _openedMediumTargets$ = new BehaviorSubject<IOpenMediumHyperlinkEvent>(null);\n readonly openedMediumTargets$ = this._openedMediumTargets$.asObservable().pipe(filter(openedMedium => !!openedMedium));\n\n prepareMedia(media: NgxGalleryImage[], dimensions: NgxGalleryDimensions): NgxGalleryImage[] {\n return media.map(medium => this.addUrlsAndDescriptionToMedium(medium, dimensions));\n }\n\n containsVideoOrAudio(mimeTypes: string[]): boolean {\n const hasVideo = !!mimeTypes.find(mimeType => this.isVideo(mimeType) || this.isAudio(mimeType));\n return hasVideo;\n }\n\n isExternalVideo(mimeType: string): boolean {\n return 'video/exthtml5' === mimeType;\n }\n\n isPDF(mimeType: string): boolean {\n return this.getMultimediaType(mimeType) === 'pdf';\n }\n\n isVideo(mimeType: string): boolean {\n return this.getMultimediaType(mimeType) === 'video';\n }\n\n isAudio(mimeType: string): boolean {\n return this.getMultimediaType(mimeType) === 'audio';\n }\n\n isImage(mimeType: string): boolean {\n return this.getMultimediaType(mimeType) === 'image';\n }\n\n getMultimediaType(mimeType: string): string {\n if (!mimeType) {\n return 'image';\n }\n\n if (mimeType.startsWith('audio')) {\n return 'audio';\n }\n\n if (mimeType.startsWith('video')) {\n return 'video';\n }\n\n if (mimeType === 'application/pdf') {\n return 'pdf';\n }\n\n if (mimeType.indexOf('application/campus') >= 0) {\n return 'campus';\n }\n\n return 'image';\n }\n\n openMediumTarget(event: MouseEvent, medium: IMedium) {\n if (!medium) {\n return;\n }\n this._openedMediumTargets$.next({ sourceEvent: event, medium });\n this.logService.log('CcMediaService.openMediumLink', 'change state: ' + medium.id);\n }\n\n private addUrlsAndDescriptionToMedium(medium: NgxGalleryImage, dimensions: NgxGalleryDimensions) {\n return {\n small: this.getSmallImageUrl(medium, dimensions.thumbnail),\n medium: this.getMediumImageUrl(medium, dimensions.image),\n big: this.getBigImageUrl(medium),\n // TODO: for what do we need the poster url?\n poster: this.getPosterUrl(medium),\n ccpshortdescription: medium.description && medium.description.substr(0, 72),\n suffix: this.getSuffix(medium),\n // TODO: why only for pdf? do we need this anyway?\n url: medium.type === 'application/pdf' && this.getImageUrl(medium),\n ...medium,\n };\n }\n\n // image urls - getter methods\n\n private getSmallImageUrl(medium: NgxGalleryImage, dimension: MediaDimension): string {\n // console.log('NgxGalleryConfig.getSmallImageUrl - starts');\n let url: string;\n if (this.isImage(medium.type)) {\n url = this.getImageUrl(medium, dimension.width, dimension.height);\n } else {\n url = this.getMimeTypePlaceholderPath(medium.type);\n }\n return url;\n }\n\n private getMediumImageUrl(medium: NgxGalleryImage, dimension: MediaDimension): string {\n // console.log('NgxGalleryConfig.getMediumImageUrl - starts');\n let url: string;\n if (this.isImage(medium.type)) {\n url = this.getImageUrl(medium, dimension.width, dimension.height);\n } else if (this.isPDF(medium.type)) {\n url = this.getMimeTypePlaceholderPath(medium.type);\n } else {\n url = this.getGenericUrl(medium);\n }\n return url;\n }\n\n private getBigImageUrl(medium: NgxGalleryImage): string {\n // console.log('NgxGalleryConfig.getBigImageUrl - starts');\n let url: string;\n if (this.isImage(medium.type)) {\n url = this.getImageUrl(medium, medium.width, medium.height);\n } else if (this.isPDF(medium.type)) {\n url = this.getMimeTypePlaceholderPath(medium.type);\n } else {\n url = this.getGenericUrl(medium);\n }\n return url;\n }\n\n getPdfImageUrl(medium: NgxGalleryImage): string {\n const width = 400;\n const height = 300;\n const splitted = medium.urls[0].url.split('.');\n const url = splitted.slice(0, -1).join('.') + '_' + width + 'x' + height + '.' + 'png';\n return url;\n }\n\n private getPosterUrl(medium: NgxGalleryImage): string {\n let url: string;\n\n if (this.isAudio(medium.type) || this.isVideo(medium.type)) {\n url = this.getMimeTypePlaceholderPath(medium.type);\n // } else {\n // console.log('NgxGalleryConfig.getPosterUrl - should never be called: ' + medium.type);\n }\n return url;\n }\n\n private getSuffix(medium: NgxGalleryImage): string {\n const url = this.getImageUrl(medium);\n if (!url) {\n return;\n }\n return url.substring(url.lastIndexOf('.') + 1);\n }\n\n private getGenericUrl(medium: NgxGalleryImage): string {\n switch (medium.type) {\n case 'application/campus-html5-puzzle':\n case 'application/campus-html5-mouseover':\n return this.getCampusUrl(medium);\n\n default:\n return this.getImageUrl(medium);\n }\n }\n\n private getImageUrl(medium: NgxGalleryImage, width?: number, height?: number): string {\n if (!medium.urls || !medium.urls.length) {\n return;\n }\n\n const url = medium.urls[0].url;\n if (!width || !height) {\n return url;\n }\n\n let adjustedWidth = width;\n let adjustedHeight = height;\n\n if (medium.width >= medium.height) {\n adjustedWidth = Math.min(adjustedWidth, medium.width);\n } else {\n adjustedHeight = Math.min(adjustedHeight, medium.height);\n }\n // console.log('NGXGalleryConfig.getImageUrl: medium.name - ' + medium.name + ' / width x height: ' + width + 'x' + height);\n // console.log('NGXGalleryConfig.getImageUrl: url - ' + getImageUrl(url, adjustedWidth, adjustedHeight));\n return this.getAdjustedImageUrl(url, adjustedWidth, adjustedHeight);\n }\n\n private getAdjustedImageUrl(imageUrl: string, width: number, height: number) {\n const splitted = imageUrl.split('.');\n if (splitted[splitted.length - 1] !== 'svg') {\n return splitted.slice(0, -1).join('.') + '_' + width + 'x' + height + '.' + splitted.pop();\n }\n return imageUrl;\n }\n\n private getCampusUrl(medium: NgxGalleryImage): string {\n if (!medium.urls || !medium.urls.length) {\n return;\n }\n\n const url = medium.urls[0].url;\n return url + '.d/index.html';\n }\n\n // path used as placeholder image for text/html, pdf, audio and video\n getMimeTypePlaceholderPath(mimeType: string): string {\n const matIconName = this.ccSuportService.getMatIconNameForMimeType(mimeType) || 'cancel_presentation';\n return `assets/${matIconName}-24px.svg`;\n }\n\n}\n","import { Component, Input, OnChanges, OnInit, inject } from '@angular/core';\n\nimport { CcMediaService } from '../utils/cc-media.service';\nimport { LogService } from '../utils/logging.service';\nimport { Polygon } from './polygon.model';\n\n@Component({\n /* eslint-disable @angular-eslint/component-selector */\n selector: '[svg-polygon]',\n templateUrl: './ngx-gallery-svg-polygon.component.html',\n styleUrls: ['./ngx-gallery-svg-polygon.component.scss'],\n standalone: false\n})\n\nexport class NgxGallerySvgPolygonComponent implements OnInit, OnChanges {\n private logService = inject(LogService);\n ccMediaService = inject(CcMediaService);\n\n\n @Input() svgPolygons: Polygon[];\n\n ngOnInit() {\n this.logService.log('NgxGallerySvgPolygonComponent.ngOnInit', '...');\n }\n\n ngOnChanges() {\n this.logService.log('NgxGallerySvgPolygonComponent.ngOnChanges', '...');\n }\n\n open(event: MouseEvent, polygon: Polygon) {\n if (polygon.target) {\n this.logService.log('NgxGallerySVGPolygonComponent.open', 'linkId: ' + polygon.target.id);\n this.ccMediaService.openMediumTarget(event, polygon.target);\n }\n }\n}\n","@for (svgPolygon of svgPolygons; track svgPolygon) {\n <svg:a (click)=\"open($event, svgPolygon)\">\n <svg:polygon [attr.points]=\"svgPolygon.getSVGPoints()\" [attr.fill]=\"svgPolygon.getColor()\"\n [attr.stroke]=\"svgPolygon.getColor()\" class=\"ngx-gallery-svg-polygon\">\n </svg:polygon>\n </svg:a>\n}\n","import { Component, Input, OnChanges, OnInit, inject } from '@angular/core';\n\nimport { CcMediaService } from '../utils/cc-media.service';\nimport { LogService } from '../utils/logging.service';\nimport { Icon } from './icon.model';\n\n@Component({\n /* eslint-disable @angular-eslint/component-selector */\n selector: '[svg-icon]',\n templateUrl: './ngx-gallery-svg-icon.component.html',\n styleUrls: ['./ngx-gallery-svg-icon.component.scss'],\n standalone: false\n})\n\nexport class NgxGallerySvgIconComponent implements OnInit, OnChanges {\n private logService = inject(LogService);\n private ccMediaService = inject(CcMediaService);\n\n\n @Input() svgIcons: Icon[];\n @Input() scaleFactor = 1.0;\n\n widths: number[] = [];\n heights: number[] = [];\n\n ngOnInit() {\n this.logService.log('NgxGallerySvgIconComponent.ngOnInit', 'scaleFactor - ' + this.scaleFactor);\n this.setWidths();\n this.setHeights();\n }\n\n ngOnChanges() {\n this.logService.log('NgxGallerySvgIconComponent.onChange', 'scaleFactor - ' + this.scaleFactor);\n this.setWidths();\n this.setHeights();\n }\n\n open(event: MouseEvent, icon: Icon) {\n if (icon.target) {\n this.ccMediaService.openMediumTarget(event, icon.target);\n this.logService.log('NgxGallerySvgIconComponent.click', 'icon target: ' + icon.target.id);\n }\n }\n\n setWidths() {\n this.widths = this.svgIcons.map(icon => icon.width * this.scaleFactor);\n }\n\n setHeights() {\n this.heights = this.svgIcons.map(icon => icon.height * this.scaleFactor);\n }\n}\n","@for (svgIcon of svgIcons; track svgIcon; let i = $index) {\n <svg:g>\n <svg:rect class=\"ngx-gallery-svg-icon-bg\" [attr.x]=\"svgIcon.getPoint().getPosX()\"\n [attr.y]=\"svgIcon.getPoint().getPosY()\" rx=\"2\" ry=\"2\" [attr.width]=\"widths[i]\" [attr.height]=\"heights[i]\"\n fill=\"white\" [attr.stroke]=\"svgIcon.getColor()\" [attr.stroke-width]=\"2 * scaleFactor\">\n </svg:rect>\n <svg:a class=\"ngx-gallery-svg-icon\" (click)=\"open($event, svgIcon)\">\n <svg:image [attr.xlink:href]=\"svgIcon.getIconImageUrl()\" [attr.x]=\"svgIcon.getPoint().getPosX() + 1\"\n [attr.y]=\"svgIcon.getPoint().getPosY() + 1\" [attr.height]=\"heights[i] - 2\" [attr.width]=\"widths[i] - 2\">\n <!--<svg:title>{{ svgIcon.getDescription() }}</svg:title>-->\n </svg:image>\n </svg:a>\n </svg:g>\n}\n","import { Component, Input, OnInit, inject } from '@angular/core';\n\nimport { LogService } from '../utils/logging.service';\nimport { Arrow } from './arrow.model';\n\n@Component({\n /* eslint-disable @angular-eslint/component-selector */\n selector: '[svg-arrow]',\n templateUrl: './ngx-gallery-svg-arrow.component.html',\n standalone: false\n})\n\nexport class NgxGallerySvgArrowComponent implements OnInit {\n private logService = inject(LogService);\n\n\n @Input() svgArrows: Arrow[];\n\n ngOnInit() {\n this.logService.log('NgxGallerySvgArrowComponent.ngOnInit', '...');\n }\n}\n","@for (svgArrow of svgArrows; track svgArrow; let i = $index) {\n <svg:marker id=\"pf1-{{i}}\" viewBox=\"0 0 10 10\" refX=\"0\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10\"\n markerHeight=\"10\" orient=\"auto\">\n <svg:path d=\"M 0,0 l 10,5 l -10,5 z\" [attr.fill]=\"svgArrow.getColor()\" />\n </svg:marker>\n <svg:line [attr.x1]=\"svgArrow.getStartPoint().getPosX()\" [attr.stroke]=\"svgArrow.getColor()\"\n [attr.y1]=\"svgArrow.getStartPoint().getPosY()\" [attr.x2]=\"svgArrow.getDestPoint().getPosX()\"\n [attr.y2]=\"svgArrow.getDestPoint().getPosY()\" style=\"stroke-width:2;\"\n [attr.marker-end]=\"'url(#pf1-' + i +')'\" />\n}\n","import { Component, Input, OnChanges, OnInit, inject } from '@angular/core';\n\nimport { LogService } from '../utils/logging.service';\nimport { Point } from './point.model';\n\n@Component({\n /* eslint-disable @angular-eslint/component-selector */\n selector: '[svg-text]',\n templateUrl: './ngx-gallery-svg-text.component.html',\n styleUrls: ['./ngx-gallery-svg-text.component.scss'],\n standalone: false\n})\n\nexport class NgxGallerySvgTextComponent implements OnInit, OnChanges {\n private logService = inject(LogService);\n\n\n @Input() svgTexts: Point[];\n @Input() width: number;\n @Input() height: number;\n\n ngOnInit() {\n this.logService.log('NgxGallerySvgTextComponent.ngOnInit', 'count text: ' + this.svgTexts.length);\n }\n\n ngOnChanges() {\n this.logService.log('NgxGallerySvgTextComponent.onChange', 'count text: ' + this.svgTexts.length);\n }\n\n getCleanText(txt: string): string {\n return txt.replace(/<\\/?[^>]+(>|$)/g, '');\n }\n}\n","@for (svgText of svgTexts; track svgText) {\n <svg xmlns=\"http://www.w3.org/2000/svg\" [attr.width]=\"width\" [attr.height]=\"height\" [attr.x]=\"svgText.getPosX()\"\n [attr.y]=\"svgText.getPosY()\" [attr.fill]=\"svgText.getColor()\" style=\"overflow: visible;\">\n <foreignObject [attr.width]=\"width\" [attr.height]=\"height\" class=\"node\" style=\"overflow: visible;\">\n <body xmlns=\"http://www.w3.org/1999/xhtml\">\n <div style=\" dominant-baseline: hanging;\" title={{getCleanText(svgText.getText())}} [innerHTML]=\"svgText.getText()\">\n </div>\n </body>\n </foreignObject>\n </svg>\n}\n","import { AfterViewInit, ChangeDetectorRef, Component, ElementRef, Input, OnChanges, OnInit, SimpleChanges, ViewChild, inject } from '@angular/core';\nimport {\n IMedium,\n IMediumAddOn,\n IMediumAddOnArrow,\n IMediumAddOnHotSpot,\n IMediumAddOnIconHyperlink,\n IMediumAddOnText,\n MediumAddOnType,\n MediumUrlType,\n} from '@casus-campus/cc-support';\n\nimport { Arrow } from '../svg/arrow.model';\nimport { Icon } from '../svg/icon.model';\nimport { Point } from '../svg/point.model';\nimport { Polygon } from '../svg/polygon.model';\nimport { CcMediaService } from '../utils/cc-media.service';\nimport { LogService } from '../utils/logging.service';\n\n@Component({\n /* eslint-disable @angular-eslint/component-selector */\n selector: 'cc-imagesvg',\n templateUrl: './ngx-gallery-image-svg.component.html',\n styleUrls: ['./ngx-gallery-image-svg.component.scss'],\n standalone: false\n})\n\nexport class NgxGalleryImageSvgComponent implements OnInit, OnChanges, AfterViewInit {\n private logService = inject(LogService);\n private ccMediaService = inject(CcMediaService);\n private cdRef = inject(ChangeDetectorRef);\n\n\n @Input() width: number;\n @Input() height: number;\n @Input() viewBox: string;\n @Input() posLeft: string;\n @Input() posTop: string;\n @Input() zoomValue: string;\n @Input() animation: string;\n @Input() addOns: IMediumAddOn[];\n @Input() classGrab: boolean;\n @Input() styleTransform: string;\n @Input() preview: boolean;\n\n svgArrows: Arrow[] = [];\n svgPolygons: Polygon[] = [];\n svgIcons: Icon[] = [];\n svgTexts: Point[] = [];\n\n scaleFactor = 1;\n\n @ViewChild('svgElement', { static: true }) svgElement: ElementRef;\n\n ngOnInit() {\n this.logService.log('NgxGallerySvgComponent.ngOnInit', 'ngOnInit');\n this.handleAddOns();\n }\n\n ngAfterViewInit() {\n this.scaleFactor = this.calcScaleFactor();\n this.cdRef.detectChanges();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n this.logService.log('NgxGallerySvgComponent.onChange', 'ngOnChanges');\n if (changes.zoomValue && !changes.zoomValue.isFirstChange()) {\n this.scaleFactor = this.calcScaleFactor();\n }\n this.handleAddOns();\n }\n\n private handleAddOns(): void {\n this.svgArrows = this.addOns\n .filter(addOn => addOn.type === MediumAddOnType.Arrow)\n .map(addOn => this.mapToArrow(addOn as IMediumAddOnArrow))\n .filter(element => !!element);\n this.svgIcons = this.addOns\n .filter(addOn => addOn.type === MediumAddOnType.IconHyperlink)\n .map(addOn => this.mapToIcon(addOn as IMediumAddOnIconHyperlink))\n .filter(element => !!element);\n this.svgPolygons = this.addOns\n .filter(addOn => addOn.type === MediumAddOnType.HotSpot)\n .map(addOn => this.mapToPolygon(addOn as IMediumAddOnHotSpot))\n .filter(element => !!element);\n this.svgTexts = this.addOns\n .filter(addOn => addOn.type === MediumAddOnType.Text)\n .map(addOn => this.mapToText(addOn as IMediumAddOnText))\n .filter(element => !!element);\n }\n\n private mapToArrow(arrow: IMediumAddOnArrow): Arrow {\n return new Arrow(\n new Point(arrow.src.left, arrow.src.top, ''),\n new Point(arrow.dst.left, arrow.dst.top, ''),\n arrow.color\n );\n }\n\n private mockExternalHyperlinkMedium(iconHyperlink: IMediumAddOnIconHyperlink): IMedium {\n const url = iconHyperlink.externalUrl;\n if (!url) {\n return;\n }\n const schemeMatch = /^[a-zA-Z]+/.exec(url);\n const mimeType = 'url/' + (schemeMatch && schemeMatch[0] || 'relative');\n return {\n name: url,\n description: url,\n height: 0,\n width: 0,\n mimeType,\n urls: [{\n url,\n type: MediumUrlType.External,\n mimeType,\n }]\n };\n }\n\n private mapToIcon(iconHyperlink: IMediumAddOnIconHyperlink): Icon {\n const target = iconHyperlink.medium || this.mockExternalHyperlinkMedium(iconHyperlink);\n if (!target) {\n console.error('Found iconHyperlink without target or external url', iconHyperlink);\n return;\n }\n\n const placeholderPath = this.ccMediaService.getMimeTypePlaceholderPath(target.mimeType);\n return new Icon(\n placeholderPath,\n target,\n target.description,\n new Point(iconHyperlink.rect.left, iconHyperlink.rect.top, ''),\n iconHyperlink.rect.width,\n iconHyperlink.rect.height,\n iconHyperlink.color\n );\n }\n\n private mapToPolygon(hotSpot: IMediumAddOnHotSpot): Polygon {\n const points = hotSpot.polygon\n .map(point => new Point(point.left, point.top, ''));\n return new Polygon(\n (hotSpot.medium && hotSpot.medium.data) || '',\n points,\n hotSpot.medium,\n hotSpot.color\n );\n\n }\n\n private mapToText(text: IMediumAddOnText): Point {\n return new Point(\n text.position.left,\n text.position.top,\n text.text,\n text.color\n );\n }\n\n // Returns multiplicator for elements that should keep the same dimensions\n private calcScaleFactor(): number {\n\n const originalWidth = parseFloat(this.viewBox.split(' ')[2]);\n const currentWidth = this.svgElement.nativeElement.clientWidth * parseFloat(this.zoomValue);\n const widthScaleFactor = originalWidth / currentWidth;\n\n const originalHeight = parseFloat(this.viewBox.split(' ')[3]);\n const currentHeigth = this.svgElement.nativeElement.clientHeight * parseFloat(this.zoomValue);\n const heightScaleFactor = originalHeight / currentHeigth;\n\n return Math.max(widthScaleFactor, heightScaleFactor);\n }\n}\n","<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" preserveAspectRatio=\"xMidYMid meet\"\n [attr.width]=\"width\" [attr.height]=\"height\" [attr.viewBox]=\"viewBox\" class=\"ngx-gallery-center\"\n [class.animation]=\"animation\" [class.ngx-gallery-preview-svg]=\"preview\" [class.ngx-gallery-image-svg]=\"!preview\"\n [class.ngx-gallery-grab]=\"classGrab\" [style.transform]=\"styleTransform\" [style.left]=\"posLeft\" [style.top]=\"posTop\"\n (click)=\"$event.stopPropagation()\" #svgElement>\n @if (!!svgArrows.length) {\n <svg:g svg-arrow [svgArrows]=\"svgArrows\"></svg:g>\n }\n @if (!!svgPolygons.length) {\n <svg:g svg-polygon [svgPolygons]=\"svgPolygons\"></svg:g>\n }\n @if (!!svgIcons.length) {\n <svg:g svg-icon [svgIcons]=\"svgIcons\" [scaleFactor]=\"scaleFactor\"></svg:g>\n }\n @if (!!svgTexts.length) {\n <svg:g svg-text [svgTexts]=\"svgTexts\" [width]=\"width\" [height]=\"height\"></svg:g>\n }\n</svg>\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n selector: 'ngx-gallery-action',\n template: `\n <div class=\"ngx-gallery-icon\" [class.ngx-gallery-icon-disabled]=\"disabled\"\n aria-hidden=\"true\"\n title=\"{{ titleText }}\"\n (click)=\"handleClick($event)\">\n <i class=\"ngx-gallery-icon-content {{ icon }}\"></i>\n </div>`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false\n})\nexport class NgxGalleryActionComponent {\n @Input() icon: string;\n @Input() disabled = false;\n @Input() titleText = '';\n\n @Output() onClick: EventEmitter<Event> = new EventEmitter();\n\n handleClick(event: Event) {\n if (!this.disabled) {\n this.onClick.emit(event);\n }\n\n event.stopPropagation();\n event.preventDefault();\n }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n selector: 'ngx-gallery-arrows',\n template: `\n <div class=\"ngx-gallery-arrow-wrapper ngx-gallery-arrow-left\">\n <div class=\"ngx-gallery-icon ngx-gallery-arrow\"\n aria-hidden=\"true\"\n (click)=\"handlePrevClick()\"\n [class.ngx-gallery-disabled]=\"prevDisabled\">\n <i class=\"ngx-gallery-icon-content {{arrowPrevIcon}}\"></i>\n </div>\n </div>\n <div class=\"ngx-gallery-arrow-wrapper ngx-gallery-arrow-right\">\n <div class=\"ngx-gallery-icon ngx-gallery-arrow\"\n aria-hidden=\"true\"\n (click)=\"handleNextClick()\"\n [class.ngx-gallery-disabled]=\"nextDisabled\">\n <i class=\"ngx-gallery-icon-content {{arrowNextIcon}}\"></i>\n </div>\n </div>\n `,\n styleUrls: ['./ngx-gallery-arrows.component.scss'],\n standalone: false\n})\nexport class NgxGalleryArrowsComponent {\n @Input() prevDisabled: boolean;\n @Input() nextDisabled: boolean;\n @Input() arrowPrevIcon: string;\n @Input() arrowNextIcon: string;\n\n @Output() onPrevClick = new EventEmitter();\n @Output() onNextClick = new EventEmitter();\n\n handlePrevClick(): void {\n this.onPrevClick.emit();\n }\n\n handleNextClick(): void {\n this.onNextClick.emit();\n }\n}\n","import { Component, Input, Output, EventEmitter, } from '@angular/core';\n\n@Component({\n selector: 'ngx-gallery-bullets',\n template: `\n @for (bullet of getBullets(); track bullet; let i = $index) {\n <div class=\"ngx-gallery-bullet\"\n (click)=\"handleChange($event, i)\"\n [ngClass]=\"{ 'ngx-gallery-active': i === active }\">\n </div>\n }\n `,\n styleUrls: ['./ngx-gallery-bullets.component.scss'],\n standalone: false\n})\nexport class NgxGalleryBulletsComponent {\n @Input() count: number;\n @Input() active = 0;\n\n @Output() onChange = new EventEmitter();\n\n getBullets(): number[] {\n return Array(this.count);\n }\n\n handleChange(event: Event, index: number): void {\n this.onChange.emit(index);\n }\n}\n","export class NgxGalleryAnimation {\n static Fade = 'fade';\n static Slide = 'slide';\n static Rotate = 'rotate';\n static Zoom = 'zoom';\n}\n","import { ElementRef, Injectable, Renderer2, inject } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class NgxGalleryHelperService {\n private renderer = inject(Renderer2);\n\n\n private swipeHandlers: Map<string, (() => void)[]> = new Map<string, (() => void)[]>();\n\n manageSwipe(\n status: boolean,\n element: ElementRef,\n id: string,\n nextHandler: () => void,\n prevHandler: () => void\n ): void {\n\n const handlers = this.getSwipeHandlers(id);\n\n // swipeleft and swiperight are available only if hammerjs is included\n try {\n if (status && !handlers) {\n this.swipeHandlers.set(id, [\n this.renderer.listen(element.nativeElement, 'swipeleft', () => nextHandler()),\n this.renderer.listen(element.nativeElement, 'swiperight', () => prevHandler())\n ]);\n } else if (!status && handlers) {\n handlers.map((handler) => handler());\n this.removeSwipeHandlers(id);\n }\n } catch (_) {\n // Intentionally ignore error\n }\n }\n\n getBackgroundUrl(imageUrl: string) {\n if (!imageUrl) {\n return;\n }\n return 'url(\\'' + this.validateUrl(imageUrl) + '\\')';\n }\n\n private validateUrl(url: string): string {\n if (!url.replace) {\n return url;\n }\n return url.replace(new RegExp(' ', 'g'), '%20')\n .replace(new RegExp('\\'', 'g'), '%27');\n }\n\n private getSwipeHandlers(id: string): (() => void)[] | undefined {\n return this.swipeHandlers.get(id);\n }\n\n private removeSwipeHandlers(id: string): void {\n this.swipeHandlers.delete(id);\n }\n}\n","import { SafeResourceUrl } from '@angular/platform-browser';\nimport { IMediumAddOn } from '@casus-campus/cc-support';\n\nimport { VideoUrl } from '../utils/videourl.model';\n\nexport interface INgxGalleryOrderedImage {\n id?: string;\n src: string | SafeResourceUrl;\n autoplay?: boolean;\n loop?: boolean;\n poster?: string | SafeResourceUrl;\n urls?: VideoUrl[];\n index: number;\n addOns?: IMediumAddOn[];\n}\n\nexport class NgxGalleryOrderedImage implements INgxGalleryOrderedImage {\n id?: string;\n src: string | SafeResourceUrl;\n autoplay?: boolean;\n loop?: boolean;\n poster?: string | SafeResourceUrl;\n urls?: VideoUrl[];\n index: number;\n addOns?: IMediumAddOn[];\n\n constructor(obj: INgxGalleryOrderedImage) {\n this.id = obj.id;\n this.src = obj.src;\n this.autoplay = obj.autoplay || false;\n this.loop = obj.loop || false;\n this.poster = obj.poster;\n this.urls = obj.urls || [];\n this.index = obj.index;\n this.addOns = obj.addOns || [];\n }\n}\n","import { AfterViewInit, Component, ElementRef, Input, ViewChild } from '@angular/core';\n\n\n@Component({\n /* eslint-disable @angular-eslint/component-selector */\n selector: 'script-js',\n templateUrl: './utils-script.component.html',\n standalone: false\n})\nexport class UtilsScriptComponent implements AfterViewInit {\n\n @Input()\n src: string;\n\n @Input()\n type: string;\n\n @ViewChild('script', { static: true }) script: ElementRef;\n\n convertToScript() {\n const element = this.script.nativeElement;\n const script = document.createElement('script');\n script.type = this.type ? this.type : 'text/javascript';\n if (this.src) {\n script.src = this.src;\n }\n if (element.innerHTML) {\n script.innerHTML = element.innerHTML;\n }\n const parent = element.parentElement;\n parent.parentElement.replaceChild(script, parent);\n }\n\n ngAfterViewInit() {\n this.convertToScript();\n }\n}\n","<div #script style.display=\"none\">\n <ng-content></ng-content>\n</div>\n","import { Component, ElementRef, Input, OnChanges, OnInit, ViewChild, inject } from '@angular/core';\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser';\n\nimport { NgxGalleryOrderedImage } from '../models/ngx-gallery-ordered-image.model';\nimport { LogService } from '../utils/logging.service';\n\n@Component({\n /* eslint-disable @angular-eslint/component-selector */\n selector: 'cc-video',\n templateUrl: './ngx-gallery-video.component.html',\n styleUrls: ['./ngx-gallery-video.component.scss'],\n standalone: false\n})\n\nexport class NgxGalleryVideoComponent implements OnInit, OnChanges {\n private sanitization = inject(DomSanitizer);\n private logService = inject(LogService);\n\n @ViewChild('mmelement', { static: true }) mmelement: ElementRef;\n\n @Input() image: NgxGalleryOrderedImage;\n @Input() selectedIndex: number;\n @Input() showDescription: boolean;\n @Input() description: string;\n @Input() mediaInfo: object[];\n @Input() fitVideoToScreen: boolean;\n\n width: number;\n height: number;\n mediaAlignment: string;\n\n ngOnInit() {\n this.logService.log('NgxGalleryVideoComponent.ngOnInit', 'starts ...');\n this.updateDimensions();\n }\n\n ngOnChanges() {\n this.logService.log('NgxGalleryVideoComponent.onChange', 'starts ...');\n this.updateDimensions();\n }\n\n updateDimensions() {\n if (this.mediaInfo['type'].startsWith('video')) {\n this.width = this.mediaInfo['width'];\n this.height = this.mediaInfo['height'];\n this.mediaAlignment = 'center';\n\n const widthRatio = window.innerWidth / this.width;\n const heightRatio = window.innerHeight / this.height;\n const bestFitRatio = Math.min(widthRatio, heightRatio);\n\n if (this.fitVideoToScreen) {\n this.width *= bestFitRatio;\n this.height *= bestFitRatio;\n }\n\n } else {\n this.width = this.height = this.mediaAlignment = null;\n }\n }\n\n getSafeVideoUrl(video: string): SafeUrl {\n return this.sanitization.bypassSecurityTrustResourceUrl(video);\n }\n\n timeUpdate() {\n this.logService.log('NgxGalleryImageComponent.timeUpdate', this.mmelement.nativeElement.currentTime);\n }\n}\n","<div class=\"ngx-gallery-image\" [ngClass]=\"{ 'ngx-gallery-active': selectedIndex === image.index,\n 'ngx-gallery-inactive-left': selectedIndex > image.index,\n 'ngx-gallery-inactive-right': selectedIndex < image.index}\"\n [style.align-items]=\"mediaAlignment\">\n @if (selectedIndex === image.index) {\n <div id=\"player_{{image.id}}\" class=\"player\" title=\"{{showDescription && description ? description : ''}}\"\n [style.width.px]=\"width\" [style.height.px]=\"height\">\n <video #mmelement [width]=\"mediaInfo['bwidth']\" [height]=\"mediaInfo['bheight']\"\n title=\"{{showDescription && description ? description : ''}}\" poster=\"{{image.poster}}\"\n autoplay=\"{{image.autoplay ? 'autoplay': ''}}\">\n @for (url of image.urls; track url.url; let i = $index) {\n <source [src]=\"getSafeVideoUrl(url.url)\" type=\"{{url.mimeType}}\">\n }\n </video>\n <!--\n ratio: 9/10,\n // old configured ratio ...\n ratio: {{mediaInfo && mediaInfo ? mediaInfo[\"bwidth\"] / mediaInfo[\"bheight\"] : 1 }},\n -->\n <script-js>\n $(function () {{ '{' }}\n $('#player_{{image.id}}').flowplayer({{ '{' }}\n chromecast: false,\n ratio: 9 / 10,\n title: '{{showDescription && description ? description : ''}}',\n loop: {{image.loop || false }},\n embed: {{ '{' }}\n skin: \"node_modules/flowplayer/dist/skin/skin.css\"\n &#125;,\n onBeforeFinish: function(){{ '{' }}\n return false;\n &#125;\n &#125;);\n &#125;);\n </script-js>\n </div>\n }\n @if (showDescription && description) {\n <div class=\"ngx-gallery-video-text\" [innerHTML]=\"description\">\n </div>\n }\n</div>\n","import { Component, ElementRef, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges, inject } from '@angular/core';\nimport { DomSanitizer, SafeResourceUrl, SafeStyle } from '@angular/platform-browser';\n\nimport { NgxGalleryAction } from '../models/ngx-gallery-action.model';\nimport { NgxGalleryAnimation } from '../models/ngx-gallery-animation.model';\nimport { NgxGalleryOrderedImage } from '../models/ngx-gallery-ordered-image.model';\nimport { NgxGalleryHelperService } from '../ngx-gallery-helper.service';\nimport { LogService } from '../utils/logging.service';\n\n@Component({\n selector: 'ngx-gallery-image',\n templateUrl: './ngx-gallery-image.component.html',\n styleUrls: ['./ngx-gallery-image.component.scss'],\n standalone: false\n})\nexport class NgxGalleryImageComponent implements OnInit, OnChanges {\n private sanitization = inject(DomSanitizer);\n private elementRef = inject(ElementRef);\n private helperService = inject(NgxGalleryHelperService);\n private logService = inject(LogService);\n\n\n zoomValue = '1.0';\n\n @Input() name: string;\n @Input() images: NgxGalleryOrderedImage[];\n @Input() imageWidth: number[];\n @Input() imageHeight: number[];\n @Input() imageVBox: string[];\n @Input() positionX: number[];\n @Input() positionY: number[];\n // TODO: use interface\n @Input() mediaInfos: object[];\n @Input() hasVideo: boolean;\n @Input() links: string[];\n @Input() clickable: boolean;\n @Input() selectedIndex: number;\n @Input() arrows: boolean;\n @Input() arrowsAutoHide: boolean;\n @Input() swipe: boolean;\n @Input() animation: string;\n @Input() size: string;\n @Input() arrowPrevIcon: string;\n @Input() arrowNextIcon: string;\n @Input() autoPlay: boolean;\n @Input() autoPlayInterval: number;\n @Input() autoPlayPauseOnHover: boolean;\n @Input() infinityMove: boolean;\n @Input() lazyLoading: boolean;\n @Input() actions: NgxGalleryAction[];\n @Input() descriptions: string[];\n @Input() types: string[];\n @Input() mtypes: string[];\n @Input() widths: number[];\n @Input() heights: number[];\n @Input() showDescription: boolean;\n @Input() bullets: boolean;\n\n @Input() interactive: boolean;\n @Input() isSVGActive: boolean;\n @Input() interactiveIcon: string;\n\n\n @Output() onClick = new EventEmitter();\n @Output() onActiveChange = new EventEmitter();\n\n canChangeImage = true;\n countChanges = 0;\n\n private timer;\n\n ngOnInit(): void {\n if (this.arrows && this.arrowsAutoHide) {\n this.arrows = false;\n }\n\n if (this.autoPlay) {\n this.startAutoPlay();\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.swipe) {\n this.helperService.manageSwipe(this.swipe, this.elementRef, 'image', () => this.showNext(), () => this.showPrev());\n }\n\n if (Object.prototype.hasOwnProperty.call(changes, 'selectedIndex')) {\n this.countChanges++;\n this.logService.log('NgxGalleryImageComponent.ngOnChanges(' + this.name + ')', 'starts ...');\n }\n }\n\n // currently resizing window does NOT lead to a resize event, if external video in an iframe is shown\n // problem: otherwise video would be reloaded after leaving the mm box!\n\n /*\n @HostListener('mouseenter') onMouseEnter() {\n if (this.arrowsAutoHide && !this.arrows) {\n this.arrows = true;\n }\n\n if (this.autoPlay && this.autoPlayPauseOnHover) {\n this.stopAutoPlay();\n }\n }\n\n @HostListener('mouseleave') onMouseLeave() {\n if (this.arrowsAutoHide && this.arrows) {\n this.arrows = false;\n }\n\n if (this.autoPlay && this.autoPlayPauseOnHover) {\n this.startAutoPlay();\n }\n }\n */\n\n reset(index: number): void {\n this.selectedIndex = index;\n }\n\n getImages(): NgxGalleryOrderedImage[] {\n if (!this.images) {\n return [];\n }\n\n if (this.lazyLoading) {\n const indexes = [this.selectedIndex];\n const prevIndex = this.selectedIndex - 1;\n\n if (prevIndex === -1 && this.infinityMove) {\n indexes.push(this.images.length - 1);\n } else if (prevIndex >= 0) {\n indexes.push(prevIndex);\n }\n\n const nextIndex = this.selectedIndex + 1;\n\n if (nextIndex === this.images.length && this.infinityMove) {\n indexes.push(0);\n } else if (nextIndex < this.images.length) {\n indexes.push(nextIndex);\n }\n\n return this.images.filter((img, i) => indexes.indexOf(i) !== -1);\n } else {\n return this.images;\n }\n }\n\n startAutoPlay(): void {\n this.stopAutoPlay();\n\n this.timer = setInterval(() => {\n if (!this.showNext()) {\n this.selectedIndex = -1;\n this.showNext();\n }\n }, this.autoPlayInterval);\n }\n\n stopAutoPlay() {\n if (this.timer) {\n clearInterval(this.timer);\n }\n }\n\n handleClick(event: Event, index: number): void {\n if (this.clickable) {\n this.onClick.emit(index);\n\n event.stopPropagation();\n event.preventDefault();\n }\n }\n\n show(index: number) {\n this.selectedIndex = index;\n this.onActiveChange.emit(this.selectedIndex);\n this.setChangeTimeout();\n }\n\n showNext(): boolean {\n if (this.canShowNext() && this.canChangeImage) {\n this.selectedIndex++;\n\n if (this.selectedIndex === this.images.length) {\n this.selectedIndex = 0;\n }\n\n this.onActiveChange.emit(this.selectedIndex);\n this.setChangeTimeout();\n\n return true;\n } else {\n return false;\n }\n }\n\n showPrev(): void {\n if (this.canShowPrev() && this.canChangeImage) {\n this.selectedIndex--;\n\n if (this.selectedIndex < 0) {\n this.selectedIndex = this.images.length - 1;\n }\n\n this.onActiveChange.emit(this.selectedIndex);\n this.setChangeTimeout();\n }\n }\n\n setChangeTimeout() {\n this.canChangeImage = false;\n let timeout = 1000;\n\n if (this.animation === NgxGalleryAnimation.Slide\n || this.animation === NgxGalleryAnimation.Fade) {\n timeout = 500;\n }\n\n setTimeout(() => {\n this.canChangeImage = true;\n }, timeout);\n }\n\n canShowNext(): boolean {\n if (this.images) {\n return this.infinityMove || this.selectedIndex < this.images.length - 1\n ? true : false;\n } else {\n return false;\n }\n }\n\n canShowPrev(): boolean {\n if (this.images) {\n return this.infinityMove || this.selectedIndex > 0 ? true : false;\n } else {\n return false;\n }\n }\n\n getSafeUrl(imageUrl: string | SafeResourceUrl ): SafeStyle {\n return this.sanitization.bypassSecurityTrustStyle(this.helperService.getBackgroundUrl(imageUrl as string));\n }\n\n getBackgroundSize(index: number): string {\n return (this.mtypes[index] === 'pdf' ? '400px' : '100%');\n }\n}\n","@for (image of getImages(); track image.id; let i = $index) {\n <div class=\"ngx-gallery-image-wrapper ngx-gallery-animation-{{animation}} ngx-gallery-image-size-{{size}}\"\n >\n @if (mtypes[image.index] === 'image' || mtypes[image.index] === 'pdf') {\n <div class=\"ngx-gallery-image\"\n [ngClass]=\"{\n 'ngx-gallery-active': selectedIndex === image.index,\n 'ngx-gallery-inactive-left': selectedIndex > image.index,\n 'ngx-gallery-inactive-right': selectedIndex < image.index,\n 'ngx-gallery-clickable': clickable\n }\"\n [style.background-image]=\"getSafeUrl(image.src)\"\n [style.background-size]=\"getBackgroundSize(image.index)\"\n (click)=\"handleClick($event, image.index)\" >\n <div class=\"ngx-gallery-icons-wrapper ngx-gallery-actionicon-image\">\n @for (action of actions; track action.titleText) {\n @if (!action.disabled) {\n <ngx-gallery-action\n [icon]=\"action.icon\"\n [disabled]=\"action.disabled\"\n [titleText]=\"action.titleText\"\n (onClick)=\"action.onClick($event, image.index)\">\n </ngx-gallery-action>\n }\n }\n </div>\n @if (isSVGActive && !!image.addOns.length) {\n <cc-imagesvg\n [animation]=\"animation\"\n [width]=\"imageWidth[image.index]\"\n [height]=\"imageHeight[image.index]\"\n [viewBox]=\"imageVBox[image.index]\"\n [posLeft]=\"positionX[image.index] + 'px'\"\n [posTop]=\"positionY[image.index] + 'px'\"\n [zoomValue]=\"zoomValue\"\n [addOns]=\"image.addOns\">\n </cc-imagesvg>\n }\n @if (showDescription && descriptions[image.index]) {\n <div class=\"ngx-gallery-image-text\"\n [innerHTML]=\"descriptions[image.index] | safeHtml\"\n (click)=\"$event.stopPropagation()\">\n </div>\n }\n </div>\n }\n @if (mtypes[image.index] === 'audio' || mtypes[image.index] === 'video') {\n <cc-video\n [selectedIndex]=\"selectedIndex\"\n [image]=\"image\"\n [showDescription]=\"showDescription\"\n [description]=\"showDescription ? descriptions[image.index] : ''\"\n [mediaInfo]=\"mediaInfos[image.index]\"\n ></cc-video>\n }\n @if (mtypes[selectedIndex] === 'video') {\n <div >\n <div class=\"ngx-gallery-icons-wrapper ngx-gallery-actionicon-image\">\n @for (action of actions; track action) {\n @if (!action.disabled && action.titleText !== 'full screen') {\n <ngx-gallery-action\n [icon]=\"action.icon\"\n [disabled]=\"action.disabled\"\n [titleText]=\"action.titleText\"\n (onClick)=\"action.onClick($event, selectedIndex)\">\n </ngx-gallery-action>\n }\n }\n </div>\n </div>\n }\n </div>\n}\n@if (bullets) {\n <ngx-gallery-bullets [count]=\"images.length\" [active]=\"selectedIndex\" (onChange)=\"show($event)\"></ngx-gallery-bullets>\n}\n@if (arrows) {\n <ngx-gallery-arrows class=\"ngx-gallery-image-size-{{size}}\"\n (onPrevClick)=\"showPrev()\"\n (onNextClick)=\"showNext()\"\n [prevDisabled]=\"!canShowPrev()\"\n [nextDisabled]=\"!canShowNext()\"\n [arrowPrevIcon]=\"arrowPrevIcon\"\n [arrowNextIcon]=\"arrowNextIcon\">\n </ngx-gallery-arrows>\n}","import { Component, ElementRef, EventEmitter, HostBinding, Input, OnChanges, OnDestroy, OnInit, Output, Renderer2, SimpleChanges, ViewChild, inject } from '@angular/core';\nimport { DomSanitizer, SafeResourceUrl, SafeStyle, SafeUrl } from '@angular/platform-browser';\nimport { forkJoin, Observable, Subject, take, timer } from 'rxjs';\n\nimport { NgxGalleryAction } from '../models/ngx-gallery-action.model';\nimport { NgxGalleryOrderedImage } from '../models/ngx-gallery-ordered-image.model';\nimport { NgxGalleryHelperService } from '../ngx-gallery-helper.service';\nimport { CcMediaService } from '../utils/cc-media.service';\nimport { LogService } from '../utils/logging.service';\n\n\n@Component({\n selector: 'ngx-gallery-preview',\n templateUrl: './ngx-gallery-preview.component.html',\n styleUrls: ['./ngx-gallery-preview.component.scss'],\n standalone: false\n})\nexport class NgxGalleryPreviewComponent implements OnChanges, OnInit, OnDestroy {\n private sanitization = inject(DomSanitizer);\n private elementRef = inject(ElementRef);\n private helperService = inject(NgxGalleryHelperService);\n private renderer = inject(Renderer2);\n private logService = inject(LogService);\n ccMediaService = inject(CcMediaService);\n\n\n link: SafeResourceUrl;\n src: SafeUrl | SafeResourceUrl;\n srcType: string;\n imgWidth: number;\n imgHeight: number;\n description: string;\n viewBox: string;\n showSpinner = false;\n positionLeft = 0;\n positionTop = 0;\n zoomValue = 1;\n isZoomableIn = false;\n isZoomableOut = false;\n styleTransform: SafeStyle;\n canDrag: boolean;\n loading = false;\n rotateValue = 0;\n index = 0;\n hasAddOns = false;\n\n @Input() prevIndex: number;\n @Input() images: string[] | SafeResourceUrl[];\n @Input() ordImages: NgxGalleryOrderedImage[];\n // TODO: use interface\n @Input() mediaInfos: object[];\n @Input() links: string[] = [];\n @Input() descriptions: string[];\n @Input() types: string[];\n @Input() mtypes: string[];\n @Input() widths: number[];\n @Input() heights: number[];\n @Input() showDescription: boolean;\n @Input() swipe: boolean;\n @Input() fullscreen: boolean;\n @Input() forceFullscreen: boolean;\n @Input() closeOnClick: boolean;\n @Input() closeOnEsc: boolean;\n @Input() keyboardNavigation: boolean;\n @Input() arrowPrevIcon: string;\n @Input() arrowNextIcon: string;\n @Input() closeIcon: string;\n @Input() fullscreenIcon: string;\n @Input() spinnerIcon: string;\n @Input() autoPlay: boolean;\n @Input() autoPlayInterval: number;\n @Input() autoPlayPauseOnHover: boolean;\n @Input() infinityMove: boolean;\n @Input() interactive: boolean;\n @Input() isSVGActive: boolean;\n @Input() zoom: boolean;\n @Input() zoomStep: number;\n @Input() zoomMax: number;\n @Input() zoomMin: number;\n @Input() interactiveIcon: string;\n @Input() zoomInIcon: string;\n @Input() zoomOutIcon: string;\n @Input() animation: boolean;\n @Input() actions: NgxGalleryAction[];\n @Input() rotate: boolean;\n @Input() rotateLeftIcon: string;\n @Input() rotateRightIcon: string;\n @Input() download: boolean;\n @Input() downloadIcon: string;\n @Input() bullets: string;\n @Input() name: string;\n\n @Output() onOpen = new EventEmitter();\n @Output() onClose = new EventEmitter();\n @Output() onActiveChange = new EventEmitter<number>();\n\n @HostBinding('class.ngx-gallery-active') isActive: boolean;\n\n @ViewChild('previewImage') previewImage: ElementRef;\n\n fitVideoToScreen: boolean;\n isOpen = false;\n\n private timer;\n private initialX = 0;\n private initialY = 0;\n private initialLeft = 0;\n private initialTop = 0;\n private isMove = false;\n\n private keyDownListener;\n private imgLoaded$: Subject<boolean>;\n private timer$: Observable<number>;\n\n ngOnInit() {\n this.logService.log('NgxGalleryPreviewComponent.ngOnInit (' + this.name + ')', '...');\n this.fitVideoToScreen = !this.isVideoLowerScreenResolution();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!changes.isFirstChange) {\n let prevIndexChanged = false;\n this.logService.log('NgxGalleryPreviewComponent.ngOnChange (' + this.name + ')', '...');\n this.styleTransform = this.getTransform();\n this.canDrag = this.canDragOnZoom();\n\n if (changes.swipe) {\n this.helperService.manageSwipe(this.swipe, this.elementRef,\n 'preview', () => this.showNext(), () => this.showPrev());\n }\n\n prevIndexChanged = (changes.prevIndex && !changes.prevIndex.isFirstChange()\n && changes.prevIndex.currentValue > -1);\n const imageChanged = (changes.images);\n\n if (imageChanged || prevIndexChanged) {\n if (prevIndexChanged) {\n this.index = this.prevIndex;\n this.open(this.prevIndex);\n }\n this.logService.log('NgxGalleryPreviewComponent.ngOnChange (' + this.name + ')', 'prevIndex: ' + this.prevIndex);\n } else {\n this.logService.log('NgxGalleryPreviewComponent.ngOnChange (' + this.name + ')', 'changes.prevIndex: ' + changes.prevIndex);\n }\n this.logService.log('NgxGalleryPreviewComponent.ngOnChange (' + this.name + ')', 'images[0]: ' + (this.images && this.images[0]));\n }\n this.isZoomableIn = this.canZoomIn();\n this.isZoomableOut = this.canZoomOut();\n }\n\n ngOnDestroy() {\n this.logService.log('NgxGalleryPreviewComponent.ngOnDestroy (' + this.name + ')', '...');\n if (this.keyDownListener) {\n this.keyDownListener();\n }\n }\n\n isVideoLowerScreenResolution() {\n let isVideoLowerScreen = true;\n\n if (!!this.mediaInfos && !!this.prevIndex) {\n const width = this.mediaInfos[this.prevIndex]['width'];\n const height = this.mediaInfos[this.prevIndex]['height'];\n\n isVideoLowerScreen = width < window.innerWidth && height < window.innerHeight;\n }\n return isVideoLowerScreen;\n }\n\n onKeyDown(e) {\n if (this.isOpen) {\n if (this.keyboardNavigation) {\n if (this.isKeyboardPrev(e)) {\n this.showPrev();\n } else if (this.isKeyboardNext(e)) {\n this.showNext();\n }\n }\n if (this.closeOnEsc && this.isKeyboardEsc(e)) {\n this.close();\n }\n }\n }\n\n open(index: number): void {\n this.logService.log('NgxGalleryPreviewComponent.open(' + this.name + ')', 'starts ... ' + index);\n this.logService.log('NgxGalleryPreviewComponent.open(' + this.name + ')', 'image: ' + this.images[index]);\n this.onOpen.emit();\n\n this.index = index;\n this.isOpen = true;\n this.show(true);\n\n if (this.forceFullscreen) {\n this.manageFullscreen();\n }\n\n this.keyDownListener = this.renderer.listen('window', 'keydown', (e) => this.onKeyDown(e));\n }\n\n close(): void {\n this.isOpen = false;\n this.closeFullscreen();\n this.onClose.emit();\n\n this.stopAutoPlay();\n\n if (this.keyDownListener) {\n this.keyDownListener();\n }\n }\n\n imageMouseEnter(): void {\n if (this.autoPlay && this.autoPlayPauseOnHover) {\n this.stopAutoPlay();\n }\n }\n\n imageMouseLeave(): void {\n if (this.autoPlay && this.autoPlayPauseOnHover) {\n this.startAutoPlay();\n }\n }\n\n startAutoPlay(): void {\n if (this.autoPlay) {\n this.stopAutoPlay();\n\n this.timer = setTimeout(() => {\n if (!this.showNext()) {\n this.index = -1;\n this.showNext();\n }\n }, this.autoPlayInterval);\n }\n }\n\n stopAutoPlay(): void {\n if (this.timer) {\n clearTimeout(this.timer);\n }\n }\n\n showAtIndex(index: number): void {\n this.index = index;\n this.show();\n }\n\n showNext(): boolean {\n if (this.canShowNext()) {\n this.index = this.getNextImageIndex();\n this.show();\n return true;\n } else {\n return false;\n }\n }\n\n showPrev(): void {\n if (this.canShowPrev()) {\n this.index = this.getPrevImageIndex();\n this.show();\n }\n }\n\n canShowNext(): boolean {\n if (this.mtypes[this.index] === 'video') {\n return false;\n } else if (this.loading) {\n return false;\n } else if (this.images) {\n return this.getNextImageIndex() !== undefined;\n } else {\n return false;\n }\n }\n\n canShowPrev(): boolean {\n if (this.mtypes[this.index] === 'video') {\n return false;\n } else if (this.loading) {\n return false;\n } else if (this.images) {\n return this.getPrevImageIndex() !== undefined;\n } else {\n return false;\n }\n }\n\n private getNextImageIndex(): number {\n const start = this.index + 1;\n const end = this.infinityMove ? this.images.length + this.index - 1 : this.images.length;\n for (let i = start; i < end; i++) {\n const index = i % this.images.length;\n if (this.isIterableImage(index, this.mtypes)) {\n return index;\n }\n }\n return;\n }\n\n private getPrevImageIndex(): number {\n const start = this.images.length + this.index - 1;\n const end = this.infinityMove ? this.index : this.images.length - 1;\n for (let i = start; i > end; i--) {\n const index = i % this.images.length;\n if (this.isIterableImage(index, this.mtypes)) {\n return index;\n }\n }\n return;\n }\n\n private isIterableImage(index: number, mediaTypes: string[]): boolean {\n return ['image', 'pdf'].indexOf(mediaTypes[index]) !== -1;\n }\n\n manageFullscreen(): void {\n if (this.fullscreen || this.forceFullscreen) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const doc = document as any;\n\n if (!doc.fullscreenElement && !doc.mozFullScreenElement\n && !doc.webkitFullscreenElement && !doc.msFullscreenElement) {\n this.openFullscreen();\n } else {\n this.closeFullscreen();\n }\n }\n }\n\n getSafeUrl(image: string): SafeUrl {\n return !image || image.substr(0, 10) === 'data:image' ?\n image : this.sanitization.bypassSecurityTrustUrl(image);\n }\n\n getSafeResourceUrl(resUrl: string): SafeResourceUrl {\n return this.sanitization.bypassSecurityTrustResourceUrl(resUrl);\n }\n\n zoomIn(): void {\n if (this.isZoomableIn) {\n this.zoomValue += this.zoomStep;\n\n if (this.zoomValue > this.zoomMax) {\n this.zoomValue = this.zoomMax;\n }\n this.styleTransform = this.getTransform();\n this.canDrag = this.canDragOnZoom();\n this.isZoomableIn = this.canZoomIn();\n this.isZoomableOut = this.canZoomOut();\n }\n }\n\n zoomOut(): void {\n if (this.isZoomableOut) {\n this.zoomValue -= this.zoomStep;\n\n if (this.zoomValue < this.zoomMin) {\n this.zoomValue = this.zoomMin;\n }\n\n if (this.zoomValue <= 1) {\n this.resetPosition();\n }\n this.styleTransform = this.getTransform();\n this.canDrag = this.canDragOnZoom();\n this.isZoomableIn = this.canZoomIn();\n this.isZoomableOut = this.canZoomOut();\n }\n }\n\n resetZoom() {\n this.zoomValue = 1;\n this.styleTransform = this.getTransform();\n this.canDrag = this.canDragOnZoom();\n this.isZoomableIn = this.canZoomIn();\n this.isZoomableOut = this.canZoomOut();\n }\n\n rotateLeft(): void {\n this.rotateValue -= 90;\n }\n\n rotateRight(): void {\n this.rotateValue += 90;\n }\n\n getTransform(): SafeStyle {\n return this.sanitization.bypassSecurityTrustStyle('scale(' + this.zoomValue + ') rotate(' + this.rotateValue + 'deg)');\n }\n\n canZoomIn(): boolean {\n return ['pdf', 'campus'].indexOf(this.mtypes[this.index]) === -1 && this.zoomValue < this.zoomMax;\n }\n\n canZoomOut(): boolean {\n return ['pdf', 'campus'].indexOf(this.mtypes[this.index]) === -1 && this.zoomValue > this.zoomMin;\n }\n\n canDragOnZoom() {\n return this.zoom && this.zoomValue > 1;\n }\n\n mouseDownHandler(e): void {\n if (this.canDragOnZoom()) {\n this.initialX = this.getClientX(e);\n this.initialY = this.getClientY(e);\n this.initialLeft = this.positionLeft;\n this.initialTop = this.positionTop;\n this.isMove = true;\n\n e.preventDefault();\n }\n }\n\n mouseUpHandler(): void {\n this.isMove = false;\n }\n\n mouseMoveHandler(e) {\n if (this.isMove) {\n this.positionLeft = this.initialLeft + (this.getClientX(e) - this.initialX);\n this.positionTop = this.initialTop + (this.getClientY(e) - this.initialY);\n }\n }\n\n private getClientX(e): number {\n return e.touches && e.touches.length ? e.touches[0].clientX : e.clientX;\n }\n\n private getClientY(e): number {\n return e.touches && e.touches.length ? e.touches[0].clientY : e.clientY;\n }\n\n private resetPosition() {\n if (this.zoom) {\n this.positionLeft = 0;\n this.positionTop = 0;\n }\n }\n\n private isKeyboardNext(e): boolean {\n return e.keyCode === 39 ? true : false;\n }\n\n private isKeyboardPrev(e): boolean {\n return e.keyCode === 37 ? true : false;\n }\n\n private isKeyboardEsc(e): boolean {\n return e.keyCode === 27 ? true : false;\n }\n\n private openFullscreen(): void {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const element = document.documentElement as any;\n\n if (element.requestFullscreen) {\n element.requestFullscreen();\n } else if (element.msRequestFullscreen) {\n element.msRequestFullscreen();\n } else if (element.mozRequestFullScreen) {\n element.mozRequestFullScreen();\n } else if (element.webkitRequestFullscreen) {\n element.webkitRequestFullscreen();\n }\n }\n\n private closeFullscreen(): void {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const doc = document as any;\n const fullscreenPolyfills = [\n {\n vendor: 'standard',\n fullscreenElement: 'fullscreenElement',\n exitFullscreenFn: 'exitFullscreen',\n }, {\n vendor: ['blink', 'safari', 'edge'],\n fullscreenElement: 'webkitFullscreenElement',\n exitFullscreenFn: 'webkitExitFullscreen',\n }, {\n vendor: 'gecko',\n fullscreenElement: 'mozFullScreenElement',\n exitFullscreenFn: 'mozCancelFullScreen',\n }, {\n vendor: 'ie11',\n fullscreenElement: 'msFullscreenElement',\n exitFullscreenFn: 'msExitFullscreen',\n }\n ];\n /* eslint-disable @typescript-eslint/prefer-for-of */\n for (let index = 0; index < fullscreenPolyfills.length; index++) {\n const fullscreenPolyfill = fullscreenPolyfills[index];\n if (doc[fullscreenPolyfill.fullscreenElement] !== null && doc[fullscreenPolyfill.exitFullscreenFn]) {\n doc[fullscreenPolyfill.exitFullscreenFn]();\n return;\n }\n }\n }\n\n private show(first = false) {\n this.zoom = true;\n this.link = this.getSafeResourceUrl(this.links[this.index]);\n this.loading = true;\n this.showSpinner = true;\n this.stopAutoPlay();\n\n this.onActiveChange.emit(this.index);\n\n this.imgLoaded$ = new Subject();\n this.timer$ = first || !this.animation ? timer(0) : timer(500);\n forkJoin([\n this.imgLoaded$,\n this.timer$.pipe(take(1))\n ])\n .subscribe(() => {\n this.loading = false;\n this.showSpinner = false;\n if (this.autoPlay) {\n this.startAutoPlay();\n }\n });\n this.timer$.subscribe(() => { this._show(); });\n }\n\n onImageLoad() {\n if (!this.imgLoaded$) {\n return;\n }\n this.imgLoaded$.next(true);\n this.imgLoaded$.complete();\n }\n\n private _show() {\n if (this.zoomValue !== 1) {\n this.resetZoom();\n }\n this.styleTransform = this.getTransform();\n this.canDrag = this.canDragOnZoom();\n this.rotateValue = 0;\n this.resetPosition();\n\n this.src = this.mtypes[this.index] === 'campus' ?\n this.getSafeResourceUrl(this.images[this.index] as string) :\n this.getSafeUrl(this.images[this.index] as string);\n this.description = this.descriptions[this.index];\n this.srcType = this.types[this.index];\n this.imgHeight = this.heights[this.index];\n this.imgWidth = this.widths[this.index];\n this.viewBox = '0 0 ' + this.imgWidth + ' ' + this.imgHeight;\n this.hasAddOns = !!this.ordImages && !!this.ordImages[this.index] && !!this.ordImages[this.index].addOns.length;\n\n this.logService.log('NgxGalleryPreviewComponent._show', 'index - ' + this.index);\n this.logService.log('NgxGalleryPreviewComponent._show', 'srcType - ' + this.srcType);\n this.logService.log('NgxGalleryPreviewComponent._show', 'url - ' + this.images[this.index]);\n this.logService.log('NgxGalleryPreviewComponent._show', 'src - ' + this.src);\n if (!this.ccMediaService.isImage(this.srcType)) {\n this.zoom = false;\n }\n }\n\n hasLink(): boolean {\n return !!(this.links && this.links.length && this.links[this.index]);\n }\n\n getImages(): NgxGalleryOrderedImage[] {\n if (!this.ordImages) {\n return [];\n }\n\n return this.ordImages;\n }\n}\n","<ngx-gallery-arrows\n (onPrevClick)=\"showPrev()\"\n (onNextClick)=\"showNext()\"\n [prevDisabled]=\"!canShowPrev()\"\n [nextDisabled]=\"!canShowNext()\"\n [arrowPrevIcon]=\"arrowPrevIcon\"\n [arrowNextIcon]=\"arrowNextIcon\">\n</ngx-gallery-arrows>\n\n<div class=\"ngx-gallery-preview-top\">\n <div class=\"ngx-gallery-preview-icons\">\n @for (action of actions; track action.titleText) {\n @if (!action.disabled) {\n <ngx-gallery-action\n [icon]=\"action.icon\"\n [disabled]=\"action.disabled\"\n [titleText]=\"action.titleText\"\n (onClick)=\"action.onClick($event, index)\">\n </ngx-gallery-action>\n }\n }\n\n @if (download && src) {\n <a [href]=\"src\" class=\"ngx-gallery-icon\" aria-hidden=\"true\" download>\n <i class=\"ngx-gallery-icon-content {{ downloadIcon }}\"></i>\n </a>\n }\n @if (zoom) {\n <ngx-gallery-action [icon]=\"zoomOutIcon\" [disabled]=\"! isZoomableOut\" (onClick)=\"zoomOut()\"></ngx-gallery-action>\n <ngx-gallery-action [icon]=\"zoomInIcon\" [disabled]=\"! isZoomableIn\" (onClick)=\"zoomIn()\"></ngx-gallery-action>\n }\n @if (rotate) {\n <ngx-gallery-action [icon]=\"rotateLeftIcon\" (onClick)=\"rotateLeft()\"></ngx-gallery-action>\n <ngx-gallery-action [icon]=\"rotateRightIcon\" (onClick)=\"rotateRight()\"></ngx-gallery-action>\n }\n @if (fullscreen) {\n <ngx-gallery-action [icon]=\"'ngx-gallery-fullscreen ' + fullscreenIcon\" (onClick)=\"manageFullscreen()\"></ngx-gallery-action>\n }\n @if (mtypes[index] === 'video' && isVideoLowerScreenResolution()) {\n <ngx-gallery-action [icon]=\"fullscreenIcon\" (onClick)=\"fitVideoToScreen = !fitVideoToScreen\"></ngx-gallery-action>\n }\n @if (closeIcon) {\n <ngx-gallery-action [icon]=\"'ngx-gallery-close ' + closeIcon\" (onClick)=\"close()\"></ngx-gallery-action>\n }\n </div>\n</div>\n<div class=\"ngx-spinner-wrapper ngx-gallery-center\" [class.ngx-gallery-active]=\"showSpinner\">\n <i class=\"ngx-gallery-icon ngx-gallery-spinner {{spinnerIcon}}\" aria-hidden=\"true\"></i>\n</div>\n\n@switch (mtypes[index]) {\n @case ('video') {\n <ng-container *ngTemplateOutlet=\"videoAudio\"></ng-container>\n }\n @case ('audio') {\n <ng-container *ngTemplateOutlet=\"videoAudio\"></ng-container>\n }\n @case ('campus') {\n @if (isOpen) {\n <iframe [src]=\"src\"></iframe>\n }\n }\n @case ('pdf') {\n @if (isOpen) {\n <iframe [src]=\"link\" style=\"position: absolute; top: 55px;\" (load)=\"onImageLoad()\"></iframe>\n }\n }\n @case ('image') {\n <div\n class=\"ngx-gallery-preview-wrapper\"\n (click)=\"closeOnClick && close()\"\n (mouseup)=\"mouseUpHandler()\" (mousemove)=\"mouseMoveHandler($event)\"\n (touchend)=\"mouseUpHandler()\" (touchmove)=\"mouseMoveHandler($event)\"\n (click)=\"$event.stopPropagation()\"\n (mouseenter)=\"imageMouseEnter()\"\n (mouseleave)=\"imageMouseLeave()\"\n (mousedown)=\"mouseDownHandler($event)\"\n (touchstart)=\"mouseDownHandler($event)\"\n >\n @if (src) {\n <img\n #previewImage\n class=\"ngx-gallery-preview-img ngx-gallery-center\"\n [src]=\"src\"\n [class.ngx-gallery-active]=\"!loading\"\n [class.ngx-gallery-grab]=\"canDrag\"\n [style.transform]=\"styleTransform\"\n [style.left]=\"positionLeft + 'px'\"\n [style.top]=\"positionTop + 'px'\"\n (click)=\"$event.stopPropagation()\"\n (load)=\"onImageLoad()\"\n />\n }\n @if (isSVGActive && hasAddOns) {\n <cc-imagesvg\n [animation]=\"animation\"\n [width]=\"imgWidth\"\n [height]=\"imgHeight\"\n [viewBox]=\"viewBox\"\n [styleTransform]=\"styleTransform\"\n [posLeft]=\"positionLeft + 'px'\"\n [posTop]=\"positionTop + 'px'\"\n [zoomValue]=\"zoomValue\"\n [addOns]=\"ordImages[index].addOns\"\n [classGrab]=\"canDrag\"\n [preview]=\"true\"\n >\n </cc-imagesvg>\n }\n @if (bullets) {\n <ngx-gallery-bullets [count]=\"images.length\" [active]=\"index\" (onChange)=\"showAtIndex($event)\">\n </ngx-gallery-bullets>\n }\n @if (showDescription && description) {\n <div class=\"ngx-gallery-preview-text\" [innerHTML]=\"description | safeHtml\" (click)=\"$event.stopPropagation()\">\n </div>\n }\n </div>\n }\n}\n<ng-template #videoAudio>\n <div\n class=\"ngx-gallery-preview-wrapper\"\n (click)=\"$event.stopPropagation()\">\n @if (isOpen) {\n <cc-video\n [selectedIndex]=\"prevIndex\"\n [image]=\"ordImages[prevIndex]\"\n [showDescription]=\"showDescription\"\n [description]=\"descriptions[prevIndex]\"\n [mediaInfo]=\"mediaInfos[prevIndex]\"\n [fitVideoToScreen]=\"fitVideoToScreen\">\n </cc-video>\n }\n </div>\n</ng-template>","export class NgxGalleryOrder {\n static Column = 1;\n static Row = 2;\n static Page = 3;\n}\n","import { Component, ElementRef, EventEmitter, Input, OnChanges, Output, SimpleChanges, inject } from '@angular/core';\nimport { DomSanitizer, SafeResourceUrl, SafeStyle } from '@angular/platform-browser';\nimport { NgxGalleryAction } from '../models/ngx-gallery-action.model';\nimport { NgxGalleryOrder } from '../models/ngx-gallery-order.model';\nimport { NgxGalleryHelperService } from '../ngx-gallery-helper.service';\nimport { LogService } from '../utils/logging.service';\n\n\n@Component({\n selector: 'ngx-gallery-thumbnails',\n templateUrl: './ngx-gallery-thumbnails.component.html',\n styleUrls: ['./ngx-gallery-thumbnails.component.scss'],\n standalone: false\n})\nexport class NgxGalleryThumbnailsComponent implements OnChanges {\n private sanitization = inject(DomSanitizer);\n private elementRef = inject(ElementRef);\n private helperService = inject(NgxGalleryHelperService);\n private logService = inject(LogService);\n\n\n thumbnailsLeft: string;\n thumbnailsMarginLeft: string;\n mouseenter: boolean;\n remainingCountValue: number;\n\n minStopIndex = 0;\n\n @Input() name: string;\n @Input() images: string[] | SafeResourceUrl[];\n @Input() links: string[];\n @Input() labels: string[];\n @Input() types: string[];\n @Input() widths: number[];\n @Input() heights: number[];\n @Input() linkTarget: string;\n @Input() columns: number;\n @Input() rows: number;\n @Input() arrows: boolean;\n @Input() arrowsAutoHide: boolean;\n @Input() margin: number;\n @Input() selectedIndex: number;\n @Input() clickable: boolean;\n @Input() swipe: boolean;\n @Input() size: string;\n @Input() arrowPrevIcon: string;\n @Input() arrowNextIcon: string;\n @Input() moveSize: number;\n @Input() order: number;\n @Input() remainingCount: boolean;\n @Input() lazyLoading: boolean;\n @Input() actions: NgxGalleryAction[];\n\n @Output() onActiveChange = new EventEmitter();\n\n private index = 0;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.selectedIndex) {\n this.validateIndex();\n this.logService.log('NgxGalleryThumbnailsComponent.ngOnChanges(' + this.name + ')',\n 'selected index changed to ' + this.selectedIndex);\n }\n\n if (changes.swipe) {\n this.helperService.manageSwipe(this.swipe, this.elementRef,\n 'thumbnails', () => this.moveRight(), () => this.moveLeft());\n }\n\n if (this.images) {\n this.remainingCountValue = this.images.length - (this.rows * this.columns);\n }\n\n }\n\n // comment, cause stops videos and reloads it (external video in iframe!)!\n /*\n @HostListener('mouseenter') onMouseEnter() {\n this.mouseenter = true;\n }\n\n @HostListener('mouseleave') onMouseLeave() {\n this.mouseenter = false;\n }\n */\n\n reset(index: number): void {\n this.selectedIndex = index;\n this.setDefaultPosition();\n\n this.index = 0;\n this.validateIndex();\n }\n\n getImages(): string[] | SafeResourceUrl[] {\n if (!this.images) {\n return [];\n }\n\n if (this.remainingCount) {\n return this.images.slice(0, this.rows * this.columns);\n } else if (this.lazyLoading && this.order !== NgxGalleryOrder.Row) {\n let stopIndex = 0;\n\n if (this.order === NgxGalleryOrder.Column) {\n stopIndex = (this.index + this.columns + this.moveSize) * this.rows;\n } else if (this.order === NgxGalleryOrder.Page) {\n stopIndex = this.index + ((this.columns * this.rows) * 2);\n }\n\n if (stopIndex <= this.minStopIndex) {\n stopIndex = this.minStopIndex;\n } else {\n this.minStopIndex = stopIndex;\n }\n\n return this.images.slice(0, stopIndex);\n } else {\n return this.images;\n }\n }\n\n handleClick(event: Event, index: number): void {\n this.selectedIndex = index;\n this.onActiveChange.emit(index);\n\n event.stopPropagation();\n event.preventDefault();\n }\n\n hasLink(index: number): boolean {\n if (this.links && this.links.length && this.links[index]) { return true; }\n }\n\n moveRight(): void {\n if (this.canMoveRight()) {\n this.index += this.moveSize;\n const maxIndex = this.getMaxIndex() - this.columns;\n\n if (this.index > maxIndex) {\n this.index = maxIndex;\n }\n\n this.setThumbnailsPosition();\n }\n }\n\n moveLeft(): void {\n if (this.canMoveLeft()) {\n this.index -= this.moveSize;\n\n if (this.index < 0) {\n this.index = 0;\n }\n\n this.setThumbnailsPosition();\n }\n }\n\n canMoveRight(): boolean {\n return this.index + this.columns < this.getMaxIndex() ? true : false;\n }\n\n canMoveLeft(): boolean {\n return this.index !== 0 ? true : false;\n }\n\n getThumbnailLeft(index: number): SafeStyle {\n let calculatedIndex;\n\n if (this.order === NgxGalleryOrder.Column) {\n calculatedIndex = Math.floor(index / this.rows);\n } else if (this.order === NgxGalleryOrder.Page) {\n calculatedIndex = (index % this.columns) + (Math.floor(index / (this.rows * this.columns)) * this.columns);\n } else if (this.order === NgxGalleryOrder.Row && this.remainingCount) {\n calculatedIndex = index % this.columns;\n } else {\n calculatedIndex = index % Math.ceil(this.images.length / this.rows);\n }\n\n return this.getThumbnailPosition(calculatedIndex, this.columns);\n }\n\n getThumbnailTop(index: number): SafeStyle {\n let calculatedIndex;\n\n if (this.order === NgxGalleryOrder.Column) {\n calculatedIndex = index % this.rows;\n } else if (this.order === NgxGalleryOrder.Page) {\n calculatedIndex = Math.floor(index / this.columns) - (Math.floor(index / (this.rows * this.columns)) * this.rows);\n } else if (this.order === NgxGalleryOrder.Row && this.remainingCount) {\n calculatedIndex = Math.floor(index / this.columns);\n } else {\n calculatedIndex = Math.floor(index / Math.ceil(this.images.length / this.rows));\n }\n\n return this.getThumbnailPosition(calculatedIndex, this.rows);\n }\n\n getThumbnailWidth(): SafeStyle {\n return this.getThumbnailDimension(this.columns);\n }\n\n getThumbnailHeight(): SafeStyle {\n return this.getThumbnailDimension(this.rows);\n }\n\n setThumbnailsPosition(): void {\n this.thumbnailsLeft = - ((100 / this.columns) * this.index) + '%';\n\n this.thumbnailsMarginLeft = - ((this.margin - (((this.columns - 1)\n * this.margin) / this.columns)) * this.index) + 'px';\n }\n\n setDefaultPosition(): void {\n this.thumbnailsLeft = '0px';\n this.thumbnailsMarginLeft = '0px';\n }\n\n canShowArrows(): boolean {\n if (this.remainingCount) {\n return false;\n } else if (this.arrows && this.images && this.images.length > this.getVisibleCount()\n && (!this.arrowsAutoHide || this.mouseenter)) {\n return true;\n } else {\n return false;\n }\n }\n\n validateIndex(): void {\n if (this.images) {\n let newIndex;\n\n if (this.order === NgxGalleryOrder.Column) {\n newIndex = Math.floor(this.selectedIndex / this.rows);\n } else {\n newIndex = this.selectedIndex % Math.ceil(this.images.length / this.rows);\n }\n\n if (this.remainingCount) {\n newIndex = 0;\n }\n\n if (newIndex < this.index || newIndex >= this.index + this.columns) {\n const maxIndex = this.getMaxIndex() - this.columns;\n this.index = newIndex > maxIndex ? maxIndex : newIndex;\n\n this.setThumbnailsPosition();\n }\n }\n }\n\n getSafeUrl(image: string | SafeResourceUrl ): SafeStyle {\n return this.sanitization.bypassSecurityTrustStyle(this.helperService.getBackgroundUrl(image as string));\n }\n\n private getThumbnailPosition(index: number, count: number): SafeStyle {\n return this.getSafeStyle('calc(' + ((100 / count) * index) + '% + '\n + ((this.margin - (((count - 1) * this.margin) / count)) * index) + 'px)');\n }\n\n private getThumbnailDimension(count: number): SafeStyle {\n if (this.margin !== 0) {\n return this.getSafeStyle('calc(' + (100 / count) + '% - '\n + (((count - 1) * this.margin) / count) + 'px)');\n } else {\n return this.getSafeStyle('calc(' + (100 / count) + '% + 1px)');\n }\n }\n\n private getMaxIndex(): number {\n if (this.order === NgxGalleryOrder.Page) {\n let maxIndex = (Math.floor(this.images.length / this.getVisibleCount()) * this.columns);\n\n if (this.images.length % this.getVisibleCount() > this.columns) {\n maxIndex += this.columns;\n } else {\n maxIndex += this.images.length % this.getVisibleCount();\n }\n\n return maxIndex;\n } else {\n return Math.ceil(this.images.length / this.rows);\n }\n }\n\n private getVisibleCount(): number {\n return this.columns * this.rows;\n }\n\n private getSafeStyle(value: string): SafeStyle {\n return this.sanitization.bypassSecurityTrustStyle(value);\n }\n}\n","<div class=\"ngx-gallery-thumbnails-wrapper ngx-gallery-thumbnail-size-{{size}}\">\n <div class=\"ngx-gallery-thumbnails\"\n [style.transform]=\"'translateX(' + thumbnailsLeft + ')'\"\n [style.marginLeft]=\"thumbnailsMarginLeft\">\n @for (image of getImages(); track image; let i = $index) {\n <a\n [ngClass]=\"{ 'ngx-gallery-active': i === selectedIndex, 'ngx-gallery-clickable': clickable }\"\n (click)=\"handleClick($event, i)\"\n [href]=\"hasLink(i) ? links[i] : '#'\"\n [target]=\"linkTarget\" class=\"ngx-gallery-thumbnail\"\n [style.background-image]=\"getSafeUrl(image)\"\n [style.width]=\"getThumbnailWidth()\"\n [style.height]=\"getThumbnailHeight()\"\n [style.left]=\"getThumbnailLeft(i)\"\n [style.top]=\"getThumbnailTop(i)\"\n [attr.aria-label]=\"labels[i]\">\n <div class=\"ngx-gallery-icons-wrapper\">\n @for (action of actions; track action.titleText) {\n <ngx-gallery-action\n [icon]=\"action.icon\"\n [disabled]=\"action.disabled\"\n [titleText]=\"action.titleText\"\n (onClick)=\"action.onClick($event, i)\">\n </ngx-gallery-action>\n }\n </div>\n @if (remainingCount && remainingCountValue && (i === (rows * columns) - 1)) {\n <div class=\"ngx-gallery-remaining-count-overlay\"\n >\n <span class=\"ngx-gallery-remaining-count\">+{{remainingCountValue}}</span>\n </div>\n }\n </a>\n }\n </div>\n</div>\n@if (canShowArrows()) {\n <ngx-gallery-arrows\n (onPrevClick)=\"moveLeft()\"\n (onNextClick)=\"moveRight()\"\n [prevDisabled]=\"!canMoveLeft()\"\n [nextDisabled]=\"!canMoveRight()\"\n [arrowPrevIcon]=\"arrowPrevIcon\"\n [arrowNextIcon]=\"arrowNextIcon\">\n </ngx-gallery-arrows>\n}\n","export class NgxGalleryImageSize {\n static Cover = 'cover';\n static Contain = 'contain';\n}\n","import { NgxGalleryImageSize } from './models/ngx-gallery-image-size.model';\nimport { NgxGalleryOptions } from './models/ngx-gallery-options.model';\nimport { NgxGalleryDimensions } from './utils/ngx-gallery-dimensions.interface';\n\nexport class CcCustomOptions {\n\n dimensions: NgxGalleryDimensions = {\n box: { width: 0, height: 0 },\n image: { width: 0, height: 0 },\n thumbnail: { width: 0, height: 0 },\n };\n\n private originalOptions: NgxGalleryOptions[];\n private options: NgxGalleryOptions[];\n private numberOfMedia: number;\n\n private boxPadding = 10;\n private boxBorder = 3;\n private galleryLayout = {\n border: this.boxBorder + 'px grey solid',\n padding: this.boxPadding + 'px',\n // TODO: move into css as it is not dynamic\n 'background-color': '#D8D8D8',\n };\n\n private defaultOptionsLargeScreen: NgxGalleryOptions = {\n width: '400px', // originally 400\n imageSize: NgxGalleryImageSize.Contain,\n imagePercent: 88.6, // before: 80\n imageDescription: true,\n imageInfinityMove: false,\n imageArrows: false,\n ccpImageAsLink: true,\n image: true,\n lazyLoading: true,\n thumbnailsAsLinks: true,\n ccpPreviewImageAsLink: true,\n previewDescription: true,\n previewZoom: true,\n previewAutoPlay: false, // setting to true needs coding in preview component!\n imageAutoPlay: false, // parameter set by author dynamically TODO\n thumbnailsColumns: 3,\n thumbnailsMoveSize: 3,\n thumbnailSize: NgxGalleryImageSize.Contain\n };\n\n private defaultOptionsSmallScreen: NgxGalleryOptions = {\n breakpoint: 1100,\n thumbnailsColumns: 2,\n thumbnailsMoveSize: 2,\n image: false, // small screens - do not show image\n };\n\n constructor(initialOptions: NgxGalleryOptions[], initialNumberOfMedia: number) {\n this.numberOfMedia = initialNumberOfMedia;\n this.originalOptions = initialOptions;\n this.options = this.prepareOptions();\n }\n\n setOriginalOptions(originalOptions: NgxGalleryOptions[]) {\n this.originalOptions = originalOptions;\n this.options = this.prepareOptions();\n }\n\n setNumberOfMedia(numberOfMedia: number) {\n this.numberOfMedia = numberOfMedia;\n this.options = this.prepareOptions();\n }\n\n getOptions(): NgxGalleryOptions[] {\n return this.options;\n }\n\n private prepareOptions(): NgxGalleryOptions[] {\n const optionsForLargeScreens = this.getOptionsForNonSmallScreens(this.originalOptions.find(option => !option.breakpoint) || {});\n const optionsForSmallScreens = this.getOptionsForSmallScreens(this.originalOptions.find(option => !!option.breakpoint) || {});\n\n return [\n optionsForLargeScreens,\n optionsForSmallScreens,\n ];\n }\n\n private getOptionsForNonSmallScreens(options: NgxGalleryOptions): NgxGalleryOptions {\n const optionsForLargeScreens: NgxGalleryOptions = { ...this.defaultOptionsLargeScreen, ...options };\n\n // calc dimensions\n const boxWidth = parseFloat(optionsForLargeScreens.width);\n this.calcDimensions(boxWidth, optionsForLargeScreens.thumbnailsColumns);\n\n const customOptions = {\n width: this.dimensions.box.width + 'px',\n height: this.dimensions.box.height + 'px',\n ccpBoxLayout: this.galleryLayout,\n ccpImageWidth: this.dimensions.image.width,\n ccpImageHeight: this.dimensions.image.height,\n thumbnails: this.numberOfMedia > 1,\n thumbnailsPercent: this.getThumbnailsPercent(optionsForLargeScreens.thumbnailsColumns),\n thumbnailMargin: this.getThumbnailMargin(),\n };\n\n return { ...customOptions, ...optionsForLargeScreens };\n }\n\n private getOptionsForSmallScreens(options: NgxGalleryOptions): NgxGalleryOptions {\n const optionsForSmallScreens: NgxGalleryOptions = { ...this.defaultOptionsSmallScreen, ...options };\n\n const boxForSmallScreen = this.calcBoxForSmallScreens(optionsForSmallScreens.thumbnailsColumns);\n const customOptions = {\n width: boxForSmallScreen.width + 'px',\n height: boxForSmallScreen.height + 'px',\n image: this.numberOfMedia <= 1,\n };\n\n return { ...optionsForSmallScreens, ...customOptions };\n }\n\n private calcDimensions(boxWidth: number, thumbnailColumns: number) {\n const boxAdjustment = 2 * this.boxPadding + 2 * this.boxBorder;\n const showThumbnails = this.numberOfMedia > 1;\n\n const box = {\n width: boxWidth,\n height: boxWidth,\n };\n\n const image = {\n width: box.width - boxAdjustment,\n height: box.height - boxAdjustment,\n };\n\n const thumbnail = {\n width: 0,\n height: 0,\n };\n\n if (showThumbnails) {\n thumbnail.width = Math.round((image.width - (thumbnailColumns - 1) * this.boxPadding) / thumbnailColumns);\n thumbnail.height = thumbnail.width;\n\n box.height = image.height + thumbnail.height + boxAdjustment + this.boxPadding;\n }\n\n this.dimensions = {\n box,\n image,\n thumbnail,\n };\n }\n\n private calcBoxForSmallScreens(thumbnailColumnsSmallScreen: number) {\n const showThumbnails = this.numberOfMedia > 1;\n\n if (showThumbnails) {\n return {\n height: this.dimensions.thumbnail.height + 2 * this.boxPadding + this.boxBorder, // not 2 * this.BoxBorder?\n width: this.dimensions.thumbnail.width * thumbnailColumnsSmallScreen\n + (1 + thumbnailColumnsSmallScreen) * this.boxPadding\n + 2 * this.boxBorder,\n };\n }\n\n return {\n width: this.dimensions.image.width,\n height: this.dimensions.image.height,\n };\n }\n\n private getThumbnailsPercent(thumbnailsColumns: number): number {\n return Math.round((100 - this.boxPadding) / thumbnailsColumns);\n }\n\n private getThumbnailMargin() {\n return this.boxPadding;\n }\n}\n","export class NgxGalleryLayout {\n static ThumbnailsTop = 'thumbnails-top';\n static ThumbnailsBottom = 'thumbnails-bottom';\n}\n","export interface INgxGalleryAction {\n icon: string;\n disabled?: boolean;\n titleText?: string;\n\n onClick: (event: Event, index: number) => void;\n}\n\nexport class NgxGalleryAction implements INgxGalleryAction {\n icon: string;\n disabled?: boolean;\n titleText?: string;\n\n onClick: (event: Event, index: number) => void;\n\n constructor(action: INgxGalleryAction) {\n this.icon = action.icon;\n this.disabled = action.disabled ? action.disabled : false;\n this.titleText = action.titleText ? action.titleText : '';\n\n this.onClick = action.onClick;\n }\n}\n","import { NgxGalleryAction } from './ngx-gallery-action.model';\nimport { NgxGalleryAnimation } from './ngx-gallery-animation.model';\nimport { NgxGalleryImageSize } from './ngx-gallery-image-size.model';\nimport { NgxGalleryLayout } from './ngx-gallery-layout.model';\nimport { NgxGalleryOrder } from './ngx-gallery-order.model';\n\nexport interface INgxGalleryOptions {\n width?: string;\n height?: string;\n breakpoint?: number;\n fullWidth?: boolean;\n layout?: string;\n startIndex?: number;\n linkTarget?: string;\n lazyLoading?: boolean;\n image?: boolean;\n imagePercent?: number;\n ccpBoxLayout?: object;\n imageArrows?: boolean;\n imageArrowsAutoHide?: boolean;\n imageSwipe?: boolean;\n imageAnimation?: string;\n imageSize?: string;\n imageAutoPlay?: boolean;\n imageAutoPlayInterval?: number;\n imageAutoPlayPauseOnHover?: boolean;\n imageInfinityMove?: boolean;\n imageActions?: NgxGalleryAction[];\n imageDescription?: boolean;\n imageBullets?: boolean;\n ccpImageWidth?: number;\n ccpImageHeight?: number;\n ccpImageAsLink?: boolean;\n ccpDisplayAsExternal?: boolean;\n thumbnails?: boolean;\n thumbnailsColumns?: number;\n thumbnailsRows?: number;\n thumbnailsPercent?: number;\n thumbnailsMargin?: number;\n thumbnailsArrows?: boolean;\n thumbnailsArrowsAutoHide?: boolean;\n thumbnailsSwipe?: boolean;\n thumbnailsMoveSize?: number;\n thumbnailsOrder?: NgxGalleryOrder;\n thumbnailsRemainingCount?: boolean;\n thumbnailsAsLinks?: boolean;\n thumbnailMargin?: number;\n thumbnailSize?: string;\n thumbnailActions?: NgxGalleryAction[];\n preview?: boolean;\n previewDescription?: boolean;\n previewSwipe?: boolean;\n previewFullscreen?: boolean;\n previewForceFullscreen?: boolean;\n previewCloseOnClick?: boolean;\n previewCloseOnEsc?: boolean;\n previewKeyboardNavigation?: boolean;\n previewAnimation?: boolean;\n previewAutoPlay?: boolean;\n previewAutoPlayInterval?: number;\n previewAutoPlayPauseOnHover?: boolean;\n previewInfinityMove?: boolean;\n previewZoom?: boolean;\n previewZoomStep?: number;\n previewZoomMax?: number;\n previewZoomMin?: number;\n previewRotate?: boolean;\n previewDownload?: boolean;\n ccpPreviewCustom?: (index: number) => void;\n previewBullets?: boolean;\n previewFullSize?: boolean;\n ccpPreviewImageAsLink?: boolean;\n arrowPrevIcon?: string;\n arrowNextIcon?: string;\n closeIcon?: string;\n fullscreenIcon?: string;\n // interactiveIcon?: string;\n spinnerIcon?: string;\n zoomInIcon?: string;\n zoomOutIcon?: string;\n rotateLeftIcon?: string;\n rotateRightIcon?: string;\n downloadIcon?: string;\n actions?: NgxGalleryAction[];\n}\n\nexport class NgxGalleryOptions implements INgxGalleryOptions {\n width?: string;\n height?: string;\n breakpoint?: number;\n fullWidth?: boolean;\n layout?: string;\n startIndex?: number;\n linkTarget?: string;\n lazyLoading?: boolean;\n image?: boolean;\n ccpImageWidth?: number;\n ccpImageHeight?: number;\n ccpDisplayAsExternal?: boolean;\n imagePercent?: number;\n ccpBoxLayout?: object;\n imageArrows?: boolean;\n imageArrowsAutoHide?: boolean;\n imageSwipe?: boolean;\n imageAnimation?: string;\n imageSize?: string;\n imageAutoPlay?: boolean;\n imageAutoPlayInterval?: number;\n imageAutoPlayPauseOnHover?: boolean;\n imageInfinityMove?: boolean;\n imageActions?: NgxGalleryAction[];\n imageDescription?: boolean;\n imageBullets?: boolean;\n ccpImageAsLink?: boolean;\n thumbnails?: boolean;\n thumbnailsColumns?: number;\n thumbnailsRows?: number;\n thumbnailsPercent?: number;\n thumbnailsMargin?: number;\n thumbnailsArrows?: boolean;\n thumbnailsArrowsAutoHide?: boolean;\n thumbnailsSwipe?: boolean;\n thumbnailsMoveSize?: number;\n thumbnailsOrder?: NgxGalleryOrder;\n thumbnailsRemainingCount?: boolean;\n thumbnailsAsLinks?: boolean;\n thumbnailMargin?: number;\n thumbnailSize?: string;\n thumbnailActions?: NgxGalleryAction[];\n preview?: boolean;\n previewDescription?: boolean;\n previewSwipe?: boolean;\n previewFullscreen?: boolean;\n previewForceFullscreen?: boolean;\n previewCloseOnClick?: boolean;\n previewCloseOnEsc?: boolean;\n previewKeyboardNavigation?: boolean;\n previewAnimation?: boolean;\n previewAutoPlay?: boolean;\n previewAutoPlayInterval?: number;\n previewAutoPlayPauseOnHover?: boolean;\n previewInfinityMove?: boolean;\n previewZoom?: boolean;\n previewZoomStep?: number;\n previewZoomMax?: number;\n previewZoomMin?: number;\n previewRotate?: boolean;\n previewDownload?: boolean;\n previewCustom?: (index: number) => void;\n previewBullets?: boolean;\n previewFullSize?: boolean;\n ccpPreviewImageAsLink?: boolean;\n arrowPrevIcon?: string;\n arrowNextIcon?: string;\n closeIcon?: string;\n // interactiveIcon?: string;\n fullscreenIcon?: string;\n spinnerIcon?: string;\n zoomInIcon?: string;\n zoomOutIcon?: string;\n rotateLeftIcon?: string;\n rotateRightIcon?: string;\n downloadIcon?: string;\n actions?: NgxGalleryAction[];\n\n constructor(obj: INgxGalleryOptions) {\n\n const preventDefaults = obj.breakpoint === undefined ? false : true;\n\n const use = <T>(source: T, defaultValue: T): T =>\n obj && (source !== undefined || preventDefaults) ? source : defaultValue;\n\n this.breakpoint = use(obj.breakpoint, undefined);\n this.width = use(obj.width, '500px');\n this.height = use(obj.height, '400px');\n this.fullWidth = use(obj.fullWidth, false);\n this.layout = use(obj.layout, NgxGalleryLayout.ThumbnailsBottom);\n this.startIndex = use(obj.startIndex, 0);\n this.linkTarget = use(obj.linkTarget, '_blank');\n this.lazyLoading = use(obj.lazyLoading, true);\n\n this.image = use(obj.image, true);\n this.ccpImageWidth = use(obj.ccpImageWidth, 0);\n this.ccpImageHeight = use(obj.ccpImageHeight, 0);\n this.imagePercent = use(obj.imagePercent, 75);\n this.ccpBoxLayout = use(obj.ccpBoxLayout, {});\n this.imageArrows = use(obj.imageArrows, true);\n this.imageArrowsAutoHide = use(obj.imageArrowsAutoHide, false);\n this.imageSwipe = use(obj.imageSwipe, false);\n this.imageAnimation = use(obj.imageAnimation, NgxGalleryAnimation.Fade);\n this.imageSize = use(obj.imageSize, NgxGalleryImageSize.Cover);\n this.imageAutoPlay = use(obj.imageAutoPlay, false);\n this.imageAutoPlayInterval = use(obj.imageAutoPlayInterval, 2000);\n this.imageAutoPlayPauseOnHover = use(obj.imageAutoPlayPauseOnHover, false);\n this.imageInfinityMove = use(obj.imageInfinityMove, false);\n if (obj && obj.imageActions && obj.imageActions.length) {\n obj.imageActions = obj.imageActions.map(action => new NgxGalleryAction(action));\n }\n this.imageActions = use(obj.imageActions, []);\n this.imageDescription = use(obj.imageDescription, false);\n this.imageBullets = use(obj.imageBullets, false);\n this.ccpImageAsLink = use(obj.ccpImageAsLink, false);\n this.ccpDisplayAsExternal = use(obj.ccpDisplayAsExternal, false);\n\n this.thumbnails = use(obj.thumbnails, true);\n this.thumbnailsColumns = use(obj.thumbnailsColumns, 4);\n this.thumbnailsRows = use(obj.thumbnailsRows, 1);\n this.thumbnailsPercent = use(obj.thumbnailsPercent, 25);\n this.thumbnailsMargin = use(obj.thumbnailsMargin, 10);\n this.thumbnailsArrows = use(obj.thumbnailsArrows, true);\n this.thumbnailsArrowsAutoHide = use(obj.thumbnailsArrowsAutoHide, false);\n this.thumbnailsSwipe = use(obj.thumbnailsSwipe, false);\n this.thumbnailsMoveSize = use(obj.thumbnailsMoveSize, 1);\n this.thumbnailsOrder = use(obj.thumbnailsOrder, NgxGalleryOrder.Column);\n this.thumbnailsRemainingCount = use(obj.thumbnailsRemainingCount, false);\n this.thumbnailsAsLinks = use(obj.thumbnailsAsLinks, false);\n this.thumbnailMargin = use(obj.thumbnailMargin, 10);\n this.thumbnailSize = use(obj.thumbnailSize, NgxGalleryImageSize.Cover);\n if (obj && obj.thumbnailActions && obj.thumbnailActions.length) {\n obj.thumbnailActions = obj.thumbnailActions.map(action => new NgxGalleryAction(action));\n }\n this.thumbnailActions = use(obj.thumbnailActions, []);\n\n this.preview = use(obj.preview, true);\n this.previewDescription = use(obj.previewDescription, true);\n this.previewSwipe = use(obj.previewSwipe, false);\n this.previewFullscreen = use(obj.previewFullscreen, false);\n this.previewForceFullscreen = use(obj.previewForceFullscreen, false);\n this.previewCloseOnClick = use(obj.previewCloseOnClick, false);\n this.previewCloseOnEsc = use(obj.previewCloseOnEsc, false);\n this.previewKeyboardNavigation = use(obj.previewKeyboardNavigation, false);\n this.previewAnimation = use(obj.previewAnimation, true);\n this.previewAutoPlay = use(obj.previewAutoPlay, false);\n this.previewAutoPlayInterval = use(obj.previewAutoPlayInterval, 2000);\n this.previewAutoPlayPauseOnHover = use(obj.previewAutoPlayPauseOnHover, false);\n this.previewInfinityMove = use(obj.previewInfinityMove, false); this.previewZoom = use(obj.previewZoom, false);\n this.previewZoomStep = use(obj.previewZoomStep, 0.1);\n this.previewZoomMax = use(obj.previewZoomMax, 2);\n this.previewZoomMin = use(obj.previewZoomMin, 0.5);\n this.previewRotate = use(obj.previewRotate, false);\n this.previewDownload = use(obj.previewDownload, false);\n // this.previewCustom = use(obj.previewCustom, undefined);\n this.previewBullets = use(obj.previewBullets, false);\n this.previewFullSize = use(obj.previewFullSize, false);\n this.ccpPreviewImageAsLink = use(obj.ccpPreviewImageAsLink, false);\n\n this.arrowPrevIcon = use(obj.arrowPrevIcon, 'fa fa-arrow-circle-left');\n this.arrowNextIcon = use(obj.arrowNextIcon, 'fa fa-arrow-circle-right');\n this.closeIcon = use(obj.closeIcon, 'fa fa-times-circle');\n this.fullscreenIcon = use(obj.fullscreenIcon, 'fa fa-arrows-alt');\n this.spinnerIcon = use(obj.spinnerIcon, 'fa fa-spinner fa-pulse fa-3x fa-fw');\n // this.interactiveIcon = use(obj.interactiveIcon, 'fa fa-map-marker');\n this.zoomInIcon = use(obj.zoomInIcon, 'fa fa-search-plus');\n this.zoomOutIcon = use(obj.zoomOutIcon, 'fa fa-search-minus');\n this.rotateLeftIcon = use(obj.rotateLeftIcon, 'fa fa-undo');\n this.rotateRightIcon = use(obj.rotateRightIcon, 'fa fa-repeat');\n this.downloadIcon = use(obj.downloadIcon, 'fa fa-arrow-circle-down');\n\n if (obj && obj.actions && obj.actions.length) {\n obj.actions = obj.actions.map(action => new NgxGalleryAction(action));\n }\n this.actions = use(obj.actions, []);\n }\n}\n","import { ApplicationRef, Component, ComponentFactoryResolver, EmbeddedViewRef, EventEmitter, Injector, Input, OnChanges, Output, SimpleChanges, inject } from '@angular/core';\nimport { SafeResourceUrl } from '@angular/platform-browser';\n\nimport { NgxGalleryAction } from '../models/ngx-gallery-action.model';\nimport { NgxGalleryOrderedImage } from '../models/ngx-gallery-ordered-image.model';\nimport { NgxGalleryPreviewComponent } from '../ngx-gallery-preview/ngx-gallery-preview.component';\nimport { Arrow } from '../svg/arrow.model';\nimport { Icon } from '../svg/icon.model';\nimport { Point } from '../svg/point.model';\nimport { Polygon } from '../svg/polygon.model';\n\n@Component({\n selector: 'ngx-gallery-preview-loader',\n template: ``,\n styleUrls: ['./ngx-preview-loader.component.scss'],\n standalone: false\n})\n\nexport class PreviewLoaderComponent implements OnChanges {\n private componentFactoryResolver = inject(ComponentFactoryResolver);\n private appRef = inject(ApplicationRef);\n private injector = inject(Injector);\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private componentRef: any;\n preview: NgxGalleryPreviewComponent;\n\n @Input() onlyPreview: boolean;\n @Input() previewEnabled = false;\n @Input() prevIndex: number;\n @Input() images: string[] | SafeResourceUrl[];\n @Input() ordImages: NgxGalleryOrderedImage[];\n // TODO: use interface\n @Input() mediaInfos: object[];\n @Input() links: string[];\n @Input() descriptions: string[];\n @Input() types: string[];\n @Input() mtypes: string[];\n @Input() widths: number[];\n @Input() heights: number[];\n @Input() svgArrows: Arrow[][];\n @Input() svgIcons: Icon[][];\n @Input() svgPolygons: Polygon[][];\n @Input() svgTexts: Point[][];\n @Input() showDescription: boolean;\n @Input() swipe: boolean;\n @Input() fullscreen: boolean;\n @Input() forceFullscreen: boolean;\n @Input() closeOnClick: boolean;\n @Input() closeOnEsc: boolean;\n @Input() keyboardNavigation: boolean;\n @Input() arrowPrevIcon: string;\n @Input() arrowNextIcon: string;\n @Input() closeIcon: string;\n @Input() fullscreenIcon: string;\n @Input() spinnerIcon: string;\n @Input() autoPlay: boolean;\n @Input() autoPlayInterval: number;\n @Input() autoPlayPauseOnHover: boolean;\n @Input() infinityMove: boolean;\n @Input() interactive: boolean;\n @Input() hasSVGArrow: boolean;\n @Input() hasSVGPolygon: boolean;\n @Input() hasSVGIcon: boolean;\n @Input() hasSVGText: boolean;\n @Input() isSVGActive: boolean;\n @Input() zoom: boolean;\n @Input() zoomStep: number;\n @Input() zoomMax: number;\n @Input() zoomMin: number;\n @Input() interactiveIcon: string;\n @Input() zoomInIcon: string;\n @Input() zoomOutIcon: string;\n @Input() animation: boolean;\n @Input() actions: NgxGalleryAction[];\n @Input() rotate: boolean;\n @Input() rotateLeftIcon: string;\n @Input() rotateRightIcon: string;\n @Input() download: boolean;\n @Input() downloadIcon: string;\n @Input() bullets: string;\n @Input() name: string;\n @Input() openIndex = -1;\n @Input() isActive: boolean;\n\n @Output() onOpen = new EventEmitter();\n @Output() onClose = new EventEmitter();\n @Output() onActiveChange = new EventEmitter<number>();\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private domRefs: any[] = [];\n\n ngOnChanges(changes: SimpleChanges): void {\n if (this.componentRef) {\n this.componentRef.instance.onlyPreview = this.onlyPreview;\n this.componentRef.instance.previewEnabled = this.previewEnabled;\n this.componentRef.instance.prevIndex = this.prevIndex;\n this.componentRef.instance.images = this.images;\n this.componentRef.instance.ordImages = this.ordImages;\n this.componentRef.instance.mediaInfos = this.mediaInfos;\n this.componentRef.instance.links = this.links;\n this.componentRef.instance.descriptions = this.descriptions;\n this.componentRef.instance.types = this.types;\n this.componentRef.instance.mtypes = this.mtypes;\n this.componentRef.instance.widths = this.widths;\n this.componentRef.instance.heights = this.heights;\n this.componentRef.instance.svgArrows = this.svgArrows;\n this.componentRef.instance.svgIcons = this.svgIcons;\n this.componentRef.instance.svgPolygons = this.svgPolygons;\n this.componentRef.instance.svgTexts = this.svgTexts;\n this.componentRef.instance.showDescription = this.showDescription;\n this.componentRef.instance.swipe = this.swipe;\n this.componentRef.instance.fullscreen = this.fullscreen;\n this.componentRef.instance.forceFullscreen = this.forceFullscreen;\n this.componentRef.instance.closeOnClick = this.closeOnClick;\n this.componentRef.instance.closeOnEsc = this.closeOnEsc;\n this.componentRef.instance.keyboardNavigation = this.keyboardNavigation;\n this.componentRef.instance.arrowPrevIcon = this.arrowPrevIcon;\n this.componentRef.instance.arrowNextIcon = this.arrowNextIcon;\n this.componentRef.instance.closeIcon = this.closeIcon;\n this.componentRef.instance.fullscreenIcon = this.fullscreenIcon;\n this.componentRef.instance.spinnerIcon = this.spinnerIcon;\n this.componentRef.instance.autoPlay = this.autoPlay;\n this.componentRef.instance.autoPlayInterval = this.autoPlayInterval;\n this.componentRef.instance.autoPlayPauseOnHover = this.autoPlayPauseOnHover;\n this.componentRef.instance.infinityMove = this.infinityMove;\n this.componentRef.instance.interactive = this.interactive;\n this.componentRef.instance.hasSVGArrow = this.hasSVGArrow;\n this.componentRef.instance.hasSVGPolygon = this.hasSVGPolygon;\n this.componentRef.instance.hasSVGIcon = this.hasSVGIcon;\n this.componentRef.instance.hasSVGText = this.hasSVGText;\n this.componentRef.instance.isSVGActive = this.isSVGActive;\n this.componentRef.instance.zoom = this.zoom;\n this.componentRef.instance.zoomStep = this.zoomStep;\n this.componentRef.instance.zoomMax = this.zoomMax;\n this.componentRef.instance.zoomMin = this.zoomMin;\n this.componentRef.instance.interactiveIcon = this.interactiveIcon;\n this.componentRef.instance.zoomInIcon = this.zoomInIcon;\n this.componentRef.instance.zoomOutIcon = this.zoomOutIcon;\n this.componentRef.instance.animation = this.animation;\n this.componentRef.instance.actions = this.actions;\n this.componentRef.instance.rotate = this.rotate;\n this.componentRef.instance.rotateLeftIcon = this.rotateLeftIcon;\n this.componentRef.instance.rotateRightIcon = this.rotateRightIcon;\n this.componentRef.instance.download = this.download;\n this.componentRef.instance.downloadIcon = this.downloadIcon;\n this.componentRef.instance.bullets = this.bullets;\n this.componentRef.instance.name = this.name;\n this.componentRef.instance.openIndex = this.openIndex;\n this.componentRef.instance.isActive = this.isActive;\n this.componentRef.instance.onOpen.subscribe((event) => {\n this.onOpen.emit(event);\n });\n this.componentRef.instance.onClose.subscribe(() => {\n this.appRef.detachView(this.componentRef.hostView);\n this.componentRef.destroy();\n this.onClose.emit();\n });\n this.componentRef.instance.onActiveChange.subscribe((event) => {\n this.prevIndex = event;\n this.onActiveChange.emit(event);\n });\n if (this.isActive) {\n this.preview = (this.componentRef.instance as NgxGalleryPreviewComponent);\n this.preview.open(this.prevIndex);\n this.preview.ngOnChanges(changes);\n }\n }\n }\n\n public loadPreview() {\n const factory = this.componentFactoryResolver.resolveComponentFactory(NgxGalleryPreviewComponent);\n this.componentRef = factory.create(this.injector);\n this.appRef.attachView(this.componentRef.hostView);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const domElem = (this.componentRef.hostView as EmbeddedViewRef<any>).rootNodes[0] as HTMLElement;\n this.domRefs.push(domElem);\n const cdkOverlayContainers = document.getElementsByClassName('cdk-overlay-container');\n let parentElement: Element;\n if (cdkOverlayContainers && cdkOverlayContainers.length) {\n parentElement = cdkOverlayContainers.item(0);\n } else {\n parentElement = document.body;\n }\n parentElement.appendChild(domElem);\n }\n\n public closePreview() {\n this.domRefs.forEach(domRef => {\n domRef.remove();\n });\n this.domRefs = [];\n }\n}\n","import { AfterViewInit, Component, ElementRef, EventEmitter, HostBinding, Input, OnChanges, OnDestroy, OnInit, Output, SimpleChanges, ViewChild, inject } from '@angular/core';\nimport { SafeResourceUrl } from '@angular/platform-browser';\nimport { IOpenMediumHyperlinkEvent } from '@casus-campus/cc-support';\nimport { Subscription } from 'rxjs';\n\nimport { CcCustomOptions } from './cc-custom-options';\nimport { NgxGalleryAction } from './models/ngx-gallery-action.model';\nimport { NgxGalleryImage } from './models/ngx-gallery-image.model';\nimport { NgxGalleryLayout } from './models/ngx-gallery-layout.model';\nimport { NgxGalleryOptions } from './models/ngx-gallery-options.model';\nimport { NgxGalleryOrderedImage } from './models/ngx-gallery-ordered-image.model';\nimport { NgxGalleryHelperService } from './ngx-gallery-helper.service';\nimport { NgxGalleryImageComponent } from './ngx-gallery-image/ngx-gallery-image.component';\nimport { NgxGalleryThumbnailsComponent } from './ngx-gallery-thumbnails/ngx-gallery-thumbnails.component';\nimport { CcMediaService } from './utils/cc-media.service';\nimport { LogService } from './utils/logging.service';\nimport { PreviewLoaderComponent } from './utils/ngx-preview-loader.component';\n\n@Component({\n selector: 'ngx-gallery',\n templateUrl: './ngx-gallery.component.html',\n styleUrls: ['./ngx-gallery.component.scss'],\n providers: [NgxGalleryHelperService, CcMediaService],\n standalone: false\n})\nexport class NgxGalleryComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy {\n private myElement = inject(ElementRef);\n private logService = inject(LogService);\n ccMediaService = inject(CcMediaService);\n\n @Input() options: NgxGalleryOptions[];\n @Input() images: NgxGalleryImage[];\n @Input() name: string;\n\n @Output() imagesReady = new EventEmitter();\n @Output() onChange = new EventEmitter<{ index: number; image: NgxGalleryImage }>();\n @Output() previewOpen = new EventEmitter();\n @Output() previewClose = new EventEmitter();\n @Output() previewChange = new EventEmitter<{ index: number; image: NgxGalleryImage }>();\n @Output() mediumTargetOpen = new EventEmitter<IOpenMediumHyperlinkEvent>();\n @Output() externalLinkOpen = new EventEmitter();\n\n styleBox: object;\n prevIndex: number;\n smallImages: string[] | SafeResourceUrl[];\n mediumImages: NgxGalleryOrderedImage[];\n bigImages: string[] | SafeResourceUrl[];\n descriptions: string[];\n hasVideo: boolean;\n links: string[];\n labels: string[];\n types: string[] = [];\n mtypes: string[];\n widths: number[];\n heights: number[];\n imageWidth: number[];\n imageHeight: number[];\n imageVBox: string[];\n positionX: number[];\n positionY: number[];\n // TODO: use interface\n mediaInfos: object[];\n\n linkIds = {\n image: ['1108408', '1108413', '1108410', '1108411', '994043', '1120513'], // image\n audio: ['449544', '69378', '312031'], // audio\n video: ['70741', '670180', '952730', '247647', '1073360', '1073366', '987542', '1018554'], // video\n campus: ['1460438', '1460419'] // campus\n };\n customOptions: CcCustomOptions;\n\n selectedIndex = 0;\n\n externalLinkAction: NgxGalleryAction;\n prevAction: NgxGalleryAction;\n svgAction: NgxGalleryAction;\n\n isPDF = false;\n // TODO: this should be an option of an image\n isSVG = false;\n // TODO: rename to overlayVisible or similar\n isSVGActive = false;\n previewEnabled: boolean;\n\n currentOptions: NgxGalleryOptions;\n\n private breakpoint: number | undefined = undefined;\n private prevBreakpoint: number | undefined = undefined;\n private fullWidthTimeout: undefined | ReturnType<typeof setTimeout>;\n private subscriptions: Subscription[] = [];\n private previewsOpened: number[] = [];\n\n @ViewChild(PreviewLoaderComponent) previewLoader: PreviewLoaderComponent;\n @ViewChild(NgxGalleryImageComponent) image: NgxGalleryImageComponent;\n @ViewChild(NgxGalleryThumbnailsComponent) thubmnails: NgxGalleryThumbnailsComponent;\n\n @HostBinding('style.width') width: string;\n @HostBinding('style.height') height: string;\n @HostBinding('style.left') left: string;\n\n ngOnInit() {\n this.subscriptions.push(this.ccMediaService.openedMediumTargets$\n .subscribe(openedMedium => this.mediumTargetOpen.emit(openedMedium))\n );\n this.customOptions = new CcCustomOptions(this.options, this.images.length);\n this.initActions();\n this.initOptions();\n this.prepareSvgAndPdf();\n this.initImages();\n\n this.logService.log('NgxGalleryComponent.ngOnInit(' + this.name + ')', 'ccpBoxLayout - ' + this.currentOptions.ccpBoxLayout);\n this.logService.log('NgxGalleryComponent.ngOnInit(' + this.name + ')', 'selectedIndex - '\n + this.selectedIndex + ' / isPDF: ' + this.isPDF);\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n const optionsChanged = !!changes.options && !changes.options.firstChange && !!changes.options.currentValue;\n const imagesChanged = !!changes.images && !changes.images.firstChange && !!changes.images.currentValue;\n\n if (optionsChanged) {\n this.logService.log('NgxGalleryComponent.ngOnChanges(' + this.name + ')', 'optionsChanges ...');\n this.customOptions.setOriginalOptions(changes.options.currentValue);\n }\n\n if (imagesChanged) {\n this.logService.log('NgxGalleryComponent.ngOnChanges(' + this.name + ')', 'imagesChanged ...');\n this.customOptions.setNumberOfMedia(changes.images.currentValue.length);\n }\n\n if (optionsChanged || imagesChanged) {\n this.initOptions();\n this.prepareSvgAndPdf();\n this.initImages();\n }\n }\n\n ngAfterViewInit(): void {\n this.checkFullWidth();\n }\n\n ngOnDestroy() {\n this.subscriptions.forEach(subscription => subscription.unsubscribe());\n }\n\n // has to be modified due to external images (magnify) in iframe\n // @HostListener('window:resize', [ '$event' ]) onResize( event ) {\n onResize(): void {\n this.setBreakpoint();\n\n if (this.prevBreakpoint !== this.breakpoint) {\n this.setOptions();\n this.resetThumbnails();\n }\n\n if (this.currentOptions && this.currentOptions.fullWidth) {\n\n if (this.fullWidthTimeout) {\n clearTimeout(this.fullWidthTimeout);\n }\n\n this.fullWidthTimeout = setTimeout(() => {\n this.checkFullWidth();\n }, 200);\n }\n }\n\n getImageHeight(): string {\n return (this.currentOptions && this.currentOptions.thumbnails) ?\n this.currentOptions.imagePercent + '%' : '100%';\n }\n\n getThumbnailsHeight(): string {\n if (this.currentOptions && this.currentOptions.image) {\n return 'calc(' + this.currentOptions.thumbnailsPercent + '% - '\n + this.currentOptions.thumbnailsMargin + 'px)';\n } else {\n return '100%';\n }\n }\n\n getThumbnailsMarginTop(): string {\n if (this.currentOptions && this.currentOptions.layout === NgxGalleryLayout.ThumbnailsBottom) {\n return this.currentOptions.thumbnailsMargin + 'px';\n } else {\n return '0px';\n }\n }\n\n getThumbnailsMarginBottom(): string {\n if (this.currentOptions && this.currentOptions.layout === NgxGalleryLayout.ThumbnailsTop) {\n return this.currentOptions.thumbnailsMargin + 'px';\n } else {\n return '0px';\n }\n }\n\n openPreview(index: number): void {\n this.logService.log('NgxGalleryComponent.openPreview(' + this.name + ')', 'index: ' + index);\n // this could be simplified through previewCustom\n if (this.currentOptions && this.currentOptions.previewCustom) {\n this.currentOptions.previewCustom(index);\n } else {\n this.previewEnabled = true;\n // TODO: do we need this?\n this.styleBox = {};\n this.logService.log('NgxGalleryComponent.openPreview(' + this.name + ')', 'previewEnabled: ' + this.previewEnabled);\n\n if (this.previewLoader) {\n this.logService.log('NgxGalleryComponent.openPreview(' + this.name + ')', 'preview called ...');\n // TODO: do we need\n this.prevIndex = index;\n this.previewsOpened.push(index);\n this.previewLoader.loadPreview();\n } else {\n this.logService.log('NgxGalleryComponent.openPreview(' + this.name + ')', 'preview does not exist!!');\n if (this.images) {\n this.logService.log('NgxGalleryComponent.openPreview(' + this.name + ')', 'id: ' + this.images[index].id);\n this.logService.log('NgxGalleryComponent.openPreview(' + this.name + ')', 'bigimage.url: ' + this.bigImages[index]);\n }\n }\n }\n }\n\n onPreviewOpen(): void {\n this.previewOpen.emit();\n\n if (this.image && this.image.autoPlay) {\n this.image.stopAutoPlay();\n }\n }\n\n onPreviewClose(): void {\n this.previewEnabled = false;\n this.styleBox = this.currentOptions.ccpBoxLayout;\n this.logService.log('NgxGalleryComponent.onPreviewClose(' + this.name + ')', 'previewEnabled: ' + this.previewEnabled);\n this.previewClose.emit();\n this.previewsOpened.pop();\n\n if (this.previewsOpened.length >= 1) {\n /*Reopens the nested preview to avoid a wrong initialisation of its actions,\n otherwise those would still refer to the already closed preview.*/\n this.openPreview(this.previewsOpened.pop());\n this.previewOpen.emit();\n } else {\n this.previewLoader.closePreview();\n }\n\n if (this.image && this.image.autoPlay) {\n this.image.startAutoPlay();\n }\n }\n\n selectFromImage(index: number) {\n this.select(index);\n }\n\n selectFromThumbnails(index: number) {\n this.select(index);\n\n if (this.currentOptions && this.currentOptions.thumbnails && this.currentOptions.preview\n && (!this.currentOptions.image || this.currentOptions.thumbnailsRemainingCount)) {\n this.openPreview(this.selectedIndex);\n }\n }\n\n show(index: number): void {\n this.select(index);\n }\n\n showNext(): void {\n this.image.showNext();\n }\n\n showPrev(): void {\n this.image.showPrev();\n }\n\n canShowNext(): boolean {\n if (this.images && this.currentOptions) {\n return (this.currentOptions.imageInfinityMove || this.selectedIndex < this.images.length - 1)\n ? true : false;\n } else {\n return false;\n }\n }\n\n canShowPrev(): boolean {\n if (this.images && this.currentOptions) {\n return (this.currentOptions.imageInfinityMove || this.selectedIndex > 0) ? true : false;\n } else {\n return false;\n }\n }\n\n previewSelect(index: number) {\n this.show(index);\n this.previewChange.emit({ index, image: this.images[index] });\n }\n\n moveThumbnailsRight() {\n this.thubmnails.moveRight();\n }\n\n moveThumbnailsLeft() {\n this.thubmnails.moveLeft();\n }\n\n canMoveThumbnailsRight() {\n return this.thubmnails.canMoveRight();\n }\n\n canMoveThumbnailsLeft() {\n return this.thubmnails.canMoveLeft();\n }\n\n private initOptions(): void {\n this.options = this.customOptions.getOptions().map((opt) => new NgxGalleryOptions(opt));\n this.sortOptions();\n this.setBreakpoint();\n this.setOptions();\n this.styleBox = this.currentOptions.ccpBoxLayout;\n this.checkFullWidth();\n if (this.currentOptions) {\n this.selectedIndex = this.currentOptions.startIndex;\n }\n\n if (this.currentOptions && this.currentOptions.previewFullSize) {\n this.logService.log('NgxGalleryComponent.ngOnInit',\n 'TODO: implement previewFullSize (show image in full size and don\\'t scale it down)');\n }\n }\n\n private initImages(): void {\n this.images = this.ccMediaService.prepareMedia(this.images, this.customOptions.dimensions);\n this.setImages();\n\n if (this.images && this.images.length) {\n this.imagesReady.emit();\n }\n\n if (this.image) {\n this.image.reset(this.currentOptions.startIndex);\n }\n\n this.resetThumbnails();\n }\n\n private resetThumbnails() {\n if (this.thubmnails) {\n this.thubmnails.reset(this.currentOptions.startIndex as number);\n }\n }\n\n private select(index: number) {\n this.logService.log('NgxGalleryComponent.select(' + this.name + ')',\n 'index - ' + index + ' / selectedindex - ' + this.selectedIndex);\n const isNewMM = this.selectedIndex !== index;\n\n if (isNewMM) {\n this.selectedIndex = index;\n this.prepareSvgAndPdf();\n }\n\n this.onChange.emit({\n index,\n image: this.images[index]\n });\n }\n\n private checkFullWidth(): void {\n if (this.currentOptions && this.currentOptions.fullWidth) {\n this.width = document.body.clientWidth + 'px';\n this.left = (-(document.body.clientWidth -\n this.myElement.nativeElement.parentNode.innerWidth) / 2) + 'px';\n }\n }\n\n private setImages(): void {\n const time = new Date().getMilliseconds();\n this.smallImages = this.images.map((img) => img.small as string);\n this.mediumImages = this.images.map((img, index) => new NgxGalleryOrderedImage({\n id: `${img.id}_${time}`,\n src: img.medium,\n autoplay: img.autoplay,\n loop: img.loop,\n poster: img.poster,\n urls: img.urls,\n index,\n addOns: img.addOns,\n }));\n\n for (const mediumImage of this.mediumImages) {\n if (mediumImage.urls[0]?.mimeType.includes('pdf')) {\n mediumImage.src = this.ccMediaService.getPdfImageUrl(mediumImage);\n }\n }\n\n this.logService.log('NgxGalleryComponent.setImages(' + this.name + ')', 'mediumImages initialized ...');\n this.bigImages = this.images.map(img => img.big);\n // TODO: html encoding - other possibility to decode?\n // TODO: why do we need this? couldn't we just use an own wrapper?\n this.descriptions = this.images.map(img => (img.description ? img.description.replace(/[\"'\\r\\n]/g, '') : ''));\n this.links = this.images.map(img => img.url);\n this.labels = this.images.map(img => img.label);\n this.types = this.images.map(img => img.type);\n this.widths = this.images.map(img => img.width);\n this.heights = this.images.map(img => img.height);\n this.mtypes = this.images.map(img => this.ccMediaService.getMultimediaType(img.type));\n this.hasVideo = this.ccMediaService.containsVideoOrAudio(this.types);\n\n\n this.mediaInfos = this.images.map(img => {\n const media = {\n link: img.url,\n type: img.type,\n width: img.width,\n height: img.height,\n bwidth: 0,\n bheight: 0,\n };\n if (this.ccMediaService.isAudio(img.type)) {\n media.bwidth = this.currentOptions.ccpImageWidth;\n // media['bheight'] = this.currentOptions.ccpImageHeight - 80;\n media.bheight = 60;\n } else if (this.ccMediaService.isVideo(img.type)) {\n // TODO: should the 80 be configurable?\n if (img.width > this.currentOptions.ccpImageWidth || img.height > this.currentOptions.ccpImageHeight - 80) {\n media.bwidth = this.currentOptions.ccpImageWidth;\n media.bheight = this.currentOptions.ccpImageHeight - 80;\n } else {\n media.bwidth = img.width || this.currentOptions.ccpImageWidth;\n media.bheight = img.height || this.currentOptions.ccpImageHeight - 80;\n }\n }\n return media;\n });\n\n // start of initialization svg and video: momentarily not active\n // if (this.types[0] === 'image/svg' || true) {\n // special video\n // image main screen initialization\n this.imageWidth = [];\n this.imageHeight = [];\n this.positionY = [];\n this.positionX = [];\n this.imageVBox = [];\n\n let i: number;\n for (i = 0; i < this.images.length; i++) {\n const maxheight = this.currentOptions.ccpImageHeight;\n const maxwidth = this.currentOptions.ccpImageWidth;\n const imgheight = this.images[i].height;\n const imgwidth = this.images[i].width;\n\n if (imgwidth === 0) {\n this.imageWidth[i] = 0;\n this.imageHeight[i] = 0;\n\n this.positionY[i] = 0;\n this.positionX[i] = 0;\n\n this.imageVBox[i] = '0 0 ' + imgwidth + ' ' + imgheight;\n\n } else {\n if (maxheight / imgheight < maxwidth / imgwidth) {\n this.imageHeight[i] = Math.min(maxheight, imgheight);\n this.imageWidth[i] = Math.round(imgwidth * this.imageHeight[i] / imgheight);\n } else {\n this.imageWidth[i] = Math.min(maxwidth, imgwidth);\n this.imageHeight[i] = Math.round(imgheight * this.imageWidth[i] / imgwidth);\n }\n\n this.positionY[i] = Math.round((maxheight - this.imageHeight[i]) / 2);\n this.positionX[i] = Math.round((maxwidth - this.imageWidth[i]) / 2);\n this.imageVBox[i] = '0 0 ' + imgwidth + ' ' + imgheight;\n }\n this.logService.log('NgxGalleryComponent.setImages(' + this.name + ')',\n i + ': id - ' + this.images[i].id + ' / type - ' + this.types[i] + ' / height - ' + imgheight + '/' + maxheight + '/'\n + this.imageHeight[i] + '/' + this.positionY[i]);\n this.logService.log('NgxGalleryComponent.setImages(' + this.name + ')',\n i + ': width - ' + imgwidth + '(imgwidth)/' + maxwidth + '(maxwidth)/'\n + this.imageWidth[i] + '(calc: imageWidth)/' + this.positionX[i] + '(positionX)');\n }\n // end of initialization svg and video: momentarily not active\n // }\n }\n\n private setBreakpoint(): void {\n this.prevBreakpoint = this.breakpoint;\n let breakpoints;\n\n if (typeof window !== 'undefined') {\n breakpoints = this.options.filter((opt) => opt.breakpoint >= window.innerWidth)\n .map((opt) => opt.breakpoint);\n }\n\n if (breakpoints && breakpoints.length) {\n this.breakpoint = breakpoints.pop();\n } else {\n this.breakpoint = undefined;\n }\n this.logService.log('NgxGalleryComponent.setBreakpoint(' + this.name + ')', 'breakpoint - ' + this.breakpoint);\n }\n\n private sortOptions(): void {\n this.options = [\n ...this.options.filter((a) => a.breakpoint === undefined),\n ...this.options\n .filter((a) => a.breakpoint !== undefined)\n .sort((a, b) => b.breakpoint - a.breakpoint)\n ];\n }\n\n private setOptions(): void {\n this.currentOptions = new NgxGalleryOptions({});\n\n this.options\n .filter((opt) => opt.breakpoint === undefined || opt.breakpoint >= this.breakpoint)\n .map((opt) => {\n this.logService.log('NgxGalleryComponent.setOptions(' + this.name + ')', '' + opt.breakpoint);\n this.combineOptions(this.currentOptions, opt);\n });\n\n this.width = this.currentOptions.width;\n this.height = this.currentOptions.height;\n }\n\n private combineOptions(first: NgxGalleryOptions, second: NgxGalleryOptions) {\n Object.keys(second).map((val) => {\n if (val === 'actions' || val === 'imageActions') {\n if (second[val] !== undefined) {\n second[val].push(this.svgAction);\n if (val === 'imageActions') {\n second[val].push(this.prevAction);\n if (!second[val].includes(this.externalLinkAction) && !this.options[0].ccpDisplayAsExternal) {\n second[val].push(this.externalLinkAction);\n }\n }\n }\n }\n first[val] = second[val] !== undefined ? second[val] : first[val];\n });\n }\n\n // icon initialization\n prepareSvgAndPdf(): void {\n this.logService.log('NgxGalleryComponent.initCmd(' + this.name + ')', 'starts ...');\n this.updateSvgState(this.selectedIndex);\n this.initPDF();\n }\n\n private initActions(): void {\n this.svgAction = this.svgAction || {\n icon: 'fa fa-map-marker',\n // TODO use method / variable on current image to get this information\n disabled: !this.isSVG,\n onClick: this.toggleActivation.bind(this),\n titleText: 'interactive'\n };\n this.prevAction = this.prevAction || {\n icon: 'fa fa-expand',\n onClick: this.openIconPreview.bind(this),\n titleText: 'full screen'\n };\n this.externalLinkAction = this.externalLinkAction || {\n icon: 'fa fa-external-link',\n onClick: this.handleExternalLinkAction.bind(this),\n titleText: 'extra window'\n };\n }\n\n private handleExternalLinkAction(event, index): void {\n if (!this.isPDF && this.mtypes[index] !== 'video') {\n this.externalLinkOpen.emit();\n } else if (this.mtypes[index] === 'video') {\n window.open(this.images[index].urls[0].url, '_blank');\n } else if (this.isPDF) {\n this.logService.log('NgxGalleryComponent.openPDF', index + ': ' + this.images[index].url);\n window.open(this.images[index].url, '_blank');\n }\n }\n\n updateSvgState(selectedIndex: number): void {\n this.isSVG = this.images[selectedIndex] &&\n this.images[selectedIndex].addOns &&\n !!this.images[selectedIndex].addOns.length;\n if (this.svgAction) {\n this.svgAction.disabled = !this.isSVG;\n }\n this.logService.log('NgxGalleryComponent.updateSvgState(' + this.name + ')', 'selectedIndex - ' + selectedIndex);\n }\n\n initPDF(): void {\n if (!!this.images && !!this.images.length) {\n this.isPDF = this.images[this.selectedIndex ? this.selectedIndex : 0] &&\n this.ccMediaService.isPDF(this.images[this.selectedIndex ? this.selectedIndex : 0].type);\n this.logService.log('NgxGalleryComponent.initPDF(' + this.name + ')', 'selectedIndex - ' + this.selectedIndex);\n }\n }\n\n openIconPreview(event, index): void {\n this.logService.log('NgxGalleryComponent.openIconPreview(' + this.name + ')', 'index - ' + index);\n this.openPreview(this.image.selectedIndex);\n }\n\n // TODO: rename to toggleOverlays\n toggleActivation(): void {\n // TODO: rename to overlaysVisible or similar\n this.isSVGActive = !this.isSVGActive;\n this.logService.log('NgxGalleryComponent.toggleActivation(' + this.name + ')', 'isSVGActive - ' + this.isSVGActive);\n // this.setSVG();\n }\n\n // get multimedia functions ...\n isExternalVideo(mtype: string): boolean {\n return this.ccMediaService.isExternalVideo(mtype);\n }\n}\n","\n<div class=\"ngx-gallery-layout {{currentOptions?.layout}}\" [class.preview-only]=\"!currentOptions?.image\" [ngStyle]=\"styleBox\">\n <!--\n currently resizing window does NOT lead to a resize event, if external video in an iframe is shown\n problem: maximizing and minimizing the video would not be possible!\n -->\n @if (ccMediaService.isExternalVideo(types[selectedIndex])) {\n } @else {\n <div (window:resize)=\"onResize()\"></div>\n }\n\n\n @if (currentOptions?.image) {\n <ngx-gallery-image\n [name]=\"name\"\n [style.height]=\"getImageHeight()\"\n [images]=\"mediumImages\"\n [imageWidth]=\"imageWidth\"\n [imageHeight]=\"imageHeight\"\n [imageVBox]=\"imageVBox\"\n [hasVideo]=\"hasVideo\"\n [positionX]=\"positionX\"\n [positionY]=\"positionY\"\n [links]=\"currentOptions?.ccpImageAsLink ? links : []\"\n [widths]=\"widths\"\n [heights]=\"heights\"\n [mediaInfos]=\"mediaInfos\"\n [types]=\"types\"\n [mtypes]=\"mtypes\"\n [isSVGActive]=\"isSVGActive\"\n [clickable]=\"currentOptions?.preview\"\n [selectedIndex]=\"selectedIndex\"\n [arrows]=\"currentOptions?.imageArrows\"\n [arrowsAutoHide]=\"currentOptions?.imageArrowsAutoHide\"\n [arrowPrevIcon]=\"currentOptions?.arrowPrevIcon\"\n [arrowNextIcon]=\"currentOptions?.arrowNextIcon\"\n [swipe]=\"currentOptions?.imageSwipe\"\n [animation]=\"currentOptions?.imageAnimation\"\n [size]=\"currentOptions?.imageSize\"\n [autoPlay]=\"currentOptions?.imageAutoPlay\"\n [autoPlayInterval]=\"currentOptions?.imageAutoPlayInterval\"\n [autoPlayPauseOnHover]=\"currentOptions?.imageAutoPlayPauseOnHover\"\n [infinityMove]=\"currentOptions?.imageInfinityMove\"\n [lazyLoading]=\"currentOptions?.lazyLoading\"\n [actions]=\"currentOptions?.imageActions\"\n [descriptions]=\"descriptions\"\n [showDescription]=\"currentOptions?.imageDescription\"\n [bullets]=\"currentOptions?.imageBullets\"\n (onClick)=\"openPreview($event)\"\n (onActiveChange)=\"selectFromImage($event)\">\n </ngx-gallery-image>\n }\n\n @if (currentOptions?.thumbnails) {\n <ngx-gallery-thumbnails\n [style.marginTop]=\"getThumbnailsMarginTop()\"\n [name]=\"name\"\n [style.marginBottom]=\"getThumbnailsMarginBottom()\"\n [style.height]=\"getThumbnailsHeight()\"\n [images]=\"smallImages\"\n [links]=\"currentOptions?.thumbnailsAsLinks ? links : []\"\n [labels]=\"labels\" [linkTarget]=\"currentOptions?.linkTarget\"\n [widths]=\"widths\"\n [heights]=\"heights\"\n [types]=\"types\"\n [selectedIndex]=\"selectedIndex\"\n [columns]=\"currentOptions?.thumbnailsColumns\"\n [rows]=\"currentOptions?.thumbnailsRows\"\n [margin]=\"currentOptions?.thumbnailMargin\"\n [arrows]=\"currentOptions?.thumbnailsArrows\"\n [arrowsAutoHide]=\"currentOptions?.thumbnailsArrowsAutoHide\"\n [arrowPrevIcon]=\"currentOptions?.arrowPrevIcon\"\n [arrowNextIcon]=\"currentOptions?.arrowNextIcon\"\n [clickable]=\"currentOptions?.image || currentOptions?.preview\"\n [swipe]=\"currentOptions?.thumbnailsSwipe\"\n [size]=\"currentOptions?.thumbnailSize\"\n [moveSize]=\"currentOptions?.thumbnailsMoveSize\"\n [order]=\"currentOptions?.thumbnailsOrder\"\n [remainingCount]=\"currentOptions?.thumbnailsRemainingCount\"\n [lazyLoading]=\"currentOptions?.lazyLoading\"\n [actions]=\"currentOptions?.thumbnailActions\"\n (onActiveChange)=\"selectFromThumbnails($event)\">\n </ngx-gallery-thumbnails>\n }\n\n <ngx-gallery-preview-loader\n #previewLoader\n [name]=\"name\"\n [prevIndex]=\"prevIndex\"\n [images]=\"bigImages\"\n [ordImages]=\"mediumImages\"\n [mediaInfos]=\"mediaInfos\"\n [links]=\"currentOptions?.ccpPreviewImageAsLink ? links : []\"\n [descriptions]=\"descriptions\"\n [widths]=\"widths\"\n [heights]=\"heights\"\n [types]=\"types\"\n [mtypes]=\"mtypes\"\n [showDescription]=\"currentOptions?.previewDescription\"\n [arrowPrevIcon]=\"currentOptions?.arrowPrevIcon\"\n [arrowNextIcon]=\"currentOptions?.arrowNextIcon\"\n [closeIcon]=\"currentOptions?.closeIcon\"\n [fullscreenIcon]=\"currentOptions?.fullscreenIcon\"\n [spinnerIcon]=\"currentOptions?.spinnerIcon\"\n [swipe]=\"currentOptions?.previewSwipe\"\n [fullscreen]=\"currentOptions?.previewFullscreen\"\n [forceFullscreen]=\"currentOptions?.previewForceFullscreen\"\n [closeOnClick]=\"currentOptions?.previewCloseOnClick\"\n [closeOnEsc]=\"currentOptions?.previewCloseOnEsc\"\n [keyboardNavigation]=\"currentOptions?.previewKeyboardNavigation\"\n [animation]=\"currentOptions?.previewAnimation\"\n [autoPlay]=\"currentOptions?.previewAutoPlay\"\n [autoPlayInterval]=\"currentOptions?.previewAutoPlayInterval\"\n [autoPlayPauseOnHover]=\"currentOptions?.previewAutoPlayPauseOnHover\"\n [infinityMove]=\"currentOptions?.previewInfinityMove\"\n [isSVGActive]=\"isSVGActive\"\n [zoom]=\"currentOptions?.previewZoom\" [zoomStep]=\"currentOptions?.previewZoomStep\"\n [zoomMax]=\"currentOptions?.previewZoomMax\" [zoomMin]=\"currentOptions?.previewZoomMin\"\n [zoomInIcon]=\"currentOptions?.zoomInIcon\" [zoomOutIcon]=\"currentOptions?.zoomOutIcon\"\n [actions]=\"currentOptions?.actions\"\n [rotate]=\"currentOptions?.previewRotate\"\n [rotateLeftIcon]=\"currentOptions?.rotateLeftIcon\"\n [rotateRightIcon]=\"currentOptions?.rotateRightIcon\"\n [download]=\"currentOptions?.previewDownload\"\n [downloadIcon]=\"currentOptions?.downloadIcon\"\n [bullets]=\"currentOptions?.previewBullets\"\n (onClose)=\"onPreviewClose()\" (onOpen)=\"onPreviewOpen()\"\n (onActiveChange)=\"previewSelect($event)\"\n [isActive]=\"previewEnabled\">\n </ngx-gallery-preview-loader>\n</div>","import { Injectable } from '@angular/core';\nimport { HammerGestureConfig } from '@angular/platform-browser';\n\n@Injectable()\nexport class CustomHammerConfig extends HammerGestureConfig {\n overrides = {\n pinch: { enable: false },\n rotate: { enable: false }\n };\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { HAMMER_GESTURE_CONFIG } from '@angular/platform-browser';\nimport { CcSupportModule } from '@casus-campus/cc-support';\nimport { NgxGalleryImageSvgComponent } from './image/ngx-gallery-image-svg.component';\nimport { NgxGalleryActionComponent } from './ngx-gallery-action/ngx-gallery-action.component';\nimport { NgxGalleryArrowsComponent } from './ngx-gallery-arrows/ngx-gallery-arrows.component';\nimport { NgxGalleryBulletsComponent } from './ngx-gallery-bullets/ngx-gallery-bullets.component';\nimport { NgxGalleryImageComponent } from './ngx-gallery-image/ngx-gallery-image.component';\nimport { NgxGalleryPreviewComponent } from './ngx-gallery-preview/ngx-gallery-preview.component';\nimport { NgxGalleryThumbnailsComponent } from './ngx-gallery-thumbnails/ngx-gallery-thumbnails.component';\nimport { NgxGalleryVideoComponent } from './ngx-gallery-video/ngx-gallery-video.component';\nimport { NgxGalleryComponent } from './ngx-gallery.component';\nimport { NgxGallerySvgArrowComponent } from './svg/ngx-gallery-svg-arrow.component';\nimport { NgxGallerySvgIconComponent } from './svg/ngx-gallery-svg-icon.component';\nimport { NgxGallerySvgPolygonComponent } from './svg/ngx-gallery-svg-polygon.component';\nimport { NgxGallerySvgTextComponent } from './svg/ngx-gallery-svg-text.component';\nimport { CustomHammerConfig } from './utils/custom-hammer-config.service';\nimport { PreviewLoaderComponent } from './utils/ngx-preview-loader.component';\nimport { UtilsScriptComponent } from './utils/utils-script.component';\n\n@NgModule({\n imports: [\n CommonModule, CcSupportModule\n ],\n declarations: [\n NgxGalleryActionComponent,\n NgxGalleryArrowsComponent,\n NgxGalleryBulletsComponent,\n NgxGalleryImageComponent,\n NgxGalleryThumbnailsComponent,\n NgxGalleryPreviewComponent,\n NgxGalleryComponent,\n // Custom\n NgxGallerySvgPolygonComponent,\n NgxGallerySvgIconComponent,\n NgxGallerySvgArrowComponent,\n NgxGallerySvgTextComponent,\n NgxGalleryImageSvgComponent,\n NgxGalleryVideoComponent,\n UtilsScriptComponent,\n PreviewLoaderComponent\n ],\n exports: [\n NgxGalleryComponent\n ],\n providers: [\n { provide: HAMMER_GESTURE_CONFIG, useClass: CustomHammerConfig }\n ]\n})\nexport class NgxGalleryModule { }\n","import { SafeResourceUrl } from '@angular/platform-browser';\nimport { IMediumAddOn } from '@casus-campus/cc-support';\n\nimport { VideoUrl } from '../utils/videourl.model';\n\nexport interface INgxGalleryImage {\n id?: string;\n small?: string | SafeResourceUrl;\n medium?: string | SafeResourceUrl;\n big?: string | SafeResourceUrl;\n poster?: string | SafeResourceUrl;\n description?: string;\n url?: string;\n label?: string;\n type?: string;\n width?: number;\n height?: number;\n autoplay?: boolean;\n loop?: boolean;\n urls?: VideoUrl[];\n addOns?: IMediumAddOn[];\n}\n\nexport class NgxGalleryImage implements INgxGalleryImage {\n id?: string;\n small?: string | SafeResourceUrl;\n medium?: string | SafeResourceUrl;\n big?: string | SafeResourceUrl;\n poster?: string | SafeResourceUrl;\n description?: string;\n url?: string;\n label?: string;\n type?: string;\n width?: number;\n height?: number;\n autoplay?: boolean;\n loop?: boolean;\n urls?: VideoUrl[];\n addOns?: IMediumAddOn[];\n\n constructor(obj: INgxGalleryImage) {\n this.id = obj.id;\n this.small = obj.small;\n this.medium = obj.medium;\n this.big = obj.big;\n this.poster = obj.poster;\n this.description = obj.description;\n this.url = obj.url;\n this.label = obj.label;\n this.type = obj.type;\n this.width = obj.width;\n this.height = obj.height;\n this.autoplay = obj.autoplay;\n this.loop = obj.loop;\n this.urls = obj.urls;\n this.addOns = obj.addOns;\n }\n}\n","/*\n * Public API Surface of ngx-gallery\n */\n\nexport * from './lib/ngx-gallery.module';\nexport * from './lib/ngx-gallery.component';\nexport * from './lib/ngx-gallery-helper.service';\n\nexport * from './lib/ngx-gallery-action/ngx-gallery-action.component';\nexport * from './lib/ngx-gallery-arrows/ngx-gallery-arrows.component';\nexport * from './lib/ngx-gallery-bullets/ngx-gallery-bullets.component';\nexport * from './lib/ngx-gallery-image/ngx-gallery-image.component';\nexport * from './lib/ngx-gallery-preview/ngx-gallery-preview.component';\nexport * from './lib/ngx-gallery-thumbnails/ngx-gallery-thumbnails.component';\n\nexport * from './lib/models/ngx-gallery-action.model';\nexport * from './lib/models/ngx-gallery-animation.model';\nexport * from './lib/models/ngx-gallery-image.model';\nexport * from './lib/models/ngx-gallery-image-size.model';\nexport * from './lib/models/ngx-gallery-options.model';\nexport * from './lib/models/ngx-gallery-order.model';\nexport * from './lib/models/ngx-gallery-ordered-image.model';\nexport * from './lib/models/ngx-gallery-layout.model';\n\n// Custom\nexport * from './lib/svg/ngx-gallery-svg-text.component';\nexport * from './lib/svg/ngx-gallery-svg-arrow.component';\nexport * from './lib/svg/ngx-gallery-svg-icon.component';\nexport * from './lib/svg/ngx-gallery-svg-polygon.component';\nexport * from './lib/image/ngx-gallery-image-svg.component';\nexport * from './lib/ngx-gallery-video/ngx-gallery-video.component';\nexport * from './lib/utils/utils-script.component';\nexport * from './lib/utils/ngx-preview-loader.component';\n\nexport * from './lib/cc-custom-options';\nexport * from './lib/utils/cc-media.service';\nexport * from './lib/utils/logging.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.NgxGallerySvgPolygonComponent","i2.NgxGallerySvgIconComponent","i3.NgxGallerySvgArrowComponent","i4.NgxGallerySvgTextComponent","i2.UtilsScriptComponent","i2.NgxGalleryActionComponent","i3.NgxGalleryArrowsComponent","i4.NgxGalleryBulletsComponent","i5.NgxGalleryImageSvgComponent","i6.NgxGalleryVideoComponent","i2.NgxGalleryImageComponent","i3.NgxGalleryThumbnailsComponent","i4.PreviewLoaderComponent"],"mappings":"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"}
1
+ {"version":3,"file":"casus-campus-ngx-gallery.mjs","sources":["../../../projects/ngx-gallery/src/lib/svg/arrow.model.ts","../../../projects/ngx-gallery/src/lib/svg/icon.model.ts","../../../projects/ngx-gallery/src/lib/svg/point.model.ts","../../../projects/ngx-gallery/src/lib/svg/polygon.model.ts","../../../projects/ngx-gallery/src/lib/utils/logging.service.ts","../../../projects/ngx-gallery/src/lib/utils/cc-media.service.ts","../../../projects/ngx-gallery/src/lib/svg/ngx-gallery-svg-polygon.component.ts","../../../projects/ngx-gallery/src/lib/svg/ngx-gallery-svg-polygon.component.html","../../../projects/ngx-gallery/src/lib/svg/ngx-gallery-svg-icon.component.ts","../../../projects/ngx-gallery/src/lib/svg/ngx-gallery-svg-icon.component.html","../../../projects/ngx-gallery/src/lib/svg/ngx-gallery-svg-arrow.component.ts","../../../projects/ngx-gallery/src/lib/svg/ngx-gallery-svg-arrow.component.html","../../../projects/ngx-gallery/src/lib/svg/ngx-gallery-svg-text.component.ts","../../../projects/ngx-gallery/src/lib/svg/ngx-gallery-svg-text.component.html","../../../projects/ngx-gallery/src/lib/image/ngx-gallery-image-svg.component.ts","../../../projects/ngx-gallery/src/lib/image/ngx-gallery-image-svg.component.html","../../../projects/ngx-gallery/src/lib/ngx-gallery-action/ngx-gallery-action.component.ts","../../../projects/ngx-gallery/src/lib/ngx-gallery-arrows/ngx-gallery-arrows.component.ts","../../../projects/ngx-gallery/src/lib/ngx-gallery-bullets/ngx-gallery-bullets.component.ts","../../../projects/ngx-gallery/src/lib/models/ngx-gallery-animation.model.ts","../../../projects/ngx-gallery/src/lib/ngx-gallery-helper.service.ts","../../../projects/ngx-gallery/src/lib/models/ngx-gallery-ordered-image.model.ts","../../../projects/ngx-gallery/src/lib/utils/utils-script.component.ts","../../../projects/ngx-gallery/src/lib/utils/utils-script.component.html","../../../projects/ngx-gallery/src/lib/ngx-gallery-video/ngx-gallery-video.component.ts","../../../projects/ngx-gallery/src/lib/ngx-gallery-video/ngx-gallery-video.component.html","../../../projects/ngx-gallery/src/lib/ngx-gallery-image/ngx-gallery-image.component.ts","../../../projects/ngx-gallery/src/lib/ngx-gallery-image/ngx-gallery-image.component.html","../../../projects/ngx-gallery/src/lib/ngx-gallery-preview/ngx-gallery-preview.component.ts","../../../projects/ngx-gallery/src/lib/ngx-gallery-preview/ngx-gallery-preview.component.html","../../../projects/ngx-gallery/src/lib/models/ngx-gallery-order.model.ts","../../../projects/ngx-gallery/src/lib/ngx-gallery-thumbnails/ngx-gallery-thumbnails.component.ts","../../../projects/ngx-gallery/src/lib/ngx-gallery-thumbnails/ngx-gallery-thumbnails.component.html","../../../projects/ngx-gallery/src/lib/models/ngx-gallery-image-size.model.ts","../../../projects/ngx-gallery/src/lib/cc-custom-options.ts","../../../projects/ngx-gallery/src/lib/models/ngx-gallery-layout.model.ts","../../../projects/ngx-gallery/src/lib/models/ngx-gallery-action.model.ts","../../../projects/ngx-gallery/src/lib/models/ngx-gallery-options.model.ts","../../../projects/ngx-gallery/src/lib/utils/ngx-preview-loader.component.ts","../../../projects/ngx-gallery/src/lib/ngx-gallery.component.ts","../../../projects/ngx-gallery/src/lib/ngx-gallery.component.html","../../../projects/ngx-gallery/src/lib/utils/custom-hammer-config.service.ts","../../../projects/ngx-gallery/src/lib/ngx-gallery.module.ts","../../../projects/ngx-gallery/src/lib/models/ngx-gallery-image.model.ts","../../../projects/ngx-gallery/src/public-api.ts","../../../projects/ngx-gallery/src/casus-campus-ngx-gallery.ts"],"sourcesContent":["import { Point } from './point.model';\n\n// TODO refactor to interface\nexport class Arrow {\n startP: Point;\n endP: Point;\n color: string;\n\n constructor(\n startP: Point,\n endP: Point,\n color: string\n ) {\n this.startP = startP;\n this.endP = endP;\n this.color = color;\n }\n\n getStartPoint(): Point {\n return this.startP;\n }\n\n getDestPoint(): Point {\n return this.endP;\n }\n\n getColor(): string {\n return this.color;\n }\n}\n","import { IMedium } from '@casus-campus/cc-support';\n\nimport { Point } from './point.model';\n\n// TODO refactor to interface\nexport class Icon {\n iconImageUrl: string;\n target: IMedium;\n description: string;\n point: Point;\n width: number;\n height: number;\n color: string;\n\n constructor(\n iconImageUrl: string,\n target: IMedium,\n description: string,\n point: Point,\n width: number,\n height: number,\n color: string\n ) {\n this.iconImageUrl = iconImageUrl;\n this.target = target;\n this.description = description;\n this.point = point;\n this.width = width;\n this.height = height;\n this.color = color;\n }\n\n public getPoint(): Point {\n return this.point;\n }\n\n public getIconImageUrl(): string {\n return this.iconImageUrl;\n }\n\n public getTarget(): IMedium {\n return this.target;\n }\n\n public getWidth(): number {\n return this.width;\n }\n\n public getDescription(): string {\n return this.description;\n }\n\n public getColor(): string {\n return this.color;\n }\n}\n","// TODO change to interface\nexport class Point {\n posx: number;\n posy: number;\n text?: string;\n color?: string;\n\n constructor(\n posx: number,\n posy: number,\n text?: string,\n color?: string\n ) {\n this.posx = posx;\n this.posy = posy;\n this.text = text || '';\n this.color = color || 'black';\n }\n\n public getPosX(): number {\n return this.posx;\n }\n\n public getPosY(): number {\n return this.posy;\n }\n\n public getText(): string {\n return this.text;\n }\n\n public getColor(): string {\n return this.color;\n }\n}\n","import { IMedium } from '@casus-campus/cc-support';\n\nimport { Point } from './point.model';\n\n// TODO change to interface\nexport class Polygon {\n text: string;\n points: Point[];\n target: IMedium;\n color: string;\n\n constructor(\n text: string,\n points: Point[],\n target: IMedium,\n color: string\n ) {\n this.text = text;\n this.points = points;\n this.target = target;\n this.color = color;\n }\n\n public getPoints(): Point[] {\n return this.points;\n }\n\n public getSVGPoints(): string {\n return [this.points[0], ...this.points]\n .map(point => point.getPosX() + ',' + point.getPosY())\n .join(' ');\n }\n\n public getSVGPointsPolyline(): string {\n return [this.points[0], ...this.points, this.points[0]]\n .map(point => point.getPosX() + ',' + point.getPosY())\n .join(' ');\n }\n\n public getText(): string {\n return this.text.trim();\n }\n\n public getColor(): string {\n return this.color;\n }\n}\n","import { Injectable } from '@angular/core';\n\n// TODO: change to decorator @log\n@Injectable({\n providedIn: 'root',\n})\nexport class LogService {\n\n private prioLevel: number;\n private PRIO_ERROR = 1;\n private PRIO_BASE = 0;\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n log(fName: string, msg: string, prioLevel?: number) {\n // console.log((new Date()).getTime() + ' ' + fName + ': ' + msg);\n }\n\n}\n","import { Injectable, inject } from '@angular/core';\nimport { CcSupportService, IMedium, IOpenMediumHyperlinkEvent } from '@casus-campus/cc-support';\nimport { BehaviorSubject } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { NgxGalleryImage } from '../models/ngx-gallery-image.model';\nimport { LogService } from './logging.service';\nimport { MediaDimension } from './media-dimension.interface';\nimport { NgxGalleryDimensions } from './ngx-gallery-dimensions.interface';\n\n\n@Injectable()\nexport class CcMediaService {\n private logService = inject(LogService);\n private ccSuportService = inject(CcSupportService);\n\n\n private readonly _openedMediumTargets$ = new BehaviorSubject<IOpenMediumHyperlinkEvent>(null);\n readonly openedMediumTargets$ = this._openedMediumTargets$.asObservable().pipe(filter(openedMedium => !!openedMedium));\n\n prepareMedia(media: NgxGalleryImage[], dimensions: NgxGalleryDimensions): NgxGalleryImage[] {\n return media.map(medium => this.addUrlsAndDescriptionToMedium(medium, dimensions));\n }\n\n containsVideoOrAudio(mimeTypes: string[]): boolean {\n const hasVideo = !!mimeTypes.find(mimeType => this.isVideo(mimeType) || this.isAudio(mimeType));\n return hasVideo;\n }\n\n isExternalVideo(mimeType: string): boolean {\n return 'video/exthtml5' === mimeType;\n }\n\n isPDF(mimeType: string): boolean {\n return this.getMultimediaType(mimeType) === 'pdf';\n }\n\n isVideo(mimeType: string): boolean {\n return this.getMultimediaType(mimeType) === 'video';\n }\n\n isAudio(mimeType: string): boolean {\n return this.getMultimediaType(mimeType) === 'audio';\n }\n\n isImage(mimeType: string): boolean {\n return this.getMultimediaType(mimeType) === 'image';\n }\n\n getMultimediaType(mimeType: string): string {\n if (!mimeType) {\n return 'image';\n }\n\n if (mimeType.startsWith('audio')) {\n return 'audio';\n }\n\n if (mimeType.startsWith('video')) {\n return 'video';\n }\n\n if (mimeType === 'application/pdf') {\n return 'pdf';\n }\n\n if (mimeType.indexOf('application/campus') >= 0) {\n return 'campus';\n }\n\n return 'image';\n }\n\n openMediumTarget(event: MouseEvent, medium: IMedium) {\n if (!medium) {\n return;\n }\n this._openedMediumTargets$.next({ sourceEvent: event, medium });\n this.logService.log('CcMediaService.openMediumLink', 'change state: ' + medium.id);\n }\n\n private addUrlsAndDescriptionToMedium(medium: NgxGalleryImage, dimensions: NgxGalleryDimensions) {\n return {\n small: this.getSmallImageUrl(medium, dimensions.thumbnail),\n medium: this.getMediumImageUrl(medium, dimensions.image),\n big: this.getBigImageUrl(medium),\n // TODO: for what do we need the poster url?\n poster: this.getPosterUrl(medium),\n ccpshortdescription: medium.description && medium.description.substr(0, 72),\n suffix: this.getSuffix(medium),\n // TODO: why only for pdf? do we need this anyway?\n url: medium.type === 'application/pdf' && this.getImageUrl(medium),\n ...medium,\n };\n }\n\n // image urls - getter methods\n\n private getSmallImageUrl(medium: NgxGalleryImage, dimension: MediaDimension): string {\n // console.log('NgxGalleryConfig.getSmallImageUrl - starts');\n let url: string;\n if (this.isImage(medium.type)) {\n url = this.getImageUrl(medium, dimension.width, dimension.height);\n } else {\n url = this.getMimeTypePlaceholderPath(medium.type);\n }\n return url;\n }\n\n private getMediumImageUrl(medium: NgxGalleryImage, dimension: MediaDimension): string {\n // console.log('NgxGalleryConfig.getMediumImageUrl - starts');\n let url: string;\n if (this.isImage(medium.type)) {\n url = this.getImageUrl(medium, dimension.width, dimension.height);\n } else if (this.isPDF(medium.type)) {\n url = this.getMimeTypePlaceholderPath(medium.type);\n } else {\n url = this.getGenericUrl(medium);\n }\n return url;\n }\n\n private getBigImageUrl(medium: NgxGalleryImage): string {\n // console.log('NgxGalleryConfig.getBigImageUrl - starts');\n let url: string;\n if (this.isImage(medium.type)) {\n url = this.getImageUrl(medium, medium.width, medium.height);\n } else if (this.isPDF(medium.type)) {\n url = this.getMimeTypePlaceholderPath(medium.type);\n } else {\n url = this.getGenericUrl(medium);\n }\n return url;\n }\n\n getPdfImageUrl(medium: NgxGalleryImage): string {\n const width = 400;\n const height = 300;\n const splitted = medium.urls[0].url.split('.');\n const url = splitted.slice(0, -1).join('.') + '_' + width + 'x' + height + '.' + 'png';\n return url;\n }\n\n private getPosterUrl(medium: NgxGalleryImage): string {\n let url: string;\n\n if (this.isAudio(medium.type) || this.isVideo(medium.type)) {\n url = this.getMimeTypePlaceholderPath(medium.type);\n // } else {\n // console.log('NgxGalleryConfig.getPosterUrl - should never be called: ' + medium.type);\n }\n return url;\n }\n\n private getSuffix(medium: NgxGalleryImage): string {\n const url = this.getImageUrl(medium);\n if (!url) {\n return;\n }\n return url.substring(url.lastIndexOf('.') + 1);\n }\n\n private getGenericUrl(medium: NgxGalleryImage): string {\n switch (medium.type) {\n case 'application/campus-html5-puzzle':\n case 'application/campus-html5-mouseover':\n return this.getCampusUrl(medium);\n\n default:\n return this.getImageUrl(medium);\n }\n }\n\n private getImageUrl(medium: NgxGalleryImage, width?: number, height?: number): string {\n if (!medium.urls || !medium.urls.length) {\n return;\n }\n\n const url = medium.urls[0].url;\n if (!width || !height) {\n return url;\n }\n\n let adjustedWidth = width;\n let adjustedHeight = height;\n\n if (medium.width >= medium.height) {\n adjustedWidth = Math.min(adjustedWidth, medium.width);\n } else {\n adjustedHeight = Math.min(adjustedHeight, medium.height);\n }\n // console.log('NGXGalleryConfig.getImageUrl: medium.name - ' + medium.name + ' / width x height: ' + width + 'x' + height);\n // console.log('NGXGalleryConfig.getImageUrl: url - ' + getImageUrl(url, adjustedWidth, adjustedHeight));\n return this.getAdjustedImageUrl(url, adjustedWidth, adjustedHeight);\n }\n\n private getAdjustedImageUrl(imageUrl: string, width: number, height: number) {\n const splitted = imageUrl.split('.');\n if (splitted[splitted.length - 1] !== 'svg') {\n return splitted.slice(0, -1).join('.') + '_' + width + 'x' + height + '.' + splitted.pop();\n }\n return imageUrl;\n }\n\n private getCampusUrl(medium: NgxGalleryImage): string {\n if (!medium.urls || !medium.urls.length) {\n return;\n }\n\n const url = medium.urls[0].url;\n return url + '.d/index.html';\n }\n\n // path used as placeholder image for text/html, pdf, audio and video\n getMimeTypePlaceholderPath(mimeType: string): string {\n const matIconName = this.ccSuportService.getIconForMimeType({mimeType, name: '', width: 0, height: 0, description: ''}) || 'cancel_presentation';\n return `assets/${matIconName}-24px.svg`;\n }\n\n}\n","import { Component, Input, OnChanges, OnInit, inject } from '@angular/core';\n\nimport { CcMediaService } from '../utils/cc-media.service';\nimport { LogService } from '../utils/logging.service';\nimport { Polygon } from './polygon.model';\n\n@Component({\n /* eslint-disable @angular-eslint/component-selector */\n selector: '[svg-polygon]',\n templateUrl: './ngx-gallery-svg-polygon.component.html',\n styleUrls: ['./ngx-gallery-svg-polygon.component.scss'],\n standalone: false\n})\n\nexport class NgxGallerySvgPolygonComponent implements OnInit, OnChanges {\n private logService = inject(LogService);\n ccMediaService = inject(CcMediaService);\n\n\n @Input() svgPolygons: Polygon[];\n\n ngOnInit() {\n this.logService.log('NgxGallerySvgPolygonComponent.ngOnInit', '...');\n }\n\n ngOnChanges() {\n this.logService.log('NgxGallerySvgPolygonComponent.ngOnChanges', '...');\n }\n\n open(event: MouseEvent, polygon: Polygon) {\n if (polygon.target) {\n this.logService.log('NgxGallerySVGPolygonComponent.open', 'linkId: ' + polygon.target.id);\n this.ccMediaService.openMediumTarget(event, polygon.target);\n }\n }\n}\n","@for (svgPolygon of svgPolygons; track svgPolygon) {\n <svg:a (click)=\"open($event, svgPolygon)\">\n <svg:polygon [attr.points]=\"svgPolygon.getSVGPoints()\" [attr.fill]=\"svgPolygon.getColor()\"\n [attr.stroke]=\"svgPolygon.getColor()\" class=\"ngx-gallery-svg-polygon\">\n </svg:polygon>\n </svg:a>\n}\n","import { Component, Input, OnChanges, OnInit, inject } from '@angular/core';\n\nimport { CcMediaService } from '../utils/cc-media.service';\nimport { LogService } from '../utils/logging.service';\nimport { Icon } from './icon.model';\n\n@Component({\n /* eslint-disable @angular-eslint/component-selector */\n selector: '[svg-icon]',\n templateUrl: './ngx-gallery-svg-icon.component.html',\n styleUrls: ['./ngx-gallery-svg-icon.component.scss'],\n standalone: false\n})\n\nexport class NgxGallerySvgIconComponent implements OnInit, OnChanges {\n private logService = inject(LogService);\n private ccMediaService = inject(CcMediaService);\n\n\n @Input() svgIcons: Icon[];\n @Input() scaleFactor = 1.0;\n\n widths: number[] = [];\n heights: number[] = [];\n\n ngOnInit() {\n this.logService.log('NgxGallerySvgIconComponent.ngOnInit', 'scaleFactor - ' + this.scaleFactor);\n this.setWidths();\n this.setHeights();\n }\n\n ngOnChanges() {\n this.logService.log('NgxGallerySvgIconComponent.onChange', 'scaleFactor - ' + this.scaleFactor);\n this.setWidths();\n this.setHeights();\n }\n\n open(event: MouseEvent, icon: Icon) {\n if (icon.target) {\n this.ccMediaService.openMediumTarget(event, icon.target);\n this.logService.log('NgxGallerySvgIconComponent.click', 'icon target: ' + icon.target.id);\n }\n }\n\n setWidths() {\n this.widths = this.svgIcons.map(icon => icon.width * this.scaleFactor);\n }\n\n setHeights() {\n this.heights = this.svgIcons.map(icon => icon.height * this.scaleFactor);\n }\n}\n","@for (svgIcon of svgIcons; track svgIcon; let i = $index) {\n <svg:g>\n <svg:rect class=\"ngx-gallery-svg-icon-bg\" [attr.x]=\"svgIcon.getPoint().getPosX()\"\n [attr.y]=\"svgIcon.getPoint().getPosY()\" rx=\"2\" ry=\"2\" [attr.width]=\"widths[i]\" [attr.height]=\"heights[i]\"\n fill=\"white\" [attr.stroke]=\"svgIcon.getColor()\" [attr.stroke-width]=\"2 * scaleFactor\">\n </svg:rect>\n <svg:a class=\"ngx-gallery-svg-icon\" (click)=\"open($event, svgIcon)\">\n <svg:image [attr.xlink:href]=\"svgIcon.getIconImageUrl()\" [attr.x]=\"svgIcon.getPoint().getPosX() + 1\"\n [attr.y]=\"svgIcon.getPoint().getPosY() + 1\" [attr.height]=\"heights[i] - 2\" [attr.width]=\"widths[i] - 2\">\n <!--<svg:title>{{ svgIcon.getDescription() }}</svg:title>-->\n </svg:image>\n </svg:a>\n </svg:g>\n}\n","import { Component, Input, OnInit, inject } from '@angular/core';\n\nimport { LogService } from '../utils/logging.service';\nimport { Arrow } from './arrow.model';\n\n@Component({\n /* eslint-disable @angular-eslint/component-selector */\n selector: '[svg-arrow]',\n templateUrl: './ngx-gallery-svg-arrow.component.html',\n standalone: false\n})\n\nexport class NgxGallerySvgArrowComponent implements OnInit {\n private logService = inject(LogService);\n\n\n @Input() svgArrows: Arrow[];\n\n ngOnInit() {\n this.logService.log('NgxGallerySvgArrowComponent.ngOnInit', '...');\n }\n}\n","@for (svgArrow of svgArrows; track svgArrow; let i = $index) {\n <svg:marker id=\"pf1-{{i}}\" viewBox=\"0 0 10 10\" refX=\"0\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10\"\n markerHeight=\"10\" orient=\"auto\">\n <svg:path d=\"M 0,0 l 10,5 l -10,5 z\" [attr.fill]=\"svgArrow.getColor()\" />\n </svg:marker>\n <svg:line [attr.x1]=\"svgArrow.getStartPoint().getPosX()\" [attr.stroke]=\"svgArrow.getColor()\"\n [attr.y1]=\"svgArrow.getStartPoint().getPosY()\" [attr.x2]=\"svgArrow.getDestPoint().getPosX()\"\n [attr.y2]=\"svgArrow.getDestPoint().getPosY()\" style=\"stroke-width:2;\"\n [attr.marker-end]=\"'url(#pf1-' + i +')'\" />\n}\n","import { Component, Input, OnChanges, OnInit, inject } from '@angular/core';\n\nimport { LogService } from '../utils/logging.service';\nimport { Point } from './point.model';\n\n@Component({\n /* eslint-disable @angular-eslint/component-selector */\n selector: '[svg-text]',\n templateUrl: './ngx-gallery-svg-text.component.html',\n styleUrls: ['./ngx-gallery-svg-text.component.scss'],\n standalone: false\n})\n\nexport class NgxGallerySvgTextComponent implements OnInit, OnChanges {\n private logService = inject(LogService);\n\n\n @Input() svgTexts: Point[];\n @Input() width: number;\n @Input() height: number;\n\n ngOnInit() {\n this.logService.log('NgxGallerySvgTextComponent.ngOnInit', 'count text: ' + this.svgTexts.length);\n }\n\n ngOnChanges() {\n this.logService.log('NgxGallerySvgTextComponent.onChange', 'count text: ' + this.svgTexts.length);\n }\n\n getCleanText(txt: string): string {\n return txt.replace(/<\\/?[^>]+(>|$)/g, '');\n }\n}\n","@for (svgText of svgTexts; track svgText) {\n <svg xmlns=\"http://www.w3.org/2000/svg\" [attr.width]=\"width\" [attr.height]=\"height\" [attr.x]=\"svgText.getPosX()\"\n [attr.y]=\"svgText.getPosY()\" [attr.fill]=\"svgText.getColor()\" style=\"overflow: visible;\">\n <foreignObject [attr.width]=\"width\" [attr.height]=\"height\" class=\"node\" style=\"overflow: visible;\">\n <body xmlns=\"http://www.w3.org/1999/xhtml\">\n <div style=\" dominant-baseline: hanging;\" title={{getCleanText(svgText.getText())}} [innerHTML]=\"svgText.getText()\">\n </div>\n </body>\n </foreignObject>\n </svg>\n}\n","import { AfterViewInit, ChangeDetectorRef, Component, ElementRef, Input, OnChanges, OnInit, SimpleChanges, ViewChild, inject } from '@angular/core';\nimport {\n IMedium,\n IMediumAddOn,\n IMediumAddOnArrow,\n IMediumAddOnHotSpot,\n IMediumAddOnIconHyperlink,\n IMediumAddOnText,\n MediumAddOnType,\n MediumUrlType,\n} from '@casus-campus/cc-support';\n\nimport { Arrow } from '../svg/arrow.model';\nimport { Icon } from '../svg/icon.model';\nimport { Point } from '../svg/point.model';\nimport { Polygon } from '../svg/polygon.model';\nimport { CcMediaService } from '../utils/cc-media.service';\nimport { LogService } from '../utils/logging.service';\n\n@Component({\n /* eslint-disable @angular-eslint/component-selector */\n selector: 'cc-imagesvg',\n templateUrl: './ngx-gallery-image-svg.component.html',\n styleUrls: ['./ngx-gallery-image-svg.component.scss'],\n standalone: false\n})\n\nexport class NgxGalleryImageSvgComponent implements OnInit, OnChanges, AfterViewInit {\n private logService = inject(LogService);\n private ccMediaService = inject(CcMediaService);\n private cdRef = inject(ChangeDetectorRef);\n\n\n @Input() width: number;\n @Input() height: number;\n @Input() viewBox: string;\n @Input() posLeft: string;\n @Input() posTop: string;\n @Input() zoomValue: string;\n @Input() animation: string;\n @Input() addOns: IMediumAddOn[];\n @Input() classGrab: boolean;\n @Input() styleTransform: string;\n @Input() preview: boolean;\n\n svgArrows: Arrow[] = [];\n svgPolygons: Polygon[] = [];\n svgIcons: Icon[] = [];\n svgTexts: Point[] = [];\n\n scaleFactor = 1;\n\n @ViewChild('svgElement', { static: true }) svgElement: ElementRef;\n\n ngOnInit() {\n this.logService.log('NgxGallerySvgComponent.ngOnInit', 'ngOnInit');\n this.handleAddOns();\n }\n\n ngAfterViewInit() {\n this.scaleFactor = this.calcScaleFactor();\n this.cdRef.detectChanges();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n this.logService.log('NgxGallerySvgComponent.onChange', 'ngOnChanges');\n if (changes.zoomValue && !changes.zoomValue.isFirstChange()) {\n this.scaleFactor = this.calcScaleFactor();\n }\n this.handleAddOns();\n }\n\n private handleAddOns(): void {\n this.svgArrows = this.addOns\n .filter(addOn => addOn.type === MediumAddOnType.Arrow)\n .map(addOn => this.mapToArrow(addOn as IMediumAddOnArrow))\n .filter(element => !!element);\n this.svgIcons = this.addOns\n .filter(addOn => addOn.type === MediumAddOnType.IconHyperlink)\n .map(addOn => this.mapToIcon(addOn as IMediumAddOnIconHyperlink))\n .filter(element => !!element);\n this.svgPolygons = this.addOns\n .filter(addOn => addOn.type === MediumAddOnType.HotSpot)\n .map(addOn => this.mapToPolygon(addOn as IMediumAddOnHotSpot))\n .filter(element => !!element);\n this.svgTexts = this.addOns\n .filter(addOn => addOn.type === MediumAddOnType.Text)\n .map(addOn => this.mapToText(addOn as IMediumAddOnText))\n .filter(element => !!element);\n }\n\n private mapToArrow(arrow: IMediumAddOnArrow): Arrow {\n return new Arrow(\n new Point(arrow.src.left, arrow.src.top, ''),\n new Point(arrow.dst.left, arrow.dst.top, ''),\n arrow.color\n );\n }\n\n private mockExternalHyperlinkMedium(iconHyperlink: IMediumAddOnIconHyperlink): IMedium {\n const url = iconHyperlink.externalUrl;\n if (!url) {\n return;\n }\n const schemeMatch = /^[a-zA-Z]+/.exec(url);\n const mimeType = 'url/' + (schemeMatch && schemeMatch[0] || 'relative');\n return {\n name: url,\n description: url,\n height: 0,\n width: 0,\n mimeType,\n urls: [{\n url,\n type: MediumUrlType.External,\n mimeType,\n }]\n };\n }\n\n private mapToIcon(iconHyperlink: IMediumAddOnIconHyperlink): Icon {\n const target = iconHyperlink.medium || this.mockExternalHyperlinkMedium(iconHyperlink);\n if (!target) {\n console.error('Found iconHyperlink without target or external url', iconHyperlink);\n return;\n }\n\n const placeholderPath = this.ccMediaService.getMimeTypePlaceholderPath(target.mimeType);\n return new Icon(\n placeholderPath,\n target,\n target.description,\n new Point(iconHyperlink.rect.left, iconHyperlink.rect.top, ''),\n iconHyperlink.rect.width,\n iconHyperlink.rect.height,\n iconHyperlink.color\n );\n }\n\n private mapToPolygon(hotSpot: IMediumAddOnHotSpot): Polygon {\n const points = hotSpot.polygon\n .map(point => new Point(point.left, point.top, ''));\n return new Polygon(\n (hotSpot.medium && hotSpot.medium.data) || '',\n points,\n hotSpot.medium,\n hotSpot.color\n );\n\n }\n\n private mapToText(text: IMediumAddOnText): Point {\n return new Point(\n text.position.left,\n text.position.top,\n text.text,\n text.color\n );\n }\n\n // Returns multiplicator for elements that should keep the same dimensions\n private calcScaleFactor(): number {\n\n const originalWidth = parseFloat(this.viewBox.split(' ')[2]);\n const currentWidth = this.svgElement.nativeElement.clientWidth * parseFloat(this.zoomValue);\n const widthScaleFactor = originalWidth / currentWidth;\n\n const originalHeight = parseFloat(this.viewBox.split(' ')[3]);\n const currentHeigth = this.svgElement.nativeElement.clientHeight * parseFloat(this.zoomValue);\n const heightScaleFactor = originalHeight / currentHeigth;\n\n return Math.max(widthScaleFactor, heightScaleFactor);\n }\n}\n","<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" preserveAspectRatio=\"xMidYMid meet\"\n [attr.width]=\"width\" [attr.height]=\"height\" [attr.viewBox]=\"viewBox\" class=\"ngx-gallery-center\"\n [class.animation]=\"animation\" [class.ngx-gallery-preview-svg]=\"preview\" [class.ngx-gallery-image-svg]=\"!preview\"\n [class.ngx-gallery-grab]=\"classGrab\" [style.transform]=\"styleTransform\" [style.left]=\"posLeft\" [style.top]=\"posTop\"\n (click)=\"$event.stopPropagation()\" #svgElement>\n @if (!!svgArrows.length) {\n <svg:g svg-arrow [svgArrows]=\"svgArrows\"></svg:g>\n }\n @if (!!svgPolygons.length) {\n <svg:g svg-polygon [svgPolygons]=\"svgPolygons\"></svg:g>\n }\n @if (!!svgIcons.length) {\n <svg:g svg-icon [svgIcons]=\"svgIcons\" [scaleFactor]=\"scaleFactor\"></svg:g>\n }\n @if (!!svgTexts.length) {\n <svg:g svg-text [svgTexts]=\"svgTexts\" [width]=\"width\" [height]=\"height\"></svg:g>\n }\n</svg>\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n selector: 'ngx-gallery-action',\n template: `\n <div class=\"ngx-gallery-icon\" [class.ngx-gallery-icon-disabled]=\"disabled\"\n aria-hidden=\"true\"\n title=\"{{ titleText }}\"\n (click)=\"handleClick($event)\">\n <i class=\"ngx-gallery-icon-content {{ icon }}\"></i>\n </div>`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false\n})\nexport class NgxGalleryActionComponent {\n @Input() icon: string;\n @Input() disabled = false;\n @Input() titleText = '';\n\n @Output() onClick: EventEmitter<Event> = new EventEmitter();\n\n handleClick(event: Event) {\n if (!this.disabled) {\n this.onClick.emit(event);\n }\n\n event.stopPropagation();\n event.preventDefault();\n }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n selector: 'ngx-gallery-arrows',\n template: `\n <div class=\"ngx-gallery-arrow-wrapper ngx-gallery-arrow-left\">\n <div class=\"ngx-gallery-icon ngx-gallery-arrow\"\n aria-hidden=\"true\"\n (click)=\"handlePrevClick()\"\n [class.ngx-gallery-disabled]=\"prevDisabled\">\n <i class=\"ngx-gallery-icon-content {{arrowPrevIcon}}\"></i>\n </div>\n </div>\n <div class=\"ngx-gallery-arrow-wrapper ngx-gallery-arrow-right\">\n <div class=\"ngx-gallery-icon ngx-gallery-arrow\"\n aria-hidden=\"true\"\n (click)=\"handleNextClick()\"\n [class.ngx-gallery-disabled]=\"nextDisabled\">\n <i class=\"ngx-gallery-icon-content {{arrowNextIcon}}\"></i>\n </div>\n </div>\n `,\n styleUrls: ['./ngx-gallery-arrows.component.scss'],\n standalone: false\n})\nexport class NgxGalleryArrowsComponent {\n @Input() prevDisabled: boolean;\n @Input() nextDisabled: boolean;\n @Input() arrowPrevIcon: string;\n @Input() arrowNextIcon: string;\n\n @Output() onPrevClick = new EventEmitter();\n @Output() onNextClick = new EventEmitter();\n\n handlePrevClick(): void {\n this.onPrevClick.emit();\n }\n\n handleNextClick(): void {\n this.onNextClick.emit();\n }\n}\n","import { Component, Input, Output, EventEmitter, } from '@angular/core';\n\n@Component({\n selector: 'ngx-gallery-bullets',\n template: `\n @for (bullet of getBullets(); track bullet; let i = $index) {\n <div class=\"ngx-gallery-bullet\"\n (click)=\"handleChange($event, i)\"\n [ngClass]=\"{ 'ngx-gallery-active': i === active }\">\n </div>\n }\n `,\n styleUrls: ['./ngx-gallery-bullets.component.scss'],\n standalone: false\n})\nexport class NgxGalleryBulletsComponent {\n @Input() count: number;\n @Input() active = 0;\n\n @Output() onChange = new EventEmitter();\n\n getBullets(): number[] {\n return Array(this.count);\n }\n\n handleChange(event: Event, index: number): void {\n this.onChange.emit(index);\n }\n}\n","export class NgxGalleryAnimation {\n static Fade = 'fade';\n static Slide = 'slide';\n static Rotate = 'rotate';\n static Zoom = 'zoom';\n}\n","import { ElementRef, Injectable, Renderer2, inject } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class NgxGalleryHelperService {\n private renderer = inject(Renderer2);\n\n\n private swipeHandlers: Map<string, (() => void)[]> = new Map<string, (() => void)[]>();\n\n manageSwipe(\n status: boolean,\n element: ElementRef,\n id: string,\n nextHandler: () => void,\n prevHandler: () => void\n ): void {\n\n const handlers = this.getSwipeHandlers(id);\n\n // swipeleft and swiperight are available only if hammerjs is included\n try {\n if (status && !handlers) {\n this.swipeHandlers.set(id, [\n this.renderer.listen(element.nativeElement, 'swipeleft', () => nextHandler()),\n this.renderer.listen(element.nativeElement, 'swiperight', () => prevHandler())\n ]);\n } else if (!status && handlers) {\n handlers.map((handler) => handler());\n this.removeSwipeHandlers(id);\n }\n } catch (_) {\n // Intentionally ignore error\n }\n }\n\n getBackgroundUrl(imageUrl: string) {\n if (!imageUrl) {\n return;\n }\n return 'url(\\'' + this.validateUrl(imageUrl) + '\\')';\n }\n\n private validateUrl(url: string): string {\n if (!url.replace) {\n return url;\n }\n return url.replace(new RegExp(' ', 'g'), '%20')\n .replace(new RegExp('\\'', 'g'), '%27');\n }\n\n private getSwipeHandlers(id: string): (() => void)[] | undefined {\n return this.swipeHandlers.get(id);\n }\n\n private removeSwipeHandlers(id: string): void {\n this.swipeHandlers.delete(id);\n }\n}\n","import { SafeResourceUrl } from '@angular/platform-browser';\nimport { IMediumAddOn } from '@casus-campus/cc-support';\n\nimport { VideoUrl } from '../utils/videourl.model';\n\nexport interface INgxGalleryOrderedImage {\n id?: string;\n src: string | SafeResourceUrl;\n autoplay?: boolean;\n loop?: boolean;\n poster?: string | SafeResourceUrl;\n urls?: VideoUrl[];\n index: number;\n addOns?: IMediumAddOn[];\n}\n\nexport class NgxGalleryOrderedImage implements INgxGalleryOrderedImage {\n id?: string;\n src: string | SafeResourceUrl;\n autoplay?: boolean;\n loop?: boolean;\n poster?: string | SafeResourceUrl;\n urls?: VideoUrl[];\n index: number;\n addOns?: IMediumAddOn[];\n\n constructor(obj: INgxGalleryOrderedImage) {\n this.id = obj.id;\n this.src = obj.src;\n this.autoplay = obj.autoplay || false;\n this.loop = obj.loop || false;\n this.poster = obj.poster;\n this.urls = obj.urls || [];\n this.index = obj.index;\n this.addOns = obj.addOns || [];\n }\n}\n","import { AfterViewInit, Component, ElementRef, Input, ViewChild } from '@angular/core';\n\n\n@Component({\n /* eslint-disable @angular-eslint/component-selector */\n selector: 'script-js',\n templateUrl: './utils-script.component.html',\n standalone: false\n})\nexport class UtilsScriptComponent implements AfterViewInit {\n\n @Input()\n src: string;\n\n @Input()\n type: string;\n\n @ViewChild('script', { static: true }) script: ElementRef;\n\n convertToScript() {\n const element = this.script.nativeElement;\n const script = document.createElement('script');\n script.type = this.type ? this.type : 'text/javascript';\n if (this.src) {\n script.src = this.src;\n }\n if (element.innerHTML) {\n script.innerHTML = element.innerHTML;\n }\n const parent = element.parentElement;\n parent.parentElement.replaceChild(script, parent);\n }\n\n ngAfterViewInit() {\n this.convertToScript();\n }\n}\n","<div #script style.display=\"none\">\n <ng-content></ng-content>\n</div>\n","import { Component, ElementRef, Input, OnChanges, OnInit, ViewChild, inject } from '@angular/core';\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser';\n\nimport { NgxGalleryOrderedImage } from '../models/ngx-gallery-ordered-image.model';\nimport { LogService } from '../utils/logging.service';\n\n@Component({\n /* eslint-disable @angular-eslint/component-selector */\n selector: 'cc-video',\n templateUrl: './ngx-gallery-video.component.html',\n styleUrls: ['./ngx-gallery-video.component.scss'],\n standalone: false\n})\n\nexport class NgxGalleryVideoComponent implements OnInit, OnChanges {\n private sanitization = inject(DomSanitizer);\n private logService = inject(LogService);\n\n @ViewChild('mmelement', { static: true }) mmelement: ElementRef;\n\n @Input() image: NgxGalleryOrderedImage;\n @Input() selectedIndex: number;\n @Input() showDescription: boolean;\n @Input() description: string;\n @Input() mediaInfo: object[];\n @Input() fitVideoToScreen: boolean;\n\n width: number;\n height: number;\n mediaAlignment: string;\n\n ngOnInit() {\n this.logService.log('NgxGalleryVideoComponent.ngOnInit', 'starts ...');\n this.updateDimensions();\n }\n\n ngOnChanges() {\n this.logService.log('NgxGalleryVideoComponent.onChange', 'starts ...');\n this.updateDimensions();\n }\n\n updateDimensions() {\n if (this.mediaInfo['type'].startsWith('video')) {\n this.width = this.mediaInfo['width'];\n this.height = this.mediaInfo['height'];\n this.mediaAlignment = 'center';\n\n const widthRatio = window.innerWidth / this.width;\n const heightRatio = window.innerHeight / this.height;\n const bestFitRatio = Math.min(widthRatio, heightRatio);\n\n if (this.fitVideoToScreen) {\n this.width *= bestFitRatio;\n this.height *= bestFitRatio;\n }\n\n } else {\n this.width = this.height = this.mediaAlignment = null;\n }\n }\n\n getSafeVideoUrl(video: string): SafeUrl {\n return this.sanitization.bypassSecurityTrustResourceUrl(video);\n }\n\n timeUpdate() {\n this.logService.log('NgxGalleryImageComponent.timeUpdate', this.mmelement.nativeElement.currentTime);\n }\n}\n","<div class=\"ngx-gallery-image\" [ngClass]=\"{ 'ngx-gallery-active': selectedIndex === image.index,\n 'ngx-gallery-inactive-left': selectedIndex > image.index,\n 'ngx-gallery-inactive-right': selectedIndex < image.index}\"\n [style.align-items]=\"mediaAlignment\">\n @if (selectedIndex === image.index) {\n <div id=\"player_{{image.id}}\" class=\"player\" title=\"{{showDescription && description ? description : ''}}\"\n [style.width.px]=\"width\" [style.height.px]=\"height\">\n <video #mmelement [width]=\"mediaInfo['bwidth']\" [height]=\"mediaInfo['bheight']\"\n title=\"{{showDescription && description ? description : ''}}\" poster=\"{{image.poster}}\"\n autoplay=\"{{image.autoplay ? 'autoplay': ''}}\">\n @for (url of image.urls; track url.url; let i = $index) {\n <source [src]=\"getSafeVideoUrl(url.url)\" type=\"{{url.mimeType}}\">\n }\n </video>\n <!--\n ratio: 9/10,\n // old configured ratio ...\n ratio: {{mediaInfo && mediaInfo ? mediaInfo[\"bwidth\"] / mediaInfo[\"bheight\"] : 1 }},\n -->\n <script-js>\n $(function () {{ '{' }}\n $('#player_{{image.id}}').flowplayer({{ '{' }}\n chromecast: false,\n ratio: 9 / 10,\n title: '{{showDescription && description ? description : ''}}',\n loop: {{image.loop || false }},\n embed: {{ '{' }}\n skin: \"node_modules/flowplayer/dist/skin/skin.css\"\n &#125;,\n onBeforeFinish: function(){{ '{' }}\n return false;\n &#125;\n &#125;);\n &#125;);\n </script-js>\n </div>\n }\n @if (showDescription && description) {\n <div class=\"ngx-gallery-video-text\" [innerHTML]=\"description\">\n </div>\n }\n</div>\n","import { Component, ElementRef, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges, inject } from '@angular/core';\nimport { DomSanitizer, SafeResourceUrl, SafeStyle } from '@angular/platform-browser';\n\nimport { NgxGalleryAction } from '../models/ngx-gallery-action.model';\nimport { NgxGalleryAnimation } from '../models/ngx-gallery-animation.model';\nimport { NgxGalleryOrderedImage } from '../models/ngx-gallery-ordered-image.model';\nimport { NgxGalleryHelperService } from '../ngx-gallery-helper.service';\nimport { LogService } from '../utils/logging.service';\n\n@Component({\n selector: 'ngx-gallery-image',\n templateUrl: './ngx-gallery-image.component.html',\n styleUrls: ['./ngx-gallery-image.component.scss'],\n standalone: false\n})\nexport class NgxGalleryImageComponent implements OnInit, OnChanges {\n private sanitization = inject(DomSanitizer);\n private elementRef = inject(ElementRef);\n private helperService = inject(NgxGalleryHelperService);\n private logService = inject(LogService);\n\n\n zoomValue = '1.0';\n\n @Input() name: string;\n @Input() images: NgxGalleryOrderedImage[];\n @Input() imageWidth: number[];\n @Input() imageHeight: number[];\n @Input() imageVBox: string[];\n @Input() positionX: number[];\n @Input() positionY: number[];\n // TODO: use interface\n @Input() mediaInfos: object[];\n @Input() hasVideo: boolean;\n @Input() links: string[];\n @Input() clickable: boolean;\n @Input() selectedIndex: number;\n @Input() arrows: boolean;\n @Input() arrowsAutoHide: boolean;\n @Input() swipe: boolean;\n @Input() animation: string;\n @Input() size: string;\n @Input() arrowPrevIcon: string;\n @Input() arrowNextIcon: string;\n @Input() autoPlay: boolean;\n @Input() autoPlayInterval: number;\n @Input() autoPlayPauseOnHover: boolean;\n @Input() infinityMove: boolean;\n @Input() lazyLoading: boolean;\n @Input() actions: NgxGalleryAction[];\n @Input() descriptions: string[];\n @Input() types: string[];\n @Input() mtypes: string[];\n @Input() widths: number[];\n @Input() heights: number[];\n @Input() showDescription: boolean;\n @Input() bullets: boolean;\n\n @Input() interactive: boolean;\n @Input() isSVGActive: boolean;\n @Input() interactiveIcon: string;\n\n\n @Output() onClick = new EventEmitter();\n @Output() onActiveChange = new EventEmitter();\n\n canChangeImage = true;\n countChanges = 0;\n\n private timer;\n\n ngOnInit(): void {\n if (this.arrows && this.arrowsAutoHide) {\n this.arrows = false;\n }\n\n if (this.autoPlay) {\n this.startAutoPlay();\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.swipe) {\n this.helperService.manageSwipe(this.swipe, this.elementRef, 'image', () => this.showNext(), () => this.showPrev());\n }\n\n if (Object.prototype.hasOwnProperty.call(changes, 'selectedIndex')) {\n this.countChanges++;\n this.logService.log('NgxGalleryImageComponent.ngOnChanges(' + this.name + ')', 'starts ...');\n }\n }\n\n // currently resizing window does NOT lead to a resize event, if external video in an iframe is shown\n // problem: otherwise video would be reloaded after leaving the mm box!\n\n /*\n @HostListener('mouseenter') onMouseEnter() {\n if (this.arrowsAutoHide && !this.arrows) {\n this.arrows = true;\n }\n\n if (this.autoPlay && this.autoPlayPauseOnHover) {\n this.stopAutoPlay();\n }\n }\n\n @HostListener('mouseleave') onMouseLeave() {\n if (this.arrowsAutoHide && this.arrows) {\n this.arrows = false;\n }\n\n if (this.autoPlay && this.autoPlayPauseOnHover) {\n this.startAutoPlay();\n }\n }\n */\n\n reset(index: number): void {\n this.selectedIndex = index;\n }\n\n getImages(): NgxGalleryOrderedImage[] {\n if (!this.images) {\n return [];\n }\n\n if (this.lazyLoading) {\n const indexes = [this.selectedIndex];\n const prevIndex = this.selectedIndex - 1;\n\n if (prevIndex === -1 && this.infinityMove) {\n indexes.push(this.images.length - 1);\n } else if (prevIndex >= 0) {\n indexes.push(prevIndex);\n }\n\n const nextIndex = this.selectedIndex + 1;\n\n if (nextIndex === this.images.length && this.infinityMove) {\n indexes.push(0);\n } else if (nextIndex < this.images.length) {\n indexes.push(nextIndex);\n }\n\n return this.images.filter((img, i) => indexes.indexOf(i) !== -1);\n } else {\n return this.images;\n }\n }\n\n startAutoPlay(): void {\n this.stopAutoPlay();\n\n this.timer = setInterval(() => {\n if (!this.showNext()) {\n this.selectedIndex = -1;\n this.showNext();\n }\n }, this.autoPlayInterval);\n }\n\n stopAutoPlay() {\n if (this.timer) {\n clearInterval(this.timer);\n }\n }\n\n handleClick(event: Event, index: number): void {\n if (this.clickable) {\n this.onClick.emit(index);\n\n event.stopPropagation();\n event.preventDefault();\n }\n }\n\n show(index: number) {\n this.selectedIndex = index;\n this.onActiveChange.emit(this.selectedIndex);\n this.setChangeTimeout();\n }\n\n showNext(): boolean {\n if (this.canShowNext() && this.canChangeImage) {\n this.selectedIndex++;\n\n if (this.selectedIndex === this.images.length) {\n this.selectedIndex = 0;\n }\n\n this.onActiveChange.emit(this.selectedIndex);\n this.setChangeTimeout();\n\n return true;\n } else {\n return false;\n }\n }\n\n showPrev(): void {\n if (this.canShowPrev() && this.canChangeImage) {\n this.selectedIndex--;\n\n if (this.selectedIndex < 0) {\n this.selectedIndex = this.images.length - 1;\n }\n\n this.onActiveChange.emit(this.selectedIndex);\n this.setChangeTimeout();\n }\n }\n\n setChangeTimeout() {\n this.canChangeImage = false;\n let timeout = 1000;\n\n if (this.animation === NgxGalleryAnimation.Slide\n || this.animation === NgxGalleryAnimation.Fade) {\n timeout = 500;\n }\n\n setTimeout(() => {\n this.canChangeImage = true;\n }, timeout);\n }\n\n canShowNext(): boolean {\n if (this.images) {\n return this.infinityMove || this.selectedIndex < this.images.length - 1\n ? true : false;\n } else {\n return false;\n }\n }\n\n canShowPrev(): boolean {\n if (this.images) {\n return this.infinityMove || this.selectedIndex > 0 ? true : false;\n } else {\n return false;\n }\n }\n\n getSafeUrl(imageUrl: string | SafeResourceUrl ): SafeStyle {\n return this.sanitization.bypassSecurityTrustStyle(this.helperService.getBackgroundUrl(imageUrl as string));\n }\n\n getBackgroundSize(index: number): string {\n return (this.mtypes[index] === 'pdf' ? '400px' : '100%');\n }\n}\n","@for (image of getImages(); track image.id; let i = $index) {\n <div class=\"ngx-gallery-image-wrapper ngx-gallery-animation-{{animation}} ngx-gallery-image-size-{{size}}\"\n >\n @if (mtypes[image.index] === 'image' || mtypes[image.index] === 'pdf') {\n <div class=\"ngx-gallery-image\"\n [ngClass]=\"{\n 'ngx-gallery-active': selectedIndex === image.index,\n 'ngx-gallery-inactive-left': selectedIndex > image.index,\n 'ngx-gallery-inactive-right': selectedIndex < image.index,\n 'ngx-gallery-clickable': clickable\n }\"\n [style.background-image]=\"getSafeUrl(image.src)\"\n [style.background-size]=\"getBackgroundSize(image.index)\"\n (click)=\"handleClick($event, image.index)\" >\n <div class=\"ngx-gallery-icons-wrapper ngx-gallery-actionicon-image\">\n @for (action of actions; track action.titleText) {\n @if (!action.disabled) {\n <ngx-gallery-action\n [icon]=\"action.icon\"\n [disabled]=\"action.disabled\"\n [titleText]=\"action.titleText\"\n (onClick)=\"action.onClick($event, image.index)\">\n </ngx-gallery-action>\n }\n }\n </div>\n @if (isSVGActive && !!image.addOns.length) {\n <cc-imagesvg\n [animation]=\"animation\"\n [width]=\"imageWidth[image.index]\"\n [height]=\"imageHeight[image.index]\"\n [viewBox]=\"imageVBox[image.index]\"\n [posLeft]=\"positionX[image.index] + 'px'\"\n [posTop]=\"positionY[image.index] + 'px'\"\n [zoomValue]=\"zoomValue\"\n [addOns]=\"image.addOns\">\n </cc-imagesvg>\n }\n @if (showDescription && descriptions[image.index]) {\n <div class=\"ngx-gallery-image-text\"\n [innerHTML]=\"descriptions[image.index] | safeHtml\"\n (click)=\"$event.stopPropagation()\">\n </div>\n }\n </div>\n }\n @if (mtypes[image.index] === 'audio' || mtypes[image.index] === 'video') {\n <cc-video\n [selectedIndex]=\"selectedIndex\"\n [image]=\"image\"\n [showDescription]=\"showDescription\"\n [description]=\"showDescription ? descriptions[image.index] : ''\"\n [mediaInfo]=\"mediaInfos[image.index]\"\n ></cc-video>\n }\n @if (mtypes[selectedIndex] === 'video') {\n <div >\n <div class=\"ngx-gallery-icons-wrapper ngx-gallery-actionicon-image\">\n @for (action of actions; track action) {\n @if (!action.disabled && action.titleText !== 'full screen') {\n <ngx-gallery-action\n [icon]=\"action.icon\"\n [disabled]=\"action.disabled\"\n [titleText]=\"action.titleText\"\n (onClick)=\"action.onClick($event, selectedIndex)\">\n </ngx-gallery-action>\n }\n }\n </div>\n </div>\n }\n </div>\n}\n@if (bullets) {\n <ngx-gallery-bullets [count]=\"images.length\" [active]=\"selectedIndex\" (onChange)=\"show($event)\"></ngx-gallery-bullets>\n}\n@if (arrows) {\n <ngx-gallery-arrows class=\"ngx-gallery-image-size-{{size}}\"\n (onPrevClick)=\"showPrev()\"\n (onNextClick)=\"showNext()\"\n [prevDisabled]=\"!canShowPrev()\"\n [nextDisabled]=\"!canShowNext()\"\n [arrowPrevIcon]=\"arrowPrevIcon\"\n [arrowNextIcon]=\"arrowNextIcon\">\n </ngx-gallery-arrows>\n}","import { Component, ElementRef, EventEmitter, HostBinding, Input, OnChanges, OnDestroy, OnInit, Output, Renderer2, SimpleChanges, ViewChild, inject } from '@angular/core';\nimport { DomSanitizer, SafeResourceUrl, SafeStyle, SafeUrl } from '@angular/platform-browser';\nimport { forkJoin, Observable, Subject, take, timer } from 'rxjs';\n\nimport { NgxGalleryAction } from '../models/ngx-gallery-action.model';\nimport { NgxGalleryOrderedImage } from '../models/ngx-gallery-ordered-image.model';\nimport { NgxGalleryHelperService } from '../ngx-gallery-helper.service';\nimport { CcMediaService } from '../utils/cc-media.service';\nimport { LogService } from '../utils/logging.service';\n\n\n@Component({\n selector: 'ngx-gallery-preview',\n templateUrl: './ngx-gallery-preview.component.html',\n styleUrls: ['./ngx-gallery-preview.component.scss'],\n standalone: false\n})\nexport class NgxGalleryPreviewComponent implements OnChanges, OnInit, OnDestroy {\n private sanitization = inject(DomSanitizer);\n private elementRef = inject(ElementRef);\n private helperService = inject(NgxGalleryHelperService);\n private renderer = inject(Renderer2);\n private logService = inject(LogService);\n ccMediaService = inject(CcMediaService);\n\n\n link: SafeResourceUrl;\n src: SafeUrl | SafeResourceUrl;\n srcType: string;\n imgWidth: number;\n imgHeight: number;\n description: string;\n viewBox: string;\n showSpinner = false;\n positionLeft = 0;\n positionTop = 0;\n zoomValue = 1;\n isZoomableIn = false;\n isZoomableOut = false;\n styleTransform: SafeStyle;\n canDrag: boolean;\n loading = false;\n rotateValue = 0;\n index = 0;\n hasAddOns = false;\n\n @Input() prevIndex: number;\n @Input() images: string[] | SafeResourceUrl[];\n @Input() ordImages: NgxGalleryOrderedImage[];\n // TODO: use interface\n @Input() mediaInfos: object[];\n @Input() links: string[] = [];\n @Input() descriptions: string[];\n @Input() types: string[];\n @Input() mtypes: string[];\n @Input() widths: number[];\n @Input() heights: number[];\n @Input() showDescription: boolean;\n @Input() swipe: boolean;\n @Input() fullscreen: boolean;\n @Input() forceFullscreen: boolean;\n @Input() closeOnClick: boolean;\n @Input() closeOnEsc: boolean;\n @Input() keyboardNavigation: boolean;\n @Input() arrowPrevIcon: string;\n @Input() arrowNextIcon: string;\n @Input() closeIcon: string;\n @Input() fullscreenIcon: string;\n @Input() spinnerIcon: string;\n @Input() autoPlay: boolean;\n @Input() autoPlayInterval: number;\n @Input() autoPlayPauseOnHover: boolean;\n @Input() infinityMove: boolean;\n @Input() interactive: boolean;\n @Input() isSVGActive: boolean;\n @Input() zoom: boolean;\n @Input() zoomStep: number;\n @Input() zoomMax: number;\n @Input() zoomMin: number;\n @Input() interactiveIcon: string;\n @Input() zoomInIcon: string;\n @Input() zoomOutIcon: string;\n @Input() animation: boolean;\n @Input() actions: NgxGalleryAction[];\n @Input() rotate: boolean;\n @Input() rotateLeftIcon: string;\n @Input() rotateRightIcon: string;\n @Input() download: boolean;\n @Input() downloadIcon: string;\n @Input() bullets: string;\n @Input() name: string;\n\n @Output() onOpen = new EventEmitter();\n @Output() onClose = new EventEmitter();\n @Output() onActiveChange = new EventEmitter<number>();\n\n @HostBinding('class.ngx-gallery-active') isActive: boolean;\n\n @ViewChild('previewImage') previewImage: ElementRef;\n\n fitVideoToScreen: boolean;\n isOpen = false;\n\n private timer;\n private initialX = 0;\n private initialY = 0;\n private initialLeft = 0;\n private initialTop = 0;\n private isMove = false;\n\n private keyDownListener;\n private imgLoaded$: Subject<boolean>;\n private timer$: Observable<number>;\n\n ngOnInit() {\n this.logService.log('NgxGalleryPreviewComponent.ngOnInit (' + this.name + ')', '...');\n this.fitVideoToScreen = !this.isVideoLowerScreenResolution();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!changes.isFirstChange) {\n let prevIndexChanged = false;\n this.logService.log('NgxGalleryPreviewComponent.ngOnChange (' + this.name + ')', '...');\n this.styleTransform = this.getTransform();\n this.canDrag = this.canDragOnZoom();\n\n if (changes.swipe) {\n this.helperService.manageSwipe(this.swipe, this.elementRef,\n 'preview', () => this.showNext(), () => this.showPrev());\n }\n\n prevIndexChanged = (changes.prevIndex && !changes.prevIndex.isFirstChange()\n && changes.prevIndex.currentValue > -1);\n const imageChanged = (changes.images);\n\n if (imageChanged || prevIndexChanged) {\n if (prevIndexChanged) {\n this.index = this.prevIndex;\n this.open(this.prevIndex);\n }\n this.logService.log('NgxGalleryPreviewComponent.ngOnChange (' + this.name + ')', 'prevIndex: ' + this.prevIndex);\n } else {\n this.logService.log('NgxGalleryPreviewComponent.ngOnChange (' + this.name + ')', 'changes.prevIndex: ' + changes.prevIndex);\n }\n this.logService.log('NgxGalleryPreviewComponent.ngOnChange (' + this.name + ')', 'images[0]: ' + (this.images && this.images[0]));\n }\n this.isZoomableIn = this.canZoomIn();\n this.isZoomableOut = this.canZoomOut();\n }\n\n ngOnDestroy() {\n this.logService.log('NgxGalleryPreviewComponent.ngOnDestroy (' + this.name + ')', '...');\n if (this.keyDownListener) {\n this.keyDownListener();\n }\n }\n\n isVideoLowerScreenResolution() {\n let isVideoLowerScreen = true;\n\n if (!!this.mediaInfos && !!this.prevIndex) {\n const width = this.mediaInfos[this.prevIndex]['width'];\n const height = this.mediaInfos[this.prevIndex]['height'];\n\n isVideoLowerScreen = width < window.innerWidth && height < window.innerHeight;\n }\n return isVideoLowerScreen;\n }\n\n onKeyDown(e) {\n if (this.isOpen) {\n if (this.keyboardNavigation) {\n if (this.isKeyboardPrev(e)) {\n this.showPrev();\n } else if (this.isKeyboardNext(e)) {\n this.showNext();\n }\n }\n if (this.closeOnEsc && this.isKeyboardEsc(e)) {\n this.close();\n }\n }\n }\n\n open(index: number): void {\n this.logService.log('NgxGalleryPreviewComponent.open(' + this.name + ')', 'starts ... ' + index);\n this.logService.log('NgxGalleryPreviewComponent.open(' + this.name + ')', 'image: ' + this.images[index]);\n this.onOpen.emit();\n\n this.index = index;\n this.isOpen = true;\n this.show(true);\n\n if (this.forceFullscreen) {\n this.manageFullscreen();\n }\n\n this.keyDownListener = this.renderer.listen('window', 'keydown', (e) => this.onKeyDown(e));\n }\n\n close(): void {\n this.isOpen = false;\n this.closeFullscreen();\n this.onClose.emit();\n\n this.stopAutoPlay();\n\n if (this.keyDownListener) {\n this.keyDownListener();\n }\n }\n\n imageMouseEnter(): void {\n if (this.autoPlay && this.autoPlayPauseOnHover) {\n this.stopAutoPlay();\n }\n }\n\n imageMouseLeave(): void {\n if (this.autoPlay && this.autoPlayPauseOnHover) {\n this.startAutoPlay();\n }\n }\n\n startAutoPlay(): void {\n if (this.autoPlay) {\n this.stopAutoPlay();\n\n this.timer = setTimeout(() => {\n if (!this.showNext()) {\n this.index = -1;\n this.showNext();\n }\n }, this.autoPlayInterval);\n }\n }\n\n stopAutoPlay(): void {\n if (this.timer) {\n clearTimeout(this.timer);\n }\n }\n\n showAtIndex(index: number): void {\n this.index = index;\n this.show();\n }\n\n showNext(): boolean {\n if (this.canShowNext()) {\n this.index = this.getNextImageIndex();\n this.show();\n return true;\n } else {\n return false;\n }\n }\n\n showPrev(): void {\n if (this.canShowPrev()) {\n this.index = this.getPrevImageIndex();\n this.show();\n }\n }\n\n canShowNext(): boolean {\n if (this.mtypes[this.index] === 'video') {\n return false;\n } else if (this.loading) {\n return false;\n } else if (this.images) {\n return this.getNextImageIndex() !== undefined;\n } else {\n return false;\n }\n }\n\n canShowPrev(): boolean {\n if (this.mtypes[this.index] === 'video') {\n return false;\n } else if (this.loading) {\n return false;\n } else if (this.images) {\n return this.getPrevImageIndex() !== undefined;\n } else {\n return false;\n }\n }\n\n private getNextImageIndex(): number {\n const start = this.index + 1;\n const end = this.infinityMove ? this.images.length + this.index - 1 : this.images.length;\n for (let i = start; i < end; i++) {\n const index = i % this.images.length;\n if (this.isIterableImage(index, this.mtypes)) {\n return index;\n }\n }\n return;\n }\n\n private getPrevImageIndex(): number {\n const start = this.images.length + this.index - 1;\n const end = this.infinityMove ? this.index : this.images.length - 1;\n for (let i = start; i > end; i--) {\n const index = i % this.images.length;\n if (this.isIterableImage(index, this.mtypes)) {\n return index;\n }\n }\n return;\n }\n\n private isIterableImage(index: number, mediaTypes: string[]): boolean {\n return ['image', 'pdf'].indexOf(mediaTypes[index]) !== -1;\n }\n\n manageFullscreen(): void {\n if (this.fullscreen || this.forceFullscreen) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const doc = document as any;\n\n if (!doc.fullscreenElement && !doc.mozFullScreenElement\n && !doc.webkitFullscreenElement && !doc.msFullscreenElement) {\n this.openFullscreen();\n } else {\n this.closeFullscreen();\n }\n }\n }\n\n getSafeUrl(image: string): SafeUrl {\n return !image || image.substr(0, 10) === 'data:image' ?\n image : this.sanitization.bypassSecurityTrustUrl(image);\n }\n\n getSafeResourceUrl(resUrl: string): SafeResourceUrl {\n return this.sanitization.bypassSecurityTrustResourceUrl(resUrl);\n }\n\n zoomIn(): void {\n if (this.isZoomableIn) {\n this.zoomValue += this.zoomStep;\n\n if (this.zoomValue > this.zoomMax) {\n this.zoomValue = this.zoomMax;\n }\n this.styleTransform = this.getTransform();\n this.canDrag = this.canDragOnZoom();\n this.isZoomableIn = this.canZoomIn();\n this.isZoomableOut = this.canZoomOut();\n }\n }\n\n zoomOut(): void {\n if (this.isZoomableOut) {\n this.zoomValue -= this.zoomStep;\n\n if (this.zoomValue < this.zoomMin) {\n this.zoomValue = this.zoomMin;\n }\n\n if (this.zoomValue <= 1) {\n this.resetPosition();\n }\n this.styleTransform = this.getTransform();\n this.canDrag = this.canDragOnZoom();\n this.isZoomableIn = this.canZoomIn();\n this.isZoomableOut = this.canZoomOut();\n }\n }\n\n resetZoom() {\n this.zoomValue = 1;\n this.styleTransform = this.getTransform();\n this.canDrag = this.canDragOnZoom();\n this.isZoomableIn = this.canZoomIn();\n this.isZoomableOut = this.canZoomOut();\n }\n\n rotateLeft(): void {\n this.rotateValue -= 90;\n }\n\n rotateRight(): void {\n this.rotateValue += 90;\n }\n\n getTransform(): SafeStyle {\n return this.sanitization.bypassSecurityTrustStyle('scale(' + this.zoomValue + ') rotate(' + this.rotateValue + 'deg)');\n }\n\n canZoomIn(): boolean {\n return ['pdf', 'campus'].indexOf(this.mtypes[this.index]) === -1 && this.zoomValue < this.zoomMax;\n }\n\n canZoomOut(): boolean {\n return ['pdf', 'campus'].indexOf(this.mtypes[this.index]) === -1 && this.zoomValue > this.zoomMin;\n }\n\n canDragOnZoom() {\n return this.zoom && this.zoomValue > 1;\n }\n\n mouseDownHandler(e): void {\n if (this.canDragOnZoom()) {\n this.initialX = this.getClientX(e);\n this.initialY = this.getClientY(e);\n this.initialLeft = this.positionLeft;\n this.initialTop = this.positionTop;\n this.isMove = true;\n\n e.preventDefault();\n }\n }\n\n mouseUpHandler(): void {\n this.isMove = false;\n }\n\n mouseMoveHandler(e) {\n if (this.isMove) {\n this.positionLeft = this.initialLeft + (this.getClientX(e) - this.initialX);\n this.positionTop = this.initialTop + (this.getClientY(e) - this.initialY);\n }\n }\n\n private getClientX(e): number {\n return e.touches && e.touches.length ? e.touches[0].clientX : e.clientX;\n }\n\n private getClientY(e): number {\n return e.touches && e.touches.length ? e.touches[0].clientY : e.clientY;\n }\n\n private resetPosition() {\n if (this.zoom) {\n this.positionLeft = 0;\n this.positionTop = 0;\n }\n }\n\n private isKeyboardNext(e): boolean {\n return e.keyCode === 39 ? true : false;\n }\n\n private isKeyboardPrev(e): boolean {\n return e.keyCode === 37 ? true : false;\n }\n\n private isKeyboardEsc(e): boolean {\n return e.keyCode === 27 ? true : false;\n }\n\n private openFullscreen(): void {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const element = document.documentElement as any;\n\n if (element.requestFullscreen) {\n element.requestFullscreen();\n } else if (element.msRequestFullscreen) {\n element.msRequestFullscreen();\n } else if (element.mozRequestFullScreen) {\n element.mozRequestFullScreen();\n } else if (element.webkitRequestFullscreen) {\n element.webkitRequestFullscreen();\n }\n }\n\n private closeFullscreen(): void {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const doc = document as any;\n const fullscreenPolyfills = [\n {\n vendor: 'standard',\n fullscreenElement: 'fullscreenElement',\n exitFullscreenFn: 'exitFullscreen',\n }, {\n vendor: ['blink', 'safari', 'edge'],\n fullscreenElement: 'webkitFullscreenElement',\n exitFullscreenFn: 'webkitExitFullscreen',\n }, {\n vendor: 'gecko',\n fullscreenElement: 'mozFullScreenElement',\n exitFullscreenFn: 'mozCancelFullScreen',\n }, {\n vendor: 'ie11',\n fullscreenElement: 'msFullscreenElement',\n exitFullscreenFn: 'msExitFullscreen',\n }\n ];\n for (let index = 0; index < fullscreenPolyfills.length; index++) {\n const fullscreenPolyfill = fullscreenPolyfills[index];\n if (doc[fullscreenPolyfill.fullscreenElement] !== null && doc[fullscreenPolyfill.exitFullscreenFn]) {\n doc[fullscreenPolyfill.exitFullscreenFn]();\n return;\n }\n }\n }\n\n private show(first = false) {\n this.zoom = true;\n this.link = this.getSafeResourceUrl(this.links[this.index]);\n this.loading = true;\n this.showSpinner = true;\n this.stopAutoPlay();\n\n this.onActiveChange.emit(this.index);\n\n this.imgLoaded$ = new Subject();\n this.timer$ = first || !this.animation ? timer(0) : timer(500);\n forkJoin([\n this.imgLoaded$,\n this.timer$.pipe(take(1))\n ])\n .subscribe(() => {\n this.loading = false;\n this.showSpinner = false;\n if (this.autoPlay) {\n this.startAutoPlay();\n }\n });\n this.timer$.subscribe(() => { this._show(); });\n }\n\n onImageLoad() {\n if (!this.imgLoaded$) {\n return;\n }\n this.imgLoaded$.next(true);\n this.imgLoaded$.complete();\n }\n\n private _show() {\n if (this.zoomValue !== 1) {\n this.resetZoom();\n }\n this.styleTransform = this.getTransform();\n this.canDrag = this.canDragOnZoom();\n this.rotateValue = 0;\n this.resetPosition();\n\n this.src = this.mtypes[this.index] === 'campus' ?\n this.getSafeResourceUrl(this.images[this.index] as string) :\n this.getSafeUrl(this.images[this.index] as string);\n this.description = this.descriptions[this.index];\n this.srcType = this.types[this.index];\n this.imgHeight = this.heights[this.index];\n this.imgWidth = this.widths[this.index];\n this.viewBox = '0 0 ' + this.imgWidth + ' ' + this.imgHeight;\n this.hasAddOns = !!this.ordImages && !!this.ordImages[this.index] && !!this.ordImages[this.index].addOns.length;\n\n this.logService.log('NgxGalleryPreviewComponent._show', 'index - ' + this.index);\n this.logService.log('NgxGalleryPreviewComponent._show', 'srcType - ' + this.srcType);\n this.logService.log('NgxGalleryPreviewComponent._show', 'url - ' + this.images[this.index]);\n this.logService.log('NgxGalleryPreviewComponent._show', 'src - ' + this.src);\n if (!this.ccMediaService.isImage(this.srcType)) {\n this.zoom = false;\n }\n }\n\n hasLink(): boolean {\n return !!(this.links && this.links.length && this.links[this.index]);\n }\n\n getImages(): NgxGalleryOrderedImage[] {\n if (!this.ordImages) {\n return [];\n }\n\n return this.ordImages;\n }\n}\n","<ngx-gallery-arrows\n (onPrevClick)=\"showPrev()\"\n (onNextClick)=\"showNext()\"\n [prevDisabled]=\"!canShowPrev()\"\n [nextDisabled]=\"!canShowNext()\"\n [arrowPrevIcon]=\"arrowPrevIcon\"\n [arrowNextIcon]=\"arrowNextIcon\">\n</ngx-gallery-arrows>\n\n<div class=\"ngx-gallery-preview-top\">\n <div class=\"ngx-gallery-preview-icons\">\n @for (action of actions; track action.titleText) {\n @if (!action.disabled) {\n <ngx-gallery-action\n [icon]=\"action.icon\"\n [disabled]=\"action.disabled\"\n [titleText]=\"action.titleText\"\n (onClick)=\"action.onClick($event, index)\">\n </ngx-gallery-action>\n }\n }\n\n @if (download && src) {\n <a [href]=\"src\" class=\"ngx-gallery-icon\" aria-hidden=\"true\" download>\n <i class=\"ngx-gallery-icon-content {{ downloadIcon }}\"></i>\n </a>\n }\n @if (zoom) {\n <ngx-gallery-action [icon]=\"zoomOutIcon\" [disabled]=\"! isZoomableOut\" (onClick)=\"zoomOut()\"></ngx-gallery-action>\n <ngx-gallery-action [icon]=\"zoomInIcon\" [disabled]=\"! isZoomableIn\" (onClick)=\"zoomIn()\"></ngx-gallery-action>\n }\n @if (rotate) {\n <ngx-gallery-action [icon]=\"rotateLeftIcon\" (onClick)=\"rotateLeft()\"></ngx-gallery-action>\n <ngx-gallery-action [icon]=\"rotateRightIcon\" (onClick)=\"rotateRight()\"></ngx-gallery-action>\n }\n @if (fullscreen) {\n <ngx-gallery-action [icon]=\"'ngx-gallery-fullscreen ' + fullscreenIcon\" (onClick)=\"manageFullscreen()\"></ngx-gallery-action>\n }\n @if (mtypes[index] === 'video' && isVideoLowerScreenResolution()) {\n <ngx-gallery-action [icon]=\"fullscreenIcon\" (onClick)=\"fitVideoToScreen = !fitVideoToScreen\"></ngx-gallery-action>\n }\n @if (closeIcon) {\n <ngx-gallery-action [icon]=\"'ngx-gallery-close ' + closeIcon\" (onClick)=\"close()\"></ngx-gallery-action>\n }\n </div>\n</div>\n<div class=\"ngx-spinner-wrapper ngx-gallery-center\" [class.ngx-gallery-active]=\"showSpinner\">\n <i class=\"ngx-gallery-icon ngx-gallery-spinner {{spinnerIcon}}\" aria-hidden=\"true\"></i>\n</div>\n\n@switch (mtypes[index]) {\n @case ('video') {\n <ng-container *ngTemplateOutlet=\"videoAudio\"></ng-container>\n }\n @case ('audio') {\n <ng-container *ngTemplateOutlet=\"videoAudio\"></ng-container>\n }\n @case ('campus') {\n @if (isOpen) {\n <iframe [src]=\"src\"></iframe>\n }\n }\n @case ('pdf') {\n @if (isOpen) {\n <iframe [src]=\"link\" style=\"position: absolute; top: 55px;\" (load)=\"onImageLoad()\"></iframe>\n }\n }\n @case ('image') {\n <div\n class=\"ngx-gallery-preview-wrapper\"\n (click)=\"closeOnClick && close()\"\n (mouseup)=\"mouseUpHandler()\" (mousemove)=\"mouseMoveHandler($event)\"\n (touchend)=\"mouseUpHandler()\" (touchmove)=\"mouseMoveHandler($event)\"\n (click)=\"$event.stopPropagation()\"\n (mouseenter)=\"imageMouseEnter()\"\n (mouseleave)=\"imageMouseLeave()\"\n (mousedown)=\"mouseDownHandler($event)\"\n (touchstart)=\"mouseDownHandler($event)\"\n >\n @if (src) {\n <img\n #previewImage\n class=\"ngx-gallery-preview-img ngx-gallery-center\"\n [src]=\"src\"\n [class.ngx-gallery-active]=\"!loading\"\n [class.ngx-gallery-grab]=\"canDrag\"\n [style.transform]=\"styleTransform\"\n [style.left]=\"positionLeft + 'px'\"\n [style.top]=\"positionTop + 'px'\"\n (click)=\"$event.stopPropagation()\"\n (load)=\"onImageLoad()\"\n />\n }\n @if (isSVGActive && hasAddOns) {\n <cc-imagesvg\n [animation]=\"animation\"\n [width]=\"imgWidth\"\n [height]=\"imgHeight\"\n [viewBox]=\"viewBox\"\n [styleTransform]=\"styleTransform\"\n [posLeft]=\"positionLeft + 'px'\"\n [posTop]=\"positionTop + 'px'\"\n [zoomValue]=\"zoomValue\"\n [addOns]=\"ordImages[index].addOns\"\n [classGrab]=\"canDrag\"\n [preview]=\"true\"\n >\n </cc-imagesvg>\n }\n @if (bullets) {\n <ngx-gallery-bullets [count]=\"images.length\" [active]=\"index\" (onChange)=\"showAtIndex($event)\">\n </ngx-gallery-bullets>\n }\n @if (showDescription && description) {\n <div class=\"ngx-gallery-preview-text\" [innerHTML]=\"description | safeHtml\" (click)=\"$event.stopPropagation()\">\n </div>\n }\n </div>\n }\n}\n<ng-template #videoAudio>\n <div\n class=\"ngx-gallery-preview-wrapper\"\n (click)=\"$event.stopPropagation()\">\n @if (isOpen) {\n <cc-video\n [selectedIndex]=\"prevIndex\"\n [image]=\"ordImages[prevIndex]\"\n [showDescription]=\"showDescription\"\n [description]=\"descriptions[prevIndex]\"\n [mediaInfo]=\"mediaInfos[prevIndex]\"\n [fitVideoToScreen]=\"fitVideoToScreen\">\n </cc-video>\n }\n </div>\n</ng-template>","export class NgxGalleryOrder {\n static Column = 1;\n static Row = 2;\n static Page = 3;\n}\n","import { Component, ElementRef, EventEmitter, Input, OnChanges, Output, SimpleChanges, inject } from '@angular/core';\nimport { DomSanitizer, SafeResourceUrl, SafeStyle } from '@angular/platform-browser';\nimport { NgxGalleryAction } from '../models/ngx-gallery-action.model';\nimport { NgxGalleryOrder } from '../models/ngx-gallery-order.model';\nimport { NgxGalleryHelperService } from '../ngx-gallery-helper.service';\nimport { LogService } from '../utils/logging.service';\n\n\n@Component({\n selector: 'ngx-gallery-thumbnails',\n templateUrl: './ngx-gallery-thumbnails.component.html',\n styleUrls: ['./ngx-gallery-thumbnails.component.scss'],\n standalone: false\n})\nexport class NgxGalleryThumbnailsComponent implements OnChanges {\n private sanitization = inject(DomSanitizer);\n private elementRef = inject(ElementRef);\n private helperService = inject(NgxGalleryHelperService);\n private logService = inject(LogService);\n\n\n thumbnailsLeft: string;\n thumbnailsMarginLeft: string;\n mouseenter: boolean;\n remainingCountValue: number;\n\n minStopIndex = 0;\n\n @Input() name: string;\n @Input() images: string[] | SafeResourceUrl[];\n @Input() links: string[];\n @Input() labels: string[];\n @Input() types: string[];\n @Input() widths: number[];\n @Input() heights: number[];\n @Input() linkTarget: string;\n @Input() columns: number;\n @Input() rows: number;\n @Input() arrows: boolean;\n @Input() arrowsAutoHide: boolean;\n @Input() margin: number;\n @Input() selectedIndex: number;\n @Input() clickable: boolean;\n @Input() swipe: boolean;\n @Input() size: string;\n @Input() arrowPrevIcon: string;\n @Input() arrowNextIcon: string;\n @Input() moveSize: number;\n @Input() order: number;\n @Input() remainingCount: boolean;\n @Input() lazyLoading: boolean;\n @Input() actions: NgxGalleryAction[];\n\n @Output() onActiveChange = new EventEmitter();\n\n private index = 0;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.selectedIndex) {\n this.validateIndex();\n this.logService.log('NgxGalleryThumbnailsComponent.ngOnChanges(' + this.name + ')',\n 'selected index changed to ' + this.selectedIndex);\n }\n\n if (changes.swipe) {\n this.helperService.manageSwipe(this.swipe, this.elementRef,\n 'thumbnails', () => this.moveRight(), () => this.moveLeft());\n }\n\n if (this.images) {\n this.remainingCountValue = this.images.length - (this.rows * this.columns);\n }\n\n }\n\n // comment, cause stops videos and reloads it (external video in iframe!)!\n /*\n @HostListener('mouseenter') onMouseEnter() {\n this.mouseenter = true;\n }\n\n @HostListener('mouseleave') onMouseLeave() {\n this.mouseenter = false;\n }\n */\n\n reset(index: number): void {\n this.selectedIndex = index;\n this.setDefaultPosition();\n\n this.index = 0;\n this.validateIndex();\n }\n\n getImages(): string[] | SafeResourceUrl[] {\n if (!this.images) {\n return [];\n }\n\n if (this.remainingCount) {\n return this.images.slice(0, this.rows * this.columns);\n } else if (this.lazyLoading && this.order !== NgxGalleryOrder.Row) {\n let stopIndex = 0;\n\n if (this.order === NgxGalleryOrder.Column) {\n stopIndex = (this.index + this.columns + this.moveSize) * this.rows;\n } else if (this.order === NgxGalleryOrder.Page) {\n stopIndex = this.index + ((this.columns * this.rows) * 2);\n }\n\n if (stopIndex <= this.minStopIndex) {\n stopIndex = this.minStopIndex;\n } else {\n this.minStopIndex = stopIndex;\n }\n\n return this.images.slice(0, stopIndex);\n } else {\n return this.images;\n }\n }\n\n handleClick(event: Event, index: number): void {\n this.selectedIndex = index;\n this.onActiveChange.emit(index);\n\n event.stopPropagation();\n event.preventDefault();\n }\n\n hasLink(index: number): boolean {\n if (this.links && this.links.length && this.links[index]) { return true; }\n }\n\n moveRight(): void {\n if (this.canMoveRight()) {\n this.index += this.moveSize;\n const maxIndex = this.getMaxIndex() - this.columns;\n\n if (this.index > maxIndex) {\n this.index = maxIndex;\n }\n\n this.setThumbnailsPosition();\n }\n }\n\n moveLeft(): void {\n if (this.canMoveLeft()) {\n this.index -= this.moveSize;\n\n if (this.index < 0) {\n this.index = 0;\n }\n\n this.setThumbnailsPosition();\n }\n }\n\n canMoveRight(): boolean {\n return this.index + this.columns < this.getMaxIndex() ? true : false;\n }\n\n canMoveLeft(): boolean {\n return this.index !== 0 ? true : false;\n }\n\n getThumbnailLeft(index: number): SafeStyle {\n let calculatedIndex;\n\n if (this.order === NgxGalleryOrder.Column) {\n calculatedIndex = Math.floor(index / this.rows);\n } else if (this.order === NgxGalleryOrder.Page) {\n calculatedIndex = (index % this.columns) + (Math.floor(index / (this.rows * this.columns)) * this.columns);\n } else if (this.order === NgxGalleryOrder.Row && this.remainingCount) {\n calculatedIndex = index % this.columns;\n } else {\n calculatedIndex = index % Math.ceil(this.images.length / this.rows);\n }\n\n return this.getThumbnailPosition(calculatedIndex, this.columns);\n }\n\n getThumbnailTop(index: number): SafeStyle {\n let calculatedIndex;\n\n if (this.order === NgxGalleryOrder.Column) {\n calculatedIndex = index % this.rows;\n } else if (this.order === NgxGalleryOrder.Page) {\n calculatedIndex = Math.floor(index / this.columns) - (Math.floor(index / (this.rows * this.columns)) * this.rows);\n } else if (this.order === NgxGalleryOrder.Row && this.remainingCount) {\n calculatedIndex = Math.floor(index / this.columns);\n } else {\n calculatedIndex = Math.floor(index / Math.ceil(this.images.length / this.rows));\n }\n\n return this.getThumbnailPosition(calculatedIndex, this.rows);\n }\n\n getThumbnailWidth(): SafeStyle {\n return this.getThumbnailDimension(this.columns);\n }\n\n getThumbnailHeight(): SafeStyle {\n return this.getThumbnailDimension(this.rows);\n }\n\n setThumbnailsPosition(): void {\n this.thumbnailsLeft = - ((100 / this.columns) * this.index) + '%';\n\n this.thumbnailsMarginLeft = - ((this.margin - (((this.columns - 1)\n * this.margin) / this.columns)) * this.index) + 'px';\n }\n\n setDefaultPosition(): void {\n this.thumbnailsLeft = '0px';\n this.thumbnailsMarginLeft = '0px';\n }\n\n canShowArrows(): boolean {\n if (this.remainingCount) {\n return false;\n } else if (this.arrows && this.images && this.images.length > this.getVisibleCount()\n && (!this.arrowsAutoHide || this.mouseenter)) {\n return true;\n } else {\n return false;\n }\n }\n\n validateIndex(): void {\n if (this.images) {\n let newIndex;\n\n if (this.order === NgxGalleryOrder.Column) {\n newIndex = Math.floor(this.selectedIndex / this.rows);\n } else {\n newIndex = this.selectedIndex % Math.ceil(this.images.length / this.rows);\n }\n\n if (this.remainingCount) {\n newIndex = 0;\n }\n\n if (newIndex < this.index || newIndex >= this.index + this.columns) {\n const maxIndex = this.getMaxIndex() - this.columns;\n this.index = newIndex > maxIndex ? maxIndex : newIndex;\n\n this.setThumbnailsPosition();\n }\n }\n }\n\n getSafeUrl(image: string | SafeResourceUrl ): SafeStyle {\n return this.sanitization.bypassSecurityTrustStyle(this.helperService.getBackgroundUrl(image as string));\n }\n\n private getThumbnailPosition(index: number, count: number): SafeStyle {\n return this.getSafeStyle('calc(' + ((100 / count) * index) + '% + '\n + ((this.margin - (((count - 1) * this.margin) / count)) * index) + 'px)');\n }\n\n private getThumbnailDimension(count: number): SafeStyle {\n if (this.margin !== 0) {\n return this.getSafeStyle('calc(' + (100 / count) + '% - '\n + (((count - 1) * this.margin) / count) + 'px)');\n } else {\n return this.getSafeStyle('calc(' + (100 / count) + '% + 1px)');\n }\n }\n\n private getMaxIndex(): number {\n if (this.order === NgxGalleryOrder.Page) {\n let maxIndex = (Math.floor(this.images.length / this.getVisibleCount()) * this.columns);\n\n if (this.images.length % this.getVisibleCount() > this.columns) {\n maxIndex += this.columns;\n } else {\n maxIndex += this.images.length % this.getVisibleCount();\n }\n\n return maxIndex;\n } else {\n return Math.ceil(this.images.length / this.rows);\n }\n }\n\n private getVisibleCount(): number {\n return this.columns * this.rows;\n }\n\n private getSafeStyle(value: string): SafeStyle {\n return this.sanitization.bypassSecurityTrustStyle(value);\n }\n}\n","<div class=\"ngx-gallery-thumbnails-wrapper ngx-gallery-thumbnail-size-{{size}}\">\n <div class=\"ngx-gallery-thumbnails\"\n [style.transform]=\"'translateX(' + thumbnailsLeft + ')'\"\n [style.marginLeft]=\"thumbnailsMarginLeft\">\n @for (image of getImages(); track image; let i = $index) {\n <a\n [ngClass]=\"{ 'ngx-gallery-active': i === selectedIndex, 'ngx-gallery-clickable': clickable }\"\n (click)=\"handleClick($event, i)\"\n [href]=\"hasLink(i) ? links[i] : '#'\"\n [target]=\"linkTarget\" class=\"ngx-gallery-thumbnail\"\n [style.background-image]=\"getSafeUrl(image)\"\n [style.width]=\"getThumbnailWidth()\"\n [style.height]=\"getThumbnailHeight()\"\n [style.left]=\"getThumbnailLeft(i)\"\n [style.top]=\"getThumbnailTop(i)\"\n [attr.aria-label]=\"labels[i]\">\n <div class=\"ngx-gallery-icons-wrapper\">\n @for (action of actions; track action.titleText) {\n <ngx-gallery-action\n [icon]=\"action.icon\"\n [disabled]=\"action.disabled\"\n [titleText]=\"action.titleText\"\n (onClick)=\"action.onClick($event, i)\">\n </ngx-gallery-action>\n }\n </div>\n @if (remainingCount && remainingCountValue && (i === (rows * columns) - 1)) {\n <div class=\"ngx-gallery-remaining-count-overlay\"\n >\n <span class=\"ngx-gallery-remaining-count\">+{{remainingCountValue}}</span>\n </div>\n }\n </a>\n }\n </div>\n</div>\n@if (canShowArrows()) {\n <ngx-gallery-arrows\n (onPrevClick)=\"moveLeft()\"\n (onNextClick)=\"moveRight()\"\n [prevDisabled]=\"!canMoveLeft()\"\n [nextDisabled]=\"!canMoveRight()\"\n [arrowPrevIcon]=\"arrowPrevIcon\"\n [arrowNextIcon]=\"arrowNextIcon\">\n </ngx-gallery-arrows>\n}\n","export class NgxGalleryImageSize {\n static Cover = 'cover';\n static Contain = 'contain';\n}\n","import { NgxGalleryImageSize } from './models/ngx-gallery-image-size.model';\nimport { NgxGalleryOptions } from './models/ngx-gallery-options.model';\nimport { NgxGalleryDimensions } from './utils/ngx-gallery-dimensions.interface';\n\nexport class CcCustomOptions {\n\n dimensions: NgxGalleryDimensions = {\n box: { width: 0, height: 0 },\n image: { width: 0, height: 0 },\n thumbnail: { width: 0, height: 0 },\n };\n\n private originalOptions: NgxGalleryOptions[];\n private options: NgxGalleryOptions[];\n private numberOfMedia: number;\n\n private boxPadding = 10;\n private boxBorder = 3;\n private galleryLayout = {\n border: this.boxBorder + 'px grey solid',\n padding: this.boxPadding + 'px',\n // TODO: move into css as it is not dynamic\n 'background-color': '#D8D8D8',\n };\n\n private defaultOptionsLargeScreen: NgxGalleryOptions = {\n width: '400px', // originally 400\n imageSize: NgxGalleryImageSize.Contain,\n imagePercent: 88.6, // before: 80\n imageDescription: true,\n imageInfinityMove: false,\n imageArrows: false,\n ccpImageAsLink: true,\n image: true,\n lazyLoading: true,\n thumbnailsAsLinks: true,\n ccpPreviewImageAsLink: true,\n previewDescription: true,\n previewZoom: true,\n previewAutoPlay: false, // setting to true needs coding in preview component!\n imageAutoPlay: false, // parameter set by author dynamically TODO\n thumbnailsColumns: 3,\n thumbnailsMoveSize: 3,\n thumbnailSize: NgxGalleryImageSize.Contain\n };\n\n private defaultOptionsSmallScreen: NgxGalleryOptions = {\n breakpoint: 1100,\n thumbnailsColumns: 2,\n thumbnailsMoveSize: 2,\n image: false, // small screens - do not show image\n };\n\n constructor(initialOptions: NgxGalleryOptions[], initialNumberOfMedia: number) {\n this.numberOfMedia = initialNumberOfMedia;\n this.originalOptions = initialOptions;\n this.options = this.prepareOptions();\n }\n\n setOriginalOptions(originalOptions: NgxGalleryOptions[]) {\n this.originalOptions = originalOptions;\n this.options = this.prepareOptions();\n }\n\n setNumberOfMedia(numberOfMedia: number) {\n this.numberOfMedia = numberOfMedia;\n this.options = this.prepareOptions();\n }\n\n getOptions(): NgxGalleryOptions[] {\n return this.options;\n }\n\n private prepareOptions(): NgxGalleryOptions[] {\n const optionsForLargeScreens = this.getOptionsForNonSmallScreens(this.originalOptions.find(option => !option.breakpoint) || {});\n const optionsForSmallScreens = this.getOptionsForSmallScreens(this.originalOptions.find(option => !!option.breakpoint) || {});\n\n return [\n optionsForLargeScreens,\n optionsForSmallScreens,\n ];\n }\n\n private getOptionsForNonSmallScreens(options: NgxGalleryOptions): NgxGalleryOptions {\n const optionsForLargeScreens: NgxGalleryOptions = { ...this.defaultOptionsLargeScreen, ...options };\n\n // calc dimensions\n const boxWidth = parseFloat(optionsForLargeScreens.width);\n this.calcDimensions(boxWidth, optionsForLargeScreens.thumbnailsColumns);\n\n const customOptions = {\n width: this.dimensions.box.width + 'px',\n height: this.dimensions.box.height + 'px',\n ccpBoxLayout: this.galleryLayout,\n ccpImageWidth: this.dimensions.image.width,\n ccpImageHeight: this.dimensions.image.height,\n thumbnails: this.numberOfMedia > 1,\n thumbnailsPercent: this.getThumbnailsPercent(optionsForLargeScreens.thumbnailsColumns),\n thumbnailMargin: this.getThumbnailMargin(),\n };\n\n return { ...customOptions, ...optionsForLargeScreens };\n }\n\n private getOptionsForSmallScreens(options: NgxGalleryOptions): NgxGalleryOptions {\n const optionsForSmallScreens: NgxGalleryOptions = { ...this.defaultOptionsSmallScreen, ...options };\n\n const boxForSmallScreen = this.calcBoxForSmallScreens(optionsForSmallScreens.thumbnailsColumns);\n const customOptions = {\n width: boxForSmallScreen.width + 'px',\n height: boxForSmallScreen.height + 'px',\n image: this.numberOfMedia <= 1,\n };\n\n return { ...optionsForSmallScreens, ...customOptions };\n }\n\n private calcDimensions(boxWidth: number, thumbnailColumns: number) {\n const boxAdjustment = 2 * this.boxPadding + 2 * this.boxBorder;\n const showThumbnails = this.numberOfMedia > 1;\n\n const box = {\n width: boxWidth,\n height: boxWidth,\n };\n\n const image = {\n width: box.width - boxAdjustment,\n height: box.height - boxAdjustment,\n };\n\n const thumbnail = {\n width: 0,\n height: 0,\n };\n\n if (showThumbnails) {\n thumbnail.width = Math.round((image.width - (thumbnailColumns - 1) * this.boxPadding) / thumbnailColumns);\n thumbnail.height = thumbnail.width;\n\n box.height = image.height + thumbnail.height + boxAdjustment + this.boxPadding;\n }\n\n this.dimensions = {\n box,\n image,\n thumbnail,\n };\n }\n\n private calcBoxForSmallScreens(thumbnailColumnsSmallScreen: number) {\n const showThumbnails = this.numberOfMedia > 1;\n\n if (showThumbnails) {\n return {\n height: this.dimensions.thumbnail.height + 2 * this.boxPadding + this.boxBorder, // not 2 * this.BoxBorder?\n width: this.dimensions.thumbnail.width * thumbnailColumnsSmallScreen\n + (1 + thumbnailColumnsSmallScreen) * this.boxPadding\n + 2 * this.boxBorder,\n };\n }\n\n return {\n width: this.dimensions.image.width,\n height: this.dimensions.image.height,\n };\n }\n\n private getThumbnailsPercent(thumbnailsColumns: number): number {\n return Math.round((100 - this.boxPadding) / thumbnailsColumns);\n }\n\n private getThumbnailMargin() {\n return this.boxPadding;\n }\n}\n","export class NgxGalleryLayout {\n static ThumbnailsTop = 'thumbnails-top';\n static ThumbnailsBottom = 'thumbnails-bottom';\n}\n","export interface INgxGalleryAction {\n icon: string;\n disabled?: boolean;\n titleText?: string;\n\n onClick: (event: Event, index: number) => void;\n}\n\nexport class NgxGalleryAction implements INgxGalleryAction {\n icon: string;\n disabled?: boolean;\n titleText?: string;\n\n onClick: (event: Event, index: number) => void;\n\n constructor(action: INgxGalleryAction) {\n this.icon = action.icon;\n this.disabled = action.disabled ? action.disabled : false;\n this.titleText = action.titleText ? action.titleText : '';\n\n this.onClick = action.onClick;\n }\n}\n","import { NgxGalleryAction } from './ngx-gallery-action.model';\nimport { NgxGalleryAnimation } from './ngx-gallery-animation.model';\nimport { NgxGalleryImageSize } from './ngx-gallery-image-size.model';\nimport { NgxGalleryLayout } from './ngx-gallery-layout.model';\nimport { NgxGalleryOrder } from './ngx-gallery-order.model';\n\nexport interface INgxGalleryOptions {\n width?: string;\n height?: string;\n breakpoint?: number;\n fullWidth?: boolean;\n layout?: string;\n startIndex?: number;\n linkTarget?: string;\n lazyLoading?: boolean;\n image?: boolean;\n imagePercent?: number;\n ccpBoxLayout?: object;\n imageArrows?: boolean;\n imageArrowsAutoHide?: boolean;\n imageSwipe?: boolean;\n imageAnimation?: string;\n imageSize?: string;\n imageAutoPlay?: boolean;\n imageAutoPlayInterval?: number;\n imageAutoPlayPauseOnHover?: boolean;\n imageInfinityMove?: boolean;\n imageActions?: NgxGalleryAction[];\n imageDescription?: boolean;\n imageBullets?: boolean;\n ccpImageWidth?: number;\n ccpImageHeight?: number;\n ccpImageAsLink?: boolean;\n ccpDisplayAsExternal?: boolean;\n thumbnails?: boolean;\n thumbnailsColumns?: number;\n thumbnailsRows?: number;\n thumbnailsPercent?: number;\n thumbnailsMargin?: number;\n thumbnailsArrows?: boolean;\n thumbnailsArrowsAutoHide?: boolean;\n thumbnailsSwipe?: boolean;\n thumbnailsMoveSize?: number;\n thumbnailsOrder?: NgxGalleryOrder;\n thumbnailsRemainingCount?: boolean;\n thumbnailsAsLinks?: boolean;\n thumbnailMargin?: number;\n thumbnailSize?: string;\n thumbnailActions?: NgxGalleryAction[];\n preview?: boolean;\n previewDescription?: boolean;\n previewSwipe?: boolean;\n previewFullscreen?: boolean;\n previewForceFullscreen?: boolean;\n previewCloseOnClick?: boolean;\n previewCloseOnEsc?: boolean;\n previewKeyboardNavigation?: boolean;\n previewAnimation?: boolean;\n previewAutoPlay?: boolean;\n previewAutoPlayInterval?: number;\n previewAutoPlayPauseOnHover?: boolean;\n previewInfinityMove?: boolean;\n previewZoom?: boolean;\n previewZoomStep?: number;\n previewZoomMax?: number;\n previewZoomMin?: number;\n previewRotate?: boolean;\n previewDownload?: boolean;\n ccpPreviewCustom?: (index: number) => void;\n previewBullets?: boolean;\n previewFullSize?: boolean;\n ccpPreviewImageAsLink?: boolean;\n arrowPrevIcon?: string;\n arrowNextIcon?: string;\n closeIcon?: string;\n fullscreenIcon?: string;\n // interactiveIcon?: string;\n spinnerIcon?: string;\n zoomInIcon?: string;\n zoomOutIcon?: string;\n rotateLeftIcon?: string;\n rotateRightIcon?: string;\n downloadIcon?: string;\n actions?: NgxGalleryAction[];\n}\n\nexport class NgxGalleryOptions implements INgxGalleryOptions {\n width?: string;\n height?: string;\n breakpoint?: number;\n fullWidth?: boolean;\n layout?: string;\n startIndex?: number;\n linkTarget?: string;\n lazyLoading?: boolean;\n image?: boolean;\n ccpImageWidth?: number;\n ccpImageHeight?: number;\n ccpDisplayAsExternal?: boolean;\n imagePercent?: number;\n ccpBoxLayout?: object;\n imageArrows?: boolean;\n imageArrowsAutoHide?: boolean;\n imageSwipe?: boolean;\n imageAnimation?: string;\n imageSize?: string;\n imageAutoPlay?: boolean;\n imageAutoPlayInterval?: number;\n imageAutoPlayPauseOnHover?: boolean;\n imageInfinityMove?: boolean;\n imageActions?: NgxGalleryAction[];\n imageDescription?: boolean;\n imageBullets?: boolean;\n ccpImageAsLink?: boolean;\n thumbnails?: boolean;\n thumbnailsColumns?: number;\n thumbnailsRows?: number;\n thumbnailsPercent?: number;\n thumbnailsMargin?: number;\n thumbnailsArrows?: boolean;\n thumbnailsArrowsAutoHide?: boolean;\n thumbnailsSwipe?: boolean;\n thumbnailsMoveSize?: number;\n thumbnailsOrder?: NgxGalleryOrder;\n thumbnailsRemainingCount?: boolean;\n thumbnailsAsLinks?: boolean;\n thumbnailMargin?: number;\n thumbnailSize?: string;\n thumbnailActions?: NgxGalleryAction[];\n preview?: boolean;\n previewDescription?: boolean;\n previewSwipe?: boolean;\n previewFullscreen?: boolean;\n previewForceFullscreen?: boolean;\n previewCloseOnClick?: boolean;\n previewCloseOnEsc?: boolean;\n previewKeyboardNavigation?: boolean;\n previewAnimation?: boolean;\n previewAutoPlay?: boolean;\n previewAutoPlayInterval?: number;\n previewAutoPlayPauseOnHover?: boolean;\n previewInfinityMove?: boolean;\n previewZoom?: boolean;\n previewZoomStep?: number;\n previewZoomMax?: number;\n previewZoomMin?: number;\n previewRotate?: boolean;\n previewDownload?: boolean;\n previewCustom?: (index: number) => void;\n previewBullets?: boolean;\n previewFullSize?: boolean;\n ccpPreviewImageAsLink?: boolean;\n arrowPrevIcon?: string;\n arrowNextIcon?: string;\n closeIcon?: string;\n // interactiveIcon?: string;\n fullscreenIcon?: string;\n spinnerIcon?: string;\n zoomInIcon?: string;\n zoomOutIcon?: string;\n rotateLeftIcon?: string;\n rotateRightIcon?: string;\n downloadIcon?: string;\n actions?: NgxGalleryAction[];\n\n constructor(obj: INgxGalleryOptions) {\n\n const preventDefaults = obj.breakpoint === undefined ? false : true;\n\n const use = <T>(source: T, defaultValue: T): T =>\n obj && (source !== undefined || preventDefaults) ? source : defaultValue;\n\n this.breakpoint = use(obj.breakpoint, undefined);\n this.width = use(obj.width, '500px');\n this.height = use(obj.height, '400px');\n this.fullWidth = use(obj.fullWidth, false);\n this.layout = use(obj.layout, NgxGalleryLayout.ThumbnailsBottom);\n this.startIndex = use(obj.startIndex, 0);\n this.linkTarget = use(obj.linkTarget, '_blank');\n this.lazyLoading = use(obj.lazyLoading, true);\n\n this.image = use(obj.image, true);\n this.ccpImageWidth = use(obj.ccpImageWidth, 0);\n this.ccpImageHeight = use(obj.ccpImageHeight, 0);\n this.imagePercent = use(obj.imagePercent, 75);\n this.ccpBoxLayout = use(obj.ccpBoxLayout, {});\n this.imageArrows = use(obj.imageArrows, true);\n this.imageArrowsAutoHide = use(obj.imageArrowsAutoHide, false);\n this.imageSwipe = use(obj.imageSwipe, false);\n this.imageAnimation = use(obj.imageAnimation, NgxGalleryAnimation.Fade);\n this.imageSize = use(obj.imageSize, NgxGalleryImageSize.Cover);\n this.imageAutoPlay = use(obj.imageAutoPlay, false);\n this.imageAutoPlayInterval = use(obj.imageAutoPlayInterval, 2000);\n this.imageAutoPlayPauseOnHover = use(obj.imageAutoPlayPauseOnHover, false);\n this.imageInfinityMove = use(obj.imageInfinityMove, false);\n if (obj && obj.imageActions && obj.imageActions.length) {\n obj.imageActions = obj.imageActions.map(action => new NgxGalleryAction(action));\n }\n this.imageActions = use(obj.imageActions, []);\n this.imageDescription = use(obj.imageDescription, false);\n this.imageBullets = use(obj.imageBullets, false);\n this.ccpImageAsLink = use(obj.ccpImageAsLink, false);\n this.ccpDisplayAsExternal = use(obj.ccpDisplayAsExternal, false);\n\n this.thumbnails = use(obj.thumbnails, true);\n this.thumbnailsColumns = use(obj.thumbnailsColumns, 4);\n this.thumbnailsRows = use(obj.thumbnailsRows, 1);\n this.thumbnailsPercent = use(obj.thumbnailsPercent, 25);\n this.thumbnailsMargin = use(obj.thumbnailsMargin, 10);\n this.thumbnailsArrows = use(obj.thumbnailsArrows, true);\n this.thumbnailsArrowsAutoHide = use(obj.thumbnailsArrowsAutoHide, false);\n this.thumbnailsSwipe = use(obj.thumbnailsSwipe, false);\n this.thumbnailsMoveSize = use(obj.thumbnailsMoveSize, 1);\n this.thumbnailsOrder = use(obj.thumbnailsOrder, NgxGalleryOrder.Column);\n this.thumbnailsRemainingCount = use(obj.thumbnailsRemainingCount, false);\n this.thumbnailsAsLinks = use(obj.thumbnailsAsLinks, false);\n this.thumbnailMargin = use(obj.thumbnailMargin, 10);\n this.thumbnailSize = use(obj.thumbnailSize, NgxGalleryImageSize.Cover);\n if (obj && obj.thumbnailActions && obj.thumbnailActions.length) {\n obj.thumbnailActions = obj.thumbnailActions.map(action => new NgxGalleryAction(action));\n }\n this.thumbnailActions = use(obj.thumbnailActions, []);\n\n this.preview = use(obj.preview, true);\n this.previewDescription = use(obj.previewDescription, true);\n this.previewSwipe = use(obj.previewSwipe, false);\n this.previewFullscreen = use(obj.previewFullscreen, false);\n this.previewForceFullscreen = use(obj.previewForceFullscreen, false);\n this.previewCloseOnClick = use(obj.previewCloseOnClick, false);\n this.previewCloseOnEsc = use(obj.previewCloseOnEsc, false);\n this.previewKeyboardNavigation = use(obj.previewKeyboardNavigation, false);\n this.previewAnimation = use(obj.previewAnimation, true);\n this.previewAutoPlay = use(obj.previewAutoPlay, false);\n this.previewAutoPlayInterval = use(obj.previewAutoPlayInterval, 2000);\n this.previewAutoPlayPauseOnHover = use(obj.previewAutoPlayPauseOnHover, false);\n this.previewInfinityMove = use(obj.previewInfinityMove, false); this.previewZoom = use(obj.previewZoom, false);\n this.previewZoomStep = use(obj.previewZoomStep, 0.1);\n this.previewZoomMax = use(obj.previewZoomMax, 2);\n this.previewZoomMin = use(obj.previewZoomMin, 0.5);\n this.previewRotate = use(obj.previewRotate, false);\n this.previewDownload = use(obj.previewDownload, false);\n // this.previewCustom = use(obj.previewCustom, undefined);\n this.previewBullets = use(obj.previewBullets, false);\n this.previewFullSize = use(obj.previewFullSize, false);\n this.ccpPreviewImageAsLink = use(obj.ccpPreviewImageAsLink, false);\n\n this.arrowPrevIcon = use(obj.arrowPrevIcon, 'fa fa-arrow-circle-left');\n this.arrowNextIcon = use(obj.arrowNextIcon, 'fa fa-arrow-circle-right');\n this.closeIcon = use(obj.closeIcon, 'fa fa-times-circle');\n this.fullscreenIcon = use(obj.fullscreenIcon, 'fa fa-arrows-alt');\n this.spinnerIcon = use(obj.spinnerIcon, 'fa fa-spinner fa-pulse fa-3x fa-fw');\n // this.interactiveIcon = use(obj.interactiveIcon, 'fa fa-map-marker');\n this.zoomInIcon = use(obj.zoomInIcon, 'fa fa-search-plus');\n this.zoomOutIcon = use(obj.zoomOutIcon, 'fa fa-search-minus');\n this.rotateLeftIcon = use(obj.rotateLeftIcon, 'fa fa-undo');\n this.rotateRightIcon = use(obj.rotateRightIcon, 'fa fa-repeat');\n this.downloadIcon = use(obj.downloadIcon, 'fa fa-arrow-circle-down');\n\n if (obj && obj.actions && obj.actions.length) {\n obj.actions = obj.actions.map(action => new NgxGalleryAction(action));\n }\n this.actions = use(obj.actions, []);\n }\n}\n","import { ApplicationRef, Component, ComponentFactoryResolver, EmbeddedViewRef, EventEmitter, Injector, Input, OnChanges, Output, SimpleChanges, inject } from '@angular/core';\nimport { SafeResourceUrl } from '@angular/platform-browser';\n\nimport { NgxGalleryAction } from '../models/ngx-gallery-action.model';\nimport { NgxGalleryOrderedImage } from '../models/ngx-gallery-ordered-image.model';\nimport { NgxGalleryPreviewComponent } from '../ngx-gallery-preview/ngx-gallery-preview.component';\nimport { Arrow } from '../svg/arrow.model';\nimport { Icon } from '../svg/icon.model';\nimport { Point } from '../svg/point.model';\nimport { Polygon } from '../svg/polygon.model';\n\n@Component({\n selector: 'ngx-gallery-preview-loader',\n template: ``,\n styleUrls: ['./ngx-preview-loader.component.scss'],\n standalone: false\n})\n\nexport class PreviewLoaderComponent implements OnChanges {\n private componentFactoryResolver = inject(ComponentFactoryResolver);\n private appRef = inject(ApplicationRef);\n private injector = inject(Injector);\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private componentRef: any;\n preview: NgxGalleryPreviewComponent;\n\n @Input() onlyPreview: boolean;\n @Input() previewEnabled = false;\n @Input() prevIndex: number;\n @Input() images: string[] | SafeResourceUrl[];\n @Input() ordImages: NgxGalleryOrderedImage[];\n // TODO: use interface\n @Input() mediaInfos: object[];\n @Input() links: string[];\n @Input() descriptions: string[];\n @Input() types: string[];\n @Input() mtypes: string[];\n @Input() widths: number[];\n @Input() heights: number[];\n @Input() svgArrows: Arrow[][];\n @Input() svgIcons: Icon[][];\n @Input() svgPolygons: Polygon[][];\n @Input() svgTexts: Point[][];\n @Input() showDescription: boolean;\n @Input() swipe: boolean;\n @Input() fullscreen: boolean;\n @Input() forceFullscreen: boolean;\n @Input() closeOnClick: boolean;\n @Input() closeOnEsc: boolean;\n @Input() keyboardNavigation: boolean;\n @Input() arrowPrevIcon: string;\n @Input() arrowNextIcon: string;\n @Input() closeIcon: string;\n @Input() fullscreenIcon: string;\n @Input() spinnerIcon: string;\n @Input() autoPlay: boolean;\n @Input() autoPlayInterval: number;\n @Input() autoPlayPauseOnHover: boolean;\n @Input() infinityMove: boolean;\n @Input() interactive: boolean;\n @Input() hasSVGArrow: boolean;\n @Input() hasSVGPolygon: boolean;\n @Input() hasSVGIcon: boolean;\n @Input() hasSVGText: boolean;\n @Input() isSVGActive: boolean;\n @Input() zoom: boolean;\n @Input() zoomStep: number;\n @Input() zoomMax: number;\n @Input() zoomMin: number;\n @Input() interactiveIcon: string;\n @Input() zoomInIcon: string;\n @Input() zoomOutIcon: string;\n @Input() animation: boolean;\n @Input() actions: NgxGalleryAction[];\n @Input() rotate: boolean;\n @Input() rotateLeftIcon: string;\n @Input() rotateRightIcon: string;\n @Input() download: boolean;\n @Input() downloadIcon: string;\n @Input() bullets: string;\n @Input() name: string;\n @Input() openIndex = -1;\n @Input() isActive: boolean;\n\n @Output() onOpen = new EventEmitter();\n @Output() onClose = new EventEmitter();\n @Output() onActiveChange = new EventEmitter<number>();\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private domRefs: any[] = [];\n\n ngOnChanges(changes: SimpleChanges): void {\n if (this.componentRef) {\n this.componentRef.instance.onlyPreview = this.onlyPreview;\n this.componentRef.instance.previewEnabled = this.previewEnabled;\n this.componentRef.instance.prevIndex = this.prevIndex;\n this.componentRef.instance.images = this.images;\n this.componentRef.instance.ordImages = this.ordImages;\n this.componentRef.instance.mediaInfos = this.mediaInfos;\n this.componentRef.instance.links = this.links;\n this.componentRef.instance.descriptions = this.descriptions;\n this.componentRef.instance.types = this.types;\n this.componentRef.instance.mtypes = this.mtypes;\n this.componentRef.instance.widths = this.widths;\n this.componentRef.instance.heights = this.heights;\n this.componentRef.instance.svgArrows = this.svgArrows;\n this.componentRef.instance.svgIcons = this.svgIcons;\n this.componentRef.instance.svgPolygons = this.svgPolygons;\n this.componentRef.instance.svgTexts = this.svgTexts;\n this.componentRef.instance.showDescription = this.showDescription;\n this.componentRef.instance.swipe = this.swipe;\n this.componentRef.instance.fullscreen = this.fullscreen;\n this.componentRef.instance.forceFullscreen = this.forceFullscreen;\n this.componentRef.instance.closeOnClick = this.closeOnClick;\n this.componentRef.instance.closeOnEsc = this.closeOnEsc;\n this.componentRef.instance.keyboardNavigation = this.keyboardNavigation;\n this.componentRef.instance.arrowPrevIcon = this.arrowPrevIcon;\n this.componentRef.instance.arrowNextIcon = this.arrowNextIcon;\n this.componentRef.instance.closeIcon = this.closeIcon;\n this.componentRef.instance.fullscreenIcon = this.fullscreenIcon;\n this.componentRef.instance.spinnerIcon = this.spinnerIcon;\n this.componentRef.instance.autoPlay = this.autoPlay;\n this.componentRef.instance.autoPlayInterval = this.autoPlayInterval;\n this.componentRef.instance.autoPlayPauseOnHover = this.autoPlayPauseOnHover;\n this.componentRef.instance.infinityMove = this.infinityMove;\n this.componentRef.instance.interactive = this.interactive;\n this.componentRef.instance.hasSVGArrow = this.hasSVGArrow;\n this.componentRef.instance.hasSVGPolygon = this.hasSVGPolygon;\n this.componentRef.instance.hasSVGIcon = this.hasSVGIcon;\n this.componentRef.instance.hasSVGText = this.hasSVGText;\n this.componentRef.instance.isSVGActive = this.isSVGActive;\n this.componentRef.instance.zoom = this.zoom;\n this.componentRef.instance.zoomStep = this.zoomStep;\n this.componentRef.instance.zoomMax = this.zoomMax;\n this.componentRef.instance.zoomMin = this.zoomMin;\n this.componentRef.instance.interactiveIcon = this.interactiveIcon;\n this.componentRef.instance.zoomInIcon = this.zoomInIcon;\n this.componentRef.instance.zoomOutIcon = this.zoomOutIcon;\n this.componentRef.instance.animation = this.animation;\n this.componentRef.instance.actions = this.actions;\n this.componentRef.instance.rotate = this.rotate;\n this.componentRef.instance.rotateLeftIcon = this.rotateLeftIcon;\n this.componentRef.instance.rotateRightIcon = this.rotateRightIcon;\n this.componentRef.instance.download = this.download;\n this.componentRef.instance.downloadIcon = this.downloadIcon;\n this.componentRef.instance.bullets = this.bullets;\n this.componentRef.instance.name = this.name;\n this.componentRef.instance.openIndex = this.openIndex;\n this.componentRef.instance.isActive = this.isActive;\n this.componentRef.instance.onOpen.subscribe((event) => {\n this.onOpen.emit(event);\n });\n this.componentRef.instance.onClose.subscribe(() => {\n this.appRef.detachView(this.componentRef.hostView);\n this.componentRef.destroy();\n this.onClose.emit();\n });\n this.componentRef.instance.onActiveChange.subscribe((event) => {\n this.prevIndex = event;\n this.onActiveChange.emit(event);\n });\n if (this.isActive) {\n this.preview = (this.componentRef.instance as NgxGalleryPreviewComponent);\n this.preview.open(this.prevIndex);\n this.preview.ngOnChanges(changes);\n }\n }\n }\n\n public loadPreview() {\n const factory = this.componentFactoryResolver.resolveComponentFactory(NgxGalleryPreviewComponent);\n this.componentRef = factory.create(this.injector);\n this.appRef.attachView(this.componentRef.hostView);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const domElem = (this.componentRef.hostView as EmbeddedViewRef<any>).rootNodes[0] as HTMLElement;\n this.domRefs.push(domElem);\n const cdkOverlayContainers = document.getElementsByClassName('cdk-overlay-container');\n let parentElement: Element;\n if (cdkOverlayContainers && cdkOverlayContainers.length) {\n parentElement = cdkOverlayContainers.item(0);\n } else {\n parentElement = document.body;\n }\n parentElement.appendChild(domElem);\n }\n\n public closePreview() {\n this.domRefs.forEach(domRef => {\n domRef.remove();\n });\n this.domRefs = [];\n }\n}\n","import { AfterViewInit, Component, ElementRef, EventEmitter, HostBinding, Input, OnChanges, OnDestroy, OnInit, Output, SimpleChanges, ViewChild, inject } from '@angular/core';\nimport { SafeResourceUrl } from '@angular/platform-browser';\nimport { IOpenMediumHyperlinkEvent } from '@casus-campus/cc-support';\nimport { Subscription } from 'rxjs';\n\nimport { CcCustomOptions } from './cc-custom-options';\nimport { NgxGalleryAction } from './models/ngx-gallery-action.model';\nimport { NgxGalleryImage } from './models/ngx-gallery-image.model';\nimport { NgxGalleryLayout } from './models/ngx-gallery-layout.model';\nimport { NgxGalleryOptions } from './models/ngx-gallery-options.model';\nimport { NgxGalleryOrderedImage } from './models/ngx-gallery-ordered-image.model';\nimport { NgxGalleryHelperService } from './ngx-gallery-helper.service';\nimport { NgxGalleryImageComponent } from './ngx-gallery-image/ngx-gallery-image.component';\nimport { NgxGalleryThumbnailsComponent } from './ngx-gallery-thumbnails/ngx-gallery-thumbnails.component';\nimport { CcMediaService } from './utils/cc-media.service';\nimport { LogService } from './utils/logging.service';\nimport { PreviewLoaderComponent } from './utils/ngx-preview-loader.component';\n\n@Component({\n selector: 'ngx-gallery',\n templateUrl: './ngx-gallery.component.html',\n styleUrls: ['./ngx-gallery.component.scss'],\n providers: [NgxGalleryHelperService, CcMediaService],\n standalone: false\n})\nexport class NgxGalleryComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy {\n private myElement = inject(ElementRef);\n private logService = inject(LogService);\n ccMediaService = inject(CcMediaService);\n\n @Input() options: NgxGalleryOptions[];\n @Input() images: NgxGalleryImage[];\n @Input() name: string;\n\n @Output() imagesReady = new EventEmitter();\n @Output() onChange = new EventEmitter<{ index: number; image: NgxGalleryImage }>();\n @Output() previewOpen = new EventEmitter();\n @Output() previewClose = new EventEmitter();\n @Output() previewChange = new EventEmitter<{ index: number; image: NgxGalleryImage }>();\n @Output() mediumTargetOpen = new EventEmitter<IOpenMediumHyperlinkEvent>();\n @Output() externalLinkOpen = new EventEmitter();\n\n styleBox: object;\n prevIndex: number;\n smallImages: string[] | SafeResourceUrl[];\n mediumImages: NgxGalleryOrderedImage[];\n bigImages: string[] | SafeResourceUrl[];\n descriptions: string[];\n hasVideo: boolean;\n links: string[];\n labels: string[];\n types: string[] = [];\n mtypes: string[];\n widths: number[];\n heights: number[];\n imageWidth: number[];\n imageHeight: number[];\n imageVBox: string[];\n positionX: number[];\n positionY: number[];\n // TODO: use interface\n mediaInfos: object[];\n\n linkIds = {\n image: ['1108408', '1108413', '1108410', '1108411', '994043', '1120513'], // image\n audio: ['449544', '69378', '312031'], // audio\n video: ['70741', '670180', '952730', '247647', '1073360', '1073366', '987542', '1018554'], // video\n campus: ['1460438', '1460419'] // campus\n };\n customOptions: CcCustomOptions;\n\n selectedIndex = 0;\n\n externalLinkAction: NgxGalleryAction;\n prevAction: NgxGalleryAction;\n svgAction: NgxGalleryAction;\n\n isPDF = false;\n // TODO: this should be an option of an image\n isSVG = false;\n // TODO: rename to overlayVisible or similar\n isSVGActive = false;\n previewEnabled: boolean;\n\n currentOptions: NgxGalleryOptions;\n\n private breakpoint: number | undefined = undefined;\n private prevBreakpoint: number | undefined = undefined;\n private fullWidthTimeout: undefined | ReturnType<typeof setTimeout>;\n private subscriptions: Subscription[] = [];\n private previewsOpened: number[] = [];\n\n @ViewChild(PreviewLoaderComponent) previewLoader: PreviewLoaderComponent;\n @ViewChild(NgxGalleryImageComponent) image: NgxGalleryImageComponent;\n @ViewChild(NgxGalleryThumbnailsComponent) thubmnails: NgxGalleryThumbnailsComponent;\n\n @HostBinding('style.width') width: string;\n @HostBinding('style.height') height: string;\n @HostBinding('style.left') left: string;\n\n ngOnInit() {\n this.subscriptions.push(this.ccMediaService.openedMediumTargets$\n .subscribe(openedMedium => this.mediumTargetOpen.emit(openedMedium))\n );\n this.customOptions = new CcCustomOptions(this.options, this.images.length);\n this.initActions();\n this.initOptions();\n this.prepareSvgAndPdf();\n this.initImages();\n\n this.logService.log('NgxGalleryComponent.ngOnInit(' + this.name + ')', 'ccpBoxLayout - ' + this.currentOptions.ccpBoxLayout);\n this.logService.log('NgxGalleryComponent.ngOnInit(' + this.name + ')', 'selectedIndex - '\n + this.selectedIndex + ' / isPDF: ' + this.isPDF);\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n const optionsChanged = !!changes.options && !changes.options.firstChange && !!changes.options.currentValue;\n const imagesChanged = !!changes.images && !changes.images.firstChange && !!changes.images.currentValue;\n\n if (optionsChanged) {\n this.logService.log('NgxGalleryComponent.ngOnChanges(' + this.name + ')', 'optionsChanges ...');\n this.customOptions.setOriginalOptions(changes.options.currentValue);\n }\n\n if (imagesChanged) {\n this.logService.log('NgxGalleryComponent.ngOnChanges(' + this.name + ')', 'imagesChanged ...');\n this.customOptions.setNumberOfMedia(changes.images.currentValue.length);\n }\n\n if (optionsChanged || imagesChanged) {\n this.initOptions();\n this.prepareSvgAndPdf();\n this.initImages();\n }\n }\n\n ngAfterViewInit(): void {\n this.checkFullWidth();\n }\n\n ngOnDestroy() {\n this.subscriptions.forEach(subscription => subscription.unsubscribe());\n }\n\n // has to be modified due to external images (magnify) in iframe\n // @HostListener('window:resize', [ '$event' ]) onResize( event ) {\n onResize(): void {\n this.setBreakpoint();\n\n if (this.prevBreakpoint !== this.breakpoint) {\n this.setOptions();\n this.resetThumbnails();\n }\n\n if (this.currentOptions && this.currentOptions.fullWidth) {\n\n if (this.fullWidthTimeout) {\n clearTimeout(this.fullWidthTimeout);\n }\n\n this.fullWidthTimeout = setTimeout(() => {\n this.checkFullWidth();\n }, 200);\n }\n }\n\n getImageHeight(): string {\n return (this.currentOptions && this.currentOptions.thumbnails) ?\n this.currentOptions.imagePercent + '%' : '100%';\n }\n\n getThumbnailsHeight(): string {\n if (this.currentOptions && this.currentOptions.image) {\n return 'calc(' + this.currentOptions.thumbnailsPercent + '% - '\n + this.currentOptions.thumbnailsMargin + 'px)';\n } else {\n return '100%';\n }\n }\n\n getThumbnailsMarginTop(): string {\n if (this.currentOptions && this.currentOptions.layout === NgxGalleryLayout.ThumbnailsBottom) {\n return this.currentOptions.thumbnailsMargin + 'px';\n } else {\n return '0px';\n }\n }\n\n getThumbnailsMarginBottom(): string {\n if (this.currentOptions && this.currentOptions.layout === NgxGalleryLayout.ThumbnailsTop) {\n return this.currentOptions.thumbnailsMargin + 'px';\n } else {\n return '0px';\n }\n }\n\n openPreview(index: number): void {\n this.logService.log('NgxGalleryComponent.openPreview(' + this.name + ')', 'index: ' + index);\n // this could be simplified through previewCustom\n if (this.currentOptions && this.currentOptions.previewCustom) {\n this.currentOptions.previewCustom(index);\n } else {\n this.previewEnabled = true;\n // TODO: do we need this?\n this.styleBox = {};\n this.logService.log('NgxGalleryComponent.openPreview(' + this.name + ')', 'previewEnabled: ' + this.previewEnabled);\n\n if (this.previewLoader) {\n this.logService.log('NgxGalleryComponent.openPreview(' + this.name + ')', 'preview called ...');\n // TODO: do we need\n this.prevIndex = index;\n this.previewsOpened.push(index);\n this.previewLoader.loadPreview();\n } else {\n this.logService.log('NgxGalleryComponent.openPreview(' + this.name + ')', 'preview does not exist!!');\n if (this.images) {\n this.logService.log('NgxGalleryComponent.openPreview(' + this.name + ')', 'id: ' + this.images[index].id);\n this.logService.log('NgxGalleryComponent.openPreview(' + this.name + ')', 'bigimage.url: ' + this.bigImages[index]);\n }\n }\n }\n }\n\n onPreviewOpen(): void {\n this.previewOpen.emit();\n\n if (this.image && this.image.autoPlay) {\n this.image.stopAutoPlay();\n }\n }\n\n onPreviewClose(): void {\n this.previewEnabled = false;\n this.styleBox = this.currentOptions.ccpBoxLayout;\n this.logService.log('NgxGalleryComponent.onPreviewClose(' + this.name + ')', 'previewEnabled: ' + this.previewEnabled);\n this.previewClose.emit();\n this.previewsOpened.pop();\n\n if (this.previewsOpened.length >= 1) {\n /*Reopens the nested preview to avoid a wrong initialisation of its actions,\n otherwise those would still refer to the already closed preview.*/\n this.openPreview(this.previewsOpened.pop());\n this.previewOpen.emit();\n } else {\n this.previewLoader.closePreview();\n }\n\n if (this.image && this.image.autoPlay) {\n this.image.startAutoPlay();\n }\n }\n\n selectFromImage(index: number) {\n this.select(index);\n }\n\n selectFromThumbnails(index: number) {\n this.select(index);\n\n if (this.currentOptions && this.currentOptions.thumbnails && this.currentOptions.preview\n && (!this.currentOptions.image || this.currentOptions.thumbnailsRemainingCount)) {\n this.openPreview(this.selectedIndex);\n }\n }\n\n show(index: number): void {\n this.select(index);\n }\n\n showNext(): void {\n this.image.showNext();\n }\n\n showPrev(): void {\n this.image.showPrev();\n }\n\n canShowNext(): boolean {\n if (this.images && this.currentOptions) {\n return (this.currentOptions.imageInfinityMove || this.selectedIndex < this.images.length - 1)\n ? true : false;\n } else {\n return false;\n }\n }\n\n canShowPrev(): boolean {\n if (this.images && this.currentOptions) {\n return (this.currentOptions.imageInfinityMove || this.selectedIndex > 0) ? true : false;\n } else {\n return false;\n }\n }\n\n previewSelect(index: number) {\n this.show(index);\n this.previewChange.emit({ index, image: this.images[index] });\n }\n\n moveThumbnailsRight() {\n this.thubmnails.moveRight();\n }\n\n moveThumbnailsLeft() {\n this.thubmnails.moveLeft();\n }\n\n canMoveThumbnailsRight() {\n return this.thubmnails.canMoveRight();\n }\n\n canMoveThumbnailsLeft() {\n return this.thubmnails.canMoveLeft();\n }\n\n private initOptions(): void {\n this.options = this.customOptions.getOptions().map((opt) => new NgxGalleryOptions(opt));\n this.sortOptions();\n this.setBreakpoint();\n this.setOptions();\n this.styleBox = this.currentOptions.ccpBoxLayout;\n this.checkFullWidth();\n if (this.currentOptions) {\n this.selectedIndex = this.currentOptions.startIndex;\n }\n\n if (this.currentOptions && this.currentOptions.previewFullSize) {\n this.logService.log('NgxGalleryComponent.ngOnInit',\n 'TODO: implement previewFullSize (show image in full size and don\\'t scale it down)');\n }\n }\n\n private initImages(): void {\n this.images = this.ccMediaService.prepareMedia(this.images, this.customOptions.dimensions);\n this.setImages();\n\n if (this.images && this.images.length) {\n this.imagesReady.emit();\n }\n\n if (this.image) {\n this.image.reset(this.currentOptions.startIndex);\n }\n\n this.resetThumbnails();\n }\n\n private resetThumbnails() {\n if (this.thubmnails) {\n this.thubmnails.reset(this.currentOptions.startIndex as number);\n }\n }\n\n private select(index: number) {\n this.logService.log('NgxGalleryComponent.select(' + this.name + ')',\n 'index - ' + index + ' / selectedindex - ' + this.selectedIndex);\n const isNewMM = this.selectedIndex !== index;\n\n if (isNewMM) {\n this.selectedIndex = index;\n this.prepareSvgAndPdf();\n }\n\n this.onChange.emit({\n index,\n image: this.images[index]\n });\n }\n\n private checkFullWidth(): void {\n if (this.currentOptions && this.currentOptions.fullWidth) {\n this.width = document.body.clientWidth + 'px';\n this.left = (-(document.body.clientWidth -\n this.myElement.nativeElement.parentNode.innerWidth) / 2) + 'px';\n }\n }\n\n private setImages(): void {\n const time = new Date().getMilliseconds();\n this.smallImages = this.images.map((img) => img.small as string);\n this.mediumImages = this.images.map((img, index) => new NgxGalleryOrderedImage({\n id: `${img.id}_${time}`,\n src: img.medium,\n autoplay: img.autoplay,\n loop: img.loop,\n poster: img.poster,\n urls: img.urls,\n index,\n addOns: img.addOns,\n }));\n\n for (const mediumImage of this.mediumImages) {\n if (mediumImage.urls[0]?.mimeType.includes('pdf')) {\n mediumImage.src = this.ccMediaService.getPdfImageUrl(mediumImage);\n }\n }\n\n this.logService.log('NgxGalleryComponent.setImages(' + this.name + ')', 'mediumImages initialized ...');\n this.bigImages = this.images.map(img => img.big);\n // TODO: html encoding - other possibility to decode?\n // TODO: why do we need this? couldn't we just use an own wrapper?\n this.descriptions = this.images.map(img => (img.description ? img.description.replace(/[\"'\\r\\n]/g, '') : ''));\n this.links = this.images.map(img => img.url);\n this.labels = this.images.map(img => img.label);\n this.types = this.images.map(img => img.type);\n this.widths = this.images.map(img => img.width);\n this.heights = this.images.map(img => img.height);\n this.mtypes = this.images.map(img => this.ccMediaService.getMultimediaType(img.type));\n this.hasVideo = this.ccMediaService.containsVideoOrAudio(this.types);\n\n\n this.mediaInfos = this.images.map(img => {\n const media = {\n link: img.url,\n type: img.type,\n width: img.width,\n height: img.height,\n bwidth: 0,\n bheight: 0,\n };\n if (this.ccMediaService.isAudio(img.type)) {\n media.bwidth = this.currentOptions.ccpImageWidth;\n // media['bheight'] = this.currentOptions.ccpImageHeight - 80;\n media.bheight = 60;\n } else if (this.ccMediaService.isVideo(img.type)) {\n // TODO: should the 80 be configurable?\n if (img.width > this.currentOptions.ccpImageWidth || img.height > this.currentOptions.ccpImageHeight - 80) {\n media.bwidth = this.currentOptions.ccpImageWidth;\n media.bheight = this.currentOptions.ccpImageHeight - 80;\n } else {\n media.bwidth = img.width || this.currentOptions.ccpImageWidth;\n media.bheight = img.height || this.currentOptions.ccpImageHeight - 80;\n }\n }\n return media;\n });\n\n // start of initialization svg and video: momentarily not active\n // if (this.types[0] === 'image/svg' || true) {\n // special video\n // image main screen initialization\n this.imageWidth = [];\n this.imageHeight = [];\n this.positionY = [];\n this.positionX = [];\n this.imageVBox = [];\n\n let i: number;\n for (i = 0; i < this.images.length; i++) {\n const maxheight = this.currentOptions.ccpImageHeight;\n const maxwidth = this.currentOptions.ccpImageWidth;\n const imgheight = this.images[i].height;\n const imgwidth = this.images[i].width;\n\n if (imgwidth === 0) {\n this.imageWidth[i] = 0;\n this.imageHeight[i] = 0;\n\n this.positionY[i] = 0;\n this.positionX[i] = 0;\n\n this.imageVBox[i] = '0 0 ' + imgwidth + ' ' + imgheight;\n\n } else {\n if (maxheight / imgheight < maxwidth / imgwidth) {\n this.imageHeight[i] = Math.min(maxheight, imgheight);\n this.imageWidth[i] = Math.round(imgwidth * this.imageHeight[i] / imgheight);\n } else {\n this.imageWidth[i] = Math.min(maxwidth, imgwidth);\n this.imageHeight[i] = Math.round(imgheight * this.imageWidth[i] / imgwidth);\n }\n\n this.positionY[i] = Math.round((maxheight - this.imageHeight[i]) / 2);\n this.positionX[i] = Math.round((maxwidth - this.imageWidth[i]) / 2);\n this.imageVBox[i] = '0 0 ' + imgwidth + ' ' + imgheight;\n }\n this.logService.log('NgxGalleryComponent.setImages(' + this.name + ')',\n i + ': id - ' + this.images[i].id + ' / type - ' + this.types[i] + ' / height - ' + imgheight + '/' + maxheight + '/'\n + this.imageHeight[i] + '/' + this.positionY[i]);\n this.logService.log('NgxGalleryComponent.setImages(' + this.name + ')',\n i + ': width - ' + imgwidth + '(imgwidth)/' + maxwidth + '(maxwidth)/'\n + this.imageWidth[i] + '(calc: imageWidth)/' + this.positionX[i] + '(positionX)');\n }\n // end of initialization svg and video: momentarily not active\n // }\n }\n\n private setBreakpoint(): void {\n this.prevBreakpoint = this.breakpoint;\n let breakpoints;\n\n if (typeof window !== 'undefined') {\n breakpoints = this.options.filter((opt) => opt.breakpoint >= window.innerWidth)\n .map((opt) => opt.breakpoint);\n }\n\n if (breakpoints && breakpoints.length) {\n this.breakpoint = breakpoints.pop();\n } else {\n this.breakpoint = undefined;\n }\n this.logService.log('NgxGalleryComponent.setBreakpoint(' + this.name + ')', 'breakpoint - ' + this.breakpoint);\n }\n\n private sortOptions(): void {\n this.options = [\n ...this.options.filter((a) => a.breakpoint === undefined),\n ...this.options\n .filter((a) => a.breakpoint !== undefined)\n .sort((a, b) => b.breakpoint - a.breakpoint)\n ];\n }\n\n private setOptions(): void {\n this.currentOptions = new NgxGalleryOptions({});\n\n this.options\n .filter((opt) => opt.breakpoint === undefined || opt.breakpoint >= this.breakpoint)\n .map((opt) => {\n this.logService.log('NgxGalleryComponent.setOptions(' + this.name + ')', '' + opt.breakpoint);\n this.combineOptions(this.currentOptions, opt);\n });\n\n this.width = this.currentOptions.width;\n this.height = this.currentOptions.height;\n }\n\n private combineOptions(first: NgxGalleryOptions, second: NgxGalleryOptions) {\n Object.keys(second).map((val) => {\n if (val === 'actions' || val === 'imageActions') {\n if (second[val] !== undefined) {\n second[val].push(this.svgAction);\n if (val === 'imageActions') {\n second[val].push(this.prevAction);\n if (!second[val].includes(this.externalLinkAction) && !this.options[0].ccpDisplayAsExternal) {\n second[val].push(this.externalLinkAction);\n }\n }\n }\n }\n first[val] = second[val] !== undefined ? second[val] : first[val];\n });\n }\n\n // icon initialization\n prepareSvgAndPdf(): void {\n this.logService.log('NgxGalleryComponent.initCmd(' + this.name + ')', 'starts ...');\n this.updateSvgState(this.selectedIndex);\n this.initPDF();\n }\n\n private initActions(): void {\n this.svgAction = this.svgAction || {\n icon: 'fa fa-map-marker',\n // TODO use method / variable on current image to get this information\n disabled: !this.isSVG,\n onClick: this.toggleActivation.bind(this),\n titleText: 'interactive'\n };\n this.prevAction = this.prevAction || {\n icon: 'fa fa-expand',\n onClick: this.openIconPreview.bind(this),\n titleText: 'full screen'\n };\n this.externalLinkAction = this.externalLinkAction || {\n icon: 'fa fa-external-link',\n onClick: this.handleExternalLinkAction.bind(this),\n titleText: 'extra window'\n };\n }\n\n private handleExternalLinkAction(event, index): void {\n if (!this.isPDF && this.mtypes[index] !== 'video') {\n this.externalLinkOpen.emit();\n } else if (this.mtypes[index] === 'video') {\n window.open(this.images[index].urls[0].url, '_blank');\n } else if (this.isPDF) {\n this.logService.log('NgxGalleryComponent.openPDF', index + ': ' + this.images[index].url);\n window.open(this.images[index].url, '_blank');\n }\n }\n\n updateSvgState(selectedIndex: number): void {\n this.isSVG = this.images[selectedIndex] &&\n this.images[selectedIndex].addOns &&\n !!this.images[selectedIndex].addOns.length;\n if (this.svgAction) {\n this.svgAction.disabled = !this.isSVG;\n }\n this.logService.log('NgxGalleryComponent.updateSvgState(' + this.name + ')', 'selectedIndex - ' + selectedIndex);\n }\n\n initPDF(): void {\n if (!!this.images && !!this.images.length) {\n this.isPDF = this.images[this.selectedIndex ? this.selectedIndex : 0] &&\n this.ccMediaService.isPDF(this.images[this.selectedIndex ? this.selectedIndex : 0].type);\n this.logService.log('NgxGalleryComponent.initPDF(' + this.name + ')', 'selectedIndex - ' + this.selectedIndex);\n }\n }\n\n openIconPreview(event, index): void {\n this.logService.log('NgxGalleryComponent.openIconPreview(' + this.name + ')', 'index - ' + index);\n this.openPreview(this.image.selectedIndex);\n }\n\n // TODO: rename to toggleOverlays\n toggleActivation(): void {\n // TODO: rename to overlaysVisible or similar\n this.isSVGActive = !this.isSVGActive;\n this.logService.log('NgxGalleryComponent.toggleActivation(' + this.name + ')', 'isSVGActive - ' + this.isSVGActive);\n // this.setSVG();\n }\n\n // get multimedia functions ...\n isExternalVideo(mtype: string): boolean {\n return this.ccMediaService.isExternalVideo(mtype);\n }\n}\n","\n<div class=\"ngx-gallery-layout {{currentOptions?.layout}}\" [class.preview-only]=\"!currentOptions?.image\" [ngStyle]=\"styleBox\">\n <!--\n currently resizing window does NOT lead to a resize event, if external video in an iframe is shown\n problem: maximizing and minimizing the video would not be possible!\n -->\n @if (ccMediaService.isExternalVideo(types[selectedIndex])) {\n } @else {\n <div (window:resize)=\"onResize()\"></div>\n }\n\n\n @if (currentOptions?.image) {\n <ngx-gallery-image\n [name]=\"name\"\n [style.height]=\"getImageHeight()\"\n [images]=\"mediumImages\"\n [imageWidth]=\"imageWidth\"\n [imageHeight]=\"imageHeight\"\n [imageVBox]=\"imageVBox\"\n [hasVideo]=\"hasVideo\"\n [positionX]=\"positionX\"\n [positionY]=\"positionY\"\n [links]=\"currentOptions?.ccpImageAsLink ? links : []\"\n [widths]=\"widths\"\n [heights]=\"heights\"\n [mediaInfos]=\"mediaInfos\"\n [types]=\"types\"\n [mtypes]=\"mtypes\"\n [isSVGActive]=\"isSVGActive\"\n [clickable]=\"currentOptions?.preview\"\n [selectedIndex]=\"selectedIndex\"\n [arrows]=\"currentOptions?.imageArrows\"\n [arrowsAutoHide]=\"currentOptions?.imageArrowsAutoHide\"\n [arrowPrevIcon]=\"currentOptions?.arrowPrevIcon\"\n [arrowNextIcon]=\"currentOptions?.arrowNextIcon\"\n [swipe]=\"currentOptions?.imageSwipe\"\n [animation]=\"currentOptions?.imageAnimation\"\n [size]=\"currentOptions?.imageSize\"\n [autoPlay]=\"currentOptions?.imageAutoPlay\"\n [autoPlayInterval]=\"currentOptions?.imageAutoPlayInterval\"\n [autoPlayPauseOnHover]=\"currentOptions?.imageAutoPlayPauseOnHover\"\n [infinityMove]=\"currentOptions?.imageInfinityMove\"\n [lazyLoading]=\"currentOptions?.lazyLoading\"\n [actions]=\"currentOptions?.imageActions\"\n [descriptions]=\"descriptions\"\n [showDescription]=\"currentOptions?.imageDescription\"\n [bullets]=\"currentOptions?.imageBullets\"\n (onClick)=\"openPreview($event)\"\n (onActiveChange)=\"selectFromImage($event)\">\n </ngx-gallery-image>\n }\n\n @if (currentOptions?.thumbnails) {\n <ngx-gallery-thumbnails\n [style.marginTop]=\"getThumbnailsMarginTop()\"\n [name]=\"name\"\n [style.marginBottom]=\"getThumbnailsMarginBottom()\"\n [style.height]=\"getThumbnailsHeight()\"\n [images]=\"smallImages\"\n [links]=\"currentOptions?.thumbnailsAsLinks ? links : []\"\n [labels]=\"labels\" [linkTarget]=\"currentOptions?.linkTarget\"\n [widths]=\"widths\"\n [heights]=\"heights\"\n [types]=\"types\"\n [selectedIndex]=\"selectedIndex\"\n [columns]=\"currentOptions?.thumbnailsColumns\"\n [rows]=\"currentOptions?.thumbnailsRows\"\n [margin]=\"currentOptions?.thumbnailMargin\"\n [arrows]=\"currentOptions?.thumbnailsArrows\"\n [arrowsAutoHide]=\"currentOptions?.thumbnailsArrowsAutoHide\"\n [arrowPrevIcon]=\"currentOptions?.arrowPrevIcon\"\n [arrowNextIcon]=\"currentOptions?.arrowNextIcon\"\n [clickable]=\"currentOptions?.image || currentOptions?.preview\"\n [swipe]=\"currentOptions?.thumbnailsSwipe\"\n [size]=\"currentOptions?.thumbnailSize\"\n [moveSize]=\"currentOptions?.thumbnailsMoveSize\"\n [order]=\"currentOptions?.thumbnailsOrder\"\n [remainingCount]=\"currentOptions?.thumbnailsRemainingCount\"\n [lazyLoading]=\"currentOptions?.lazyLoading\"\n [actions]=\"currentOptions?.thumbnailActions\"\n (onActiveChange)=\"selectFromThumbnails($event)\">\n </ngx-gallery-thumbnails>\n }\n\n <ngx-gallery-preview-loader\n #previewLoader\n [name]=\"name\"\n [prevIndex]=\"prevIndex\"\n [images]=\"bigImages\"\n [ordImages]=\"mediumImages\"\n [mediaInfos]=\"mediaInfos\"\n [links]=\"currentOptions?.ccpPreviewImageAsLink ? links : []\"\n [descriptions]=\"descriptions\"\n [widths]=\"widths\"\n [heights]=\"heights\"\n [types]=\"types\"\n [mtypes]=\"mtypes\"\n [showDescription]=\"currentOptions?.previewDescription\"\n [arrowPrevIcon]=\"currentOptions?.arrowPrevIcon\"\n [arrowNextIcon]=\"currentOptions?.arrowNextIcon\"\n [closeIcon]=\"currentOptions?.closeIcon\"\n [fullscreenIcon]=\"currentOptions?.fullscreenIcon\"\n [spinnerIcon]=\"currentOptions?.spinnerIcon\"\n [swipe]=\"currentOptions?.previewSwipe\"\n [fullscreen]=\"currentOptions?.previewFullscreen\"\n [forceFullscreen]=\"currentOptions?.previewForceFullscreen\"\n [closeOnClick]=\"currentOptions?.previewCloseOnClick\"\n [closeOnEsc]=\"currentOptions?.previewCloseOnEsc\"\n [keyboardNavigation]=\"currentOptions?.previewKeyboardNavigation\"\n [animation]=\"currentOptions?.previewAnimation\"\n [autoPlay]=\"currentOptions?.previewAutoPlay\"\n [autoPlayInterval]=\"currentOptions?.previewAutoPlayInterval\"\n [autoPlayPauseOnHover]=\"currentOptions?.previewAutoPlayPauseOnHover\"\n [infinityMove]=\"currentOptions?.previewInfinityMove\"\n [isSVGActive]=\"isSVGActive\"\n [zoom]=\"currentOptions?.previewZoom\" [zoomStep]=\"currentOptions?.previewZoomStep\"\n [zoomMax]=\"currentOptions?.previewZoomMax\" [zoomMin]=\"currentOptions?.previewZoomMin\"\n [zoomInIcon]=\"currentOptions?.zoomInIcon\" [zoomOutIcon]=\"currentOptions?.zoomOutIcon\"\n [actions]=\"currentOptions?.actions\"\n [rotate]=\"currentOptions?.previewRotate\"\n [rotateLeftIcon]=\"currentOptions?.rotateLeftIcon\"\n [rotateRightIcon]=\"currentOptions?.rotateRightIcon\"\n [download]=\"currentOptions?.previewDownload\"\n [downloadIcon]=\"currentOptions?.downloadIcon\"\n [bullets]=\"currentOptions?.previewBullets\"\n (onClose)=\"onPreviewClose()\" (onOpen)=\"onPreviewOpen()\"\n (onActiveChange)=\"previewSelect($event)\"\n [isActive]=\"previewEnabled\">\n </ngx-gallery-preview-loader>\n</div>","import { Injectable } from '@angular/core';\nimport { HammerGestureConfig } from '@angular/platform-browser';\n\n@Injectable()\nexport class CustomHammerConfig extends HammerGestureConfig {\n overrides = {\n pinch: { enable: false },\n rotate: { enable: false }\n };\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { HAMMER_GESTURE_CONFIG } from '@angular/platform-browser';\nimport { CcSupportModule } from '@casus-campus/cc-support';\nimport { NgxGalleryImageSvgComponent } from './image/ngx-gallery-image-svg.component';\nimport { NgxGalleryActionComponent } from './ngx-gallery-action/ngx-gallery-action.component';\nimport { NgxGalleryArrowsComponent } from './ngx-gallery-arrows/ngx-gallery-arrows.component';\nimport { NgxGalleryBulletsComponent } from './ngx-gallery-bullets/ngx-gallery-bullets.component';\nimport { NgxGalleryImageComponent } from './ngx-gallery-image/ngx-gallery-image.component';\nimport { NgxGalleryPreviewComponent } from './ngx-gallery-preview/ngx-gallery-preview.component';\nimport { NgxGalleryThumbnailsComponent } from './ngx-gallery-thumbnails/ngx-gallery-thumbnails.component';\nimport { NgxGalleryVideoComponent } from './ngx-gallery-video/ngx-gallery-video.component';\nimport { NgxGalleryComponent } from './ngx-gallery.component';\nimport { NgxGallerySvgArrowComponent } from './svg/ngx-gallery-svg-arrow.component';\nimport { NgxGallerySvgIconComponent } from './svg/ngx-gallery-svg-icon.component';\nimport { NgxGallerySvgPolygonComponent } from './svg/ngx-gallery-svg-polygon.component';\nimport { NgxGallerySvgTextComponent } from './svg/ngx-gallery-svg-text.component';\nimport { CustomHammerConfig } from './utils/custom-hammer-config.service';\nimport { PreviewLoaderComponent } from './utils/ngx-preview-loader.component';\nimport { UtilsScriptComponent } from './utils/utils-script.component';\n\n@NgModule({\n imports: [\n CommonModule, CcSupportModule\n ],\n declarations: [\n NgxGalleryActionComponent,\n NgxGalleryArrowsComponent,\n NgxGalleryBulletsComponent,\n NgxGalleryImageComponent,\n NgxGalleryThumbnailsComponent,\n NgxGalleryPreviewComponent,\n NgxGalleryComponent,\n // Custom\n NgxGallerySvgPolygonComponent,\n NgxGallerySvgIconComponent,\n NgxGallerySvgArrowComponent,\n NgxGallerySvgTextComponent,\n NgxGalleryImageSvgComponent,\n NgxGalleryVideoComponent,\n UtilsScriptComponent,\n PreviewLoaderComponent\n ],\n exports: [\n NgxGalleryComponent\n ],\n providers: [\n { provide: HAMMER_GESTURE_CONFIG, useClass: CustomHammerConfig }\n ]\n})\nexport class NgxGalleryModule { }\n","import { SafeResourceUrl } from '@angular/platform-browser';\nimport { IMediumAddOn } from '@casus-campus/cc-support';\n\nimport { VideoUrl } from '../utils/videourl.model';\n\nexport interface INgxGalleryImage {\n id?: string;\n small?: string | SafeResourceUrl;\n medium?: string | SafeResourceUrl;\n big?: string | SafeResourceUrl;\n poster?: string | SafeResourceUrl;\n description?: string;\n url?: string;\n label?: string;\n type?: string;\n width?: number;\n height?: number;\n autoplay?: boolean;\n loop?: boolean;\n urls?: VideoUrl[];\n addOns?: IMediumAddOn[];\n}\n\nexport class NgxGalleryImage implements INgxGalleryImage {\n id?: string;\n small?: string | SafeResourceUrl;\n medium?: string | SafeResourceUrl;\n big?: string | SafeResourceUrl;\n poster?: string | SafeResourceUrl;\n description?: string;\n url?: string;\n label?: string;\n type?: string;\n width?: number;\n height?: number;\n autoplay?: boolean;\n loop?: boolean;\n urls?: VideoUrl[];\n addOns?: IMediumAddOn[];\n\n constructor(obj: INgxGalleryImage) {\n this.id = obj.id;\n this.small = obj.small;\n this.medium = obj.medium;\n this.big = obj.big;\n this.poster = obj.poster;\n this.description = obj.description;\n this.url = obj.url;\n this.label = obj.label;\n this.type = obj.type;\n this.width = obj.width;\n this.height = obj.height;\n this.autoplay = obj.autoplay;\n this.loop = obj.loop;\n this.urls = obj.urls;\n this.addOns = obj.addOns;\n }\n}\n","/*\n * Public API Surface of ngx-gallery\n */\n\nexport * from './lib/ngx-gallery.module';\nexport * from './lib/ngx-gallery.component';\nexport * from './lib/ngx-gallery-helper.service';\n\nexport * from './lib/ngx-gallery-action/ngx-gallery-action.component';\nexport * from './lib/ngx-gallery-arrows/ngx-gallery-arrows.component';\nexport * from './lib/ngx-gallery-bullets/ngx-gallery-bullets.component';\nexport * from './lib/ngx-gallery-image/ngx-gallery-image.component';\nexport * from './lib/ngx-gallery-preview/ngx-gallery-preview.component';\nexport * from './lib/ngx-gallery-thumbnails/ngx-gallery-thumbnails.component';\n\nexport * from './lib/models/ngx-gallery-action.model';\nexport * from './lib/models/ngx-gallery-animation.model';\nexport * from './lib/models/ngx-gallery-image.model';\nexport * from './lib/models/ngx-gallery-image-size.model';\nexport * from './lib/models/ngx-gallery-options.model';\nexport * from './lib/models/ngx-gallery-order.model';\nexport * from './lib/models/ngx-gallery-ordered-image.model';\nexport * from './lib/models/ngx-gallery-layout.model';\n\n// Custom\nexport * from './lib/svg/ngx-gallery-svg-text.component';\nexport * from './lib/svg/ngx-gallery-svg-arrow.component';\nexport * from './lib/svg/ngx-gallery-svg-icon.component';\nexport * from './lib/svg/ngx-gallery-svg-polygon.component';\nexport * from './lib/image/ngx-gallery-image-svg.component';\nexport * from './lib/ngx-gallery-video/ngx-gallery-video.component';\nexport * from './lib/utils/utils-script.component';\nexport * from './lib/utils/ngx-preview-loader.component';\n\nexport * from './lib/cc-custom-options';\nexport * from './lib/utils/cc-media.service';\nexport * from './lib/utils/logging.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.NgxGallerySvgPolygonComponent","i2.NgxGallerySvgIconComponent","i3.NgxGallerySvgArrowComponent","i4.NgxGallerySvgTextComponent","i2.UtilsScriptComponent","i2.NgxGalleryActionComponent","i3.NgxGalleryArrowsComponent","i4.NgxGalleryBulletsComponent","i5.NgxGalleryImageSvgComponent","i6.NgxGalleryVideoComponent","i2.NgxGalleryImageComponent","i3.NgxGalleryThumbnailsComponent","i4.PreviewLoaderComponent"],"mappings":"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"}