@mintplayer/ng-swiper 21.0.0 → 21.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,33 +1,26 @@
1
1
  import { isPlatformServer } from '@angular/common';
2
2
  import * as i0 from '@angular/core';
3
- import { PLATFORM_ID, Inject, Directive } from '@angular/core';
4
- import { map, BehaviorSubject } from 'rxjs';
3
+ import { inject, ElementRef, PLATFORM_ID, NgZone, signal, computed, Directive } from '@angular/core';
5
4
 
6
5
  class BsObserveSizeDirective {
7
- element;
8
- platformId;
9
- zone;
10
- constructor(element, platformId, zone) {
11
- this.element = element;
12
- this.platformId = platformId;
13
- this.zone = zone;
6
+ element = inject(ElementRef);
7
+ platformId = inject(PLATFORM_ID);
8
+ zone = inject(NgZone);
9
+ observer;
10
+ constructor() {
14
11
  if (!isPlatformServer(this.platformId) && typeof ResizeObserver !== 'undefined') {
15
12
  this.observer = new ResizeObserver((entries) => {
16
- // console.log('resized', entries[0].contentRect);
17
- this.zone.run(() => this.size$.next(entries[0].contentRect));
13
+ this.zone.run(() => this.size.set(entries[0].contentRect));
18
14
  });
19
15
  }
20
- this.width$ = this.size$.pipe(map(size => size?.width));
21
- this.height$ = this.size$.pipe(map(size => size?.height));
22
16
  }
23
- observer;
24
- size$ = new BehaviorSubject(undefined);
25
- width$;
26
- height$;
17
+ size = signal(undefined, ...(ngDevMode ? [{ debugName: "size" }] : []));
18
+ width = computed(() => this.size()?.width, ...(ngDevMode ? [{ debugName: "width" }] : []));
19
+ height = computed(() => this.size()?.height, ...(ngDevMode ? [{ debugName: "height" }] : []));
27
20
  ngAfterViewInit() {
28
21
  const el = this.element.nativeElement;
29
22
  this.observer?.observe(el);
30
- this.size$.next({ width: el.clientWidth, height: el.clientHeight });
23
+ this.size.set({ width: el.clientWidth, height: el.clientHeight });
31
24
  }
32
25
  ngOnDestroy() {
33
26
  if (this.observer) {
@@ -35,7 +28,7 @@ class BsObserveSizeDirective {
35
28
  this.observer.disconnect();
36
29
  }
37
30
  }
38
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: BsObserveSizeDirective, deps: [{ token: i0.ElementRef }, { token: PLATFORM_ID }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });
31
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: BsObserveSizeDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
39
32
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.0.6", type: BsObserveSizeDirective, isStandalone: true, selector: "[bsObserveSize]", exportAs: ["bsObserveSize"], ngImport: i0 });
40
33
  }
41
34
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: BsObserveSizeDirective, decorators: [{
@@ -45,10 +38,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
45
38
  standalone: true,
46
39
  exportAs: 'bsObserveSize'
47
40
  }]
48
- }], ctorParameters: () => [{ type: i0.ElementRef }, { type: undefined, decorators: [{
49
- type: Inject,
50
- args: [PLATFORM_ID]
51
- }] }, { type: i0.NgZone }] });
41
+ }], ctorParameters: () => [] });
52
42
 
53
43
  /**
54
44
  * Generated bundle index. Do not edit.
@@ -1 +1 @@
1
- {"version":3,"file":"mintplayer-ng-swiper-observe-size.mjs","sources":["../../../../libs/mintplayer-ng-swiper/observe-size/src/observe-size.directive.ts","../../../../libs/mintplayer-ng-swiper/observe-size/mintplayer-ng-swiper-observe-size.ts"],"sourcesContent":["import { isPlatformServer } from '@angular/common';\r\nimport { AfterViewInit, Directive, ElementRef, Inject, NgZone, OnDestroy, PLATFORM_ID } from '@angular/core';\r\nimport { BehaviorSubject, Observable, Subject, map } from 'rxjs';\r\nimport { Size } from './size';\r\n\r\n@Directive({\r\n selector: '[bsObserveSize]',\r\n standalone: true,\r\n exportAs: 'bsObserveSize'\r\n})\r\nexport class BsObserveSizeDirective implements AfterViewInit, OnDestroy {\r\n constructor(private element: ElementRef, @Inject(PLATFORM_ID) private platformId: any, private zone: NgZone) {\r\n if (!isPlatformServer(this.platformId) && typeof ResizeObserver !== 'undefined') {\n this.observer = new ResizeObserver((entries) => {\n // console.log('resized', entries[0].contentRect);\n this.zone.run(() => this.size$.next(entries[0].contentRect));\n });\n }\n\r\n this.width$ = this.size$.pipe(map(size => size?.width));\r\n this.height$ = this.size$.pipe(map(size => size?.height));\r\n }\r\n\r\n private observer?: ResizeObserver;\r\n size$ = new BehaviorSubject<Size | undefined>(undefined);\r\n width$: Observable<number | undefined>;\r\n height$: Observable<number | undefined>;\r\n\r\n ngAfterViewInit() {\r\n const el: HTMLElement = this.element.nativeElement;\r\n this.observer?.observe(el);\n this.size$.next({ width: el.clientWidth, height: el.clientHeight });\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.observer) {\r\n this.observer.unobserve(this.element.nativeElement);\r\n this.observer.disconnect();\r\n }\r\n }\r\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;MAUa,sBAAsB,CAAA;AACb,IAAA,OAAA;AAAkD,IAAA,UAAA;AAAyB,IAAA,IAAA;AAA/F,IAAA,WAAA,CAAoB,OAAmB,EAA+B,UAAe,EAAU,IAAY,EAAA;QAAvF,IAAA,CAAA,OAAO,GAAP,OAAO;QAA2C,IAAA,CAAA,UAAU,GAAV,UAAU;QAAe,IAAA,CAAA,IAAI,GAAJ,IAAI;AACjG,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,OAAO,cAAc,KAAK,WAAW,EAAE;YAC/E,IAAI,CAAC,QAAQ,GAAG,IAAI,cAAc,CAAC,CAAC,OAAO,KAAI;;gBAE7C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;AAC9D,YAAA,CAAC,CAAC;QACJ;QAEA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,EAAE,KAAK,CAAC,CAAC;QACvD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,EAAE,MAAM,CAAC,CAAC;IAC3D;AAEQ,IAAA,QAAQ;AAChB,IAAA,KAAK,GAAG,IAAI,eAAe,CAAmB,SAAS,CAAC;AACxD,IAAA,MAAM;AACN,IAAA,OAAO;IAEP,eAAe,GAAA;AACb,QAAA,MAAM,EAAE,GAAgB,IAAI,CAAC,OAAO,CAAC,aAAa;AAClD,QAAA,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC;AAC1B,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,CAAC,YAAY,EAAE,CAAC;IACrE;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;AACnD,YAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;QAC5B;IACF;AA7BW,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,4CACgB,WAAW,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FADjD,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBALlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE;AACX,iBAAA;;0BAE2C,MAAM;2BAAC,WAAW;;;ACX9D;;AAEG;;;;"}
1
+ {"version":3,"file":"mintplayer-ng-swiper-observe-size.mjs","sources":["../../../../libs/mintplayer-ng-swiper/observe-size/src/observe-size.directive.ts","../../../../libs/mintplayer-ng-swiper/observe-size/mintplayer-ng-swiper-observe-size.ts"],"sourcesContent":["import { isPlatformServer } from '@angular/common';\r\nimport { AfterViewInit, computed, Directive, ElementRef, inject, NgZone, OnDestroy, PLATFORM_ID, signal } from '@angular/core';\r\nimport { Size } from './size';\r\n\r\n@Directive({\r\n selector: '[bsObserveSize]',\r\n standalone: true,\r\n exportAs: 'bsObserveSize'\r\n})\r\nexport class BsObserveSizeDirective implements AfterViewInit, OnDestroy {\r\n private element = inject(ElementRef);\r\n private platformId = inject(PLATFORM_ID);\r\n private zone = inject(NgZone);\r\n\r\n private observer?: ResizeObserver;\r\n\r\n constructor() {\r\n if (!isPlatformServer(this.platformId) && typeof ResizeObserver !== 'undefined') {\r\n this.observer = new ResizeObserver((entries) => {\r\n this.zone.run(() => this.size.set(entries[0].contentRect));\r\n });\r\n }\r\n }\r\n\r\n size = signal<Size | undefined>(undefined);\r\n width = computed(() => this.size()?.width);\r\n height = computed(() => this.size()?.height);\r\n\r\n ngAfterViewInit() {\r\n const el: HTMLElement = this.element.nativeElement;\r\n this.observer?.observe(el);\r\n this.size.set({ width: el.clientWidth, height: el.clientHeight });\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.observer) {\r\n this.observer.unobserve(this.element.nativeElement);\r\n this.observer.disconnect();\r\n }\r\n }\r\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;MASa,sBAAsB,CAAA;AACzB,IAAA,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC;AAC5B,IAAA,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC;AAChC,IAAA,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;AAErB,IAAA,QAAQ;AAEhB,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,OAAO,cAAc,KAAK,WAAW,EAAE;YAC/E,IAAI,CAAC,QAAQ,GAAG,IAAI,cAAc,CAAC,CAAC,OAAO,KAAI;gBAC7C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;AAC5D,YAAA,CAAC,CAAC;QACJ;IACF;AAEA,IAAA,IAAI,GAAG,MAAM,CAAmB,SAAS,gDAAC;AAC1C,IAAA,KAAK,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,iDAAC;AAC1C,IAAA,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,kDAAC;IAE5C,eAAe,GAAA;AACb,QAAA,MAAM,EAAE,GAAgB,IAAI,CAAC,OAAO,CAAC,aAAa;AAClD,QAAA,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC;AAC1B,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,CAAC,YAAY,EAAE,CAAC;IACnE;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;AACnD,YAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;QAC5B;IACF;uGA9BW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBALlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE;AACX,iBAAA;;;ACRD;;AAEG;;;;"}
@@ -1,212 +1,231 @@
1
1
  import * as i0 from '@angular/core';
2
- import { EventEmitter, Output, Input, forwardRef, ContentChildren, HostBinding, Inject, Directive, input, HostListener, NgModule } from '@angular/core';
3
- import * as i2 from '@mintplayer/ng-swiper/observe-size';
2
+ import { inject, ElementRef, input, model, output, signal, computed, effect, forwardRef, ContentChildren, HostBinding, Directive, HostListener, NgModule } from '@angular/core';
3
+ import * as i1 from '@mintplayer/ng-swiper/observe-size';
4
4
  import { BsObserveSizeDirective } from '@mintplayer/ng-swiper/observe-size';
5
- import { combineLatest, map, delay, filter, mergeMap, shareReplay, debounceTime, distinctUntilChanged, BehaviorSubject, take } from 'rxjs';
6
- import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
7
- import { DOCUMENT, CommonModule } from '@angular/common';
8
- import * as i1 from '@angular/animations';
9
- import { style, animate } from '@angular/animations';
5
+ import { DOCUMENT } from '@angular/common';
6
+ import { AnimationBuilder, style, animate } from '@angular/animations';
10
7
 
11
8
  class BsSwipeContainerDirective {
12
- animationBuilder;
13
- destroy;
14
- observeSize;
15
- constructor(element, animationBuilder, destroy, document, observeSize) {
16
- this.animationBuilder = animationBuilder;
17
- this.destroy = destroy;
18
- this.observeSize = observeSize;
19
- this.containerElement = element;
20
- this.document = document;
21
- this.offset$ = combineLatest([
22
- this.startTouch$,
23
- this.lastTouch$,
24
- this.imageIndex$,
25
- this.isViewInited$,
26
- this.orientation$,
27
- this.observeSize.size$,
28
- ])
29
- .pipe(map(([startTouch, lastTouch, imageIndex, isViewInited, orientation, containerSize]) => {
30
- if (!isViewInited) {
9
+ animationBuilder = inject(AnimationBuilder);
10
+ observeSize = inject(BsObserveSizeDirective);
11
+ containerElement = inject((ElementRef));
12
+ document = inject(DOCUMENT);
13
+ offsetLeft = null;
14
+ offsetRight = null;
15
+ offsetTopPx = null;
16
+ offsetBottomPx = null;
17
+ set swipes(value) {
18
+ setTimeout(() => this._swipes.set(value));
19
+ }
20
+ minimumOffset = input(50, ...(ngDevMode ? [{ debugName: "minimumOffset" }] : []));
21
+ animation = input('slide', ...(ngDevMode ? [{ debugName: "animation" }] : []));
22
+ orientation = input('horizontal', ...(ngDevMode ? [{ debugName: "orientation" }] : []));
23
+ imageIndex = model(0, ...(ngDevMode ? [{ debugName: "imageIndex" }] : []));
24
+ animationStart = output();
25
+ animationEnd = output();
26
+ isViewInited = signal(false, ...(ngDevMode ? [{ debugName: "isViewInited" }] : []));
27
+ isAnimating = signal(false, ...(ngDevMode ? [{ debugName: "isAnimating" }] : []));
28
+ isDestroyed = false;
29
+ startTouch = signal(null, ...(ngDevMode ? [{ debugName: "startTouch" }] : []));
30
+ lastTouch = signal(null, ...(ngDevMode ? [{ debugName: "lastTouch" }] : []));
31
+ _swipes = signal(null, ...(ngDevMode ? [{ debugName: "_swipes" }] : []));
32
+ pendingAnimation;
33
+ // Computed signals for derived state
34
+ offset = computed(() => {
35
+ const startTouch = this.startTouch();
36
+ const lastTouch = this.lastTouch();
37
+ const imageIndex = this.imageIndex();
38
+ const isViewInited = this.isViewInited();
39
+ const orientation = this.orientation();
40
+ const containerSize = this.observeSize.size();
41
+ const maxSlideHeight = this.maxSlideHeight();
42
+ if (!isViewInited) {
43
+ return (-imageIndex * 100);
44
+ }
45
+ else if (!!startTouch && !!lastTouch) {
46
+ // For horizontal: use container width
47
+ // For vertical: use maxSlideHeight (single slide height, not total container height)
48
+ const containerLength = orientation === 'horizontal'
49
+ ? (containerSize?.width ?? this.containerElement.nativeElement.clientWidth)
50
+ : maxSlideHeight;
51
+ if (containerLength === 0) {
31
52
  return (-imageIndex * 100);
32
53
  }
33
- else if (!!startTouch && !!lastTouch) {
34
- const containerLength = orientation === 'horizontal'
35
- ? (containerSize?.width ?? this.containerElement.nativeElement.clientWidth)
36
- : (containerSize?.height ?? this.containerElement.nativeElement.clientHeight);
37
- if (containerLength === 0) {
38
- return (-imageIndex * 100);
39
- }
40
- const delta = orientation === 'horizontal'
41
- ? (lastTouch.position.x - startTouch.position.x)
42
- : (lastTouch.position.y - startTouch.position.y);
43
- return (-imageIndex * 100 + (delta / containerLength) * 100);
54
+ const delta = orientation === 'horizontal'
55
+ ? (lastTouch.position.x - startTouch.position.x)
56
+ : (lastTouch.position.y - startTouch.position.y);
57
+ return (-imageIndex * 100 + (delta / containerLength) * 100);
58
+ }
59
+ else {
60
+ return (-imageIndex * 100);
61
+ }
62
+ }, ...(ngDevMode ? [{ debugName: "offset" }] : []));
63
+ padLeft = computed(() => {
64
+ const swipes = this._swipes();
65
+ if (!swipes)
66
+ return 0;
67
+ let count = 0;
68
+ for (const s of swipes) {
69
+ if (!s.offside()) {
70
+ break;
44
71
  }
45
72
  else {
46
- return (-imageIndex * 100);
73
+ count++;
47
74
  }
48
- }));
49
- this.padLeft$ = this.swipes$.pipe(map(swipes => {
50
- if (!swipes) {
51
- return 0;
52
- }
53
- let count = 0;
54
- for (const s of swipes) {
55
- if (!s.offside()) {
56
- break;
57
- }
58
- else {
59
- count++;
60
- }
75
+ }
76
+ return count;
77
+ }, ...(ngDevMode ? [{ debugName: "padLeft" }] : []));
78
+ padRight = computed(() => {
79
+ const swipes = this._swipes();
80
+ if (!swipes)
81
+ return 0;
82
+ let count = 0;
83
+ for (const s of swipes.toArray().reverse()) {
84
+ if (!s.offside()) {
85
+ break;
61
86
  }
62
- return count;
63
- }));
64
- this.padRight$ = this.swipes$.pipe(map(swipes => {
65
- if (!swipes) {
66
- return 0;
87
+ else {
88
+ count++;
67
89
  }
68
- let count = 0;
69
- for (const s of swipes.toArray().reverse()) {
70
- if (!s.offside()) {
71
- break;
72
- }
73
- else {
74
- count++;
75
- }
90
+ }
91
+ return count;
92
+ }, ...(ngDevMode ? [{ debugName: "padRight" }] : []));
93
+ offsetPrimary = computed(() => this.offset() - this.padLeft() * 100, ...(ngDevMode ? [{ debugName: "offsetPrimary" }] : []));
94
+ offsetSecondary = computed(() => -(this.offset() - this.padLeft() * 100) - (this.padRight() - 1) * 100, ...(ngDevMode ? [{ debugName: "offsetSecondary" }] : []));
95
+ actualSwipes = computed(() => {
96
+ const swipes = this._swipes();
97
+ if (swipes) {
98
+ return swipes.filter(swipe => !swipe.offside());
99
+ }
100
+ else {
101
+ return [];
102
+ }
103
+ }, ...(ngDevMode ? [{ debugName: "actualSwipes" }] : []));
104
+ // Computed signal that reactively tracks all swipe sizes
105
+ slideSizes = computed(() => {
106
+ const actualSwipes = this.actualSwipes();
107
+ if (!actualSwipes || actualSwipes.length === 0) {
108
+ return [];
109
+ }
110
+ // Reading each swipe's size() creates reactive dependencies
111
+ return actualSwipes.map(swipe => swipe.observeSize.size());
112
+ }, ...(ngDevMode ? [{ debugName: "slideSizes" }] : []));
113
+ maxSlideHeight = computed(() => {
114
+ const slideSizes = this.slideSizes();
115
+ const heights = slideSizes.map(s => s?.height ?? 1);
116
+ return heights.length ? Math.max(...heights) : 1;
117
+ }, ...(ngDevMode ? [{ debugName: "maxSlideHeight" }] : []));
118
+ currentSlideHeight = computed(() => {
119
+ const slideSizes = this.slideSizes();
120
+ const imageIndex = this.imageIndex();
121
+ const orientation = this.orientation();
122
+ const heights = slideSizes.map(s => s?.height ?? 0);
123
+ const maxHeight = heights.length ? Math.max(...heights) : 0;
124
+ const currHeight = slideSizes[imageIndex]?.height ?? maxHeight;
125
+ const result = (orientation === 'vertical') ? maxHeight : currHeight;
126
+ // Return null if measurements aren't valid yet to avoid collapsing the carousel
127
+ return result > 10 ? result : null;
128
+ }, ...(ngDevMode ? [{ debugName: "currentSlideHeight" }] : []));
129
+ constructor() {
130
+ // Effect to update offsetLeft/offsetTopPx based on offsetPrimary and orientation
131
+ effect(() => {
132
+ const offsetPrimary = this.offsetPrimary();
133
+ const orientation = this.orientation();
134
+ const maxSlideHeight = this.maxSlideHeight();
135
+ const isAnimating = this.isAnimating();
136
+ // Skip updating offsets during animation to avoid interfering with CSS animation
137
+ if (isAnimating) {
138
+ return;
76
139
  }
77
- return count;
78
- }));
79
- this.offsetPrimary$ = combineLatest([this.offset$, this.padLeft$])
80
- .pipe(map(([offset, padLeft]) => offset - padLeft * 100));
81
- this.offsetSecondary$ = combineLatest([this.offset$, this.padLeft$, this.padRight$])
82
- .pipe(map(([offset, padLeft, padRight]) => -(offset - padLeft * 100) - (padRight - 1) * 100));
83
- combineLatest([this.offsetPrimary$, this.orientation$])
84
- .pipe(takeUntilDestroyed())
85
- .subscribe(([offsetPrimary, orientation]) => {
86
140
  if (orientation === 'horizontal') {
87
141
  this.offsetLeft = offsetPrimary;
88
- this.offsetTop = null;
142
+ this.offsetTopPx = null;
89
143
  }
90
144
  else {
91
- this.offsetTop = offsetPrimary;
145
+ // For vertical mode, convert percentage to pixels using slide height
146
+ // offsetPrimary is in percentage units (e.g., -100 means -100%)
147
+ // We need to convert to pixels based on actual slide height
148
+ this.offsetTopPx = (offsetPrimary / 100) * maxSlideHeight;
92
149
  this.offsetLeft = null;
93
150
  }
94
151
  });
95
- combineLatest([this.offsetSecondary$, this.orientation$])
96
- .pipe(takeUntilDestroyed())
97
- .subscribe(([offsetSecondary, orientation]) => {
152
+ // Effect to update offsetRight/offsetBottomPx based on offsetSecondary and orientation
153
+ effect(() => {
154
+ const offsetSecondary = this.offsetSecondary();
155
+ const orientation = this.orientation();
156
+ const maxSlideHeight = this.maxSlideHeight();
157
+ const isAnimating = this.isAnimating();
158
+ // Skip updating offsets during animation to avoid interfering with CSS animation
159
+ if (isAnimating) {
160
+ return;
161
+ }
98
162
  if (orientation === 'horizontal') {
99
163
  this.offsetRight = offsetSecondary;
100
- this.offsetBottom = null;
164
+ this.offsetBottomPx = null;
101
165
  }
102
166
  else {
103
- this.offsetBottom = offsetSecondary;
167
+ // For vertical mode, convert percentage to pixels using slide height
168
+ this.offsetBottomPx = (offsetSecondary / 100) * maxSlideHeight;
104
169
  this.offsetRight = null;
105
170
  }
106
171
  });
107
- this.imageIndex$.pipe(takeUntilDestroyed())
108
- .subscribe(imageIndex => this.imageIndexChange.emit(imageIndex));
109
- this.actualSwipes$ = this.swipes$
110
- .pipe(map(swipes => {
111
- if (swipes) {
112
- return swipes.filter(swipe => !swipe.offside());
113
- }
114
- else {
115
- return [];
116
- }
117
- }));
118
- this.slideSizes$ = this.actualSwipes$
119
- .pipe(delay(400), filter(swipes => !!swipes))
120
- .pipe(mergeMap(swipes => combineLatest(swipes.map(swipe => swipe.observeSize.size$))))
121
- .pipe(shareReplay({ bufferSize: 1, refCount: true }));
122
- this.maxSlideHeight$ = this.slideSizes$
123
- .pipe(map(slideSizes => {
124
- const heights = slideSizes.map(s => s?.height ?? 1);
125
- return heights.length ? Math.max(...heights) : 1;
126
- }))
127
- .pipe(shareReplay({ bufferSize: 1, refCount: true }));
128
- this.currentSlideHeight$ = combineLatest([this.slideSizes$, this.imageIndex$, this.orientation$])
129
- .pipe(map(([slideSizes, imageIndex, orientation]) => {
130
- const heights = slideSizes.map(s => s?.height ?? 1);
131
- const maxHeight = heights.length ? Math.max(...heights) : 1;
132
- const currHeight = slideSizes[imageIndex]?.height ?? maxHeight;
133
- return (orientation === 'vertical') ? maxHeight : currHeight;
134
- }))
135
- .pipe(shareReplay({ bufferSize: 1, refCount: true }))
136
- .pipe(debounceTime(10));
137
- this.orientation$
138
- .pipe(distinctUntilChanged(), takeUntilDestroyed())
139
- .subscribe(() => {
140
- this.offsetLeft = null;
141
- this.offsetRight = null;
142
- this.offsetTop = null;
143
- this.offsetBottom = null;
144
- });
145
- }
146
- offsetLeft = null;
147
- offsetRight = null;
148
- offsetTop = null;
149
- offsetBottom = null;
150
- set swipes(value) {
151
- setTimeout(() => this.swipes$.next(value));
152
- }
153
- minimumOffset = 50;
154
- get orientation() {
155
- return this.orientation$.value;
156
- }
157
- set orientation(value) {
158
- this.orientation$.next(value ?? 'horizontal');
159
172
  }
160
- //#region ImageIndex
161
- get imageIndex() {
162
- return this.imageIndex$.value;
163
- }
164
- set imageIndex(value) {
165
- this.imageIndex$.next(value);
166
- }
167
- imageIndexChange = new EventEmitter();
168
- //#endregion
169
- actualSwipes$;
170
- isViewInited$ = new BehaviorSubject(false);
171
- startTouch$ = new BehaviorSubject(null);
172
- lastTouch$ = new BehaviorSubject(null);
173
- swipes$ = new BehaviorSubject(null);
174
- // TODO: slide sizes instead
175
- slideSizes$;
176
- maxSlideHeight$;
177
- imageIndex$ = new BehaviorSubject(0);
178
- currentSlideHeight$;
179
- pendingAnimation;
180
- containerElement;
181
- document;
182
- // TODO: Don't just keep px, but both px and % using currentslidesize$
183
- offset$;
184
- offsetPrimary$;
185
- offsetSecondary$;
186
- padLeft$;
187
- padRight$;
188
- orientation$ = new BehaviorSubject('horizontal');
189
173
  ngAfterViewInit() {
190
- this.isViewInited$.next(true);
174
+ this.isViewInited.set(true);
175
+ }
176
+ ngOnDestroy() {
177
+ this.isDestroyed = true;
178
+ this.pendingAnimation?.destroy();
191
179
  }
192
180
  animateToIndexByDx(distance) {
193
- combineLatest([this.imageIndex$, this.actualSwipes$])
194
- .pipe(take(1), takeUntilDestroyed(this.destroy))
195
- .subscribe(([imageIndex, actualSwipes]) => {
196
- let newIndex;
197
- if (Math.abs(distance) < this.minimumOffset) {
198
- newIndex = imageIndex;
199
- }
200
- else {
201
- newIndex = imageIndex + (distance < 0 ? 1 : -1);
202
- }
203
- this.animateToIndex(imageIndex, newIndex, distance, actualSwipes?.length ?? 1);
204
- });
181
+ const imageIndex = this.imageIndex();
182
+ const actualSwipes = this.actualSwipes();
183
+ let newIndex;
184
+ if (Math.abs(distance) < this.minimumOffset()) {
185
+ newIndex = imageIndex;
186
+ }
187
+ else {
188
+ newIndex = imageIndex + (distance < 0 ? 1 : -1);
189
+ }
190
+ this.animateToIndex(imageIndex, newIndex, distance, actualSwipes?.length ?? 1);
205
191
  }
206
192
  animateToIndex(oldIndex, newIndex, distance, totalSlides) {
207
- const orientation = this.orientation$.value;
193
+ const animation = this.animation();
194
+ const orientation = this.orientation();
208
195
  const containerElement = this.containerElement.nativeElement;
209
- const containerLength = orientation === 'horizontal' ? containerElement.clientWidth : containerElement.clientHeight;
196
+ const maxSlideHeight = this.maxSlideHeight();
197
+ // For vertical mode, use maxSlideHeight instead of container height
198
+ const containerLength = orientation === 'horizontal'
199
+ ? containerElement.clientWidth
200
+ : maxSlideHeight;
201
+ this.animationStart.emit();
202
+ // Handle 'none' animation mode - instant transition
203
+ if (animation === 'none') {
204
+ // Correct the image index immediately
205
+ if (newIndex === -1) {
206
+ this.imageIndex.set(totalSlides - 1);
207
+ }
208
+ else if (newIndex === totalSlides) {
209
+ this.imageIndex.set(0);
210
+ }
211
+ else {
212
+ this.imageIndex.set(newIndex);
213
+ }
214
+ this.startTouch.set(null);
215
+ this.lastTouch.set(null);
216
+ this.animationEnd.emit();
217
+ return;
218
+ }
219
+ // Set animating flag and clear host bindings so animation has full control
220
+ this.isAnimating.set(true);
221
+ if (orientation === 'horizontal') {
222
+ this.offsetLeft = null;
223
+ this.offsetRight = null;
224
+ }
225
+ else {
226
+ this.offsetTopPx = null;
227
+ this.offsetBottomPx = null;
228
+ }
210
229
  if (orientation === 'horizontal') {
211
230
  this.pendingAnimation = this.animationBuilder.build([
212
231
  style({
@@ -232,20 +251,25 @@ class BsSwipeContainerDirective {
232
251
  ]).create(containerElement);
233
252
  }
234
253
  this.pendingAnimation.onDone(() => {
254
+ if (this.isDestroyed)
255
+ return;
235
256
  // Correct the image index
236
257
  if (newIndex === -1) {
237
- this.imageIndex$.next(totalSlides - 1);
258
+ this.imageIndex.set(totalSlides - 1);
238
259
  }
239
260
  else if (newIndex === totalSlides) {
240
- this.imageIndex$.next(0);
261
+ this.imageIndex.set(0);
241
262
  }
242
263
  else {
243
- this.imageIndex$.next(newIndex);
264
+ this.imageIndex.set(newIndex);
244
265
  }
245
- this.startTouch$.next(null);
246
- this.lastTouch$.next(null);
266
+ this.startTouch.set(null);
267
+ this.lastTouch.set(null);
247
268
  this.pendingAnimation?.destroy();
248
269
  this.pendingAnimation = undefined;
270
+ // Clear animating flag so effects can update offsets again
271
+ this.isAnimating.set(false);
272
+ this.animationEnd.emit();
249
273
  });
250
274
  this.pendingAnimation.play();
251
275
  }
@@ -264,76 +288,60 @@ class BsSwipeContainerDirective {
264
288
  gotoAnimate(index, type) {
265
289
  this.pendingAnimation?.finish();
266
290
  setTimeout(() => {
267
- combineLatest([this.actualSwipes$, this.imageIndex$])
268
- .pipe(take(1), takeUntilDestroyed(this.destroy))
269
- .subscribe(([actualSwipes, imageIndex]) => {
270
- this.pendingAnimation?.finish();
271
- const idx = (type === 'relative') ? imageIndex + index : index;
272
- this.animateToIndex(imageIndex, idx, 0, actualSwipes?.length ?? 1);
273
- });
291
+ if (this.isDestroyed)
292
+ return;
293
+ this.pendingAnimation?.finish();
294
+ const actualSwipes = this.actualSwipes();
295
+ const imageIndex = this.imageIndex();
296
+ const idx = (type === 'relative') ? imageIndex + index : index;
297
+ this.animateToIndex(imageIndex, idx, 0, actualSwipes?.length ?? 1);
274
298
  }, 20);
275
299
  }
276
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: BsSwipeContainerDirective, deps: [{ token: i0.ElementRef }, { token: i1.AnimationBuilder }, { token: i0.DestroyRef }, { token: DOCUMENT }, { token: i2.BsObserveSizeDirective }], target: i0.ɵɵFactoryTarget.Directive });
277
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.0.6", type: BsSwipeContainerDirective, isStandalone: false, selector: "[bsSwipeContainer]", inputs: { minimumOffset: "minimumOffset", orientation: "orientation", imageIndex: "imageIndex" }, outputs: { imageIndexChange: "imageIndexChange" }, host: { properties: { "style.margin-left.%": "this.offsetLeft", "style.margin-right.%": "this.offsetRight", "style.margin-top.%": "this.offsetTop", "style.margin-bottom.%": "this.offsetBottom" } }, queries: [{ propertyName: "swipes", predicate: i0.forwardRef(() => BsSwipeDirective) }], exportAs: ["bsSwipeContainer"], hostDirectives: [{ directive: i2.BsObserveSizeDirective }], ngImport: i0 });
300
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: BsSwipeContainerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
301
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.0.6", type: BsSwipeContainerDirective, isStandalone: true, selector: "[bsSwipeContainer]", inputs: { minimumOffset: { classPropertyName: "minimumOffset", publicName: "minimumOffset", isSignal: true, isRequired: false, transformFunction: null }, animation: { classPropertyName: "animation", publicName: "animation", isSignal: true, isRequired: false, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, imageIndex: { classPropertyName: "imageIndex", publicName: "imageIndex", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { imageIndex: "imageIndexChange", animationStart: "animationStart", animationEnd: "animationEnd" }, host: { properties: { "style.margin-left.%": "this.offsetLeft", "style.margin-right.%": "this.offsetRight", "style.margin-top.px": "this.offsetTopPx", "style.margin-bottom.px": "this.offsetBottomPx" } }, queries: [{ propertyName: "swipes", predicate: i0.forwardRef(() => BsSwipeDirective) }], exportAs: ["bsSwipeContainer"], hostDirectives: [{ directive: i1.BsObserveSizeDirective }], ngImport: i0 });
278
302
  }
279
303
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: BsSwipeContainerDirective, decorators: [{
280
304
  type: Directive,
281
305
  args: [{
282
306
  selector: '[bsSwipeContainer]',
283
307
  exportAs: 'bsSwipeContainer',
284
- standalone: false,
308
+ standalone: true,
285
309
  hostDirectives: [BsObserveSizeDirective],
286
310
  }]
287
- }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.AnimationBuilder }, { type: i0.DestroyRef }, { type: undefined, decorators: [{
288
- type: Inject,
289
- args: [DOCUMENT]
290
- }] }, { type: i2.BsObserveSizeDirective }], propDecorators: { offsetLeft: [{
311
+ }], ctorParameters: () => [], propDecorators: { offsetLeft: [{
291
312
  type: HostBinding,
292
313
  args: ['style.margin-left.%']
293
314
  }], offsetRight: [{
294
315
  type: HostBinding,
295
316
  args: ['style.margin-right.%']
296
- }], offsetTop: [{
317
+ }], offsetTopPx: [{
297
318
  type: HostBinding,
298
- args: ['style.margin-top.%']
299
- }], offsetBottom: [{
319
+ args: ['style.margin-top.px']
320
+ }], offsetBottomPx: [{
300
321
  type: HostBinding,
301
- args: ['style.margin-bottom.%']
322
+ args: ['style.margin-bottom.px']
302
323
  }], swipes: [{
303
324
  type: ContentChildren,
304
325
  args: [forwardRef(() => BsSwipeDirective)]
305
- }], minimumOffset: [{
306
- type: Input
307
- }], orientation: [{
308
- type: Input
309
- }], imageIndex: [{
310
- type: Input
311
- }], imageIndexChange: [{
312
- type: Output
313
- }] } });
326
+ }], minimumOffset: [{ type: i0.Input, args: [{ isSignal: true, alias: "minimumOffset", required: false }] }], animation: [{ type: i0.Input, args: [{ isSignal: true, alias: "animation", required: false }] }], orientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "orientation", required: false }] }], imageIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "imageIndex", required: false }] }, { type: i0.Output, args: ["imageIndexChange"] }], animationStart: [{ type: i0.Output, args: ["animationStart"] }], animationEnd: [{ type: i0.Output, args: ["animationEnd"] }] } });
314
327
 
315
328
  class BsSwipeDirective {
316
- container;
317
- destroy;
318
- constructor(container, observeSize, destroy) {
319
- this.container = container;
320
- this.destroy = destroy;
321
- this.observeSize = observeSize;
322
- this.container.orientation$
323
- .pipe(takeUntilDestroyed())
324
- .subscribe(orientation => {
325
- this.inlineBlock = (orientation === 'horizontal');
326
- this.block = (orientation === 'vertical');
327
- });
328
- combineLatest([this.container.maxSlideHeight$, this.container.orientation$])
329
- .pipe(takeUntilDestroyed())
330
- .subscribe(([maxHeight, orientation]) => {
331
- const targetHeight = (orientation === 'vertical') ? maxHeight : null;
332
- this.slideHeight = (targetHeight && targetHeight > 0) ? targetHeight : null;
333
- });
334
- }
335
- observeSize;
329
+ container = inject(BsSwipeContainerDirective);
330
+ observeSize = inject(BsObserveSizeDirective);
336
331
  offside = input(false, ...(ngDevMode ? [{ debugName: "offside" }] : []));
332
+ orientationEffect = effect(() => {
333
+ const orientation = this.container.orientation();
334
+ this.inlineBlock = (orientation === 'horizontal');
335
+ this.block = (orientation === 'vertical');
336
+ }, ...(ngDevMode ? [{ debugName: "orientationEffect" }] : []));
337
+ heightEffect = effect(() => {
338
+ const maxHeight = this.container.maxSlideHeight();
339
+ const orientation = this.container.orientation();
340
+ // Only set height when we have valid measurements (> 10px threshold)
341
+ // to avoid circular dependency during initial load
342
+ const targetHeight = (orientation === 'vertical' && maxHeight > 10) ? maxHeight : null;
343
+ this.slideHeight = targetHeight;
344
+ }, ...(ngDevMode ? [{ debugName: "heightEffect" }] : []));
337
345
  classes = true;
338
346
  inlineBlock = true;
339
347
  block = false;
@@ -341,16 +349,17 @@ class BsSwipeDirective {
341
349
  onTouchStart(ev) {
342
350
  if (ev.touches.length === 1) {
343
351
  ev.preventDefault();
352
+ ev.stopPropagation();
344
353
  this.container.pendingAnimation?.finish();
345
354
  setTimeout(() => {
346
- this.container.startTouch$.next({
355
+ this.container.startTouch.set({
347
356
  position: {
348
357
  x: ev.touches[0].clientX,
349
358
  y: ev.touches[0].clientY,
350
359
  },
351
360
  timestamp: Date.now(),
352
361
  });
353
- this.container.lastTouch$.next({
362
+ this.container.lastTouch.set({
354
363
  position: {
355
364
  x: ev.touches[0].clientX,
356
365
  y: ev.touches[0].clientY,
@@ -361,7 +370,9 @@ class BsSwipeDirective {
361
370
  }
362
371
  }
363
372
  onTouchMove(ev) {
364
- this.container.lastTouch$.next({
373
+ ev.preventDefault();
374
+ ev.stopPropagation();
375
+ this.container.lastTouch.set({
365
376
  position: {
366
377
  x: ev.touches[0].clientX,
367
378
  y: ev.touches[0].clientY,
@@ -370,29 +381,28 @@ class BsSwipeDirective {
370
381
  });
371
382
  }
372
383
  onTouchEnd(ev) {
373
- combineLatest([this.container.startTouch$, this.container.lastTouch$, this.container.orientation$])
374
- .pipe(filter(([startTouch, lastTouch]) => !!startTouch && !!lastTouch))
375
- .pipe(take(1), takeUntilDestroyed(this.destroy))
376
- .subscribe(([startTouch, lastTouch, orientation]) => {
377
- if (!!startTouch && !!lastTouch) {
378
- const distance = (orientation === 'horizontal')
379
- ? lastTouch.position.x - startTouch.position.x
380
- : lastTouch.position.y - startTouch.position.y;
381
- this.container.onSwipe(distance);
382
- }
383
- });
384
+ ev.stopPropagation();
385
+ const startTouch = this.container.startTouch();
386
+ const lastTouch = this.container.lastTouch();
387
+ const orientation = this.container.orientation();
388
+ if (!!startTouch && !!lastTouch) {
389
+ const distance = (orientation === 'horizontal')
390
+ ? lastTouch.position.x - startTouch.position.x
391
+ : lastTouch.position.y - startTouch.position.y;
392
+ this.container.onSwipe(distance);
393
+ }
384
394
  }
385
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: BsSwipeDirective, deps: [{ token: BsSwipeContainerDirective }, { token: i2.BsObserveSizeDirective }, { token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Directive });
386
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.0.6", type: BsSwipeDirective, isStandalone: false, selector: "[bsSwipe]", inputs: { offside: { classPropertyName: "offside", publicName: "offside", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "touchstart": "onTouchStart($event)", "touchmove": "onTouchMove($event)", "touchend": "onTouchEnd($event)" }, properties: { "class.align-top": "this.classes", "class.float-none": "this.classes", "class.w-100": "this.classes", "class.pe-auto": "this.classes", "class.me-0": "this.classes", "class.d-inline-block": "this.inlineBlock", "class.d-block": "this.block", "style.height.px": "this.slideHeight" } }, hostDirectives: [{ directive: i2.BsObserveSizeDirective }], ngImport: i0 });
395
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: BsSwipeDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
396
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.0.6", type: BsSwipeDirective, isStandalone: true, selector: "[bsSwipe]", inputs: { offside: { classPropertyName: "offside", publicName: "offside", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "touchstart": "onTouchStart($event)", "touchmove": "onTouchMove($event)", "touchend": "onTouchEnd($event)" }, properties: { "class.align-top": "this.classes", "class.float-none": "this.classes", "class.w-100": "this.classes", "class.pe-auto": "this.classes", "class.me-0": "this.classes", "class.d-inline-block": "this.inlineBlock", "class.d-block": "this.block", "style.height.px": "this.slideHeight" } }, hostDirectives: [{ directive: i1.BsObserveSizeDirective }], ngImport: i0 });
387
397
  }
388
398
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: BsSwipeDirective, decorators: [{
389
399
  type: Directive,
390
400
  args: [{
391
401
  selector: '[bsSwipe]',
392
402
  hostDirectives: [BsObserveSizeDirective],
393
- standalone: false,
403
+ standalone: true,
394
404
  }]
395
- }], ctorParameters: () => [{ type: BsSwipeContainerDirective }, { type: i2.BsObserveSizeDirective }, { type: i0.DestroyRef }], propDecorators: { offside: [{ type: i0.Input, args: [{ isSignal: true, alias: "offside", required: false }] }], classes: [{
405
+ }], propDecorators: { offside: [{ type: i0.Input, args: [{ isSignal: true, alias: "offside", required: false }] }], classes: [{
396
406
  type: HostBinding,
397
407
  args: ['class.align-top']
398
408
  }, {
@@ -429,14 +439,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
429
439
 
430
440
  class BsSwiperModule {
431
441
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: BsSwiperModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
432
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.0.6", ngImport: i0, type: BsSwiperModule, declarations: [BsSwipeDirective, BsSwipeContainerDirective], imports: [CommonModule], exports: [BsSwipeDirective, BsSwipeContainerDirective] });
433
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: BsSwiperModule, imports: [CommonModule] });
442
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.0.6", ngImport: i0, type: BsSwiperModule, imports: [BsSwipeDirective, BsSwipeContainerDirective], exports: [BsSwipeDirective, BsSwipeContainerDirective] });
443
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: BsSwiperModule });
434
444
  }
435
445
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: BsSwiperModule, decorators: [{
436
446
  type: NgModule,
437
447
  args: [{
438
- imports: [CommonModule],
439
- declarations: [BsSwipeDirective, BsSwipeContainerDirective],
448
+ imports: [BsSwipeDirective, BsSwipeContainerDirective],
440
449
  exports: [BsSwipeDirective, BsSwipeContainerDirective],
441
450
  }]
442
451
  }] });
@@ -1 +1 @@
1
- {"version":3,"file":"mintplayer-ng-swiper-swiper.mjs","sources":["../../../../libs/mintplayer-ng-swiper/swiper/src/directives/swipe-container/swipe-container.directive.ts","../../../../libs/mintplayer-ng-swiper/swiper/src/directives/swipe/swipe.directive.ts","../../../../libs/mintplayer-ng-swiper/swiper/src/swiper.module.ts","../../../../libs/mintplayer-ng-swiper/swiper/mintplayer-ng-swiper-swiper.ts"],"sourcesContent":["import { DOCUMENT } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { animate, AnimationBuilder, AnimationPlayer, style } from '@angular/animations';\nimport { AfterViewInit, ContentChildren, DestroyRef, Directive, ElementRef, EventEmitter, forwardRef, HostBinding, Inject, Input, Output, QueryList } from '@angular/core';\nimport { BehaviorSubject, combineLatest, debounceTime, delay, distinctUntilChanged, filter, map, mergeMap, Observable, shareReplay, take } from 'rxjs';\nimport { BsObserveSizeDirective, Size } from '@mintplayer/ng-swiper/observe-size';\nimport { LastTouch } from '../../interfaces/last-touch';\nimport { StartTouch } from '../../interfaces/start-touch';\nimport { BsSwipeDirective } from '../swipe/swipe.directive';\n\n@Directive({\n selector: '[bsSwipeContainer]',\n exportAs: 'bsSwipeContainer',\n standalone: false,\n hostDirectives: [BsObserveSizeDirective],\n})\nexport class BsSwipeContainerDirective implements AfterViewInit {\n\n constructor(element: ElementRef, private animationBuilder: AnimationBuilder, private destroy: DestroyRef, @Inject(DOCUMENT) document: any, private observeSize: BsObserveSizeDirective) {\n this.containerElement = element;\n this.document = <Document>document;\n this.offset$ = combineLatest([\n this.startTouch$,\n this.lastTouch$,\n this.imageIndex$,\n this.isViewInited$,\n this.orientation$,\n this.observeSize.size$,\n ])\n .pipe(map(([startTouch, lastTouch, imageIndex, isViewInited, orientation, containerSize]) => {\n if (!isViewInited) {\n return (-imageIndex * 100);\n } else if (!!startTouch && !!lastTouch) {\n const containerLength = orientation === 'horizontal'\n ? (containerSize?.width ?? this.containerElement.nativeElement.clientWidth)\n : (containerSize?.height ?? this.containerElement.nativeElement.clientHeight);\n if (containerLength === 0) {\n return (-imageIndex * 100);\n }\n const delta = orientation === 'horizontal'\n ? (lastTouch.position.x - startTouch.position.x)\n : (lastTouch.position.y - startTouch.position.y);\n return (-imageIndex * 100 + (delta / containerLength) * 100);\n } else {\n return (-imageIndex * 100);\n }\n }));\n\n this.padLeft$ = this.swipes$.pipe(map(swipes => {\n if (!swipes) {\n return 0;\n }\n\n let count = 0;\n for (const s of swipes) {\n if (!s.offside()) {\n break;\n } else {\n count++;\n }\n }\n return count;\n }));\n\n this.padRight$ = this.swipes$.pipe(map(swipes => {\n if (!swipes) {\n return 0;\n }\n\n let count = 0;\n for (const s of swipes.toArray().reverse()) {\n if (!s.offside()) {\n break;\n } else {\n count++;\n }\n }\n return count;\n }));\n\n this.offsetPrimary$ = combineLatest([this.offset$, this.padLeft$])\n .pipe(map(([offset, padLeft]) => offset - padLeft * 100));\n this.offsetSecondary$ = combineLatest([this.offset$, this.padLeft$, this.padRight$])\n .pipe(map(([offset, padLeft, padRight]) => -(offset - padLeft * 100) - (padRight - 1) * 100));\n combineLatest([this.offsetPrimary$, this.orientation$])\n .pipe(takeUntilDestroyed())\n .subscribe(([offsetPrimary, orientation]) => {\n if (orientation === 'horizontal') {\n this.offsetLeft = offsetPrimary;\n this.offsetTop = null;\n } else {\n this.offsetTop = offsetPrimary;\n this.offsetLeft = null;\n }\n });\n combineLatest([this.offsetSecondary$, this.orientation$])\n .pipe(takeUntilDestroyed())\n .subscribe(([offsetSecondary, orientation]) => {\n if (orientation === 'horizontal') {\n this.offsetRight = offsetSecondary;\n this.offsetBottom = null;\n } else {\n this.offsetBottom = offsetSecondary;\n this.offsetRight = null;\n }\n });\n this.imageIndex$.pipe(takeUntilDestroyed())\n .subscribe(imageIndex => this.imageIndexChange.emit(imageIndex));\n\n this.actualSwipes$ = this.swipes$\n .pipe(map(swipes => {\n if (swipes) {\n return swipes.filter(swipe => !swipe.offside());\n } else {\n return [];\n }\n }));\n\n this.slideSizes$ = this.actualSwipes$\n .pipe(delay(400), filter(swipes => !!swipes))\n .pipe(mergeMap(swipes => combineLatest(swipes.map(swipe => swipe.observeSize.size$))))\n .pipe(shareReplay({ bufferSize: 1, refCount: true }));\n\n this.maxSlideHeight$ = this.slideSizes$\n .pipe(map(slideSizes => {\n const heights = slideSizes.map(s => s?.height ?? 1);\n return heights.length ? Math.max(...heights) : 1;\n }))\n .pipe(shareReplay({ bufferSize: 1, refCount: true }));\n\n this.currentSlideHeight$ = combineLatest([this.slideSizes$, this.imageIndex$, this.orientation$])\n .pipe(map(([slideSizes, imageIndex, orientation]) => {\n const heights = slideSizes.map(s => s?.height ?? 1);\n const maxHeight = heights.length ? Math.max(...heights) : 1;\n const currHeight: number = slideSizes[imageIndex]?.height ?? maxHeight;\n return (orientation === 'vertical') ? maxHeight : currHeight;\n }))\n .pipe(shareReplay({ bufferSize: 1, refCount: true }))\n .pipe(debounceTime(10));\n\n this.orientation$\n .pipe(distinctUntilChanged(), takeUntilDestroyed())\n .subscribe(() => {\n this.offsetLeft = null;\n this.offsetRight = null;\n this.offsetTop = null;\n this.offsetBottom = null;\n });\n }\n\n @HostBinding('style.margin-left.%') offsetLeft: number | null = null;\n @HostBinding('style.margin-right.%') offsetRight: number | null = null;\n @HostBinding('style.margin-top.%') offsetTop: number | null = null;\n @HostBinding('style.margin-bottom.%') offsetBottom: number | null = null;\n @ContentChildren(forwardRef(() => BsSwipeDirective)) set swipes(value: QueryList<BsSwipeDirective>) {\n setTimeout(() => this.swipes$.next(value));\n }\n @Input() minimumOffset = 50;\n\n public get orientation() {\n return this.orientation$.value;\n }\n @Input() public set orientation(value: 'horizontal' | 'vertical') {\n this.orientation$.next(value ?? 'horizontal');\n }\n\n //#region ImageIndex\n public get imageIndex() {\n return this.imageIndex$.value;\n }\n @Input() public set imageIndex(value: number) {\n this.imageIndex$.next(value);\n }\n @Output() imageIndexChange = new EventEmitter<number>();\n //#endregion\n \n actualSwipes$: Observable<BsSwipeDirective[]>;\n isViewInited$ = new BehaviorSubject<boolean>(false);\n startTouch$ = new BehaviorSubject<StartTouch | null>(null);\n lastTouch$ = new BehaviorSubject<LastTouch | null>(null);\n swipes$ = new BehaviorSubject<QueryList<BsSwipeDirective> | null>(null);\n // TODO: slide sizes instead\n slideSizes$: Observable<(Size | undefined)[]>;\n maxSlideHeight$: Observable<number>;\n imageIndex$ = new BehaviorSubject<number>(0);\n currentSlideHeight$: Observable<number>;\n pendingAnimation?: AnimationPlayer;\n containerElement: ElementRef<HTMLDivElement>;\n document: Document;\n\n // TODO: Don't just keep px, but both px and % using currentslidesize$\n offset$: Observable<number>;\n offsetPrimary$: Observable<number>;\n offsetSecondary$: Observable<number>;\n padLeft$: Observable<number>;\n padRight$: Observable<number>;\n\n orientation$ = new BehaviorSubject<'horizontal' | 'vertical'>('horizontal');\n\n ngAfterViewInit() {\n this.isViewInited$.next(true);\n }\n\n animateToIndexByDx(distance: number) {\n combineLatest([this.imageIndex$, this.actualSwipes$])\n .pipe(take(1), takeUntilDestroyed(this.destroy))\n .subscribe(([imageIndex, actualSwipes]) => {\n let newIndex: number;\n if (Math.abs(distance) < this.minimumOffset) {\n newIndex = imageIndex;\n } else {\n newIndex = imageIndex + (distance < 0 ? 1 : -1);\n }\n\n this.animateToIndex(imageIndex, newIndex, distance, actualSwipes?.length ?? 1);\n });\n }\n\n animateToIndex(oldIndex: number, newIndex: number, distance: number, totalSlides: number) {\n const orientation = this.orientation$.value;\n const containerElement = this.containerElement.nativeElement;\n const containerLength = orientation === 'horizontal' ? containerElement.clientWidth : containerElement.clientHeight;\n\n if (orientation === 'horizontal') {\n this.pendingAnimation = this.animationBuilder.build([\n style({\n 'margin-left': (-(oldIndex + 1) * containerLength + distance) + 'px',\n 'margin-right': ((oldIndex + 1) * containerLength - distance) + 'px',\n }),\n animate('500ms ease', style({\n 'margin-left': (-(newIndex + 1) * containerLength) + 'px',\n 'margin-right': ((newIndex + 1) * containerLength) + 'px',\n })),\n ]).create(containerElement);\n } else {\n this.pendingAnimation = this.animationBuilder.build([\n style({\n 'margin-top': (-(oldIndex + 1) * containerLength + distance) + 'px',\n 'margin-bottom': ((oldIndex + 1) * containerLength - distance) + 'px',\n }),\n animate('500ms ease', style({\n 'margin-top': (-(newIndex + 1) * containerLength) + 'px',\n 'margin-bottom': ((newIndex + 1) * containerLength) + 'px',\n })),\n ]).create(containerElement);\n }\n this.pendingAnimation.onDone(() => {\n // Correct the image index\n if (newIndex === -1) {\n this.imageIndex$.next(totalSlides - 1);\n } else if (newIndex === totalSlides) {\n this.imageIndex$.next(0);\n } else {\n this.imageIndex$.next(newIndex);\n }\n this.startTouch$.next(null);\n this.lastTouch$.next(null);\n this.pendingAnimation?.destroy();\n this.pendingAnimation = undefined;\n });\n this.pendingAnimation.play();\n }\n\n onSwipe(distance: number) {\n this.animateToIndexByDx(distance);\n }\n\n previous() {\n this.gotoAnimate(-1, 'relative');\n }\n\n next() {\n this.gotoAnimate(1, 'relative');\n }\n\n goto(index: number) {\n this.gotoAnimate(index, 'absolute');\n }\n\n private gotoAnimate(index: number, type: 'absolute' | 'relative') {\n this.pendingAnimation?.finish();\n setTimeout(() => {\n combineLatest([this.actualSwipes$, this.imageIndex$])\n .pipe(take(1), takeUntilDestroyed(this.destroy))\n .subscribe(([actualSwipes, imageIndex]) => {\n this.pendingAnimation?.finish();\n const idx = (type === 'relative') ? imageIndex + index : index;\n this.animateToIndex(imageIndex, idx, 0, actualSwipes?.length ?? 1);\n });\n }, 20);\n }\n\n}\n","import { DestroyRef, Directive, HostBinding, HostListener, input } from \"@angular/core\";\nimport { BsObserveSizeDirective } from \"@mintplayer/ng-swiper/observe-size\";\nimport { combineLatest, filter, take } from \"rxjs\";\nimport { BsSwipeContainerDirective } from \"../swipe-container/swipe-container.directive\";\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\n\n@Directive({\n selector: '[bsSwipe]',\n hostDirectives: [BsObserveSizeDirective],\n standalone: false,\n})\nexport class BsSwipeDirective {\n\n constructor(private container: BsSwipeContainerDirective, observeSize: BsObserveSizeDirective, private destroy: DestroyRef) {\n this.observeSize = observeSize;\n this.container.orientation$\n .pipe(takeUntilDestroyed())\n .subscribe(orientation => {\n this.inlineBlock = (orientation === 'horizontal');\n this.block = (orientation === 'vertical');\n });\n\n combineLatest([this.container.maxSlideHeight$, this.container.orientation$])\n .pipe(takeUntilDestroyed())\n .subscribe(([maxHeight, orientation]) => {\n const targetHeight = (orientation === 'vertical') ? maxHeight : null;\n this.slideHeight = (targetHeight && targetHeight > 0) ? targetHeight : null;\n });\n }\n\n observeSize: BsObserveSizeDirective;\n\n public offside = input(false);\n\n @HostBinding('class.align-top')\n @HostBinding('class.float-none')\n @HostBinding('class.w-100')\n @HostBinding('class.pe-auto')\n @HostBinding('class.me-0')\n classes = true;\n\n @HostBinding('class.d-inline-block') inlineBlock = true;\n @HostBinding('class.d-block') block = false;\n @HostBinding('style.height.px') slideHeight: number | null = null;\n\n @HostListener('touchstart', ['$event'])\n onTouchStart(ev: TouchEvent) {\n if (ev.touches.length === 1) {\n ev.preventDefault();\n this.container.pendingAnimation?.finish();\n\n setTimeout(() => {\n this.container.startTouch$.next({\n position: {\n x: ev.touches[0].clientX,\n y: ev.touches[0].clientY,\n },\n timestamp: Date.now(),\n });\n this.container.lastTouch$.next({\n position: {\n x: ev.touches[0].clientX,\n y: ev.touches[0].clientY,\n },\n isTouching: true,\n });\n }, 20);\n }\n }\n\n @HostListener('touchmove', ['$event'])\n onTouchMove(ev: TouchEvent) {\n this.container.lastTouch$.next({\n position: {\n x: ev.touches[0].clientX,\n y: ev.touches[0].clientY,\n },\n isTouching: true,\n });\n }\n\n @HostListener('touchend', ['$event'])\n onTouchEnd(ev: TouchEvent) {\n combineLatest([this.container.startTouch$, this.container.lastTouch$, this.container.orientation$])\n .pipe(filter(([startTouch, lastTouch]) => !!startTouch && !!lastTouch))\n .pipe(take(1), takeUntilDestroyed(this.destroy))\n .subscribe(([startTouch, lastTouch, orientation]) => {\n if (!!startTouch && !!lastTouch) {\n const distance = (orientation === 'horizontal')\n ? lastTouch.position.x - startTouch.position.x\n : lastTouch.position.y - startTouch.position.y;\n this.container.onSwipe(distance);\n }\n });\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { BsSwipeDirective } from './directives/swipe/swipe.directive';\nimport { BsSwipeContainerDirective } from './directives/swipe-container/swipe-container.directive';\n\n@NgModule({\n imports: [CommonModule],\n declarations: [BsSwipeDirective, BsSwipeContainerDirective],\n exports: [BsSwipeDirective, BsSwipeContainerDirective],\n})\nexport class BsSwiperModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.BsSwipeContainerDirective"],"mappings":"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"}
1
+ {"version":3,"file":"mintplayer-ng-swiper-swiper.mjs","sources":["../../../../libs/mintplayer-ng-swiper/swiper/src/directives/swipe-container/swipe-container.directive.ts","../../../../libs/mintplayer-ng-swiper/swiper/src/directives/swipe/swipe.directive.ts","../../../../libs/mintplayer-ng-swiper/swiper/src/swiper.module.ts","../../../../libs/mintplayer-ng-swiper/swiper/mintplayer-ng-swiper-swiper.ts"],"sourcesContent":["import { DOCUMENT } from '@angular/common';\nimport { animate, AnimationBuilder, AnimationPlayer, style } from '@angular/animations';\nimport { AfterViewInit, computed, ContentChildren, Directive, effect, ElementRef, forwardRef, HostBinding, inject, input, model, OnDestroy, output, QueryList, signal } from '@angular/core';\nimport { BsObserveSizeDirective, Size } from '@mintplayer/ng-swiper/observe-size';\nimport { LastTouch } from '../../interfaces/last-touch';\nimport { StartTouch } from '../../interfaces/start-touch';\nimport { BsSwipeDirective } from '../swipe/swipe.directive';\n\n@Directive({\n selector: '[bsSwipeContainer]',\n exportAs: 'bsSwipeContainer',\n standalone: true,\n hostDirectives: [BsObserveSizeDirective],\n})\nexport class BsSwipeContainerDirective implements AfterViewInit, OnDestroy {\n private animationBuilder = inject(AnimationBuilder);\n private observeSize = inject(BsObserveSizeDirective);\n containerElement = inject(ElementRef<HTMLDivElement>);\n document = inject(DOCUMENT) as Document;\n\n @HostBinding('style.margin-left.%') offsetLeft: number | null = null;\n @HostBinding('style.margin-right.%') offsetRight: number | null = null;\n @HostBinding('style.margin-top.px') offsetTopPx: number | null = null;\n @HostBinding('style.margin-bottom.px') offsetBottomPx: number | null = null;\n\n @ContentChildren(forwardRef(() => BsSwipeDirective)) set swipes(value: QueryList<BsSwipeDirective>) {\n setTimeout(() => this._swipes.set(value));\n }\n\n minimumOffset = input(50);\n animation = input<'slide' | 'fade' | 'none'>('slide');\n orientation = input<'horizontal' | 'vertical'>('horizontal');\n imageIndex = model<number>(0);\n animationStart = output<void>();\n animationEnd = output<void>();\n\n isViewInited = signal<boolean>(false);\n isAnimating = signal<boolean>(false);\n private isDestroyed = false;\n startTouch = signal<StartTouch | null>(null);\n lastTouch = signal<LastTouch | null>(null);\n _swipes = signal<QueryList<BsSwipeDirective> | null>(null);\n pendingAnimation?: AnimationPlayer;\n\n // Computed signals for derived state\n offset = computed(() => {\n const startTouch = this.startTouch();\n const lastTouch = this.lastTouch();\n const imageIndex = this.imageIndex();\n const isViewInited = this.isViewInited();\n const orientation = this.orientation();\n const containerSize = this.observeSize.size();\n const maxSlideHeight = this.maxSlideHeight();\n\n if (!isViewInited) {\n return (-imageIndex * 100);\n } else if (!!startTouch && !!lastTouch) {\n // For horizontal: use container width\n // For vertical: use maxSlideHeight (single slide height, not total container height)\n const containerLength = orientation === 'horizontal'\n ? (containerSize?.width ?? this.containerElement.nativeElement.clientWidth)\n : maxSlideHeight;\n if (containerLength === 0) {\n return (-imageIndex * 100);\n }\n const delta = orientation === 'horizontal'\n ? (lastTouch.position.x - startTouch.position.x)\n : (lastTouch.position.y - startTouch.position.y);\n return (-imageIndex * 100 + (delta / containerLength) * 100);\n } else {\n return (-imageIndex * 100);\n }\n });\n\n padLeft = computed(() => {\n const swipes = this._swipes();\n if (!swipes) return 0;\n\n let count = 0;\n for (const s of swipes) {\n if (!s.offside()) {\n break;\n } else {\n count++;\n }\n }\n return count;\n });\n\n padRight = computed(() => {\n const swipes = this._swipes();\n if (!swipes) return 0;\n\n let count = 0;\n for (const s of swipes.toArray().reverse()) {\n if (!s.offside()) {\n break;\n } else {\n count++;\n }\n }\n return count;\n });\n\n offsetPrimary = computed(() => this.offset() - this.padLeft() * 100);\n offsetSecondary = computed(() => -(this.offset() - this.padLeft() * 100) - (this.padRight() - 1) * 100);\n\n actualSwipes = computed(() => {\n const swipes = this._swipes();\n if (swipes) {\n return swipes.filter(swipe => !swipe.offside());\n } else {\n return [];\n }\n });\n\n // Computed signal that reactively tracks all swipe sizes\n private slideSizes = computed(() => {\n const actualSwipes = this.actualSwipes();\n if (!actualSwipes || actualSwipes.length === 0) {\n return [];\n }\n // Reading each swipe's size() creates reactive dependencies\n return actualSwipes.map(swipe => swipe.observeSize.size());\n });\n\n maxSlideHeight = computed(() => {\n const slideSizes = this.slideSizes();\n const heights = slideSizes.map(s => s?.height ?? 1);\n return heights.length ? Math.max(...heights) : 1;\n });\n\n currentSlideHeight = computed<number | null>(() => {\n const slideSizes = this.slideSizes();\n const imageIndex = this.imageIndex();\n const orientation = this.orientation();\n const heights = slideSizes.map(s => s?.height ?? 0);\n const maxHeight = heights.length ? Math.max(...heights) : 0;\n const currHeight: number = slideSizes[imageIndex]?.height ?? maxHeight;\n const result = (orientation === 'vertical') ? maxHeight : currHeight;\n // Return null if measurements aren't valid yet to avoid collapsing the carousel\n return result > 10 ? result : null;\n });\n\n constructor() {\n // Effect to update offsetLeft/offsetTopPx based on offsetPrimary and orientation\n effect(() => {\n const offsetPrimary = this.offsetPrimary();\n const orientation = this.orientation();\n const maxSlideHeight = this.maxSlideHeight();\n const isAnimating = this.isAnimating();\n\n // Skip updating offsets during animation to avoid interfering with CSS animation\n if (isAnimating) {\n return;\n }\n\n if (orientation === 'horizontal') {\n this.offsetLeft = offsetPrimary;\n this.offsetTopPx = null;\n } else {\n // For vertical mode, convert percentage to pixels using slide height\n // offsetPrimary is in percentage units (e.g., -100 means -100%)\n // We need to convert to pixels based on actual slide height\n this.offsetTopPx = (offsetPrimary / 100) * maxSlideHeight;\n this.offsetLeft = null;\n }\n });\n\n // Effect to update offsetRight/offsetBottomPx based on offsetSecondary and orientation\n effect(() => {\n const offsetSecondary = this.offsetSecondary();\n const orientation = this.orientation();\n const maxSlideHeight = this.maxSlideHeight();\n const isAnimating = this.isAnimating();\n\n // Skip updating offsets during animation to avoid interfering with CSS animation\n if (isAnimating) {\n return;\n }\n\n if (orientation === 'horizontal') {\n this.offsetRight = offsetSecondary;\n this.offsetBottomPx = null;\n } else {\n // For vertical mode, convert percentage to pixels using slide height\n this.offsetBottomPx = (offsetSecondary / 100) * maxSlideHeight;\n this.offsetRight = null;\n }\n });\n\n }\n\n ngAfterViewInit() {\n this.isViewInited.set(true);\n }\n\n ngOnDestroy() {\n this.isDestroyed = true;\n this.pendingAnimation?.destroy();\n }\n\n animateToIndexByDx(distance: number) {\n const imageIndex = this.imageIndex();\n const actualSwipes = this.actualSwipes();\n\n let newIndex: number;\n if (Math.abs(distance) < this.minimumOffset()) {\n newIndex = imageIndex;\n } else {\n newIndex = imageIndex + (distance < 0 ? 1 : -1);\n }\n\n this.animateToIndex(imageIndex, newIndex, distance, actualSwipes?.length ?? 1);\n }\n\n animateToIndex(oldIndex: number, newIndex: number, distance: number, totalSlides: number) {\n const animation = this.animation();\n const orientation = this.orientation();\n const containerElement = this.containerElement.nativeElement;\n const maxSlideHeight = this.maxSlideHeight();\n // For vertical mode, use maxSlideHeight instead of container height\n const containerLength = orientation === 'horizontal'\n ? containerElement.clientWidth\n : maxSlideHeight;\n\n this.animationStart.emit();\n\n // Handle 'none' animation mode - instant transition\n if (animation === 'none') {\n // Correct the image index immediately\n if (newIndex === -1) {\n this.imageIndex.set(totalSlides - 1);\n } else if (newIndex === totalSlides) {\n this.imageIndex.set(0);\n } else {\n this.imageIndex.set(newIndex);\n }\n this.startTouch.set(null);\n this.lastTouch.set(null);\n this.animationEnd.emit();\n return;\n }\n\n // Set animating flag and clear host bindings so animation has full control\n this.isAnimating.set(true);\n if (orientation === 'horizontal') {\n this.offsetLeft = null;\n this.offsetRight = null;\n } else {\n this.offsetTopPx = null;\n this.offsetBottomPx = null;\n }\n\n if (orientation === 'horizontal') {\n this.pendingAnimation = this.animationBuilder.build([\n style({\n 'margin-left': (-(oldIndex + 1) * containerLength + distance) + 'px',\n 'margin-right': ((oldIndex + 1) * containerLength - distance) + 'px',\n }),\n animate('500ms ease', style({\n 'margin-left': (-(newIndex + 1) * containerLength) + 'px',\n 'margin-right': ((newIndex + 1) * containerLength) + 'px',\n })),\n ]).create(containerElement);\n } else {\n this.pendingAnimation = this.animationBuilder.build([\n style({\n 'margin-top': (-(oldIndex + 1) * containerLength + distance) + 'px',\n 'margin-bottom': ((oldIndex + 1) * containerLength - distance) + 'px',\n }),\n animate('500ms ease', style({\n 'margin-top': (-(newIndex + 1) * containerLength) + 'px',\n 'margin-bottom': ((newIndex + 1) * containerLength) + 'px',\n })),\n ]).create(containerElement);\n }\n this.pendingAnimation.onDone(() => {\n if (this.isDestroyed) return;\n // Correct the image index\n if (newIndex === -1) {\n this.imageIndex.set(totalSlides - 1);\n } else if (newIndex === totalSlides) {\n this.imageIndex.set(0);\n } else {\n this.imageIndex.set(newIndex);\n }\n this.startTouch.set(null);\n this.lastTouch.set(null);\n this.pendingAnimation?.destroy();\n this.pendingAnimation = undefined;\n // Clear animating flag so effects can update offsets again\n this.isAnimating.set(false);\n this.animationEnd.emit();\n });\n this.pendingAnimation.play();\n }\n\n onSwipe(distance: number) {\n this.animateToIndexByDx(distance);\n }\n\n previous() {\n this.gotoAnimate(-1, 'relative');\n }\n\n next() {\n this.gotoAnimate(1, 'relative');\n }\n\n goto(index: number) {\n this.gotoAnimate(index, 'absolute');\n }\n\n private gotoAnimate(index: number, type: 'absolute' | 'relative') {\n this.pendingAnimation?.finish();\n setTimeout(() => {\n if (this.isDestroyed) return;\n this.pendingAnimation?.finish();\n const actualSwipes = this.actualSwipes();\n const imageIndex = this.imageIndex();\n const idx = (type === 'relative') ? imageIndex + index : index;\n this.animateToIndex(imageIndex, idx, 0, actualSwipes?.length ?? 1);\n }, 20);\n }\n\n}\n","import { Directive, effect, HostBinding, HostListener, inject, input } from \"@angular/core\";\nimport { BsObserveSizeDirective } from \"@mintplayer/ng-swiper/observe-size\";\nimport { BsSwipeContainerDirective } from \"../swipe-container/swipe-container.directive\";\n\n@Directive({\n selector: '[bsSwipe]',\n hostDirectives: [BsObserveSizeDirective],\n standalone: true,\n})\nexport class BsSwipeDirective {\n private container = inject(BsSwipeContainerDirective);\n observeSize = inject(BsObserveSizeDirective);\n\n public offside = input(false);\n\n private orientationEffect = effect(() => {\n const orientation = this.container.orientation();\n this.inlineBlock = (orientation === 'horizontal');\n this.block = (orientation === 'vertical');\n });\n\n private heightEffect = effect(() => {\n const maxHeight = this.container.maxSlideHeight();\n const orientation = this.container.orientation();\n // Only set height when we have valid measurements (> 10px threshold)\n // to avoid circular dependency during initial load\n const targetHeight = (orientation === 'vertical' && maxHeight > 10) ? maxHeight : null;\n this.slideHeight = targetHeight;\n });\n\n @HostBinding('class.align-top')\n @HostBinding('class.float-none')\n @HostBinding('class.w-100')\n @HostBinding('class.pe-auto')\n @HostBinding('class.me-0')\n classes = true;\n\n @HostBinding('class.d-inline-block') inlineBlock = true;\n @HostBinding('class.d-block') block = false;\n @HostBinding('style.height.px') slideHeight: number | null = null;\n\n @HostListener('touchstart', ['$event'])\n onTouchStart(ev: TouchEvent) {\n if (ev.touches.length === 1) {\n ev.preventDefault();\n ev.stopPropagation();\n this.container.pendingAnimation?.finish();\n\n setTimeout(() => {\n this.container.startTouch.set({\n position: {\n x: ev.touches[0].clientX,\n y: ev.touches[0].clientY,\n },\n timestamp: Date.now(),\n });\n this.container.lastTouch.set({\n position: {\n x: ev.touches[0].clientX,\n y: ev.touches[0].clientY,\n },\n isTouching: true,\n });\n }, 20);\n }\n }\n\n @HostListener('touchmove', ['$event'])\n onTouchMove(ev: TouchEvent) {\n ev.preventDefault();\n ev.stopPropagation();\n this.container.lastTouch.set({\n position: {\n x: ev.touches[0].clientX,\n y: ev.touches[0].clientY,\n },\n isTouching: true,\n });\n }\n\n @HostListener('touchend', ['$event'])\n onTouchEnd(ev: TouchEvent) {\n ev.stopPropagation();\n const startTouch = this.container.startTouch();\n const lastTouch = this.container.lastTouch();\n const orientation = this.container.orientation();\n\n if (!!startTouch && !!lastTouch) {\n const distance = (orientation === 'horizontal')\n ? lastTouch.position.x - startTouch.position.x\n : lastTouch.position.y - startTouch.position.y;\n this.container.onSwipe(distance);\n }\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { BsSwipeDirective } from './directives/swipe/swipe.directive';\nimport { BsSwipeContainerDirective } from './directives/swipe-container/swipe-container.directive';\n\n@NgModule({\n imports: [BsSwipeDirective, BsSwipeContainerDirective],\n exports: [BsSwipeDirective, BsSwipeContainerDirective],\n})\nexport class BsSwiperModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@mintplayer/ng-swiper",
3
3
  "private": false,
4
- "version": "21.0.0",
4
+ "version": "21.1.1",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "https://github.com/MintPlayer/mintplayer-ng-bootstrap",
@@ -1,6 +1,5 @@
1
- import * as i0 from '@angular/core';
2
- import { AfterViewInit, OnDestroy, ElementRef, NgZone } from '@angular/core';
3
- import { BehaviorSubject, Observable } from 'rxjs';
1
+ import * as _angular_core from '@angular/core';
2
+ import { AfterViewInit, OnDestroy } from '@angular/core';
4
3
 
5
4
  interface Size {
6
5
  width: number;
@@ -11,15 +10,15 @@ declare class BsObserveSizeDirective implements AfterViewInit, OnDestroy {
11
10
  private element;
12
11
  private platformId;
13
12
  private zone;
14
- constructor(element: ElementRef, platformId: any, zone: NgZone);
15
13
  private observer?;
16
- size$: BehaviorSubject<Size | undefined>;
17
- width$: Observable<number | undefined>;
18
- height$: Observable<number | undefined>;
14
+ constructor();
15
+ size: _angular_core.WritableSignal<Size | undefined>;
16
+ width: _angular_core.Signal<number | undefined>;
17
+ height: _angular_core.Signal<number | undefined>;
19
18
  ngAfterViewInit(): void;
20
19
  ngOnDestroy(): void;
21
- static ɵfac: i0.ɵɵFactoryDeclaration<BsObserveSizeDirective, never>;
22
- static ɵdir: i0.ɵɵDirectiveDeclaration<BsObserveSizeDirective, "[bsObserveSize]", ["bsObserveSize"], {}, {}, never, never, true, never>;
20
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<BsObserveSizeDirective, never>;
21
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<BsObserveSizeDirective, "[bsObserveSize]", ["bsObserveSize"], {}, {}, never, never, true, never>;
23
22
  }
24
23
 
25
24
  export { BsObserveSizeDirective };
@@ -1,10 +1,25 @@
1
- import * as i0 from '@angular/core';
2
- import { AfterViewInit, ElementRef, DestroyRef, QueryList, EventEmitter } from '@angular/core';
1
+ import * as _angular_core from '@angular/core';
2
+ import { AfterViewInit, OnDestroy, ElementRef, QueryList } from '@angular/core';
3
3
  import * as i1 from '@mintplayer/ng-swiper/observe-size';
4
- import { BsObserveSizeDirective, Size } from '@mintplayer/ng-swiper/observe-size';
5
- import { AnimationBuilder, AnimationPlayer } from '@angular/animations';
6
- import { Observable, BehaviorSubject } from 'rxjs';
7
- import * as i3 from '@angular/common';
4
+ import { BsObserveSizeDirective } from '@mintplayer/ng-swiper/observe-size';
5
+ import { AnimationPlayer } from '@angular/animations';
6
+
7
+ declare class BsSwipeDirective {
8
+ private container;
9
+ observeSize: BsObserveSizeDirective;
10
+ offside: _angular_core.InputSignal<boolean>;
11
+ private orientationEffect;
12
+ private heightEffect;
13
+ classes: boolean;
14
+ inlineBlock: boolean;
15
+ block: boolean;
16
+ slideHeight: number | null;
17
+ onTouchStart(ev: TouchEvent): void;
18
+ onTouchMove(ev: TouchEvent): void;
19
+ onTouchEnd(ev: TouchEvent): void;
20
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<BsSwipeDirective, never>;
21
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<BsSwipeDirective, "[bsSwipe]", never, { "offside": { "alias": "offside"; "required": false; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof i1.BsObserveSizeDirective; inputs: {}; outputs: {}; }]>;
22
+ }
8
23
 
9
24
  interface Point {
10
25
  x: number;
@@ -21,41 +36,41 @@ interface StartTouch {
21
36
  timestamp: number;
22
37
  }
23
38
 
24
- declare class BsSwipeContainerDirective implements AfterViewInit {
39
+ declare class BsSwipeContainerDirective implements AfterViewInit, OnDestroy {
25
40
  private animationBuilder;
26
- private destroy;
27
41
  private observeSize;
28
- constructor(element: ElementRef, animationBuilder: AnimationBuilder, destroy: DestroyRef, document: any, observeSize: BsObserveSizeDirective);
42
+ containerElement: ElementRef<any>;
43
+ document: Document;
29
44
  offsetLeft: number | null;
30
45
  offsetRight: number | null;
31
- offsetTop: number | null;
32
- offsetBottom: number | null;
46
+ offsetTopPx: number | null;
47
+ offsetBottomPx: number | null;
33
48
  set swipes(value: QueryList<BsSwipeDirective>);
34
- minimumOffset: number;
35
- get orientation(): "horizontal" | "vertical";
36
- set orientation(value: 'horizontal' | 'vertical');
37
- get imageIndex(): number;
38
- set imageIndex(value: number);
39
- imageIndexChange: EventEmitter<number>;
40
- actualSwipes$: Observable<BsSwipeDirective[]>;
41
- isViewInited$: BehaviorSubject<boolean>;
42
- startTouch$: BehaviorSubject<StartTouch | null>;
43
- lastTouch$: BehaviorSubject<LastTouch | null>;
44
- swipes$: BehaviorSubject<QueryList<BsSwipeDirective> | null>;
45
- slideSizes$: Observable<(Size | undefined)[]>;
46
- maxSlideHeight$: Observable<number>;
47
- imageIndex$: BehaviorSubject<number>;
48
- currentSlideHeight$: Observable<number>;
49
+ minimumOffset: _angular_core.InputSignal<number>;
50
+ animation: _angular_core.InputSignal<"slide" | "fade" | "none">;
51
+ orientation: _angular_core.InputSignal<"horizontal" | "vertical">;
52
+ imageIndex: _angular_core.ModelSignal<number>;
53
+ animationStart: _angular_core.OutputEmitterRef<void>;
54
+ animationEnd: _angular_core.OutputEmitterRef<void>;
55
+ isViewInited: _angular_core.WritableSignal<boolean>;
56
+ isAnimating: _angular_core.WritableSignal<boolean>;
57
+ private isDestroyed;
58
+ startTouch: _angular_core.WritableSignal<StartTouch | null>;
59
+ lastTouch: _angular_core.WritableSignal<LastTouch | null>;
60
+ _swipes: _angular_core.WritableSignal<QueryList<BsSwipeDirective> | null>;
49
61
  pendingAnimation?: AnimationPlayer;
50
- containerElement: ElementRef<HTMLDivElement>;
51
- document: Document;
52
- offset$: Observable<number>;
53
- offsetPrimary$: Observable<number>;
54
- offsetSecondary$: Observable<number>;
55
- padLeft$: Observable<number>;
56
- padRight$: Observable<number>;
57
- orientation$: BehaviorSubject<"horizontal" | "vertical">;
62
+ offset: _angular_core.Signal<number>;
63
+ padLeft: _angular_core.Signal<number>;
64
+ padRight: _angular_core.Signal<number>;
65
+ offsetPrimary: _angular_core.Signal<number>;
66
+ offsetSecondary: _angular_core.Signal<number>;
67
+ actualSwipes: _angular_core.Signal<BsSwipeDirective[]>;
68
+ private slideSizes;
69
+ maxSlideHeight: _angular_core.Signal<number>;
70
+ currentSlideHeight: _angular_core.Signal<number | null>;
71
+ constructor();
58
72
  ngAfterViewInit(): void;
73
+ ngOnDestroy(): void;
59
74
  animateToIndexByDx(distance: number): void;
60
75
  animateToIndex(oldIndex: number, newIndex: number, distance: number, totalSlides: number): void;
61
76
  onSwipe(distance: number): void;
@@ -63,31 +78,14 @@ declare class BsSwipeContainerDirective implements AfterViewInit {
63
78
  next(): void;
64
79
  goto(index: number): void;
65
80
  private gotoAnimate;
66
- static ɵfac: i0.ɵɵFactoryDeclaration<BsSwipeContainerDirective, never>;
67
- static ɵdir: i0.ɵɵDirectiveDeclaration<BsSwipeContainerDirective, "[bsSwipeContainer]", ["bsSwipeContainer"], { "minimumOffset": { "alias": "minimumOffset"; "required": false; }; "orientation": { "alias": "orientation"; "required": false; }; "imageIndex": { "alias": "imageIndex"; "required": false; }; }, { "imageIndexChange": "imageIndexChange"; }, ["swipes"], never, false, [{ directive: typeof i1.BsObserveSizeDirective; inputs: {}; outputs: {}; }]>;
68
- }
69
-
70
- declare class BsSwipeDirective {
71
- private container;
72
- private destroy;
73
- constructor(container: BsSwipeContainerDirective, observeSize: BsObserveSizeDirective, destroy: DestroyRef);
74
- observeSize: BsObserveSizeDirective;
75
- offside: i0.InputSignal<boolean>;
76
- classes: boolean;
77
- inlineBlock: boolean;
78
- block: boolean;
79
- slideHeight: number | null;
80
- onTouchStart(ev: TouchEvent): void;
81
- onTouchMove(ev: TouchEvent): void;
82
- onTouchEnd(ev: TouchEvent): void;
83
- static ɵfac: i0.ɵɵFactoryDeclaration<BsSwipeDirective, never>;
84
- static ɵdir: i0.ɵɵDirectiveDeclaration<BsSwipeDirective, "[bsSwipe]", never, { "offside": { "alias": "offside"; "required": false; "isSignal": true; }; }, {}, never, never, false, [{ directive: typeof i1.BsObserveSizeDirective; inputs: {}; outputs: {}; }]>;
81
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<BsSwipeContainerDirective, never>;
82
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<BsSwipeContainerDirective, "[bsSwipeContainer]", ["bsSwipeContainer"], { "minimumOffset": { "alias": "minimumOffset"; "required": false; "isSignal": true; }; "animation": { "alias": "animation"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "imageIndex": { "alias": "imageIndex"; "required": false; "isSignal": true; }; }, { "imageIndex": "imageIndexChange"; "animationStart": "animationStart"; "animationEnd": "animationEnd"; }, ["swipes"], never, true, [{ directive: typeof i1.BsObserveSizeDirective; inputs: {}; outputs: {}; }]>;
85
83
  }
86
84
 
87
85
  declare class BsSwiperModule {
88
- static ɵfac: i0.ɵɵFactoryDeclaration<BsSwiperModule, never>;
89
- static ɵmod: i0.ɵɵNgModuleDeclaration<BsSwiperModule, [typeof BsSwipeDirective, typeof BsSwipeContainerDirective], [typeof i3.CommonModule], [typeof BsSwipeDirective, typeof BsSwipeContainerDirective]>;
90
- static ɵinj: i0.ɵɵInjectorDeclaration<BsSwiperModule>;
86
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<BsSwiperModule, never>;
87
+ static ɵmod: _angular_core.ɵɵNgModuleDeclaration<BsSwiperModule, never, [typeof BsSwipeDirective, typeof BsSwipeContainerDirective], [typeof BsSwipeDirective, typeof BsSwipeContainerDirective]>;
88
+ static ɵinj: _angular_core.ɵɵInjectorDeclaration<BsSwiperModule>;
91
89
  }
92
90
 
93
91
  export { BsSwipeContainerDirective, BsSwipeDirective, BsSwiperModule };