ngx-edge-slider 2.1.5 β†’ 2.1.7

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.
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 3.5 23.71 17">
2
+ <path fill="#212121" fill-rule="evenodd" d="M15.354 3.646a.5.5 0 0 0-.708.708l7.147 7.146H.5a.5.5 0 0 0 0 1h21.293l-7.147 7.146a.5.5 0 0 0 .708.708l8-8 .353-.354-.353-.354-8-8Z" clip-rule="evenodd"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 3.5 23.71 17">
2
+ <path fill="#B3B3B3" fill-rule="evenodd" d="M15.354 3.646a.5.5 0 0 0-.708.708l7.147 7.146H.5a.5.5 0 0 0 0 1h21.293l-7.147 7.146a.5.5 0 0 0 .708.708l8-8 .353-.354-.353-.354-8-8Z" clip-rule="evenodd"/>
3
+ </svg>
@@ -0,0 +1,496 @@
1
+ $base-duration: 300ms;
2
+ $base-ease: cubic-bezier(0.25, 0.46, 0.45, 0.84);
3
+ $thumb-gap: 8px;
4
+ $thumb-size: 80px; // uniform square size for thumbs
5
+ $main-height: 520px; // main slider height
6
+
7
+ :host {
8
+ display: block;
9
+ position: relative; // βœ… anchor for nav
10
+ }
11
+
12
+ /* ---------------- Main Slider ---------------- */
13
+ .slider-main-product {
14
+ display: inline-flex;
15
+ height: $main-height;
16
+ }
17
+
18
+ .slider-main {
19
+ width: 100%;
20
+ height: 600px;
21
+ justify-content: center;
22
+ display: flex;
23
+ }
24
+
25
+ @media (max-width: 577px) {
26
+ .slider-main {
27
+ height: 100%;
28
+ display: block;
29
+ }
30
+ }
31
+
32
+ .slider--main {
33
+ height: 100%;
34
+ overflow: hidden;
35
+
36
+ .slider__wrapper {
37
+ display: flex;
38
+ will-change: transform;
39
+ // transform: translateZ(0);
40
+
41
+ .slide {
42
+ flex: 0 0 100%;
43
+
44
+ .slide-content,
45
+ picture {
46
+ position: relative;
47
+ width: 100%;
48
+ height: 100%;
49
+ display: flex;
50
+ align-items: center;
51
+ justify-content: center;
52
+
53
+ .drag-handle {
54
+ width: 100%;
55
+ height: 100%;
56
+ cursor: grab;
57
+ z-index: 10;
58
+ pointer-events: all;
59
+ }
60
+
61
+ img {
62
+ max-width: 100%;
63
+ max-height: 100%;
64
+ object-fit: contain;
65
+ display: block;
66
+
67
+ transform-origin: center;
68
+ transform: translateZ(0); // πŸ”΄ GPU promote
69
+ pointer-events: none;
70
+ }
71
+ }
72
+ }
73
+ }
74
+ }
75
+
76
+ /* ---------------- Thumbs Slider ---------------- */
77
+ .slider--thumbs {
78
+ margin-top: 24px;
79
+ margin-bottom: 36px;
80
+ height: 70px !important;
81
+
82
+ .slider__wrapper {
83
+ display: flex;
84
+ gap: $thumb-gap;
85
+
86
+ will-change: transform;
87
+ transform: translateZ(0);
88
+ }
89
+
90
+ .slide {
91
+ flex: 0 0 auto;
92
+ pointer-events: auto;
93
+
94
+ .slide-content {
95
+ width: 54px;
96
+ height: 68px;
97
+
98
+ display: flex;
99
+ align-items: center;
100
+ justify-content: center;
101
+
102
+ border: 1px solid #ebebeb;
103
+ cursor: pointer;
104
+
105
+ img {
106
+ max-width: 100%;
107
+ max-height: 100%;
108
+ object-fit: contain;
109
+ display: block;
110
+ transform: scale(0.9); // depth effect
111
+ }
112
+
113
+ &.slide--current {
114
+ border-color: #212121;
115
+ }
116
+ }
117
+ }
118
+ }
119
+
120
+ /* ---------------- Main Slider Container ---------------- */
121
+ .slider {
122
+ width: 100%;
123
+ height: 100%;
124
+ overflow: hidden;
125
+ position: relative;
126
+ touch-action: none; // πŸ”₯ slider owns the gesture
127
+ cursor: grab;
128
+ user-select: none;
129
+ -webkit-user-drag: none;
130
+ -webkit-tap-highlight-color: transparent;
131
+
132
+ &.slider-can-drag {
133
+ cursor: grab;
134
+ }
135
+
136
+ &.slider-is-dragging {
137
+ cursor: grabbing;
138
+ }
139
+
140
+ &.slider-dragged {
141
+ /* optional, e.g., subtle shadow after drag */
142
+ box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
143
+ }
144
+
145
+ &.slider-drag-prevent-click {
146
+ pointer-events: none; /* prevent accidental clicks while dragging */
147
+ }
148
+
149
+ .slider__wrapper {
150
+ display: flex;
151
+ transition: transform $base-duration $base-ease;
152
+ //transition: none !important;
153
+ will-change: transform;
154
+ transform: none;
155
+ width: auto;
156
+ height: 100%;
157
+ //transform: translate3d(0,0,0);
158
+ }
159
+
160
+ .slide {
161
+ display: flex;
162
+ align-items: center;
163
+ justify-content: center;
164
+ height: 100%;
165
+ overflow: hidden;
166
+ flex-shrink: 0;
167
+ position: relative;
168
+ transition: transform $base-duration $base-ease;
169
+ }
170
+ }
171
+
172
+ @media (min-width: 1441px) {
173
+ .slider--thumbs .slide {
174
+ flex: 0 0 20%;
175
+ }
176
+ }
177
+
178
+ @media (max-width: 1024px) {
179
+ .slider--thumbs .slide {
180
+ flex: 0 0 33.333%;
181
+ }
182
+ }
183
+
184
+ @media (max-width: 1023px) {
185
+ .slider--thumbs .slide {
186
+ flex: 0 0 50%;
187
+ }
188
+ }
189
+
190
+ /* ---------------- Optional Arrows ---------------- */
191
+ .slider-arrow-next,
192
+ .slider-arrow-prev {
193
+ position: absolute;
194
+ top: 50%;
195
+ transform: translateY(-50%);
196
+ width: 32px;
197
+ height: 32px;
198
+ background: rgba(255, 255, 255, 0.8) no-repeat center center;
199
+ cursor: pointer;
200
+ z-index: 10;
201
+
202
+ &.next {
203
+ right: 10px;
204
+ }
205
+
206
+ &.prev {
207
+ left: 10px;
208
+ }
209
+ }
210
+
211
+ /* ---------------- Arrows L/R on Thumbs ---------------- */
212
+ .thumbs-wrapper {
213
+ position: relative;
214
+ }
215
+
216
+ .thumb-nav {
217
+ position: absolute;
218
+ top: 50%;
219
+ transform: translateY(-50%);
220
+ z-index: 20;
221
+ width: 48px;
222
+ height: 48px;
223
+
224
+ background: rgba(255, 255, 255, 0.9)
225
+ url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='4.51 0.01 10.99 19.97'%3E%3Cpath fill='%23000' d='m4.508 18.968 1.006 1.006 9.983-9.984L5.514.005 4.508 1.011l8.984 8.984-8.984 8.973Z'/%3E%3C/svg%3E")
226
+ no-repeat center center/11px 18px;
227
+
228
+ font-size: 36px;
229
+ line-height: 56px;
230
+
231
+ opacity: 0; // default hidden
232
+ pointer-events: none; // default non-clickable
233
+ transition: opacity 200ms ease;
234
+
235
+ &.activeArrow {
236
+ opacity: 1;
237
+ pointer-events: all;
238
+ }
239
+
240
+ &--left {
241
+ left: -73px;
242
+ transform: translateY(-50%) rotate(180deg) !important;
243
+ }
244
+
245
+ &--right {
246
+ right: -65px;
247
+ }
248
+ }
249
+
250
+ .slider-pagination {
251
+ .thumb-dots-wrapper {
252
+ display: flex;
253
+ align-items: center;
254
+ justify-content: center;
255
+ gap: 7px;
256
+
257
+ .thumb-dot {
258
+ display: inline-block;
259
+ width: 4px;
260
+ height: 4px;
261
+ margin: 0 0 0 8px;
262
+ border-radius: 50%;
263
+ background: #b3b3b3;
264
+
265
+ &.active {
266
+ background: #212121;
267
+ border: 1px solid #212121;
268
+ }
269
+
270
+ &:hover {
271
+ background: #212121;
272
+ border: 1px solid #212121;
273
+ }
274
+
275
+ &.hidden {
276
+ opacity: 0;
277
+ pointer-events: none;
278
+ }
279
+ }
280
+ }
281
+ }
282
+
283
+ .slider-container {
284
+ position: relative;
285
+ z-index: 10; // base container
286
+
287
+ .slider {
288
+ position: relative;
289
+ z-index: 1; // slider itself below nav buttons
290
+ }
291
+ .slider.slider-is-dragging {
292
+ pointer-events: none; // disables clicks on slides while dragging
293
+ }
294
+ .slider-nav {
295
+ position: absolute;
296
+ inset: 0; // top:0; right:0; bottom:0; left:0
297
+ pointer-events: none; // container itself doesn't block
298
+ z-index: 20; // nav above slider
299
+
300
+ .nav-btn {
301
+ pointer-events: auto; // buttons always clickable
302
+ z-index: 30; // highest layer
303
+
304
+ position: absolute;
305
+
306
+ width: 42px;
307
+ height: 42px;
308
+ border-radius: 2px;
309
+ display: inline-flex;
310
+ align-items: center;
311
+ justify-content: center;
312
+ border: 0;
313
+ cursor: pointer;
314
+ background: transparent;
315
+ font-size: 32px;
316
+ line-height: 1;
317
+ transition:
318
+ transform 0.15s ease,
319
+ opacity 0.15s ease;
320
+
321
+ &:hover {
322
+ transform: translateY(-1px);
323
+ background: rgba(0, 0, 0, 0.6); // slightly darker on hover
324
+ }
325
+
326
+ &.is-hidden {
327
+ color: #a0a0a58d;
328
+ opacity: 0.3;
329
+ cursor: not-allowed;
330
+ pointer-events: auto; // still catches clicks
331
+ }
332
+ }
333
+
334
+ // ---------------- TOP ----------------
335
+ &.nav--top-left {
336
+ .nav-btn--prev {
337
+ top: -50px;
338
+ left: -20px; // outside container large screen
339
+ }
340
+ .nav-btn--next {
341
+ top: -50px;
342
+ left: 42px; // next to prev
343
+ }
344
+ }
345
+
346
+ &.nav--top-center {
347
+ .nav-btn--prev {
348
+ top: -50px;
349
+ left: 50%;
350
+ transform: translateX(-50px); // prev left of center
351
+ }
352
+ .nav-btn--next {
353
+ top: -50px;
354
+ left: 50%;
355
+ transform: translateX(10px); // next right of center
356
+ }
357
+ }
358
+
359
+ &.nav--top-right {
360
+ .nav-btn--prev {
361
+ top: -50px;
362
+ right: 42px; // prev left of next
363
+ }
364
+ .nav-btn--next {
365
+ top: -50px;
366
+ right: -20px; // outside container
367
+ }
368
+ }
369
+
370
+ // ---------------- BOTTOM ----------------
371
+ &.nav--bottom-left {
372
+ .nav-btn--prev {
373
+ bottom: 30px;
374
+ left: -20px; // outside container
375
+ }
376
+ .nav-btn--next {
377
+ bottom: 30px;
378
+ left: 42px; // next to prev
379
+ }
380
+ }
381
+
382
+ &.nav--bottom-center {
383
+ .nav-btn--prev {
384
+ bottom: 30px;
385
+ left: 50%;
386
+ transform: translateX(-50px); // prev left of center
387
+ }
388
+ .nav-btn--next {
389
+ bottom: 30px;
390
+ left: 50%;
391
+ transform: translateX(10px); // next right of center
392
+ }
393
+ }
394
+
395
+ &.nav--bottom-right {
396
+ .nav-btn--prev {
397
+ bottom: 30px;
398
+ right: 42px; // prev left of next
399
+ }
400
+ .nav-btn--next {
401
+ bottom: 30px;
402
+ right: -20px; // outside container
403
+ }
404
+ }
405
+
406
+ // ---------------- CENTER SIDES ----------------
407
+ &.nav--center-sides {
408
+ .nav-btn {
409
+ background: rgba(0, 0, 0, 0.7); // black semi-transparent background
410
+ color: white;
411
+ }
412
+ .nav-btn--prev {
413
+ top: 50%;
414
+ left: -50px; // outside container large screen
415
+ transform: translateY(-50%);
416
+ }
417
+ .nav-btn--next {
418
+ top: 50%;
419
+ right: -50px; // outside container large screen
420
+ transform: translateY(-50%);
421
+ }
422
+ }
423
+
424
+ // ---------------- RESPONSIVE ----------------
425
+ @media (max-width: 1024px) {
426
+ // reduce offsets so buttons stay inside viewport
427
+ .nav--top-left,
428
+ .nav--top-center,
429
+ .nav--top-right,
430
+ .nav--bottom-left,
431
+ .nav--bottom-center,
432
+ .nav--bottom-right,
433
+ .nav--center-sides {
434
+ .nav-btn--prev {
435
+ left: clamp(8px, 5%, 40px);
436
+ right: auto;
437
+ }
438
+ .nav-btn--next {
439
+ right: clamp(8px, 5%, 20px);
440
+ left: auto;
441
+ }
442
+ }
443
+ }
444
+
445
+ @media (max-width: 768px) {
446
+ .nav-btn {
447
+ width: 36px;
448
+ height: 36px;
449
+ font-size: 24px;
450
+ }
451
+ }
452
+
453
+ @media (max-width: 480px) {
454
+ .slider-container {
455
+ .slider-nav.nav--center-sides {
456
+ pointer-events: auto; // make nav container clickable
457
+
458
+ .nav-btn {
459
+ width: 32px;
460
+ height: 32px;
461
+ font-size: 20px;
462
+
463
+ pointer-events: auto; // buttons always catch clicks
464
+ z-index: 20; // ensure above slide content
465
+ background: rgba(0, 0, 0, 0.7); // semi-transparent circle
466
+ color: white;
467
+ }
468
+ }
469
+
470
+ // Make the slide content ignore pointer events **under the nav buttons**
471
+ .slider__wrapper {
472
+ position: relative;
473
+
474
+ .slide-content {
475
+ pointer-events: auto; // normal click on slides
476
+ }
477
+ }
478
+ }
479
+ .nav-btn {
480
+ width: 32px;
481
+ height: 32px;
482
+ font-size: 20px;
483
+ }
484
+
485
+ // keep nav buttons fully inside mobile viewport
486
+ .nav-btn--prev {
487
+ left: 8px !important;
488
+ right: auto !important;
489
+ }
490
+ .nav-btn--next {
491
+ right: 8px !important;
492
+ left: auto !important;
493
+ }
494
+ }
495
+ }
496
+ }
@@ -193,11 +193,11 @@ export class SimpleSliderComponent {
193
193
  }
194
194
  }
195
195
  static Ι΅fac = i0.Ι΅Ι΅ngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SimpleSliderComponent, deps: [{ token: i1.SliderEngine }, { token: i2.SliderStore }, { token: i3.SliderDraggablePlugin }, { token: i4.SliderPaginationPlugin }, { token: i5.SliderNavigationPlugin }, { token: i6.SliderAutoplayPlugin }], target: i0.Ι΅Ι΅FactoryTarget.Component });
196
- static Ι΅cmp = i0.Ι΅Ι΅ngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: SimpleSliderComponent, isStandalone: true, selector: "app-simple-slider", inputs: { config: "config", slideTemplate: "slideTemplate", navigationTemplate: "navigationTemplate", paginationTemplate: "paginationTemplate" }, outputs: { slideChange: "slideChange" }, providers: [SliderEngine, SliderStore, SliderDraggablePlugin, SliderPaginationPlugin, SliderNavigationPlugin, SliderAutoplayPlugin], viewQueries: [{ propertyName: "sliderHost", first: true, predicate: ["sliderHost"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"state$ | async as state\">\r\n <div\r\n class=\"slider\"\r\n #sliderHost\r\n [class.slider-vertical]=\"state.vertical\"\r\n [class.slider-draggable]=\"state.isDragging\"\r\n [class.slider--main]=\"!config.isThumbs\"\r\n [class.slider--thumbs]=\"config.isThumbs\"\r\n *ngIf=\"state.visibleSlides?.length > 0 && state.isVisible\"\r\n (pointerdown)=\"onPointerDown($event)\"\r\n (pointermove)=\"onPointerMove($event)\"\r\n (pointerup)=\"onPointerUp($event)\"\r\n (pointercancel)=\"onPointerUp($event)\">\r\n <div\r\n class=\"slider__wrapper\"\r\n [ngStyle]=\"{\r\n transform: state.translate,\r\n transition: draggable.isDraggingPointer ? 'none' : 'transform 0.3s ease',\r\n display: 'flex',\r\n 'flex-direction': state.vertical ? 'column' : 'row',\r\n 'justify-content': state.visibleSlides?.length < state.slidesPerView ? 'center' : 'flex-start',\r\n gap: (state.slidesPerView > 1 ? state.gap || 0 : 0) + 'px',\r\n }\">\r\n <div\r\n *ngFor=\"let slide of state.visibleSlides; let i = index\"\r\n class=\"slide\"\r\n [attr.data-index]=\"i\"\r\n [class.slide--current]=\"state.selectedSlide === i\"\r\n [style.flex]=\"\r\n !config.isThumbs\r\n ? '0 0 calc(' +\r\n 100 / state.slidesPerView +\r\n '% - ' +\r\n ((state.gap || 0) * (state.slidesPerView - 1)) / state.slidesPerView +\r\n 'px)'\r\n : '0 0 ' + thumbSize + 'px'\r\n \"\r\n [style.width]=\"config.isThumbs ? thumbSize + 'px' : null\"\r\n [style.height]=\"config.isThumbs ? thumbSize + 'px' : null\"\r\n (click)=\"engine.selectSlide(i)\">\r\n <ng-container\r\n *ngTemplateOutlet=\"slideTemplate ? slideTemplate : defaultSlideTemplate; context: { slide: slide, index: i }\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-container>\r\n", styles: ["@charset \"UTF-8\";:host{display:block;position:relative}.slider-main-product{display:inline-flex;height:520px}.slider-main{width:100%;height:600px;justify-content:center;display:flex}@media (max-width: 577px){.slider-main{height:100%;display:block}}.slider--main{height:100%;overflow:hidden}.slider--main .slider__wrapper{display:flex;will-change:transform}.slider--main .slider__wrapper .slide{flex:0 0 100%}.slider--main .slider__wrapper .slide .slide-content,.slider--main .slider__wrapper .slide picture{position:relative;width:100%;height:100%;display:flex;align-items:center;justify-content:center}.slider--main .slider__wrapper .slide .slide-content .drag-handle,.slider--main .slider__wrapper .slide picture .drag-handle{width:100%;height:100%;cursor:grab;z-index:10;pointer-events:all}.slider--main .slider__wrapper .slide .slide-content img,.slider--main .slider__wrapper .slide picture img{max-width:100%;max-height:100%;object-fit:contain;display:block;transform-origin:center;transform:translateZ(0);pointer-events:none}.slider--thumbs{margin-top:24px;margin-bottom:36px;height:70px!important}.slider--thumbs .slider__wrapper{display:flex;gap:8px;will-change:transform;transform:translateZ(0)}.slider--thumbs .slide{flex:0 0 auto;pointer-events:auto}.slider--thumbs .slide .slide-content{width:54px;height:68px;display:flex;align-items:center;justify-content:center;border:1px solid #ebebeb;cursor:pointer}.slider--thumbs .slide .slide-content img{max-width:100%;max-height:100%;object-fit:contain;display:block;transform:scale(.9)}.slider--thumbs .slide .slide-content.slide--current{border-color:#212121}.slider{width:100%;height:100%;overflow:hidden;position:relative;touch-action:none;cursor:grab;-webkit-user-select:none;user-select:none;-webkit-user-drag:none;-webkit-tap-highlight-color:transparent}.slider.slider-can-drag{cursor:grab}.slider.slider-is-dragging{cursor:grabbing}.slider.slider-dragged{box-shadow:0 0 10px #0000001a}.slider.slider-drag-prevent-click{pointer-events:none}.slider .slider__wrapper{display:flex;transition:transform .3s cubic-bezier(.25,.46,.45,.84);will-change:transform;transform:none;width:auto;height:100%}.slider .slide{display:flex;align-items:center;justify-content:center;height:100%;overflow:hidden;flex-shrink:0;position:relative;transition:transform .3s cubic-bezier(.25,.46,.45,.84)}@media (min-width: 1441px){.slider--thumbs .slide{flex:0 0 20%}}@media (max-width: 1024px){.slider--thumbs .slide{flex:0 0 33.333%}}@media (max-width: 1023px){.slider--thumbs .slide{flex:0 0 50%}}.slider-arrow-next,.slider-arrow-prev{position:absolute;top:50%;transform:translateY(-50%);width:32px;height:32px;background:#fffc no-repeat center center;cursor:pointer;z-index:10}.slider-arrow-next.next,.slider-arrow-prev.next{right:10px}.slider-arrow-next.prev,.slider-arrow-prev.prev{left:10px}.thumbs-wrapper{position:relative}.thumb-nav{position:absolute;top:50%;transform:translateY(-50%);z-index:20;width:48px;height:48px;background:#ffffffe6 url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='4.51 0.01 10.99 19.97'%3E%3Cpath fill='%23000' d='m4.508 18.968 1.006 1.006 9.983-9.984L5.514.005 4.508 1.011l8.984 8.984-8.984 8.973Z'/%3E%3C/svg%3E\") no-repeat center center/11px 18px;font-size:36px;line-height:56px;opacity:0;pointer-events:none;transition:opacity .2s ease}.thumb-nav.activeArrow{opacity:1;pointer-events:all}.thumb-nav--left{left:-73px;transform:translateY(-50%) rotate(180deg)!important}.thumb-nav--right{right:-65px}.slider-pagination .thumb-dots-wrapper{display:flex;align-items:center;justify-content:center;gap:7px}.slider-pagination .thumb-dots-wrapper .thumb-dot{display:inline-block;width:4px;height:4px;margin:0 0 0 8px;border-radius:50%;background:#b3b3b3}.slider-pagination .thumb-dots-wrapper .thumb-dot.active,.slider-pagination .thumb-dots-wrapper .thumb-dot:hover{background:#212121;border:1px solid #212121}.slider-pagination .thumb-dots-wrapper .thumb-dot.hidden{opacity:0;pointer-events:none}.slider-container{position:relative;z-index:10}.slider-container .slider{position:relative;z-index:1}.slider-container .slider.slider-is-dragging{pointer-events:none}.slider-container .slider-nav{position:absolute;inset:0;pointer-events:none;z-index:20}.slider-container .slider-nav .nav-btn{pointer-events:auto;z-index:30;position:absolute;width:42px;height:42px;border-radius:2px;display:inline-flex;align-items:center;justify-content:center;border:0;cursor:pointer;background:transparent;font-size:32px;line-height:1;transition:transform .15s ease,opacity .15s ease}.slider-container .slider-nav .nav-btn:hover{transform:translateY(-1px);background:#0009}.slider-container .slider-nav .nav-btn.is-hidden{color:#a0a0a58d;opacity:.3;cursor:not-allowed;pointer-events:auto}.slider-container .slider-nav.nav--top-left .nav-btn--prev{top:-50px;left:-20px}.slider-container .slider-nav.nav--top-left .nav-btn--next{top:-50px;left:42px}.slider-container .slider-nav.nav--top-center .nav-btn--prev{top:-50px;left:50%;transform:translate(-50px)}.slider-container .slider-nav.nav--top-center .nav-btn--next{top:-50px;left:50%;transform:translate(10px)}.slider-container .slider-nav.nav--top-right .nav-btn--prev{top:-50px;right:42px}.slider-container .slider-nav.nav--top-right .nav-btn--next{top:-50px;right:-20px}.slider-container .slider-nav.nav--bottom-left .nav-btn--prev{bottom:30px;left:-20px}.slider-container .slider-nav.nav--bottom-left .nav-btn--next{bottom:30px;left:42px}.slider-container .slider-nav.nav--bottom-center .nav-btn--prev{bottom:30px;left:50%;transform:translate(-50px)}.slider-container .slider-nav.nav--bottom-center .nav-btn--next{bottom:30px;left:50%;transform:translate(10px)}.slider-container .slider-nav.nav--bottom-right .nav-btn--prev{bottom:30px;right:42px}.slider-container .slider-nav.nav--bottom-right .nav-btn--next{bottom:30px;right:-20px}.slider-container .slider-nav.nav--center-sides .nav-btn{background:#000000b3;color:#fff}.slider-container .slider-nav.nav--center-sides .nav-btn--prev{top:50%;left:-50px;transform:translateY(-50%)}.slider-container .slider-nav.nav--center-sides .nav-btn--next{top:50%;right:-50px;transform:translateY(-50%)}@media (max-width: 1024px){.slider-container .slider-nav .nav--top-left .nav-btn--prev,.slider-container .slider-nav .nav--top-center .nav-btn--prev,.slider-container .slider-nav .nav--top-right .nav-btn--prev,.slider-container .slider-nav .nav--bottom-left .nav-btn--prev,.slider-container .slider-nav .nav--bottom-center .nav-btn--prev,.slider-container .slider-nav .nav--bottom-right .nav-btn--prev,.slider-container .slider-nav .nav--center-sides .nav-btn--prev{left:clamp(8px,5%,40px);right:auto}.slider-container .slider-nav .nav--top-left .nav-btn--next,.slider-container .slider-nav .nav--top-center .nav-btn--next,.slider-container .slider-nav .nav--top-right .nav-btn--next,.slider-container .slider-nav .nav--bottom-left .nav-btn--next,.slider-container .slider-nav .nav--bottom-center .nav-btn--next,.slider-container .slider-nav .nav--bottom-right .nav-btn--next,.slider-container .slider-nav .nav--center-sides .nav-btn--next{right:clamp(8px,5%,20px);left:auto}}@media (max-width: 768px){.slider-container .slider-nav .nav-btn{width:36px;height:36px;font-size:24px}}@media (max-width: 480px){.slider-container .slider-nav .slider-container .slider-nav.nav--center-sides{pointer-events:auto}.slider-container .slider-nav .slider-container .slider-nav.nav--center-sides .nav-btn{width:32px;height:32px;font-size:20px;pointer-events:auto;z-index:20;background:#000000b3;color:#fff}.slider-container .slider-nav .slider-container .slider__wrapper{position:relative}.slider-container .slider-nav .slider-container .slider__wrapper .slide-content{pointer-events:auto}.slider-container .slider-nav .nav-btn{width:32px;height:32px;font-size:20px}.slider-container .slider-nav .nav-btn--prev{left:8px!important;right:auto!important}.slider-container .slider-nav .nav-btn--next{right:8px!important;left:auto!important}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i7.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
196
+ static Ι΅cmp = i0.Ι΅Ι΅ngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: SimpleSliderComponent, isStandalone: true, selector: "app-simple-slider", inputs: { config: "config", slideTemplate: "slideTemplate", navigationTemplate: "navigationTemplate", paginationTemplate: "paginationTemplate" }, outputs: { slideChange: "slideChange" }, providers: [SliderEngine, SliderStore, SliderDraggablePlugin, SliderPaginationPlugin, SliderNavigationPlugin, SliderAutoplayPlugin], viewQueries: [{ propertyName: "sliderHost", first: true, predicate: ["sliderHost"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"state$ | async as state\">\r\n <div\r\n class=\"slider\"\r\n #sliderHost\r\n [class.slider-vertical]=\"state.vertical\"\r\n [class.slider-draggable]=\"state.isDragging\"\r\n [class.slider--main]=\"!config.isThumbs\"\r\n [class.slider--thumbs]=\"config.isThumbs\"\r\n *ngIf=\"state.visibleSlides?.length > 0 && state.isVisible\"\r\n (pointerdown)=\"onPointerDown($event)\"\r\n (pointermove)=\"onPointerMove($event)\"\r\n (pointerup)=\"onPointerUp($event)\"\r\n (pointercancel)=\"onPointerUp($event)\">\r\n <div\r\n class=\"slider__wrapper\"\r\n [ngStyle]=\"{\r\n transform: state.translate,\r\n transition: draggable.isDraggingPointer ? 'none' : 'transform 0.3s ease',\r\n display: 'flex',\r\n 'flex-direction': state.vertical ? 'column' : 'row',\r\n 'justify-content': state.visibleSlides?.length < state.slidesPerView ? 'center' : 'flex-start',\r\n gap: (state.slidesPerView > 1 ? state.gap || 0 : 0) + 'px',\r\n }\">\r\n <div\r\n *ngFor=\"let slide of state.visibleSlides; let i = index\"\r\n class=\"slide\"\r\n [attr.data-index]=\"i\"\r\n [class.slide--current]=\"state.selectedSlide === i\"\r\n [style.flex]=\"\r\n !config.isThumbs\r\n ? '0 0 calc(' +\r\n 100 / state.slidesPerView +\r\n '% - ' +\r\n ((state.gap || 0) * (state.slidesPerView - 1)) / state.slidesPerView +\r\n 'px)'\r\n : '0 0 ' + thumbSize + 'px'\r\n \"\r\n [style.width]=\"config.isThumbs ? thumbSize + 'px' : null\"\r\n [style.height]=\"config.isThumbs ? thumbSize + 'px' : null\"\r\n (click)=\"engine.selectSlide(i)\">\r\n <ng-container\r\n *ngTemplateOutlet=\"slideTemplate ? slideTemplate : defaultSlideTemplate; context: { slide: slide, index: i }\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-container>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i7.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
197
197
  }
198
198
  i0.Ι΅Ι΅ngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SimpleSliderComponent, decorators: [{
199
199
  type: Component,
200
- args: [{ selector: "app-simple-slider", changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, standalone: true, imports: [CommonModule], providers: [SliderEngine, SliderStore, SliderDraggablePlugin, SliderPaginationPlugin, SliderNavigationPlugin, SliderAutoplayPlugin], template: "<ng-container *ngIf=\"state$ | async as state\">\r\n <div\r\n class=\"slider\"\r\n #sliderHost\r\n [class.slider-vertical]=\"state.vertical\"\r\n [class.slider-draggable]=\"state.isDragging\"\r\n [class.slider--main]=\"!config.isThumbs\"\r\n [class.slider--thumbs]=\"config.isThumbs\"\r\n *ngIf=\"state.visibleSlides?.length > 0 && state.isVisible\"\r\n (pointerdown)=\"onPointerDown($event)\"\r\n (pointermove)=\"onPointerMove($event)\"\r\n (pointerup)=\"onPointerUp($event)\"\r\n (pointercancel)=\"onPointerUp($event)\">\r\n <div\r\n class=\"slider__wrapper\"\r\n [ngStyle]=\"{\r\n transform: state.translate,\r\n transition: draggable.isDraggingPointer ? 'none' : 'transform 0.3s ease',\r\n display: 'flex',\r\n 'flex-direction': state.vertical ? 'column' : 'row',\r\n 'justify-content': state.visibleSlides?.length < state.slidesPerView ? 'center' : 'flex-start',\r\n gap: (state.slidesPerView > 1 ? state.gap || 0 : 0) + 'px',\r\n }\">\r\n <div\r\n *ngFor=\"let slide of state.visibleSlides; let i = index\"\r\n class=\"slide\"\r\n [attr.data-index]=\"i\"\r\n [class.slide--current]=\"state.selectedSlide === i\"\r\n [style.flex]=\"\r\n !config.isThumbs\r\n ? '0 0 calc(' +\r\n 100 / state.slidesPerView +\r\n '% - ' +\r\n ((state.gap || 0) * (state.slidesPerView - 1)) / state.slidesPerView +\r\n 'px)'\r\n : '0 0 ' + thumbSize + 'px'\r\n \"\r\n [style.width]=\"config.isThumbs ? thumbSize + 'px' : null\"\r\n [style.height]=\"config.isThumbs ? thumbSize + 'px' : null\"\r\n (click)=\"engine.selectSlide(i)\">\r\n <ng-container\r\n *ngTemplateOutlet=\"slideTemplate ? slideTemplate : defaultSlideTemplate; context: { slide: slide, index: i }\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-container>\r\n", styles: ["@charset \"UTF-8\";:host{display:block;position:relative}.slider-main-product{display:inline-flex;height:520px}.slider-main{width:100%;height:600px;justify-content:center;display:flex}@media (max-width: 577px){.slider-main{height:100%;display:block}}.slider--main{height:100%;overflow:hidden}.slider--main .slider__wrapper{display:flex;will-change:transform}.slider--main .slider__wrapper .slide{flex:0 0 100%}.slider--main .slider__wrapper .slide .slide-content,.slider--main .slider__wrapper .slide picture{position:relative;width:100%;height:100%;display:flex;align-items:center;justify-content:center}.slider--main .slider__wrapper .slide .slide-content .drag-handle,.slider--main .slider__wrapper .slide picture .drag-handle{width:100%;height:100%;cursor:grab;z-index:10;pointer-events:all}.slider--main .slider__wrapper .slide .slide-content img,.slider--main .slider__wrapper .slide picture img{max-width:100%;max-height:100%;object-fit:contain;display:block;transform-origin:center;transform:translateZ(0);pointer-events:none}.slider--thumbs{margin-top:24px;margin-bottom:36px;height:70px!important}.slider--thumbs .slider__wrapper{display:flex;gap:8px;will-change:transform;transform:translateZ(0)}.slider--thumbs .slide{flex:0 0 auto;pointer-events:auto}.slider--thumbs .slide .slide-content{width:54px;height:68px;display:flex;align-items:center;justify-content:center;border:1px solid #ebebeb;cursor:pointer}.slider--thumbs .slide .slide-content img{max-width:100%;max-height:100%;object-fit:contain;display:block;transform:scale(.9)}.slider--thumbs .slide .slide-content.slide--current{border-color:#212121}.slider{width:100%;height:100%;overflow:hidden;position:relative;touch-action:none;cursor:grab;-webkit-user-select:none;user-select:none;-webkit-user-drag:none;-webkit-tap-highlight-color:transparent}.slider.slider-can-drag{cursor:grab}.slider.slider-is-dragging{cursor:grabbing}.slider.slider-dragged{box-shadow:0 0 10px #0000001a}.slider.slider-drag-prevent-click{pointer-events:none}.slider .slider__wrapper{display:flex;transition:transform .3s cubic-bezier(.25,.46,.45,.84);will-change:transform;transform:none;width:auto;height:100%}.slider .slide{display:flex;align-items:center;justify-content:center;height:100%;overflow:hidden;flex-shrink:0;position:relative;transition:transform .3s cubic-bezier(.25,.46,.45,.84)}@media (min-width: 1441px){.slider--thumbs .slide{flex:0 0 20%}}@media (max-width: 1024px){.slider--thumbs .slide{flex:0 0 33.333%}}@media (max-width: 1023px){.slider--thumbs .slide{flex:0 0 50%}}.slider-arrow-next,.slider-arrow-prev{position:absolute;top:50%;transform:translateY(-50%);width:32px;height:32px;background:#fffc no-repeat center center;cursor:pointer;z-index:10}.slider-arrow-next.next,.slider-arrow-prev.next{right:10px}.slider-arrow-next.prev,.slider-arrow-prev.prev{left:10px}.thumbs-wrapper{position:relative}.thumb-nav{position:absolute;top:50%;transform:translateY(-50%);z-index:20;width:48px;height:48px;background:#ffffffe6 url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='4.51 0.01 10.99 19.97'%3E%3Cpath fill='%23000' d='m4.508 18.968 1.006 1.006 9.983-9.984L5.514.005 4.508 1.011l8.984 8.984-8.984 8.973Z'/%3E%3C/svg%3E\") no-repeat center center/11px 18px;font-size:36px;line-height:56px;opacity:0;pointer-events:none;transition:opacity .2s ease}.thumb-nav.activeArrow{opacity:1;pointer-events:all}.thumb-nav--left{left:-73px;transform:translateY(-50%) rotate(180deg)!important}.thumb-nav--right{right:-65px}.slider-pagination .thumb-dots-wrapper{display:flex;align-items:center;justify-content:center;gap:7px}.slider-pagination .thumb-dots-wrapper .thumb-dot{display:inline-block;width:4px;height:4px;margin:0 0 0 8px;border-radius:50%;background:#b3b3b3}.slider-pagination .thumb-dots-wrapper .thumb-dot.active,.slider-pagination .thumb-dots-wrapper .thumb-dot:hover{background:#212121;border:1px solid #212121}.slider-pagination .thumb-dots-wrapper .thumb-dot.hidden{opacity:0;pointer-events:none}.slider-container{position:relative;z-index:10}.slider-container .slider{position:relative;z-index:1}.slider-container .slider.slider-is-dragging{pointer-events:none}.slider-container .slider-nav{position:absolute;inset:0;pointer-events:none;z-index:20}.slider-container .slider-nav .nav-btn{pointer-events:auto;z-index:30;position:absolute;width:42px;height:42px;border-radius:2px;display:inline-flex;align-items:center;justify-content:center;border:0;cursor:pointer;background:transparent;font-size:32px;line-height:1;transition:transform .15s ease,opacity .15s ease}.slider-container .slider-nav .nav-btn:hover{transform:translateY(-1px);background:#0009}.slider-container .slider-nav .nav-btn.is-hidden{color:#a0a0a58d;opacity:.3;cursor:not-allowed;pointer-events:auto}.slider-container .slider-nav.nav--top-left .nav-btn--prev{top:-50px;left:-20px}.slider-container .slider-nav.nav--top-left .nav-btn--next{top:-50px;left:42px}.slider-container .slider-nav.nav--top-center .nav-btn--prev{top:-50px;left:50%;transform:translate(-50px)}.slider-container .slider-nav.nav--top-center .nav-btn--next{top:-50px;left:50%;transform:translate(10px)}.slider-container .slider-nav.nav--top-right .nav-btn--prev{top:-50px;right:42px}.slider-container .slider-nav.nav--top-right .nav-btn--next{top:-50px;right:-20px}.slider-container .slider-nav.nav--bottom-left .nav-btn--prev{bottom:30px;left:-20px}.slider-container .slider-nav.nav--bottom-left .nav-btn--next{bottom:30px;left:42px}.slider-container .slider-nav.nav--bottom-center .nav-btn--prev{bottom:30px;left:50%;transform:translate(-50px)}.slider-container .slider-nav.nav--bottom-center .nav-btn--next{bottom:30px;left:50%;transform:translate(10px)}.slider-container .slider-nav.nav--bottom-right .nav-btn--prev{bottom:30px;right:42px}.slider-container .slider-nav.nav--bottom-right .nav-btn--next{bottom:30px;right:-20px}.slider-container .slider-nav.nav--center-sides .nav-btn{background:#000000b3;color:#fff}.slider-container .slider-nav.nav--center-sides .nav-btn--prev{top:50%;left:-50px;transform:translateY(-50%)}.slider-container .slider-nav.nav--center-sides .nav-btn--next{top:50%;right:-50px;transform:translateY(-50%)}@media (max-width: 1024px){.slider-container .slider-nav .nav--top-left .nav-btn--prev,.slider-container .slider-nav .nav--top-center .nav-btn--prev,.slider-container .slider-nav .nav--top-right .nav-btn--prev,.slider-container .slider-nav .nav--bottom-left .nav-btn--prev,.slider-container .slider-nav .nav--bottom-center .nav-btn--prev,.slider-container .slider-nav .nav--bottom-right .nav-btn--prev,.slider-container .slider-nav .nav--center-sides .nav-btn--prev{left:clamp(8px,5%,40px);right:auto}.slider-container .slider-nav .nav--top-left .nav-btn--next,.slider-container .slider-nav .nav--top-center .nav-btn--next,.slider-container .slider-nav .nav--top-right .nav-btn--next,.slider-container .slider-nav .nav--bottom-left .nav-btn--next,.slider-container .slider-nav .nav--bottom-center .nav-btn--next,.slider-container .slider-nav .nav--bottom-right .nav-btn--next,.slider-container .slider-nav .nav--center-sides .nav-btn--next{right:clamp(8px,5%,20px);left:auto}}@media (max-width: 768px){.slider-container .slider-nav .nav-btn{width:36px;height:36px;font-size:24px}}@media (max-width: 480px){.slider-container .slider-nav .slider-container .slider-nav.nav--center-sides{pointer-events:auto}.slider-container .slider-nav .slider-container .slider-nav.nav--center-sides .nav-btn{width:32px;height:32px;font-size:20px;pointer-events:auto;z-index:20;background:#000000b3;color:#fff}.slider-container .slider-nav .slider-container .slider__wrapper{position:relative}.slider-container .slider-nav .slider-container .slider__wrapper .slide-content{pointer-events:auto}.slider-container .slider-nav .nav-btn{width:32px;height:32px;font-size:20px}.slider-container .slider-nav .nav-btn--prev{left:8px!important;right:auto!important}.slider-container .slider-nav .nav-btn--next{right:8px!important;left:auto!important}}\n"] }]
200
+ args: [{ selector: "app-simple-slider", changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, standalone: true, imports: [CommonModule], providers: [SliderEngine, SliderStore, SliderDraggablePlugin, SliderPaginationPlugin, SliderNavigationPlugin, SliderAutoplayPlugin], template: "<ng-container *ngIf=\"state$ | async as state\">\r\n <div\r\n class=\"slider\"\r\n #sliderHost\r\n [class.slider-vertical]=\"state.vertical\"\r\n [class.slider-draggable]=\"state.isDragging\"\r\n [class.slider--main]=\"!config.isThumbs\"\r\n [class.slider--thumbs]=\"config.isThumbs\"\r\n *ngIf=\"state.visibleSlides?.length > 0 && state.isVisible\"\r\n (pointerdown)=\"onPointerDown($event)\"\r\n (pointermove)=\"onPointerMove($event)\"\r\n (pointerup)=\"onPointerUp($event)\"\r\n (pointercancel)=\"onPointerUp($event)\">\r\n <div\r\n class=\"slider__wrapper\"\r\n [ngStyle]=\"{\r\n transform: state.translate,\r\n transition: draggable.isDraggingPointer ? 'none' : 'transform 0.3s ease',\r\n display: 'flex',\r\n 'flex-direction': state.vertical ? 'column' : 'row',\r\n 'justify-content': state.visibleSlides?.length < state.slidesPerView ? 'center' : 'flex-start',\r\n gap: (state.slidesPerView > 1 ? state.gap || 0 : 0) + 'px',\r\n }\">\r\n <div\r\n *ngFor=\"let slide of state.visibleSlides; let i = index\"\r\n class=\"slide\"\r\n [attr.data-index]=\"i\"\r\n [class.slide--current]=\"state.selectedSlide === i\"\r\n [style.flex]=\"\r\n !config.isThumbs\r\n ? '0 0 calc(' +\r\n 100 / state.slidesPerView +\r\n '% - ' +\r\n ((state.gap || 0) * (state.slidesPerView - 1)) / state.slidesPerView +\r\n 'px)'\r\n : '0 0 ' + thumbSize + 'px'\r\n \"\r\n [style.width]=\"config.isThumbs ? thumbSize + 'px' : null\"\r\n [style.height]=\"config.isThumbs ? thumbSize + 'px' : null\"\r\n (click)=\"engine.selectSlide(i)\">\r\n <ng-container\r\n *ngTemplateOutlet=\"slideTemplate ? slideTemplate : defaultSlideTemplate; context: { slide: slide, index: i }\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-container>\r\n" }]
201
201
  }], ctorParameters: () => [{ type: i1.SliderEngine }, { type: i2.SliderStore }, { type: i3.SliderDraggablePlugin }, { type: i4.SliderPaginationPlugin }, { type: i5.SliderNavigationPlugin }, { type: i6.SliderAutoplayPlugin }], propDecorators: { config: [{
202
202
  type: Input
203
203
  }], slideTemplate: [{
@@ -212,4 +212,4 @@ i0.Ι΅Ι΅ngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
212
212
  type: ViewChild,
213
213
  args: ["sliderHost", { static: false }]
214
214
  }] } });
215
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGxlLXNsaWRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZWRnZS1zbGlkZXIvc3JjL2xpYi9jb21wb25lbnQvc2ltcGxlLXNsaWRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZWRnZS1zbGlkZXIvc3JjL2xpYi9jb21wb25lbnQvc2ltcGxlLXNsaWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULHVCQUF1QixFQUd2QixLQUFLLEVBQ0wsWUFBWSxFQUNaLE1BQU0sRUFJTixTQUFTLEVBR1QsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBYyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXRELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMvRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDNUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDM0UsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDOUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDakYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFFakYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7Ozs7Ozs7QUFZL0MsTUFBTSxPQUFPLHFCQUFxQjtJQWtCdEI7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBdEJELE1BQU0sQ0FBZ0I7SUFDdEIsYUFBYSxDQUFvQjtJQUNqQyxrQkFBa0IsQ0FBb0I7SUFDdEMsa0JBQWtCLENBQW9CO0lBQ3JDLFdBQVcsR0FBRyxJQUFJLFlB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LGNBQ3pCLElBQUksV0FDUCxDQUFDLFlBQVksQ0FBQyxhQUNaLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxxQkFBcUIsRUFBRSxzQkFBc0IsRUFBRSxzQkFBc0IsRUFBRSxvQkFBb0IsQ0FBQzs0UEFHMUgsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDSSxXQUFXO3NCQUFwQixNQUFNO2dCQVVxQyxVQUFVO3NCQUFyRCxTQUFTO3VCQUFDLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBPbkluaXQsXHJcbiAgVGVtcGxhdGVSZWYsXHJcbiAgSW5wdXQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIE91dHB1dCxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPbkRlc3Ryb3ksXHJcbiAgVmlld0NoaWxkLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBTbGlkZXJWaWV3U3RhdGUgfSBmcm9tIFwiLi4vbW9kZWxzL3NsaWRlci1zdGF0ZS5tb2RlbFwiO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBTbGlkZXJDb25maWcgfSBmcm9tIFwiLi4vbW9kZWxzL3NsaWRlci1jb25maWcubW9kZWxcIjtcclxuaW1wb3J0IHsgU2xpZGVyRW5naW5lIH0gZnJvbSBcIi4uL2VuZ2luZS9zbGlkZXItZW5naW5lLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgU2xpZGVyU3RvcmUgfSBmcm9tIFwiLi4vc3RvcmUvc2xpZGVyLXN0b3JlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgU2xpZGVyQXV0b3BsYXlQbHVnaW4gfSBmcm9tIFwiLi4vcGx1Z2lucy9hdXRvcGxheS9hdXRvcGxheS5wbHVnaW5cIjtcclxuaW1wb3J0IHsgU2xpZGVyRHJhZ2dhYmxlUGx1Z2luIH0gZnJvbSBcIi4uL3BsdWdpbnMvZHJhZ2dhYmxlL2RyYWdnYWJsZS5wbHVnaW5cIjtcclxuaW1wb3J0IHsgU2xpZGVyTmF2aWdhdGlvblBsdWdpbiB9IGZyb20gXCIuLi9wbHVnaW5zL25hdmlnYXRpb24vbmF2aWdhdGlvbi5wbHVnaW5cIjtcclxuaW1wb3J0IHsgU2xpZGVyUGFnaW5hdGlvblBsdWdpbiB9IGZyb20gXCIuLi9wbHVnaW5zL3BhZ2luYXRpb24vcGFnaW5hdGlvbi5wbHVnaW5cIjtcclxuaW1wb3J0IHsgUGFnZXIsIFNsaWRlclBsdWdpbiB9IGZyb20gXCIuLi9wbHVnaW5zL3NsaWRlci1wbHVnaW5cIjtcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwiYXBwLXNpbXBsZS1zbGlkZXJcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL3NpbXBsZS1zbGlkZXIuY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybDogXCIuL3NpbXBsZS1zbGlkZXIuY29tcG9uZW50LnNjc3NcIixcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXHJcbiAgcHJvdmlkZXJzOiBbU2xpZGVyRW5naW5lLCBTbGlkZXJTdG9yZSwgU2xpZGVyRHJhZ2dhYmxlUGx1Z2luLCBTbGlkZXJQYWdpbmF0aW9uUGx1Z2luLCBTbGlkZXJOYXZpZ2F0aW9uUGx1Z2luLCBTbGlkZXJBdXRvcGxheVBsdWdpbl0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTaW1wbGVTbGlkZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcclxuICBASW5wdXQoKSBjb25maWchOiBTbGlkZXJDb25maWc7XHJcbiAgQElucHV0KCkgc2xpZGVUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQElucHV0KCkgbmF2aWdhdGlvblRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcclxuICBASW5wdXQoKSBwYWdpbmF0aW9uVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBPdXRwdXQoKSBzbGlkZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xyXG5cclxuICBwcml2YXRlIGlzRHJhZ2dpbmdQb2ludGVyID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBkcmFnU3RhcnRYID0gMDtcclxuICBwcml2YXRlIGRyYWdTdGFydFkgPSAwO1xyXG4gIHByaXZhdGUgbGFzdEluZGV4ID0gLTE7XHJcbiAgcHJpdmF0ZSBsYXN0U2xpZGVzUmVmOiBhbnlbXSB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICBzdGF0ZSQhOiBPYnNlcnZhYmxlPFNsaWRlclZpZXdTdGF0ZT47XHJcbiAgQFZpZXdDaGlsZChcInNsaWRlckhvc3RcIiwgeyBzdGF0aWM6IGZhbHNlIH0pIHNsaWRlckhvc3Q/OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGVuZ2luZTogU2xpZGVyRW5naW5lLFxyXG4gICAgcHJpdmF0ZSBzdG9yZTogU2xpZGVyU3RvcmUsXHJcbiAgICBwcml2YXRlIGRyYWdnYWJsZTogU2xpZGVyRHJhZ2dhYmxlUGx1Z2luLFxyXG4gICAgcHJpdmF0ZSBwYWdpbmF0aW9uOiBTbGlkZXJQYWdpbmF0aW9uUGx1Z2luLFxyXG4gICAgcHJpdmF0ZSBuYXZpZ2F0aW9uOiBTbGlkZXJOYXZpZ2F0aW9uUGx1Z2luLFxyXG4gICAgcHJpdmF0ZSBhdXRvcGxheTogU2xpZGVyQXV0b3BsYXlQbHVnaW4sXHJcbiAgKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuc3RhdGUkID0gdGhpcy5zdG9yZS52aWV3JDtcclxuXHJcbiAgICB0aGlzLnN0YXRlJC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChzdGF0ZSkgPT4ge1xyXG4gICAgICBpZiAoc3RhdGUuY3VycmVudFNsaWRlICE9PSB0aGlzLmxhc3RJbmRleCkge1xyXG4gICAgICAgIHRoaXMubGFzdEluZGV4ID0gc3RhdGUuY3VycmVudFNsaWRlO1xyXG4gICAgICAgIHRoaXMuc2xpZGVDaGFuZ2UuZW1pdChzdGF0ZS5jdXJyZW50U2xpZGUpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMubGFzdFNsaWRlc1JlZiA9IHRoaXMuY29uZmlnPy5zbGlkZXMgPz8gbnVsbDtcclxuICAgIHRoaXMucmVzb2x2ZVBsdWdpbnModGhpcy5jb25maWcpO1xyXG4gIH1cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICBpZiAodGhpcy5zbGlkZXJIb3N0Py5uYXRpdmVFbGVtZW50KSB7XHJcbiAgICAgIHRoaXMuZW5naW5lLmF0dGFjaENvbnRhaW5lcih0aGlzLnNsaWRlckhvc3QubmF0aXZlRWxlbWVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICBpZiAoIWNoYW5nZXNbXCJjb25maWdcIl0gfHwgIXRoaXMuY29uZmlnKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgbmV3U2xpZGVzUmVmID0gdGhpcy5jb25maWcuc2xpZGVzID8/IG51bGw7XHJcblxyXG4gICAgaWYgKG5ld1NsaWRlc1JlZiAhPT0gdGhpcy5sYXN0U2xpZGVzUmVmKSB7XHJcbiAgICAgIHRoaXMubGFzdFNsaWRlc1JlZiA9IG5ld1NsaWRlc1JlZjtcclxuICAgICAgdGhpcy5lbmdpbmUuZGVzdHJveSgpO1xyXG4gICAgICB0aGlzLnJlc29sdmVQbHVnaW5zKHRoaXMuY29uZmlnKTtcclxuICAgIH1cclxuICB9XHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLmRlc3Ryb3lTbGlkZXIoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnb1RvKGluZGV4OiBudW1iZXIpIHtcclxuICAgIHRoaXMuZW5naW5lLnNlbGVjdFNsaWRlKGluZGV4KTsgLy8gYWRkIHRoaXMgbGluZVxyXG4gICAgLy90aGlzLnNsaWRlQ2hhbmdlLmVtaXQoaW5kZXgpO1xyXG4gIH1cclxuXHJcbiAgZGVzdHJveVNsaWRlcigpIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gICAgdGhpcy5lbmdpbmUuZGVzdHJveSgpO1xyXG4gIH0gLy8gZGVzdHJveXMgcGx1Z2lucyBhbmQgY2xlYXJzIHN0b3JlXHJcblxyXG4gIG9uTmV4dCgpIHtcclxuICAgIHRoaXMuZW5naW5lLm5leHQoKTtcclxuICB9XHJcbiAgb25QcmV2aW91cygpIHtcclxuICAgIHRoaXMuZW5naW5lLnByZXZpb3VzKCk7XHJcbiAgfVxyXG4gIHNlbGVjdFNsaWRlKGluZGV4OiBudW1iZXIpIHtcclxuICAgIHRoaXMuZW5naW5lLnNlbGVjdFNsaWRlKGluZGV4KTtcclxuICB9XHJcbiAgb25SZWNhbGN1bGF0ZSgpIHtcclxuICAgIHRoaXMuZW5naW5lLnJlY2FsY3VsYXRlKCk7XHJcbiAgfVxyXG4gIC8vIE5hdmlnYXRpb25cclxuICAvKiogRXhwb3NlIG5hdmlnYXRpb24gb2JzZXJ2YWJsZXMgc2FmZWx5ICovXHJcbiAgZ2V0IGNhblByZXYkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4gfCBudWxsIHtcclxuICAgIGlmICghdGhpcy5uYXZpZ2F0aW9uKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcIk5hdmlnYXRpb24gcGx1Z2luIGlzIG5vdCBlbmFibGVkLlwiKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5uYXZpZ2F0aW9uLmNhblByZXYkO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNhbk5leHQkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4gfCBudWxsIHtcclxuICAgIGlmICghdGhpcy5uYXZpZ2F0aW9uKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcIk5hdmlnYXRpb24gcGx1Z2luIGlzIG5vdCBlbmFibGVkLlwiKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5uYXZpZ2F0aW9uLmNhbk5leHQkO1xyXG4gIH1cclxuXHJcbiAgLyoqIEV4cG9zZSBuZXh0L3ByZXYgbWV0aG9kcyAqL1xyXG4gIHB1YmxpYyBuZXh0KCkge1xyXG4gICAgdGhpcy5uYXZpZ2F0aW9uPy5uZXh0KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcHJldigpIHtcclxuICAgIHRoaXMubmF2aWdhdGlvbj8ucHJldigpO1xyXG4gIH1cclxuXHJcbiAgLyoqIEV4cG9zZSBwYWdpbmF0aW9uIG9ic2VydmFibGUgKi9cclxuICBnZXQgcGFnZXIkKCk6IE9ic2VydmFibGU8UGFnZXIgfCBudWxsPiB8IG51bGwge1xyXG4gICAgaWYgKCF0aGlzLnBhZ2luYXRpb24pIHtcclxuICAgICAgY29uc29sZS53YXJuKFwiUGFnaW5hdGlvbiBwbHVnaW4gaXMgbm90IGVuYWJsZWQgZm9yIHRoaXMgc2xpZGVyLlwiKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5wYWdpbmF0aW9uLnBhZ2VyJDtcclxuICB9XHJcblxyXG4gIC8qKiBFeHBvc2UgYSBnb1RvU2xpZGUgbWV0aG9kICovXHJcbiAgcHVibGljIGdvVG9TbGlkZShpbmRleDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnBhZ2luYXRpb24uZ29Ub1NsaWRlKGluZGV4KTtcclxuICB9XHJcblxyXG4gIC8vIEhhbmRsZSBQb2ludGVyc1xyXG5cclxuICBvblBvaW50ZXJEb3duKGV2ZW50OiBQb2ludGVyRXZlbnQpIHtcclxuICAgIC8vIE9ubHkgc3RhcnQgZHJhZyBpZiBub3QgY2xpY2tpbmcgYSBuYXYgYnV0dG9uXHJcbiAgICBpZiAoKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCkuY2xvc2VzdChcIi5uYXYtYnRuXCIpKSB7XHJcbiAgICAgIHJldHVybjsgLy8gaWdub3JlXHJcbiAgICB9XHJcbiAgICB0aGlzLmRyYWdTdGFydFggPSBldmVudC5jbGllbnRYO1xyXG4gICAgdGhpcy5kcmFnU3RhcnRZID0gZXZlbnQuY2xpZW50WTtcclxuICAgIHRoaXMuaXNEcmFnZ2luZ1BvaW50ZXIgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBEbyBub3QgY2FwdHVyZSB5ZXQ7IHdhaXQgdW50aWwgbW92ZW1lbnQgZXhjZWVkcyB0aHJlc2hvbGRcclxuICAgIHRoaXMuZW5naW5lLmhhbmRsZURyYWdTdGFydChldmVudCk7XHJcbiAgfVxyXG5cclxuICBvblBvaW50ZXJNb3ZlKGV2ZW50OiBQb2ludGVyRXZlbnQpIHtcclxuICAgIGNvbnN0IGR4ID0gTWF0aC5hYnMoZXZlbnQuY2xpZW50WCAtIHRoaXMuZHJhZ1N0YXJ0WCk7XHJcbiAgICBjb25zdCBkeSA9IE1hdGguYWJzKGV2ZW50LmNsaWVudFkgLSB0aGlzLmRyYWdTdGFydFkpO1xyXG5cclxuICAgIGlmICghdGhpcy5pc0RyYWdnaW5nUG9pbnRlciAmJiAoZHggPiA1IHx8IGR5ID4gNSkpIHtcclxuICAgICAgdGhpcy5pc0RyYWdnaW5nUG9pbnRlciA9IHRydWU7XHJcblxyXG4gICAgICAvLyBOb3cgc3RhcnQgY2FwdHVyaW5nIHBvaW50ZXIgc28gZHJhZ2dpbmcgd29ya3Mgb3V0c2lkZSB0aGUgc2xpZGVyIGJvdW5kc1xyXG4gICAgICAoZXZlbnQuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudCkuc2V0UG9pbnRlckNhcHR1cmUoZXZlbnQucG9pbnRlcklkKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc0RyYWdnaW5nUG9pbnRlcikge1xyXG4gICAgICB0aGlzLmVuZ2luZS5oYW5kbGVEcmFnTW92ZShldmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblBvaW50ZXJVcChldmVudDogUG9pbnRlckV2ZW50KSB7XHJcbiAgICBpZiAoIWV2ZW50KSByZXR1cm47XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzRHJhZ2dpbmdQb2ludGVyKSB7XHJcbiAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcclxuXHJcbiAgICAgIC8vIE9ubHkgc2VsZWN0IHRoZSBzbGlkZSBpZiBjbGljayBpcyBub3Qgb24gYW4gaW50ZXJhY3RpdmUgY2hpbGRcclxuICAgICAgY29uc3Qgc2xpZGVFbCA9IHRhcmdldC5jbG9zZXN0KFwiLnNsaWRlXCIpO1xyXG4gICAgICBpZiAoc2xpZGVFbCAmJiAhdGFyZ2V0LmNsb3Nlc3QoXCJidXR0b24sIHZpZGVvLCBhXCIpKSB7XHJcbiAgICAgICAgY29uc3QgaW5kZXhBdHRyID0gc2xpZGVFbC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWluZGV4XCIpO1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gaW5kZXhBdHRyID8gcGFyc2VJbnQoaW5kZXhBdHRyLCAxMCkgOiBudWxsO1xyXG4gICAgICAgIGlmIChpbmRleCAhPT0gbnVsbCkgdGhpcy5lbmdpbmUuc2VsZWN0U2xpZGUoaW5kZXgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5lbmdpbmUuaGFuZGxlRHJhZ0VuZCgpO1xyXG4gICAgdGhpcy5pc0RyYWdnaW5nUG9pbnRlciA9IGZhbHNlO1xyXG5cclxuICAgIC8vIFJlbGVhc2UgcG9pbnRlciBjYXB0dXJlIGlmIGl0IHdhcyBjYXB0dXJlZFxyXG4gICAgdHJ5IHtcclxuICAgICAgKGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQpLnJlbGVhc2VQb2ludGVyQ2FwdHVyZShldmVudC5wb2ludGVySWQpO1xyXG4gICAgfSBjYXRjaCB7fVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXNvbHZlUGx1Z2lucyhjb25maWc6IFNsaWRlckNvbmZpZykge1xyXG4gICAgY29uc3QgcnVudGltZVBsdWdpbnM6IFNsaWRlclBsdWdpbltdID0gW107XHJcblxyXG4gICAgY29uc3QgY2ZnID0gY29uZmlnLnBsdWdpbnMgPz8ge307IC8vIDwtLSBzYWZlIGZhbGxiYWNrXHJcblxyXG4gICAgaWYgKGNmZy5kcmFnZ2FibGUpIHJ1bnRpbWVQbHVnaW5zLnB1c2godGhpcy5kcmFnZ2FibGUpO1xyXG4gICAgaWYgKGNmZy5wYWdpbmF0aW9uKSBydW50aW1lUGx1Z2lucy5wdXNoKHRoaXMucGFnaW5hdGlvbik7XHJcbiAgICBpZiAoY2ZnLm5hdmlnYXRpb24pIHJ1bnRpbWVQbHVnaW5zLnB1c2godGhpcy5uYXZpZ2F0aW9uKTtcclxuXHJcbiAgICBpZiAoY2ZnLmF1dG9wbGF5KSB7XHJcbiAgICAgIHRoaXMuYXV0b3BsYXkuc2V0Q29uZmlnKGNmZy5hdXRvcGxheSk7XHJcbiAgICAgIHJ1bnRpbWVQbHVnaW5zLnB1c2godGhpcy5hdXRvcGxheSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5lbmdpbmUuaW5pdCh7IC4uLmNvbmZpZywgcGx1Z2luczogdW5kZWZpbmVkIH0sIHJ1bnRpbWVQbHVnaW5zKTtcclxuXHJcbiAgICBpZiAoY2ZnLm5hdmlnYXRpb24pIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLm5hdmlnYXRpb24/LnVwZGF0ZUFycm93cz8uKCkpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwic3RhdGUkIHwgYXN5bmMgYXMgc3RhdGVcIj5cclxuICA8ZGl2XHJcbiAgICBjbGFzcz1cInNsaWRlclwiXHJcbiAgICAjc2xpZGVySG9zdFxyXG4gICAgW2NsYXNzLnNsaWRlci12ZXJ0aWNhbF09XCJzdGF0ZS52ZXJ0aWNhbFwiXHJcbiAgICBbY2xhc3Muc2xpZGVyLWRyYWdnYWJsZV09XCJzdGF0ZS5pc0RyYWdnaW5nXCJcclxuICAgIFtjbGFzcy5zbGlkZXItLW1haW5dPVwiIWNvbmZpZy5pc1RodW1ic1wiXHJcbiAgICBbY2xhc3Muc2xpZGVyLS10aHVtYnNdPVwiY29uZmlnLmlzVGh1bWJzXCJcclxuICAgICpuZ0lmPVwic3RhdGUudmlzaWJsZVNsaWRlcz8ubGVuZ3RoID4gMCAmJiBzdGF0ZS5pc1Zpc2libGVcIlxyXG4gICAgKHBvaW50ZXJkb3duKT1cIm9uUG9pbnRlckRvd24oJGV2ZW50KVwiXHJcbiAgICAocG9pbnRlcm1vdmUpPVwib25Qb2ludGVyTW92ZSgkZXZlbnQpXCJcclxuICAgIChwb2ludGVydXApPVwib25Qb2ludGVyVXAoJGV2ZW50KVwiXHJcbiAgICAocG9pbnRlcmNhbmNlbCk9XCJvblBvaW50ZXJVcCgkZXZlbnQpXCI+XHJcbiAgICA8ZGl2XHJcbiAgICAgIGNsYXNzPVwic2xpZGVyX193cmFwcGVyXCJcclxuICAgICAgW25nU3R5bGVdPVwie1xyXG4gICAgICAgIHRyYW5zZm9ybTogc3RhdGUudHJhbnNsYXRlLFxyXG4gICAgICAgIHRyYW5zaXRpb246IGRyYWdnYWJsZS5pc0RyYWdnaW5nUG9pbnRlciA/ICdub25lJyA6ICd0cmFuc2Zvcm0gMC4zcyBlYXNlJyxcclxuICAgICAgICBkaXNwbGF5OiAnZmxleCcsXHJcbiAgICAgICAgJ2ZsZXgtZGlyZWN0aW9uJzogc3RhdGUudmVydGljYWwgPyAnY29sdW1uJyA6ICdyb3cnLFxyXG4gICAgICAgICdqdXN0aWZ5LWNvbnRlbnQnOiBzdGF0ZS52aXNpYmxlU2xpZGVzPy5sZW5ndGggPCBzdGF0ZS5zbGlkZXNQZXJWaWV3ID8gJ2NlbnRlcicgOiAnZmxleC1zdGFydCcsXHJcbiAgICAgICAgZ2FwOiAoc3RhdGUuc2xpZGVzUGVyVmlldyA+IDEgPyBzdGF0ZS5nYXAgfHwgMCA6IDApICsgJ3B4JyxcclxuICAgICAgfVwiPlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgKm5nRm9yPVwibGV0IHNsaWRlIG9mIHN0YXRlLnZpc2libGVTbGlkZXM7IGxldCBpID0gaW5kZXhcIlxyXG4gICAgICAgIGNsYXNzPVwic2xpZGVcIlxyXG4gICAgICAgIFthdHRyLmRhdGEtaW5kZXhdPVwiaVwiXHJcbiAgICAgICAgW2NsYXNzLnNsaWRlLS1jdXJyZW50XT1cInN0YXRlLnNlbGVjdGVkU2xpZGUgPT09IGlcIlxyXG4gICAgICAgIFtzdHlsZS5mbGV4XT1cIlxyXG4gICAgICAgICAgIWNvbmZpZy5pc1RodW1ic1xyXG4gICAgICAgICAgICA/ICcwIDAgY2FsYygnICtcclxuICAgICAgICAgICAgICAxMDAgLyBzdGF0ZS5zbGlkZXNQZXJWaWV3ICtcclxuICAgICAgICAgICAgICAnJSAtICcgK1xyXG4gICAgICAgICAgICAgICgoc3RhdGUuZ2FwIHx8IDApICogKHN0YXRlLnNsaWRlc1BlclZpZXcgLSAxKSkgLyBzdGF0ZS5zbGlkZXNQZXJWaWV3ICtcclxuICAgICAgICAgICAgICAncHgpJ1xyXG4gICAgICAgICAgICA6ICcwIDAgJyArIHRodW1iU2l6ZSArICdweCdcclxuICAgICAgICBcIlxyXG4gICAgICAgIFtzdHlsZS53aWR0aF09XCJjb25maWcuaXNUaHVtYnMgPyB0aHVtYlNpemUgKyAncHgnIDogbnVsbFwiXHJcbiAgICAgICAgW3N0eWxlLmhlaWdodF09XCJjb25maWcuaXNUaHVtYnMgPyB0aHVtYlNpemUgKyAncHgnIDogbnVsbFwiXHJcbiAgICAgICAgKGNsaWNrKT1cImVuZ2luZS5zZWxlY3RTbGlkZShpKVwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwic2xpZGVUZW1wbGF0ZSA/IHNsaWRlVGVtcGxhdGUgOiBkZWZhdWx0U2xpZGVUZW1wbGF0ZTsgY29udGV4dDogeyBzbGlkZTogc2xpZGUsIGluZGV4OiBpIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uZy1jb250YWluZXI+XHJcbiJdfQ==
215
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGxlLXNsaWRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZWRnZS1zbGlkZXIvc3JjL2xpYi9jb21wb25lbnQvc2ltcGxlLXNsaWRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZWRnZS1zbGlkZXIvc3JjL2xpYi9jb21wb25lbnQvc2ltcGxlLXNsaWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULHVCQUF1QixFQUd2QixLQUFLLEVBQ0wsWUFBWSxFQUNaLE1BQU0sRUFJTixTQUFTLEVBR1QsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBYyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXRELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMvRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDNUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDM0UsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDOUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDakYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFFakYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7Ozs7Ozs7QUFZL0MsTUFBTSxPQUFPLHFCQUFxQjtJQWtCdEI7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBdEJELE1BQU0sQ0FBZ0I7SUFDdEIsYUFBYSxDQUFvQjtJQUNqQyxrQkFBa0IsQ0FBb0I7SUFDdEMsa0JBQWtCLENBQW9CO0lBQ3JDLFdBQVcsR0FBRyxJQUFJLFlB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Y0FDekIsSUFBSSxXQUNQLENBQUMsWUFBWSxDQUFDLGFBQ1osQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLHFCQUFxQixFQUFFLHNCQUFzQixFQUFFLHNCQUFzQixFQUFFLG9CQUFvQixDQUFDOzRQQUcxSCxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNJLFdBQVc7c0JBQXBCLE1BQU07Z0JBVXFDLFVBQVU7c0JBQXJELFNBQVM7dUJBQUMsWUFBWSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIE9uSW5pdCxcclxuICBUZW1wbGF0ZVJlZixcclxuICBJbnB1dCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgT3V0cHV0LFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9uRGVzdHJveSxcclxuICBWaWV3Q2hpbGQsXHJcbiAgRWxlbWVudFJlZixcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IFNsaWRlclZpZXdTdGF0ZSB9IGZyb20gXCIuLi9tb2RlbHMvc2xpZGVyLXN0YXRlLm1vZGVsXCI7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IFNsaWRlckNvbmZpZyB9IGZyb20gXCIuLi9tb2RlbHMvc2xpZGVyLWNvbmZpZy5tb2RlbFwiO1xyXG5pbXBvcnQgeyBTbGlkZXJFbmdpbmUgfSBmcm9tIFwiLi4vZW5naW5lL3NsaWRlci1lbmdpbmUuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBTbGlkZXJTdG9yZSB9IGZyb20gXCIuLi9zdG9yZS9zbGlkZXItc3RvcmUuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBTbGlkZXJBdXRvcGxheVBsdWdpbiB9IGZyb20gXCIuLi9wbHVnaW5zL2F1dG9wbGF5L2F1dG9wbGF5LnBsdWdpblwiO1xyXG5pbXBvcnQgeyBTbGlkZXJEcmFnZ2FibGVQbHVnaW4gfSBmcm9tIFwiLi4vcGx1Z2lucy9kcmFnZ2FibGUvZHJhZ2dhYmxlLnBsdWdpblwiO1xyXG5pbXBvcnQgeyBTbGlkZXJOYXZpZ2F0aW9uUGx1Z2luIH0gZnJvbSBcIi4uL3BsdWdpbnMvbmF2aWdhdGlvbi9uYXZpZ2F0aW9uLnBsdWdpblwiO1xyXG5pbXBvcnQgeyBTbGlkZXJQYWdpbmF0aW9uUGx1Z2luIH0gZnJvbSBcIi4uL3BsdWdpbnMvcGFnaW5hdGlvbi9wYWdpbmF0aW9uLnBsdWdpblwiO1xyXG5pbXBvcnQgeyBQYWdlciwgU2xpZGVyUGx1Z2luIH0gZnJvbSBcIi4uL3BsdWdpbnMvc2xpZGVyLXBsdWdpblwiO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJhcHAtc2ltcGxlLXNsaWRlclwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vc2ltcGxlLXNsaWRlci5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsOiBcIi4vc2ltcGxlLXNsaWRlci5jb21wb25lbnQuc2Nzc1wiLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcclxuICBwcm92aWRlcnM6IFtTbGlkZXJFbmdpbmUsIFNsaWRlclN0b3JlLCBTbGlkZXJEcmFnZ2FibGVQbHVnaW4sIFNsaWRlclBhZ2luYXRpb25QbHVnaW4sIFNsaWRlck5hdmlnYXRpb25QbHVnaW4sIFNsaWRlckF1dG9wbGF5UGx1Z2luXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNpbXBsZVNsaWRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG4gIEBJbnB1dCgpIGNvbmZpZyE6IFNsaWRlckNvbmZpZztcclxuICBASW5wdXQoKSBzbGlkZVRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcclxuICBASW5wdXQoKSBuYXZpZ2F0aW9uVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBJbnB1dCgpIHBhZ2luYXRpb25UZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQE91dHB1dCgpIHNsaWRlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XHJcblxyXG4gIHByaXZhdGUgaXNEcmFnZ2luZ1BvaW50ZXIgPSBmYWxzZTtcclxuICBwcml2YXRlIGRyYWdTdGFydFggPSAwO1xyXG4gIHByaXZhdGUgZHJhZ1N0YXJ0WSA9IDA7XHJcbiAgcHJpdmF0ZSBsYXN0SW5kZXggPSAtMTtcclxuICBwcml2YXRlIGxhc3RTbGlkZXNSZWY6IGFueVtdIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIHN0YXRlJCE6IE9ic2VydmFibGU8U2xpZGVyVmlld1N0YXRlPjtcclxuICBAVmlld0NoaWxkKFwic2xpZGVySG9zdFwiLCB7IHN0YXRpYzogZmFsc2UgfSkgc2xpZGVySG9zdD86IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZW5naW5lOiBTbGlkZXJFbmdpbmUsXHJcbiAgICBwcml2YXRlIHN0b3JlOiBTbGlkZXJTdG9yZSxcclxuICAgIHByaXZhdGUgZHJhZ2dhYmxlOiBTbGlkZXJEcmFnZ2FibGVQbHVnaW4sXHJcbiAgICBwcml2YXRlIHBhZ2luYXRpb246IFNsaWRlclBhZ2luYXRpb25QbHVnaW4sXHJcbiAgICBwcml2YXRlIG5hdmlnYXRpb246IFNsaWRlck5hdmlnYXRpb25QbHVnaW4sXHJcbiAgICBwcml2YXRlIGF1dG9wbGF5OiBTbGlkZXJBdXRvcGxheVBsdWdpbixcclxuICApIHt9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5zdGF0ZSQgPSB0aGlzLnN0b3JlLnZpZXckO1xyXG5cclxuICAgIHRoaXMuc3RhdGUkLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHN0YXRlKSA9PiB7XHJcbiAgICAgIGlmIChzdGF0ZS5jdXJyZW50U2xpZGUgIT09IHRoaXMubGFzdEluZGV4KSB7XHJcbiAgICAgICAgdGhpcy5sYXN0SW5kZXggPSBzdGF0ZS5jdXJyZW50U2xpZGU7XHJcbiAgICAgICAgdGhpcy5zbGlkZUNoYW5nZS5lbWl0KHN0YXRlLmN1cnJlbnRTbGlkZSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5sYXN0U2xpZGVzUmVmID0gdGhpcy5jb25maWc/LnNsaWRlcyA/PyBudWxsO1xyXG4gICAgdGhpcy5yZXNvbHZlUGx1Z2lucyh0aGlzLmNvbmZpZyk7XHJcbiAgfVxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIGlmICh0aGlzLnNsaWRlckhvc3Q/Lm5hdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgdGhpcy5lbmdpbmUuYXR0YWNoQ29udGFpbmVyKHRoaXMuc2xpZGVySG9zdC5uYXRpdmVFbGVtZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGlmICghY2hhbmdlc1tcImNvbmZpZ1wiXSB8fCAhdGhpcy5jb25maWcpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBuZXdTbGlkZXNSZWYgPSB0aGlzLmNvbmZpZy5zbGlkZXMgPz8gbnVsbDtcclxuXHJcbiAgICBpZiAobmV3U2xpZGVzUmVmICE9PSB0aGlzLmxhc3RTbGlkZXNSZWYpIHtcclxuICAgICAgdGhpcy5sYXN0U2xpZGVzUmVmID0gbmV3U2xpZGVzUmVmO1xyXG4gICAgICB0aGlzLmVuZ2luZS5kZXN0cm95KCk7XHJcbiAgICAgIHRoaXMucmVzb2x2ZVBsdWdpbnModGhpcy5jb25maWcpO1xyXG4gICAgfVxyXG4gIH1cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuZGVzdHJveVNsaWRlcigpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdvVG8oaW5kZXg6IG51bWJlcikge1xyXG4gICAgdGhpcy5lbmdpbmUuc2VsZWN0U2xpZGUoaW5kZXgpOyAvLyBhZGQgdGhpcyBsaW5lXHJcbiAgICAvL3RoaXMuc2xpZGVDaGFuZ2UuZW1pdChpbmRleCk7XHJcbiAgfVxyXG5cclxuICBkZXN0cm95U2xpZGVyKCkge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgICB0aGlzLmVuZ2luZS5kZXN0cm95KCk7XHJcbiAgfSAvLyBkZXN0cm95cyBwbHVnaW5zIGFuZCBjbGVhcnMgc3RvcmVcclxuXHJcbiAgb25OZXh0KCkge1xyXG4gICAgdGhpcy5lbmdpbmUubmV4dCgpO1xyXG4gIH1cclxuICBvblByZXZpb3VzKCkge1xyXG4gICAgdGhpcy5lbmdpbmUucHJldmlvdXMoKTtcclxuICB9XHJcbiAgc2VsZWN0U2xpZGUoaW5kZXg6IG51bWJlcikge1xyXG4gICAgdGhpcy5lbmdpbmUuc2VsZWN0U2xpZGUoaW5kZXgpO1xyXG4gIH1cclxuICBvblJlY2FsY3VsYXRlKCkge1xyXG4gICAgdGhpcy5lbmdpbmUucmVjYWxjdWxhdGUoKTtcclxuICB9XHJcbiAgLy8gTmF2aWdhdGlvblxyXG4gIC8qKiBFeHBvc2UgbmF2aWdhdGlvbiBvYnNlcnZhYmxlcyBzYWZlbHkgKi9cclxuICBnZXQgY2FuUHJldiQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB8IG51bGwge1xyXG4gICAgaWYgKCF0aGlzLm5hdmlnYXRpb24pIHtcclxuICAgICAgY29uc29sZS53YXJuKFwiTmF2aWdhdGlvbiBwbHVnaW4gaXMgbm90IGVuYWJsZWQuXCIpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLm5hdmlnYXRpb24uY2FuUHJldiQ7XHJcbiAgfVxyXG5cclxuICBnZXQgY2FuTmV4dCQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB8IG51bGwge1xyXG4gICAgaWYgKCF0aGlzLm5hdmlnYXRpb24pIHtcclxuICAgICAgY29uc29sZS53YXJuKFwiTmF2aWdhdGlvbiBwbHVnaW4gaXMgbm90IGVuYWJsZWQuXCIpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLm5hdmlnYXRpb24uY2FuTmV4dCQ7XHJcbiAgfVxyXG5cclxuICAvKiogRXhwb3NlIG5leHQvcHJldiBtZXRob2RzICovXHJcbiAgcHVibGljIG5leHQoKSB7XHJcbiAgICB0aGlzLm5hdmlnYXRpb24/Lm5leHQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBwcmV2KCkge1xyXG4gICAgdGhpcy5uYXZpZ2F0aW9uPy5wcmV2KCk7XHJcbiAgfVxyXG5cclxuICAvKiogRXhwb3NlIHBhZ2luYXRpb24gb2JzZXJ2YWJsZSAqL1xyXG4gIGdldCBwYWdlciQoKTogT2JzZXJ2YWJsZTxQYWdlciB8IG51bGw+IHwgbnVsbCB7XHJcbiAgICBpZiAoIXRoaXMucGFnaW5hdGlvbikge1xyXG4gICAgICBjb25zb2xlLndhcm4oXCJQYWdpbmF0aW9uIHBsdWdpbiBpcyBub3QgZW5hYmxlZCBmb3IgdGhpcyBzbGlkZXIuXCIpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLnBhZ2luYXRpb24ucGFnZXIkO1xyXG4gIH1cclxuXHJcbiAgLyoqIEV4cG9zZSBhIGdvVG9TbGlkZSBtZXRob2QgKi9cclxuICBwdWJsaWMgZ29Ub1NsaWRlKGluZGV4OiBudW1iZXIpIHtcclxuICAgIHRoaXMucGFnaW5hdGlvbi5nb1RvU2xpZGUoaW5kZXgpO1xyXG4gIH1cclxuXHJcbiAgLy8gSGFuZGxlIFBvaW50ZXJzXHJcblxyXG4gIG9uUG9pbnRlckRvd24oZXZlbnQ6IFBvaW50ZXJFdmVudCkge1xyXG4gICAgLy8gT25seSBzdGFydCBkcmFnIGlmIG5vdCBjbGlja2luZyBhIG5hdiBidXR0b25cclxuICAgIGlmICgoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5jbG9zZXN0KFwiLm5hdi1idG5cIikpIHtcclxuICAgICAgcmV0dXJuOyAvLyBpZ25vcmVcclxuICAgIH1cclxuICAgIHRoaXMuZHJhZ1N0YXJ0WCA9IGV2ZW50LmNsaWVudFg7XHJcbiAgICB0aGlzLmRyYWdTdGFydFkgPSBldmVudC5jbGllbnRZO1xyXG4gICAgdGhpcy5pc0RyYWdnaW5nUG9pbnRlciA9IGZhbHNlO1xyXG5cclxuICAgIC8vIERvIG5vdCBjYXB0dXJlIHlldDsgd2FpdCB1bnRpbCBtb3ZlbWVudCBleGNlZWRzIHRocmVzaG9sZFxyXG4gICAgdGhpcy5lbmdpbmUuaGFuZGxlRHJhZ1N0YXJ0KGV2ZW50KTtcclxuICB9XHJcblxyXG4gIG9uUG9pbnRlck1vdmUoZXZlbnQ6IFBvaW50ZXJFdmVudCkge1xyXG4gICAgY29uc3QgZHggPSBNYXRoLmFicyhldmVudC5jbGllbnRYIC0gdGhpcy5kcmFnU3RhcnRYKTtcclxuICAgIGNvbnN0IGR5ID0gTWF0aC5hYnMoZXZlbnQuY2xpZW50WSAtIHRoaXMuZHJhZ1N0YXJ0WSk7XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzRHJhZ2dpbmdQb2ludGVyICYmIChkeCA+IDUgfHwgZHkgPiA1KSkge1xyXG4gICAgICB0aGlzLmlzRHJhZ2dpbmdQb2ludGVyID0gdHJ1ZTtcclxuXHJcbiAgICAgIC8vIE5vdyBzdGFydCBjYXB0dXJpbmcgcG9pbnRlciBzbyBkcmFnZ2luZyB3b3JrcyBvdXRzaWRlIHRoZSBzbGlkZXIgYm91bmRzXHJcbiAgICAgIChldmVudC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5zZXRQb2ludGVyQ2FwdHVyZShldmVudC5wb2ludGVySWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzRHJhZ2dpbmdQb2ludGVyKSB7XHJcbiAgICAgIHRoaXMuZW5naW5lLmhhbmRsZURyYWdNb3ZlKGV2ZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uUG9pbnRlclVwKGV2ZW50OiBQb2ludGVyRXZlbnQpIHtcclxuICAgIGlmICghZXZlbnQpIHJldHVybjtcclxuXHJcbiAgICBpZiAoIXRoaXMuaXNEcmFnZ2luZ1BvaW50ZXIpIHtcclxuICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xyXG5cclxuICAgICAgLy8gT25seSBzZWxlY3QgdGhlIHNsaWRlIGlmIGNsaWNrIGlzIG5vdCBvbiBhbiBpbnRlcmFjdGl2ZSBjaGlsZFxyXG4gICAgICBjb25zdCBzbGlkZUVsID0gdGFyZ2V0LmNsb3Nlc3QoXCIuc2xpZGVcIik7XHJcbiAgICAgIGlmIChzbGlkZUVsICYmICF0YXJnZXQuY2xvc2VzdChcImJ1dHRvbiwgdmlkZW8sIGFcIikpIHtcclxuICAgICAgICBjb25zdCBpbmRleEF0dHIgPSBzbGlkZUVsLmdldEF0dHJpYnV0ZShcImRhdGEtaW5kZXhcIik7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSBpbmRleEF0dHIgPyBwYXJzZUludChpbmRleEF0dHIsIDEwKSA6IG51bGw7XHJcbiAgICAgICAgaWYgKGluZGV4ICE9PSBudWxsKSB0aGlzLmVuZ2luZS5zZWxlY3RTbGlkZShpbmRleCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmVuZ2luZS5oYW5kbGVEcmFnRW5kKCk7XHJcbiAgICB0aGlzLmlzRHJhZ2dpbmdQb2ludGVyID0gZmFsc2U7XHJcblxyXG4gICAgLy8gUmVsZWFzZSBwb2ludGVyIGNhcHR1cmUgaWYgaXQgd2FzIGNhcHR1cmVkXHJcbiAgICB0cnkge1xyXG4gICAgICAoZXZlbnQuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudCkucmVsZWFzZVBvaW50ZXJDYXB0dXJlKGV2ZW50LnBvaW50ZXJJZCk7XHJcbiAgICB9IGNhdGNoIHt9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlc29sdmVQbHVnaW5zKGNvbmZpZzogU2xpZGVyQ29uZmlnKSB7XHJcbiAgICBjb25zdCBydW50aW1lUGx1Z2luczogU2xpZGVyUGx1Z2luW10gPSBbXTtcclxuXHJcbiAgICBjb25zdCBjZmcgPSBjb25maWcucGx1Z2lucyA/PyB7fTsgLy8gPC0tIHNhZmUgZmFsbGJhY2tcclxuXHJcbiAgICBpZiAoY2ZnLmRyYWdnYWJsZSkgcnVudGltZVBsdWdpbnMucHVzaCh0aGlzLmRyYWdnYWJsZSk7XHJcbiAgICBpZiAoY2ZnLnBhZ2luYXRpb24pIHJ1bnRpbWVQbHVnaW5zLnB1c2godGhpcy5wYWdpbmF0aW9uKTtcclxuICAgIGlmIChjZmcubmF2aWdhdGlvbikgcnVudGltZVBsdWdpbnMucHVzaCh0aGlzLm5hdmlnYXRpb24pO1xyXG5cclxuICAgIGlmIChjZmcuYXV0b3BsYXkpIHtcclxuICAgICAgdGhpcy5hdXRvcGxheS5zZXRDb25maWcoY2ZnLmF1dG9wbGF5KTtcclxuICAgICAgcnVudGltZVBsdWdpbnMucHVzaCh0aGlzLmF1dG9wbGF5KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmVuZ2luZS5pbml0KHsgLi4uY29uZmlnLCBwbHVnaW5zOiB1bmRlZmluZWQgfSwgcnVudGltZVBsdWdpbnMpO1xyXG5cclxuICAgIGlmIChjZmcubmF2aWdhdGlvbikge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMubmF2aWdhdGlvbj8udXBkYXRlQXJyb3dzPy4oKSk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJzdGF0ZSQgfCBhc3luYyBhcyBzdGF0ZVwiPlxyXG4gIDxkaXZcclxuICAgIGNsYXNzPVwic2xpZGVyXCJcclxuICAgICNzbGlkZXJIb3N0XHJcbiAgICBbY2xhc3Muc2xpZGVyLXZlcnRpY2FsXT1cInN0YXRlLnZlcnRpY2FsXCJcclxuICAgIFtjbGFzcy5zbGlkZXItZHJhZ2dhYmxlXT1cInN0YXRlLmlzRHJhZ2dpbmdcIlxyXG4gICAgW2NsYXNzLnNsaWRlci0tbWFpbl09XCIhY29uZmlnLmlzVGh1bWJzXCJcclxuICAgIFtjbGFzcy5zbGlkZXItLXRodW1ic109XCJjb25maWcuaXNUaHVtYnNcIlxyXG4gICAgKm5nSWY9XCJzdGF0ZS52aXNpYmxlU2xpZGVzPy5sZW5ndGggPiAwICYmIHN0YXRlLmlzVmlzaWJsZVwiXHJcbiAgICAocG9pbnRlcmRvd24pPVwib25Qb2ludGVyRG93bigkZXZlbnQpXCJcclxuICAgIChwb2ludGVybW92ZSk9XCJvblBvaW50ZXJNb3ZlKCRldmVudClcIlxyXG4gICAgKHBvaW50ZXJ1cCk9XCJvblBvaW50ZXJVcCgkZXZlbnQpXCJcclxuICAgIChwb2ludGVyY2FuY2VsKT1cIm9uUG9pbnRlclVwKCRldmVudClcIj5cclxuICAgIDxkaXZcclxuICAgICAgY2xhc3M9XCJzbGlkZXJfX3dyYXBwZXJcIlxyXG4gICAgICBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgdHJhbnNmb3JtOiBzdGF0ZS50cmFuc2xhdGUsXHJcbiAgICAgICAgdHJhbnNpdGlvbjogZHJhZ2dhYmxlLmlzRHJhZ2dpbmdQb2ludGVyID8gJ25vbmUnIDogJ3RyYW5zZm9ybSAwLjNzIGVhc2UnLFxyXG4gICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcclxuICAgICAgICAnZmxleC1kaXJlY3Rpb24nOiBzdGF0ZS52ZXJ0aWNhbCA/ICdjb2x1bW4nIDogJ3JvdycsXHJcbiAgICAgICAgJ2p1c3RpZnktY29udGVudCc6IHN0YXRlLnZpc2libGVTbGlkZXM/Lmxlbmd0aCA8IHN0YXRlLnNsaWRlc1BlclZpZXcgPyAnY2VudGVyJyA6ICdmbGV4LXN0YXJ0JyxcclxuICAgICAgICBnYXA6IChzdGF0ZS5zbGlkZXNQZXJWaWV3ID4gMSA/IHN0YXRlLmdhcCB8fCAwIDogMCkgKyAncHgnLFxyXG4gICAgICB9XCI+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICAqbmdGb3I9XCJsZXQgc2xpZGUgb2Ygc3RhdGUudmlzaWJsZVNsaWRlczsgbGV0IGkgPSBpbmRleFwiXHJcbiAgICAgICAgY2xhc3M9XCJzbGlkZVwiXHJcbiAgICAgICAgW2F0dHIuZGF0YS1pbmRleF09XCJpXCJcclxuICAgICAgICBbY2xhc3Muc2xpZGUtLWN1cnJlbnRdPVwic3RhdGUuc2VsZWN0ZWRTbGlkZSA9PT0gaVwiXHJcbiAgICAgICAgW3N0eWxlLmZsZXhdPVwiXHJcbiAgICAgICAgICAhY29uZmlnLmlzVGh1bWJzXHJcbiAgICAgICAgICAgID8gJzAgMCBjYWxjKCcgK1xyXG4gICAgICAgICAgICAgIDEwMCAvIHN0YXRlLnNsaWRlc1BlclZpZXcgK1xyXG4gICAgICAgICAgICAgICclIC0gJyArXHJcbiAgICAgICAgICAgICAgKChzdGF0ZS5nYXAgfHwgMCkgKiAoc3RhdGUuc2xpZGVzUGVyVmlldyAtIDEpKSAvIHN0YXRlLnNsaWRlc1BlclZpZXcgK1xyXG4gICAgICAgICAgICAgICdweCknXHJcbiAgICAgICAgICAgIDogJzAgMCAnICsgdGh1bWJTaXplICsgJ3B4J1xyXG4gICAgICAgIFwiXHJcbiAgICAgICAgW3N0eWxlLndpZHRoXT1cImNvbmZpZy5pc1RodW1icyA/IHRodW1iU2l6ZSArICdweCcgOiBudWxsXCJcclxuICAgICAgICBbc3R5bGUuaGVpZ2h0XT1cImNvbmZpZy5pc1RodW1icyA/IHRodW1iU2l6ZSArICdweCcgOiBudWxsXCJcclxuICAgICAgICAoY2xpY2spPVwiZW5naW5lLnNlbGVjdFNsaWRlKGkpXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzbGlkZVRlbXBsYXRlID8gc2xpZGVUZW1wbGF0ZSA6IGRlZmF1bHRTbGlkZVRlbXBsYXRlOyBjb250ZXh0OiB7IHNsaWRlOiBzbGlkZSwgaW5kZXg6IGkgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L25nLWNvbnRhaW5lcj5cclxuIl19
@@ -765,11 +765,11 @@ class SimpleSliderComponent {
765
765
  }
766
766
  }
767
767
  static Ι΅fac = i0.Ι΅Ι΅ngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SimpleSliderComponent, deps: [{ token: SliderEngine }, { token: SliderStore }, { token: SliderDraggablePlugin }, { token: SliderPaginationPlugin }, { token: SliderNavigationPlugin }, { token: SliderAutoplayPlugin }], target: i0.Ι΅Ι΅FactoryTarget.Component });
768
- static Ι΅cmp = i0.Ι΅Ι΅ngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: SimpleSliderComponent, isStandalone: true, selector: "app-simple-slider", inputs: { config: "config", slideTemplate: "slideTemplate", navigationTemplate: "navigationTemplate", paginationTemplate: "paginationTemplate" }, outputs: { slideChange: "slideChange" }, providers: [SliderEngine, SliderStore, SliderDraggablePlugin, SliderPaginationPlugin, SliderNavigationPlugin, SliderAutoplayPlugin], viewQueries: [{ propertyName: "sliderHost", first: true, predicate: ["sliderHost"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"state$ | async as state\">\r\n <div\r\n class=\"slider\"\r\n #sliderHost\r\n [class.slider-vertical]=\"state.vertical\"\r\n [class.slider-draggable]=\"state.isDragging\"\r\n [class.slider--main]=\"!config.isThumbs\"\r\n [class.slider--thumbs]=\"config.isThumbs\"\r\n *ngIf=\"state.visibleSlides?.length > 0 && state.isVisible\"\r\n (pointerdown)=\"onPointerDown($event)\"\r\n (pointermove)=\"onPointerMove($event)\"\r\n (pointerup)=\"onPointerUp($event)\"\r\n (pointercancel)=\"onPointerUp($event)\">\r\n <div\r\n class=\"slider__wrapper\"\r\n [ngStyle]=\"{\r\n transform: state.translate,\r\n transition: draggable.isDraggingPointer ? 'none' : 'transform 0.3s ease',\r\n display: 'flex',\r\n 'flex-direction': state.vertical ? 'column' : 'row',\r\n 'justify-content': state.visibleSlides?.length < state.slidesPerView ? 'center' : 'flex-start',\r\n gap: (state.slidesPerView > 1 ? state.gap || 0 : 0) + 'px',\r\n }\">\r\n <div\r\n *ngFor=\"let slide of state.visibleSlides; let i = index\"\r\n class=\"slide\"\r\n [attr.data-index]=\"i\"\r\n [class.slide--current]=\"state.selectedSlide === i\"\r\n [style.flex]=\"\r\n !config.isThumbs\r\n ? '0 0 calc(' +\r\n 100 / state.slidesPerView +\r\n '% - ' +\r\n ((state.gap || 0) * (state.slidesPerView - 1)) / state.slidesPerView +\r\n 'px)'\r\n : '0 0 ' + thumbSize + 'px'\r\n \"\r\n [style.width]=\"config.isThumbs ? thumbSize + 'px' : null\"\r\n [style.height]=\"config.isThumbs ? thumbSize + 'px' : null\"\r\n (click)=\"engine.selectSlide(i)\">\r\n <ng-container\r\n *ngTemplateOutlet=\"slideTemplate ? slideTemplate : defaultSlideTemplate; context: { slide: slide, index: i }\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-container>\r\n", styles: ["@charset \"UTF-8\";:host{display:block;position:relative}.slider-main-product{display:inline-flex;height:520px}.slider-main{width:100%;height:600px;justify-content:center;display:flex}@media (max-width: 577px){.slider-main{height:100%;display:block}}.slider--main{height:100%;overflow:hidden}.slider--main .slider__wrapper{display:flex;will-change:transform}.slider--main .slider__wrapper .slide{flex:0 0 100%}.slider--main .slider__wrapper .slide .slide-content,.slider--main .slider__wrapper .slide picture{position:relative;width:100%;height:100%;display:flex;align-items:center;justify-content:center}.slider--main .slider__wrapper .slide .slide-content .drag-handle,.slider--main .slider__wrapper .slide picture .drag-handle{width:100%;height:100%;cursor:grab;z-index:10;pointer-events:all}.slider--main .slider__wrapper .slide .slide-content img,.slider--main .slider__wrapper .slide picture img{max-width:100%;max-height:100%;object-fit:contain;display:block;transform-origin:center;transform:translateZ(0);pointer-events:none}.slider--thumbs{margin-top:24px;margin-bottom:36px;height:70px!important}.slider--thumbs .slider__wrapper{display:flex;gap:8px;will-change:transform;transform:translateZ(0)}.slider--thumbs .slide{flex:0 0 auto;pointer-events:auto}.slider--thumbs .slide .slide-content{width:54px;height:68px;display:flex;align-items:center;justify-content:center;border:1px solid #ebebeb;cursor:pointer}.slider--thumbs .slide .slide-content img{max-width:100%;max-height:100%;object-fit:contain;display:block;transform:scale(.9)}.slider--thumbs .slide .slide-content.slide--current{border-color:#212121}.slider{width:100%;height:100%;overflow:hidden;position:relative;touch-action:none;cursor:grab;-webkit-user-select:none;user-select:none;-webkit-user-drag:none;-webkit-tap-highlight-color:transparent}.slider.slider-can-drag{cursor:grab}.slider.slider-is-dragging{cursor:grabbing}.slider.slider-dragged{box-shadow:0 0 10px #0000001a}.slider.slider-drag-prevent-click{pointer-events:none}.slider .slider__wrapper{display:flex;transition:transform .3s cubic-bezier(.25,.46,.45,.84);will-change:transform;transform:none;width:auto;height:100%}.slider .slide{display:flex;align-items:center;justify-content:center;height:100%;overflow:hidden;flex-shrink:0;position:relative;transition:transform .3s cubic-bezier(.25,.46,.45,.84)}@media (min-width: 1441px){.slider--thumbs .slide{flex:0 0 20%}}@media (max-width: 1024px){.slider--thumbs .slide{flex:0 0 33.333%}}@media (max-width: 1023px){.slider--thumbs .slide{flex:0 0 50%}}.slider-arrow-next,.slider-arrow-prev{position:absolute;top:50%;transform:translateY(-50%);width:32px;height:32px;background:#fffc no-repeat center center;cursor:pointer;z-index:10}.slider-arrow-next.next,.slider-arrow-prev.next{right:10px}.slider-arrow-next.prev,.slider-arrow-prev.prev{left:10px}.thumbs-wrapper{position:relative}.thumb-nav{position:absolute;top:50%;transform:translateY(-50%);z-index:20;width:48px;height:48px;background:#ffffffe6 url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='4.51 0.01 10.99 19.97'%3E%3Cpath fill='%23000' d='m4.508 18.968 1.006 1.006 9.983-9.984L5.514.005 4.508 1.011l8.984 8.984-8.984 8.973Z'/%3E%3C/svg%3E\") no-repeat center center/11px 18px;font-size:36px;line-height:56px;opacity:0;pointer-events:none;transition:opacity .2s ease}.thumb-nav.activeArrow{opacity:1;pointer-events:all}.thumb-nav--left{left:-73px;transform:translateY(-50%) rotate(180deg)!important}.thumb-nav--right{right:-65px}.slider-pagination .thumb-dots-wrapper{display:flex;align-items:center;justify-content:center;gap:7px}.slider-pagination .thumb-dots-wrapper .thumb-dot{display:inline-block;width:4px;height:4px;margin:0 0 0 8px;border-radius:50%;background:#b3b3b3}.slider-pagination .thumb-dots-wrapper .thumb-dot.active,.slider-pagination .thumb-dots-wrapper .thumb-dot:hover{background:#212121;border:1px solid #212121}.slider-pagination .thumb-dots-wrapper .thumb-dot.hidden{opacity:0;pointer-events:none}.slider-container{position:relative;z-index:10}.slider-container .slider{position:relative;z-index:1}.slider-container .slider.slider-is-dragging{pointer-events:none}.slider-container .slider-nav{position:absolute;inset:0;pointer-events:none;z-index:20}.slider-container .slider-nav .nav-btn{pointer-events:auto;z-index:30;position:absolute;width:42px;height:42px;border-radius:2px;display:inline-flex;align-items:center;justify-content:center;border:0;cursor:pointer;background:transparent;font-size:32px;line-height:1;transition:transform .15s ease,opacity .15s ease}.slider-container .slider-nav .nav-btn:hover{transform:translateY(-1px);background:#0009}.slider-container .slider-nav .nav-btn.is-hidden{color:#a0a0a58d;opacity:.3;cursor:not-allowed;pointer-events:auto}.slider-container .slider-nav.nav--top-left .nav-btn--prev{top:-50px;left:-20px}.slider-container .slider-nav.nav--top-left .nav-btn--next{top:-50px;left:42px}.slider-container .slider-nav.nav--top-center .nav-btn--prev{top:-50px;left:50%;transform:translate(-50px)}.slider-container .slider-nav.nav--top-center .nav-btn--next{top:-50px;left:50%;transform:translate(10px)}.slider-container .slider-nav.nav--top-right .nav-btn--prev{top:-50px;right:42px}.slider-container .slider-nav.nav--top-right .nav-btn--next{top:-50px;right:-20px}.slider-container .slider-nav.nav--bottom-left .nav-btn--prev{bottom:30px;left:-20px}.slider-container .slider-nav.nav--bottom-left .nav-btn--next{bottom:30px;left:42px}.slider-container .slider-nav.nav--bottom-center .nav-btn--prev{bottom:30px;left:50%;transform:translate(-50px)}.slider-container .slider-nav.nav--bottom-center .nav-btn--next{bottom:30px;left:50%;transform:translate(10px)}.slider-container .slider-nav.nav--bottom-right .nav-btn--prev{bottom:30px;right:42px}.slider-container .slider-nav.nav--bottom-right .nav-btn--next{bottom:30px;right:-20px}.slider-container .slider-nav.nav--center-sides .nav-btn{background:#000000b3;color:#fff}.slider-container .slider-nav.nav--center-sides .nav-btn--prev{top:50%;left:-50px;transform:translateY(-50%)}.slider-container .slider-nav.nav--center-sides .nav-btn--next{top:50%;right:-50px;transform:translateY(-50%)}@media (max-width: 1024px){.slider-container .slider-nav .nav--top-left .nav-btn--prev,.slider-container .slider-nav .nav--top-center .nav-btn--prev,.slider-container .slider-nav .nav--top-right .nav-btn--prev,.slider-container .slider-nav .nav--bottom-left .nav-btn--prev,.slider-container .slider-nav .nav--bottom-center .nav-btn--prev,.slider-container .slider-nav .nav--bottom-right .nav-btn--prev,.slider-container .slider-nav .nav--center-sides .nav-btn--prev{left:clamp(8px,5%,40px);right:auto}.slider-container .slider-nav .nav--top-left .nav-btn--next,.slider-container .slider-nav .nav--top-center .nav-btn--next,.slider-container .slider-nav .nav--top-right .nav-btn--next,.slider-container .slider-nav .nav--bottom-left .nav-btn--next,.slider-container .slider-nav .nav--bottom-center .nav-btn--next,.slider-container .slider-nav .nav--bottom-right .nav-btn--next,.slider-container .slider-nav .nav--center-sides .nav-btn--next{right:clamp(8px,5%,20px);left:auto}}@media (max-width: 768px){.slider-container .slider-nav .nav-btn{width:36px;height:36px;font-size:24px}}@media (max-width: 480px){.slider-container .slider-nav .slider-container .slider-nav.nav--center-sides{pointer-events:auto}.slider-container .slider-nav .slider-container .slider-nav.nav--center-sides .nav-btn{width:32px;height:32px;font-size:20px;pointer-events:auto;z-index:20;background:#000000b3;color:#fff}.slider-container .slider-nav .slider-container .slider__wrapper{position:relative}.slider-container .slider-nav .slider-container .slider__wrapper .slide-content{pointer-events:auto}.slider-container .slider-nav .nav-btn{width:32px;height:32px;font-size:20px}.slider-container .slider-nav .nav-btn--prev{left:8px!important;right:auto!important}.slider-container .slider-nav .nav-btn--next{right:8px!important;left:auto!important}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i7.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
768
+ static Ι΅cmp = i0.Ι΅Ι΅ngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: SimpleSliderComponent, isStandalone: true, selector: "app-simple-slider", inputs: { config: "config", slideTemplate: "slideTemplate", navigationTemplate: "navigationTemplate", paginationTemplate: "paginationTemplate" }, outputs: { slideChange: "slideChange" }, providers: [SliderEngine, SliderStore, SliderDraggablePlugin, SliderPaginationPlugin, SliderNavigationPlugin, SliderAutoplayPlugin], viewQueries: [{ propertyName: "sliderHost", first: true, predicate: ["sliderHost"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"state$ | async as state\">\r\n <div\r\n class=\"slider\"\r\n #sliderHost\r\n [class.slider-vertical]=\"state.vertical\"\r\n [class.slider-draggable]=\"state.isDragging\"\r\n [class.slider--main]=\"!config.isThumbs\"\r\n [class.slider--thumbs]=\"config.isThumbs\"\r\n *ngIf=\"state.visibleSlides?.length > 0 && state.isVisible\"\r\n (pointerdown)=\"onPointerDown($event)\"\r\n (pointermove)=\"onPointerMove($event)\"\r\n (pointerup)=\"onPointerUp($event)\"\r\n (pointercancel)=\"onPointerUp($event)\">\r\n <div\r\n class=\"slider__wrapper\"\r\n [ngStyle]=\"{\r\n transform: state.translate,\r\n transition: draggable.isDraggingPointer ? 'none' : 'transform 0.3s ease',\r\n display: 'flex',\r\n 'flex-direction': state.vertical ? 'column' : 'row',\r\n 'justify-content': state.visibleSlides?.length < state.slidesPerView ? 'center' : 'flex-start',\r\n gap: (state.slidesPerView > 1 ? state.gap || 0 : 0) + 'px',\r\n }\">\r\n <div\r\n *ngFor=\"let slide of state.visibleSlides; let i = index\"\r\n class=\"slide\"\r\n [attr.data-index]=\"i\"\r\n [class.slide--current]=\"state.selectedSlide === i\"\r\n [style.flex]=\"\r\n !config.isThumbs\r\n ? '0 0 calc(' +\r\n 100 / state.slidesPerView +\r\n '% - ' +\r\n ((state.gap || 0) * (state.slidesPerView - 1)) / state.slidesPerView +\r\n 'px)'\r\n : '0 0 ' + thumbSize + 'px'\r\n \"\r\n [style.width]=\"config.isThumbs ? thumbSize + 'px' : null\"\r\n [style.height]=\"config.isThumbs ? thumbSize + 'px' : null\"\r\n (click)=\"engine.selectSlide(i)\">\r\n <ng-container\r\n *ngTemplateOutlet=\"slideTemplate ? slideTemplate : defaultSlideTemplate; context: { slide: slide, index: i }\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-container>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i7.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
769
769
  }
770
770
  i0.Ι΅Ι΅ngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SimpleSliderComponent, decorators: [{
771
771
  type: Component,
772
- args: [{ selector: "app-simple-slider", changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, standalone: true, imports: [CommonModule], providers: [SliderEngine, SliderStore, SliderDraggablePlugin, SliderPaginationPlugin, SliderNavigationPlugin, SliderAutoplayPlugin], template: "<ng-container *ngIf=\"state$ | async as state\">\r\n <div\r\n class=\"slider\"\r\n #sliderHost\r\n [class.slider-vertical]=\"state.vertical\"\r\n [class.slider-draggable]=\"state.isDragging\"\r\n [class.slider--main]=\"!config.isThumbs\"\r\n [class.slider--thumbs]=\"config.isThumbs\"\r\n *ngIf=\"state.visibleSlides?.length > 0 && state.isVisible\"\r\n (pointerdown)=\"onPointerDown($event)\"\r\n (pointermove)=\"onPointerMove($event)\"\r\n (pointerup)=\"onPointerUp($event)\"\r\n (pointercancel)=\"onPointerUp($event)\">\r\n <div\r\n class=\"slider__wrapper\"\r\n [ngStyle]=\"{\r\n transform: state.translate,\r\n transition: draggable.isDraggingPointer ? 'none' : 'transform 0.3s ease',\r\n display: 'flex',\r\n 'flex-direction': state.vertical ? 'column' : 'row',\r\n 'justify-content': state.visibleSlides?.length < state.slidesPerView ? 'center' : 'flex-start',\r\n gap: (state.slidesPerView > 1 ? state.gap || 0 : 0) + 'px',\r\n }\">\r\n <div\r\n *ngFor=\"let slide of state.visibleSlides; let i = index\"\r\n class=\"slide\"\r\n [attr.data-index]=\"i\"\r\n [class.slide--current]=\"state.selectedSlide === i\"\r\n [style.flex]=\"\r\n !config.isThumbs\r\n ? '0 0 calc(' +\r\n 100 / state.slidesPerView +\r\n '% - ' +\r\n ((state.gap || 0) * (state.slidesPerView - 1)) / state.slidesPerView +\r\n 'px)'\r\n : '0 0 ' + thumbSize + 'px'\r\n \"\r\n [style.width]=\"config.isThumbs ? thumbSize + 'px' : null\"\r\n [style.height]=\"config.isThumbs ? thumbSize + 'px' : null\"\r\n (click)=\"engine.selectSlide(i)\">\r\n <ng-container\r\n *ngTemplateOutlet=\"slideTemplate ? slideTemplate : defaultSlideTemplate; context: { slide: slide, index: i }\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-container>\r\n", styles: ["@charset \"UTF-8\";:host{display:block;position:relative}.slider-main-product{display:inline-flex;height:520px}.slider-main{width:100%;height:600px;justify-content:center;display:flex}@media (max-width: 577px){.slider-main{height:100%;display:block}}.slider--main{height:100%;overflow:hidden}.slider--main .slider__wrapper{display:flex;will-change:transform}.slider--main .slider__wrapper .slide{flex:0 0 100%}.slider--main .slider__wrapper .slide .slide-content,.slider--main .slider__wrapper .slide picture{position:relative;width:100%;height:100%;display:flex;align-items:center;justify-content:center}.slider--main .slider__wrapper .slide .slide-content .drag-handle,.slider--main .slider__wrapper .slide picture .drag-handle{width:100%;height:100%;cursor:grab;z-index:10;pointer-events:all}.slider--main .slider__wrapper .slide .slide-content img,.slider--main .slider__wrapper .slide picture img{max-width:100%;max-height:100%;object-fit:contain;display:block;transform-origin:center;transform:translateZ(0);pointer-events:none}.slider--thumbs{margin-top:24px;margin-bottom:36px;height:70px!important}.slider--thumbs .slider__wrapper{display:flex;gap:8px;will-change:transform;transform:translateZ(0)}.slider--thumbs .slide{flex:0 0 auto;pointer-events:auto}.slider--thumbs .slide .slide-content{width:54px;height:68px;display:flex;align-items:center;justify-content:center;border:1px solid #ebebeb;cursor:pointer}.slider--thumbs .slide .slide-content img{max-width:100%;max-height:100%;object-fit:contain;display:block;transform:scale(.9)}.slider--thumbs .slide .slide-content.slide--current{border-color:#212121}.slider{width:100%;height:100%;overflow:hidden;position:relative;touch-action:none;cursor:grab;-webkit-user-select:none;user-select:none;-webkit-user-drag:none;-webkit-tap-highlight-color:transparent}.slider.slider-can-drag{cursor:grab}.slider.slider-is-dragging{cursor:grabbing}.slider.slider-dragged{box-shadow:0 0 10px #0000001a}.slider.slider-drag-prevent-click{pointer-events:none}.slider .slider__wrapper{display:flex;transition:transform .3s cubic-bezier(.25,.46,.45,.84);will-change:transform;transform:none;width:auto;height:100%}.slider .slide{display:flex;align-items:center;justify-content:center;height:100%;overflow:hidden;flex-shrink:0;position:relative;transition:transform .3s cubic-bezier(.25,.46,.45,.84)}@media (min-width: 1441px){.slider--thumbs .slide{flex:0 0 20%}}@media (max-width: 1024px){.slider--thumbs .slide{flex:0 0 33.333%}}@media (max-width: 1023px){.slider--thumbs .slide{flex:0 0 50%}}.slider-arrow-next,.slider-arrow-prev{position:absolute;top:50%;transform:translateY(-50%);width:32px;height:32px;background:#fffc no-repeat center center;cursor:pointer;z-index:10}.slider-arrow-next.next,.slider-arrow-prev.next{right:10px}.slider-arrow-next.prev,.slider-arrow-prev.prev{left:10px}.thumbs-wrapper{position:relative}.thumb-nav{position:absolute;top:50%;transform:translateY(-50%);z-index:20;width:48px;height:48px;background:#ffffffe6 url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='4.51 0.01 10.99 19.97'%3E%3Cpath fill='%23000' d='m4.508 18.968 1.006 1.006 9.983-9.984L5.514.005 4.508 1.011l8.984 8.984-8.984 8.973Z'/%3E%3C/svg%3E\") no-repeat center center/11px 18px;font-size:36px;line-height:56px;opacity:0;pointer-events:none;transition:opacity .2s ease}.thumb-nav.activeArrow{opacity:1;pointer-events:all}.thumb-nav--left{left:-73px;transform:translateY(-50%) rotate(180deg)!important}.thumb-nav--right{right:-65px}.slider-pagination .thumb-dots-wrapper{display:flex;align-items:center;justify-content:center;gap:7px}.slider-pagination .thumb-dots-wrapper .thumb-dot{display:inline-block;width:4px;height:4px;margin:0 0 0 8px;border-radius:50%;background:#b3b3b3}.slider-pagination .thumb-dots-wrapper .thumb-dot.active,.slider-pagination .thumb-dots-wrapper .thumb-dot:hover{background:#212121;border:1px solid #212121}.slider-pagination .thumb-dots-wrapper .thumb-dot.hidden{opacity:0;pointer-events:none}.slider-container{position:relative;z-index:10}.slider-container .slider{position:relative;z-index:1}.slider-container .slider.slider-is-dragging{pointer-events:none}.slider-container .slider-nav{position:absolute;inset:0;pointer-events:none;z-index:20}.slider-container .slider-nav .nav-btn{pointer-events:auto;z-index:30;position:absolute;width:42px;height:42px;border-radius:2px;display:inline-flex;align-items:center;justify-content:center;border:0;cursor:pointer;background:transparent;font-size:32px;line-height:1;transition:transform .15s ease,opacity .15s ease}.slider-container .slider-nav .nav-btn:hover{transform:translateY(-1px);background:#0009}.slider-container .slider-nav .nav-btn.is-hidden{color:#a0a0a58d;opacity:.3;cursor:not-allowed;pointer-events:auto}.slider-container .slider-nav.nav--top-left .nav-btn--prev{top:-50px;left:-20px}.slider-container .slider-nav.nav--top-left .nav-btn--next{top:-50px;left:42px}.slider-container .slider-nav.nav--top-center .nav-btn--prev{top:-50px;left:50%;transform:translate(-50px)}.slider-container .slider-nav.nav--top-center .nav-btn--next{top:-50px;left:50%;transform:translate(10px)}.slider-container .slider-nav.nav--top-right .nav-btn--prev{top:-50px;right:42px}.slider-container .slider-nav.nav--top-right .nav-btn--next{top:-50px;right:-20px}.slider-container .slider-nav.nav--bottom-left .nav-btn--prev{bottom:30px;left:-20px}.slider-container .slider-nav.nav--bottom-left .nav-btn--next{bottom:30px;left:42px}.slider-container .slider-nav.nav--bottom-center .nav-btn--prev{bottom:30px;left:50%;transform:translate(-50px)}.slider-container .slider-nav.nav--bottom-center .nav-btn--next{bottom:30px;left:50%;transform:translate(10px)}.slider-container .slider-nav.nav--bottom-right .nav-btn--prev{bottom:30px;right:42px}.slider-container .slider-nav.nav--bottom-right .nav-btn--next{bottom:30px;right:-20px}.slider-container .slider-nav.nav--center-sides .nav-btn{background:#000000b3;color:#fff}.slider-container .slider-nav.nav--center-sides .nav-btn--prev{top:50%;left:-50px;transform:translateY(-50%)}.slider-container .slider-nav.nav--center-sides .nav-btn--next{top:50%;right:-50px;transform:translateY(-50%)}@media (max-width: 1024px){.slider-container .slider-nav .nav--top-left .nav-btn--prev,.slider-container .slider-nav .nav--top-center .nav-btn--prev,.slider-container .slider-nav .nav--top-right .nav-btn--prev,.slider-container .slider-nav .nav--bottom-left .nav-btn--prev,.slider-container .slider-nav .nav--bottom-center .nav-btn--prev,.slider-container .slider-nav .nav--bottom-right .nav-btn--prev,.slider-container .slider-nav .nav--center-sides .nav-btn--prev{left:clamp(8px,5%,40px);right:auto}.slider-container .slider-nav .nav--top-left .nav-btn--next,.slider-container .slider-nav .nav--top-center .nav-btn--next,.slider-container .slider-nav .nav--top-right .nav-btn--next,.slider-container .slider-nav .nav--bottom-left .nav-btn--next,.slider-container .slider-nav .nav--bottom-center .nav-btn--next,.slider-container .slider-nav .nav--bottom-right .nav-btn--next,.slider-container .slider-nav .nav--center-sides .nav-btn--next{right:clamp(8px,5%,20px);left:auto}}@media (max-width: 768px){.slider-container .slider-nav .nav-btn{width:36px;height:36px;font-size:24px}}@media (max-width: 480px){.slider-container .slider-nav .slider-container .slider-nav.nav--center-sides{pointer-events:auto}.slider-container .slider-nav .slider-container .slider-nav.nav--center-sides .nav-btn{width:32px;height:32px;font-size:20px;pointer-events:auto;z-index:20;background:#000000b3;color:#fff}.slider-container .slider-nav .slider-container .slider__wrapper{position:relative}.slider-container .slider-nav .slider-container .slider__wrapper .slide-content{pointer-events:auto}.slider-container .slider-nav .nav-btn{width:32px;height:32px;font-size:20px}.slider-container .slider-nav .nav-btn--prev{left:8px!important;right:auto!important}.slider-container .slider-nav .nav-btn--next{right:8px!important;left:auto!important}}\n"] }]
772
+ args: [{ selector: "app-simple-slider", changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, standalone: true, imports: [CommonModule], providers: [SliderEngine, SliderStore, SliderDraggablePlugin, SliderPaginationPlugin, SliderNavigationPlugin, SliderAutoplayPlugin], template: "<ng-container *ngIf=\"state$ | async as state\">\r\n <div\r\n class=\"slider\"\r\n #sliderHost\r\n [class.slider-vertical]=\"state.vertical\"\r\n [class.slider-draggable]=\"state.isDragging\"\r\n [class.slider--main]=\"!config.isThumbs\"\r\n [class.slider--thumbs]=\"config.isThumbs\"\r\n *ngIf=\"state.visibleSlides?.length > 0 && state.isVisible\"\r\n (pointerdown)=\"onPointerDown($event)\"\r\n (pointermove)=\"onPointerMove($event)\"\r\n (pointerup)=\"onPointerUp($event)\"\r\n (pointercancel)=\"onPointerUp($event)\">\r\n <div\r\n class=\"slider__wrapper\"\r\n [ngStyle]=\"{\r\n transform: state.translate,\r\n transition: draggable.isDraggingPointer ? 'none' : 'transform 0.3s ease',\r\n display: 'flex',\r\n 'flex-direction': state.vertical ? 'column' : 'row',\r\n 'justify-content': state.visibleSlides?.length < state.slidesPerView ? 'center' : 'flex-start',\r\n gap: (state.slidesPerView > 1 ? state.gap || 0 : 0) + 'px',\r\n }\">\r\n <div\r\n *ngFor=\"let slide of state.visibleSlides; let i = index\"\r\n class=\"slide\"\r\n [attr.data-index]=\"i\"\r\n [class.slide--current]=\"state.selectedSlide === i\"\r\n [style.flex]=\"\r\n !config.isThumbs\r\n ? '0 0 calc(' +\r\n 100 / state.slidesPerView +\r\n '% - ' +\r\n ((state.gap || 0) * (state.slidesPerView - 1)) / state.slidesPerView +\r\n 'px)'\r\n : '0 0 ' + thumbSize + 'px'\r\n \"\r\n [style.width]=\"config.isThumbs ? thumbSize + 'px' : null\"\r\n [style.height]=\"config.isThumbs ? thumbSize + 'px' : null\"\r\n (click)=\"engine.selectSlide(i)\">\r\n <ng-container\r\n *ngTemplateOutlet=\"slideTemplate ? slideTemplate : defaultSlideTemplate; context: { slide: slide, index: i }\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-container>\r\n" }]
773
773
  }], ctorParameters: () => [{ type: SliderEngine }, { type: SliderStore }, { type: SliderDraggablePlugin }, { type: SliderPaginationPlugin }, { type: SliderNavigationPlugin }, { type: SliderAutoplayPlugin }], propDecorators: { config: [{
774
774
  type: Input
775
775
  }], slideTemplate: [{
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-edge-slider.mjs","sources":["../../../projects/ngx-edge-slider/src/lib/models/slider-config.model.ts","../../../projects/ngx-edge-slider/src/lib/models/slider-state.model.ts","../../../projects/ngx-edge-slider/src/lib/store/slider-store.service.ts","../../../projects/ngx-edge-slider/src/lib/engine/slider-engine.service.ts","../../../projects/ngx-edge-slider/src/lib/plugins/autoplay/autoplay.plugin.ts","../../../projects/ngx-edge-slider/src/lib/plugins/draggable/draggable.plugin.ts","../../../projects/ngx-edge-slider/src/lib/plugins/navigation/navigation.plugin.ts","../../../projects/ngx-edge-slider/src/lib/plugins/pagination/pagination.plugin.ts","../../../projects/ngx-edge-slider/src/lib/component/simple-slider.component.ts","../../../projects/ngx-edge-slider/src/lib/component/simple-slider.component.html","../../../projects/ngx-edge-slider/src/lib/ngx-edge-slider.module.ts","../../../projects/ngx-edge-slider/src/lib/safe-url.pipe.ts","../../../projects/ngx-edge-slider/src/public-api.ts","../../../projects/ngx-edge-slider/src/ngx-edge-slider.ts"],"sourcesContent":["export interface AutoplayPluginConfig {\r\n delay?: number;\r\n}\r\nexport interface SliderPluginConfig {\r\n draggable?: boolean;\r\n autoplay?: { delay?: number };\r\n navigation?: boolean;\r\n pagination?: boolean;\r\n}\r\nexport interface SliderConfig {\r\n slides: any[];\r\n slidesPerView: number;\r\n slidesToSlide?: number;\r\n loop?: 0 | 1 | 2;\r\n vertical?: boolean;\r\n changeToClickedSlide?: boolean;\r\n isThumbs?: boolean;\r\n\r\n /** NEW: gap between slides in px */\r\n gap?: number;\r\n\r\n breakpoints?: {\r\n mobile?: Partial<SliderConfig>;\r\n tablet?: Partial<SliderConfig>;\r\n desktop?: Partial<SliderConfig>;\r\n };\r\n\r\n plugins?: SliderPluginConfig;\r\n\r\n showOn?: {\r\n mobile?: boolean;\r\n tablet?: boolean;\r\n desktop?: boolean;\r\n };\r\n}\r\n\r\nexport const DEFAULT_CONFIG: SliderConfig = {\r\n slides: [],\r\n slidesPerView: 1,\r\n slidesToSlide: 1,\r\n loop: 0,\r\n vertical: false,\r\n changeToClickedSlide: false,\r\n isThumbs: false,\r\n plugins: {\r\n draggable: false,\r\n pagination: false,\r\n navigation: false,\r\n autoplay: undefined,\r\n },\r\n gap: 0,\r\n\r\n showOn: { mobile: true, tablet: true, desktop: true },\r\n};\r\n","export interface SliderViewState {\r\n currentSlide: number;\r\n selectedSlide: number;\r\n\r\n slidesPerView: number;\r\n visibleSlides: any[];\r\n\r\n gap?: number;\r\n\r\n maxStartIndex?: number;\r\n canPrev?: boolean;\r\n canNext?: boolean;\r\n\r\n pager?: {\r\n currentPage: number;\r\n totalPages: number;\r\n visibleDots: number[];\r\n activeDotIndex: number;\r\n } | null;\r\n\r\n translate?: string;\r\n transition?: string;\r\n\r\n isAnimating?: boolean;\r\n isVisible?: boolean;\r\n isDragging?: boolean;\r\n}\r\n\r\nexport const INITIAL_SLIDER_STATE: SliderViewState = {\r\n currentSlide: 0,\r\n selectedSlide: -1,\r\n\r\n slidesPerView: 1,\r\n visibleSlides: [],\r\n\r\n gap: 0,\r\n maxStartIndex: 0,\r\n canPrev: false,\r\n canNext: false,\r\n\r\n translate: \"translateX(0px)\",\r\n transition: \"transform 300ms ease\",\r\n pager: null,\r\n\r\n isAnimating: false,\r\n isVisible: false,\r\n isDragging: false,\r\n};\r\n","import { Injectable } from \"@angular/core\";\r\nimport { BehaviorSubject } from \"rxjs\";\r\nimport { INITIAL_SLIDER_STATE, SliderViewState } from \"../models/slider-state.model\";\r\n\r\n@Injectable()\r\nexport class SliderStore {\r\n private readonly state$ = new BehaviorSubject<SliderViewState>({\r\n currentSlide: 0,\r\n selectedSlide: -1,\r\n\r\n slidesPerView: 1,\r\n visibleSlides: [],\r\n\r\n translate: \"translateX(0)\",\r\n transition: \"transform 300ms ease\",\r\n pager: null,\r\n isVisible: true,\r\n\r\n isAnimating: false,\r\n isDragging: false,\r\n });\r\n readonly view$ = this.state$.asObservable();\r\n\r\n get snapshot() {\r\n return this.state$.value;\r\n }\r\n\r\n update(patch: Partial<SliderViewState>) {\r\n this.state$.next({ ...this.snapshot, ...patch });\r\n }\r\n\r\n reset() {\r\n this.state$.next(INITIAL_SLIDER_STATE);\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { fromEvent, merge, Subject, auditTime, takeUntil } from \"rxjs\";\r\nimport { SliderConfig, DEFAULT_CONFIG } from \"../models/slider-config.model\";\r\nimport { SliderViewState } from \"../models/slider-state.model\";\r\nimport { SliderPlugin } from \"../plugins/slider-plugin\";\r\nimport { SliderStore } from \"../store/slider-store.service\";\r\n\r\n@Injectable()\r\nexport class SliderEngine {\r\n private config!: SliderConfig;\r\n private plugins: SliderPlugin[] = [];\r\n private syncThumbsEngine?: SliderEngine;\r\n\r\n // RX lifecycle\r\n private destroy$ = new Subject<void>();\r\n\r\n // Container-based breakpoints\r\n private containerEl?: HTMLElement;\r\n private ro?: ResizeObserver;\r\n\r\n private measuredSlideSizePx?: number;\r\n\r\n constructor(private store: SliderStore) {}\r\n\r\n /* ---------------- Public API ---------------- */\r\n\r\n init(config: SliderConfig, plugins: SliderPlugin[] = []) {\r\n this.config = { ...DEFAULT_CONFIG, ...config, plugins: { ...(config.plugins ?? {}) } };\r\n this.plugins = plugins;\r\n\r\n this.plugins.forEach((p) => p.init?.(this));\r\n\r\n this.setupViewportSignals();\r\n this.applyBreakpoint();\r\n this.clampIndicesAfterLayoutChange();\r\n this.recalculate();\r\n }\r\n\r\n /** Call this from the component once you have the slider host element */\r\n attachContainer(el: HTMLElement) {\r\n this.containerEl = el;\r\n\r\n // Observe container size changes (robust in grids/sidebars/tabs)\r\n this.ro?.disconnect();\r\n this.ro = new ResizeObserver(() => {\r\n // We reuse the same debounced layout handler\r\n this.onLayoutSignal();\r\n });\r\n this.ro.observe(el);\r\n\r\n this.measureSlideSize();\r\n // Apply immediately based on real container width\r\n this.onLayoutSignal();\r\n }\r\n private measureSlideSize() {\r\n if (!this.containerEl) return;\r\n const firstSlide = this.containerEl.querySelector<HTMLElement>(\".slide\");\r\n if (!firstSlide) return;\r\n const rect = firstSlide.getBoundingClientRect();\r\n if (rect.width > 0) this.measuredSlideSizePx = rect.width;\r\n }\r\n destroy() {\r\n // Stop Rx streams\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n\r\n // Disconnect ResizeObserver\r\n this.ro?.disconnect();\r\n this.ro = undefined;\r\n this.containerEl = undefined;\r\n\r\n // Plugin cleanup\r\n this.plugins.forEach((p) => p.destroy?.());\r\n this.plugins = [];\r\n\r\n // Reset store\r\n this.store.reset();\r\n }\r\n\r\n next() {\r\n this.goTo(this.store.snapshot.currentSlide + this.slideStep());\r\n this.plugins.forEach((p) => p.onNext?.());\r\n }\r\n\r\n previous() {\r\n this.goTo(this.store.snapshot.currentSlide - this.slideStep());\r\n this.plugins.forEach((p) => p.onPrevious?.());\r\n }\r\n public getContainerEl(): HTMLElement | undefined {\r\n return this.containerEl;\r\n }\r\n selectSlide(index: number) {\r\n const slidesPerView = this.store.snapshot.slidesPerView;\r\n\r\n // 1️⃣ Mark selected\r\n this.store.update({ selectedSlide: index });\r\n\r\n // 2️⃣ Calculate page start\r\n let pageStart = Math.floor(index / slidesPerView) * slidesPerView;\r\n\r\n // 3️⃣ Clamp to maxStartIndex\r\n pageStart = Math.min(pageStart, this.maxStartIndex);\r\n\r\n // 4️⃣ If synced with thumbs, also clamp to their max index\r\n if (this.syncThumbsEngine) {\r\n const thumbMaxIndex = this.syncThumbsEngine.getMaxStartIndex();\r\n pageStart = Math.min(pageStart, thumbMaxIndex);\r\n }\r\n\r\n // 5️⃣ Move main slider\r\n if (pageStart !== this.store.snapshot.currentSlide) {\r\n this.goToSlide(pageStart);\r\n }\r\n\r\n // 6️⃣ Notify plugins\r\n this.plugins.forEach((p) => p.onSlideClick?.(index));\r\n }\r\n\r\n /* ---------------- Drag ---------------- */\r\n\r\n handleDragStart(event: PointerEvent) {\r\n this.store.update({ isDragging: true });\r\n this.plugins.forEach((p) => p.onDragStart?.(event));\r\n }\r\n handleDragMove(event: PointerEvent) {\r\n this.plugins.forEach((p) => p.onDragMove?.(event));\r\n }\r\n handleDragEnd() {\r\n this.store.update({ isDragging: false });\r\n this.plugins.forEach((p) => p.onDragEnd?.());\r\n }\r\n public goTo(index: number) {\r\n this.goToSlide(index); // reuse your existing private method\r\n }\r\n /* ---------------- Internals ---------------- */\r\n\r\n private goToSlide(index: number) {\r\n const clamped = Math.max(0, Math.min(index, this.maxStartIndex));\r\n // console.log(\"[Engine] goToSlide index:\", index, \"clamped:\", clamped);\r\n\r\n this.store.update({ currentSlide: clamped });\r\n this.recalculate();\r\n\r\n // NOTE: calling onSlideClick here is a bit semantically odd (since it’s not always a click),\r\n // but I preserved your behavior.\r\n this.plugins.forEach((p) => p.onSlideClick?.(index));\r\n }\r\n\r\n public recalculate() {\r\n if (this.store.snapshot.isDragging) return; // skip during drag\r\n const slides = this.config.slides ?? [];\r\n const maxStartIndex = this.getMaxStartIndex();\r\n const current = this.store.snapshot.currentSlide;\r\n\r\n this.store.update({\r\n visibleSlides: slides,\r\n translate: this.translate(current),\r\n pager: this.buildPager(),\r\n maxStartIndex,\r\n canPrev: current > 0,\r\n canNext: current < maxStartIndex,\r\n });\r\n }\r\n\r\n private translate(index: number): string {\r\n const axis = this.config.vertical ? \"Y\" : \"X\";\r\n\r\n const containerSize = this.containerEl\r\n ? this.config.vertical\r\n ? this.containerEl.clientHeight\r\n : this.containerEl.clientWidth\r\n : this.config.vertical\r\n ? window.innerHeight\r\n : window.innerWidth;\r\n\r\n const gap = this.store.snapshot.gap ?? 0;\r\n\r\n const spv = this.store.snapshot.slidesPerView;\r\n const slideSize =\r\n this.config.isThumbs && this.measuredSlideSizePx\r\n ? this.measuredSlideSizePx\r\n : spv > 0\r\n ? (containerSize - gap * (spv - 1)) / spv\r\n : containerSize;\r\n\r\n // move by \"pageStart * (slideSize + gap)\"\r\n const offset = index * (slideSize + gap);\r\n\r\n return `translate${axis}(-${offset}px)`;\r\n }\r\n\r\n /** Debounced layout signals for resize/orientation/container changes */\r\n private setupViewportSignals() {\r\n // If you want \"only after resizing stops\", replace auditTime with debounceTime(120)\r\n const resize$ = fromEvent(window, \"resize\", { passive: true } as any);\r\n const orientation$ = fromEvent(window, \"orientationchange\", { passive: true } as any);\r\n\r\n merge(resize$, orientation$)\r\n .pipe(\r\n auditTime(80), // good compromise: responsive without over-recalc\r\n takeUntil(this.destroy$),\r\n )\r\n .subscribe(() => this.onLayoutSignal());\r\n }\r\n\r\n private onLayoutSignal() {\r\n const beforeSlidesPerView = this.store.snapshot.slidesPerView;\r\n const beforeVisible = this.store.snapshot.isVisible;\r\n\r\n this.applyBreakpoint();\r\n\r\n const afterSlidesPerView = this.store.snapshot.slidesPerView;\r\n const afterVisible = this.store.snapshot.isVisible;\r\n\r\n if (beforeSlidesPerView !== afterSlidesPerView || beforeVisible !== afterVisible) {\r\n this.clampIndicesAfterLayoutChange();\r\n }\r\n\r\n this.measureSlideSize();\r\n\r\n this.recalculate();\r\n }\r\n\r\n private getBreakpointWidth(): number {\r\n if (this.containerEl) {\r\n // Prefer clientWidth (layout), fallback to rect width\r\n return this.containerEl.clientWidth || this.containerEl.getBoundingClientRect().width || window.innerWidth;\r\n }\r\n return window.innerWidth;\r\n }\r\n\r\n private applyBreakpoint() {\r\n const width = this.getBreakpointWidth();\r\n const bp = this.config.breakpoints;\r\n\r\n let override: Partial<SliderConfig> | undefined;\r\n let device: \"mobile\" | \"tablet\" | \"desktop\" = \"desktop\";\r\n\r\n if (width < 768) {\r\n override = bp?.mobile;\r\n device = \"mobile\";\r\n } else if (width < 1024) {\r\n override = bp?.tablet;\r\n device = \"tablet\";\r\n } else {\r\n override = bp?.desktop;\r\n device = \"desktop\";\r\n }\r\n\r\n // Merge overrides\r\n this.config = { ...this.config, ...override };\r\n\r\n this.store.update({\r\n slidesPerView: this.config.slidesPerView,\r\n gap: this.config.gap ?? 0, // βœ… NEW\r\n isVisible: this.config.showOn?.[device] ?? true,\r\n });\r\n }\r\n\r\n private clampIndicesAfterLayoutChange() {\r\n const max = this.getMaxStartIndex();\r\n\r\n const current = this.store.snapshot.currentSlide;\r\n const selected = this.store.snapshot.selectedSlide;\r\n\r\n const clampedCurrent = Math.max(0, Math.min(current, max));\r\n const clampedSelected = selected === -1 ? -1 : Math.max(0, Math.min(selected, (this.config.slides?.length ?? 0) - 1));\r\n\r\n this.store.update({\r\n currentSlide: clampedCurrent,\r\n selectedSlide: clampedSelected,\r\n });\r\n }\r\n\r\n private buildPager() {\r\n const totalSlides = this.config.slides.length;\r\n const currentSlide = this.store.snapshot.selectedSlide !== -1 ? this.store.snapshot.selectedSlide : this.store.snapshot.currentSlide;\r\n\r\n const maxVisibleDots = 5;\r\n\r\n let start = Math.max(0, currentSlide - Math.floor(maxVisibleDots / 2));\r\n let end = start + maxVisibleDots;\r\n\r\n if (end > totalSlides) {\r\n end = totalSlides;\r\n start = Math.max(0, end - maxVisibleDots);\r\n }\r\n\r\n const visibleDots = Array.from({ length: end - start }, (_, i) => start + i);\r\n const activeDotIndex = visibleDots.indexOf(currentSlide);\r\n\r\n return {\r\n currentPage: currentSlide,\r\n totalPages: totalSlides,\r\n visibleDots,\r\n activeDotIndex,\r\n };\r\n }\r\n\r\n private slideStep() {\r\n return this.store.snapshot.slidesPerView;\r\n }\r\n\r\n private get maxStartIndex() {\r\n const total = this.config.slides?.length ?? 0;\r\n return Math.max(0, total - this.store.snapshot.slidesPerView);\r\n }\r\n getMaxStartIndex() {\r\n const total = this.config.slides?.length ?? 0;\r\n const spv = this.store.snapshot.slidesPerView || 1;\r\n return Math.max(0, total - spv);\r\n }\r\n /* -------- Plugin-safe API -------- */\r\n\r\n getState() {\r\n return this.store.snapshot;\r\n }\r\n\r\n getStateObservable() {\r\n return this.store.view$;\r\n }\r\n\r\n setState(patch: Partial<SliderViewState>) {\r\n this.store.update(patch);\r\n }\r\n\r\n getConfig() {\r\n return this.config;\r\n }\r\n\r\n /** Link this slider to thumbs */\r\n syncWithThumbs(thumbsEngine: SliderEngine) {\r\n this.syncThumbsEngine = thumbsEngine;\r\n }\r\n\r\n /* -------- Read-only helpers -------- */\r\n\r\n getSlidesPerView(): number {\r\n return this.store.snapshot.slidesPerView;\r\n }\r\n\r\n getCurrentSlide(): number {\r\n return this.store.snapshot.currentSlide;\r\n }\r\n\r\n getSelectedSlide(): number {\r\n return this.store.snapshot.selectedSlide;\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { SliderPlugin } from \"../slider-plugin\";\r\nimport { SliderEngine } from \"../../engine/slider-engine.service\";\r\nimport { AutoplayPluginConfig } from \"../../models/slider-config.model\";\r\n@Injectable()\r\nexport class SliderAutoplayPlugin implements SliderPlugin {\r\n private engine!: SliderEngine;\r\n private timerId: any;\r\n private delay = 4000; // default\r\n\r\n init(engine: SliderEngine) {\r\n this.engine = engine;\r\n this.start();\r\n }\r\n\r\n setConfig(config?: AutoplayPluginConfig) {\r\n if (!config) return;\r\n\r\n if (typeof config.delay === \"number\") {\r\n this.delay = config.delay;\r\n }\r\n\r\n // restart autoplay with new config\r\n this.start();\r\n }\r\n\r\n onDragStart() {\r\n this.stop();\r\n }\r\n\r\n onDragEnd() {\r\n this.start();\r\n }\r\n\r\n private start() {\r\n this.stop();\r\n this.timerId = setInterval(() => {\r\n this.engine.next();\r\n }, this.delay);\r\n }\r\n\r\n private stop() {\r\n if (this.timerId) {\r\n clearInterval(this.timerId);\r\n this.timerId = null;\r\n }\r\n }\r\n\r\n destroy() {\r\n this.stop();\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { SliderPlugin } from \"../slider-plugin\";\r\nimport { SliderEngine } from \"../../engine/slider-engine.service\";\r\n\r\n@Injectable()\r\nexport class SliderDraggablePlugin implements SliderPlugin {\r\n private engine!: SliderEngine;\r\n private startX = 0;\r\n private deltaX = 0;\r\n private hasDragged = false;\r\n private isDragging = false;\r\n private readonly dragThreshold = 50;\r\n\r\n // Expose drag state to template\r\n public get isDraggingPointer(): boolean {\r\n return this.isDragging;\r\n }\r\n\r\n init(engine: SliderEngine) {\r\n this.engine = engine;\r\n }\r\n\r\n onDragStart(event: PointerEvent) {\r\n this.startX = event.clientX;\r\n this.deltaX = 0;\r\n this.hasDragged = false;\r\n this.isDragging = true;\r\n\r\n // Set engine dragging state\r\n this.engine.setState({ isDragging: true });\r\n }\r\n\r\n onDragMove(event: PointerEvent) {\r\n if (!this.isDragging) return;\r\n\r\n const moveX = event.clientX - this.startX;\r\n this.deltaX += moveX;\r\n this.hasDragged = true;\r\n\r\n const currentTranslate = this.extractTranslate(this.engine.getState().translate);\r\n const newTranslate = currentTranslate + moveX;\r\n\r\n this.engine.setState({ translate: `translateX(${newTranslate}px)` });\r\n\r\n this.startX = event.clientX;\r\n }\r\n\r\n onDragEnd() {\r\n if (this.hasDragged) {\r\n if (this.deltaX > this.dragThreshold) {\r\n this.engine.previous();\r\n } else if (this.deltaX < -this.dragThreshold) {\r\n this.engine.next();\r\n } else {\r\n // Small drag β†’ snap back\r\n this.engine.recalculate();\r\n }\r\n }\r\n\r\n this.isDragging = false;\r\n this.hasDragged = false;\r\n this.deltaX = 0;\r\n\r\n this.engine.setState({ isDragging: false });\r\n }\r\n\r\n /** Extract numeric value from 'translateX(-123px)' */\r\n private extractTranslate(transform: string | undefined): number {\r\n if (!transform) return 0;\r\n const match = transform.match(/-?\\d+(\\.\\d+)?/);\r\n return match ? parseFloat(match[0]) : 0;\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { SliderPlugin } from \"../slider-plugin\";\r\nimport { SliderEngine } from \"../../engine/slider-engine.service\";\r\nimport { BehaviorSubject, Subscription } from \"rxjs\";\r\n\r\n@Injectable()\r\nexport class SliderNavigationPlugin implements SliderPlugin {\r\n private engine!: SliderEngine;\r\n\r\n private isPagerMode = false;\r\n\r\n private _canPrev$ = new BehaviorSubject<boolean>(false);\r\n private _canNext$ = new BehaviorSubject<boolean>(false);\r\n\r\n private sub!: Subscription;\r\n\r\n get canPrev$() {\r\n return this._canPrev$.asObservable();\r\n }\r\n get canNext$() {\r\n return this._canNext$.asObservable();\r\n }\r\n\r\n init(engine: SliderEngine, isPagerMode: boolean = false) {\r\n this.engine = engine;\r\n this.isPagerMode = isPagerMode;\r\n\r\n // Subscribe to state changes\r\n this.sub = this.engine.getStateObservable?.()?.subscribe(() => this.updateArrows());\r\n\r\n // βœ… Force initial check after a short delay (to catch async slides)\r\n setTimeout(() => this.updateArrows());\r\n }\r\n\r\n destroy() {\r\n this.sub?.unsubscribe();\r\n }\r\n next() {\r\n if (!this.engine) return;\r\n\r\n if (this.isPagerMode) {\r\n const state = this.engine.getState();\r\n const cfg = this.engine.getConfig();\r\n\r\n const totalSlides = cfg?.slides?.length ?? 0;\r\n const perView = state?.slidesPerView ?? cfg?.slidesPerView ?? 1;\r\n const step = cfg?.slidesToSlide ?? 1;\r\n\r\n const maxIndex = Math.max(0, totalSlides - perView);\r\n const current = state?.currentSlide ?? 0;\r\n\r\n const newIndex = Math.min(maxIndex, current + step);\r\n this.engine.goTo(newIndex);\r\n } else {\r\n this.engine.next();\r\n }\r\n }\r\n\r\n prev() {\r\n if (!this.engine) return;\r\n\r\n if (this.isPagerMode) {\r\n const state = this.engine.getState();\r\n const cfg = this.engine.getConfig();\r\n\r\n const step = cfg?.slidesToSlide ?? 1;\r\n const current = state?.currentSlide ?? 0;\r\n\r\n const newIndex = Math.max(0, current - step);\r\n this.engine.goTo(newIndex);\r\n } else {\r\n this.engine.previous();\r\n }\r\n }\r\n\r\n public updateArrows() {\r\n if (!this.engine) return;\r\n\r\n const state = this.engine.getState();\r\n const cfg = this.engine.getConfig();\r\n const totalSlides = cfg?.slides?.length ?? 0;\r\n const perView = state?.slidesPerView ?? 1;\r\n\r\n const canPrev = totalSlides > 0 && (state?.currentSlide ?? 0) > 0;\r\n const canNext = totalSlides > 0 && (state?.currentSlide ?? 0) < Math.max(0, totalSlides - perView);\r\n\r\n if (this._canPrev$.value !== canPrev) this._canPrev$.next(canPrev);\r\n if (this._canNext$.value !== canNext) this._canNext$.next(canNext);\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { Pager, SliderPlugin } from \"../slider-plugin\";\r\nimport { SliderEngine } from \"../../engine/slider-engine.service\";\r\nimport { BehaviorSubject, Subscription } from \"rxjs\";\r\n\r\n@Injectable()\r\nexport class SliderPaginationPlugin implements SliderPlugin {\r\n private engine!: SliderEngine;\r\n private maxVisibleDots = 10;\r\n private sub!: Subscription;\r\n\r\n private _pager$ = new BehaviorSubject<Pager | null>(null);\r\n public pager$ = this._pager$.asObservable();\r\n\r\n init(engine: SliderEngine) {\r\n this.engine = engine;\r\n\r\n this.sub = this.engine.getStateObservable().subscribe(() => {\r\n this.updatePager();\r\n });\r\n\r\n // initial\r\n setTimeout(() => this.updatePager());\r\n }\r\n\r\n destroy() {\r\n this.sub?.unsubscribe();\r\n this._pager$.next(null);\r\n }\r\n\r\n /** Go to a slide by slide index (NOT dot index) */\r\n goToSlide(slideIndex: number) {\r\n this.engine.selectSlide(slideIndex);\r\n }\r\n\r\n private updatePager() {\r\n const state = this.engine.getState();\r\n const totalSlides = state.visibleSlides?.length ?? 0;\r\n if (totalSlides <= 0) {\r\n this._pager$.next(null);\r\n return;\r\n }\r\n\r\n // βœ… important: selectedSlide is -1 initially; fallback to currentSlide\r\n const current = state.selectedSlide !== -1 ? state.selectedSlide : state.currentSlide;\r\n\r\n const maxDots = Math.max(1, this.maxVisibleDots);\r\n\r\n // βœ… clamp to >= 0\r\n const safeCurrent = Math.max(0, Math.min(current, totalSlides - 1));\r\n\r\n const pageStart = Math.max(0, Math.floor(safeCurrent / maxDots) * maxDots);\r\n const pageEnd = Math.min(pageStart + maxDots, totalSlides);\r\n\r\n const visibleDots = Array.from({ length: pageEnd - pageStart }, (_, i) => pageStart + i);\r\n\r\n const activeDotIndex = visibleDots.indexOf(safeCurrent);\r\n\r\n this._pager$.next({ visibleDots, activeDotIndex });\r\n }\r\n}\r\n","import {\r\n Component,\r\n ChangeDetectionStrategy,\r\n OnInit,\r\n TemplateRef,\r\n Input,\r\n EventEmitter,\r\n Output,\r\n SimpleChanges,\r\n OnChanges,\r\n OnDestroy,\r\n ViewChild,\r\n ElementRef,\r\n AfterViewInit,\r\n ViewEncapsulation,\r\n} from \"@angular/core\";\r\nimport { SliderViewState } from \"../models/slider-state.model\";\r\nimport { Observable, Subject, takeUntil } from \"rxjs\";\r\nimport { SliderConfig } from \"../models/slider-config.model\";\r\nimport { SliderEngine } from \"../engine/slider-engine.service\";\r\nimport { SliderStore } from \"../store/slider-store.service\";\r\nimport { SliderAutoplayPlugin } from \"../plugins/autoplay/autoplay.plugin\";\r\nimport { SliderDraggablePlugin } from \"../plugins/draggable/draggable.plugin\";\r\nimport { SliderNavigationPlugin } from \"../plugins/navigation/navigation.plugin\";\r\nimport { SliderPaginationPlugin } from \"../plugins/pagination/pagination.plugin\";\r\nimport { Pager, SliderPlugin } from \"../plugins/slider-plugin\";\r\nimport { CommonModule } from \"@angular/common\";\r\n\r\n@Component({\r\n selector: \"app-simple-slider\",\r\n templateUrl: \"./simple-slider.component.html\",\r\n styleUrl: \"./simple-slider.component.scss\",\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n standalone: true,\r\n imports: [CommonModule],\r\n providers: [SliderEngine, SliderStore, SliderDraggablePlugin, SliderPaginationPlugin, SliderNavigationPlugin, SliderAutoplayPlugin],\r\n})\r\nexport class SimpleSliderComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy {\r\n @Input() config!: SliderConfig;\r\n @Input() slideTemplate?: TemplateRef<any>;\r\n @Input() navigationTemplate?: TemplateRef<any>;\r\n @Input() paginationTemplate?: TemplateRef<any>;\r\n @Output() slideChange = new EventEmitter<number>();\r\n\r\n private isDraggingPointer = false;\r\n private dragStartX = 0;\r\n private dragStartY = 0;\r\n private lastIndex = -1;\r\n private lastSlidesRef: any[] | null = null;\r\n private destroy$ = new Subject<void>();\r\n\r\n state$!: Observable<SliderViewState>;\r\n @ViewChild(\"sliderHost\", { static: false }) sliderHost?: ElementRef<HTMLElement>;\r\n\r\n constructor(\r\n private engine: SliderEngine,\r\n private store: SliderStore,\r\n private draggable: SliderDraggablePlugin,\r\n private pagination: SliderPaginationPlugin,\r\n private navigation: SliderNavigationPlugin,\r\n private autoplay: SliderAutoplayPlugin,\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.state$ = this.store.view$;\r\n\r\n this.state$.pipe(takeUntil(this.destroy$)).subscribe((state) => {\r\n if (state.currentSlide !== this.lastIndex) {\r\n this.lastIndex = state.currentSlide;\r\n this.slideChange.emit(state.currentSlide);\r\n }\r\n });\r\n this.lastSlidesRef = this.config?.slides ?? null;\r\n this.resolvePlugins(this.config);\r\n }\r\n ngAfterViewInit() {\r\n if (this.sliderHost?.nativeElement) {\r\n this.engine.attachContainer(this.sliderHost.nativeElement);\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (!changes[\"config\"] || !this.config) return;\r\n\r\n const newSlidesRef = this.config.slides ?? null;\r\n\r\n if (newSlidesRef !== this.lastSlidesRef) {\r\n this.lastSlidesRef = newSlidesRef;\r\n this.engine.destroy();\r\n this.resolvePlugins(this.config);\r\n }\r\n }\r\n ngOnDestroy() {\r\n this.destroySlider();\r\n }\r\n\r\n public goTo(index: number) {\r\n this.engine.selectSlide(index); // add this line\r\n //this.slideChange.emit(index);\r\n }\r\n\r\n destroySlider() {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n this.engine.destroy();\r\n } // destroys plugins and clears store\r\n\r\n onNext() {\r\n this.engine.next();\r\n }\r\n onPrevious() {\r\n this.engine.previous();\r\n }\r\n selectSlide(index: number) {\r\n this.engine.selectSlide(index);\r\n }\r\n onRecalculate() {\r\n this.engine.recalculate();\r\n }\r\n // Navigation\r\n /** Expose navigation observables safely */\r\n get canPrev$(): Observable<boolean> | null {\r\n if (!this.navigation) {\r\n console.warn(\"Navigation plugin is not enabled.\");\r\n return null;\r\n }\r\n return this.navigation.canPrev$;\r\n }\r\n\r\n get canNext$(): Observable<boolean> | null {\r\n if (!this.navigation) {\r\n console.warn(\"Navigation plugin is not enabled.\");\r\n return null;\r\n }\r\n return this.navigation.canNext$;\r\n }\r\n\r\n /** Expose next/prev methods */\r\n public next() {\r\n this.navigation?.next();\r\n }\r\n\r\n public prev() {\r\n this.navigation?.prev();\r\n }\r\n\r\n /** Expose pagination observable */\r\n get pager$(): Observable<Pager | null> | null {\r\n if (!this.pagination) {\r\n console.warn(\"Pagination plugin is not enabled for this slider.\");\r\n return null;\r\n }\r\n return this.pagination.pager$;\r\n }\r\n\r\n /** Expose a goToSlide method */\r\n public goToSlide(index: number) {\r\n this.pagination.goToSlide(index);\r\n }\r\n\r\n // Handle Pointers\r\n\r\n onPointerDown(event: PointerEvent) {\r\n // Only start drag if not clicking a nav button\r\n if ((event.target as HTMLElement).closest(\".nav-btn\")) {\r\n return; // ignore\r\n }\r\n this.dragStartX = event.clientX;\r\n this.dragStartY = event.clientY;\r\n this.isDraggingPointer = false;\r\n\r\n // Do not capture yet; wait until movement exceeds threshold\r\n this.engine.handleDragStart(event);\r\n }\r\n\r\n onPointerMove(event: PointerEvent) {\r\n const dx = Math.abs(event.clientX - this.dragStartX);\r\n const dy = Math.abs(event.clientY - this.dragStartY);\r\n\r\n if (!this.isDraggingPointer && (dx > 5 || dy > 5)) {\r\n this.isDraggingPointer = true;\r\n\r\n // Now start capturing pointer so dragging works outside the slider bounds\r\n (event.currentTarget as HTMLElement).setPointerCapture(event.pointerId);\r\n }\r\n\r\n if (this.isDraggingPointer) {\r\n this.engine.handleDragMove(event);\r\n }\r\n }\r\n\r\n onPointerUp(event: PointerEvent) {\r\n if (!event) return;\r\n\r\n if (!this.isDraggingPointer) {\r\n const target = event.target as HTMLElement;\r\n\r\n // Only select the slide if click is not on an interactive child\r\n const slideEl = target.closest(\".slide\");\r\n if (slideEl && !target.closest(\"button, video, a\")) {\r\n const indexAttr = slideEl.getAttribute(\"data-index\");\r\n const index = indexAttr ? parseInt(indexAttr, 10) : null;\r\n if (index !== null) this.engine.selectSlide(index);\r\n }\r\n }\r\n\r\n this.engine.handleDragEnd();\r\n this.isDraggingPointer = false;\r\n\r\n // Release pointer capture if it was captured\r\n try {\r\n (event.currentTarget as HTMLElement).releasePointerCapture(event.pointerId);\r\n } catch {}\r\n }\r\n\r\n private resolvePlugins(config: SliderConfig) {\r\n const runtimePlugins: SliderPlugin[] = [];\r\n\r\n const cfg = config.plugins ?? {}; // <-- safe fallback\r\n\r\n if (cfg.draggable) runtimePlugins.push(this.draggable);\r\n if (cfg.pagination) runtimePlugins.push(this.pagination);\r\n if (cfg.navigation) runtimePlugins.push(this.navigation);\r\n\r\n if (cfg.autoplay) {\r\n this.autoplay.setConfig(cfg.autoplay);\r\n runtimePlugins.push(this.autoplay);\r\n }\r\n\r\n this.engine.init({ ...config, plugins: undefined }, runtimePlugins);\r\n\r\n if (cfg.navigation) {\r\n setTimeout(() => this.navigation?.updateArrows?.());\r\n }\r\n }\r\n}\r\n","<ng-container *ngIf=\"state$ | async as state\">\r\n <div\r\n class=\"slider\"\r\n #sliderHost\r\n [class.slider-vertical]=\"state.vertical\"\r\n [class.slider-draggable]=\"state.isDragging\"\r\n [class.slider--main]=\"!config.isThumbs\"\r\n [class.slider--thumbs]=\"config.isThumbs\"\r\n *ngIf=\"state.visibleSlides?.length > 0 && state.isVisible\"\r\n (pointerdown)=\"onPointerDown($event)\"\r\n (pointermove)=\"onPointerMove($event)\"\r\n (pointerup)=\"onPointerUp($event)\"\r\n (pointercancel)=\"onPointerUp($event)\">\r\n <div\r\n class=\"slider__wrapper\"\r\n [ngStyle]=\"{\r\n transform: state.translate,\r\n transition: draggable.isDraggingPointer ? 'none' : 'transform 0.3s ease',\r\n display: 'flex',\r\n 'flex-direction': state.vertical ? 'column' : 'row',\r\n 'justify-content': state.visibleSlides?.length < state.slidesPerView ? 'center' : 'flex-start',\r\n gap: (state.slidesPerView > 1 ? state.gap || 0 : 0) + 'px',\r\n }\">\r\n <div\r\n *ngFor=\"let slide of state.visibleSlides; let i = index\"\r\n class=\"slide\"\r\n [attr.data-index]=\"i\"\r\n [class.slide--current]=\"state.selectedSlide === i\"\r\n [style.flex]=\"\r\n !config.isThumbs\r\n ? '0 0 calc(' +\r\n 100 / state.slidesPerView +\r\n '% - ' +\r\n ((state.gap || 0) * (state.slidesPerView - 1)) / state.slidesPerView +\r\n 'px)'\r\n : '0 0 ' + thumbSize + 'px'\r\n \"\r\n [style.width]=\"config.isThumbs ? thumbSize + 'px' : null\"\r\n [style.height]=\"config.isThumbs ? thumbSize + 'px' : null\"\r\n (click)=\"engine.selectSlide(i)\">\r\n <ng-container\r\n *ngTemplateOutlet=\"slideTemplate ? slideTemplate : defaultSlideTemplate; context: { slide: slide, index: i }\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-container>\r\n","import { NgModule } from \"@angular/core\";\r\nimport { SimpleSliderComponent } from \"./component/simple-slider.component\";\r\n\r\n@NgModule({\r\n imports: [SimpleSliderComponent],\r\n exports: [SimpleSliderComponent],\r\n})\r\nexport class NgxEdgeSliderModule {}\r\n","import { Pipe, PipeTransform } from \"@angular/core\";\r\nimport { DomSanitizer, SafeResourceUrl } from \"@angular/platform-browser\";\r\n\r\n@Pipe({ name: \"safeUrl\" })\r\nexport class SafeUrlPipe implements PipeTransform {\r\n constructor(private sanitizer: DomSanitizer) {}\r\n\r\n transform(url: string): SafeResourceUrl {\r\n return this.sanitizer.bypassSecurityTrustResourceUrl(url);\r\n }\r\n}\r\n","// components\r\nexport * from \"./lib/component/simple-slider.component\";\r\n\r\n// module\r\nexport * from \"./lib/ngx-edge-slider.module\";\r\n\r\n// engine\r\nexport * from \"./lib/engine/slider-engine.service\";\r\n\r\n// plugins\r\nexport * from \"./lib/plugins/draggable/draggable.plugin\";\r\nexport * from \"./lib/plugins/navigation/navigation.plugin\";\r\nexport * from \"./lib/plugins/pagination/pagination.plugin\";\r\nexport * from \"./lib/plugins/autoplay/autoplay.plugin\";\r\nexport * from \"./lib/plugins/slider-plugin\";\r\n\r\n// models\r\nexport * from \"./lib/models/slider-config.model\";\r\nexport * from \"./lib/models/slider-state.model\";\r\n\r\n// store\r\nexport * from \"./lib/store/slider-store.service\";\r\n\r\n// pipe\r\nexport * from \"./lib/safe-url.pipe\";\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.SliderStore","i1.SliderEngine","i2.SliderStore","i3.SliderDraggablePlugin","i4.SliderPaginationPlugin","i5.SliderNavigationPlugin","i6.SliderAutoplayPlugin"],"mappings":"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"}
1
+ {"version":3,"file":"ngx-edge-slider.mjs","sources":["../../../projects/ngx-edge-slider/src/lib/models/slider-config.model.ts","../../../projects/ngx-edge-slider/src/lib/models/slider-state.model.ts","../../../projects/ngx-edge-slider/src/lib/store/slider-store.service.ts","../../../projects/ngx-edge-slider/src/lib/engine/slider-engine.service.ts","../../../projects/ngx-edge-slider/src/lib/plugins/autoplay/autoplay.plugin.ts","../../../projects/ngx-edge-slider/src/lib/plugins/draggable/draggable.plugin.ts","../../../projects/ngx-edge-slider/src/lib/plugins/navigation/navigation.plugin.ts","../../../projects/ngx-edge-slider/src/lib/plugins/pagination/pagination.plugin.ts","../../../projects/ngx-edge-slider/src/lib/component/simple-slider.component.ts","../../../projects/ngx-edge-slider/src/lib/component/simple-slider.component.html","../../../projects/ngx-edge-slider/src/lib/ngx-edge-slider.module.ts","../../../projects/ngx-edge-slider/src/lib/safe-url.pipe.ts","../../../projects/ngx-edge-slider/src/public-api.ts","../../../projects/ngx-edge-slider/src/ngx-edge-slider.ts"],"sourcesContent":["export interface AutoplayPluginConfig {\r\n delay?: number;\r\n}\r\nexport interface SliderPluginConfig {\r\n draggable?: boolean;\r\n autoplay?: { delay?: number };\r\n navigation?: boolean;\r\n pagination?: boolean;\r\n}\r\nexport interface SliderConfig {\r\n slides: any[];\r\n slidesPerView: number;\r\n slidesToSlide?: number;\r\n loop?: 0 | 1 | 2;\r\n vertical?: boolean;\r\n changeToClickedSlide?: boolean;\r\n isThumbs?: boolean;\r\n\r\n /** NEW: gap between slides in px */\r\n gap?: number;\r\n\r\n breakpoints?: {\r\n mobile?: Partial<SliderConfig>;\r\n tablet?: Partial<SliderConfig>;\r\n desktop?: Partial<SliderConfig>;\r\n };\r\n\r\n plugins?: SliderPluginConfig;\r\n\r\n showOn?: {\r\n mobile?: boolean;\r\n tablet?: boolean;\r\n desktop?: boolean;\r\n };\r\n}\r\n\r\nexport const DEFAULT_CONFIG: SliderConfig = {\r\n slides: [],\r\n slidesPerView: 1,\r\n slidesToSlide: 1,\r\n loop: 0,\r\n vertical: false,\r\n changeToClickedSlide: false,\r\n isThumbs: false,\r\n plugins: {\r\n draggable: false,\r\n pagination: false,\r\n navigation: false,\r\n autoplay: undefined,\r\n },\r\n gap: 0,\r\n\r\n showOn: { mobile: true, tablet: true, desktop: true },\r\n};\r\n","export interface SliderViewState {\r\n currentSlide: number;\r\n selectedSlide: number;\r\n\r\n slidesPerView: number;\r\n visibleSlides: any[];\r\n\r\n gap?: number;\r\n\r\n maxStartIndex?: number;\r\n canPrev?: boolean;\r\n canNext?: boolean;\r\n\r\n pager?: {\r\n currentPage: number;\r\n totalPages: number;\r\n visibleDots: number[];\r\n activeDotIndex: number;\r\n } | null;\r\n\r\n translate?: string;\r\n transition?: string;\r\n\r\n isAnimating?: boolean;\r\n isVisible?: boolean;\r\n isDragging?: boolean;\r\n}\r\n\r\nexport const INITIAL_SLIDER_STATE: SliderViewState = {\r\n currentSlide: 0,\r\n selectedSlide: -1,\r\n\r\n slidesPerView: 1,\r\n visibleSlides: [],\r\n\r\n gap: 0,\r\n maxStartIndex: 0,\r\n canPrev: false,\r\n canNext: false,\r\n\r\n translate: \"translateX(0px)\",\r\n transition: \"transform 300ms ease\",\r\n pager: null,\r\n\r\n isAnimating: false,\r\n isVisible: false,\r\n isDragging: false,\r\n};\r\n","import { Injectable } from \"@angular/core\";\r\nimport { BehaviorSubject } from \"rxjs\";\r\nimport { INITIAL_SLIDER_STATE, SliderViewState } from \"../models/slider-state.model\";\r\n\r\n@Injectable()\r\nexport class SliderStore {\r\n private readonly state$ = new BehaviorSubject<SliderViewState>({\r\n currentSlide: 0,\r\n selectedSlide: -1,\r\n\r\n slidesPerView: 1,\r\n visibleSlides: [],\r\n\r\n translate: \"translateX(0)\",\r\n transition: \"transform 300ms ease\",\r\n pager: null,\r\n isVisible: true,\r\n\r\n isAnimating: false,\r\n isDragging: false,\r\n });\r\n readonly view$ = this.state$.asObservable();\r\n\r\n get snapshot() {\r\n return this.state$.value;\r\n }\r\n\r\n update(patch: Partial<SliderViewState>) {\r\n this.state$.next({ ...this.snapshot, ...patch });\r\n }\r\n\r\n reset() {\r\n this.state$.next(INITIAL_SLIDER_STATE);\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { fromEvent, merge, Subject, auditTime, takeUntil } from \"rxjs\";\r\nimport { SliderConfig, DEFAULT_CONFIG } from \"../models/slider-config.model\";\r\nimport { SliderViewState } from \"../models/slider-state.model\";\r\nimport { SliderPlugin } from \"../plugins/slider-plugin\";\r\nimport { SliderStore } from \"../store/slider-store.service\";\r\n\r\n@Injectable()\r\nexport class SliderEngine {\r\n private config!: SliderConfig;\r\n private plugins: SliderPlugin[] = [];\r\n private syncThumbsEngine?: SliderEngine;\r\n\r\n // RX lifecycle\r\n private destroy$ = new Subject<void>();\r\n\r\n // Container-based breakpoints\r\n private containerEl?: HTMLElement;\r\n private ro?: ResizeObserver;\r\n\r\n private measuredSlideSizePx?: number;\r\n\r\n constructor(private store: SliderStore) {}\r\n\r\n /* ---------------- Public API ---------------- */\r\n\r\n init(config: SliderConfig, plugins: SliderPlugin[] = []) {\r\n this.config = { ...DEFAULT_CONFIG, ...config, plugins: { ...(config.plugins ?? {}) } };\r\n this.plugins = plugins;\r\n\r\n this.plugins.forEach((p) => p.init?.(this));\r\n\r\n this.setupViewportSignals();\r\n this.applyBreakpoint();\r\n this.clampIndicesAfterLayoutChange();\r\n this.recalculate();\r\n }\r\n\r\n /** Call this from the component once you have the slider host element */\r\n attachContainer(el: HTMLElement) {\r\n this.containerEl = el;\r\n\r\n // Observe container size changes (robust in grids/sidebars/tabs)\r\n this.ro?.disconnect();\r\n this.ro = new ResizeObserver(() => {\r\n // We reuse the same debounced layout handler\r\n this.onLayoutSignal();\r\n });\r\n this.ro.observe(el);\r\n\r\n this.measureSlideSize();\r\n // Apply immediately based on real container width\r\n this.onLayoutSignal();\r\n }\r\n private measureSlideSize() {\r\n if (!this.containerEl) return;\r\n const firstSlide = this.containerEl.querySelector<HTMLElement>(\".slide\");\r\n if (!firstSlide) return;\r\n const rect = firstSlide.getBoundingClientRect();\r\n if (rect.width > 0) this.measuredSlideSizePx = rect.width;\r\n }\r\n destroy() {\r\n // Stop Rx streams\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n\r\n // Disconnect ResizeObserver\r\n this.ro?.disconnect();\r\n this.ro = undefined;\r\n this.containerEl = undefined;\r\n\r\n // Plugin cleanup\r\n this.plugins.forEach((p) => p.destroy?.());\r\n this.plugins = [];\r\n\r\n // Reset store\r\n this.store.reset();\r\n }\r\n\r\n next() {\r\n this.goTo(this.store.snapshot.currentSlide + this.slideStep());\r\n this.plugins.forEach((p) => p.onNext?.());\r\n }\r\n\r\n previous() {\r\n this.goTo(this.store.snapshot.currentSlide - this.slideStep());\r\n this.plugins.forEach((p) => p.onPrevious?.());\r\n }\r\n public getContainerEl(): HTMLElement | undefined {\r\n return this.containerEl;\r\n }\r\n selectSlide(index: number) {\r\n const slidesPerView = this.store.snapshot.slidesPerView;\r\n\r\n // 1️⃣ Mark selected\r\n this.store.update({ selectedSlide: index });\r\n\r\n // 2️⃣ Calculate page start\r\n let pageStart = Math.floor(index / slidesPerView) * slidesPerView;\r\n\r\n // 3️⃣ Clamp to maxStartIndex\r\n pageStart = Math.min(pageStart, this.maxStartIndex);\r\n\r\n // 4️⃣ If synced with thumbs, also clamp to their max index\r\n if (this.syncThumbsEngine) {\r\n const thumbMaxIndex = this.syncThumbsEngine.getMaxStartIndex();\r\n pageStart = Math.min(pageStart, thumbMaxIndex);\r\n }\r\n\r\n // 5️⃣ Move main slider\r\n if (pageStart !== this.store.snapshot.currentSlide) {\r\n this.goToSlide(pageStart);\r\n }\r\n\r\n // 6️⃣ Notify plugins\r\n this.plugins.forEach((p) => p.onSlideClick?.(index));\r\n }\r\n\r\n /* ---------------- Drag ---------------- */\r\n\r\n handleDragStart(event: PointerEvent) {\r\n this.store.update({ isDragging: true });\r\n this.plugins.forEach((p) => p.onDragStart?.(event));\r\n }\r\n handleDragMove(event: PointerEvent) {\r\n this.plugins.forEach((p) => p.onDragMove?.(event));\r\n }\r\n handleDragEnd() {\r\n this.store.update({ isDragging: false });\r\n this.plugins.forEach((p) => p.onDragEnd?.());\r\n }\r\n public goTo(index: number) {\r\n this.goToSlide(index); // reuse your existing private method\r\n }\r\n /* ---------------- Internals ---------------- */\r\n\r\n private goToSlide(index: number) {\r\n const clamped = Math.max(0, Math.min(index, this.maxStartIndex));\r\n // console.log(\"[Engine] goToSlide index:\", index, \"clamped:\", clamped);\r\n\r\n this.store.update({ currentSlide: clamped });\r\n this.recalculate();\r\n\r\n // NOTE: calling onSlideClick here is a bit semantically odd (since it’s not always a click),\r\n // but I preserved your behavior.\r\n this.plugins.forEach((p) => p.onSlideClick?.(index));\r\n }\r\n\r\n public recalculate() {\r\n if (this.store.snapshot.isDragging) return; // skip during drag\r\n const slides = this.config.slides ?? [];\r\n const maxStartIndex = this.getMaxStartIndex();\r\n const current = this.store.snapshot.currentSlide;\r\n\r\n this.store.update({\r\n visibleSlides: slides,\r\n translate: this.translate(current),\r\n pager: this.buildPager(),\r\n maxStartIndex,\r\n canPrev: current > 0,\r\n canNext: current < maxStartIndex,\r\n });\r\n }\r\n\r\n private translate(index: number): string {\r\n const axis = this.config.vertical ? \"Y\" : \"X\";\r\n\r\n const containerSize = this.containerEl\r\n ? this.config.vertical\r\n ? this.containerEl.clientHeight\r\n : this.containerEl.clientWidth\r\n : this.config.vertical\r\n ? window.innerHeight\r\n : window.innerWidth;\r\n\r\n const gap = this.store.snapshot.gap ?? 0;\r\n\r\n const spv = this.store.snapshot.slidesPerView;\r\n const slideSize =\r\n this.config.isThumbs && this.measuredSlideSizePx\r\n ? this.measuredSlideSizePx\r\n : spv > 0\r\n ? (containerSize - gap * (spv - 1)) / spv\r\n : containerSize;\r\n\r\n // move by \"pageStart * (slideSize + gap)\"\r\n const offset = index * (slideSize + gap);\r\n\r\n return `translate${axis}(-${offset}px)`;\r\n }\r\n\r\n /** Debounced layout signals for resize/orientation/container changes */\r\n private setupViewportSignals() {\r\n // If you want \"only after resizing stops\", replace auditTime with debounceTime(120)\r\n const resize$ = fromEvent(window, \"resize\", { passive: true } as any);\r\n const orientation$ = fromEvent(window, \"orientationchange\", { passive: true } as any);\r\n\r\n merge(resize$, orientation$)\r\n .pipe(\r\n auditTime(80), // good compromise: responsive without over-recalc\r\n takeUntil(this.destroy$),\r\n )\r\n .subscribe(() => this.onLayoutSignal());\r\n }\r\n\r\n private onLayoutSignal() {\r\n const beforeSlidesPerView = this.store.snapshot.slidesPerView;\r\n const beforeVisible = this.store.snapshot.isVisible;\r\n\r\n this.applyBreakpoint();\r\n\r\n const afterSlidesPerView = this.store.snapshot.slidesPerView;\r\n const afterVisible = this.store.snapshot.isVisible;\r\n\r\n if (beforeSlidesPerView !== afterSlidesPerView || beforeVisible !== afterVisible) {\r\n this.clampIndicesAfterLayoutChange();\r\n }\r\n\r\n this.measureSlideSize();\r\n\r\n this.recalculate();\r\n }\r\n\r\n private getBreakpointWidth(): number {\r\n if (this.containerEl) {\r\n // Prefer clientWidth (layout), fallback to rect width\r\n return this.containerEl.clientWidth || this.containerEl.getBoundingClientRect().width || window.innerWidth;\r\n }\r\n return window.innerWidth;\r\n }\r\n\r\n private applyBreakpoint() {\r\n const width = this.getBreakpointWidth();\r\n const bp = this.config.breakpoints;\r\n\r\n let override: Partial<SliderConfig> | undefined;\r\n let device: \"mobile\" | \"tablet\" | \"desktop\" = \"desktop\";\r\n\r\n if (width < 768) {\r\n override = bp?.mobile;\r\n device = \"mobile\";\r\n } else if (width < 1024) {\r\n override = bp?.tablet;\r\n device = \"tablet\";\r\n } else {\r\n override = bp?.desktop;\r\n device = \"desktop\";\r\n }\r\n\r\n // Merge overrides\r\n this.config = { ...this.config, ...override };\r\n\r\n this.store.update({\r\n slidesPerView: this.config.slidesPerView,\r\n gap: this.config.gap ?? 0, // βœ… NEW\r\n isVisible: this.config.showOn?.[device] ?? true,\r\n });\r\n }\r\n\r\n private clampIndicesAfterLayoutChange() {\r\n const max = this.getMaxStartIndex();\r\n\r\n const current = this.store.snapshot.currentSlide;\r\n const selected = this.store.snapshot.selectedSlide;\r\n\r\n const clampedCurrent = Math.max(0, Math.min(current, max));\r\n const clampedSelected = selected === -1 ? -1 : Math.max(0, Math.min(selected, (this.config.slides?.length ?? 0) - 1));\r\n\r\n this.store.update({\r\n currentSlide: clampedCurrent,\r\n selectedSlide: clampedSelected,\r\n });\r\n }\r\n\r\n private buildPager() {\r\n const totalSlides = this.config.slides.length;\r\n const currentSlide = this.store.snapshot.selectedSlide !== -1 ? this.store.snapshot.selectedSlide : this.store.snapshot.currentSlide;\r\n\r\n const maxVisibleDots = 5;\r\n\r\n let start = Math.max(0, currentSlide - Math.floor(maxVisibleDots / 2));\r\n let end = start + maxVisibleDots;\r\n\r\n if (end > totalSlides) {\r\n end = totalSlides;\r\n start = Math.max(0, end - maxVisibleDots);\r\n }\r\n\r\n const visibleDots = Array.from({ length: end - start }, (_, i) => start + i);\r\n const activeDotIndex = visibleDots.indexOf(currentSlide);\r\n\r\n return {\r\n currentPage: currentSlide,\r\n totalPages: totalSlides,\r\n visibleDots,\r\n activeDotIndex,\r\n };\r\n }\r\n\r\n private slideStep() {\r\n return this.store.snapshot.slidesPerView;\r\n }\r\n\r\n private get maxStartIndex() {\r\n const total = this.config.slides?.length ?? 0;\r\n return Math.max(0, total - this.store.snapshot.slidesPerView);\r\n }\r\n getMaxStartIndex() {\r\n const total = this.config.slides?.length ?? 0;\r\n const spv = this.store.snapshot.slidesPerView || 1;\r\n return Math.max(0, total - spv);\r\n }\r\n /* -------- Plugin-safe API -------- */\r\n\r\n getState() {\r\n return this.store.snapshot;\r\n }\r\n\r\n getStateObservable() {\r\n return this.store.view$;\r\n }\r\n\r\n setState(patch: Partial<SliderViewState>) {\r\n this.store.update(patch);\r\n }\r\n\r\n getConfig() {\r\n return this.config;\r\n }\r\n\r\n /** Link this slider to thumbs */\r\n syncWithThumbs(thumbsEngine: SliderEngine) {\r\n this.syncThumbsEngine = thumbsEngine;\r\n }\r\n\r\n /* -------- Read-only helpers -------- */\r\n\r\n getSlidesPerView(): number {\r\n return this.store.snapshot.slidesPerView;\r\n }\r\n\r\n getCurrentSlide(): number {\r\n return this.store.snapshot.currentSlide;\r\n }\r\n\r\n getSelectedSlide(): number {\r\n return this.store.snapshot.selectedSlide;\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { SliderPlugin } from \"../slider-plugin\";\r\nimport { SliderEngine } from \"../../engine/slider-engine.service\";\r\nimport { AutoplayPluginConfig } from \"../../models/slider-config.model\";\r\n@Injectable()\r\nexport class SliderAutoplayPlugin implements SliderPlugin {\r\n private engine!: SliderEngine;\r\n private timerId: any;\r\n private delay = 4000; // default\r\n\r\n init(engine: SliderEngine) {\r\n this.engine = engine;\r\n this.start();\r\n }\r\n\r\n setConfig(config?: AutoplayPluginConfig) {\r\n if (!config) return;\r\n\r\n if (typeof config.delay === \"number\") {\r\n this.delay = config.delay;\r\n }\r\n\r\n // restart autoplay with new config\r\n this.start();\r\n }\r\n\r\n onDragStart() {\r\n this.stop();\r\n }\r\n\r\n onDragEnd() {\r\n this.start();\r\n }\r\n\r\n private start() {\r\n this.stop();\r\n this.timerId = setInterval(() => {\r\n this.engine.next();\r\n }, this.delay);\r\n }\r\n\r\n private stop() {\r\n if (this.timerId) {\r\n clearInterval(this.timerId);\r\n this.timerId = null;\r\n }\r\n }\r\n\r\n destroy() {\r\n this.stop();\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { SliderPlugin } from \"../slider-plugin\";\r\nimport { SliderEngine } from \"../../engine/slider-engine.service\";\r\n\r\n@Injectable()\r\nexport class SliderDraggablePlugin implements SliderPlugin {\r\n private engine!: SliderEngine;\r\n private startX = 0;\r\n private deltaX = 0;\r\n private hasDragged = false;\r\n private isDragging = false;\r\n private readonly dragThreshold = 50;\r\n\r\n // Expose drag state to template\r\n public get isDraggingPointer(): boolean {\r\n return this.isDragging;\r\n }\r\n\r\n init(engine: SliderEngine) {\r\n this.engine = engine;\r\n }\r\n\r\n onDragStart(event: PointerEvent) {\r\n this.startX = event.clientX;\r\n this.deltaX = 0;\r\n this.hasDragged = false;\r\n this.isDragging = true;\r\n\r\n // Set engine dragging state\r\n this.engine.setState({ isDragging: true });\r\n }\r\n\r\n onDragMove(event: PointerEvent) {\r\n if (!this.isDragging) return;\r\n\r\n const moveX = event.clientX - this.startX;\r\n this.deltaX += moveX;\r\n this.hasDragged = true;\r\n\r\n const currentTranslate = this.extractTranslate(this.engine.getState().translate);\r\n const newTranslate = currentTranslate + moveX;\r\n\r\n this.engine.setState({ translate: `translateX(${newTranslate}px)` });\r\n\r\n this.startX = event.clientX;\r\n }\r\n\r\n onDragEnd() {\r\n if (this.hasDragged) {\r\n if (this.deltaX > this.dragThreshold) {\r\n this.engine.previous();\r\n } else if (this.deltaX < -this.dragThreshold) {\r\n this.engine.next();\r\n } else {\r\n // Small drag β†’ snap back\r\n this.engine.recalculate();\r\n }\r\n }\r\n\r\n this.isDragging = false;\r\n this.hasDragged = false;\r\n this.deltaX = 0;\r\n\r\n this.engine.setState({ isDragging: false });\r\n }\r\n\r\n /** Extract numeric value from 'translateX(-123px)' */\r\n private extractTranslate(transform: string | undefined): number {\r\n if (!transform) return 0;\r\n const match = transform.match(/-?\\d+(\\.\\d+)?/);\r\n return match ? parseFloat(match[0]) : 0;\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { SliderPlugin } from \"../slider-plugin\";\r\nimport { SliderEngine } from \"../../engine/slider-engine.service\";\r\nimport { BehaviorSubject, Subscription } from \"rxjs\";\r\n\r\n@Injectable()\r\nexport class SliderNavigationPlugin implements SliderPlugin {\r\n private engine!: SliderEngine;\r\n\r\n private isPagerMode = false;\r\n\r\n private _canPrev$ = new BehaviorSubject<boolean>(false);\r\n private _canNext$ = new BehaviorSubject<boolean>(false);\r\n\r\n private sub!: Subscription;\r\n\r\n get canPrev$() {\r\n return this._canPrev$.asObservable();\r\n }\r\n get canNext$() {\r\n return this._canNext$.asObservable();\r\n }\r\n\r\n init(engine: SliderEngine, isPagerMode: boolean = false) {\r\n this.engine = engine;\r\n this.isPagerMode = isPagerMode;\r\n\r\n // Subscribe to state changes\r\n this.sub = this.engine.getStateObservable?.()?.subscribe(() => this.updateArrows());\r\n\r\n // βœ… Force initial check after a short delay (to catch async slides)\r\n setTimeout(() => this.updateArrows());\r\n }\r\n\r\n destroy() {\r\n this.sub?.unsubscribe();\r\n }\r\n next() {\r\n if (!this.engine) return;\r\n\r\n if (this.isPagerMode) {\r\n const state = this.engine.getState();\r\n const cfg = this.engine.getConfig();\r\n\r\n const totalSlides = cfg?.slides?.length ?? 0;\r\n const perView = state?.slidesPerView ?? cfg?.slidesPerView ?? 1;\r\n const step = cfg?.slidesToSlide ?? 1;\r\n\r\n const maxIndex = Math.max(0, totalSlides - perView);\r\n const current = state?.currentSlide ?? 0;\r\n\r\n const newIndex = Math.min(maxIndex, current + step);\r\n this.engine.goTo(newIndex);\r\n } else {\r\n this.engine.next();\r\n }\r\n }\r\n\r\n prev() {\r\n if (!this.engine) return;\r\n\r\n if (this.isPagerMode) {\r\n const state = this.engine.getState();\r\n const cfg = this.engine.getConfig();\r\n\r\n const step = cfg?.slidesToSlide ?? 1;\r\n const current = state?.currentSlide ?? 0;\r\n\r\n const newIndex = Math.max(0, current - step);\r\n this.engine.goTo(newIndex);\r\n } else {\r\n this.engine.previous();\r\n }\r\n }\r\n\r\n public updateArrows() {\r\n if (!this.engine) return;\r\n\r\n const state = this.engine.getState();\r\n const cfg = this.engine.getConfig();\r\n const totalSlides = cfg?.slides?.length ?? 0;\r\n const perView = state?.slidesPerView ?? 1;\r\n\r\n const canPrev = totalSlides > 0 && (state?.currentSlide ?? 0) > 0;\r\n const canNext = totalSlides > 0 && (state?.currentSlide ?? 0) < Math.max(0, totalSlides - perView);\r\n\r\n if (this._canPrev$.value !== canPrev) this._canPrev$.next(canPrev);\r\n if (this._canNext$.value !== canNext) this._canNext$.next(canNext);\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { Pager, SliderPlugin } from \"../slider-plugin\";\r\nimport { SliderEngine } from \"../../engine/slider-engine.service\";\r\nimport { BehaviorSubject, Subscription } from \"rxjs\";\r\n\r\n@Injectable()\r\nexport class SliderPaginationPlugin implements SliderPlugin {\r\n private engine!: SliderEngine;\r\n private maxVisibleDots = 10;\r\n private sub!: Subscription;\r\n\r\n private _pager$ = new BehaviorSubject<Pager | null>(null);\r\n public pager$ = this._pager$.asObservable();\r\n\r\n init(engine: SliderEngine) {\r\n this.engine = engine;\r\n\r\n this.sub = this.engine.getStateObservable().subscribe(() => {\r\n this.updatePager();\r\n });\r\n\r\n // initial\r\n setTimeout(() => this.updatePager());\r\n }\r\n\r\n destroy() {\r\n this.sub?.unsubscribe();\r\n this._pager$.next(null);\r\n }\r\n\r\n /** Go to a slide by slide index (NOT dot index) */\r\n goToSlide(slideIndex: number) {\r\n this.engine.selectSlide(slideIndex);\r\n }\r\n\r\n private updatePager() {\r\n const state = this.engine.getState();\r\n const totalSlides = state.visibleSlides?.length ?? 0;\r\n if (totalSlides <= 0) {\r\n this._pager$.next(null);\r\n return;\r\n }\r\n\r\n // βœ… important: selectedSlide is -1 initially; fallback to currentSlide\r\n const current = state.selectedSlide !== -1 ? state.selectedSlide : state.currentSlide;\r\n\r\n const maxDots = Math.max(1, this.maxVisibleDots);\r\n\r\n // βœ… clamp to >= 0\r\n const safeCurrent = Math.max(0, Math.min(current, totalSlides - 1));\r\n\r\n const pageStart = Math.max(0, Math.floor(safeCurrent / maxDots) * maxDots);\r\n const pageEnd = Math.min(pageStart + maxDots, totalSlides);\r\n\r\n const visibleDots = Array.from({ length: pageEnd - pageStart }, (_, i) => pageStart + i);\r\n\r\n const activeDotIndex = visibleDots.indexOf(safeCurrent);\r\n\r\n this._pager$.next({ visibleDots, activeDotIndex });\r\n }\r\n}\r\n","import {\r\n Component,\r\n ChangeDetectionStrategy,\r\n OnInit,\r\n TemplateRef,\r\n Input,\r\n EventEmitter,\r\n Output,\r\n SimpleChanges,\r\n OnChanges,\r\n OnDestroy,\r\n ViewChild,\r\n ElementRef,\r\n AfterViewInit,\r\n ViewEncapsulation,\r\n} from \"@angular/core\";\r\nimport { SliderViewState } from \"../models/slider-state.model\";\r\nimport { Observable, Subject, takeUntil } from \"rxjs\";\r\nimport { SliderConfig } from \"../models/slider-config.model\";\r\nimport { SliderEngine } from \"../engine/slider-engine.service\";\r\nimport { SliderStore } from \"../store/slider-store.service\";\r\nimport { SliderAutoplayPlugin } from \"../plugins/autoplay/autoplay.plugin\";\r\nimport { SliderDraggablePlugin } from \"../plugins/draggable/draggable.plugin\";\r\nimport { SliderNavigationPlugin } from \"../plugins/navigation/navigation.plugin\";\r\nimport { SliderPaginationPlugin } from \"../plugins/pagination/pagination.plugin\";\r\nimport { Pager, SliderPlugin } from \"../plugins/slider-plugin\";\r\nimport { CommonModule } from \"@angular/common\";\r\n\r\n@Component({\r\n selector: \"app-simple-slider\",\r\n templateUrl: \"./simple-slider.component.html\",\r\n styleUrl: \"./simple-slider.component.scss\",\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n standalone: true,\r\n imports: [CommonModule],\r\n providers: [SliderEngine, SliderStore, SliderDraggablePlugin, SliderPaginationPlugin, SliderNavigationPlugin, SliderAutoplayPlugin],\r\n})\r\nexport class SimpleSliderComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy {\r\n @Input() config!: SliderConfig;\r\n @Input() slideTemplate?: TemplateRef<any>;\r\n @Input() navigationTemplate?: TemplateRef<any>;\r\n @Input() paginationTemplate?: TemplateRef<any>;\r\n @Output() slideChange = new EventEmitter<number>();\r\n\r\n private isDraggingPointer = false;\r\n private dragStartX = 0;\r\n private dragStartY = 0;\r\n private lastIndex = -1;\r\n private lastSlidesRef: any[] | null = null;\r\n private destroy$ = new Subject<void>();\r\n\r\n state$!: Observable<SliderViewState>;\r\n @ViewChild(\"sliderHost\", { static: false }) sliderHost?: ElementRef<HTMLElement>;\r\n\r\n constructor(\r\n private engine: SliderEngine,\r\n private store: SliderStore,\r\n private draggable: SliderDraggablePlugin,\r\n private pagination: SliderPaginationPlugin,\r\n private navigation: SliderNavigationPlugin,\r\n private autoplay: SliderAutoplayPlugin,\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.state$ = this.store.view$;\r\n\r\n this.state$.pipe(takeUntil(this.destroy$)).subscribe((state) => {\r\n if (state.currentSlide !== this.lastIndex) {\r\n this.lastIndex = state.currentSlide;\r\n this.slideChange.emit(state.currentSlide);\r\n }\r\n });\r\n this.lastSlidesRef = this.config?.slides ?? null;\r\n this.resolvePlugins(this.config);\r\n }\r\n ngAfterViewInit() {\r\n if (this.sliderHost?.nativeElement) {\r\n this.engine.attachContainer(this.sliderHost.nativeElement);\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (!changes[\"config\"] || !this.config) return;\r\n\r\n const newSlidesRef = this.config.slides ?? null;\r\n\r\n if (newSlidesRef !== this.lastSlidesRef) {\r\n this.lastSlidesRef = newSlidesRef;\r\n this.engine.destroy();\r\n this.resolvePlugins(this.config);\r\n }\r\n }\r\n ngOnDestroy() {\r\n this.destroySlider();\r\n }\r\n\r\n public goTo(index: number) {\r\n this.engine.selectSlide(index); // add this line\r\n //this.slideChange.emit(index);\r\n }\r\n\r\n destroySlider() {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n this.engine.destroy();\r\n } // destroys plugins and clears store\r\n\r\n onNext() {\r\n this.engine.next();\r\n }\r\n onPrevious() {\r\n this.engine.previous();\r\n }\r\n selectSlide(index: number) {\r\n this.engine.selectSlide(index);\r\n }\r\n onRecalculate() {\r\n this.engine.recalculate();\r\n }\r\n // Navigation\r\n /** Expose navigation observables safely */\r\n get canPrev$(): Observable<boolean> | null {\r\n if (!this.navigation) {\r\n console.warn(\"Navigation plugin is not enabled.\");\r\n return null;\r\n }\r\n return this.navigation.canPrev$;\r\n }\r\n\r\n get canNext$(): Observable<boolean> | null {\r\n if (!this.navigation) {\r\n console.warn(\"Navigation plugin is not enabled.\");\r\n return null;\r\n }\r\n return this.navigation.canNext$;\r\n }\r\n\r\n /** Expose next/prev methods */\r\n public next() {\r\n this.navigation?.next();\r\n }\r\n\r\n public prev() {\r\n this.navigation?.prev();\r\n }\r\n\r\n /** Expose pagination observable */\r\n get pager$(): Observable<Pager | null> | null {\r\n if (!this.pagination) {\r\n console.warn(\"Pagination plugin is not enabled for this slider.\");\r\n return null;\r\n }\r\n return this.pagination.pager$;\r\n }\r\n\r\n /** Expose a goToSlide method */\r\n public goToSlide(index: number) {\r\n this.pagination.goToSlide(index);\r\n }\r\n\r\n // Handle Pointers\r\n\r\n onPointerDown(event: PointerEvent) {\r\n // Only start drag if not clicking a nav button\r\n if ((event.target as HTMLElement).closest(\".nav-btn\")) {\r\n return; // ignore\r\n }\r\n this.dragStartX = event.clientX;\r\n this.dragStartY = event.clientY;\r\n this.isDraggingPointer = false;\r\n\r\n // Do not capture yet; wait until movement exceeds threshold\r\n this.engine.handleDragStart(event);\r\n }\r\n\r\n onPointerMove(event: PointerEvent) {\r\n const dx = Math.abs(event.clientX - this.dragStartX);\r\n const dy = Math.abs(event.clientY - this.dragStartY);\r\n\r\n if (!this.isDraggingPointer && (dx > 5 || dy > 5)) {\r\n this.isDraggingPointer = true;\r\n\r\n // Now start capturing pointer so dragging works outside the slider bounds\r\n (event.currentTarget as HTMLElement).setPointerCapture(event.pointerId);\r\n }\r\n\r\n if (this.isDraggingPointer) {\r\n this.engine.handleDragMove(event);\r\n }\r\n }\r\n\r\n onPointerUp(event: PointerEvent) {\r\n if (!event) return;\r\n\r\n if (!this.isDraggingPointer) {\r\n const target = event.target as HTMLElement;\r\n\r\n // Only select the slide if click is not on an interactive child\r\n const slideEl = target.closest(\".slide\");\r\n if (slideEl && !target.closest(\"button, video, a\")) {\r\n const indexAttr = slideEl.getAttribute(\"data-index\");\r\n const index = indexAttr ? parseInt(indexAttr, 10) : null;\r\n if (index !== null) this.engine.selectSlide(index);\r\n }\r\n }\r\n\r\n this.engine.handleDragEnd();\r\n this.isDraggingPointer = false;\r\n\r\n // Release pointer capture if it was captured\r\n try {\r\n (event.currentTarget as HTMLElement).releasePointerCapture(event.pointerId);\r\n } catch {}\r\n }\r\n\r\n private resolvePlugins(config: SliderConfig) {\r\n const runtimePlugins: SliderPlugin[] = [];\r\n\r\n const cfg = config.plugins ?? {}; // <-- safe fallback\r\n\r\n if (cfg.draggable) runtimePlugins.push(this.draggable);\r\n if (cfg.pagination) runtimePlugins.push(this.pagination);\r\n if (cfg.navigation) runtimePlugins.push(this.navigation);\r\n\r\n if (cfg.autoplay) {\r\n this.autoplay.setConfig(cfg.autoplay);\r\n runtimePlugins.push(this.autoplay);\r\n }\r\n\r\n this.engine.init({ ...config, plugins: undefined }, runtimePlugins);\r\n\r\n if (cfg.navigation) {\r\n setTimeout(() => this.navigation?.updateArrows?.());\r\n }\r\n }\r\n}\r\n","<ng-container *ngIf=\"state$ | async as state\">\r\n <div\r\n class=\"slider\"\r\n #sliderHost\r\n [class.slider-vertical]=\"state.vertical\"\r\n [class.slider-draggable]=\"state.isDragging\"\r\n [class.slider--main]=\"!config.isThumbs\"\r\n [class.slider--thumbs]=\"config.isThumbs\"\r\n *ngIf=\"state.visibleSlides?.length > 0 && state.isVisible\"\r\n (pointerdown)=\"onPointerDown($event)\"\r\n (pointermove)=\"onPointerMove($event)\"\r\n (pointerup)=\"onPointerUp($event)\"\r\n (pointercancel)=\"onPointerUp($event)\">\r\n <div\r\n class=\"slider__wrapper\"\r\n [ngStyle]=\"{\r\n transform: state.translate,\r\n transition: draggable.isDraggingPointer ? 'none' : 'transform 0.3s ease',\r\n display: 'flex',\r\n 'flex-direction': state.vertical ? 'column' : 'row',\r\n 'justify-content': state.visibleSlides?.length < state.slidesPerView ? 'center' : 'flex-start',\r\n gap: (state.slidesPerView > 1 ? state.gap || 0 : 0) + 'px',\r\n }\">\r\n <div\r\n *ngFor=\"let slide of state.visibleSlides; let i = index\"\r\n class=\"slide\"\r\n [attr.data-index]=\"i\"\r\n [class.slide--current]=\"state.selectedSlide === i\"\r\n [style.flex]=\"\r\n !config.isThumbs\r\n ? '0 0 calc(' +\r\n 100 / state.slidesPerView +\r\n '% - ' +\r\n ((state.gap || 0) * (state.slidesPerView - 1)) / state.slidesPerView +\r\n 'px)'\r\n : '0 0 ' + thumbSize + 'px'\r\n \"\r\n [style.width]=\"config.isThumbs ? thumbSize + 'px' : null\"\r\n [style.height]=\"config.isThumbs ? thumbSize + 'px' : null\"\r\n (click)=\"engine.selectSlide(i)\">\r\n <ng-container\r\n *ngTemplateOutlet=\"slideTemplate ? slideTemplate : defaultSlideTemplate; context: { slide: slide, index: i }\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-container>\r\n","import { NgModule } from \"@angular/core\";\r\nimport { SimpleSliderComponent } from \"./component/simple-slider.component\";\r\n\r\n@NgModule({\r\n imports: [SimpleSliderComponent],\r\n exports: [SimpleSliderComponent],\r\n})\r\nexport class NgxEdgeSliderModule {}\r\n","import { Pipe, PipeTransform } from \"@angular/core\";\r\nimport { DomSanitizer, SafeResourceUrl } from \"@angular/platform-browser\";\r\n\r\n@Pipe({ name: \"safeUrl\" })\r\nexport class SafeUrlPipe implements PipeTransform {\r\n constructor(private sanitizer: DomSanitizer) {}\r\n\r\n transform(url: string): SafeResourceUrl {\r\n return this.sanitizer.bypassSecurityTrustResourceUrl(url);\r\n }\r\n}\r\n","// components\r\nexport * from \"./lib/component/simple-slider.component\";\r\n\r\n// module\r\nexport * from \"./lib/ngx-edge-slider.module\";\r\n\r\n// engine\r\nexport * from \"./lib/engine/slider-engine.service\";\r\n\r\n// plugins\r\nexport * from \"./lib/plugins/draggable/draggable.plugin\";\r\nexport * from \"./lib/plugins/navigation/navigation.plugin\";\r\nexport * from \"./lib/plugins/pagination/pagination.plugin\";\r\nexport * from \"./lib/plugins/autoplay/autoplay.plugin\";\r\nexport * from \"./lib/plugins/slider-plugin\";\r\n\r\n// models\r\nexport * from \"./lib/models/slider-config.model\";\r\nexport * from \"./lib/models/slider-state.model\";\r\n\r\n// store\r\nexport * from \"./lib/store/slider-store.service\";\r\n\r\n// pipe\r\nexport * from \"./lib/safe-url.pipe\";\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.SliderStore","i1.SliderEngine","i2.SliderStore","i3.SliderDraggablePlugin","i4.SliderPaginationPlugin","i5.SliderNavigationPlugin","i6.SliderAutoplayPlugin"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ngx-edge-slider",
3
- "version": "2.1.5",
3
+ "version": "2.1.7",
4
4
  "peerDependencies": {
5
5
  "@angular/common": ">=18.0.0",
6
6
  "@angular/core": ">=18.0.0",