@mintplayer/ng-swiper 21.9.0 → 22.0.0
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.
- package/fesm2022/mintplayer-ng-swiper-observe-size.mjs +9 -6
- package/fesm2022/mintplayer-ng-swiper-observe-size.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-swiper-swiper.mjs +89 -49
- package/fesm2022/mintplayer-ng-swiper-swiper.mjs.map +1 -1
- package/observe-size/package.json +4 -0
- package/package.json +6 -5
- package/swiper/package.json +4 -0
|
@@ -13,9 +13,12 @@ class BsObserveSizeDirective {
|
|
|
13
13
|
});
|
|
14
14
|
}
|
|
15
15
|
}
|
|
16
|
-
size = signal(undefined,
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
size = signal(undefined, /* @ts-ignore */
|
|
17
|
+
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
18
|
+
width = computed(() => this.size()?.width, /* @ts-ignore */
|
|
19
|
+
...(ngDevMode ? [{ debugName: "width" }] : /* istanbul ignore next */ []));
|
|
20
|
+
height = computed(() => this.size()?.height, /* @ts-ignore */
|
|
21
|
+
...(ngDevMode ? [{ debugName: "height" }] : /* istanbul ignore next */ []));
|
|
19
22
|
ngAfterViewInit() {
|
|
20
23
|
const el = this.element.nativeElement;
|
|
21
24
|
this.observer?.observe(el);
|
|
@@ -27,10 +30,10 @@ class BsObserveSizeDirective {
|
|
|
27
30
|
this.observer.disconnect();
|
|
28
31
|
}
|
|
29
32
|
}
|
|
30
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
31
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
33
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: BsObserveSizeDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
34
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.0", type: BsObserveSizeDirective, isStandalone: true, selector: "[bsObserveSize]", exportAs: ["bsObserveSize"], ngImport: i0 });
|
|
32
35
|
}
|
|
33
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
36
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: BsObserveSizeDirective, decorators: [{
|
|
34
37
|
type: Directive,
|
|
35
38
|
args: [{
|
|
36
39
|
selector: '[bsObserveSize]',
|
|
@@ -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';\nimport { AfterViewInit, computed, Directive, ElementRef, inject, OnDestroy, PLATFORM_ID, signal } from '@angular/core';\nimport { Size } from './size';\n\n@Directive({\n selector: '[bsObserveSize]',\n exportAs: 'bsObserveSize'\n})\nexport class BsObserveSizeDirective implements AfterViewInit, OnDestroy {\n private element = inject(ElementRef);\n private platformId = inject(PLATFORM_ID);\n\n private observer?: ResizeObserver;\n\n constructor() {\n if (!isPlatformServer(this.platformId) && typeof ResizeObserver !== 'undefined') {\n this.observer = new ResizeObserver((entries) => {\n this.size.set(entries[0].contentRect);\n });\n }\n }\n\n size = signal<Size | undefined>(undefined);\n width = computed(() => this.size()?.width);\n height = computed(() => this.size()?.height);\n\n ngAfterViewInit() {\n const el: HTMLElement = this.element.nativeElement;\n this.observer?.observe(el);\n this.size.set({ width: el.clientWidth, height: el.clientHeight });\n }\n\n ngOnDestroy() {\n if (this.observer) {\n this.observer.unobserve(this.element.nativeElement);\n this.observer.disconnect();\n }\n }\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;MAQa,sBAAsB,CAAA;AACzB,IAAA,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC;AAC5B,IAAA,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC;AAEhC,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;AAC7C,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;AACvC,YAAA,CAAC,CAAC;QACJ;IACF;
|
|
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';\nimport { AfterViewInit, computed, Directive, ElementRef, inject, OnDestroy, PLATFORM_ID, signal } from '@angular/core';\nimport { Size } from './size';\n\n@Directive({\n selector: '[bsObserveSize]',\n exportAs: 'bsObserveSize'\n})\nexport class BsObserveSizeDirective implements AfterViewInit, OnDestroy {\n private element = inject(ElementRef);\n private platformId = inject(PLATFORM_ID);\n\n private observer?: ResizeObserver;\n\n constructor() {\n if (!isPlatformServer(this.platformId) && typeof ResizeObserver !== 'undefined') {\n this.observer = new ResizeObserver((entries) => {\n this.size.set(entries[0].contentRect);\n });\n }\n }\n\n size = signal<Size | undefined>(undefined);\n width = computed(() => this.size()?.width);\n height = computed(() => this.size()?.height);\n\n ngAfterViewInit() {\n const el: HTMLElement = this.element.nativeElement;\n this.observer?.observe(el);\n this.size.set({ width: el.clientWidth, height: el.clientHeight });\n }\n\n ngOnDestroy() {\n if (this.observer) {\n this.observer.unobserve(this.element.nativeElement);\n this.observer.disconnect();\n }\n }\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;MAQa,sBAAsB,CAAA;AACzB,IAAA,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC;AAC5B,IAAA,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC;AAEhC,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;AAC7C,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;AACvC,YAAA,CAAC,CAAC;QACJ;IACF;IAEA,IAAI,GAAG,MAAM,CAAmB,SAAS;6EAAC;IAC1C,KAAK,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK;8EAAC;IAC1C,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM;+EAAC;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;uGA7BW,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;kBAJlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,QAAQ,EAAE;AACX,iBAAA;;;ACPD;;AAEG;;;;"}
|
|
@@ -12,14 +12,22 @@ class BsSwipeContainerDirective {
|
|
|
12
12
|
observeSize = inject(BsObserveSizeDirective);
|
|
13
13
|
containerElement = inject((ElementRef));
|
|
14
14
|
document = inject(DOCUMENT);
|
|
15
|
-
offsetLeft = signal(null,
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
15
|
+
offsetLeft = signal(null, /* @ts-ignore */
|
|
16
|
+
...(ngDevMode ? [{ debugName: "offsetLeft" }] : /* istanbul ignore next */ []));
|
|
17
|
+
offsetRight = signal(null, /* @ts-ignore */
|
|
18
|
+
...(ngDevMode ? [{ debugName: "offsetRight" }] : /* istanbul ignore next */ []));
|
|
19
|
+
offsetTopPx = signal(null, /* @ts-ignore */
|
|
20
|
+
...(ngDevMode ? [{ debugName: "offsetTopPx" }] : /* istanbul ignore next */ []));
|
|
21
|
+
offsetBottomPx = signal(null, /* @ts-ignore */
|
|
22
|
+
...(ngDevMode ? [{ debugName: "offsetBottomPx" }] : /* istanbul ignore next */ []));
|
|
23
|
+
swipes = contentChildren(BS_SWIPE_SLIDE, /* @ts-ignore */
|
|
24
|
+
...(ngDevMode ? [{ debugName: "swipes" }] : /* istanbul ignore next */ []));
|
|
25
|
+
minimumOffset = input(50, /* @ts-ignore */
|
|
26
|
+
...(ngDevMode ? [{ debugName: "minimumOffset" }] : /* istanbul ignore next */ []));
|
|
27
|
+
animation = input('slide', /* @ts-ignore */
|
|
28
|
+
...(ngDevMode ? [{ debugName: "animation" }] : /* istanbul ignore next */ []));
|
|
29
|
+
orientation = input('horizontal', /* @ts-ignore */
|
|
30
|
+
...(ngDevMode ? [{ debugName: "orientation" }] : /* istanbul ignore next */ []));
|
|
23
31
|
/**
|
|
24
32
|
* When true, the container handles ArrowLeft/Right (horizontal) or
|
|
25
33
|
* ArrowUp/Down (vertical) plus Home/End to move between slides. The
|
|
@@ -27,11 +35,13 @@ class BsSwipeContainerDirective {
|
|
|
27
35
|
* fire when focus is on the viewport itself); this input still gates
|
|
28
36
|
* dispatch inside `onKeyPress`.
|
|
29
37
|
*/
|
|
30
|
-
keyboardEvents = input(true,
|
|
38
|
+
keyboardEvents = input(true, /* @ts-ignore */
|
|
39
|
+
...(ngDevMode ? [{ debugName: "keyboardEvents" }] : /* istanbul ignore next */ []));
|
|
31
40
|
// Mirror swiper.js's .swiper-horizontal / .swiper-vertical: declare the axis
|
|
32
41
|
// we own at the container level so Firefox Android's APZ excludes the
|
|
33
42
|
// perpendicular gesture (incl. pull-to-refresh) at touchstart arbitration time.
|
|
34
|
-
touchAction = computed(() => this.orientation() === 'horizontal' ? 'pan-y' : 'pan-x',
|
|
43
|
+
touchAction = computed(() => this.orientation() === 'horizontal' ? 'pan-y' : 'pan-x', /* @ts-ignore */
|
|
44
|
+
...(ngDevMode ? [{ debugName: "touchAction" }] : /* istanbul ignore next */ []));
|
|
35
45
|
/**
|
|
36
46
|
* Computed `aria-keyshortcuts` value advertising the keys the directive
|
|
37
47
|
* actually responds to. Returns `null` (attribute removed) when keyboard
|
|
@@ -43,15 +53,21 @@ class BsSwipeContainerDirective {
|
|
|
43
53
|
return this.orientation() === 'horizontal'
|
|
44
54
|
? 'ArrowLeft ArrowRight Home End'
|
|
45
55
|
: 'ArrowUp ArrowDown Home End';
|
|
46
|
-
},
|
|
47
|
-
|
|
56
|
+
}, /* @ts-ignore */
|
|
57
|
+
...(ngDevMode ? [{ debugName: "ariaKeyshortcuts" }] : /* istanbul ignore next */ []));
|
|
58
|
+
imageIndex = model(0, /* @ts-ignore */
|
|
59
|
+
...(ngDevMode ? [{ debugName: "imageIndex" }] : /* istanbul ignore next */ []));
|
|
48
60
|
animationStart = output();
|
|
49
61
|
animationEnd = output();
|
|
50
|
-
isViewInited = signal(false,
|
|
51
|
-
|
|
62
|
+
isViewInited = signal(false, /* @ts-ignore */
|
|
63
|
+
...(ngDevMode ? [{ debugName: "isViewInited" }] : /* istanbul ignore next */ []));
|
|
64
|
+
isAnimating = signal(false, /* @ts-ignore */
|
|
65
|
+
...(ngDevMode ? [{ debugName: "isAnimating" }] : /* istanbul ignore next */ []));
|
|
52
66
|
isDestroyed = false;
|
|
53
|
-
startTouch = signal(null,
|
|
54
|
-
|
|
67
|
+
startTouch = signal(null, /* @ts-ignore */
|
|
68
|
+
...(ngDevMode ? [{ debugName: "startTouch" }] : /* istanbul ignore next */ []));
|
|
69
|
+
lastTouch = signal(null, /* @ts-ignore */
|
|
70
|
+
...(ngDevMode ? [{ debugName: "lastTouch" }] : /* istanbul ignore next */ []));
|
|
55
71
|
pendingAnimation;
|
|
56
72
|
pendingFadeTimeoutId;
|
|
57
73
|
// Computed signals for derived state
|
|
@@ -83,7 +99,8 @@ class BsSwipeContainerDirective {
|
|
|
83
99
|
else {
|
|
84
100
|
return (-imageIndex * 100);
|
|
85
101
|
}
|
|
86
|
-
},
|
|
102
|
+
}, /* @ts-ignore */
|
|
103
|
+
...(ngDevMode ? [{ debugName: "offset" }] : /* istanbul ignore next */ []));
|
|
87
104
|
padLeft = computed(() => {
|
|
88
105
|
const swipes = this.swipes();
|
|
89
106
|
if (swipes.length === 0)
|
|
@@ -98,7 +115,8 @@ class BsSwipeContainerDirective {
|
|
|
98
115
|
}
|
|
99
116
|
}
|
|
100
117
|
return count;
|
|
101
|
-
},
|
|
118
|
+
}, /* @ts-ignore */
|
|
119
|
+
...(ngDevMode ? [{ debugName: "padLeft" }] : /* istanbul ignore next */ []));
|
|
102
120
|
padRight = computed(() => {
|
|
103
121
|
const swipes = this.swipes();
|
|
104
122
|
if (swipes.length === 0)
|
|
@@ -113,13 +131,17 @@ class BsSwipeContainerDirective {
|
|
|
113
131
|
}
|
|
114
132
|
}
|
|
115
133
|
return count;
|
|
116
|
-
},
|
|
117
|
-
|
|
118
|
-
|
|
134
|
+
}, /* @ts-ignore */
|
|
135
|
+
...(ngDevMode ? [{ debugName: "padRight" }] : /* istanbul ignore next */ []));
|
|
136
|
+
offsetPrimary = computed(() => this.offset() - this.padLeft() * 100, /* @ts-ignore */
|
|
137
|
+
...(ngDevMode ? [{ debugName: "offsetPrimary" }] : /* istanbul ignore next */ []));
|
|
138
|
+
offsetSecondary = computed(() => -(this.offset() - this.padLeft() * 100) - (this.padRight() - 1) * 100, /* @ts-ignore */
|
|
139
|
+
...(ngDevMode ? [{ debugName: "offsetSecondary" }] : /* istanbul ignore next */ []));
|
|
119
140
|
actualSwipes = computed(() => {
|
|
120
141
|
const swipes = this.swipes();
|
|
121
142
|
return swipes.filter(swipe => !swipe.offside());
|
|
122
|
-
},
|
|
143
|
+
}, /* @ts-ignore */
|
|
144
|
+
...(ngDevMode ? [{ debugName: "actualSwipes" }] : /* istanbul ignore next */ []));
|
|
123
145
|
// Computed signal that reactively tracks all swipe sizes
|
|
124
146
|
slideSizes = computed(() => {
|
|
125
147
|
const actualSwipes = this.actualSwipes();
|
|
@@ -128,12 +150,14 @@ class BsSwipeContainerDirective {
|
|
|
128
150
|
}
|
|
129
151
|
// Reading each swipe's size() creates reactive dependencies
|
|
130
152
|
return actualSwipes.map(swipe => swipe.observeSize.size());
|
|
131
|
-
},
|
|
153
|
+
}, /* @ts-ignore */
|
|
154
|
+
...(ngDevMode ? [{ debugName: "slideSizes" }] : /* istanbul ignore next */ []));
|
|
132
155
|
maxSlideHeight = computed(() => {
|
|
133
156
|
const slideSizes = this.slideSizes();
|
|
134
157
|
const heights = slideSizes.map(s => s?.height ?? 1);
|
|
135
158
|
return heights.length ? Math.max(...heights) : 1;
|
|
136
|
-
},
|
|
159
|
+
}, /* @ts-ignore */
|
|
160
|
+
...(ngDevMode ? [{ debugName: "maxSlideHeight" }] : /* istanbul ignore next */ []));
|
|
137
161
|
currentSlideHeight = computed(() => {
|
|
138
162
|
const slideSizes = this.slideSizes();
|
|
139
163
|
const imageIndex = this.imageIndex();
|
|
@@ -144,7 +168,8 @@ class BsSwipeContainerDirective {
|
|
|
144
168
|
const result = (orientation === 'vertical') ? maxHeight : currHeight;
|
|
145
169
|
// Return null if measurements aren't valid yet to avoid collapsing the carousel
|
|
146
170
|
return result > 10 ? result : null;
|
|
147
|
-
},
|
|
171
|
+
}, /* @ts-ignore */
|
|
172
|
+
...(ngDevMode ? [{ debugName: "currentSlideHeight" }] : /* istanbul ignore next */ []));
|
|
148
173
|
constructor() {
|
|
149
174
|
// Effect to update offsetLeft/offsetTopPx based on offsetPrimary and orientation
|
|
150
175
|
effect(() => {
|
|
@@ -418,10 +443,10 @@ class BsSwipeContainerDirective {
|
|
|
418
443
|
this.animateToIndex(imageIndex, idx, 0, actualSwipes?.length ?? 1);
|
|
419
444
|
}, 20);
|
|
420
445
|
}
|
|
421
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
422
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "
|
|
446
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: BsSwipeContainerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
447
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "22.0.0", 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 }, keyboardEvents: { classPropertyName: "keyboardEvents", publicName: "keyboardEvents", 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.%": "offsetLeft()", "style.margin-right.%": "offsetRight()", "style.margin-top.px": "offsetTopPx()", "style.margin-bottom.px": "offsetBottomPx()", "style.touch-action": "touchAction()", "style.overscroll-behavior": "\"contain\"", "style.pointer-events": "\"none\"", "style.white-space": "orientation() === \"horizontal\" ? \"nowrap\" : null", "style.display": "orientation() === \"vertical\" ? \"flex\" : \"block\"", "style.flex-direction": "orientation() === \"vertical\" ? \"column\" : null" } }, queries: [{ propertyName: "swipes", predicate: BS_SWIPE_SLIDE, isSignal: true }], exportAs: ["bsSwipeContainer"], hostDirectives: [{ directive: i1.BsObserveSizeDirective }], ngImport: i0 });
|
|
423
448
|
}
|
|
424
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
449
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: BsSwipeContainerDirective, decorators: [{
|
|
425
450
|
type: Directive,
|
|
426
451
|
args: [{
|
|
427
452
|
selector: '[bsSwipeContainer]',
|
|
@@ -454,27 +479,31 @@ class BsSwipeDirective {
|
|
|
454
479
|
el = inject((ElementRef));
|
|
455
480
|
destroyRef = inject(DestroyRef);
|
|
456
481
|
observeSize = inject(BsObserveSizeDirective);
|
|
457
|
-
offside = input(false,
|
|
482
|
+
offside = input(false, /* @ts-ignore */
|
|
483
|
+
...(ngDevMode ? [{ debugName: "offside" }] : /* istanbul ignore next */ []));
|
|
458
484
|
/**
|
|
459
485
|
* Word read by SRs after the position label. Default `'slide'` matches the
|
|
460
486
|
* APG carousel pattern; consumers building image galleries / step wizards
|
|
461
487
|
* can override (e.g. `'image'`, `'step'`). Pass `null` or `''` to suppress
|
|
462
488
|
* the attribute entirely (useful for non-paginated swipe UIs).
|
|
463
489
|
*/
|
|
464
|
-
ariaRoledescription = input('slide',
|
|
490
|
+
ariaRoledescription = input('slide', /* @ts-ignore */
|
|
491
|
+
...(ngDevMode ? [{ debugName: "ariaRoledescription" }] : /* istanbul ignore next */ []));
|
|
465
492
|
/**
|
|
466
493
|
* Override the auto-computed `"N of M"` label. When `null` (the default),
|
|
467
494
|
* the directive computes it from this slide's index among non-offside
|
|
468
495
|
* siblings and the total non-offside count. Offside (clone) slides get
|
|
469
496
|
* no label and rely on `aria-hidden` instead.
|
|
470
497
|
*/
|
|
471
|
-
ariaLabel = input(null,
|
|
498
|
+
ariaLabel = input(null, /* @ts-ignore */
|
|
499
|
+
...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
472
500
|
effectiveAriaRoledescription = computed(() => {
|
|
473
501
|
if (this.offside())
|
|
474
502
|
return null;
|
|
475
503
|
const value = this.ariaRoledescription();
|
|
476
504
|
return value ? value : null;
|
|
477
|
-
},
|
|
505
|
+
}, /* @ts-ignore */
|
|
506
|
+
...(ngDevMode ? [{ debugName: "effectiveAriaRoledescription" }] : /* istanbul ignore next */ []));
|
|
478
507
|
effectiveAriaLabel = computed(() => {
|
|
479
508
|
if (this.offside())
|
|
480
509
|
return null;
|
|
@@ -489,7 +518,8 @@ class BsSwipeDirective {
|
|
|
489
518
|
if (total === 0)
|
|
490
519
|
return null;
|
|
491
520
|
return `${i + 1} of ${total}`;
|
|
492
|
-
},
|
|
521
|
+
}, /* @ts-ignore */
|
|
522
|
+
...(ngDevMode ? [{ debugName: "effectiveAriaLabel" }] : /* istanbul ignore next */ []));
|
|
493
523
|
// Track if we've detected a swipe (vs a tap)
|
|
494
524
|
isSwipeDetected = false;
|
|
495
525
|
// 3px instead of a larger threshold so preventDefault() fires on the first or
|
|
@@ -508,7 +538,8 @@ class BsSwipeDirective {
|
|
|
508
538
|
// pan-y = allow vertical scroll, we handle horizontal swipes
|
|
509
539
|
// pan-x = allow horizontal scroll, we handle vertical swipes
|
|
510
540
|
this.touchAction = (orientation === 'horizontal') ? 'pan-y' : 'pan-x';
|
|
511
|
-
},
|
|
541
|
+
}, /* @ts-ignore */
|
|
542
|
+
...(ngDevMode ? [{ debugName: "orientationEffect" }] : /* istanbul ignore next */ []));
|
|
512
543
|
heightEffect = effect(() => {
|
|
513
544
|
const maxHeight = this.container.maxSlideHeight();
|
|
514
545
|
const orientation = this.container.orientation();
|
|
@@ -516,7 +547,8 @@ class BsSwipeDirective {
|
|
|
516
547
|
// to avoid circular dependency during initial load
|
|
517
548
|
const targetHeight = (orientation === 'vertical' && maxHeight > 10) ? maxHeight : null;
|
|
518
549
|
this.slideHeight = targetHeight;
|
|
519
|
-
},
|
|
550
|
+
}, /* @ts-ignore */
|
|
551
|
+
...(ngDevMode ? [{ debugName: "heightEffect" }] : /* istanbul ignore next */ []));
|
|
520
552
|
inlineBlock = true;
|
|
521
553
|
block = false;
|
|
522
554
|
slideHeight = null;
|
|
@@ -617,10 +649,10 @@ class BsSwipeDirective {
|
|
|
617
649
|
this.container.onSwipe(distance);
|
|
618
650
|
}
|
|
619
651
|
}
|
|
620
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
621
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "
|
|
652
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: BsSwipeDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
653
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.0", type: BsSwipeDirective, isStandalone: true, selector: "[bsSwipe]", inputs: { offside: { classPropertyName: "offside", publicName: "offside", isSignal: true, isRequired: false, transformFunction: null }, ariaRoledescription: { classPropertyName: "ariaRoledescription", publicName: "ariaRoledescription", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.align-top": "true", "class.float-none": "true", "class.w-100": "true", "class.pe-auto": "true", "class.me-0": "true", "class.d-inline-block": "inlineBlock", "class.d-block": "block", "style.height.px": "slideHeight", "style.touch-action": "touchAction", "attr.role": "\"group\"", "attr.aria-roledescription": "effectiveAriaRoledescription()", "attr.aria-label": "effectiveAriaLabel()", "attr.aria-hidden": "offside() ? \"true\" : null" } }, providers: [{ provide: BS_SWIPE_SLIDE, useExisting: BsSwipeDirective }], hostDirectives: [{ directive: i1.BsObserveSizeDirective }], ngImport: i0 });
|
|
622
654
|
}
|
|
623
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
655
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: BsSwipeDirective, decorators: [{
|
|
624
656
|
type: Directive,
|
|
625
657
|
args: [{
|
|
626
658
|
selector: '[bsSwipe]',
|
|
@@ -683,7 +715,8 @@ class BsSwipeViewportDirective {
|
|
|
683
715
|
* card grid that doesn't need a focus stop), or `-1` for
|
|
684
716
|
* programmatic-only focus.
|
|
685
717
|
*/
|
|
686
|
-
tabIndex = input(0,
|
|
718
|
+
tabIndex = input(0, /* @ts-ignore */
|
|
719
|
+
...(ngDevMode ? [{ debugName: "tabIndex" }] : /* istanbul ignore next */ []));
|
|
687
720
|
/**
|
|
688
721
|
* Drives the `aria-live` host attribute. Auto-advancing consumers can pass
|
|
689
722
|
* a computed signal that flips between `'off'` (during rotation) and
|
|
@@ -691,36 +724,43 @@ class BsSwipeViewportDirective {
|
|
|
691
724
|
* `'off'` matches the carousel's "do not announce on every rotation tick"
|
|
692
725
|
* baseline.
|
|
693
726
|
*/
|
|
694
|
-
ariaLive = input('off',
|
|
727
|
+
ariaLive = input('off', /* @ts-ignore */
|
|
728
|
+
...(ngDevMode ? [{ debugName: "ariaLive" }] : /* istanbul ignore next */ []));
|
|
695
729
|
/**
|
|
696
730
|
* Whether SRs should re-read the entire region on change (`true`) or only
|
|
697
731
|
* the diff (`false`). Default `false` — matches the typical case where
|
|
698
732
|
* only the active slide is meaningful.
|
|
699
733
|
*/
|
|
700
|
-
ariaAtomic = input(false,
|
|
734
|
+
ariaAtomic = input(false, /* @ts-ignore */
|
|
735
|
+
...(ngDevMode ? [{ debugName: "ariaAtomic" }] : /* istanbul ignore next */ []));
|
|
701
736
|
/**
|
|
702
737
|
* Which kinds of mutations should trigger the live announcement. Default
|
|
703
738
|
* `null` (attribute absent → SRs use their own default of
|
|
704
739
|
* `'additions text'`). Consumers that want to tune this pass a value such
|
|
705
740
|
* as `'all'` or `'additions'`.
|
|
706
741
|
*/
|
|
707
|
-
ariaRelevant = input(null,
|
|
742
|
+
ariaRelevant = input(null, /* @ts-ignore */
|
|
743
|
+
...(ngDevMode ? [{ debugName: "ariaRelevant" }] : /* istanbul ignore next */ []));
|
|
708
744
|
/**
|
|
709
745
|
* Hide the region from announcements while a transition is in flight, so
|
|
710
746
|
* the SR only reads the *final* slide. Default `null` (not busy);
|
|
711
747
|
* consumers wanting the polish wire it to the swipe container's
|
|
712
748
|
* `isAnimating` signal.
|
|
713
749
|
*/
|
|
714
|
-
ariaBusy = input(null,
|
|
750
|
+
ariaBusy = input(null, /* @ts-ignore */
|
|
751
|
+
...(ngDevMode ? [{ debugName: "ariaBusy" }] : /* istanbul ignore next */ []));
|
|
715
752
|
/**
|
|
716
753
|
* The inner `bsSwipeContainer` is required for the keydown delegation
|
|
717
754
|
* and the orientation / keyshortcuts forwarding. `contentChild` is the
|
|
718
755
|
* natural query because the container is always a descendant; the lookup
|
|
719
756
|
* settles on first CD pass.
|
|
720
757
|
*/
|
|
721
|
-
container = contentChild(BsSwipeContainerDirective,
|
|
722
|
-
|
|
723
|
-
|
|
758
|
+
container = contentChild(BsSwipeContainerDirective, /* @ts-ignore */
|
|
759
|
+
...(ngDevMode ? [{ debugName: "container" }] : /* istanbul ignore next */ []));
|
|
760
|
+
effectiveOrientation = computed(() => this.container()?.orientation() ?? null, /* @ts-ignore */
|
|
761
|
+
...(ngDevMode ? [{ debugName: "effectiveOrientation" }] : /* istanbul ignore next */ []));
|
|
762
|
+
effectiveKeyshortcuts = computed(() => this.container()?.ariaKeyshortcuts() ?? null, /* @ts-ignore */
|
|
763
|
+
...(ngDevMode ? [{ debugName: "effectiveKeyshortcuts" }] : /* istanbul ignore next */ []));
|
|
724
764
|
/**
|
|
725
765
|
* Forwards the keydown to the container only when the viewport itself
|
|
726
766
|
* holds focus — `event.target === host` — so a focusable descendant
|
|
@@ -732,10 +772,10 @@ class BsSwipeViewportDirective {
|
|
|
732
772
|
return;
|
|
733
773
|
this.container()?.onKeyPress(event);
|
|
734
774
|
}
|
|
735
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
736
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "
|
|
775
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: BsSwipeViewportDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
776
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "22.0.0", type: BsSwipeViewportDirective, isStandalone: true, selector: "[bsSwipeViewport]", inputs: { tabIndex: { classPropertyName: "tabIndex", publicName: "tabIndex", isSignal: true, isRequired: false, transformFunction: null }, ariaLive: { classPropertyName: "ariaLive", publicName: "ariaLive", isSignal: true, isRequired: false, transformFunction: null }, ariaAtomic: { classPropertyName: "ariaAtomic", publicName: "ariaAtomic", isSignal: true, isRequired: false, transformFunction: null }, ariaRelevant: { classPropertyName: "ariaRelevant", publicName: "ariaRelevant", isSignal: true, isRequired: false, transformFunction: null }, ariaBusy: { classPropertyName: "ariaBusy", publicName: "ariaBusy", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "keydown.ArrowLeft": "onKeyPress($event)", "keydown.ArrowRight": "onKeyPress($event)", "keydown.ArrowUp": "onKeyPress($event)", "keydown.ArrowDown": "onKeyPress($event)", "keydown.Home": "onKeyPress($event)", "keydown.End": "onKeyPress($event)" }, properties: { "style.overscroll-behavior": "\"contain\"", "style.pointer-events": "\"none\"", "attr.tabindex": "tabIndex()", "attr.aria-live": "ariaLive()", "attr.aria-atomic": "ariaAtomic()", "attr.aria-relevant": "ariaRelevant()", "attr.aria-busy": "ariaBusy()", "attr.aria-orientation": "effectiveOrientation()", "attr.aria-keyshortcuts": "effectiveKeyshortcuts()" } }, queries: [{ propertyName: "container", first: true, predicate: BsSwipeContainerDirective, descendants: true, isSignal: true }], ngImport: i0 });
|
|
737
777
|
}
|
|
738
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
778
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: BsSwipeViewportDirective, decorators: [{
|
|
739
779
|
type: Directive,
|
|
740
780
|
args: [{
|
|
741
781
|
selector: '[bsSwipeViewport]',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mintplayer-ng-swiper-swiper.mjs","sources":["../../../../libs/mintplayer-ng-swiper/swiper/src/tokens/bs-swipe-slide.ts","../../../../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/directives/swipe-viewport/swipe-viewport.directive.ts","../../../../libs/mintplayer-ng-swiper/swiper/mintplayer-ng-swiper-swiper.ts"],"sourcesContent":["import { InjectionToken, Signal } from '@angular/core';\nimport { Size } from '@mintplayer/ng-swiper/observe-size';\n\n/**\n * Minimal contract a slide must satisfy to be queried by `bsSwipeContainer`.\n *\n * The container uses two pieces of slide state:\n * - `offside()` distinguishes wraparound clones from real slides\n * - `observeSize.size()` feeds the container's slide-height computation\n *\n * Modelling this as a token + interface (rather than `contentChildren(BsSwipeDirective)`\n * directly) breaks a circular import between the swipe and swipe-container\n * directive modules. The cycle is harmless for class-based `inject()` (which\n * resolves at construction time), but it caused the container's lazy\n * `extractQueriesMetadata` getter to see `BsSwipeDirective` as undefined in\n * vitest's JIT-compiled test environment, which made render-based specs\n * impossible. Routing the query through this token-and-interface pair fixes\n * that without requiring a deeper refactor.\n */\nexport interface BsSwipeSlide {\n offside: Signal<boolean>;\n observeSize: { size: Signal<Size | undefined> };\n}\n\nexport const BS_SWIPE_SLIDE = new InjectionToken<BsSwipeSlide>('BsSwipeSlide');\n","import { DOCUMENT } from '@angular/common';\nimport { animate, AnimationBuilder, AnimationPlayer, style } from '@angular/animations';\nimport { AfterViewInit, computed, contentChildren, Directive, effect, ElementRef, inject, input, model, OnDestroy, output, 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 { BS_SWIPE_SLIDE } from '../../tokens/bs-swipe-slide';\n\n@Directive({\n selector: '[bsSwipeContainer]',\n exportAs: 'bsSwipeContainer',\n hostDirectives: [BsObserveSizeDirective],\n host: {\n '[style.margin-left.%]': 'offsetLeft()',\n '[style.margin-right.%]': 'offsetRight()',\n '[style.margin-top.px]': 'offsetTopPx()',\n '[style.margin-bottom.px]': 'offsetBottomPx()',\n '[style.touch-action]': 'touchAction()',\n '[style.overscroll-behavior]': '\"contain\"',\n // Pairs with bsSwipe's [class.pe-auto]: gaps between slides are click-through,\n // slides themselves remain interactive.\n '[style.pointer-events]': '\"none\"',\n // Horizontal mode lays slides out as inline-block in a single row; nowrap\n // prevents them wrapping when their combined width exceeds the container.\n '[style.white-space]': 'orientation() === \"horizontal\" ? \"nowrap\" : null',\n // Vertical mode stacks slides as a column. Horizontal mode is explicitly\n // 'block' so a consumer-applied class (e.g. d-flex) can't silently change\n // the layout model — the directive's slides assume an inline-block flow.\n '[style.display]': 'orientation() === \"vertical\" ? \"flex\" : \"block\"',\n '[style.flex-direction]': 'orientation() === \"vertical\" ? \"column\" : null',\n },\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 offsetLeft = signal<number | null>(null);\n offsetRight = signal<number | null>(null);\n offsetTopPx = signal<number | null>(null);\n offsetBottomPx = signal<number | null>(null);\n\n readonly swipes = contentChildren(BS_SWIPE_SLIDE);\n\n minimumOffset = input(50);\n animation = input<'slide' | 'fade' | 'none'>('slide');\n orientation = input<'horizontal' | 'vertical'>('horizontal');\n /**\n * When true, the container handles ArrowLeft/Right (horizontal) or\n * ArrowUp/Down (vertical) plus Home/End to move between slides. The\n * keydown listeners live on the wrapping `bsSwipeViewport` host (only\n * fire when focus is on the viewport itself); this input still gates\n * dispatch inside `onKeyPress`.\n */\n keyboardEvents = input(true);\n // Mirror swiper.js's .swiper-horizontal / .swiper-vertical: declare the axis\n // we own at the container level so Firefox Android's APZ excludes the\n // perpendicular gesture (incl. pull-to-refresh) at touchstart arbitration time.\n touchAction = computed(() => this.orientation() === 'horizontal' ? 'pan-y' : 'pan-x');\n /**\n * Computed `aria-keyshortcuts` value advertising the keys the directive\n * actually responds to. Returns `null` (attribute removed) when keyboard\n * handling is disabled, so SRs never advertise shortcuts that won't fire.\n */\n ariaKeyshortcuts = computed(() => {\n if (!this.keyboardEvents()) return null;\n return this.orientation() === 'horizontal'\n ? 'ArrowLeft ArrowRight Home End'\n : 'ArrowUp ArrowDown Home End';\n });\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 pendingAnimation?: AnimationPlayer;\n private pendingFadeTimeoutId?: ReturnType<typeof setTimeout>;\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.length === 0) return 1; // Default to 1 to prevent container collapse before swipes are loaded\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.length === 0) return 1; // Default to 1 to prevent container collapse before swipes are loaded\n\n let count = 0;\n for (const s of [...swipes].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 return swipes.filter(swipe => !swipe.offside());\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 animation = this.animation();\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 // In fade mode slides are positioned by CSS (position: absolute) rather\n // than by margin offsets — keep the host margins null so they don't\n // visually shift the absolute layer's containing block.\n if (animation === 'fade') {\n this.offsetLeft.set(null);\n this.offsetTopPx.set(null);\n return;\n }\n\n if (orientation === 'horizontal') {\n this.offsetLeft.set(offsetPrimary);\n this.offsetTopPx.set(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.set((offsetPrimary / 100) * maxSlideHeight);\n this.offsetLeft.set(null);\n }\n });\n\n // Effect to update offsetRight/offsetBottomPx based on offsetSecondary and orientation\n effect(() => {\n const animation = this.animation();\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 (animation === 'fade') {\n this.offsetRight.set(null);\n this.offsetBottomPx.set(null);\n return;\n }\n\n if (orientation === 'horizontal') {\n this.offsetRight.set(offsetSecondary);\n this.offsetBottomPx.set(null);\n } else {\n // For vertical mode, convert percentage to pixels using slide height\n this.offsetBottomPx.set((offsetSecondary / 100) * maxSlideHeight);\n this.offsetRight.set(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 if (this.pendingFadeTimeoutId !== undefined) {\n clearTimeout(this.pendingFadeTimeoutId);\n this.pendingFadeTimeoutId = undefined;\n }\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 // Handle 'fade' animation mode - opacity is driven by CSS in the consumer\n // (via [class.active] + a CSS transition). Update the index synchronously\n // and defer animationEnd to roughly match the CSS transition duration so\n // consumers waiting on it (e.g. auto-advance pacing) still see consistent\n // event timing across animation modes.\n if (animation === 'fade') {\n // If a previous fade is still pending its animationEnd, cancel it so we\n // don't double-emit when navigation is triggered rapidly.\n if (this.pendingFadeTimeoutId !== undefined) {\n clearTimeout(this.pendingFadeTimeoutId);\n }\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.pendingFadeTimeoutId = setTimeout(() => {\n this.pendingFadeTimeoutId = undefined;\n if (!this.isDestroyed) this.animationEnd.emit();\n }, 500);\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.set(null);\n this.offsetRight.set(null);\n } else {\n this.offsetTopPx.set(null);\n this.offsetBottomPx.set(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 /**\n * Public keydown dispatcher invoked by `bsSwipeViewport`'s host listener\n * (the viewport is the focusable region; the container is non-focusable\n * inner machinery). Maps the four arrow keys (orientation-aware) plus\n * Home / End to slide navigation. Calls `preventDefault()` only for the\n * keys this directive actually consumed, so cross-orientation arrows\n * (e.g. ArrowUp on a horizontal swiper) still scroll the page normally.\n *\n * Parameter typed as `Event` because Angular host listeners infer `Event`\n * from the template-style binding string; cast inside.\n */\n onKeyPress(event: Event) {\n if (!this.keyboardEvents()) return;\n const ev = event as KeyboardEvent;\n const orientation = this.orientation();\n let handled = false;\n switch (ev.key) {\n case 'ArrowLeft':\n if (orientation === 'horizontal') { this.previous(); handled = true; }\n break;\n case 'ArrowRight':\n if (orientation === 'horizontal') { this.next(); handled = true; }\n break;\n case 'ArrowUp':\n if (orientation === 'vertical') { this.previous(); handled = true; }\n break;\n case 'ArrowDown':\n if (orientation === 'vertical') { this.next(); handled = true; }\n break;\n case 'Home':\n this.goto(0); handled = true;\n break;\n case 'End':\n this.goto(Math.max(0, this.actualSwipes().length - 1)); handled = true;\n break;\n }\n if (handled) ev.preventDefault();\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 { afterNextRender, computed, DestroyRef, Directive, effect, ElementRef, inject, input } from \"@angular/core\";\nimport { BsObserveSizeDirective } from \"@mintplayer/ng-swiper/observe-size\";\nimport { BsSwipeContainerDirective } from \"../swipe-container/swipe-container.directive\";\nimport { BS_SWIPE_SLIDE, BsSwipeSlide } from \"../../tokens/bs-swipe-slide\";\n\n@Directive({\n selector: '[bsSwipe]',\n hostDirectives: [BsObserveSizeDirective],\n providers: [{ provide: BS_SWIPE_SLIDE, useExisting: BsSwipeDirective }],\n host: {\n '[class.align-top]': 'true',\n '[class.float-none]': 'true',\n '[class.w-100]': 'true',\n '[class.pe-auto]': 'true',\n '[class.me-0]': 'true',\n '[class.d-inline-block]': 'inlineBlock',\n '[class.d-block]': 'block',\n '[style.height.px]': 'slideHeight',\n '[style.touch-action]': 'touchAction',\n '[attr.role]': '\"group\"',\n '[attr.aria-roledescription]': 'effectiveAriaRoledescription()',\n '[attr.aria-label]': 'effectiveAriaLabel()',\n '[attr.aria-hidden]': 'offside() ? \"true\" : null',\n },\n})\nexport class BsSwipeDirective implements BsSwipeSlide {\n private container = inject(BsSwipeContainerDirective);\n private el = inject(ElementRef<HTMLElement>);\n private destroyRef = inject(DestroyRef);\n observeSize = inject(BsObserveSizeDirective);\n\n public offside = input(false);\n\n /**\n * Word read by SRs after the position label. Default `'slide'` matches the\n * APG carousel pattern; consumers building image galleries / step wizards\n * can override (e.g. `'image'`, `'step'`). Pass `null` or `''` to suppress\n * the attribute entirely (useful for non-paginated swipe UIs).\n */\n ariaRoledescription = input<string | null>('slide');\n\n /**\n * Override the auto-computed `\"N of M\"` label. When `null` (the default),\n * the directive computes it from this slide's index among non-offside\n * siblings and the total non-offside count. Offside (clone) slides get\n * no label and rely on `aria-hidden` instead.\n */\n ariaLabel = input<string | null>(null);\n\n readonly effectiveAriaRoledescription = computed(() => {\n if (this.offside()) return null;\n const value = this.ariaRoledescription();\n return value ? value : null;\n });\n\n readonly effectiveAriaLabel = computed(() => {\n if (this.offside()) return null;\n const explicit = this.ariaLabel();\n if (explicit !== null) return explicit;\n const visible = this.container.actualSwipes();\n const i = visible.indexOf(this);\n if (i < 0) return null;\n const total = visible.length;\n if (total === 0) return null;\n return `${i + 1} of ${total}`;\n });\n\n // Track if we've detected a swipe (vs a tap)\n private isSwipeDetected = false;\n // 3px instead of a larger threshold so preventDefault() fires on the first or\n // second touchmove — Firefox Android's APZ can otherwise claim a downward\n // gesture as pull-to-refresh before our handler arbitrates the direction.\n private readonly SWIPE_THRESHOLD = 3; // pixels\n\n // Synchronous copy of start position for use during the 20ms gap\n // before startTouch signal is set (needed to call preventDefault\n // on early touchmove events to block Firefox Android PullToRefresh)\n private touchStartPos: { x: number, y: number } | null = null;\n\n private orientationEffect = effect(() => {\n const orientation = this.container.orientation();\n this.inlineBlock = (orientation === 'horizontal');\n this.block = (orientation === 'vertical');\n // Tell browser which axis we handle, allowing scroll on the other axis\n // pan-y = allow vertical scroll, we handle horizontal swipes\n // pan-x = allow horizontal scroll, we handle vertical swipes\n this.touchAction = (orientation === 'horizontal') ? 'pan-y' : 'pan-x';\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 inlineBlock = true;\n block = false;\n slideHeight: number | null = null;\n touchAction: 'pan-x' | 'pan-y' = 'pan-y';\n\n constructor() {\n // Register touch listeners manually with { passive: false } for touchmove/touchend.\n // Angular's host event bindings register passive listeners by default for touch events,\n // which silently ignores preventDefault(). This caused Firefox Android's PullToRefresh\n // to trigger because the browser's default action was never actually cancelled.\n // Wrapped in afterNextRender so it doesn't run during SSR (nativeElement is not a real\n // DOM element on the server); the callback fires before the next paint, so it always\n // attaches before the user can physically touch the slide.\n afterNextRender(() => {\n const elem = this.el.nativeElement;\n const onTouchStart = (ev: TouchEvent) => this.onTouchStart(ev);\n const onTouchMove = (ev: TouchEvent) => this.onTouchMove(ev);\n const onTouchEnd = (ev: TouchEvent) => this.onTouchEnd(ev);\n\n elem.addEventListener('touchstart', onTouchStart, { passive: true });\n elem.addEventListener('touchmove', onTouchMove, { passive: false });\n elem.addEventListener('touchend', onTouchEnd, { passive: false });\n\n this.destroyRef.onDestroy(() => {\n elem.removeEventListener('touchstart', onTouchStart);\n elem.removeEventListener('touchmove', onTouchMove);\n elem.removeEventListener('touchend', onTouchEnd);\n });\n });\n }\n\n onTouchStart(ev: TouchEvent) {\n if (ev.touches.length === 1) {\n ev.stopPropagation(); // Prevent bubbling, but allow clicks\n this.isSwipeDetected = false;\n this.touchStartPos = { x: ev.touches[0].clientX, y: ev.touches[0].clientY };\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 onTouchMove(ev: TouchEvent) {\n ev.stopPropagation();\n\n // Direction lock: only own the gesture when movement on our axis exceeds the\n // threshold AND dominates the perpendicular axis. Without the dominance check,\n // a small primary-axis jitter combined with a real perpendicular scroll would\n // wrongly block native page scrolling. Once locked in, keep calling\n // preventDefault for the rest of the stroke.\n // Use synchronous touchStartPos as fallback during the 20ms gap before the\n // startTouch signal is set, so preventDefault fires on early touchmove events\n // (prevents Firefox Android PullToRefresh).\n const startTouch = this.container.startTouch();\n const refPos = startTouch?.position ?? this.touchStartPos;\n if (refPos) {\n const dx = Math.abs(ev.touches[0].clientX - refPos.x);\n const dy = Math.abs(ev.touches[0].clientY - refPos.y);\n const orientation = this.container.orientation();\n const primary = orientation === 'horizontal' ? dx : dy;\n const perpendicular = orientation === 'horizontal' ? dy : dx;\n if (!this.isSwipeDetected && primary > this.SWIPE_THRESHOLD && primary >= perpendicular) {\n this.isSwipeDetected = true;\n }\n if (this.isSwipeDetected) {\n ev.preventDefault();\n }\n }\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 }\n\n onTouchEnd(ev: TouchEvent) {\n ev.stopPropagation();\n this.touchStartPos = null;\n if (this.isSwipeDetected) {\n ev.preventDefault();\n }\n\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 { computed, contentChild, Directive, ElementRef, inject, input } from '@angular/core';\nimport { BsSwipeContainerDirective } from '../swipe-container/swipe-container.directive';\n\n/**\n * Marks an element as the static viewport that wraps a `bsSwipeContainer`'s\n * moving track. The element it's applied to is expected to have\n * `overflow: hidden` (via a class or its own styling) so the moving track\n * is clipped to a fixed window.\n *\n * Applies the CSS that historically lived on the consuming component's\n * outer wrapper (bs-carousel's `.carousel-inner`):\n *\n * - `overscroll-behavior: contain` — keeps Firefox Android's APZ from\n * chaining a vertical drag into the document and triggering native\n * pull-to-refresh. Even though Firefox documented this as not honoured\n * for PTR historically, the empirical behaviour on the carousel demo\n * showed this property was load-bearing alongside the per-slide\n * `touch-action: pan-x`.\n *\n * - `pointer-events: none` — pairs with the `bsSwipe`'s `pe-auto` so taps\n * on the gaps between slides (or on the viewport's letterboxing) pass\n * through, while the slides themselves remain interactive.\n *\n * Owns the focusable, key-handling region for the swiper widget — APG\n * carousel pattern places the slide-rotation tab stop here, not on the\n * inner container or per-slide. Adds `tabindex` (default `0`), forwards\n * `aria-orientation` + `aria-keyshortcuts` from the inner container, and\n * delegates ArrowLeft/Right/Up/Down + Home/End keydowns to\n * `BsSwipeContainerDirective.onKeyPress` only when the viewport itself is\n * the event target — so an input/link inside a slide keeps its own key\n * behaviour. Also owns the live-region tuple (`aria-live`, `-atomic`,\n * `-relevant`, `-busy`) since the viewport is what SRs watch for slide\n * content changes.\n */\n@Directive({\n selector: '[bsSwipeViewport]',\n host: {\n '[style.overscroll-behavior]': '\"contain\"',\n '[style.pointer-events]': '\"none\"',\n '[attr.tabindex]': 'tabIndex()',\n '[attr.aria-live]': 'ariaLive()',\n '[attr.aria-atomic]': 'ariaAtomic()',\n '[attr.aria-relevant]': 'ariaRelevant()',\n '[attr.aria-busy]': 'ariaBusy()',\n '[attr.aria-orientation]': 'effectiveOrientation()',\n '[attr.aria-keyshortcuts]': 'effectiveKeyshortcuts()',\n '(keydown.ArrowLeft)': 'onKeyPress($event)',\n '(keydown.ArrowRight)': 'onKeyPress($event)',\n '(keydown.ArrowUp)': 'onKeyPress($event)',\n '(keydown.ArrowDown)': 'onKeyPress($event)',\n '(keydown.Home)': 'onKeyPress($event)',\n '(keydown.End)': 'onKeyPress($event)',\n },\n})\nexport class BsSwipeViewportDirective {\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /**\n * Tabindex on the viewport. Default `0` makes the swiper a single tab\n * stop — APG carousel pattern. Pass `null` to opt out (e.g., a swipe\n * card grid that doesn't need a focus stop), or `-1` for\n * programmatic-only focus.\n */\n tabIndex = input<number | null>(0);\n\n /**\n * Drives the `aria-live` host attribute. Auto-advancing consumers can pass\n * a computed signal that flips between `'off'` (during rotation) and\n * `'polite'` (when paused / no auto-advance / reduced motion). Default\n * `'off'` matches the carousel's \"do not announce on every rotation tick\"\n * baseline.\n */\n ariaLive = input<'off' | 'polite' | 'assertive'>('off');\n\n /**\n * Whether SRs should re-read the entire region on change (`true`) or only\n * the diff (`false`). Default `false` — matches the typical case where\n * only the active slide is meaningful.\n */\n ariaAtomic = input<boolean | null>(false);\n\n /**\n * Which kinds of mutations should trigger the live announcement. Default\n * `null` (attribute absent → SRs use their own default of\n * `'additions text'`). Consumers that want to tune this pass a value such\n * as `'all'` or `'additions'`.\n */\n ariaRelevant = input<string | null>(null);\n\n /**\n * Hide the region from announcements while a transition is in flight, so\n * the SR only reads the *final* slide. Default `null` (not busy);\n * consumers wanting the polish wire it to the swipe container's\n * `isAnimating` signal.\n */\n ariaBusy = input<boolean | null>(null);\n\n /**\n * The inner `bsSwipeContainer` is required for the keydown delegation\n * and the orientation / keyshortcuts forwarding. `contentChild` is the\n * natural query because the container is always a descendant; the lookup\n * settles on first CD pass.\n */\n private readonly container = contentChild(BsSwipeContainerDirective);\n\n readonly effectiveOrientation = computed(() => this.container()?.orientation() ?? null);\n readonly effectiveKeyshortcuts = computed(() => this.container()?.ariaKeyshortcuts() ?? null);\n\n /**\n * Forwards the keydown to the container only when the viewport itself\n * holds focus — `event.target === host` — so a focusable descendant\n * (form input, link inside a slide) keeps native key handling. APG\n * carousel pattern requires this guard.\n */\n onKeyPress(event: Event) {\n if (event.target !== this.el.nativeElement) return;\n this.container()?.onKeyPress(event);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;MAwBa,cAAc,GAAG,IAAI,cAAc,CAAe,cAAc;;MCQhE,yBAAyB,CAAA;AAC5B,IAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,IAAA,WAAW,GAAG,MAAM,CAAC,sBAAsB,CAAC;AACpD,IAAA,gBAAgB,GAAG,MAAM,EAAC,UAA0B,EAAC;AACrD,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAa;AAEvC,IAAA,UAAU,GAAG,MAAM,CAAgB,IAAI,iFAAC;AACxC,IAAA,WAAW,GAAG,MAAM,CAAgB,IAAI,kFAAC;AACzC,IAAA,WAAW,GAAG,MAAM,CAAgB,IAAI,kFAAC;AACzC,IAAA,cAAc,GAAG,MAAM,CAAgB,IAAI,qFAAC;AAEnC,IAAA,MAAM,GAAG,eAAe,CAAC,cAAc,6EAAC;AAEjD,IAAA,aAAa,GAAG,KAAK,CAAC,EAAE,oFAAC;AACzB,IAAA,SAAS,GAAG,KAAK,CAA4B,OAAO,gFAAC;AACrD,IAAA,WAAW,GAAG,KAAK,CAA4B,YAAY,kFAAC;AAC5D;;;;;;AAMG;AACH,IAAA,cAAc,GAAG,KAAK,CAAC,IAAI,qFAAC;;;;IAI5B,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,KAAK,YAAY,GAAG,OAAO,GAAG,OAAO,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,aAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;AACrF;;;;AAIG;AACH,IAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAK;AAC/B,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AAAE,YAAA,OAAO,IAAI;AACvC,QAAA,OAAO,IAAI,CAAC,WAAW,EAAE,KAAK;AAC5B,cAAE;cACA,4BAA4B;AAClC,IAAA,CAAC,uFAAC;AACF,IAAA,UAAU,GAAG,KAAK,CAAS,CAAC,iFAAC;IAC7B,cAAc,GAAG,MAAM,EAAQ;IAC/B,YAAY,GAAG,MAAM,EAAQ;AAE7B,IAAA,YAAY,GAAG,MAAM,CAAU,KAAK,mFAAC;AACrC,IAAA,WAAW,GAAG,MAAM,CAAU,KAAK,kFAAC;IAC5B,WAAW,GAAG,KAAK;AAC3B,IAAA,UAAU,GAAG,MAAM,CAAoB,IAAI,iFAAC;AAC5C,IAAA,SAAS,GAAG,MAAM,CAAmB,IAAI,gFAAC;AAC1C,IAAA,gBAAgB;AACR,IAAA,oBAAoB;;AAG5B,IAAA,MAAM,GAAG,QAAQ,CAAC,MAAK;AACrB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;AACpC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;AAClC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;AACpC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE;AACxC,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE;QACtC,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;AAC7C,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE;QAE5C,IAAI,CAAC,YAAY,EAAE;AACjB,YAAA,QAAQ,CAAC,UAAU,GAAG,GAAG;QAC3B;aAAO,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,SAAS,EAAE;;;AAGtC,YAAA,MAAM,eAAe,GAAG,WAAW,KAAK;AACtC,mBAAG,aAAa,EAAE,KAAK,IAAI,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,WAAW;kBACxE,cAAc;AAClB,YAAA,IAAI,eAAe,KAAK,CAAC,EAAE;AACzB,gBAAA,QAAQ,CAAC,UAAU,GAAG,GAAG;YAC3B;AACA,YAAA,MAAM,KAAK,GAAG,WAAW,KAAK;AAC5B,mBAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;AAC/C,mBAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;AAClD,YAAA,QAAQ,CAAC,UAAU,GAAG,GAAG,GAAG,CAAC,KAAK,GAAG,eAAe,IAAI,GAAG;QAC7D;aAAO;AACL,YAAA,QAAQ,CAAC,UAAU,GAAG,GAAG;QAC3B;AACF,IAAA,CAAC,6EAAC;AAEF,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAK;AACtB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;AAC5B,QAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;QAElC,IAAI,KAAK,GAAG,CAAC;AACb,QAAA,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE;AACtB,YAAA,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE;gBAChB;YACF;iBAAO;AACL,gBAAA,KAAK,EAAE;YACT;QACF;AACA,QAAA,OAAO,KAAK;AACd,IAAA,CAAC,8EAAC;AAEF,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAK;AACvB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;AAC5B,QAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;QAElC,IAAI,KAAK,GAAG,CAAC;QACb,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;AACrC,YAAA,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE;gBAChB;YACF;iBAAO;AACL,gBAAA,KAAK,EAAE;YACT;QACF;AACA,QAAA,OAAO,KAAK;AACd,IAAA,CAAC,+EAAC;AAEF,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,GAAG,oFAAC;AACpE,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,GAAG,sFAAC;AAEvG,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AAC3B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;AAC5B,QAAA,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;AACjD,IAAA,CAAC,mFAAC;;AAGM,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;AACjC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE;QACxC,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;AAC9C,YAAA,OAAO,EAAE;QACX;;AAEA,QAAA,OAAO,YAAY,CAAC,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;AAC5D,IAAA,CAAC,iFAAC;AAEF,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;AAC7B,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;AACpC,QAAA,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC;AACnD,QAAA,OAAO,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC;AAClD,IAAA,CAAC,qFAAC;AAEF,IAAA,kBAAkB,GAAG,QAAQ,CAAgB,MAAK;AAChD,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;AACpC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;AACpC,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE;AACtC,QAAA,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC;AACnD,QAAA,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC;QAC3D,MAAM,UAAU,GAAW,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,IAAI,SAAS;AACtE,QAAA,MAAM,MAAM,GAAG,CAAC,WAAW,KAAK,UAAU,IAAI,SAAS,GAAG,UAAU;;QAEpE,OAAO,MAAM,GAAG,EAAE,GAAG,MAAM,GAAG,IAAI;AACpC,IAAA,CAAC,yFAAC;AAEF,IAAA,WAAA,GAAA;;QAEE,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;AAClC,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE;AAC1C,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE;AACtC,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE;AAC5C,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE;;YAGtC,IAAI,WAAW,EAAE;gBACf;YACF;;;;AAKA,YAAA,IAAI,SAAS,KAAK,MAAM,EAAE;AACxB,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AACzB,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;gBAC1B;YACF;AAEA,YAAA,IAAI,WAAW,KAAK,YAAY,EAAE;AAChC,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC;AAClC,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;YAC5B;iBAAO;;;;AAIL,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,aAAa,GAAG,GAAG,IAAI,cAAc,CAAC;AAC5D,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;YAC3B;AACF,QAAA,CAAC,CAAC;;QAGF,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;AAClC,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,EAAE;AAC9C,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE;AACtC,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE;AAC5C,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE;;YAGtC,IAAI,WAAW,EAAE;gBACf;YACF;AAEA,YAAA,IAAI,SAAS,KAAK,MAAM,EAAE;AACxB,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;AAC1B,gBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;gBAC7B;YACF;AAEA,YAAA,IAAI,WAAW,KAAK,YAAY,EAAE;AAChC,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,eAAe,CAAC;AACrC,gBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;YAC/B;iBAAO;;AAEL,gBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,eAAe,GAAG,GAAG,IAAI,cAAc,CAAC;AACjE,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;YAC5B;AACF,QAAA,CAAC,CAAC;IAEJ;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;IAC7B;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,IAAI,CAAC,gBAAgB,EAAE,OAAO,EAAE;AAChC,QAAA,IAAI,IAAI,CAAC,oBAAoB,KAAK,SAAS,EAAE;AAC3C,YAAA,YAAY,CAAC,IAAI,CAAC,oBAAoB,CAAC;AACvC,YAAA,IAAI,CAAC,oBAAoB,GAAG,SAAS;QACvC;IACF;AAEA,IAAA,kBAAkB,CAAC,QAAgB,EAAA;AACjC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;AACpC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE;AAExC,QAAA,IAAI,QAAgB;AACpB,QAAA,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,aAAa,EAAE,EAAE;YAC7C,QAAQ,GAAG,UAAU;QACvB;aAAO;AACL,YAAA,QAAQ,GAAG,UAAU,IAAI,QAAQ,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACjD;AAEA,QAAA,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC,CAAC;IAChF;AAEA,IAAA,cAAc,CAAC,QAAgB,EAAE,QAAgB,EAAE,QAAgB,EAAE,WAAmB,EAAA;AACtF,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;AAClC,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE;AACtC,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,aAAa;AAC5D,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE;;AAE5C,QAAA,MAAM,eAAe,GAAG,WAAW,KAAK;cACpC,gBAAgB,CAAC;cACjB,cAAc;AAElB,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;;AAG1B,QAAA,IAAI,SAAS,KAAK,MAAM,EAAE;;AAExB,YAAA,IAAI,QAAQ,KAAK,CAAC,CAAC,EAAE;gBACnB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC;YACtC;AAAO,iBAAA,IAAI,QAAQ,KAAK,WAAW,EAAE;AACnC,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;YACxB;iBAAO;AACL,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC;YAC/B;AACA,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AACzB,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AACxB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;YACxB;QACF;;;;;;AAOA,QAAA,IAAI,SAAS,KAAK,MAAM,EAAE;;;AAGxB,YAAA,IAAI,IAAI,CAAC,oBAAoB,KAAK,SAAS,EAAE;AAC3C,gBAAA,YAAY,CAAC,IAAI,CAAC,oBAAoB,CAAC;YACzC;AACA,YAAA,IAAI,QAAQ,KAAK,CAAC,CAAC,EAAE;gBACnB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC;YACtC;AAAO,iBAAA,IAAI,QAAQ,KAAK,WAAW,EAAE;AACnC,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;YACxB;iBAAO;AACL,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC;YAC/B;AACA,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AACzB,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AACxB,YAAA,IAAI,CAAC,oBAAoB,GAAG,UAAU,CAAC,MAAK;AAC1C,gBAAA,IAAI,CAAC,oBAAoB,GAAG,SAAS;gBACrC,IAAI,CAAC,IAAI,CAAC,WAAW;AAAE,oBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;YACjD,CAAC,EAAE,GAAG,CAAC;YACP;QACF;;AAGA,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;AAC1B,QAAA,IAAI,WAAW,KAAK,YAAY,EAAE;AAChC,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AACzB,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;QAC5B;aAAO;AACL,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;AAC1B,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;QAC/B;AAEA,QAAA,IAAI,WAAW,KAAK,YAAY,EAAE;YAChC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;AAClD,gBAAA,KAAK,CAAC;AACJ,oBAAA,aAAa,EAAE,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,GAAG,eAAe,GAAG,QAAQ,IAAI,IAAI;AACpE,oBAAA,cAAc,EAAE,CAAC,CAAC,QAAQ,GAAG,CAAC,IAAI,eAAe,GAAG,QAAQ,IAAI,IAAI;iBACrE,CAAC;AACF,gBAAA,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC;AAC1B,oBAAA,aAAa,EAAE,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,GAAG,eAAe,IAAI,IAAI;oBACzD,cAAc,EAAE,CAAC,CAAC,QAAQ,GAAG,CAAC,IAAI,eAAe,IAAI,IAAI;AAC1D,iBAAA,CAAC,CAAC;AACJ,aAAA,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC;QAC7B;aAAO;YACL,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;AAClD,gBAAA,KAAK,CAAC;AACJ,oBAAA,YAAY,EAAE,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,GAAG,eAAe,GAAG,QAAQ,IAAI,IAAI;AACnE,oBAAA,eAAe,EAAE,CAAC,CAAC,QAAQ,GAAG,CAAC,IAAI,eAAe,GAAG,QAAQ,IAAI,IAAI;iBACtE,CAAC;AACF,gBAAA,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC;AAC1B,oBAAA,YAAY,EAAE,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,GAAG,eAAe,IAAI,IAAI;oBACxD,eAAe,EAAE,CAAC,CAAC,QAAQ,GAAG,CAAC,IAAI,eAAe,IAAI,IAAI;AAC3D,iBAAA,CAAC,CAAC;AACJ,aAAA,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC;QAC7B;AACA,QAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAK;YAChC,IAAI,IAAI,CAAC,WAAW;gBAAE;;AAEtB,YAAA,IAAI,QAAQ,KAAK,CAAC,CAAC,EAAE;gBACnB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC;YACtC;AAAO,iBAAA,IAAI,QAAQ,KAAK,WAAW,EAAE;AACnC,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;YACxB;iBAAO;AACL,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC;YAC/B;AACA,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AACzB,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AACxB,YAAA,IAAI,CAAC,gBAAgB,EAAE,OAAO,EAAE;AAChC,YAAA,IAAI,CAAC,gBAAgB,GAAG,SAAS;;AAEjC,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;AAC3B,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;AAC1B,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE;IAC9B;AAEA,IAAA,OAAO,CAAC,QAAgB,EAAA;AACtB,QAAA,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC;IACnC;AAEA;;;;;;;;;;AAUG;AACH,IAAA,UAAU,CAAC,KAAY,EAAA;AACrB,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YAAE;QAC5B,MAAM,EAAE,GAAG,KAAsB;AACjC,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE;QACtC,IAAI,OAAO,GAAG,KAAK;AACnB,QAAA,QAAQ,EAAE,CAAC,GAAG;AACZ,YAAA,KAAK,WAAW;AACd,gBAAA,IAAI,WAAW,KAAK,YAAY,EAAE;oBAAE,IAAI,CAAC,QAAQ,EAAE;oBAAE,OAAO,GAAG,IAAI;gBAAE;gBACrE;AACF,YAAA,KAAK,YAAY;AACf,gBAAA,IAAI,WAAW,KAAK,YAAY,EAAE;oBAAE,IAAI,CAAC,IAAI,EAAE;oBAAE,OAAO,GAAG,IAAI;gBAAE;gBACjE;AACF,YAAA,KAAK,SAAS;AACZ,gBAAA,IAAI,WAAW,KAAK,UAAU,EAAE;oBAAE,IAAI,CAAC,QAAQ,EAAE;oBAAE,OAAO,GAAG,IAAI;gBAAE;gBACnE;AACF,YAAA,KAAK,WAAW;AACd,gBAAA,IAAI,WAAW,KAAK,UAAU,EAAE;oBAAE,IAAI,CAAC,IAAI,EAAE;oBAAE,OAAO,GAAG,IAAI;gBAAE;gBAC/D;AACF,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;gBAAE,OAAO,GAAG,IAAI;gBAC5B;AACF,YAAA,KAAK,KAAK;AACR,gBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAAE,OAAO,GAAG,IAAI;gBACtE;;AAEJ,QAAA,IAAI,OAAO;YAAE,EAAE,CAAC,cAAc,EAAE;IAClC;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC;IAClC;IAEA,IAAI,GAAA;AACF,QAAA,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,UAAU,CAAC;IACjC;AAEA,IAAA,IAAI,CAAC,KAAa,EAAA;AAChB,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,UAAU,CAAC;IACrC;IAEQ,WAAW,CAAC,KAAa,EAAE,IAA6B,EAAA;AAC9D,QAAA,IAAI,CAAC,gBAAgB,EAAE,MAAM,EAAE;QAC/B,UAAU,CAAC,MAAK;YACd,IAAI,IAAI,CAAC,WAAW;gBAAE;AACtB,YAAA,IAAI,CAAC,gBAAgB,EAAE,MAAM,EAAE;AAC/B,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE;AACxC,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;AACpC,YAAA,MAAM,GAAG,GAAG,CAAC,IAAI,KAAK,UAAU,IAAI,UAAU,GAAG,KAAK,GAAG,KAAK;AAC9D,YAAA,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC,CAAC;QACpE,CAAC,EAAE,EAAE,CAAC;IACR;wGA9ZW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yBAAyB,k7CAWF,cAAc,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAXrC,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAxBrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,QAAQ,EAAE,kBAAkB;oBAC5B,cAAc,EAAE,CAAC,sBAAsB,CAAC;AACxC,oBAAA,IAAI,EAAE;AACJ,wBAAA,uBAAuB,EAAE,cAAc;AACvC,wBAAA,wBAAwB,EAAE,eAAe;AACzC,wBAAA,uBAAuB,EAAE,eAAe;AACxC,wBAAA,0BAA0B,EAAE,kBAAkB;AAC9C,wBAAA,sBAAsB,EAAE,eAAe;AACvC,wBAAA,6BAA6B,EAAE,WAAW;;;AAG1C,wBAAA,wBAAwB,EAAE,QAAQ;;;AAGlC,wBAAA,qBAAqB,EAAE,kDAAkD;;;;AAIzE,wBAAA,iBAAiB,EAAE,iDAAiD;AACpE,wBAAA,wBAAwB,EAAE,gDAAgD;AAC3E,qBAAA;AACF,iBAAA;wHAYmC,cAAc,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,eAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;MClBrC,gBAAgB,CAAA;AACnB,IAAA,SAAS,GAAG,MAAM,CAAC,yBAAyB,CAAC;AAC7C,IAAA,EAAE,GAAG,MAAM,EAAC,UAAuB,EAAC;AACpC,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AACvC,IAAA,WAAW,GAAG,MAAM,CAAC,sBAAsB,CAAC;AAErC,IAAA,OAAO,GAAG,KAAK,CAAC,KAAK,8EAAC;AAE7B;;;;;AAKG;AACH,IAAA,mBAAmB,GAAG,KAAK,CAAgB,OAAO,0FAAC;AAEnD;;;;;AAKG;AACH,IAAA,SAAS,GAAG,KAAK,CAAgB,IAAI,gFAAC;AAE7B,IAAA,4BAA4B,GAAG,QAAQ,CAAC,MAAK;QACpD,IAAI,IAAI,CAAC,OAAO,EAAE;AAAE,YAAA,OAAO,IAAI;AAC/B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,EAAE;QACxC,OAAO,KAAK,GAAG,KAAK,GAAG,IAAI;AAC7B,IAAA,CAAC,mGAAC;AAEO,IAAA,kBAAkB,GAAG,QAAQ,CAAC,MAAK;QAC1C,IAAI,IAAI,CAAC,OAAO,EAAE;AAAE,YAAA,OAAO,IAAI;AAC/B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE;QACjC,IAAI,QAAQ,KAAK,IAAI;AAAE,YAAA,OAAO,QAAQ;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE;QAC7C,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;QAC/B,IAAI,CAAC,GAAG,CAAC;AAAE,YAAA,OAAO,IAAI;AACtB,QAAA,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM;QAC5B,IAAI,KAAK,KAAK,CAAC;AAAE,YAAA,OAAO,IAAI;AAC5B,QAAA,OAAO,GAAG,CAAC,GAAG,CAAC,CAAA,IAAA,EAAO,KAAK,EAAE;AAC/B,IAAA,CAAC,yFAAC;;IAGM,eAAe,GAAG,KAAK;;;;AAId,IAAA,eAAe,GAAG,CAAC,CAAC;;;;IAK7B,aAAa,GAAoC,IAAI;AAErD,IAAA,iBAAiB,GAAG,MAAM,CAAC,MAAK;QACtC,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;QAChD,IAAI,CAAC,WAAW,IAAI,WAAW,KAAK,YAAY,CAAC;QACjD,IAAI,CAAC,KAAK,IAAI,WAAW,KAAK,UAAU,CAAC;;;;AAIzC,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC,WAAW,KAAK,YAAY,IAAI,OAAO,GAAG,OAAO;AACvE,IAAA,CAAC,wFAAC;AAEM,IAAA,YAAY,GAAG,MAAM,CAAC,MAAK;QACjC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE;QACjD,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;;;AAGhD,QAAA,MAAM,YAAY,GAAG,CAAC,WAAW,KAAK,UAAU,IAAI,SAAS,GAAG,EAAE,IAAI,SAAS,GAAG,IAAI;AACtF,QAAA,IAAI,CAAC,WAAW,GAAG,YAAY;AACjC,IAAA,CAAC,mFAAC;IAEF,WAAW,GAAG,IAAI;IAClB,KAAK,GAAG,KAAK;IACb,WAAW,GAAkB,IAAI;IACjC,WAAW,GAAsB,OAAO;AAExC,IAAA,WAAA,GAAA;;;;;;;;QAQE,eAAe,CAAC,MAAK;AACnB,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa;AAClC,YAAA,MAAM,YAAY,GAAG,CAAC,EAAc,KAAK,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;AAC9D,YAAA,MAAM,WAAW,GAAG,CAAC,EAAc,KAAK,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;AAC5D,YAAA,MAAM,UAAU,GAAG,CAAC,EAAc,KAAK,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;AAE1D,YAAA,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACpE,YAAA,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AACnE,YAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAEjE,YAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAK;AAC7B,gBAAA,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE,YAAY,CAAC;AACpD,gBAAA,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,WAAW,CAAC;AAClD,gBAAA,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE,UAAU,CAAC;AAClD,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,YAAY,CAAC,EAAc,EAAA;QACzB,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;AAC3B,YAAA,EAAE,CAAC,eAAe,EAAE,CAAC;AACrB,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;YAC5B,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE;AAC3E,YAAA,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE,MAAM,EAAE;YAEzC,UAAU,CAAC,MAAK;AACd,gBAAA,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC;AAC5B,oBAAA,QAAQ,EAAE;wBACR,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO;wBACxB,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO;AACzB,qBAAA;AACD,oBAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;AACtB,iBAAA,CAAC;AACF,gBAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC;AAC3B,oBAAA,QAAQ,EAAE;wBACR,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO;wBACxB,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO;AACzB,qBAAA;AACD,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA,CAAC;YACJ,CAAC,EAAE,EAAE,CAAC;QACR;IACF;AAEA,IAAA,WAAW,CAAC,EAAc,EAAA;QACxB,EAAE,CAAC,eAAe,EAAE;;;;;;;;;QAUpB,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE;QAC9C,MAAM,MAAM,GAAG,UAAU,EAAE,QAAQ,IAAI,IAAI,CAAC,aAAa;QACzD,IAAI,MAAM,EAAE;AACV,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC;AACrD,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC;YACrD,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;AAChD,YAAA,MAAM,OAAO,GAAG,WAAW,KAAK,YAAY,GAAG,EAAE,GAAG,EAAE;AACtD,YAAA,MAAM,aAAa,GAAG,WAAW,KAAK,YAAY,GAAG,EAAE,GAAG,EAAE;AAC5D,YAAA,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,OAAO,GAAG,IAAI,CAAC,eAAe,IAAI,OAAO,IAAI,aAAa,EAAE;AACvF,gBAAA,IAAI,CAAC,eAAe,GAAG,IAAI;YAC7B;AACA,YAAA,IAAI,IAAI,CAAC,eAAe,EAAE;gBACxB,EAAE,CAAC,cAAc,EAAE;YACrB;QACF;AAEA,QAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC;AAC3B,YAAA,QAAQ,EAAE;gBACR,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO;gBACxB,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO;AACzB,aAAA;AACD,YAAA,UAAU,EAAE,IAAI;AACjB,SAAA,CAAC;IACJ;AAEA,IAAA,UAAU,CAAC,EAAc,EAAA;QACvB,EAAE,CAAC,eAAe,EAAE;AACpB,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,EAAE,CAAC,cAAc,EAAE;QACrB;QAEA,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE;QAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE;QAC5C,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;QAEhD,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,SAAS,EAAE;AAC/B,YAAA,MAAM,QAAQ,GAAG,CAAC,WAAW,KAAK,YAAY;kBAC1C,SAAS,CAAC,QAAQ,CAAC,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC;AAC7C,kBAAE,SAAS,CAAC,QAAQ,CAAC,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;AAChD,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC;QAClC;IACF;wGAvLW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,aAAA,EAAA,MAAA,EAAA,eAAA,EAAA,MAAA,EAAA,YAAA,EAAA,MAAA,EAAA,sBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,oBAAA,EAAA,aAAA,EAAA,WAAA,EAAA,WAAA,EAAA,2BAAA,EAAA,gCAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,kBAAA,EAAA,6BAAA,EAAA,EAAA,EAAA,SAAA,EAjBhB,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAiB5D,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBApB5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,WAAW;oBACrB,cAAc,EAAE,CAAC,sBAAsB,CAAC;oBACxC,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAA,gBAAkB,EAAE,CAAC;AACvE,oBAAA,IAAI,EAAE;AACJ,wBAAA,mBAAmB,EAAE,MAAM;AAC3B,wBAAA,oBAAoB,EAAE,MAAM;AAC5B,wBAAA,eAAe,EAAE,MAAM;AACvB,wBAAA,iBAAiB,EAAE,MAAM;AACzB,wBAAA,cAAc,EAAE,MAAM;AACtB,wBAAA,wBAAwB,EAAE,aAAa;AACvC,wBAAA,iBAAiB,EAAE,OAAO;AAC1B,wBAAA,mBAAmB,EAAE,aAAa;AAClC,wBAAA,sBAAsB,EAAE,aAAa;AACrC,wBAAA,aAAa,EAAE,SAAS;AACxB,wBAAA,6BAA6B,EAAE,gCAAgC;AAC/D,wBAAA,mBAAmB,EAAE,sBAAsB;AAC3C,wBAAA,oBAAoB,EAAE,2BAA2B;AAClD,qBAAA;AACF,iBAAA;;;ACrBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BG;MAqBU,wBAAwB,CAAA;AAClB,IAAA,EAAE,GAAG,MAAM,CAA0B,UAAU,CAAC;AAEjE;;;;;AAKG;AACH,IAAA,QAAQ,GAAG,KAAK,CAAgB,CAAC,+EAAC;AAElC;;;;;;AAMG;AACH,IAAA,QAAQ,GAAG,KAAK,CAAiC,KAAK,+EAAC;AAEvD;;;;AAIG;AACH,IAAA,UAAU,GAAG,KAAK,CAAiB,KAAK,iFAAC;AAEzC;;;;;AAKG;AACH,IAAA,YAAY,GAAG,KAAK,CAAgB,IAAI,mFAAC;AAEzC;;;;;AAKG;AACH,IAAA,QAAQ,GAAG,KAAK,CAAiB,IAAI,+EAAC;AAEtC;;;;;AAKG;AACc,IAAA,SAAS,GAAG,YAAY,CAAC,yBAAyB,gFAAC;AAE3D,IAAA,oBAAoB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,EAAE,WAAW,EAAE,IAAI,IAAI,2FAAC;AAC9E,IAAA,qBAAqB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,EAAE,gBAAgB,EAAE,IAAI,IAAI,4FAAC;AAE7F;;;;;AAKG;AACH,IAAA,UAAU,CAAC,KAAY,EAAA;QACrB,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,EAAE,CAAC,aAAa;YAAE;QAC5C,IAAI,CAAC,SAAS,EAAE,EAAE,UAAU,CAAC,KAAK,CAAC;IACrC;wGA/DW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,wBAAwB,y5CAiDO,yBAAyB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAjDxD,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBApBpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,IAAI,EAAE;AACJ,wBAAA,6BAA6B,EAAE,WAAW;AAC1C,wBAAA,wBAAwB,EAAE,QAAQ;AAClC,wBAAA,iBAAiB,EAAE,YAAY;AAC/B,wBAAA,kBAAkB,EAAE,YAAY;AAChC,wBAAA,oBAAoB,EAAE,cAAc;AACpC,wBAAA,sBAAsB,EAAE,gBAAgB;AACxC,wBAAA,kBAAkB,EAAE,YAAY;AAChC,wBAAA,yBAAyB,EAAE,wBAAwB;AACnD,wBAAA,0BAA0B,EAAE,yBAAyB;AACrD,wBAAA,qBAAqB,EAAE,oBAAoB;AAC3C,wBAAA,sBAAsB,EAAE,oBAAoB;AAC5C,wBAAA,mBAAmB,EAAE,oBAAoB;AACzC,wBAAA,qBAAqB,EAAE,oBAAoB;AAC3C,wBAAA,gBAAgB,EAAE,oBAAoB;AACtC,wBAAA,eAAe,EAAE,oBAAoB;AACtC,qBAAA;AACF,iBAAA;0kBAkD2C,yBAAyB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;ACvGrE;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"mintplayer-ng-swiper-swiper.mjs","sources":["../../../../libs/mintplayer-ng-swiper/swiper/src/tokens/bs-swipe-slide.ts","../../../../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/directives/swipe-viewport/swipe-viewport.directive.ts","../../../../libs/mintplayer-ng-swiper/swiper/mintplayer-ng-swiper-swiper.ts"],"sourcesContent":["import { InjectionToken, Signal } from '@angular/core';\nimport { Size } from '@mintplayer/ng-swiper/observe-size';\n\n/**\n * Minimal contract a slide must satisfy to be queried by `bsSwipeContainer`.\n *\n * The container uses two pieces of slide state:\n * - `offside()` distinguishes wraparound clones from real slides\n * - `observeSize.size()` feeds the container's slide-height computation\n *\n * Modelling this as a token + interface (rather than `contentChildren(BsSwipeDirective)`\n * directly) breaks a circular import between the swipe and swipe-container\n * directive modules. The cycle is harmless for class-based `inject()` (which\n * resolves at construction time), but it caused the container's lazy\n * `extractQueriesMetadata` getter to see `BsSwipeDirective` as undefined in\n * vitest's JIT-compiled test environment, which made render-based specs\n * impossible. Routing the query through this token-and-interface pair fixes\n * that without requiring a deeper refactor.\n */\nexport interface BsSwipeSlide {\n offside: Signal<boolean>;\n observeSize: { size: Signal<Size | undefined> };\n}\n\nexport const BS_SWIPE_SLIDE = new InjectionToken<BsSwipeSlide>('BsSwipeSlide');\n","import { DOCUMENT } from '@angular/common';\nimport { animate, AnimationBuilder, AnimationPlayer, style } from '@angular/animations';\nimport { AfterViewInit, computed, contentChildren, Directive, effect, ElementRef, inject, input, model, OnDestroy, output, 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 { BS_SWIPE_SLIDE } from '../../tokens/bs-swipe-slide';\n\n@Directive({\n selector: '[bsSwipeContainer]',\n exportAs: 'bsSwipeContainer',\n hostDirectives: [BsObserveSizeDirective],\n host: {\n '[style.margin-left.%]': 'offsetLeft()',\n '[style.margin-right.%]': 'offsetRight()',\n '[style.margin-top.px]': 'offsetTopPx()',\n '[style.margin-bottom.px]': 'offsetBottomPx()',\n '[style.touch-action]': 'touchAction()',\n '[style.overscroll-behavior]': '\"contain\"',\n // Pairs with bsSwipe's [class.pe-auto]: gaps between slides are click-through,\n // slides themselves remain interactive.\n '[style.pointer-events]': '\"none\"',\n // Horizontal mode lays slides out as inline-block in a single row; nowrap\n // prevents them wrapping when their combined width exceeds the container.\n '[style.white-space]': 'orientation() === \"horizontal\" ? \"nowrap\" : null',\n // Vertical mode stacks slides as a column. Horizontal mode is explicitly\n // 'block' so a consumer-applied class (e.g. d-flex) can't silently change\n // the layout model — the directive's slides assume an inline-block flow.\n '[style.display]': 'orientation() === \"vertical\" ? \"flex\" : \"block\"',\n '[style.flex-direction]': 'orientation() === \"vertical\" ? \"column\" : null',\n },\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 offsetLeft = signal<number | null>(null);\n offsetRight = signal<number | null>(null);\n offsetTopPx = signal<number | null>(null);\n offsetBottomPx = signal<number | null>(null);\n\n readonly swipes = contentChildren(BS_SWIPE_SLIDE);\n\n minimumOffset = input(50);\n animation = input<'slide' | 'fade' | 'none'>('slide');\n orientation = input<'horizontal' | 'vertical'>('horizontal');\n /**\n * When true, the container handles ArrowLeft/Right (horizontal) or\n * ArrowUp/Down (vertical) plus Home/End to move between slides. The\n * keydown listeners live on the wrapping `bsSwipeViewport` host (only\n * fire when focus is on the viewport itself); this input still gates\n * dispatch inside `onKeyPress`.\n */\n keyboardEvents = input(true);\n // Mirror swiper.js's .swiper-horizontal / .swiper-vertical: declare the axis\n // we own at the container level so Firefox Android's APZ excludes the\n // perpendicular gesture (incl. pull-to-refresh) at touchstart arbitration time.\n touchAction = computed(() => this.orientation() === 'horizontal' ? 'pan-y' : 'pan-x');\n /**\n * Computed `aria-keyshortcuts` value advertising the keys the directive\n * actually responds to. Returns `null` (attribute removed) when keyboard\n * handling is disabled, so SRs never advertise shortcuts that won't fire.\n */\n ariaKeyshortcuts = computed(() => {\n if (!this.keyboardEvents()) return null;\n return this.orientation() === 'horizontal'\n ? 'ArrowLeft ArrowRight Home End'\n : 'ArrowUp ArrowDown Home End';\n });\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 pendingAnimation?: AnimationPlayer;\n private pendingFadeTimeoutId?: ReturnType<typeof setTimeout>;\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.length === 0) return 1; // Default to 1 to prevent container collapse before swipes are loaded\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.length === 0) return 1; // Default to 1 to prevent container collapse before swipes are loaded\n\n let count = 0;\n for (const s of [...swipes].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 return swipes.filter(swipe => !swipe.offside());\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 animation = this.animation();\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 // In fade mode slides are positioned by CSS (position: absolute) rather\n // than by margin offsets — keep the host margins null so they don't\n // visually shift the absolute layer's containing block.\n if (animation === 'fade') {\n this.offsetLeft.set(null);\n this.offsetTopPx.set(null);\n return;\n }\n\n if (orientation === 'horizontal') {\n this.offsetLeft.set(offsetPrimary);\n this.offsetTopPx.set(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.set((offsetPrimary / 100) * maxSlideHeight);\n this.offsetLeft.set(null);\n }\n });\n\n // Effect to update offsetRight/offsetBottomPx based on offsetSecondary and orientation\n effect(() => {\n const animation = this.animation();\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 (animation === 'fade') {\n this.offsetRight.set(null);\n this.offsetBottomPx.set(null);\n return;\n }\n\n if (orientation === 'horizontal') {\n this.offsetRight.set(offsetSecondary);\n this.offsetBottomPx.set(null);\n } else {\n // For vertical mode, convert percentage to pixels using slide height\n this.offsetBottomPx.set((offsetSecondary / 100) * maxSlideHeight);\n this.offsetRight.set(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 if (this.pendingFadeTimeoutId !== undefined) {\n clearTimeout(this.pendingFadeTimeoutId);\n this.pendingFadeTimeoutId = undefined;\n }\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 // Handle 'fade' animation mode - opacity is driven by CSS in the consumer\n // (via [class.active] + a CSS transition). Update the index synchronously\n // and defer animationEnd to roughly match the CSS transition duration so\n // consumers waiting on it (e.g. auto-advance pacing) still see consistent\n // event timing across animation modes.\n if (animation === 'fade') {\n // If a previous fade is still pending its animationEnd, cancel it so we\n // don't double-emit when navigation is triggered rapidly.\n if (this.pendingFadeTimeoutId !== undefined) {\n clearTimeout(this.pendingFadeTimeoutId);\n }\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.pendingFadeTimeoutId = setTimeout(() => {\n this.pendingFadeTimeoutId = undefined;\n if (!this.isDestroyed) this.animationEnd.emit();\n }, 500);\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.set(null);\n this.offsetRight.set(null);\n } else {\n this.offsetTopPx.set(null);\n this.offsetBottomPx.set(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 /**\n * Public keydown dispatcher invoked by `bsSwipeViewport`'s host listener\n * (the viewport is the focusable region; the container is non-focusable\n * inner machinery). Maps the four arrow keys (orientation-aware) plus\n * Home / End to slide navigation. Calls `preventDefault()` only for the\n * keys this directive actually consumed, so cross-orientation arrows\n * (e.g. ArrowUp on a horizontal swiper) still scroll the page normally.\n *\n * Parameter typed as `Event` because Angular host listeners infer `Event`\n * from the template-style binding string; cast inside.\n */\n onKeyPress(event: Event) {\n if (!this.keyboardEvents()) return;\n const ev = event as KeyboardEvent;\n const orientation = this.orientation();\n let handled = false;\n switch (ev.key) {\n case 'ArrowLeft':\n if (orientation === 'horizontal') { this.previous(); handled = true; }\n break;\n case 'ArrowRight':\n if (orientation === 'horizontal') { this.next(); handled = true; }\n break;\n case 'ArrowUp':\n if (orientation === 'vertical') { this.previous(); handled = true; }\n break;\n case 'ArrowDown':\n if (orientation === 'vertical') { this.next(); handled = true; }\n break;\n case 'Home':\n this.goto(0); handled = true;\n break;\n case 'End':\n this.goto(Math.max(0, this.actualSwipes().length - 1)); handled = true;\n break;\n }\n if (handled) ev.preventDefault();\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 { afterNextRender, computed, DestroyRef, Directive, effect, ElementRef, inject, input } from \"@angular/core\";\nimport { BsObserveSizeDirective } from \"@mintplayer/ng-swiper/observe-size\";\nimport { BsSwipeContainerDirective } from \"../swipe-container/swipe-container.directive\";\nimport { BS_SWIPE_SLIDE, BsSwipeSlide } from \"../../tokens/bs-swipe-slide\";\n\n@Directive({\n selector: '[bsSwipe]',\n hostDirectives: [BsObserveSizeDirective],\n providers: [{ provide: BS_SWIPE_SLIDE, useExisting: BsSwipeDirective }],\n host: {\n '[class.align-top]': 'true',\n '[class.float-none]': 'true',\n '[class.w-100]': 'true',\n '[class.pe-auto]': 'true',\n '[class.me-0]': 'true',\n '[class.d-inline-block]': 'inlineBlock',\n '[class.d-block]': 'block',\n '[style.height.px]': 'slideHeight',\n '[style.touch-action]': 'touchAction',\n '[attr.role]': '\"group\"',\n '[attr.aria-roledescription]': 'effectiveAriaRoledescription()',\n '[attr.aria-label]': 'effectiveAriaLabel()',\n '[attr.aria-hidden]': 'offside() ? \"true\" : null',\n },\n})\nexport class BsSwipeDirective implements BsSwipeSlide {\n private container = inject(BsSwipeContainerDirective);\n private el = inject(ElementRef<HTMLElement>);\n private destroyRef = inject(DestroyRef);\n observeSize = inject(BsObserveSizeDirective);\n\n public offside = input(false);\n\n /**\n * Word read by SRs after the position label. Default `'slide'` matches the\n * APG carousel pattern; consumers building image galleries / step wizards\n * can override (e.g. `'image'`, `'step'`). Pass `null` or `''` to suppress\n * the attribute entirely (useful for non-paginated swipe UIs).\n */\n ariaRoledescription = input<string | null>('slide');\n\n /**\n * Override the auto-computed `\"N of M\"` label. When `null` (the default),\n * the directive computes it from this slide's index among non-offside\n * siblings and the total non-offside count. Offside (clone) slides get\n * no label and rely on `aria-hidden` instead.\n */\n ariaLabel = input<string | null>(null);\n\n readonly effectiveAriaRoledescription = computed(() => {\n if (this.offside()) return null;\n const value = this.ariaRoledescription();\n return value ? value : null;\n });\n\n readonly effectiveAriaLabel = computed(() => {\n if (this.offside()) return null;\n const explicit = this.ariaLabel();\n if (explicit !== null) return explicit;\n const visible = this.container.actualSwipes();\n const i = visible.indexOf(this);\n if (i < 0) return null;\n const total = visible.length;\n if (total === 0) return null;\n return `${i + 1} of ${total}`;\n });\n\n // Track if we've detected a swipe (vs a tap)\n private isSwipeDetected = false;\n // 3px instead of a larger threshold so preventDefault() fires on the first or\n // second touchmove — Firefox Android's APZ can otherwise claim a downward\n // gesture as pull-to-refresh before our handler arbitrates the direction.\n private readonly SWIPE_THRESHOLD = 3; // pixels\n\n // Synchronous copy of start position for use during the 20ms gap\n // before startTouch signal is set (needed to call preventDefault\n // on early touchmove events to block Firefox Android PullToRefresh)\n private touchStartPos: { x: number, y: number } | null = null;\n\n private orientationEffect = effect(() => {\n const orientation = this.container.orientation();\n this.inlineBlock = (orientation === 'horizontal');\n this.block = (orientation === 'vertical');\n // Tell browser which axis we handle, allowing scroll on the other axis\n // pan-y = allow vertical scroll, we handle horizontal swipes\n // pan-x = allow horizontal scroll, we handle vertical swipes\n this.touchAction = (orientation === 'horizontal') ? 'pan-y' : 'pan-x';\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 inlineBlock = true;\n block = false;\n slideHeight: number | null = null;\n touchAction: 'pan-x' | 'pan-y' = 'pan-y';\n\n constructor() {\n // Register touch listeners manually with { passive: false } for touchmove/touchend.\n // Angular's host event bindings register passive listeners by default for touch events,\n // which silently ignores preventDefault(). This caused Firefox Android's PullToRefresh\n // to trigger because the browser's default action was never actually cancelled.\n // Wrapped in afterNextRender so it doesn't run during SSR (nativeElement is not a real\n // DOM element on the server); the callback fires before the next paint, so it always\n // attaches before the user can physically touch the slide.\n afterNextRender(() => {\n const elem = this.el.nativeElement;\n const onTouchStart = (ev: TouchEvent) => this.onTouchStart(ev);\n const onTouchMove = (ev: TouchEvent) => this.onTouchMove(ev);\n const onTouchEnd = (ev: TouchEvent) => this.onTouchEnd(ev);\n\n elem.addEventListener('touchstart', onTouchStart, { passive: true });\n elem.addEventListener('touchmove', onTouchMove, { passive: false });\n elem.addEventListener('touchend', onTouchEnd, { passive: false });\n\n this.destroyRef.onDestroy(() => {\n elem.removeEventListener('touchstart', onTouchStart);\n elem.removeEventListener('touchmove', onTouchMove);\n elem.removeEventListener('touchend', onTouchEnd);\n });\n });\n }\n\n onTouchStart(ev: TouchEvent) {\n if (ev.touches.length === 1) {\n ev.stopPropagation(); // Prevent bubbling, but allow clicks\n this.isSwipeDetected = false;\n this.touchStartPos = { x: ev.touches[0].clientX, y: ev.touches[0].clientY };\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 onTouchMove(ev: TouchEvent) {\n ev.stopPropagation();\n\n // Direction lock: only own the gesture when movement on our axis exceeds the\n // threshold AND dominates the perpendicular axis. Without the dominance check,\n // a small primary-axis jitter combined with a real perpendicular scroll would\n // wrongly block native page scrolling. Once locked in, keep calling\n // preventDefault for the rest of the stroke.\n // Use synchronous touchStartPos as fallback during the 20ms gap before the\n // startTouch signal is set, so preventDefault fires on early touchmove events\n // (prevents Firefox Android PullToRefresh).\n const startTouch = this.container.startTouch();\n const refPos = startTouch?.position ?? this.touchStartPos;\n if (refPos) {\n const dx = Math.abs(ev.touches[0].clientX - refPos.x);\n const dy = Math.abs(ev.touches[0].clientY - refPos.y);\n const orientation = this.container.orientation();\n const primary = orientation === 'horizontal' ? dx : dy;\n const perpendicular = orientation === 'horizontal' ? dy : dx;\n if (!this.isSwipeDetected && primary > this.SWIPE_THRESHOLD && primary >= perpendicular) {\n this.isSwipeDetected = true;\n }\n if (this.isSwipeDetected) {\n ev.preventDefault();\n }\n }\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 }\n\n onTouchEnd(ev: TouchEvent) {\n ev.stopPropagation();\n this.touchStartPos = null;\n if (this.isSwipeDetected) {\n ev.preventDefault();\n }\n\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 { computed, contentChild, Directive, ElementRef, inject, input } from '@angular/core';\nimport { BsSwipeContainerDirective } from '../swipe-container/swipe-container.directive';\n\n/**\n * Marks an element as the static viewport that wraps a `bsSwipeContainer`'s\n * moving track. The element it's applied to is expected to have\n * `overflow: hidden` (via a class or its own styling) so the moving track\n * is clipped to a fixed window.\n *\n * Applies the CSS that historically lived on the consuming component's\n * outer wrapper (bs-carousel's `.carousel-inner`):\n *\n * - `overscroll-behavior: contain` — keeps Firefox Android's APZ from\n * chaining a vertical drag into the document and triggering native\n * pull-to-refresh. Even though Firefox documented this as not honoured\n * for PTR historically, the empirical behaviour on the carousel demo\n * showed this property was load-bearing alongside the per-slide\n * `touch-action: pan-x`.\n *\n * - `pointer-events: none` — pairs with the `bsSwipe`'s `pe-auto` so taps\n * on the gaps between slides (or on the viewport's letterboxing) pass\n * through, while the slides themselves remain interactive.\n *\n * Owns the focusable, key-handling region for the swiper widget — APG\n * carousel pattern places the slide-rotation tab stop here, not on the\n * inner container or per-slide. Adds `tabindex` (default `0`), forwards\n * `aria-orientation` + `aria-keyshortcuts` from the inner container, and\n * delegates ArrowLeft/Right/Up/Down + Home/End keydowns to\n * `BsSwipeContainerDirective.onKeyPress` only when the viewport itself is\n * the event target — so an input/link inside a slide keeps its own key\n * behaviour. Also owns the live-region tuple (`aria-live`, `-atomic`,\n * `-relevant`, `-busy`) since the viewport is what SRs watch for slide\n * content changes.\n */\n@Directive({\n selector: '[bsSwipeViewport]',\n host: {\n '[style.overscroll-behavior]': '\"contain\"',\n '[style.pointer-events]': '\"none\"',\n '[attr.tabindex]': 'tabIndex()',\n '[attr.aria-live]': 'ariaLive()',\n '[attr.aria-atomic]': 'ariaAtomic()',\n '[attr.aria-relevant]': 'ariaRelevant()',\n '[attr.aria-busy]': 'ariaBusy()',\n '[attr.aria-orientation]': 'effectiveOrientation()',\n '[attr.aria-keyshortcuts]': 'effectiveKeyshortcuts()',\n '(keydown.ArrowLeft)': 'onKeyPress($event)',\n '(keydown.ArrowRight)': 'onKeyPress($event)',\n '(keydown.ArrowUp)': 'onKeyPress($event)',\n '(keydown.ArrowDown)': 'onKeyPress($event)',\n '(keydown.Home)': 'onKeyPress($event)',\n '(keydown.End)': 'onKeyPress($event)',\n },\n})\nexport class BsSwipeViewportDirective {\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /**\n * Tabindex on the viewport. Default `0` makes the swiper a single tab\n * stop — APG carousel pattern. Pass `null` to opt out (e.g., a swipe\n * card grid that doesn't need a focus stop), or `-1` for\n * programmatic-only focus.\n */\n tabIndex = input<number | null>(0);\n\n /**\n * Drives the `aria-live` host attribute. Auto-advancing consumers can pass\n * a computed signal that flips between `'off'` (during rotation) and\n * `'polite'` (when paused / no auto-advance / reduced motion). Default\n * `'off'` matches the carousel's \"do not announce on every rotation tick\"\n * baseline.\n */\n ariaLive = input<'off' | 'polite' | 'assertive'>('off');\n\n /**\n * Whether SRs should re-read the entire region on change (`true`) or only\n * the diff (`false`). Default `false` — matches the typical case where\n * only the active slide is meaningful.\n */\n ariaAtomic = input<boolean | null>(false);\n\n /**\n * Which kinds of mutations should trigger the live announcement. Default\n * `null` (attribute absent → SRs use their own default of\n * `'additions text'`). Consumers that want to tune this pass a value such\n * as `'all'` or `'additions'`.\n */\n ariaRelevant = input<string | null>(null);\n\n /**\n * Hide the region from announcements while a transition is in flight, so\n * the SR only reads the *final* slide. Default `null` (not busy);\n * consumers wanting the polish wire it to the swipe container's\n * `isAnimating` signal.\n */\n ariaBusy = input<boolean | null>(null);\n\n /**\n * The inner `bsSwipeContainer` is required for the keydown delegation\n * and the orientation / keyshortcuts forwarding. `contentChild` is the\n * natural query because the container is always a descendant; the lookup\n * settles on first CD pass.\n */\n private readonly container = contentChild(BsSwipeContainerDirective);\n\n readonly effectiveOrientation = computed(() => this.container()?.orientation() ?? null);\n readonly effectiveKeyshortcuts = computed(() => this.container()?.ariaKeyshortcuts() ?? null);\n\n /**\n * Forwards the keydown to the container only when the viewport itself\n * holds focus — `event.target === host` — so a focusable descendant\n * (form input, link inside a slide) keeps native key handling. APG\n * carousel pattern requires this guard.\n */\n onKeyPress(event: Event) {\n if (event.target !== this.el.nativeElement) return;\n this.container()?.onKeyPress(event);\n }\n}\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,17 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mintplayer/ng-swiper",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "
|
|
4
|
+
"version": "22.0.0",
|
|
5
|
+
"license": "Apache-2.0",
|
|
5
6
|
"repository": {
|
|
6
7
|
"type": "git",
|
|
7
8
|
"url": "https://github.com/MintPlayer/mintplayer-ng-bootstrap",
|
|
8
9
|
"directory": "libs/mintplayer-ng-swiper"
|
|
9
10
|
},
|
|
10
11
|
"peerDependencies": {
|
|
11
|
-
"@angular/common": "^
|
|
12
|
-
"@angular/core": "^
|
|
13
|
-
"@angular/animations": "^
|
|
14
|
-
"@angular/platform-browser": "^
|
|
12
|
+
"@angular/common": "^22.0.0",
|
|
13
|
+
"@angular/core": "^22.0.0",
|
|
14
|
+
"@angular/animations": "^22.0.0",
|
|
15
|
+
"@angular/platform-browser": "^22.0.0"
|
|
15
16
|
},
|
|
16
17
|
"dependencies": {
|
|
17
18
|
"tslib": "^2.3.0"
|