{"version":3,"file":"ngx-masonry-gallery.mjs","sources":["../../src/lib/utilities.ts","../../src/lib/masonry-gallery.component.ts","../../src/lib/masonry-gallery.module.ts","../../src/public_api.ts","../../src/ngx-masonry-gallery.ts"],"sourcesContent":["export class Utilities {\r\n    newGuid() {\r\n       return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\r\n           // tslint:disable-next-line:no-bitwise triple-equals\r\n           const r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);\r\n           return v.toString(16);\r\n       });\r\n   }\r\n}\r\n\r\nexport let utilities = new Utilities();\r\n","import {\r\n  AfterViewInit,\r\n  Component,\r\n  EventEmitter,\r\n  Input,\r\n  OnChanges,\r\n  OnDestroy,\r\n  Output,\r\n  Renderer2,\r\n  SimpleChanges,\r\n  ChangeDetectionStrategy,\r\n} from \"@angular/core\";\r\nimport * as imagesLoaded from \"imagesloaded\";\r\nimport * as Masonry from \"masonry-layout\";\r\n\r\nimport { IMasonryGalleryImage } from \"./masonry-gallery-models\";\r\nimport { utilities } from \"./utilities\";\r\n\r\n@Component({\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  selector: \"ngx-masonry-gallery\",\r\n  template: '<div [id]=\"galleryGuid\"></div>',\r\n})\r\nexport class MasonryGalleryComponent\r\n  implements AfterViewInit, OnDestroy, OnChanges\r\n{\r\n  @Input() images: IMasonryGalleryImage[] = [];\r\n  @Input() width: number = 330;\r\n  @Input() gutter: number = 5;\r\n  @Input() verticalGutter: number = 5;\r\n  @Input() imageClasses: string[] = [];\r\n\r\n  @Output() clickImage = new EventEmitter<IMasonryGalleryImage>();\r\n  @Output() removeComplete = new EventEmitter<any[]>();\r\n  @Output() layoutComplete = new EventEmitter<any[]>();\r\n\r\n  public readonly galleryGuid: string = utilities.newGuid();\r\n\r\n  private readonly mansonryItemSelectorClass = `grid-item-${this.galleryGuid}`;\r\n  private readonly activeImages: ActiveImage[] = [];\r\n\r\n  private msnry?: Masonry;\r\n  private grid?: HTMLElement | null;\r\n  private changesToProcess?: SimpleChanges;\r\n  private viewReady: boolean = false;\r\n\r\n  constructor(private renderer: Renderer2) {}\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    if (changes.images && changes.images.currentValue) {\r\n      if (!this.viewReady) {\r\n        // process images once we can\r\n        this.changesToProcess = changes;\r\n      } else {\r\n        this.processImages(changes);\r\n      }\r\n    }\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.msnry?.destroy?.();\r\n  }\r\n\r\n  handleClick(image: IMasonryGalleryImage): void {\r\n    this.clickImage.next(image);\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    this.viewReady = true;\r\n    this.initMasonry();\r\n\r\n    // process images now\r\n    if (this.changesToProcess) {\r\n      this.processImages(this.changesToProcess);\r\n      this.changesToProcess = undefined;\r\n    }\r\n  }\r\n\r\n  addImages(images: IMasonryGalleryImage[]): void {\r\n    if (images && images.length > 0) {\r\n      this.addImagesToGallery(images);\r\n    }\r\n  }\r\n\r\n  removeImages(images: IMasonryGalleryImage[]): void {\r\n    if (images && images.length > 0) {\r\n      images.forEach((image) => {\r\n        this.removeImageFromGallery(image);\r\n      });\r\n    }\r\n  }\r\n\r\n  private processImages(changes: SimpleChanges): void {\r\n    const imagesToProcess = this.getAddedAndRemovesImages(changes);\r\n\r\n    // add images to mansonry layout\r\n    this.addImages(imagesToProcess.addedImages);\r\n\r\n    // removes images from layout\r\n    this.removeImages(imagesToProcess.removedImages);\r\n  }\r\n\r\n  private getAddedAndRemovesImages(changes: SimpleChanges): {\r\n    addedImages: IMasonryGalleryImage[];\r\n    removedImages: IMasonryGalleryImage[];\r\n  } {\r\n    let addedImages: IMasonryGalleryImage[] = [];\r\n    const removedImages: IMasonryGalleryImage[] = [];\r\n\r\n    const newImagesValue = changes.images\r\n      .currentValue as IMasonryGalleryImage[];\r\n    const oldImagesValue = changes.images\r\n      .previousValue as IMasonryGalleryImage[];\r\n\r\n    if (!oldImagesValue) {\r\n      // all images are new ones\r\n      addedImages = changes.images.currentValue;\r\n    } else {\r\n      // process added images\r\n      newImagesValue.forEach((newImage) => {\r\n        const existingImage = oldImagesValue.find(\r\n          (m) => m.imageUrl.toLowerCase() === newImage.imageUrl.toLowerCase()\r\n        );\r\n\r\n        if (existingImage) {\r\n          // image was in previous value && is in new, do nothing\r\n        } else {\r\n          // image is new\r\n          addedImages.push(newImage);\r\n        }\r\n      });\r\n\r\n      // process removed images\r\n      oldImagesValue.forEach((oldImage) => {\r\n        const existingImage = newImagesValue.find(\r\n          (m) => m.imageUrl.toLowerCase() === oldImage.imageUrl.toLowerCase()\r\n        );\r\n\r\n        if (existingImage) {\r\n          // image was in previous value && is in new, do nothing\r\n        } else {\r\n          // image is removed\r\n          removedImages.push(oldImage);\r\n        }\r\n      });\r\n    }\r\n\r\n    return {\r\n      addedImages: addedImages,\r\n      removedImages: removedImages,\r\n    };\r\n  }\r\n\r\n  private initMasonry(): void {\r\n    const grid = document.getElementById(this.galleryGuid);\r\n\r\n    if (!grid) {\r\n      console.warn(`Invalid grid element with id '${this.galleryGuid}'`);\r\n      return;\r\n    }\r\n\r\n    // remove all existing data from grid\r\n    grid.innerHTML = \"\";\r\n\r\n    const msnry = new Masonry(grid, {\r\n      // options...\r\n      itemSelector: \".\" + this.mansonryItemSelectorClass,\r\n      columnWidth: this.width,\r\n      gutter: this.gutter,\r\n    });\r\n\r\n    const that = this;\r\n\r\n    msnry.on?.(\"layoutComplete\", (items: any) => {\r\n      that.layoutComplete.next(items);\r\n    });\r\n\r\n    msnry.on?.(\"removeComplete\", (items: any) => {\r\n      that.removeComplete.next(items);\r\n    });\r\n\r\n    this.grid = grid;\r\n    this.msnry = msnry;\r\n  }\r\n\r\n  private removeImageFromGallery(image: IMasonryGalleryImage): void {\r\n    // get image guid\r\n    const imageIdResult = this.activeImages.find(\r\n      (m) => m.image.imageUrl.toLowerCase() === image.imageUrl.toLowerCase()\r\n    );\r\n\r\n    if (!imageIdResult) {\r\n      // image was not found, this is probably an error\r\n      console.warn(\r\n        `Image with url '${image.imageUrl}' was not found. If you are adding images, make sure to 'replace' the images array with a new one\r\n                so that detection change can be executed instead of just adding an image to array\r\n                (which doesn't fire change detection on array property)`\r\n      );\r\n      return;\r\n    }\r\n\r\n    // find image based on its id\r\n    const imageElem = document.getElementById(imageIdResult.id);\r\n\r\n    if (!imageElem) {\r\n      // image was not found in DOM\r\n      console.warn(\r\n        `Image with id '{${imageIdResult.id}}' was not found in DOM. Have you manipulated the DOM in some way?`\r\n      );\r\n      return;\r\n    }\r\n\r\n    // remove image from gallery\r\n    this.msnry?.remove?.([imageElem]);\r\n\r\n    // refresh layout\r\n    this.msnry?.layout?.();\r\n\r\n    // remove image from array\r\n    for (let i = 0; i < this.activeImages.length; i++) {\r\n      const idWithImage = this.activeImages[i];\r\n      if (\r\n        idWithImage.image.imageUrl.toLowerCase() ===\r\n        imageIdResult.image.imageUrl.toLowerCase()\r\n      ) {\r\n        this.activeImages.splice(i, 1);\r\n      }\r\n    }\r\n  }\r\n\r\n  private addImagesToGallery(images: IMasonryGalleryImage[]): void {\r\n    if (!this.grid) {\r\n      throw Error(\r\n        \"Grid element is not yet ready, are you trying to add image too soon?\"\r\n      );\r\n    }\r\n\r\n    const imagesWrapper = this.renderer.createElement(\"span\");\r\n\r\n    images.forEach((image) => {\r\n      // generate unique image id\r\n      const imageId = this.getImageId();\r\n\r\n      // create element\r\n      const imageElem = this.renderer.createElement(\"img\");\r\n      imageElem.setAttribute(\"id\", imageId);\r\n      imageElem.setAttribute(\"alt\", image.alt ? image.alt : \"no description\");\r\n      imageElem.setAttribute(\"src\", image.imageUrl);\r\n      // note - images are hidden by default and should be shown only after they are loaded\r\n      imageElem.setAttribute(\r\n        \"style\",\r\n        `display: block; width: ${this.width}px; margin-bottom: ${this.verticalGutter}px`\r\n      );\r\n      imageElem.className = this.getImageClass();\r\n      imageElem.addEventListener(\"click\", () => {\r\n        this.handleClick(image);\r\n      });\r\n\r\n      // store guid with this image\r\n      this.activeImages.push({\r\n        id: imageId,\r\n        image: image,\r\n      });\r\n\r\n      // add to dom and mansory & refresh layout\r\n      this.renderer.appendChild(imagesWrapper, imageElem);\r\n    });\r\n\r\n    // add html to dom\r\n    this.renderer.appendChild(this.grid, imagesWrapper);\r\n\r\n    // add images once they are loaded\r\n    const imgLoad = imagesLoaded(imagesWrapper);\r\n    imgLoad.on(\"progress\", (instance, image) => {\r\n      if (\r\n        image &&\r\n        image.isLoaded &&\r\n        this.msnry &&\r\n        this.msnry.appended &&\r\n        this.msnry.reloadItems\r\n      ) {\r\n        // this.renderer.appendChild(this.grid, image.img);\r\n        // unhide image\r\n        // this.renderer.setStyle(image.img, \"display\", \"block\");\r\n\r\n        // remove image from gallery\r\n        this.msnry?.addItems?.([image.img]);\r\n\r\n        // refresh layout\r\n        this.msnry?.layout?.();\r\n      }\r\n    });\r\n  }\r\n\r\n  private getImageClass(): string {\r\n    let className = this.mansonryItemSelectorClass;\r\n\r\n    if (this.imageClasses && this.imageClasses.length > 0) {\r\n      const customClass = this.imageClasses.join(\" \");\r\n\r\n      className += \" \" + customClass;\r\n    }\r\n\r\n    return className;\r\n  }\r\n\r\n  private getImageId(): string {\r\n    return this.galleryGuid + \"_\" + utilities.newGuid();\r\n  }\r\n}\r\n\r\ninterface ActiveImage {\r\n  id: string;\r\n  image: IMasonryGalleryImage;\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\n\r\nimport { MasonryGalleryComponent } from './masonry-gallery.component';\r\n\r\n@NgModule({\r\n    imports: [\r\n        CommonModule\r\n    ],\r\n    declarations: [\r\n        MasonryGalleryComponent,\r\n    ],\r\n    exports: [\r\n        MasonryGalleryComponent,\r\n    ],\r\n})\r\nexport class MasonryGalleryModule { }\r\n","/*\r\n * Public API\r\n */\r\n\r\nexport * from './lib/index';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}