@vectoriox/iox-builder 1.5.7 → 1.5.8
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.
|
@@ -1407,9 +1407,14 @@ class InteractionEngineService {
|
|
|
1407
1407
|
}
|
|
1408
1408
|
// ── Private ──────────────────────────────────────────────
|
|
1409
1409
|
attachInteraction(node, ix, element) {
|
|
1410
|
-
// In builder mode,
|
|
1410
|
+
// In builder mode, scroll-based and time-based triggers don't auto-fire — use the
|
|
1411
|
+
// play button instead. viewportEnter is skipped because the IntersectionObserver
|
|
1412
|
+
// fires immediately (element is visible in the canvas) and its WAAPI animation +
|
|
1413
|
+
// the overlay ResizeObserver feedback loop triggers NG0103 during synchronize().
|
|
1411
1414
|
// Click/hover remain active so users can test those interactions on the canvas.
|
|
1412
|
-
if (this.isBuilderMode() && (ix.trigger === 'pageLoad' ||
|
|
1415
|
+
if (this.isBuilderMode() && (ix.trigger === 'pageLoad' ||
|
|
1416
|
+
ix.trigger === 'scrollProgress' ||
|
|
1417
|
+
ix.trigger === 'viewportEnter')) {
|
|
1413
1418
|
return () => { };
|
|
1414
1419
|
}
|
|
1415
1420
|
switch (ix.trigger) {
|
|
@@ -5554,6 +5559,7 @@ class SliderContainerComponent {
|
|
|
5554
5559
|
this._orgId = 'default';
|
|
5555
5560
|
this.instanceRegistry = inject(ComponentInstanceRegistryService);
|
|
5556
5561
|
this.interactionEngine = inject(InteractionEngineService);
|
|
5562
|
+
this.ngZone = inject(NgZone);
|
|
5557
5563
|
this.isPreview = !!isPreview;
|
|
5558
5564
|
}
|
|
5559
5565
|
ngOnInit() {
|
|
@@ -5572,7 +5578,11 @@ class SliderContainerComponent {
|
|
|
5572
5578
|
}
|
|
5573
5579
|
}
|
|
5574
5580
|
ngAfterViewInit() {
|
|
5575
|
-
|
|
5581
|
+
// Run outside Angular's zone so Swiper's internal ResizeObserver, MutationObserver,
|
|
5582
|
+
// and RAF-based animation loops don't trigger unnecessary CD ticks.
|
|
5583
|
+
this.ngZone.runOutsideAngular(() => {
|
|
5584
|
+
this._initRafId = requestAnimationFrame(() => this._initSwiper());
|
|
5585
|
+
});
|
|
5576
5586
|
}
|
|
5577
5587
|
ngOnChanges(changes) {
|
|
5578
5588
|
if (!this._swiper)
|
|
@@ -5600,7 +5610,9 @@ class SliderContainerComponent {
|
|
|
5600
5610
|
const hasConfigChange = Object.keys(changes).some(k => relevantKeys.has(k));
|
|
5601
5611
|
if (hasConfigChange) {
|
|
5602
5612
|
this._destroySwiper();
|
|
5603
|
-
this.
|
|
5613
|
+
this.ngZone.runOutsideAngular(() => {
|
|
5614
|
+
this._initRafId = requestAnimationFrame(() => this._initSwiper());
|
|
5615
|
+
});
|
|
5604
5616
|
}
|
|
5605
5617
|
}
|
|
5606
5618
|
ngOnDestroy() {
|
|
@@ -5615,9 +5627,10 @@ class SliderContainerComponent {
|
|
|
5615
5627
|
if (this._source)
|
|
5616
5628
|
return; // repeat mode: drops disabled, slides come from data source
|
|
5617
5629
|
this.dragEngine.handleDrop(this.children, event, this.dropListId, this.cdr);
|
|
5618
|
-
// Sync Swiper's internal slide list after drag-drop reorder
|
|
5619
5630
|
if (this._swiper) {
|
|
5620
|
-
|
|
5631
|
+
this.ngZone.runOutsideAngular(() => {
|
|
5632
|
+
requestAnimationFrame(() => this._swiper?.update());
|
|
5633
|
+
});
|
|
5621
5634
|
}
|
|
5622
5635
|
}
|
|
5623
5636
|
// ── Data fetching ───────────────────────────────────────────────────────────
|
|
@@ -5692,7 +5705,9 @@ class SliderContainerComponent {
|
|
|
5692
5705
|
}
|
|
5693
5706
|
_scheduleReinit() {
|
|
5694
5707
|
this._destroySwiper();
|
|
5695
|
-
this.
|
|
5708
|
+
this.ngZone.runOutsideAngular(() => {
|
|
5709
|
+
this._initRafId = requestAnimationFrame(() => this._initSwiper());
|
|
5710
|
+
});
|
|
5696
5711
|
}
|
|
5697
5712
|
// ── Swiper lifecycle ────────────────────────────────────────────────────────
|
|
5698
5713
|
async _initSwiper() {
|