@naniteninja/dashboard-components-lib 2.1.8 → 2.1.9
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.
|
@@ -5159,6 +5159,8 @@ class LibDashboardSwipeableTabsComponent {
|
|
|
5159
5159
|
this.settingsTriggerResizeObserver = null;
|
|
5160
5160
|
this.settingsTriggerScrollListener = null;
|
|
5161
5161
|
this.settingsTriggerResizeListener = null;
|
|
5162
|
+
this.settingsTriggerScrollTarget = null;
|
|
5163
|
+
this.settingsTriggerRafId = null;
|
|
5162
5164
|
this.contextMenuViewRef = null;
|
|
5163
5165
|
this.contextMenuClickListener = null;
|
|
5164
5166
|
this.confirmViewRef = null;
|
|
@@ -6381,12 +6383,17 @@ class LibDashboardSwipeableTabsComponent {
|
|
|
6381
6383
|
this.settingsTriggerPortalEl =
|
|
6382
6384
|
this.settingsTriggerPortalViewRef.rootNodes.find((n) => n?.classList?.contains?.('settings-trigger-wrapper-portal')) ??
|
|
6383
6385
|
document.body.querySelector('.settings-trigger-wrapper-portal');
|
|
6386
|
+
this.startSettingsTriggerTracking();
|
|
6384
6387
|
if (!this.settingsTriggerResizeObserver) {
|
|
6385
6388
|
this.settingsTriggerResizeObserver = new ResizeObserver(() => this.updateSettingsTriggerPortalPosition());
|
|
6386
6389
|
this.settingsTriggerResizeObserver.observe(this.settingsTriggerWrapperEl.nativeElement);
|
|
6387
6390
|
}
|
|
6388
6391
|
if (!this.settingsTriggerScrollListener) {
|
|
6389
|
-
this.
|
|
6392
|
+
this.settingsTriggerScrollTarget = this.getScrollParent(this.settingsTriggerWrapperEl.nativeElement);
|
|
6393
|
+
this.settingsTriggerScrollListener =
|
|
6394
|
+
this.settingsTriggerScrollTarget === window
|
|
6395
|
+
? this.renderer.listen('window', 'scroll', () => this.updateSettingsTriggerPortalPosition())
|
|
6396
|
+
: this.renderer.listen(this.settingsTriggerScrollTarget, 'scroll', () => this.updateSettingsTriggerPortalPosition());
|
|
6390
6397
|
}
|
|
6391
6398
|
if (!this.settingsTriggerResizeListener) {
|
|
6392
6399
|
this.settingsTriggerResizeListener = this.renderer.listen('window', 'resize', () => this.updateSettingsTriggerPortalPosition());
|
|
@@ -6395,6 +6402,8 @@ class LibDashboardSwipeableTabsComponent {
|
|
|
6395
6402
|
closeSettingsTriggerPortal() {
|
|
6396
6403
|
this.settingsTriggerPortaled = false;
|
|
6397
6404
|
this.settingsTriggerPortalEl = null;
|
|
6405
|
+
this.settingsTriggerScrollTarget = null;
|
|
6406
|
+
this.stopSettingsTriggerTracking();
|
|
6398
6407
|
if (this.settingsTriggerResizeObserver) {
|
|
6399
6408
|
this.settingsTriggerResizeObserver.disconnect();
|
|
6400
6409
|
this.settingsTriggerResizeObserver = null;
|
|
@@ -6423,6 +6432,74 @@ class LibDashboardSwipeableTabsComponent {
|
|
|
6423
6432
|
this.settingsTriggerPortalEl.style.left = r.left + 'px';
|
|
6424
6433
|
this.settingsTriggerPortalEl.style.top = r.top + 'px';
|
|
6425
6434
|
}
|
|
6435
|
+
this.applySettingsTriggerPortalVisibility(r);
|
|
6436
|
+
}
|
|
6437
|
+
applySettingsTriggerPortalVisibility(sourceRect) {
|
|
6438
|
+
const portalEl = this.settingsTriggerPortalEl ?? document.body.querySelector('.settings-trigger-wrapper-portal');
|
|
6439
|
+
if (!portalEl)
|
|
6440
|
+
return;
|
|
6441
|
+
const containerRect = this.settingsTriggerScrollTarget && this.settingsTriggerScrollTarget !== window
|
|
6442
|
+
? this.settingsTriggerScrollTarget.getBoundingClientRect()
|
|
6443
|
+
: { left: 0, top: 0, right: window.innerWidth, bottom: window.innerHeight };
|
|
6444
|
+
const vw = Math.min(sourceRect.right, containerRect.right) - Math.max(sourceRect.left, containerRect.left);
|
|
6445
|
+
const vh = Math.min(sourceRect.bottom, containerRect.bottom) - Math.max(sourceRect.top, containerRect.top);
|
|
6446
|
+
let hide = false;
|
|
6447
|
+
const eps = 0.5;
|
|
6448
|
+
if (sourceRect.width > 0 && vw < sourceRect.width - eps)
|
|
6449
|
+
hide = true;
|
|
6450
|
+
if (sourceRect.height > 0 && vh < sourceRect.height - eps)
|
|
6451
|
+
hide = true;
|
|
6452
|
+
if (!hide) {
|
|
6453
|
+
const x = sourceRect.left + sourceRect.width / 2;
|
|
6454
|
+
const y = sourceRect.top + sourceRect.height / 2;
|
|
6455
|
+
if (x >= 0 && x <= window.innerWidth && y >= 0 && y <= window.innerHeight) {
|
|
6456
|
+
const topEl = document.elementFromPoint(x, y);
|
|
6457
|
+
const sourceEl = this.settingsTriggerWrapperEl?.nativeElement;
|
|
6458
|
+
if (topEl && sourceEl && !sourceEl.contains(topEl) && !portalEl.contains(topEl))
|
|
6459
|
+
hide = true;
|
|
6460
|
+
}
|
|
6461
|
+
}
|
|
6462
|
+
portalEl.style.visibility = hide ? 'hidden' : 'visible';
|
|
6463
|
+
portalEl.style.pointerEvents = hide ? 'none' : 'auto';
|
|
6464
|
+
if (hide && this.showGlobalMenu) {
|
|
6465
|
+
this.ngZone.run(() => {
|
|
6466
|
+
this.showGlobalMenu = false;
|
|
6467
|
+
this.cdr.markForCheck();
|
|
6468
|
+
});
|
|
6469
|
+
}
|
|
6470
|
+
}
|
|
6471
|
+
startSettingsTriggerTracking() {
|
|
6472
|
+
this.stopSettingsTriggerTracking();
|
|
6473
|
+
if (!this.settingsTriggerWrapperEl?.nativeElement)
|
|
6474
|
+
return;
|
|
6475
|
+
this.ngZone.runOutsideAngular(() => {
|
|
6476
|
+
const loop = () => {
|
|
6477
|
+
if (!this.settingsTriggerPortaled || !this.settingsTriggerWrapperEl?.nativeElement) {
|
|
6478
|
+
this.settingsTriggerRafId = null;
|
|
6479
|
+
return;
|
|
6480
|
+
}
|
|
6481
|
+
this.updateSettingsTriggerPortalPosition();
|
|
6482
|
+
this.settingsTriggerRafId = requestAnimationFrame(loop);
|
|
6483
|
+
};
|
|
6484
|
+
this.settingsTriggerRafId = requestAnimationFrame(loop);
|
|
6485
|
+
});
|
|
6486
|
+
}
|
|
6487
|
+
stopSettingsTriggerTracking() {
|
|
6488
|
+
if (this.settingsTriggerRafId !== null) {
|
|
6489
|
+
cancelAnimationFrame(this.settingsTriggerRafId);
|
|
6490
|
+
this.settingsTriggerRafId = null;
|
|
6491
|
+
}
|
|
6492
|
+
}
|
|
6493
|
+
getScrollParent(el) {
|
|
6494
|
+
let current = el.parentElement;
|
|
6495
|
+
while (current) {
|
|
6496
|
+
const style = getComputedStyle(current);
|
|
6497
|
+
const overflow = `${style.overflow}${style.overflowX}${style.overflowY}`;
|
|
6498
|
+
if (/(auto|scroll|overlay)/.test(overflow))
|
|
6499
|
+
return current;
|
|
6500
|
+
current = current.parentElement;
|
|
6501
|
+
}
|
|
6502
|
+
return window;
|
|
6426
6503
|
}
|
|
6427
6504
|
isSourceVisible(src, container) {
|
|
6428
6505
|
const vw = Math.min(src.right, container.right) - Math.max(src.left, container.left);
|