@dsivd/prestations-ng 15.2.4 → 15.2.5-beta1
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/CHANGELOG.md +7 -0
- package/dsivd-prestations-ng-v15.2.5-beta1.tgz +0 -0
- package/esm2020/foehn-address/foehn-input-address.component.mjs +1 -1
- package/esm2020/foehn-autocomplete/foehn-autocomplete.component.mjs +11 -8
- package/esm2020/foehn-multiselect-autocomplete/foehn-multiselect-autocomplete.component.mjs +1 -1
- package/esm2020/foehn-navigation/foehn-navigation.service.mjs +4 -1
- package/fesm2015/dsivd-prestations-ng.mjs +16 -9
- package/fesm2015/dsivd-prestations-ng.mjs.map +1 -1
- package/fesm2020/dsivd-prestations-ng.mjs +15 -9
- package/fesm2020/dsivd-prestations-ng.mjs.map +1 -1
- package/foehn-autocomplete/foehn-autocomplete.component.d.ts +2 -2
- package/package.json +1 -1
- package/dsivd-prestations-ng-v15.2.4.tgz +0 -0
|
@@ -199,6 +199,9 @@ export class FoehnNavigationService {
|
|
|
199
199
|
return (this.getNextAvailableRoute(NavigationDirection.BACKWARD) === null);
|
|
200
200
|
}
|
|
201
201
|
isLastFormPage() {
|
|
202
|
+
if (!this.orderedRoutes?.length) {
|
|
203
|
+
return false;
|
|
204
|
+
}
|
|
202
205
|
if (!this.getCurrentRoute(this.getAvailableRoutes())) {
|
|
203
206
|
return true;
|
|
204
207
|
}
|
|
@@ -297,4 +300,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
|
|
|
297
300
|
providedIn: 'root'
|
|
298
301
|
}]
|
|
299
302
|
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.GesdemHandlerService }, { type: i3.GesdemActionRecoveryService }, { type: i1.ActivatedRoute }, { type: i4.Location }]; } });
|
|
300
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9laG4tbmF2aWdhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJlc3RhdGlvbnMtbmcvc3JjL2ZvZWhuLW5hdmlnYXRpb24vZm9laG4tbmF2aWdhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBR3BELE9BQU8sRUFBRSxlQUFlLEVBQWMsTUFBTSxNQUFNLENBQUM7Ozs7OztBQUVuRCxNQUFNLENBQU4sSUFBWSxtQkFHWDtBQUhELFdBQVksbUJBQW1CO0lBQzNCLG1FQUFZLENBQUE7SUFDWixzRUFBYSxDQUFBO0FBQ2pCLENBQUMsRUFIVyxtQkFBbUIsS0FBbkIsbUJBQW1CLFFBRzlCO0FBS0QsTUFBTSxPQUFPLHNCQUFzQjtJQVUvQixZQUNZLE1BQWMsRUFDZCxhQUFtQyxFQUNuQywyQkFBd0QsRUFDeEQsS0FBcUIsRUFDckIsUUFBa0I7UUFKbEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGtCQUFhLEdBQWIsYUFBYSxDQUFzQjtRQUNuQyxnQ0FBMkIsR0FBM0IsMkJBQTJCLENBQTZCO1FBQ3hELFVBQUssR0FBTCxLQUFLLENBQWdCO1FBQ3JCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFYdEIsV0FBTSxHQUFHLEtBQUssQ0FBQztRQUNmLGlDQUE0QixHQUE2QixJQUFJLGVBQWUsQ0FDaEYsS0FBSyxDQUNSLENBQUM7UUFDTSxrQkFBYSxHQUFHLElBQUksQ0FBQztJQVExQixDQUFDO0lBRUosSUFBSSxXQUFXO1FBQ1gsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxJQUFJLGNBQWMsQ0FBQyxLQUFxQjtRQUNwQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFD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QUFDO0lBRU8sYUFBYSxDQUNqQixhQUFzQixFQUN0QixTQUFrQixFQUFFO1FBRXBCLGFBQWEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDMUIsSUFBSSxLQUFLLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFO2dCQUN6QyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7YUFDOUM7WUFFRCxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDcEMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDO2FBQ3BDO1lBRUQsT0FBTyxNQUFNLENBQUM7UUFDbEIsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRU8sbUJBQW1CO1FBQ3ZCLG9FQUFvRTtRQUNwRSxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ1osTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNwRCxJQUFJLEtBQUssRUFBRTtnQkFDUCxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7YUFDakI7UUFDTCxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDVixDQUFDOztvSEF0WFEsc0JBQXNCO3dIQUF0QixzQkFBc0IsY0FGbkIsTUFBTTs0RkFFVCxzQkFBc0I7a0JBSGxDLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LFxuICAgIENhbkFjdGl2YXRlLFxuICAgIFBhcmFtcyxcbiAgICBSb3V0ZSxcbiAgICBSb3V0ZXJcbn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEdlc2RlbUhhbmRsZXJTZXJ2aWNlIH0gZnJvbSAnLi4vZ2VzZGVtL2dlc2RlbS1oYW5kbGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2VydmljZUxvY2F0b3IgfSBmcm9tICcuLi9zZXJ2aWNlLWxvY2F0b3InO1xuaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgR2VzZGVtQWN0aW9uUmVjb3ZlcnlTZXJ2aWNlIH0gZnJvbSAnLi4vZ2VzZGVtLWFjdGlvbi1yZWNvdmVyeS9nZXNkZW0tYWN0aW9uLXJlY292ZXJ5LnNlcnZpY2UnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCBlbnVtIE5hdmlnYXRpb25EaXJlY3Rpb24ge1xuICAgIEZPUldBUkQgPSArMSxcbiAgICBCQUNLV0FSRCA9IC0xXG59XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgRm9laG5OYXZpZ2F0aW9uU2VydmljZSB7XG4gICAgY3VycmVudFJvdXRlT3JkZXI6IG51bWJlcjtcbiAgICBvcmRlcmVkUm91dGVzOiBSb3V0ZVtdO1xuICAgIHByaXZhdGUgX2FjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZTtcbiAgICBwcml2YXRlIGlzSW5pdCA9IGZhbHNlO1xuICAgIHByaXZhdGUgaW5pdGlhbGl6ZWRBbmRSb3V0ZUFjdGl2YXRlZDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihcbiAgICAgICAgZmFsc2VcbiAgICApO1xuICAgIHByaXZhdGUgbGluZWFyUm91dGluZyA9IHRydWU7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgcHJpdmF0ZSBnZXNkZW1TZXJ2aWNlOiBHZXNkZW1IYW5kbGVyU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBnZXNkZW1BY3Rpb25SZWNvdmVyeVNlcnZpY2U6IEdlc2RlbUFjdGlvblJlY292ZXJ5U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgICAgIHByaXZhdGUgbG9jYXRpb246IExvY2F0aW9uXG4gICAgKSB7fVxuXG4gICAgZ2V0IGluaXRpYWxpemVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0luaXQ7XG4gICAgfVxuXG4gICAgc2V0IGFjdGl2YXRlZFJvdXRlKHZhbHVlOiBBY3RpdmF0ZWRSb3V0ZSkge1xuICAgICAgICB0aGlzLnRocm93SWZOb3RJbml0KCk7XG4gICAgICAgIHRoaXMuX2FjdGl2YXRlZFJvdXRlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZWRBbmRSb3V0ZUFjdGl2YXRlZC5uZXh0KHRydWUpO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRSb290Um91dGVSZWN1cnNpdmUocm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QpOiBSb3V0ZSB7XG4gICAgICAgIGlmIChyb3V0ZSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHJvdXRlLnJvdXRlQ29uZmlnICYmXG4gICAgICAgICAgICAgICAgcm91dGUucm91dGVDb25maWcuZGF0YSAmJlxuICAgICAgICAgICAgICAgIHJvdXRlLnJvdXRlQ29uZmlnLmRhdGEucm9vdFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJvdXRlLnJvdXRlQ29uZmlnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Um9vdFJvdXRlUmVjdXJzaXZlKHJvdXRlLnBhcmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaW5pdFJvdXRlKHJvdXRlOiBSb3V0ZSk6IHZvaWQge1xuICAgICAgICBpZiAocm91dGUpIHtcbiAgICAgICAgICAgIHRoaXMub3JkZXJlZFJvdXRlcyA9IHRoaXMuaW5kZXhSb3V0ZXNCeU9yZGVyKHJvdXRlKTtcblxuICAgICAgICAgICAgLy8gQnkgZGVmYXVsdCB0aGUgcHJlZml4IHNob3VsZCBiZSB0aGUgcGF0aCBvZiB0aGUgcm91dGUuIChlLmcuIGluIC92YWxpZGF0aW9uLzEyMzEyMy0xMjMyMS9wYWdlMSxcbiAgICAgICAgICAgIC8vIHRoZSBwcmVmaXggaXMgXCJ2YWxpZGF0aW9uXCIpLiBIb3dldmVyLCBpZiB0aGUgYXBwbGljYXRpb24gaXMgY29kZS1zcGxpdHRlZCB3aXRoIHRoZSByb3V0aW5nIGRlZmluZWRcbiAgICAgICAgICAgIC8vIGluIGEgbW9kdWxlLCB0aGlzIHdvbid0IHdvcmsuIEluIHRoaXMgY2FzZSwgeW91IGNhbiBzcGVjaWZ5IHRoZSBwYXRoIGluICQuZGF0YS5iYXNlUGF0aCBzbyB0aGUgR2VzRGVtXG4gICAgICAgICAgICAvLyBzZXJ2aWNlIGtub3dzIHdoZXJlIHRvIHNlbmQgdGhlIHJlcXVlc3QgdG8gdGhlIGJhY2tlbmQuXG4gICAgICAgICAgICBjb25zdCBwcmVmaXggPSByb3V0ZS5kYXRhLmJhc2VQYXRoIHx8IHJvdXRlLnBhdGg7XG4gICAgICAgICAgICB0aGlzLmdlc2RlbVNlcnZpY2UucHJlZml4ID0gcHJlZml4O1xuICAgICAgICAgICAgdGhpcy5nZXNkZW1BY3Rpb25SZWNvdmVyeVNlcnZpY2UucHJlZml4ID0gcHJlZml4O1xuICAgICAgICAgICAgdGhpcy5saW5lYXJSb3V0aW5nID0gcm91dGUuZGF0YS5saW5lYXJSb3V0aW5nICE9PSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRocm93SWZOb3RJbml0KCk7XG4gICAgfVxuXG4gICAgdGhyb3dJZk5vdEluaXQoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5pc0luaXQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJObyByb3V0ZSBpcyBpZGVudGlmaWVkIGFzICdyb290Jy4gSGF2ZSB5b3UgY2FsbGVkIGluaXRSb3V0ZSgpID9cIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZVJvdXRlSW5mb3JtYXRpb25zKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnRocm93SWZOb3RJbml0KCk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRSb3V0ZSA9IHRoaXMuX2FjdGl2YXRlZFJvdXRlLnJvdXRlQ29uZmlnO1xuXG4gICAgICAgIGxldCBjdXJyZW50Um91dGVPcmRlciA9IDE7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgISFjdXJyZW50Um91dGUgJiZcbiAgICAgICAgICAgICEhY3VycmVudFJvdXRlLmRhdGEgJiZcbiAgICAgICAgICAgICEhY3VycmVudFJvdXRlLmRhdGEub3JkZXJcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjdXJyZW50Um91dGVPcmRlciA9IGN1cnJlbnRSb3V0ZS5kYXRhLm9yZGVyO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3VycmVudFJvdXRlT3JkZXIgPSBjdXJyZW50Um91dGVPcmRlcjtcbiAgICB9XG5cbiAgICBnZXRGaXJzdFJvdXRlKCk6IFJvdXRlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JkZXJlZFJvdXRlc1sxXTtcbiAgICB9XG5cbiAgICBjdXJyZW50KCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICB0aGlzLnRocm93SWZOb3RJbml0KCk7XG4gICAgICAgIGlmICghdGhpcy5nZXNkZW1TZXJ2aWNlLmxhc3RSZXNwb25zZSkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCdFcnJldXIgbmF2aWdhdGlvblNlcnZpY2UjY3VycmVudCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN1cnJlbnRSb3V0ZSA9IHRoaXMub3JkZXJlZFJvdXRlc1t0aGlzLmN1cnJlbnRSb3V0ZU9yZGVyXTtcblxuICAgICAgICBjb25zdCBwcmVmaXggPSB0aGlzLmdlc2RlbVNlcnZpY2UucHJlZml4O1xuICAgICAgICBjb25zdCBjb21tYW5kczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgaWYgKHByZWZpeCkge1xuICAgICAgICAgICAgY29tbWFuZHMucHVzaChwcmVmaXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZ2VzZGVtU2VydmljZS5sYXN0UmVzcG9uc2UubWV0YS5yZWZlcmVuY2UpIHtcbiAgICAgICAgICAgIGNvbW1hbmRzLnB1c2goXG4gICAgICAgICAgICAgICAgdGhpcy5nZXNkZW1TZXJ2aWNlLmxhc3RSZXNwb25zZS5tZXRhLnJlZmVyZW5jZSxcbiAgICAgICAgICAgICAgICBjdXJyZW50Um91dGUucGF0aFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29uc3QgdHJlZSA9IHRoaXMucm91dGVyLmNyZWF0ZVVybFRyZWUoY29tbWFuZHMpO1xuICAgICAgICAgICAgY29uc3QgdXJsID1cbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5zZXJpYWxpemVVcmwodHJlZSkgK1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0UXVlcnlQYXJhbXNUb0ZvcndhcmRBc1N0cmluZygpO1xuICAgICAgICAgICAgdGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUodXJsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XG4gICAgfVxuXG4gICAgaGFzQmVlbkluaXRpYWxpemVkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pbml0aWFsaXplZEFuZFJvdXRlQWN0aXZhdGVkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIGdldFF1ZXJ5UGFyYW1zVG9Gb3J3YXJkQXNTdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgcGFyYW1zID0gdGhpcy5nZXRRdWVyeVBhcmFtc1RvRm9yd2FyZCgpIHx8IFtdO1xuICAgICAgICBsZXQgc3RyaW5nUGFyYW1zID0gJyc7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHBhcmFtcykpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcGFyYW1zW2tleV07XG4gICAgICAgICAgICBzdHJpbmdQYXJhbXMgKz0gc3RyaW5nUGFyYW1zID8gJyYnIDogJz8nO1xuICAgICAgICAgICAgc3RyaW5nUGFyYW1zICs9IGAke2tleX09JHt2YWx1ZX1gO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdHJpbmdQYXJhbXM7XG4gICAgfVxuXG4gICAgZ2V0UXVlcnlQYXJhbXNUb0ZvcndhcmQoKTogUGFyYW1zIHtcbiAgICAgICAgY29uc3QgcmVDYXB0Y2hhQnlQYXNzVVVJRCA9IHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXNcbiAgICAgICAgICAgIC5yZUNhcHRjaGFCeVBhc3NVVUlEO1xuICAgICAgICBjb25zdCBzY3JvbGxUbyA9IHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMuc2Nyb2xsVG87XG4gICAgICAgIGlmICghIXJlQ2FwdGNoYUJ5UGFzc1VVSUQgfHwgISFzY3JvbGxUbykge1xuICAgICAgICAgICAgY29uc3QgcGFyYW1zOiBQYXJhbXMgPSB7fTtcbiAgICAgICAgICAgIGlmICghIXJlQ2FwdGNoYUJ5UGFzc1VVSUQpIHtcbiAgICAgICAgICAgICAgICBwYXJhbXMucmVDYXB0Y2hhQnlQYXNzVVVJRCA9IHJlQ2FwdGNoYUJ5UGFzc1VVSUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoISFzY3JvbGxUbykge1xuICAgICAgICAgICAgICAgIHBhcmFtcy5zY3JvbGxUbyA9IHNjcm9sbFRvO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHBhcmFtcztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBuZXh0KCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICB0aGlzLnRocm93SWZOb3RJbml0KCk7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZGlyZWN0VG9BdmFpbGFibGVSb3V0ZShOYXZpZ2F0aW9uRGlyZWN0aW9uLkZPUldBUkQpO1xuICAgIH1cblxuICAgIHByZXZpb3VzKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICB0aGlzLnRocm93SWZOb3RJbml0KCk7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZGlyZWN0VG9BdmFpbGFibGVSb3V0ZShOYXZpZ2F0aW9uRGlyZWN0aW9uLkJBQ0tXQVJEKTtcbiAgICB9XG5cbiAgICBsYXN0KCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICB0aGlzLnRocm93SWZOb3RJbml0KCk7XG4gICAgICAgIGNvbnN0IHJvdXRlID0gdGhpcy5nZXRBdmFpbGFibGVSb3V0ZXMoKTtcbiAgICAgICAgY29uc3QgbmV4dFJvdXRlUGF0aCA9IHJvdXRlW3JvdXRlLmxlbmd0aCAtIDFdLnBhdGg7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZGlyZWN0KG5leHRSb3V0ZVBhdGgpO1xuICAgIH1cblxuICAgIHJlZGlyZWN0KG5ld1BhdGg6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICBjb25zdCByb3V0ZXMgPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuZ2VzZGVtU2VydmljZS5wcmVmaXgpIHtcbiAgICAgICAgICAgIHJvdXRlcy5wdXNoKHRoaXMuZ2VzZGVtU2VydmljZS5wcmVmaXgpO1xuICAgICAgICB9XG4gICAgICAgIHJvdXRlcy5wdXNoKHRoaXMuZ2VzZGVtU2VydmljZS5sYXN0UmVzcG9uc2UubWV0YS5yZWZlcmVuY2UsIG5ld1BhdGgpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLnJvdXRlclxuICAgICAgICAgICAgLm5hdmlnYXRlKHJvdXRlcywge1xuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB0aGlzLmdldFF1ZXJ5UGFyYW1zVG9Gb3J3YXJkKClcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbihzdWNjZXNzID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEZvY3VzT25QYWdlVGl0bGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRBdmFpbGFibGVSb3V0ZXMoKTogUm91dGVbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yZGVyZWRSb3V0ZXMuZmlsdGVyKHJvdXRlID0+IHRoaXMuaXNSb3V0ZUF2YWlsYWJsZShyb3V0ZSkpO1xuICAgIH1cblxuICAgIGdldEN1cnJlbnRSb3V0ZUluZGV4KCk6IG51bWJlciB7XG4gICAgICAgIC8vIFRoaXMgZXZhbHVhdGVzIGFsbCB0aGUgZ3VhcmRzXG4gICAgICAgIGNvbnN0IGF2YWlsYWJsZVJvdXRlcyA9IHRoaXMuZ2V0QXZhaWxhYmxlUm91dGVzKCk7XG5cbiAgICAgICAgY29uc3QgY3VycmVudFJvdXRlID0gYXZhaWxhYmxlUm91dGVzLmZpbmQoXG4gICAgICAgICAgICByb3V0ZSA9PiByb3V0ZS5kYXRhLm9yZGVyID09PSB0aGlzLmN1cnJlbnRSb3V0ZU9yZGVyXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKCFjdXJyZW50Um91dGUpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGF2YWlsYWJsZVJvdXRlcy5pbmRleE9mKGN1cnJlbnRSb3V0ZSk7XG4gICAgfVxuXG4gICAgZ2V0VG90YWxSb3V0ZXNTaXplKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEF2YWlsYWJsZVJvdXRlcygpLmxlbmd0aDtcbiAgICB9XG5cbiAgICBnZXRMYXN0Um91dGVPcmRlcigpOiBudW1iZXIge1xuICAgICAgICBjb25zdCByb3V0ZXMgPSB0aGlzLmdldEF2YWlsYWJsZVJvdXRlcygpO1xuICAgICAgICByZXR1cm4gcm91dGVzW3JvdXRlcy5sZW5ndGggLSAxXS5kYXRhLm9yZGVyO1xuICAgIH1cblxuICAgIGdldE5leHRBdmFpbGFibGVSb3V0ZShkaXJlY3Rpb246IE5hdmlnYXRpb25EaXJlY3Rpb24pOiBSb3V0ZSB7XG4gICAgICAgIC8vIFRoaXMgZXZhbHVhdGVzIGFsbCB0aGUgZ3VhcmRzXG4gICAgICAgIGNvbnN0IGF2YWlsYWJsZVJvdXRlcyA9IHRoaXMuZ2V0QXZhaWxhYmxlUm91dGVzKCk7XG5cbiAgICAgICAgLy8gQXNzdW1lcyB0aGF0IHRoZSBuZXh0IG9yIHByZXZpb3VzIHJvdXRlIGlzIHRoZSBuZXh0IG9yIHByZXZpb3VzIG9uIHRoZSBhcnJheSBvZiBhdmFpbGFibGUgcm91dGVzLlxuICAgICAgICBjb25zdCBjdXJyZW50Um91dGUgPSB0aGlzLmdldEN1cnJlbnRSb3V0ZShhdmFpbGFibGVSb3V0ZXMpO1xuICAgICAgICBpZiAoIWN1cnJlbnRSb3V0ZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICdJbnZhbGlkIHJvdXRpbmcsIGF0IGxlYXN0IG9uZSByb3V0ZSBtdXN0IGJlIGF2YWlsYWJsZSdcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjdXJyZW50Um91dGVJbmRleCA9IGF2YWlsYWJsZVJvdXRlcy5pbmRleE9mKGN1cnJlbnRSb3V0ZSk7XG4gICAgICAgIGNvbnN0IHRhcmdldFJvdXRlID0gYXZhaWxhYmxlUm91dGVzW2N1cnJlbnRSb3V0ZUluZGV4ICsgZGlyZWN0aW9uXTtcbiAgICAgICAgaWYgKCF0YXJnZXRSb3V0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgZGlzcGxheSBpbmRleCBpc24ndCBhbHdheXMgdGhlIHJvdXRlIG9yZGVyIGFzIHdlIHN1cHBvcnQgZ3VhcmRzIG9uIGF2YWlsYWJsZSByb3V0ZXMuXG4gICAgICAgIC8vIFRoZSBkaXNwbGF5IGluZGV4IGlzIDEtYmFzZWQuXG4gICAgICAgIHRhcmdldFJvdXRlLmRhdGEuZGlzcGxheUluZGV4ID1cbiAgICAgICAgICAgIGF2YWlsYWJsZVJvdXRlcy5pbmRleE9mKHRhcmdldFJvdXRlKSArIDE7XG4gICAgICAgIHJldHVybiB0YXJnZXRSb3V0ZTtcbiAgICB9XG5cbiAgICBpc0ZpcnN0Rm9ybVBhZ2UoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghdGhpcy5nZXRDdXJyZW50Um91dGUodGhpcy5nZXRBdmFpbGFibGVSb3V0ZXMoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLmdldE5leHRBdmFpbGFibGVSb3V0ZShOYXZpZ2F0aW9uRGlyZWN0aW9uLkJBQ0tXQVJEKSA9PT0gbnVsbFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGlzTGFzdEZvcm1QYWdlKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIXRoaXMuZ2V0Q3VycmVudFJvdXRlKHRoaXMuZ2V0QXZhaWxhYmxlUm91dGVzKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXh0Um91dGUgPSB0aGlzLmdldE5leHRBdmFpbGFibGVSb3V0ZShcbiAgICAgICAgICAgIE5hdmlnYXRpb25EaXJlY3Rpb24uRk9SV0FSRFxuICAgICAgICApO1xuICAgICAgICBpZiAoIW5leHRSb3V0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV4dFJvdXRlLmRhdGEub3JkZXIgPT09IHRoaXMuZ2V0TGFzdFJvdXRlT3JkZXIoKTtcbiAgICB9XG5cbiAgICBnZXROZXh0Um91dGVJbmRleCgpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBuZXh0Um91dGUgPSB0aGlzLmdldE5leHRBdmFpbGFibGVSb3V0ZShcbiAgICAgICAgICAgIE5hdmlnYXRpb25EaXJlY3Rpb24uRk9SV0FSRFxuICAgICAgICApO1xuICAgICAgICBpZiAoIW5leHRSb3V0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV4dFJvdXRlLmRhdGEuZGlzcGxheUluZGV4O1xuICAgIH1cblxuICAgIGdldFByZXZpb3VzUm91dGVJbmRleCgpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBwcmV2aW91c1JvdXRlID0gdGhpcy5nZXROZXh0QXZhaWxhYmxlUm91dGUoXG4gICAgICAgICAgICBOYXZpZ2F0aW9uRGlyZWN0aW9uLkJBQ0tXQVJEXG4gICAgICAgICk7XG4gICAgICAgIGlmICghcHJldmlvdXNSb3V0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcHJldmlvdXNSb3V0ZS5kYXRhLmRpc3BsYXlJbmRleDtcbiAgICB9XG5cbiAgICBpc0xpbmVhclJvdXRpbmcoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmxpbmVhclJvdXRpbmc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDdXJyZW50Um91dGUoYXZhaWxhYmxlUm91dGVzOiBSb3V0ZVtdKTogUm91dGUge1xuICAgICAgICByZXR1cm4gYXZhaWxhYmxlUm91dGVzLmZpbmQoXG4gICAgICAgICAgICByb3V0ZSA9PiByb3V0ZS5kYXRhLm9yZGVyID09PSB0aGlzLmN1cnJlbnRSb3V0ZU9yZGVyXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWRpcmVjdFRvQXZhaWxhYmxlUm91dGUoXG4gICAgICAgIGRpcmVjdGlvbjogTmF2aWdhdGlvbkRpcmVjdGlvblxuICAgICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICBjb25zdCByb3V0ZSA9IHRoaXMuZ2V0TmV4dEF2YWlsYWJsZVJvdXRlKGRpcmVjdGlvbik7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZGlyZWN0KHJvdXRlLnBhdGgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNSb3V0ZUF2YWlsYWJsZShyb3V0ZTogUm91dGUpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgeyBjYW5BY3RpdmF0ZSB9ID0gcm91dGU7XG4gICAgICAgIGlmICghY2FuQWN0aXZhdGUgfHwgIWNhbkFjdGl2YXRlLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBbGwgdGhlIGd1YXJkcyBtdXN0IGJlIGV2YWx1YXRlZCB0byB0cnVlXG4gICAgICAgIHJldHVybiAhY2FuQWN0aXZhdGUuc29tZShndWFyZFR5cGUgPT4gIXRoaXMuZXZhbHVhdGVHdWFyZChndWFyZFR5cGUpKTtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIHByaXZhdGUgZXZhbHVhdGVHdWFyZChndWFyZFR5cGU6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBndWFyZDogQ2FuQWN0aXZhdGUgPSBTZXJ2aWNlTG9jYXRvci5pbmplY3Rvci5nZXQ8Q2FuQWN0aXZhdGU+KFxuICAgICAgICAgICAgZ3VhcmRUeXBlXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGd1YXJkUmVzdWx0ID0gZ3VhcmQuY2FuQWN0aXZhdGUodGhpcy5yb3V0ZS5zbmFwc2hvdCwgbnVsbCk7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBndWFyZFJlc3VsdCAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgJ05vdCBpbXBsZW1lbnRlZDogRHluYW1pYyByb3V0aW5nIGd1YXJkcyBvbmx5IHN1cHBvcnQgYm9vbGVhbiByZXN1bHRzJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBndWFyZFJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiByZWluZGV4ZSBsZXMgcm91dGVzIHBhciBcIm9yZGVyXCJcbiAgICAgKlxuICAgICAqIEBwYXJhbSBhcHBsaWNhdGlvblJvdXRlIGFzIHJvdXRlXG4gICAgICogQHJldHVybnMgUm91dGVbXVxuICAgICAqL1xuICAgIHByaXZhdGUgaW5kZXhSb3V0ZXNCeU9yZGVyKGFwcGxpY2F0aW9uUm91dGU6IFJvdXRlKTogUm91dGVbXSB7XG4gICAgICAgIHRoaXMuaXNJbml0ID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3Qgcm91dGVzVG9DcmF3bCA9IGFwcGxpY2F0aW9uUm91dGUuY2hpbGRyZW47XG4gICAgICAgIGlmICghcm91dGVzVG9DcmF3bC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZmxhdHRlblJvdXRlcyhyb3V0ZXNUb0NyYXdsKTtcblxuICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuaXNJbml0ID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmbGF0dGVuUm91dGVzKFxuICAgICAgICByb3V0ZXNUb0NyYXdsOiBSb3V0ZVtdLFxuICAgICAgICByZXN1bHQ6IFJvdXRlW10gPSBbXVxuICAgICk6IFJvdXRlW10ge1xuICAgICAgICByb3V0ZXNUb0NyYXdsLmZvckVhY2godmFsdWUgPT4ge1xuICAgICAgICAgICAgaWYgKHZhbHVlLmNoaWxkcmVuICYmIHZhbHVlLmNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmxhdHRlblJvdXRlcyh2YWx1ZS5jaGlsZHJlbiwgcmVzdWx0KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCEhdmFsdWUuZGF0YSAmJiAhIXZhbHVlLmRhdGEub3JkZXIpIHtcbiAgICAgICAgICAgICAgICByZXN1bHRbdmFsdWUuZGF0YS5vcmRlcl0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEZvY3VzT25QYWdlVGl0bGUoKTogdm9pZCB7XG4gICAgICAgIC8vIEVuc3VyZXMgdGhhdCB0aGUgZm9jdXMgaXMgcHJvcGVybHkgc2V0IGFmdGVyIHRoZSBwYWdlIGlzIHVwZGF0ZWQuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGl0bGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGFnZS10aXRsZScpO1xuICAgICAgICAgICAgaWYgKHRpdGxlKSB7XG4gICAgICAgICAgICAgICAgdGl0bGUuZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgMCk7XG4gICAgfVxufVxuIl19
|
|
303
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9laG4tbmF2aWdhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJlc3RhdGlvbnMtbmcvc3JjL2ZvZWhuLW5hdmlnYXRpb24vZm9laG4tbmF2aWdhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBR3BELE9BQU8sRUFBRSxlQUFlLEVBQWMsTUFBTSxNQUFNLENBQUM7Ozs7OztBQUVuRCxNQUFNLENBQU4sSUFBWSxtQkFHWDtBQUhELFdBQVksbUJBQW1CO0lBQzNCLG1FQUFZLENBQUE7SUFDWixzRUFBYSxDQUFBO0FBQ2pCLENBQUMsRUFIVyxtQkFBbUIsS0FBbkIsbUJBQW1CLFFBRzlCO0FBS0QsTUFBTSxPQUFPLHNCQUFzQjtJQVUvQixZQUNZLE1BQWMsRUFDZCxhQUFtQyxFQUNuQywyQkFBd0QsRUFDeEQsS0FBcUIsRUFDckIsUUFBa0I7UUFKbEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGtCQUFhLEdBQWIsYUFBYSxDQUFzQjtRQUNuQyxnQ0FBMkIsR0FBM0IsMkJBQTJCLENBQTZCO1FBQ3hELFVBQUssR0FBTCxLQUFLLENBQWdCO1FBQ3JCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFYdEIsV0FBTSxHQUFHLEtBQUssQ0FBQztRQUNmLGlDQUE0QixHQUE2QixJQUFJLGVBQWUsQ0FDaEYsS0FBSyxDQUNSLENBQUM7UUFDTSxrQkFBYSxHQUFHLElBQUksQ0FBQztJQVExQixDQUFDO0lBRUosSUFBSSxXQUFXO1FBQ1gsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxJQUFJLGNBQWMsQ0FBQyxLQUFxQjtRQUNwQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFD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QUU7WUFDbkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7U0FDdEI7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRU8sYUFBYSxDQUNqQixhQUFzQixFQUN0QixTQUFrQixFQUFFO1FBRXBCLGFBQWEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDMUIsSUFBSSxLQUFLLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFO2dCQUN6QyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7YUFDOUM7WUFFRCxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDcEMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDO2FBQ3BDO1lBRUQsT0FBTyxNQUFNLENBQUM7UUFDbEIsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRU8sbUJBQW1CO1FBQ3ZCLG9FQUFvRTtRQUNwRSxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ1osTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNwRCxJQUFJLEtBQUssRUFBRTtnQkFDUCxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7YUFDakI7UUFDTCxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDVixDQUFDOztvSEExWFEsc0JBQXNCO3dIQUF0QixzQkFBc0IsY0FGbkIsTUFBTTs0RkFFVCxzQkFBc0I7a0JBSGxDLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LFxuICAgIENhbkFjdGl2YXRlLFxuICAgIFBhcmFtcyxcbiAgICBSb3V0ZSxcbiAgICBSb3V0ZXJcbn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEdlc2RlbUhhbmRsZXJTZXJ2aWNlIH0gZnJvbSAnLi4vZ2VzZGVtL2dlc2RlbS1oYW5kbGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2VydmljZUxvY2F0b3IgfSBmcm9tICcuLi9zZXJ2aWNlLWxvY2F0b3InO1xuaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgR2VzZGVtQWN0aW9uUmVjb3ZlcnlTZXJ2aWNlIH0gZnJvbSAnLi4vZ2VzZGVtLWFjdGlvbi1yZWNvdmVyeS9nZXNkZW0tYWN0aW9uLXJlY292ZXJ5LnNlcnZpY2UnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCBlbnVtIE5hdmlnYXRpb25EaXJlY3Rpb24ge1xuICAgIEZPUldBUkQgPSArMSxcbiAgICBCQUNLV0FSRCA9IC0xXG59XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgRm9laG5OYXZpZ2F0aW9uU2VydmljZSB7XG4gICAgY3VycmVudFJvdXRlT3JkZXI6IG51bWJlcjtcbiAgICBvcmRlcmVkUm91dGVzOiBSb3V0ZVtdO1xuICAgIHByaXZhdGUgX2FjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZTtcbiAgICBwcml2YXRlIGlzSW5pdCA9IGZhbHNlO1xuICAgIHByaXZhdGUgaW5pdGlhbGl6ZWRBbmRSb3V0ZUFjdGl2YXRlZDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihcbiAgICAgICAgZmFsc2VcbiAgICApO1xuICAgIHByaXZhdGUgbGluZWFyUm91dGluZyA9IHRydWU7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgcHJpdmF0ZSBnZXNkZW1TZXJ2aWNlOiBHZXNkZW1IYW5kbGVyU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBnZXNkZW1BY3Rpb25SZWNvdmVyeVNlcnZpY2U6IEdlc2RlbUFjdGlvblJlY292ZXJ5U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgICAgIHByaXZhdGUgbG9jYXRpb246IExvY2F0aW9uXG4gICAgKSB7fVxuXG4gICAgZ2V0IGluaXRpYWxpemVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0luaXQ7XG4gICAgfVxuXG4gICAgc2V0IGFjdGl2YXRlZFJvdXRlKHZhbHVlOiBBY3RpdmF0ZWRSb3V0ZSkge1xuICAgICAgICB0aGlzLnRocm93SWZOb3RJbml0KCk7XG4gICAgICAgIHRoaXMuX2FjdGl2YXRlZFJvdXRlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZWRBbmRSb3V0ZUFjdGl2YXRlZC5uZXh0KHRydWUpO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRSb290Um91dGVSZWN1cnNpdmUocm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QpOiBSb3V0ZSB7XG4gICAgICAgIGlmIChyb3V0ZSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHJvdXRlLnJvdXRlQ29uZmlnICYmXG4gICAgICAgICAgICAgICAgcm91dGUucm91dGVDb25maWcuZGF0YSAmJlxuICAgICAgICAgICAgICAgIHJvdXRlLnJvdXRlQ29uZmlnLmRhdGEucm9vdFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJvdXRlLnJvdXRlQ29uZmlnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Um9vdFJvdXRlUmVjdXJzaXZlKHJvdXRlLnBhcmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaW5pdFJvdXRlKHJvdXRlOiBSb3V0ZSk6IHZvaWQge1xuICAgICAgICBpZiAocm91dGUpIHtcbiAgICAgICAgICAgIHRoaXMub3JkZXJlZFJvdXRlcyA9IHRoaXMuaW5kZXhSb3V0ZXNCeU9yZGVyKHJvdXRlKTtcblxuICAgICAgICAgICAgLy8gQnkgZGVmYXVsdCB0aGUgcHJlZml4IHNob3VsZCBiZSB0aGUgcGF0aCBvZiB0aGUgcm91dGUuIChlLmcuIGluIC92YWxpZGF0aW9uLzEyMzEyMy0xMjMyMS9wYWdlMSxcbiAgICAgICAgICAgIC8vIHRoZSBwcmVmaXggaXMgXCJ2YWxpZGF0aW9uXCIpLiBIb3dldmVyLCBpZiB0aGUgYXBwbGljYXRpb24gaXMgY29kZS1zcGxpdHRlZCB3aXRoIHRoZSByb3V0aW5nIGRlZmluZWRcbiAgICAgICAgICAgIC8vIGluIGEgbW9kdWxlLCB0aGlzIHdvbid0IHdvcmsuIEluIHRoaXMgY2FzZSwgeW91IGNhbiBzcGVjaWZ5IHRoZSBwYXRoIGluICQuZGF0YS5iYXNlUGF0aCBzbyB0aGUgR2VzRGVtXG4gICAgICAgICAgICAvLyBzZXJ2aWNlIGtub3dzIHdoZXJlIHRvIHNlbmQgdGhlIHJlcXVlc3QgdG8gdGhlIGJhY2tlbmQuXG4gICAgICAgICAgICBjb25zdCBwcmVmaXggPSByb3V0ZS5kYXRhLmJhc2VQYXRoIHx8IHJvdXRlLnBhdGg7XG4gICAgICAgICAgICB0aGlzLmdlc2RlbVNlcnZpY2UucHJlZml4ID0gcHJlZml4O1xuICAgICAgICAgICAgdGhpcy5nZXNkZW1BY3Rpb25SZWNvdmVyeVNlcnZpY2UucHJlZml4ID0gcHJlZml4O1xuICAgICAgICAgICAgdGhpcy5saW5lYXJSb3V0aW5nID0gcm91dGUuZGF0YS5saW5lYXJSb3V0aW5nICE9PSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRocm93SWZOb3RJbml0KCk7XG4gICAgfVxuXG4gICAgdGhyb3dJZk5vdEluaXQoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5pc0luaXQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJObyByb3V0ZSBpcyBpZGVudGlmaWVkIGFzICdyb290Jy4gSGF2ZSB5b3UgY2FsbGVkIGluaXRSb3V0ZSgpID9cIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZVJvdXRlSW5mb3JtYXRpb25zKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnRocm93SWZOb3RJbml0KCk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRSb3V0ZSA9IHRoaXMuX2FjdGl2YXRlZFJvdXRlLnJvdXRlQ29uZmlnO1xuXG4gICAgICAgIGxldCBjdXJyZW50Um91dGVPcmRlciA9IDE7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgISFjdXJyZW50Um91dGUgJiZcbiAgICAgICAgICAgICEhY3VycmVudFJvdXRlLmRhdGEgJiZcbiAgICAgICAgICAgICEhY3VycmVudFJvdXRlLmRhdGEub3JkZXJcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjdXJyZW50Um91dGVPcmRlciA9IGN1cnJlbnRSb3V0ZS5kYXRhLm9yZGVyO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3VycmVudFJvdXRlT3JkZXIgPSBjdXJyZW50Um91dGVPcmRlcjtcbiAgICB9XG5cbiAgICBnZXRGaXJzdFJvdXRlKCk6IFJvdXRlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JkZXJlZFJvdXRlc1sxXTtcbiAgICB9XG5cbiAgICBjdXJyZW50KCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICB0aGlzLnRocm93SWZOb3RJbml0KCk7XG4gICAgICAgIGlmICghdGhpcy5nZXNkZW1TZXJ2aWNlLmxhc3RSZXNwb25zZSkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCdFcnJldXIgbmF2aWdhdGlvblNlcnZpY2UjY3VycmVudCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN1cnJlbnRSb3V0ZSA9IHRoaXMub3JkZXJlZFJvdXRlc1t0aGlzLmN1cnJlbnRSb3V0ZU9yZGVyXTtcblxuICAgICAgICBjb25zdCBwcmVmaXggPSB0aGlzLmdlc2RlbVNlcnZpY2UucHJlZml4O1xuICAgICAgICBjb25zdCBjb21tYW5kczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgaWYgKHByZWZpeCkge1xuICAgICAgICAgICAgY29tbWFuZHMucHVzaChwcmVmaXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZ2VzZGVtU2VydmljZS5sYXN0UmVzcG9uc2UubWV0YS5yZWZlcmVuY2UpIHtcbiAgICAgICAgICAgIGNvbW1hbmRzLnB1c2goXG4gICAgICAgICAgICAgICAgdGhpcy5nZXNkZW1TZXJ2aWNlLmxhc3RSZXNwb25zZS5tZXRhLnJlZmVyZW5jZSxcbiAgICAgICAgICAgICAgICBjdXJyZW50Um91dGUucGF0aFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29uc3QgdHJlZSA9IHRoaXMucm91dGVyLmNyZWF0ZVVybFRyZWUoY29tbWFuZHMpO1xuICAgICAgICAgICAgY29uc3QgdXJsID1cbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5zZXJpYWxpemVVcmwodHJlZSkgK1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0UXVlcnlQYXJhbXNUb0ZvcndhcmRBc1N0cmluZygpO1xuICAgICAgICAgICAgdGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUodXJsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XG4gICAgfVxuXG4gICAgaGFzQmVlbkluaXRpYWxpemVkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pbml0aWFsaXplZEFuZFJvdXRlQWN0aXZhdGVkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIGdldFF1ZXJ5UGFyYW1zVG9Gb3J3YXJkQXNTdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgcGFyYW1zID0gdGhpcy5nZXRRdWVyeVBhcmFtc1RvRm9yd2FyZCgpIHx8IFtdO1xuICAgICAgICBsZXQgc3RyaW5nUGFyYW1zID0gJyc7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHBhcmFtcykpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcGFyYW1zW2tleV07XG4gICAgICAgICAgICBzdHJpbmdQYXJhbXMgKz0gc3RyaW5nUGFyYW1zID8gJyYnIDogJz8nO1xuICAgICAgICAgICAgc3RyaW5nUGFyYW1zICs9IGAke2tleX09JHt2YWx1ZX1gO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdHJpbmdQYXJhbXM7XG4gICAgfVxuXG4gICAgZ2V0UXVlcnlQYXJhbXNUb0ZvcndhcmQoKTogUGFyYW1zIHtcbiAgICAgICAgY29uc3QgcmVDYXB0Y2hhQnlQYXNzVVVJRCA9IHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXNcbiAgICAgICAgICAgIC5yZUNhcHRjaGFCeVBhc3NVVUlEO1xuICAgICAgICBjb25zdCBzY3JvbGxUbyA9IHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMuc2Nyb2xsVG87XG4gICAgICAgIGlmICghIXJlQ2FwdGNoYUJ5UGFzc1VVSUQgfHwgISFzY3JvbGxUbykge1xuICAgICAgICAgICAgY29uc3QgcGFyYW1zOiBQYXJhbXMgPSB7fTtcbiAgICAgICAgICAgIGlmICghIXJlQ2FwdGNoYUJ5UGFzc1VVSUQpIHtcbiAgICAgICAgICAgICAgICBwYXJhbXMucmVDYXB0Y2hhQnlQYXNzVVVJRCA9IHJlQ2FwdGNoYUJ5UGFzc1VVSUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoISFzY3JvbGxUbykge1xuICAgICAgICAgICAgICAgIHBhcmFtcy5zY3JvbGxUbyA9IHNjcm9sbFRvO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHBhcmFtcztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBuZXh0KCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICB0aGlzLnRocm93SWZOb3RJbml0KCk7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZGlyZWN0VG9BdmFpbGFibGVSb3V0ZShOYXZpZ2F0aW9uRGlyZWN0aW9uLkZPUldBUkQpO1xuICAgIH1cblxuICAgIHByZXZpb3VzKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICB0aGlzLnRocm93SWZOb3RJbml0KCk7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZGlyZWN0VG9BdmFpbGFibGVSb3V0ZShOYXZpZ2F0aW9uRGlyZWN0aW9uLkJBQ0tXQVJEKTtcbiAgICB9XG5cbiAgICBsYXN0KCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICB0aGlzLnRocm93SWZOb3RJbml0KCk7XG4gICAgICAgIGNvbnN0IHJvdXRlID0gdGhpcy5nZXRBdmFpbGFibGVSb3V0ZXMoKTtcbiAgICAgICAgY29uc3QgbmV4dFJvdXRlUGF0aCA9IHJvdXRlW3JvdXRlLmxlbmd0aCAtIDFdLnBhdGg7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZGlyZWN0KG5leHRSb3V0ZVBhdGgpO1xuICAgIH1cblxuICAgIHJlZGlyZWN0KG5ld1BhdGg6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICBjb25zdCByb3V0ZXMgPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuZ2VzZGVtU2VydmljZS5wcmVmaXgpIHtcbiAgICAgICAgICAgIHJvdXRlcy5wdXNoKHRoaXMuZ2VzZGVtU2VydmljZS5wcmVmaXgpO1xuICAgICAgICB9XG4gICAgICAgIHJvdXRlcy5wdXNoKHRoaXMuZ2VzZGVtU2VydmljZS5sYXN0UmVzcG9uc2UubWV0YS5yZWZlcmVuY2UsIG5ld1BhdGgpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLnJvdXRlclxuICAgICAgICAgICAgLm5hdmlnYXRlKHJvdXRlcywge1xuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB0aGlzLmdldFF1ZXJ5UGFyYW1zVG9Gb3J3YXJkKClcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbihzdWNjZXNzID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEZvY3VzT25QYWdlVGl0bGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRBdmFpbGFibGVSb3V0ZXMoKTogUm91dGVbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yZGVyZWRSb3V0ZXMuZmlsdGVyKHJvdXRlID0+IHRoaXMuaXNSb3V0ZUF2YWlsYWJsZShyb3V0ZSkpO1xuICAgIH1cblxuICAgIGdldEN1cnJlbnRSb3V0ZUluZGV4KCk6IG51bWJlciB7XG4gICAgICAgIC8vIFRoaXMgZXZhbHVhdGVzIGFsbCB0aGUgZ3VhcmRzXG4gICAgICAgIGNvbnN0IGF2YWlsYWJsZVJvdXRlcyA9IHRoaXMuZ2V0QXZhaWxhYmxlUm91dGVzKCk7XG5cbiAgICAgICAgY29uc3QgY3VycmVudFJvdXRlID0gYXZhaWxhYmxlUm91dGVzLmZpbmQoXG4gICAgICAgICAgICByb3V0ZSA9PiByb3V0ZS5kYXRhLm9yZGVyID09PSB0aGlzLmN1cnJlbnRSb3V0ZU9yZGVyXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKCFjdXJyZW50Um91dGUpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGF2YWlsYWJsZVJvdXRlcy5pbmRleE9mKGN1cnJlbnRSb3V0ZSk7XG4gICAgfVxuXG4gICAgZ2V0VG90YWxSb3V0ZXNTaXplKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEF2YWlsYWJsZVJvdXRlcygpLmxlbmd0aDtcbiAgICB9XG5cbiAgICBnZXRMYXN0Um91dGVPcmRlcigpOiBudW1iZXIge1xuICAgICAgICBjb25zdCByb3V0ZXMgPSB0aGlzLmdldEF2YWlsYWJsZVJvdXRlcygpO1xuICAgICAgICByZXR1cm4gcm91dGVzW3JvdXRlcy5sZW5ndGggLSAxXS5kYXRhLm9yZGVyO1xuICAgIH1cblxuICAgIGdldE5leHRBdmFpbGFibGVSb3V0ZShkaXJlY3Rpb246IE5hdmlnYXRpb25EaXJlY3Rpb24pOiBSb3V0ZSB7XG4gICAgICAgIC8vIFRoaXMgZXZhbHVhdGVzIGFsbCB0aGUgZ3VhcmRzXG4gICAgICAgIGNvbnN0IGF2YWlsYWJsZVJvdXRlcyA9IHRoaXMuZ2V0QXZhaWxhYmxlUm91dGVzKCk7XG5cbiAgICAgICAgLy8gQXNzdW1lcyB0aGF0IHRoZSBuZXh0IG9yIHByZXZpb3VzIHJvdXRlIGlzIHRoZSBuZXh0IG9yIHByZXZpb3VzIG9uIHRoZSBhcnJheSBvZiBhdmFpbGFibGUgcm91dGVzLlxuICAgICAgICBjb25zdCBjdXJyZW50Um91dGUgPSB0aGlzLmdldEN1cnJlbnRSb3V0ZShhdmFpbGFibGVSb3V0ZXMpO1xuICAgICAgICBpZiAoIWN1cnJlbnRSb3V0ZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICdJbnZhbGlkIHJvdXRpbmcsIGF0IGxlYXN0IG9uZSByb3V0ZSBtdXN0IGJlIGF2YWlsYWJsZSdcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjdXJyZW50Um91dGVJbmRleCA9IGF2YWlsYWJsZVJvdXRlcy5pbmRleE9mKGN1cnJlbnRSb3V0ZSk7XG4gICAgICAgIGNvbnN0IHRhcmdldFJvdXRlID0gYXZhaWxhYmxlUm91dGVzW2N1cnJlbnRSb3V0ZUluZGV4ICsgZGlyZWN0aW9uXTtcbiAgICAgICAgaWYgKCF0YXJnZXRSb3V0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgZGlzcGxheSBpbmRleCBpc24ndCBhbHdheXMgdGhlIHJvdXRlIG9yZGVyIGFzIHdlIHN1cHBvcnQgZ3VhcmRzIG9uIGF2YWlsYWJsZSByb3V0ZXMuXG4gICAgICAgIC8vIFRoZSBkaXNwbGF5IGluZGV4IGlzIDEtYmFzZWQuXG4gICAgICAgIHRhcmdldFJvdXRlLmRhdGEuZGlzcGxheUluZGV4ID1cbiAgICAgICAgICAgIGF2YWlsYWJsZVJvdXRlcy5pbmRleE9mKHRhcmdldFJvdXRlKSArIDE7XG4gICAgICAgIHJldHVybiB0YXJnZXRSb3V0ZTtcbiAgICB9XG5cbiAgICBpc0ZpcnN0Rm9ybVBhZ2UoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghdGhpcy5nZXRDdXJyZW50Um91dGUodGhpcy5nZXRBdmFpbGFibGVSb3V0ZXMoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLmdldE5leHRBdmFpbGFibGVSb3V0ZShOYXZpZ2F0aW9uRGlyZWN0aW9uLkJBQ0tXQVJEKSA9PT0gbnVsbFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGlzTGFzdEZvcm1QYWdlKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIXRoaXMub3JkZXJlZFJvdXRlcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuZ2V0Q3VycmVudFJvdXRlKHRoaXMuZ2V0QXZhaWxhYmxlUm91dGVzKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXh0Um91dGUgPSB0aGlzLmdldE5leHRBdmFpbGFibGVSb3V0ZShcbiAgICAgICAgICAgIE5hdmlnYXRpb25EaXJlY3Rpb24uRk9SV0FSRFxuICAgICAgICApO1xuICAgICAgICBpZiAoIW5leHRSb3V0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV4dFJvdXRlLmRhdGEub3JkZXIgPT09IHRoaXMuZ2V0TGFzdFJvdXRlT3JkZXIoKTtcbiAgICB9XG5cbiAgICBnZXROZXh0Um91dGVJbmRleCgpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBuZXh0Um91dGUgPSB0aGlzLmdldE5leHRBdmFpbGFibGVSb3V0ZShcbiAgICAgICAgICAgIE5hdmlnYXRpb25EaXJlY3Rpb24uRk9SV0FSRFxuICAgICAgICApO1xuICAgICAgICBpZiAoIW5leHRSb3V0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV4dFJvdXRlLmRhdGEuZGlzcGxheUluZGV4O1xuICAgIH1cblxuICAgIGdldFByZXZpb3VzUm91dGVJbmRleCgpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBwcmV2aW91c1JvdXRlID0gdGhpcy5nZXROZXh0QXZhaWxhYmxlUm91dGUoXG4gICAgICAgICAgICBOYXZpZ2F0aW9uRGlyZWN0aW9uLkJBQ0tXQVJEXG4gICAgICAgICk7XG4gICAgICAgIGlmICghcHJldmlvdXNSb3V0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcHJldmlvdXNSb3V0ZS5kYXRhLmRpc3BsYXlJbmRleDtcbiAgICB9XG5cbiAgICBpc0xpbmVhclJvdXRpbmcoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmxpbmVhclJvdXRpbmc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDdXJyZW50Um91dGUoYXZhaWxhYmxlUm91dGVzOiBSb3V0ZVtdKTogUm91dGUge1xuICAgICAgICByZXR1cm4gYXZhaWxhYmxlUm91dGVzLmZpbmQoXG4gICAgICAgICAgICByb3V0ZSA9PiByb3V0ZS5kYXRhLm9yZGVyID09PSB0aGlzLmN1cnJlbnRSb3V0ZU9yZGVyXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWRpcmVjdFRvQXZhaWxhYmxlUm91dGUoXG4gICAgICAgIGRpcmVjdGlvbjogTmF2aWdhdGlvbkRpcmVjdGlvblxuICAgICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICBjb25zdCByb3V0ZSA9IHRoaXMuZ2V0TmV4dEF2YWlsYWJsZVJvdXRlKGRpcmVjdGlvbik7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZGlyZWN0KHJvdXRlLnBhdGgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNSb3V0ZUF2YWlsYWJsZShyb3V0ZTogUm91dGUpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgeyBjYW5BY3RpdmF0ZSB9ID0gcm91dGU7XG4gICAgICAgIGlmICghY2FuQWN0aXZhdGUgfHwgIWNhbkFjdGl2YXRlLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBbGwgdGhlIGd1YXJkcyBtdXN0IGJlIGV2YWx1YXRlZCB0byB0cnVlXG4gICAgICAgIHJldHVybiAhY2FuQWN0aXZhdGUuc29tZShndWFyZFR5cGUgPT4gIXRoaXMuZXZhbHVhdGVHdWFyZChndWFyZFR5cGUpKTtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIHByaXZhdGUgZXZhbHVhdGVHdWFyZChndWFyZFR5cGU6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBndWFyZDogQ2FuQWN0aXZhdGUgPSBTZXJ2aWNlTG9jYXRvci5pbmplY3Rvci5nZXQ8Q2FuQWN0aXZhdGU+KFxuICAgICAgICAgICAgZ3VhcmRUeXBlXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGd1YXJkUmVzdWx0ID0gZ3VhcmQuY2FuQWN0aXZhdGUodGhpcy5yb3V0ZS5zbmFwc2hvdCwgbnVsbCk7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBndWFyZFJlc3VsdCAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgJ05vdCBpbXBsZW1lbnRlZDogRHluYW1pYyByb3V0aW5nIGd1YXJkcyBvbmx5IHN1cHBvcnQgYm9vbGVhbiByZXN1bHRzJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBndWFyZFJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiByZWluZGV4ZSBsZXMgcm91dGVzIHBhciBcIm9yZGVyXCJcbiAgICAgKlxuICAgICAqIEBwYXJhbSBhcHBsaWNhdGlvblJvdXRlIGFzIHJvdXRlXG4gICAgICogQHJldHVybnMgUm91dGVbXVxuICAgICAqL1xuICAgIHByaXZhdGUgaW5kZXhSb3V0ZXNCeU9yZGVyKGFwcGxpY2F0aW9uUm91dGU6IFJvdXRlKTogUm91dGVbXSB7XG4gICAgICAgIHRoaXMuaXNJbml0ID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3Qgcm91dGVzVG9DcmF3bCA9IGFwcGxpY2F0aW9uUm91dGUuY2hpbGRyZW47XG4gICAgICAgIGlmICghcm91dGVzVG9DcmF3bC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZmxhdHRlblJvdXRlcyhyb3V0ZXNUb0NyYXdsKTtcblxuICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuaXNJbml0ID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmbGF0dGVuUm91dGVzKFxuICAgICAgICByb3V0ZXNUb0NyYXdsOiBSb3V0ZVtdLFxuICAgICAgICByZXN1bHQ6IFJvdXRlW10gPSBbXVxuICAgICk6IFJvdXRlW10ge1xuICAgICAgICByb3V0ZXNUb0NyYXdsLmZvckVhY2godmFsdWUgPT4ge1xuICAgICAgICAgICAgaWYgKHZhbHVlLmNoaWxkcmVuICYmIHZhbHVlLmNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmxhdHRlblJvdXRlcyh2YWx1ZS5jaGlsZHJlbiwgcmVzdWx0KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCEhdmFsdWUuZGF0YSAmJiAhIXZhbHVlLmRhdGEub3JkZXIpIHtcbiAgICAgICAgICAgICAgICByZXN1bHRbdmFsdWUuZGF0YS5vcmRlcl0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEZvY3VzT25QYWdlVGl0bGUoKTogdm9pZCB7XG4gICAgICAgIC8vIEVuc3VyZXMgdGhhdCB0aGUgZm9jdXMgaXMgcHJvcGVybHkgc2V0IGFmdGVyIHRoZSBwYWdlIGlzIHVwZGF0ZWQuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGl0bGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGFnZS10aXRsZScpO1xuICAgICAgICAgICAgaWYgKHRpdGxlKSB7XG4gICAgICAgICAgICAgICAgdGl0bGUuZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgMCk7XG4gICAgfVxufVxuIl19
|
|
@@ -934,6 +934,10 @@ class FoehnNavigationService {
|
|
|
934
934
|
return (this.getNextAvailableRoute(NavigationDirection.BACKWARD) === null);
|
|
935
935
|
}
|
|
936
936
|
isLastFormPage() {
|
|
937
|
+
var _a;
|
|
938
|
+
if (!((_a = this.orderedRoutes) === null || _a === void 0 ? void 0 : _a.length)) {
|
|
939
|
+
return false;
|
|
940
|
+
}
|
|
937
941
|
if (!this.getCurrentRoute(this.getAvailableRoutes())) {
|
|
938
942
|
return true;
|
|
939
943
|
}
|
|
@@ -5712,8 +5716,8 @@ class FoehnAutocompleteComponent extends FoehnCheckableGroupComponent {
|
|
|
5712
5716
|
* A custom value is a value that is not in the `elements` set.
|
|
5713
5717
|
*/
|
|
5714
5718
|
this.allowCustomValue = false;
|
|
5719
|
+
this.itemHeightInSuggestionListInPx = 40;
|
|
5715
5720
|
this.hideSuggestions = true;
|
|
5716
|
-
this.ITEM_CALCULATED_HEIGHT = 40;
|
|
5717
5721
|
this.currentItemGlobalIndex = -1;
|
|
5718
5722
|
this.NB_ITEMS_VISIBLE = 5;
|
|
5719
5723
|
this.filterSubject = new Subject();
|
|
@@ -5722,7 +5726,7 @@ class FoehnAutocompleteComponent extends FoehnCheckableGroupComponent {
|
|
|
5722
5726
|
.pipe(debounceTime(200))
|
|
5723
5727
|
.subscribe(this.filterElements.bind(this));
|
|
5724
5728
|
this.VIEW_PORT_HEIGHT =
|
|
5725
|
-
this.
|
|
5729
|
+
this.itemHeightInSuggestionListInPx * this.NB_ITEMS_VISIBLE;
|
|
5726
5730
|
}
|
|
5727
5731
|
ngOnInit() {
|
|
5728
5732
|
super.ngOnInit();
|
|
@@ -6024,13 +6028,14 @@ class FoehnAutocompleteComponent extends FoehnCheckableGroupComponent {
|
|
|
6024
6028
|
if (!!filteredElements) {
|
|
6025
6029
|
if (filteredElements.length < this.NB_ITEMS_VISIBLE) {
|
|
6026
6030
|
this.VIEW_PORT_HEIGHT =
|
|
6027
|
-
this.
|
|
6031
|
+
this.itemHeightInSuggestionListInPx *
|
|
6032
|
+
filteredElements.length;
|
|
6028
6033
|
if (!!this.virtualScrollViewport) {
|
|
6029
6034
|
this.virtualScrollViewport.checkViewportSize();
|
|
6030
6035
|
}
|
|
6031
6036
|
}
|
|
6032
6037
|
else {
|
|
6033
|
-
const MAX_HEIGHT = this.NB_ITEMS_VISIBLE * this.
|
|
6038
|
+
const MAX_HEIGHT = this.NB_ITEMS_VISIBLE * this.itemHeightInSuggestionListInPx;
|
|
6034
6039
|
if (this.VIEW_PORT_HEIGHT < MAX_HEIGHT) {
|
|
6035
6040
|
this.VIEW_PORT_HEIGHT = MAX_HEIGHT;
|
|
6036
6041
|
if (!!this.virtualScrollViewport) {
|
|
@@ -6190,13 +6195,13 @@ class FoehnAutocompleteComponent extends FoehnCheckableGroupComponent {
|
|
|
6190
6195
|
}
|
|
6191
6196
|
}
|
|
6192
6197
|
FoehnAutocompleteComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: FoehnAutocompleteComponent, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
|
|
6193
|
-
FoehnAutocompleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: FoehnAutocompleteComponent, selector: "foehn-autocomplete", inputs: { searchValueMinCharsCount: "searchValueMinCharsCount", allowCustomValue: "allowCustomValue", customValueModelGenerator: "customValueModelGenerator" }, providers: [
|
|
6198
|
+
FoehnAutocompleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: FoehnAutocompleteComponent, selector: "foehn-autocomplete", inputs: { searchValueMinCharsCount: "searchValueMinCharsCount", allowCustomValue: "allowCustomValue", customValueModelGenerator: "customValueModelGenerator", itemHeightInSuggestionListInPx: "itemHeightInSuggestionListInPx" }, providers: [
|
|
6194
6199
|
{
|
|
6195
6200
|
provide: FoehnInputComponent,
|
|
6196
6201
|
useExisting: forwardRef(() => FoehnAutocompleteComponent),
|
|
6197
6202
|
multi: true
|
|
6198
6203
|
}
|
|
6199
|
-
], viewQueries: [{ propertyName: "virtualScrollViewport", first: true, predicate: CdkVirtualScrollViewport, descendants: true }, { propertyName: "suggestionsList", first: true, predicate: ["suggestionsList"], descendants: true }, { propertyName: "inputElement", first: true, predicate: ["entryComponent"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<!--\n Accessible autocomplete widget following the listbox combobox pattern.\n ref: https://www.w3.org/TR/wai-aria-practices-1.1/examples/combobox/aria1.1pattern/listbox-combo.html\n-->\n<div\n class=\"form-group autocomplete-form-group\"\n [class.has-danger]=\"hasErrorsToDisplay()\"\n [class.vd-form-group-danger]=\"hasErrorsToDisplay()\"\n [attr.aria-expanded]=\"shouldDisplayListbox()\"\n [attr.aria-haspopup]=\"'listbox'\"\n [attr.id]=\"buildId('Container')\"\n tabindex=\"-1\"\n>\n <label\n [attr.for]=\"buildChildId()\"\n *ngIf=\"!!label\"\n [ngClass]=\"isLabelSrOnly ? 'sr-only' : labelStyleModifier\"\n [attr.id]=\"buildChildId() + 'Label'\"\n >\n <span [innerHTML]=\"label\"></span>\n <span\n *ngIf=\"!required && !hideNotRequiredExtraLabel\"\n aria-hidden=\"true\"\n >\n {{ 'foehn-input.optional' | fromDictionary }}\n </span>\n </label>\n\n <foehn-validation-alerts [component]=\"this\"></foehn-validation-alerts>\n\n <div *ngIf=\"!elements\">Chargement...</div>\n\n <small\n *ngIf=\"helpText\"\n [attr.id]=\"buildChildId() + 'Help'\"\n class=\"form-text text-secondary\"\n [innerHTML]=\"helpText\"\n ></small>\n\n <ng-content></ng-content>\n\n <div class=\"sr-only\">\n Utilisez les fl\u00E8ches haut et bas pour naviguer dans la liste, puis la\n touche Entrer pour s\u00E9lectionner une option.\n </div>\n\n <!-- Give screen reader users the total of results when then input changes. -->\n <div\n class=\"sr-only\"\n aria-live=\"polite\"\n role=\"status\"\n aria-atomic=\"true\"\n *ngIf=\"displayedElements && shouldDisplayListbox()\"\n >\n Nombre de r\u00E9sultats: {{ displayedElements.length }}\n <!-- Trick to have NVDA re-reading this properly -->\n <span>{{ notificationMessageUpdated ? ',' : ',,' }}</span>\n </div>\n\n <input\n [class.is-invalid]=\"hasErrorsToDisplay()\"\n class=\"form-control autocomplete\"\n type=\"text\"\n role=\"textbox\"\n [name]=\"name || label\"\n [attr.id]=\"buildChildId()\"\n [attr.placeholder]=\"placeholder || null\"\n [attr.disabled]=\"disabled ? 'disabled' : null\"\n [attr.aria-describedby]=\"getDescribedBy()\"\n [attr.aria-required]=\"required || null\"\n [attr.aria-invalid]=\"hasErrorsToDisplay() || null\"\n [attr.autocomplete]=\"'off'\"\n [attr.aria-activedescendant]=\"getActiveDescendantId()\"\n [attr.aria-owns]=\"\n shouldDisplayListbox() ? buildChildId() + 'Listbox' : null\n \"\n [attr.list]=\"buildChildId() + 'list'\"\n [(ngModel)]=\"inputValue\"\n (ngModelChange)=\"showSuggestionsWhenInputHasFocusAndIsEmpty($event)\"\n (paste)=\"onPaste($event)\"\n (focus)=\"onInputFocus()\"\n (blur)=\"onInputBlur()\"\n (keydown)=\"onKeyDown($event)\"\n (click)=\"onInputClick()\"\n autocomplete=\"off\"\n #entryComponent\n />\n\n <button\n type=\"button\"\n *ngIf=\"displayClearButton() | async\"\n class=\"autocomplete-clear-button btn\"\n (click)=\"onClear()\"\n [id]=\"buildChildId() + 'Clear'\"\n >\n <foehn-icon-times\n class=\"autocomplete-clear-button-icon\"\n title=\"R\u00E9initialiser le champ\"\n ></foehn-icon-times>\n </button>\n\n <div\n class=\"form-group suggestions-list-container\"\n *ngIf=\"shouldDisplayListbox()\"\n >\n <cdk-virtual-scroll-viewport\n [itemSize]=\"
|
|
6204
|
+
], viewQueries: [{ propertyName: "virtualScrollViewport", first: true, predicate: CdkVirtualScrollViewport, descendants: true }, { propertyName: "suggestionsList", first: true, predicate: ["suggestionsList"], descendants: true }, { propertyName: "inputElement", first: true, predicate: ["entryComponent"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<!--\n Accessible autocomplete widget following the listbox combobox pattern.\n ref: https://www.w3.org/TR/wai-aria-practices-1.1/examples/combobox/aria1.1pattern/listbox-combo.html\n-->\n<div\n class=\"form-group autocomplete-form-group\"\n [class.has-danger]=\"hasErrorsToDisplay()\"\n [class.vd-form-group-danger]=\"hasErrorsToDisplay()\"\n [attr.aria-expanded]=\"shouldDisplayListbox()\"\n [attr.aria-haspopup]=\"'listbox'\"\n [attr.id]=\"buildId('Container')\"\n tabindex=\"-1\"\n>\n <label\n [attr.for]=\"buildChildId()\"\n *ngIf=\"!!label\"\n [ngClass]=\"isLabelSrOnly ? 'sr-only' : labelStyleModifier\"\n [attr.id]=\"buildChildId() + 'Label'\"\n >\n <span [innerHTML]=\"label\"></span>\n <span\n *ngIf=\"!required && !hideNotRequiredExtraLabel\"\n aria-hidden=\"true\"\n >\n {{ 'foehn-input.optional' | fromDictionary }}\n </span>\n </label>\n\n <foehn-validation-alerts [component]=\"this\"></foehn-validation-alerts>\n\n <div *ngIf=\"!elements\">Chargement...</div>\n\n <small\n *ngIf=\"helpText\"\n [attr.id]=\"buildChildId() + 'Help'\"\n class=\"form-text text-secondary\"\n [innerHTML]=\"helpText\"\n ></small>\n\n <ng-content></ng-content>\n\n <div class=\"sr-only\">\n Utilisez les fl\u00E8ches haut et bas pour naviguer dans la liste, puis la\n touche Entrer pour s\u00E9lectionner une option.\n </div>\n\n <!-- Give screen reader users the total of results when then input changes. -->\n <div\n class=\"sr-only\"\n aria-live=\"polite\"\n role=\"status\"\n aria-atomic=\"true\"\n *ngIf=\"displayedElements && shouldDisplayListbox()\"\n >\n Nombre de r\u00E9sultats: {{ displayedElements.length }}\n <!-- Trick to have NVDA re-reading this properly -->\n <span>{{ notificationMessageUpdated ? ',' : ',,' }}</span>\n </div>\n\n <input\n [class.is-invalid]=\"hasErrorsToDisplay()\"\n class=\"form-control autocomplete\"\n type=\"text\"\n role=\"textbox\"\n [name]=\"name || label\"\n [attr.id]=\"buildChildId()\"\n [attr.placeholder]=\"placeholder || null\"\n [attr.disabled]=\"disabled ? 'disabled' : null\"\n [attr.aria-describedby]=\"getDescribedBy()\"\n [attr.aria-required]=\"required || null\"\n [attr.aria-invalid]=\"hasErrorsToDisplay() || null\"\n [attr.autocomplete]=\"'off'\"\n [attr.aria-activedescendant]=\"getActiveDescendantId()\"\n [attr.aria-owns]=\"\n shouldDisplayListbox() ? buildChildId() + 'Listbox' : null\n \"\n [attr.list]=\"buildChildId() + 'list'\"\n [(ngModel)]=\"inputValue\"\n (ngModelChange)=\"showSuggestionsWhenInputHasFocusAndIsEmpty($event)\"\n (paste)=\"onPaste($event)\"\n (focus)=\"onInputFocus()\"\n (blur)=\"onInputBlur()\"\n (keydown)=\"onKeyDown($event)\"\n (click)=\"onInputClick()\"\n autocomplete=\"off\"\n #entryComponent\n />\n\n <button\n type=\"button\"\n *ngIf=\"displayClearButton() | async\"\n class=\"autocomplete-clear-button btn\"\n (click)=\"onClear()\"\n [id]=\"buildChildId() + 'Clear'\"\n >\n <foehn-icon-times\n class=\"autocomplete-clear-button-icon\"\n title=\"R\u00E9initialiser le champ\"\n ></foehn-icon-times>\n </button>\n\n <div\n class=\"form-group suggestions-list-container\"\n *ngIf=\"shouldDisplayListbox()\"\n >\n <cdk-virtual-scroll-viewport\n [itemSize]=\"itemHeightInSuggestionListInPx\"\n [style.height.px]=\"VIEW_PORT_HEIGHT\"\n >\n <ul\n [attr.id]=\"buildChildId() + 'Listbox'\"\n [attr.aria-labelledby]=\"buildChildId() + 'Label'\"\n role=\"listbox\"\n class=\"suggestions-list\"\n #suggestionsList\n >\n <li\n tabindex=\"-1\"\n role=\"option\"\n class=\"suggestion\"\n *cdkVirtualFor=\"\n let element of displayedElements;\n index as i\n \"\n [attr.id]=\"buildChildId() + 'Option' + i\"\n (click)=\"onClickSuggestion(element)\"\n (mousedown)=\"onListOptionMouseDown($event)\"\n (focus)=\"onListOptionFocus()\"\n (blur)=\"onListOptionBlur()\"\n [style.height.px]=\"itemHeightInSuggestionListInPx\"\n >\n <!-- Ensures that screen readers don't consider any spaces around the emphasis -->\n <span [innerHtml]=\"getLabelWithEmphasis(element)\"></span>\n </li>\n </ul>\n </cdk-virtual-scroll-viewport>\n </div>\n</div>\n", styles: ["div.suggestions-list-container{position:relative;width:100%}cdk-virtual-scroll-viewport{width:100%;position:absolute;top:0;left:0;z-index:10;background:white;overflow-y:auto;box-shadow:0 4px 8px #0003,0 6px 20px #00000030;list-style:none;margin:inherit;padding:inherit}ul.suggestions-list{list-style:none;margin:0;padding:0}li.suggestion{width:100%;padding:.5em;font-size:1em}li.suggestion:hover,.suggestion-selected{background-color:var(--vd-info)}li.suggestion:hover{cursor:pointer;background-color:#dfdfdf}input.autocomplete::-ms-clear{display:none}input.autocomplete{padding-right:30px}.autocomplete-form-group{position:relative}.autocomplete-clear-button{position:absolute;bottom:4px;right:4px;height:30px;width:30px;background:none;border:none}.autocomplete-clear-button-icon{top:4px;right:8px;position:absolute}:host ::ng-deep .autocomplete-clear-button.btn .svg-inline--fa{color:#595959!important}:host ::ng-deep .autocomplete-clear-button.btn:hover .svg-inline--fa{color:#000!important}\n"], components: [{ type: FoehnValidationAlertsComponent, selector: "foehn-validation-alerts", inputs: ["component", "shouldErrorsBeLive"] }, { type: FoehnIconTimesComponent, selector: "foehn-icon-times" }, { type: i3$1.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i3$1.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { type: i3$1.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }], pipes: { "fromDictionary": SdkDictionaryPipe, "async": i3.AsyncPipe } });
|
|
6200
6205
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: FoehnAutocompleteComponent, decorators: [{
|
|
6201
6206
|
type: Component,
|
|
6202
6207
|
args: [{ selector: 'foehn-autocomplete', providers: [
|
|
@@ -6205,7 +6210,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
|
|
|
6205
6210
|
useExisting: forwardRef(() => FoehnAutocompleteComponent),
|
|
6206
6211
|
multi: true
|
|
6207
6212
|
}
|
|
6208
|
-
], template: "<!--\n Accessible autocomplete widget following the listbox combobox pattern.\n ref: https://www.w3.org/TR/wai-aria-practices-1.1/examples/combobox/aria1.1pattern/listbox-combo.html\n-->\n<div\n class=\"form-group autocomplete-form-group\"\n [class.has-danger]=\"hasErrorsToDisplay()\"\n [class.vd-form-group-danger]=\"hasErrorsToDisplay()\"\n [attr.aria-expanded]=\"shouldDisplayListbox()\"\n [attr.aria-haspopup]=\"'listbox'\"\n [attr.id]=\"buildId('Container')\"\n tabindex=\"-1\"\n>\n <label\n [attr.for]=\"buildChildId()\"\n *ngIf=\"!!label\"\n [ngClass]=\"isLabelSrOnly ? 'sr-only' : labelStyleModifier\"\n [attr.id]=\"buildChildId() + 'Label'\"\n >\n <span [innerHTML]=\"label\"></span>\n <span\n *ngIf=\"!required && !hideNotRequiredExtraLabel\"\n aria-hidden=\"true\"\n >\n {{ 'foehn-input.optional' | fromDictionary }}\n </span>\n </label>\n\n <foehn-validation-alerts [component]=\"this\"></foehn-validation-alerts>\n\n <div *ngIf=\"!elements\">Chargement...</div>\n\n <small\n *ngIf=\"helpText\"\n [attr.id]=\"buildChildId() + 'Help'\"\n class=\"form-text text-secondary\"\n [innerHTML]=\"helpText\"\n ></small>\n\n <ng-content></ng-content>\n\n <div class=\"sr-only\">\n Utilisez les fl\u00E8ches haut et bas pour naviguer dans la liste, puis la\n touche Entrer pour s\u00E9lectionner une option.\n </div>\n\n <!-- Give screen reader users the total of results when then input changes. -->\n <div\n class=\"sr-only\"\n aria-live=\"polite\"\n role=\"status\"\n aria-atomic=\"true\"\n *ngIf=\"displayedElements && shouldDisplayListbox()\"\n >\n Nombre de r\u00E9sultats: {{ displayedElements.length }}\n <!-- Trick to have NVDA re-reading this properly -->\n <span>{{ notificationMessageUpdated ? ',' : ',,' }}</span>\n </div>\n\n <input\n [class.is-invalid]=\"hasErrorsToDisplay()\"\n class=\"form-control autocomplete\"\n type=\"text\"\n role=\"textbox\"\n [name]=\"name || label\"\n [attr.id]=\"buildChildId()\"\n [attr.placeholder]=\"placeholder || null\"\n [attr.disabled]=\"disabled ? 'disabled' : null\"\n [attr.aria-describedby]=\"getDescribedBy()\"\n [attr.aria-required]=\"required || null\"\n [attr.aria-invalid]=\"hasErrorsToDisplay() || null\"\n [attr.autocomplete]=\"'off'\"\n [attr.aria-activedescendant]=\"getActiveDescendantId()\"\n [attr.aria-owns]=\"\n shouldDisplayListbox() ? buildChildId() + 'Listbox' : null\n \"\n [attr.list]=\"buildChildId() + 'list'\"\n [(ngModel)]=\"inputValue\"\n (ngModelChange)=\"showSuggestionsWhenInputHasFocusAndIsEmpty($event)\"\n (paste)=\"onPaste($event)\"\n (focus)=\"onInputFocus()\"\n (blur)=\"onInputBlur()\"\n (keydown)=\"onKeyDown($event)\"\n (click)=\"onInputClick()\"\n autocomplete=\"off\"\n #entryComponent\n />\n\n <button\n type=\"button\"\n *ngIf=\"displayClearButton() | async\"\n class=\"autocomplete-clear-button btn\"\n (click)=\"onClear()\"\n [id]=\"buildChildId() + 'Clear'\"\n >\n <foehn-icon-times\n class=\"autocomplete-clear-button-icon\"\n title=\"R\u00E9initialiser le champ\"\n ></foehn-icon-times>\n </button>\n\n <div\n class=\"form-group suggestions-list-container\"\n *ngIf=\"shouldDisplayListbox()\"\n >\n <cdk-virtual-scroll-viewport\n [itemSize]=\"
|
|
6213
|
+
], template: "<!--\n Accessible autocomplete widget following the listbox combobox pattern.\n ref: https://www.w3.org/TR/wai-aria-practices-1.1/examples/combobox/aria1.1pattern/listbox-combo.html\n-->\n<div\n class=\"form-group autocomplete-form-group\"\n [class.has-danger]=\"hasErrorsToDisplay()\"\n [class.vd-form-group-danger]=\"hasErrorsToDisplay()\"\n [attr.aria-expanded]=\"shouldDisplayListbox()\"\n [attr.aria-haspopup]=\"'listbox'\"\n [attr.id]=\"buildId('Container')\"\n tabindex=\"-1\"\n>\n <label\n [attr.for]=\"buildChildId()\"\n *ngIf=\"!!label\"\n [ngClass]=\"isLabelSrOnly ? 'sr-only' : labelStyleModifier\"\n [attr.id]=\"buildChildId() + 'Label'\"\n >\n <span [innerHTML]=\"label\"></span>\n <span\n *ngIf=\"!required && !hideNotRequiredExtraLabel\"\n aria-hidden=\"true\"\n >\n {{ 'foehn-input.optional' | fromDictionary }}\n </span>\n </label>\n\n <foehn-validation-alerts [component]=\"this\"></foehn-validation-alerts>\n\n <div *ngIf=\"!elements\">Chargement...</div>\n\n <small\n *ngIf=\"helpText\"\n [attr.id]=\"buildChildId() + 'Help'\"\n class=\"form-text text-secondary\"\n [innerHTML]=\"helpText\"\n ></small>\n\n <ng-content></ng-content>\n\n <div class=\"sr-only\">\n Utilisez les fl\u00E8ches haut et bas pour naviguer dans la liste, puis la\n touche Entrer pour s\u00E9lectionner une option.\n </div>\n\n <!-- Give screen reader users the total of results when then input changes. -->\n <div\n class=\"sr-only\"\n aria-live=\"polite\"\n role=\"status\"\n aria-atomic=\"true\"\n *ngIf=\"displayedElements && shouldDisplayListbox()\"\n >\n Nombre de r\u00E9sultats: {{ displayedElements.length }}\n <!-- Trick to have NVDA re-reading this properly -->\n <span>{{ notificationMessageUpdated ? ',' : ',,' }}</span>\n </div>\n\n <input\n [class.is-invalid]=\"hasErrorsToDisplay()\"\n class=\"form-control autocomplete\"\n type=\"text\"\n role=\"textbox\"\n [name]=\"name || label\"\n [attr.id]=\"buildChildId()\"\n [attr.placeholder]=\"placeholder || null\"\n [attr.disabled]=\"disabled ? 'disabled' : null\"\n [attr.aria-describedby]=\"getDescribedBy()\"\n [attr.aria-required]=\"required || null\"\n [attr.aria-invalid]=\"hasErrorsToDisplay() || null\"\n [attr.autocomplete]=\"'off'\"\n [attr.aria-activedescendant]=\"getActiveDescendantId()\"\n [attr.aria-owns]=\"\n shouldDisplayListbox() ? buildChildId() + 'Listbox' : null\n \"\n [attr.list]=\"buildChildId() + 'list'\"\n [(ngModel)]=\"inputValue\"\n (ngModelChange)=\"showSuggestionsWhenInputHasFocusAndIsEmpty($event)\"\n (paste)=\"onPaste($event)\"\n (focus)=\"onInputFocus()\"\n (blur)=\"onInputBlur()\"\n (keydown)=\"onKeyDown($event)\"\n (click)=\"onInputClick()\"\n autocomplete=\"off\"\n #entryComponent\n />\n\n <button\n type=\"button\"\n *ngIf=\"displayClearButton() | async\"\n class=\"autocomplete-clear-button btn\"\n (click)=\"onClear()\"\n [id]=\"buildChildId() + 'Clear'\"\n >\n <foehn-icon-times\n class=\"autocomplete-clear-button-icon\"\n title=\"R\u00E9initialiser le champ\"\n ></foehn-icon-times>\n </button>\n\n <div\n class=\"form-group suggestions-list-container\"\n *ngIf=\"shouldDisplayListbox()\"\n >\n <cdk-virtual-scroll-viewport\n [itemSize]=\"itemHeightInSuggestionListInPx\"\n [style.height.px]=\"VIEW_PORT_HEIGHT\"\n >\n <ul\n [attr.id]=\"buildChildId() + 'Listbox'\"\n [attr.aria-labelledby]=\"buildChildId() + 'Label'\"\n role=\"listbox\"\n class=\"suggestions-list\"\n #suggestionsList\n >\n <li\n tabindex=\"-1\"\n role=\"option\"\n class=\"suggestion\"\n *cdkVirtualFor=\"\n let element of displayedElements;\n index as i\n \"\n [attr.id]=\"buildChildId() + 'Option' + i\"\n (click)=\"onClickSuggestion(element)\"\n (mousedown)=\"onListOptionMouseDown($event)\"\n (focus)=\"onListOptionFocus()\"\n (blur)=\"onListOptionBlur()\"\n [style.height.px]=\"itemHeightInSuggestionListInPx\"\n >\n <!-- Ensures that screen readers don't consider any spaces around the emphasis -->\n <span [innerHtml]=\"getLabelWithEmphasis(element)\"></span>\n </li>\n </ul>\n </cdk-virtual-scroll-viewport>\n </div>\n</div>\n", styles: ["div.suggestions-list-container{position:relative;width:100%}cdk-virtual-scroll-viewport{width:100%;position:absolute;top:0;left:0;z-index:10;background:white;overflow-y:auto;box-shadow:0 4px 8px #0003,0 6px 20px #00000030;list-style:none;margin:inherit;padding:inherit}ul.suggestions-list{list-style:none;margin:0;padding:0}li.suggestion{width:100%;padding:.5em;font-size:1em}li.suggestion:hover,.suggestion-selected{background-color:var(--vd-info)}li.suggestion:hover{cursor:pointer;background-color:#dfdfdf}input.autocomplete::-ms-clear{display:none}input.autocomplete{padding-right:30px}.autocomplete-form-group{position:relative}.autocomplete-clear-button{position:absolute;bottom:4px;right:4px;height:30px;width:30px;background:none;border:none}.autocomplete-clear-button-icon{top:4px;right:8px;position:absolute}:host ::ng-deep .autocomplete-clear-button.btn .svg-inline--fa{color:#595959!important}:host ::ng-deep .autocomplete-clear-button.btn:hover .svg-inline--fa{color:#000!important}\n"] }]
|
|
6209
6214
|
}], ctorParameters: function () { return [{ type: i0.NgZone }]; }, propDecorators: { virtualScrollViewport: [{
|
|
6210
6215
|
type: ViewChild,
|
|
6211
6216
|
args: [CdkVirtualScrollViewport]
|
|
@@ -6221,6 +6226,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
|
|
|
6221
6226
|
type: Input
|
|
6222
6227
|
}], customValueModelGenerator: [{
|
|
6223
6228
|
type: Input
|
|
6229
|
+
}], itemHeightInSuggestionListInPx: [{
|
|
6230
|
+
type: Input
|
|
6224
6231
|
}] } });
|
|
6225
6232
|
|
|
6226
6233
|
class SdkDictionaryModule {
|
|
@@ -8888,7 +8895,7 @@ FoehnInputAddressComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0
|
|
|
8888
8895
|
useExisting: forwardRef(() => FoehnInputAddressComponent),
|
|
8889
8896
|
multi: true
|
|
8890
8897
|
}
|
|
8891
|
-
], viewQueries: [{ propertyName: "foreignLocalityComponent", first: true, predicate: FoehnInputForeignLocalityComponent, descendants: true }, { propertyName: "foreignStreetComponent", first: true, predicate: FoehnInputForeignStreetComponent, descendants: true }, { propertyName: "foreignHouseNumber", first: true, predicate: ["foreignHouseNumber"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div\n [attr.id]=\"buildId() + 'Container'\"\n class=\"form-group\"\n [class.has-danger]=\"hasErrorsToDisplay()\"\n [class.vd-form-group-danger]=\"hasErrorsToDisplay()\"\n [tabIndex]=\"-1\"\n>\n <fieldset\n class=\"mb-3\"\n [attr.aria-describedby]=\"getDescribedBy()\"\n [attr.aria-invalid]=\"hasErrorsToDisplay() || null\"\n >\n <legend *ngIf=\"!!label\" [ngClass]=\"isLabelSrOnly ? 'sr-only' : 'vd-p'\">\n <span [innerHTML]=\"label\"></span>\n <span\n *ngIf=\"!required && !hideNotRequiredExtraLabel\"\n aria-hidden=\"true\"\n >\n {{ 'foehn-input.optional' | fromDictionary }}\n </span>\n </legend>\n\n <foehn-validation-alerts [component]=\"this\"></foehn-validation-alerts>\n\n <small\n *ngIf=\"helpText\"\n [attr.id]=\"buildId() + 'Help'\"\n class=\"text-secondary\"\n [innerHTML]=\"helpText\"\n ></small>\n\n <ng-content></ng-content>\n\n <foehn-autocomplete\n *ngIf=\"!isOnlySwiss\"\n [label]=\"'foehn-input-address.country.label' | fromDictionary\"\n [elements]=\"countries | async\"\n elementLabel=\"shortNameFr\"\n [elementValue]=\"identity\"\n [elementValueIdentity]=\"countryIdentity\"\n (modelChange)=\"countryUpdated($event)\"\n (userInput)=\"userInputCountry()\"\n [model]=\"country\"\n [name]=\"name + '.country'\"\n [required]=\"countryRequired\"\n [disabled]=\"disabled\"\n ></foehn-autocomplete>\n\n <ng-container *ngIf=\"isSwiss()\">\n <foehn-autocomplete\n [label]=\"'foehn-input-address.locality.label' | fromDictionary\"\n [elements]=\"localities | async\"\n [elementLabel]=\"getLocalityDisplayedName\"\n [elementValue]=\"identity\"\n [elementValueIdentity]=\"localityIdentity\"\n (modelChange)=\"localityUpdated($event)\"\n (userInput)=\"userInputLocality($event)\"\n [model]=\"locality\"\n [name]=\"name + '.locality'\"\n [required]=\"swissNpaLocalityRequired\"\n [allElementDisabled]=\"!country\"\n [disabled]=\"disabled\"\n ></foehn-autocomplete>\n\n <foehn-autocomplete\n [label]=\"'foehn-input-address.street.label' | fromDictionary\"\n [elements]=\"streets | async\"\n elementLabel=\"longName\"\n [elementValue]=\"identity\"\n [elementValueIdentity]=\"streetIdentity\"\n (modelChange)=\"streetUpdated($event)\"\n [model]=\"street\"\n [name]=\"name + '.street'\"\n [allowCustomValue]=\"true\"\n [customValueModelGenerator]=\"streetGenerator\"\n [required]=\"streetRequired\"\n [helpText]=\"\n 'foehn-input-address.street.help-text' | fromDictionary\n \"\n [allElementDisabled]=\"!country\"\n (userInput)=\"userInputStreet($event)\"\n [disabled]=\"disabled\"\n ></foehn-autocomplete>\n\n <foehn-autocomplete\n [label]=\"\n 'foehn-input-address.houseNumber.label' | fromDictionary\n \"\n [elements]=\"streetNumbers | async\"\n elementLabel=\"name\"\n elementValue=\"name\"\n [(model)]=\"houseNumber\"\n [name]=\"name + '.houseNumber'\"\n [allowCustomValue]=\"true\"\n [helpText]=\"\n 'foehn-input-address.houseNumber.help-text' | fromDictionary\n \"\n [allElementDisabled]=\"!country\"\n (modelChange)=\"updateAddress()\"\n (userInput)=\"handleUserInput()\"\n [required]=\"streetNumberRequired\"\n [disabled]=\"disabled\"\n ></foehn-autocomplete>\n </ng-container>\n\n <ng-container *ngIf=\"!isSwiss()\">\n <!--\n Component <foehn-input-foreign-locality> is special because we use the same model when swiss or foreigner.\n To do so, we need:\n - Errors will be bind on 'locality' when NULL or on 'zipCode' and 'longName' model inside component when EMPTY\n - Hide label from component because we need label from children to be displayed (isLabelSrOnly: true)\n - required and disabled params are transmitted to children\n -->\n <foehn-input-foreign-locality\n [label]=\"'foehn-input-address.locality.label' | fromDictionary\"\n [name]=\"name + '.locality'\"\n [(model)]=\"locality\"\n [zipCodeRequired]=\"foreignZipCodeRequired\"\n [localityRequired]=\"foreignLocalityRequired\"\n [isLabelSrOnly]=\"true\"\n [disabled]=\"!country || disabled\"\n (modelChange)=\"updateAddress()\"\n (userInput)=\"handleUserInput()\"\n ></foehn-input-foreign-locality>\n <!--\n Component <foehn-input-foreign-street> is special because we use the same model when swiss or foreigner.\n To do so, we need:\n - Errors will be bind on 'street' when NULL or on 'longName' model inside component when EMPTY\n - required, helpText, isLabelSrOnly and disabled params are transmitted to children\n -->\n <foehn-input-foreign-street\n [label]=\"'foehn-input-address.street.label' | fromDictionary\"\n [name]=\"name + '.street'\"\n [(model)]=\"street\"\n [required]=\"foreignStreetRequired\"\n [helpText]=\"\n 'foehn-input-address.street.help-text' | fromDictionary\n \"\n [disabled]=\"!country || disabled\"\n (modelChange)=\"updateAddress()\"\n (userInput)=\"handleUserInput()\"\n ></foehn-input-foreign-street>\n\n <foehn-input-text\n #foreignHouseNumber\n [label]=\"\n 'foehn-input-address.houseNumber.label' | fromDictionary\n \"\n [name]=\"name + '.houseNumber'\"\n [(model)]=\"houseNumber\"\n [helpText]=\"\n 'foehn-input-address.houseNumber.help-text' | fromDictionary\n \"\n [disabled]=\"!country || disabled\"\n (modelChange)=\"updateAddress()\"\n (userInput)=\"handleUserInput()\"\n [required]=\"foreignStreetNumberRequired\"\n ></foehn-input-text>\n </ng-container>\n\n <foehn-input-text\n *ngIf=\"showPostOfficeBoxText\"\n [(model)]=\"postOfficeBoxText\"\n [helpText]=\"\n 'foehn-input-address.postOfficeBoxText.help-text'\n | fromDictionary\n \"\n [label]=\"\n 'foehn-input-address.postOfficeBoxText.label' | fromDictionary\n \"\n [name]=\"name + '.postOfficeBoxText'\"\n (modelChange)=\"updateAddress()\"\n (userInput)=\"handleUserInput()\"\n [required]=\"postOfficeBoxTextRequired\"\n [disabled]=\"disabled\"\n ></foehn-input-text>\n\n <foehn-input-text\n *ngIf=\"showAdressLines && showAdressLine1\"\n [(model)]=\"addressLine1\"\n [label]=\"'foehn-input-address.addressLine1.label' | fromDictionary\"\n [name]=\"name + '.addressLine1'\"\n (modelChange)=\"updateAddress()\"\n (userInput)=\"handleUserInput()\"\n [required]=\"addressLine1Required\"\n [autocomplete]=\"'address-line2'\"\n [disabled]=\"disabled\"\n ></foehn-input-text>\n\n <foehn-input-text\n *ngIf=\"showAdressLines && showAdressLine2\"\n [(model)]=\"addressLine2\"\n [label]=\"'foehn-input-address.addressLine2.label' | fromDictionary\"\n [name]=\"name + '.addressLine2'\"\n (modelChange)=\"updateAddress()\"\n (userInput)=\"handleUserInput()\"\n [required]=\"addressLine2Required\"\n [autocomplete]=\"'address-line3'\"\n [disabled]=\"disabled\"\n ></foehn-input-text>\n </fieldset>\n</div>\n", components: [{ type: FoehnValidationAlertsComponent, selector: "foehn-validation-alerts", inputs: ["component", "shouldErrorsBeLive"] }, { type: FoehnAutocompleteComponent, selector: "foehn-autocomplete", inputs: ["searchValueMinCharsCount", "allowCustomValue", "customValueModelGenerator"] }, { type: FoehnInputForeignLocalityComponent, selector: "foehn-input-foreign-locality", inputs: ["localityRequired", "zipCodeRequired"] }, { type: FoehnInputForeignStreetComponent, selector: "foehn-input-foreign-street" }, { type: FoehnInputTextComponent, selector: "foehn-input-text", inputs: ["numberOnly"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], pipes: { "fromDictionary": SdkDictionaryPipe, "async": i3.AsyncPipe } });
|
|
8898
|
+
], viewQueries: [{ propertyName: "foreignLocalityComponent", first: true, predicate: FoehnInputForeignLocalityComponent, descendants: true }, { propertyName: "foreignStreetComponent", first: true, predicate: FoehnInputForeignStreetComponent, descendants: true }, { propertyName: "foreignHouseNumber", first: true, predicate: ["foreignHouseNumber"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div\n [attr.id]=\"buildId() + 'Container'\"\n class=\"form-group\"\n [class.has-danger]=\"hasErrorsToDisplay()\"\n [class.vd-form-group-danger]=\"hasErrorsToDisplay()\"\n [tabIndex]=\"-1\"\n>\n <fieldset\n class=\"mb-3\"\n [attr.aria-describedby]=\"getDescribedBy()\"\n [attr.aria-invalid]=\"hasErrorsToDisplay() || null\"\n >\n <legend *ngIf=\"!!label\" [ngClass]=\"isLabelSrOnly ? 'sr-only' : 'vd-p'\">\n <span [innerHTML]=\"label\"></span>\n <span\n *ngIf=\"!required && !hideNotRequiredExtraLabel\"\n aria-hidden=\"true\"\n >\n {{ 'foehn-input.optional' | fromDictionary }}\n </span>\n </legend>\n\n <foehn-validation-alerts [component]=\"this\"></foehn-validation-alerts>\n\n <small\n *ngIf=\"helpText\"\n [attr.id]=\"buildId() + 'Help'\"\n class=\"text-secondary\"\n [innerHTML]=\"helpText\"\n ></small>\n\n <ng-content></ng-content>\n\n <foehn-autocomplete\n *ngIf=\"!isOnlySwiss\"\n [label]=\"'foehn-input-address.country.label' | fromDictionary\"\n [elements]=\"countries | async\"\n elementLabel=\"shortNameFr\"\n [elementValue]=\"identity\"\n [elementValueIdentity]=\"countryIdentity\"\n (modelChange)=\"countryUpdated($event)\"\n (userInput)=\"userInputCountry()\"\n [model]=\"country\"\n [name]=\"name + '.country'\"\n [required]=\"countryRequired\"\n [disabled]=\"disabled\"\n ></foehn-autocomplete>\n\n <ng-container *ngIf=\"isSwiss()\">\n <foehn-autocomplete\n [label]=\"'foehn-input-address.locality.label' | fromDictionary\"\n [elements]=\"localities | async\"\n [elementLabel]=\"getLocalityDisplayedName\"\n [elementValue]=\"identity\"\n [elementValueIdentity]=\"localityIdentity\"\n (modelChange)=\"localityUpdated($event)\"\n (userInput)=\"userInputLocality($event)\"\n [model]=\"locality\"\n [name]=\"name + '.locality'\"\n [required]=\"swissNpaLocalityRequired\"\n [allElementDisabled]=\"!country\"\n [disabled]=\"disabled\"\n ></foehn-autocomplete>\n\n <foehn-autocomplete\n [label]=\"'foehn-input-address.street.label' | fromDictionary\"\n [elements]=\"streets | async\"\n elementLabel=\"longName\"\n [elementValue]=\"identity\"\n [elementValueIdentity]=\"streetIdentity\"\n (modelChange)=\"streetUpdated($event)\"\n [model]=\"street\"\n [name]=\"name + '.street'\"\n [allowCustomValue]=\"true\"\n [customValueModelGenerator]=\"streetGenerator\"\n [required]=\"streetRequired\"\n [helpText]=\"\n 'foehn-input-address.street.help-text' | fromDictionary\n \"\n [allElementDisabled]=\"!country\"\n (userInput)=\"userInputStreet($event)\"\n [disabled]=\"disabled\"\n ></foehn-autocomplete>\n\n <foehn-autocomplete\n [label]=\"\n 'foehn-input-address.houseNumber.label' | fromDictionary\n \"\n [elements]=\"streetNumbers | async\"\n elementLabel=\"name\"\n elementValue=\"name\"\n [(model)]=\"houseNumber\"\n [name]=\"name + '.houseNumber'\"\n [allowCustomValue]=\"true\"\n [helpText]=\"\n 'foehn-input-address.houseNumber.help-text' | fromDictionary\n \"\n [allElementDisabled]=\"!country\"\n (modelChange)=\"updateAddress()\"\n (userInput)=\"handleUserInput()\"\n [required]=\"streetNumberRequired\"\n [disabled]=\"disabled\"\n ></foehn-autocomplete>\n </ng-container>\n\n <ng-container *ngIf=\"!isSwiss()\">\n <!--\n Component <foehn-input-foreign-locality> is special because we use the same model when swiss or foreigner.\n To do so, we need:\n - Errors will be bind on 'locality' when NULL or on 'zipCode' and 'longName' model inside component when EMPTY\n - Hide label from component because we need label from children to be displayed (isLabelSrOnly: true)\n - required and disabled params are transmitted to children\n -->\n <foehn-input-foreign-locality\n [label]=\"'foehn-input-address.locality.label' | fromDictionary\"\n [name]=\"name + '.locality'\"\n [(model)]=\"locality\"\n [zipCodeRequired]=\"foreignZipCodeRequired\"\n [localityRequired]=\"foreignLocalityRequired\"\n [isLabelSrOnly]=\"true\"\n [disabled]=\"!country || disabled\"\n (modelChange)=\"updateAddress()\"\n (userInput)=\"handleUserInput()\"\n ></foehn-input-foreign-locality>\n <!--\n Component <foehn-input-foreign-street> is special because we use the same model when swiss or foreigner.\n To do so, we need:\n - Errors will be bind on 'street' when NULL or on 'longName' model inside component when EMPTY\n - required, helpText, isLabelSrOnly and disabled params are transmitted to children\n -->\n <foehn-input-foreign-street\n [label]=\"'foehn-input-address.street.label' | fromDictionary\"\n [name]=\"name + '.street'\"\n [(model)]=\"street\"\n [required]=\"foreignStreetRequired\"\n [helpText]=\"\n 'foehn-input-address.street.help-text' | fromDictionary\n \"\n [disabled]=\"!country || disabled\"\n (modelChange)=\"updateAddress()\"\n (userInput)=\"handleUserInput()\"\n ></foehn-input-foreign-street>\n\n <foehn-input-text\n #foreignHouseNumber\n [label]=\"\n 'foehn-input-address.houseNumber.label' | fromDictionary\n \"\n [name]=\"name + '.houseNumber'\"\n [(model)]=\"houseNumber\"\n [helpText]=\"\n 'foehn-input-address.houseNumber.help-text' | fromDictionary\n \"\n [disabled]=\"!country || disabled\"\n (modelChange)=\"updateAddress()\"\n (userInput)=\"handleUserInput()\"\n [required]=\"foreignStreetNumberRequired\"\n ></foehn-input-text>\n </ng-container>\n\n <foehn-input-text\n *ngIf=\"showPostOfficeBoxText\"\n [(model)]=\"postOfficeBoxText\"\n [helpText]=\"\n 'foehn-input-address.postOfficeBoxText.help-text'\n | fromDictionary\n \"\n [label]=\"\n 'foehn-input-address.postOfficeBoxText.label' | fromDictionary\n \"\n [name]=\"name + '.postOfficeBoxText'\"\n (modelChange)=\"updateAddress()\"\n (userInput)=\"handleUserInput()\"\n [required]=\"postOfficeBoxTextRequired\"\n [disabled]=\"disabled\"\n ></foehn-input-text>\n\n <foehn-input-text\n *ngIf=\"showAdressLines && showAdressLine1\"\n [(model)]=\"addressLine1\"\n [label]=\"'foehn-input-address.addressLine1.label' | fromDictionary\"\n [name]=\"name + '.addressLine1'\"\n (modelChange)=\"updateAddress()\"\n (userInput)=\"handleUserInput()\"\n [required]=\"addressLine1Required\"\n [autocomplete]=\"'address-line2'\"\n [disabled]=\"disabled\"\n ></foehn-input-text>\n\n <foehn-input-text\n *ngIf=\"showAdressLines && showAdressLine2\"\n [(model)]=\"addressLine2\"\n [label]=\"'foehn-input-address.addressLine2.label' | fromDictionary\"\n [name]=\"name + '.addressLine2'\"\n (modelChange)=\"updateAddress()\"\n (userInput)=\"handleUserInput()\"\n [required]=\"addressLine2Required\"\n [autocomplete]=\"'address-line3'\"\n [disabled]=\"disabled\"\n ></foehn-input-text>\n </fieldset>\n</div>\n", components: [{ type: FoehnValidationAlertsComponent, selector: "foehn-validation-alerts", inputs: ["component", "shouldErrorsBeLive"] }, { type: FoehnAutocompleteComponent, selector: "foehn-autocomplete", inputs: ["searchValueMinCharsCount", "allowCustomValue", "customValueModelGenerator", "itemHeightInSuggestionListInPx"] }, { type: FoehnInputForeignLocalityComponent, selector: "foehn-input-foreign-locality", inputs: ["localityRequired", "zipCodeRequired"] }, { type: FoehnInputForeignStreetComponent, selector: "foehn-input-foreign-street" }, { type: FoehnInputTextComponent, selector: "foehn-input-text", inputs: ["numberOnly"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], pipes: { "fromDictionary": SdkDictionaryPipe, "async": i3.AsyncPipe } });
|
|
8892
8899
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: FoehnInputAddressComponent, decorators: [{
|
|
8893
8900
|
type: Component,
|
|
8894
8901
|
args: [{ selector: 'foehn-input-address', providers: [
|
|
@@ -9215,7 +9222,7 @@ FoehnMultiselectAutocompleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVer
|
|
|
9215
9222
|
useExisting: forwardRef(() => FoehnMultiselectAutocompleteComponent),
|
|
9216
9223
|
multi: true
|
|
9217
9224
|
}
|
|
9218
|
-
], viewQueries: [{ propertyName: "autocompleteComponent", first: true, predicate: ["autocompleteComponent"], descendants: true }, { propertyName: "alertMessageContainer", first: true, predicate: ["alertMessageContainer"], descendants: true }, { propertyName: "defaultDeleteFocusArea", first: true, predicate: ["defaultDeleteFocusArea"], descendants: true }, { propertyName: "selectedElemRef", predicate: ["selectedElemRef"], descendants: true }, { propertyName: "defaultElemRef", predicate: ["defaultElemRef"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<foehn-autocomplete\n #autocompleteComponent\n [name]=\"name\"\n [label]=\"label\"\n [elements]=\"elements\"\n [elementsUrl]=\"elementsUrl\"\n [elementValue]=\"elementValue\"\n [elementLabel]=\"elementLabel\"\n [elementValueIdentity]=\"elementValueIdentity\"\n [elementDisabled]=\"elementDisabled\"\n [allElementDisabled]=\"allElementDisabled\"\n [elementGroup]=\"elementGroup\"\n [allowCustomValue]=\"false\"\n [searchValueMinCharsCount]=\"searchValueMinCharsCount\"\n [customValueModelGenerator]=\"customValueModelGenerator\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n (userInput)=\"addItem($event)\"\n [(model)]=\"autocompleteInputValue\"\n (elementsLoaded)=\"onAutocompleteElementsLoaded($event)\"\n [showErrorWhenDisabled]=\"showErrorWhenDisabled\"\n [hideNotRequiredExtraLabel]=\"hideNotRequiredExtraLabel\"\n>\n <small\n *ngIf=\"!showEmptyListMessage\"\n [attr.id]=\"buildChildId('Help')\"\n class=\"form-text text-secondary\"\n [innerHTML]=\"\n helpText\n ? helpText\n : ('foehn-multiselect-autocomplete.autocomplete.screen-reader.label'\n | fromDictionary)\n \"\n ></small>\n\n <div\n [id]=\"buildChildId('AlertMessageContainer')\"\n role=\"status\"\n #alertMessageContainer\n >\n <p\n *ngIf=\"showEmptyListMessage\"\n class=\"alert alert-info mb-0\"\n tabindex=\"0\"\n >\n {{\n 'foehn-multiselect-autocomplete.autocomplete.empty-message'\n | fromDictionary\n }}\n </p>\n </div>\n</foehn-autocomplete>\n\n<p class=\"sr-only\" aria-live=\"polite\" aria-atomic=\"true\">\n {{ srAnnouncements }}\n</p>\n\n<div\n class=\"form-group selected-list-container d-flex align-content-stretch flex-wrap\"\n [ngClass]=\"!!model && !!model.length ? 'pt-2' : 'pt-0'\"\n [class.has-danger]=\"hasErrorsToDisplay()\"\n [class.vd-form-group-danger]=\"hasErrorsToDisplay()\"\n tabindex=\"-1\"\n>\n <span\n *ngIf=\"hasDefaultDeleteFocusArea()\"\n class=\"sr-only\"\n [tabindex]=\"0\"\n [innerHTML]=\"\n 'foehn-multiselect-autocomplete.sr-default-focus.no-element-to-delete'\n | fromDictionary\n \"\n #defaultDeleteFocusArea\n ></span>\n <ng-container\n *ngFor=\"let element of model; let index = index; trackBy: trackByFn\"\n >\n <span\n *ngIf=\"!canBeDeleted(index)\"\n class=\"badge badge-pill badge-secondary mr-1 mb-1 py-2 px-3 d-flex align-items-center\"\n [tabindex]=\"disabled ? -1 : 0\"\n [attr.aria-describedby]=\"buildChildId('Label')\"\n #defaultElemRef\n >\n {{ getLabel(element) }}\n <span class=\"sr-only\">\n {{\n 'foehn-multiselect-autocomplete.sr-default-selected-element'\n | fromDictionary\n }}\n </span>\n </span>\n <button\n *ngIf=\"canBeDeleted(index)\"\n class=\"btn btn-danger badge badge-pill mr-1 mb-1 py-2 px-3 d-flex align-items-center\"\n [tabindex]=\"0\"\n [attr.aria-label]=\"getDeleteButtonAriaLabel(element)\"\n [attr.aria-describedby]=\"buildChildId('Label')\"\n [title]=\"getDeleteButtonAriaLabel(element)\"\n (click)=\"removeItem(element, index)\"\n #selectedElemRef\n >\n {{ getLabel(element) }}\n <foehn-icon-times\n aria-hidden=\"true\"\n class=\"ml-2\"\n [title]=\"getDeleteButtonAriaLabel(element)\"\n ></foehn-icon-times>\n </button>\n </ng-container>\n</div>\n", styles: ["foehn-autocomplete p.alert:focus{outline:0;box-shadow:inset 0 1px 1px #00000013,0 0 0 .2rem var(--vd-focus)}:host ::ng-deep foehn-autocomplete .form-group{margin-bottom:0!important}.selected-list-container button>.btn,.btn-link{line-height:inherit;padding:0}.selected-list-container .btn{text-transform:none}:host ::ng-deep .btn .svg-inline--fa{color:#fff!important}.selected-list-container span.badge-pill:focus{outline:0;box-shadow:inset 0 1px 1px #00000013,0 0 0 .2rem var(--vd-focus)}\n"], components: [{ type: FoehnAutocompleteComponent, selector: "foehn-autocomplete", inputs: ["searchValueMinCharsCount", "allowCustomValue", "customValueModelGenerator"] }, { type: FoehnIconTimesComponent, selector: "foehn-icon-times" }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "fromDictionary": SdkDictionaryPipe } });
|
|
9225
|
+
], viewQueries: [{ propertyName: "autocompleteComponent", first: true, predicate: ["autocompleteComponent"], descendants: true }, { propertyName: "alertMessageContainer", first: true, predicate: ["alertMessageContainer"], descendants: true }, { propertyName: "defaultDeleteFocusArea", first: true, predicate: ["defaultDeleteFocusArea"], descendants: true }, { propertyName: "selectedElemRef", predicate: ["selectedElemRef"], descendants: true }, { propertyName: "defaultElemRef", predicate: ["defaultElemRef"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<foehn-autocomplete\n #autocompleteComponent\n [name]=\"name\"\n [label]=\"label\"\n [elements]=\"elements\"\n [elementsUrl]=\"elementsUrl\"\n [elementValue]=\"elementValue\"\n [elementLabel]=\"elementLabel\"\n [elementValueIdentity]=\"elementValueIdentity\"\n [elementDisabled]=\"elementDisabled\"\n [allElementDisabled]=\"allElementDisabled\"\n [elementGroup]=\"elementGroup\"\n [allowCustomValue]=\"false\"\n [searchValueMinCharsCount]=\"searchValueMinCharsCount\"\n [customValueModelGenerator]=\"customValueModelGenerator\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n (userInput)=\"addItem($event)\"\n [(model)]=\"autocompleteInputValue\"\n (elementsLoaded)=\"onAutocompleteElementsLoaded($event)\"\n [showErrorWhenDisabled]=\"showErrorWhenDisabled\"\n [hideNotRequiredExtraLabel]=\"hideNotRequiredExtraLabel\"\n>\n <small\n *ngIf=\"!showEmptyListMessage\"\n [attr.id]=\"buildChildId('Help')\"\n class=\"form-text text-secondary\"\n [innerHTML]=\"\n helpText\n ? helpText\n : ('foehn-multiselect-autocomplete.autocomplete.screen-reader.label'\n | fromDictionary)\n \"\n ></small>\n\n <div\n [id]=\"buildChildId('AlertMessageContainer')\"\n role=\"status\"\n #alertMessageContainer\n >\n <p\n *ngIf=\"showEmptyListMessage\"\n class=\"alert alert-info mb-0\"\n tabindex=\"0\"\n >\n {{\n 'foehn-multiselect-autocomplete.autocomplete.empty-message'\n | fromDictionary\n }}\n </p>\n </div>\n</foehn-autocomplete>\n\n<p class=\"sr-only\" aria-live=\"polite\" aria-atomic=\"true\">\n {{ srAnnouncements }}\n</p>\n\n<div\n class=\"form-group selected-list-container d-flex align-content-stretch flex-wrap\"\n [ngClass]=\"!!model && !!model.length ? 'pt-2' : 'pt-0'\"\n [class.has-danger]=\"hasErrorsToDisplay()\"\n [class.vd-form-group-danger]=\"hasErrorsToDisplay()\"\n tabindex=\"-1\"\n>\n <span\n *ngIf=\"hasDefaultDeleteFocusArea()\"\n class=\"sr-only\"\n [tabindex]=\"0\"\n [innerHTML]=\"\n 'foehn-multiselect-autocomplete.sr-default-focus.no-element-to-delete'\n | fromDictionary\n \"\n #defaultDeleteFocusArea\n ></span>\n <ng-container\n *ngFor=\"let element of model; let index = index; trackBy: trackByFn\"\n >\n <span\n *ngIf=\"!canBeDeleted(index)\"\n class=\"badge badge-pill badge-secondary mr-1 mb-1 py-2 px-3 d-flex align-items-center\"\n [tabindex]=\"disabled ? -1 : 0\"\n [attr.aria-describedby]=\"buildChildId('Label')\"\n #defaultElemRef\n >\n {{ getLabel(element) }}\n <span class=\"sr-only\">\n {{\n 'foehn-multiselect-autocomplete.sr-default-selected-element'\n | fromDictionary\n }}\n </span>\n </span>\n <button\n *ngIf=\"canBeDeleted(index)\"\n class=\"btn btn-danger badge badge-pill mr-1 mb-1 py-2 px-3 d-flex align-items-center\"\n [tabindex]=\"0\"\n [attr.aria-label]=\"getDeleteButtonAriaLabel(element)\"\n [attr.aria-describedby]=\"buildChildId('Label')\"\n [title]=\"getDeleteButtonAriaLabel(element)\"\n (click)=\"removeItem(element, index)\"\n #selectedElemRef\n >\n {{ getLabel(element) }}\n <foehn-icon-times\n aria-hidden=\"true\"\n class=\"ml-2\"\n [title]=\"getDeleteButtonAriaLabel(element)\"\n ></foehn-icon-times>\n </button>\n </ng-container>\n</div>\n", styles: ["foehn-autocomplete p.alert:focus{outline:0;box-shadow:inset 0 1px 1px #00000013,0 0 0 .2rem var(--vd-focus)}:host ::ng-deep foehn-autocomplete .form-group{margin-bottom:0!important}.selected-list-container button>.btn,.btn-link{line-height:inherit;padding:0}.selected-list-container .btn{text-transform:none}:host ::ng-deep .btn .svg-inline--fa{color:#fff!important}.selected-list-container span.badge-pill:focus{outline:0;box-shadow:inset 0 1px 1px #00000013,0 0 0 .2rem var(--vd-focus)}\n"], components: [{ type: FoehnAutocompleteComponent, selector: "foehn-autocomplete", inputs: ["searchValueMinCharsCount", "allowCustomValue", "customValueModelGenerator", "itemHeightInSuggestionListInPx"] }, { type: FoehnIconTimesComponent, selector: "foehn-icon-times" }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "fromDictionary": SdkDictionaryPipe } });
|
|
9219
9226
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: FoehnMultiselectAutocompleteComponent, decorators: [{
|
|
9220
9227
|
type: Component,
|
|
9221
9228
|
args: [{ selector: 'foehn-multiselect-autocomplete', providers: [
|