@udilhan/ngx-photo-gallery 1.5.15 → 1.5.16

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.
@@ -59,7 +59,7 @@ export class PhotoGalleryGroupDirective {
59
59
  delete targetItem.doGetSlideDimensions;
60
60
  }
61
61
  // Crée la liste complète des médias
62
- this.galleryImages = [...this.galleryItemIds].map((key) => {
62
+ this.galleryImages = ([...this.galleryItemIds].map((key) => {
63
63
  const media = this.galleryItems[key].image;
64
64
  if (this.isVideo(media.src)) {
65
65
  return {
@@ -80,7 +80,7 @@ export class PhotoGalleryGroupDirective {
80
80
  };
81
81
  }
82
82
  return media;
83
- });
83
+ }));
84
84
  const idx = this.galleryImages.findIndex((image) => image.id === id);
85
85
  const options = { ...this.defaultOptions, ...this.options };
86
86
  options.index = idx;
@@ -108,13 +108,12 @@ export class PhotoGalleryGroupDirective {
108
108
  };
109
109
  const photoSwipe = this.lightboxService.getLightboxElement();
110
110
  this.gallery = new PhotoSwipe(photoSwipe, PhotoSwipeUI_Default, this.galleryImages, options);
111
- // À la fin de l'init :
112
- this.gallery.listen('initialZoomInEnd', () => {
113
- // On attend que le DOM du slide soit prêt avant de tenter le "play"
114
- this.waitAndPlayVideo();
111
+ this.gallery.listen('beforeChange', () => {
112
+ this.pauseAllVideos();
115
113
  });
116
- this.gallery.listen('afterChange', () => {
117
- this.waitAndPlayVideo();
114
+ this.gallery.listen('initialZoomInEnd', () => {
115
+ // au début, joue la vidéo si c’est une vidéo
116
+ this.playCurrentSlideVideo();
118
117
  });
119
118
  this.gallery.listen('afterChange', () => {
120
119
  // on met un petit délai pour s’assurer que le DOM est prêt
@@ -140,9 +139,7 @@ export class PhotoGalleryGroupDirective {
140
139
  this.onPhotoGalleryDestroy.emit();
141
140
  });
142
141
  this.onPhotoGalleryInit.emit();
143
- this.pauseAllVideos();
144
142
  this.gallery.init();
145
- setTimeout(() => this.playCurrentSlideVideo(), 200);
146
143
  }
147
144
  async getSlideDimensions(slide) {
148
145
  if (!slide.doGetSlideDimensions) {
@@ -157,7 +154,7 @@ export class PhotoGalleryGroupDirective {
157
154
  }
158
155
  pauseAllVideos() {
159
156
  const vids = document.querySelectorAll('.pswp__video-wrapper video');
160
- vids.forEach((v) => {
157
+ vids.forEach(v => {
161
158
  try {
162
159
  v.pause();
163
160
  v.currentTime = 0;
@@ -168,59 +165,38 @@ export class PhotoGalleryGroupDirective {
168
165
  playCurrentSlideVideo() {
169
166
  if (!this.gallery)
170
167
  return;
168
+ const currentIndex = this.gallery.getCurrentIndex(); // index du slide visible
171
169
  const currentItem = this.gallery.currItem;
172
170
  if (!currentItem)
173
171
  return;
172
+ // 🧠 Cast correct : container est un HTMLElement
174
173
  const container = this.gallery.container;
175
- const slides = Array.from(container.children);
176
- // Stop toutes les vidéos existantes
177
- slides.forEach((slide) => {
178
- const vid = slide.querySelector('video');
179
- if (vid) {
180
- vid.pause();
181
- vid.currentTime = 0;
182
- }
183
- });
184
- // Trouve le slide actif correspondant à la vidéo courante
185
- const activeSlide = slides.find((slide) => {
186
- const video = slide.querySelector('video');
187
- return video && video.src === currentItem.src;
188
- });
174
+ if (!container)
175
+ return;
176
+ // 🧠 Cast des enfants en tableau de HTMLElements
177
+ const slideEls = Array.from(container.children);
178
+ const total = this.gallery.items.length;
179
+ const moduloIndex = currentIndex % 3; // PhotoSwipe recycle 3 conteneurs
180
+ // Sélection du slide actif
181
+ const activeSlide = slideEls[moduloIndex];
189
182
  if (!activeSlide)
190
183
  return;
184
+ // Pause toutes les autres vidéos
185
+ slideEls.forEach(slide => {
186
+ const video = slide.querySelector('video');
187
+ if (video) {
188
+ if (slide === activeSlide)
189
+ return;
190
+ video.pause();
191
+ video.currentTime = 0;
192
+ }
193
+ });
194
+ // Lecture de la vidéo active (si présente)
191
195
  const activeVideo = activeSlide.querySelector('video');
192
196
  if (activeVideo) {
193
197
  activeVideo.play().catch(() => { });
194
198
  }
195
199
  }
196
- waitAndPlayVideo(retries = 10) {
197
- if (!this.gallery)
198
- return;
199
- const currentItem = this.gallery.currItem;
200
- if (!currentItem)
201
- return;
202
- const container = this.gallery.container;
203
- if (!container)
204
- return;
205
- // On cherche la vidéo correspondante au slide courant
206
- const slides = Array.from(container.children);
207
- const activeSlide = slides.find(slide => {
208
- const video = slide.querySelector('video');
209
- return video && video.src === currentItem.src;
210
- });
211
- const video = activeSlide?.querySelector('video');
212
- if (video) {
213
- // petite pause avant le play (évite un "play() request was interrupted")
214
- setTimeout(() => {
215
- this.pauseAllVideos();
216
- video.play().catch(() => { });
217
- }, 50);
218
- }
219
- else if (retries > 0) {
220
- // réessaye après 100ms jusqu’à 10 fois max
221
- setTimeout(() => this.waitAndPlayVideo(retries - 1), 100);
222
- }
223
- }
224
200
  }
225
201
  PhotoGalleryGroupDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: PhotoGalleryGroupDirective, deps: [{ token: i1.PhotoGalleryConfig, optional: true }, { token: i2.LightboxService }], target: i0.ɵɵFactoryTarget.Directive });
226
202
  PhotoGalleryGroupDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: PhotoGalleryGroupDirective, selector: "[photoGalleryGroup]", inputs: { options: ["photoGalleryGroup", "options"] }, outputs: { onPhotoGalleryInit: "onPhotoGalleryInit", onPhotoGalleryDestroy: "onPhotoGalleryDestroy" }, ngImport: i0 });
@@ -247,4 +223,4 @@ function loadImage(path) {
247
223
  image.src = path;
248
224
  });
249
225
  }
250
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhvdG8tZ2FsbGVyeS1ncm91cC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy9saWIvZGlyZWN0aXZlcy9waG90by1nYWxsZXJ5LWdyb3VwLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRixPQUFPLFVBQVUsTUFBTSxZQUFZLENBQUM7QUFDcEMsT0FBTyxvQkFBb0IsTUFBTSx1Q0FBdUMsQ0FBQzs7OztBQU16RSxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUc7SUFDN0IsT0FBTyxFQUFFLEtBQUs7SUFDZCxPQUFPLEVBQUUsSUFBSTtJQUNiLFNBQVMsRUFBRSxLQUFLO0lBQ2hCLFlBQVksRUFBRSxLQUFLO0lBQ25CLE1BQU0sRUFBRSxJQUFJO0lBQ1osT0FBTyxFQUFFLEtBQUs7SUFDZCxTQUFTLEVBQUUsSUFBSTtJQUNmLE9BQU8sRUFBRSxLQUFLO0lBQ2QsV0FBVyxFQUFFLElBQUk7Q0FDbEIsQ0FBQztBQUtGLE1BQU0sT0FBTywwQkFBMEI7SUFXckMsWUFDc0Isa0JBQXNDLEVBQ2xELGVBQWdDO1FBRHBCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDbEQsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBWGhDLHVCQUFrQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDeEMsMEJBQXFCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUc3QyxZQUFPLEdBQTJCLElBQUksQ0FBQztRQUN2QyxpQkFBWSxHQUFtQyxFQUFFLENBQUM7UUFDbEQsbUJBQWMsR0FBZ0IsSUFBSSxHQUFHLEVBQVUsQ0FBQztRQUNoRCxrQkFBYSxHQUFtQixFQUFFLENBQUM7UUFNekMsSUFBSSxDQUFDLGNBQWMsR0FBRyxF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U0FBUyxDQUFDLElBQVk7SUFDN0IsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUNyQyxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQzFCLEtBQUssQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLEtBQUssQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQyxLQUFLLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQztJQUNuQixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIE91dHB1dCwgSW5wdXQsIEV2ZW50RW1pdHRlciwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCBQaG90b1N3aXBlIGZyb20gJ3Bob3Rvc3dpcGUnO1xuaW1wb3J0IFBob3RvU3dpcGVVSV9EZWZhdWx0IGZyb20gJ3Bob3Rvc3dpcGUvZGlzdC9waG90b3N3aXBlLXVpLWRlZmF1bHQnO1xuXG5pbXBvcnQgeyBQaG90b0dhbGxlcnlDb25maWcgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NvbmZpZyc7XG5pbXBvcnQgeyBHYWxsZXJ5SW1hZ2UsIEdhbGxlcnlJdGVtLCBHYWxsZXJ5T3B0aW9ucyB9IGZyb20gJy4uL2ludGVyZmFjZXMvcGhvdG9zd2lwZSc7XG5pbXBvcnQgeyBMaWdodGJveFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9saWdodGJveC5zZXJ2aWNlJztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfT1BUSU9OUyA9IHtcbiAgaGlzdG9yeTogZmFsc2UsXG4gIGNsb3NlRWw6IHRydWUsXG4gIGNhcHRpb25FbDogZmFsc2UsXG4gIGZ1bGxzY3JlZW5FbDogZmFsc2UsXG4gIHpvb21FbDogdHJ1ZSxcbiAgc2hhcmVFbDogZmFsc2UsXG4gIGNvdW50ZXJFbDogdHJ1ZSxcbiAgYXJyb3dFbDogZmFsc2UsXG4gIHByZWxvYWRlckVsOiB0cnVlLFxufTtcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW3Bob3RvR2FsbGVyeUdyb3VwXScsXG59KVxuZXhwb3J0IGNsYXNzIFBob3RvR2FsbGVyeUdyb3VwRGlyZWN0aXZlIHtcbiAgQElucHV0KCdwaG90b0dhbGxlcnlHcm91cCcpIG9wdGlvbnM6IEdhbGxlcnlPcHRpb25zO1xuICBAT3V0cHV0KCkgb25QaG90b0dhbGxlcnlJbml0ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgb25QaG90b0dhbGxlcnlEZXN0cm95ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIHByaXZhdGUgZGVmYXVsdE9wdGlvbnM6IEdhbGxlcnlPcHRpb25zO1xuICBwcml2YXRlIGdhbGxlcnk6IFBob3RvU3dpcGU8YW55PiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGdhbGxlcnlJdGVtczogeyBba2V5OiBzdHJpbmddOiBHYWxsZXJ5SXRlbSB9ID0ge307XG4gIHByaXZhdGUgZ2FsbGVyeUl0ZW1JZHM6IFNldDxzdHJpbmc+ID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIHByaXZhdGUgZ2FsbGVyeUltYWdlczogR2FsbGVyeUltYWdlW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHBob3RvR2FsbGVyeUNvbmZpZzogUGhvdG9HYWxsZXJ5Q29uZmlnLFxuICAgIHByaXZhdGUgbGlnaHRib3hTZXJ2aWNlOiBMaWdodGJveFNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5kZWZhdWx0T3B0aW9ucyA9IHsgLi4uREVGQVVMVF9PUFRJT05TLCAuLi50aGlzLnBob3RvR2FsbGVyeUNvbmZpZz8uZGVmYXVsdE9wdGlvbnMgfTtcbiAgfVxuXG4gIHByaXZhdGUgaXNWaWRlbyh1cmw6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB1cmw/LmluY2x1ZGVzKCcvdmlkZW9zLycpO1xuICB9XG5cbiAgcmVnaXN0ZXJHYWxsZXJ5SXRlbShpdGVtOiB7IGlkOiBzdHJpbmc7IGVsZW1lbnQ6IEhUTUxFbGVtZW50OyBpbWFnZVVybDogc3RyaW5nOyBjYXB0aW9uPzogc3RyaW5nIH0pOiB2b2lkIHtcbiAgICBjb25zdCBpbWFnZTogR2FsbGVyeUltYWdlID0ge1xuICAgICAgaWQ6IGl0ZW0uaWQsXG4gICAgICBzcmM6IGl0ZW0uaW1hZ2VVcmwsXG4gICAgICAuLi4oaXRlbS5jYXB0aW9uID8geyB0aXRsZTogaXRlbS5jYXB0aW9uIH0gOiB7fSksXG4gICAgICB3OiAwLFxuICAgICAgaDogMCxcbiAgICAgIGRvR2V0U2xpZGVEaW1lbnNpb25zOiB0cnVlLFxuICAgIH07XG4gICAgdGhpcy5nYWxsZXJ5SXRlbXNbaXRlbS5pZF0gPSB7XG4gICAgICBpZDogaXRlbS5pZCxcbiAgICAgIGVsZW1lbnQ6IGl0ZW0uZWxlbWVudCxcbiAgICAgIGltYWdlLFxuICAgIH07XG5cbiAgICB0aGlzLmdhbGxlcnlJdGVtSWRzLmFkZChpdGVtLmlkKTtcbiAgfVxuXG4gIHVucmVnaXN0ZXJHYWxsZXJ5SXRlbShpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5nYWxsZXJ5SXRlbUlkcy5kZWxldGUoaWQpO1xuICB9XG5cbiAgYXN5bmMgb3BlblBob3RvU3dpcGUoaWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMubGlnaHRib3hTZXJ2aWNlLmNyZWF0ZSgpO1xuXG4gICAgY29uc3QgdGFyZ2V0SXRlbSA9IHRoaXMuZ2FsbGVyeUl0ZW1zW2lkXS5pbWFnZTtcblxuICAgIGlmICh0YXJnZXRJdGVtLmRvR2V0U2xpZGVEaW1lbnNpb25zICYmICF0aGlzLmlzVmlkZW8odGFyZ2V0SXRlbS5zcmMpKSB7XG4gICAgICBjb25zdCB0YXJnZXRJbWFnZSA9IGF3YWl0IGxvYWRJbWFnZSh0YXJnZXRJdGVtLnNyYyk7XG4gICAgICB0YXJnZXRJdGVtLncgPSB0YXJnZXRJbWFnZS5uYXR1cmFsV2lkdGg7XG4gICAgICB0YXJnZXRJdGVtLmggPSB0YXJnZXRJbWFnZS5uYXR1cmFsSGVpZ2h0O1xuICAgICAgZGVsZXRlIHRhcmdldEl0ZW0uZG9HZXRTbGlkZURpbWVuc2lvbnM7XG4gICAgfVxuXG4gICAgLy8gQ3LDqWUgbGEgbGlzdGUgY29tcGzDqHRlIGRlcyBtw6lkaWFzXG4gICAgdGhpcy5nYWxsZXJ5SW1hZ2VzID0gWy4uLnRoaXMuZ2FsbGVyeUl0ZW1JZHNdLm1hcCgoa2V5KSA9PiB7XG4gICAgICBjb25zdCBtZWRpYSA9IHRoaXMuZ2FsbGVyeUl0ZW1zW2tleV0uaW1hZ2U7XG5cbiAgICAgIGlmICh0aGlzLmlzVmlkZW8obWVkaWEuc3JjKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlkOiBtZWRpYS5pZCxcbiAgICAgICAgICBodG1sOiBgXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInBzd3BfX3ZpZGVvLXdyYXBwZXJcIj5cbiAgICAgICAgICAgIDx2aWRlb1xuICAgICAgICAgICAgICBzcmM9XCIke21lZGlhLnNyY31cIlxuICAgICAgICAgICAgICBjb250cm9sc1xuICAgICAgICAgICAgICBwcmVsb2FkPVwibWV0YWRhdGFcIlxuICAgICAgICAgICAgICBzdHlsZT1cIm1heC13aWR0aDogMTAwJTsgbWF4LWhlaWdodDogMTAwJTsgYm9yZGVyLXJhZGl1czogOHB4O1wiXG4gICAgICAgICAgICA+PC92aWRlbz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgYCxcbiAgICAgICAgICB0aXRsZTogbWVkaWEudGl0bGUgfHwgJycsXG4gICAgICAgICAgdzogMTkyMCxcbiAgICAgICAgICBoOiAxMDgwLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbWVkaWE7XG4gICAgfSkgYXMgYW55W107XG5cbiAgICBjb25zdCBpZHggPSB0aGlzLmdhbGxlcnlJbWFnZXMuZmluZEluZGV4KChpbWFnZSkgPT4gaW1hZ2UuaWQgPT09IGlkKTtcbiAgICBjb25zdCBvcHRpb25zOiBHYWxsZXJ5T3B0aW9ucyA9IHsgLi4udGhpcy5kZWZhdWx0T3B0aW9ucywgLi4udGhpcy5vcHRpb25zIH07XG4gICAgb3B0aW9ucy5pbmRleCA9IGlkeDtcblxuICAgIG9wdGlvbnMuZ2V0VGh1bWJCb3VuZHNGbiA9IChpbWFnZUluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuZ2FsbGVyeUltYWdlc1tpbWFnZUluZGV4XS5pZDtcbiAgICAgIGNvbnN0IHRodW1ibmFpbCA9IHRoaXMuZ2FsbGVyeUl0ZW1zW2tleV0uZWxlbWVudDtcbiAgICAgIGNvbnN0IG9yaWdpbiA9IHRoaXMuZ2FsbGVyeUl0ZW1zW2tleV0uaW1hZ2U7XG4gICAgICBjb25zdCBwYWdlWVNjcm9sbCA9IHdpbmRvdy5wYWdlWU9mZnNldCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wO1xuICAgICAgY29uc3QgcmVjdCA9IHRodW1ibmFpbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgY29uc3QgdGh1bWJuYWlsUmF0ZSA9IHJlY3QuaGVpZ2h0IC8gcmVjdC53aWR0aDtcbiAgICAgIGNvbnN0IG9yaWdpblJhdGUgPSBvcmlnaW4uaCAvIG9yaWdpbi53O1xuICAgICAgbGV0IHg6IG51bWJlciwgeTogbnVtYmVyLCB3OiBudW1iZXI7XG5cbiAgICAgIGlmICh0aHVtYm5haWxSYXRlID4gb3JpZ2luUmF0ZSkge1xuICAgICAgICB5ID0gcmVjdC50b3AgKyBwYWdlWVNjcm9sbDtcbiAgICAgICAgdyA9IChvcmlnaW4udyAqIHJlY3QuaGVpZ2h0KSAvIG9yaWdpbi5oO1xuICAgICAgICB4ID0gcmVjdC5sZWZ0IC0gKHcgLSByZWN0LndpZHRoKSAvIDI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBpbWFnZUhlaWdodCA9IChvcmlnaW4uaCAqIHJlY3Qud2lkdGgpIC8gb3JpZ2luLnc7XG4gICAgICAgIHggPSByZWN0LmxlZnQ7XG4gICAgICAgIHcgPSByZWN0LndpZHRoO1xuICAgICAgICB5ID0gcmVjdC50b3AgKyBwYWdlWVNjcm9sbCAtIChpbWFnZUhlaWdodCAtIHJlY3QuaGVpZ2h0KSAvIDI7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7IHgsIHksIHcgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgcGhvdG9Td2lwZSA9IHRoaXMubGlnaHRib3hTZXJ2aWNlLmdldExpZ2h0Ym94RWxlbWVudCgpO1xuXG4gICAgdGhpcy5nYWxsZXJ5ID0gbmV3IFBob3RvU3dpcGUocGhvdG9Td2lwZSwgUGhvdG9Td2lwZVVJX0RlZmF1bHQsIHRoaXMuZ2FsbGVyeUltYWdlcywgb3B0aW9ucyk7XG5cbiAgICAvLyDinIUgw4AgbGEgZmluIGRlIGwnaW5pdCA6XG4gICAgdGhpcy5nYWxsZXJ5Lmxpc3RlbignaW5pdGlhbFpvb21JbkVuZCcsICgpID0+IHtcbiAgICAgIC8vIE9uIGF0dGVuZCBxdWUgbGUgRE9NIGR1IHNsaWRlIHNvaXQgcHLDqnQgYXZhbnQgZGUgdGVudGVyIGxlIFwicGxheVwiXG4gICAgICB0aGlzLndhaXRBbmRQbGF5VmlkZW8oKTtcbiAgICB9KTtcblxuICAgIHRoaXMuZ2FsbGVyeS5saXN0ZW4oJ2FmdGVyQ2hhbmdlJywgKCkgPT4ge1xuICAgICAgdGhpcy53YWl0QW5kUGxheVZpZGVvKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmdhbGxlcnkubGlzdGVuKCdhZnRlckNoYW5nZScsICgpID0+IHtcbiAgICAgIC8vIG9uIG1ldCB1biBwZXRpdCBkw6lsYWkgcG91ciBz4oCZYXNzdXJlciBxdWUgbGUgRE9NIGVzdCBwcsOqdFxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMucGxheUN1cnJlbnRTbGlkZVZpZGVvKCk7XG4gICAgICB9LCAyMDApO1xuICAgIH0pO1xuXG4gICAgdGhpcy5nYWxsZXJ5Lmxpc3RlbignZGVzdHJveScsICgpID0+IHtcbiAgICAgIHRoaXMucGF1c2VBbGxWaWRlb3MoKTtcbiAgICB9KTtcblxuICAgIHRoaXMuZ2FsbGVyeS5saXN0ZW4oJ2dldHRpbmdEYXRhJywgKF8sIHNsaWRlOiBhbnkpID0+IHtcbiAgICAgIGlmIChzbGlkZS5kb0dldFNsaWRlRGltZW5zaW9ucyAmJiAhdGhpcy5pc1ZpZGVvKHNsaWRlLnNyYykpIHtcbiAgICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiBhd2FpdCB0aGlzLmdldFNsaWRlRGltZW5zaW9ucyhzbGlkZSksIDMwMCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmdhbGxlcnkubGlzdGVuKCdpbWFnZUxvYWRDb21wbGV0ZScsIGFzeW5jIChfLCBzbGlkZTogYW55KSA9PiB7XG4gICAgICBpZiAoc2xpZGUuZG9HZXRTbGlkZURpbWVuc2lvbnMgJiYgIXRoaXMuaXNWaWRlbyhzbGlkZS5zcmMpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZ2V0U2xpZGVEaW1lbnNpb25zKHNsaWRlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuZ2FsbGVyeS5saXN0ZW4oJ2Rlc3Ryb3knLCAoKSA9PiB7XG4gICAgICB0aGlzLmxpZ2h0Ym94U2VydmljZS5kZXN0cm95KCk7XG4gICAgICB0aGlzLm9uUGhvdG9HYWxsZXJ5RGVzdHJveS5lbWl0KCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLm9uUGhvdG9HYWxsZXJ5SW5pdC5lbWl0KCk7XG4gICAgdGhpcy5wYXVzZUFsbFZpZGVvcygpO1xuICAgIHRoaXMuZ2FsbGVyeS5pbml0KCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnBsYXlDdXJyZW50U2xpZGVWaWRlbygpLCAyMDApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRTbGlkZURpbWVuc2lvbnMoc2xpZGU6IEdhbGxlcnlJbWFnZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghc2xpZGUuZG9HZXRTbGlkZURpbWVuc2lvbnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpbWFnZTogSFRNTEltYWdlRWxlbWVudCA9IGF3YWl0IGxvYWRJbWFnZShzbGlkZS5zcmMpLmNhdGNoKCgpID0+IG51bGwpO1xuXG4gICAgc2xpZGUuZG9HZXRTbGlkZURpbWVuc2lvbnMgPSBmYWxzZTtcblxuICAgIHNsaWRlLncgPSBpbWFnZS5uYXR1cmFsV2lkdGg7XG4gICAgc2xpZGUuaCA9IGltYWdlLm5hdHVyYWxIZWlnaHQ7XG5cbiAgICB0aGlzLmdhbGxlcnkuaW52YWxpZGF0ZUN1cnJJdGVtcygpO1xuICAgIHRoaXMuZ2FsbGVyeS51cGRhdGVTaXplKHRydWUpO1xuICB9XG4gIHByaXZhdGUgcGF1c2VBbGxWaWRlb3MoKSB7XG4gICAgY29uc3QgdmlkcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTFZpZGVvRWxlbWVudD4oJy5wc3dwX192aWRlby13cmFwcGVyIHZpZGVvJyk7XG4gICAgdmlkcy5mb3JFYWNoKCh2KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICB2LnBhdXNlKCk7XG4gICAgICAgIHYuY3VycmVudFRpbWUgPSAwO1xuICAgICAgfSBjYXRjaCAoXykge31cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcGxheUN1cnJlbnRTbGlkZVZpZGVvKCkge1xuICAgIGlmICghdGhpcy5nYWxsZXJ5KSByZXR1cm47XG4gICAgY29uc3QgY3VycmVudEl0ZW0gPSB0aGlzLmdhbGxlcnkuY3Vyckl0ZW07XG4gICAgaWYgKCFjdXJyZW50SXRlbSkgcmV0dXJuO1xuXG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5nYWxsZXJ5LmNvbnRhaW5lciBhcyBIVE1MRWxlbWVudDtcbiAgICBjb25zdCBzbGlkZXMgPSBBcnJheS5mcm9tKGNvbnRhaW5lci5jaGlsZHJlbikgYXMgSFRNTEVsZW1lbnRbXTtcblxuICAgIC8vIFN0b3AgdG91dGVzIGxlcyB2aWTDqW9zIGV4aXN0YW50ZXNcbiAgICBzbGlkZXMuZm9yRWFjaCgoc2xpZGUpID0+IHtcbiAgICAgIGNvbnN0IHZpZCA9IHNsaWRlLnF1ZXJ5U2VsZWN0b3I8SFRNTFZpZGVvRWxlbWVudD4oJ3ZpZGVvJyk7XG4gICAgICBpZiAodmlkKSB7XG4gICAgICAgIHZpZC5wYXVzZSgpO1xuICAgICAgICB2aWQuY3VycmVudFRpbWUgPSAwO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gVHJvdXZlIGxlIHNsaWRlIGFjdGlmIGNvcnJlc3BvbmRhbnQgw6AgbGEgdmlkw6lvIGNvdXJhbnRlXG4gICAgY29uc3QgYWN0aXZlU2xpZGUgPSBzbGlkZXMuZmluZCgoc2xpZGUpID0+IHtcbiAgICAgIGNvbnN0IHZpZGVvID0gc2xpZGUucXVlcnlTZWxlY3RvcjxIVE1MVmlkZW9FbGVtZW50PigndmlkZW8nKTtcbiAgICAgIHJldHVybiB2aWRlbyAmJiB2aWRlby5zcmMgPT09IGN1cnJlbnRJdGVtLnNyYztcbiAgICB9KTtcblxuICAgIGlmICghYWN0aXZlU2xpZGUpIHJldHVybjtcblxuICAgIGNvbnN0IGFjdGl2ZVZpZGVvID0gYWN0aXZlU2xpZGUucXVlcnlTZWxlY3RvcjxIVE1MVmlkZW9FbGVtZW50PigndmlkZW8nKTtcbiAgICBpZiAoYWN0aXZlVmlkZW8pIHtcbiAgICAgIGFjdGl2ZVZpZGVvLnBsYXkoKS5jYXRjaCgoKSA9PiB7fSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB3YWl0QW5kUGxheVZpZGVvKHJldHJpZXMgPSAxMCkge1xuICAgIGlmICghdGhpcy5nYWxsZXJ5KSByZXR1cm47XG5cbiAgICBjb25zdCBjdXJyZW50SXRlbSA9IHRoaXMuZ2FsbGVyeS5jdXJySXRlbTtcbiAgICBpZiAoIWN1cnJlbnRJdGVtKSByZXR1cm47XG5cbiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLmdhbGxlcnkuY29udGFpbmVyIGFzIEhUTUxFbGVtZW50O1xuICAgIGlmICghY29udGFpbmVyKSByZXR1cm47XG5cbiAgICAvLyBPbiBjaGVyY2hlIGxhIHZpZMOpbyBjb3JyZXNwb25kYW50ZSBhdSBzbGlkZSBjb3VyYW50XG4gICAgY29uc3Qgc2xpZGVzID0gQXJyYXkuZnJvbShjb250YWluZXIuY2hpbGRyZW4pIGFzIEhUTUxFbGVtZW50W107XG4gICAgY29uc3QgYWN0aXZlU2xpZGUgPSBzbGlkZXMuZmluZChzbGlkZSA9PiB7XG4gICAgICBjb25zdCB2aWRlbyA9IHNsaWRlLnF1ZXJ5U2VsZWN0b3I8SFRNTFZpZGVvRWxlbWVudD4oJ3ZpZGVvJyk7XG4gICAgICByZXR1cm4gdmlkZW8gJiYgdmlkZW8uc3JjID09PSBjdXJyZW50SXRlbS5zcmM7XG4gICAgfSk7XG5cbiAgICBjb25zdCB2aWRlbyA9IGFjdGl2ZVNsaWRlPy5xdWVyeVNlbGVjdG9yPEhUTUxWaWRlb0VsZW1lbnQ+KCd2aWRlbycpO1xuXG4gICAgaWYgKHZpZGVvKSB7XG4gICAgICAvLyBwZXRpdGUgcGF1c2UgYXZhbnQgbGUgcGxheSAow6l2aXRlIHVuIFwicGxheSgpIHJlcXVlc3Qgd2FzIGludGVycnVwdGVkXCIpXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5wYXVzZUFsbFZpZGVvcygpO1xuICAgICAgICB2aWRlby5wbGF5KCkuY2F0Y2goKCkgPT4ge30pO1xuICAgICAgfSwgNTApO1xuICAgIH0gZWxzZSBpZiAocmV0cmllcyA+IDApIHtcbiAgICAgIC8vIHLDqWVzc2F5ZSBhcHLDqHMgMTAwbXMganVzcXXigJnDoCAxMCBmb2lzIG1heFxuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLndhaXRBbmRQbGF5VmlkZW8ocmV0cmllcyAtIDEpLCAxMDApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBsb2FkSW1hZ2UocGF0aDogc3RyaW5nKTogUHJvbWlzZTxIVE1MSW1hZ2VFbGVtZW50PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgaW1hZ2UgPSBuZXcgSW1hZ2UoKTtcbiAgICBpbWFnZS5vbmxvYWQgPSAoKSA9PiByZXNvbHZlKGltYWdlKTtcbiAgICBpbWFnZS5vbmVycm9yID0gKGUpID0+IHJlamVjdChlKTtcbiAgICBpbWFnZS5zcmMgPSBwYXRoO1xuICB9KTtcbn1cbiJdfQ==
226
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhvdG8tZ2FsbGVyeS1ncm91cC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy9saWIvZGlyZWN0aXZlcy9waG90by1nYWxsZXJ5LWdyb3VwLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRixPQUFPLFVBQVUsTUFBTSxZQUFZLENBQUM7QUFDcEMsT0FBTyxvQkFBb0IsTUFBTSx1Q0FBdUMsQ0FBQzs7OztBQU16RSxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUc7SUFDN0IsT0FBTyxFQUFFLEtBQUs7SUFDZCxPQUFPLEVBQUUsSUFBSTtJQUNiLFNBQVMsRUFBRSxLQUFLO0lBQ2hCLFlBQVksRUFBRSxLQUFLO0lBQ25CLE1BQU0sRUFBRSxJQUFJO0lBQ1osT0FBTyxFQUFFLEtBQUs7SUFDZCxTQUFTLEVBQUUsSUFBSTtJQUNmLE9BQU8sRUFBRSxLQUFLO0lBQ2QsV0FBVyxFQUFFLElBQUk7Q0FDbEIsQ0FBQztBQUtGLE1BQU0sT0FBTywwQkFBMEI7SUFXckMsWUFDc0Isa0JBQXNDLEVBQ2xELGVBQWdDO1FBRHBCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDbEQsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBWGhDLHVCQUFrQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDeEMsMEJBQXFCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUc3QyxZQUFPLEdBQTJCLElBQUksQ0FBQztRQUN2QyxpQkFBWSxHQUFtQyxFQUFFLENBQUM7UUFDbEQsbUJBQWMsR0FBZ0IsSUFBSSxHQUFHLEVBQVUsQ0FBQztRQUNoRCxrQkFBYSxHQUFtQixFQUFFLENBQUM7UUFNekMsSUFBSSxDQUFDLGNBQWMsR0FBRyxF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UyxDQUFDLElBQVk7SUFDN0IsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUNyQyxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQzFCLEtBQUssQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLEtBQUssQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQyxLQUFLLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQztJQUNuQixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIE91dHB1dCwgSW5wdXQsIEV2ZW50RW1pdHRlciwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCBQaG90b1N3aXBlIGZyb20gJ3Bob3Rvc3dpcGUnO1xuaW1wb3J0IFBob3RvU3dpcGVVSV9EZWZhdWx0IGZyb20gJ3Bob3Rvc3dpcGUvZGlzdC9waG90b3N3aXBlLXVpLWRlZmF1bHQnO1xuXG5pbXBvcnQgeyBQaG90b0dhbGxlcnlDb25maWcgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NvbmZpZyc7XG5pbXBvcnQgeyBHYWxsZXJ5SW1hZ2UsIEdhbGxlcnlJdGVtLCBHYWxsZXJ5T3B0aW9ucyB9IGZyb20gJy4uL2ludGVyZmFjZXMvcGhvdG9zd2lwZSc7XG5pbXBvcnQgeyBMaWdodGJveFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9saWdodGJveC5zZXJ2aWNlJztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfT1BUSU9OUyA9IHtcbiAgaGlzdG9yeTogZmFsc2UsXG4gIGNsb3NlRWw6IHRydWUsXG4gIGNhcHRpb25FbDogZmFsc2UsXG4gIGZ1bGxzY3JlZW5FbDogZmFsc2UsXG4gIHpvb21FbDogdHJ1ZSxcbiAgc2hhcmVFbDogZmFsc2UsXG4gIGNvdW50ZXJFbDogdHJ1ZSxcbiAgYXJyb3dFbDogZmFsc2UsXG4gIHByZWxvYWRlckVsOiB0cnVlLFxufTtcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW3Bob3RvR2FsbGVyeUdyb3VwXScsXG59KVxuZXhwb3J0IGNsYXNzIFBob3RvR2FsbGVyeUdyb3VwRGlyZWN0aXZlIHtcbiAgQElucHV0KCdwaG90b0dhbGxlcnlHcm91cCcpIG9wdGlvbnM6IEdhbGxlcnlPcHRpb25zO1xuICBAT3V0cHV0KCkgb25QaG90b0dhbGxlcnlJbml0ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgb25QaG90b0dhbGxlcnlEZXN0cm95ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIHByaXZhdGUgZGVmYXVsdE9wdGlvbnM6IEdhbGxlcnlPcHRpb25zO1xuICBwcml2YXRlIGdhbGxlcnk6IFBob3RvU3dpcGU8YW55PiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGdhbGxlcnlJdGVtczogeyBba2V5OiBzdHJpbmddOiBHYWxsZXJ5SXRlbSB9ID0ge307XG4gIHByaXZhdGUgZ2FsbGVyeUl0ZW1JZHM6IFNldDxzdHJpbmc+ID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIHByaXZhdGUgZ2FsbGVyeUltYWdlczogR2FsbGVyeUltYWdlW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHBob3RvR2FsbGVyeUNvbmZpZzogUGhvdG9HYWxsZXJ5Q29uZmlnLFxuICAgIHByaXZhdGUgbGlnaHRib3hTZXJ2aWNlOiBMaWdodGJveFNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5kZWZhdWx0T3B0aW9ucyA9IHsgLi4uREVGQVVMVF9PUFRJT05TLCAuLi50aGlzLnBob3RvR2FsbGVyeUNvbmZpZz8uZGVmYXVsdE9wdGlvbnMgfTtcbiAgfVxuXG4gIHByaXZhdGUgaXNWaWRlbyh1cmw6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB1cmw/LmluY2x1ZGVzKCcvdmlkZW9zLycpO1xuICB9XG5cbiAgcmVnaXN0ZXJHYWxsZXJ5SXRlbShpdGVtOiB7IGlkOiBzdHJpbmc7IGVsZW1lbnQ6IEhUTUxFbGVtZW50OyBpbWFnZVVybDogc3RyaW5nOyBjYXB0aW9uPzogc3RyaW5nIH0pOiB2b2lkIHtcbiAgICBjb25zdCBpbWFnZTogR2FsbGVyeUltYWdlID0ge1xuICAgICAgaWQ6IGl0ZW0uaWQsXG4gICAgICBzcmM6IGl0ZW0uaW1hZ2VVcmwsXG4gICAgICAuLi4oaXRlbS5jYXB0aW9uID8geyB0aXRsZTogaXRlbS5jYXB0aW9uIH0gOiB7fSksXG4gICAgICB3OiAwLFxuICAgICAgaDogMCxcbiAgICAgIGRvR2V0U2xpZGVEaW1lbnNpb25zOiB0cnVlLFxuICAgIH07XG4gICAgdGhpcy5nYWxsZXJ5SXRlbXNbaXRlbS5pZF0gPSB7XG4gICAgICBpZDogaXRlbS5pZCxcbiAgICAgIGVsZW1lbnQ6IGl0ZW0uZWxlbWVudCxcbiAgICAgIGltYWdlLFxuICAgIH07XG5cbiAgICB0aGlzLmdhbGxlcnlJdGVtSWRzLmFkZChpdGVtLmlkKTtcbiAgfVxuXG4gIHVucmVnaXN0ZXJHYWxsZXJ5SXRlbShpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5nYWxsZXJ5SXRlbUlkcy5kZWxldGUoaWQpO1xuICB9XG5cbiAgYXN5bmMgb3BlblBob3RvU3dpcGUoaWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMubGlnaHRib3hTZXJ2aWNlLmNyZWF0ZSgpO1xuXG4gICAgY29uc3QgdGFyZ2V0SXRlbSA9IHRoaXMuZ2FsbGVyeUl0ZW1zW2lkXS5pbWFnZTtcblxuICAgIGlmICh0YXJnZXRJdGVtLmRvR2V0U2xpZGVEaW1lbnNpb25zICYmICF0aGlzLmlzVmlkZW8odGFyZ2V0SXRlbS5zcmMpKSB7XG4gICAgICBjb25zdCB0YXJnZXRJbWFnZSA9IGF3YWl0IGxvYWRJbWFnZSh0YXJnZXRJdGVtLnNyYyk7XG4gICAgICB0YXJnZXRJdGVtLncgPSB0YXJnZXRJbWFnZS5uYXR1cmFsV2lkdGg7XG4gICAgICB0YXJnZXRJdGVtLmggPSB0YXJnZXRJbWFnZS5uYXR1cmFsSGVpZ2h0O1xuICAgICAgZGVsZXRlIHRhcmdldEl0ZW0uZG9HZXRTbGlkZURpbWVuc2lvbnM7XG4gICAgfVxuXG4gICAgLy8gQ3LDqWUgbGEgbGlzdGUgY29tcGzDqHRlIGRlcyBtw6lkaWFzXG4gICAgdGhpcy5nYWxsZXJ5SW1hZ2VzID0gKFsuLi50aGlzLmdhbGxlcnlJdGVtSWRzXS5tYXAoKGtleSkgPT4ge1xuICAgICAgY29uc3QgbWVkaWEgPSB0aGlzLmdhbGxlcnlJdGVtc1trZXldLmltYWdlO1xuXG4gICAgICBpZiAodGhpcy5pc1ZpZGVvKG1lZGlhLnNyYykpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpZDogbWVkaWEuaWQsXG4gICAgICAgICAgaHRtbDogYFxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwc3dwX192aWRlby13cmFwcGVyXCI+XG4gICAgICAgICAgICA8dmlkZW9cbiAgICAgICAgICAgICAgc3JjPVwiJHttZWRpYS5zcmN9XCJcbiAgICAgICAgICAgICAgY29udHJvbHNcbiAgICAgICAgICAgICAgcHJlbG9hZD1cIm1ldGFkYXRhXCJcbiAgICAgICAgICAgICAgc3R5bGU9XCJtYXgtd2lkdGg6IDEwMCU7IG1heC1oZWlnaHQ6IDEwMCU7IGJvcmRlci1yYWRpdXM6IDhweDtcIlxuICAgICAgICAgICAgPjwvdmlkZW8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIGAsXG4gICAgICAgICAgdGl0bGU6IG1lZGlhLnRpdGxlIHx8ICcnLFxuICAgICAgICAgIHc6IDE5MjAsXG4gICAgICAgICAgaDogMTA4MCxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG1lZGlhO1xuICAgIH0pKSBhcyBhbnlbXTtcblxuICAgIGNvbnN0IGlkeCA9IHRoaXMuZ2FsbGVyeUltYWdlcy5maW5kSW5kZXgoKGltYWdlKSA9PiBpbWFnZS5pZCA9PT0gaWQpO1xuICAgIGNvbnN0IG9wdGlvbnM6IEdhbGxlcnlPcHRpb25zID0geyAuLi50aGlzLmRlZmF1bHRPcHRpb25zLCAuLi50aGlzLm9wdGlvbnMgfTtcbiAgICBvcHRpb25zLmluZGV4ID0gaWR4O1xuXG4gICAgb3B0aW9ucy5nZXRUaHVtYkJvdW5kc0ZuID0gKGltYWdlSW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gdGhpcy5nYWxsZXJ5SW1hZ2VzW2ltYWdlSW5kZXhdLmlkO1xuICAgICAgY29uc3QgdGh1bWJuYWlsID0gdGhpcy5nYWxsZXJ5SXRlbXNba2V5XS5lbGVtZW50O1xuICAgICAgY29uc3Qgb3JpZ2luID0gdGhpcy5nYWxsZXJ5SXRlbXNba2V5XS5pbWFnZTtcbiAgICAgIGNvbnN0IHBhZ2VZU2Nyb2xsID0gd2luZG93LnBhZ2VZT2Zmc2V0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3A7XG4gICAgICBjb25zdCByZWN0ID0gdGh1bWJuYWlsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICBjb25zdCB0aHVtYm5haWxSYXRlID0gcmVjdC5oZWlnaHQgLyByZWN0LndpZHRoO1xuICAgICAgY29uc3Qgb3JpZ2luUmF0ZSA9IG9yaWdpbi5oIC8gb3JpZ2luLnc7XG4gICAgICBsZXQgeDogbnVtYmVyLCB5OiBudW1iZXIsIHc6IG51bWJlcjtcblxuICAgICAgaWYgKHRodW1ibmFpbFJhdGUgPiBvcmlnaW5SYXRlKSB7XG4gICAgICAgIHkgPSByZWN0LnRvcCArIHBhZ2VZU2Nyb2xsO1xuICAgICAgICB3ID0gKG9yaWdpbi53ICogcmVjdC5oZWlnaHQpIC8gb3JpZ2luLmg7XG4gICAgICAgIHggPSByZWN0LmxlZnQgLSAodyAtIHJlY3Qud2lkdGgpIC8gMjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGltYWdlSGVpZ2h0ID0gKG9yaWdpbi5oICogcmVjdC53aWR0aCkgLyBvcmlnaW4udztcbiAgICAgICAgeCA9IHJlY3QubGVmdDtcbiAgICAgICAgdyA9IHJlY3Qud2lkdGg7XG4gICAgICAgIHkgPSByZWN0LnRvcCArIHBhZ2VZU2Nyb2xsIC0gKGltYWdlSGVpZ2h0IC0gcmVjdC5oZWlnaHQpIC8gMjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHsgeCwgeSwgdyB9O1xuICAgIH07XG5cbiAgICBjb25zdCBwaG90b1N3aXBlID0gdGhpcy5saWdodGJveFNlcnZpY2UuZ2V0TGlnaHRib3hFbGVtZW50KCk7XG5cbiAgICB0aGlzLmdhbGxlcnkgPSBuZXcgUGhvdG9Td2lwZShwaG90b1N3aXBlLCBQaG90b1N3aXBlVUlfRGVmYXVsdCwgdGhpcy5nYWxsZXJ5SW1hZ2VzLCBvcHRpb25zKTtcblxuICAgIHRoaXMuZ2FsbGVyeS5saXN0ZW4oJ2JlZm9yZUNoYW5nZScsICgpID0+IHtcbiAgICAgIHRoaXMucGF1c2VBbGxWaWRlb3MoKTtcbiAgICB9KTtcblxuICAgIHRoaXMuZ2FsbGVyeS5saXN0ZW4oJ2luaXRpYWxab29tSW5FbmQnLCAoKSA9PiB7XG4gICAgICAvLyBhdSBkw6lidXQsIGpvdWUgbGEgdmlkw6lvIHNpIGPigJllc3QgdW5lIHZpZMOpb1xuICAgICAgdGhpcy5wbGF5Q3VycmVudFNsaWRlVmlkZW8oKTtcbiAgICB9KTtcblxuICAgIHRoaXMuZ2FsbGVyeS5saXN0ZW4oJ2FmdGVyQ2hhbmdlJywgKCkgPT4ge1xuICAgICAgLy8gb24gbWV0IHVuIHBldGl0IGTDqWxhaSBwb3VyIHPigJlhc3N1cmVyIHF1ZSBsZSBET00gZXN0IHByw6p0XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5wbGF5Q3VycmVudFNsaWRlVmlkZW8oKTtcbiAgICAgIH0sIDIwMCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmdhbGxlcnkubGlzdGVuKCdkZXN0cm95JywgKCkgPT4ge1xuICAgICAgdGhpcy5wYXVzZUFsbFZpZGVvcygpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5nYWxsZXJ5Lmxpc3RlbignZ2V0dGluZ0RhdGEnLCAoXywgc2xpZGU6IGFueSkgPT4ge1xuICAgICAgaWYgKHNsaWRlLmRvR2V0U2xpZGVEaW1lbnNpb25zICYmICF0aGlzLmlzVmlkZW8oc2xpZGUuc3JjKSkge1xuICAgICAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IGF3YWl0IHRoaXMuZ2V0U2xpZGVEaW1lbnNpb25zKHNsaWRlKSwgMzAwKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuZ2FsbGVyeS5saXN0ZW4oJ2ltYWdlTG9hZENvbXBsZXRlJywgYXN5bmMgKF8sIHNsaWRlOiBhbnkpID0+IHtcbiAgICAgIGlmIChzbGlkZS5kb0dldFNsaWRlRGltZW5zaW9ucyAmJiAhdGhpcy5pc1ZpZGVvKHNsaWRlLnNyYykpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5nZXRTbGlkZURpbWVuc2lvbnMoc2xpZGUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5nYWxsZXJ5Lmxpc3RlbignZGVzdHJveScsICgpID0+IHtcbiAgICAgIHRoaXMubGlnaHRib3hTZXJ2aWNlLmRlc3Ryb3koKTtcbiAgICAgIHRoaXMub25QaG90b0dhbGxlcnlEZXN0cm95LmVtaXQoKTtcbiAgICB9KTtcblxuICAgIHRoaXMub25QaG90b0dhbGxlcnlJbml0LmVtaXQoKTtcbiAgICB0aGlzLmdhbGxlcnkuaW5pdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRTbGlkZURpbWVuc2lvbnMoc2xpZGU6IEdhbGxlcnlJbWFnZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghc2xpZGUuZG9HZXRTbGlkZURpbWVuc2lvbnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpbWFnZTogSFRNTEltYWdlRWxlbWVudCA9IGF3YWl0IGxvYWRJbWFnZShzbGlkZS5zcmMpLmNhdGNoKCgpID0+IG51bGwpO1xuXG4gICAgc2xpZGUuZG9HZXRTbGlkZURpbWVuc2lvbnMgPSBmYWxzZTtcblxuICAgIHNsaWRlLncgPSBpbWFnZS5uYXR1cmFsV2lkdGg7XG4gICAgc2xpZGUuaCA9IGltYWdlLm5hdHVyYWxIZWlnaHQ7XG5cbiAgICB0aGlzLmdhbGxlcnkuaW52YWxpZGF0ZUN1cnJJdGVtcygpO1xuICAgIHRoaXMuZ2FsbGVyeS51cGRhdGVTaXplKHRydWUpO1xuICB9XG4gIHByaXZhdGUgcGF1c2VBbGxWaWRlb3MoKSB7XG4gICAgY29uc3QgdmlkcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTFZpZGVvRWxlbWVudD4oJy5wc3dwX192aWRlby13cmFwcGVyIHZpZGVvJyk7XG4gICAgdmlkcy5mb3JFYWNoKHYgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdi5wYXVzZSgpO1xuICAgICAgICB2LmN1cnJlbnRUaW1lID0gMDtcbiAgICAgIH0gY2F0Y2goXyl7fVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBwbGF5Q3VycmVudFNsaWRlVmlkZW8oKSB7XG4gICAgaWYgKCF0aGlzLmdhbGxlcnkpIHJldHVybjtcblxuICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IHRoaXMuZ2FsbGVyeS5nZXRDdXJyZW50SW5kZXgoKTsgLy8gaW5kZXggZHUgc2xpZGUgdmlzaWJsZVxuICAgIGNvbnN0IGN1cnJlbnRJdGVtID0gdGhpcy5nYWxsZXJ5LmN1cnJJdGVtO1xuICAgIGlmICghY3VycmVudEl0ZW0pIHJldHVybjtcblxuICAgIC8vIPCfp6AgQ2FzdCBjb3JyZWN0IDogY29udGFpbmVyIGVzdCB1biBIVE1MRWxlbWVudFxuICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuZ2FsbGVyeS5jb250YWluZXIgYXMgSFRNTEVsZW1lbnQ7XG4gICAgaWYgKCFjb250YWluZXIpIHJldHVybjtcblxuICAgIC8vIPCfp6AgQ2FzdCBkZXMgZW5mYW50cyBlbiB0YWJsZWF1IGRlIEhUTUxFbGVtZW50c1xuICAgIGNvbnN0IHNsaWRlRWxzID0gQXJyYXkuZnJvbShjb250YWluZXIuY2hpbGRyZW4pIGFzIEhUTUxFbGVtZW50W107XG4gICAgY29uc3QgdG90YWwgPSB0aGlzLmdhbGxlcnkuaXRlbXMubGVuZ3RoO1xuICAgIGNvbnN0IG1vZHVsb0luZGV4ID0gY3VycmVudEluZGV4ICUgMzsgLy8gUGhvdG9Td2lwZSByZWN5Y2xlIDMgY29udGVuZXVyc1xuXG4gICAgLy8gU8OpbGVjdGlvbiBkdSBzbGlkZSBhY3RpZlxuICAgIGNvbnN0IGFjdGl2ZVNsaWRlID0gc2xpZGVFbHNbbW9kdWxvSW5kZXhdO1xuICAgIGlmICghYWN0aXZlU2xpZGUpIHJldHVybjtcblxuICAgIC8vIFBhdXNlIHRvdXRlcyBsZXMgYXV0cmVzIHZpZMOpb3NcbiAgICBzbGlkZUVscy5mb3JFYWNoKHNsaWRlID0+IHtcbiAgICAgIGNvbnN0IHZpZGVvID0gc2xpZGUucXVlcnlTZWxlY3RvcjxIVE1MVmlkZW9FbGVtZW50PigndmlkZW8nKTtcbiAgICAgIGlmICh2aWRlbykge1xuICAgICAgICBpZiAoc2xpZGUgPT09IGFjdGl2ZVNsaWRlKSByZXR1cm47XG4gICAgICAgIHZpZGVvLnBhdXNlKCk7XG4gICAgICAgIHZpZGVvLmN1cnJlbnRUaW1lID0gMDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIExlY3R1cmUgZGUgbGEgdmlkw6lvIGFjdGl2ZSAoc2kgcHLDqXNlbnRlKVxuICAgIGNvbnN0IGFjdGl2ZVZpZGVvID0gYWN0aXZlU2xpZGUucXVlcnlTZWxlY3RvcjxIVE1MVmlkZW9FbGVtZW50PigndmlkZW8nKTtcbiAgICBpZiAoYWN0aXZlVmlkZW8pIHtcbiAgICAgIGFjdGl2ZVZpZGVvLnBsYXkoKS5jYXRjaCgoKSA9PiB7fSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGxvYWRJbWFnZShwYXRoOiBzdHJpbmcpOiBQcm9taXNlPEhUTUxJbWFnZUVsZW1lbnQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBpbWFnZSA9IG5ldyBJbWFnZSgpO1xuICAgIGltYWdlLm9ubG9hZCA9ICgpID0+IHJlc29sdmUoaW1hZ2UpO1xuICAgIGltYWdlLm9uZXJyb3IgPSAoZSkgPT4gcmVqZWN0KGUpO1xuICAgIGltYWdlLnNyYyA9IHBhdGg7XG4gIH0pO1xufVxuXG4iXX0=
@@ -105,7 +105,7 @@ class PhotoGalleryGroupDirective {
105
105
  delete targetItem.doGetSlideDimensions;
106
106
  }
107
107
  // Crée la liste complète des médias
108
- this.galleryImages = [...this.galleryItemIds].map((key) => {
108
+ this.galleryImages = ([...this.galleryItemIds].map((key) => {
109
109
  const media = this.galleryItems[key].image;
110
110
  if (this.isVideo(media.src)) {
111
111
  return {
@@ -126,7 +126,7 @@ class PhotoGalleryGroupDirective {
126
126
  };
127
127
  }
128
128
  return media;
129
- });
129
+ }));
130
130
  const idx = this.galleryImages.findIndex((image) => image.id === id);
131
131
  const options = Object.assign(Object.assign({}, this.defaultOptions), this.options);
132
132
  options.index = idx;
@@ -154,13 +154,12 @@ class PhotoGalleryGroupDirective {
154
154
  };
155
155
  const photoSwipe = this.lightboxService.getLightboxElement();
156
156
  this.gallery = new PhotoSwipe(photoSwipe, PhotoSwipeUI_Default, this.galleryImages, options);
157
- // À la fin de l'init :
158
- this.gallery.listen('initialZoomInEnd', () => {
159
- // On attend que le DOM du slide soit prêt avant de tenter le "play"
160
- this.waitAndPlayVideo();
157
+ this.gallery.listen('beforeChange', () => {
158
+ this.pauseAllVideos();
161
159
  });
162
- this.gallery.listen('afterChange', () => {
163
- this.waitAndPlayVideo();
160
+ this.gallery.listen('initialZoomInEnd', () => {
161
+ // au début, joue la vidéo si c’est une vidéo
162
+ this.playCurrentSlideVideo();
164
163
  });
165
164
  this.gallery.listen('afterChange', () => {
166
165
  // on met un petit délai pour s’assurer que le DOM est prêt
@@ -186,9 +185,7 @@ class PhotoGalleryGroupDirective {
186
185
  this.onPhotoGalleryDestroy.emit();
187
186
  });
188
187
  this.onPhotoGalleryInit.emit();
189
- this.pauseAllVideos();
190
188
  this.gallery.init();
191
- setTimeout(() => this.playCurrentSlideVideo(), 200);
192
189
  });
193
190
  }
194
191
  getSlideDimensions(slide) {
@@ -206,7 +203,7 @@ class PhotoGalleryGroupDirective {
206
203
  }
207
204
  pauseAllVideos() {
208
205
  const vids = document.querySelectorAll('.pswp__video-wrapper video');
209
- vids.forEach((v) => {
206
+ vids.forEach(v => {
210
207
  try {
211
208
  v.pause();
212
209
  v.currentTime = 0;
@@ -217,59 +214,38 @@ class PhotoGalleryGroupDirective {
217
214
  playCurrentSlideVideo() {
218
215
  if (!this.gallery)
219
216
  return;
217
+ const currentIndex = this.gallery.getCurrentIndex(); // index du slide visible
220
218
  const currentItem = this.gallery.currItem;
221
219
  if (!currentItem)
222
220
  return;
221
+ // 🧠 Cast correct : container est un HTMLElement
223
222
  const container = this.gallery.container;
224
- const slides = Array.from(container.children);
225
- // Stop toutes les vidéos existantes
226
- slides.forEach((slide) => {
227
- const vid = slide.querySelector('video');
228
- if (vid) {
229
- vid.pause();
230
- vid.currentTime = 0;
231
- }
232
- });
233
- // Trouve le slide actif correspondant à la vidéo courante
234
- const activeSlide = slides.find((slide) => {
235
- const video = slide.querySelector('video');
236
- return video && video.src === currentItem.src;
237
- });
223
+ if (!container)
224
+ return;
225
+ // 🧠 Cast des enfants en tableau de HTMLElements
226
+ const slideEls = Array.from(container.children);
227
+ const total = this.gallery.items.length;
228
+ const moduloIndex = currentIndex % 3; // PhotoSwipe recycle 3 conteneurs
229
+ // Sélection du slide actif
230
+ const activeSlide = slideEls[moduloIndex];
238
231
  if (!activeSlide)
239
232
  return;
233
+ // Pause toutes les autres vidéos
234
+ slideEls.forEach(slide => {
235
+ const video = slide.querySelector('video');
236
+ if (video) {
237
+ if (slide === activeSlide)
238
+ return;
239
+ video.pause();
240
+ video.currentTime = 0;
241
+ }
242
+ });
243
+ // Lecture de la vidéo active (si présente)
240
244
  const activeVideo = activeSlide.querySelector('video');
241
245
  if (activeVideo) {
242
246
  activeVideo.play().catch(() => { });
243
247
  }
244
248
  }
245
- waitAndPlayVideo(retries = 10) {
246
- if (!this.gallery)
247
- return;
248
- const currentItem = this.gallery.currItem;
249
- if (!currentItem)
250
- return;
251
- const container = this.gallery.container;
252
- if (!container)
253
- return;
254
- // On cherche la vidéo correspondante au slide courant
255
- const slides = Array.from(container.children);
256
- const activeSlide = slides.find(slide => {
257
- const video = slide.querySelector('video');
258
- return video && video.src === currentItem.src;
259
- });
260
- const video = activeSlide === null || activeSlide === void 0 ? void 0 : activeSlide.querySelector('video');
261
- if (video) {
262
- // petite pause avant le play (évite un "play() request was interrupted")
263
- setTimeout(() => {
264
- this.pauseAllVideos();
265
- video.play().catch(() => { });
266
- }, 50);
267
- }
268
- else if (retries > 0) {
269
- // réessaye après 100ms jusqu’à 10 fois max
270
- setTimeout(() => this.waitAndPlayVideo(retries - 1), 100);
271
- }
272
- }
273
249
  }
274
250
  PhotoGalleryGroupDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: PhotoGalleryGroupDirective, deps: [{ token: PhotoGalleryConfig, optional: true }, { token: LightboxService }], target: i0.ɵɵFactoryTarget.Directive });
275
251
  PhotoGalleryGroupDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: PhotoGalleryGroupDirective, selector: "[photoGalleryGroup]", inputs: { options: ["photoGalleryGroup", "options"] }, outputs: { onPhotoGalleryInit: "onPhotoGalleryInit", onPhotoGalleryDestroy: "onPhotoGalleryDestroy" }, ngImport: i0 });
@@ -1 +1 @@
1
- {"version":3,"file":"twogate-ngx-photo-gallery.mjs","sources":["../../../projects/core/src/lib/components/lightbox/lightbox.component.ts","../../../projects/core/src/lib/components/lightbox/lightbox.component.html","../../../projects/core/src/lib/interfaces/config.ts","../../../projects/core/src/lib/services/lightbox.service.ts","../../../projects/core/src/lib/directives/photo-gallery-group.directive.ts","../../../projects/core/src/lib/directives/photo-gallery.directive.ts","../../../projects/core/src/lib/photo-gallery.module.ts","../../../projects/core/src/public-api.ts","../../../projects/core/src/twogate-ngx-photo-gallery.ts"],"sourcesContent":["import { Component, ViewChild, ElementRef, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'photo-gallery-lightbox',\n templateUrl: './lightbox.component.html',\n styleUrls: ['./lightbox.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LightboxComponent {\n @ViewChild('Lightbox', { static: true }) element: ElementRef;\n\n constructor() {}\n}\n","<div class=\"lightbox-wrapper\">\n <!-- Root element of PhotoSwipe. Must have class pswp. -->\n <div class=\"pswp\" #Lightbox tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\">\n <!-- Background of PhotoSwipe.\n It's a separate element, as animating opacity is faster than rgba(). -->\n <div class=\"pswp__bg\"></div>\n <!-- Slides wrapper with overflow:hidden. -->\n <div class=\"pswp__scroll-wrap\">\n <!-- Container that holds slides. PhotoSwipe keeps only 3 slides in DOM to save memory. -->\n <!-- don't modify these 3 pswp__item elements, data is added later on. -->\n <div class=\"pswp__container\">\n <div class=\"pswp__item\"></div>\n <div class=\"pswp__item\"></div>\n <div class=\"pswp__item\"></div>\n </div>\n <!-- Default (PhotoSwipeUI_Default) interface on top of sliding area. Can be changed. -->\n <div class=\"pswp__ui pswp__ui--hidden\">\n <div class=\"pswp__top-bar\">\n <!-- Controls are self-explanatory. Order can be changed. -->\n <div class=\"pswp__counter\"></div>\n <button class=\"pswp__button pswp__button--close\" title=\"Close (Esc)\"></button>\n <button class=\"pswp__button pswp__button--share\" title=\"Share\"></button>\n <button class=\"pswp__button pswp__button--fs\" title=\"Toggle fullscreen\"></button>\n <button class=\"pswp__button pswp__button--zoom\" title=\"Zoom in/out\"></button>\n <!-- Preloader demo http://codepen.io/dimsemenov/pen/yyBWoR -->\n <!-- element will get class pswp__preloader--active when preloader is running -->\n <div class=\"pswp__preloader\">\n <div class=\"pswp__preloader__icn\">\n <div class=\"pswp__preloader__cut\">\n <div class=\"pswp__preloader__donut\"></div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"pswp__share-modal pswp__share-modal--hidden pswp__single-tap\">\n <div class=\"pswp__share-tooltip\"></div>\n </div>\n <button class=\"pswp__button pswp__button--arrow--left\" title=\"Previous (arrow left)\"></button>\n <button class=\"pswp__button pswp__button--arrow--right\" title=\"Next (arrow right)\"></button>\n <div class=\"pswp__caption\">\n <div class=\"pswp__caption__center\"></div>\n </div>\n </div>\n </div>\n </div>\n</div>\n","import { GalleryOptions } from './photoswipe';\n\nexport abstract class PhotoGalleryConfig {\n defaultOptions?: GalleryOptions;\n}\n","import { Injectable, ComponentRef, ElementRef, ApplicationRef, createComponent } from '@angular/core';\n\nimport { LightboxComponent } from '../components/lightbox/lightbox.component';\n\n@Injectable({ providedIn: 'root' })\nexport class LightboxService {\n private lightbox: ComponentRef<LightboxComponent> | null;\n private lightboxElement: ElementRef | null;\n\n constructor(private applicationRef: ApplicationRef) {\n this.lightbox = null;\n this.lightboxElement = null;\n }\n\n create() {\n this.lightbox = createComponent(\n LightboxComponent,\n { environmentInjector: this.applicationRef.injector }\n );\n document.body.appendChild(this.lightbox.location.nativeElement);\n this.applicationRef.attachView(this.lightbox.hostView);\n\n this.lightboxElement = this.lightbox.instance.element;\n }\n\n destroy() {\n if (this.lightbox) {\n this.applicationRef.detachView(this.lightbox.hostView);\n this.lightbox = null;\n this.lightboxElement = null;\n }\n }\n\n /**\n * Returns the lightbox element.\n * This method is called after the lightbox is created.\n * @returns HTMLElement\n */\n getLightboxElement(): HTMLElement {\n return this.lightboxElement.nativeElement as HTMLElement;\n }\n}\n","import { Directive, Output, Input, EventEmitter, Optional } from '@angular/core';\nimport PhotoSwipe from 'photoswipe';\nimport PhotoSwipeUI_Default from 'photoswipe/dist/photoswipe-ui-default';\n\nimport { PhotoGalleryConfig } from '../interfaces/config';\nimport { GalleryImage, GalleryItem, GalleryOptions } from '../interfaces/photoswipe';\nimport { LightboxService } from '../services/lightbox.service';\n\nexport const DEFAULT_OPTIONS = {\n history: false,\n closeEl: true,\n captionEl: false,\n fullscreenEl: false,\n zoomEl: true,\n shareEl: false,\n counterEl: true,\n arrowEl: false,\n preloaderEl: true,\n};\n\n@Directive({\n selector: '[photoGalleryGroup]',\n})\nexport class PhotoGalleryGroupDirective {\n @Input('photoGalleryGroup') options: GalleryOptions;\n @Output() onPhotoGalleryInit = new EventEmitter();\n @Output() onPhotoGalleryDestroy = new EventEmitter();\n\n private defaultOptions: GalleryOptions;\n private gallery: PhotoSwipe<any> | null = null;\n private galleryItems: { [key: string]: GalleryItem } = {};\n private galleryItemIds: Set<string> = new Set<string>();\n private galleryImages: GalleryImage[] = [];\n\n constructor(\n @Optional() private photoGalleryConfig: PhotoGalleryConfig,\n private lightboxService: LightboxService\n ) {\n this.defaultOptions = { ...DEFAULT_OPTIONS, ...this.photoGalleryConfig?.defaultOptions };\n }\n\n private isVideo(url: string): boolean {\n return url?.includes('/videos/');\n }\n\n registerGalleryItem(item: { id: string; element: HTMLElement; imageUrl: string; caption?: string }): void {\n const image: GalleryImage = {\n id: item.id,\n src: item.imageUrl,\n ...(item.caption ? { title: item.caption } : {}),\n w: 0,\n h: 0,\n doGetSlideDimensions: true,\n };\n this.galleryItems[item.id] = {\n id: item.id,\n element: item.element,\n image,\n };\n\n this.galleryItemIds.add(item.id);\n }\n\n unregisterGalleryItem(id: string): void {\n this.galleryItemIds.delete(id);\n }\n\n async openPhotoSwipe(id: string): Promise<void> {\n this.lightboxService.create();\n\n const targetItem = this.galleryItems[id].image;\n\n if (targetItem.doGetSlideDimensions && !this.isVideo(targetItem.src)) {\n const targetImage = await loadImage(targetItem.src);\n targetItem.w = targetImage.naturalWidth;\n targetItem.h = targetImage.naturalHeight;\n delete targetItem.doGetSlideDimensions;\n }\n\n // Crée la liste complète des médias\n this.galleryImages = [...this.galleryItemIds].map((key) => {\n const media = this.galleryItems[key].image;\n\n if (this.isVideo(media.src)) {\n return {\n id: media.id,\n html: `\n <div class=\"pswp__video-wrapper\">\n <video\n src=\"${media.src}\"\n controls\n preload=\"metadata\"\n style=\"max-width: 100%; max-height: 100%; border-radius: 8px;\"\n ></video>\n </div>\n `,\n title: media.title || '',\n w: 1920,\n h: 1080,\n };\n }\n\n return media;\n }) as any[];\n\n const idx = this.galleryImages.findIndex((image) => image.id === id);\n const options: GalleryOptions = { ...this.defaultOptions, ...this.options };\n options.index = idx;\n\n options.getThumbBoundsFn = (imageIndex: number) => {\n const key = this.galleryImages[imageIndex].id;\n const thumbnail = this.galleryItems[key].element;\n const origin = this.galleryItems[key].image;\n const pageYScroll = window.pageYOffset || document.documentElement.scrollTop;\n const rect = thumbnail.getBoundingClientRect();\n\n const thumbnailRate = rect.height / rect.width;\n const originRate = origin.h / origin.w;\n let x: number, y: number, w: number;\n\n if (thumbnailRate > originRate) {\n y = rect.top + pageYScroll;\n w = (origin.w * rect.height) / origin.h;\n x = rect.left - (w - rect.width) / 2;\n } else {\n const imageHeight = (origin.h * rect.width) / origin.w;\n x = rect.left;\n w = rect.width;\n y = rect.top + pageYScroll - (imageHeight - rect.height) / 2;\n }\n\n return { x, y, w };\n };\n\n const photoSwipe = this.lightboxService.getLightboxElement();\n\n this.gallery = new PhotoSwipe(photoSwipe, PhotoSwipeUI_Default, this.galleryImages, options);\n\n // ✅ À la fin de l'init :\n this.gallery.listen('initialZoomInEnd', () => {\n // On attend que le DOM du slide soit prêt avant de tenter le \"play\"\n this.waitAndPlayVideo();\n });\n\n this.gallery.listen('afterChange', () => {\n this.waitAndPlayVideo();\n });\n\n this.gallery.listen('afterChange', () => {\n // on met un petit délai pour s’assurer que le DOM est prêt\n setTimeout(() => {\n this.playCurrentSlideVideo();\n }, 200);\n });\n\n this.gallery.listen('destroy', () => {\n this.pauseAllVideos();\n });\n\n this.gallery.listen('gettingData', (_, slide: any) => {\n if (slide.doGetSlideDimensions && !this.isVideo(slide.src)) {\n setTimeout(async () => await this.getSlideDimensions(slide), 300);\n }\n });\n\n this.gallery.listen('imageLoadComplete', async (_, slide: any) => {\n if (slide.doGetSlideDimensions && !this.isVideo(slide.src)) {\n await this.getSlideDimensions(slide);\n }\n });\n\n this.gallery.listen('destroy', () => {\n this.lightboxService.destroy();\n this.onPhotoGalleryDestroy.emit();\n });\n\n this.onPhotoGalleryInit.emit();\n this.pauseAllVideos();\n this.gallery.init();\n setTimeout(() => this.playCurrentSlideVideo(), 200);\n }\n\n private async getSlideDimensions(slide: GalleryImage): Promise<void> {\n if (!slide.doGetSlideDimensions) {\n return;\n }\n\n const image: HTMLImageElement = await loadImage(slide.src).catch(() => null);\n\n slide.doGetSlideDimensions = false;\n\n slide.w = image.naturalWidth;\n slide.h = image.naturalHeight;\n\n this.gallery.invalidateCurrItems();\n this.gallery.updateSize(true);\n }\n private pauseAllVideos() {\n const vids = document.querySelectorAll<HTMLVideoElement>('.pswp__video-wrapper video');\n vids.forEach((v) => {\n try {\n v.pause();\n v.currentTime = 0;\n } catch (_) {}\n });\n }\n\n private playCurrentSlideVideo() {\n if (!this.gallery) return;\n const currentItem = this.gallery.currItem;\n if (!currentItem) return;\n\n const container = this.gallery.container as HTMLElement;\n const slides = Array.from(container.children) as HTMLElement[];\n\n // Stop toutes les vidéos existantes\n slides.forEach((slide) => {\n const vid = slide.querySelector<HTMLVideoElement>('video');\n if (vid) {\n vid.pause();\n vid.currentTime = 0;\n }\n });\n\n // Trouve le slide actif correspondant à la vidéo courante\n const activeSlide = slides.find((slide) => {\n const video = slide.querySelector<HTMLVideoElement>('video');\n return video && video.src === currentItem.src;\n });\n\n if (!activeSlide) return;\n\n const activeVideo = activeSlide.querySelector<HTMLVideoElement>('video');\n if (activeVideo) {\n activeVideo.play().catch(() => {});\n }\n }\n\n private waitAndPlayVideo(retries = 10) {\n if (!this.gallery) return;\n\n const currentItem = this.gallery.currItem;\n if (!currentItem) return;\n\n const container = this.gallery.container as HTMLElement;\n if (!container) return;\n\n // On cherche la vidéo correspondante au slide courant\n const slides = Array.from(container.children) as HTMLElement[];\n const activeSlide = slides.find(slide => {\n const video = slide.querySelector<HTMLVideoElement>('video');\n return video && video.src === currentItem.src;\n });\n\n const video = activeSlide?.querySelector<HTMLVideoElement>('video');\n\n if (video) {\n // petite pause avant le play (évite un \"play() request was interrupted\")\n setTimeout(() => {\n this.pauseAllVideos();\n video.play().catch(() => {});\n }, 50);\n } else if (retries > 0) {\n // réessaye après 100ms jusqu’à 10 fois max\n setTimeout(() => this.waitAndPlayVideo(retries - 1), 100);\n }\n }\n}\n\nfunction loadImage(path: string): Promise<HTMLImageElement> {\n return new Promise((resolve, reject) => {\n const image = new Image();\n image.onload = () => resolve(image);\n image.onerror = (e) => reject(e);\n image.src = path;\n });\n}\n","import { Directive, HostListener, Input, ElementRef, AfterContentInit, OnDestroy } from '@angular/core';\n\nimport { PhotoGalleryGroupDirective } from './photo-gallery-group.directive';\n\n@Directive({\n selector: '[photoGallery]',\n})\nexport class PhotoGalleryDirective implements AfterContentInit, OnDestroy {\n @Input('photoGallery') imageUrl: string;\n @Input() photoGalleryTrackBy: string;\n @Input() photoGalleryCaption: string;\n id: string;\n\n constructor(private el: ElementRef, private photoGalleryGroup: PhotoGalleryGroupDirective) {}\n\n @HostListener('click')\n async openPhotoSwipe(): Promise<void> {\n await this.photoGalleryGroup.openPhotoSwipe(this.id);\n }\n\n ngAfterContentInit(): void {\n this.id = this.photoGalleryTrackBy || this.imageUrl;\n this.photoGalleryGroup.registerGalleryItem({\n id: this.id,\n element: this.el.nativeElement as HTMLElement,\n imageUrl: this.imageUrl,\n caption: this.photoGalleryCaption,\n });\n }\n\n ngOnDestroy(): void {\n this.photoGalleryGroup.unregisterGalleryItem(this.id);\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { LightboxComponent } from './components/lightbox/lightbox.component';\nimport { PhotoGalleryGroupDirective } from './directives/photo-gallery-group.directive';\nimport { PhotoGalleryDirective } from './directives/photo-gallery.directive';\nimport { PhotoGalleryConfig } from './interfaces/config';\n\n@NgModule({\n declarations: [LightboxComponent, PhotoGalleryDirective, PhotoGalleryGroupDirective],\n providers: [],\n imports: [],\n exports: [PhotoGalleryDirective, PhotoGalleryGroupDirective],\n})\nexport class PhotoGalleryModule {\n static forRoot(config: PhotoGalleryConfig): ModuleWithProviders<PhotoGalleryModule> {\n return {\n ngModule: PhotoGalleryModule,\n providers: [\n {\n provide: PhotoGalleryConfig,\n useValue: config,\n },\n ],\n };\n }\n}\n","/*\n * Public API Surface of core\n */\n\nexport * from './lib/photo-gallery.module';\n\nexport * from './lib/directives/photo-gallery-group.directive';\nexport * from './lib/directives/photo-gallery.directive';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.PhotoGalleryConfig","i2.LightboxService","i1.PhotoGalleryGroupDirective"],"mappings":"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"}
1
+ {"version":3,"file":"twogate-ngx-photo-gallery.mjs","sources":["../../../projects/core/src/lib/components/lightbox/lightbox.component.ts","../../../projects/core/src/lib/components/lightbox/lightbox.component.html","../../../projects/core/src/lib/interfaces/config.ts","../../../projects/core/src/lib/services/lightbox.service.ts","../../../projects/core/src/lib/directives/photo-gallery-group.directive.ts","../../../projects/core/src/lib/directives/photo-gallery.directive.ts","../../../projects/core/src/lib/photo-gallery.module.ts","../../../projects/core/src/public-api.ts","../../../projects/core/src/twogate-ngx-photo-gallery.ts"],"sourcesContent":["import { Component, ViewChild, ElementRef, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'photo-gallery-lightbox',\n templateUrl: './lightbox.component.html',\n styleUrls: ['./lightbox.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LightboxComponent {\n @ViewChild('Lightbox', { static: true }) element: ElementRef;\n\n constructor() {}\n}\n","<div class=\"lightbox-wrapper\">\n <!-- Root element of PhotoSwipe. Must have class pswp. -->\n <div class=\"pswp\" #Lightbox tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\">\n <!-- Background of PhotoSwipe.\n It's a separate element, as animating opacity is faster than rgba(). -->\n <div class=\"pswp__bg\"></div>\n <!-- Slides wrapper with overflow:hidden. -->\n <div class=\"pswp__scroll-wrap\">\n <!-- Container that holds slides. PhotoSwipe keeps only 3 slides in DOM to save memory. -->\n <!-- don't modify these 3 pswp__item elements, data is added later on. -->\n <div class=\"pswp__container\">\n <div class=\"pswp__item\"></div>\n <div class=\"pswp__item\"></div>\n <div class=\"pswp__item\"></div>\n </div>\n <!-- Default (PhotoSwipeUI_Default) interface on top of sliding area. Can be changed. -->\n <div class=\"pswp__ui pswp__ui--hidden\">\n <div class=\"pswp__top-bar\">\n <!-- Controls are self-explanatory. Order can be changed. -->\n <div class=\"pswp__counter\"></div>\n <button class=\"pswp__button pswp__button--close\" title=\"Close (Esc)\"></button>\n <button class=\"pswp__button pswp__button--share\" title=\"Share\"></button>\n <button class=\"pswp__button pswp__button--fs\" title=\"Toggle fullscreen\"></button>\n <button class=\"pswp__button pswp__button--zoom\" title=\"Zoom in/out\"></button>\n <!-- Preloader demo http://codepen.io/dimsemenov/pen/yyBWoR -->\n <!-- element will get class pswp__preloader--active when preloader is running -->\n <div class=\"pswp__preloader\">\n <div class=\"pswp__preloader__icn\">\n <div class=\"pswp__preloader__cut\">\n <div class=\"pswp__preloader__donut\"></div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"pswp__share-modal pswp__share-modal--hidden pswp__single-tap\">\n <div class=\"pswp__share-tooltip\"></div>\n </div>\n <button class=\"pswp__button pswp__button--arrow--left\" title=\"Previous (arrow left)\"></button>\n <button class=\"pswp__button pswp__button--arrow--right\" title=\"Next (arrow right)\"></button>\n <div class=\"pswp__caption\">\n <div class=\"pswp__caption__center\"></div>\n </div>\n </div>\n </div>\n </div>\n</div>\n","import { GalleryOptions } from './photoswipe';\n\nexport abstract class PhotoGalleryConfig {\n defaultOptions?: GalleryOptions;\n}\n","import { Injectable, ComponentRef, ElementRef, ApplicationRef, createComponent } from '@angular/core';\n\nimport { LightboxComponent } from '../components/lightbox/lightbox.component';\n\n@Injectable({ providedIn: 'root' })\nexport class LightboxService {\n private lightbox: ComponentRef<LightboxComponent> | null;\n private lightboxElement: ElementRef | null;\n\n constructor(private applicationRef: ApplicationRef) {\n this.lightbox = null;\n this.lightboxElement = null;\n }\n\n create() {\n this.lightbox = createComponent(\n LightboxComponent,\n { environmentInjector: this.applicationRef.injector }\n );\n document.body.appendChild(this.lightbox.location.nativeElement);\n this.applicationRef.attachView(this.lightbox.hostView);\n\n this.lightboxElement = this.lightbox.instance.element;\n }\n\n destroy() {\n if (this.lightbox) {\n this.applicationRef.detachView(this.lightbox.hostView);\n this.lightbox = null;\n this.lightboxElement = null;\n }\n }\n\n /**\n * Returns the lightbox element.\n * This method is called after the lightbox is created.\n * @returns HTMLElement\n */\n getLightboxElement(): HTMLElement {\n return this.lightboxElement.nativeElement as HTMLElement;\n }\n}\n","import { Directive, Output, Input, EventEmitter, Optional } from '@angular/core';\nimport PhotoSwipe from 'photoswipe';\nimport PhotoSwipeUI_Default from 'photoswipe/dist/photoswipe-ui-default';\n\nimport { PhotoGalleryConfig } from '../interfaces/config';\nimport { GalleryImage, GalleryItem, GalleryOptions } from '../interfaces/photoswipe';\nimport { LightboxService } from '../services/lightbox.service';\n\nexport const DEFAULT_OPTIONS = {\n history: false,\n closeEl: true,\n captionEl: false,\n fullscreenEl: false,\n zoomEl: true,\n shareEl: false,\n counterEl: true,\n arrowEl: false,\n preloaderEl: true,\n};\n\n@Directive({\n selector: '[photoGalleryGroup]',\n})\nexport class PhotoGalleryGroupDirective {\n @Input('photoGalleryGroup') options: GalleryOptions;\n @Output() onPhotoGalleryInit = new EventEmitter();\n @Output() onPhotoGalleryDestroy = new EventEmitter();\n\n private defaultOptions: GalleryOptions;\n private gallery: PhotoSwipe<any> | null = null;\n private galleryItems: { [key: string]: GalleryItem } = {};\n private galleryItemIds: Set<string> = new Set<string>();\n private galleryImages: GalleryImage[] = [];\n\n constructor(\n @Optional() private photoGalleryConfig: PhotoGalleryConfig,\n private lightboxService: LightboxService\n ) {\n this.defaultOptions = { ...DEFAULT_OPTIONS, ...this.photoGalleryConfig?.defaultOptions };\n }\n\n private isVideo(url: string): boolean {\n return url?.includes('/videos/');\n }\n\n registerGalleryItem(item: { id: string; element: HTMLElement; imageUrl: string; caption?: string }): void {\n const image: GalleryImage = {\n id: item.id,\n src: item.imageUrl,\n ...(item.caption ? { title: item.caption } : {}),\n w: 0,\n h: 0,\n doGetSlideDimensions: true,\n };\n this.galleryItems[item.id] = {\n id: item.id,\n element: item.element,\n image,\n };\n\n this.galleryItemIds.add(item.id);\n }\n\n unregisterGalleryItem(id: string): void {\n this.galleryItemIds.delete(id);\n }\n\n async openPhotoSwipe(id: string): Promise<void> {\n this.lightboxService.create();\n\n const targetItem = this.galleryItems[id].image;\n\n if (targetItem.doGetSlideDimensions && !this.isVideo(targetItem.src)) {\n const targetImage = await loadImage(targetItem.src);\n targetItem.w = targetImage.naturalWidth;\n targetItem.h = targetImage.naturalHeight;\n delete targetItem.doGetSlideDimensions;\n }\n\n // Crée la liste complète des médias\n this.galleryImages = ([...this.galleryItemIds].map((key) => {\n const media = this.galleryItems[key].image;\n\n if (this.isVideo(media.src)) {\n return {\n id: media.id,\n html: `\n <div class=\"pswp__video-wrapper\">\n <video\n src=\"${media.src}\"\n controls\n preload=\"metadata\"\n style=\"max-width: 100%; max-height: 100%; border-radius: 8px;\"\n ></video>\n </div>\n `,\n title: media.title || '',\n w: 1920,\n h: 1080,\n };\n }\n\n return media;\n })) as any[];\n\n const idx = this.galleryImages.findIndex((image) => image.id === id);\n const options: GalleryOptions = { ...this.defaultOptions, ...this.options };\n options.index = idx;\n\n options.getThumbBoundsFn = (imageIndex: number) => {\n const key = this.galleryImages[imageIndex].id;\n const thumbnail = this.galleryItems[key].element;\n const origin = this.galleryItems[key].image;\n const pageYScroll = window.pageYOffset || document.documentElement.scrollTop;\n const rect = thumbnail.getBoundingClientRect();\n\n const thumbnailRate = rect.height / rect.width;\n const originRate = origin.h / origin.w;\n let x: number, y: number, w: number;\n\n if (thumbnailRate > originRate) {\n y = rect.top + pageYScroll;\n w = (origin.w * rect.height) / origin.h;\n x = rect.left - (w - rect.width) / 2;\n } else {\n const imageHeight = (origin.h * rect.width) / origin.w;\n x = rect.left;\n w = rect.width;\n y = rect.top + pageYScroll - (imageHeight - rect.height) / 2;\n }\n\n return { x, y, w };\n };\n\n const photoSwipe = this.lightboxService.getLightboxElement();\n\n this.gallery = new PhotoSwipe(photoSwipe, PhotoSwipeUI_Default, this.galleryImages, options);\n\n this.gallery.listen('beforeChange', () => {\n this.pauseAllVideos();\n });\n\n this.gallery.listen('initialZoomInEnd', () => {\n // au début, joue la vidéo si c’est une vidéo\n this.playCurrentSlideVideo();\n });\n\n this.gallery.listen('afterChange', () => {\n // on met un petit délai pour s’assurer que le DOM est prêt\n setTimeout(() => {\n this.playCurrentSlideVideo();\n }, 200);\n });\n\n this.gallery.listen('destroy', () => {\n this.pauseAllVideos();\n });\n\n this.gallery.listen('gettingData', (_, slide: any) => {\n if (slide.doGetSlideDimensions && !this.isVideo(slide.src)) {\n setTimeout(async () => await this.getSlideDimensions(slide), 300);\n }\n });\n\n this.gallery.listen('imageLoadComplete', async (_, slide: any) => {\n if (slide.doGetSlideDimensions && !this.isVideo(slide.src)) {\n await this.getSlideDimensions(slide);\n }\n });\n\n this.gallery.listen('destroy', () => {\n this.lightboxService.destroy();\n this.onPhotoGalleryDestroy.emit();\n });\n\n this.onPhotoGalleryInit.emit();\n this.gallery.init();\n }\n\n private async getSlideDimensions(slide: GalleryImage): Promise<void> {\n if (!slide.doGetSlideDimensions) {\n return;\n }\n\n const image: HTMLImageElement = await loadImage(slide.src).catch(() => null);\n\n slide.doGetSlideDimensions = false;\n\n slide.w = image.naturalWidth;\n slide.h = image.naturalHeight;\n\n this.gallery.invalidateCurrItems();\n this.gallery.updateSize(true);\n }\n private pauseAllVideos() {\n const vids = document.querySelectorAll<HTMLVideoElement>('.pswp__video-wrapper video');\n vids.forEach(v => {\n try {\n v.pause();\n v.currentTime = 0;\n } catch(_){}\n });\n }\n\n private playCurrentSlideVideo() {\n if (!this.gallery) return;\n\n const currentIndex = this.gallery.getCurrentIndex(); // index du slide visible\n const currentItem = this.gallery.currItem;\n if (!currentItem) return;\n\n // 🧠 Cast correct : container est un HTMLElement\n const container = this.gallery.container as HTMLElement;\n if (!container) return;\n\n // 🧠 Cast des enfants en tableau de HTMLElements\n const slideEls = Array.from(container.children) as HTMLElement[];\n const total = this.gallery.items.length;\n const moduloIndex = currentIndex % 3; // PhotoSwipe recycle 3 conteneurs\n\n // Sélection du slide actif\n const activeSlide = slideEls[moduloIndex];\n if (!activeSlide) return;\n\n // Pause toutes les autres vidéos\n slideEls.forEach(slide => {\n const video = slide.querySelector<HTMLVideoElement>('video');\n if (video) {\n if (slide === activeSlide) return;\n video.pause();\n video.currentTime = 0;\n }\n });\n\n // Lecture de la vidéo active (si présente)\n const activeVideo = activeSlide.querySelector<HTMLVideoElement>('video');\n if (activeVideo) {\n activeVideo.play().catch(() => {});\n }\n }\n}\n\nfunction loadImage(path: string): Promise<HTMLImageElement> {\n return new Promise((resolve, reject) => {\n const image = new Image();\n image.onload = () => resolve(image);\n image.onerror = (e) => reject(e);\n image.src = path;\n });\n}\n\n","import { Directive, HostListener, Input, ElementRef, AfterContentInit, OnDestroy } from '@angular/core';\n\nimport { PhotoGalleryGroupDirective } from './photo-gallery-group.directive';\n\n@Directive({\n selector: '[photoGallery]',\n})\nexport class PhotoGalleryDirective implements AfterContentInit, OnDestroy {\n @Input('photoGallery') imageUrl: string;\n @Input() photoGalleryTrackBy: string;\n @Input() photoGalleryCaption: string;\n id: string;\n\n constructor(private el: ElementRef, private photoGalleryGroup: PhotoGalleryGroupDirective) {}\n\n @HostListener('click')\n async openPhotoSwipe(): Promise<void> {\n await this.photoGalleryGroup.openPhotoSwipe(this.id);\n }\n\n ngAfterContentInit(): void {\n this.id = this.photoGalleryTrackBy || this.imageUrl;\n this.photoGalleryGroup.registerGalleryItem({\n id: this.id,\n element: this.el.nativeElement as HTMLElement,\n imageUrl: this.imageUrl,\n caption: this.photoGalleryCaption,\n });\n }\n\n ngOnDestroy(): void {\n this.photoGalleryGroup.unregisterGalleryItem(this.id);\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { LightboxComponent } from './components/lightbox/lightbox.component';\nimport { PhotoGalleryGroupDirective } from './directives/photo-gallery-group.directive';\nimport { PhotoGalleryDirective } from './directives/photo-gallery.directive';\nimport { PhotoGalleryConfig } from './interfaces/config';\n\n@NgModule({\n declarations: [LightboxComponent, PhotoGalleryDirective, PhotoGalleryGroupDirective],\n providers: [],\n imports: [],\n exports: [PhotoGalleryDirective, PhotoGalleryGroupDirective],\n})\nexport class PhotoGalleryModule {\n static forRoot(config: PhotoGalleryConfig): ModuleWithProviders<PhotoGalleryModule> {\n return {\n ngModule: PhotoGalleryModule,\n providers: [\n {\n provide: PhotoGalleryConfig,\n useValue: config,\n },\n ],\n };\n }\n}\n","/*\n * Public API Surface of core\n */\n\nexport * from './lib/photo-gallery.module';\n\nexport * from './lib/directives/photo-gallery-group.directive';\nexport * from './lib/directives/photo-gallery.directive';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.PhotoGalleryConfig","i2.LightboxService","i1.PhotoGalleryGroupDirective"],"mappings":"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"}
@@ -109,7 +109,7 @@ class PhotoGalleryGroupDirective {
109
109
  delete targetItem.doGetSlideDimensions;
110
110
  }
111
111
  // Crée la liste complète des médias
112
- this.galleryImages = [...this.galleryItemIds].map((key) => {
112
+ this.galleryImages = ([...this.galleryItemIds].map((key) => {
113
113
  const media = this.galleryItems[key].image;
114
114
  if (this.isVideo(media.src)) {
115
115
  return {
@@ -130,7 +130,7 @@ class PhotoGalleryGroupDirective {
130
130
  };
131
131
  }
132
132
  return media;
133
- });
133
+ }));
134
134
  const idx = this.galleryImages.findIndex((image) => image.id === id);
135
135
  const options = { ...this.defaultOptions, ...this.options };
136
136
  options.index = idx;
@@ -158,13 +158,12 @@ class PhotoGalleryGroupDirective {
158
158
  };
159
159
  const photoSwipe = this.lightboxService.getLightboxElement();
160
160
  this.gallery = new PhotoSwipe(photoSwipe, PhotoSwipeUI_Default, this.galleryImages, options);
161
- // À la fin de l'init :
162
- this.gallery.listen('initialZoomInEnd', () => {
163
- // On attend que le DOM du slide soit prêt avant de tenter le "play"
164
- this.waitAndPlayVideo();
161
+ this.gallery.listen('beforeChange', () => {
162
+ this.pauseAllVideos();
165
163
  });
166
- this.gallery.listen('afterChange', () => {
167
- this.waitAndPlayVideo();
164
+ this.gallery.listen('initialZoomInEnd', () => {
165
+ // au début, joue la vidéo si c’est une vidéo
166
+ this.playCurrentSlideVideo();
168
167
  });
169
168
  this.gallery.listen('afterChange', () => {
170
169
  // on met un petit délai pour s’assurer que le DOM est prêt
@@ -190,9 +189,7 @@ class PhotoGalleryGroupDirective {
190
189
  this.onPhotoGalleryDestroy.emit();
191
190
  });
192
191
  this.onPhotoGalleryInit.emit();
193
- this.pauseAllVideos();
194
192
  this.gallery.init();
195
- setTimeout(() => this.playCurrentSlideVideo(), 200);
196
193
  }
197
194
  async getSlideDimensions(slide) {
198
195
  if (!slide.doGetSlideDimensions) {
@@ -207,7 +204,7 @@ class PhotoGalleryGroupDirective {
207
204
  }
208
205
  pauseAllVideos() {
209
206
  const vids = document.querySelectorAll('.pswp__video-wrapper video');
210
- vids.forEach((v) => {
207
+ vids.forEach(v => {
211
208
  try {
212
209
  v.pause();
213
210
  v.currentTime = 0;
@@ -218,59 +215,38 @@ class PhotoGalleryGroupDirective {
218
215
  playCurrentSlideVideo() {
219
216
  if (!this.gallery)
220
217
  return;
218
+ const currentIndex = this.gallery.getCurrentIndex(); // index du slide visible
221
219
  const currentItem = this.gallery.currItem;
222
220
  if (!currentItem)
223
221
  return;
222
+ // 🧠 Cast correct : container est un HTMLElement
224
223
  const container = this.gallery.container;
225
- const slides = Array.from(container.children);
226
- // Stop toutes les vidéos existantes
227
- slides.forEach((slide) => {
228
- const vid = slide.querySelector('video');
229
- if (vid) {
230
- vid.pause();
231
- vid.currentTime = 0;
232
- }
233
- });
234
- // Trouve le slide actif correspondant à la vidéo courante
235
- const activeSlide = slides.find((slide) => {
236
- const video = slide.querySelector('video');
237
- return video && video.src === currentItem.src;
238
- });
224
+ if (!container)
225
+ return;
226
+ // 🧠 Cast des enfants en tableau de HTMLElements
227
+ const slideEls = Array.from(container.children);
228
+ const total = this.gallery.items.length;
229
+ const moduloIndex = currentIndex % 3; // PhotoSwipe recycle 3 conteneurs
230
+ // Sélection du slide actif
231
+ const activeSlide = slideEls[moduloIndex];
239
232
  if (!activeSlide)
240
233
  return;
234
+ // Pause toutes les autres vidéos
235
+ slideEls.forEach(slide => {
236
+ const video = slide.querySelector('video');
237
+ if (video) {
238
+ if (slide === activeSlide)
239
+ return;
240
+ video.pause();
241
+ video.currentTime = 0;
242
+ }
243
+ });
244
+ // Lecture de la vidéo active (si présente)
241
245
  const activeVideo = activeSlide.querySelector('video');
242
246
  if (activeVideo) {
243
247
  activeVideo.play().catch(() => { });
244
248
  }
245
249
  }
246
- waitAndPlayVideo(retries = 10) {
247
- if (!this.gallery)
248
- return;
249
- const currentItem = this.gallery.currItem;
250
- if (!currentItem)
251
- return;
252
- const container = this.gallery.container;
253
- if (!container)
254
- return;
255
- // On cherche la vidéo correspondante au slide courant
256
- const slides = Array.from(container.children);
257
- const activeSlide = slides.find(slide => {
258
- const video = slide.querySelector('video');
259
- return video && video.src === currentItem.src;
260
- });
261
- const video = activeSlide?.querySelector('video');
262
- if (video) {
263
- // petite pause avant le play (évite un "play() request was interrupted")
264
- setTimeout(() => {
265
- this.pauseAllVideos();
266
- video.play().catch(() => { });
267
- }, 50);
268
- }
269
- else if (retries > 0) {
270
- // réessaye après 100ms jusqu’à 10 fois max
271
- setTimeout(() => this.waitAndPlayVideo(retries - 1), 100);
272
- }
273
- }
274
250
  }
275
251
  PhotoGalleryGroupDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: PhotoGalleryGroupDirective, deps: [{ token: PhotoGalleryConfig, optional: true }, { token: LightboxService }], target: i0.ɵɵFactoryTarget.Directive });
276
252
  PhotoGalleryGroupDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: PhotoGalleryGroupDirective, selector: "[photoGalleryGroup]", inputs: { options: ["photoGalleryGroup", "options"] }, outputs: { onPhotoGalleryInit: "onPhotoGalleryInit", onPhotoGalleryDestroy: "onPhotoGalleryDestroy" }, ngImport: i0 });
@@ -1 +1 @@
1
- {"version":3,"file":"twogate-ngx-photo-gallery.mjs","sources":["../../../projects/core/src/lib/components/lightbox/lightbox.component.ts","../../../projects/core/src/lib/components/lightbox/lightbox.component.html","../../../projects/core/src/lib/interfaces/config.ts","../../../projects/core/src/lib/services/lightbox.service.ts","../../../projects/core/src/lib/directives/photo-gallery-group.directive.ts","../../../projects/core/src/lib/directives/photo-gallery.directive.ts","../../../projects/core/src/lib/photo-gallery.module.ts","../../../projects/core/src/public-api.ts","../../../projects/core/src/twogate-ngx-photo-gallery.ts"],"sourcesContent":["import { Component, ViewChild, ElementRef, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'photo-gallery-lightbox',\n templateUrl: './lightbox.component.html',\n styleUrls: ['./lightbox.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LightboxComponent {\n @ViewChild('Lightbox', { static: true }) element: ElementRef;\n\n constructor() {}\n}\n","<div class=\"lightbox-wrapper\">\n <!-- Root element of PhotoSwipe. Must have class pswp. -->\n <div class=\"pswp\" #Lightbox tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\">\n <!-- Background of PhotoSwipe.\n It's a separate element, as animating opacity is faster than rgba(). -->\n <div class=\"pswp__bg\"></div>\n <!-- Slides wrapper with overflow:hidden. -->\n <div class=\"pswp__scroll-wrap\">\n <!-- Container that holds slides. PhotoSwipe keeps only 3 slides in DOM to save memory. -->\n <!-- don't modify these 3 pswp__item elements, data is added later on. -->\n <div class=\"pswp__container\">\n <div class=\"pswp__item\"></div>\n <div class=\"pswp__item\"></div>\n <div class=\"pswp__item\"></div>\n </div>\n <!-- Default (PhotoSwipeUI_Default) interface on top of sliding area. Can be changed. -->\n <div class=\"pswp__ui pswp__ui--hidden\">\n <div class=\"pswp__top-bar\">\n <!-- Controls are self-explanatory. Order can be changed. -->\n <div class=\"pswp__counter\"></div>\n <button class=\"pswp__button pswp__button--close\" title=\"Close (Esc)\"></button>\n <button class=\"pswp__button pswp__button--share\" title=\"Share\"></button>\n <button class=\"pswp__button pswp__button--fs\" title=\"Toggle fullscreen\"></button>\n <button class=\"pswp__button pswp__button--zoom\" title=\"Zoom in/out\"></button>\n <!-- Preloader demo http://codepen.io/dimsemenov/pen/yyBWoR -->\n <!-- element will get class pswp__preloader--active when preloader is running -->\n <div class=\"pswp__preloader\">\n <div class=\"pswp__preloader__icn\">\n <div class=\"pswp__preloader__cut\">\n <div class=\"pswp__preloader__donut\"></div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"pswp__share-modal pswp__share-modal--hidden pswp__single-tap\">\n <div class=\"pswp__share-tooltip\"></div>\n </div>\n <button class=\"pswp__button pswp__button--arrow--left\" title=\"Previous (arrow left)\"></button>\n <button class=\"pswp__button pswp__button--arrow--right\" title=\"Next (arrow right)\"></button>\n <div class=\"pswp__caption\">\n <div class=\"pswp__caption__center\"></div>\n </div>\n </div>\n </div>\n </div>\n</div>\n","import { GalleryOptions } from './photoswipe';\n\nexport abstract class PhotoGalleryConfig {\n defaultOptions?: GalleryOptions;\n}\n","import { Injectable, ComponentRef, ElementRef, ApplicationRef, createComponent } from '@angular/core';\n\nimport { LightboxComponent } from '../components/lightbox/lightbox.component';\n\n@Injectable({ providedIn: 'root' })\nexport class LightboxService {\n private lightbox: ComponentRef<LightboxComponent> | null;\n private lightboxElement: ElementRef | null;\n\n constructor(private applicationRef: ApplicationRef) {\n this.lightbox = null;\n this.lightboxElement = null;\n }\n\n create() {\n this.lightbox = createComponent(\n LightboxComponent,\n { environmentInjector: this.applicationRef.injector }\n );\n document.body.appendChild(this.lightbox.location.nativeElement);\n this.applicationRef.attachView(this.lightbox.hostView);\n\n this.lightboxElement = this.lightbox.instance.element;\n }\n\n destroy() {\n if (this.lightbox) {\n this.applicationRef.detachView(this.lightbox.hostView);\n this.lightbox = null;\n this.lightboxElement = null;\n }\n }\n\n /**\n * Returns the lightbox element.\n * This method is called after the lightbox is created.\n * @returns HTMLElement\n */\n getLightboxElement(): HTMLElement {\n return this.lightboxElement.nativeElement as HTMLElement;\n }\n}\n","import { Directive, Output, Input, EventEmitter, Optional } from '@angular/core';\nimport PhotoSwipe from 'photoswipe';\nimport PhotoSwipeUI_Default from 'photoswipe/dist/photoswipe-ui-default';\n\nimport { PhotoGalleryConfig } from '../interfaces/config';\nimport { GalleryImage, GalleryItem, GalleryOptions } from '../interfaces/photoswipe';\nimport { LightboxService } from '../services/lightbox.service';\n\nexport const DEFAULT_OPTIONS = {\n history: false,\n closeEl: true,\n captionEl: false,\n fullscreenEl: false,\n zoomEl: true,\n shareEl: false,\n counterEl: true,\n arrowEl: false,\n preloaderEl: true,\n};\n\n@Directive({\n selector: '[photoGalleryGroup]',\n})\nexport class PhotoGalleryGroupDirective {\n @Input('photoGalleryGroup') options: GalleryOptions;\n @Output() onPhotoGalleryInit = new EventEmitter();\n @Output() onPhotoGalleryDestroy = new EventEmitter();\n\n private defaultOptions: GalleryOptions;\n private gallery: PhotoSwipe<any> | null = null;\n private galleryItems: { [key: string]: GalleryItem } = {};\n private galleryItemIds: Set<string> = new Set<string>();\n private galleryImages: GalleryImage[] = [];\n\n constructor(\n @Optional() private photoGalleryConfig: PhotoGalleryConfig,\n private lightboxService: LightboxService\n ) {\n this.defaultOptions = { ...DEFAULT_OPTIONS, ...this.photoGalleryConfig?.defaultOptions };\n }\n\n private isVideo(url: string): boolean {\n return url?.includes('/videos/');\n }\n\n registerGalleryItem(item: { id: string; element: HTMLElement; imageUrl: string; caption?: string }): void {\n const image: GalleryImage = {\n id: item.id,\n src: item.imageUrl,\n ...(item.caption ? { title: item.caption } : {}),\n w: 0,\n h: 0,\n doGetSlideDimensions: true,\n };\n this.galleryItems[item.id] = {\n id: item.id,\n element: item.element,\n image,\n };\n\n this.galleryItemIds.add(item.id);\n }\n\n unregisterGalleryItem(id: string): void {\n this.galleryItemIds.delete(id);\n }\n\n async openPhotoSwipe(id: string): Promise<void> {\n this.lightboxService.create();\n\n const targetItem = this.galleryItems[id].image;\n\n if (targetItem.doGetSlideDimensions && !this.isVideo(targetItem.src)) {\n const targetImage = await loadImage(targetItem.src);\n targetItem.w = targetImage.naturalWidth;\n targetItem.h = targetImage.naturalHeight;\n delete targetItem.doGetSlideDimensions;\n }\n\n // Crée la liste complète des médias\n this.galleryImages = [...this.galleryItemIds].map((key) => {\n const media = this.galleryItems[key].image;\n\n if (this.isVideo(media.src)) {\n return {\n id: media.id,\n html: `\n <div class=\"pswp__video-wrapper\">\n <video\n src=\"${media.src}\"\n controls\n preload=\"metadata\"\n style=\"max-width: 100%; max-height: 100%; border-radius: 8px;\"\n ></video>\n </div>\n `,\n title: media.title || '',\n w: 1920,\n h: 1080,\n };\n }\n\n return media;\n }) as any[];\n\n const idx = this.galleryImages.findIndex((image) => image.id === id);\n const options: GalleryOptions = { ...this.defaultOptions, ...this.options };\n options.index = idx;\n\n options.getThumbBoundsFn = (imageIndex: number) => {\n const key = this.galleryImages[imageIndex].id;\n const thumbnail = this.galleryItems[key].element;\n const origin = this.galleryItems[key].image;\n const pageYScroll = window.pageYOffset || document.documentElement.scrollTop;\n const rect = thumbnail.getBoundingClientRect();\n\n const thumbnailRate = rect.height / rect.width;\n const originRate = origin.h / origin.w;\n let x: number, y: number, w: number;\n\n if (thumbnailRate > originRate) {\n y = rect.top + pageYScroll;\n w = (origin.w * rect.height) / origin.h;\n x = rect.left - (w - rect.width) / 2;\n } else {\n const imageHeight = (origin.h * rect.width) / origin.w;\n x = rect.left;\n w = rect.width;\n y = rect.top + pageYScroll - (imageHeight - rect.height) / 2;\n }\n\n return { x, y, w };\n };\n\n const photoSwipe = this.lightboxService.getLightboxElement();\n\n this.gallery = new PhotoSwipe(photoSwipe, PhotoSwipeUI_Default, this.galleryImages, options);\n\n // ✅ À la fin de l'init :\n this.gallery.listen('initialZoomInEnd', () => {\n // On attend que le DOM du slide soit prêt avant de tenter le \"play\"\n this.waitAndPlayVideo();\n });\n\n this.gallery.listen('afterChange', () => {\n this.waitAndPlayVideo();\n });\n\n this.gallery.listen('afterChange', () => {\n // on met un petit délai pour s’assurer que le DOM est prêt\n setTimeout(() => {\n this.playCurrentSlideVideo();\n }, 200);\n });\n\n this.gallery.listen('destroy', () => {\n this.pauseAllVideos();\n });\n\n this.gallery.listen('gettingData', (_, slide: any) => {\n if (slide.doGetSlideDimensions && !this.isVideo(slide.src)) {\n setTimeout(async () => await this.getSlideDimensions(slide), 300);\n }\n });\n\n this.gallery.listen('imageLoadComplete', async (_, slide: any) => {\n if (slide.doGetSlideDimensions && !this.isVideo(slide.src)) {\n await this.getSlideDimensions(slide);\n }\n });\n\n this.gallery.listen('destroy', () => {\n this.lightboxService.destroy();\n this.onPhotoGalleryDestroy.emit();\n });\n\n this.onPhotoGalleryInit.emit();\n this.pauseAllVideos();\n this.gallery.init();\n setTimeout(() => this.playCurrentSlideVideo(), 200);\n }\n\n private async getSlideDimensions(slide: GalleryImage): Promise<void> {\n if (!slide.doGetSlideDimensions) {\n return;\n }\n\n const image: HTMLImageElement = await loadImage(slide.src).catch(() => null);\n\n slide.doGetSlideDimensions = false;\n\n slide.w = image.naturalWidth;\n slide.h = image.naturalHeight;\n\n this.gallery.invalidateCurrItems();\n this.gallery.updateSize(true);\n }\n private pauseAllVideos() {\n const vids = document.querySelectorAll<HTMLVideoElement>('.pswp__video-wrapper video');\n vids.forEach((v) => {\n try {\n v.pause();\n v.currentTime = 0;\n } catch (_) {}\n });\n }\n\n private playCurrentSlideVideo() {\n if (!this.gallery) return;\n const currentItem = this.gallery.currItem;\n if (!currentItem) return;\n\n const container = this.gallery.container as HTMLElement;\n const slides = Array.from(container.children) as HTMLElement[];\n\n // Stop toutes les vidéos existantes\n slides.forEach((slide) => {\n const vid = slide.querySelector<HTMLVideoElement>('video');\n if (vid) {\n vid.pause();\n vid.currentTime = 0;\n }\n });\n\n // Trouve le slide actif correspondant à la vidéo courante\n const activeSlide = slides.find((slide) => {\n const video = slide.querySelector<HTMLVideoElement>('video');\n return video && video.src === currentItem.src;\n });\n\n if (!activeSlide) return;\n\n const activeVideo = activeSlide.querySelector<HTMLVideoElement>('video');\n if (activeVideo) {\n activeVideo.play().catch(() => {});\n }\n }\n\n private waitAndPlayVideo(retries = 10) {\n if (!this.gallery) return;\n\n const currentItem = this.gallery.currItem;\n if (!currentItem) return;\n\n const container = this.gallery.container as HTMLElement;\n if (!container) return;\n\n // On cherche la vidéo correspondante au slide courant\n const slides = Array.from(container.children) as HTMLElement[];\n const activeSlide = slides.find(slide => {\n const video = slide.querySelector<HTMLVideoElement>('video');\n return video && video.src === currentItem.src;\n });\n\n const video = activeSlide?.querySelector<HTMLVideoElement>('video');\n\n if (video) {\n // petite pause avant le play (évite un \"play() request was interrupted\")\n setTimeout(() => {\n this.pauseAllVideos();\n video.play().catch(() => {});\n }, 50);\n } else if (retries > 0) {\n // réessaye après 100ms jusqu’à 10 fois max\n setTimeout(() => this.waitAndPlayVideo(retries - 1), 100);\n }\n }\n}\n\nfunction loadImage(path: string): Promise<HTMLImageElement> {\n return new Promise((resolve, reject) => {\n const image = new Image();\n image.onload = () => resolve(image);\n image.onerror = (e) => reject(e);\n image.src = path;\n });\n}\n","import { Directive, HostListener, Input, ElementRef, AfterContentInit, OnDestroy } from '@angular/core';\n\nimport { PhotoGalleryGroupDirective } from './photo-gallery-group.directive';\n\n@Directive({\n selector: '[photoGallery]',\n})\nexport class PhotoGalleryDirective implements AfterContentInit, OnDestroy {\n @Input('photoGallery') imageUrl: string;\n @Input() photoGalleryTrackBy: string;\n @Input() photoGalleryCaption: string;\n id: string;\n\n constructor(private el: ElementRef, private photoGalleryGroup: PhotoGalleryGroupDirective) {}\n\n @HostListener('click')\n async openPhotoSwipe(): Promise<void> {\n await this.photoGalleryGroup.openPhotoSwipe(this.id);\n }\n\n ngAfterContentInit(): void {\n this.id = this.photoGalleryTrackBy || this.imageUrl;\n this.photoGalleryGroup.registerGalleryItem({\n id: this.id,\n element: this.el.nativeElement as HTMLElement,\n imageUrl: this.imageUrl,\n caption: this.photoGalleryCaption,\n });\n }\n\n ngOnDestroy(): void {\n this.photoGalleryGroup.unregisterGalleryItem(this.id);\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { LightboxComponent } from './components/lightbox/lightbox.component';\nimport { PhotoGalleryGroupDirective } from './directives/photo-gallery-group.directive';\nimport { PhotoGalleryDirective } from './directives/photo-gallery.directive';\nimport { PhotoGalleryConfig } from './interfaces/config';\n\n@NgModule({\n declarations: [LightboxComponent, PhotoGalleryDirective, PhotoGalleryGroupDirective],\n providers: [],\n imports: [],\n exports: [PhotoGalleryDirective, PhotoGalleryGroupDirective],\n})\nexport class PhotoGalleryModule {\n static forRoot(config: PhotoGalleryConfig): ModuleWithProviders<PhotoGalleryModule> {\n return {\n ngModule: PhotoGalleryModule,\n providers: [\n {\n provide: PhotoGalleryConfig,\n useValue: config,\n },\n ],\n };\n }\n}\n","/*\n * Public API Surface of core\n */\n\nexport * from './lib/photo-gallery.module';\n\nexport * from './lib/directives/photo-gallery-group.directive';\nexport * from './lib/directives/photo-gallery.directive';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.PhotoGalleryConfig","i2.LightboxService","i1.PhotoGalleryGroupDirective"],"mappings":"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"}
1
+ {"version":3,"file":"twogate-ngx-photo-gallery.mjs","sources":["../../../projects/core/src/lib/components/lightbox/lightbox.component.ts","../../../projects/core/src/lib/components/lightbox/lightbox.component.html","../../../projects/core/src/lib/interfaces/config.ts","../../../projects/core/src/lib/services/lightbox.service.ts","../../../projects/core/src/lib/directives/photo-gallery-group.directive.ts","../../../projects/core/src/lib/directives/photo-gallery.directive.ts","../../../projects/core/src/lib/photo-gallery.module.ts","../../../projects/core/src/public-api.ts","../../../projects/core/src/twogate-ngx-photo-gallery.ts"],"sourcesContent":["import { Component, ViewChild, ElementRef, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'photo-gallery-lightbox',\n templateUrl: './lightbox.component.html',\n styleUrls: ['./lightbox.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LightboxComponent {\n @ViewChild('Lightbox', { static: true }) element: ElementRef;\n\n constructor() {}\n}\n","<div class=\"lightbox-wrapper\">\n <!-- Root element of PhotoSwipe. Must have class pswp. -->\n <div class=\"pswp\" #Lightbox tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\">\n <!-- Background of PhotoSwipe.\n It's a separate element, as animating opacity is faster than rgba(). -->\n <div class=\"pswp__bg\"></div>\n <!-- Slides wrapper with overflow:hidden. -->\n <div class=\"pswp__scroll-wrap\">\n <!-- Container that holds slides. PhotoSwipe keeps only 3 slides in DOM to save memory. -->\n <!-- don't modify these 3 pswp__item elements, data is added later on. -->\n <div class=\"pswp__container\">\n <div class=\"pswp__item\"></div>\n <div class=\"pswp__item\"></div>\n <div class=\"pswp__item\"></div>\n </div>\n <!-- Default (PhotoSwipeUI_Default) interface on top of sliding area. Can be changed. -->\n <div class=\"pswp__ui pswp__ui--hidden\">\n <div class=\"pswp__top-bar\">\n <!-- Controls are self-explanatory. Order can be changed. -->\n <div class=\"pswp__counter\"></div>\n <button class=\"pswp__button pswp__button--close\" title=\"Close (Esc)\"></button>\n <button class=\"pswp__button pswp__button--share\" title=\"Share\"></button>\n <button class=\"pswp__button pswp__button--fs\" title=\"Toggle fullscreen\"></button>\n <button class=\"pswp__button pswp__button--zoom\" title=\"Zoom in/out\"></button>\n <!-- Preloader demo http://codepen.io/dimsemenov/pen/yyBWoR -->\n <!-- element will get class pswp__preloader--active when preloader is running -->\n <div class=\"pswp__preloader\">\n <div class=\"pswp__preloader__icn\">\n <div class=\"pswp__preloader__cut\">\n <div class=\"pswp__preloader__donut\"></div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"pswp__share-modal pswp__share-modal--hidden pswp__single-tap\">\n <div class=\"pswp__share-tooltip\"></div>\n </div>\n <button class=\"pswp__button pswp__button--arrow--left\" title=\"Previous (arrow left)\"></button>\n <button class=\"pswp__button pswp__button--arrow--right\" title=\"Next (arrow right)\"></button>\n <div class=\"pswp__caption\">\n <div class=\"pswp__caption__center\"></div>\n </div>\n </div>\n </div>\n </div>\n</div>\n","import { GalleryOptions } from './photoswipe';\n\nexport abstract class PhotoGalleryConfig {\n defaultOptions?: GalleryOptions;\n}\n","import { Injectable, ComponentRef, ElementRef, ApplicationRef, createComponent } from '@angular/core';\n\nimport { LightboxComponent } from '../components/lightbox/lightbox.component';\n\n@Injectable({ providedIn: 'root' })\nexport class LightboxService {\n private lightbox: ComponentRef<LightboxComponent> | null;\n private lightboxElement: ElementRef | null;\n\n constructor(private applicationRef: ApplicationRef) {\n this.lightbox = null;\n this.lightboxElement = null;\n }\n\n create() {\n this.lightbox = createComponent(\n LightboxComponent,\n { environmentInjector: this.applicationRef.injector }\n );\n document.body.appendChild(this.lightbox.location.nativeElement);\n this.applicationRef.attachView(this.lightbox.hostView);\n\n this.lightboxElement = this.lightbox.instance.element;\n }\n\n destroy() {\n if (this.lightbox) {\n this.applicationRef.detachView(this.lightbox.hostView);\n this.lightbox = null;\n this.lightboxElement = null;\n }\n }\n\n /**\n * Returns the lightbox element.\n * This method is called after the lightbox is created.\n * @returns HTMLElement\n */\n getLightboxElement(): HTMLElement {\n return this.lightboxElement.nativeElement as HTMLElement;\n }\n}\n","import { Directive, Output, Input, EventEmitter, Optional } from '@angular/core';\nimport PhotoSwipe from 'photoswipe';\nimport PhotoSwipeUI_Default from 'photoswipe/dist/photoswipe-ui-default';\n\nimport { PhotoGalleryConfig } from '../interfaces/config';\nimport { GalleryImage, GalleryItem, GalleryOptions } from '../interfaces/photoswipe';\nimport { LightboxService } from '../services/lightbox.service';\n\nexport const DEFAULT_OPTIONS = {\n history: false,\n closeEl: true,\n captionEl: false,\n fullscreenEl: false,\n zoomEl: true,\n shareEl: false,\n counterEl: true,\n arrowEl: false,\n preloaderEl: true,\n};\n\n@Directive({\n selector: '[photoGalleryGroup]',\n})\nexport class PhotoGalleryGroupDirective {\n @Input('photoGalleryGroup') options: GalleryOptions;\n @Output() onPhotoGalleryInit = new EventEmitter();\n @Output() onPhotoGalleryDestroy = new EventEmitter();\n\n private defaultOptions: GalleryOptions;\n private gallery: PhotoSwipe<any> | null = null;\n private galleryItems: { [key: string]: GalleryItem } = {};\n private galleryItemIds: Set<string> = new Set<string>();\n private galleryImages: GalleryImage[] = [];\n\n constructor(\n @Optional() private photoGalleryConfig: PhotoGalleryConfig,\n private lightboxService: LightboxService\n ) {\n this.defaultOptions = { ...DEFAULT_OPTIONS, ...this.photoGalleryConfig?.defaultOptions };\n }\n\n private isVideo(url: string): boolean {\n return url?.includes('/videos/');\n }\n\n registerGalleryItem(item: { id: string; element: HTMLElement; imageUrl: string; caption?: string }): void {\n const image: GalleryImage = {\n id: item.id,\n src: item.imageUrl,\n ...(item.caption ? { title: item.caption } : {}),\n w: 0,\n h: 0,\n doGetSlideDimensions: true,\n };\n this.galleryItems[item.id] = {\n id: item.id,\n element: item.element,\n image,\n };\n\n this.galleryItemIds.add(item.id);\n }\n\n unregisterGalleryItem(id: string): void {\n this.galleryItemIds.delete(id);\n }\n\n async openPhotoSwipe(id: string): Promise<void> {\n this.lightboxService.create();\n\n const targetItem = this.galleryItems[id].image;\n\n if (targetItem.doGetSlideDimensions && !this.isVideo(targetItem.src)) {\n const targetImage = await loadImage(targetItem.src);\n targetItem.w = targetImage.naturalWidth;\n targetItem.h = targetImage.naturalHeight;\n delete targetItem.doGetSlideDimensions;\n }\n\n // Crée la liste complète des médias\n this.galleryImages = ([...this.galleryItemIds].map((key) => {\n const media = this.galleryItems[key].image;\n\n if (this.isVideo(media.src)) {\n return {\n id: media.id,\n html: `\n <div class=\"pswp__video-wrapper\">\n <video\n src=\"${media.src}\"\n controls\n preload=\"metadata\"\n style=\"max-width: 100%; max-height: 100%; border-radius: 8px;\"\n ></video>\n </div>\n `,\n title: media.title || '',\n w: 1920,\n h: 1080,\n };\n }\n\n return media;\n })) as any[];\n\n const idx = this.galleryImages.findIndex((image) => image.id === id);\n const options: GalleryOptions = { ...this.defaultOptions, ...this.options };\n options.index = idx;\n\n options.getThumbBoundsFn = (imageIndex: number) => {\n const key = this.galleryImages[imageIndex].id;\n const thumbnail = this.galleryItems[key].element;\n const origin = this.galleryItems[key].image;\n const pageYScroll = window.pageYOffset || document.documentElement.scrollTop;\n const rect = thumbnail.getBoundingClientRect();\n\n const thumbnailRate = rect.height / rect.width;\n const originRate = origin.h / origin.w;\n let x: number, y: number, w: number;\n\n if (thumbnailRate > originRate) {\n y = rect.top + pageYScroll;\n w = (origin.w * rect.height) / origin.h;\n x = rect.left - (w - rect.width) / 2;\n } else {\n const imageHeight = (origin.h * rect.width) / origin.w;\n x = rect.left;\n w = rect.width;\n y = rect.top + pageYScroll - (imageHeight - rect.height) / 2;\n }\n\n return { x, y, w };\n };\n\n const photoSwipe = this.lightboxService.getLightboxElement();\n\n this.gallery = new PhotoSwipe(photoSwipe, PhotoSwipeUI_Default, this.galleryImages, options);\n\n this.gallery.listen('beforeChange', () => {\n this.pauseAllVideos();\n });\n\n this.gallery.listen('initialZoomInEnd', () => {\n // au début, joue la vidéo si c’est une vidéo\n this.playCurrentSlideVideo();\n });\n\n this.gallery.listen('afterChange', () => {\n // on met un petit délai pour s’assurer que le DOM est prêt\n setTimeout(() => {\n this.playCurrentSlideVideo();\n }, 200);\n });\n\n this.gallery.listen('destroy', () => {\n this.pauseAllVideos();\n });\n\n this.gallery.listen('gettingData', (_, slide: any) => {\n if (slide.doGetSlideDimensions && !this.isVideo(slide.src)) {\n setTimeout(async () => await this.getSlideDimensions(slide), 300);\n }\n });\n\n this.gallery.listen('imageLoadComplete', async (_, slide: any) => {\n if (slide.doGetSlideDimensions && !this.isVideo(slide.src)) {\n await this.getSlideDimensions(slide);\n }\n });\n\n this.gallery.listen('destroy', () => {\n this.lightboxService.destroy();\n this.onPhotoGalleryDestroy.emit();\n });\n\n this.onPhotoGalleryInit.emit();\n this.gallery.init();\n }\n\n private async getSlideDimensions(slide: GalleryImage): Promise<void> {\n if (!slide.doGetSlideDimensions) {\n return;\n }\n\n const image: HTMLImageElement = await loadImage(slide.src).catch(() => null);\n\n slide.doGetSlideDimensions = false;\n\n slide.w = image.naturalWidth;\n slide.h = image.naturalHeight;\n\n this.gallery.invalidateCurrItems();\n this.gallery.updateSize(true);\n }\n private pauseAllVideos() {\n const vids = document.querySelectorAll<HTMLVideoElement>('.pswp__video-wrapper video');\n vids.forEach(v => {\n try {\n v.pause();\n v.currentTime = 0;\n } catch(_){}\n });\n }\n\n private playCurrentSlideVideo() {\n if (!this.gallery) return;\n\n const currentIndex = this.gallery.getCurrentIndex(); // index du slide visible\n const currentItem = this.gallery.currItem;\n if (!currentItem) return;\n\n // 🧠 Cast correct : container est un HTMLElement\n const container = this.gallery.container as HTMLElement;\n if (!container) return;\n\n // 🧠 Cast des enfants en tableau de HTMLElements\n const slideEls = Array.from(container.children) as HTMLElement[];\n const total = this.gallery.items.length;\n const moduloIndex = currentIndex % 3; // PhotoSwipe recycle 3 conteneurs\n\n // Sélection du slide actif\n const activeSlide = slideEls[moduloIndex];\n if (!activeSlide) return;\n\n // Pause toutes les autres vidéos\n slideEls.forEach(slide => {\n const video = slide.querySelector<HTMLVideoElement>('video');\n if (video) {\n if (slide === activeSlide) return;\n video.pause();\n video.currentTime = 0;\n }\n });\n\n // Lecture de la vidéo active (si présente)\n const activeVideo = activeSlide.querySelector<HTMLVideoElement>('video');\n if (activeVideo) {\n activeVideo.play().catch(() => {});\n }\n }\n}\n\nfunction loadImage(path: string): Promise<HTMLImageElement> {\n return new Promise((resolve, reject) => {\n const image = new Image();\n image.onload = () => resolve(image);\n image.onerror = (e) => reject(e);\n image.src = path;\n });\n}\n\n","import { Directive, HostListener, Input, ElementRef, AfterContentInit, OnDestroy } from '@angular/core';\n\nimport { PhotoGalleryGroupDirective } from './photo-gallery-group.directive';\n\n@Directive({\n selector: '[photoGallery]',\n})\nexport class PhotoGalleryDirective implements AfterContentInit, OnDestroy {\n @Input('photoGallery') imageUrl: string;\n @Input() photoGalleryTrackBy: string;\n @Input() photoGalleryCaption: string;\n id: string;\n\n constructor(private el: ElementRef, private photoGalleryGroup: PhotoGalleryGroupDirective) {}\n\n @HostListener('click')\n async openPhotoSwipe(): Promise<void> {\n await this.photoGalleryGroup.openPhotoSwipe(this.id);\n }\n\n ngAfterContentInit(): void {\n this.id = this.photoGalleryTrackBy || this.imageUrl;\n this.photoGalleryGroup.registerGalleryItem({\n id: this.id,\n element: this.el.nativeElement as HTMLElement,\n imageUrl: this.imageUrl,\n caption: this.photoGalleryCaption,\n });\n }\n\n ngOnDestroy(): void {\n this.photoGalleryGroup.unregisterGalleryItem(this.id);\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { LightboxComponent } from './components/lightbox/lightbox.component';\nimport { PhotoGalleryGroupDirective } from './directives/photo-gallery-group.directive';\nimport { PhotoGalleryDirective } from './directives/photo-gallery.directive';\nimport { PhotoGalleryConfig } from './interfaces/config';\n\n@NgModule({\n declarations: [LightboxComponent, PhotoGalleryDirective, PhotoGalleryGroupDirective],\n providers: [],\n imports: [],\n exports: [PhotoGalleryDirective, PhotoGalleryGroupDirective],\n})\nexport class PhotoGalleryModule {\n static forRoot(config: PhotoGalleryConfig): ModuleWithProviders<PhotoGalleryModule> {\n return {\n ngModule: PhotoGalleryModule,\n providers: [\n {\n provide: PhotoGalleryConfig,\n useValue: config,\n },\n ],\n };\n }\n}\n","/*\n * Public API Surface of core\n */\n\nexport * from './lib/photo-gallery.module';\n\nexport * from './lib/directives/photo-gallery-group.directive';\nexport * from './lib/directives/photo-gallery.directive';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.PhotoGalleryConfig","i2.LightboxService","i1.PhotoGalleryGroupDirective"],"mappings":"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"}
@@ -38,7 +38,6 @@ export declare class PhotoGalleryGroupDirective {
38
38
  private getSlideDimensions;
39
39
  private pauseAllVideos;
40
40
  private playCurrentSlideVideo;
41
- private waitAndPlayVideo;
42
41
  static ɵfac: i0.ɵɵFactoryDeclaration<PhotoGalleryGroupDirective, [{ optional: true; }, null]>;
43
42
  static ɵdir: i0.ɵɵDirectiveDeclaration<PhotoGalleryGroupDirective, "[photoGalleryGroup]", never, { "options": "photoGalleryGroup"; }, { "onPhotoGalleryInit": "onPhotoGalleryInit"; "onPhotoGalleryDestroy": "onPhotoGalleryDestroy"; }, never, never, false, never>;
44
43
  }
@@ -1 +1 @@
1
- {"version":3,"file":"photo-gallery-group.directive.d.ts","sourceRoot":"","sources":["../../../../projects/core/src/lib/directives/photo-gallery-group.directive.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAY,MAAM,eAAe,CAAC;AAIjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAA6B,cAAc,EAAE,MAAM,0BAA0B,CAAC;AACrF,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;;AAE/D,eAAO,MAAM,eAAe;;;;;;;;;;CAU3B,CAAC;AAEF,qBAGa,0BAA0B;IAYvB,OAAO,CAAC,kBAAkB;IACtC,OAAO,CAAC,eAAe;IAZG,OAAO,EAAE,cAAc,CAAC;IAC1C,kBAAkB,oBAAsB;IACxC,qBAAqB,oBAAsB;IAErD,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,OAAO,CAAgC;IAC/C,OAAO,CAAC,YAAY,CAAsC;IAC1D,OAAO,CAAC,cAAc,CAAkC;IACxD,OAAO,CAAC,aAAa,CAAsB;gBAGrB,kBAAkB,EAAE,kBAAkB,EAClD,eAAe,EAAE,eAAe;IAK1C,OAAO,CAAC,OAAO;IAIf,mBAAmB,CAAC,IAAI,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,WAAW,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAkBzG,qBAAqB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAIjC,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAmHjC,kBAAkB;IAehC,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,qBAAqB;IA+B7B,OAAO,CAAC,gBAAgB;yCAvNb,0BAA0B;2CAA1B,0BAA0B;CAoPtC"}
1
+ {"version":3,"file":"photo-gallery-group.directive.d.ts","sourceRoot":"","sources":["../../../../projects/core/src/lib/directives/photo-gallery-group.directive.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAY,MAAM,eAAe,CAAC;AAIjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAA6B,cAAc,EAAE,MAAM,0BAA0B,CAAC;AACrF,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;;AAE/D,eAAO,MAAM,eAAe;;;;;;;;;;CAU3B,CAAC;AAEF,qBAGa,0BAA0B;IAYvB,OAAO,CAAC,kBAAkB;IACtC,OAAO,CAAC,eAAe;IAZG,OAAO,EAAE,cAAc,CAAC;IAC1C,kBAAkB,oBAAsB;IACxC,qBAAqB,oBAAsB;IAErD,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,OAAO,CAAgC;IAC/C,OAAO,CAAC,YAAY,CAAsC;IAC1D,OAAO,CAAC,cAAc,CAAkC;IACxD,OAAO,CAAC,aAAa,CAAsB;gBAGrB,kBAAkB,EAAE,kBAAkB,EAClD,eAAe,EAAE,eAAe;IAK1C,OAAO,CAAC,OAAO;IAIf,mBAAmB,CAAC,IAAI,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,WAAW,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAkBzG,qBAAqB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAIjC,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAgHjC,kBAAkB;IAehC,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,qBAAqB;yCArLlB,0BAA0B;2CAA1B,0BAA0B;CAyNtC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@udilhan/ngx-photo-gallery",
3
- "version": "1.5.15",
3
+ "version": "1.5.16",
4
4
  "license": "MIT",
5
5
  "repository": "https://github.com/UDilhan/ngx-photo-gallery",
6
6
  "keywords": [