@tilde-nlp/ngx-common 6.1.78 → 6.1.80
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/esm2022/lib/new-feature-dialog/new-feature-dialog-wrapper/new-feature-dialog-wrapper.component.mjs +44 -37
- package/esm2022/lib/new-feature-dialog/new-feature-dialog-wrapper/new-feature-dialog.service.mjs +37 -0
- package/fesm2022/tilde-nlp-ngx-common.mjs +76 -36
- package/fesm2022/tilde-nlp-ngx-common.mjs.map +1 -1
- package/lib/new-feature-dialog/new-feature-dialog-wrapper/new-feature-dialog-wrapper.component.d.ts +4 -4
- package/lib/new-feature-dialog/new-feature-dialog-wrapper/new-feature-dialog.service.d.ts +10 -0
- package/package.json +1 -1
|
@@ -1,37 +1,32 @@
|
|
|
1
1
|
import { Component, inject, Input, signal } from '@angular/core';
|
|
2
2
|
import { MatDialog, MatDialogModule } from '@angular/material/dialog';
|
|
3
|
-
import { NewFeatureDialogComponent } from '../new-feature-dialog.component';
|
|
4
3
|
import { CommonModule } from '@angular/common';
|
|
4
|
+
import { NewFeatureDialogComponent } from '../new-feature-dialog.component';
|
|
5
5
|
import { ResolutionHelper } from '../../helpers';
|
|
6
|
+
import { NewFeatureDialogService } from './new-feature-dialog.service';
|
|
7
|
+
import { Subject } from 'rxjs';
|
|
6
8
|
import * as i0 from "@angular/core";
|
|
7
9
|
export class NewFeatureDialogWrapperComponent {
|
|
8
10
|
constructor() {
|
|
9
11
|
this.timeout = 0;
|
|
10
12
|
this.maxWidth = 320;
|
|
11
13
|
this.#dialog = inject(MatDialog);
|
|
14
|
+
this.#featureService = inject(NewFeatureDialogService);
|
|
15
|
+
this.#destroy = new Subject();
|
|
12
16
|
this.featureActive = signal(false);
|
|
13
17
|
this.isFeatureSeen = false;
|
|
14
|
-
this.featureDialogComponentSelector = 'lib-new-feature-dialog';
|
|
15
18
|
}
|
|
16
19
|
#dialog;
|
|
20
|
+
#featureService;
|
|
21
|
+
#destroy;
|
|
17
22
|
ngOnInit() {
|
|
18
23
|
setTimeout(() => {
|
|
19
|
-
// Multiple feature order based on the component selector in DOM.
|
|
20
|
-
if (document.querySelector(this.featureDialogComponentSelector)) {
|
|
21
|
-
setTimeout(() => {
|
|
22
|
-
this.ngOnInit();
|
|
23
|
-
}, 250);
|
|
24
|
-
return;
|
|
25
|
-
}
|
|
26
24
|
this.setFeatureStatus();
|
|
27
25
|
}, this.timeout);
|
|
28
26
|
}
|
|
29
|
-
|
|
30
|
-
this.
|
|
31
|
-
|
|
32
|
-
this.showFeatureDialog();
|
|
33
|
-
}
|
|
34
|
-
this.isFeatureSeen = true;
|
|
27
|
+
ngOnDestroy() {
|
|
28
|
+
this.#destroy.next(null);
|
|
29
|
+
this.#destroy.complete();
|
|
35
30
|
}
|
|
36
31
|
showFeatureDialog() {
|
|
37
32
|
const targetElement = document.querySelector(`.${this.featureClassName}`);
|
|
@@ -39,29 +34,41 @@ export class NewFeatureDialogWrapperComponent {
|
|
|
39
34
|
return;
|
|
40
35
|
}
|
|
41
36
|
if (ResolutionHelper.isMobileRes()) {
|
|
42
|
-
targetElement.scrollIntoView({ behavior: 'smooth', block: '
|
|
37
|
+
targetElement.scrollIntoView({ behavior: 'smooth', block: 'start' });
|
|
38
|
+
}
|
|
39
|
+
setTimeout(() => {
|
|
40
|
+
this.featureActive.set(true);
|
|
41
|
+
const updatedRects = targetElement.getBoundingClientRect();
|
|
42
|
+
this.dialogRef = this.#dialog.open(NewFeatureDialogComponent, {
|
|
43
|
+
data: {
|
|
44
|
+
title: this.titleLocalizationKey,
|
|
45
|
+
description: this.descriptionLocalizationKey,
|
|
46
|
+
close: this.closeLocalizationKey,
|
|
47
|
+
featureLocalStorageKey: this.featureLocalStorageKey,
|
|
48
|
+
},
|
|
49
|
+
position: {
|
|
50
|
+
left: `${updatedRects.left - this.maxWidth}px`,
|
|
51
|
+
top: `${updatedRects.top + 45}px`,
|
|
52
|
+
},
|
|
53
|
+
maxWidth: `${this.maxWidth}px`,
|
|
54
|
+
});
|
|
55
|
+
this.dialogRef.afterClosed().subscribe(() => {
|
|
56
|
+
this.setFeatureSeen();
|
|
57
|
+
this.#featureService.current.set(undefined);
|
|
58
|
+
this.#featureService.showNextFeature();
|
|
59
|
+
});
|
|
60
|
+
// Wait until the element is visible in the viewport.
|
|
61
|
+
}, ResolutionHelper.isMobileRes() ? 500 : 0);
|
|
62
|
+
}
|
|
63
|
+
setFeatureStatus() {
|
|
64
|
+
this.isFeatureSeen = !!this.featureLocalStorageKey && !!localStorage.getItem(this.featureLocalStorageKey);
|
|
65
|
+
if (!this.isFeatureSeen) {
|
|
66
|
+
this.#featureService.requestOpenFeature(this);
|
|
43
67
|
}
|
|
44
|
-
const updatedRects = targetElement.getBoundingClientRect();
|
|
45
|
-
this.featureActive.set(true);
|
|
46
|
-
this.dialogRef = this.#dialog.open(NewFeatureDialogComponent, {
|
|
47
|
-
data: {
|
|
48
|
-
title: this.titleLocalizationKey,
|
|
49
|
-
description: this.descriptionLocalizationKey,
|
|
50
|
-
close: this.closeLocalizationKey,
|
|
51
|
-
featureLocalStorageKey: this.featureLocalStorageKey,
|
|
52
|
-
},
|
|
53
|
-
position: {
|
|
54
|
-
left: `${updatedRects.left - this.maxWidth}px`,
|
|
55
|
-
top: `${updatedRects.top + 45}px`,
|
|
56
|
-
},
|
|
57
|
-
maxWidth: `${this.maxWidth}px`,
|
|
58
|
-
});
|
|
59
|
-
this.dialogRef.afterClosed().subscribe(() => {
|
|
60
|
-
this.featureActive.set(false);
|
|
61
|
-
});
|
|
62
|
-
this.setFeatureSeen();
|
|
63
68
|
}
|
|
64
69
|
setFeatureSeen() {
|
|
70
|
+
this.featureActive.set(false);
|
|
71
|
+
this.isFeatureSeen = true;
|
|
65
72
|
if (this.featureLocalStorageKey) {
|
|
66
73
|
localStorage.setItem(this.featureLocalStorageKey, 'true');
|
|
67
74
|
}
|
|
@@ -92,5 +99,5 @@ export class NewFeatureDialogWrapperComponent {
|
|
|
92
99
|
}], maxWidth: [{
|
|
93
100
|
type: Input
|
|
94
101
|
}] }); })();
|
|
95
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(NewFeatureDialogWrapperComponent, { className: "NewFeatureDialogWrapperComponent", filePath: "lib\\new-feature-dialog\\new-feature-dialog-wrapper\\new-feature-dialog-wrapper.component.ts", lineNumber:
|
|
96
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
102
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(NewFeatureDialogWrapperComponent, { className: "NewFeatureDialogWrapperComponent", filePath: "lib\\new-feature-dialog\\new-feature-dialog-wrapper\\new-feature-dialog-wrapper.component.ts", lineNumber: 15 }); })();
|
|
103
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV3LWZlYXR1cmUtZGlhbG9nLXdyYXBwZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWNvbW1vbi9zcmMvbGliL25ldy1mZWF0dXJlLWRpYWxvZy9uZXctZmVhdHVyZS1kaWFsb2ctd3JhcHBlci9uZXctZmVhdHVyZS1kaWFsb2ctd3JhcHBlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQWdCLE1BQU0sMEJBQTBCLENBQUM7QUFDcEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQVEvQixNQUFNLE9BQU8sZ0NBQWdDO0lBTjdDO1FBWVUsWUFBTyxHQUFHLENBQUMsQ0FBQztRQUNaLGFBQVEsR0FBRyxHQUFHLENBQUM7UUFFZixZQUFPLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzVCLG9CQUFlLEdBQUcsTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDbEQsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFHbEMsa0JBQWEsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUIsa0JBQWEsR0FBRyxLQUFLLENBQUM7S0FnRXRCO0lBdEVTLE9BQU8sQ0FBcUI7SUFDNUIsZUFBZSxDQUFtQztJ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SUFBSSxDQUFDLHNCQUFzQixFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzNELENBQUM7SUFDRixDQUFDO2lJQTlFVyxnQ0FBZ0M7b0VBQWhDLGdDQUFnQywwZkFIbEMsWUFBWSxFQUFFLGVBQWU7O2lGQUczQixnQ0FBZ0M7Y0FONUMsU0FBUztlQUFDO2dCQUNWLFFBQVEsRUFBRSxnQ0FBZ0M7Z0JBQzFDLFVBQVUsRUFBRSxJQUFJO2dCQUNoQixPQUFPLEVBQUUsQ0FBQyxZQUFZLEVBQUUsZUFBZSxFQUFFLHlCQUF5QixDQUFDO2dCQUNuRSxRQUFRLEVBQUUsRUFBRTthQUNaO2dCQUVTLG9CQUFvQjtrQkFBNUIsS0FBSztZQUNHLDBCQUEwQjtrQkFBbEMsS0FBSztZQUNHLG9CQUFvQjtrQkFBNUIsS0FBSztZQUNHLGdCQUFnQjtrQkFBeEIsS0FBSztZQUNHLHNCQUFzQjtrQkFBOUIsS0FBSztZQUNHLE9BQU87a0JBQWYsS0FBSztZQUNHLFFBQVE7a0JBQWhCLEtBQUs7O2tGQVBNLGdDQUFnQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgaW5qZWN0LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ01vZHVsZSwgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgTmV3RmVhdHVyZURpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uL25ldy1mZWF0dXJlLWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBSZXNvbHV0aW9uSGVscGVyIH0gZnJvbSAnLi4vLi4vaGVscGVycyc7XHJcbmltcG9ydCB7IE5ld0ZlYXR1cmVEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi9uZXctZmVhdHVyZS1kaWFsb2cuc2VydmljZSc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG5cdHNlbGVjdG9yOiAnbGliLW5ldy1mZWF0dXJlLWRpYWxvZy13cmFwcGVyJyxcclxuXHRzdGFuZGFsb25lOiB0cnVlLFxyXG5cdGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIE1hdERpYWxvZ01vZHVsZSwgTmV3RmVhdHVyZURpYWxvZ0NvbXBvbmVudF0sXHJcblx0dGVtcGxhdGU6ICcnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTmV3RmVhdHVyZURpYWxvZ1dyYXBwZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcblx0QElucHV0KCkgdGl0bGVMb2NhbGl6YXRpb25LZXkhOiBzdHJpbmc7XHJcblx0QElucHV0KCkgZGVzY3JpcHRpb25Mb2NhbGl6YXRpb25LZXkhOiBzdHJpbmc7XHJcblx0QElucHV0KCkgY2xvc2VMb2NhbGl6YXRpb25LZXkhOiBzdHJpbmc7XHJcblx0QElucHV0KCkgZmVhdHVyZUNsYXNzTmFtZSE6IHN0cmluZztcclxuXHRASW5wdXQoKSBmZWF0dXJlTG9jYWxTdG9yYWdlS2V5ITogc3RyaW5nO1xyXG5cdEBJbnB1dCgpIHRpbWVvdXQgPSAwO1xyXG5cdEBJbnB1dCgpIG1heFdpZHRoID0gMzIwO1xyXG5cclxuXHRyZWFkb25seSAjZGlhbG9nID0gaW5qZWN0KE1hdERpYWxvZyk7XHJcblx0cmVhZG9ubHkgI2ZlYXR1cmVTZXJ2aWNlID0gaW5qZWN0KE5ld0ZlYXR1cmVEaWFsb2dTZXJ2aWNlKTtcclxuXHRyZWFkb25seSAjZGVzdHJveSA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG5cdGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPE5ld0ZlYXR1cmVEaWFsb2dDb21wb25lbnQ+IHwgdW5kZWZpbmVkO1xyXG5cdGZlYXR1cmVBY3RpdmUgPSBzaWduYWwoZmFsc2UpO1xyXG5cdGlzRmVhdHVyZVNlZW4gPSBmYWxzZTtcclxuXHJcblx0bmdPbkluaXQoKTogdm9pZCB7XHJcblx0XHRzZXRUaW1lb3V0KCgpID0+IHtcclxuXHRcdFx0dGhpcy5zZXRGZWF0dXJlU3RhdHVzKCk7XHJcblx0XHR9LCB0aGlzLnRpbWVvdXQpO1xyXG5cdH1cclxuXHJcblx0bmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcblx0XHR0aGlzLiNkZXN0cm95Lm5leHQobnVsbCk7XHJcblx0XHR0aGlzLiNkZXN0cm95LmNvbXBsZXRlKCk7XHJcblx0fVxyXG5cclxuXHRzaG93RmVhdHVyZURpYWxvZygpOiB2b2lkIHtcclxuXHRcdGNvbnN0IHRhcmdldEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAuJHt0aGlzLmZlYXR1cmVDbGFzc05hbWV9YCk7XHJcblx0XHRpZiAoIXRhcmdldEVsZW1lbnQpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChSZXNvbHV0aW9uSGVscGVyLmlzTW9iaWxlUmVzKCkpIHtcclxuXHRcdFx0dGFyZ2V0RWxlbWVudC5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICdzdGFydCcgfSk7XHJcblx0XHR9XHJcblxyXG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XHJcblx0XHRcdHRoaXMuZmVhdHVyZUFjdGl2ZS5zZXQodHJ1ZSk7XHJcblx0XHRcdGNvbnN0IHVwZGF0ZWRSZWN0cyA9IHRhcmdldEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcblx0XHRcdHRoaXMuZGlhbG9nUmVmID0gdGhpcy4jZGlhbG9nLm9wZW4oTmV3RmVhdHVyZURpYWxvZ0NvbXBvbmVudCwge1xyXG5cdFx0XHRcdGRhdGE6IHtcclxuXHRcdFx0XHRcdHRpdGxlOiB0aGlzLnRpdGxlTG9jYWxpemF0aW9uS2V5LFxyXG5cdFx0XHRcdFx0ZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb25Mb2NhbGl6YXRpb25LZXksXHJcblx0XHRcdFx0XHRjbG9zZTogdGhpcy5jbG9zZUxvY2FsaXphdGlvbktleSxcclxuXHRcdFx0XHRcdGZlYXR1cmVMb2NhbFN0b3JhZ2VLZXk6IHRoaXMuZmVhdHVyZUxvY2FsU3RvcmFnZUtleSxcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdHBvc2l0aW9uOiB7XHJcblx0XHRcdFx0XHRsZWZ0OiBgJHt1cGRhdGVkUmVjdHMubGVmdCAtIHRoaXMubWF4V2lkdGh9cHhgLFxyXG5cdFx0XHRcdFx0dG9wOiBgJHt1cGRhdGVkUmVjdHMudG9wICsgNDV9cHhgLFxyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0bWF4V2lkdGg6IGAke3RoaXMubWF4V2lkdGh9cHhgLFxyXG5cdFx0XHR9KTtcclxuXHJcblx0XHRcdHRoaXMuZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKCgpID0+IHtcclxuXHRcdFx0XHR0aGlzLnNldEZlYXR1cmVTZWVuKCk7XHJcblx0XHRcdFx0dGhpcy4jZmVhdHVyZVNlcnZpY2UuY3VycmVudC5zZXQodW5kZWZpbmVkKTtcclxuXHRcdFx0XHR0aGlzLiNmZWF0dXJlU2VydmljZS5zaG93TmV4dEZlYXR1cmUoKTtcclxuXHRcdFx0fSk7XHJcblx0XHRcdC8vIFdhaXQgdW50aWwgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSBpbiB0aGUgdmlld3BvcnQuXHJcblx0XHR9LCBSZXNvbHV0aW9uSGVscGVyLmlzTW9iaWxlUmVzKCkgPyA1MDAgOiAwKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgc2V0RmVhdHVyZVN0YXR1cygpOiB2b2lkIHtcclxuXHRcdHRoaXMuaXNGZWF0dXJlU2VlbiA9ICEhdGhpcy5mZWF0dXJlTG9jYWxTdG9yYWdlS2V5ICYmICEhbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5mZWF0dXJlTG9jYWxTdG9yYWdlS2V5KTtcclxuXHJcblx0XHRpZiAoIXRoaXMuaXNGZWF0dXJlU2Vlbikge1xyXG5cdFx0XHR0aGlzLiNmZWF0dXJlU2VydmljZS5yZXF1ZXN0T3BlbkZlYXR1cmUodGhpcyk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHNldEZlYXR1cmVTZWVuKCk6IHZvaWQge1xyXG5cdFx0dGhpcy5mZWF0dXJlQWN0aXZlLnNldChmYWxzZSk7XHJcblx0XHR0aGlzLmlzRmVhdHVyZVNlZW4gPSB0cnVlO1xyXG5cdFx0aWYgKHRoaXMuZmVhdHVyZUxvY2FsU3RvcmFnZUtleSkge1xyXG5cdFx0XHRsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmZlYXR1cmVMb2NhbFN0b3JhZ2VLZXksICd0cnVlJyk7XHJcblx0XHR9XHJcblx0fVxyXG59XHJcbiJdfQ==
|
package/esm2022/lib/new-feature-dialog/new-feature-dialog-wrapper/new-feature-dialog.service.mjs
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { Injectable, signal } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class NewFeatureDialogService {
|
|
4
|
+
constructor() {
|
|
5
|
+
this.current = signal(undefined);
|
|
6
|
+
this.queue = [];
|
|
7
|
+
}
|
|
8
|
+
requestOpenFeature(component) {
|
|
9
|
+
if (this.queue.includes(component)) {
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
this.queue.push(component);
|
|
13
|
+
if (!this.current()) {
|
|
14
|
+
this.showNextFeature();
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
showNextFeature() {
|
|
18
|
+
if (this.queue.length === 0) {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
const nextFeature = this.queue.shift();
|
|
22
|
+
if (!nextFeature) {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
this.current.set(nextFeature);
|
|
26
|
+
nextFeature.showFeatureDialog();
|
|
27
|
+
}
|
|
28
|
+
static { this.ɵfac = function NewFeatureDialogService_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || NewFeatureDialogService)(); }; }
|
|
29
|
+
static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: NewFeatureDialogService, factory: NewFeatureDialogService.ɵfac, providedIn: 'root' }); }
|
|
30
|
+
}
|
|
31
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(NewFeatureDialogService, [{
|
|
32
|
+
type: Injectable,
|
|
33
|
+
args: [{
|
|
34
|
+
providedIn: 'root',
|
|
35
|
+
}]
|
|
36
|
+
}], null, null); })();
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV3LWZlYXR1cmUtZGlhbG9nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtY29tbW9uL3NyYy9saWIvbmV3LWZlYXR1cmUtZGlhbG9nL25ldy1mZWF0dXJlLWRpYWxvZy13cmFwcGVyL25ldy1mZWF0dXJlLWRpYWxvZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQU1uRCxNQUFNLE9BQU8sdUJBQXVCO0lBSHBDO1FBSUUsWUFBTyxHQUFHLE1BQU0sQ0FBK0MsU0FBUyxDQUFDLENBQUM7UUFFMUUsVUFBSyxHQUF1QyxFQUFFLENBQUM7S0F3QmhEO0lBdEJDLGtCQUFrQixDQUFDLFNBQTJDO1FBQzVELElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUNuQyxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDekIsQ0FBQztJQUNILENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM1QixPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdkMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2pCLE9BQU07UUFDUixDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDOUIsV0FBVyxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDbEMsQ0FBQzt3SEExQlUsdUJBQXVCO3VFQUF2Qix1QkFBdUIsV0FBdkIsdUJBQXVCLG1CQUZ0QixNQUFNOztpRkFFUCx1QkFBdUI7Y0FIbkMsVUFBVTtlQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5ld0ZlYXR1cmVEaWFsb2dXcmFwcGVyQ29tcG9uZW50IH0gZnJvbSAnLi9uZXctZmVhdHVyZS1kaWFsb2ctd3JhcHBlci5jb21wb25lbnQnO1xyXG4gXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZXdGZWF0dXJlRGlhbG9nU2VydmljZSB7XHJcbiAgY3VycmVudCA9IHNpZ25hbDxOZXdGZWF0dXJlRGlhbG9nV3JhcHBlckNvbXBvbmVudCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcclxuIFxyXG4gIHF1ZXVlOiBOZXdGZWF0dXJlRGlhbG9nV3JhcHBlckNvbXBvbmVudFtdID0gW107XHJcbiBcclxuICByZXF1ZXN0T3BlbkZlYXR1cmUoY29tcG9uZW50OiBOZXdGZWF0dXJlRGlhbG9nV3JhcHBlckNvbXBvbmVudCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMucXVldWUuaW5jbHVkZXMoY29tcG9uZW50KSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnF1ZXVlLnB1c2goY29tcG9uZW50KTtcclxuICAgIGlmICghdGhpcy5jdXJyZW50KCkpIHtcclxuICAgICAgdGhpcy5zaG93TmV4dEZlYXR1cmUoKTtcclxuICAgIH1cclxuICB9XHJcbiBcclxuICBzaG93TmV4dEZlYXR1cmUoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5xdWV1ZS5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gXHJcbiAgICBjb25zdCBuZXh0RmVhdHVyZSA9IHRoaXMucXVldWUuc2hpZnQoKTtcclxuICAgIGlmICghbmV4dEZlYXR1cmUpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICB0aGlzLmN1cnJlbnQuc2V0KG5leHRGZWF0dXJlKTtcclxuICAgIG5leHRGZWF0dXJlLnNob3dGZWF0dXJlRGlhbG9nKCk7XHJcbiAgfVxyXG59XHJcbiBcclxuICJdfQ==
|
|
@@ -8267,34 +8267,62 @@ class NewFeatureDialogComponent {
|
|
|
8267
8267
|
}], null, null); })();
|
|
8268
8268
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(NewFeatureDialogComponent, { className: "NewFeatureDialogComponent", filePath: "lib\\new-feature-dialog\\new-feature-dialog.component.ts", lineNumber: 13 }); })();
|
|
8269
8269
|
|
|
8270
|
+
class NewFeatureDialogService {
|
|
8271
|
+
constructor() {
|
|
8272
|
+
this.current = signal(undefined);
|
|
8273
|
+
this.queue = [];
|
|
8274
|
+
}
|
|
8275
|
+
requestOpenFeature(component) {
|
|
8276
|
+
if (this.queue.includes(component)) {
|
|
8277
|
+
return;
|
|
8278
|
+
}
|
|
8279
|
+
this.queue.push(component);
|
|
8280
|
+
if (!this.current()) {
|
|
8281
|
+
this.showNextFeature();
|
|
8282
|
+
}
|
|
8283
|
+
}
|
|
8284
|
+
showNextFeature() {
|
|
8285
|
+
if (this.queue.length === 0) {
|
|
8286
|
+
return;
|
|
8287
|
+
}
|
|
8288
|
+
const nextFeature = this.queue.shift();
|
|
8289
|
+
if (!nextFeature) {
|
|
8290
|
+
return;
|
|
8291
|
+
}
|
|
8292
|
+
this.current.set(nextFeature);
|
|
8293
|
+
nextFeature.showFeatureDialog();
|
|
8294
|
+
}
|
|
8295
|
+
static { this.ɵfac = function NewFeatureDialogService_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || NewFeatureDialogService)(); }; }
|
|
8296
|
+
static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: NewFeatureDialogService, factory: NewFeatureDialogService.ɵfac, providedIn: 'root' }); }
|
|
8297
|
+
}
|
|
8298
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(NewFeatureDialogService, [{
|
|
8299
|
+
type: Injectable,
|
|
8300
|
+
args: [{
|
|
8301
|
+
providedIn: 'root',
|
|
8302
|
+
}]
|
|
8303
|
+
}], null, null); })();
|
|
8304
|
+
|
|
8270
8305
|
class NewFeatureDialogWrapperComponent {
|
|
8271
8306
|
constructor() {
|
|
8272
8307
|
this.timeout = 0;
|
|
8273
8308
|
this.maxWidth = 320;
|
|
8274
8309
|
this.#dialog = inject(MatDialog);
|
|
8310
|
+
this.#featureService = inject(NewFeatureDialogService);
|
|
8311
|
+
this.#destroy = new Subject();
|
|
8275
8312
|
this.featureActive = signal(false);
|
|
8276
8313
|
this.isFeatureSeen = false;
|
|
8277
|
-
this.featureDialogComponentSelector = 'lib-new-feature-dialog';
|
|
8278
8314
|
}
|
|
8279
8315
|
#dialog;
|
|
8316
|
+
#featureService;
|
|
8317
|
+
#destroy;
|
|
8280
8318
|
ngOnInit() {
|
|
8281
8319
|
setTimeout(() => {
|
|
8282
|
-
// Multiple feature order based on the component selector in DOM.
|
|
8283
|
-
if (document.querySelector(this.featureDialogComponentSelector)) {
|
|
8284
|
-
setTimeout(() => {
|
|
8285
|
-
this.ngOnInit();
|
|
8286
|
-
}, 250);
|
|
8287
|
-
return;
|
|
8288
|
-
}
|
|
8289
8320
|
this.setFeatureStatus();
|
|
8290
8321
|
}, this.timeout);
|
|
8291
8322
|
}
|
|
8292
|
-
|
|
8293
|
-
this.
|
|
8294
|
-
|
|
8295
|
-
this.showFeatureDialog();
|
|
8296
|
-
}
|
|
8297
|
-
this.isFeatureSeen = true;
|
|
8323
|
+
ngOnDestroy() {
|
|
8324
|
+
this.#destroy.next(null);
|
|
8325
|
+
this.#destroy.complete();
|
|
8298
8326
|
}
|
|
8299
8327
|
showFeatureDialog() {
|
|
8300
8328
|
const targetElement = document.querySelector(`.${this.featureClassName}`);
|
|
@@ -8302,29 +8330,41 @@ class NewFeatureDialogWrapperComponent {
|
|
|
8302
8330
|
return;
|
|
8303
8331
|
}
|
|
8304
8332
|
if (ResolutionHelper.isMobileRes()) {
|
|
8305
|
-
targetElement.scrollIntoView({ behavior: 'smooth', block: '
|
|
8306
|
-
}
|
|
8307
|
-
|
|
8308
|
-
|
|
8309
|
-
|
|
8310
|
-
|
|
8311
|
-
|
|
8312
|
-
|
|
8313
|
-
|
|
8314
|
-
|
|
8315
|
-
|
|
8316
|
-
|
|
8317
|
-
|
|
8318
|
-
|
|
8319
|
-
|
|
8320
|
-
|
|
8321
|
-
|
|
8322
|
-
|
|
8323
|
-
this.
|
|
8324
|
-
|
|
8325
|
-
|
|
8333
|
+
targetElement.scrollIntoView({ behavior: 'smooth', block: 'start' });
|
|
8334
|
+
}
|
|
8335
|
+
setTimeout(() => {
|
|
8336
|
+
this.featureActive.set(true);
|
|
8337
|
+
const updatedRects = targetElement.getBoundingClientRect();
|
|
8338
|
+
this.dialogRef = this.#dialog.open(NewFeatureDialogComponent, {
|
|
8339
|
+
data: {
|
|
8340
|
+
title: this.titleLocalizationKey,
|
|
8341
|
+
description: this.descriptionLocalizationKey,
|
|
8342
|
+
close: this.closeLocalizationKey,
|
|
8343
|
+
featureLocalStorageKey: this.featureLocalStorageKey,
|
|
8344
|
+
},
|
|
8345
|
+
position: {
|
|
8346
|
+
left: `${updatedRects.left - this.maxWidth}px`,
|
|
8347
|
+
top: `${updatedRects.top + 45}px`,
|
|
8348
|
+
},
|
|
8349
|
+
maxWidth: `${this.maxWidth}px`,
|
|
8350
|
+
});
|
|
8351
|
+
this.dialogRef.afterClosed().subscribe(() => {
|
|
8352
|
+
this.setFeatureSeen();
|
|
8353
|
+
this.#featureService.current.set(undefined);
|
|
8354
|
+
this.#featureService.showNextFeature();
|
|
8355
|
+
});
|
|
8356
|
+
// Wait until the element is visible in the viewport.
|
|
8357
|
+
}, ResolutionHelper.isMobileRes() ? 500 : 0);
|
|
8358
|
+
}
|
|
8359
|
+
setFeatureStatus() {
|
|
8360
|
+
this.isFeatureSeen = !!this.featureLocalStorageKey && !!localStorage.getItem(this.featureLocalStorageKey);
|
|
8361
|
+
if (!this.isFeatureSeen) {
|
|
8362
|
+
this.#featureService.requestOpenFeature(this);
|
|
8363
|
+
}
|
|
8326
8364
|
}
|
|
8327
8365
|
setFeatureSeen() {
|
|
8366
|
+
this.featureActive.set(false);
|
|
8367
|
+
this.isFeatureSeen = true;
|
|
8328
8368
|
if (this.featureLocalStorageKey) {
|
|
8329
8369
|
localStorage.setItem(this.featureLocalStorageKey, 'true');
|
|
8330
8370
|
}
|
|
@@ -8355,7 +8395,7 @@ class NewFeatureDialogWrapperComponent {
|
|
|
8355
8395
|
}], maxWidth: [{
|
|
8356
8396
|
type: Input
|
|
8357
8397
|
}] }); })();
|
|
8358
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(NewFeatureDialogWrapperComponent, { className: "NewFeatureDialogWrapperComponent", filePath: "lib\\new-feature-dialog\\new-feature-dialog-wrapper\\new-feature-dialog-wrapper.component.ts", lineNumber:
|
|
8398
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(NewFeatureDialogWrapperComponent, { className: "NewFeatureDialogWrapperComponent", filePath: "lib\\new-feature-dialog\\new-feature-dialog-wrapper\\new-feature-dialog-wrapper.component.ts", lineNumber: 15 }); })();
|
|
8359
8399
|
|
|
8360
8400
|
/*
|
|
8361
8401
|
* Public API Surface of ngx-common
|