@theseam/ui-common 0.3.3 → 0.3.6
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/bundles/theseam-ui-common-dynamic.umd.js +1 -1
- package/bundles/theseam-ui-common-dynamic.umd.js.map +1 -1
- package/bundles/theseam-ui-common-modal.umd.js +59 -30
- package/bundles/theseam-ui-common-modal.umd.js.map +1 -1
- package/esm2015/dynamic/evaluators/jexl-evaluator/jexl-evaluator.js +2 -2
- package/esm2015/modal/modal-container/modal-container.component.js +4 -1
- package/esm2015/modal/modal-ref.js +56 -31
- package/fesm2015/theseam-ui-common-dynamic.js +1 -1
- package/fesm2015/theseam-ui-common-dynamic.js.map +1 -1
- package/fesm2015/theseam-ui-common-modal.js +58 -30
- package/fesm2015/theseam-ui-common-modal.js.map +1 -1
- package/modal/modal-container/modal-container.component.d.ts +1 -0
- package/modal/modal-ref.d.ts +2 -1
- package/modal/theseam-ui-common-modal.metadata.json +1 -1
- package/package.json +1 -1
|
@@ -14,7 +14,7 @@ export class JexlEvaluator {
|
|
|
14
14
|
this.type = 'jexl';
|
|
15
15
|
this._jexl = new jexl.Jexl();
|
|
16
16
|
this._jexl.addTransform('date', (val, row) => new DatePipe('en-US').transform(val, 'yyyy-MM-dd h:mm aaa'));
|
|
17
|
-
this._jexl.addTransform('length', (val) => val.length);
|
|
17
|
+
this._jexl.addTransform('length', (val) => val !== null && val !== undefined ? val.length : 0);
|
|
18
18
|
}
|
|
19
19
|
eval(value, context) {
|
|
20
20
|
return this._jexl.eval(value.expr, context);
|
|
@@ -27,4 +27,4 @@ JexlEvaluator.decorators = [
|
|
|
27
27
|
{ type: Injectable }
|
|
28
28
|
];
|
|
29
29
|
JexlEvaluator.ctorParameters = () => [];
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamV4bC1ldmFsdWF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1jb21tb24vZHluYW1pYy9ldmFsdWF0b3JzL2pleGwtZXZhbHVhdG9yL2pleGwtZXZhbHVhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDZFQUE2RTtBQUM3RSwrRUFBK0U7QUFDL0UsOEVBQThFO0FBQzlFLFNBQVM7QUFDVCx5Q0FBeUM7QUFDekMsdUNBQXVDO0FBQ3ZDLHVFQUF1RTtBQUV2RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDMUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUUxQyw0QkFBNEI7QUFDNUIsT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFBO0FBT3ZCLE1BQU0sT0FBTyxhQUFhO0lBTXhCO1FBSmdCLFNBQUksR0FBRyxNQUFNLENBQUE7UUFFWixVQUFLLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUE7UUFHdEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBUSxFQUFFLEdBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDLENBQUE7UUFDcEgsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEtBQUssSUFBSSxJQUFJLEdBQUcsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3JHLENBQUM7SUFFTSxJQUFJLENBQUksS0FBb0IsRUFBRSxPQUFhO1FBQ2hELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQTtJQUM3QyxDQUFDO0lBRU0sUUFBUSxDQUFJLEtBQW9CLEVBQUUsT0FBYTtRQUNwRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFDakQsQ0FBQzs7O1lBbEJGLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBOT1RFOiBuZy1wYWNrYWdyIGlnbm9yZXMgdGhlIFwidHlwZXNcIiBhbmQgXCJ0eXBlUm9vdHNcIiBzZXR0aW5ncyBpbiB0c2NvbmZpZy5cbi8vIFVubGVzcyB0aGVyZSBpcyBhIHdheSB0byBtYWtlIGl0IHN0b3AgaWdub3JpbmcgdGhvc2Ugc2V0dGluZ3MsIHRyaXBwbGUgc2xhc2hcbi8vIHJlZmVyZW5jZSB0byBhIGAuZC50c2AgZmlsZSB3YXMgdGhlIG9ubHkgd2F5IEkgY291bGQgc3RvcCB0aGUgbWlzc2luZyB0eXBlc1xuLy8gZXJyb3IuXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLXJlZmVyZW5jZVxuLy8gLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4vamV4bC5kLnRzXCIgLz5cbi8vIC8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi8uLi8uLi8uLi9jdXN0b21fdHlwZXMvamV4bC9pbmRleC5kLnRzXCIgLz5cblxuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcblxuLy8gQHRzLWlnbm9yZTogTWlzc2luZyB0eXBlc1xuaW1wb3J0IGpleGwgZnJvbSAnamV4bCdcblxuaW1wb3J0IHsgSUR5bmFtaWNWYWx1ZUV2YWx1YXRvciB9IGZyb20gJy4uLy4uL21vZGVscy9keW5hbWljLXZhbHVlLWV2YWx1YXRvcidcblxuaW1wb3J0IHsgSUpleGxWYWx1ZSB9IGZyb20gJy4vamV4bC12YWx1ZSdcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEpleGxFdmFsdWF0b3IgaW1wbGVtZW50cyBJRHluYW1pY1ZhbHVlRXZhbHVhdG9yPCdqZXhsJz4ge1xuXG4gIHB1YmxpYyByZWFkb25seSB0eXBlID0gJ2pleGwnXG5cbiAgcHJpdmF0ZSByZWFkb25seSBfamV4bCA9IG5ldyBqZXhsLkpleGwoKVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX2pleGwuYWRkVHJhbnNmb3JtKCdkYXRlJywgKHZhbDogYW55LCByb3c6IGFueSkgPT4gbmV3IERhdGVQaXBlKCdlbi1VUycpLnRyYW5zZm9ybSh2YWwsICd5eXl5LU1NLWRkIGg6bW0gYWFhJykpXG4gICAgdGhpcy5famV4bC5hZGRUcmFuc2Zvcm0oJ2xlbmd0aCcsICh2YWw6IGFueSkgPT4gdmFsICE9PSBudWxsICYmIHZhbCAhPT0gdW5kZWZpbmVkID8gdmFsLmxlbmd0aCA6IDApXG4gIH1cblxuICBwdWJsaWMgZXZhbDxSPih2YWx1ZTogSUpleGxWYWx1ZTxSPiwgY29udGV4dD86IGFueSk6IFByb21pc2U8Uj4ge1xuICAgIHJldHVybiB0aGlzLl9qZXhsLmV2YWwodmFsdWUuZXhwciwgY29udGV4dClcbiAgfVxuXG4gIHB1YmxpYyBldmFsU3luYzxSPih2YWx1ZTogSUpleGxWYWx1ZTxSPiwgY29udGV4dD86IGFueSk6IFIge1xuICAgIHJldHVybiB0aGlzLl9qZXhsLmV2YWxTeW5jKHZhbHVlLmV4cHIsIGNvbnRleHQpXG4gIH1cblxufVxuIl19
|
|
@@ -165,6 +165,9 @@ export class ModalContainerComponent extends BasePortalOutlet {
|
|
|
165
165
|
toFocus.focus();
|
|
166
166
|
}
|
|
167
167
|
}
|
|
168
|
+
getNativeElement() {
|
|
169
|
+
return this._elementRef.nativeElement;
|
|
170
|
+
}
|
|
168
171
|
}
|
|
169
172
|
ModalContainerComponent.decorators = [
|
|
170
173
|
{ type: Component, args: [{
|
|
@@ -214,4 +217,4 @@ ModalContainerComponent.propDecorators = {
|
|
|
214
217
|
_portalHost: [{ type: ViewChild, args: [CdkPortalOutlet /*, { static: true }*/, { static: true },] }],
|
|
215
218
|
_onClick: [{ type: HostListener, args: ['click', ['$event'],] }]
|
|
216
219
|
};
|
|
217
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtY29udGFpbmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWNvbW1vbi9tb2RhbC9tb2RhbC1jb250YWluZXIvbW9kYWwtY29udGFpbmVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFrQixLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUNoRyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUNwRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFtQyxNQUFNLHFCQUFxQixDQUFBO0FBQ3hHLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUMxQyxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLFNBQVMsRUFFVCxVQUFVLEVBRVYsV0FBVyxFQUNYLFlBQVksRUFDWixNQUFNLEVBRU4sUUFBUSxFQUNSLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQTtBQUN0QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQzlCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBRXJELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUU3QyxNQUFNLFVBQVUsc0NBQXNDO0lBQ3BELE1BQU0sS0FBSyxDQUFDLHVFQUF1RSxDQUFDLENBQUE7QUFDdEYsQ0FBQztBQUVEOzs7R0FHRztBQTJCSCxNQUFNLE9BQU8sdUJBQXdCLFNBQVEsZ0JBQWdCO0lBcUIzRCxZQUNVLFdBQW9DLEVBQ3BDLGlCQUFtQyxFQUNuQyxrQkFBcUMsRUFDUCxTQUFjO0lBQ3BELGdDQUFnQztJQUN6QixPQUFvQjtRQUMzQixLQUFLLEVBQUUsQ0FBQTtRQU5DLGdCQUFXLEdBQVgsV0FBVyxD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QWdCO1lBSXZCLGlCQUFpQjs0Q0E0RWQsUUFBUSxZQUFJLE1BQU0sU0FBQyxRQUFRO1lBN0R2QixXQUFXOzs7c0JBc0NqQixXQUFXLFNBQUMsU0FBUzt5QkFNckIsV0FBVyxTQUFDLGlCQUFpQjsrQkFFN0IsV0FBVyxTQUFDLHVCQUF1QjtvQkFHbkMsV0FBVyxTQUFDLFdBQVc7a0NBSXZCLFdBQVcsU0FBQyw0QkFBNEI7MkJBNEN4QyxXQUFXLFNBQUMsb0JBQW9CO21DQUNoQyxXQUFXLFNBQUMsNkJBQTZCOzZCQUV6QyxXQUFXLFNBQUMsZ0JBQWdCOzZCQUM1QixXQUFXLFNBQUMsZ0JBQWdCOzZCQUM1QixXQUFXLFNBQUMsZ0JBQWdCOzBCQUc1QixTQUFTLFNBQUMsZUFBZSxDQUFDLHNCQUFzQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTt1QkFrQmxFLFlBQVksU0FBQyxPQUFPLEVBQUUsQ0FBRSxRQUFRLENBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhbmltYXRlLCBBbmltYXRpb25FdmVudCwgc3RhdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucydcbmltcG9ydCB7IEZvY3VzVHJhcEZhY3RvcnkgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSdcbmltcG9ydCB7IEJhc2VQb3J0YWxPdXRsZXQsIENka1BvcnRhbE91dGxldCwgQ29tcG9uZW50UG9ydGFsLCBUZW1wbGF0ZVBvcnRhbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnXG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbidcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbXBvbmVudFJlZixcbiAgRWxlbWVudFJlZixcbiAgRW1iZWRkZWRWaWV3UmVmLFxuICBIb3N0QmluZGluZyxcbiAgSG9zdExpc3RlbmVyLFxuICBJbmplY3QsXG4gIE9uRGVzdHJveSxcbiAgT3B0aW9uYWwsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnXG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xuXG5pbXBvcnQgeyBNb2RhbENvbmZpZyB9IGZyb20gJy4uL21vZGFsLWNvbmZpZydcblxuZXhwb3J0IGZ1bmN0aW9uIHRocm93RGlhbG9nQ29udGVudEFscmVhZHlBdHRhY2hlZEVycm9yKCkge1xuICB0aHJvdyBFcnJvcignQXR0ZW1wdGluZyB0byBhdHRhY2ggZGlhbG9nIGNvbnRlbnQgYWZ0ZXIgY29udGVudCBpcyBhbHJlYWR5IGF0dGFjaGVkJylcbn1cblxuLyoqXG4gKiBJbnRlcm5hbCBjb21wb25lbnQgdGhhdCB3cmFwcyB1c2VyLXByb3ZpZGVkIGRpYWxvZyBjb250ZW50LlxuICogQGRvY3MtcHJpdmF0ZVxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzZWFtLW1vZGFsLWNvbnRhaW5lcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9tb2RhbC1jb250YWluZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9tb2RhbC1jb250YWluZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgYW5pbWF0aW9uczogW1xuICAgIHRyaWdnZXIoJ2RpYWxvZycsIFtcbiAgICAgIHN0YXRlKCdlbnRlcicsIHN0eWxlKHtvcGFjaXR5OiAxfSkpLFxuICAgICAgc3RhdGUoJ2V4aXQsIHZvaWQnLCBzdHlsZSh7b3BhY2l0eTogMH0pKSxcbiAgICAgIHRyYW5zaXRpb24oJyogPT4gZW50ZXInLCBhbmltYXRlKCd7e2VudGVyQW5pbWF0aW9uRHVyYXRpb259fScpKSxcbiAgICAgIHRyYW5zaXRpb24oJyogPT4gZXhpdCwgKiA9PiB2b2lkJywgYW5pbWF0ZSgne3tleGl0QW5pbWF0aW9uRHVyYXRpb259fScpKSxcbiAgICBdKVxuICBdLFxuICAvLyB0c2xpbnQ6ZGlzYWJsZTp1c2UtaG9zdC1wcm9wZXJ0eS1kZWNvcmF0b3JcbiAgaG9zdDoge1xuICAgICdbQGRpYWxvZ10nOiBge1xuICAgICAgdmFsdWU6IF9zdGF0ZSxcbiAgICAgIHBhcmFtczoge1xuICAgICAgICBlbnRlckFuaW1hdGlvbkR1cmF0aW9uOiBfY29uZmlnLmVudGVyQW5pbWF0aW9uRHVyYXRpb24sXG4gICAgICAgIGV4aXRBbmltYXRpb25EdXJhdGlvbjogX2NvbmZpZy5leGl0QW5pbWF0aW9uRHVyYXRpb25cbiAgICAgIH1cbiAgICB9YCxcbiAgICAnKEBkaWFsb2cuc3RhcnQpJzogJ19vbkFuaW1hdGlvblN0YXJ0KCRldmVudCknLFxuICAgICcoQGRpYWxvZy5kb25lKSc6ICdfYW5pbWF0aW9uRG9uZS5uZXh0KCRldmVudCknLFxuICB9LFxuICAvLyB0c2xpbnQ6ZW5hYmxlOnVzZS1ob3N0LXByb3BlcnR5LWRlY29yYXRvclxufSlcbmV4cG9ydCBjbGFzcyBNb2RhbENvbnRhaW5lckNvbXBvbmVudCBleHRlbmRzIEJhc2VQb3J0YWxPdXRsZXQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuXG4gIEBIb3N0QmluZGluZygnYXR0ci5pZCcpIGdldCBfaWRBdHRyKCkgeyByZXR1cm4gdGhpcy5faWQgfVxuXG4gIC8vIEBIb3N0QmluZGluZyBpcyB1c2VkIGluIHRoZSBjbGFzcyBhcyBpdCBpcyBleHBlY3RlZCB0byBiZSBleHRlbmRlZC4gIFNpbmNlIEBDb21wb25lbnQgZGVjb3JhdG9yXG4gIC8vIG1ldGFkYXRhIGlzIG5vdCBpbmhlcml0ZWQgYnkgY2hpbGQgY2xhc3NlcywgaW5zdGVhZCB0aGUgaG9zdCBiaW5kaW5nIGRhdGEgaXMgZGVmaW5lZCBpbiBhIHdheVxuICAvLyB0aGF0IGNhbiBiZSBpbmhlcml0ZWQuXG4gIC8vIHRzbGludDpkaXNhYmxlOm5vLWhvc3QtZGVjb3JhdG9yLWluLWNvbmNyZXRlXG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWxhYmVsJykgZ2V0IF9hcmlhTGFiZWwoKSB7IHJldHVybiB0aGlzLl9jb25maWcuYXJpYUxhYmVsIHx8IG51bGwgfVxuXG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWRlc2NyaWJlZGJ5JylcbiAgZ2V0IF9hcmlhRGVzY3JpYmVkQnkoKSB7IHJldHVybiB0aGlzLl9jb25maWcuYXJpYURlc2NyaWJlZEJ5IH1cblxuICBASG9zdEJpbmRpbmcoJ2F0dHIucm9sZScpIGdldCBfcm9sZSgpIHsgcmV0dXJuIHRoaXMuX2NvbmZpZy5yb2xlIH1cblxuICAvLyBASG9zdEJpbmRpbmcoJ2F0dHIudGFiaW5kZXgnKSBnZXQgX3RhYmluZGV4KCkgeyByZXR1cm4gLTEgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3Muc2VhbS1tb2RhbC1jb250YWluZXInKSBfc2VhbU1vZGFsQ29udGFpbmVyID0gdHJ1ZVxuXG4gIF9pZDogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbFxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgIHByaXZhdGUgX2ZvY3VzVHJhcEZhY3Rvcnk6IEZvY3VzVHJhcEZhY3RvcnksXG4gICAgcHJpdmF0ZSBfY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgX2RvY3VtZW50OiBhbnksXG4gICAgLyoqIFRoZSBkaWFsb2cgY29uZmlndXJhdGlvbi4gKi9cbiAgICBwdWJsaWMgX2NvbmZpZzogTW9kYWxDb25maWcpIHtcbiAgICBzdXBlcigpXG5cbiAgICAvLyBXZSB1c2UgYSBTdWJqZWN0IHdpdGggYSBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgcmF0aGVyIHRoYW4gYSBjYWxsYmFjayBhdHRhY2hlZCB0byAuZG9uZSxcbiAgICAvLyBiZWNhdXNlIHNvbWUgYnJvd3NlcnMgZmlyZSB0aGUgZG9uZSBldmVudCB0d2ljZSBhbmQgd2UgZG9uJ3Qgd2FudCB0byBlbWl0IGR1cGxpY2F0ZSBldmVudHMuXG4gICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8yNDA4NFxuICAgIHRoaXMuX2FuaW1hdGlvbkRvbmUucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgoeCwgeSkgPT4ge1xuICAgICAgcmV0dXJuIHguZnJvbVN0YXRlID09PSB5LmZyb21TdGF0ZSAmJiB4LnRvU3RhdGUgPT09IHkudG9TdGF0ZVxuICAgIH0pKS5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgLy8gRW1pdCBsaWZlY3ljbGUgZXZlbnRzIGJhc2VkIG9uIGFuaW1hdGlvbiBgZG9uZWAgY2FsbGJhY2suXG4gICAgICBpZiAoZXZlbnQudG9TdGF0ZSA9PT0gJ2VudGVyJykge1xuICAgICAgICB0aGlzLl9hdXRvRm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudCgpXG4gICAgICAgIHRoaXMuX2FmdGVyRW50ZXIubmV4dCgpXG4gICAgICAgIHRoaXMuX2FmdGVyRW50ZXIuY29tcGxldGUoKVxuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnQuZnJvbVN0YXRlID09PSAnZW50ZXInICYmIChldmVudC50b1N0YXRlID09PSAndm9pZCcgfHwgZXZlbnQudG9TdGF0ZSA9PT0gJ2V4aXQnKSkge1xuICAgICAgICB0aGlzLl9yZXR1cm5Gb2N1c0FmdGVyRGlhbG9nKClcbiAgICAgICAgdGhpcy5fYWZ0ZXJFeGl0Lm5leHQoKVxuICAgICAgICB0aGlzLl9hZnRlckV4aXQuY29tcGxldGUoKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICAvKiogU3RhdGUgb2YgdGhlIGRpYWxvZyBhbmltYXRpb24uICovXG4gIF9zdGF0ZTogJ3ZvaWQnIHwgJ2VudGVyJyB8ICdleGl0JyA9ICdlbnRlcidcblxuICAvKiogRWxlbWVudCB0aGF0IHdhcyBmb2N1c2VkIGJlZm9yZSB0aGUgZGlhbG9nIHdhcyBvcGVuZWQuIFNhdmUgdGhpcyB0byByZXN0b3JlIHVwb24gY2xvc2UuICovXG4gIHByaXZhdGUgX2VsZW1lbnRGb2N1c2VkQmVmb3JlRGlhbG9nV2FzT3BlbmVkOiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsXG5cbiAgIC8qKiBUaGUgY2xhc3MgdGhhdCB0cmFwcyBhbmQgbWFuYWdlcyBmb2N1cyB3aXRoaW4gdGhlIGRpYWxvZy4gKi9cbiAgcHJpdmF0ZSBfZm9jdXNUcmFwID0gdGhpcy5fZm9jdXNUcmFwRmFjdG9yeS5jcmVhdGUodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCBmYWxzZSlcbiAgLy8gdHNsaW50OmRpc2FibGU6bm8taG9zdC1kZWNvcmF0b3ItaW4tY29uY3JldGVcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLm1vZGFsLWRpYWxvZycpIF9tb2RhbERpYWxvZyA9IHRydWVcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5tb2RhbC1kaWFsb2ctY2VudGVyZWQnKSBfbW9kYWxEaWFsb2dDZW50ZXJlZCA9IHRydWVcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLm1vZGFsLXNtJykgZ2V0IF9tb2RhbERpYWxvZ1NtKCkgeyByZXR1cm4gdGhpcy5fY29uZmlnLm1vZGFsU2l6ZSA9PT0gJ3NtJyB9XG4gIEBIb3N0QmluZGluZygnY2xhc3MubW9kYWwtbGcnKSBnZXQgX21vZGFsRGlhbG9nTGcoKSB7IHJldHVybiB0aGlzLl9jb25maWcubW9kYWxTaXplID09PSAnbGcnIH1cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5tb2RhbC14bCcpIGdldCBfbW9kYWxEaWFsb2dYbCgpIHsgcmV0dXJuIHRoaXMuX2NvbmZpZy5tb2RhbFNpemUgPT09ICd4bCcgfVxuXG4gIC8qKiBUaGUgcG9ydGFsIGhvc3QgaW5zaWRlIG9mIHRoaXMgY29udGFpbmVyIGludG8gd2hpY2ggdGhlIGRpYWxvZyBjb250ZW50IHdpbGwgYmUgbG9hZGVkLiAqL1xuICBAVmlld0NoaWxkKENka1BvcnRhbE91dGxldCAvKiwgeyBzdGF0aWM6IHRydWUgfSovLCB7IHN0YXRpYzogdHJ1ZSB9KSBfcG9ydGFsSG9zdD86IENka1BvcnRhbE91dGxldFxuXG4gIC8qKiBBIHN1YmplY3QgZW1pdHRpbmcgYmVmb3JlIHRoZSBkaWFsb2cgZW50ZXJzIHRoZSB2aWV3LiAqL1xuICBfYmVmb3JlRW50ZXI6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpXG5cbiAgLyoqIEEgc3ViamVjdCBlbWl0dGluZyBhZnRlciB0aGUgZGlhbG9nIGVudGVycyB0aGUgdmlldy4gKi9cbiAgX2FmdGVyRW50ZXI6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpXG5cbiAgLyoqIEEgc3ViamVjdCBlbWl0dGluZyBiZWZvcmUgdGhlIGRpYWxvZyBleGl0cyB0aGUgdmlldy4gKi9cbiAgX2JlZm9yZUV4aXQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpXG5cbiAgLyoqIEEgc3ViamVjdCBlbWl0dGluZyBhZnRlciB0aGUgZGlhbG9nIGV4aXRzIHRoZSB2aWV3LiAqL1xuICBfYWZ0ZXJFeGl0OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKVxuXG4gIC8qKiBTdHJlYW0gb2YgYW5pbWF0aW9uIGBkb25lYCBldmVudHMuICovXG4gIF9hbmltYXRpb25Eb25lID0gbmV3IFN1YmplY3Q8QW5pbWF0aW9uRXZlbnQ+KClcblxuICAvLyBOT1RFOiBGb3IgY3VycmVudCBib290c3RyYXAgc3R5bGUgbW9kYWxcbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbICckZXZlbnQnIF0pXG4gIF9vbkNsaWNrKGV2ZW50OiBVSUV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgfVxuXG4gIC8qKiBEZXN0cm95IGZvY3VzIHRyYXAgdG8gcGxhY2UgZm9jdXMgYmFjayB0byB0aGUgZWxlbWVudCBmb2N1c2VkIGJlZm9yZSB0aGUgZGlhbG9nIG9wZW5lZC4gKi9cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fZm9jdXNUcmFwLmRlc3Ryb3koKVxuICAgIHRoaXMuX2FuaW1hdGlvbkRvbmUuY29tcGxldGUoKVxuICB9XG5cbiAgLyoqXG4gICAqIEF0dGFjaCBhIENvbXBvbmVudFBvcnRhbCBhcyBjb250ZW50IHRvIHRoaXMgZGlhbG9nIGNvbnRhaW5lci5cbiAgICogQHBhcmFtIHBvcnRhbCBQb3J0YWwgdG8gYmUgYXR0YWNoZWQgYXMgdGhlIGRpYWxvZyBjb250ZW50LlxuICAgKi9cbiAgYXR0YWNoQ29tcG9uZW50UG9ydGFsPFQ+KHBvcnRhbDogQ29tcG9uZW50UG9ydGFsPFQ+KTogQ29tcG9uZW50UmVmPFQ+IHtcbiAgICBpZiAoIXRoaXMuX3BvcnRhbEhvc3QpIHtcbiAgICAgIHRocm93IEVycm9yKGBfcG9ydGFsSG9zdCBub3QgZm91bmQuYClcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcG9ydGFsSG9zdC5oYXNBdHRhY2hlZCgpKSB7XG4gICAgICB0aHJvd0RpYWxvZ0NvbnRlbnRBbHJlYWR5QXR0YWNoZWRFcnJvcigpXG4gICAgfVxuXG4gICAgdGhpcy5fc2F2ZVByZXZpb3VzbHlGb2N1c2VkRWxlbWVudCgpXG4gICAgcmV0dXJuIHRoaXMuX3BvcnRhbEhvc3QuYXR0YWNoQ29tcG9uZW50UG9ydGFsKHBvcnRhbClcbiAgfVxuXG4gIC8qKlxuICAgKiBBdHRhY2ggYSBUZW1wbGF0ZVBvcnRhbCBhcyBjb250ZW50IHRvIHRoaXMgZGlhbG9nIGNvbnRhaW5lci5cbiAgICogQHBhcmFtIHBvcnRhbCBQb3J0YWwgdG8gYmUgYXR0YWNoZWQgYXMgdGhlIGRpYWxvZyBjb250ZW50LlxuICAgKi9cbiAgYXR0YWNoVGVtcGxhdGVQb3J0YWw8Qz4ocG9ydGFsOiBUZW1wbGF0ZVBvcnRhbDxDPik6IEVtYmVkZGVkVmlld1JlZjxDPiB7XG4gICAgaWYgKCF0aGlzLl9wb3J0YWxIb3N0KSB7XG4gICAgICB0aHJvdyBFcnJvcihgX3BvcnRhbEhvc3Qgbm90IGZvdW5kLmApXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3BvcnRhbEhvc3QuaGFzQXR0YWNoZWQoKSkge1xuICAgICAgdGhyb3dEaWFsb2dDb250ZW50QWxyZWFkeUF0dGFjaGVkRXJyb3IoKVxuICAgIH1cblxuICAgIHRoaXMuX3NhdmVQcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQoKVxuICAgIHJldHVybiB0aGlzLl9wb3J0YWxIb3N0LmF0dGFjaFRlbXBsYXRlUG9ydGFsKHBvcnRhbClcbiAgfVxuXG4gIC8qKiBFbWl0IGxpZmVjeWNsZSBldmVudHMgYmFzZWQgb24gYW5pbWF0aW9uIGBzdGFydGAgY2FsbGJhY2suICovXG4gIF9vbkFuaW1hdGlvblN0YXJ0KGV2ZW50OiBBbmltYXRpb25FdmVudCkge1xuICAgIGlmIChldmVudC50b1N0YXRlID09PSAnZW50ZXInKSB7XG4gICAgICB0aGlzLl9iZWZvcmVFbnRlci5uZXh0KClcbiAgICAgIHRoaXMuX2JlZm9yZUVudGVyLmNvbXBsZXRlKClcbiAgICB9XG4gICAgaWYgKGV2ZW50LmZyb21TdGF0ZSA9PT0gJ2VudGVyJyAmJiAoZXZlbnQudG9TdGF0ZSA9PT0gJ3ZvaWQnIHx8IGV2ZW50LnRvU3RhdGUgPT09ICdleGl0JykpIHtcbiAgICAgIHRoaXMuX2JlZm9yZUV4aXQubmV4dCgpXG4gICAgICB0aGlzLl9iZWZvcmVFeGl0LmNvbXBsZXRlKClcbiAgICB9XG4gIH1cblxuICAvKiogU3RhcnRzIHRoZSBkaWFsb2cgZXhpdCBhbmltYXRpb24uICovXG4gIF9zdGFydEV4aXRpbmcoKTogdm9pZCB7XG4gICAgdGhpcy5fc3RhdGUgPSAnZXhpdCdcblxuICAgIC8vIE1hcmsgdGhlIGNvbnRhaW5lciBmb3IgY2hlY2sgc28gaXQgY2FuIHJlYWN0IGlmIHRoZVxuICAgIC8vIHZpZXcgY29udGFpbmVyIGlzIHVzaW5nIE9uUHVzaCBjaGFuZ2UgZGV0ZWN0aW9uLlxuICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpXG4gIH1cblxuICAvKiogU2F2ZXMgYSByZWZlcmVuY2UgdG8gdGhlIGVsZW1lbnQgdGhhdCB3YXMgZm9jdXNlZCBiZWZvcmUgdGhlIGRpYWxvZyB3YXMgb3BlbmVkLiAqL1xuICBwcml2YXRlIF9zYXZlUHJldmlvdXNseUZvY3VzZWRFbGVtZW50KCkge1xuICAgIGlmICh0aGlzLl9kb2N1bWVudCkge1xuICAgICAgdGhpcy5fZWxlbWVudEZvY3VzZWRCZWZvcmVEaWFsb2dXYXNPcGVuZWQgPSB0aGlzLl9kb2N1bWVudC5hY3RpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50XG5cbiAgICAgIC8vIE1vdmUgZm9jdXMgb250byB0aGUgZGlhbG9nIGltbWVkaWF0ZWx5IGluIG9yZGVyIHRvIHByZXZlbnQgdGhlIHVzZXIgZnJvbSBhY2NpZGVudGFsbHlcbiAgICAgIC8vIG9wZW5pbmcgbXVsdGlwbGUgZGlhbG9ncyBhdCB0aGUgc2FtZSB0aW1lLiBOZWVkcyB0byBiZSBhc3luYywgYmVjYXVzZSB0aGUgZWxlbWVudFxuICAgICAgLy8gbWF5IG5vdCBiZSBmb2N1c2FibGUgaW1tZWRpYXRlbHkuXG4gICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBdXRvZm9jdXMgdGhlIGZpcnN0IHRhYmJhYmxlIGVsZW1lbnQgaW5zaWRlIG9mIHRoZSBkaWFsb2csIGlmIHRoZXJlIGlzIG5vdCBhIHRhYmJhYmxlIGVsZW1lbnQsXG4gICAqIGZvY3VzIHRoZSBkaWFsb2cgaW5zdGVhZC5cbiAgICovXG4gIHByaXZhdGUgX2F1dG9Gb2N1c0ZpcnN0VGFiYmFibGVFbGVtZW50KCkge1xuICAgIC8vIElmIHdlcmUgdG8gYXR0ZW1wdCB0byBmb2N1cyBpbW1lZGlhdGVseSwgdGhlbiB0aGUgY29udGVudCBvZiB0aGUgZGlhbG9nIHdvdWxkIG5vdCB5ZXQgYmVcbiAgICAvLyByZWFkeSBpbiBpbnN0YW5jZXMgd2hlcmUgY2hhbmdlIGRldGVjdGlvbiBoYXMgdG8gcnVuIGZpcnN0LiBUbyBkZWFsIHdpdGggdGhpcywgd2Ugc2ltcGx5XG4gICAgLy8gd2FpdCBmb3IgdGhlIG1pY3JvdGFzayBxdWV1ZSB0byBiZSBlbXB0eS5cbiAgICBpZiAodGhpcy5fY29uZmlnLmF1dG9Gb2N1cykge1xuICAgICAgdGhpcy5fZm9jdXNUcmFwLmZvY3VzSW5pdGlhbEVsZW1lbnRXaGVuUmVhZHkoKS50aGVuKGhhc01vdmVkRm9jdXMgPT4ge1xuICAgICAgICAvLyBJZiB3ZSBkaWRuJ3QgZmluZCBhbnkgZm9jdXNhYmxlIGVsZW1lbnRzIGluc2lkZSB0aGUgZGlhbG9nLCBmb2N1cyB0aGVcbiAgICAgICAgLy8gY29udGFpbmVyIHNvIHRoZSB1c2VyIGNhbid0IHRhYiBpbnRvIG90aGVyIGVsZW1lbnRzIGJlaGluZCBpdC5cbiAgICAgICAgaWYgKCFoYXNNb3ZlZEZvY3VzKSB7XG4gICAgICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICAvKiogUmV0dXJucyB0aGUgZm9jdXMgdG8gdGhlIGVsZW1lbnQgZm9jdXNlZCBiZWZvcmUgdGhlIGRpYWxvZyB3YXMgb3Blbi4gKi9cbiAgcHJpdmF0ZSBfcmV0dXJuRm9jdXNBZnRlckRpYWxvZygpIHtcbiAgICBjb25zdCB0b0ZvY3VzID0gdGhpcy5fZWxlbWVudEZvY3VzZWRCZWZvcmVEaWFsb2dXYXNPcGVuZWRcbiAgICAvLyBXZSBuZWVkIHRoZSBleHRyYSBjaGVjaywgYmVjYXVzZSBJRSBjYW4gc2V0IHRoZSBgYWN0aXZlRWxlbWVudGAgdG8gbnVsbCBpbiBzb21lIGNhc2VzLlxuICAgIGlmICh0b0ZvY3VzICYmIHR5cGVvZiB0b0ZvY3VzLmZvY3VzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0b0ZvY3VzLmZvY3VzKClcbiAgICB9XG4gIH1cblxufVxuIl19
|
|
220
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtY29udGFpbmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWNvbW1vbi9tb2RhbC9tb2RhbC1jb250YWluZXIvbW9kYWwtY29udGFpbmVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFrQixLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUNoRyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUNwRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFtQyxNQUFNLHFCQUFxQixDQUFBO0FBQ3hHLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUMxQyxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLFNBQVMsRUFFVCxVQUFVLEVBRVYsV0FBVyxFQUNYLFlBQVksRUFDWixNQUFNLEVBRU4sUUFBUSxFQUNSLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQTtBQUN0QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQzlCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBRXJELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUU3QyxNQUFNLFVBQVUsc0NBQXNDO0lBQ3BELE1BQU0sS0FBSyxDQUFDLHVFQUF1RSxDQUFDLENBQUE7QUFDdEYsQ0FBQztBQUVEOzs7R0FHRztBQTJCSCxNQUFNLE9BQU8sdUJBQXdCLFNBQVEsZ0JBQWdCO0lBcUIzRCxZQUNVLFdBQW9DLEVBQ3BDLGlCQUFtQyxFQUNuQyxrQkFBcUMsRUFDUCxTQUFjO0lBQ3BELGdDQUFnQztJQUN6QixPQUFvQjtRQUMzQixLQUFLLEVBQUUsQ0FBQTtRQU5DLGdCQUFXLEdBQVgsV0FBVyxD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QTJCO29CQUM5QyxnQkFBZ0IsRUFBRSw2QkFBNkI7aUJBQ2hEOzthQUVGOzs7WUEvQ0MsVUFBVTtZQVBILGdCQUFnQjtZQUl2QixpQkFBaUI7NENBNEVkLFFBQVEsWUFBSSxNQUFNLFNBQUMsUUFBUTtZQTdEdkIsV0FBVzs7O3NCQXNDakIsV0FBVyxTQUFDLFNBQVM7eUJBTXJCLFdBQVcsU0FBQyxpQkFBaUI7K0JBRTdCLFdBQVcsU0FBQyx1QkFBdUI7b0JBR25DLFdBQVcsU0FBQyxXQUFXO2tDQUl2QixXQUFXLFNBQUMsNEJBQTRCOzJCQTRDeEMsV0FBVyxTQUFDLG9CQUFvQjttQ0FDaEMsV0FBVyxTQUFDLDZCQUE2Qjs2QkFFekMsV0FBVyxTQUFDLGdCQUFnQjs2QkFDNUIsV0FBVyxTQUFDLGdCQUFnQjs2QkFDNUIsV0FBVyxTQUFDLGdCQUFnQjswQkFHNUIsU0FBUyxTQUFDLGVBQWUsQ0FBQyxzQkFBc0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7dUJBa0JsRSxZQUFZLFNBQUMsT0FBTyxFQUFFLENBQUUsUUFBUSxDQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYW5pbWF0ZSwgQW5pbWF0aW9uRXZlbnQsIHN0YXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnXG5pbXBvcnQgeyBGb2N1c1RyYXBGYWN0b3J5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknXG5pbXBvcnQgeyBCYXNlUG9ydGFsT3V0bGV0LCBDZGtQb3J0YWxPdXRsZXQsIENvbXBvbmVudFBvcnRhbCwgVGVtcGxhdGVQb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJ1xuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nXG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb21wb25lbnRSZWYsXG4gIEVsZW1lbnRSZWYsXG4gIEVtYmVkZGVkVmlld1JlZixcbiAgSG9zdEJpbmRpbmcsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5qZWN0LFxuICBPbkRlc3Ryb3ksXG4gIE9wdGlvbmFsLFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcblxuaW1wb3J0IHsgTW9kYWxDb25maWcgfSBmcm9tICcuLi9tb2RhbC1jb25maWcnXG5cbmV4cG9ydCBmdW5jdGlvbiB0aHJvd0RpYWxvZ0NvbnRlbnRBbHJlYWR5QXR0YWNoZWRFcnJvcigpIHtcbiAgdGhyb3cgRXJyb3IoJ0F0dGVtcHRpbmcgdG8gYXR0YWNoIGRpYWxvZyBjb250ZW50IGFmdGVyIGNvbnRlbnQgaXMgYWxyZWFkeSBhdHRhY2hlZCcpXG59XG5cbi8qKlxuICogSW50ZXJuYWwgY29tcG9uZW50IHRoYXQgd3JhcHMgdXNlci1wcm92aWRlZCBkaWFsb2cgY29udGVudC5cbiAqIEBkb2NzLXByaXZhdGVcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2VhbS1tb2RhbC1jb250YWluZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vbW9kYWwtY29udGFpbmVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbW9kYWwtY29udGFpbmVyLmNvbXBvbmVudC5zY3NzJ10sXG4gIGFuaW1hdGlvbnM6IFtcbiAgICB0cmlnZ2VyKCdkaWFsb2cnLCBbXG4gICAgICBzdGF0ZSgnZW50ZXInLCBzdHlsZSh7b3BhY2l0eTogMX0pKSxcbiAgICAgIHN0YXRlKCdleGl0LCB2b2lkJywgc3R5bGUoe29wYWNpdHk6IDB9KSksXG4gICAgICB0cmFuc2l0aW9uKCcqID0+IGVudGVyJywgYW5pbWF0ZSgne3tlbnRlckFuaW1hdGlvbkR1cmF0aW9ufX0nKSksXG4gICAgICB0cmFuc2l0aW9uKCcqID0+IGV4aXQsICogPT4gdm9pZCcsIGFuaW1hdGUoJ3t7ZXhpdEFuaW1hdGlvbkR1cmF0aW9ufX0nKSksXG4gICAgXSlcbiAgXSxcbiAgLy8gdHNsaW50OmRpc2FibGU6dXNlLWhvc3QtcHJvcGVydHktZGVjb3JhdG9yXG4gIGhvc3Q6IHtcbiAgICAnW0BkaWFsb2ddJzogYHtcbiAgICAgIHZhbHVlOiBfc3RhdGUsXG4gICAgICBwYXJhbXM6IHtcbiAgICAgICAgZW50ZXJBbmltYXRpb25EdXJhdGlvbjogX2NvbmZpZy5lbnRlckFuaW1hdGlvbkR1cmF0aW9uLFxuICAgICAgICBleGl0QW5pbWF0aW9uRHVyYXRpb246IF9jb25maWcuZXhpdEFuaW1hdGlvbkR1cmF0aW9uXG4gICAgICB9XG4gICAgfWAsXG4gICAgJyhAZGlhbG9nLnN0YXJ0KSc6ICdfb25BbmltYXRpb25TdGFydCgkZXZlbnQpJyxcbiAgICAnKEBkaWFsb2cuZG9uZSknOiAnX2FuaW1hdGlvbkRvbmUubmV4dCgkZXZlbnQpJyxcbiAgfSxcbiAgLy8gdHNsaW50OmVuYWJsZTp1c2UtaG9zdC1wcm9wZXJ0eS1kZWNvcmF0b3Jcbn0pXG5leHBvcnQgY2xhc3MgTW9kYWxDb250YWluZXJDb21wb25lbnQgZXh0ZW5kcyBCYXNlUG9ydGFsT3V0bGV0IGltcGxlbWVudHMgT25EZXN0cm95IHtcblxuICBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKSBnZXQgX2lkQXR0cigpIHsgcmV0dXJuIHRoaXMuX2lkIH1cblxuICAvLyBASG9zdEJpbmRpbmcgaXMgdXNlZCBpbiB0aGUgY2xhc3MgYXMgaXQgaXMgZXhwZWN0ZWQgdG8gYmUgZXh0ZW5kZWQuICBTaW5jZSBAQ29tcG9uZW50IGRlY29yYXRvclxuICAvLyBtZXRhZGF0YSBpcyBub3QgaW5oZXJpdGVkIGJ5IGNoaWxkIGNsYXNzZXMsIGluc3RlYWQgdGhlIGhvc3QgYmluZGluZyBkYXRhIGlzIGRlZmluZWQgaW4gYSB3YXlcbiAgLy8gdGhhdCBjYW4gYmUgaW5oZXJpdGVkLlxuICAvLyB0c2xpbnQ6ZGlzYWJsZTpuby1ob3N0LWRlY29yYXRvci1pbi1jb25jcmV0ZVxuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1sYWJlbCcpIGdldCBfYXJpYUxhYmVsKCkgeyByZXR1cm4gdGhpcy5fY29uZmlnLmFyaWFMYWJlbCB8fCBudWxsIH1cblxuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1kZXNjcmliZWRieScpXG4gIGdldCBfYXJpYURlc2NyaWJlZEJ5KCkgeyByZXR1cm4gdGhpcy5fY29uZmlnLmFyaWFEZXNjcmliZWRCeSB9XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLnJvbGUnKSBnZXQgX3JvbGUoKSB7IHJldHVybiB0aGlzLl9jb25maWcucm9sZSB9XG5cbiAgLy8gQEhvc3RCaW5kaW5nKCdhdHRyLnRhYmluZGV4JykgZ2V0IF90YWJpbmRleCgpIHsgcmV0dXJuIC0xIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNlYW0tbW9kYWwtY29udGFpbmVyJykgX3NlYW1Nb2RhbENvbnRhaW5lciA9IHRydWVcblxuICBfaWQ6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGxcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICBwcml2YXRlIF9mb2N1c1RyYXBGYWN0b3J5OiBGb2N1c1RyYXBGYWN0b3J5LFxuICAgIHByaXZhdGUgX2NoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIF9kb2N1bWVudDogYW55LFxuICAgIC8qKiBUaGUgZGlhbG9nIGNvbmZpZ3VyYXRpb24uICovXG4gICAgcHVibGljIF9jb25maWc6IE1vZGFsQ29uZmlnKSB7XG4gICAgc3VwZXIoKVxuXG4gICAgLy8gV2UgdXNlIGEgU3ViamVjdCB3aXRoIGEgZGlzdGluY3RVbnRpbENoYW5nZWQsIHJhdGhlciB0aGFuIGEgY2FsbGJhY2sgYXR0YWNoZWQgdG8gLmRvbmUsXG4gICAgLy8gYmVjYXVzZSBzb21lIGJyb3dzZXJzIGZpcmUgdGhlIGRvbmUgZXZlbnQgdHdpY2UgYW5kIHdlIGRvbid0IHdhbnQgdG8gZW1pdCBkdXBsaWNhdGUgZXZlbnRzLlxuICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvMjQwODRcbiAgICB0aGlzLl9hbmltYXRpb25Eb25lLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKHgsIHkpID0+IHtcbiAgICAgIHJldHVybiB4LmZyb21TdGF0ZSA9PT0geS5mcm9tU3RhdGUgJiYgeC50b1N0YXRlID09PSB5LnRvU3RhdGVcbiAgICB9KSkuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgIC8vIEVtaXQgbGlmZWN5Y2xlIGV2ZW50cyBiYXNlZCBvbiBhbmltYXRpb24gYGRvbmVgIGNhbGxiYWNrLlxuICAgICAgaWYgKGV2ZW50LnRvU3RhdGUgPT09ICdlbnRlcicpIHtcbiAgICAgICAgdGhpcy5fYXV0b0ZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnQoKVxuICAgICAgICB0aGlzLl9hZnRlckVudGVyLm5leHQoKVxuICAgICAgICB0aGlzLl9hZnRlckVudGVyLmNvbXBsZXRlKClcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50LmZyb21TdGF0ZSA9PT0gJ2VudGVyJyAmJiAoZXZlbnQudG9TdGF0ZSA9PT0gJ3ZvaWQnIHx8IGV2ZW50LnRvU3RhdGUgPT09ICdleGl0JykpIHtcbiAgICAgICAgdGhpcy5fcmV0dXJuRm9jdXNBZnRlckRpYWxvZygpXG4gICAgICAgIHRoaXMuX2FmdGVyRXhpdC5uZXh0KClcbiAgICAgICAgdGhpcy5fYWZ0ZXJFeGl0LmNvbXBsZXRlKClcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLyoqIFN0YXRlIG9mIHRoZSBkaWFsb2cgYW5pbWF0aW9uLiAqL1xuICBfc3RhdGU6ICd2b2lkJyB8ICdlbnRlcicgfCAnZXhpdCcgPSAnZW50ZXInXG5cbiAgLyoqIEVsZW1lbnQgdGhhdCB3YXMgZm9jdXNlZCBiZWZvcmUgdGhlIGRpYWxvZyB3YXMgb3BlbmVkLiBTYXZlIHRoaXMgdG8gcmVzdG9yZSB1cG9uIGNsb3NlLiAqL1xuICBwcml2YXRlIF9lbGVtZW50Rm9jdXNlZEJlZm9yZURpYWxvZ1dhc09wZW5lZDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbFxuXG4gICAvKiogVGhlIGNsYXNzIHRoYXQgdHJhcHMgYW5kIG1hbmFnZXMgZm9jdXMgd2l0aGluIHRoZSBkaWFsb2cuICovXG4gIHByaXZhdGUgX2ZvY3VzVHJhcCA9IHRoaXMuX2ZvY3VzVHJhcEZhY3RvcnkuY3JlYXRlKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgZmFsc2UpXG4gIC8vIHRzbGludDpkaXNhYmxlOm5vLWhvc3QtZGVjb3JhdG9yLWluLWNvbmNyZXRlXG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5tb2RhbC1kaWFsb2cnKSBfbW9kYWxEaWFsb2cgPSB0cnVlXG4gIEBIb3N0QmluZGluZygnY2xhc3MubW9kYWwtZGlhbG9nLWNlbnRlcmVkJykgX21vZGFsRGlhbG9nQ2VudGVyZWQgPSB0cnVlXG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5tb2RhbC1zbScpIGdldCBfbW9kYWxEaWFsb2dTbSgpIHsgcmV0dXJuIHRoaXMuX2NvbmZpZy5tb2RhbFNpemUgPT09ICdzbScgfVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLm1vZGFsLWxnJykgZ2V0IF9tb2RhbERpYWxvZ0xnKCkgeyByZXR1cm4gdGhpcy5fY29uZmlnLm1vZGFsU2l6ZSA9PT0gJ2xnJyB9XG4gIEBIb3N0QmluZGluZygnY2xhc3MubW9kYWwteGwnKSBnZXQgX21vZGFsRGlhbG9nWGwoKSB7IHJldHVybiB0aGlzLl9jb25maWcubW9kYWxTaXplID09PSAneGwnIH1cblxuICAvKiogVGhlIHBvcnRhbCBob3N0IGluc2lkZSBvZiB0aGlzIGNvbnRhaW5lciBpbnRvIHdoaWNoIHRoZSBkaWFsb2cgY29udGVudCB3aWxsIGJlIGxvYWRlZC4gKi9cbiAgQFZpZXdDaGlsZChDZGtQb3J0YWxPdXRsZXQgLyosIHsgc3RhdGljOiB0cnVlIH0qLywgeyBzdGF0aWM6IHRydWUgfSkgX3BvcnRhbEhvc3Q/OiBDZGtQb3J0YWxPdXRsZXRcblxuICAvKiogQSBzdWJqZWN0IGVtaXR0aW5nIGJlZm9yZSB0aGUgZGlhbG9nIGVudGVycyB0aGUgdmlldy4gKi9cbiAgX2JlZm9yZUVudGVyOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKVxuXG4gIC8qKiBBIHN1YmplY3QgZW1pdHRpbmcgYWZ0ZXIgdGhlIGRpYWxvZyBlbnRlcnMgdGhlIHZpZXcuICovXG4gIF9hZnRlckVudGVyOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKVxuXG4gIC8qKiBBIHN1YmplY3QgZW1pdHRpbmcgYmVmb3JlIHRoZSBkaWFsb2cgZXhpdHMgdGhlIHZpZXcuICovXG4gIF9iZWZvcmVFeGl0OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKVxuXG4gIC8qKiBBIHN1YmplY3QgZW1pdHRpbmcgYWZ0ZXIgdGhlIGRpYWxvZyBleGl0cyB0aGUgdmlldy4gKi9cbiAgX2FmdGVyRXhpdDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KClcblxuICAvKiogU3RyZWFtIG9mIGFuaW1hdGlvbiBgZG9uZWAgZXZlbnRzLiAqL1xuICBfYW5pbWF0aW9uRG9uZSA9IG5ldyBTdWJqZWN0PEFuaW1hdGlvbkV2ZW50PigpXG5cbiAgLy8gTk9URTogRm9yIGN1cnJlbnQgYm9vdHN0cmFwIHN0eWxlIG1vZGFsXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyAnJGV2ZW50JyBdKVxuICBfb25DbGljayhldmVudDogVUlFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gIH1cblxuICAvKiogRGVzdHJveSBmb2N1cyB0cmFwIHRvIHBsYWNlIGZvY3VzIGJhY2sgdG8gdGhlIGVsZW1lbnQgZm9jdXNlZCBiZWZvcmUgdGhlIGRpYWxvZyBvcGVuZWQuICovXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX2ZvY3VzVHJhcC5kZXN0cm95KClcbiAgICB0aGlzLl9hbmltYXRpb25Eb25lLmNvbXBsZXRlKClcbiAgfVxuXG4gIC8qKlxuICAgKiBBdHRhY2ggYSBDb21wb25lbnRQb3J0YWwgYXMgY29udGVudCB0byB0aGlzIGRpYWxvZyBjb250YWluZXIuXG4gICAqIEBwYXJhbSBwb3J0YWwgUG9ydGFsIHRvIGJlIGF0dGFjaGVkIGFzIHRoZSBkaWFsb2cgY29udGVudC5cbiAgICovXG4gIGF0dGFjaENvbXBvbmVudFBvcnRhbDxUPihwb3J0YWw6IENvbXBvbmVudFBvcnRhbDxUPik6IENvbXBvbmVudFJlZjxUPiB7XG4gICAgaWYgKCF0aGlzLl9wb3J0YWxIb3N0KSB7XG4gICAgICB0aHJvdyBFcnJvcihgX3BvcnRhbEhvc3Qgbm90IGZvdW5kLmApXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3BvcnRhbEhvc3QuaGFzQXR0YWNoZWQoKSkge1xuICAgICAgdGhyb3dEaWFsb2dDb250ZW50QWxyZWFkeUF0dGFjaGVkRXJyb3IoKVxuICAgIH1cblxuICAgIHRoaXMuX3NhdmVQcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQoKVxuICAgIHJldHVybiB0aGlzLl9wb3J0YWxIb3N0LmF0dGFjaENvbXBvbmVudFBvcnRhbChwb3J0YWwpXG4gIH1cblxuICAvKipcbiAgICogQXR0YWNoIGEgVGVtcGxhdGVQb3J0YWwgYXMgY29udGVudCB0byB0aGlzIGRpYWxvZyBjb250YWluZXIuXG4gICAqIEBwYXJhbSBwb3J0YWwgUG9ydGFsIHRvIGJlIGF0dGFjaGVkIGFzIHRoZSBkaWFsb2cgY29udGVudC5cbiAgICovXG4gIGF0dGFjaFRlbXBsYXRlUG9ydGFsPEM+KHBvcnRhbDogVGVtcGxhdGVQb3J0YWw8Qz4pOiBFbWJlZGRlZFZpZXdSZWY8Qz4ge1xuICAgIGlmICghdGhpcy5fcG9ydGFsSG9zdCkge1xuICAgICAgdGhyb3cgRXJyb3IoYF9wb3J0YWxIb3N0IG5vdCBmb3VuZC5gKVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9wb3J0YWxIb3N0Lmhhc0F0dGFjaGVkKCkpIHtcbiAgICAgIHRocm93RGlhbG9nQ29udGVudEFscmVhZHlBdHRhY2hlZEVycm9yKClcbiAgICB9XG5cbiAgICB0aGlzLl9zYXZlUHJldmlvdXNseUZvY3VzZWRFbGVtZW50KClcbiAgICByZXR1cm4gdGhpcy5fcG9ydGFsSG9zdC5hdHRhY2hUZW1wbGF0ZVBvcnRhbChwb3J0YWwpXG4gIH1cblxuICAvKiogRW1pdCBsaWZlY3ljbGUgZXZlbnRzIGJhc2VkIG9uIGFuaW1hdGlvbiBgc3RhcnRgIGNhbGxiYWNrLiAqL1xuICBfb25BbmltYXRpb25TdGFydChldmVudDogQW5pbWF0aW9uRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQudG9TdGF0ZSA9PT0gJ2VudGVyJykge1xuICAgICAgdGhpcy5fYmVmb3JlRW50ZXIubmV4dCgpXG4gICAgICB0aGlzLl9iZWZvcmVFbnRlci5jb21wbGV0ZSgpXG4gICAgfVxuICAgIGlmIChldmVudC5mcm9tU3RhdGUgPT09ICdlbnRlcicgJiYgKGV2ZW50LnRvU3RhdGUgPT09ICd2b2lkJyB8fCBldmVudC50b1N0YXRlID09PSAnZXhpdCcpKSB7XG4gICAgICB0aGlzLl9iZWZvcmVFeGl0Lm5leHQoKVxuICAgICAgdGhpcy5fYmVmb3JlRXhpdC5jb21wbGV0ZSgpXG4gICAgfVxuICB9XG5cbiAgLyoqIFN0YXJ0cyB0aGUgZGlhbG9nIGV4aXQgYW5pbWF0aW9uLiAqL1xuICBfc3RhcnRFeGl0aW5nKCk6IHZvaWQge1xuICAgIHRoaXMuX3N0YXRlID0gJ2V4aXQnXG5cbiAgICAvLyBNYXJrIHRoZSBjb250YWluZXIgZm9yIGNoZWNrIHNvIGl0IGNhbiByZWFjdCBpZiB0aGVcbiAgICAvLyB2aWV3IGNvbnRhaW5lciBpcyB1c2luZyBPblB1c2ggY2hhbmdlIGRldGVjdGlvbi5cbiAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKVxuICB9XG5cbiAgLyoqIFNhdmVzIGEgcmVmZXJlbmNlIHRvIHRoZSBlbGVtZW50IHRoYXQgd2FzIGZvY3VzZWQgYmVmb3JlIHRoZSBkaWFsb2cgd2FzIG9wZW5lZC4gKi9cbiAgcHJpdmF0ZSBfc2F2ZVByZXZpb3VzbHlGb2N1c2VkRWxlbWVudCgpIHtcbiAgICBpZiAodGhpcy5fZG9jdW1lbnQpIHtcbiAgICAgIHRoaXMuX2VsZW1lbnRGb2N1c2VkQmVmb3JlRGlhbG9nV2FzT3BlbmVkID0gdGhpcy5fZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudFxuXG4gICAgICAvLyBNb3ZlIGZvY3VzIG9udG8gdGhlIGRpYWxvZyBpbW1lZGlhdGVseSBpbiBvcmRlciB0byBwcmV2ZW50IHRoZSB1c2VyIGZyb20gYWNjaWRlbnRhbGx5XG4gICAgICAvLyBvcGVuaW5nIG11bHRpcGxlIGRpYWxvZ3MgYXQgdGhlIHNhbWUgdGltZS4gTmVlZHMgdG8gYmUgYXN5bmMsIGJlY2F1c2UgdGhlIGVsZW1lbnRcbiAgICAgIC8vIG1heSBub3QgYmUgZm9jdXNhYmxlIGltbWVkaWF0ZWx5LlxuICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQXV0b2ZvY3VzIHRoZSBmaXJzdCB0YWJiYWJsZSBlbGVtZW50IGluc2lkZSBvZiB0aGUgZGlhbG9nLCBpZiB0aGVyZSBpcyBub3QgYSB0YWJiYWJsZSBlbGVtZW50LFxuICAgKiBmb2N1cyB0aGUgZGlhbG9nIGluc3RlYWQuXG4gICAqL1xuICBwcml2YXRlIF9hdXRvRm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudCgpIHtcbiAgICAvLyBJZiB3ZXJlIHRvIGF0dGVtcHQgdG8gZm9jdXMgaW1tZWRpYXRlbHksIHRoZW4gdGhlIGNvbnRlbnQgb2YgdGhlIGRpYWxvZyB3b3VsZCBub3QgeWV0IGJlXG4gICAgLy8gcmVhZHkgaW4gaW5zdGFuY2VzIHdoZXJlIGNoYW5nZSBkZXRlY3Rpb24gaGFzIHRvIHJ1biBmaXJzdC4gVG8gZGVhbCB3aXRoIHRoaXMsIHdlIHNpbXBseVxuICAgIC8vIHdhaXQgZm9yIHRoZSBtaWNyb3Rhc2sgcXVldWUgdG8gYmUgZW1wdHkuXG4gICAgaWYgKHRoaXMuX2NvbmZpZy5hdXRvRm9jdXMpIHtcbiAgICAgIHRoaXMuX2ZvY3VzVHJhcC5mb2N1c0luaXRpYWxFbGVtZW50V2hlblJlYWR5KCkudGhlbihoYXNNb3ZlZEZvY3VzID0+IHtcbiAgICAgICAgLy8gSWYgd2UgZGlkbid0IGZpbmQgYW55IGZvY3VzYWJsZSBlbGVtZW50cyBpbnNpZGUgdGhlIGRpYWxvZywgZm9jdXMgdGhlXG4gICAgICAgIC8vIGNvbnRhaW5lciBzbyB0aGUgdXNlciBjYW4ndCB0YWIgaW50byBvdGhlciBlbGVtZW50cyBiZWhpbmQgaXQuXG4gICAgICAgIGlmICghaGFzTW92ZWRGb2N1cykge1xuICAgICAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgLyoqIFJldHVybnMgdGhlIGZvY3VzIHRvIHRoZSBlbGVtZW50IGZvY3VzZWQgYmVmb3JlIHRoZSBkaWFsb2cgd2FzIG9wZW4uICovXG4gIHByaXZhdGUgX3JldHVybkZvY3VzQWZ0ZXJEaWFsb2coKSB7XG4gICAgY29uc3QgdG9Gb2N1cyA9IHRoaXMuX2VsZW1lbnRGb2N1c2VkQmVmb3JlRGlhbG9nV2FzT3BlbmVkXG4gICAgLy8gV2UgbmVlZCB0aGUgZXh0cmEgY2hlY2ssIGJlY2F1c2UgSUUgY2FuIHNldCB0aGUgYGFjdGl2ZUVsZW1lbnRgIHRvIG51bGwgaW4gc29tZSBjYXNlcy5cbiAgICBpZiAodG9Gb2N1cyAmJiB0eXBlb2YgdG9Gb2N1cy5mb2N1cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdG9Gb2N1cy5mb2N1cygpXG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldE5hdGl2ZUVsZW1lbnQoKTogSFRNTEVsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnRcbiAgfVxuXG59XG4iXX0=
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ESCAPE } from '@angular/cdk/keycodes';
|
|
2
2
|
import { filter, map } from 'rxjs/operators';
|
|
3
|
+
const DRAG_CLOSE_THRESHOLD = 5;
|
|
3
4
|
/** Unique id for the created dialog. */
|
|
4
5
|
let uniqueId = 0;
|
|
5
6
|
/**
|
|
@@ -12,13 +13,9 @@ export class ModalRef {
|
|
|
12
13
|
this.id = id;
|
|
13
14
|
/** The instance of the component in the dialog. */
|
|
14
15
|
this.componentInstance = null;
|
|
16
|
+
this._clickOutsideCleanup = null;
|
|
15
17
|
// Pass the id along to the container.
|
|
16
18
|
_containerInstance._id = id;
|
|
17
|
-
const _bootstrapBackdropClickListener = () => {
|
|
18
|
-
if (!this.disableClose) {
|
|
19
|
-
this.close();
|
|
20
|
-
}
|
|
21
|
-
};
|
|
22
19
|
// If the dialog has a backdrop, handle clicks from the backdrop.
|
|
23
20
|
if (_containerInstance._config.hasBackdrop) {
|
|
24
21
|
_overlayRef.backdropClick().subscribe(() => {
|
|
@@ -26,32 +23,12 @@ export class ModalRef {
|
|
|
26
23
|
this.close();
|
|
27
24
|
}
|
|
28
25
|
});
|
|
29
|
-
|
|
30
|
-
// Replaced click event because it was easy to accidentally close
|
|
31
|
-
// the dialog by mousing down inside the modal and mousing up outside
|
|
32
|
-
// (like when dragging a map, selecting text, etc)
|
|
33
|
-
let clickStarted = false;
|
|
34
|
-
_overlayRef.overlayElement.addEventListener('mousedown', (event) => {
|
|
35
|
-
// @ts-ignore
|
|
36
|
-
if (!this._isModalMouseEvent(event.path)) {
|
|
37
|
-
clickStarted = true;
|
|
38
|
-
}
|
|
39
|
-
});
|
|
40
|
-
_overlayRef.overlayElement.addEventListener('mouseup', (event) => {
|
|
41
|
-
// @ts-ignore
|
|
42
|
-
if (clickStarted && !this._isModalMouseEvent(event.path)) {
|
|
43
|
-
clickStarted = false;
|
|
44
|
-
_bootstrapBackdropClickListener();
|
|
45
|
-
}
|
|
46
|
-
}, {});
|
|
26
|
+
this._clickOutsideCleanup = this._initCloseOnClickOutside();
|
|
47
27
|
}
|
|
48
28
|
this.beforeClosed().subscribe(() => {
|
|
49
29
|
this._overlayRef.detachBackdrop();
|
|
50
30
|
});
|
|
51
31
|
this.afterClosed().subscribe(() => {
|
|
52
|
-
if (this._containerInstance._config.hasBackdrop) {
|
|
53
|
-
this._overlayRef.overlayElement.removeEventListener('click', _bootstrapBackdropClickListener);
|
|
54
|
-
}
|
|
55
32
|
this._overlayRef.detach();
|
|
56
33
|
this._overlayRef.dispose();
|
|
57
34
|
this.componentInstance = null;
|
|
@@ -62,6 +39,55 @@ export class ModalRef {
|
|
|
62
39
|
.pipe(filter(event => event.keyCode === ESCAPE && !this.disableClose))
|
|
63
40
|
.subscribe(() => this.close());
|
|
64
41
|
}
|
|
42
|
+
_initCloseOnClickOutside() {
|
|
43
|
+
const close = () => {
|
|
44
|
+
if (!this.disableClose) {
|
|
45
|
+
this.close();
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
const isInContainer = (target) => {
|
|
49
|
+
return this._containerInstance.getNativeElement().contains(target);
|
|
50
|
+
};
|
|
51
|
+
const getPosition = (event) => {
|
|
52
|
+
return { x: event.clientX, y: event.clientY };
|
|
53
|
+
};
|
|
54
|
+
const dist = (x1, y1, x2, y2) => {
|
|
55
|
+
return Math.sqrt(Math.pow((x2 - x1), 2) + Math.pow((y2 - y1), 2));
|
|
56
|
+
};
|
|
57
|
+
let pressed = false;
|
|
58
|
+
let pressedPosition = null;
|
|
59
|
+
const _handlePressDown = (event) => {
|
|
60
|
+
pressed = true;
|
|
61
|
+
pressedPosition = getPosition(event);
|
|
62
|
+
};
|
|
63
|
+
const _handlePressUp = (event) => {
|
|
64
|
+
if (pressedPosition) {
|
|
65
|
+
const target = event.target;
|
|
66
|
+
if (target && !isInContainer(target)) {
|
|
67
|
+
const currentPosition = getPosition(event);
|
|
68
|
+
const d = dist(currentPosition.x, currentPosition.y, pressedPosition.x, pressedPosition.y);
|
|
69
|
+
if (d < DRAG_CLOSE_THRESHOLD) {
|
|
70
|
+
close();
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
pressedPosition = null;
|
|
74
|
+
}
|
|
75
|
+
else if (pressed) {
|
|
76
|
+
close();
|
|
77
|
+
}
|
|
78
|
+
pressed = false;
|
|
79
|
+
};
|
|
80
|
+
this._overlayRef.overlayElement.addEventListener('mousedown', _handlePressDown);
|
|
81
|
+
this._overlayRef.overlayElement.addEventListener('pointerdown', _handlePressDown);
|
|
82
|
+
this._overlayRef.overlayElement.addEventListener('mouseup', _handlePressUp);
|
|
83
|
+
this._overlayRef.overlayElement.addEventListener('pointerup', _handlePressUp);
|
|
84
|
+
return () => {
|
|
85
|
+
this._overlayRef.overlayElement.removeEventListener('mousedown', _handlePressDown);
|
|
86
|
+
this._overlayRef.overlayElement.removeEventListener('pointerdown', _handlePressDown);
|
|
87
|
+
this._overlayRef.overlayElement.removeEventListener('mouseup', _handlePressUp);
|
|
88
|
+
this._overlayRef.overlayElement.removeEventListener('pointerup', _handlePressUp);
|
|
89
|
+
};
|
|
90
|
+
}
|
|
65
91
|
/** Gets an observable that emits when the overlay's backdrop has been clicked. */
|
|
66
92
|
backdropClick() {
|
|
67
93
|
return this._overlayRef.backdropClick();
|
|
@@ -73,6 +99,9 @@ export class ModalRef {
|
|
|
73
99
|
close(dialogResult) {
|
|
74
100
|
this._result = dialogResult;
|
|
75
101
|
this._containerInstance._startExiting();
|
|
102
|
+
if (this._clickOutsideCleanup) {
|
|
103
|
+
this._clickOutsideCleanup();
|
|
104
|
+
}
|
|
76
105
|
}
|
|
77
106
|
/**
|
|
78
107
|
* Updates the dialog's position.
|
|
@@ -138,9 +167,5 @@ export class ModalRef {
|
|
|
138
167
|
afterClosed() {
|
|
139
168
|
return this._containerInstance._afterExit.pipe(map(() => this._result));
|
|
140
169
|
}
|
|
141
|
-
// TODO: pull container name in from element, to protect against changes
|
|
142
|
-
_isModalMouseEvent(path) {
|
|
143
|
-
return path.findIndex(p => p.localName === 'seam-modal-container') !== -1;
|
|
144
|
-
}
|
|
145
170
|
}
|
|
146
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtcmVmLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktY29tbW9uL21vZGFsL21vZGFsLXJlZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUE7QUFHOUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUs1Qyx3Q0FBd0M7QUFDeEMsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFBO0FBRWhCOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFFBQVE7SUFVbkIsWUFDUyxXQUF1QixFQUNwQixrQkFBMkMsRUFDNUMsS0FBYSxjQUFjLFFBQVEsRUFBRSxFQUFFO1FBRnpDLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBQ3BCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBeUI7UUFDNUMsT0FBRSxHQUFGLEVBQUUsQ0FBcUM7UUFabEQsbURBQW1EO1FBQ25ELHNCQUFpQixHQUFhLElBQUksQ0FBQTtRQVloQyxzQ0FBc0M7UUFDdEMsa0JBQWtCLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQTtRQUUzQixNQUFNLCtCQUErQixHQUFHLEdBQUcsRUFBRTtZQUMzQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRTtnQkFDdEIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFBO2FBQ2I7UUFDSCxDQUFDLENBQUE7UUFFRCxpRUFBaUU7UUFDakUsSUFBSSxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFO1lBQzFDLFdBQVcsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUN6QyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRTtvQkFDdEIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFBO2lCQUNiO1lBQ0gsQ0FBQyxDQUFDLENBQUE7WUFFRiwwQ0FBMEM7WUFDMUMsaUVBQWlFO1lBQ2pFLHFFQUFxRTtZQUNyRSxrREFBa0Q7WUFDbEQsSUFBSSxZQUFZLEdBQUcsS0FBSyxDQUFDO1lBQ3pCLFdBQVcsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ2pFLGFBQWE7Z0JBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQ3hDLFlBQVksR0FBRyxJQUFJLENBQUE7aUJBQ3BCO1lBQ0gsQ0FBQyxDQUFDLENBQUE7WUFFRixXQUFXLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUMvRCxhQUFhO2dCQUNiLElBQUksWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDeEQsWUFBWSxHQUFHLEtBQUssQ0FBQTtvQkFDcEIsK0JBQStCLEVBQUUsQ0FBQTtpQkFDbEM7WUFDSCxDQUFDLEVBQUUsRUFBRyxDQUFDLENBQUE7U0FDUjtRQUVELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2pDLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUFFLENBQUE7UUFDbkMsQ0FBQyxDQUFDLENBQUE7UUFFRixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNoQyxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFO2dCQUMvQyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsK0JBQStCLENBQUMsQ0FBQTthQUM5RjtZQUNELElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUE7WUFDekIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQTtZQUMxQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFBO1FBQy9CLENBQUMsQ0FBQyxDQUFBO1FBRUYseUNBQXlDO1FBQ3pDLFdBQVcsQ0FBQyxhQUFhLEVBQUU7WUFDekIsdUNBQXVDO2FBQ3RDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQzthQUNyRSxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUE7SUFDbEMsQ0FBQztJQUVELGtGQUFrRjtJQUNsRixhQUFhO1FBQ1gsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUFBO0lBQ3pDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsWUFBZ0I7UUFDcEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxZQUFZLENBQUE7UUFDM0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsRUFBRSxDQUFBO0lBQ3pDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxjQUFjLENBQUMsUUFBeUI7UUFDdEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUE7UUFFNUMsSUFBSSxRQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNqRCxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUE7U0FDOUU7YUFBTTtZQUNMLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxDQUFBO1NBQzlCO1FBRUQsSUFBSSxRQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNqRCxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUE7U0FDN0U7YUFBTTtZQUNMLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFBO1NBQzVCO1FBRUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLEVBQUUsQ0FBQTtRQUVqQyxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFFRDs7T0FFRztJQUNILGFBQWE7UUFDWCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFLENBQUE7SUFDekMsQ0FBQztJQUVEOzs7T0FHRztJQUNILFVBQVUsQ0FBQyxJQUF1QjtRQUNoQyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDZCx1Q0FBdUM7WUFDdkMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQTtTQUN6RDtRQUNELElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNmLHVDQUF1QztZQUN2QyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFBO1NBQzNEO1FBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDakMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLEVBQUUsQ0FBQTtRQUNqQyxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFFRCxpRUFBaUU7SUFDekQsb0JBQW9CO1FBQzFCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxnQkFBMEMsQ0FBQTtJQUNoRixDQUFDO0lBRUQsZ0VBQWdFO0lBQ2hFLFlBQVk7UUFDVixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUE7SUFDNUQsQ0FBQztJQUVELHFFQUFxRTtJQUNyRSxXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFBO0lBQzNELENBQUM7SUFFRCxnRUFBZ0U7SUFDaEUsWUFBWTtRQUNWLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFBO0lBQzFFLENBQUM7SUFFRCxxRUFBcUU7SUFDckUsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFBO0lBQ3pFLENBQUM7SUFFRCx3RUFBd0U7SUFDaEUsa0JBQWtCLENBQUMsSUFBbUI7UUFDNUMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsS0FBSyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO0lBQzNFLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVTQ0FQRSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2RlcydcbmltcG9ydCB7IEdsb2JhbFBvc2l0aW9uU3RyYXRlZ3ksIE92ZXJsYXlSZWYsIE92ZXJsYXlTaXplQ29uZmlnIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcydcbmltcG9ydCB7IGZpbHRlciwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnXG5cbmltcG9ydCB7IElNb2RhbFBvc2l0aW9uIH0gZnJvbSAnLi9tb2RhbC1jb25maWcnXG5pbXBvcnQgeyBNb2RhbENvbnRhaW5lckNvbXBvbmVudCB9IGZyb20gJy4vbW9kYWwtY29udGFpbmVyL21vZGFsLWNvbnRhaW5lci5jb21wb25lbnQnXG5cbi8qKiBVbmlxdWUgaWQgZm9yIHRoZSBjcmVhdGVkIGRpYWxvZy4gKi9cbmxldCB1bmlxdWVJZCA9IDBcblxuLyoqXG4gKiBSZWZlcmVuY2UgdG8gYSBkaWFsb2cgb3BlbmVkIHZpYSB0aGUgRGlhbG9nIHNlcnZpY2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBNb2RhbFJlZjxULCBSID0gYW55PiB7XG4gIC8qKiBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbXBvbmVudCBpbiB0aGUgZGlhbG9nLiAqL1xuICBjb21wb25lbnRJbnN0YW5jZTogVCB8IG51bGwgPSBudWxsXG5cbiAgLyoqIFdoZXRoZXIgdGhlIHVzZXIgaXMgYWxsb3dlZCB0byBjbG9zZSB0aGUgZGlhbG9nLiAqL1xuICBkaXNhYmxlQ2xvc2U6IGJvb2xlYW4gfCB1bmRlZmluZWRcblxuICAvKiogUmVzdWx0IHRvIGJlIHBhc3NlZCB0byBhZnRlckNsb3NlZC4gKi9cbiAgcHJpdmF0ZSBfcmVzdWx0OiBSIHwgdW5kZWZpbmVkXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIF9vdmVybGF5UmVmOiBPdmVybGF5UmVmLFxuICAgIHByb3RlY3RlZCBfY29udGFpbmVySW5zdGFuY2U6IE1vZGFsQ29udGFpbmVyQ29tcG9uZW50LFxuICAgIHJlYWRvbmx5IGlkOiBzdHJpbmcgPSBgc2VhbS1tb2RhbC0ke3VuaXF1ZUlkKyt9YCkge1xuICAgIC8vIFBhc3MgdGhlIGlkIGFsb25nIHRvIHRoZSBjb250YWluZXIuXG4gICAgX2NvbnRhaW5lckluc3RhbmNlLl9pZCA9IGlkXG5cbiAgICBjb25zdCBfYm9vdHN0cmFwQmFja2Ryb3BDbGlja0xpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmRpc2FibGVDbG9zZSkge1xuICAgICAgICB0aGlzLmNsb3NlKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgZGlhbG9nIGhhcyBhIGJhY2tkcm9wLCBoYW5kbGUgY2xpY2tzIGZyb20gdGhlIGJhY2tkcm9wLlxuICAgIGlmIChfY29udGFpbmVySW5zdGFuY2UuX2NvbmZpZy5oYXNCYWNrZHJvcCkge1xuICAgICAgX292ZXJsYXlSZWYuYmFja2Ryb3BDbGljaygpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5kaXNhYmxlQ2xvc2UpIHtcbiAgICAgICAgICB0aGlzLmNsb3NlKClcbiAgICAgICAgfVxuICAgICAgfSlcblxuICAgICAgLy8gTk9URTogRm9yIGN1cnJlbnQgYm9vdHN0cmFwIHN0eWxlIG1vZGFsXG4gICAgICAvLyBSZXBsYWNlZCBjbGljayBldmVudCBiZWNhdXNlIGl0IHdhcyBlYXN5IHRvIGFjY2lkZW50YWxseSBjbG9zZVxuICAgICAgLy8gdGhlIGRpYWxvZyBieSBtb3VzaW5nIGRvd24gaW5zaWRlIHRoZSBtb2RhbCBhbmQgbW91c2luZyB1cCBvdXRzaWRlXG4gICAgICAvLyAobGlrZSB3aGVuIGRyYWdnaW5nIGEgbWFwLCBzZWxlY3RpbmcgdGV4dCwgZXRjKVxuICAgICAgbGV0IGNsaWNrU3RhcnRlZCA9IGZhbHNlO1xuICAgICAgX292ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgKGV2ZW50KSA9PiB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgaWYgKCF0aGlzLl9pc01vZGFsTW91c2VFdmVudChldmVudC5wYXRoKSkge1xuICAgICAgICAgIGNsaWNrU3RhcnRlZCA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfSlcblxuICAgICAgX292ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIChldmVudCkgPT4ge1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGlmIChjbGlja1N0YXJ0ZWQgJiYgIXRoaXMuX2lzTW9kYWxNb3VzZUV2ZW50KGV2ZW50LnBhdGgpKSB7XG4gICAgICAgICAgY2xpY2tTdGFydGVkID0gZmFsc2VcbiAgICAgICAgICBfYm9vdHN0cmFwQmFja2Ryb3BDbGlja0xpc3RlbmVyKClcbiAgICAgICAgfVxuICAgICAgfSwgeyB9KVxuICAgIH1cblxuICAgIHRoaXMuYmVmb3JlQ2xvc2VkKCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuX292ZXJsYXlSZWYuZGV0YWNoQmFja2Ryb3AoKVxuICAgIH0pXG5cbiAgICB0aGlzLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jb250YWluZXJJbnN0YW5jZS5fY29uZmlnLmhhc0JhY2tkcm9wKSB7XG4gICAgICAgIHRoaXMuX292ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCBfYm9vdHN0cmFwQmFja2Ryb3BDbGlja0xpc3RlbmVyKVxuICAgICAgfVxuICAgICAgdGhpcy5fb3ZlcmxheVJlZi5kZXRhY2goKVxuICAgICAgdGhpcy5fb3ZlcmxheVJlZi5kaXNwb3NlKClcbiAgICAgIHRoaXMuY29tcG9uZW50SW5zdGFuY2UgPSBudWxsXG4gICAgfSlcblxuICAgIC8vIENsb3NlIHdoZW4gZXNjYXBlIGtleWRvd24gZXZlbnQgb2NjdXJzXG4gICAgX292ZXJsYXlSZWYua2V5ZG93bkV2ZW50cygpXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6ZGVwcmVjYXRpb25cbiAgICAgIC5waXBlKGZpbHRlcihldmVudCA9PiBldmVudC5rZXlDb2RlID09PSBFU0NBUEUgJiYgIXRoaXMuZGlzYWJsZUNsb3NlKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jbG9zZSgpKVxuICB9XG5cbiAgLyoqIEdldHMgYW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHdoZW4gdGhlIG92ZXJsYXkncyBiYWNrZHJvcCBoYXMgYmVlbiBjbGlja2VkLiAqL1xuICBiYWNrZHJvcENsaWNrKCk6IE9ic2VydmFibGU8TW91c2VFdmVudD4ge1xuICAgIHJldHVybiB0aGlzLl9vdmVybGF5UmVmLmJhY2tkcm9wQ2xpY2soKVxuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlIHRoZSBkaWFsb2cuXG4gICAqIEBwYXJhbSBkaWFsb2dSZXN1bHQgT3B0aW9uYWwgcmVzdWx0IHRvIHJldHVybiB0byB0aGUgZGlhbG9nIG9wZW5lci5cbiAgICovXG4gIGNsb3NlKGRpYWxvZ1Jlc3VsdD86IFIpOiB2b2lkIHtcbiAgICB0aGlzLl9yZXN1bHQgPSBkaWFsb2dSZXN1bHRcbiAgICB0aGlzLl9jb250YWluZXJJbnN0YW5jZS5fc3RhcnRFeGl0aW5nKClcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBkaWFsb2cncyBwb3NpdGlvbi5cbiAgICogQHBhcmFtIHBvc2l0aW9uIE5ldyBkaWFsb2cgcG9zaXRpb24uXG4gICAqL1xuICB1cGRhdGVQb3NpdGlvbihwb3NpdGlvbj86IElNb2RhbFBvc2l0aW9uKTogdGhpcyB7XG4gICAgY29uc3Qgc3RyYXRlZ3kgPSB0aGlzLl9nZXRQb3NpdGlvblN0cmF0ZWd5KClcblxuICAgIGlmIChwb3NpdGlvbiAmJiAocG9zaXRpb24ubGVmdCB8fCBwb3NpdGlvbi5yaWdodCkpIHtcbiAgICAgIHBvc2l0aW9uLmxlZnQgPyBzdHJhdGVneS5sZWZ0KHBvc2l0aW9uLmxlZnQpIDogc3RyYXRlZ3kucmlnaHQocG9zaXRpb24ucmlnaHQpXG4gICAgfSBlbHNlIHtcbiAgICAgIHN0cmF0ZWd5LmNlbnRlckhvcml6b250YWxseSgpXG4gICAgfVxuXG4gICAgaWYgKHBvc2l0aW9uICYmIChwb3NpdGlvbi50b3AgfHwgcG9zaXRpb24uYm90dG9tKSkge1xuICAgICAgcG9zaXRpb24udG9wID8gc3RyYXRlZ3kudG9wKHBvc2l0aW9uLnRvcCkgOiBzdHJhdGVneS5ib3R0b20ocG9zaXRpb24uYm90dG9tKVxuICAgIH0gZWxzZSB7XG4gICAgICBzdHJhdGVneS5jZW50ZXJWZXJ0aWNhbGx5KClcbiAgICB9XG5cbiAgICB0aGlzLl9vdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKClcblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogR2V0cyBhbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgd2hlbiBrZXlkb3duIGV2ZW50cyBhcmUgdGFyZ2V0ZWQgb24gdGhlIG92ZXJsYXkuXG4gICAqL1xuICBrZXlkb3duRXZlbnRzKCk6IE9ic2VydmFibGU8S2V5Ym9hcmRFdmVudD4ge1xuICAgIHJldHVybiB0aGlzLl9vdmVybGF5UmVmLmtleWRvd25FdmVudHMoKVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGRpYWxvZydzIHdpZHRoIGFuZCBoZWlnaHQsIGRlZmluZWQsIG1pbiBhbmQgbWF4LlxuICAgKiBAcGFyYW0gc2l6ZSBOZXcgc2l6ZSBmb3IgdGhlIG92ZXJsYXkuXG4gICAqL1xuICB1cGRhdGVTaXplKHNpemU6IE92ZXJsYXlTaXplQ29uZmlnKTogdGhpcyB7XG4gICAgaWYgKHNpemUud2lkdGgpIHtcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpkZXByZWNhdGlvblxuICAgICAgdGhpcy5fZ2V0UG9zaXRpb25TdHJhdGVneSgpLndpZHRoKHNpemUud2lkdGgudG9TdHJpbmcoKSlcbiAgICB9XG4gICAgaWYgKHNpemUuaGVpZ2h0KSB7XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6ZGVwcmVjYXRpb25cbiAgICAgIHRoaXMuX2dldFBvc2l0aW9uU3RyYXRlZ3koKS5oZWlnaHQoc2l6ZS5oZWlnaHQudG9TdHJpbmcoKSlcbiAgICB9XG4gICAgdGhpcy5fb3ZlcmxheVJlZi51cGRhdGVTaXplKHNpemUpXG4gICAgdGhpcy5fb3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKiBGZXRjaGVzIHRoZSBwb3NpdGlvbiBzdHJhdGVneSBvYmplY3QgZnJvbSB0aGUgb3ZlcmxheSByZWYuICovXG4gIHByaXZhdGUgX2dldFBvc2l0aW9uU3RyYXRlZ3koKTogR2xvYmFsUG9zaXRpb25TdHJhdGVneSB7XG4gICAgcmV0dXJuIHRoaXMuX292ZXJsYXlSZWYuZ2V0Q29uZmlnKCkucG9zaXRpb25TdHJhdGVneSBhcyBHbG9iYWxQb3NpdGlvblN0cmF0ZWd5XG4gIH1cblxuICAvKiogR2V0cyBhbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgd2hlbiBkaWFsb2cgYmVnaW5zIG9wZW5pbmcuICovXG4gIGJlZm9yZU9wZW5lZCgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fY29udGFpbmVySW5zdGFuY2UuX2JlZm9yZUVudGVyLmFzT2JzZXJ2YWJsZSgpXG4gIH1cblxuICAvKiogR2V0cyBhbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgd2hlbiBkaWFsb2cgaXMgZmluaXNoZWQgb3BlbmluZy4gKi9cbiAgYWZ0ZXJPcGVuZWQoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbnRhaW5lckluc3RhbmNlLl9hZnRlckVudGVyLmFzT2JzZXJ2YWJsZSgpXG4gIH1cblxuICAvKiogR2V0cyBhbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgd2hlbiBkaWFsb2cgYmVnaW5zIGNsb3NpbmcuICovXG4gIGJlZm9yZUNsb3NlZCgpOiBPYnNlcnZhYmxlPFIgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fY29udGFpbmVySW5zdGFuY2UuX2JlZm9yZUV4aXQucGlwZShtYXAoKCkgPT4gdGhpcy5fcmVzdWx0KSlcbiAgfVxuXG4gIC8qKiBHZXRzIGFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB3aGVuIGRpYWxvZyBpcyBmaW5pc2hlZCBjbG9zaW5nLiAqL1xuICBhZnRlckNsb3NlZCgpOiBPYnNlcnZhYmxlPFIgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fY29udGFpbmVySW5zdGFuY2UuX2FmdGVyRXhpdC5waXBlKG1hcCgoKSA9PiB0aGlzLl9yZXN1bHQpKVxuICB9XG5cbiAgLy8gVE9ETzogcHVsbCBjb250YWluZXIgbmFtZSBpbiBmcm9tIGVsZW1lbnQsIHRvIHByb3RlY3QgYWdhaW5zdCBjaGFuZ2VzXG4gIHByaXZhdGUgX2lzTW9kYWxNb3VzZUV2ZW50KHBhdGg6IEhUTUxFbGVtZW50W10pOiBib29sZWFuIHtcbiAgICByZXR1cm4gcGF0aC5maW5kSW5kZXgocCA9PiBwLmxvY2FsTmFtZSA9PT0gJ3NlYW0tbW9kYWwtY29udGFpbmVyJykgIT09IC0xXG4gIH1cbn1cbiJdfQ==
|
|
171
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtcmVmLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktY29tbW9uL21vZGFsL21vZGFsLXJlZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUE7QUFHOUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUs1QyxNQUFNLG9CQUFvQixHQUFHLENBQUMsQ0FBQTtBQUU5Qix3Q0FBd0M7QUFDeEMsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFBO0FBRWhCOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFFBQVE7SUFZbkIsWUFDUyxXQUF1QixFQUNwQixrQkFBMkMsRUFDNUMsS0FBYSxjQUFjLFFBQVEsRUFBRSxFQUFFO1FBRnpDLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBQ3BCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBeUI7UUFDNUMsT0FBRSxHQUFGLEVBQUUsQ0FBcUM7UUFkbEQsbURBQW1EO1FBQ25ELHNCQUFpQixHQUFhLElBQUksQ0FBQTtRQVExQix5QkFBb0IsR0FBd0IsSUFBSSxDQUFBO1FBTXRELHNDQUFzQztRQUN0QyxrQkFBa0IsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFBO1FBRTNCLGlFQUFpRTtRQUNqRSxJQUFJLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUU7WUFDMUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ3pDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFO29CQUN0QixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUE7aUJBQ2I7WUFDSCxDQUFDLENBQUMsQ0FBQTtZQUVGLElBQUksQ0FBQyxvQkFBb0IsR0FBSSxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQTtTQUM3RDtRQUVELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FB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bnQiOlsiaW1wb3J0IHsgRVNDQVBFIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJ1xuaW1wb3J0IHsgR2xvYmFsUG9zaXRpb25TdHJhdGVneSwgT3ZlcmxheVJlZiwgT3ZlcmxheVNpemVDb25maWcgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSdcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgZmlsdGVyLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcblxuaW1wb3J0IHsgSU1vZGFsUG9zaXRpb24gfSBmcm9tICcuL21vZGFsLWNvbmZpZydcbmltcG9ydCB7IE1vZGFsQ29udGFpbmVyQ29tcG9uZW50IH0gZnJvbSAnLi9tb2RhbC1jb250YWluZXIvbW9kYWwtY29udGFpbmVyLmNvbXBvbmVudCdcblxuY29uc3QgRFJBR19DTE9TRV9USFJFU0hPTEQgPSA1XG5cbi8qKiBVbmlxdWUgaWQgZm9yIHRoZSBjcmVhdGVkIGRpYWxvZy4gKi9cbmxldCB1bmlxdWVJZCA9IDBcblxuLyoqXG4gKiBSZWZlcmVuY2UgdG8gYSBkaWFsb2cgb3BlbmVkIHZpYSB0aGUgRGlhbG9nIHNlcnZpY2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBNb2RhbFJlZjxULCBSID0gYW55PiB7XG4gIC8qKiBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbXBvbmVudCBpbiB0aGUgZGlhbG9nLiAqL1xuICBjb21wb25lbnRJbnN0YW5jZTogVCB8IG51bGwgPSBudWxsXG5cbiAgLyoqIFdoZXRoZXIgdGhlIHVzZXIgaXMgYWxsb3dlZCB0byBjbG9zZSB0aGUgZGlhbG9nLiAqL1xuICBkaXNhYmxlQ2xvc2U6IGJvb2xlYW4gfCB1bmRlZmluZWRcblxuICAvKiogUmVzdWx0IHRvIGJlIHBhc3NlZCB0byBhZnRlckNsb3NlZC4gKi9cbiAgcHJpdmF0ZSBfcmVzdWx0OiBSIHwgdW5kZWZpbmVkXG5cbiAgcHJpdmF0ZSBfY2xpY2tPdXRzaWRlQ2xlYW51cDogKCgpID0+IHZvaWQpIHwgbnVsbCA9IG51bGxcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgX292ZXJsYXlSZWY6IE92ZXJsYXlSZWYsXG4gICAgcHJvdGVjdGVkIF9jb250YWluZXJJbnN0YW5jZTogTW9kYWxDb250YWluZXJDb21wb25lbnQsXG4gICAgcmVhZG9ubHkgaWQ6IHN0cmluZyA9IGBzZWFtLW1vZGFsLSR7dW5pcXVlSWQrK31gKSB7XG4gICAgLy8gUGFzcyB0aGUgaWQgYWxvbmcgdG8gdGhlIGNvbnRhaW5lci5cbiAgICBfY29udGFpbmVySW5zdGFuY2UuX2lkID0gaWRcblxuICAgIC8vIElmIHRoZSBkaWFsb2cgaGFzIGEgYmFja2Ryb3AsIGhhbmRsZSBjbGlja3MgZnJvbSB0aGUgYmFja2Ryb3AuXG4gICAgaWYgKF9jb250YWluZXJJbnN0YW5jZS5fY29uZmlnLmhhc0JhY2tkcm9wKSB7XG4gICAgICBfb3ZlcmxheVJlZi5iYWNrZHJvcENsaWNrKCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmRpc2FibGVDbG9zZSkge1xuICAgICAgICAgIHRoaXMuY2xvc2UoKVxuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgICB0aGlzLl9jbGlja091dHNpZGVDbGVhbnVwID0gIHRoaXMuX2luaXRDbG9zZU9uQ2xpY2tPdXRzaWRlKClcbiAgICB9XG5cbiAgICB0aGlzLmJlZm9yZUNsb3NlZCgpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLl9vdmVybGF5UmVmLmRldGFjaEJhY2tkcm9wKClcbiAgICB9KVxuXG4gICAgdGhpcy5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLl9vdmVybGF5UmVmLmRldGFjaCgpXG4gICAgICB0aGlzLl9vdmVybGF5UmVmLmRpc3Bvc2UoKVxuICAgICAgdGhpcy5jb21wb25lbnRJbnN0YW5jZSA9IG51bGxcbiAgICB9KVxuXG4gICAgLy8gQ2xvc2Ugd2hlbiBlc2NhcGUga2V5ZG93biBldmVudCBvY2N1cnNcbiAgICBfb3ZlcmxheVJlZi5rZXlkb3duRXZlbnRzKClcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpkZXByZWNhdGlvblxuICAgICAgLnBpcGUoZmlsdGVyKGV2ZW50ID0+IGV2ZW50LmtleUNvZGUgPT09IEVTQ0FQRSAmJiAhdGhpcy5kaXNhYmxlQ2xvc2UpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNsb3NlKCkpXG4gIH1cblxuICBwcml2YXRlIF9pbml0Q2xvc2VPbkNsaWNrT3V0c2lkZSgpOiAoKSA9PiB2b2lkIHtcbiAgICBjb25zdCBjbG9zZSA9ICgpID0+IHtcbiAgICAgIGlmICghdGhpcy5kaXNhYmxlQ2xvc2UpIHtcbiAgICAgICAgdGhpcy5jbG9zZSgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgaXNJbkNvbnRhaW5lciA9ICh0YXJnZXQ6IEhUTUxFbGVtZW50IHwgbnVsbCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuX2NvbnRhaW5lckluc3RhbmNlLmdldE5hdGl2ZUVsZW1lbnQoKS5jb250YWlucyh0YXJnZXQpXG4gICAgfVxuXG4gICAgY29uc3QgZ2V0UG9zaXRpb24gPSAoZXZlbnQ6IE1vdXNlRXZlbnQgfCBQb2ludGVyRXZlbnQpOiB7IHg6IG51bWJlciwgeTogbnVtYmVyIH0gPT4ge1xuICAgICAgcmV0dXJuIHsgeDogZXZlbnQuY2xpZW50WCwgeTogZXZlbnQuY2xpZW50WSB9XG4gICAgfVxuXG4gICAgY29uc3QgZGlzdCA9ICh4MTogbnVtYmVyLCB5MTogbnVtYmVyLCB4MjogbnVtYmVyLCB5MjogbnVtYmVyKTogbnVtYmVyID0+IHtcbiAgICAgIHJldHVybiBNYXRoLnNxcnQoIE1hdGgucG93KCh4MiAtIHgxKSwgMikgKyBNYXRoLnBvdygoeTIgLSB5MSksIDIpIClcbiAgICB9XG5cbiAgICBsZXQgcHJlc3NlZCA9IGZhbHNlXG4gICAgbGV0IHByZXNzZWRQb3NpdGlvbjogeyB4OiBudW1iZXIsIHk6IG51bWJlciB9IHwgbnVsbCA9IG51bGxcbiAgICBjb25zdCBfaGFuZGxlUHJlc3NEb3duID0gKGV2ZW50OiBNb3VzZUV2ZW50IHwgUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgICBwcmVzc2VkID0gdHJ1ZVxuICAgICAgcHJlc3NlZFBvc2l0aW9uID0gZ2V0UG9zaXRpb24oZXZlbnQpXG4gICAgfVxuXG4gICAgY29uc3QgX2hhbmRsZVByZXNzVXAgPSAoZXZlbnQ6IE1vdXNlRXZlbnQgfCBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgIGlmIChwcmVzc2VkUG9zaXRpb24pIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50IHwgbnVsbFxuICAgICAgICBpZiAodGFyZ2V0ICYmICFpc0luQ29udGFpbmVyKHRhcmdldCkpIHtcbiAgICAgICAgICBjb25zdCBjdXJyZW50UG9zaXRpb24gPSBnZXRQb3NpdGlvbihldmVudClcbiAgICAgICAgICBjb25zdCBkID0gZGlzdChjdXJyZW50UG9zaXRpb24ueCwgY3VycmVudFBvc2l0aW9uLnksIHByZXNzZWRQb3NpdGlvbi54LCBwcmVzc2VkUG9zaXRpb24ueSlcbiAgICAgICAgICBpZiAoZCA8IERSQUdfQ0xPU0VfVEhSRVNIT0xEKSB7XG4gICAgICAgICAgICBjbG9zZSgpXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcHJlc3NlZFBvc2l0aW9uID0gbnVsbFxuICAgICAgfSBlbHNlIGlmIChwcmVzc2VkKSB7XG4gICAgICAgIGNsb3NlKClcbiAgICAgIH1cbiAgICAgIHByZXNzZWQgPSBmYWxzZVxuICAgIH1cblxuICAgIHRoaXMuX292ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgX2hhbmRsZVByZXNzRG93bilcbiAgICB0aGlzLl9vdmVybGF5UmVmLm92ZXJsYXlFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgX2hhbmRsZVByZXNzRG93bilcblxuICAgIHRoaXMuX292ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIF9oYW5kbGVQcmVzc1VwKVxuICAgIHRoaXMuX292ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcnVwJywgX2hhbmRsZVByZXNzVXApXG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgdGhpcy5fb3ZlcmxheVJlZi5vdmVybGF5RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBfaGFuZGxlUHJlc3NEb3duKVxuICAgICAgdGhpcy5fb3ZlcmxheVJlZi5vdmVybGF5RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdwb2ludGVyZG93bicsIF9oYW5kbGVQcmVzc0Rvd24pXG5cbiAgICAgIHRoaXMuX292ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIF9oYW5kbGVQcmVzc1VwKVxuICAgICAgdGhpcy5fb3ZlcmxheVJlZi5vdmVybGF5RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdwb2ludGVydXAnLCBfaGFuZGxlUHJlc3NVcClcbiAgICB9XG4gIH1cblxuICAvKiogR2V0cyBhbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgd2hlbiB0aGUgb3ZlcmxheSdzIGJhY2tkcm9wIGhhcyBiZWVuIGNsaWNrZWQuICovXG4gIGJhY2tkcm9wQ2xpY2soKTogT2JzZXJ2YWJsZTxNb3VzZUV2ZW50PiB7XG4gICAgcmV0dXJuIHRoaXMuX292ZXJsYXlSZWYuYmFja2Ryb3BDbGljaygpXG4gIH1cblxuICAvKipcbiAgICogQ2xvc2UgdGhlIGRpYWxvZy5cbiAgICogQHBhcmFtIGRpYWxvZ1Jlc3VsdCBPcHRpb25hbCByZXN1bHQgdG8gcmV0dXJuIHRvIHRoZSBkaWFsb2cgb3BlbmVyLlxuICAgKi9cbiAgY2xvc2UoZGlhbG9nUmVzdWx0PzogUik6IHZvaWQge1xuICAgIHRoaXMuX3Jlc3VsdCA9IGRpYWxvZ1Jlc3VsdFxuICAgIHRoaXMuX2NvbnRhaW5lckluc3RhbmNlLl9zdGFydEV4aXRpbmcoKVxuICAgIGlmICh0aGlzLl9jbGlja091dHNpZGVDbGVhbnVwKSB7dGhpcy5fY2xpY2tPdXRzaWRlQ2xlYW51cCgpfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGRpYWxvZydzIHBvc2l0aW9uLlxuICAgKiBAcGFyYW0gcG9zaXRpb24gTmV3IGRpYWxvZyBwb3NpdGlvbi5cbiAgICovXG4gIHVwZGF0ZVBvc2l0aW9uKHBvc2l0aW9uPzogSU1vZGFsUG9zaXRpb24pOiB0aGlzIHtcbiAgICBjb25zdCBzdHJhdGVneSA9IHRoaXMuX2dldFBvc2l0aW9uU3RyYXRlZ3koKVxuXG4gICAgaWYgKHBvc2l0aW9uICYmIChwb3NpdGlvbi5sZWZ0IHx8IHBvc2l0aW9uLnJpZ2h0KSkge1xuICAgICAgcG9zaXRpb24ubGVmdCA/IHN0cmF0ZWd5LmxlZnQocG9zaXRpb24ubGVmdCkgOiBzdHJhdGVneS5yaWdodChwb3NpdGlvbi5yaWdodClcbiAgICB9IGVsc2Uge1xuICAgICAgc3RyYXRlZ3kuY2VudGVySG9yaXpvbnRhbGx5KClcbiAgICB9XG5cbiAgICBpZiAocG9zaXRpb24gJiYgKHBvc2l0aW9uLnRvcCB8fCBwb3NpdGlvbi5ib3R0b20pKSB7XG4gICAgICBwb3NpdGlvbi50b3AgPyBzdHJhdGVneS50b3AocG9zaXRpb24udG9wKSA6IHN0cmF0ZWd5LmJvdHRvbShwb3NpdGlvbi5ib3R0b20pXG4gICAgfSBlbHNlIHtcbiAgICAgIHN0cmF0ZWd5LmNlbnRlclZlcnRpY2FsbHkoKVxuICAgIH1cblxuICAgIHRoaXMuX292ZXJsYXlSZWYudXBkYXRlUG9zaXRpb24oKVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB3aGVuIGtleWRvd24gZXZlbnRzIGFyZSB0YXJnZXRlZCBvbiB0aGUgb3ZlcmxheS5cbiAgICovXG4gIGtleWRvd25FdmVudHMoKTogT2JzZXJ2YWJsZTxLZXlib2FyZEV2ZW50PiB7XG4gICAgcmV0dXJuIHRoaXMuX292ZXJsYXlSZWYua2V5ZG93bkV2ZW50cygpXG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgZGlhbG9nJ3Mgd2lkdGggYW5kIGhlaWdodCwgZGVmaW5lZCwgbWluIGFuZCBtYXguXG4gICAqIEBwYXJhbSBzaXplIE5ldyBzaXplIGZvciB0aGUgb3ZlcmxheS5cbiAgICovXG4gIHVwZGF0ZVNpemUoc2l6ZTogT3ZlcmxheVNpemVDb25maWcpOiB0aGlzIHtcbiAgICBpZiAoc2l6ZS53aWR0aCkge1xuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmRlcHJlY2F0aW9uXG4gICAgICB0aGlzLl9nZXRQb3NpdGlvblN0cmF0ZWd5KCkud2lkdGgoc2l6ZS53aWR0aC50b1N0cmluZygpKVxuICAgIH1cbiAgICBpZiAoc2l6ZS5oZWlnaHQpIHtcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpkZXByZWNhdGlvblxuICAgICAgdGhpcy5fZ2V0UG9zaXRpb25TdHJhdGVneSgpLmhlaWdodChzaXplLmhlaWdodC50b1N0cmluZygpKVxuICAgIH1cbiAgICB0aGlzLl9vdmVybGF5UmVmLnVwZGF0ZVNpemUoc2l6ZSlcbiAgICB0aGlzLl9vdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKClcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqIEZldGNoZXMgdGhlIHBvc2l0aW9uIHN0cmF0ZWd5IG9iamVjdCBmcm9tIHRoZSBvdmVybGF5IHJlZi4gKi9cbiAgcHJpdmF0ZSBfZ2V0UG9zaXRpb25TdHJhdGVneSgpOiBHbG9iYWxQb3NpdGlvblN0cmF0ZWd5IHtcbiAgICByZXR1cm4gdGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKS5wb3NpdGlvblN0cmF0ZWd5IGFzIEdsb2JhbFBvc2l0aW9uU3RyYXRlZ3lcbiAgfVxuXG4gIC8qKiBHZXRzIGFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB3aGVuIGRpYWxvZyBiZWdpbnMgb3BlbmluZy4gKi9cbiAgYmVmb3JlT3BlbmVkKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLl9jb250YWluZXJJbnN0YW5jZS5fYmVmb3JlRW50ZXIuYXNPYnNlcnZhYmxlKClcbiAgfVxuXG4gIC8qKiBHZXRzIGFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB3aGVuIGRpYWxvZyBpcyBmaW5pc2hlZCBvcGVuaW5nLiAqL1xuICBhZnRlck9wZW5lZCgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fY29udGFpbmVySW5zdGFuY2UuX2FmdGVyRW50ZXIuYXNPYnNlcnZhYmxlKClcbiAgfVxuXG4gIC8qKiBHZXRzIGFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB3aGVuIGRpYWxvZyBiZWdpbnMgY2xvc2luZy4gKi9cbiAgYmVmb3JlQ2xvc2VkKCk6IE9ic2VydmFibGU8UiB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiB0aGlzLl9jb250YWluZXJJbnN0YW5jZS5fYmVmb3JlRXhpdC5waXBlKG1hcCgoKSA9PiB0aGlzLl9yZXN1bHQpKVxuICB9XG5cbiAgLyoqIEdldHMgYW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHdoZW4gZGlhbG9nIGlzIGZpbmlzaGVkIGNsb3NpbmcuICovXG4gIGFmdGVyQ2xvc2VkKCk6IE9ic2VydmFibGU8UiB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiB0aGlzLl9jb250YWluZXJJbnN0YW5jZS5fYWZ0ZXJFeGl0LnBpcGUobWFwKCgpID0+IHRoaXMuX3Jlc3VsdCkpXG4gIH1cbn1cbiJdfQ==
|
|
@@ -670,7 +670,7 @@ class JexlEvaluator {
|
|
|
670
670
|
this.type = 'jexl';
|
|
671
671
|
this._jexl = new jexl.Jexl();
|
|
672
672
|
this._jexl.addTransform('date', (val, row) => new DatePipe('en-US').transform(val, 'yyyy-MM-dd h:mm aaa'));
|
|
673
|
-
this._jexl.addTransform('length', (val) => val.length);
|
|
673
|
+
this._jexl.addTransform('length', (val) => val !== null && val !== undefined ? val.length : 0);
|
|
674
674
|
}
|
|
675
675
|
eval(value, context) {
|
|
676
676
|
return this._jexl.eval(value.expr, context);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theseam-ui-common-dynamic.js","sources":["../../../projects/ui-common/dynamic/tokens/dynamic-value-evaluator.ts","../../../projects/ui-common/dynamic/dynamic-value-helper.service.ts","../../../projects/ui-common/dynamic/tokens/api-config.ts","../../../projects/ui-common/dynamic/action/api/dynamic-action-api-errors.ts","../../../projects/ui-common/dynamic/action/api/dynamic-action-api.service.ts","../../../projects/ui-common/dynamic/action/link/dynamic-action-link.service.ts","../../../projects/ui-common/dynamic/tokens/dynamic-action.ts","../../../projects/ui-common/dynamic/action/dynamic-action-helper.service.ts","../../../projects/ui-common/dynamic/action/modal/dynamic-action-modal.service.ts","../../../projects/ui-common/dynamic/evaluators/exporters-data-evaluator/exporters-data-evaluator.ts","../../../projects/ui-common/dynamic/evaluators/jexl-evaluator/jexl-evaluator.ts","../../../projects/ui-common/dynamic/models/dynamic-action-def.ts","../../../projects/ui-common/dynamic/tokens/dynamic-data.ts","../../../projects/ui-common/dynamic/utils/is-action-type.ts","../../../projects/ui-common/dynamic/theseam-ui-common-dynamic.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core'\n\nimport { IDynamicValueEvaluator } from '../models/dynamic-value-evaluator'\n\nexport const THESEAM_DYNAMIC_VALUE_EVALUATOR = new InjectionToken<IDynamicValueEvaluator>(\n 'Evaluator that can be used for evaluating a DynamicValue'\n)\n","import { Inject, Injectable, isDevMode } from '@angular/core'\n\nimport { DynamicValue } from './models/dynamic-value'\nimport { DynamicValueEvaluatableType } from './models/dynamic-value-evaluatable-type'\nimport { IDynamicValueEvaluator } from './models/dynamic-value-evaluator'\nimport { IDynamicValueType } from './models/dynamic-value-type'\nimport { THESEAM_DYNAMIC_VALUE_EVALUATOR } from './tokens/dynamic-value-evaluator'\n\n/**\n *\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class DynamicValueHelperService {\n\n private _evaluatorMap = new Map<string, IDynamicValueEvaluator>()\n\n constructor(\n @Inject(THESEAM_DYNAMIC_VALUE_EVALUATOR) evaluators: IDynamicValueEvaluator[]\n ) {\n // Only one evaluator should exist for a type, so map them for faster lookup.\n for (const e of evaluators) {\n if (isDevMode()) {\n if (this._evaluatorMap.has(e.type)) {\n console.warn(`[DynamicValueHelperService] Multiple evaluators found for type '${e.type}'`)\n }\n }\n this._evaluatorMap.set(e.type, e)\n }\n }\n\n /**\n * Evaluate a dynamic value to its actual value.\n *\n * TODO: Improve context and return typing.\n */\n public eval<R>(value: DynamicValue<R>, context?: any): Promise<R> {\n if (this.isEvaluatableType(value, true)) {\n return this._evalEvaluatable(value, context)\n }\n\n // Use `evalSync` if `eval` isn't provided and `evalSync` is.\n if (this.isEvaluatableType(value, false)) {\n return Promise.resolve<R>(this._evalEvaluatableSync(value, context))\n }\n\n return Promise.resolve<R>(value)\n }\n\n /**\n * Evaluate a dynamic value to its actual value.\n *\n * TODO: Improve context and return typing.\n */\n public evalSync<R>(value: DynamicValue<R>, context?: any): R {\n if (this.isEvaluatableType(value, false)) {\n return this._evalEvaluatableSync(value, context)\n }\n\n return value\n }\n\n /**\n * Checks if a DynamicValue is a type that can be evaluated.\n */\n public isEvaluatableType<R>(value: DynamicValue<R>, isAsync: boolean): value is DynamicValueEvaluatableType<R> {\n if (value === undefined || value === null) {\n return false\n }\n\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n return false\n }\n\n if (!(<DynamicValueEvaluatableType<R>>value).type) {\n return false\n }\n\n if (this._evaluatorMap.has((<DynamicValueEvaluatableType<R>>value).type)) {\n return true\n }\n\n return false\n }\n\n /**\n *\n */\n private _evalEvaluatable<R>(value: DynamicValueEvaluatableType<R>, context?: any): Promise<R> {\n const evaluator = this._evaluatorMap.get(value.type)\n if (!evaluator) {\n throw Error(`[DynamicValueHelperService] Evaluator '${value ? value.type : undefined}' not found.`)\n }\n if (!evaluator.eval) {\n throw Error(`[DynamicValueHelperService] Evaluator '${value ? value.type : undefined}' does not implement 'eval()'.`)\n }\n return evaluator.eval(value, context)\n }\n\n /**\n *\n */\n private _evalEvaluatableSync<R>(value: DynamicValueEvaluatableType<R>, context?: any): R {\n const evaluator = this._evaluatorMap.get(value.type)\n if (!evaluator) {\n throw Error(`[DynamicValueHelperService] Evaluator '${value ? value.type : undefined}' not found.`)\n }\n if (!evaluator.evalSync) {\n throw Error(`[DynamicValueHelperService] Evaluator '${value ? value.type : undefined}' does not implement 'evalSync()'.`)\n }\n return evaluator.evalSync(value, context)\n }\n\n}\n","import { InjectionToken } from '@angular/core'\n\nimport { DynamicValue } from '../models/dynamic-value'\n\nexport type ApiRequestMethodHeader = string | { [name: string]: string | string[] }\n\nexport interface ApiRequestMethodHeaders {\n 'GET'?: ApiRequestMethodHeader\n 'POST'?: ApiRequestMethodHeader\n 'PUT'?: ApiRequestMethodHeader\n 'PATCH'?: ApiRequestMethodHeader\n 'DELETE'?: ApiRequestMethodHeader\n}\n\nexport const VALID_REQUEST_METHODS: (keyof ApiRequestMethodHeaders)[] = [\n 'GET',\n 'POST',\n 'PUT',\n 'PATCH',\n 'DELETE'\n]\n\nexport function isValidRequestMethod(method: string): method is keyof ApiRequestMethodHeaders {\n return VALID_REQUEST_METHODS.indexOf(method as any) !== -1\n}\n\nexport interface IApiConfig {\n /**\n * Used to identify this config if multiple are provided.\n */\n id?: string\n\n /**\n * Base url that non-absolute endpoints will be appended to.\n */\n url?: DynamicValue<string>\n\n /**\n * Default headers to add to requests.\n */\n methodHeaders?: ApiRequestMethodHeaders\n}\n\nexport const THESEAM_API_CONFIG_DEFAULT: IApiConfig = {\n url: '/',\n\n methodHeaders: {\n 'GET': { 'Content-Type': 'application/json' },\n 'POST': { 'Content-Type': 'application/json' },\n 'PUT': { 'Content-Type': 'application/json' },\n 'PATCH': { 'Content-Type': 'application/json' },\n 'DELETE': { 'Content-Type': 'application/json' }\n }\n}\n\n// export const THESEAM_API_CONFIG = new InjectionToken<IApiConfig[]>(\n// 'Api config token, config options for actions that make an api request in library'\n// )\n\nexport const THESEAM_API_CONFIG = new InjectionToken<IApiConfig[]>(\n 'Api config token, config options for actions that make an api request in library', {\n providedIn: 'root',\n factory: () => [ THESEAM_API_CONFIG_DEFAULT ]\n })\n","\nexport function dynamicActionApiNotSupportedError(): Error {\n return Error(`Dynamic action type 'api' not supported.`)\n}\n","import { HttpClient, HttpHeaders } from '@angular/common/http'\nimport { Inject, Injectable, isDevMode, Optional } from '@angular/core'\nimport { from } from 'rxjs'\nimport { switchMap } from 'rxjs/operators'\n\nimport { isAbsoluteUrl } from '@theseam/ui-common/utils'\n\nimport { DynamicValueHelperService } from '../../dynamic-value-helper.service'\nimport { DynamicActionUiButtonDef } from '../../models/dynamic-action-ui-button-def'\nimport { DynamicValue } from '../../models/dynamic-value'\nimport { ApiRequestMethodHeader, ApiRequestMethodHeaders, IApiConfig, isValidRequestMethod, THESEAM_API_CONFIG, VALID_REQUEST_METHODS } from '../../tokens/api-config'\n\nimport { DynamicActionApi } from './dynamic-action-api'\nimport { DynamicActionApiDef } from './dynamic-action-api-def'\nimport { dynamicActionApiNotSupportedError } from './dynamic-action-api-errors'\n\n/**\n * Handles execution of api call actions.\n *\n * This action service should be generic enough to\n * work with any url endpoint, but will be biased towards our api where needed.\n */\n@Injectable()\nexport class DynamicActionApiService implements DynamicActionApi {\n\n readonly type = 'api'\n\n label = 'Api Action'\n\n constructor(\n private _valueHelper: DynamicValueHelperService,\n @Optional() private _http: HttpClient,\n @Optional() @Inject(THESEAM_API_CONFIG) private _configs: IApiConfig[]\n ) { }\n\n public exec(args: DynamicActionApiDef, context: any): Promise<any> {\n if (!this._isSupported()) {\n throw dynamicActionApiNotSupportedError()\n }\n\n return from(this._getExecInfo(args, context)).pipe(\n switchMap(x => this._http.request<any>(x.method, x.url, x.options)),\n ).toPromise()\n }\n\n public async getUiProps(args: DynamicActionApiDef, context: any): Promise<DynamicActionUiButtonDef> {\n return {\n _actionDef: args,\n triggerType: 'click'\n }\n }\n\n private async _getExecInfo(args: DynamicActionApiDef, context?: any) {\n const method = args.method || 'GET'\n\n const url = await this._getUrl(args, context)\n if (url === null) {\n throw new Error('[DynamicActionApiService] Unable to determine url.')\n }\n\n const body = await this._getBody(args, context)\n const params = await this._getParams(args, context)\n\n const headers = await this._getHeaders(args, context)\n\n const result = {\n url,\n method,\n options: { body, params, headers }\n }\n\n return result\n }\n\n private async _getUrl(args: DynamicActionApiDef, context?: any): Promise<string | null> {\n const config = this._getApiConfig(args)\n\n let endpoint = ''\n if (args.endpoint) {\n endpoint = await this._valueHelper.eval(args.endpoint, context)\n }\n\n if (isAbsoluteUrl(endpoint)) {\n return endpoint\n }\n\n if (config && config.url !== undefined && config.url !== null) {\n const url = await this._valueHelper.eval(config.url, context)\n if (typeof url === 'string') {\n const addSlash = endpoint.length > 0 && endpoint.indexOf('/') !== 0 &&\n url.length > 0 && url.indexOf('/') !== 0\n return `${config.url}${addSlash ? '/' : ''}${endpoint}`\n }\n }\n\n return null\n }\n\n private _getApiConfig(args: DynamicActionApiDef): IApiConfig | null {\n const configs = this._configs || []\n\n if (args.id === undefined || args.id === null) {\n return configs.length > 0 ? configs[0] : null\n }\n\n for (const config of configs) {\n if (config.id && config.id === args.id) {\n return config\n }\n }\n\n return null\n }\n\n private async _getBody(args: DynamicActionApiDef, context?: any) {\n if (args.body !== undefined && args.body !== null) {\n return await this._valueHelper.eval(args.body, context)\n }\n\n return undefined\n }\n\n private async _getParams(args: DynamicActionApiDef, context?: any) {\n if (args.params !== undefined && args.params !== null) {\n return await this._valueHelper.eval(args.params, context)\n }\n\n return undefined\n }\n\n private async _getHeaders(args: DynamicActionApiDef, context?: any): Promise<HttpHeaders> {\n let headers: ApiRequestMethodHeaders = {}\n\n const config = this._getApiConfig(args)\n\n // TODO: Make sure I am handling these values correctly. This could be\n // much cleaner. Tests with all the js primitives, null, undefined, and\n // dynamic action types should be written.\n\n if (config && config.methodHeaders) {\n const method = typeof args.method === 'string'\n ? args.method.trim().toUpperCase()\n : 'GET' // Default method type\n\n if (!isValidRequestMethod(method)) {\n throw Error(`API request method must be one of ${VALID_REQUEST_METHODS}`)\n }\n\n const h = method && config.methodHeaders[method]\n if (h !== undefined && h !== null) {\n headers = await this._evalHeaders(h, context) as any\n }\n }\n\n // TODO: Cleanup messing multiple level logic\n const argHeaders = args.headers\n if (argHeaders !== undefined && argHeaders !== null) {\n if (typeof argHeaders === 'string') {\n headers = argHeaders as any\n } else {\n const _val = this._valueHelper.eval(argHeaders as any, context) // TODO: Fix argHeaders type\n if (typeof _val === 'string') {\n headers = _val\n } else {\n const keys = Object.keys(argHeaders)\n for (const key of keys) {\n if (!isValidRequestMethod(key)) {\n throw Error(`API request method must be one of ${VALID_REQUEST_METHODS}`)\n }\n\n // TODO: Fix types\n const value = (argHeaders as any)[key]\n if (typeof value === 'string') {\n headers[key] = value\n } else if (Array.isArray(value)) {\n headers[key] = await Promise.all(value.map(async v => await this._valueHelper.eval(v, context))) as any\n } else {\n headers[key] = await this._valueHelper.eval(value, context)\n }\n }\n }\n }\n }\n\n return new HttpHeaders(headers as any)\n }\n\n private async _evalHeaders(\n headers: string | DynamicValue<string> | { [name: string]: DynamicValue<string> | DynamicValue<string>[] },\n context?: any\n ) {\n let res: string | { [name: string]: string | string[] } = {}\n\n // TODO: Cleanup messing multiple level logic\n if (typeof headers === 'string') {\n res = headers\n } else {\n const _val = this._valueHelper.eval(headers as any, context) // TODO: Fix argHeaders type\n if (typeof _val === 'string') {\n res = _val\n } else {\n const keys = Object.keys(headers)\n for (const key of keys) {\n const value = (headers as any)[key]\n if (typeof value === 'string') {\n res[key] = value\n } else if (Array.isArray(value)) {\n res[key] = await Promise.all(value.map(async v => await this._valueHelper.eval(v, context)))\n } else {\n res[key] = await this._valueHelper.eval(value, context)\n }\n }\n }\n }\n return res\n }\n\n private _isSupported(): boolean {\n if (isDevMode()) {\n console.warn(`[DynamicActionApiService] Action is not ready for production yet.`)\n } else {\n // I don't expect this to be attempted in prod before completed, so I am just adding a console warning.\n console.warn(`Unable to complete request. Contact support for assistance.`)\n }\n\n if (!this._http) {\n if (isDevMode()) {\n console.warn(`[DynamicActionApiService] Endpoint actions require \\`HttpClientModule\\` to be imported.`)\n }\n return false\n }\n return true\n }\n}\n","import { Injectable } from '@angular/core'\n\nimport { DynamicValueHelperService } from '../../dynamic-value-helper.service'\nimport { DynamicActionUiAnchorDef } from '../../models/dynamic-action-ui-anchor-def'\nimport { DynamicActionLink } from './dynamic-action-link'\nimport { DynamicActionLinkDef } from './dynamic-action-link-def'\n\n/**\n * Handles execution of link actions.\n */\n@Injectable()\nexport class DynamicActionLinkService implements DynamicActionLink {\n\n readonly type = 'link'\n\n label = 'Link Action'\n\n constructor(\n private _valueHandler: DynamicValueHelperService\n ) { }\n\n // exec?: (args: IDynamicActionDef<T>, context: D) => Observable<R>\n\n // execSync?: (args: IDynamicActionDef<T>, context: D) => R\n\n public async getUiProps(args: DynamicActionLinkDef, context: any): Promise<DynamicActionUiAnchorDef> {\n const link: string = await this._valueHandler.eval(args.link)\n const external: boolean = !!(await this._valueHandler.eval(args.external))\n const asset: boolean = !!(await this._valueHandler.eval(args.asset))\n const target: string | undefined = await this._valueHandler.eval(args.target)\n const queryParams: { [k: string]: any } | undefined = await this._valueHandler.eval(args.queryParams)\n\n const def: DynamicActionUiAnchorDef = {\n _actionDef: args,\n triggerType: asset ? 'link-asset' : external ? 'link-external' : 'link',\n linkUrl: link,\n // blockClickExpr: { type: 'jexl', expr: 'event.button == 0 && event.ctrlKey == true ? true : false' }\n }\n\n if (target) {\n if (!def.linkExtras) { def.linkExtras = {} }\n def.linkExtras.target = target\n }\n\n if (queryParams) {\n if (!def.linkExtras) { def.linkExtras = {} }\n def.linkExtras.queryParams = queryParams\n }\n\n return def\n }\n}\n","import { InjectionToken } from '@angular/core'\n\nimport { DynamicAction } from '../models/dynamic-action'\n\nexport const THESEAM_DYNAMIC_ACTION = new InjectionToken<DynamicAction<string>>(\n 'Action for executing a DynamicAction'\n)\n","import { Inject, Injectable, isDevMode, Optional } from '@angular/core'\nimport { map } from 'rxjs/operators'\n\nimport { SeamConfirmDialogService } from '@theseam/ui-common/confirm-dialog'\nimport { ThemeTypes } from '@theseam/ui-common/models'\nimport { hasProperty } from '@theseam/ui-common/utils'\n\nimport { DynamicValueHelperService } from '../dynamic-value-helper.service'\nimport { DynamicAction } from '../models/dynamic-action'\nimport { DynamicActionDef } from '../models/dynamic-action-def'\nimport { DynamicActionUiDef } from '../models/dynamic-action-ui-def'\nimport { THESEAM_DYNAMIC_ACTION } from '../tokens/dynamic-action'\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DynamicActionHelperService {\n\n private _actionMap = new Map<string, DynamicAction<string>>()\n\n constructor(\n private _valueHelper: DynamicValueHelperService,\n // TODO: Consider making the action confirm more generic\n @Optional() private _confirmDialog?: SeamConfirmDialogService,\n @Optional() @Inject(THESEAM_DYNAMIC_ACTION) actions?: DynamicAction<string>[]\n ) {\n // Only one evaluator should exist for a type, so map them for faster lookup.\n for (const e of (actions || [])) {\n if (isDevMode()) {\n if (this._actionMap.has(e.type)) {\n console.warn(`[DynamicActionHelperService] Multiple actions found for type '${e.type}'`)\n }\n }\n this._actionMap.set(e.type, e)\n }\n }\n\n /**\n * Execute an async action.\n *\n * TODO: Improve context and return typing.\n */\n public async exec<T extends string>(actionDef: DynamicActionDef<T>, context?: any): Promise<DynamicActionDef<T>> {\n const action = this._actionMap.get(actionDef.type)\n if (!action) {\n throw Error(`[DynamicActionHelperService] Action '${actionDef ? actionDef.type : undefined}' not found.`)\n }\n if (!action.exec) {\n throw Error(`[DynamicActionHelperService] Action '${actionDef ? actionDef.type : undefined}' does not implement 'exec()'.`)\n }\n\n if (await this.requiresConfirmation(actionDef, context)) {\n const confirmed = await this.promptConfirmation(actionDef, context)\n if (!confirmed) {\n // TODO: Decide a good way to handle a rejected confirm.\n return 'rejected' as any\n }\n }\n\n return await action.exec(actionDef, context)\n }\n\n /**\n * Execute an action.\n *\n * TODO: Improve context and return typing.\n */\n public execSync<T extends string>(actionDef: DynamicActionDef<T>, context?: any): DynamicActionDef<T> {\n const action = this._actionMap.get(actionDef.type)\n if (!action) {\n throw Error(`[DynamicActionHelperService] Action '${actionDef ? actionDef.type : undefined}' not found.`)\n }\n if (!action.execSync) {\n throw Error(`[DynamicActionHelperService] Action '${actionDef ? actionDef.type : undefined}' does not implement 'execSync()'.`)\n }\n\n return action.execSync(actionDef, context)\n }\n\n /**\n * Get UI props for action.\n *\n * TODO: Improve context and return typing.\n */\n public getUiProps<T extends string>(actionDef: DynamicActionDef<T>, context?: any): Promise<DynamicActionUiDef> {\n const action = this._actionMap.get(actionDef.type)\n if (!action) {\n throw Error(`[DynamicActionHelperService] Action '${actionDef ? actionDef.type : undefined}' not found.`)\n }\n if (!action.getUiProps) {\n throw Error(`[DynamicActionHelperService] Action '${actionDef ? actionDef.type : undefined}' does not implement 'getUiProps()'.`)\n }\n\n return action.getUiProps(actionDef, context)\n }\n\n /**\n * Checks if a DynamicActionDef is a type that can be executed.\n */\n public isExecutableType<T extends string>(value: DynamicActionDef<T>, isAsync: boolean): boolean {\n if (value === undefined || value === null) {\n return false\n }\n\n const action = this._actionMap.get(value.type)\n if (!action) {\n return false\n }\n\n if (isAsync && !action.exec) {\n return false\n }\n if (!isAsync && !action.execSync) {\n return false\n }\n\n return true\n }\n\n public async requiresConfirmation<T extends string>(actionDef: DynamicActionDef<T>, context?: any): Promise<boolean> {\n if (!hasProperty(actionDef, 'confirmDef')) {\n return false\n }\n\n if (hasProperty(actionDef.confirmDef, 'disabled')) {\n return !(await this._valueHelper.eval(actionDef.confirmDef.disabled, context))\n }\n\n return true\n }\n\n public requiresConfirmationSync<T extends string>(actionDef: DynamicActionDef<T>, context?: any): boolean {\n if (!hasProperty(actionDef, 'confirmDef')) {\n return false\n }\n\n if (hasProperty(actionDef.confirmDef, 'disabled')) {\n const disabled = !this._valueHelper.evalSync(actionDef.confirmDef.disabled, context)\n if (!disabled) {\n throw Error(\n `[DynamicActionHelperService] Action '${actionDef ? actionDef.type : undefined}' can't open ` +\n `confirm dialog. Only async actions support confirm dialog.`\n )\n }\n return false\n }\n\n throw Error(\n `[DynamicActionHelperService] Action '${actionDef ? actionDef.type : undefined}' can't open ` +\n `confirm dialog. Only async actions support confirm dialog.`\n )\n }\n\n public async promptConfirmation<T extends string>(actionDef: DynamicActionDef<T>, context?: any): Promise<boolean> {\n if (!this._confirmDialog) {\n throw Error(\n `[DynamicActionHelperService] Action '${actionDef ? actionDef.type : undefined}' can't open ` +\n `confirm dialog. Confirm dialog service is not injected.`\n )\n }\n\n const confirmDef = actionDef.confirmDef\n if (!confirmDef) {\n throw Error(\n `[DynamicActionHelperService] Action '${actionDef ? actionDef.type : undefined}' can't open ` +\n `confirm dialog. Confirm def is not defined.`\n )\n }\n\n let message: string | undefined\n if (hasProperty(confirmDef, 'message')) {\n message = await this._valueHelper.eval(confirmDef.message, context)\n }\n let alert: string | { message: string, type: ThemeTypes } | undefined\n if (hasProperty(confirmDef, 'alert')) {\n alert = await this._valueHelper.eval(confirmDef.alert, context)\n }\n\n const modalDef = this._confirmDialog.open(message, alert)\n return modalDef.afterClosed().pipe(\n map(v => v === 'confirm')\n ).toPromise()\n }\n\n}\n","import { ComponentType } from '@angular/cdk/portal'\nimport { Injectable, Injector } from '@angular/core'\nimport { Observable, of } from 'rxjs'\nimport { switchMap } from 'rxjs/operators'\n\nimport { Modal, ModalConfig, ModalRef } from '@theseam/ui-common/modal'\n\nimport { DynamicValueHelperService } from '../../dynamic-value-helper.service'\nimport { DynamicActionUiButtonDef } from '../../models/dynamic-action-ui-button-def'\nimport { DynamicActionHelperService } from '../dynamic-action-helper.service'\nimport { DynamicActionModal } from './dynamic-action-modal'\nimport { DynamicActionModalDef } from './dynamic-action-modal-def'\n\n/**\n * Handles execution of modal actions.\n */\n@Injectable()\nexport class DynamicActionModalService implements DynamicActionModal {\n\n readonly type = 'modal'\n\n label = 'Modal Action'\n\n constructor(\n private _valueHelper: DynamicValueHelperService,\n private _modal: Modal,\n private _injector: Injector\n ) { }\n\n async exec(args: DynamicActionModalDef, context: any): Promise<any> {\n const component = this._getComponent(args, context)\n const data = this._getData(args, context)\n\n return this._openModal(component, data).pipe(\n switchMap(modalRef => modalRef.afterClosed().pipe(\n switchMap(result => {\n const resultAction = this._getModalResultAction(args, result)\n\n // TODO: Come up with a way to pass data from previous action\n if (resultAction) {\n const dynamicActionHelper = this._getDynamicActionHelper()\n return dynamicActionHelper.exec(resultAction, context)\n }\n return of(result)\n })\n ))\n ).toPromise()\n }\n\n // execSync?: (args: IDynamicActionDef<T>, context: D) => R\n\n public async getUiProps(args: DynamicActionModalDef, context: any): Promise<DynamicActionUiButtonDef> {\n return {\n _actionDef: args,\n triggerType: 'click'\n }\n }\n\n /**\n * Get the dynamic action helper from the injector. The injector order causes\n * the dynamic action helper to not be in the injector when the constructor is\n * called.\n */\n private _getDynamicActionHelper(): DynamicActionHelperService {\n return this._injector.get(DynamicActionHelperService)\n }\n\n private _getComponent(args: DynamicActionModalDef, context: any): string | ComponentType<{}> | undefined {\n let component = args && args.component\n if (component) {\n component = this._valueHelper.evalSync(component, context)\n }\n return component\n }\n\n private _getData(args: DynamicActionModalDef, context: any): any | undefined {\n let data = args && args.data\n if (data) {\n data = this._valueHelper.evalSync(data, context)\n }\n return data\n }\n\n private _getModalResultAction(args: DynamicActionModalDef, result: any) {\n if (args.resultActions && args.resultActions[result]) {\n return args.resultActions[result]\n }\n }\n\n private _openModal(modal: any, data?: any): Observable<ModalRef<any>> {\n // TODO: Replace with JSON valid config from input def model\n const config: ModalConfig = {\n data,\n modalSize: 'lg'\n }\n\n if (typeof modal === 'string') {\n return this._modal.openFromLazyComponent(modal, config)\n } else {\n return of(this._modal.openFromComponent(modal, config))\n }\n }\n}\n","import { Injectable, Injector } from '@angular/core'\n\nimport { IDataExporter, THESEAM_DATA_EXPORTER } from '@theseam/ui-common/data-exporter'\nimport { notNullOrUndefined } from '@theseam/ui-common/utils'\nimport { IDynamicValueEvaluator } from '../../models/dynamic-value-evaluator'\n\nimport { IExportersDataValue } from './exporters-data-value'\n\n@Injectable()\nexport class ExportersDataEvaluator implements IDynamicValueEvaluator<'exporters-data'> {\n\n public readonly type = 'exporters-data'\n\n constructor(\n private _injector: Injector\n ) { }\n\n public async eval(value: IExportersDataValue<IDataExporter[]>, context?: any): Promise<{ exporters: IDataExporter[] }> {\n return this.evalSync(value, context)\n }\n\n public evalSync(value: IExportersDataValue<IDataExporter[]>, context?: any): { exporters: IDataExporter[] } {\n return {\n exporters: this._exporters(value.exporters || [])\n }\n }\n\n private _exporters(exporters: string[]) {\n const dataExporters: IDataExporter[] = (<any>this._injector.get(THESEAM_DATA_EXPORTER) || []) as IDataExporter[]\n return exporters\n .map(e => dataExporters.find(de => de.name === e))\n .filter(notNullOrUndefined)\n }\n\n}\n","// NOTE: ng-packagr ignores the \"types\" and \"typeRoots\" settings in tsconfig.\n// Unless there is a way to make it stop ignoring those settings, tripple slash\n// reference to a `.d.ts` file was the only way I could stop the missing types\n// error.\n// tslint:disable-next-line: no-reference\n// /// <reference path=\"./jexl.d.ts\" />\n// /// <reference path=\"../../../../../custom_types/jexl/index.d.ts\" />\n\nimport { DatePipe } from '@angular/common'\nimport { Injectable } from '@angular/core'\n\n// @ts-ignore: Missing types\nimport jexl from 'jexl'\n\nimport { IDynamicValueEvaluator } from '../../models/dynamic-value-evaluator'\n\nimport { IJexlValue } from './jexl-value'\n\n@Injectable()\nexport class JexlEvaluator implements IDynamicValueEvaluator<'jexl'> {\n\n public readonly type = 'jexl'\n\n private readonly _jexl = new jexl.Jexl()\n\n constructor() {\n this._jexl.addTransform('date', (val: any, row: any) => new DatePipe('en-US').transform(val, 'yyyy-MM-dd h:mm aaa'))\n this._jexl.addTransform('length', (val: any) => val.length)\n }\n\n public eval<R>(value: IJexlValue<R>, context?: any): Promise<R> {\n return this._jexl.eval(value.expr, context)\n }\n\n public evalSync<R>(value: IJexlValue<R>, context?: any): R {\n return this._jexl.evalSync(value.expr, context)\n }\n\n}\n","// import { TableCellTypeName } from '@theseam/ui-common/table-cell-type'\n\nimport { DynamicActionConfirmDef } from './dynamic-action-confirm-def'\n\n// TODO: Add something to the model that clarifies what is supported from JSON or javascript only.\n// export interface DynamicActionDef<T extends TableCellTypeName> {\nexport interface DynamicActionDef<T> {\n\n readonly type: T\n\n /**\n * If defined, the action must be confirmed.\n */\n confirmDef?: DynamicActionConfirmDef\n\n // TODO: Fix model to avoid this.\n [key: string]: any\n}\n","import { InjectionToken } from '@angular/core'\n\nexport const THESEAM_DYNAMIC_DATA = new InjectionToken<any>('THESEAM_DYNAMIC_DATA')\n","import { DynamicActionDef } from '../models/dynamic-action-def'\n\nexport function isActionType<T extends string>(\n action: DynamicActionDef<T>,\n typeName: T\n): action is DynamicActionDef<T> {\n return action.type === typeName\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"theseam-ui-common-dynamic.js","sources":["../../../projects/ui-common/dynamic/tokens/dynamic-value-evaluator.ts","../../../projects/ui-common/dynamic/dynamic-value-helper.service.ts","../../../projects/ui-common/dynamic/tokens/api-config.ts","../../../projects/ui-common/dynamic/action/api/dynamic-action-api-errors.ts","../../../projects/ui-common/dynamic/action/api/dynamic-action-api.service.ts","../../../projects/ui-common/dynamic/action/link/dynamic-action-link.service.ts","../../../projects/ui-common/dynamic/tokens/dynamic-action.ts","../../../projects/ui-common/dynamic/action/dynamic-action-helper.service.ts","../../../projects/ui-common/dynamic/action/modal/dynamic-action-modal.service.ts","../../../projects/ui-common/dynamic/evaluators/exporters-data-evaluator/exporters-data-evaluator.ts","../../../projects/ui-common/dynamic/evaluators/jexl-evaluator/jexl-evaluator.ts","../../../projects/ui-common/dynamic/models/dynamic-action-def.ts","../../../projects/ui-common/dynamic/tokens/dynamic-data.ts","../../../projects/ui-common/dynamic/utils/is-action-type.ts","../../../projects/ui-common/dynamic/theseam-ui-common-dynamic.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core'\n\nimport { IDynamicValueEvaluator } from '../models/dynamic-value-evaluator'\n\nexport const THESEAM_DYNAMIC_VALUE_EVALUATOR = new InjectionToken<IDynamicValueEvaluator>(\n 'Evaluator that can be used for evaluating a DynamicValue'\n)\n","import { Inject, Injectable, isDevMode } from '@angular/core'\n\nimport { DynamicValue } from './models/dynamic-value'\nimport { DynamicValueEvaluatableType } from './models/dynamic-value-evaluatable-type'\nimport { IDynamicValueEvaluator } from './models/dynamic-value-evaluator'\nimport { IDynamicValueType } from './models/dynamic-value-type'\nimport { THESEAM_DYNAMIC_VALUE_EVALUATOR } from './tokens/dynamic-value-evaluator'\n\n/**\n *\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class DynamicValueHelperService {\n\n private _evaluatorMap = new Map<string, IDynamicValueEvaluator>()\n\n constructor(\n @Inject(THESEAM_DYNAMIC_VALUE_EVALUATOR) evaluators: IDynamicValueEvaluator[]\n ) {\n // Only one evaluator should exist for a type, so map them for faster lookup.\n for (const e of evaluators) {\n if (isDevMode()) {\n if (this._evaluatorMap.has(e.type)) {\n console.warn(`[DynamicValueHelperService] Multiple evaluators found for type '${e.type}'`)\n }\n }\n this._evaluatorMap.set(e.type, e)\n }\n }\n\n /**\n * Evaluate a dynamic value to its actual value.\n *\n * TODO: Improve context and return typing.\n */\n public eval<R>(value: DynamicValue<R>, context?: any): Promise<R> {\n if (this.isEvaluatableType(value, true)) {\n return this._evalEvaluatable(value, context)\n }\n\n // Use `evalSync` if `eval` isn't provided and `evalSync` is.\n if (this.isEvaluatableType(value, false)) {\n return Promise.resolve<R>(this._evalEvaluatableSync(value, context))\n }\n\n return Promise.resolve<R>(value)\n }\n\n /**\n * Evaluate a dynamic value to its actual value.\n *\n * TODO: Improve context and return typing.\n */\n public evalSync<R>(value: DynamicValue<R>, context?: any): R {\n if (this.isEvaluatableType(value, false)) {\n return this._evalEvaluatableSync(value, context)\n }\n\n return value\n }\n\n /**\n * Checks if a DynamicValue is a type that can be evaluated.\n */\n public isEvaluatableType<R>(value: DynamicValue<R>, isAsync: boolean): value is DynamicValueEvaluatableType<R> {\n if (value === undefined || value === null) {\n return false\n }\n\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n return false\n }\n\n if (!(<DynamicValueEvaluatableType<R>>value).type) {\n return false\n }\n\n if (this._evaluatorMap.has((<DynamicValueEvaluatableType<R>>value).type)) {\n return true\n }\n\n return false\n }\n\n /**\n *\n */\n private _evalEvaluatable<R>(value: DynamicValueEvaluatableType<R>, context?: any): Promise<R> {\n const evaluator = this._evaluatorMap.get(value.type)\n if (!evaluator) {\n throw Error(`[DynamicValueHelperService] Evaluator '${value ? value.type : undefined}' not found.`)\n }\n if (!evaluator.eval) {\n throw Error(`[DynamicValueHelperService] Evaluator '${value ? value.type : undefined}' does not implement 'eval()'.`)\n }\n return evaluator.eval(value, context)\n }\n\n /**\n *\n */\n private _evalEvaluatableSync<R>(value: DynamicValueEvaluatableType<R>, context?: any): R {\n const evaluator = this._evaluatorMap.get(value.type)\n if (!evaluator) {\n throw Error(`[DynamicValueHelperService] Evaluator '${value ? value.type : undefined}' not found.`)\n }\n if (!evaluator.evalSync) {\n throw Error(`[DynamicValueHelperService] Evaluator '${value ? value.type : undefined}' does not implement 'evalSync()'.`)\n }\n return evaluator.evalSync(value, context)\n }\n\n}\n","import { InjectionToken } from '@angular/core'\n\nimport { DynamicValue } from '../models/dynamic-value'\n\nexport type ApiRequestMethodHeader = string | { [name: string]: string | string[] }\n\nexport interface ApiRequestMethodHeaders {\n 'GET'?: ApiRequestMethodHeader\n 'POST'?: ApiRequestMethodHeader\n 'PUT'?: ApiRequestMethodHeader\n 'PATCH'?: ApiRequestMethodHeader\n 'DELETE'?: ApiRequestMethodHeader\n}\n\nexport const VALID_REQUEST_METHODS: (keyof ApiRequestMethodHeaders)[] = [\n 'GET',\n 'POST',\n 'PUT',\n 'PATCH',\n 'DELETE'\n]\n\nexport function isValidRequestMethod(method: string): method is keyof ApiRequestMethodHeaders {\n return VALID_REQUEST_METHODS.indexOf(method as any) !== -1\n}\n\nexport interface IApiConfig {\n /**\n * Used to identify this config if multiple are provided.\n */\n id?: string\n\n /**\n * Base url that non-absolute endpoints will be appended to.\n */\n url?: DynamicValue<string>\n\n /**\n * Default headers to add to requests.\n */\n methodHeaders?: ApiRequestMethodHeaders\n}\n\nexport const THESEAM_API_CONFIG_DEFAULT: IApiConfig = {\n url: '/',\n\n methodHeaders: {\n 'GET': { 'Content-Type': 'application/json' },\n 'POST': { 'Content-Type': 'application/json' },\n 'PUT': { 'Content-Type': 'application/json' },\n 'PATCH': { 'Content-Type': 'application/json' },\n 'DELETE': { 'Content-Type': 'application/json' }\n }\n}\n\n// export const THESEAM_API_CONFIG = new InjectionToken<IApiConfig[]>(\n// 'Api config token, config options for actions that make an api request in library'\n// )\n\nexport const THESEAM_API_CONFIG = new InjectionToken<IApiConfig[]>(\n 'Api config token, config options for actions that make an api request in library', {\n providedIn: 'root',\n factory: () => [ THESEAM_API_CONFIG_DEFAULT ]\n })\n","\nexport function dynamicActionApiNotSupportedError(): Error {\n return Error(`Dynamic action type 'api' not supported.`)\n}\n","import { HttpClient, HttpHeaders } from '@angular/common/http'\nimport { Inject, Injectable, isDevMode, Optional } from '@angular/core'\nimport { from } from 'rxjs'\nimport { switchMap } from 'rxjs/operators'\n\nimport { isAbsoluteUrl } from '@theseam/ui-common/utils'\n\nimport { DynamicValueHelperService } from '../../dynamic-value-helper.service'\nimport { DynamicActionUiButtonDef } from '../../models/dynamic-action-ui-button-def'\nimport { DynamicValue } from '../../models/dynamic-value'\nimport { ApiRequestMethodHeader, ApiRequestMethodHeaders, IApiConfig, isValidRequestMethod, THESEAM_API_CONFIG, VALID_REQUEST_METHODS } from '../../tokens/api-config'\n\nimport { DynamicActionApi } from './dynamic-action-api'\nimport { DynamicActionApiDef } from './dynamic-action-api-def'\nimport { dynamicActionApiNotSupportedError } from './dynamic-action-api-errors'\n\n/**\n * Handles execution of api call actions.\n *\n * This action service should be generic enough to\n * work with any url endpoint, but will be biased towards our api where needed.\n */\n@Injectable()\nexport class DynamicActionApiService implements DynamicActionApi {\n\n readonly type = 'api'\n\n label = 'Api Action'\n\n constructor(\n private _valueHelper: DynamicValueHelperService,\n @Optional() private _http: HttpClient,\n @Optional() @Inject(THESEAM_API_CONFIG) private _configs: IApiConfig[]\n ) { }\n\n public exec(args: DynamicActionApiDef, context: any): Promise<any> {\n if (!this._isSupported()) {\n throw dynamicActionApiNotSupportedError()\n }\n\n return from(this._getExecInfo(args, context)).pipe(\n switchMap(x => this._http.request<any>(x.method, x.url, x.options)),\n ).toPromise()\n }\n\n public async getUiProps(args: DynamicActionApiDef, context: any): Promise<DynamicActionUiButtonDef> {\n return {\n _actionDef: args,\n triggerType: 'click'\n }\n }\n\n private async _getExecInfo(args: DynamicActionApiDef, context?: any) {\n const method = args.method || 'GET'\n\n const url = await this._getUrl(args, context)\n if (url === null) {\n throw new Error('[DynamicActionApiService] Unable to determine url.')\n }\n\n const body = await this._getBody(args, context)\n const params = await this._getParams(args, context)\n\n const headers = await this._getHeaders(args, context)\n\n const result = {\n url,\n method,\n options: { body, params, headers }\n }\n\n return result\n }\n\n private async _getUrl(args: DynamicActionApiDef, context?: any): Promise<string | null> {\n const config = this._getApiConfig(args)\n\n let endpoint = ''\n if (args.endpoint) {\n endpoint = await this._valueHelper.eval(args.endpoint, context)\n }\n\n if (isAbsoluteUrl(endpoint)) {\n return endpoint\n }\n\n if (config && config.url !== undefined && config.url !== null) {\n const url = await this._valueHelper.eval(config.url, context)\n if (typeof url === 'string') {\n const addSlash = endpoint.length > 0 && endpoint.indexOf('/') !== 0 &&\n url.length > 0 && url.indexOf('/') !== 0\n return `${config.url}${addSlash ? '/' : ''}${endpoint}`\n }\n }\n\n return null\n }\n\n private _getApiConfig(args: DynamicActionApiDef): IApiConfig | null {\n const configs = this._configs || []\n\n if (args.id === undefined || args.id === null) {\n return configs.length > 0 ? configs[0] : null\n }\n\n for (const config of configs) {\n if (config.id && config.id === args.id) {\n return config\n }\n }\n\n return null\n }\n\n private async _getBody(args: DynamicActionApiDef, context?: any) {\n if (args.body !== undefined && args.body !== null) {\n return await this._valueHelper.eval(args.body, context)\n }\n\n return undefined\n }\n\n private async _getParams(args: DynamicActionApiDef, context?: any) {\n if (args.params !== undefined && args.params !== null) {\n return await this._valueHelper.eval(args.params, context)\n }\n\n return undefined\n }\n\n private async _getHeaders(args: DynamicActionApiDef, context?: any): Promise<HttpHeaders> {\n let headers: ApiRequestMethodHeaders = {}\n\n const config = this._getApiConfig(args)\n\n // TODO: Make sure I am handling these values correctly. This could be\n // much cleaner. Tests with all the js primitives, null, undefined, and\n // dynamic action types should be written.\n\n if (config && config.methodHeaders) {\n const method = typeof args.method === 'string'\n ? args.method.trim().toUpperCase()\n : 'GET' // Default method type\n\n if (!isValidRequestMethod(method)) {\n throw Error(`API request method must be one of ${VALID_REQUEST_METHODS}`)\n }\n\n const h = method && config.methodHeaders[method]\n if (h !== undefined && h !== null) {\n headers = await this._evalHeaders(h, context) as any\n }\n }\n\n // TODO: Cleanup messing multiple level logic\n const argHeaders = args.headers\n if (argHeaders !== undefined && argHeaders !== null) {\n if (typeof argHeaders === 'string') {\n headers = argHeaders as any\n } else {\n const _val = this._valueHelper.eval(argHeaders as any, context) // TODO: Fix argHeaders type\n if (typeof _val === 'string') {\n headers = _val\n } else {\n const keys = Object.keys(argHeaders)\n for (const key of keys) {\n if (!isValidRequestMethod(key)) {\n throw Error(`API request method must be one of ${VALID_REQUEST_METHODS}`)\n }\n\n // TODO: Fix types\n const value = (argHeaders as any)[key]\n if (typeof value === 'string') {\n headers[key] = value\n } else if (Array.isArray(value)) {\n headers[key] = await Promise.all(value.map(async v => await this._valueHelper.eval(v, context))) as any\n } else {\n headers[key] = await this._valueHelper.eval(value, context)\n }\n }\n }\n }\n }\n\n return new HttpHeaders(headers as any)\n }\n\n private async _evalHeaders(\n headers: string | DynamicValue<string> | { [name: string]: DynamicValue<string> | DynamicValue<string>[] },\n context?: any\n ) {\n let res: string | { [name: string]: string | string[] } = {}\n\n // TODO: Cleanup messing multiple level logic\n if (typeof headers === 'string') {\n res = headers\n } else {\n const _val = this._valueHelper.eval(headers as any, context) // TODO: Fix argHeaders type\n if (typeof _val === 'string') {\n res = _val\n } else {\n const keys = Object.keys(headers)\n for (const key of keys) {\n const value = (headers as any)[key]\n if (typeof value === 'string') {\n res[key] = value\n } else if (Array.isArray(value)) {\n res[key] = await Promise.all(value.map(async v => await this._valueHelper.eval(v, context)))\n } else {\n res[key] = await this._valueHelper.eval(value, context)\n }\n }\n }\n }\n return res\n }\n\n private _isSupported(): boolean {\n if (isDevMode()) {\n console.warn(`[DynamicActionApiService] Action is not ready for production yet.`)\n } else {\n // I don't expect this to be attempted in prod before completed, so I am just adding a console warning.\n console.warn(`Unable to complete request. Contact support for assistance.`)\n }\n\n if (!this._http) {\n if (isDevMode()) {\n console.warn(`[DynamicActionApiService] Endpoint actions require \\`HttpClientModule\\` to be imported.`)\n }\n return false\n }\n return true\n }\n}\n","import { Injectable } from '@angular/core'\n\nimport { DynamicValueHelperService } from '../../dynamic-value-helper.service'\nimport { DynamicActionUiAnchorDef } from '../../models/dynamic-action-ui-anchor-def'\nimport { DynamicActionLink } from './dynamic-action-link'\nimport { DynamicActionLinkDef } from './dynamic-action-link-def'\n\n/**\n * Handles execution of link actions.\n */\n@Injectable()\nexport class DynamicActionLinkService implements DynamicActionLink {\n\n readonly type = 'link'\n\n label = 'Link Action'\n\n constructor(\n private _valueHandler: DynamicValueHelperService\n ) { }\n\n // exec?: (args: IDynamicActionDef<T>, context: D) => Observable<R>\n\n // execSync?: (args: IDynamicActionDef<T>, context: D) => R\n\n public async getUiProps(args: DynamicActionLinkDef, context: any): Promise<DynamicActionUiAnchorDef> {\n const link: string = await this._valueHandler.eval(args.link)\n const external: boolean = !!(await this._valueHandler.eval(args.external))\n const asset: boolean = !!(await this._valueHandler.eval(args.asset))\n const target: string | undefined = await this._valueHandler.eval(args.target)\n const queryParams: { [k: string]: any } | undefined = await this._valueHandler.eval(args.queryParams)\n\n const def: DynamicActionUiAnchorDef = {\n _actionDef: args,\n triggerType: asset ? 'link-asset' : external ? 'link-external' : 'link',\n linkUrl: link,\n // blockClickExpr: { type: 'jexl', expr: 'event.button == 0 && event.ctrlKey == true ? true : false' }\n }\n\n if (target) {\n if (!def.linkExtras) { def.linkExtras = {} }\n def.linkExtras.target = target\n }\n\n if (queryParams) {\n if (!def.linkExtras) { def.linkExtras = {} }\n def.linkExtras.queryParams = queryParams\n }\n\n return def\n }\n}\n","import { InjectionToken } from '@angular/core'\n\nimport { DynamicAction } from '../models/dynamic-action'\n\nexport const THESEAM_DYNAMIC_ACTION = new InjectionToken<DynamicAction<string>>(\n 'Action for executing a DynamicAction'\n)\n","import { Inject, Injectable, isDevMode, Optional } from '@angular/core'\nimport { map } from 'rxjs/operators'\n\nimport { SeamConfirmDialogService } from '@theseam/ui-common/confirm-dialog'\nimport { ThemeTypes } from '@theseam/ui-common/models'\nimport { hasProperty } from '@theseam/ui-common/utils'\n\nimport { DynamicValueHelperService } from '../dynamic-value-helper.service'\nimport { DynamicAction } from '../models/dynamic-action'\nimport { DynamicActionDef } from '../models/dynamic-action-def'\nimport { DynamicActionUiDef } from '../models/dynamic-action-ui-def'\nimport { THESEAM_DYNAMIC_ACTION } from '../tokens/dynamic-action'\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DynamicActionHelperService {\n\n private _actionMap = new Map<string, DynamicAction<string>>()\n\n constructor(\n private _valueHelper: DynamicValueHelperService,\n // TODO: Consider making the action confirm more generic\n @Optional() private _confirmDialog?: SeamConfirmDialogService,\n @Optional() @Inject(THESEAM_DYNAMIC_ACTION) actions?: DynamicAction<string>[]\n ) {\n // Only one evaluator should exist for a type, so map them for faster lookup.\n for (const e of (actions || [])) {\n if (isDevMode()) {\n if (this._actionMap.has(e.type)) {\n console.warn(`[DynamicActionHelperService] Multiple actions found for type '${e.type}'`)\n }\n }\n this._actionMap.set(e.type, e)\n }\n }\n\n /**\n * Execute an async action.\n *\n * TODO: Improve context and return typing.\n */\n public async exec<T extends string>(actionDef: DynamicActionDef<T>, context?: any): Promise<DynamicActionDef<T>> {\n const action = this._actionMap.get(actionDef.type)\n if (!action) {\n throw Error(`[DynamicActionHelperService] Action '${actionDef ? actionDef.type : undefined}' not found.`)\n }\n if (!action.exec) {\n throw Error(`[DynamicActionHelperService] Action '${actionDef ? actionDef.type : undefined}' does not implement 'exec()'.`)\n }\n\n if (await this.requiresConfirmation(actionDef, context)) {\n const confirmed = await this.promptConfirmation(actionDef, context)\n if (!confirmed) {\n // TODO: Decide a good way to handle a rejected confirm.\n return 'rejected' as any\n }\n }\n\n return await action.exec(actionDef, context)\n }\n\n /**\n * Execute an action.\n *\n * TODO: Improve context and return typing.\n */\n public execSync<T extends string>(actionDef: DynamicActionDef<T>, context?: any): DynamicActionDef<T> {\n const action = this._actionMap.get(actionDef.type)\n if (!action) {\n throw Error(`[DynamicActionHelperService] Action '${actionDef ? actionDef.type : undefined}' not found.`)\n }\n if (!action.execSync) {\n throw Error(`[DynamicActionHelperService] Action '${actionDef ? actionDef.type : undefined}' does not implement 'execSync()'.`)\n }\n\n return action.execSync(actionDef, context)\n }\n\n /**\n * Get UI props for action.\n *\n * TODO: Improve context and return typing.\n */\n public getUiProps<T extends string>(actionDef: DynamicActionDef<T>, context?: any): Promise<DynamicActionUiDef> {\n const action = this._actionMap.get(actionDef.type)\n if (!action) {\n throw Error(`[DynamicActionHelperService] Action '${actionDef ? actionDef.type : undefined}' not found.`)\n }\n if (!action.getUiProps) {\n throw Error(`[DynamicActionHelperService] Action '${actionDef ? actionDef.type : undefined}' does not implement 'getUiProps()'.`)\n }\n\n return action.getUiProps(actionDef, context)\n }\n\n /**\n * Checks if a DynamicActionDef is a type that can be executed.\n */\n public isExecutableType<T extends string>(value: DynamicActionDef<T>, isAsync: boolean): boolean {\n if (value === undefined || value === null) {\n return false\n }\n\n const action = this._actionMap.get(value.type)\n if (!action) {\n return false\n }\n\n if (isAsync && !action.exec) {\n return false\n }\n if (!isAsync && !action.execSync) {\n return false\n }\n\n return true\n }\n\n public async requiresConfirmation<T extends string>(actionDef: DynamicActionDef<T>, context?: any): Promise<boolean> {\n if (!hasProperty(actionDef, 'confirmDef')) {\n return false\n }\n\n if (hasProperty(actionDef.confirmDef, 'disabled')) {\n return !(await this._valueHelper.eval(actionDef.confirmDef.disabled, context))\n }\n\n return true\n }\n\n public requiresConfirmationSync<T extends string>(actionDef: DynamicActionDef<T>, context?: any): boolean {\n if (!hasProperty(actionDef, 'confirmDef')) {\n return false\n }\n\n if (hasProperty(actionDef.confirmDef, 'disabled')) {\n const disabled = !this._valueHelper.evalSync(actionDef.confirmDef.disabled, context)\n if (!disabled) {\n throw Error(\n `[DynamicActionHelperService] Action '${actionDef ? actionDef.type : undefined}' can't open ` +\n `confirm dialog. Only async actions support confirm dialog.`\n )\n }\n return false\n }\n\n throw Error(\n `[DynamicActionHelperService] Action '${actionDef ? actionDef.type : undefined}' can't open ` +\n `confirm dialog. Only async actions support confirm dialog.`\n )\n }\n\n public async promptConfirmation<T extends string>(actionDef: DynamicActionDef<T>, context?: any): Promise<boolean> {\n if (!this._confirmDialog) {\n throw Error(\n `[DynamicActionHelperService] Action '${actionDef ? actionDef.type : undefined}' can't open ` +\n `confirm dialog. Confirm dialog service is not injected.`\n )\n }\n\n const confirmDef = actionDef.confirmDef\n if (!confirmDef) {\n throw Error(\n `[DynamicActionHelperService] Action '${actionDef ? actionDef.type : undefined}' can't open ` +\n `confirm dialog. Confirm def is not defined.`\n )\n }\n\n let message: string | undefined\n if (hasProperty(confirmDef, 'message')) {\n message = await this._valueHelper.eval(confirmDef.message, context)\n }\n let alert: string | { message: string, type: ThemeTypes } | undefined\n if (hasProperty(confirmDef, 'alert')) {\n alert = await this._valueHelper.eval(confirmDef.alert, context)\n }\n\n const modalDef = this._confirmDialog.open(message, alert)\n return modalDef.afterClosed().pipe(\n map(v => v === 'confirm')\n ).toPromise()\n }\n\n}\n","import { ComponentType } from '@angular/cdk/portal'\nimport { Injectable, Injector } from '@angular/core'\nimport { Observable, of } from 'rxjs'\nimport { switchMap } from 'rxjs/operators'\n\nimport { Modal, ModalConfig, ModalRef } from '@theseam/ui-common/modal'\n\nimport { DynamicValueHelperService } from '../../dynamic-value-helper.service'\nimport { DynamicActionUiButtonDef } from '../../models/dynamic-action-ui-button-def'\nimport { DynamicActionHelperService } from '../dynamic-action-helper.service'\nimport { DynamicActionModal } from './dynamic-action-modal'\nimport { DynamicActionModalDef } from './dynamic-action-modal-def'\n\n/**\n * Handles execution of modal actions.\n */\n@Injectable()\nexport class DynamicActionModalService implements DynamicActionModal {\n\n readonly type = 'modal'\n\n label = 'Modal Action'\n\n constructor(\n private _valueHelper: DynamicValueHelperService,\n private _modal: Modal,\n private _injector: Injector\n ) { }\n\n async exec(args: DynamicActionModalDef, context: any): Promise<any> {\n const component = this._getComponent(args, context)\n const data = this._getData(args, context)\n\n return this._openModal(component, data).pipe(\n switchMap(modalRef => modalRef.afterClosed().pipe(\n switchMap(result => {\n const resultAction = this._getModalResultAction(args, result)\n\n // TODO: Come up with a way to pass data from previous action\n if (resultAction) {\n const dynamicActionHelper = this._getDynamicActionHelper()\n return dynamicActionHelper.exec(resultAction, context)\n }\n return of(result)\n })\n ))\n ).toPromise()\n }\n\n // execSync?: (args: IDynamicActionDef<T>, context: D) => R\n\n public async getUiProps(args: DynamicActionModalDef, context: any): Promise<DynamicActionUiButtonDef> {\n return {\n _actionDef: args,\n triggerType: 'click'\n }\n }\n\n /**\n * Get the dynamic action helper from the injector. The injector order causes\n * the dynamic action helper to not be in the injector when the constructor is\n * called.\n */\n private _getDynamicActionHelper(): DynamicActionHelperService {\n return this._injector.get(DynamicActionHelperService)\n }\n\n private _getComponent(args: DynamicActionModalDef, context: any): string | ComponentType<{}> | undefined {\n let component = args && args.component\n if (component) {\n component = this._valueHelper.evalSync(component, context)\n }\n return component\n }\n\n private _getData(args: DynamicActionModalDef, context: any): any | undefined {\n let data = args && args.data\n if (data) {\n data = this._valueHelper.evalSync(data, context)\n }\n return data\n }\n\n private _getModalResultAction(args: DynamicActionModalDef, result: any) {\n if (args.resultActions && args.resultActions[result]) {\n return args.resultActions[result]\n }\n }\n\n private _openModal(modal: any, data?: any): Observable<ModalRef<any>> {\n // TODO: Replace with JSON valid config from input def model\n const config: ModalConfig = {\n data,\n modalSize: 'lg'\n }\n\n if (typeof modal === 'string') {\n return this._modal.openFromLazyComponent(modal, config)\n } else {\n return of(this._modal.openFromComponent(modal, config))\n }\n }\n}\n","import { Injectable, Injector } from '@angular/core'\n\nimport { IDataExporter, THESEAM_DATA_EXPORTER } from '@theseam/ui-common/data-exporter'\nimport { notNullOrUndefined } from '@theseam/ui-common/utils'\nimport { IDynamicValueEvaluator } from '../../models/dynamic-value-evaluator'\n\nimport { IExportersDataValue } from './exporters-data-value'\n\n@Injectable()\nexport class ExportersDataEvaluator implements IDynamicValueEvaluator<'exporters-data'> {\n\n public readonly type = 'exporters-data'\n\n constructor(\n private _injector: Injector\n ) { }\n\n public async eval(value: IExportersDataValue<IDataExporter[]>, context?: any): Promise<{ exporters: IDataExporter[] }> {\n return this.evalSync(value, context)\n }\n\n public evalSync(value: IExportersDataValue<IDataExporter[]>, context?: any): { exporters: IDataExporter[] } {\n return {\n exporters: this._exporters(value.exporters || [])\n }\n }\n\n private _exporters(exporters: string[]) {\n const dataExporters: IDataExporter[] = (<any>this._injector.get(THESEAM_DATA_EXPORTER) || []) as IDataExporter[]\n return exporters\n .map(e => dataExporters.find(de => de.name === e))\n .filter(notNullOrUndefined)\n }\n\n}\n","// NOTE: ng-packagr ignores the \"types\" and \"typeRoots\" settings in tsconfig.\n// Unless there is a way to make it stop ignoring those settings, tripple slash\n// reference to a `.d.ts` file was the only way I could stop the missing types\n// error.\n// tslint:disable-next-line: no-reference\n// /// <reference path=\"./jexl.d.ts\" />\n// /// <reference path=\"../../../../../custom_types/jexl/index.d.ts\" />\n\nimport { DatePipe } from '@angular/common'\nimport { Injectable } from '@angular/core'\n\n// @ts-ignore: Missing types\nimport jexl from 'jexl'\n\nimport { IDynamicValueEvaluator } from '../../models/dynamic-value-evaluator'\n\nimport { IJexlValue } from './jexl-value'\n\n@Injectable()\nexport class JexlEvaluator implements IDynamicValueEvaluator<'jexl'> {\n\n public readonly type = 'jexl'\n\n private readonly _jexl = new jexl.Jexl()\n\n constructor() {\n this._jexl.addTransform('date', (val: any, row: any) => new DatePipe('en-US').transform(val, 'yyyy-MM-dd h:mm aaa'))\n this._jexl.addTransform('length', (val: any) => val !== null && val !== undefined ? val.length : 0)\n }\n\n public eval<R>(value: IJexlValue<R>, context?: any): Promise<R> {\n return this._jexl.eval(value.expr, context)\n }\n\n public evalSync<R>(value: IJexlValue<R>, context?: any): R {\n return this._jexl.evalSync(value.expr, context)\n }\n\n}\n","// import { TableCellTypeName } from '@theseam/ui-common/table-cell-type'\n\nimport { DynamicActionConfirmDef } from './dynamic-action-confirm-def'\n\n// TODO: Add something to the model that clarifies what is supported from JSON or javascript only.\n// export interface DynamicActionDef<T extends TableCellTypeName> {\nexport interface DynamicActionDef<T> {\n\n readonly type: T\n\n /**\n * If defined, the action must be confirmed.\n */\n confirmDef?: DynamicActionConfirmDef\n\n // TODO: Fix model to avoid this.\n [key: string]: any\n}\n","import { InjectionToken } from '@angular/core'\n\nexport const THESEAM_DYNAMIC_DATA = new InjectionToken<any>('THESEAM_DYNAMIC_DATA')\n","import { DynamicActionDef } from '../models/dynamic-action-def'\n\nexport function isActionType<T extends string>(\n action: DynamicActionDef<T>,\n typeName: T\n): action is DynamicActionDef<T> {\n return action.type === typeName\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;;;;;;MAIa,+BAA+B,GAAG,IAAI,cAAc,CAC/D,0DAA0D;;ACG5D;;;MAMa,yBAAyB;IAIpC,YAC2C,UAAoC;QAHvE,kBAAa,GAAG,IAAI,GAAG,EAAkC,CAAA;;QAM/D,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE;YAC1B,IAAI,SAAS,EAAE,EAAE;gBACf,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;oBAClC,OAAO,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAC,IAAI,GAAG,CAAC,CAAA;iBAC3F;aACF;YACD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;SAClC;KACF;;;;;;IAOM,IAAI,CAAI,KAAsB,EAAE,OAAa;QAClD,IAAI,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE;YACvC,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;SAC7C;;QAGD,IAAI,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;YACxC,OAAO,OAAO,CAAC,OAAO,CAAI,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAA;SACrE;QAED,OAAO,OAAO,CAAC,OAAO,CAAI,KAAK,CAAC,CAAA;KACjC;;;;;;IAOM,QAAQ,CAAI,KAAsB,EAAE,OAAa;QACtD,IAAI,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;YACxC,OAAO,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;SACjD;QAED,OAAO,KAAK,CAAA;KACb;;;;IAKM,iBAAiB,CAAI,KAAsB,EAAE,OAAgB;QAClE,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE;YACzC,OAAO,KAAK,CAAA;SACb;QAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE;YACxF,OAAO,KAAK,CAAA;SACb;QAED,IAAI,CAAkC,KAAM,CAAC,IAAI,EAAE;YACjD,OAAO,KAAK,CAAA;SACb;QAED,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAkC,KAAM,CAAC,IAAI,CAAC,EAAE;YACxE,OAAO,IAAI,CAAA;SACZ;QAED,OAAO,KAAK,CAAA;KACb;;;;IAKO,gBAAgB,CAAI,KAAqC,EAAE,OAAa;QAC9E,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACpD,IAAI,CAAC,SAAS,EAAE;YACd,MAAM,KAAK,CAAC,0CAA0C,KAAK,GAAG,KAAK,CAAC,IAAI,GAAG,SAAS,cAAc,CAAC,CAAA;SACpG;QACD,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;YACnB,MAAM,KAAK,CAAC,0CAA0C,KAAK,GAAG,KAAK,CAAC,IAAI,GAAG,SAAS,gCAAgC,CAAC,CAAA;SACtH;QACD,OAAO,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;KACtC;;;;IAKO,oBAAoB,CAAI,KAAqC,EAAE,OAAa;QAClF,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACpD,IAAI,CAAC,SAAS,EAAE;YACd,MAAM,KAAK,CAAC,0CAA0C,KAAK,GAAG,KAAK,CAAC,IAAI,GAAG,SAAS,cAAc,CAAC,CAAA;SACpG;QACD,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;YACvB,MAAM,KAAK,CAAC,0CAA0C,KAAK,GAAG,KAAK,CAAC,IAAI,GAAG,SAAS,oCAAoC,CAAC,CAAA;SAC1H;QACD,OAAO,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;KAC1C;;;;YArGF,UAAU,SAAC;gBACV,UAAU,EAAE,MAAM;aACnB;;;wCAMI,MAAM,SAAC,+BAA+B;;;MCL9B,qBAAqB,GAAsC;IACtE,KAAK;IACL,MAAM;IACN,KAAK;IACL,OAAO;IACP,QAAQ;EACT;SAEe,oBAAoB,CAAC,MAAc;IACjD,OAAO,qBAAqB,CAAC,OAAO,CAAC,MAAa,CAAC,KAAK,CAAC,CAAC,CAAA;AAC5D,CAAC;MAmBY,0BAA0B,GAAe;IACpD,GAAG,EAAE,GAAG;IAER,aAAa,EAAE;QACb,KAAK,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC7C,MAAM,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC9C,KAAK,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC7C,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,QAAQ,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;KACjD;EACF;AAED;AACA;AACA;MAEa,kBAAkB,GAAG,IAAI,cAAc,CAClD,kFAAkF,EAAE;IAClF,UAAU,EAAE,MAAM;IAClB,OAAO,EAAE,MAAM,CAAE,0BAA0B,CAAE;CAC9C;;SC9Da,iCAAiC;IAC/C,OAAO,KAAK,CAAC,0CAA0C,CAAC,CAAA;AAC1D;;ACaA;;;;;;MAOa,uBAAuB;IAMlC,YACU,YAAuC,EAC3B,KAAiB,EACW,QAAsB;QAF9D,iBAAY,GAAZ,YAAY,CAA2B;QAC3B,UAAK,GAAL,KAAK,CAAY;QACW,aAAQ,GAAR,QAAQ,CAAc;QAP/D,SAAI,GAAG,KAAK,CAAA;QAErB,UAAK,GAAG,YAAY,CAAA;KAMf;IAEE,IAAI,CAAC,IAAyB,EAAE,OAAY;QACjD,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;YACxB,MAAM,iCAAiC,EAAE,CAAA;SAC1C;QAED,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAChD,SAAS,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAM,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CACpE,CAAC,SAAS,EAAE,CAAA;KACd;IAEY,UAAU,CAAC,IAAyB,EAAE,OAAY;;YAC7D,OAAO;gBACL,UAAU,EAAE,IAAI;gBAChB,WAAW,EAAE,OAAO;aACrB,CAAA;SACF;KAAA;IAEa,YAAY,CAAC,IAAyB,EAAE,OAAa;;YACjE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,KAAK,CAAA;YAEnC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;YAC7C,IAAI,GAAG,KAAK,IAAI,EAAE;gBAChB,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAA;aACtE;YAED,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;YAC/C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;YAEnD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;YAErD,MAAM,MAAM,GAAG;gBACb,GAAG;gBACH,MAAM;gBACN,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE;aACnC,CAAA;YAED,OAAO,MAAM,CAAA;SACd;KAAA;IAEa,OAAO,CAAC,IAAyB,EAAE,OAAa;;YAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;YAEvC,IAAI,QAAQ,GAAG,EAAE,CAAA;YACjB,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACjB,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;aAChE;YAED,IAAI,aAAa,CAAC,QAAQ,CAAC,EAAE;gBAC3B,OAAO,QAAQ,CAAA;aAChB;YAED,IAAI,MAAM,IAAI,MAAM,CAAC,GAAG,KAAK,SAAS,IAAI,MAAM,CAAC,GAAG,KAAK,IAAI,EAAE;gBAC7D,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;gBAC7D,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;oBAC3B,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;wBACjE,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;oBAC1C,OAAO,GAAG,MAAM,CAAC,GAAG,GAAG,QAAQ,GAAG,GAAG,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAA;iBACxD;aACF;YAED,OAAO,IAAI,CAAA;SACZ;KAAA;IAEO,aAAa,CAAC,IAAyB;QAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAA;QAEnC,IAAI,IAAI,CAAC,EAAE,KAAK,SAAS,IAAI,IAAI,CAAC,EAAE,KAAK,IAAI,EAAE;YAC7C,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAA;SAC9C;QAED,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;YAC5B,IAAI,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,EAAE;gBACtC,OAAO,MAAM,CAAA;aACd;SACF;QAED,OAAO,IAAI,CAAA;KACZ;IAEa,QAAQ,CAAC,IAAyB,EAAE,OAAa;;YAC7D,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE;gBACjD,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;aACxD;YAED,OAAO,SAAS,CAAA;SACjB;KAAA;IAEa,UAAU,CAAC,IAAyB,EAAE,OAAa;;YAC/D,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE;gBACrD,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;aAC1D;YAED,OAAO,SAAS,CAAA;SACjB;KAAA;IAEa,WAAW,CAAC,IAAyB,EAAE,OAAa;;YAChE,IAAI,OAAO,GAA4B,EAAE,CAAA;YAEzC,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;;;;YAMvC,IAAI,MAAM,IAAI,MAAM,CAAC,aAAa,EAAE;gBAClC,MAAM,MAAM,GAAG,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ;sBAC1C,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;sBAChC,KAAK,CAAA;gBAET,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,EAAE;oBACjC,MAAM,KAAK,CAAC,qCAAqC,qBAAqB,EAAE,CAAC,CAAA;iBAC1E;gBAED,MAAM,CAAC,GAAG,MAAM,IAAI,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;gBAChD,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,EAAE;oBACjC,OAAO,IAAG,MAAM,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,OAAO,CAAQ,CAAA,CAAA;iBACrD;aACF;;YAGD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAA;YAC/B,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,IAAI,EAAE;gBACnD,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;oBAClC,OAAO,GAAG,UAAiB,CAAA;iBAC5B;qBAAM;oBACL,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAiB,EAAE,OAAO,CAAC,CAAA;oBAC/D,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;wBAC5B,OAAO,GAAG,IAAI,CAAA;qBACf;yBAAM;wBACL,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;wBACpC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;4BACtB,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE;gCAC9B,MAAM,KAAK,CAAC,qCAAqC,qBAAqB,EAAE,CAAC,CAAA;6BAC1E;;4BAGD,MAAM,KAAK,GAAI,UAAkB,CAAC,GAAG,CAAC,CAAA;4BACtC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;gCAC7B,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;6BACrB;iCAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gCAC/B,OAAO,CAAC,GAAG,CAAC,IAAG,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAM,CAAC,oDAAI,OAAA,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA,GAAA,CAAC,CAAQ,CAAA,CAAA;6BACxG;iCAAM;gCACL,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;6BAC5D;yBACF;qBACF;iBACF;aACF;YAED,OAAO,IAAI,WAAW,CAAC,OAAc,CAAC,CAAA;SACvC;KAAA;IAEa,YAAY,CACxB,OAA0G,EAC1G,OAAa;;YAEb,IAAI,GAAG,GAAmD,EAAE,CAAA;;YAG5D,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;gBAC/B,GAAG,GAAG,OAAO,CAAA;aACd;iBAAM;gBACL,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAc,EAAE,OAAO,CAAC,CAAA;gBAC5D,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;oBAC5B,GAAG,GAAG,IAAI,CAAA;iBACX;qBAAM;oBACL,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;oBACjC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;wBACtB,MAAM,KAAK,GAAI,OAAe,CAAC,GAAG,CAAC,CAAA;wBACnC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;4BAC7B,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;yBACjB;6BAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;4BAC/B,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAM,CAAC,oDAAI,OAAA,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA,GAAA,CAAC,CAAC,CAAA;yBAC7F;6BAAM;4BACL,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;yBACxD;qBACF;iBACF;aACF;YACD,OAAO,GAAG,CAAA;SACX;KAAA;IAEO,YAAY;QAClB,IAAI,SAAS,EAAE,EAAE;YACf,OAAO,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAA;SAClF;aAAM;;YAEL,OAAO,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAA;SAC5E;QAED,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YACf,IAAI,SAAS,EAAE,EAAE;gBACf,OAAO,CAAC,IAAI,CAAC,yFAAyF,CAAC,CAAA;aACxG;YACD,OAAO,KAAK,CAAA;SACb;QACD,OAAO,IAAI,CAAA;KACZ;;;YAlNF,UAAU;;;YAfF,yBAAyB;YAPzB,UAAU,uBA+Bd,QAAQ;wCACR,QAAQ,YAAI,MAAM,SAAC,kBAAkB;;;ACzB1C;;;MAIa,wBAAwB;IAMnC,YACU,aAAwC;QAAxC,kBAAa,GAAb,aAAa,CAA2B;QALzC,SAAI,GAAG,MAAM,CAAA;QAEtB,UAAK,GAAG,aAAa,CAAA;KAIhB;;;IAMQ,UAAU,CAAC,IAA0B,EAAE,OAAY;;YAC9D,MAAM,IAAI,GAAW,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAC7D,MAAM,QAAQ,GAAY,CAAC,EAAE,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAA;YAC1E,MAAM,KAAK,GAAY,CAAC,EAAE,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;YACpE,MAAM,MAAM,GAAuB,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YAC7E,MAAM,WAAW,GAAqC,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;YAErG,MAAM,GAAG,GAA6B;gBACpC,UAAU,EAAE,IAAI;gBAChB,WAAW,EAAE,KAAK,GAAG,YAAY,GAAG,QAAQ,GAAG,eAAe,GAAG,MAAM;gBACvE,OAAO,EAAE,IAAI;;aAEd,CAAA;YAED,IAAI,MAAM,EAAE;gBACV,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE;oBAAE,GAAG,CAAC,UAAU,GAAG,EAAE,CAAA;iBAAE;gBAC5C,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,MAAM,CAAA;aAC/B;YAED,IAAI,WAAW,EAAE;gBACf,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE;oBAAE,GAAG,CAAC,UAAU,GAAG,EAAE,CAAA;iBAAE;gBAC5C,GAAG,CAAC,UAAU,CAAC,WAAW,GAAG,WAAW,CAAA;aACzC;YAED,OAAO,GAAG,CAAA;SACX;KAAA;;;YAxCF,UAAU;;;YARF,yBAAyB;;;MCErB,sBAAsB,GAAG,IAAI,cAAc,CACtD,sCAAsC;;MCW3B,0BAA0B;IAIrC,YACU,YAAuC;;IAE3B,cAAyC,EACjB,OAAiC;QAHrE,iBAAY,GAAZ,YAAY,CAA2B;QAE3B,mBAAc,GAAd,cAAc,CAA2B;QALvD,eAAU,GAAG,IAAI,GAAG,EAAiC,CAAA;;QAS3D,KAAK,MAAM,CAAC,KAAK,OAAO,IAAI,EAAE,GAAG;YAC/B,IAAI,SAAS,EAAE,EAAE;gBACf,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;oBAC/B,OAAO,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC,IAAI,GAAG,CAAC,CAAA;iBACzF;aACF;YACD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;SAC/B;KACF;;;;;;IAOY,IAAI,CAAmB,SAA8B,EAAE,OAAa;;YAC/E,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;YAClD,IAAI,CAAC,MAAM,EAAE;gBACX,MAAM,KAAK,CAAC,wCAAwC,SAAS,GAAG,SAAS,CAAC,IAAI,GAAG,SAAS,cAAc,CAAC,CAAA;aAC1G;YACD,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;gBAChB,MAAM,KAAK,CAAC,wCAAwC,SAAS,GAAG,SAAS,CAAC,IAAI,GAAG,SAAS,gCAAgC,CAAC,CAAA;aAC5H;YAED,IAAI,MAAM,IAAI,CAAC,oBAAoB,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE;gBACvD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;gBACnE,IAAI,CAAC,SAAS,EAAE;;oBAEd,OAAO,UAAiB,CAAA;iBACzB;aACF;YAED,OAAO,MAAM,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;SAC7C;KAAA;;;;;;IAOM,QAAQ,CAAmB,SAA8B,EAAE,OAAa;QAC7E,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;QAClD,IAAI,CAAC,MAAM,EAAE;YACX,MAAM,KAAK,CAAC,wCAAwC,SAAS,GAAG,SAAS,CAAC,IAAI,GAAG,SAAS,cAAc,CAAC,CAAA;SAC1G;QACD,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;YACpB,MAAM,KAAK,CAAC,wCAAwC,SAAS,GAAG,SAAS,CAAC,IAAI,GAAG,SAAS,oCAAoC,CAAC,CAAA;SAChI;QAED,OAAO,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;KAC3C;;;;;;IAOM,UAAU,CAAmB,SAA8B,EAAE,OAAa;QAC/E,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;QAClD,IAAI,CAAC,MAAM,EAAE;YACX,MAAM,KAAK,CAAC,wCAAwC,SAAS,GAAG,SAAS,CAAC,IAAI,GAAG,SAAS,cAAc,CAAC,CAAA;SAC1G;QACD,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;YACtB,MAAM,KAAK,CAAC,wCAAwC,SAAS,GAAG,SAAS,CAAC,IAAI,GAAG,SAAS,sCAAsC,CAAC,CAAA;SAClI;QAED,OAAO,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;KAC7C;;;;IAKM,gBAAgB,CAAmB,KAA0B,EAAE,OAAgB;QACpF,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE;YACzC,OAAO,KAAK,CAAA;SACb;QAED,MAAM,MAAM,GAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAC/C,IAAI,CAAC,MAAM,EAAE;YACX,OAAO,KAAK,CAAA;SACb;QAED,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;YAC3B,OAAO,KAAK,CAAA;SACb;QACD,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;YAChC,OAAO,KAAK,CAAA;SACb;QAED,OAAO,IAAI,CAAA;KACZ;IAEY,oBAAoB,CAAmB,SAA8B,EAAE,OAAa;;YAC/F,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE;gBACzC,OAAO,KAAK,CAAA;aACb;YAED,IAAI,WAAW,CAAC,SAAS,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE;gBACjD,OAAO,EAAE,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAA;aAC/E;YAED,OAAO,IAAI,CAAA;SACZ;KAAA;IAEM,wBAAwB,CAAmB,SAA8B,EAAE,OAAa;QAC7F,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE;YACzC,OAAO,KAAK,CAAA;SACb;QAED,IAAI,WAAW,CAAC,SAAS,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE;YACjD,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;YACpF,IAAI,CAAC,QAAQ,EAAE;gBACb,MAAM,KAAK,CACT,wCAAwC,SAAS,GAAG,SAAS,CAAC,IAAI,GAAG,SAAS,eAAe;oBAC7F,4DAA4D,CAC7D,CAAA;aACF;YACD,OAAO,KAAK,CAAA;SACb;QAED,MAAM,KAAK,CACT,wCAAwC,SAAS,GAAG,SAAS,CAAC,IAAI,GAAG,SAAS,eAAe;YAC7F,4DAA4D,CAC7D,CAAA;KACF;IAEY,kBAAkB,CAAmB,SAA8B,EAAE,OAAa;;YAC7F,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;gBACxB,MAAM,KAAK,CACT,wCAAwC,SAAS,GAAG,SAAS,CAAC,IAAI,GAAG,SAAS,eAAe;oBAC7F,yDAAyD,CAC1D,CAAA;aACF;YAED,MAAM,UAAU,GAAG,SAAS,CAAC,UAAU,CAAA;YACvC,IAAI,CAAC,UAAU,EAAE;gBACf,MAAM,KAAK,CACT,wCAAwC,SAAS,GAAG,SAAS,CAAC,IAAI,GAAG,SAAS,eAAe;oBAC7F,6CAA6C,CAC9C,CAAA;aACF;YAED,IAAI,OAA2B,CAAA;YAC/B,IAAI,WAAW,CAAC,UAAU,EAAE,SAAS,CAAC,EAAE;gBACtC,OAAO,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;aACpE;YACD,IAAI,KAAiE,CAAA;YACrE,IAAI,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE;gBACpC,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;aAChE;YAED,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;YACzD,OAAO,QAAQ,CAAC,WAAW,EAAE,CAAC,IAAI,CAChC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC,CAC1B,CAAC,SAAS,EAAE,CAAA;SACd;KAAA;;;;YAzKF,UAAU,SAAC;gBACV,UAAU,EAAE,MAAM;aACnB;;;YARQ,yBAAyB;YAJzB,wBAAwB,uBAoB5B,QAAQ;wCACR,QAAQ,YAAI,MAAM,SAAC,sBAAsB;;;ACX9C;;;MAIa,yBAAyB;IAMpC,YACU,YAAuC,EACvC,MAAa,EACb,SAAmB;QAFnB,iBAAY,GAAZ,YAAY,CAA2B;QACvC,WAAM,GAAN,MAAM,CAAO;QACb,cAAS,GAAT,SAAS,CAAU;QAPpB,SAAI,GAAG,OAAO,CAAA;QAEvB,UAAK,GAAG,cAAc,CAAA;KAMjB;IAEC,IAAI,CAAC,IAA2B,EAAE,OAAY;;YAClD,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;YACnD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;YAEzC,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,IAAI,CAC1C,SAAS,CAAC,QAAQ,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC,IAAI,CAC/C,SAAS,CAAC,MAAM;gBACd,MAAM,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;;gBAG7D,IAAI,YAAY,EAAE;oBAChB,MAAM,mBAAmB,GAAG,IAAI,CAAC,uBAAuB,EAAE,CAAA;oBAC1D,OAAO,mBAAmB,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;iBACvD;gBACD,OAAO,EAAE,CAAC,MAAM,CAAC,CAAA;aAClB,CAAC,CACH,CAAC,CACH,CAAC,SAAS,EAAE,CAAA;SACd;KAAA;;IAIY,UAAU,CAAC,IAA2B,EAAE,OAAY;;YAC/D,OAAO;gBACL,UAAU,EAAE,IAAI;gBAChB,WAAW,EAAE,OAAO;aACrB,CAAA;SACF;KAAA;;;;;;IAOO,uBAAuB;QAC7B,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAA;KACtD;IAEO,aAAa,CAAC,IAA2B,EAAE,OAAY;QAC7D,IAAI,SAAS,GAAG,IAAI,IAAI,IAAI,CAAC,SAAS,CAAA;QACtC,IAAI,SAAS,EAAE;YACb,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;SAC3D;QACD,OAAO,SAAS,CAAA;KACjB;IAEO,QAAQ,CAAC,IAA2B,EAAE,OAAY;QACxD,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC,IAAI,CAAA;QAC5B,IAAI,IAAI,EAAE;YACR,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;SACjD;QACD,OAAO,IAAI,CAAA;KACZ;IAEO,qBAAqB,CAAC,IAA2B,EAAE,MAAW;QACpE,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE;YACpD,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;SAClC;KACF;IAEO,UAAU,CAAC,KAAU,EAAE,IAAU;;QAEvC,MAAM,MAAM,GAAgB;YAC1B,IAAI;YACJ,SAAS,EAAE,IAAI;SAChB,CAAA;QAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC7B,OAAO,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;SACxD;aAAM;YACL,OAAO,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAA;SACxD;KACF;;;YArFF,UAAU;;;YATF,yBAAyB;YAFzB,KAAK;YAJO,QAAQ;;;MCQhB,sBAAsB;IAIjC,YACU,SAAmB;QAAnB,cAAS,GAAT,SAAS,CAAU;QAHb,SAAI,GAAG,gBAAgB,CAAA;KAIlC;IAEQ,IAAI,CAAC,KAA2C,EAAE,OAAa;;YAC1E,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;SACrC;KAAA;IAEM,QAAQ,CAAC,KAA2C,EAAE,OAAa;QACxE,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC;SAClD,CAAA;KACF;IAEO,UAAU,CAAC,SAAmB;QACpC,MAAM,aAAa,IAA0B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,EAAE,CAAoB,CAAA;QAChH,OAAO,SAAS;aACb,GAAG,CAAC,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;aACjD,MAAM,CAAC,kBAAkB,CAAC,CAAA;KAC9B;;;YAxBF,UAAU;;;YARU,QAAQ;;;ACA7B;MAmBa,aAAa;IAMxB;QAJgB,SAAI,GAAG,MAAM,CAAA;QAEZ,UAAK,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAA;QAGtC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,GAAQ,EAAE,GAAQ,KAAK,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE,qBAAqB,CAAC,CAAC,CAAA;QACpH,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,GAAQ,KAAK,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;KACpG;IAEM,IAAI,CAAI,KAAoB,EAAE,OAAa;QAChD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;KAC5C;IAEM,QAAQ,CAAI,KAAoB,EAAE,OAAa;QACpD,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;KAChD;;;YAlBF,UAAU;;;;AClBX;;MCEa,oBAAoB,GAAG,IAAI,cAAc,CAAM,sBAAsB;;SCAlE,YAAY,CAC1B,MAA2B,EAC3B,QAAW;IAEX,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAA;AACjC;;ACPA;;;;;;"}
|