@skyux/modals 8.7.2 → 9.0.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/documentation.json +56 -56
- package/esm2022/lib/modules/confirm/confirm.component.mjs +112 -0
- package/{esm2020 → esm2022}/lib/modules/confirm/confirm.module.mjs +13 -13
- package/esm2022/lib/modules/confirm/confirm.service.mjs +54 -0
- package/esm2022/lib/modules/modal/modal-adapter.service.mjs +99 -0
- package/esm2022/lib/modules/modal/modal-component-adapter.service.mjs +101 -0
- package/{esm2020 → esm2022}/lib/modules/modal/modal-configuration.mjs +4 -4
- package/{esm2020 → esm2022}/lib/modules/modal/modal-content.component.mjs +4 -4
- package/esm2022/lib/modules/modal/modal-errors.service.mjs +21 -0
- package/{esm2020 → esm2022}/lib/modules/modal/modal-footer.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/modules/modal/modal-header.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/modules/modal/modal-host-context.mjs +4 -4
- package/esm2022/lib/modules/modal/modal-host.component.mjs +163 -0
- package/esm2022/lib/modules/modal/modal-host.service.mjs +62 -0
- package/esm2022/lib/modules/modal/modal-instance.mjs +123 -0
- package/esm2022/lib/modules/modal/modal-is-dirty.directive.mjs +94 -0
- package/esm2022/lib/modules/modal/modal-scroll-shadow.directive.mjs +129 -0
- package/esm2022/lib/modules/modal/modal.component.mjs +229 -0
- package/{esm2020 → esm2022}/lib/modules/modal/modal.module.mjs +29 -29
- package/esm2022/lib/modules/modal/modal.service.mjs +97 -0
- package/esm2022/lib/modules/shared/sky-modals-resources.module.mjs +61 -0
- package/esm2022/testing/confirm/confirm-button-harness.mjs +46 -0
- package/esm2022/testing/confirm/confirm-harness.mjs +90 -0
- package/esm2022/testing/modal/modal-harness.mjs +75 -0
- package/esm2022/testing/modal-fixture.mjs +143 -0
- package/{fesm2020 → fesm2022}/skyux-modals-testing.mjs +60 -73
- package/{fesm2020 → fesm2022}/skyux-modals-testing.mjs.map +1 -1
- package/fesm2022/skyux-modals.mjs +1502 -0
- package/{fesm2015 → fesm2022}/skyux-modals.mjs.map +1 -1
- package/lib/modules/modal/modal-is-dirty.directive.d.ts +1 -1
- package/lib/modules/modal/modal.component.d.ts +1 -1
- package/package.json +16 -24
- package/esm2020/lib/modules/confirm/confirm.component.mjs +0 -114
- package/esm2020/lib/modules/confirm/confirm.service.mjs +0 -57
- package/esm2020/lib/modules/modal/modal-adapter.service.mjs +0 -101
- package/esm2020/lib/modules/modal/modal-component-adapter.service.mjs +0 -104
- package/esm2020/lib/modules/modal/modal-errors.service.mjs +0 -24
- package/esm2020/lib/modules/modal/modal-host.component.mjs +0 -164
- package/esm2020/lib/modules/modal/modal-host.service.mjs +0 -65
- package/esm2020/lib/modules/modal/modal-instance.mjs +0 -127
- package/esm2020/lib/modules/modal/modal-is-dirty.directive.mjs +0 -93
- package/esm2020/lib/modules/modal/modal-scroll-shadow.directive.mjs +0 -127
- package/esm2020/lib/modules/modal/modal.component.mjs +0 -228
- package/esm2020/lib/modules/modal/modal.service.mjs +0 -99
- package/esm2020/lib/modules/shared/sky-modals-resources.module.mjs +0 -61
- package/esm2020/testing/confirm/confirm-button-harness.mjs +0 -46
- package/esm2020/testing/confirm/confirm-harness.mjs +0 -97
- package/esm2020/testing/modal/modal-harness.mjs +0 -81
- package/esm2020/testing/modal-fixture.mjs +0 -145
- package/fesm2015/skyux-modals-testing.mjs +0 -409
- package/fesm2015/skyux-modals-testing.mjs.map +0 -1
- package/fesm2015/skyux-modals.mjs +0 -1522
- package/fesm2020/skyux-modals.mjs +0 -1510
- package/fesm2020/skyux-modals.mjs.map +0 -1
- /package/{esm2020 → esm2022}/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/confirm/confirm-button-action.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/confirm/confirm-button-config.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/confirm/confirm-button-style-type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/confirm/confirm-button.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/confirm/confirm-closed-event-args.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/confirm/confirm-config-token.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/confirm/confirm-config.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/confirm/confirm-instance.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/confirm/confirm-type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/modal/modal-before-close-handler.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/modal/modal-close-args.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/modal/modal-error.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/modal/modal-host-context-args.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/modal/modal-scroll-shadow-event-args.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/modal/modal.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/skyux-modals.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/confirm/confirm-button-harness-filters.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/modal/modal-harness-filters.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/skyux-modals-testing.mjs +0 -0
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { Subject } from 'rxjs';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
const BASE_Z_INDEX = 1040;
|
|
5
|
+
const modalHosts = [];
|
|
6
|
+
/**
|
|
7
|
+
* @internal
|
|
8
|
+
* @dynamic
|
|
9
|
+
*/
|
|
10
|
+
export class SkyModalHostService {
|
|
11
|
+
static get openModalCount() {
|
|
12
|
+
return modalHosts.length;
|
|
13
|
+
}
|
|
14
|
+
static get fullPageModalCount() {
|
|
15
|
+
const fullPageModals = modalHosts.filter((modal) => modal.fullPage);
|
|
16
|
+
return fullPageModals.length;
|
|
17
|
+
}
|
|
18
|
+
static get backdropZIndex() {
|
|
19
|
+
return BASE_Z_INDEX + modalHosts.length * 10;
|
|
20
|
+
}
|
|
21
|
+
static get topModal() {
|
|
22
|
+
return modalHosts[modalHosts.length - 1];
|
|
23
|
+
}
|
|
24
|
+
constructor() {
|
|
25
|
+
this.close = new Subject();
|
|
26
|
+
this.fullPage = false;
|
|
27
|
+
this.openHelp = new Subject();
|
|
28
|
+
this.zIndex = this.#calculateZIndex();
|
|
29
|
+
modalHosts.push(this);
|
|
30
|
+
}
|
|
31
|
+
getModalZIndex() {
|
|
32
|
+
return this.zIndex;
|
|
33
|
+
}
|
|
34
|
+
onClose() {
|
|
35
|
+
this.close.next();
|
|
36
|
+
}
|
|
37
|
+
onOpenHelp(helpKey) {
|
|
38
|
+
this.openHelp.next(helpKey);
|
|
39
|
+
}
|
|
40
|
+
destroy() {
|
|
41
|
+
modalHosts.splice(modalHosts.indexOf(this), 1);
|
|
42
|
+
}
|
|
43
|
+
#calculateZIndex() {
|
|
44
|
+
const zIndexArray = modalHosts.map((hostService) => hostService.zIndex);
|
|
45
|
+
if (zIndexArray.length === 0) {
|
|
46
|
+
return BASE_Z_INDEX + 11;
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
const currentMaxZIndex = Math.max(...zIndexArray);
|
|
50
|
+
return currentMaxZIndex + 10;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SkyModalHostService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
54
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SkyModalHostService, providedIn: 'root' }); }
|
|
55
|
+
}
|
|
56
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SkyModalHostService, decorators: [{
|
|
57
|
+
type: Injectable,
|
|
58
|
+
args: [{
|
|
59
|
+
providedIn: 'root',
|
|
60
|
+
}]
|
|
61
|
+
}], ctorParameters: function () { return []; } });
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtaG9zdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL21vZGFscy9zcmMvbGliL21vZHVsZXMvbW9kYWwvbW9kYWwtaG9zdC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFFL0IsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDO0FBQzFCLE1BQU0sVUFBVSxHQUEwQixFQUFFLENBQUM7QUFFN0M7OztHQUdHO0FBSUgsTUFBTSxPQUFPLG1CQUFtQjtJQUN2QixNQUFNLEtBQUssY0FBYztRQUM5QixPQUFPLFVBQVUsQ0FBQyxNQUFNLENBQUM7SUFDM0IsQ0FBQztJQUVNLE1BQU0sS0FBSyxrQkFBa0I7UUFDbEMsTUFBTSxjQUFjLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3BFLE9BQU8sY0FBYyxDQUFDLE1BQU0sQ0FBQztJQUMvQixDQUFDO0lBRU0sTUFBTSxLQUFLLGNBQWM7UUFDOUIsT0FBTyxZQUFZLEdBQUcsVUFBVSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7SUFDL0MsQ0FBQztJQUVNLE1BQU0sS0FBSyxRQUFRO1FBQ3hCLE9BQU8sVUFBVSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQU9EO1FBTE8sVUFBSyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDNUIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixhQUFRLEdBQUcsSUFBSSxPQUFPLEVBQVUsQ0FBQztRQUl0QyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3RDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVNLGNBQWM7UUFDbkIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFFTSxPQUFPO1FBQ1osSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRU0sVUFBVSxDQUFDLE9BQWU7UUFDL0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVNLE9BQU87UUFDWixVQUFVLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELGdCQUFnQjtRQUNkLE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4RSxJQUFJLFdBQVcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQzVCLE9BQU8sWUFBWSxHQUFHLEVBQUUsQ0FBQztTQUMxQjthQUFNO1lBQ0wsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsV0FBVyxDQUFDLENBQUM7WUFDbEQsT0FBTyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7U0FDOUI7SUFDSCxDQUFDOzhHQXBEVSxtQkFBbUI7a0hBQW5CLG1CQUFtQixjQUZsQixNQUFNOzsyRkFFUCxtQkFBbUI7a0JBSC9CLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmNvbnN0IEJBU0VfWl9JTkRFWCA9IDEwNDA7XG5jb25zdCBtb2RhbEhvc3RzOiBTa3lNb2RhbEhvc3RTZXJ2aWNlW10gPSBbXTtcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqIEBkeW5hbWljXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lNb2RhbEhvc3RTZXJ2aWNlIHtcbiAgcHVibGljIHN0YXRpYyBnZXQgb3Blbk1vZGFsQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gbW9kYWxIb3N0cy5sZW5ndGg7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGdldCBmdWxsUGFnZU1vZGFsQ291bnQoKTogbnVtYmVyIHtcbiAgICBjb25zdCBmdWxsUGFnZU1vZGFscyA9IG1vZGFsSG9zdHMuZmlsdGVyKChtb2RhbCkgPT4gbW9kYWwuZnVsbFBhZ2UpO1xuICAgIHJldHVybiBmdWxsUGFnZU1vZGFscy5sZW5ndGg7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGdldCBiYWNrZHJvcFpJbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiBCQVNFX1pfSU5ERVggKyBtb2RhbEhvc3RzLmxlbmd0aCAqIDEwO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBnZXQgdG9wTW9kYWwoKTogU2t5TW9kYWxIb3N0U2VydmljZSB7XG4gICAgcmV0dXJuIG1vZGFsSG9zdHNbbW9kYWxIb3N0cy5sZW5ndGggLSAxXTtcbiAgfVxuXG4gIHB1YmxpYyBjbG9zZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHB1YmxpYyBmdWxsUGFnZSA9IGZhbHNlO1xuICBwdWJsaWMgb3BlbkhlbHAgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XG4gIHB1YmxpYyB6SW5kZXg6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnpJbmRleCA9IHRoaXMuI2NhbGN1bGF0ZVpJbmRleCgpO1xuICAgIG1vZGFsSG9zdHMucHVzaCh0aGlzKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRNb2RhbFpJbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnpJbmRleDtcbiAgfVxuXG4gIHB1YmxpYyBvbkNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuY2xvc2UubmV4dCgpO1xuICB9XG5cbiAgcHVibGljIG9uT3BlbkhlbHAoaGVscEtleTogc3RyaW5nKSB7XG4gICAgdGhpcy5vcGVuSGVscC5uZXh0KGhlbHBLZXkpO1xuICB9XG5cbiAgcHVibGljIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgbW9kYWxIb3N0cy5zcGxpY2UobW9kYWxIb3N0cy5pbmRleE9mKHRoaXMpLCAxKTtcbiAgfVxuXG4gICNjYWxjdWxhdGVaSW5kZXgoKTogbnVtYmVyIHtcbiAgICBjb25zdCB6SW5kZXhBcnJheSA9IG1vZGFsSG9zdHMubWFwKChob3N0U2VydmljZSkgPT4gaG9zdFNlcnZpY2UuekluZGV4KTtcbiAgICBpZiAoekluZGV4QXJyYXkubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gQkFTRV9aX0lOREVYICsgMTE7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRNYXhaSW5kZXggPSBNYXRoLm1heCguLi56SW5kZXhBcnJheSk7XG4gICAgICByZXR1cm4gY3VycmVudE1heFpJbmRleCArIDEwO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { Subject } from 'rxjs';
|
|
2
|
+
import { SkyModalBeforeCloseHandler } from './modal-before-close-handler';
|
|
3
|
+
import { SkyModalCloseArgs } from './modal-close-args';
|
|
4
|
+
export class SkyModalInstance {
|
|
5
|
+
/**
|
|
6
|
+
* An event that the modal instance emits when it is about to close.
|
|
7
|
+
* It emits a `SkyModalBeforeCloseHandler` object with a `closeModal` method
|
|
8
|
+
* that closes the modal. If a subscription exists for this event,
|
|
9
|
+
* the modal does not close until the subscriber calls the `closeModal` method.
|
|
10
|
+
*/
|
|
11
|
+
get beforeClose() {
|
|
12
|
+
return this.#_beforeClose;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* An event that the modal instance emits when it closes.
|
|
16
|
+
* It emits a `SkyModalCloseArgs` object with a `data` property that includes
|
|
17
|
+
* data passed from users on close or save and a `reason` property that indicates
|
|
18
|
+
* whether the modal was saved or closed without saving.
|
|
19
|
+
* The `reason` property accepts any string value.
|
|
20
|
+
* Common examples include `"cancel"`, `"close"`, and `"save"`.
|
|
21
|
+
*/
|
|
22
|
+
get closed() {
|
|
23
|
+
return this.#_closed;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* An event that the modal instance emits when users click
|
|
27
|
+
* the <i class="fa fa-question-circle" aria-hidden="true"></i> button.
|
|
28
|
+
* If a `helpKey` parameter was specified, the `helpOpened` event broadcasts the `helpKey`.
|
|
29
|
+
*/
|
|
30
|
+
get helpOpened() {
|
|
31
|
+
return this.#_helpOpened;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Sets the component adapter for the instance. This is used internally for actions such as scrolling the content.
|
|
35
|
+
* @internal
|
|
36
|
+
*/
|
|
37
|
+
set adapter(value) {
|
|
38
|
+
this.#adapter = value;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Sets the component ref for the instance. This is used to extract the component instance for the public API and the element ref for internal use.
|
|
42
|
+
* @internal
|
|
43
|
+
*/
|
|
44
|
+
set componentRef(value) {
|
|
45
|
+
this.componentInstance = value.instance;
|
|
46
|
+
this.#elementRef = value.location;
|
|
47
|
+
}
|
|
48
|
+
#_beforeClose = new Subject();
|
|
49
|
+
#_closed = new Subject();
|
|
50
|
+
#_helpOpened = new Subject();
|
|
51
|
+
#adapter;
|
|
52
|
+
#elementRef;
|
|
53
|
+
/**
|
|
54
|
+
* Closes the modal instance.
|
|
55
|
+
* @param result Specifies an object to emit to subscribers of the `closed` event of the
|
|
56
|
+
* modal instance. The `SkyModalInstance` provider can be injected into a component's constructor
|
|
57
|
+
* so that this `close` function can be called from a button in the `sky-modal-footer`.
|
|
58
|
+
* @param reason Specifies the reason for the modal closing, with the default reason of `"close"`.
|
|
59
|
+
* @param ignoreBeforeClose Indicates whether to ignore the modal instance's `beforeClose` event.
|
|
60
|
+
*/
|
|
61
|
+
close(result, reason, ignoreBeforeClose) {
|
|
62
|
+
if (reason === undefined) {
|
|
63
|
+
reason = 'close';
|
|
64
|
+
}
|
|
65
|
+
this.#closeModal(reason, result, ignoreBeforeClose);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Closes the modal instance with `reason="cancel"`.
|
|
69
|
+
* @param result Specifies an object to emit to subscribers of the `closed` event of the modal
|
|
70
|
+
* instance. The `SkyModalInstance` provider can be injected into a component's constructor so
|
|
71
|
+
* that this cancel function can be called from a button in the `sky-modal-footer`.
|
|
72
|
+
*/
|
|
73
|
+
cancel(result) {
|
|
74
|
+
this.#closeModal('cancel', result);
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Closes the modal instance with `reason="save"`.
|
|
78
|
+
* @param result Specifies an object to emit to subscribers of the `closed` event of the modal
|
|
79
|
+
* instance. The `SkyModalInstance` provider can be injected into a component's constructor so
|
|
80
|
+
* that this `save` function can be called from a button in `the sky-modal-footer`.
|
|
81
|
+
*/
|
|
82
|
+
save(result) {
|
|
83
|
+
this.#closeModal('save', result);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Scrolls the modal content area to the top of its scrollable area.
|
|
87
|
+
*/
|
|
88
|
+
scrollContentToTop() {
|
|
89
|
+
if (this.#adapter && this.#elementRef) {
|
|
90
|
+
this.#adapter.scrollContentToTop(this.#elementRef);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Triggers the `helpOpened` event that broadcasts a `helpKey` parameter to open
|
|
95
|
+
* when users click the <i class="fa fa-question-circle" aria-hidden="true"></i> button.
|
|
96
|
+
* @param helpKey Specifies a string to emit to subscribers of
|
|
97
|
+
* the modal instance's `helpOpened` event. Consumers can inject the `SkyModalInstance` provider
|
|
98
|
+
* into a component's constructor to call the `openHelp` function in the modal template.
|
|
99
|
+
*/
|
|
100
|
+
openHelp(helpKey) {
|
|
101
|
+
this.#_helpOpened.next(helpKey);
|
|
102
|
+
}
|
|
103
|
+
#closeModal(type, result, ignoreBeforeClose = false) {
|
|
104
|
+
const args = new SkyModalCloseArgs();
|
|
105
|
+
args.reason = type;
|
|
106
|
+
args.data = result;
|
|
107
|
+
if (this.#_beforeClose.observers.length === 0 || ignoreBeforeClose) {
|
|
108
|
+
this.#notifyClosed(args);
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
this.#_beforeClose.next(new SkyModalBeforeCloseHandler(() => {
|
|
112
|
+
this.#notifyClosed(args);
|
|
113
|
+
}, args));
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
#notifyClosed(args) {
|
|
117
|
+
this.#_closed.next(args);
|
|
118
|
+
this.#_closed.complete();
|
|
119
|
+
this.#_beforeClose.complete();
|
|
120
|
+
this.#_helpOpened.complete();
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtaW5zdGFuY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvbW9kYWxzL3NyYy9saWIvbW9kdWxlcy9tb2RhbC9tb2RhbC1pbnN0YW5jZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRzNDLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXZELE1BQU0sT0FBTyxnQkFBZ0I7SUFDM0I7Ozs7O09BS0c7SUFDSCxJQUFXLFdBQVc7UUFDcEIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsSUFBVyxNQUFNO1FBQ2YsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBVyxVQUFVO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0lBUUQ7OztPQUdHO0lBQ0gsSUFBVyxPQUFPLENBQUMsS0FBNkI7UUFDOUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDeEIsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQVcsWUFBWSxDQUFDLEtBQXdCO1FBQzlDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztJQUNwQyxDQUFDO0lBRUQsYUFBYSxHQUFHLElBQUksT0FBTyxFQUE4QixDQUFDO0lBRTFELFFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBcUIsQ0FBQztJQUU1QyxZQUFZLEdBQUcsSUFBSSxPQUFPLEVBQVUsQ0FBQztJQUVyQyxRQUFRLENBQXFDO0lBQzdDLFdBQVcsQ0FBeUI7SUFFcEM7Ozs7Ozs7T0FPRztJQUNJLEtBQUssQ0FDVixNQUFZLEVBQ1osTUFBZSxFQUNmLGlCQUEyQjtRQUUzQixJQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUU7WUFDeEIsTUFBTSxHQUFHLE9BQU8sQ0FBQztTQUNsQjtRQUVELElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLE1BQU0sQ0FBQyxNQUFZO1FBQ3hCLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLElBQUksQ0FBQyxNQUFZO1FBQ3RCLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRDs7T0FFRztJQUNJLGtCQUFrQjtRQUN2QixJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNyQyxJQUFJLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUNwRDtJQUNILENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxRQUFRLENBQUMsT0FBZTtRQUM3QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsV0FBVyxDQUFDLElBQVksRUFBRSxNQUFZLEVBQUUsaUJBQWlCLEdBQUcsS0FBSztRQUMvRCxNQUFNLElBQUksR0FBRyxJQUFJLGlCQUFpQixFQUFFLENBQUM7UUFFckMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7UUFFbkIsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLGlCQUFpQixFQUFFO1lBQ2xFLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDMUI7YUFBTTtZQUNMLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUNyQixJQUFJLDBCQUEwQixDQUFDLEdBQUcsRUFBRTtnQkFDbEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzQixDQUFDLEVBQUUsSUFBSSxDQUFDLENBQ1QsQ0FBQztTQUNIO0lBQ0gsQ0FBQztJQUVELGFBQWEsQ0FBQyxJQUF1QjtRQUNuQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMvQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnRSZWYsIEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBTa3lNb2RhbEFkYXB0ZXJTZXJ2aWNlIH0gZnJvbSAnLi9tb2RhbC1hZGFwdGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2t5TW9kYWxCZWZvcmVDbG9zZUhhbmRsZXIgfSBmcm9tICcuL21vZGFsLWJlZm9yZS1jbG9zZS1oYW5kbGVyJztcbmltcG9ydCB7IFNreU1vZGFsQ2xvc2VBcmdzIH0gZnJvbSAnLi9tb2RhbC1jbG9zZS1hcmdzJztcblxuZXhwb3J0IGNsYXNzIFNreU1vZGFsSW5zdGFuY2Uge1xuICAvKipcbiAgICogQW4gZXZlbnQgdGhhdCB0aGUgbW9kYWwgaW5zdGFuY2UgZW1pdHMgd2hlbiBpdCBpcyBhYm91dCB0byBjbG9zZS5cbiAgICogSXQgZW1pdHMgYSBgU2t5TW9kYWxCZWZvcmVDbG9zZUhhbmRsZXJgIG9iamVjdCB3aXRoIGEgYGNsb3NlTW9kYWxgIG1ldGhvZFxuICAgKiB0aGF0IGNsb3NlcyB0aGUgbW9kYWwuIElmIGEgc3Vic2NyaXB0aW9uIGV4aXN0cyBmb3IgdGhpcyBldmVudCxcbiAgICogdGhlIG1vZGFsIGRvZXMgbm90IGNsb3NlIHVudGlsIHRoZSBzdWJzY3JpYmVyIGNhbGxzIHRoZSBgY2xvc2VNb2RhbGAgbWV0aG9kLlxuICAgKi9cbiAgcHVibGljIGdldCBiZWZvcmVDbG9zZSgpOiBPYnNlcnZhYmxlPFNreU1vZGFsQmVmb3JlQ2xvc2VIYW5kbGVyPiB7XG4gICAgcmV0dXJuIHRoaXMuI19iZWZvcmVDbG9zZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbiBldmVudCB0aGF0IHRoZSBtb2RhbCBpbnN0YW5jZSBlbWl0cyB3aGVuIGl0IGNsb3Nlcy5cbiAgICogSXQgZW1pdHMgYSBgU2t5TW9kYWxDbG9zZUFyZ3NgIG9iamVjdCB3aXRoIGEgYGRhdGFgIHByb3BlcnR5IHRoYXQgaW5jbHVkZXNcbiAgICogZGF0YSBwYXNzZWQgZnJvbSB1c2VycyBvbiBjbG9zZSBvciBzYXZlIGFuZCBhIGByZWFzb25gIHByb3BlcnR5IHRoYXQgaW5kaWNhdGVzXG4gICAqIHdoZXRoZXIgdGhlIG1vZGFsIHdhcyBzYXZlZCBvciBjbG9zZWQgd2l0aG91dCBzYXZpbmcuXG4gICAqIFRoZSBgcmVhc29uYCBwcm9wZXJ0eSBhY2NlcHRzIGFueSBzdHJpbmcgdmFsdWUuXG4gICAqIENvbW1vbiBleGFtcGxlcyBpbmNsdWRlIGBcImNhbmNlbFwiYCwgYFwiY2xvc2VcImAsIGFuZCBgXCJzYXZlXCJgLlxuICAgKi9cbiAgcHVibGljIGdldCBjbG9zZWQoKTogT2JzZXJ2YWJsZTxTa3lNb2RhbENsb3NlQXJncz4ge1xuICAgIHJldHVybiB0aGlzLiNfY2xvc2VkO1xuICB9XG5cbiAgLyoqXG4gICAqIEFuIGV2ZW50IHRoYXQgdGhlIG1vZGFsIGluc3RhbmNlIGVtaXRzIHdoZW4gdXNlcnMgY2xpY2tcbiAgICogdGhlIDxpIGNsYXNzPVwiZmEgZmEtcXVlc3Rpb24tY2lyY2xlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPiBidXR0b24uXG4gICAqIElmIGEgYGhlbHBLZXlgIHBhcmFtZXRlciB3YXMgc3BlY2lmaWVkLCB0aGUgYGhlbHBPcGVuZWRgIGV2ZW50IGJyb2FkY2FzdHMgdGhlIGBoZWxwS2V5YC5cbiAgICovXG4gIHB1YmxpYyBnZXQgaGVscE9wZW5lZCgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLiNfaGVscE9wZW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIGRpcmVjdCByZWZlcmVuY2UgdG8gdGhlIHByb3ZpZGVkIGNvbXBvbmVudCdzIGNsYXNzLlxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgcHVibGljIGNvbXBvbmVudEluc3RhbmNlOiBhbnk7XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGNvbXBvbmVudCBhZGFwdGVyIGZvciB0aGUgaW5zdGFuY2UuIFRoaXMgaXMgdXNlZCBpbnRlcm5hbGx5IGZvciBhY3Rpb25zIHN1Y2ggYXMgc2Nyb2xsaW5nIHRoZSBjb250ZW50LlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBzZXQgYWRhcHRlcih2YWx1ZTogU2t5TW9kYWxBZGFwdGVyU2VydmljZSkge1xuICAgIHRoaXMuI2FkYXB0ZXIgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBjb21wb25lbnQgcmVmIGZvciB0aGUgaW5zdGFuY2UuIFRoaXMgaXMgdXNlZCB0byBleHRyYWN0IHRoZSBjb21wb25lbnQgaW5zdGFuY2UgZm9yIHRoZSBwdWJsaWMgQVBJIGFuZCB0aGUgZWxlbWVudCByZWYgZm9yIGludGVybmFsIHVzZS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgc2V0IGNvbXBvbmVudFJlZih2YWx1ZTogQ29tcG9uZW50UmVmPGFueT4pIHtcbiAgICB0aGlzLmNvbXBvbmVudEluc3RhbmNlID0gdmFsdWUuaW5zdGFuY2U7XG4gICAgdGhpcy4jZWxlbWVudFJlZiA9IHZhbHVlLmxvY2F0aW9uO1xuICB9XG5cbiAgI19iZWZvcmVDbG9zZSA9IG5ldyBTdWJqZWN0PFNreU1vZGFsQmVmb3JlQ2xvc2VIYW5kbGVyPigpO1xuXG4gICNfY2xvc2VkID0gbmV3IFN1YmplY3Q8U2t5TW9kYWxDbG9zZUFyZ3M+KCk7XG5cbiAgI19oZWxwT3BlbmVkID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuXG4gICNhZGFwdGVyOiBTa3lNb2RhbEFkYXB0ZXJTZXJ2aWNlIHwgdW5kZWZpbmVkO1xuICAjZWxlbWVudFJlZjogRWxlbWVudFJlZiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQ2xvc2VzIHRoZSBtb2RhbCBpbnN0YW5jZS5cbiAgICogQHBhcmFtIHJlc3VsdCBTcGVjaWZpZXMgYW4gb2JqZWN0IHRvIGVtaXQgdG8gc3Vic2NyaWJlcnMgb2YgdGhlIGBjbG9zZWRgIGV2ZW50IG9mIHRoZVxuICAgKiBtb2RhbCBpbnN0YW5jZS4gVGhlIGBTa3lNb2RhbEluc3RhbmNlYCBwcm92aWRlciBjYW4gYmUgaW5qZWN0ZWQgaW50byBhIGNvbXBvbmVudCdzIGNvbnN0cnVjdG9yXG4gICAqIHNvIHRoYXQgdGhpcyBgY2xvc2VgIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgZnJvbSBhIGJ1dHRvbiBpbiB0aGUgYHNreS1tb2RhbC1mb290ZXJgLlxuICAgKiBAcGFyYW0gcmVhc29uIFNwZWNpZmllcyB0aGUgcmVhc29uIGZvciB0aGUgbW9kYWwgY2xvc2luZywgd2l0aCB0aGUgZGVmYXVsdCByZWFzb24gb2YgYFwiY2xvc2VcImAuXG4gICAqIEBwYXJhbSBpZ25vcmVCZWZvcmVDbG9zZSBJbmRpY2F0ZXMgd2hldGhlciB0byBpZ25vcmUgdGhlIG1vZGFsIGluc3RhbmNlJ3MgYGJlZm9yZUNsb3NlYCBldmVudC5cbiAgICovXG4gIHB1YmxpYyBjbG9zZShcbiAgICByZXN1bHQ/OiBhbnksXG4gICAgcmVhc29uPzogc3RyaW5nLFxuICAgIGlnbm9yZUJlZm9yZUNsb3NlPzogYm9vbGVhblxuICApOiB2b2lkIHtcbiAgICBpZiAocmVhc29uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlYXNvbiA9ICdjbG9zZSc7XG4gICAgfVxuXG4gICAgdGhpcy4jY2xvc2VNb2RhbChyZWFzb24sIHJlc3VsdCwgaWdub3JlQmVmb3JlQ2xvc2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlcyB0aGUgbW9kYWwgaW5zdGFuY2Ugd2l0aCBgcmVhc29uPVwiY2FuY2VsXCJgLlxuICAgKiBAcGFyYW0gcmVzdWx0IFNwZWNpZmllcyBhbiBvYmplY3QgdG8gZW1pdCB0byBzdWJzY3JpYmVycyBvZiB0aGUgYGNsb3NlZGAgZXZlbnQgb2YgdGhlIG1vZGFsXG4gICAqIGluc3RhbmNlLiBUaGUgYFNreU1vZGFsSW5zdGFuY2VgIHByb3ZpZGVyIGNhbiBiZSBpbmplY3RlZCBpbnRvIGEgY29tcG9uZW50J3MgY29uc3RydWN0b3Igc29cbiAgICogdGhhdCB0aGlzIGNhbmNlbCBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIGZyb20gYSBidXR0b24gaW4gdGhlIGBza3ktbW9kYWwtZm9vdGVyYC5cbiAgICovXG4gIHB1YmxpYyBjYW5jZWwocmVzdWx0PzogYW55KTogdm9pZCB7XG4gICAgdGhpcy4jY2xvc2VNb2RhbCgnY2FuY2VsJywgcmVzdWx0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgdGhlIG1vZGFsIGluc3RhbmNlIHdpdGggYHJlYXNvbj1cInNhdmVcImAuXG4gICAqIEBwYXJhbSByZXN1bHQgU3BlY2lmaWVzIGFuIG9iamVjdCB0byBlbWl0IHRvIHN1YnNjcmliZXJzIG9mIHRoZSBgY2xvc2VkYCBldmVudCBvZiB0aGUgbW9kYWxcbiAgICogaW5zdGFuY2UuIFRoZSBgU2t5TW9kYWxJbnN0YW5jZWAgcHJvdmlkZXIgY2FuIGJlIGluamVjdGVkIGludG8gYSBjb21wb25lbnQncyBjb25zdHJ1Y3RvciBzb1xuICAgKiB0aGF0IHRoaXMgYHNhdmVgIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgZnJvbSBhIGJ1dHRvbiBpbiBgdGhlIHNreS1tb2RhbC1mb290ZXJgLlxuICAgKi9cbiAgcHVibGljIHNhdmUocmVzdWx0PzogYW55KTogdm9pZCB7XG4gICAgdGhpcy4jY2xvc2VNb2RhbCgnc2F2ZScsIHJlc3VsdCk7XG4gIH1cblxuICAvKipcbiAgICogU2Nyb2xscyB0aGUgbW9kYWwgY29udGVudCBhcmVhIHRvIHRoZSB0b3Agb2YgaXRzIHNjcm9sbGFibGUgYXJlYS5cbiAgICovXG4gIHB1YmxpYyBzY3JvbGxDb250ZW50VG9Ub3AoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuI2FkYXB0ZXIgJiYgdGhpcy4jZWxlbWVudFJlZikge1xuICAgICAgdGhpcy4jYWRhcHRlci5zY3JvbGxDb250ZW50VG9Ub3AodGhpcy4jZWxlbWVudFJlZik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRyaWdnZXJzIHRoZSBgaGVscE9wZW5lZGAgZXZlbnQgdGhhdCBicm9hZGNhc3RzIGEgYGhlbHBLZXlgIHBhcmFtZXRlciB0byBvcGVuXG4gICAqIHdoZW4gdXNlcnMgY2xpY2sgdGhlIDxpIGNsYXNzPVwiZmEgZmEtcXVlc3Rpb24tY2lyY2xlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPiBidXR0b24uXG4gICAqIEBwYXJhbSBoZWxwS2V5IFNwZWNpZmllcyBhIHN0cmluZyB0byBlbWl0IHRvIHN1YnNjcmliZXJzIG9mXG4gICAqIHRoZSBtb2RhbCBpbnN0YW5jZSdzIGBoZWxwT3BlbmVkYCBldmVudC4gQ29uc3VtZXJzIGNhbiBpbmplY3QgdGhlIGBTa3lNb2RhbEluc3RhbmNlYCBwcm92aWRlclxuICAgKiBpbnRvIGEgY29tcG9uZW50J3MgY29uc3RydWN0b3IgdG8gY2FsbCB0aGUgYG9wZW5IZWxwYCBmdW5jdGlvbiBpbiB0aGUgbW9kYWwgdGVtcGxhdGUuXG4gICAqL1xuICBwdWJsaWMgb3BlbkhlbHAoaGVscEtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy4jX2hlbHBPcGVuZWQubmV4dChoZWxwS2V5KTtcbiAgfVxuXG4gICNjbG9zZU1vZGFsKHR5cGU6IHN0cmluZywgcmVzdWx0PzogYW55LCBpZ25vcmVCZWZvcmVDbG9zZSA9IGZhbHNlKTogdm9pZCB7XG4gICAgY29uc3QgYXJncyA9IG5ldyBTa3lNb2RhbENsb3NlQXJncygpO1xuXG4gICAgYXJncy5yZWFzb24gPSB0eXBlO1xuICAgIGFyZ3MuZGF0YSA9IHJlc3VsdDtcblxuICAgIGlmICh0aGlzLiNfYmVmb3JlQ2xvc2Uub2JzZXJ2ZXJzLmxlbmd0aCA9PT0gMCB8fCBpZ25vcmVCZWZvcmVDbG9zZSkge1xuICAgICAgdGhpcy4jbm90aWZ5Q2xvc2VkKGFyZ3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNfYmVmb3JlQ2xvc2UubmV4dChcbiAgICAgICAgbmV3IFNreU1vZGFsQmVmb3JlQ2xvc2VIYW5kbGVyKCgpID0+IHtcbiAgICAgICAgICB0aGlzLiNub3RpZnlDbG9zZWQoYXJncyk7XG4gICAgICAgIH0sIGFyZ3MpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gICNub3RpZnlDbG9zZWQoYXJnczogU2t5TW9kYWxDbG9zZUFyZ3MpOiB2b2lkIHtcbiAgICB0aGlzLiNfY2xvc2VkLm5leHQoYXJncyk7XG4gICAgdGhpcy4jX2Nsb3NlZC5jb21wbGV0ZSgpO1xuICAgIHRoaXMuI19iZWZvcmVDbG9zZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuI19oZWxwT3BlbmVkLmNvbXBsZXRlKCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { Directive, HostBinding, Input, inject, } from '@angular/core';
|
|
2
|
+
import { SkyLibResourcesService } from '@skyux/i18n';
|
|
3
|
+
import { Subject } from 'rxjs';
|
|
4
|
+
import { takeUntil } from 'rxjs/operators';
|
|
5
|
+
import { SkyConfirmType } from '../confirm/confirm-type';
|
|
6
|
+
import { SkyConfirmService } from '../confirm/confirm.service';
|
|
7
|
+
import { SkyModalInstance } from './modal-instance';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
/**
|
|
10
|
+
* Provides a way to mark a modal as "dirty" and displays a confirmation
|
|
11
|
+
* message when a user closes the modal without saving.
|
|
12
|
+
*/
|
|
13
|
+
export class SkyModalIsDirtyDirective {
|
|
14
|
+
constructor() {
|
|
15
|
+
/**
|
|
16
|
+
* Whether the user edited an input on the modal.
|
|
17
|
+
* @required
|
|
18
|
+
*/
|
|
19
|
+
this.isDirty = false;
|
|
20
|
+
this.#ngUnsubscribe = new Subject();
|
|
21
|
+
this.#modalInstance = inject(SkyModalInstance);
|
|
22
|
+
this.#confirmSvc = inject(SkyConfirmService);
|
|
23
|
+
this.#resourcesSvc = inject(SkyLibResourcesService);
|
|
24
|
+
}
|
|
25
|
+
#ngUnsubscribe;
|
|
26
|
+
#modalInstance;
|
|
27
|
+
#confirmSvc;
|
|
28
|
+
#resourcesSvc;
|
|
29
|
+
ngOnInit() {
|
|
30
|
+
this.#modalInstance.beforeClose
|
|
31
|
+
.pipe(takeUntil(this.#ngUnsubscribe))
|
|
32
|
+
.subscribe((handler) => this.#promptIfDirty(handler));
|
|
33
|
+
}
|
|
34
|
+
ngOnDestroy() {
|
|
35
|
+
this.#ngUnsubscribe.next();
|
|
36
|
+
this.#ngUnsubscribe.complete();
|
|
37
|
+
}
|
|
38
|
+
#promptIfDirty(handler) {
|
|
39
|
+
if (this.isDirty && handler.closeArgs.reason === 'close') {
|
|
40
|
+
this.#resourcesSvc
|
|
41
|
+
.getStrings({
|
|
42
|
+
message: 'skyux_modal_dirty_default_message',
|
|
43
|
+
discardActionText: 'skyux_modal_dirty_default_discard_changes_text',
|
|
44
|
+
keepActionText: 'skyux_modal_dirty_default_keep_working_text',
|
|
45
|
+
})
|
|
46
|
+
.subscribe((textValues) => {
|
|
47
|
+
const discardAction = 'discard';
|
|
48
|
+
const keepAction = 'keep';
|
|
49
|
+
this.#confirmSvc
|
|
50
|
+
.open({
|
|
51
|
+
message: textValues.message,
|
|
52
|
+
buttons: [
|
|
53
|
+
{
|
|
54
|
+
action: discardAction,
|
|
55
|
+
text: textValues.discardActionText,
|
|
56
|
+
styleType: 'primary',
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
action: keepAction,
|
|
60
|
+
text: textValues.keepActionText,
|
|
61
|
+
styleType: 'link',
|
|
62
|
+
},
|
|
63
|
+
],
|
|
64
|
+
type: SkyConfirmType.Custom,
|
|
65
|
+
})
|
|
66
|
+
.closed.subscribe((args) => {
|
|
67
|
+
if (args.action === discardAction) {
|
|
68
|
+
handler.closeModal();
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
handler.closeModal();
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SkyModalIsDirtyDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
78
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.1.7", type: SkyModalIsDirtyDirective, selector: "sky-modal[isDirty]", inputs: { isDirty: "isDirty" }, host: { properties: { "attr.data-sky-modal-is-dirty": "this.isDirty" } }, ngImport: i0 }); }
|
|
79
|
+
}
|
|
80
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SkyModalIsDirtyDirective, decorators: [{
|
|
81
|
+
type: Directive,
|
|
82
|
+
args: [{
|
|
83
|
+
// Since this is limited to sky-modal, it should be safe to
|
|
84
|
+
// leave off the sky prefix.
|
|
85
|
+
// eslint-disable-next-line @angular-eslint/directive-selector
|
|
86
|
+
selector: 'sky-modal[isDirty]',
|
|
87
|
+
}]
|
|
88
|
+
}], propDecorators: { isDirty: [{
|
|
89
|
+
type: Input
|
|
90
|
+
}, {
|
|
91
|
+
type: HostBinding,
|
|
92
|
+
args: ['attr.data-sky-modal-is-dirty']
|
|
93
|
+
}] } });
|
|
94
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtaXMtZGlydHkuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL21vZGFscy9zcmMvbGliL21vZHVsZXMvbW9kYWwvbW9kYWwtaXMtZGlydHkuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsV0FBVyxFQUNYLEtBQUssRUFHTCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXJELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUcvRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7QUFFcEQ7OztHQUdHO0FBT0gsTUFBTSxPQUFPLHdCQUF3QjtJQU5yQztRQU9FOzs7V0FHRztRQUtJLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFFZCxtQkFBYyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFFckMsbUJBQWMsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUMxQyxnQkFBVyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3hDLGtCQUFhLEdBQUcsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUM7S0FvRHpEO0lBeERVLGNBQWMsQ0FBdUI7SUFFckMsY0FBYyxDQUE0QjtJQUMxQyxXQUFXLENBQTZCO0lBQ3hDLGFBQWEsQ0FBa0M7SUFFakQsUUFBUTtRQUNiLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVzthQUM1QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQzthQUNwQyxTQUFTLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRU0sV0FBVztRQUNoQixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVELGNBQWMsQ0FBQyxPQUFtQztRQUNoRCxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEtBQUssT0FBTyxFQUFFO1lBQ3hELElBQUksQ0FBQyxhQUFhO2lCQUNmLFVBQVUsQ0FBQztnQkFDVixPQUFPLEVBQUUsbUNBQW1DO2dCQUM1QyxpQkFBaUIsRUFBRSxnREFBZ0Q7Z0JBQ25FLGNBQWMsRUFBRSw2Q0FBNkM7YUFDOUQsQ0FBQztpQkFDRCxTQUFTLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRTtnQkFDeEIsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDO2dCQUNoQyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUM7Z0JBRTFCLElBQUksQ0FBQyxXQUFXO3FCQUNiLElBQUksQ0FBQztvQkFDSixPQUFPLEVBQUUsVUFBVSxDQUFDLE9BQU87b0JBQzNCLE9BQU8sRUFBRTt3QkFDUDs0QkFDRSxNQUFNLEVBQUUsYUFBYTs0QkFDckIsSUFBSSxFQUFFLFVBQVUsQ0FBQyxpQkFBaUI7NEJBQ2xDLFNBQVMsRUFBRSxTQUFTO3lCQUNyQjt3QkFDRDs0QkFDRSxNQUFNLEVBQUUsVUFBVTs0QkFDbEIsSUFBSSxFQUFFLFVBQVUsQ0FBQyxjQUFjOzRCQUMvQixTQUFTLEVBQUUsTUFBTTt5QkFDbEI7cUJBQ0Y7b0JBQ0QsSUFBSSxFQUFFLGNBQWMsQ0FBQyxNQUFNO2lCQUM1QixDQUFDO3FCQUNELE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtvQkFDekIsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLGFBQWEsRUFBRTt3QkFDakMsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDO3FCQUN0QjtnQkFDSCxDQUFDLENBQUMsQ0FBQztZQUNQLENBQUMsQ0FBQyxDQUFDO1NBQ047YUFBTTtZQUNMLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQztTQUN0QjtJQUNILENBQUM7OEdBbEVVLHdCQUF3QjtrR0FBeEIsd0JBQXdCOzsyRkFBeEIsd0JBQXdCO2tCQU5wQyxTQUFTO21CQUFDO29CQUNULDJEQUEyRDtvQkFDM0QsNEJBQTRCO29CQUM1Qiw4REFBOEQ7b0JBQzlELFFBQVEsRUFBRSxvQkFBb0I7aUJBQy9COzhCQVVRLE9BQU87c0JBSmIsS0FBSzs7c0JBR0wsV0FBVzt1QkFBQyw4QkFBOEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEaXJlY3RpdmUsXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIGluamVjdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTa3lMaWJSZXNvdXJjZXNTZXJ2aWNlIH0gZnJvbSAnQHNreXV4L2kxOG4nO1xuXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFNreUNvbmZpcm1UeXBlIH0gZnJvbSAnLi4vY29uZmlybS9jb25maXJtLXR5cGUnO1xuaW1wb3J0IHsgU2t5Q29uZmlybVNlcnZpY2UgfSBmcm9tICcuLi9jb25maXJtL2NvbmZpcm0uc2VydmljZSc7XG5cbmltcG9ydCB7IFNreU1vZGFsQmVmb3JlQ2xvc2VIYW5kbGVyIH0gZnJvbSAnLi9tb2RhbC1iZWZvcmUtY2xvc2UtaGFuZGxlcic7XG5pbXBvcnQgeyBTa3lNb2RhbEluc3RhbmNlIH0gZnJvbSAnLi9tb2RhbC1pbnN0YW5jZSc7XG5cbi8qKlxuICogUHJvdmlkZXMgYSB3YXkgdG8gbWFyayBhIG1vZGFsIGFzIFwiZGlydHlcIiBhbmQgZGlzcGxheXMgYSBjb25maXJtYXRpb25cbiAqIG1lc3NhZ2Ugd2hlbiBhIHVzZXIgY2xvc2VzIHRoZSBtb2RhbCB3aXRob3V0IHNhdmluZy5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gIC8vIFNpbmNlIHRoaXMgaXMgbGltaXRlZCB0byBza3ktbW9kYWwsIGl0IHNob3VsZCBiZSBzYWZlIHRvXG4gIC8vIGxlYXZlIG9mZiB0aGUgc2t5IHByZWZpeC5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9kaXJlY3RpdmUtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdza3ktbW9kYWxbaXNEaXJ0eV0nLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lNb2RhbElzRGlydHlEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSB1c2VyIGVkaXRlZCBhbiBpbnB1dCBvbiB0aGUgbW9kYWwuXG4gICAqIEByZXF1aXJlZFxuICAgKi9cbiAgQElucHV0KClcbiAgLy8gVGhpcyBhdHRyaWJ1dGUgaXMgYmVpbmcgYXBwbGllZCB0byB0aGUgaG9zdCB0byBzdXBwb3J0XG4gIC8vIHVuaXQgdGVzdGluZyB0aGlzIGZlYXR1cmUuXG4gIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLXNreS1tb2RhbC1pcy1kaXJ0eScpXG4gIHB1YmxpYyBpc0RpcnR5ID0gZmFsc2U7XG5cbiAgcmVhZG9ubHkgI25nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIHJlYWRvbmx5ICNtb2RhbEluc3RhbmNlID0gaW5qZWN0KFNreU1vZGFsSW5zdGFuY2UpO1xuICByZWFkb25seSAjY29uZmlybVN2YyA9IGluamVjdChTa3lDb25maXJtU2VydmljZSk7XG4gIHJlYWRvbmx5ICNyZXNvdXJjZXNTdmMgPSBpbmplY3QoU2t5TGliUmVzb3VyY2VzU2VydmljZSk7XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuI21vZGFsSW5zdGFuY2UuYmVmb3JlQ2xvc2VcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGhhbmRsZXIpID0+IHRoaXMuI3Byb21wdElmRGlydHkoaGFuZGxlcikpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUubmV4dCgpO1xuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgfVxuXG4gICNwcm9tcHRJZkRpcnR5KGhhbmRsZXI6IFNreU1vZGFsQmVmb3JlQ2xvc2VIYW5kbGVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEaXJ0eSAmJiBoYW5kbGVyLmNsb3NlQXJncy5yZWFzb24gPT09ICdjbG9zZScpIHtcbiAgICAgIHRoaXMuI3Jlc291cmNlc1N2Y1xuICAgICAgICAuZ2V0U3RyaW5ncyh7XG4gICAgICAgICAgbWVzc2FnZTogJ3NreXV4X21vZGFsX2RpcnR5X2RlZmF1bHRfbWVzc2FnZScsXG4gICAgICAgICAgZGlzY2FyZEFjdGlvblRleHQ6ICdza3l1eF9tb2RhbF9kaXJ0eV9kZWZhdWx0X2Rpc2NhcmRfY2hhbmdlc190ZXh0JyxcbiAgICAgICAgICBrZWVwQWN0aW9uVGV4dDogJ3NreXV4X21vZGFsX2RpcnR5X2RlZmF1bHRfa2VlcF93b3JraW5nX3RleHQnLFxuICAgICAgICB9KVxuICAgICAgICAuc3Vic2NyaWJlKCh0ZXh0VmFsdWVzKSA9PiB7XG4gICAgICAgICAgY29uc3QgZGlzY2FyZEFjdGlvbiA9ICdkaXNjYXJkJztcbiAgICAgICAgICBjb25zdCBrZWVwQWN0aW9uID0gJ2tlZXAnO1xuXG4gICAgICAgICAgdGhpcy4jY29uZmlybVN2Y1xuICAgICAgICAgICAgLm9wZW4oe1xuICAgICAgICAgICAgICBtZXNzYWdlOiB0ZXh0VmFsdWVzLm1lc3NhZ2UsXG4gICAgICAgICAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBhY3Rpb246IGRpc2NhcmRBY3Rpb24sXG4gICAgICAgICAgICAgICAgICB0ZXh0OiB0ZXh0VmFsdWVzLmRpc2NhcmRBY3Rpb25UZXh0LFxuICAgICAgICAgICAgICAgICAgc3R5bGVUeXBlOiAncHJpbWFyeScsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBhY3Rpb246IGtlZXBBY3Rpb24sXG4gICAgICAgICAgICAgICAgICB0ZXh0OiB0ZXh0VmFsdWVzLmtlZXBBY3Rpb25UZXh0LFxuICAgICAgICAgICAgICAgICAgc3R5bGVUeXBlOiAnbGluaycsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgdHlwZTogU2t5Q29uZmlybVR5cGUuQ3VzdG9tLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jbG9zZWQuc3Vic2NyaWJlKChhcmdzKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChhcmdzLmFjdGlvbiA9PT0gZGlzY2FyZEFjdGlvbikge1xuICAgICAgICAgICAgICAgIGhhbmRsZXIuY2xvc2VNb2RhbCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhhbmRsZXIuY2xvc2VNb2RhbCgpO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { Directive, EventEmitter, HostListener, Optional, Output, } from '@angular/core';
|
|
2
|
+
import { SkyTheme } from '@skyux/theme';
|
|
3
|
+
import { Subject } from 'rxjs';
|
|
4
|
+
import { takeUntil } from 'rxjs/operators';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@skyux/core";
|
|
7
|
+
import * as i2 from "@skyux/theme";
|
|
8
|
+
/**
|
|
9
|
+
* Raises an event when the box shadow for the modal header or footer should be adjusted
|
|
10
|
+
* based on the scroll position of the host element.
|
|
11
|
+
* @internal
|
|
12
|
+
*/
|
|
13
|
+
export class SkyModalScrollShadowDirective {
|
|
14
|
+
#currentShadow;
|
|
15
|
+
#currentTheme;
|
|
16
|
+
#mutationObserver;
|
|
17
|
+
#ngUnsubscribe;
|
|
18
|
+
#elRef;
|
|
19
|
+
#mutationObserverSvc;
|
|
20
|
+
#ngZone;
|
|
21
|
+
#themeSvc;
|
|
22
|
+
constructor(elRef, mutationObserverSvc, ngZone, themeSvc) {
|
|
23
|
+
this.skyModalScrollShadow = new EventEmitter();
|
|
24
|
+
this.#ngUnsubscribe = new Subject();
|
|
25
|
+
this.#elRef = elRef;
|
|
26
|
+
this.#mutationObserverSvc = mutationObserverSvc;
|
|
27
|
+
this.#ngZone = ngZone;
|
|
28
|
+
this.#themeSvc = themeSvc;
|
|
29
|
+
}
|
|
30
|
+
windowResize() {
|
|
31
|
+
this.#checkForShadow();
|
|
32
|
+
}
|
|
33
|
+
scroll() {
|
|
34
|
+
this.#checkForShadow();
|
|
35
|
+
}
|
|
36
|
+
ngOnInit() {
|
|
37
|
+
if (this.#themeSvc) {
|
|
38
|
+
this.#themeSvc.settingsChange
|
|
39
|
+
.pipe(takeUntil(this.#ngUnsubscribe))
|
|
40
|
+
.subscribe((themeSettings) => {
|
|
41
|
+
this.#currentTheme = themeSettings.currentSettings.theme;
|
|
42
|
+
if (this.#currentTheme === SkyTheme.presets.modern) {
|
|
43
|
+
this.#initMutationObserver();
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
this.#emitShadow({
|
|
47
|
+
bottomShadow: 'none',
|
|
48
|
+
topShadow: 'none',
|
|
49
|
+
});
|
|
50
|
+
this.#destroyMutationObserver();
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
ngOnDestroy() {
|
|
56
|
+
this.#ngUnsubscribe.next();
|
|
57
|
+
this.#ngUnsubscribe.complete();
|
|
58
|
+
this.#destroyMutationObserver();
|
|
59
|
+
}
|
|
60
|
+
#initMutationObserver() {
|
|
61
|
+
if (!this.#mutationObserver) {
|
|
62
|
+
const el = this.#elRef.nativeElement;
|
|
63
|
+
// MutationObserver is patched by Zone.js and therefore becomes part of the
|
|
64
|
+
// Angular change detection cycle, but this can lead to infinite loops in some
|
|
65
|
+
// scenarios. This will keep MutationObserver from triggering change detection.
|
|
66
|
+
this.#ngZone.runOutsideAngular(() => {
|
|
67
|
+
this.#mutationObserver = this.#mutationObserverSvc.create(() => {
|
|
68
|
+
this.#checkForShadow();
|
|
69
|
+
});
|
|
70
|
+
this.#mutationObserver.observe(el, {
|
|
71
|
+
attributes: true,
|
|
72
|
+
characterData: true,
|
|
73
|
+
childList: true,
|
|
74
|
+
subtree: true,
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
#destroyMutationObserver() {
|
|
80
|
+
if (this.#mutationObserver) {
|
|
81
|
+
this.#mutationObserver.disconnect();
|
|
82
|
+
this.#mutationObserver = undefined;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
#checkForShadow() {
|
|
86
|
+
if (this.#currentTheme === SkyTheme.presets.modern) {
|
|
87
|
+
const el = this.#elRef.nativeElement;
|
|
88
|
+
const topShadow = this.#buildShadowStyle(el.scrollTop);
|
|
89
|
+
const bottomShadow = this.#buildShadowStyle(el.scrollHeight - el.scrollTop - el.clientHeight);
|
|
90
|
+
this.#emitShadow({
|
|
91
|
+
bottomShadow,
|
|
92
|
+
topShadow,
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
#buildShadowStyle(pixelsFromEnd) {
|
|
97
|
+
// Progressively darken the shadow until the user scrolls 30 pixels from the top or bottom
|
|
98
|
+
// of the scrollable element, with a max opacity of 0.3.
|
|
99
|
+
const opacity = Math.min(pixelsFromEnd / 30, 1) * 0.3;
|
|
100
|
+
return opacity > 0 ? `0px 1px 8px 0px rgba(0, 0, 0, ${opacity})` : 'none';
|
|
101
|
+
}
|
|
102
|
+
#emitShadow(shadow) {
|
|
103
|
+
if (!this.#currentShadow ||
|
|
104
|
+
this.#currentShadow.bottomShadow !== shadow.bottomShadow ||
|
|
105
|
+
this.#currentShadow.topShadow !== shadow.topShadow) {
|
|
106
|
+
this.skyModalScrollShadow.emit(shadow);
|
|
107
|
+
this.#currentShadow = shadow;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SkyModalScrollShadowDirective, deps: [{ token: i0.ElementRef }, { token: i1.SkyMutationObserverService }, { token: i0.NgZone }, { token: i2.SkyThemeService, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
111
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.1.7", type: SkyModalScrollShadowDirective, selector: "[skyModalScrollShadow]", outputs: { skyModalScrollShadow: "skyModalScrollShadow" }, host: { listeners: { "window:resize": "windowResize()", "scroll": "scroll()" } }, ngImport: i0 }); }
|
|
112
|
+
}
|
|
113
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SkyModalScrollShadowDirective, decorators: [{
|
|
114
|
+
type: Directive,
|
|
115
|
+
args: [{
|
|
116
|
+
selector: '[skyModalScrollShadow]',
|
|
117
|
+
}]
|
|
118
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.SkyMutationObserverService }, { type: i0.NgZone }, { type: i2.SkyThemeService, decorators: [{
|
|
119
|
+
type: Optional
|
|
120
|
+
}] }]; }, propDecorators: { skyModalScrollShadow: [{
|
|
121
|
+
type: Output
|
|
122
|
+
}], windowResize: [{
|
|
123
|
+
type: HostListener,
|
|
124
|
+
args: ['window:resize']
|
|
125
|
+
}], scroll: [{
|
|
126
|
+
type: HostListener,
|
|
127
|
+
args: ['scroll']
|
|
128
|
+
}] } });
|
|
129
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtc2Nyb2xsLXNoYWRvdy5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvbW9kYWxzL3NyYy9saWIvbW9kdWxlcy9tb2RhbC9tb2RhbC1zY3JvbGwtc2hhZG93LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULFlBQVksRUFDWixZQUFZLEVBSVosUUFBUSxFQUNSLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsUUFBUSxFQUFtQixNQUFNLGNBQWMsQ0FBQztBQUV6RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQUkzQzs7OztHQUlHO0FBSUgsTUFBTSxPQUFPLDZCQUE2QjtJQUt4QyxjQUFjLENBQTRDO0lBRTFELGFBQWEsQ0FBdUI7SUFFcEMsaUJBQWlCLENBQStCO0lBRWhELGNBQWMsQ0FBdUI7SUFFckMsTUFBTSxDQUFhO0lBQ25CLG9CQUFvQixDQUE2QjtJQUNqRCxPQUFPLENBQVM7SUFDaEIsU0FBUyxDQUE4QjtJQUV2QyxZQUNFLEtBQWlCLEVBQ2pCLG1CQUErQyxFQUMvQyxNQUFjLEVBQ0YsUUFBMEI7UUFwQmpDLHlCQUFvQixHQUN6QixJQUFJLFlBQVksRUFBaUMsQ0FBQztRQVFwRCxtQkFBYyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFhbkMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLG1CQUFtQixDQUFDO1FBQ2hELElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO0lBQzVCLENBQUM7SUFHTSxZQUFZO1FBQ2pCLElB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Q0FBQyxHQUFHLENBQUMsYUFBYSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7UUFFdEQsT0FBTyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQ0FBaUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUM1RSxDQUFDO0lBRUQsV0FBVyxDQUFDLE1BQXFDO1FBQy9DLElBQ0UsQ0FBQyxJQUFJLENBQUMsY0FBYztZQUNwQixJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksS0FBSyxNQUFNLENBQUMsWUFBWTtZQUN4RCxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsS0FBSyxNQUFNLENBQUMsU0FBUyxFQUNsRDtZQUNBLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDdkMsSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUM7U0FDOUI7SUFDSCxDQUFDOzhHQW5JVSw2QkFBNkI7a0dBQTdCLDZCQUE2Qjs7MkZBQTdCLDZCQUE2QjtrQkFIekMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsd0JBQXdCO2lCQUNuQzs7MEJBdUJJLFFBQVE7NENBcEJKLG9CQUFvQjtzQkFEMUIsTUFBTTtnQkE4QkEsWUFBWTtzQkFEbEIsWUFBWTt1QkFBQyxlQUFlO2dCQU10QixNQUFNO3NCQURaLFlBQVk7dUJBQUMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIE5nWm9uZSxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU2t5TXV0YXRpb25PYnNlcnZlclNlcnZpY2UgfSBmcm9tICdAc2t5dXgvY29yZSc7XG5pbXBvcnQgeyBTa3lUaGVtZSwgU2t5VGhlbWVTZXJ2aWNlIH0gZnJvbSAnQHNreXV4L3RoZW1lJztcblxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBTa3lNb2RhbFNjcm9sbFNoYWRvd0V2ZW50QXJncyB9IGZyb20gJy4vbW9kYWwtc2Nyb2xsLXNoYWRvdy1ldmVudC1hcmdzJztcblxuLyoqXG4gKiBSYWlzZXMgYW4gZXZlbnQgd2hlbiB0aGUgYm94IHNoYWRvdyBmb3IgdGhlIG1vZGFsIGhlYWRlciBvciBmb290ZXIgc2hvdWxkIGJlIGFkanVzdGVkXG4gKiBiYXNlZCBvbiB0aGUgc2Nyb2xsIHBvc2l0aW9uIG9mIHRoZSBob3N0IGVsZW1lbnQuXG4gKiBAaW50ZXJuYWxcbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW3NreU1vZGFsU2Nyb2xsU2hhZG93XScsXG59KVxuZXhwb3J0IGNsYXNzIFNreU1vZGFsU2Nyb2xsU2hhZG93RGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBAT3V0cHV0KClcbiAgcHVibGljIHNreU1vZGFsU2Nyb2xsU2hhZG93ID1cbiAgICBuZXcgRXZlbnRFbWl0dGVyPFNreU1vZGFsU2Nyb2xsU2hhZG93RXZlbnRBcmdzPigpO1xuXG4gICNjdXJyZW50U2hhZG93OiBTa3lNb2RhbFNjcm9sbFNoYWRvd0V2ZW50QXJncyB8IHVuZGVmaW5lZDtcblxuICAjY3VycmVudFRoZW1lOiBTa3lUaGVtZSB8IHVuZGVmaW5lZDtcblxuICAjbXV0YXRpb25PYnNlcnZlcjogTXV0YXRpb25PYnNlcnZlciB8IHVuZGVmaW5lZDtcblxuICAjbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgI2VsUmVmOiBFbGVtZW50UmVmO1xuICAjbXV0YXRpb25PYnNlcnZlclN2YzogU2t5TXV0YXRpb25PYnNlcnZlclNlcnZpY2U7XG4gICNuZ1pvbmU6IE5nWm9uZTtcbiAgI3RoZW1lU3ZjOiBTa3lUaGVtZVNlcnZpY2UgfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgZWxSZWY6IEVsZW1lbnRSZWYsXG4gICAgbXV0YXRpb25PYnNlcnZlclN2YzogU2t5TXV0YXRpb25PYnNlcnZlclNlcnZpY2UsXG4gICAgbmdab25lOiBOZ1pvbmUsXG4gICAgQE9wdGlvbmFsKCkgdGhlbWVTdmM/OiBTa3lUaGVtZVNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy4jZWxSZWYgPSBlbFJlZjtcbiAgICB0aGlzLiNtdXRhdGlvbk9ic2VydmVyU3ZjID0gbXV0YXRpb25PYnNlcnZlclN2YztcbiAgICB0aGlzLiNuZ1pvbmUgPSBuZ1pvbmU7XG4gICAgdGhpcy4jdGhlbWVTdmMgPSB0aGVtZVN2YztcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnKVxuICBwdWJsaWMgd2luZG93UmVzaXplKCk6IHZvaWQge1xuICAgIHRoaXMuI2NoZWNrRm9yU2hhZG93KCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdzY3JvbGwnKVxuICBwdWJsaWMgc2Nyb2xsKCk6IHZvaWQge1xuICAgIHRoaXMuI2NoZWNrRm9yU2hhZG93KCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuI3RoZW1lU3ZjKSB7XG4gICAgICB0aGlzLiN0aGVtZVN2Yy5zZXR0aW5nc0NoYW5nZVxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAgIC5zdWJzY3JpYmUoKHRoZW1lU2V0dGluZ3MpID0+IHtcbiAgICAgICAgICB0aGlzLiNjdXJyZW50VGhlbWUgPSB0aGVtZVNldHRpbmdzLmN1cnJlbnRTZXR0aW5ncy50aGVtZTtcblxuICAgICAgICAgIGlmICh0aGlzLiNjdXJyZW50VGhlbWUgPT09IFNreVRoZW1lLnByZXNldHMubW9kZXJuKSB7XG4gICAgICAgICAgICB0aGlzLiNpbml0TXV0YXRpb25PYnNlcnZlcigpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLiNlbWl0U2hhZG93KHtcbiAgICAgICAgICAgICAgYm90dG9tU2hhZG93OiAnbm9uZScsXG4gICAgICAgICAgICAgIHRvcFNoYWRvdzogJ25vbmUnLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuI2Rlc3Ryb3lNdXRhdGlvbk9ic2VydmVyKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy4jbmdVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgdGhpcy4jbmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xuXG4gICAgdGhpcy4jZGVzdHJveU11dGF0aW9uT2JzZXJ2ZXIoKTtcbiAgfVxuXG4gICNpbml0TXV0YXRpb25PYnNlcnZlcigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuI211dGF0aW9uT2JzZXJ2ZXIpIHtcbiAgICAgIGNvbnN0IGVsID0gdGhpcy4jZWxSZWYubmF0aXZlRWxlbWVudDtcblxuICAgICAgLy8gTXV0YXRpb25PYnNlcnZlciBpcyBwYXRjaGVkIGJ5IFpvbmUuanMgYW5kIHRoZXJlZm9yZSBiZWNvbWVzIHBhcnQgb2YgdGhlXG4gICAgICAvLyBBbmd1bGFyIGNoYW5nZSBkZXRlY3Rpb24gY3ljbGUsIGJ1dCB0aGlzIGNhbiBsZWFkIHRvIGluZmluaXRlIGxvb3BzIGluIHNvbWVcbiAgICAgIC8vIHNjZW5hcmlvcy4gVGhpcyB3aWxsIGtlZXAgTXV0YXRpb25PYnNlcnZlciBmcm9tIHRyaWdnZXJpbmcgY2hhbmdlIGRldGVjdGlvbi5cbiAgICAgIHRoaXMuI25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgIHRoaXMuI211dGF0aW9uT2JzZXJ2ZXIgPSB0aGlzLiNtdXRhdGlvbk9ic2VydmVyU3ZjLmNyZWF0ZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy4jY2hlY2tGb3JTaGFkb3coKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy4jbXV0YXRpb25PYnNlcnZlci5vYnNlcnZlKGVsLCB7XG4gICAgICAgICAgYXR0cmlidXRlczogdHJ1ZSxcbiAgICAgICAgICBjaGFyYWN0ZXJEYXRhOiB0cnVlLFxuICAgICAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICAgICAgICBzdWJ0cmVlOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gICNkZXN0cm95TXV0YXRpb25PYnNlcnZlcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy4jbXV0YXRpb25PYnNlcnZlcikge1xuICAgICAgdGhpcy4jbXV0YXRpb25PYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICB0aGlzLiNtdXRhdGlvbk9ic2VydmVyID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gICNjaGVja0ZvclNoYWRvdygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy4jY3VycmVudFRoZW1lID09PSBTa3lUaGVtZS5wcmVzZXRzLm1vZGVybikge1xuICAgICAgY29uc3QgZWwgPSB0aGlzLiNlbFJlZi5uYXRpdmVFbGVtZW50O1xuXG4gICAgICBjb25zdCB0b3BTaGFkb3cgPSB0aGlzLiNidWlsZFNoYWRvd1N0eWxlKGVsLnNjcm9sbFRvcCk7XG5cbiAgICAgIGNvbnN0IGJvdHRvbVNoYWRvdyA9IHRoaXMuI2J1aWxkU2hhZG93U3R5bGUoXG4gICAgICAgIGVsLnNjcm9sbEhlaWdodCAtIGVsLnNjcm9sbFRvcCAtIGVsLmNsaWVudEhlaWdodFxuICAgICAgKTtcblxuICAgICAgdGhpcy4jZW1pdFNoYWRvdyh7XG4gICAgICAgIGJvdHRvbVNoYWRvdyxcbiAgICAgICAgdG9wU2hhZG93LFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgI2J1aWxkU2hhZG93U3R5bGUocGl4ZWxzRnJvbUVuZDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAvLyBQcm9ncmVzc2l2ZWx5IGRhcmtlbiB0aGUgc2hhZG93IHVudGlsIHRoZSB1c2VyIHNjcm9sbHMgMzAgcGl4ZWxzIGZyb20gdGhlIHRvcCBvciBib3R0b21cbiAgICAvLyBvZiB0aGUgc2Nyb2xsYWJsZSBlbGVtZW50LCB3aXRoIGEgbWF4IG9wYWNpdHkgb2YgMC4zLlxuICAgIGNvbnN0IG9wYWNpdHkgPSBNYXRoLm1pbihwaXhlbHNGcm9tRW5kIC8gMzAsIDEpICogMC4zO1xuXG4gICAgcmV0dXJuIG9wYWNpdHkgPiAwID8gYDBweCAxcHggOHB4IDBweCByZ2JhKDAsIDAsIDAsICR7b3BhY2l0eX0pYCA6ICdub25lJztcbiAgfVxuXG4gICNlbWl0U2hhZG93KHNoYWRvdzogU2t5TW9kYWxTY3JvbGxTaGFkb3dFdmVudEFyZ3MpOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICAhdGhpcy4jY3VycmVudFNoYWRvdyB8fFxuICAgICAgdGhpcy4jY3VycmVudFNoYWRvdy5ib3R0b21TaGFkb3cgIT09IHNoYWRvdy5ib3R0b21TaGFkb3cgfHxcbiAgICAgIHRoaXMuI2N1cnJlbnRTaGFkb3cudG9wU2hhZG93ICE9PSBzaGFkb3cudG9wU2hhZG93XG4gICAgKSB7XG4gICAgICB0aGlzLnNreU1vZGFsU2Nyb2xsU2hhZG93LmVtaXQoc2hhZG93KTtcbiAgICAgIHRoaXMuI2N1cnJlbnRTaGFkb3cgPSBzaGFkb3c7XG4gICAgfVxuICB9XG59XG4iXX0=
|