{"version":3,"file":"studiohyperdrive-ngx-forms.mjs","sources":["../tmp-esm2022/lib/validators/utils/is-empty-input-value.util.js","../tmp-esm2022/lib/validators/utils/form-error.util.js","../tmp-esm2022/lib/validators/all-or-nothing-required/all-or-nothing-required.validator.js","../tmp-esm2022/lib/validators/at-least-one-required/at-least-one-required.validator.js","../tmp-esm2022/lib/validators/depended-required/depended-required.validator.js","../tmp-esm2022/lib/validators/decimals-after-comma/decimals-after-comma.validator.js","../tmp-esm2022/lib/validators/chronological-dates/chronological-dates.validator.js","../tmp-esm2022/lib/validators/email/extended-email.validator.js","../tmp-esm2022/lib/validators/has-no-future-date/has-no-future-date.validator.js","../tmp-esm2022/lib/validators/date-range/date-range.validator.js","../tmp-esm2022/lib/validators/max-word-count/word-count.validator.js","../tmp-esm2022/lib/validators/compare/compare.validator.js","../tmp-esm2022/lib/validators/validators.js","../tmp-esm2022/lib/abstracts/base-form/base-form.accessor.js","../tmp-esm2022/lib/utils/mark-all-as-dirty/mark-all-as-dirty.util.js","../tmp-esm2022/lib/utils/custom-update-value-and-validity/custom-update-value-and-validity.util.js","../tmp-esm2022/lib/utils/form-accessor/form-accessor.utils.js","../tmp-esm2022/lib/utils/has-errors/has-errors.util.js","../tmp-esm2022/lib/utils/touched-event-listener/touched-event-listener.js","../tmp-esm2022/lib/utils/accessor-providers/accessor-providers.util.js","../tmp-esm2022/lib/abstracts/custom-control-value-accessor/custom-control-value-accessor.js","../tmp-esm2022/lib/abstracts/form/form.accessor.js","../tmp-esm2022/lib/abstracts/data-form/data-form.accessor.js","../tmp-esm2022/lib/abstracts/form-accessor-container/form-accessor-container.js","../tmp-esm2022/lib/abstracts/error/error.component.abstract.js","../tmp-esm2022/lib/abstracts/save-on-exit/save-on-exit.component.abstract.js","../tmp-esm2022/lib/abstracts/save-on-exit/save-on-exit.service.abstract.js","../tmp-esm2022/lib/tokens/errors-config.token.js","../tmp-esm2022/lib/directives/errors/errors.directive.js","../tmp-esm2022/lib/guards/save-on-exit/save-on-exit.guard.js","../tmp-esm2022/public-api.js","../tmp-esm2022/studiohyperdrive-ngx-forms.js"],"sourcesContent":["export const isEmptyInputValue = (value) => {\n    // we don't check for string here so it also works with arrays\n    return value == null || value.length === 0;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXMtZW1wdHktaW5wdXQtdmFsdWUudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9mb3Jtcy9zcmMvbGliL3ZhbGlkYXRvcnMvdXRpbHMvaXMtZW1wdHktaW5wdXQtdmFsdWUudXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLEtBQVUsRUFBVyxFQUFFO0lBQ3hELDhEQUE4RDtJQUM5RCxPQUFPLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7QUFDNUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IGlzRW1wdHlJbnB1dFZhbHVlID0gKHZhbHVlOiBhbnkpOiBib29sZWFuID0+IHtcblx0Ly8gd2UgZG9uJ3QgY2hlY2sgZm9yIHN0cmluZyBoZXJlIHNvIGl0IGFsc28gd29ya3Mgd2l0aCBhcnJheXNcblx0cmV0dXJuIHZhbHVlID09IG51bGwgfHwgdmFsdWUubGVuZ3RoID09PSAwO1xufTtcbiJdfQ==","import clean from 'obj-clean';\n/**\n * Removes an error from a form control\n *\n * @param control - Form control to remove the error from.\n * @param error  - Name of the error to remove from the control.\n */\nexport const clearFormError = (control, error) => {\n    // Iben: Check if there are no errors existing on this control or if the the provided error does not exist, and early exit if needed\n    const errors = new Set(Object.keys(control.errors || {}));\n    if (errors.size === 0 || !errors.has(error)) {\n        return;\n    }\n    // Iben: In case the provided error is the only error on the control, clear all errors and early exit\n    if (errors.has(error) && errors.size === 1) {\n        control.setErrors(null);\n        return;\n    }\n    // Iben: In case there are more errors, remove only the provided error\n    control.setErrors(clean({\n        ...control.errors,\n        [error]: undefined,\n    }));\n};\n/**\n * Adds an error to a form control\n *\n * @param control - Form control to attach the error to.\n * @param error - Name of the error to attach to the control.\n * @param value - Value of the error being attached to the control\n */\nexport const setFormError = (control, error, value = true) => {\n    // Iben: Early exit in case the control already has the error\n    if (control.hasError(error)) {\n        return;\n    }\n    // Iben: Add the provided error\n    control.setErrors({\n        ...control.errors,\n        [error]: value,\n    });\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1lcnJvci51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2Zvcm1zL3NyYy9saWIvdmFsaWRhdG9ycy91dGlscy9mb3JtLWVycm9yLnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxLQUFLLE1BQU0sV0FBVyxDQUFDO0FBRTlCOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsT0FBd0IsRUFBRSxLQUFhLEVBQVEsRUFBRTtJQUMvRSxvSUFBb0k7SUFDcEksTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFMUQsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUM3QyxPQUFPO0lBQ1IsQ0FBQztJQUVELHFHQUFxRztJQUNyRyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUM1QyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXhCLE9BQU87SUFDUixDQUFDO0lBRUQsc0VBQXNFO0lBQ3RFLE9BQU8sQ0FBQyxTQUFTLENBQ2hCLEtBQUssQ0FBQztRQUNMLEdBQUcsT0FBTyxDQUFDLE1BQU07UUFDakIsQ0FBQyxLQUFLLENBQUMsRUFBRSxTQUFTO0tBQ2xCLENBQUMsQ0FDRixDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBRUY7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQUMsT0FBd0IsRUFBRSxLQUFhLEVBQUUsUUFBYSxJQUFJLEVBQVEsRUFBRTtJQUNoRyw2REFBNkQ7SUFDN0QsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDN0IsT0FBTztJQUNSLENBQUM7SUFFRCwrQkFBK0I7SUFDL0IsT0FBTyxDQUFDLFNBQVMsQ0FBQztRQUNqQixHQUFHLE9BQU8sQ0FBQyxNQUFNO1FBQ2pCLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSztLQUNkLENBQUMsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0Q29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCBjbGVhbiBmcm9tICdvYmotY2xlYW4nO1xuXG4vKipcbiAqIFJlbW92ZXMgYW4gZXJyb3IgZnJvbSBhIGZvcm0gY29udHJvbFxuICpcbiAqIEBwYXJhbSBjb250cm9sIC0gRm9ybSBjb250cm9sIHRvIHJlbW92ZSB0aGUgZXJyb3IgZnJvbS5cbiAqIEBwYXJhbSBlcnJvciAgLSBOYW1lIG9mIHRoZSBlcnJvciB0byByZW1vdmUgZnJvbSB0aGUgY29udHJvbC5cbiAqL1xuZXhwb3J0IGNvbnN0IGNsZWFyRm9ybUVycm9yID0gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgZXJyb3I6IHN0cmluZyk6IHZvaWQgPT4ge1xuXHQvLyBJYmVuOiBDaGVjayBpZiB0aGVyZSBhcmUgbm8gZXJyb3JzIGV4aXN0aW5nIG9uIHRoaXMgY29udHJvbCBvciBpZiB0aGUgdGhlIHByb3ZpZGVkIGVycm9yIGRvZXMgbm90IGV4aXN0LCBhbmQgZWFybHkgZXhpdCBpZiBuZWVkZWRcblx0Y29uc3QgZXJyb3JzID0gbmV3IFNldChPYmplY3Qua2V5cyhjb250cm9sLmVycm9ycyB8fCB7fSkpO1xuXG5cdGlmIChlcnJvcnMuc2l6ZSA9PT0gMCB8fCAhZXJyb3JzLmhhcyhlcnJvcikpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBJYmVuOiBJbiBjYXNlIHRoZSBwcm92aWRlZCBlcnJvciBpcyB0aGUgb25seSBlcnJvciBvbiB0aGUgY29udHJvbCwgY2xlYXIgYWxsIGVycm9ycyBhbmQgZWFybHkgZXhpdFxuXHRpZiAoZXJyb3JzLmhhcyhlcnJvcikgJiYgZXJyb3JzLnNpemUgPT09IDEpIHtcblx0XHRjb250cm9sLnNldEVycm9ycyhudWxsKTtcblxuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIEliZW46IEluIGNhc2UgdGhlcmUgYXJlIG1vcmUgZXJyb3JzLCByZW1vdmUgb25seSB0aGUgcHJvdmlkZWQgZXJyb3Jcblx0Y29udHJvbC5zZXRFcnJvcnMoXG5cdFx0Y2xlYW4oe1xuXHRcdFx0Li4uY29udHJvbC5lcnJvcnMsXG5cdFx0XHRbZXJyb3JdOiB1bmRlZmluZWQsXG5cdFx0fSlcblx0KTtcbn07XG5cbi8qKlxuICogQWRkcyBhbiBlcnJvciB0byBhIGZvcm0gY29udHJvbFxuICpcbiAqIEBwYXJhbSBjb250cm9sIC0gRm9ybSBjb250cm9sIHRvIGF0dGFjaCB0aGUgZXJyb3IgdG8uXG4gKiBAcGFyYW0gZXJyb3IgLSBOYW1lIG9mIHRoZSBlcnJvciB0byBhdHRhY2ggdG8gdGhlIGNvbnRyb2wuXG4gKiBAcGFyYW0gdmFsdWUgLSBWYWx1ZSBvZiB0aGUgZXJyb3IgYmVpbmcgYXR0YWNoZWQgdG8gdGhlIGNvbnRyb2xcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEZvcm1FcnJvciA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsIGVycm9yOiBzdHJpbmcsIHZhbHVlOiBhbnkgPSB0cnVlKTogdm9pZCA9PiB7XG5cdC8vIEliZW46IEVhcmx5IGV4aXQgaW4gY2FzZSB0aGUgY29udHJvbCBhbHJlYWR5IGhhcyB0aGUgZXJyb3Jcblx0aWYgKGNvbnRyb2wuaGFzRXJyb3IoZXJyb3IpKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gSWJlbjogQWRkIHRoZSBwcm92aWRlZCBlcnJvclxuXHRjb250cm9sLnNldEVycm9ycyh7XG5cdFx0Li4uY29udHJvbC5lcnJvcnMsXG5cdFx0W2Vycm9yXTogdmFsdWUsXG5cdH0pO1xufTtcbiJdfQ==","import clean from 'obj-clean';\nimport { clearFormError, setFormError } from '../utils';\nconst EMPTY_SET = new Set([undefined, null, '']);\n/**\n * FormGroup validator which checks if either all values or no values are filled in\n *\n * @param controls - An array of controls.\n * @param dependedControlKey - A control within the group which the other controls depend on.\n * @param matchFunction - Optional function the dependedControl should check\n */\nexport const allOrNothingRequiredValidator = (form) => {\n    const keys = Object.keys(form.value);\n    // Iben:  If the group is completely empty we clear all required errors\n    if (Object.keys(clean(form.value, { preserveArrays: false })).length === 0) {\n        for (const key of keys) {\n            clearFormError(form.get(key), 'required');\n        }\n        return null;\n    }\n    // Iben:  Collect all control keys that are missing values\n    const requiredKeys = new Set();\n    // Iben: Loop over all keys and check each control on whether it is empty or not\n    keys.forEach((key) => {\n        const control = form.get(key);\n        // Iben: Check if the control is empty\n        const isEmpty = typeof control.value === 'object' && control.value !== null\n            ? Object.keys(clean(control.value)).length === 0\n            : EMPTY_SET.has(control.value);\n        // Iben: Add/remove the errors when needed\n        if (isEmpty) {\n            setFormError(control, 'required');\n            requiredKeys.add(key);\n        }\n        else {\n            clearFormError(control, 'required');\n            requiredKeys.delete(key);\n        }\n    });\n    // Iben: Return either null or the list of controls that are missing values based on the empty state\n    return requiredKeys.size === 0 ? null : { allOrNothingRequiredError: Array.from(requiredKeys) };\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxsLW9yLW5vdGhpbmctcmVxdWlyZWQudmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2Zvcm1zL3NyYy9saWIvdmFsaWRhdG9ycy9hbGwtb3Itbm90aGluZy1yZXF1aXJlZC9hbGwtb3Itbm90aGluZy1yZXF1aXJlZC52YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxLQUFLLE1BQU0sV0FBVyxDQUFDO0FBRTlCLE9BQU8sRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRXhELE1BQU0sU0FBUyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBRWpEOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUFHLENBQzVDLElBQWUsRUFDa0MsRUFBRTtJQUNuRCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVyQyx1RUFBdUU7SUFDdkUsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDNUUsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN4QixjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUMzQyxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDYixDQUFDO0lBRUQsMERBQTBEO0lBQzFELE1BQU0sWUFBWSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFFdkMsZ0ZBQWdGO0lBQ2hGLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtRQUNwQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTlCLHNDQUFzQztRQUN0QyxNQUFNLE9BQU8sR0FDWixPQUFPLE9BQU8sQ0FBQyxLQUFLLEtBQUssUUFBUSxJQUFJLE9BQU8sQ0FBQyxLQUFLLEtBQUssSUFBSTtZQUMxRCxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUM7WUFDaEQsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWpDLDBDQUEwQztRQUMxQyxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ2IsWUFBWSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztZQUVsQyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZCLENBQUM7YUFBTSxDQUFDO1lBQ1AsY0FBYyxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztZQUVwQyxZQUFZLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLENBQUM7SUFDRixDQUFDLENBQUMsQ0FBQztJQUVILG9HQUFvRztJQUNwRyxPQUFPLFlBQVksQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUseUJBQXlCLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO0FBQ2pHLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCBjbGVhbiBmcm9tICdvYmotY2xlYW4nO1xuXG5pbXBvcnQgeyBjbGVhckZvcm1FcnJvciwgc2V0Rm9ybUVycm9yIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5jb25zdCBFTVBUWV9TRVQgPSBuZXcgU2V0KFt1bmRlZmluZWQsIG51bGwsICcnXSk7XG5cbi8qKlxuICogRm9ybUdyb3VwIHZhbGlkYXRvciB3aGljaCBjaGVja3MgaWYgZWl0aGVyIGFsbCB2YWx1ZXMgb3Igbm8gdmFsdWVzIGFyZSBmaWxsZWQgaW5cbiAqXG4gKiBAcGFyYW0gY29udHJvbHMgLSBBbiBhcnJheSBvZiBjb250cm9scy5cbiAqIEBwYXJhbSBkZXBlbmRlZENvbnRyb2xLZXkgLSBBIGNvbnRyb2wgd2l0aGluIHRoZSBncm91cCB3aGljaCB0aGUgb3RoZXIgY29udHJvbHMgZGVwZW5kIG9uLlxuICogQHBhcmFtIG1hdGNoRnVuY3Rpb24gLSBPcHRpb25hbCBmdW5jdGlvbiB0aGUgZGVwZW5kZWRDb250cm9sIHNob3VsZCBjaGVja1xuICovXG5leHBvcnQgY29uc3QgYWxsT3JOb3RoaW5nUmVxdWlyZWRWYWxpZGF0b3IgPSAoXG5cdGZvcm06IEZvcm1Hcm91cFxuKTogeyBhbGxPck5vdGhpbmdSZXF1aXJlZEVycm9yOiBzdHJpbmdbXSB9IHwgbnVsbCA9PiB7XG5cdGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhmb3JtLnZhbHVlKTtcblxuXHQvLyBJYmVuOiAgSWYgdGhlIGdyb3VwIGlzIGNvbXBsZXRlbHkgZW1wdHkgd2UgY2xlYXIgYWxsIHJlcXVpcmVkIGVycm9yc1xuXHRpZiAoT2JqZWN0LmtleXMoY2xlYW4oZm9ybS52YWx1ZSwgeyBwcmVzZXJ2ZUFycmF5czogZmFsc2UgfSkpLmxlbmd0aCA9PT0gMCkge1xuXHRcdGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcblx0XHRcdGNsZWFyRm9ybUVycm9yKGZvcm0uZ2V0KGtleSksICdyZXF1aXJlZCcpO1xuXHRcdH1cblxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Ly8gSWJlbjogIENvbGxlY3QgYWxsIGNvbnRyb2wga2V5cyB0aGF0IGFyZSBtaXNzaW5nIHZhbHVlc1xuXHRjb25zdCByZXF1aXJlZEtleXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuXHQvLyBJYmVuOiBMb29wIG92ZXIgYWxsIGtleXMgYW5kIGNoZWNrIGVhY2ggY29udHJvbCBvbiB3aGV0aGVyIGl0IGlzIGVtcHR5IG9yIG5vdFxuXHRrZXlzLmZvckVhY2goKGtleSkgPT4ge1xuXHRcdGNvbnN0IGNvbnRyb2wgPSBmb3JtLmdldChrZXkpO1xuXG5cdFx0Ly8gSWJlbjogQ2hlY2sgaWYgdGhlIGNvbnRyb2wgaXMgZW1wdHlcblx0XHRjb25zdCBpc0VtcHR5ID1cblx0XHRcdHR5cGVvZiBjb250cm9sLnZhbHVlID09PSAnb2JqZWN0JyAmJiBjb250cm9sLnZhbHVlICE9PSBudWxsXG5cdFx0XHRcdD8gT2JqZWN0LmtleXMoY2xlYW4oY29udHJvbC52YWx1ZSkpLmxlbmd0aCA9PT0gMFxuXHRcdFx0XHQ6IEVNUFRZX1NFVC5oYXMoY29udHJvbC52YWx1ZSk7XG5cblx0XHQvLyBJYmVuOiBBZGQvcmVtb3ZlIHRoZSBlcnJvcnMgd2hlbiBuZWVkZWRcblx0XHRpZiAoaXNFbXB0eSkge1xuXHRcdFx0c2V0Rm9ybUVycm9yKGNvbnRyb2wsICdyZXF1aXJlZCcpO1xuXG5cdFx0XHRyZXF1aXJlZEtleXMuYWRkKGtleSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNsZWFyRm9ybUVycm9yKGNvbnRyb2wsICdyZXF1aXJlZCcpO1xuXG5cdFx0XHRyZXF1aXJlZEtleXMuZGVsZXRlKGtleSk7XG5cdFx0fVxuXHR9KTtcblxuXHQvLyBJYmVuOiBSZXR1cm4gZWl0aGVyIG51bGwgb3IgdGhlIGxpc3Qgb2YgY29udHJvbHMgdGhhdCBhcmUgbWlzc2luZyB2YWx1ZXMgYmFzZWQgb24gdGhlIGVtcHR5IHN0YXRlXG5cdHJldHVybiByZXF1aXJlZEtleXMuc2l6ZSA9PT0gMCA/IG51bGwgOiB7IGFsbE9yTm90aGluZ1JlcXVpcmVkRXJyb3I6IEFycmF5LmZyb20ocmVxdWlyZWRLZXlzKSB9O1xufTtcbiJdfQ==","import clean from 'obj-clean';\nimport { clearFormError, setFormError } from '../utils';\n/**\n * FormGroup validator which checks if either at least one value is filled in\n *\n * @param options - An optional object with configuration options, see below params for more info\n */\nexport const atLeastOneRequiredValidator = (options) => {\n    return (group) => {\n        // Iben: Get the optional configuration items\n        let conditionalFunction;\n        let keys;\n        if (options) {\n            conditionalFunction = options.conditionalFunction;\n            keys = options.controls;\n        }\n        // Iben: Setup the needed variables to handle the validator\n        const cleanedFormValue = clean(group.value);\n        const cleanedKeys = new Set(Object.keys(cleanedFormValue));\n        const controls = Object.values(group.controls);\n        const empty = cleanedKeys.size === 0;\n        // Iben: If nothing is filled in, we return an error\n        if ((empty && !conditionalFunction) ||\n            (empty && conditionalFunction && conditionalFunction(group.value))) {\n            for (const control of controls) {\n                setFormError(control, 'required');\n            }\n            return { atLeastOneRequiredError: true };\n        }\n        // Iben: Check if we need to check on a specific key\n        if (keys) {\n            const hasOneKey = keys.reduce((hasOne, key) => hasOne || cleanedKeys.has(key), false);\n            // Iben: Only return an error when there is no key matched at all\n            // and in case of a conditionalFunction if the conditionalFunction is matched as well\n            if ((!hasOneKey && !conditionalFunction) ||\n                (!hasOneKey && conditionalFunction && conditionalFunction(group.value))) {\n                for (const key of keys) {\n                    setFormError(group.get(key), 'required');\n                }\n                return { atLeastOneRequiredError: true };\n            }\n        }\n        // Iben: In case there are no errors, clean the required errors and return null\n        for (const control of controls) {\n            clearFormError(control, 'required');\n        }\n        return null;\n    };\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXQtbGVhc3Qtb25lLXJlcXVpcmVkLnZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9mb3Jtcy9zcmMvbGliL3ZhbGlkYXRvcnMvYXQtbGVhc3Qtb25lLXJlcXVpcmVkL2F0LWxlYXN0LW9uZS1yZXF1aXJlZC52YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxLQUFLLE1BQU0sV0FBVyxDQUFDO0FBRTlCLE9BQU8sRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBT3hEOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRyxDQUMxQyxPQUFxRCxFQUNwRCxFQUFFO0lBQ0gsT0FBTyxDQUFDLEtBQWdCLEVBQTRDLEVBQUU7UUFDckUsNkNBQTZDO1FBQzdDLElBQUksbUJBQTJDLENBQUM7UUFDaEQsSUFBSSxJQUFlLENBQUM7UUFFcEIsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNiLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQztZQUNsRCxJQUFJLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztRQUN6QixDQUFDO1FBQ0QsMkRBQTJEO1FBQzNELE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QyxNQUFNLFdBQVcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztRQUMzRCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMvQyxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQztRQUVyQyxvREFBb0Q7UUFDcEQsSUFDQyxDQUFDLEtBQUssSUFBSSxDQUFDLG1CQUFtQixDQUFDO1lBQy9CLENBQUMsS0FBSyxJQUFJLG1CQUFtQixJQUFJLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUNqRSxDQUFDO1lBQ0YsS0FBSyxNQUFNLE9BQU8sSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDaEMsWUFBWSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztZQUNuQyxDQUFDO1lBRUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLElBQUksRUFBRSxDQUFDO1FBQzFDLENBQUM7UUFFRCxvREFBb0Q7UUFDcEQsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNWLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxNQUFNLElBQUksV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUV0RixpRUFBaUU7WUFDakUscUZBQXFGO1lBQ3JGLElBQ0MsQ0FBQyxDQUFDLFNBQVMsSUFBSSxDQUFDLG1CQUFtQixDQUFDO2dCQUNwQyxDQUFDLENBQUMsU0FBUyxJQUFJLG1CQUFtQixJQUFJLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUN0RSxDQUFDO2dCQUNGLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7b0JBQ3hCLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO2dCQUMxQyxDQUFDO2dCQUVELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUMxQyxDQUFDO1FBQ0YsQ0FBQztRQUVELCtFQUErRTtRQUMvRSxLQUFLLE1BQU0sT0FBTyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2hDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDckMsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2IsQ0FBQyxDQUFDO0FBQ0gsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IGNsZWFuIGZyb20gJ29iai1jbGVhbic7XG5cbmltcG9ydCB7IGNsZWFyRm9ybUVycm9yLCBzZXRGb3JtRXJyb3IgfSBmcm9tICcuLi91dGlscyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXRMZWFzdE9uZVJlcXVpcmVkVmFsaWRhdG9yT3B0aW9uczxLZXlUeXBlIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPiB7XG5cdGNvbnRyb2xzPzogS2V5VHlwZVtdO1xuXHRjb25kaXRpb25hbEZ1bmN0aW9uPzogKGRhdGE6IGFueSkgPT4gYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBGb3JtR3JvdXAgdmFsaWRhdG9yIHdoaWNoIGNoZWNrcyBpZiBlaXRoZXIgYXQgbGVhc3Qgb25lIHZhbHVlIGlzIGZpbGxlZCBpblxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb3B0aW9uYWwgb2JqZWN0IHdpdGggY29uZmlndXJhdGlvbiBvcHRpb25zLCBzZWUgYmVsb3cgcGFyYW1zIGZvciBtb3JlIGluZm9cbiAqL1xuZXhwb3J0IGNvbnN0IGF0TGVhc3RPbmVSZXF1aXJlZFZhbGlkYXRvciA9IDxLZXlUeXBlIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPihcblx0b3B0aW9ucz86IEF0TGVhc3RPbmVSZXF1aXJlZFZhbGlkYXRvck9wdGlvbnM8S2V5VHlwZT5cbikgPT4ge1xuXHRyZXR1cm4gKGdyb3VwOiBGb3JtR3JvdXApOiB7IGF0TGVhc3RPbmVSZXF1aXJlZEVycm9yOiB0cnVlIH0gfCBudWxsID0+IHtcblx0XHQvLyBJYmVuOiBHZXQgdGhlIG9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gaXRlbXNcblx0XHRsZXQgY29uZGl0aW9uYWxGdW5jdGlvbjogKGRhdGE6IGFueSkgPT4gYm9vbGVhbjtcblx0XHRsZXQga2V5czogS2V5VHlwZVtdO1xuXG5cdFx0aWYgKG9wdGlvbnMpIHtcblx0XHRcdGNvbmRpdGlvbmFsRnVuY3Rpb24gPSBvcHRpb25zLmNvbmRpdGlvbmFsRnVuY3Rpb247XG5cdFx0XHRrZXlzID0gb3B0aW9ucy5jb250cm9scztcblx0XHR9XG5cdFx0Ly8gSWJlbjogU2V0dXAgdGhlIG5lZWRlZCB2YXJpYWJsZXMgdG8gaGFuZGxlIHRoZSB2YWxpZGF0b3Jcblx0XHRjb25zdCBjbGVhbmVkRm9ybVZhbHVlID0gY2xlYW4oZ3JvdXAudmFsdWUpO1xuXHRcdGNvbnN0IGNsZWFuZWRLZXlzID0gbmV3IFNldChPYmplY3Qua2V5cyhjbGVhbmVkRm9ybVZhbHVlKSk7XG5cdFx0Y29uc3QgY29udHJvbHMgPSBPYmplY3QudmFsdWVzKGdyb3VwLmNvbnRyb2xzKTtcblx0XHRjb25zdCBlbXB0eSA9IGNsZWFuZWRLZXlzLnNpemUgPT09IDA7XG5cblx0XHQvLyBJYmVuOiBJZiBub3RoaW5nIGlzIGZpbGxlZCBpbiwgd2UgcmV0dXJuIGFuIGVycm9yXG5cdFx0aWYgKFxuXHRcdFx0KGVtcHR5ICYmICFjb25kaXRpb25hbEZ1bmN0aW9uKSB8fFxuXHRcdFx0KGVtcHR5ICYmIGNvbmRpdGlvbmFsRnVuY3Rpb24gJiYgY29uZGl0aW9uYWxGdW5jdGlvbihncm91cC52YWx1ZSkpXG5cdFx0KSB7XG5cdFx0XHRmb3IgKGNvbnN0IGNvbnRyb2wgb2YgY29udHJvbHMpIHtcblx0XHRcdFx0c2V0Rm9ybUVycm9yKGNvbnRyb2wsICdyZXF1aXJlZCcpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4geyBhdExlYXN0T25lUmVxdWlyZWRFcnJvcjogdHJ1ZSB9O1xuXHRcdH1cblxuXHRcdC8vIEliZW46IENoZWNrIGlmIHdlIG5lZWQgdG8gY2hlY2sgb24gYSBzcGVjaWZpYyBrZXlcblx0XHRpZiAoa2V5cykge1xuXHRcdFx0Y29uc3QgaGFzT25lS2V5ID0ga2V5cy5yZWR1Y2UoKGhhc09uZSwga2V5KSA9PiBoYXNPbmUgfHwgY2xlYW5lZEtleXMuaGFzKGtleSksIGZhbHNlKTtcblxuXHRcdFx0Ly8gSWJlbjogT25seSByZXR1cm4gYW4gZXJyb3Igd2hlbiB0aGVyZSBpcyBubyBrZXkgbWF0Y2hlZCBhdCBhbGxcblx0XHRcdC8vIGFuZCBpbiBjYXNlIG9mIGEgY29uZGl0aW9uYWxGdW5jdGlvbiBpZiB0aGUgY29uZGl0aW9uYWxGdW5jdGlvbiBpcyBtYXRjaGVkIGFzIHdlbGxcblx0XHRcdGlmIChcblx0XHRcdFx0KCFoYXNPbmVLZXkgJiYgIWNvbmRpdGlvbmFsRnVuY3Rpb24pIHx8XG5cdFx0XHRcdCghaGFzT25lS2V5ICYmIGNvbmRpdGlvbmFsRnVuY3Rpb24gJiYgY29uZGl0aW9uYWxGdW5jdGlvbihncm91cC52YWx1ZSkpXG5cdFx0XHQpIHtcblx0XHRcdFx0Zm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuXHRcdFx0XHRcdHNldEZvcm1FcnJvcihncm91cC5nZXQoa2V5KSwgJ3JlcXVpcmVkJyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4geyBhdExlYXN0T25lUmVxdWlyZWRFcnJvcjogdHJ1ZSB9O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEliZW46IEluIGNhc2UgdGhlcmUgYXJlIG5vIGVycm9ycywgY2xlYW4gdGhlIHJlcXVpcmVkIGVycm9ycyBhbmQgcmV0dXJuIG51bGxcblx0XHRmb3IgKGNvbnN0IGNvbnRyb2wgb2YgY29udHJvbHMpIHtcblx0XHRcdGNsZWFyRm9ybUVycm9yKGNvbnRyb2wsICdyZXF1aXJlZCcpO1xuXHRcdH1cblxuXHRcdHJldHVybiBudWxsO1xuXHR9O1xufTtcbiJdfQ==","import { clearFormError, setFormError } from '../utils';\nconst EMPTY_SET = new Set([undefined, null, '']);\n/**\n * FormGroup validator which checks if an array of controls in the control are filled in if the depended control is filled in\n *\n * @param controls - An array of controls.\n * @param dependedControlKey - A control within the group which the other controls depend on.\n * @param matchFunction - Optional function the dependedControl should check\n */\nexport const dependedRequiredValidator = (controls, dependedControlKey, matchFunction) => {\n    return (form) => {\n        // Iben: Make a set so we know which controls are not filled in\n        const keysWithErrors = new Set();\n        const dependedControl = form.get(dependedControlKey);\n        // Iben: If the control is not filled in or the value doesn't match, we do an early exit and remove all potential required errors\n        if (!dependedControl ||\n            !(matchFunction\n                ? matchFunction(dependedControl.value)\n                : !EMPTY_SET.has(dependedControl.value))) {\n            for (const key of controls) {\n                const control = form.get(key);\n                // Continue if control does not exist\n                if (!control) {\n                    continue;\n                }\n                clearFormError(control, 'required');\n            }\n            return null;\n        }\n        // Iben: Set an overall error so we can see if all controls are filled in or not\n        let hasError = false;\n        for (const key of controls) {\n            const control = form.get(key);\n            // Iben: Continue if control does not exist\n            if (!control) {\n                continue;\n            }\n            hasError = hasError || EMPTY_SET.has(control.value);\n            // Iben: If the control is not filled in we set a required error, if not, we remove it\n            if (!EMPTY_SET.has(control.value)) {\n                clearFormError(control, 'required');\n                keysWithErrors.delete(key);\n            }\n            else {\n                setFormError(control, 'required');\n                keysWithErrors.add(key);\n            }\n        }\n        const errors = Array.from(keysWithErrors);\n        return hasError ? { hasDependedRequiredError: errors } : null;\n    };\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwZW5kZWQtcmVxdWlyZWQudmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2Zvcm1zL3NyYy9saWIvdmFsaWRhdG9ycy9kZXBlbmRlZC1yZXF1aXJlZC9kZXBlbmRlZC1yZXF1aXJlZC52YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFeEQsTUFBTSxTQUFTLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFFakQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsQ0FDeEMsUUFBbUIsRUFDbkIsa0JBQTJCLEVBQzNCLGFBQXNDLEVBQ3JDLEVBQUU7SUFDSCxPQUFPLENBQUMsSUFBZSxFQUFpRCxFQUFFO1FBQ3pFLCtEQUErRDtRQUMvRCxNQUFNLGNBQWMsR0FBRyxJQUFJLEdBQUcsRUFBVyxDQUFDO1FBQzFDLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUVyRCxpSUFBaUk7UUFDakksSUFDQyxDQUFDLGVBQWU7WUFDaEIsQ0FBQyxDQUFDLGFBQWE7Z0JBQ2QsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDO2dCQUN0QyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUN4QyxDQUFDO1lBQ0YsS0FBSyxNQUFNLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDNUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFFOUIscUNBQXFDO2dCQUNyQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ2QsU0FBUztnQkFDVixDQUFDO2dCQUVELGNBQWMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDckMsQ0FBQztZQUVELE9BQU8sSUFBSSxDQUFDO1FBQ2IsQ0FBQztRQUVELGdGQUFnRjtRQUNoRixJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFFckIsS0FBSyxNQUFNLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUM1QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRTlCLDJDQUEyQztZQUMzQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2QsU0FBUztZQUNWLENBQUM7WUFFRCxRQUFRLEdBQUcsUUFBUSxJQUFJLFNBQVMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRXBELHNGQUFzRjtZQUN0RixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDbkMsY0FBYyxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztnQkFDcEMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM1QixDQUFDO2lCQUFNLENBQUM7Z0JBQ1AsWUFBWSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztnQkFDbEMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN6QixDQUFDO1FBQ0YsQ0FBQztRQUVELE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFMUMsT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUMvRCxDQUFDLENBQUM7QUFDSCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IGNsZWFyRm9ybUVycm9yLCBzZXRGb3JtRXJyb3IgfSBmcm9tICcuLi91dGlscyc7XG5cbmNvbnN0IEVNUFRZX1NFVCA9IG5ldyBTZXQoW3VuZGVmaW5lZCwgbnVsbCwgJyddKTtcblxuLyoqXG4gKiBGb3JtR3JvdXAgdmFsaWRhdG9yIHdoaWNoIGNoZWNrcyBpZiBhbiBhcnJheSBvZiBjb250cm9scyBpbiB0aGUgY29udHJvbCBhcmUgZmlsbGVkIGluIGlmIHRoZSBkZXBlbmRlZCBjb250cm9sIGlzIGZpbGxlZCBpblxuICpcbiAqIEBwYXJhbSBjb250cm9scyAtIEFuIGFycmF5IG9mIGNvbnRyb2xzLlxuICogQHBhcmFtIGRlcGVuZGVkQ29udHJvbEtleSAtIEEgY29udHJvbCB3aXRoaW4gdGhlIGdyb3VwIHdoaWNoIHRoZSBvdGhlciBjb250cm9scyBkZXBlbmQgb24uXG4gKiBAcGFyYW0gbWF0Y2hGdW5jdGlvbiAtIE9wdGlvbmFsIGZ1bmN0aW9uIHRoZSBkZXBlbmRlZENvbnRyb2wgc2hvdWxkIGNoZWNrXG4gKi9cbmV4cG9ydCBjb25zdCBkZXBlbmRlZFJlcXVpcmVkVmFsaWRhdG9yID0gPEtleVR5cGUgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmc+KFxuXHRjb250cm9sczogS2V5VHlwZVtdLFxuXHRkZXBlbmRlZENvbnRyb2xLZXk6IEtleVR5cGUsXG5cdG1hdGNoRnVuY3Rpb24/OiAoZGF0YTogYW55KSA9PiBib29sZWFuXG4pID0+IHtcblx0cmV0dXJuIChmb3JtOiBGb3JtR3JvdXApOiB7IGhhc0RlcGVuZGVkUmVxdWlyZWRFcnJvcjogc3RyaW5nW10gfSB8IG51bGwgPT4ge1xuXHRcdC8vIEliZW46IE1ha2UgYSBzZXQgc28gd2Uga25vdyB3aGljaCBjb250cm9scyBhcmUgbm90IGZpbGxlZCBpblxuXHRcdGNvbnN0IGtleXNXaXRoRXJyb3JzID0gbmV3IFNldDxLZXlUeXBlPigpO1xuXHRcdGNvbnN0IGRlcGVuZGVkQ29udHJvbCA9IGZvcm0uZ2V0KGRlcGVuZGVkQ29udHJvbEtleSk7XG5cblx0XHQvLyBJYmVuOiBJZiB0aGUgY29udHJvbCBpcyBub3QgZmlsbGVkIGluIG9yIHRoZSB2YWx1ZSBkb2Vzbid0IG1hdGNoLCB3ZSBkbyBhbiBlYXJseSBleGl0IGFuZCByZW1vdmUgYWxsIHBvdGVudGlhbCByZXF1aXJlZCBlcnJvcnNcblx0XHRpZiAoXG5cdFx0XHQhZGVwZW5kZWRDb250cm9sIHx8XG5cdFx0XHQhKG1hdGNoRnVuY3Rpb25cblx0XHRcdFx0PyBtYXRjaEZ1bmN0aW9uKGRlcGVuZGVkQ29udHJvbC52YWx1ZSlcblx0XHRcdFx0OiAhRU1QVFlfU0VULmhhcyhkZXBlbmRlZENvbnRyb2wudmFsdWUpKVxuXHRcdCkge1xuXHRcdFx0Zm9yIChjb25zdCBrZXkgb2YgY29udHJvbHMpIHtcblx0XHRcdFx0Y29uc3QgY29udHJvbCA9IGZvcm0uZ2V0KGtleSk7XG5cblx0XHRcdFx0Ly8gQ29udGludWUgaWYgY29udHJvbCBkb2VzIG5vdCBleGlzdFxuXHRcdFx0XHRpZiAoIWNvbnRyb2wpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNsZWFyRm9ybUVycm9yKGNvbnRyb2wsICdyZXF1aXJlZCcpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHQvLyBJYmVuOiBTZXQgYW4gb3ZlcmFsbCBlcnJvciBzbyB3ZSBjYW4gc2VlIGlmIGFsbCBjb250cm9scyBhcmUgZmlsbGVkIGluIG9yIG5vdFxuXHRcdGxldCBoYXNFcnJvciA9IGZhbHNlO1xuXG5cdFx0Zm9yIChjb25zdCBrZXkgb2YgY29udHJvbHMpIHtcblx0XHRcdGNvbnN0IGNvbnRyb2wgPSBmb3JtLmdldChrZXkpO1xuXG5cdFx0XHQvLyBJYmVuOiBDb250aW51ZSBpZiBjb250cm9sIGRvZXMgbm90IGV4aXN0XG5cdFx0XHRpZiAoIWNvbnRyb2wpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGhhc0Vycm9yID0gaGFzRXJyb3IgfHwgRU1QVFlfU0VULmhhcyhjb250cm9sLnZhbHVlKTtcblxuXHRcdFx0Ly8gSWJlbjogSWYgdGhlIGNvbnRyb2wgaXMgbm90IGZpbGxlZCBpbiB3ZSBzZXQgYSByZXF1aXJlZCBlcnJvciwgaWYgbm90LCB3ZSByZW1vdmUgaXRcblx0XHRcdGlmICghRU1QVFlfU0VULmhhcyhjb250cm9sLnZhbHVlKSkge1xuXHRcdFx0XHRjbGVhckZvcm1FcnJvcihjb250cm9sLCAncmVxdWlyZWQnKTtcblx0XHRcdFx0a2V5c1dpdGhFcnJvcnMuZGVsZXRlKGtleSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzZXRGb3JtRXJyb3IoY29udHJvbCwgJ3JlcXVpcmVkJyk7XG5cdFx0XHRcdGtleXNXaXRoRXJyb3JzLmFkZChrZXkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNvbnN0IGVycm9ycyA9IEFycmF5LmZyb20oa2V5c1dpdGhFcnJvcnMpO1xuXG5cdFx0cmV0dXJuIGhhc0Vycm9yID8geyBoYXNEZXBlbmRlZFJlcXVpcmVkRXJyb3I6IGVycm9ycyB9IDogbnVsbDtcblx0fTtcbn07XG4iXX0=","/**\n * Validates whether the inputted value has exceeded the maximum amount of decimals after the comma\n *\n * @param max - The maximum number of decimals after the comma\n */\nexport const decimalsAfterCommaValidator = (max) => {\n    return (control) => {\n        // Iben: In case no control was provided, or the control value was empty, we early exit\n        if (!control || (!control.value && control.value !== 0)) {\n            return null;\n        }\n        // Iben: We check if the input value matches the amount of decimals after the comma, if not, we return an error\n        return new RegExp(`^\\\\d+(.\\\\d{1,${max}})?$`).test(`${control.value}`)\n            ? null\n            : { invalidDecimalsAfterComma: true };\n    };\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjaW1hbHMtYWZ0ZXItY29tbWEudmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2Zvcm1zL3NyYy9saWIvdmFsaWRhdG9ycy9kZWNpbWFscy1hZnRlci1jb21tYS9kZWNpbWFscy1hZnRlci1jb21tYS52YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUE7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUU7SUFDMUQsT0FBTyxDQUFDLE9BQW9CLEVBQThDLEVBQUU7UUFDM0UsdUZBQXVGO1FBQ3ZGLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksT0FBTyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3pELE9BQU8sSUFBSSxDQUFDO1FBQ2IsQ0FBQztRQUVELCtHQUErRztRQUMvRyxPQUFPLElBQUksTUFBTSxDQUFDLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNwRSxDQUFDLENBQUMsSUFBSTtZQUNOLENBQUMsQ0FBQyxFQUFFLHlCQUF5QixFQUFFLElBQUksRUFBRSxDQUFDO0lBQ3hDLENBQUMsQ0FBQztBQUNILENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG4vKipcbiAqIFZhbGlkYXRlcyB3aGV0aGVyIHRoZSBpbnB1dHRlZCB2YWx1ZSBoYXMgZXhjZWVkZWQgdGhlIG1heGltdW0gYW1vdW50IG9mIGRlY2ltYWxzIGFmdGVyIHRoZSBjb21tYVxuICpcbiAqIEBwYXJhbSBtYXggLSBUaGUgbWF4aW11bSBudW1iZXIgb2YgZGVjaW1hbHMgYWZ0ZXIgdGhlIGNvbW1hXG4gKi9cbmV4cG9ydCBjb25zdCBkZWNpbWFsc0FmdGVyQ29tbWFWYWxpZGF0b3IgPSAobWF4OiBudW1iZXIpID0+IHtcblx0cmV0dXJuIChjb250cm9sOiBGb3JtQ29udHJvbCk6IHsgaW52YWxpZERlY2ltYWxzQWZ0ZXJDb21tYTogdHJ1ZSB9IHwgbnVsbCA9PiB7XG5cdFx0Ly8gSWJlbjogSW4gY2FzZSBubyBjb250cm9sIHdhcyBwcm92aWRlZCwgb3IgdGhlIGNvbnRyb2wgdmFsdWUgd2FzIGVtcHR5LCB3ZSBlYXJseSBleGl0XG5cdFx0aWYgKCFjb250cm9sIHx8ICghY29udHJvbC52YWx1ZSAmJiBjb250cm9sLnZhbHVlICE9PSAwKSkge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0Ly8gSWJlbjogV2UgY2hlY2sgaWYgdGhlIGlucHV0IHZhbHVlIG1hdGNoZXMgdGhlIGFtb3VudCBvZiBkZWNpbWFscyBhZnRlciB0aGUgY29tbWEsIGlmIG5vdCwgd2UgcmV0dXJuIGFuIGVycm9yXG5cdFx0cmV0dXJuIG5ldyBSZWdFeHAoYF5cXFxcZCsoLlxcXFxkezEsJHttYXh9fSk/JGApLnRlc3QoYCR7Y29udHJvbC52YWx1ZX1gKVxuXHRcdFx0PyBudWxsXG5cdFx0XHQ6IHsgaW52YWxpZERlY2ltYWxzQWZ0ZXJDb21tYTogdHJ1ZSB9O1xuXHR9O1xufTtcbiJdfQ==","import { format, isValid } from 'date-fns';\nimport { clearFormError, setFormError } from '../utils';\n/**\n * A FormGroup validator to check whether a start and end date are chronologically correct\n *\n * @param startControlKey - The key of the control containing the start date value\n * @param endControlKey - The key of the control containing the end date value\n * @param format - Optional format of the dates provided by the controls, by default yyyy-MM-dd\n */\nexport const chronologicalDatesValidator = (startControlKey, endControlKey, dateFormat = 'yyyy-MM-dd') => {\n    return (form) => {\n        // Iben: Get the date values\n        const value = form.getRawValue();\n        const startValue = value[startControlKey];\n        const endValue = value[endControlKey];\n        // Iben: Clear the form error on the endControl\n        clearFormError(form.get(endControlKey), 'incorrectChronologicalDate');\n        // Iben: If either date value is not filled in, we early exit to handle this in a potential required validator\n        if (!startValue || !endValue) {\n            return null;\n        }\n        // Iben: If the dates as is are not valid, early exit\n        if (!isValid(new Date(startValue)) || !isValid(new Date(endValue))) {\n            return null;\n        }\n        // Iben: Create dates so we can compare them\n        const startDate = format(new Date(startValue), dateFormat);\n        const endDate = format(new Date(endValue), dateFormat);\n        // Iben: If either date is invalid based on the format, we early exit to handle this in a date validator\n        if (!isValid(new Date(startDate)) || !isValid(new Date(endDate))) {\n            return null;\n        }\n        // Iben: If the endDate falls before the startDate, we return an error\n        if (endDate < startDate) {\n            setFormError(form.get(endControlKey), 'incorrectChronologicalDate');\n            return { incorrectChronologicalDates: true };\n        }\n        return null;\n    };\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hyb25vbG9naWNhbC1kYXRlcy52YWxpZGF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvZm9ybXMvc3JjL2xpYi92YWxpZGF0b3JzL2Nocm9ub2xvZ2ljYWwtZGF0ZXMvY2hyb25vbG9naWNhbC1kYXRlcy52YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFM0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFeEQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsQ0FDMUMsZUFBdUIsRUFDdkIsYUFBcUIsRUFDckIsVUFBVSxHQUFHLFlBQVksRUFDWCxFQUFFO0lBQ2hCLE9BQU8sQ0FBQyxJQUFlLEVBQWdELEVBQUU7UUFDeEUsNEJBQTRCO1FBQzVCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNqQyxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDMUMsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRXRDLCtDQUErQztRQUMvQyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsRUFBRSw0QkFBNEIsQ0FBQyxDQUFDO1FBRXRFLDhHQUE4RztRQUM5RyxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDOUIsT0FBTyxJQUFJLENBQUM7UUFDYixDQUFDO1FBRUQscURBQXFEO1FBQ3JELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDcEUsT0FBTyxJQUFJLENBQUM7UUFDYixDQUFDO1FBRUQsNENBQTRDO1FBQzVDLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUMzRCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFFdkQsd0dBQXdHO1FBQ3hHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDbEUsT0FBTyxJQUFJLENBQUM7UUFDYixDQUFDO1FBRUQsc0VBQXNFO1FBQ3RFLElBQUksT0FBTyxHQUFHLFNBQVMsRUFBRSxDQUFDO1lBQ3pCLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxFQUFFLDRCQUE0QixDQUFDLENBQUM7WUFFcEUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLElBQUksRUFBRSxDQUFDO1FBQzlDLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNiLENBQUMsQ0FBQztBQUNILENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZvcm1Hcm91cCwgVmFsaWRhdG9yRm4gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBmb3JtYXQsIGlzVmFsaWQgfSBmcm9tICdkYXRlLWZucyc7XG5cbmltcG9ydCB7IGNsZWFyRm9ybUVycm9yLCBzZXRGb3JtRXJyb3IgfSBmcm9tICcuLi91dGlscyc7XG5cbi8qKlxuICogQSBGb3JtR3JvdXAgdmFsaWRhdG9yIHRvIGNoZWNrIHdoZXRoZXIgYSBzdGFydCBhbmQgZW5kIGRhdGUgYXJlIGNocm9ub2xvZ2ljYWxseSBjb3JyZWN0XG4gKlxuICogQHBhcmFtIHN0YXJ0Q29udHJvbEtleSAtIFRoZSBrZXkgb2YgdGhlIGNvbnRyb2wgY29udGFpbmluZyB0aGUgc3RhcnQgZGF0ZSB2YWx1ZVxuICogQHBhcmFtIGVuZENvbnRyb2xLZXkgLSBUaGUga2V5IG9mIHRoZSBjb250cm9sIGNvbnRhaW5pbmcgdGhlIGVuZCBkYXRlIHZhbHVlXG4gKiBAcGFyYW0gZm9ybWF0IC0gT3B0aW9uYWwgZm9ybWF0IG9mIHRoZSBkYXRlcyBwcm92aWRlZCBieSB0aGUgY29udHJvbHMsIGJ5IGRlZmF1bHQgeXl5eS1NTS1kZFxuICovXG5leHBvcnQgY29uc3QgY2hyb25vbG9naWNhbERhdGVzVmFsaWRhdG9yID0gKFxuXHRzdGFydENvbnRyb2xLZXk6IHN0cmluZyxcblx0ZW5kQ29udHJvbEtleTogc3RyaW5nLFxuXHRkYXRlRm9ybWF0ID0gJ3l5eXktTU0tZGQnXG4pOiBWYWxpZGF0b3JGbiA9PiB7XG5cdHJldHVybiAoZm9ybTogRm9ybUdyb3VwKTogeyBpbmNvcnJlY3RDaHJvbm9sb2dpY2FsRGF0ZXM6IHRydWUgfSB8IG51bGwgPT4ge1xuXHRcdC8vIEliZW46IEdldCB0aGUgZGF0ZSB2YWx1ZXNcblx0XHRjb25zdCB2YWx1ZSA9IGZvcm0uZ2V0UmF3VmFsdWUoKTtcblx0XHRjb25zdCBzdGFydFZhbHVlID0gdmFsdWVbc3RhcnRDb250cm9sS2V5XTtcblx0XHRjb25zdCBlbmRWYWx1ZSA9IHZhbHVlW2VuZENvbnRyb2xLZXldO1xuXG5cdFx0Ly8gSWJlbjogQ2xlYXIgdGhlIGZvcm0gZXJyb3Igb24gdGhlIGVuZENvbnRyb2xcblx0XHRjbGVhckZvcm1FcnJvcihmb3JtLmdldChlbmRDb250cm9sS2V5KSwgJ2luY29ycmVjdENocm9ub2xvZ2ljYWxEYXRlJyk7XG5cblx0XHQvLyBJYmVuOiBJZiBlaXRoZXIgZGF0ZSB2YWx1ZSBpcyBub3QgZmlsbGVkIGluLCB3ZSBlYXJseSBleGl0IHRvIGhhbmRsZSB0aGlzIGluIGEgcG90ZW50aWFsIHJlcXVpcmVkIHZhbGlkYXRvclxuXHRcdGlmICghc3RhcnRWYWx1ZSB8fCAhZW5kVmFsdWUpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdC8vIEliZW46IElmIHRoZSBkYXRlcyBhcyBpcyBhcmUgbm90IHZhbGlkLCBlYXJseSBleGl0XG5cdFx0aWYgKCFpc1ZhbGlkKG5ldyBEYXRlKHN0YXJ0VmFsdWUpKSB8fCAhaXNWYWxpZChuZXcgRGF0ZShlbmRWYWx1ZSkpKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHQvLyBJYmVuOiBDcmVhdGUgZGF0ZXMgc28gd2UgY2FuIGNvbXBhcmUgdGhlbVxuXHRcdGNvbnN0IHN0YXJ0RGF0ZSA9IGZvcm1hdChuZXcgRGF0ZShzdGFydFZhbHVlKSwgZGF0ZUZvcm1hdCk7XG5cdFx0Y29uc3QgZW5kRGF0ZSA9IGZvcm1hdChuZXcgRGF0ZShlbmRWYWx1ZSksIGRhdGVGb3JtYXQpO1xuXG5cdFx0Ly8gSWJlbjogSWYgZWl0aGVyIGRhdGUgaXMgaW52YWxpZCBiYXNlZCBvbiB0aGUgZm9ybWF0LCB3ZSBlYXJseSBleGl0IHRvIGhhbmRsZSB0aGlzIGluIGEgZGF0ZSB2YWxpZGF0b3Jcblx0XHRpZiAoIWlzVmFsaWQobmV3IERhdGUoc3RhcnREYXRlKSkgfHwgIWlzVmFsaWQobmV3IERhdGUoZW5kRGF0ZSkpKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHQvLyBJYmVuOiBJZiB0aGUgZW5kRGF0ZSBmYWxscyBiZWZvcmUgdGhlIHN0YXJ0RGF0ZSwgd2UgcmV0dXJuIGFuIGVycm9yXG5cdFx0aWYgKGVuZERhdGUgPCBzdGFydERhdGUpIHtcblx0XHRcdHNldEZvcm1FcnJvcihmb3JtLmdldChlbmRDb250cm9sS2V5KSwgJ2luY29ycmVjdENocm9ub2xvZ2ljYWxEYXRlJyk7XG5cblx0XHRcdHJldHVybiB7IGluY29ycmVjdENocm9ub2xvZ2ljYWxEYXRlczogdHJ1ZSB9O1xuXHRcdH1cblxuXHRcdHJldHVybiBudWxsO1xuXHR9O1xufTtcbiJdfQ==","import { isEmptyInputValue } from '../utils';\nexport const extendedEmailValidator = (control) => {\n    if (isEmptyInputValue(control.value)) {\n        return null; // don't validate empty values to allow optional controls\n    }\n    // Validates more strictly than the default email validator. Requires a period in the tld part.\n    return /^[a-z0-9._%+-]+@[a-z0-9.-]+\\.[a-z]+$/gi.test(control.value)\n        ? null\n        : { extendedEmail: true };\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0ZW5kZWQtZW1haWwudmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2Zvcm1zL3NyYy9saWIvdmFsaWRhdG9ycy9lbWFpbC9leHRlbmRlZC1lbWFpbC52YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRTdDLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLENBQUMsT0FBd0IsRUFBMkIsRUFBRTtJQUMzRixJQUFJLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3RDLE9BQU8sSUFBSSxDQUFDLENBQUMseURBQXlEO0lBQ3ZFLENBQUM7SUFFRCwrRkFBK0Y7SUFDL0YsT0FBTyx3Q0FBd0MsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUNsRSxDQUFDLENBQUMsSUFBSTtRQUNOLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUM1QixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIFZhbGlkYXRpb25FcnJvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IGlzRW1wdHlJbnB1dFZhbHVlIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5leHBvcnQgY29uc3QgZXh0ZW5kZWRFbWFpbFZhbGlkYXRvciA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG5cdGlmIChpc0VtcHR5SW5wdXRWYWx1ZShjb250cm9sLnZhbHVlKSkge1xuXHRcdHJldHVybiBudWxsOyAvLyBkb24ndCB2YWxpZGF0ZSBlbXB0eSB2YWx1ZXMgdG8gYWxsb3cgb3B0aW9uYWwgY29udHJvbHNcblx0fVxuXG5cdC8vIFZhbGlkYXRlcyBtb3JlIHN0cmljdGx5IHRoYW4gdGhlIGRlZmF1bHQgZW1haWwgdmFsaWRhdG9yLiBSZXF1aXJlcyBhIHBlcmlvZCBpbiB0aGUgdGxkIHBhcnQuXG5cdHJldHVybiAvXlthLXowLTkuXyUrLV0rQFthLXowLTkuLV0rXFwuW2Etel0rJC9naS50ZXN0KGNvbnRyb2wudmFsdWUpXG5cdFx0PyBudWxsXG5cdFx0OiB7IGV4dGVuZGVkRW1haWw6IHRydWUgfTtcbn07XG4iXX0=","import { isValid } from 'date-fns';\n/**\n * hasNoFutureDateValidator\n *\n * Validator function to ensure that the selected date is not in the future.\n * If the date is in the future, it returns an error.\n * @returns ValidationErrors if the date is in the future, otherwise null.\n *\n */\nexport const hasNoFutureDateValidator = () => {\n    return (control) => {\n        // Early exit in case the control or the value does not exist\n        if (!control.value) {\n            return null;\n        }\n        // Create date objects based on the provided date and current date\n        const inputDate = new Date(control.value);\n        const currentDate = new Date();\n        // In case the date itself is invalid, we early exit to let a potential date validator handle the error\n        if (!isValid(inputDate)) {\n            return null;\n        }\n        return inputDate <= currentDate ? null : { isFutureDate: { valid: false } };\n    };\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFzLW5vLWZ1dHVyZS1kYXRlLnZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9mb3Jtcy9zcmMvbGliL3ZhbGlkYXRvcnMvaGFzLW5vLWZ1dHVyZS1kYXRlL2hhcy1uby1mdXR1cmUtZGF0ZS52YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUVuQzs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsR0FBZ0IsRUFBRTtJQUN6RCxPQUFPLENBQUMsT0FBb0IsRUFBMkIsRUFBRTtRQUN4RCw2REFBNkQ7UUFDN0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNwQixPQUFPLElBQUksQ0FBQztRQUNiLENBQUM7UUFFRCxrRUFBa0U7UUFDbEUsTUFBTSxTQUFTLEdBQUcsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFDLE1BQU0sV0FBVyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFFL0IsdUdBQXVHO1FBQ3ZHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUN6QixPQUFPLElBQUksQ0FBQztRQUNiLENBQUM7UUFFRCxPQUFPLFNBQVMsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztJQUM3RSxDQUFDLENBQUM7QUFDSCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGb3JtQ29udHJvbCwgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9yRm4gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBpc1ZhbGlkIH0gZnJvbSAnZGF0ZS1mbnMnO1xuXG4vKipcbiAqIGhhc05vRnV0dXJlRGF0ZVZhbGlkYXRvclxuICpcbiAqIFZhbGlkYXRvciBmdW5jdGlvbiB0byBlbnN1cmUgdGhhdCB0aGUgc2VsZWN0ZWQgZGF0ZSBpcyBub3QgaW4gdGhlIGZ1dHVyZS5cbiAqIElmIHRoZSBkYXRlIGlzIGluIHRoZSBmdXR1cmUsIGl0IHJldHVybnMgYW4gZXJyb3IuXG4gKiBAcmV0dXJucyBWYWxpZGF0aW9uRXJyb3JzIGlmIHRoZSBkYXRlIGlzIGluIHRoZSBmdXR1cmUsIG90aGVyd2lzZSBudWxsLlxuICpcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc05vRnV0dXJlRGF0ZVZhbGlkYXRvciA9ICgpOiBWYWxpZGF0b3JGbiA9PiB7XG5cdHJldHVybiAoY29udHJvbDogRm9ybUNvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG5cdFx0Ly8gRWFybHkgZXhpdCBpbiBjYXNlIHRoZSBjb250cm9sIG9yIHRoZSB2YWx1ZSBkb2VzIG5vdCBleGlzdFxuXHRcdGlmICghY29udHJvbC52YWx1ZSkge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0Ly8gQ3JlYXRlIGRhdGUgb2JqZWN0cyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgZGF0ZSBhbmQgY3VycmVudCBkYXRlXG5cdFx0Y29uc3QgaW5wdXREYXRlID0gbmV3IERhdGUoY29udHJvbC52YWx1ZSk7XG5cdFx0Y29uc3QgY3VycmVudERhdGUgPSBuZXcgRGF0ZSgpO1xuXG5cdFx0Ly8gSW4gY2FzZSB0aGUgZGF0ZSBpdHNlbGYgaXMgaW52YWxpZCwgd2UgZWFybHkgZXhpdCB0byBsZXQgYSBwb3RlbnRpYWwgZGF0ZSB2YWxpZGF0b3IgaGFuZGxlIHRoZSBlcnJvclxuXHRcdGlmICghaXNWYWxpZChpbnB1dERhdGUpKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHRyZXR1cm4gaW5wdXREYXRlIDw9IGN1cnJlbnREYXRlID8gbnVsbCA6IHsgaXNGdXR1cmVEYXRlOiB7IHZhbGlkOiBmYWxzZSB9IH07XG5cdH07XG59O1xuIl19","import { isValid, parse } from 'date-fns';\n/**\n * Form control validator which validates if a date is between a provided range (edges not included)\n *\n * @param minDate - Minimum valid date\n * @param maxDate - Maximum valid date\n * @param format - Optional format used for all 3 dates, by default yyyy-MM-dd\n */\nexport const dateRangeValidator = (min, max, format = 'yyyy-MM-dd') => {\n    return (control) => {\n        // Iben: Early exit in case the control or the value does not exist\n        if (!control?.value) {\n            return null;\n        }\n        // Iben : Create date objects based on the provided dates\n        const date = parse(control.value, format, new Date());\n        const maxDate = parse(max, format, new Date());\n        const minDate = parse(min, format, new Date());\n        // Iben: In case either of the boundary dates is invalid, we mark the input as invalid as we cannot confirm it's in the right range\n        if (!isValid(maxDate) || !isValid(minDate)) {\n            return {\n                invalidRange: !isValid(maxDate) ? 'invalidMaxDate' : 'invalidMinDate',\n            };\n        }\n        // Iben: In case the date itself is invalid, we early exit to let a potential date validator handle the error\n        if (!isValid(date)) {\n            return null;\n        }\n        // Iben: We check if the date is in between the boundaries and return an error if need be\n        if (!(minDate <= date) || !(date <= maxDate)) {\n            return {\n                invalidRange: date > maxDate ? 'dateAfterMaxDate' : 'dateBeforeMinDate',\n            };\n        }\n        return null;\n    };\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1yYW5nZS52YWxpZGF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvZm9ybXMvc3JjL2xpYi92YWxpZGF0b3JzL2RhdGUtcmFuZ2UvZGF0ZS1yYW5nZS52YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFRMUM7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxHQUFXLEVBQUUsR0FBVyxFQUFFLFNBQWlCLFlBQVksRUFBRSxFQUFFO0lBQzdGLE9BQU8sQ0FBQyxPQUF3QixFQUFnRCxFQUFFO1FBQ2pGLG1FQUFtRTtRQUNuRSxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDO1lBQ3JCLE9BQU8sSUFBSSxDQUFDO1FBQ2IsQ0FBQztRQUVELHlEQUF5RDtRQUN6RCxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztRQUMvQyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLENBQUM7UUFFL0MsbUlBQW1JO1FBQ25JLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUM1QyxPQUFPO2dCQUNOLFlBQVksRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLGdCQUFnQjthQUNyRSxDQUFDO1FBQ0gsQ0FBQztRQUVELDZHQUE2RztRQUM3RyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDcEIsT0FBTyxJQUFJLENBQUM7UUFDYixDQUFDO1FBRUQseUZBQXlGO1FBQ3pGLElBQUksQ0FBQyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDOUMsT0FBTztnQkFDTixZQUFZLEVBQUUsSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLG1CQUFtQjthQUN2RSxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2IsQ0FBQyxDQUFDO0FBQ0gsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgaXNWYWxpZCwgcGFyc2UgfSBmcm9tICdkYXRlLWZucyc7XG5cbnR5cGUgRGF0ZVJhbmdlRXJyb3JDb2RlcyA9XG5cdHwgJ2ludmFsaWRNYXhEYXRlJ1xuXHR8ICdpbnZhbGlkTWluRGF0ZSdcblx0fCAnZGF0ZUFmdGVyTWF4RGF0ZSdcblx0fCAnZGF0ZUJlZm9yZU1pbkRhdGUnO1xuXG4vKipcbiAqIEZvcm0gY29udHJvbCB2YWxpZGF0b3Igd2hpY2ggdmFsaWRhdGVzIGlmIGEgZGF0ZSBpcyBiZXR3ZWVuIGEgcHJvdmlkZWQgcmFuZ2UgKGVkZ2VzIG5vdCBpbmNsdWRlZClcbiAqXG4gKiBAcGFyYW0gbWluRGF0ZSAtIE1pbmltdW0gdmFsaWQgZGF0ZVxuICogQHBhcmFtIG1heERhdGUgLSBNYXhpbXVtIHZhbGlkIGRhdGVcbiAqIEBwYXJhbSBmb3JtYXQgLSBPcHRpb25hbCBmb3JtYXQgdXNlZCBmb3IgYWxsIDMgZGF0ZXMsIGJ5IGRlZmF1bHQgeXl5eS1NTS1kZFxuICovXG5leHBvcnQgY29uc3QgZGF0ZVJhbmdlVmFsaWRhdG9yID0gKG1pbjogc3RyaW5nLCBtYXg6IHN0cmluZywgZm9ybWF0OiBzdHJpbmcgPSAneXl5eS1NTS1kZCcpID0+IHtcblx0cmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiB7IGludmFsaWRSYW5nZTogRGF0ZVJhbmdlRXJyb3JDb2RlcyB9IHwgbnVsbCA9PiB7XG5cdFx0Ly8gSWJlbjogRWFybHkgZXhpdCBpbiBjYXNlIHRoZSBjb250cm9sIG9yIHRoZSB2YWx1ZSBkb2VzIG5vdCBleGlzdFxuXHRcdGlmICghY29udHJvbD8udmFsdWUpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdC8vIEliZW4gOiBDcmVhdGUgZGF0ZSBvYmplY3RzIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBkYXRlc1xuXHRcdGNvbnN0IGRhdGUgPSBwYXJzZShjb250cm9sLnZhbHVlLCBmb3JtYXQsIG5ldyBEYXRlKCkpO1xuXHRcdGNvbnN0IG1heERhdGUgPSBwYXJzZShtYXgsIGZvcm1hdCwgbmV3IERhdGUoKSk7XG5cdFx0Y29uc3QgbWluRGF0ZSA9IHBhcnNlKG1pbiwgZm9ybWF0LCBuZXcgRGF0ZSgpKTtcblxuXHRcdC8vIEliZW46IEluIGNhc2UgZWl0aGVyIG9mIHRoZSBib3VuZGFyeSBkYXRlcyBpcyBpbnZhbGlkLCB3ZSBtYXJrIHRoZSBpbnB1dCBhcyBpbnZhbGlkIGFzIHdlIGNhbm5vdCBjb25maXJtIGl0J3MgaW4gdGhlIHJpZ2h0IHJhbmdlXG5cdFx0aWYgKCFpc1ZhbGlkKG1heERhdGUpIHx8ICFpc1ZhbGlkKG1pbkRhdGUpKSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRpbnZhbGlkUmFuZ2U6ICFpc1ZhbGlkKG1heERhdGUpID8gJ2ludmFsaWRNYXhEYXRlJyA6ICdpbnZhbGlkTWluRGF0ZScsXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdC8vIEliZW46IEluIGNhc2UgdGhlIGRhdGUgaXRzZWxmIGlzIGludmFsaWQsIHdlIGVhcmx5IGV4aXQgdG8gbGV0IGEgcG90ZW50aWFsIGRhdGUgdmFsaWRhdG9yIGhhbmRsZSB0aGUgZXJyb3Jcblx0XHRpZiAoIWlzVmFsaWQoZGF0ZSkpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdC8vIEliZW46IFdlIGNoZWNrIGlmIHRoZSBkYXRlIGlzIGluIGJldHdlZW4gdGhlIGJvdW5kYXJpZXMgYW5kIHJldHVybiBhbiBlcnJvciBpZiBuZWVkIGJlXG5cdFx0aWYgKCEobWluRGF0ZSA8PSBkYXRlKSB8fCAhKGRhdGUgPD0gbWF4RGF0ZSkpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGludmFsaWRSYW5nZTogZGF0ZSA+IG1heERhdGUgPyAnZGF0ZUFmdGVyTWF4RGF0ZScgOiAnZGF0ZUJlZm9yZU1pbkRhdGUnLFxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbnVsbDtcblx0fTtcbn07XG4iXX0=","/**\n * WordCountValidator\n *\n * The WordCountValidator validator will check the amount of words provided in a control.\n *\n * @param .min\n * @param .max\n * @returns ValidatorFn\n */\nexport const WordCountValidator = ({ min, max }) => {\n    return (control) => {\n        if (typeof control?.value !== 'string' ||\n            (typeof min !== 'number' && typeof max !== 'number')) {\n            return null;\n        }\n        const wordCount = control.value.trim().split(' ').length;\n        if (typeof min === 'number' && wordCount <= min) {\n            return { minWordCountNotReached: { valid: false } };\n        }\n        if (typeof max === 'number' && wordCount > max) {\n            return { maxWordCountReached: { valid: false } };\n        }\n        return null;\n    };\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29yZC1jb3VudC52YWxpZGF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvZm9ybXMvc3JjL2xpYi92YWxpZGF0b3JzL21heC13b3JkLWNvdW50L3dvcmQtY291bnQudmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQWtDLEVBQWUsRUFBRTtJQUMvRixPQUFPLENBQUMsT0FBb0IsRUFBMkIsRUFBRTtRQUN4RCxJQUNDLE9BQU8sT0FBTyxFQUFFLEtBQUssS0FBSyxRQUFRO1lBQ2xDLENBQUMsT0FBTyxHQUFHLEtBQUssUUFBUSxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsQ0FBQyxFQUNuRCxDQUFDO1lBQ0YsT0FBTyxJQUFJLENBQUM7UUFDYixDQUFDO1FBRUQsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBRXpELElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxJQUFJLFNBQVMsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNqRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztRQUNyRCxDQUFDO1FBRUQsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLElBQUksU0FBUyxHQUFHLEdBQUcsRUFBRSxDQUFDO1lBQ2hELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQ2xELENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNiLENBQUMsQ0FBQztBQUNILENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZvcm1Db250cm9sLCBWYWxpZGF0aW9uRXJyb3JzLCBWYWxpZGF0b3JGbiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuLyoqXG4gKiBXb3JkQ291bnRWYWxpZGF0b3JcbiAqXG4gKiBUaGUgV29yZENvdW50VmFsaWRhdG9yIHZhbGlkYXRvciB3aWxsIGNoZWNrIHRoZSBhbW91bnQgb2Ygd29yZHMgcHJvdmlkZWQgaW4gYSBjb250cm9sLlxuICpcbiAqIEBwYXJhbSAubWluXG4gKiBAcGFyYW0gLm1heFxuICogQHJldHVybnMgVmFsaWRhdG9yRm5cbiAqL1xuZXhwb3J0IGNvbnN0IFdvcmRDb3VudFZhbGlkYXRvciA9ICh7IG1pbiwgbWF4IH06IHsgbWluPzogbnVtYmVyOyBtYXg/OiBudW1iZXIgfSk6IFZhbGlkYXRvckZuID0+IHtcblx0cmV0dXJuIChjb250cm9sOiBGb3JtQ29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcblx0XHRpZiAoXG5cdFx0XHR0eXBlb2YgY29udHJvbD8udmFsdWUgIT09ICdzdHJpbmcnIHx8XG5cdFx0XHQodHlwZW9mIG1pbiAhPT0gJ251bWJlcicgJiYgdHlwZW9mIG1heCAhPT0gJ251bWJlcicpXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHRjb25zdCB3b3JkQ291bnQgPSBjb250cm9sLnZhbHVlLnRyaW0oKS5zcGxpdCgnICcpLmxlbmd0aDtcblxuXHRcdGlmICh0eXBlb2YgbWluID09PSAnbnVtYmVyJyAmJiB3b3JkQ291bnQgPD0gbWluKSB7XG5cdFx0XHRyZXR1cm4geyBtaW5Xb3JkQ291bnROb3RSZWFjaGVkOiB7IHZhbGlkOiBmYWxzZSB9IH07XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiBtYXggPT09ICdudW1iZXInICYmIHdvcmRDb3VudCA+IG1heCkge1xuXHRcdFx0cmV0dXJuIHsgbWF4V29yZENvdW50UmVhY2hlZDogeyB2YWxpZDogZmFsc2UgfSB9O1xuXHRcdH1cblxuXHRcdHJldHVybiBudWxsO1xuXHR9O1xufTtcbiJdfQ==","import { clearFormError, setFormError } from '../utils';\n/**\n * CompareValidator\n *\n * The CompareValidator will return a validator that compares the values of two FormControls\n * within a FormGroup based on a given comparator function.\n *\n * Note: This validator will only set an error on the group it is set to\n * unless the `setErrorOnKey` argument is given.\n *\n * @param keys {string[]}\n * @param comparatorFn {(...args: ValueType[]) => boolean}\n * @param setErrorOnKey {string}\n * @returns {(group: FormGroup<{ [key: string]: FormControl<ValueType>; }>) => ValidationErrors}\n */\nexport const CompareValidator = (keys, comparatorFn, setErrorOnKey) => {\n    return (group) => {\n        // Denis: map the values to an array:\n        const values = keys.map((key) => group?.get(key).getRawValue());\n        const setErrorOnKeyControl = group?.get(setErrorOnKey);\n        // Denis: check if any of the keys contains an undefined or null value:\n        if (values.some((value) => typeof value === 'undefined' || value === null)) {\n            setErrorOnKeyControl && clearFormError(group.get(setErrorOnKey), 'compareError');\n            return null;\n        }\n        if (comparatorFn(...values)) {\n            setErrorOnKeyControl && setFormError(group.get(setErrorOnKey), 'compareError');\n            return {\n                compareError: true,\n            };\n        }\n        setErrorOnKeyControl && clearFormError(group.get(setErrorOnKey), 'compareError');\n        return null;\n    };\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGFyZS52YWxpZGF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvZm9ybXMvc3JjL2xpYi92YWxpZGF0b3JzL2NvbXBhcmUvY29tcGFyZS52YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFeEQ7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLENBQy9CLElBQWMsRUFDZCxZQUErQyxFQUMvQyxhQUFzQixFQUtBLEVBQUU7SUFDeEIsT0FBTyxDQUNOLEtBRUUsRUFDaUIsRUFBRTtRQUNyQixxQ0FBcUM7UUFDckMsTUFBTSxNQUFNLEdBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFXLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUNyRixNQUFNLG9CQUFvQixHQUFHLEtBQUssRUFBRSxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFdkQsdUVBQXVFO1FBQ3ZFLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQWdCLEVBQUUsRUFBRSxDQUFDLE9BQU8sS0FBSyxLQUFLLFdBQVcsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUN2RixvQkFBb0IsSUFBSSxjQUFjLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsRUFBRSxjQUFjLENBQUMsQ0FBQztZQUVqRixPQUFPLElBQUksQ0FBQztRQUNiLENBQUM7UUFFRCxJQUFJLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDN0Isb0JBQW9CLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLEVBQUUsY0FBYyxDQUFDLENBQUM7WUFFL0UsT0FBTztnQkFDTixZQUFZLEVBQUUsSUFBSTthQUNsQixDQUFDO1FBQ0gsQ0FBQztRQUVELG9CQUFvQixJQUFJLGNBQWMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBRWpGLE9BQU8sSUFBSSxDQUFDO0lBQ2IsQ0FBQyxDQUFDO0FBQ0gsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdGlvbkVycm9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgY2xlYXJGb3JtRXJyb3IsIHNldEZvcm1FcnJvciB9IGZyb20gJy4uL3V0aWxzJztcblxuLyoqXG4gKiBDb21wYXJlVmFsaWRhdG9yXG4gKlxuICogVGhlIENvbXBhcmVWYWxpZGF0b3Igd2lsbCByZXR1cm4gYSB2YWxpZGF0b3IgdGhhdCBjb21wYXJlcyB0aGUgdmFsdWVzIG9mIHR3byBGb3JtQ29udHJvbHNcbiAqIHdpdGhpbiBhIEZvcm1Hcm91cCBiYXNlZCBvbiBhIGdpdmVuIGNvbXBhcmF0b3IgZnVuY3Rpb24uXG4gKlxuICogTm90ZTogVGhpcyB2YWxpZGF0b3Igd2lsbCBvbmx5IHNldCBhbiBlcnJvciBvbiB0aGUgZ3JvdXAgaXQgaXMgc2V0IHRvXG4gKiB1bmxlc3MgdGhlIGBzZXRFcnJvck9uS2V5YCBhcmd1bWVudCBpcyBnaXZlbi5cbiAqXG4gKiBAcGFyYW0ga2V5cyB7c3RyaW5nW119XG4gKiBAcGFyYW0gY29tcGFyYXRvckZuIHsoLi4uYXJnczogVmFsdWVUeXBlW10pID0+IGJvb2xlYW59XG4gKiBAcGFyYW0gc2V0RXJyb3JPbktleSB7c3RyaW5nfVxuICogQHJldHVybnMgeyhncm91cDogRm9ybUdyb3VwPHsgW2tleTogc3RyaW5nXTogRm9ybUNvbnRyb2w8VmFsdWVUeXBlPjsgfT4pID0+IFZhbGlkYXRpb25FcnJvcnN9XG4gKi9cbmV4cG9ydCBjb25zdCBDb21wYXJlVmFsaWRhdG9yID0gPFZhbHVlVHlwZSA9IHVua25vd24+KFxuXHRrZXlzOiBzdHJpbmdbXSxcblx0Y29tcGFyYXRvckZuOiAoLi4uYXJnczogVmFsdWVUeXBlW10pID0+IGJvb2xlYW4sXG5cdHNldEVycm9yT25LZXk/OiBzdHJpbmdcbik6ICgoXG5cdGdyb3VwOiBGb3JtR3JvdXA8e1xuXHRcdFtrZXk6IHN0cmluZ106IEZvcm1Db250cm9sPFZhbHVlVHlwZT47XG5cdH0+XG4pID0+IFZhbGlkYXRpb25FcnJvcnMpID0+IHtcblx0cmV0dXJuIChcblx0XHRncm91cDogRm9ybUdyb3VwPHtcblx0XHRcdFtrZXk6IHN0cmluZ106IEZvcm1Db250cm9sPFZhbHVlVHlwZT47XG5cdFx0fT5cblx0KTogVmFsaWRhdGlvbkVycm9ycyA9PiB7XG5cdFx0Ly8gRGVuaXM6IG1hcCB0aGUgdmFsdWVzIHRvIGFuIGFycmF5OlxuXHRcdGNvbnN0IHZhbHVlczogVmFsdWVUeXBlW10gPSBrZXlzLm1hcCgoa2V5OiBzdHJpbmcpID0+IGdyb3VwPy5nZXQoa2V5KS5nZXRSYXdWYWx1ZSgpKTtcblx0XHRjb25zdCBzZXRFcnJvck9uS2V5Q29udHJvbCA9IGdyb3VwPy5nZXQoc2V0RXJyb3JPbktleSk7XG5cblx0XHQvLyBEZW5pczogY2hlY2sgaWYgYW55IG9mIHRoZSBrZXlzIGNvbnRhaW5zIGFuIHVuZGVmaW5lZCBvciBudWxsIHZhbHVlOlxuXHRcdGlmICh2YWx1ZXMuc29tZSgodmFsdWU6IFZhbHVlVHlwZSkgPT4gdHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJyB8fCB2YWx1ZSA9PT0gbnVsbCkpIHtcblx0XHRcdHNldEVycm9yT25LZXlDb250cm9sICYmIGNsZWFyRm9ybUVycm9yKGdyb3VwLmdldChzZXRFcnJvck9uS2V5KSwgJ2NvbXBhcmVFcnJvcicpO1xuXG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHRpZiAoY29tcGFyYXRvckZuKC4uLnZhbHVlcykpIHtcblx0XHRcdHNldEVycm9yT25LZXlDb250cm9sICYmIHNldEZvcm1FcnJvcihncm91cC5nZXQoc2V0RXJyb3JPbktleSksICdjb21wYXJlRXJyb3InKTtcblxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0Y29tcGFyZUVycm9yOiB0cnVlLFxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRzZXRFcnJvck9uS2V5Q29udHJvbCAmJiBjbGVhckZvcm1FcnJvcihncm91cC5nZXQoc2V0RXJyb3JPbktleSksICdjb21wYXJlRXJyb3InKTtcblxuXHRcdHJldHVybiBudWxsO1xuXHR9O1xufTtcbiJdfQ==","import { allOrNothingRequiredValidator } from './all-or-nothing-required/all-or-nothing-required.validator';\nimport { atLeastOneRequiredValidator, } from './at-least-one-required/at-least-one-required.validator';\nimport { dependedRequiredValidator } from './depended-required/depended-required.validator';\nimport { decimalsAfterCommaValidator } from './decimals-after-comma/decimals-after-comma.validator';\nimport { chronologicalDatesValidator } from './chronological-dates/chronological-dates.validator';\nimport { extendedEmailValidator } from './email/extended-email.validator';\nimport { hasNoFutureDateValidator } from './has-no-future-date/has-no-future-date.validator';\nimport { dateRangeValidator } from './date-range/date-range.validator';\nimport { WordCountValidator } from './max-word-count/word-count.validator';\nimport { CompareValidator } from './compare/compare.validator';\n/**\n * Exported Class\n */\nexport class NgxValidators {\n    /**\n     * A stricter validator for e-mail validation\n     *\n     * @param control - A form control\n     */\n    static extendedEmail(control) {\n        return extendedEmailValidator(control);\n    }\n    /**\n     * A validator to check if all or none of the values of a form group are filled in.\n     * Particularly useful in situations where a form group field within itself is optional,\n     * but all fields are required in case it does get filled in\n     *\n     * Returns an `allOrNothingRequiredError` error on the provided FormGroup and a `required` error on the individual controls\n     *\n     * @param control - A form group control\n     */\n    static allOrNothingRequired(control) {\n        return allOrNothingRequiredValidator(control);\n    }\n    /**\n     * A validator to check if at least one of the provided controls of the form group are filled in\n     *\n     * Returns an `atLeastOneRequiredError` error on the provided FormGroup and a `required` error on the individual controls\n     *\n     * @param options - An optional object with configuration options, see below params for more info\n     * @param controlNames - Optional list of controls, if not provided the validator is applied to all controls of the group\n     * @param conditionalFunction - Optional function the form value needs to return true to for the required to be se\n     */\n    static atLeastOneRequired(options) {\n        return atLeastOneRequiredValidator(options);\n    }\n    /**\n     * The compareValidator will return a validator that compares the values of two FormControls\n     * within a FormGroup based on a given comparator function.\n     *\n     * Returns a `compareError` on the provided FormGroup and on the individual controls if the `setErrorKey` argument is provided.\n     *\n     * @param keys {string[]}\n     * @param comparatorFn {(...args: ValueType[]) => boolean}\n     * @param setErrorOnKey {string}\n     * @returns {(group: FormGroup<{ [key: string]: FormControl<ValueType>; }>) => ValidationErrors}\n     *\n     */\n    static compareValidator(keys, comparatorFn, setErrorOnKey) {\n        return CompareValidator(keys, comparatorFn, setErrorOnKey);\n    }\n    /**\n     * FormGroup validator which checks if an array of controls in the control are filled in if the depended control is filled in\n     *\n     * Returns a `hasDependedRequiredError` error on the provided FormGroup and a `required` error on the individual controls\n     *\n     * @param controls - An array of controls.\n     * @param dependedControlKey - A control within the group which the other controls depend on.\n     * @param matchFunction - Optional function the dependedControl should check\n     */\n    static dependedRequired(controls, dependedControlKey, matchFunction) {\n        return dependedRequiredValidator(controls, dependedControlKey, matchFunction);\n    }\n    /**\n     * Validates whether the inputted value has exceeded the maximum amount of decimals after the comma\n     *\n     * Returns an `invalidDecimalsAfterComma` error on the provided control\n     *\n     * @param max - The maximum number of decimals after the comma\n     */\n    static decimalsAfterComma(max) {\n        return decimalsAfterCommaValidator(max);\n    }\n    /**\n     * A FormGroup validator to check whether a start and end date are chronologically correct\n     *\n     * Returns an `incorrectChronologicalDates` error on the provided FormGroup and a `incorrectChronologicalDate` on the endControl\n     *\n     * @param startControlKey - The key of the control containing the start date value\n     * @param endControlKey - The key of the control containing the end date value\n     * @param format - Optional format of the dates provided by the controls, by default yyyy-MM-dd\n     */\n    static chronologicalDates(startControlKey, endControlKey, format = 'yyyy-MM-dd') {\n        return chronologicalDatesValidator(startControlKey, endControlKey, format);\n    }\n    /**\n     * Form control validator which validates if a date is between a provided range\n     *\n     * Returns an `invalidRange` error\n     *\n     * @param minDate - Minimum valid date\n     * @param maxDate - Maximum valid date\n     * @param format - Optional format used for all 3 dates, by default yyyy-MM-dd\n     */\n    static dateRangeValidator(min, max, format = 'yyyy-MM-dd') {\n        return dateRangeValidator(min, max, format);\n    }\n    /**\n     * Form control validator which validates if a date is not in the future.\n     *\n     * Returns an `isFutureDate` error\n     */\n    static { this.hasNoFutureDateValidator = () => {\n        return hasNoFutureDateValidator();\n    }; }\n    /**\n     * Form control validator which validates if a provided string does not contain more or less words than a provided min and/or max.\n     *\n     * Returns either a `minWordCountNotReached` or a `maxWordCountReached`\n     */\n    static { this.wordCountValidator = ({ min, max }) => {\n        return WordCountValidator({ min, max });\n    }; }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9mb3Jtcy9zcmMvbGliL3ZhbGlkYXRvcnMvdmFsaWRhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFRQSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSw2REFBNkQsQ0FBQztBQUM1RyxPQUFPLEVBRU4sMkJBQTJCLEdBQzNCLE1BQU0seURBQXlELENBQUM7QUFDakUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDNUYsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDcEcsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDbEcsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDMUUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDN0YsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdkUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFL0Q7O0dBRUc7QUFFSCxNQUFNLE9BQU8sYUFBYTtJQUN6Qjs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLGFBQWEsQ0FBQyxPQUF3QjtRQUM1QyxPQUFPLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxPQUFrQjtRQUM3QyxPQUFPLDZCQUE2QixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILE1BQU0sQ0FBQyxrQkFBa0IsQ0FDeEIsT0FBcUQ7UUFFckQsT0FBTywyQkFBMkIsQ0FBVSxPQUFPLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7O09BV0c7SUFDSCxNQUFNLENBQUMsZ0JBQWdCLENBQ3RCLElBQWMsRUFDZCxZQUErQyxFQUMvQyxhQUFzQjtRQU10QixPQUFPLGdCQUFnQixDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsTUFBTSxDQUFDLGdCQUFnQixDQUN0QixRQUFtQixFQUNuQixrQkFBMkIsRUFDM0IsYUFBc0M7UUFFdEMsT0FBTyx5QkFBeUIsQ0FBVSxRQUFRLEVBQUUsa0JBQWtCLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDeEYsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxHQUFXO1FBQ3BDLE9BQU8sMkJBQTJCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsTUFBTSxDQUFDLGtCQUFrQixDQUN4QixlQUF1QixFQUN2QixhQUFxQixFQUNyQixNQUFNLEdBQUcsWUFBWTtRQUVyQixPQUFPLDJCQUEyQixDQUFDLGVBQWUsRUFBRSxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsTUFBTSxDQUFDLGtCQUFrQixDQUFDLEdBQVcsRUFBRSxHQUFXLEVBQUUsTUFBTSxHQUFHLFlBQVk7UUFDeEUsT0FBTyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRDs7OztPQUlHO2FBQ0ksNkJBQXdCLEdBQUcsR0FBZ0IsRUFBRTtRQUNuRCxPQUFPLHdCQUF3QixFQUFFLENBQUM7SUFDbkMsQ0FBQyxDQUFDO0lBRUY7Ozs7T0FJRzthQUNJLHVCQUFrQixHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFnQyxFQUFlLEVBQUU7UUFDdkYsT0FBTyxrQkFBa0IsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3pDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdEFic3RyYWN0Q29udHJvbCxcblx0Rm9ybUNvbnRyb2wsXG5cdEZvcm1Hcm91cCxcblx0VmFsaWRhdGlvbkVycm9ycyxcblx0VmFsaWRhdG9yRm4sXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgYWxsT3JOb3RoaW5nUmVxdWlyZWRWYWxpZGF0b3IgfSBmcm9tICcuL2FsbC1vci1ub3RoaW5nLXJlcXVpcmVkL2FsbC1vci1ub3RoaW5nLXJlcXVpcmVkLnZhbGlkYXRvcic7XG5pbXBvcnQge1xuXHRBdExlYXN0T25lUmVxdWlyZWRWYWxpZGF0b3JPcHRpb25zLFxuXHRhdExlYXN0T25lUmVxdWlyZWRWYWxpZGF0b3IsXG59IGZyb20gJy4vYXQtbGVhc3Qtb25lLXJlcXVpcmVkL2F0LWxlYXN0LW9uZS1yZXF1aXJlZC52YWxpZGF0b3InO1xuaW1wb3J0IHsgZGVwZW5kZWRSZXF1aXJlZFZhbGlkYXRvciB9IGZyb20gJy4vZGVwZW5kZWQtcmVxdWlyZWQvZGVwZW5kZWQtcmVxdWlyZWQudmFsaWRhdG9yJztcbmltcG9ydCB7IGRlY2ltYWxzQWZ0ZXJDb21tYVZhbGlkYXRvciB9IGZyb20gJy4vZGVjaW1hbHMtYWZ0ZXItY29tbWEvZGVjaW1hbHMtYWZ0ZXItY29tbWEudmFsaWRhdG9yJztcbmltcG9ydCB7IGNocm9ub2xvZ2ljYWxEYXRlc1ZhbGlkYXRvciB9IGZyb20gJy4vY2hyb25vbG9naWNhbC1kYXRlcy9jaHJvbm9sb2dpY2FsLWRhdGVzLnZhbGlkYXRvcic7XG5pbXBvcnQgeyBleHRlbmRlZEVtYWlsVmFsaWRhdG9yIH0gZnJvbSAnLi9lbWFpbC9leHRlbmRlZC1lbWFpbC52YWxpZGF0b3InO1xuaW1wb3J0IHsgaGFzTm9GdXR1cmVEYXRlVmFsaWRhdG9yIH0gZnJvbSAnLi9oYXMtbm8tZnV0dXJlLWRhdGUvaGFzLW5vLWZ1dHVyZS1kYXRlLnZhbGlkYXRvcic7XG5pbXBvcnQgeyBkYXRlUmFuZ2VWYWxpZGF0b3IgfSBmcm9tICcuL2RhdGUtcmFuZ2UvZGF0ZS1yYW5nZS52YWxpZGF0b3InO1xuaW1wb3J0IHsgV29yZENvdW50VmFsaWRhdG9yIH0gZnJvbSAnLi9tYXgtd29yZC1jb3VudC93b3JkLWNvdW50LnZhbGlkYXRvcic7XG5pbXBvcnQgeyBDb21wYXJlVmFsaWRhdG9yIH0gZnJvbSAnLi9jb21wYXJlL2NvbXBhcmUudmFsaWRhdG9yJztcblxuLyoqXG4gKiBFeHBvcnRlZCBDbGFzc1xuICovXG5cbmV4cG9ydCBjbGFzcyBOZ3hWYWxpZGF0b3JzIHtcblx0LyoqXG5cdCAqIEEgc3RyaWN0ZXIgdmFsaWRhdG9yIGZvciBlLW1haWwgdmFsaWRhdGlvblxuXHQgKlxuXHQgKiBAcGFyYW0gY29udHJvbCAtIEEgZm9ybSBjb250cm9sXG5cdCAqL1xuXHRzdGF0aWMgZXh0ZW5kZWRFbWFpbChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG5cdFx0cmV0dXJuIGV4dGVuZGVkRW1haWxWYWxpZGF0b3IoY29udHJvbCk7XG5cdH1cblxuXHQvKipcblx0ICogQSB2YWxpZGF0b3IgdG8gY2hlY2sgaWYgYWxsIG9yIG5vbmUgb2YgdGhlIHZhbHVlcyBvZiBhIGZvcm0gZ3JvdXAgYXJlIGZpbGxlZCBpbi5cblx0ICogUGFydGljdWxhcmx5IHVzZWZ1bCBpbiBzaXR1YXRpb25zIHdoZXJlIGEgZm9ybSBncm91cCBmaWVsZCB3aXRoaW4gaXRzZWxmIGlzIG9wdGlvbmFsLFxuXHQgKiBidXQgYWxsIGZpZWxkcyBhcmUgcmVxdWlyZWQgaW4gY2FzZSBpdCBkb2VzIGdldCBmaWxsZWQgaW5cblx0ICpcblx0ICogUmV0dXJucyBhbiBgYWxsT3JOb3RoaW5nUmVxdWlyZWRFcnJvcmAgZXJyb3Igb24gdGhlIHByb3ZpZGVkIEZvcm1Hcm91cCBhbmQgYSBgcmVxdWlyZWRgIGVycm9yIG9uIHRoZSBpbmRpdmlkdWFsIGNvbnRyb2xzXG5cdCAqXG5cdCAqIEBwYXJhbSBjb250cm9sIC0gQSBmb3JtIGdyb3VwIGNvbnRyb2xcblx0ICovXG5cdHN0YXRpYyBhbGxPck5vdGhpbmdSZXF1aXJlZChjb250cm9sOiBGb3JtR3JvdXApOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG5cdFx0cmV0dXJuIGFsbE9yTm90aGluZ1JlcXVpcmVkVmFsaWRhdG9yKGNvbnRyb2wpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEEgdmFsaWRhdG9yIHRvIGNoZWNrIGlmIGF0IGxlYXN0IG9uZSBvZiB0aGUgcHJvdmlkZWQgY29udHJvbHMgb2YgdGhlIGZvcm0gZ3JvdXAgYXJlIGZpbGxlZCBpblxuXHQgKlxuXHQgKiBSZXR1cm5zIGFuIGBhdExlYXN0T25lUmVxdWlyZWRFcnJvcmAgZXJyb3Igb24gdGhlIHByb3ZpZGVkIEZvcm1Hcm91cCBhbmQgYSBgcmVxdWlyZWRgIGVycm9yIG9uIHRoZSBpbmRpdmlkdWFsIGNvbnRyb2xzXG5cdCAqXG5cdCAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb3B0aW9uYWwgb2JqZWN0IHdpdGggY29uZmlndXJhdGlvbiBvcHRpb25zLCBzZWUgYmVsb3cgcGFyYW1zIGZvciBtb3JlIGluZm9cblx0ICogQHBhcmFtIGNvbnRyb2xOYW1lcyAtIE9wdGlvbmFsIGxpc3Qgb2YgY29udHJvbHMsIGlmIG5vdCBwcm92aWRlZCB0aGUgdmFsaWRhdG9yIGlzIGFwcGxpZWQgdG8gYWxsIGNvbnRyb2xzIG9mIHRoZSBncm91cFxuXHQgKiBAcGFyYW0gY29uZGl0aW9uYWxGdW5jdGlvbiAtIE9wdGlvbmFsIGZ1bmN0aW9uIHRoZSBmb3JtIHZhbHVlIG5lZWRzIHRvIHJldHVybiB0cnVlIHRvIGZvciB0aGUgcmVxdWlyZWQgdG8gYmUgc2Vcblx0ICovXG5cdHN0YXRpYyBhdExlYXN0T25lUmVxdWlyZWQ8S2V5VHlwZSBleHRlbmRzIHN0cmluZyA9IHN0cmluZz4oXG5cdFx0b3B0aW9ucz86IEF0TGVhc3RPbmVSZXF1aXJlZFZhbGlkYXRvck9wdGlvbnM8S2V5VHlwZT5cblx0KTogVmFsaWRhdG9yRm4ge1xuXHRcdHJldHVybiBhdExlYXN0T25lUmVxdWlyZWRWYWxpZGF0b3I8S2V5VHlwZT4ob3B0aW9ucyk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGNvbXBhcmVWYWxpZGF0b3Igd2lsbCByZXR1cm4gYSB2YWxpZGF0b3IgdGhhdCBjb21wYXJlcyB0aGUgdmFsdWVzIG9mIHR3byBGb3JtQ29udHJvbHNcblx0ICogd2l0aGluIGEgRm9ybUdyb3VwIGJhc2VkIG9uIGEgZ2l2ZW4gY29tcGFyYXRvciBmdW5jdGlvbi5cblx0ICpcblx0ICogUmV0dXJucyBhIGBjb21wYXJlRXJyb3JgIG9uIHRoZSBwcm92aWRlZCBGb3JtR3JvdXAgYW5kIG9uIHRoZSBpbmRpdmlkdWFsIGNvbnRyb2xzIGlmIHRoZSBgc2V0RXJyb3JLZXlgIGFyZ3VtZW50IGlzIHByb3ZpZGVkLlxuXHQgKlxuXHQgKiBAcGFyYW0ga2V5cyB7c3RyaW5nW119XG5cdCAqIEBwYXJhbSBjb21wYXJhdG9yRm4geyguLi5hcmdzOiBWYWx1ZVR5cGVbXSkgPT4gYm9vbGVhbn1cblx0ICogQHBhcmFtIHNldEVycm9yT25LZXkge3N0cmluZ31cblx0ICogQHJldHVybnMgeyhncm91cDogRm9ybUdyb3VwPHsgW2tleTogc3RyaW5nXTogRm9ybUNvbnRyb2w8VmFsdWVUeXBlPjsgfT4pID0+IFZhbGlkYXRpb25FcnJvcnN9XG5cdCAqXG5cdCAqL1xuXHRzdGF0aWMgY29tcGFyZVZhbGlkYXRvcjxWYWx1ZVR5cGUgPSB1bmtub3duPihcblx0XHRrZXlzOiBzdHJpbmdbXSxcblx0XHRjb21wYXJhdG9yRm46ICguLi5hcmdzOiBWYWx1ZVR5cGVbXSkgPT4gYm9vbGVhbixcblx0XHRzZXRFcnJvck9uS2V5Pzogc3RyaW5nXG5cdCk6IChcblx0XHRncm91cDogRm9ybUdyb3VwPHtcblx0XHRcdFtrZXk6IHN0cmluZ106IEZvcm1Db250cm9sPFZhbHVlVHlwZT47XG5cdFx0fT5cblx0KSA9PiBWYWxpZGF0aW9uRXJyb3JzIHtcblx0XHRyZXR1cm4gQ29tcGFyZVZhbGlkYXRvcihrZXlzLCBjb21wYXJhdG9yRm4sIHNldEVycm9yT25LZXkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZvcm1Hcm91cCB2YWxpZGF0b3Igd2hpY2ggY2hlY2tzIGlmIGFuIGFycmF5IG9mIGNvbnRyb2xzIGluIHRoZSBjb250cm9sIGFyZSBmaWxsZWQgaW4gaWYgdGhlIGRlcGVuZGVkIGNvbnRyb2wgaXMgZmlsbGVkIGluXG5cdCAqXG5cdCAqIFJldHVybnMgYSBgaGFzRGVwZW5kZWRSZXF1aXJlZEVycm9yYCBlcnJvciBvbiB0aGUgcHJvdmlkZWQgRm9ybUdyb3VwIGFuZCBhIGByZXF1aXJlZGAgZXJyb3Igb24gdGhlIGluZGl2aWR1YWwgY29udHJvbHNcblx0ICpcblx0ICogQHBhcmFtIGNvbnRyb2xzIC0gQW4gYXJyYXkgb2YgY29udHJvbHMuXG5cdCAqIEBwYXJhbSBkZXBlbmRlZENvbnRyb2xLZXkgLSBBIGNvbnRyb2wgd2l0aGluIHRoZSBncm91cCB3aGljaCB0aGUgb3RoZXIgY29udHJvbHMgZGVwZW5kIG9uLlxuXHQgKiBAcGFyYW0gbWF0Y2hGdW5jdGlvbiAtIE9wdGlvbmFsIGZ1bmN0aW9uIHRoZSBkZXBlbmRlZENvbnRyb2wgc2hvdWxkIGNoZWNrXG5cdCAqL1xuXHRzdGF0aWMgZGVwZW5kZWRSZXF1aXJlZDxLZXlUeXBlIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPihcblx0XHRjb250cm9sczogS2V5VHlwZVtdLFxuXHRcdGRlcGVuZGVkQ29udHJvbEtleTogS2V5VHlwZSxcblx0XHRtYXRjaEZ1bmN0aW9uPzogKGRhdGE6IGFueSkgPT4gYm9vbGVhblxuXHQpOiBWYWxpZGF0b3JGbiB7XG5cdFx0cmV0dXJuIGRlcGVuZGVkUmVxdWlyZWRWYWxpZGF0b3I8S2V5VHlwZT4oY29udHJvbHMsIGRlcGVuZGVkQ29udHJvbEtleSwgbWF0Y2hGdW5jdGlvbik7XG5cdH1cblxuXHQvKipcblx0ICogVmFsaWRhdGVzIHdoZXRoZXIgdGhlIGlucHV0dGVkIHZhbHVlIGhhcyBleGNlZWRlZCB0aGUgbWF4aW11bSBhbW91bnQgb2YgZGVjaW1hbHMgYWZ0ZXIgdGhlIGNvbW1hXG5cdCAqXG5cdCAqIFJldHVybnMgYW4gYGludmFsaWREZWNpbWFsc0FmdGVyQ29tbWFgIGVycm9yIG9uIHRoZSBwcm92aWRlZCBjb250cm9sXG5cdCAqXG5cdCAqIEBwYXJhbSBtYXggLSBUaGUgbWF4aW11bSBudW1iZXIgb2YgZGVjaW1hbHMgYWZ0ZXIgdGhlIGNvbW1hXG5cdCAqL1xuXHRzdGF0aWMgZGVjaW1hbHNBZnRlckNvbW1hKG1heDogbnVtYmVyKTogVmFsaWRhdG9yRm4ge1xuXHRcdHJldHVybiBkZWNpbWFsc0FmdGVyQ29tbWFWYWxpZGF0b3IobWF4KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIEZvcm1Hcm91cCB2YWxpZGF0b3IgdG8gY2hlY2sgd2hldGhlciBhIHN0YXJ0IGFuZCBlbmQgZGF0ZSBhcmUgY2hyb25vbG9naWNhbGx5IGNvcnJlY3Rcblx0ICpcblx0ICogUmV0dXJucyBhbiBgaW5jb3JyZWN0Q2hyb25vbG9naWNhbERhdGVzYCBlcnJvciBvbiB0aGUgcHJvdmlkZWQgRm9ybUdyb3VwIGFuZCBhIGBpbmNvcnJlY3RDaHJvbm9sb2dpY2FsRGF0ZWAgb24gdGhlIGVuZENvbnRyb2xcblx0ICpcblx0ICogQHBhcmFtIHN0YXJ0Q29udHJvbEtleSAtIFRoZSBrZXkgb2YgdGhlIGNvbnRyb2wgY29udGFpbmluZyB0aGUgc3RhcnQgZGF0ZSB2YWx1ZVxuXHQgKiBAcGFyYW0gZW5kQ29udHJvbEtleSAtIFRoZSBrZXkgb2YgdGhlIGNvbnRyb2wgY29udGFpbmluZyB0aGUgZW5kIGRhdGUgdmFsdWVcblx0ICogQHBhcmFtIGZvcm1hdCAtIE9wdGlvbmFsIGZvcm1hdCBvZiB0aGUgZGF0ZXMgcHJvdmlkZWQgYnkgdGhlIGNvbnRyb2xzLCBieSBkZWZhdWx0IHl5eXktTU0tZGRcblx0ICovXG5cdHN0YXRpYyBjaHJvbm9sb2dpY2FsRGF0ZXMoXG5cdFx0c3RhcnRDb250cm9sS2V5OiBzdHJpbmcsXG5cdFx0ZW5kQ29udHJvbEtleTogc3RyaW5nLFxuXHRcdGZvcm1hdCA9ICd5eXl5LU1NLWRkJ1xuXHQpOiBWYWxpZGF0b3JGbiB7XG5cdFx0cmV0dXJuIGNocm9ub2xvZ2ljYWxEYXRlc1ZhbGlkYXRvcihzdGFydENvbnRyb2xLZXksIGVuZENvbnRyb2xLZXksIGZvcm1hdCk7XG5cdH1cblxuXHQvKipcblx0ICogRm9ybSBjb250cm9sIHZhbGlkYXRvciB3aGljaCB2YWxpZGF0ZXMgaWYgYSBkYXRlIGlzIGJldHdlZW4gYSBwcm92aWRlZCByYW5nZVxuXHQgKlxuXHQgKiBSZXR1cm5zIGFuIGBpbnZhbGlkUmFuZ2VgIGVycm9yXG5cdCAqXG5cdCAqIEBwYXJhbSBtaW5EYXRlIC0gTWluaW11bSB2YWxpZCBkYXRlXG5cdCAqIEBwYXJhbSBtYXhEYXRlIC0gTWF4aW11bSB2YWxpZCBkYXRlXG5cdCAqIEBwYXJhbSBmb3JtYXQgLSBPcHRpb25hbCBmb3JtYXQgdXNlZCBmb3IgYWxsIDMgZGF0ZXMsIGJ5IGRlZmF1bHQgeXl5eS1NTS1kZFxuXHQgKi9cblx0c3RhdGljIGRhdGVSYW5nZVZhbGlkYXRvcihtaW46IHN0cmluZywgbWF4OiBzdHJpbmcsIGZvcm1hdCA9ICd5eXl5LU1NLWRkJyk6IFZhbGlkYXRvckZuIHtcblx0XHRyZXR1cm4gZGF0ZVJhbmdlVmFsaWRhdG9yKG1pbiwgbWF4LCBmb3JtYXQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZvcm0gY29udHJvbCB2YWxpZGF0b3Igd2hpY2ggdmFsaWRhdGVzIGlmIGEgZGF0ZSBpcyBub3QgaW4gdGhlIGZ1dHVyZS5cblx0ICpcblx0ICogUmV0dXJucyBhbiBgaXNGdXR1cmVEYXRlYCBlcnJvclxuXHQgKi9cblx0c3RhdGljIGhhc05vRnV0dXJlRGF0ZVZhbGlkYXRvciA9ICgpOiBWYWxpZGF0b3JGbiA9PiB7XG5cdFx0cmV0dXJuIGhhc05vRnV0dXJlRGF0ZVZhbGlkYXRvcigpO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBGb3JtIGNvbnRyb2wgdmFsaWRhdG9yIHdoaWNoIHZhbGlkYXRlcyBpZiBhIHByb3ZpZGVkIHN0cmluZyBkb2VzIG5vdCBjb250YWluIG1vcmUgb3IgbGVzcyB3b3JkcyB0aGFuIGEgcHJvdmlkZWQgbWluIGFuZC9vciBtYXguXG5cdCAqXG5cdCAqIFJldHVybnMgZWl0aGVyIGEgYG1pbldvcmRDb3VudE5vdFJlYWNoZWRgIG9yIGEgYG1heFdvcmRDb3VudFJlYWNoZWRgXG5cdCAqL1xuXHRzdGF0aWMgd29yZENvdW50VmFsaWRhdG9yID0gKHsgbWluLCBtYXggfTogeyBtaW46IG51bWJlcjsgbWF4OiBudW1iZXIgfSk6IFZhbGlkYXRvckZuID0+IHtcblx0XHRyZXR1cm4gV29yZENvdW50VmFsaWRhdG9yKHsgbWluLCBtYXggfSk7XG5cdH07XG5cblx0Ly8gQWRkIG90aGVyIGN1c3RvbSB2YWxpZGF0b3JzIDotKVxufVxuIl19","/**\n * In order to select all accessors in a FormContainer, we need this base class to pass to our ViewChildren.\n *\n * IMPORTANT: This will never be used as an actual functional component\n */\nexport class BaseFormAccessor {\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1mb3JtLmFjY2Vzc29yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2Zvcm1zL3NyYy9saWIvYWJzdHJhY3RzL2Jhc2UtZm9ybS9iYXNlLWZvcm0uYWNjZXNzb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUNILE1BQU0sT0FBTyxnQkFBZ0I7Q0FBRyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogSW4gb3JkZXIgdG8gc2VsZWN0IGFsbCBhY2Nlc3NvcnMgaW4gYSBGb3JtQ29udGFpbmVyLCB3ZSBuZWVkIHRoaXMgYmFzZSBjbGFzcyB0byBwYXNzIHRvIG91ciBWaWV3Q2hpbGRyZW4uXG4gKlxuICogSU1QT1JUQU5UOiBUaGlzIHdpbGwgbmV2ZXIgYmUgdXNlZCBhcyBhbiBhY3R1YWwgZnVuY3Rpb25hbCBjb21wb25lbnRcbiAqL1xuZXhwb3J0IGNsYXNzIEJhc2VGb3JtQWNjZXNzb3Ige31cbiJdfQ==","/**\n * Allows for a deep markAsDirty of all controls. Can be used for a FormGroup or a FormArray\n *\n * @param controls - The controls we wish to update the value and validity of\n * @param onlySelf - Whether or not we want it to be only the control itself and not the direct ancestors. Default this is true\n */\nexport const markAllAsDirty = (controls, options = {}) => {\n    // Iben: We loop over all controls\n    (Array.isArray(controls) ? controls : Object.values(controls)).forEach((control) => {\n        // Iben: If there are no child controls, we update the value and validity of the control\n        if (!control['controls']) {\n            control.markAsDirty(options);\n            return;\n        }\n        // Iben: If there are child controls, we recursively update the value and validity\n        markAllAsDirty(control['controls'], options);\n    });\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFyay1hbGwtYXMtZGlydHkudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9mb3Jtcy9zcmMvbGliL3V0aWxzL21hcmstYWxsLWFzLWRpcnR5L21hcmstYWxsLWFzLWRpcnR5LnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUE7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FDN0IsUUFBNkQsRUFDN0QsVUFBa0MsRUFBRSxFQUNuQyxFQUFFO0lBQ0gsa0NBQWtDO0lBQ2xDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7UUFDbEYsd0ZBQXdGO1FBQ3hGLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUMxQixPQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzdCLE9BQU87UUFDUixDQUFDO1FBRUQsa0ZBQWtGO1FBQ2xGLGNBQWMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDOUMsQ0FBQyxDQUFDLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IEZvcm1TdGF0ZU9wdGlvbnNFbnRpdHkgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcblxuLyoqXG4gKiBBbGxvd3MgZm9yIGEgZGVlcCBtYXJrQXNEaXJ0eSBvZiBhbGwgY29udHJvbHMuIENhbiBiZSB1c2VkIGZvciBhIEZvcm1Hcm91cCBvciBhIEZvcm1BcnJheVxuICpcbiAqIEBwYXJhbSBjb250cm9scyAtIFRoZSBjb250cm9scyB3ZSB3aXNoIHRvIHVwZGF0ZSB0aGUgdmFsdWUgYW5kIHZhbGlkaXR5IG9mXG4gKiBAcGFyYW0gb25seVNlbGYgLSBXaGV0aGVyIG9yIG5vdCB3ZSB3YW50IGl0IHRvIGJlIG9ubHkgdGhlIGNvbnRyb2wgaXRzZWxmIGFuZCBub3QgdGhlIGRpcmVjdCBhbmNlc3RvcnMuIERlZmF1bHQgdGhpcyBpcyB0cnVlXG4gKi9cbmV4cG9ydCBjb25zdCBtYXJrQWxsQXNEaXJ0eSA9IChcblx0Y29udHJvbHM6IFJlY29yZDxzdHJpbmcsIEFic3RyYWN0Q29udHJvbD4gfCBBYnN0cmFjdENvbnRyb2xbXSxcblx0b3B0aW9uczogRm9ybVN0YXRlT3B0aW9uc0VudGl0eSA9IHt9XG4pID0+IHtcblx0Ly8gSWJlbjogV2UgbG9vcCBvdmVyIGFsbCBjb250cm9sc1xuXHQoQXJyYXkuaXNBcnJheShjb250cm9scykgPyBjb250cm9scyA6IE9iamVjdC52YWx1ZXMoY29udHJvbHMpKS5mb3JFYWNoKChjb250cm9sKSA9PiB7XG5cdFx0Ly8gSWJlbjogSWYgdGhlcmUgYXJlIG5vIGNoaWxkIGNvbnRyb2xzLCB3ZSB1cGRhdGUgdGhlIHZhbHVlIGFuZCB2YWxpZGl0eSBvZiB0aGUgY29udHJvbFxuXHRcdGlmICghY29udHJvbFsnY29udHJvbHMnXSkge1xuXHRcdFx0Y29udHJvbC5tYXJrQXNEaXJ0eShvcHRpb25zKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBJYmVuOiBJZiB0aGVyZSBhcmUgY2hpbGQgY29udHJvbHMsIHdlIHJlY3Vyc2l2ZWx5IHVwZGF0ZSB0aGUgdmFsdWUgYW5kIHZhbGlkaXR5XG5cdFx0bWFya0FsbEFzRGlydHkoY29udHJvbFsnY29udHJvbHMnXSwgb3B0aW9ucyk7XG5cdH0pO1xufTtcbiJdfQ==","/**\n * Adds a deep update value and validity to the existing update value and validity\n *\n * @param form - The provided abstract control\n * @param options - The options we wish to call along with the update value and validity function\n */\nexport const updateAllValueAndValidity = (form, options = {}) => {\n    // Iben: Call the original updateValueAndValidity\n    form.updateValueAndValidity(options);\n    // Iben: If we don't have the inner form yet we just do the default update value\n    if (!form || !form['controls']) {\n        return;\n    }\n    // Iben: We update the value and validity recursively for each child control\n    deepUpdateValueAndValidity(form['controls'], { ...options, onlySelf: true });\n};\n/**\n * Allows for a deep updateValueAndValidity of all controls. Can be used for a FormGroup or a FormArray\n *\n * @param controls - The controls we wish to update the value and validity of\n * @param onlySelf - Whether or not we want it to be only the control itself and not the direct ancestors. Default this is true\n */\nexport const deepUpdateValueAndValidity = (controls, options = {}) => {\n    // Iben: We loop over all controls\n    (Array.isArray(controls) ? controls : Object.values(controls)).forEach((control) => {\n        // Iben: If there are no child controls, we update the value and validity of the control\n        if (!control['controls']) {\n            control.updateValueAndValidity(options);\n            return;\n        }\n        // Iben: If there are child controls, we recursively update the value and validity\n        deepUpdateValueAndValidity(control['controls'], options);\n    });\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXVwZGF0ZS12YWx1ZS1hbmQtdmFsaWRpdHkudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9mb3Jtcy9zcmMvbGliL3V0aWxzL2N1c3RvbS11cGRhdGUtdmFsdWUtYW5kLXZhbGlkaXR5L2N1c3RvbS11cGRhdGUtdmFsdWUtYW5kLXZhbGlkaXR5LnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUE7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxDQUN4QyxJQUFxQixFQUNyQixVQUFrQyxFQUFFLEVBQ25DLEVBQUU7SUFDSCxpREFBaUQ7SUFDakQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3JDLGdGQUFnRjtJQUNoRixJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7UUFDaEMsT0FBTztJQUNSLENBQUM7SUFFRCw0RUFBNEU7SUFDNUUsMEJBQTBCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDOUUsQ0FBQyxDQUFDO0FBQ0Y7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxDQUN6QyxRQUE2RCxFQUM3RCxVQUFrQyxFQUFFLEVBQ25DLEVBQUU7SUFDSCxrQ0FBa0M7SUFDbEMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtRQUNsRix3RkFBd0Y7UUFDeEYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQzFCLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN4QyxPQUFPO1FBQ1IsQ0FBQztRQUVELGtGQUFrRjtRQUNsRiwwQkFBMEIsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDMUQsQ0FBQyxDQUFDLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IEZvcm1TdGF0ZU9wdGlvbnNFbnRpdHkgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcblxuLyoqXG4gKiBBZGRzIGEgZGVlcCB1cGRhdGUgdmFsdWUgYW5kIHZhbGlkaXR5IHRvIHRoZSBleGlzdGluZyB1cGRhdGUgdmFsdWUgYW5kIHZhbGlkaXR5XG4gKlxuICogQHBhcmFtIGZvcm0gLSBUaGUgcHJvdmlkZWQgYWJzdHJhY3QgY29udHJvbFxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyB3ZSB3aXNoIHRvIGNhbGwgYWxvbmcgd2l0aCB0aGUgdXBkYXRlIHZhbHVlIGFuZCB2YWxpZGl0eSBmdW5jdGlvblxuICovXG5leHBvcnQgY29uc3QgdXBkYXRlQWxsVmFsdWVBbmRWYWxpZGl0eSA9IChcblx0Zm9ybTogQWJzdHJhY3RDb250cm9sLFxuXHRvcHRpb25zOiBGb3JtU3RhdGVPcHRpb25zRW50aXR5ID0ge31cbikgPT4ge1xuXHQvLyBJYmVuOiBDYWxsIHRoZSBvcmlnaW5hbCB1cGRhdGVWYWx1ZUFuZFZhbGlkaXR5XG5cdGZvcm0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eShvcHRpb25zKTtcblx0Ly8gSWJlbjogSWYgd2UgZG9uJ3QgaGF2ZSB0aGUgaW5uZXIgZm9ybSB5ZXQgd2UganVzdCBkbyB0aGUgZGVmYXVsdCB1cGRhdGUgdmFsdWVcblx0aWYgKCFmb3JtIHx8ICFmb3JtWydjb250cm9scyddKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gSWJlbjogV2UgdXBkYXRlIHRoZSB2YWx1ZSBhbmQgdmFsaWRpdHkgcmVjdXJzaXZlbHkgZm9yIGVhY2ggY2hpbGQgY29udHJvbFxuXHRkZWVwVXBkYXRlVmFsdWVBbmRWYWxpZGl0eShmb3JtWydjb250cm9scyddLCB7IC4uLm9wdGlvbnMsIG9ubHlTZWxmOiB0cnVlIH0pO1xufTtcbi8qKlxuICogQWxsb3dzIGZvciBhIGRlZXAgdXBkYXRlVmFsdWVBbmRWYWxpZGl0eSBvZiBhbGwgY29udHJvbHMuIENhbiBiZSB1c2VkIGZvciBhIEZvcm1Hcm91cCBvciBhIEZvcm1BcnJheVxuICpcbiAqIEBwYXJhbSBjb250cm9scyAtIFRoZSBjb250cm9scyB3ZSB3aXNoIHRvIHVwZGF0ZSB0aGUgdmFsdWUgYW5kIHZhbGlkaXR5IG9mXG4gKiBAcGFyYW0gb25seVNlbGYgLSBXaGV0aGVyIG9yIG5vdCB3ZSB3YW50IGl0IHRvIGJlIG9ubHkgdGhlIGNvbnRyb2wgaXRzZWxmIGFuZCBub3QgdGhlIGRpcmVjdCBhbmNlc3RvcnMuIERlZmF1bHQgdGhpcyBpcyB0cnVlXG4gKi9cbmV4cG9ydCBjb25zdCBkZWVwVXBkYXRlVmFsdWVBbmRWYWxpZGl0eSA9IChcblx0Y29udHJvbHM6IFJlY29yZDxzdHJpbmcsIEFic3RyYWN0Q29udHJvbD4gfCBBYnN0cmFjdENvbnRyb2xbXSxcblx0b3B0aW9uczogRm9ybVN0YXRlT3B0aW9uc0VudGl0eSA9IHt9XG4pID0+IHtcblx0Ly8gSWJlbjogV2UgbG9vcCBvdmVyIGFsbCBjb250cm9sc1xuXHQoQXJyYXkuaXNBcnJheShjb250cm9scykgPyBjb250cm9scyA6IE9iamVjdC52YWx1ZXMoY29udHJvbHMpKS5mb3JFYWNoKChjb250cm9sKSA9PiB7XG5cdFx0Ly8gSWJlbjogSWYgdGhlcmUgYXJlIG5vIGNoaWxkIGNvbnRyb2xzLCB3ZSB1cGRhdGUgdGhlIHZhbHVlIGFuZCB2YWxpZGl0eSBvZiB0aGUgY29udHJvbFxuXHRcdGlmICghY29udHJvbFsnY29udHJvbHMnXSkge1xuXHRcdFx0Y29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KG9wdGlvbnMpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIEliZW46IElmIHRoZXJlIGFyZSBjaGlsZCBjb250cm9scywgd2UgcmVjdXJzaXZlbHkgdXBkYXRlIHRoZSB2YWx1ZSBhbmQgdmFsaWRpdHlcblx0XHRkZWVwVXBkYXRlVmFsdWVBbmRWYWxpZGl0eShjb250cm9sWydjb250cm9scyddLCBvcHRpb25zKTtcblx0fSk7XG59O1xuIl19","import { markAllAsDirty } from '../mark-all-as-dirty/mark-all-as-dirty.util';\nimport { updateAllValueAndValidity } from '../custom-update-value-and-validity/custom-update-value-and-validity.util';\n/**\n * Disable a FormControl/FormArray\n *\n * @param keys - The keys of the fields we wish to disable\n * @param emitEvent - Whether or not we wish to emit the event\n */\nconst handleDisableFormControlOfFormArray = (form, keys, emitEvent) => {\n    // Iben: Early exit in case the state already matches so we don't do unnecessary emits\n    if ((keys.has('formAccessorSelf') && form.disabled) ||\n        (!keys.has('formAccessorSelf') && form.enabled)) {\n        return;\n    }\n    // Iben: Disable/enable the control based on the key\n    keys.has('formAccessorSelf') ? form.disable({ emitEvent }) : form.enable({ emitEvent });\n};\n/**\n * Disable the controls of a FormGroup\n *\n * @param keys - The keys of the fields we wish to disable\n * @param emitEvent - Whether or not we wish to emit the event\n */\nconst handleDisableFormGroup = (form, keys, emitEvent) => {\n    // Iben: Loop over all controls and enable them so that they are re-enabled in case the set of keys changes\n    enableControls(form, emitEvent);\n    // Iben: Disable the keys\n    Array.from(keys).forEach((key) => {\n        const control = form.get(key);\n        if (!control) {\n            console.warn(`FormAccessor: The key \"${key}\" was provided in the disableFields array but was not found in the provided form.`);\n            return;\n        }\n        // Iben: Prevent emit event if the control is already disabled\n        if (!control.disabled) {\n            control.disable({ emitEvent });\n        }\n    });\n};\n/**\n * Recursively enables all fields of a control\n *\n * @param control - An AbstractControl which we want to enable and enable all children off\n * @param emitEvent - Whether or not we wish to emit an event\n */\nconst enableControls = (control, emitEvent = false) => {\n    //Iben: If no control was found, early exit\n    if (!control) {\n        return;\n    }\n    // Iben: Enable the control itself if it is not enabled yet\n    if (!control.enabled) {\n        control.enable({ emitEvent });\n    }\n    // Iben: If there are no controls, early exit\n    if (!control['controls']) {\n        return;\n    }\n    // Iben: Recursively enable each control\n    (Array.isArray(control['controls'])\n        ? control['controls']\n        : Object.values(control['controls'])).forEach((child) => {\n        enableControls(child, emitEvent);\n    });\n};\n/**\n * Disables and enables a form's control based on a set of provided keys\n *\n * @param form - The form we wish to disable the controls for\n * @param controlKeys - A set of keys of the controls\n * @param emitEvent - Whether or not we wish to emit the event\n */\nexport const handleFormAccessorControlDisabling = (form, controlKeys, emitEvent) => {\n    // Iben: Depending on whether we're dealing with a FormArray/FormControl or a FormGroup, we have different  and handle the disable/enable state\n    if (!form['controls'] || Array.isArray(form['controls'])) {\n        handleDisableFormControlOfFormArray(form, controlKeys, emitEvent);\n    }\n    else {\n        handleDisableFormGroup(form, controlKeys, emitEvent);\n    }\n};\n/**\n * Marks a form and all the form-accessors this form is based on as dirty\n *\n * @param form - The form we wish to mark as dirty\n * @param accessors - An array of all the accessors we wish to mark as dirty\n * @param options - Form state options we wish to provide\n */\nexport const handleFormAccessorMarkAsDirty = (form, accessors, options = {}) => {\n    // Iben: If the control has child controls, recursively mark them as dirty\n    if (form['controls']) {\n        markAllAsDirty(form['controls'], options);\n    }\n    else {\n        // Iben : Mark the form as dirty\n        form.markAsDirty(options);\n    }\n    // Iben: Loop over each form accessor and call the mark as dirty function, so all subsequent accessors are also marked as dirty\n    accessors.forEach((accessor) => accessor.markAsDirty(options));\n};\n/**\n * Marks a form and all the form-accessors this form is based on as touched\n *\n * @param form - The form we wish to mark as touched\n * @param accessors - An array of all the accessors we wish to mark as touched\n * @param options - Form state options we wish to provide\n */\nexport const handleFormAccessorMarkAsTouched = (form, accessors, options = {}) => {\n    // Iben: Mark all the controls and the children as touched\n    form.markAllAsTouched();\n    // Iben: Loop over each form accessor and call the mark as touched function, so all subsequent accessors are also marked as touched\n    accessors.forEach((accessor) => accessor.markAsTouched(options));\n};\n/**\n * Marks a form and all the form-accessors this form is based on as pristine\n *\n * @param form - The form we wish to mark as pristine\n * @param accessors - An array of all the accessors we wish to mark as pristine\n * @param options - Form state options we wish to provide\n */\nexport const handleFormAccessorMarkAsPristine = (form, accessors, options = {}) => {\n    // Iben: Mark all the controls and the children as touched\n    form.markAsPristine();\n    // Iben: Loop over each form accessor and call the mark as touched function, so all subsequent accessors are also marked as touched\n    accessors.forEach((accessor) => accessor.markAsPristine(options));\n};\n/**\n * Updates a form and all the form-accessors this form i\n *\n * @param form - The form we wish to update the value and validity of\n * @param accessors - An array of all the accessors we wish to update the value and validity of\n * @param options - Form state options we wish to provide\n */\nexport const handleFormAccessorUpdateValueAndValidity = (form, accessors, options = {}) => {\n    // Iben: Update the value and validity of the form\n    updateAllValueAndValidity(form, options);\n    // Iben: Loop over each form accessor and call the updateValueAndValidity function, so all subsequent accessors are also updated\n    accessors.forEach((accessor) => accessor.updateAllValueAndValidity(options));\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1hY2Nlc3Nvci51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9mb3Jtcy9zcmMvbGliL3V0aWxzL2Zvcm0tYWNjZXNzb3IvZm9ybS1hY2Nlc3Nvci51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFFN0UsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sMkVBQTJFLENBQUM7QUFFdEg7Ozs7O0dBS0c7QUFDSCxNQUFNLG1DQUFtQyxHQUFHLENBQzNDLElBQXFCLEVBQ3JCLElBQWlCLEVBQ2pCLFNBQWtCLEVBQ2pCLEVBQUU7SUFDSCxzRkFBc0Y7SUFDdEYsSUFDQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQy9DLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUM5QyxDQUFDO1FBQ0YsT0FBTztJQUNSLENBQUM7SUFFRCxvREFBb0Q7SUFDcEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7QUFDekYsQ0FBQyxDQUFDO0FBRUY7Ozs7O0dBS0c7QUFDSCxNQUFNLHNCQUFzQixHQUFHLENBQUMsSUFBZSxFQUFFLElBQWlCLEVBQUUsU0FBa0IsRUFBRSxFQUFFO0lBQ3pGLDJHQUEyRztJQUMzRyxjQUFjLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBRWhDLHlCQUF5QjtJQUN6QixLQUFLLENBQUMsSUFBSSxDQUFD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ckIsU0FBOEMsRUFDOUMsVUFBa0MsRUFBRSxFQUNuQyxFQUFFO0lBQ0gsMERBQTBEO0lBQzFELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBRXhCLG1JQUFtSTtJQUNuSSxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDbEUsQ0FBQyxDQUFDO0FBRUY7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZ0NBQWdDLEdBQUcsQ0FDL0MsSUFBcUIsRUFDckIsU0FBOEMsRUFDOUMsVUFBa0MsRUFBRSxFQUNuQyxFQUFFO0lBQ0gsMERBQTBEO0lBQzFELElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUV0QixtSUFBbUk7SUFDbkksU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ25FLENBQUMsQ0FBQztBQUVGOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxNQUFNLHdDQUF3QyxHQUFHLENBQ3ZELElBQXFCLEVBQ3JCLFNBQThDLEVBQzlDLFVBQWtDLEVBQUUsRUFDbkMsRUFBRTtJQUNILGtEQUFrRDtJQUNsRCx5QkFBeUIsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFekMsZ0lBQWdJO0lBQ2hJLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyx5QkFBeUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQzlFLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBEYXRhRm9ybUFjY2Vzc29yLCBGb3JtQWNjZXNzb3IgfSBmcm9tICcuLi8uLi9hYnN0cmFjdHMnO1xuaW1wb3J0IHsgbWFya0FsbEFzRGlydHkgfSBmcm9tICcuLi9tYXJrLWFsbC1hcy1kaXJ0eS9tYXJrLWFsbC1hcy1kaXJ0eS51dGlsJztcbmltcG9ydCB7IEZvcm1TdGF0ZU9wdGlvbnNFbnRpdHkgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IHVwZGF0ZUFsbFZhbHVlQW5kVmFsaWRpdHkgfSBmcm9tICcuLi9jdXN0b20tdXBkYXRlLXZhbHVlLWFuZC12YWxpZGl0eS9jdXN0b20tdXBkYXRlLXZhbHVlLWFuZC12YWxpZGl0eS51dGlsJztcblxuLyoqXG4gKiBEaXNhYmxlIGEgRm9ybUNvbnRyb2wvRm9ybUFycmF5XG4gKlxuICogQHBhcmFtIGtleXMgLSBUaGUga2V5cyBvZiB0aGUgZmllbGRzIHdlIHdpc2ggdG8gZGlzYWJsZVxuICogQHBhcmFtIGVtaXRFdmVudCAtIFdoZXRoZXIgb3Igbm90IHdlIHdpc2ggdG8gZW1pdCB0aGUgZXZlbnRcbiAqL1xuY29uc3QgaGFuZGxlRGlzYWJsZUZvcm1Db250cm9sT2ZGb3JtQXJyYXkgPSAoXG5cdGZvcm06IEFic3RyYWN0Q29udHJvbCxcblx0a2V5czogU2V0PHN0cmluZz4sXG5cdGVtaXRFdmVudDogYm9vbGVhblxuKSA9PiB7XG5cdC8vIEliZW46IEVhcmx5IGV4aXQgaW4gY2FzZSB0aGUgc3RhdGUgYWxyZWFkeSBtYXRjaGVzIHNvIHdlIGRvbid0IGRvIHVubmVjZXNzYXJ5IGVtaXRzXG5cdGlmIChcblx0XHQoa2V5cy5oYXMoJ2Zvcm1BY2Nlc3NvclNlbGYnKSAmJiBmb3JtLmRpc2FibGVkKSB8fFxuXHRcdCgha2V5cy5oYXMoJ2Zvcm1BY2Nlc3NvclNlbGYnKSAmJiBmb3JtLmVuYWJsZWQpXG5cdCkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIEliZW46IERpc2FibGUvZW5hYmxlIHRoZSBjb250cm9sIGJhc2VkIG9uIHRoZSBrZXlcblx0a2V5cy5oYXMoJ2Zvcm1BY2Nlc3NvclNlbGYnKSA/IGZvcm0uZGlzYWJsZSh7IGVtaXRFdmVudCB9KSA6IGZvcm0uZW5hYmxlKHsgZW1pdEV2ZW50IH0pO1xufTtcblxuLyoqXG4gKiBEaXNhYmxlIHRoZSBjb250cm9scyBvZiBhIEZvcm1Hcm91cFxuICpcbiAqIEBwYXJhbSBrZXlzIC0gVGhlIGtleXMgb2YgdGhlIGZpZWxkcyB3ZSB3aXNoIHRvIGRpc2FibGVcbiAqIEBwYXJhbSBlbWl0RXZlbnQgLSBXaGV0aGVyIG9yIG5vdCB3ZSB3aXNoIHRvIGVtaXQgdGhlIGV2ZW50XG4gKi9cbmNvbnN0IGhhbmRsZURpc2FibGVGb3JtR3JvdXAgPSAoZm9ybTogRm9ybUdyb3VwLCBrZXlzOiBTZXQ8c3RyaW5nPiwgZW1pdEV2ZW50OiBib29sZWFuKSA9PiB7XG5cdC8vIEliZW46IExvb3Agb3ZlciBhbGwgY29udHJvbHMgYW5kIGVuYWJsZSB0aGVtIHNvIHRoYXQgdGhleSBhcmUgcmUtZW5hYmxlZCBpbiBjYXNlIHRoZSBzZXQgb2Yga2V5cyBjaGFuZ2VzXG5cdGVuYWJsZUNvbnRyb2xzKGZvcm0sIGVtaXRFdmVudCk7XG5cblx0Ly8gSWJlbjogRGlzYWJsZSB0aGUga2V5c1xuXHRBcnJheS5mcm9tKGtleXMpLmZvckVhY2goKGtleSkgPT4ge1xuXHRcdGNvbnN0IGNvbnRyb2wgPSBmb3JtLmdldChrZXkpO1xuXHRcdGlmICghY29udHJvbCkge1xuXHRcdFx0Y29uc29sZS53YXJuKFxuXHRcdFx0XHRgRm9ybUFjY2Vzc29yOiBUaGUga2V5IFwiJHtrZXl9XCIgd2FzIHByb3ZpZGVkIGluIHRoZSBkaXNhYmxlRmllbGRzIGFycmF5IGJ1dCB3YXMgbm90IGZvdW5kIGluIHRoZSBwcm92aWRlZCBmb3JtLmBcblx0XHRcdCk7XG5cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBJYmVuOiBQcmV2ZW50IGVtaXQgZXZlbnQgaWYgdGhlIGNvbnRyb2wgaXMgYWxyZWFkeSBkaXNhYmxlZFxuXHRcdGlmICghY29udHJvbC5kaXNhYmxlZCkge1xuXHRcdFx0Y29udHJvbC5kaXNhYmxlKHsgZW1pdEV2ZW50IH0pO1xuXHRcdH1cblx0fSk7XG59O1xuXG4vKipcbiAqIFJlY3Vyc2l2ZWx5IGVuYWJsZXMgYWxsIGZpZWxkcyBvZiBhIGNvbnRyb2xcbiAqXG4gKiBAcGFyYW0gY29udHJvbCAtIEFuIEFic3RyYWN0Q29udHJvbCB3aGljaCB3ZSB3YW50IHRvIGVuYWJsZSBhbmQgZW5hYmxlIGFsbCBjaGlsZHJlbiBvZmZcbiAqIEBwYXJhbSBlbWl0RXZlbnQgLSBXaGV0aGVyIG9yIG5vdCB3ZSB3aXNoIHRvIGVtaXQgYW4gZXZlbnRcbiAqL1xuY29uc3QgZW5hYmxlQ29udHJvbHMgPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sLCBlbWl0RXZlbnQ6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQgPT4ge1xuXHQvL0liZW46IElmIG5vIGNvbnRyb2wgd2FzIGZvdW5kLCBlYXJseSBleGl0XG5cdGlmICghY29udHJvbCkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIEliZW46IEVuYWJsZSB0aGUgY29udHJvbCBpdHNlbGYgaWYgaXQgaXMgbm90IGVuYWJsZWQgeWV0XG5cdGlmICghY29udHJvbC5lbmFibGVkKSB7XG5cdFx0Y29udHJvbC5lbmFibGUoeyBlbWl0RXZlbnQgfSk7XG5cdH1cblxuXHQvLyBJYmVuOiBJZiB0aGVyZSBhcmUgbm8gY29udHJvbHMsIGVhcmx5IGV4aXRcblx0aWYgKCFjb250cm9sWydjb250cm9scyddKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gSWJlbjogUmVjdXJzaXZlbHkgZW5hYmxlIGVhY2ggY29udHJvbFxuXHQoQXJyYXkuaXNBcnJheShjb250cm9sWydjb250cm9scyddKVxuXHRcdD8gY29udHJvbFsnY29udHJvbHMnXVxuXHRcdDogT2JqZWN0LnZhbHVlcyhjb250cm9sWydjb250cm9scyddKVxuXHQpLmZvckVhY2goKGNoaWxkOiBBYnN0cmFjdENvbnRyb2wpID0+IHtcblx0XHRlbmFibGVDb250cm9scyhjaGlsZCwgZW1pdEV2ZW50KTtcblx0fSk7XG59O1xuXG4vKipcbiAqIERpc2FibGVzIGFuZCBlbmFibGVzIGEgZm9ybSdzIGNvbnRyb2wgYmFzZWQgb24gYSBzZXQgb2YgcHJvdmlkZWQga2V5c1xuICpcbiAqIEBwYXJhbSBmb3JtIC0gVGhlIGZvcm0gd2Ugd2lzaCB0byBkaXNhYmxlIHRoZSBjb250cm9scyBmb3JcbiAqIEBwYXJhbSBjb250cm9sS2V5cyAtIEEgc2V0IG9mIGtleXMgb2YgdGhlIGNvbnRyb2xzXG4gKiBAcGFyYW0gZW1pdEV2ZW50IC0gV2hldGhlciBvciBub3Qgd2Ugd2lzaCB0byBlbWl0IHRoZSBldmVudFxuICovXG5leHBvcnQgY29uc3QgaGFuZGxlRm9ybUFjY2Vzc29yQ29udHJvbERpc2FibGluZyA9IChcblx0Zm9ybTogQWJzdHJhY3RDb250cm9sLFxuXHRjb250cm9sS2V5czogU2V0PHN0cmluZz4sXG5cdGVtaXRFdmVudDogYm9vbGVhblxuKSA9PiB7XG5cdC8vIEliZW46IERlcGVuZGluZyBvbiB3aGV0aGVyIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIEZvcm1BcnJheS9Gb3JtQ29udHJvbCBvciBhIEZvcm1Hcm91cCwgd2UgaGF2ZSBkaWZmZXJlbnQgIGFuZCBoYW5kbGUgdGhlIGRpc2FibGUvZW5hYmxlIHN0YXRlXG5cdGlmICghZm9ybVsnY29udHJvbHMnXSB8fCBBcnJheS5pc0FycmF5KGZvcm1bJ2NvbnRyb2xzJ10pKSB7XG5cdFx0aGFuZGxlRGlzYWJsZUZvcm1Db250cm9sT2ZGb3JtQXJyYXkoZm9ybSwgY29udHJvbEtleXMsIGVtaXRFdmVudCk7XG5cdH0gZWxzZSB7XG5cdFx0aGFuZGxlRGlzYWJsZUZvcm1Hcm91cChmb3JtIGFzIEZvcm1Hcm91cCwgY29udHJvbEtleXMsIGVtaXRFdmVudCk7XG5cdH1cbn07XG5cbi8qKlxuICogTWFya3MgYSBmb3JtIGFuZCBhbGwgdGhlIGZvcm0tYWNjZXNzb3JzIHRoaXMgZm9ybSBpcyBiYXNlZCBvbiBhcyBkaXJ0eVxuICpcbiAqIEBwYXJhbSBmb3JtIC0gVGhlIGZvcm0gd2Ugd2lzaCB0byBtYXJrIGFzIGRpcnR5XG4gKiBAcGFyYW0gYWNjZXNzb3JzIC0gQW4gYXJyYXkgb2YgYWxsIHRoZSBhY2Nlc3NvcnMgd2Ugd2lzaCB0byBtYXJrIGFzIGRpcnR5XG4gKiBAcGFyYW0gb3B0aW9ucyAtIEZvcm0gc3RhdGUgb3B0aW9ucyB3ZSB3aXNoIHRvIHByb3ZpZGVcbiAqL1xuZXhwb3J0IGNvbnN0IGhhbmRsZUZvcm1BY2Nlc3Nvck1hcmtBc0RpcnR5ID0gKFxuXHRmb3JtOiBBYnN0cmFjdENvbnRyb2wsXG5cdGFjY2Vzc29yczogKEZvcm1BY2Nlc3NvciB8IERhdGFGb3JtQWNjZXNzb3IpW10sXG5cdG9wdGlvbnM6IEZvcm1TdGF0ZU9wdGlvbnNFbnRpdHkgPSB7fVxuKSA9PiB7XG5cdC8vIEliZW46IElmIHRoZSBjb250cm9sIGhhcyBjaGlsZCBjb250cm9scywgcmVjdXJzaXZlbHkgbWFyayB0aGVtIGFzIGRpcnR5XG5cdGlmIChmb3JtWydjb250cm9scyddKSB7XG5cdFx0bWFya0FsbEFzRGlydHkoZm9ybVsnY29udHJvbHMnXSwgb3B0aW9ucyk7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gSWJlbiA6IE1hcmsgdGhlIGZvcm0gYXMgZGlydHlcblx0XHRmb3JtLm1hcmtBc0RpcnR5KG9wdGlvbnMpO1xuXHR9XG5cblx0Ly8gSWJlbjogTG9vcCBvdmVyIGVhY2ggZm9ybSBhY2Nlc3NvciBhbmQgY2FsbCB0aGUgbWFyayBhcyBkaXJ0eSBmdW5jdGlvbiwgc28gYWxsIHN1YnNlcXVlbnQgYWNjZXNzb3JzIGFyZSBhbHNvIG1hcmtlZCBhcyBkaXJ0eVxuXHRhY2Nlc3NvcnMuZm9yRWFjaCgoYWNjZXNzb3IpID0+IGFjY2Vzc29yLm1hcmtBc0RpcnR5KG9wdGlvbnMpKTtcbn07XG5cbi8qKlxuICogTWFya3MgYSBmb3JtIGFuZCBhbGwgdGhlIGZvcm0tYWNjZXNzb3JzIHRoaXMgZm9ybSBpcyBiYXNlZCBvbiBhcyB0b3VjaGVkXG4gKlxuICogQHBhcmFtIGZvcm0gLSBUaGUgZm9ybSB3ZSB3aXNoIHRvIG1hcmsgYXMgdG91Y2hlZFxuICogQHBhcmFtIGFjY2Vzc29ycyAtIEFuIGFycmF5IG9mIGFsbCB0aGUgYWNjZXNzb3JzIHdlIHdpc2ggdG8gbWFyayBhcyB0b3VjaGVkXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEZvcm0gc3RhdGUgb3B0aW9ucyB3ZSB3aXNoIHRvIHByb3ZpZGVcbiAqL1xuZXhwb3J0IGNvbnN0IGhhbmRsZUZvcm1BY2Nlc3Nvck1hcmtBc1RvdWNoZWQgPSAoXG5cdGZvcm06IEFic3RyYWN0Q29udHJvbCxcblx0YWNjZXNzb3JzOiAoRm9ybUFjY2Vzc29yIHwgRGF0YUZvcm1BY2Nlc3NvcilbXSxcblx0b3B0aW9uczogRm9ybVN0YXRlT3B0aW9uc0VudGl0eSA9IHt9XG4pID0+IHtcblx0Ly8gSWJlbjogTWFyayBhbGwgdGhlIGNvbnRyb2xzIGFuZCB0aGUgY2hpbGRyZW4gYXMgdG91Y2hlZFxuXHRmb3JtLm1hcmtBbGxBc1RvdWNoZWQoKTtcblxuXHQvLyBJYmVuOiBMb29wIG92ZXIgZWFjaCBmb3JtIGFjY2Vzc29yIGFuZCBjYWxsIHRoZSBtYXJrIGFzIHRvdWNoZWQgZnVuY3Rpb24sIHNvIGFsbCBzdWJzZXF1ZW50IGFjY2Vzc29ycyBhcmUgYWxzbyBtYXJrZWQgYXMgdG91Y2hlZFxuXHRhY2Nlc3NvcnMuZm9yRWFjaCgoYWNjZXNzb3IpID0+IGFjY2Vzc29yLm1hcmtBc1RvdWNoZWQob3B0aW9ucykpO1xufTtcblxuLyoqXG4gKiBNYXJrcyBhIGZvcm0gYW5kIGFsbCB0aGUgZm9ybS1hY2Nlc3NvcnMgdGhpcyBmb3JtIGlzIGJhc2VkIG9uIGFzIHByaXN0aW5lXG4gKlxuICogQHBhcmFtIGZvcm0gLSBUaGUgZm9ybSB3ZSB3aXNoIHRvIG1hcmsgYXMgcHJpc3RpbmVcbiAqIEBwYXJhbSBhY2Nlc3NvcnMgLSBBbiBhcnJheSBvZiBhbGwgdGhlIGFjY2Vzc29ycyB3ZSB3aXNoIHRvIG1hcmsgYXMgcHJpc3RpbmVcbiAqIEBwYXJhbSBvcHRpb25zIC0gRm9ybSBzdGF0ZSBvcHRpb25zIHdlIHdpc2ggdG8gcHJvdmlkZVxuICovXG5leHBvcnQgY29uc3QgaGFuZGxlRm9ybUFjY2Vzc29yTWFya0FzUHJpc3RpbmUgPSAoXG5cdGZvcm06IEFic3RyYWN0Q29udHJvbCxcblx0YWNjZXNzb3JzOiAoRm9ybUFjY2Vzc29yIHwgRGF0YUZvcm1BY2Nlc3NvcilbXSxcblx0b3B0aW9uczogRm9ybVN0YXRlT3B0aW9uc0VudGl0eSA9IHt9XG4pID0+IHtcblx0Ly8gSWJlbjogTWFyayBhbGwgdGhlIGNvbnRyb2xzIGFuZCB0aGUgY2hpbGRyZW4gYXMgdG91Y2hlZFxuXHRmb3JtLm1hcmtBc1ByaXN0aW5lKCk7XG5cblx0Ly8gSWJlbjogTG9vcCBvdmVyIGVhY2ggZm9ybSBhY2Nlc3NvciBhbmQgY2FsbCB0aGUgbWFyayBhcyB0b3VjaGVkIGZ1bmN0aW9uLCBzbyBhbGwgc3Vic2VxdWVudCBhY2Nlc3NvcnMgYXJlIGFsc28gbWFya2VkIGFzIHRvdWNoZWRcblx0YWNjZXNzb3JzLmZvckVhY2goKGFjY2Vzc29yKSA9PiBhY2Nlc3Nvci5tYXJrQXNQcmlzdGluZShvcHRpb25zKSk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgYSBmb3JtIGFuZCBhbGwgdGhlIGZvcm0tYWNjZXNzb3JzIHRoaXMgZm9ybSBpXG4gKlxuICogQHBhcmFtIGZvcm0gLSBUaGUgZm9ybSB3ZSB3aXNoIHRvIHVwZGF0ZSB0aGUgdmFsdWUgYW5kIHZhbGlkaXR5IG9mXG4gKiBAcGFyYW0gYWNjZXNzb3JzIC0gQW4gYXJyYXkgb2YgYWxsIHRoZSBhY2Nlc3NvcnMgd2Ugd2lzaCB0byB1cGRhdGUgdGhlIHZhbHVlIGFuZCB2YWxpZGl0eSBvZlxuICogQHBhcmFtIG9wdGlvbnMgLSBGb3JtIHN0YXRlIG9wdGlvbnMgd2Ugd2lzaCB0byBwcm92aWRlXG4gKi9cbmV4cG9ydCBjb25zdCBoYW5kbGVGb3JtQWNjZXNzb3JVcGRhdGVWYWx1ZUFuZFZhbGlkaXR5ID0gKFxuXHRmb3JtOiBBYnN0cmFjdENvbnRyb2wsXG5cdGFjY2Vzc29yczogKEZvcm1BY2Nlc3NvciB8IERhdGFGb3JtQWNjZXNzb3IpW10sXG5cdG9wdGlvbnM6IEZvcm1TdGF0ZU9wdGlvbnNFbnRpdHkgPSB7fVxuKSA9PiB7XG5cdC8vIEliZW46IFVwZGF0ZSB0aGUgdmFsdWUgYW5kIHZhbGlkaXR5IG9mIHRoZSBmb3JtXG5cdHVwZGF0ZUFsbFZhbHVlQW5kVmFsaWRpdHkoZm9ybSwgb3B0aW9ucyk7XG5cblx0Ly8gSWJlbjogTG9vcCBvdmVyIGVhY2ggZm9ybSBhY2Nlc3NvciBhbmQgY2FsbCB0aGUgdXBkYXRlVmFsdWVBbmRWYWxpZGl0eSBmdW5jdGlvbiwgc28gYWxsIHN1YnNlcXVlbnQgYWNjZXNzb3JzIGFyZSBhbHNvIHVwZGF0ZWRcblx0YWNjZXNzb3JzLmZvckVhY2goKGFjY2Vzc29yKSA9PiBhY2Nlc3Nvci51cGRhdGVBbGxWYWx1ZUFuZFZhbGlkaXR5KG9wdGlvbnMpKTtcbn07XG4iXX0=","/**\n * Recursively checks if a form and its possible children have an error\n *\n * @param  control - The provided abstract control\n */\nexport const hasErrors = (control) => {\n    // Iben: If the form has no children we just return the state of the current form\n    if (!control['controls']) {\n        return control.invalid;\n    }\n    // Iben: If the form has children, we check if some of the child controls have errors\n    const controls = control['controls'];\n    return (Array.isArray(controls) ? controls : Object.values(controls)).some((control) => hasErrors(control));\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFzLWVycm9ycy51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2Zvcm1zL3NyYy9saWIvdXRpbHMvaGFzLWVycm9ycy9oYXMtZXJyb3JzLnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUE7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxDQUFDLE9BQXdCLEVBQVcsRUFBRTtJQUM5RCxpRkFBaUY7SUFDakYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1FBQzFCLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQztJQUN4QixDQUFDO0lBRUQscUZBQXFGO0lBQ3JGLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUVyQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FDdEYsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUNsQixDQUFDO0FBQ0gsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG4vKipcbiAqIFJlY3Vyc2l2ZWx5IGNoZWNrcyBpZiBhIGZvcm0gYW5kIGl0cyBwb3NzaWJsZSBjaGlsZHJlbiBoYXZlIGFuIGVycm9yXG4gKlxuICogQHBhcmFtICBjb250cm9sIC0gVGhlIHByb3ZpZGVkIGFic3RyYWN0IGNvbnRyb2xcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc0Vycm9ycyA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBib29sZWFuID0+IHtcblx0Ly8gSWJlbjogSWYgdGhlIGZvcm0gaGFzIG5vIGNoaWxkcmVuIHdlIGp1c3QgcmV0dXJuIHRoZSBzdGF0ZSBvZiB0aGUgY3VycmVudCBmb3JtXG5cdGlmICghY29udHJvbFsnY29udHJvbHMnXSkge1xuXHRcdHJldHVybiBjb250cm9sLmludmFsaWQ7XG5cdH1cblxuXHQvLyBJYmVuOiBJZiB0aGUgZm9ybSBoYXMgY2hpbGRyZW4sIHdlIGNoZWNrIGlmIHNvbWUgb2YgdGhlIGNoaWxkIGNvbnRyb2xzIGhhdmUgZXJyb3JzXG5cdGNvbnN0IGNvbnRyb2xzID0gY29udHJvbFsnY29udHJvbHMnXTtcblxuXHRyZXR1cm4gKEFycmF5LmlzQXJyYXkoY29udHJvbHMpID8gY29udHJvbHMgOiBPYmplY3QudmFsdWVzKGNvbnRyb2xzKSkuc29tZSgoY29udHJvbCkgPT5cblx0XHRoYXNFcnJvcnMoY29udHJvbClcblx0KTtcbn07XG4iXX0=","import { BehaviorSubject } from 'rxjs';\n/**\n * Listen to the touched event of a control\n *\n * @param control - An AbstractControl\n */\nexport const touchedEventListener = (control) => {\n    // Iben: Grab the current markAsTouched and UnTouched methods\n    const markAsTouched = control.markAsTouched;\n    const markAsUnTouched = control.markAsUntouched;\n    // Iben: Set a subject with the current touched state\n    const touchedSubject = new BehaviorSubject(control.touched);\n    // Iben: Overwrite the existing functions and emit the touched state\n    control.markAsTouched = (options) => {\n        touchedSubject.next(true);\n        markAsTouched.bind(control)(options);\n    };\n    control.markAsUntouched = (options) => {\n        touchedSubject.next(false);\n        markAsUnTouched.bind(control)(options);\n    };\n    // Iben: Return the touched state\n    return touchedSubject.asObservable();\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG91Y2hlZC1ldmVudC1saXN0ZW5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9mb3Jtcy9zcmMvbGliL3V0aWxzL3RvdWNoZWQtZXZlbnQtbGlzdGVuZXIvdG91Y2hlZC1ldmVudC1saXN0ZW5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBRW5EOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLE9BQXdCLEVBQXVCLEVBQUU7SUFDckYsNkRBQTZEO0lBQzdELE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUM7SUFDNUMsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQztJQUVoRCxxREFBcUQ7SUFDckQsTUFBTSxjQUFjLEdBQUcsSUFBSSxlQUFlLENBQVUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRXJFLG9FQUFvRTtJQUNwRSxPQUFPLENBQUMsYUFBYSxHQUFHLENBQUMsT0FBK0IsRUFBRSxFQUFFO1FBQzNELGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUIsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN0QyxDQUFDLENBQUM7SUFFRixPQUFPLENBQUMsZUFBZSxHQUFHLENBQUMsT0FBK0IsRUFBRSxFQUFFO1FBQzdELGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0IsZUFBZSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN4QyxDQUFDLENBQUM7SUFFRixpQ0FBaUM7SUFDakMsT0FBTyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDdEMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbi8qKlxuICogTGlzdGVuIHRvIHRoZSB0b3VjaGVkIGV2ZW50IG9mIGEgY29udHJvbFxuICpcbiAqIEBwYXJhbSBjb250cm9sIC0gQW4gQWJzdHJhY3RDb250cm9sXG4gKi9cbmV4cG9ydCBjb25zdCB0b3VjaGVkRXZlbnRMaXN0ZW5lciA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0+IHtcblx0Ly8gSWJlbjogR3JhYiB0aGUgY3VycmVudCBtYXJrQXNUb3VjaGVkIGFuZCBVblRvdWNoZWQgbWV0aG9kc1xuXHRjb25zdCBtYXJrQXNUb3VjaGVkID0gY29udHJvbC5tYXJrQXNUb3VjaGVkO1xuXHRjb25zdCBtYXJrQXNVblRvdWNoZWQgPSBjb250cm9sLm1hcmtBc1VudG91Y2hlZDtcblxuXHQvLyBJYmVuOiBTZXQgYSBzdWJqZWN0IHdpdGggdGhlIGN1cnJlbnQgdG91Y2hlZCBzdGF0ZVxuXHRjb25zdCB0b3VjaGVkU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oY29udHJvbC50b3VjaGVkKTtcblxuXHQvLyBJYmVuOiBPdmVyd3JpdGUgdGhlIGV4aXN0aW5nIGZ1bmN0aW9ucyBhbmQgZW1pdCB0aGUgdG91Y2hlZCBzdGF0ZVxuXHRjb250cm9sLm1hcmtBc1RvdWNoZWQgPSAob3B0aW9ucz86IHsgb25seVNlbGY6IGJvb2xlYW4gfSkgPT4ge1xuXHRcdHRvdWNoZWRTdWJqZWN0Lm5leHQodHJ1ZSk7XG5cdFx0bWFya0FzVG91Y2hlZC5iaW5kKGNvbnRyb2wpKG9wdGlvbnMpO1xuXHR9O1xuXG5cdGNvbnRyb2wubWFya0FzVW50b3VjaGVkID0gKG9wdGlvbnM/OiB7IG9ubHlTZWxmOiBib29sZWFuIH0pID0+IHtcblx0XHR0b3VjaGVkU3ViamVjdC5uZXh0KGZhbHNlKTtcblx0XHRtYXJrQXNVblRvdWNoZWQuYmluZChjb250cm9sKShvcHRpb25zKTtcblx0fTtcblxuXHQvLyBJYmVuOiBSZXR1cm4gdGhlIHRvdWNoZWQgc3RhdGVcblx0cmV0dXJuIHRvdWNoZWRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xufTtcbiJdfQ==","import { forwardRef } from '@angular/core';\nimport { NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { BaseFormAccessor } from '../../abstracts';\n/**\n * Generates the necessary providers for a (Data)FormAccessor.\n *\n * @param  component - The component class of the (Data)FormAccessor\n */\nexport const createAccessorProviders = (component) => {\n    return [\n        // Iben: Generate a provider for the control handling\n        {\n            provide: NG_VALUE_ACCESSOR,\n            useExisting: forwardRef(() => component),\n            multi: true,\n        },\n        // Iben: Generate a provider for the validation handling\n        {\n            provide: NG_VALIDATORS,\n            useExisting: forwardRef(() => component),\n            multi: true,\n        },\n        // Iben: Generate a provider for the FormContainer handling\n        {\n            provide: BaseFormAccessor,\n            useExisting: forwardRef(() => component),\n        },\n    ];\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXNzb3ItcHJvdmlkZXJzLnV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvZm9ybXMvc3JjL2xpYi91dGlscy9hY2Nlc3Nvci1wcm92aWRlcnMvYWNjZXNzb3ItcHJvdmlkZXJzLnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFZLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRCxPQUFPLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFXbkQ7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLENBQ3RDLFNBQThDLEVBQ2pDLEVBQUU7SUFDZixPQUFPO1FBQ04scURBQXFEO1FBQ3JEO1lBQ0MsT0FBTyxFQUFFLGlCQUFpQjtZQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQztZQUN4QyxLQUFLLEVBQUUsSUFBSTtTQUNYO1FBQ0Qsd0RBQXdEO1FBQ3hEO1lBQ0MsT0FBTyxFQUFFLGFBQWE7WUFDdEIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUM7WUFDeEMsS0FBSyxFQUFFLElBQUk7U0FDWDtRQUNELDJEQUEyRDtRQUMzRDtZQUNDLE9BQU8sRUFBRSxnQkFBZ0I7WUFDekIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUM7U0FDeEM7S0FDRCxDQUFDO0FBQ0gsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUHJvdmlkZXIsIGZvcndhcmRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5HX1ZBTElEQVRPUlMsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBCYXNlRm9ybUFjY2Vzc29yIH0gZnJvbSAnLi4vLi4vYWJzdHJhY3RzJztcblxuLyoqXG4gKiBBbiBpbnRlcmZhY2UgdG8gd3JhcCBhbiBjb21wb25lbnQgY2xhc3MgaW4uXG4gKlxuICogVGhpcyBpbnRlcmZhY2UgaXMgZm9yIGludGVybmFsIHVzZSwgYXMgYSBzaW1pbGFyIG9uZSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgQ0RLLCBidXQgd2UgZG9uJ3Qgd2FudCB0byBjcmVhdGUgYSBkZXBlbmRlbmN5IG9uIHRoYXQgZm9yIHRoaXMgcGFja2FnZS5cbiAqL1xuaW50ZXJmYWNlIENvbXBvbmVudFR5cGVXcmFwcGVyPENvbXBvbmVudFR5cGU+IHtcblx0bmV3ICguLi5hcmdzOiBhbnlbXSk6IENvbXBvbmVudFR5cGU7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBuZWNlc3NhcnkgcHJvdmlkZXJzIGZvciBhIChEYXRhKUZvcm1BY2Nlc3Nvci5cbiAqXG4gKiBAcGFyYW0gIGNvbXBvbmVudCAtIFRoZSBjb21wb25lbnQgY2xhc3Mgb2YgdGhlIChEYXRhKUZvcm1BY2Nlc3NvclxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlQWNjZXNzb3JQcm92aWRlcnMgPSA8Q29tcG9uZW50VHlwZT4oXG5cdGNvbXBvbmVudDogQ29tcG9uZW50VHlwZVdyYXBwZXI8Q29tcG9uZW50VHlwZT5cbik6IFByb3ZpZGVyW10gPT4ge1xuXHRyZXR1cm4gW1xuXHRcdC8vIEliZW46IEdlbmVyYXRlIGEgcHJvdmlkZXIgZm9yIHRoZSBjb250cm9sIGhhbmRsaW5nXG5cdFx0e1xuXHRcdFx0cHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG5cdFx0XHR1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBjb21wb25lbnQpLFxuXHRcdFx0bXVsdGk6IHRydWUsXG5cdFx0fSxcblx0XHQvLyBJYmVuOiBHZW5lcmF0ZSBhIHByb3ZpZGVyIGZvciB0aGUgdmFsaWRhdGlvbiBoYW5kbGluZ1xuXHRcdHtcblx0XHRcdHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG5cdFx0XHR1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBjb21wb25lbnQpLFxuXHRcdFx0bXVsdGk6IHRydWUsXG5cdFx0fSxcblx0XHQvLyBJYmVuOiBHZW5lcmF0ZSBhIHByb3ZpZGVyIGZvciB0aGUgRm9ybUNvbnRhaW5lciBoYW5kbGluZ1xuXHRcdHtcblx0XHRcdHByb3ZpZGU6IEJhc2VGb3JtQWNjZXNzb3IsXG5cdFx0XHR1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBjb21wb25lbnQpLFxuXHRcdH0sXG5cdF07XG59O1xuIl19","import { ChangeDetectorRef, Directive, Injector, Input, Output, ViewChildren, inject, } from '@angular/core';\nimport { NgControl, } from '@angular/forms';\nimport { BehaviorSubject, Subject, filter, takeUntil, tap } from 'rxjs';\nimport { BaseFormAccessor } from '../base-form/base-form.accessor';\nimport { handleFormAccessorControlDisabling, handleFormAccessorMarkAsDirty, handleFormAccessorMarkAsPristine, handleFormAccessorMarkAsTouched, handleFormAccessorUpdateValueAndValidity, hasErrors, } from '../../utils';\nimport * as i0 from \"@angular/core\";\nexport class NgxFormsControlValueAccessor {\n    /**\n     * Keys of the fields we wish to disable.\n     * By default this will emit a valueChanges, this can be overwritten by the emitValueWhenDisableFieldsUsingInput in the Accessor\n     *\n     * @memberof FormAccessor\n     */\n    set disableFields(keys) {\n        // Iben: Early exit in case the keys are not provided\n        if (!keys) {\n            return;\n        }\n        // Iben: Setup a subject to track whether we're still disabling the fields\n        const disabling = new Subject();\n        // Iben: Add the keys to a set for more performant lookup and convert those to a string to not have Typescript issues later down the line\n        const controlKeys = new Set(keys);\n        // Iben: Check if we need to dispatch the disable or enable event\n        const emitEvent = this.emitValueWhenDisableFieldsUsingInput\n            ? this.emitValueWhenDisableFieldsUsingInput(keys)\n            : true;\n        // Iben: Listen to the initialized state of the form\n        this.initialized$\n            .pipe(filter(Boolean), tap(() => {\n            // TODO: Iben: Remove this setTimeout once we're in a Signal based component\n            setTimeout(() => {\n                // Iben: Handle the disabling of the fields\n                handleFormAccessorControlDisabling(this.form, controlKeys, emitEvent);\n            });\n            // Iben: Set the disabling subject so that we can complete this subscription\n            disabling.next(undefined);\n            disabling.complete();\n        }), takeUntil(disabling))\n            .subscribe();\n    }\n    constructor() {\n        /**\n         *  The Injector needed in the constructor\n         */\n        this.injector = inject(Injector);\n        /**\n         *  The ChangeDetector reference\n         */\n        this.cdRef = inject(ChangeDetectorRef);\n        /**\n         * A subject to hold the parent control\n         */\n        this.parentControlSubject$ = new Subject();\n        /**\n         * A reference to the control tied to this control value accessor\n         */\n        this.parentControl$ = this.parentControlSubject$.pipe(filter(Boolean));\n        /**\n         * Whether the first setDisable has run\n         */\n        this.initialSetDisableHasRun = false;\n        /**\n         * On destroy flow handler\n         */\n        this.destroy$ = new Subject();\n        /**\n         * Subject to check whether the form is initialized\n         */\n        this.initializedSubject$ = new BehaviorSubject(false);\n        /**\n         * Whether we want to skip the first setDisable (https://github.com/angular/angular/pull/47576).\n         * By default, this is true\n         */\n        this.skipInitialSetDisable = true;\n        /**\n         * Stream to know whether the form has been initialized\n         */\n        this.initialized$ = this.initializedSubject$.asObservable();\n        /**\n         * Sets up the ControlValueAccessor connectors\n         */\n        this.onTouch = () => { }; // eslint-disable-line @typescript-eslint/no-unsafe-function-type\n        this.onChange = (_) => { }; // eslint-disable-line @typescript-eslint/no-unsafe-function-type\n        // Iben: Use setTimeOut to avoid the circular dependency issue\n        setTimeout(() => {\n            try {\n                const parentControl = this.injector.get(NgControl);\n                // Iben: If for some reason we can't find the control or the ngControl, early exit and throw an error\n                if (!parentControl?.control) {\n                    console.error('NgxForms: No control was found after initializing. Check if a control was assigned to the FormAccessor.');\n                    return;\n                }\n                this.parentControlSubject$.next(parentControl.control);\n                // Iben: Grab the control from the parent container\n                const control = parentControl.control;\n                // Iben: Setup the markAsTouched flow\n                // Iben: Keep a reference to the original `markAsTouched` handler.\n                const markAsTouched = control.markAsTouched.bind(control);\n                // Iben: Override the `markAsTouched` handler with our own.\n                control.markAsTouched = (options) => {\n                    // Iben: If the control is already marked as touched, we early exit\n                    if (control.touched) {\n                        return;\n                    }\n                    // Iben: Invoke the original `markAsTouchedHandler`.\n                    markAsTouched(options);\n                    // Iben: If the onlySelf flag is set to true, we early exit\n                    if (options?.onlySelf) {\n                        return;\n                    }\n                    // Iben: Invoke the custom `markAsTouchedHandler`.\n                    this.markAsTouched(options);\n                };\n                // Iben: Setup the markAsDirty flow\n                // Iben: Keep a reference to the original `markAsDirty` handler.\n                const markAsDirty = control.markAsDirty.bind(control);\n                // Iben: Override the `markAsDirty` handler with our own.\n                control.markAsDirty = (options) => {\n                    // Iben: If the control is already marked as dirty, we early exit\n                    if (control.dirty) {\n                        return;\n                    }\n                    // Iben: Invoke the original `markAsDirtyHandler`.\n                    markAsDirty(options);\n                    // Iben: If the onlySelf flag is set to true, we early exit\n                    if (options?.onlySelf) {\n                        return;\n                    }\n                    // Iben: Invoke the custom `markAsDirtyHandler`.\n                    this.markAsDirty(options);\n                };\n                // Iben: Setup the markAsPristine flow\n                // Iben: Keep a reference to the original `markAsPristine` handler.\n                const markAsPristine = control.markAsPristine.bind(control);\n                // Iben: Override the `markAsPristine` handler with our own.\n                control.markAsPristine = (options) => {\n                    // Iben: If the control is already marked as pristine, we early exit\n                    if (control.pristine) {\n                        return;\n                    }\n                    // Iben: Invoke the original `markAsPristineHandler`.\n                    markAsPristine(options);\n                    // Iben: If the onlySelf flag is set to true, we early exit\n                    if (options?.onlySelf) {\n                        return;\n                    }\n                    // Iben: Invoke the custom `markAsPristineHandler`.\n                    this.markAsPristine(options);\n                };\n            }\n            catch (error) {\n                // eslint-disable-line unused-imports/no-unused-vars\n                console.warn('NgxForms: No parent control was found while trying to set up the form accessor.');\n            }\n        });\n    }\n    registerOnChange(fn) {\n        this.onChange = fn;\n    }\n    registerOnTouched(fn) {\n        this.onTouch = fn;\n    }\n    /**\n     * Writes value to the inner form\n     *\n     * @param value - Value to patch in the inner form\n     */\n    writeValue(value) {\n        // Iben: Early exit in case the form was not found\n        if (!this.form) {\n            console.error('NgxForms: No form was found when trying to write a value. This error can occur when overwriting the ngOnInit without invoking super.OnInit().');\n            return;\n        }\n        // Iben: Reset the current form without emitEvent to not trigger the valueChanges\n        this.form.reset(undefined, { emitEvent: false });\n        // Iben: Patch the current form with the new value without emitEvent to not trigger the valueChanges\n        if (value !== undefined && value !== null) {\n            this.form.patchValue(this.onWriteValueMapper ? this.onWriteValueMapper(value) : value, {\n                emitEvent: false,\n            });\n        }\n        // Iben: Validate the current value\n        this.validate();\n        // Iben: Detect changes so the changes are visible in the dom\n        this.cdRef.detectChanges();\n    }\n    /**\n     * Mark all controls of the form as touched\n     */\n    markAsTouched(options = {}) {\n        handleFormAccessorMarkAsTouched(this.form, this.accessors?.toArray() || [], options);\n        // Iben: Detect changes so the changes are visible in the dom\n        this.cdRef.detectChanges();\n    }\n    /**\n     * Mark all controls of the form as dirty\n     */\n    markAsDirty(options = {}) {\n        handleFormAccessorMarkAsDirty(this.form, this.accessors?.toArray() || [], options);\n        // Iben: Detect changes so the changes are visible in the dom\n        this.cdRef.detectChanges();\n    }\n    /**\n     * Mark all controls of the form as pristine\n     */\n    markAsPristine(options = {}) {\n        handleFormAccessorMarkAsPristine(this.form, this.accessors?.toArray() || [], options);\n        // Iben: Detect changes so the changes are visible in the dom\n        this.cdRef.detectChanges();\n    }\n    /**\n     * Update the value and validity of the provided form\n     */\n    updateAllValueAndValidity(options) {\n        handleFormAccessorUpdateValueAndValidity(this.form, this.accessors?.toArray() || [], options);\n        // Iben: Detect changes so the changes are visible in the dom\n        this.cdRef.detectChanges();\n    }\n    /**\n     * Validates the inner form\n     */\n    validate() {\n        // Iben: If the form itself is invalid, we return the invalidForm: true right away\n        if (this.form.invalid) {\n            return { invalidForm: true };\n        }\n        // Iben: In case the form is invalid, we check if the child controls are possibly invalid\n        return hasErrors(this.form) ? { invalidForm: true } : null;\n    }\n    /**\n     * Disables/enables the inner form based on the passed value\n     *\n     * @param isDisabled - Whether or not the form should be disabled\n     */\n    setDisabledState(isDisabled) {\n        // Iben: Skip the initial setDisabled, as this messes up our form approach.\n        // https://github.com/angular/angular/pull/47576\n        if (this.skipInitialSetDisable && !this.initialSetDisableHasRun) {\n            this.initialSetDisableHasRun = true;\n            return;\n        }\n        if (isDisabled) {\n            this.form.disable({ emitEvent: false });\n        }\n        else {\n            this.form.enable({ emitEvent: false });\n        }\n        // Iben: Detect changes so the changes are visible in the dom\n        this.cdRef.detectChanges();\n    }\n    ngOnDestroy() {\n        this.destroy$.next(undefined);\n        this.destroy$.complete();\n    }\n    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.2.4\", ngImport: i0, type: NgxFormsControlValueAccessor, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n    static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.2.4\", type: NgxFormsControlValueAccessor, isStandalone: true, inputs: { disableFields: \"disableFields\", skipInitialSetDisable: \"skipInitialSetDisable\" }, outputs: { initialized$: \"initialized$\" }, viewQueries: [{ propertyName: \"accessors\", predicate: BaseFormAccessor, descendants: true }], ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.2.4\", ngImport: i0, type: NgxFormsControlValueAccessor, decorators: [{\n            type: Directive\n        }], ctorParameters: () => [], propDecorators: { accessors: [{\n                type: ViewChildren,\n                args: [BaseFormAccessor]\n            }], disableFields: [{\n                type: Input\n            }], skipInitialSetDisable: [{\n                type: Input\n            }], initialized$: [{\n                type: Output\n            }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLWNvbnRyb2wtdmFsdWUtYWNjZXNzb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvZm9ybXMvc3JjL2xpYi9hYnN0cmFjdHMvY3VzdG9tLWNvbnRyb2wtdmFsdWUtYWNjZXNzb3IvY3VzdG9tLWNvbnRyb2wtdmFsdWUtYWNjZXNzb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsUUFBUSxFQUNSLEtBQUssRUFFTCxNQUFNLEVBRU4sWUFBWSxFQUNaLE1BQU0sR0FDTixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBSU4sU0FBUyxHQUVULE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFFLGVBQWUsRUFBYyxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFcEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFHbkUsT0FBTyxFQUNOLGtDQUFrQyxFQUNsQyw2QkFBNkIsRUFDN0IsZ0NBQWdDLEVBQ2hDLCtCQUErQixFQUMvQix3Q0FBd0MsRUFDeEMsU0FBUyxHQUNULE1BQU0sYUFBYSxDQUFDOztBQUdyQixNQUFNLE9BQWdCLDRCQUE0QjtJQWlFakQ7Ozs7O09BS0c7SUFDSCxJQUFhLGFBQWEsQ0FBQyxJQUF3RDtRQUNsRixxREFBcUQ7UUFDckQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1gsT0FBTztRQUNSLENBQUM7UUFFRCwwRUFBMEU7UUFDMUUsTUFBTSxTQUFTLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUVoQyx5SUFBeUk7UUFDekksTUFBTSxXQUFXLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFbEMsaUVBQWlFO1FBQ2pFLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxv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QUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Q2hhbmdlRGV0ZWN0b3JSZWYsXG5cdERpcmVjdGl2ZSxcblx0SW5qZWN0b3IsXG5cdElucHV0LFxuXHRPbkRlc3Ryb3ksXG5cdE91dHB1dCxcblx0UXVlcnlMaXN0LFxuXHRWaWV3Q2hpbGRyZW4sXG5cdGluamVjdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuXHRBYnN0cmFjdENvbnRyb2wsXG5cdENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuXHRGb3JtQ29udHJvbCxcblx0TmdDb250cm9sLFxuXHRWYWxpZGF0aW9uRXJyb3JzLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgZmlsdGVyLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRm9ybUFjY2Vzc29yQ29udHJvbHNFbnRpdHksIEZvcm1TdGF0ZU9wdGlvbnNFbnRpdHkgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEJhc2VGb3JtQWNjZXNzb3IgfSBmcm9tICcuLi9iYXNlLWZvcm0vYmFzZS1mb3JtLmFjY2Vzc29yJztcbmltcG9ydCB7IERhdGFGb3JtQWNjZXNzb3IgfSBmcm9tICcuLi9kYXRhLWZvcm0vZGF0YS1mb3JtLmFjY2Vzc29yJztcbmltcG9ydCB7IEZvcm1BY2Nlc3NvciB9IGZyb20gJy4uL2Zvcm0vZm9ybS5hY2Nlc3Nvcic7XG5pbXBvcnQge1xuXHRoYW5kbGVGb3JtQWNjZXNzb3JDb250cm9sRGlzYWJsaW5nLFxuXHRoYW5kbGVGb3JtQWNjZXNzb3JNYXJrQXNEaXJ0eSxcblx0aGFuZGxlRm9ybUFjY2Vzc29yTWFya0FzUHJpc3RpbmUsXG5cdGhhbmRsZUZvcm1BY2Nlc3Nvck1hcmtBc1RvdWNoZWQsXG5cdGhhbmRsZUZvcm1BY2Nlc3NvclVwZGF0ZVZhbHVlQW5kVmFsaWRpdHksXG5cdGhhc0Vycm9ycyxcbn0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBOZ3hGb3Jtc0NvbnRyb2xWYWx1ZUFjY2Vzc29yPFxuXHRcdERhdGFUeXBlID0gdW5rbm93bixcblx0XHRGb3JtQWNjZXNzb3JGb3JtVHlwZSBleHRlbmRzIEFic3RyYWN0Q29udHJvbCA9IEZvcm1Db250cm9sLFxuXHRcdEZvcm1WYWx1ZVR5cGUgPSBEYXRhVHlwZSxcblx0PlxuXHRpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkRlc3Ryb3lcbntcblx0LyoqXG5cdCAqICBUaGUgSW5qZWN0b3IgbmVlZGVkIGluIHRoZSBjb25zdHJ1Y3RvclxuXHQgKi9cblx0cHJpdmF0ZSByZWFkb25seSBpbmplY3RvcjogSW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuXG5cdC8qKlxuXHQgKiAgVGhlIENoYW5nZURldGVjdG9yIHJlZmVyZW5jZVxuXHQgKi9cblx0cHVibGljIHJlYWRvbmx5IGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZiA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cblx0LyoqXG5cdCAqIEEgc3ViamVjdCB0byBob2xkIHRoZSBwYXJlbnQgY29udHJvbFxuXHQgKi9cblx0cHJpdmF0ZSByZWFkb25seSBwYXJlbnRDb250cm9sU3ViamVjdCQ6IFN1YmplY3Q8QWJzdHJhY3RDb250cm9sPiA9XG5cdFx0bmV3IFN1YmplY3Q8QWJzdHJhY3RDb250cm9sPigpO1xuXG5cdC8qKlxuXHQgKiBBIHJlZmVyZW5jZSB0byB0aGUgY29udHJvbCB0aWVkIHRvIHRoaXMgY29udHJvbCB2YWx1ZSBhY2Nlc3NvclxuXHQgKi9cblx0cHJvdGVjdGVkIHJlYWRvbmx5IHBhcmVudENvbnRyb2wkOiBPYnNlcnZhYmxlPEFic3RyYWN0Q29udHJvbD4gPVxuXHRcdHRoaXMucGFyZW50Q29udHJvbFN1YmplY3QkLnBpcGUoZmlsdGVyKEJvb2xlYW4pKTtcblxuXHQvKipcblx0ICogSW5uZXIgZm9ybSB0byB3cml0ZSB0b1xuXHQgKi9cblx0cHVibGljIGZvcm06IEZvcm1BY2Nlc3NvckZvcm1UeXBlO1xuXG5cdC8qKlxuXHQgKiBXaGV0aGVyIHRoZSBmaXJzdCBzZXREaXNhYmxlIGhhcyBydW5cblx0ICovXG5cdHByb3RlY3RlZCBpbml0aWFsU2V0RGlzYWJsZUhhc1J1bjogYm9vbGVhbiA9IGZhbHNlO1xuXG5cdC8qKlxuXHQgKiBPbiBkZXN0cm95IGZsb3cgaGFuZGxlclxuXHQgKi9cblx0cHJvdGVjdGVkIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcblxuXHQvKipcblx0ICogU3ViamVjdCB0byBjaGVjayB3aGV0aGVyIHRoZSBmb3JtIGlzIGluaXRpYWxpemVkXG5cdCAqL1xuXHRwcm90ZWN0ZWQgcmVhZG9ubHkgaW5pdGlhbGl6ZWRTdWJqZWN0JDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihcblx0XHRmYWxzZVxuXHQpO1xuXG5cdC8qKlxuXHQgKiBXaGV0aGVyIG9yIG5vdCB3ZSB3YW50IHRvIGVtaXQgYSB2YWx1ZSB3aGVuIHdlIHVzZSB0aGUgZGlzYWJsZUZpZWxkcywgYnkgZGVmYXVsdCB0aGlzIHdpbGwgZW1pdFxuXHQgKlxuXHQgKiBAcGFyYW0gIGtleXMgLSBLZXlzIHdlJ3JlIGFib3V0IHRvIGRpc2FibGVcblx0ICovXG5cdHByb3RlY3RlZCBlbWl0VmFsdWVXaGVuRGlzYWJsZUZpZWxkc1VzaW5nSW5wdXQ/KFxuXHRcdGtleXM6IEZvcm1BY2Nlc3NvckNvbnRyb2xzRW50aXR5PEZvcm1BY2Nlc3NvckZvcm1UeXBlPltdXG5cdCk6IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIEEgbGlzdCBvZiBhbGwgRGF0YUZvcm1BY2Nlc3NvcnMgZW4gRm9ybUFjY2Vzc29ycyBvZiB0aGlzIGNvbXBvbmVudFxuXHQgKi9cblx0QFZpZXdDaGlsZHJlbihCYXNlRm9ybUFjY2Vzc29yKSBhY2Nlc3NvcnM6IFF1ZXJ5TGlzdDxEYXRhRm9ybUFjY2Vzc29yIHwgRm9ybUFjY2Vzc29yPjtcblxuXHQvKipcblx0ICogS2V5cyBvZiB0aGUgZmllbGRzIHdlIHdpc2ggdG8gZGlzYWJsZS5cblx0ICogQnkgZGVmYXVsdCB0aGlzIHdpbGwgZW1pdCBhIHZhbHVlQ2hhbmdlcywgdGhpcyBjYW4gYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIGVtaXRWYWx1ZVdoZW5EaXNhYmxlRmllbGRzVXNpbmdJbnB1dCBpbiB0aGUgQWNjZXNzb3Jcblx0ICpcblx0ICogQG1lbWJlcm9mIEZvcm1BY2Nlc3NvclxuXHQgKi9cblx0QElucHV0KCkgc2V0IGRpc2FibGVGaWVsZHMoa2V5czogRm9ybUFjY2Vzc29yQ29udHJvbHNFbnRpdHk8Rm9ybUFjY2Vzc29yRm9ybVR5cGU+W10pIHtcblx0XHQvLyBJYmVuOiBFYXJseSBleGl0IGluIGNhc2UgdGhlIGtleXMgYXJlIG5vdCBwcm92aWRlZFxuXHRcdGlmICgha2V5cykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIEliZW46IFNldHVwIGEgc3ViamVjdCB0byB0cmFjayB3aGV0aGVyIHdlJ3JlIHN0aWxsIGRpc2FibGluZyB0aGUgZmllbGRzXG5cdFx0Y29uc3QgZGlzYWJsaW5nID0gbmV3IFN1YmplY3QoKTtcblxuXHRcdC8vIEliZW46IEFkZCB0aGUga2V5cyB0byBhIHNldCBmb3IgbW9yZSBwZXJmb3JtYW50IGxvb2t1cCBhbmQgY29udmVydCB0aG9zZSB0byBhIHN0cmluZyB0byBub3QgaGF2ZSBUeXBlc2NyaXB0IGlzc3VlcyBsYXRlciBkb3duIHRoZSBsaW5lXG5cdFx0Y29uc3QgY29udHJvbEtleXMgPSBuZXcgU2V0KGtleXMpO1xuXG5cdFx0Ly8gSWJlbjogQ2hlY2sgaWYgd2UgbmVlZCB0byBkaXNwYXRjaCB0aGUgZGlzYWJsZSBvciBlbmFibGUgZXZlbnRcblx0XHRjb25zdCBlbWl0RXZlbnQgPSB0aGlzLmVtaXRWYWx1ZVdoZW5EaXNhYmxlRmllbGRzVXNpbmdJbnB1dFxuXHRcdFx0PyB0aGlzLmVtaXRWYWx1ZVdoZW5EaXNhYmxlRmllbGRzVXNpbmdJbnB1dChrZXlzKVxuXHRcdFx0OiB0cnVlO1xuXG5cdFx0Ly8gSWJlbjogTGlzdGVuIHRvIHRoZSBpbml0aWFsaXplZCBzdGF0ZSBvZiB0aGUgZm9ybVxuXHRcdHRoaXMuaW5pdGlhbGl6ZWQkXG5cdFx0XHQucGlwZShcblx0XHRcdFx0ZmlsdGVyKEJvb2xlYW4pLFxuXHRcdFx0XHR0YXAoKCkgPT4ge1xuXHRcdFx0XHRcdC8vIFRPRE86IEliZW46IFJlbW92ZSB0aGlzIHNldFRpbWVvdXQgb25jZSB3ZSdyZSBpbiBhIFNpZ25hbCBiYXNlZCBjb21wb25lbnRcblx0XHRcdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0XHRcdC8vIEliZW46IEhhbmRsZSB0aGUgZGlzYWJsaW5nIG9mIHRoZSBmaWVsZHNcblx0XHRcdFx0XHRcdGhhbmRsZUZvcm1BY2Nlc3NvckNvbnRyb2xEaXNhYmxpbmcodGhpcy5mb3JtLCBjb250cm9sS2V5cywgZW1pdEV2ZW50KTtcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdC8vIEliZW46IFNldCB0aGUgZGlzYWJsaW5nIHN1YmplY3Qgc28gdGhhdCB3ZSBjYW4gY29tcGxldGUgdGhpcyBzdWJzY3JpcHRpb25cblx0XHRcdFx0XHRkaXNhYmxpbmcubmV4dCh1bmRlZmluZWQpO1xuXHRcdFx0XHRcdGRpc2FibGluZy5jb21wbGV0ZSgpO1xuXHRcdFx0XHR9KSxcblx0XHRcdFx0dGFrZVVudGlsKGRpc2FibGluZylcblx0XHRcdClcblx0XHRcdC5zdWJzY3JpYmUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaGV0aGVyIHdlIHdhbnQgdG8gc2tpcCB0aGUgZmlyc3Qgc2V0RGlzYWJsZSAoaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9wdWxsLzQ3NTc2KS5cblx0ICogQnkgZGVmYXVsdCwgdGhpcyBpcyB0cnVlXG5cdCAqL1xuXHRASW5wdXQoKSBwdWJsaWMgc2tpcEluaXRpYWxTZXREaXNhYmxlOiBib29sZWFuID0gdHJ1ZTtcblxuXHQvKipcblx0ICogU3RyZWFtIHRvIGtub3cgd2hldGhlciB0aGUgZm9ybSBoYXMgYmVlbiBpbml0aWFsaXplZFxuXHQgKi9cblx0QE91dHB1dCgpXG5cdHB1YmxpYyByZWFkb25seSBpbml0aWFsaXplZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLmluaXRpYWxpemVkU3ViamVjdCQuYXNPYnNlcnZhYmxlKCk7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0Ly8gSWJlbjogVXNlIHNldFRpbWVPdXQgdG8gYXZvaWQgdGhlIGNpcmN1bGFyIGRlcGVuZGVuY3kgaXNzdWVcblx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbnN0IHBhcmVudENvbnRyb2wgPSB0aGlzLmluamVjdG9yLmdldChOZ0NvbnRyb2wpO1xuXG5cdFx0XHRcdC8vIEliZW46IElmIGZvciBzb21lIHJlYXNvbiB3ZSBjYW4ndCBmaW5kIHRoZSBjb250cm9sIG9yIHRoZSBuZ0NvbnRyb2wsIGVhcmx5IGV4aXQgYW5kIHRocm93IGFuIGVycm9yXG5cdFx0XHRcdGlmICghcGFyZW50Q29udHJvbD8uY29udHJvbCkge1xuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoXG5cdFx0XHRcdFx0XHQnTmd4Rm9ybXM6IE5vIGNvbnRyb2wgd2FzIGZvdW5kIGFmdGVyIGluaXRpYWxpemluZy4gQ2hlY2sgaWYgYSBjb250cm9sIHdhcyBhc3NpZ25lZCB0byB0aGUgRm9ybUFjY2Vzc29yLidcblx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5wYXJlbnRDb250cm9sU3ViamVjdCQubmV4dChwYXJlbnRDb250cm9sLmNvbnRyb2wpO1xuXG5cdFx0XHRcdC8vIEliZW46IEdyYWIgdGhlIGNvbnRyb2wgZnJvbSB0aGUgcGFyZW50IGNvbnRhaW5lclxuXHRcdFx0XHRjb25zdCBjb250cm9sID0gcGFyZW50Q29udHJvbC5jb250cm9sO1xuXG5cdFx0XHRcdC8vIEliZW46IFNldHVwIHRoZSBtYXJrQXNUb3VjaGVkIGZsb3dcblx0XHRcdFx0Ly8gSWJlbjogS2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgb3JpZ2luYWwgYG1hcmtBc1RvdWNoZWRgIGhhbmRsZXIuXG5cdFx0XHRcdGNvbnN0IG1hcmtBc1RvdWNoZWQgPSBjb250cm9sLm1hcmtBc1RvdWNoZWQuYmluZChjb250cm9sKTtcblxuXHRcdFx0XHQvLyBJYmVuOiBPdmVycmlkZSB0aGUgYG1hcmtBc1RvdWNoZWRgIGhhbmRsZXIgd2l0aCBvdXIgb3duLlxuXHRcdFx0XHRjb250cm9sLm1hcmtBc1RvdWNoZWQgPSAob3B0aW9ucz86IEZvcm1TdGF0ZU9wdGlvbnNFbnRpdHkpID0+IHtcblx0XHRcdFx0XHQvLyBJYmVuOiBJZiB0aGUgY29udHJvbCBpcyBhbHJlYWR5IG1hcmtlZCBhcyB0b3VjaGVkLCB3ZSBlYXJseSBleGl0XG5cdFx0XHRcdFx0aWYgKGNvbnRyb2wudG91Y2hlZCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIEliZW46IEludm9rZSB0aGUgb3JpZ2luYWwgYG1hcmtBc1RvdWNoZWRIYW5kbGVyYC5cblx0XHRcdFx0XHRtYXJrQXNUb3VjaGVkKG9wdGlvbnMpO1xuXG5cdFx0XHRcdFx0Ly8gSWJlbjogSWYgdGhlIG9ubHlTZWxmIGZsYWcgaXMgc2V0IHRvIHRydWUsIHdlIGVhcmx5IGV4aXRcblx0XHRcdFx0XHRpZiAob3B0aW9ucz8ub25seVNlbGYpIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBJYmVuOiBJbnZva2UgdGhlIGN1c3RvbSBgbWFya0FzVG91Y2hlZEhhbmRsZXJgLlxuXHRcdFx0XHRcdHRoaXMubWFya0FzVG91Y2hlZChvcHRpb25zKTtcblx0XHRcdFx0fTtcblxuXHRcdFx0XHQvLyBJYmVuOiBTZXR1cCB0aGUgbWFya0FzRGlydHkgZmxvd1xuXHRcdFx0XHQvLyBJYmVuOiBLZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSBvcmlnaW5hbCBgbWFya0FzRGlydHlgIGhhbmRsZXIuXG5cdFx0XHRcdGNvbnN0IG1hcmtBc0RpcnR5ID0gY29udHJvbC5tYXJrQXNEaXJ0eS5iaW5kKGNvbnRyb2wpO1xuXG5cdFx0XHRcdC8vIEliZW46IE92ZXJyaWRlIHRoZSBgbWFya0FzRGlydHlgIGhhbmRsZXIgd2l0aCBvdXIgb3duLlxuXHRcdFx0XHRjb250cm9sLm1hcmtBc0RpcnR5ID0gKG9wdGlvbnM/OiBGb3JtU3RhdGVPcHRpb25zRW50aXR5KSA9PiB7XG5cdFx0XHRcdFx0Ly8gSWJlbjogSWYgdGhlIGNvbnRyb2wgaXMgYWxyZWFkeSBtYXJrZWQgYXMgZGlydHksIHdlIGVhcmx5IGV4aXRcblx0XHRcdFx0XHRpZiAoY29udHJvbC5kaXJ0eSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIEliZW46IEludm9rZSB0aGUgb3JpZ2luYWwgYG1hcmtBc0RpcnR5SGFuZGxlcmAuXG5cdFx0XHRcdFx0bWFya0FzRGlydHkob3B0aW9ucyk7XG5cblx0XHRcdFx0XHQvLyBJYmVuOiBJZiB0aGUgb25seVNlbGYgZmxhZyBpcyBzZXQgdG8gdHJ1ZSwgd2UgZWFybHkgZXhpdFxuXHRcdFx0XHRcdGlmIChvcHRpb25zPy5vbmx5U2VsZikge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIEliZW46IEludm9rZSB0aGUgY3VzdG9tIGBtYXJrQXNEaXJ0eUhhbmRsZXJgLlxuXHRcdFx0XHRcdHRoaXMubWFya0FzRGlydHkob3B0aW9ucyk7XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0Ly8gSWJlbjogU2V0dXAgdGhlIG1hcmtBc1ByaXN0aW5lIGZsb3dcblx0XHRcdFx0Ly8gSWJlbjogS2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgb3JpZ2luYWwgYG1hcmtBc1ByaXN0aW5lYCBoYW5kbGVyLlxuXHRcdFx0XHRjb25zdCBtYXJrQXNQcmlzdGluZSA9IGNvbnRyb2wubWFya0FzUHJpc3RpbmUuYmluZChjb250cm9sKTtcblxuXHRcdFx0XHQvLyBJYmVuOiBPdmVycmlkZSB0aGUgYG1hcmtBc1ByaXN0aW5lYCBoYW5kbGVyIHdpdGggb3VyIG93bi5cblx0XHRcdFx0Y29udHJvbC5tYXJrQXNQcmlzdGluZSA9IChvcHRpb25zPzogRm9ybVN0YXRlT3B0aW9uc0VudGl0eSkgPT4ge1xuXHRcdFx0XHRcdC8vIEliZW46IElmIHRoZSBjb250cm9sIGlzIGFscmVhZHkgbWFya2VkIGFzIHByaXN0aW5lLCB3ZSBlYXJseSBleGl0XG5cdFx0XHRcdFx0aWYgKGNvbnRyb2wucHJpc3RpbmUpIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBJYmVuOiBJbnZva2UgdGhlIG9yaWdpbmFsIGBtYXJrQXNQcmlzdGluZUhhbmRsZXJgLlxuXHRcdFx0XHRcdG1hcmtBc1ByaXN0aW5lKG9wdGlvbnMpO1xuXG5cdFx0XHRcdFx0Ly8gSWJlbjogSWYgdGhlIG9ubHlTZWxmIGZsYWcgaXMgc2V0IHRvIHRydWUsIHdlIGVhcmx5IGV4aXRcblx0XHRcdFx0XHRpZiAob3B0aW9ucz8ub25seVNlbGYpIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBJYmVuOiBJbnZva2UgdGhlIGN1c3RvbSBgbWFya0FzUHJpc3RpbmVIYW5kbGVyYC5cblx0XHRcdFx0XHR0aGlzLm1hcmtBc1ByaXN0aW5lKG9wdGlvbnMpO1xuXHRcdFx0XHR9O1xuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbGluZSB1bnVzZWQtaW1wb3J0cy9uby11bnVzZWQtdmFyc1xuXHRcdFx0XHRjb25zb2xlLndhcm4oXG5cdFx0XHRcdFx0J05neEZvcm1zOiBObyBwYXJlbnQgY29udHJvbCB3YXMgZm91bmQgd2hpbGUgdHJ5aW5nIHRvIHNldCB1cCB0aGUgZm9ybSBhY2Nlc3Nvci4nXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB1cCB0aGUgQ29udHJvbFZhbHVlQWNjZXNzb3IgY29ubmVjdG9yc1xuXHQgKi9cblx0cHVibGljIG9uVG91Y2g6IEZ1bmN0aW9uID0gKCkgPT4ge307IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1mdW5jdGlvbi10eXBlXG5cdHB1YmxpYyBvbkNoYW5nZTogRnVuY3Rpb24gPSAoXzogYW55KSA9PiB7fTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWZ1bmN0aW9uLXR5cGVcblxuXHRwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG5cdFx0dGhpcy5vbkNoYW5nZSA9IGZuO1xuXHR9XG5cblx0cHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcblx0XHR0aGlzLm9uVG91Y2ggPSBmbjtcblx0fVxuXG5cdC8qKlxuXHQgKiBXcml0ZXMgdmFsdWUgdG8gdGhlIGlubmVyIGZvcm1cblx0ICpcblx0ICogQHBhcmFtIHZhbHVlIC0gVmFsdWUgdG8gcGF0Y2ggaW4gdGhlIGlubmVyIGZvcm1cblx0ICovXG5cdHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBEYXRhVHlwZSB8IHVuZGVmaW5lZCB8IG51bGwpOiB2b2lkIHtcblx0XHQvLyBJYmVuOiBFYXJseSBleGl0IGluIGNhc2UgdGhlIGZvcm0gd2FzIG5vdCBmb3VuZFxuXHRcdGlmICghdGhpcy5mb3JtKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKFxuXHRcdFx0XHQnTmd4Rm9ybXM6IE5vIGZvcm0gd2FzIGZvdW5kIHdoZW4gdHJ5aW5nIHRvIHdyaXRlIGEgdmFsdWUuIFRoaXMgZXJyb3IgY2FuIG9jY3VyIHdoZW4gb3ZlcndyaXRpbmcgdGhlIG5nT25Jbml0IHdpdGhvdXQgaW52b2tpbmcgc3VwZXIuT25Jbml0KCkuJ1xuXHRcdFx0KTtcblxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIEliZW46IFJlc2V0IHRoZSBjdXJyZW50IGZvcm0gd2l0aG91dCBlbWl0RXZlbnQgdG8gbm90IHRyaWdnZXIgdGhlIHZhbHVlQ2hhbmdlc1xuXHRcdHRoaXMuZm9ybS5yZXNldCh1bmRlZmluZWQsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcblxuXHRcdC8vIEliZW46IFBhdGNoIHRoZSBjdXJyZW50IGZvcm0gd2l0aCB0aGUgbmV3IHZhbHVlIHdpdGhvdXQgZW1pdEV2ZW50IHRvIG5vdCB0cmlnZ2VyIHRoZSB2YWx1ZUNoYW5nZXNcblx0XHRpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuXHRcdFx0dGhpcy5mb3JtLnBhdGNoVmFsdWUodGhpcy5vbldyaXRlVmFsdWVNYXBwZXIgPyB0aGlzLm9uV3JpdGVWYWx1ZU1hcHBlcih2YWx1ZSkgOiB2YWx1ZSwge1xuXHRcdFx0XHRlbWl0RXZlbnQ6IGZhbHNlLFxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0Ly8gSWJlbjogVmFsaWRhdGUgdGhlIGN1cnJlbnQgdmFsdWVcblx0XHR0aGlzLnZhbGlkYXRlKCk7XG5cblx0XHQvLyBJYmVuOiBEZXRlY3QgY2hhbmdlcyBzbyB0aGUgY2hhbmdlcyBhcmUgdmlzaWJsZSBpbiB0aGUgZG9tXG5cdFx0dGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG5cdH1cblxuXHQvKipcblx0ICogTWFyayBhbGwgY29udHJvbHMgb2YgdGhlIGZvcm0gYXMgdG91Y2hlZFxuXHQgKi9cblx0cHVibGljIG1hcmtBc1RvdWNoZWQob3B0aW9uczogRm9ybVN0YXRlT3B0aW9uc0VudGl0eSA9IHt9KTogdm9pZCB7XG5cdFx0aGFuZGxlRm9ybUFjY2Vzc29yTWFya0FzVG91Y2hlZCh0aGlzLmZvcm0sIHRoaXMuYWNjZXNzb3JzPy50b0FycmF5KCkgfHwgW10sIG9wdGlvbnMpO1xuXG5cdFx0Ly8gSWJlbjogRGV0ZWN0IGNoYW5nZXMgc28gdGhlIGNoYW5nZXMgYXJlIHZpc2libGUgaW4gdGhlIGRvbVxuXHRcdHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1hcmsgYWxsIGNvbnRyb2xzIG9mIHRoZSBmb3JtIGFzIGRpcnR5XG5cdCAqL1xuXHRwdWJsaWMgbWFya0FzRGlydHkob3B0aW9uczogRm9ybVN0YXRlT3B0aW9uc0VudGl0eSA9IHt9KTogdm9pZCB7XG5cdFx0aGFuZGxlRm9ybUFjY2Vzc29yTWFya0FzRGlydHkodGhpcy5mb3JtLCB0aGlzLmFjY2Vzc29ycz8udG9BcnJheSgpIHx8IFtdLCBvcHRpb25zKTtcblxuXHRcdC8vIEliZW46IERldGVjdCBjaGFuZ2VzIHNvIHRoZSBjaGFuZ2VzIGFyZSB2aXNpYmxlIGluIHRoZSBkb21cblx0XHR0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNYXJrIGFsbCBjb250cm9scyBvZiB0aGUgZm9ybSBhcyBwcmlzdGluZVxuXHQgKi9cblx0cHVibGljIG1hcmtBc1ByaXN0aW5lKG9wdGlvbnM6IEZvcm1TdGF0ZU9wdGlvbnNFbnRpdHkgPSB7fSk6IHZvaWQge1xuXHRcdGhhbmRsZUZvcm1BY2Nlc3Nvck1hcmtBc1ByaXN0aW5lKHRoaXMuZm9ybSwgdGhpcy5hY2Nlc3NvcnM/LnRvQXJyYXkoKSB8fCBbXSwgb3B0aW9ucyk7XG5cblx0XHQvLyBJYmVuOiBEZXRlY3QgY2hhbmdlcyBzbyB0aGUgY2hhbmdlcyBhcmUgdmlzaWJsZSBpbiB0aGUgZG9tXG5cdFx0dGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG5cdH1cblxuXHQvKipcblx0ICogVXBkYXRlIHRoZSB2YWx1ZSBhbmQgdmFsaWRpdHkgb2YgdGhlIHByb3ZpZGVkIGZvcm1cblx0ICovXG5cdHB1YmxpYyB1cGRhdGVBbGxWYWx1ZUFuZFZhbGlkaXR5KG9wdGlvbnM6IEZvcm1TdGF0ZU9wdGlvbnNFbnRpdHkpOiB2b2lkIHtcblx0XHRoYW5kbGVGb3JtQWNjZXNzb3JVcGRhdGVWYWx1ZUFuZFZhbGlkaXR5KFxuXHRcdFx0dGhpcy5mb3JtLFxuXHRcdFx0dGhpcy5hY2Nlc3NvcnM/LnRvQXJyYXkoKSB8fCBbXSxcblx0XHRcdG9wdGlvbnNcblx0XHQpO1xuXG5cdFx0Ly8gSWJlbjogRGV0ZWN0IGNoYW5nZXMgc28gdGhlIGNoYW5nZXMgYXJlIHZpc2libGUgaW4gdGhlIGRvbVxuXHRcdHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFZhbGlkYXRlcyB0aGUgaW5uZXIgZm9ybVxuXHQgKi9cblx0cHVibGljIHZhbGlkYXRlKCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcblx0XHQvLyBJYmVuOiBJZiB0aGUgZm9ybSBpdHNlbGYgaXMgaW52YWxpZCwgd2UgcmV0dXJuIHRoZSBpbnZhbGlkRm9ybTogdHJ1ZSByaWdodCBhd2F5XG5cdFx0aWYgKHRoaXMuZm9ybS5pbnZhbGlkKSB7XG5cdFx0XHRyZXR1cm4geyBpbnZhbGlkRm9ybTogdHJ1ZSB9O1xuXHRcdH1cblxuXHRcdC8vIEliZW46IEluIGNhc2UgdGhlIGZvcm0gaXMgaW52YWxpZCwgd2UgY2hlY2sgaWYgdGhlIGNoaWxkIGNvbnRyb2xzIGFyZSBwb3NzaWJseSBpbnZhbGlkXG5cdFx0cmV0dXJuIGhhc0Vycm9ycyh0aGlzLmZvcm0pID8geyBpbnZhbGlkRm9ybTogdHJ1ZSB9IDogbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBEaXNhYmxlcy9lbmFibGVzIHRoZSBpbm5lciBmb3JtIGJhc2VkIG9uIHRoZSBwYXNzZWQgdmFsdWVcblx0ICpcblx0ICogQHBhcmFtIGlzRGlzYWJsZWQgLSBXaGV0aGVyIG9yIG5vdCB0aGUgZm9ybSBzaG91bGQgYmUgZGlzYWJsZWRcblx0ICovXG5cdHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pIHtcblx0XHQvLyBJYmVuOiBTa2lwIHRoZSBpbml0aWFsIHNldERpc2FibGVkLCBhcyB0aGlzIG1lc3NlcyB1cCBvdXIgZm9ybSBhcHByb2FjaC5cblx0XHQvLyBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL3B1bGwvNDc1NzZcblx0XHRpZiAodGhpcy5za2lwSW5pdGlhbFNldERpc2FibGUgJiYgIXRoaXMuaW5pdGlhbFNldERpc2FibGVIYXNSdW4pIHtcblx0XHRcdHRoaXMuaW5pdGlhbFNldERpc2FibGVIYXNSdW4gPSB0cnVlO1xuXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKGlzRGlzYWJsZWQpIHtcblx0XHRcdHRoaXMuZm9ybS5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5mb3JtLmVuYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG5cdFx0fVxuXG5cdFx0Ly8gSWJlbjogRGV0ZWN0IGNoYW5nZXMgc28gdGhlIGNoYW5nZXMgYXJlIHZpc2libGUgaW4gdGhlIGRvbVxuXHRcdHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE9wdGlvbmFsIG1ldGhvZCB0byBtYXAgdGhlIGlubmVyIGZvcm0gdmFsdWUgdG8gYW4gb3V0ZXIgZm9ybSBzcGVjaWZpYyBmb3JtYXRcblx0ICpcblx0ICogQHBhcmFtIHZhbHVlIC0gVmFsdWUgZnJvbSB0aGUgZm9ybVxuXHQgKi9cblx0cHVibGljIG9uQ2hhbmdlTWFwcGVyPyh2YWx1ZTogUGFydGlhbDxGb3JtVmFsdWVUeXBlPik6IERhdGFUeXBlO1xuXG5cdC8qKlxuXHQgKiBPcHRpb25hbCBtZXRob2QgdG8gbWFwIHRoZSBvdXRlciBmb3JtIHZhbHVlIHRvIGFuIGlubmVyIGZvcm0gc3BlY2lmaWMgZm9ybWF0XG5cdCAqXG5cdCAqIEBwYXJhbSB2YWx1ZSAtIFZhbHVlIGZyb20gdGhlIGZvcm1cblx0ICovXG5cdHB1YmxpYyBvbldyaXRlVmFsdWVNYXBwZXI/KHZhbHVlOiBEYXRhVHlwZSk6IEZvcm1WYWx1ZVR5cGU7XG5cblx0cHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuXHRcdHRoaXMuZGVzdHJveSQubmV4dCh1bmRlZmluZWQpO1xuXHRcdHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcblx0fVxufVxuIl19","import { Directive } from '@angular/core';\nimport { takeUntil, tap } from 'rxjs/operators';\nimport { NgxFormsControlValueAccessor } from '../custom-control-value-accessor';\nimport * as i0 from \"@angular/core\";\nexport class FormAccessor extends NgxFormsControlValueAccessor {\n    ngOnInit() {\n        // Iben: Set the inner form\n        this.form = this.initForm();\n        // Iben: Early exit in case the form was not found\n        if (!this.form) {\n            console.error('NgxForms: No form was found after initializing. Check if the initForm method returns a form.');\n            return;\n        }\n        // Iben: Warn the initialized$ observable that the form has been set up\n        this.initializedSubject$.next(true);\n        // Iben: Listen to the changes and warn the parent form\n        this.form.valueChanges\n            .pipe(tap((value) => {\n            // In case there's a mapper we map the value, else we send the form value\n            this.onChange(this.onChangeMapper ? this.onChangeMapper(value) : value);\n        }), takeUntil(this.destroy$))\n            .subscribe();\n    }\n    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.2.4\", ngImport: i0, type: FormAccessor, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }\n    static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.2.4\", type: FormAccessor, isStandalone: true, usesInheritance: true, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.2.4\", ngImport: i0, type: FormAccessor, decorators: [{\n            type: Directive\n        }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5hY2Nlc3Nvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9mb3Jtcy9zcmMvbGliL2Fic3RyYWN0cy9mb3JtL2Zvcm0uYWNjZXNzb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUVsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWhELE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOztBQUdoRixNQUFNLE9BQWdCLFlBS3JCLFNBQVEsNEJBQTJFO0lBUTVFLFFBQVE7UUFDZCwyQkFBMkI7UUFDM0IsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFNUIsa0RBQWtEO1FBQ2xELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDaEIsT0FBTyxDQUFDLEtBQUssQ0FDWiw4RkFBOEYsQ0FDOUYsQ0FBQztZQUVGLE9BQU87UUFDUixDQUFDO1FBRUQsdUVBQXVFO1FBQ3ZFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFcEMsdURBQXVEO1FBQ3ZELElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWTthQUNwQixJQUFJLENBQ0osR0FBRyxDQUFnQixDQUFDLEtBQUssRUFBRSxFQUFFO1lBQzVCLHlFQUF5RTtZQUN6RSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pFLENBQUMsQ0FBQyxFQUNGLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQ3hCO2FBQ0EsU0FBUyxFQUFFLENBQUM7SUFDZixDQUFDOzhHQXZDb0IsWUFBWTtrR0FBWixZQUFZOzsyRkFBWixZQUFZO2tCQURqQyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgTmd4Rm9ybXNDb250cm9sVmFsdWVBY2Nlc3NvciB9IGZyb20gJy4uL2N1c3RvbS1jb250cm9sLXZhbHVlLWFjY2Vzc29yJztcblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRm9ybUFjY2Vzc29yPFxuXHRcdERhdGFUeXBlID0gdW5rbm93bixcblx0XHRGb3JtQWNjZXNzb3JGb3JtVHlwZSBleHRlbmRzIEFic3RyYWN0Q29udHJvbCA9IEZvcm1Db250cm9sLFxuXHRcdEZvcm1WYWx1ZVR5cGUgPSBEYXRhVHlwZSxcblx0PlxuXHRleHRlbmRzIE5neEZvcm1zQ29udHJvbFZhbHVlQWNjZXNzb3I8RGF0YVR5cGUsIEZvcm1BY2Nlc3NvckZvcm1UeXBlLCBGb3JtVmFsdWVUeXBlPlxuXHRpbXBsZW1lbnRzIE9uSW5pdFxue1xuXHQvKipcblx0ICogTWV0aG9kIHRvIHNldCB1cCB0aGUgaW5uZXIgZm9ybVxuXHQgKi9cblx0YWJzdHJhY3QgaW5pdEZvcm0oKTogRm9ybUFjY2Vzc29yRm9ybVR5cGU7XG5cblx0cHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuXHRcdC8vIEliZW46IFNldCB0aGUgaW5uZXIgZm9ybVxuXHRcdHRoaXMuZm9ybSA9IHRoaXMuaW5pdEZvcm0oKTtcblxuXHRcdC8vIEliZW46IEVhcmx5IGV4aXQgaW4gY2FzZSB0aGUgZm9ybSB3YXMgbm90IGZvdW5kXG5cdFx0aWYgKCF0aGlzLmZvcm0pIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoXG5cdFx0XHRcdCdOZ3hGb3JtczogTm8gZm9ybSB3YXMgZm91bmQgYWZ0ZXIgaW5pdGlhbGl6aW5nLiBDaGVjayBpZiB0aGUgaW5pdEZvcm0gbWV0aG9kIHJldHVybnMgYSBmb3JtLidcblx0XHRcdCk7XG5cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBJYmVuOiBXYXJuIHRoZSBpbml0aWFsaXplZCQgb2JzZXJ2YWJsZSB0aGF0IHRoZSBmb3JtIGhhcyBiZWVuIHNldCB1cFxuXHRcdHRoaXMuaW5pdGlhbGl6ZWRTdWJqZWN0JC5uZXh0KHRydWUpO1xuXG5cdFx0Ly8gSWJlbjogTGlzdGVuIHRvIHRoZSBjaGFuZ2VzIGFuZCB3YXJuIHRoZSBwYXJlbnQgZm9ybVxuXHRcdHRoaXMuZm9ybS52YWx1ZUNoYW5nZXNcblx0XHRcdC5waXBlKFxuXHRcdFx0XHR0YXA8Rm9ybVZhbHVlVHlwZT4oKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0Ly8gSW4gY2FzZSB0aGVyZSdzIGEgbWFwcGVyIHdlIG1hcCB0aGUgdmFsdWUsIGVsc2Ugd2Ugc2VuZCB0aGUgZm9ybSB2YWx1ZVxuXHRcdFx0XHRcdHRoaXMub25DaGFuZ2UodGhpcy5vbkNoYW5nZU1hcHBlciA/IHRoaXMub25DaGFuZ2VNYXBwZXIodmFsdWUpIDogdmFsdWUpO1xuXHRcdFx0XHR9KSxcblx0XHRcdFx0dGFrZVVudGlsKHRoaXMuZGVzdHJveSQpXG5cdFx0XHQpXG5cdFx0XHQuc3Vic2NyaWJlKCk7XG5cdH1cbn1cbiJdfQ==","import { Directive, Input } from '@angular/core';\nimport { isEqual } from 'lodash';\nimport { takeUntil, tap } from 'rxjs/operators';\nimport { NgxFormsControlValueAccessor } from '../custom-control-value-accessor';\nimport * as i0 from \"@angular/core\";\nexport class DataFormAccessor extends NgxFormsControlValueAccessor {\n    set data(data) {\n        // Iben: If we already have current data and the current data matches the new data, we don't make a new form\n        if (this.currentData && isEqual(this.currentData, data)) {\n            this.currentData = data;\n            return;\n        }\n        this.initializedSubject$.next(false);\n        this.currentData = data;\n        // Iben: Emit to the destroy so the previous subscription is cancelled\n        this.destroy$.next(undefined);\n        // Set the inner form\n        this.form = this.initForm(data);\n        // Iben: Early exit in case the form was not found\n        if (!this.form) {\n            console.error('NgxForms: No form was found after initializing. Check if the initForm method returns a form.');\n            return;\n        }\n        // Denis: set the initialized property\n        this.setInitializedWithData(data);\n        // Iben: Check if the form is valid depending on the provided value\n        this.validate();\n        this.cdRef.detectChanges();\n        // Iben: Subscribe to the value changes\n        this.form.valueChanges\n            .pipe(tap((value) => {\n            // In case there's a mapper we map the value, else we send the form value\n            this.onChange(this.onChangeMapper ? this.onChangeMapper(value) : value);\n        }), takeUntil(this.destroy$))\n            .subscribe();\n    }\n    /**\n     * setInitialized\n     *\n     * This method sets the initialized property to true when the form is initialized.\n     * This functionality has been moved to a separate method to enable\n     * overwriting this method to fit certain use-cases.\n     *\n     * @param {ConstructionDateType} data\n     * @returns void\n     * @private\n     */\n    setInitializedWithData(data) {\n        this.initializedSubject$.next(Array.isArray(data) ? data && data.length > 0 : !!data);\n    }\n    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.2.4\", ngImport: i0, type: DataFormAccessor, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }\n    static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.2.4\", type: DataFormAccessor, isStandalone: true, inputs: { data: \"data\" }, usesInheritance: true, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.2.4\", ngImport: i0, type: DataFormAccessor, decorators: [{\n            type: Directive\n        }], propDecorators: { data: [{\n                type: Input,\n                args: [{ required: true }]\n            }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1mb3JtLmFjY2Vzc29yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2Zvcm1zL3NyYy9saWIvYWJzdHJhY3RzL2RhdGEtZm9ybS9kYXRhLWZvcm0uYWNjZXNzb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFakQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNqQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWhELE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOztBQUdoRixNQUFNLE9BQWdCLGdCQUtwQixTQUFRLDRCQUEyRTtJQVNwRixJQUFzQyxJQUFJLENBQUMsSUFBMEI7UUFDcEUsNEdBQTRHO1FBQzVHLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3pELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1lBQ3hCLE9BQU87UUFDUixDQUFDO1FBRUQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUV4QixzRUFBc0U7UUFDdEUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFOUIscUJBQXFCO1FBQ3JCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVoQyxrREFBa0Q7UUFDbEQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNoQixPQUFPLENBQUMsS0FBSyxDQUNaLDhGQUE4RixDQUM5RixDQUFDO1lBRUYsT0FBTztRQUNSLENBQUM7UUFFRCxzQ0FBc0M7UUFDdEMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWxDLG1FQUFtRTtRQUNuRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDaEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUUzQix1Q0FBdUM7UUFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZO2FBQ3BCLElBQUksQ0FDSixHQUFHLENBQWdCLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDNUIseUVBQXlFO1lBQ3pFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekUsQ0FBQyxDQUFDLEVBQ0YsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FDeEI7YUFDQSxTQUFTLEVBQUUsQ0FBQztJQUNmLENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ08sc0JBQXNCLENBQUMsSUFBMEI7UUFDMUQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2RixDQUFDOzhHQXZFb0IsZ0JBQWdCO2tHQUFoQixnQkFBZ0I7OzJGQUFoQixnQkFBZ0I7a0JBRHJDLFNBQVM7OEJBZTZCLElBQUk7c0JBQXpDLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGlzRXF1YWwgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IE5neEZvcm1zQ29udHJvbFZhbHVlQWNjZXNzb3IgfSBmcm9tICcuLi9jdXN0b20tY29udHJvbC12YWx1ZS1hY2Nlc3Nvcic7XG5cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIERhdGFGb3JtQWNjZXNzb3I8XG5cdENvbnN0cnVjdGlvbkRhdGFUeXBlID0gdW5rbm93bixcblx0RGF0YVR5cGUgPSB1bmtub3duLFxuXHRGb3JtQWNjZXNzb3JGb3JtVHlwZSBleHRlbmRzIEFic3RyYWN0Q29udHJvbCA9IEZvcm1Db250cm9sLFxuXHRGb3JtVmFsdWVUeXBlID0gRGF0YVR5cGUsXG4+IGV4dGVuZHMgTmd4Rm9ybXNDb250cm9sVmFsdWVBY2Nlc3NvcjxEYXRhVHlwZSwgRm9ybUFjY2Vzc29yRm9ybVR5cGUsIEZvcm1WYWx1ZVR5cGU+IHtcblx0Ly8gSWJlbjogS2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBkYXRhIHNvIHdlIGRvbid0IG1ha2UgYSBuZXcgZm9ybSBpZiB0aGUgZGF0YSBpdHNlbGYgaGFzbid0IGNoYW5nZWRcblx0cHJpdmF0ZSBjdXJyZW50RGF0YTogQ29uc3RydWN0aW9uRGF0YVR5cGU7XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBzZXQgdXAgdGhlIGlubmVyIGZvcm1cblx0ICovXG5cdGFic3RyYWN0IGluaXRGb3JtKGRhdGE6IENvbnN0cnVjdGlvbkRhdGFUeXBlKTogRm9ybUFjY2Vzc29yRm9ybVR5cGU7XG5cblx0QElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgcHVibGljIHNldCBkYXRhKGRhdGE6IENvbnN0cnVjdGlvbkRhdGFUeXBlKSB7XG5cdFx0Ly8gSWJlbjogSWYgd2UgYWxyZWFkeSBoYXZlIGN1cnJlbnQgZGF0YSBhbmQgdGhlIGN1cnJlbnQgZGF0YSBtYXRjaGVzIHRoZSBuZXcgZGF0YSwgd2UgZG9uJ3QgbWFrZSBhIG5ldyBmb3JtXG5cdFx0aWYgKHRoaXMuY3VycmVudERhdGEgJiYgaXNFcXVhbCh0aGlzLmN1cnJlbnREYXRhLCBkYXRhKSkge1xuXHRcdFx0dGhpcy5jdXJyZW50RGF0YSA9IGRhdGE7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5pbml0aWFsaXplZFN1YmplY3QkLm5leHQoZmFsc2UpO1xuXHRcdHRoaXMuY3VycmVudERhdGEgPSBkYXRhO1xuXG5cdFx0Ly8gSWJlbjogRW1pdCB0byB0aGUgZGVzdHJveSBzbyB0aGUgcHJldmlvdXMgc3Vic2NyaXB0aW9uIGlzIGNhbmNlbGxlZFxuXHRcdHRoaXMuZGVzdHJveSQubmV4dCh1bmRlZmluZWQpO1xuXG5cdFx0Ly8gU2V0IHRoZSBpbm5lciBmb3JtXG5cdFx0dGhpcy5mb3JtID0gdGhpcy5pbml0Rm9ybShkYXRhKTtcblxuXHRcdC8vIEliZW46IEVhcmx5IGV4aXQgaW4gY2FzZSB0aGUgZm9ybSB3YXMgbm90IGZvdW5kXG5cdFx0aWYgKCF0aGlzLmZvcm0pIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoXG5cdFx0XHRcdCdOZ3hGb3JtczogTm8gZm9ybSB3YXMgZm91bmQgYWZ0ZXIgaW5pdGlhbGl6aW5nLiBDaGVjayBpZiB0aGUgaW5pdEZvcm0gbWV0aG9kIHJldHVybnMgYSBmb3JtLidcblx0XHRcdCk7XG5cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBEZW5pczogc2V0IHRoZSBpbml0aWFsaXplZCBwcm9wZXJ0eVxuXHRcdHRoaXMuc2V0SW5pdGlhbGl6ZWRXaXRoRGF0YShkYXRhKTtcblxuXHRcdC8vIEliZW46IENoZWNrIGlmIHRoZSBmb3JtIGlzIHZhbGlkIGRlcGVuZGluZyBvbiB0aGUgcHJvdmlkZWQgdmFsdWVcblx0XHR0aGlzLnZhbGlkYXRlKCk7XG5cdFx0dGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG5cblx0XHQvLyBJYmVuOiBTdWJzY3JpYmUgdG8gdGhlIHZhbHVlIGNoYW5nZXNcblx0XHR0aGlzLmZvcm0udmFsdWVDaGFuZ2VzXG5cdFx0XHQucGlwZShcblx0XHRcdFx0dGFwPEZvcm1WYWx1ZVR5cGU+KCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdC8vIEluIGNhc2UgdGhlcmUncyBhIG1hcHBlciB3ZSBtYXAgdGhlIHZhbHVlLCBlbHNlIHdlIHNlbmQgdGhlIGZvcm0gdmFsdWVcblx0XHRcdFx0XHR0aGlzLm9uQ2hhbmdlKHRoaXMub25DaGFuZ2VNYXBwZXIgPyB0aGlzLm9uQ2hhbmdlTWFwcGVyKHZhbHVlKSA6IHZhbHVlKTtcblx0XHRcdFx0fSksXG5cdFx0XHRcdHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKVxuXHRcdFx0KVxuXHRcdFx0LnN1YnNjcmliZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIHNldEluaXRpYWxpemVkXG5cdCAqXG5cdCAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIGluaXRpYWxpemVkIHByb3BlcnR5IHRvIHRydWUgd2hlbiB0aGUgZm9ybSBpcyBpbml0aWFsaXplZC5cblx0ICogVGhpcyBmdW5jdGlvbmFsaXR5IGhhcyBiZWVuIG1vdmVkIHRvIGEgc2VwYXJhdGUgbWV0aG9kIHRvIGVuYWJsZVxuXHQgKiBvdmVyd3JpdGluZyB0aGlzIG1ldGhvZCB0byBmaXQgY2VydGFpbiB1c2UtY2FzZXMuXG5cdCAqXG5cdCAqIEBwYXJhbSB7Q29uc3RydWN0aW9uRGF0ZVR5cGV9IGRhdGFcblx0ICogQHJldHVybnMgdm9pZFxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0cHJvdGVjdGVkIHNldEluaXRpYWxpemVkV2l0aERhdGEoZGF0YTogQ29uc3RydWN0aW9uRGF0YVR5cGUpOiB2b2lkIHtcblx0XHR0aGlzLmluaXRpYWxpemVkU3ViamVjdCQubmV4dChBcnJheS5pc0FycmF5KGRhdGEpID8gZGF0YSAmJiBkYXRhLmxlbmd0aCA+IDAgOiAhIWRhdGEpO1xuXHR9XG59XG4iXX0=","import { ViewChildren, Directive } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { BaseFormAccessor } from '../base-form/base-form.accessor';\nimport { handleFormAccessorMarkAsDirty, handleFormAccessorMarkAsTouched, handleFormAccessorUpdateValueAndValidity, } from '../../utils';\nimport * as i0 from \"@angular/core\";\nexport class FormAccessorContainer {\n    constructor() {\n        /**\n         * Destroyed state of the component\n         */\n        this.destroyed$ = new Subject();\n    }\n    /**\n     * @deprecated This method should no longer be used, use the markAsDirty on the form itself instead\n     *\n     * Marks the form and all the inputs of every subsequent form-accessors as dirty\n     *\n     * @param  form - The form used in the component\n     * @param options - Options passed to the form state changer\n     */\n    markAllAsDirty(form, options = {}) {\n        this.handleAccessorsAction(() => {\n            handleFormAccessorMarkAsDirty(form, this.accessors?.toArray() || [], options);\n        });\n    }\n    /**\n     * @deprecated This method should no longer be used, use the markAsTouched on the form itself instead\n     *\n     * Marks the form and all the inputs of every subsequent form-accessors as touched\n     *\n     * @param  form - The form used in the component\n     * @param options - Options passed to the form state changer\n     */\n    markAllAsTouched(form, options = {}) {\n        this.handleAccessorsAction(() => {\n            handleFormAccessorMarkAsTouched(form, this.accessors?.toArray() || [], options);\n        });\n    }\n    /**\n     * Updates the value and validity of the form and all the inputs of every subsequent form-accessors\n     *\n     * @param form - The provided forms\n     * @param options - Options passed to the updateValueAndValidity\n     */\n    updateAllValueAndValidity(form, options = {}) {\n        this.handleAccessorsAction(() => {\n            handleFormAccessorUpdateValueAndValidity(form, this.accessors?.toArray() || [], options);\n        });\n    }\n    /**\n     * Handle the destroy state of the component\n     */\n    ngOnDestroy() {\n        this.destroyed$.next(undefined);\n        this.destroyed$.complete();\n    }\n    /**\n     * Handle the accessors action of the FormContainer and throw a warning if no accessors are provided\n     *\n     * @param  action - The provided action\n     */\n    handleAccessorsAction(action) {\n        // Iben: Throw a warn in case there are no accessors found\n        if (!this.accessors || this.accessors?.toArray().length === 0) {\n            console.warn('NgxForms: No (Data)FormAccessors were found in this component. Check if each (Data)FormAccessor also provides the BaseFormAccessor in its providers array. If this is intentional, this warning can be ignored.');\n        }\n        // Iben: Handle the provided action\n        action();\n    }\n    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.2.4\", ngImport: i0, type: FormAccessorContainer, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n    static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.2.4\", type: FormAccessorContainer, isStandalone: true, viewQueries: [{ propertyName: \"accessors\", predicate: BaseFormAccessor, descendants: true }], ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.2.4\", ngImport: i0, type: FormAccessorContainer, decorators: [{\n            type: Directive\n        }], propDecorators: { accessors: [{\n                type: ViewChildren,\n                args: [BaseFormAccessor]\n            }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1hY2Nlc3Nvci1jb250YWluZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvZm9ybXMvc3JjL2xpYi9hYnN0cmFjdHMvZm9ybS1hY2Nlc3Nvci1jb250YWluZXIvZm9ybS1hY2Nlc3Nvci1jb250YWluZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBYSxTQUFTLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFFOUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUvQixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUluRSxPQUFPLEVBQ04sNkJBQTZCLEVBQzdCLCtCQUErQixFQUMvQix3Q0FBd0MsR0FDeEMsTUFBTSxhQUFhLENBQUM7O0FBR3JCLE1BQU0sT0FBTyxxQkFBcUI7SUFEbEM7UUFPQzs7V0FFRztRQUNnQixlQUFVLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztLQXlFOUM7SUF2RUE7Ozs7Ozs7T0FPRztJQUNJLGNBQWMsQ0FBQyxJQUFxQixFQUFFLFVBQWtDLEVBQUU7UUFDaEYsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsRUFBRTtZQUMvQiw2QkFBNkIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDL0UsQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNJLGdCQUFnQixDQUFDLElBQXFCLEVBQUUsVUFBa0MsRUFBRTtRQUNsRixJQUFJLENBQUMscUJBQXFCLENBQUMsR0FBRyxFQUFFO1lBQy9CLCtCQUErQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNqRixDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLHlCQUF5QixDQUMvQixJQUFxQixFQUNyQixVQUFrQyxFQUFFO1FBRXBDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLEVBQUU7WUFDL0Isd0NBQXdDLENBQ3ZDLElBQUksRUFDSixJQUFJLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsRUFDL0IsT0FBTyxDQUNQLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNJLFdBQVc7UUFDakIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLHFCQUFxQixDQUFDLE1BQWtCO1FBQy9DLDBEQUEwRDtRQUMxRCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMvRCxPQUFPLENBQUMsSUFBSSxDQUNYLGlOQUFpTixDQUNqTixDQUFDO1FBQ0gsQ0FBQztRQUVELG1DQUFtQztRQUNuQyxNQUFNLEVBQUUsQ0FBQztJQUNWLENBQUM7OEdBakZXLHFCQUFxQjtrR0FBckIscUJBQXFCLDRFQUluQixnQkFBZ0I7OzJGQUpsQixxQkFBcUI7a0JBRGpDLFNBQVM7OEJBS3VCLFNBQVM7c0JBQXhDLFlBQVk7dUJBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVmlld0NoaWxkcmVuLCBRdWVyeUxpc3QsIERpcmVjdGl2ZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEJhc2VGb3JtQWNjZXNzb3IgfSBmcm9tICcuLi9iYXNlLWZvcm0vYmFzZS1mb3JtLmFjY2Vzc29yJztcbmltcG9ydCB7IERhdGFGb3JtQWNjZXNzb3IgfSBmcm9tICcuLi9kYXRhLWZvcm0vZGF0YS1mb3JtLmFjY2Vzc29yJztcbmltcG9ydCB7IEZvcm1BY2Nlc3NvciB9IGZyb20gJy4uL2Zvcm0vZm9ybS5hY2Nlc3Nvcic7XG5pbXBvcnQgeyBGb3JtU3RhdGVPcHRpb25zRW50aXR5IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQge1xuXHRoYW5kbGVGb3JtQWNjZXNzb3JNYXJrQXNEaXJ0eSxcblx0aGFuZGxlRm9ybUFjY2Vzc29yTWFya0FzVG91Y2hlZCxcblx0aGFuZGxlRm9ybUFjY2Vzc29yVXBkYXRlVmFsdWVBbmRWYWxpZGl0eSxcbn0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBjbGFzcyBGb3JtQWNjZXNzb3JDb250YWluZXIgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuXHQvKipcblx0ICogQSBsaXN0IG9mIGFsbCBEYXRhRm9ybUFjY2Vzc29ycyBlbiBGb3JtQWNjZXNzb3JzIG9mIHRoaXMgY29tcG9uZW50XG5cdCAqL1xuXHRAVmlld0NoaWxkcmVuKEJhc2VGb3JtQWNjZXNzb3IpIGFjY2Vzc29yczogUXVlcnlMaXN0PERhdGFGb3JtQWNjZXNzb3IgfCBGb3JtQWNjZXNzb3I+O1xuXG5cdC8qKlxuXHQgKiBEZXN0cm95ZWQgc3RhdGUgb2YgdGhlIGNvbXBvbmVudFxuXHQgKi9cblx0cHJvdGVjdGVkIHJlYWRvbmx5IGRlc3Ryb3llZCQgPSBuZXcgU3ViamVjdCgpO1xuXG5cdC8qKlxuXHQgKiBAZGVwcmVjYXRlZCBUaGlzIG1ldGhvZCBzaG91bGQgbm8gbG9uZ2VyIGJlIHVzZWQsIHVzZSB0aGUgbWFya0FzRGlydHkgb24gdGhlIGZvcm0gaXRzZWxmIGluc3RlYWRcblx0ICpcblx0ICogTWFya3MgdGhlIGZvcm0gYW5kIGFsbCB0aGUgaW5wdXRzIG9mIGV2ZXJ5IHN1YnNlcXVlbnQgZm9ybS1hY2Nlc3NvcnMgYXMgZGlydHlcblx0ICpcblx0ICogQHBhcmFtICBmb3JtIC0gVGhlIGZvcm0gdXNlZCBpbiB0aGUgY29tcG9uZW50XG5cdCAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyBwYXNzZWQgdG8gdGhlIGZvcm0gc3RhdGUgY2hhbmdlclxuXHQgKi9cblx0cHVibGljIG1hcmtBbGxBc0RpcnR5KGZvcm06IEFic3RyYWN0Q29udHJvbCwgb3B0aW9uczogRm9ybVN0YXRlT3B0aW9uc0VudGl0eSA9IHt9KTogdm9pZCB7XG5cdFx0dGhpcy5oYW5kbGVBY2Nlc3NvcnNBY3Rpb24oKCkgPT4ge1xuXHRcdFx0aGFuZGxlRm9ybUFjY2Vzc29yTWFya0FzRGlydHkoZm9ybSwgdGhpcy5hY2Nlc3NvcnM/LnRvQXJyYXkoKSB8fCBbXSwgb3B0aW9ucyk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQGRlcHJlY2F0ZWQgVGhpcyBtZXRob2Qgc2hvdWxkIG5vIGxvbmdlciBiZSB1c2VkLCB1c2UgdGhlIG1hcmtBc1RvdWNoZWQgb24gdGhlIGZvcm0gaXRzZWxmIGluc3RlYWRcblx0ICpcblx0ICogTWFya3MgdGhlIGZvcm0gYW5kIGFsbCB0aGUgaW5wdXRzIG9mIGV2ZXJ5IHN1YnNlcXVlbnQgZm9ybS1hY2Nlc3NvcnMgYXMgdG91Y2hlZFxuXHQgKlxuXHQgKiBAcGFyYW0gIGZvcm0gLSBUaGUgZm9ybSB1c2VkIGluIHRoZSBjb21wb25lbnRcblx0ICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHBhc3NlZCB0byB0aGUgZm9ybSBzdGF0ZSBjaGFuZ2VyXG5cdCAqL1xuXHRwdWJsaWMgbWFya0FsbEFzVG91Y2hlZChmb3JtOiBBYnN0cmFjdENvbnRyb2wsIG9wdGlvbnM6IEZvcm1TdGF0ZU9wdGlvbnNFbnRpdHkgPSB7fSk6IHZvaWQge1xuXHRcdHRoaXMuaGFuZGxlQWNjZXNzb3JzQWN0aW9uKCgpID0+IHtcblx0XHRcdGhhbmRsZUZvcm1BY2Nlc3Nvck1hcmtBc1RvdWNoZWQoZm9ybSwgdGhpcy5hY2Nlc3NvcnM/LnRvQXJyYXkoKSB8fCBbXSwgb3B0aW9ucyk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogVXBkYXRlcyB0aGUgdmFsdWUgYW5kIHZhbGlkaXR5IG9mIHRoZSBmb3JtIGFuZCBhbGwgdGhlIGlucHV0cyBvZiBldmVyeSBzdWJzZXF1ZW50IGZvcm0tYWNjZXNzb3JzXG5cdCAqXG5cdCAqIEBwYXJhbSBmb3JtIC0gVGhlIHByb3ZpZGVkIGZvcm1zXG5cdCAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyBwYXNzZWQgdG8gdGhlIHVwZGF0ZVZhbHVlQW5kVmFsaWRpdHlcblx0ICovXG5cdHB1YmxpYyB1cGRhdGVBbGxWYWx1ZUFuZFZhbGlkaXR5KFxuXHRcdGZvcm06IEFic3RyYWN0Q29udHJvbCxcblx0XHRvcHRpb25zOiBGb3JtU3RhdGVPcHRpb25zRW50aXR5ID0ge31cblx0KTogdm9pZCB7XG5cdFx0dGhpcy5oYW5kbGVBY2Nlc3NvcnNBY3Rpb24oKCkgPT4ge1xuXHRcdFx0aGFuZGxlRm9ybUFjY2Vzc29yVXBkYXRlVmFsdWVBbmRWYWxpZGl0eShcblx0XHRcdFx0Zm9ybSxcblx0XHRcdFx0dGhpcy5hY2Nlc3NvcnM/LnRvQXJyYXkoKSB8fCBbXSxcblx0XHRcdFx0b3B0aW9uc1xuXHRcdFx0KTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGUgdGhlIGRlc3Ryb3kgc3RhdGUgb2YgdGhlIGNvbXBvbmVudFxuXHQgKi9cblx0cHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuXHRcdHRoaXMuZGVzdHJveWVkJC5uZXh0KHVuZGVmaW5lZCk7XG5cdFx0dGhpcy5kZXN0cm95ZWQkLmNvbXBsZXRlKCk7XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlIHRoZSBhY2Nlc3NvcnMgYWN0aW9uIG9mIHRoZSBGb3JtQ29udGFpbmVyIGFuZCB0aHJvdyBhIHdhcm5pbmcgaWYgbm8gYWNjZXNzb3JzIGFyZSBwcm92aWRlZFxuXHQgKlxuXHQgKiBAcGFyYW0gIGFjdGlvbiAtIFRoZSBwcm92aWRlZCBhY3Rpb25cblx0ICovXG5cdHByaXZhdGUgaGFuZGxlQWNjZXNzb3JzQWN0aW9uKGFjdGlvbjogKCkgPT4gdm9pZCkge1xuXHRcdC8vIEliZW46IFRocm93IGEgd2FybiBpbiBjYXNlIHRoZXJlIGFyZSBubyBhY2Nlc3NvcnMgZm91bmRcblx0XHRpZiAoIXRoaXMuYWNjZXNzb3JzIHx8IHRoaXMuYWNjZXNzb3JzPy50b0FycmF5KCkubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oXG5cdFx0XHRcdCdOZ3hGb3JtczogTm8gKERhdGEpRm9ybUFjY2Vzc29ycyB3ZXJlIGZvdW5kIGluIHRoaXMgY29tcG9uZW50LiBDaGVjayBpZiBlYWNoIChEYXRhKUZvcm1BY2Nlc3NvciBhbHNvIHByb3ZpZGVzIHRoZSBCYXNlRm9ybUFjY2Vzc29yIGluIGl0cyBwcm92aWRlcnMgYXJyYXkuIElmIHRoaXMgaXMgaW50ZW50aW9uYWwsIHRoaXMgd2FybmluZyBjYW4gYmUgaWdub3JlZC4nXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdC8vIEliZW46IEhhbmRsZSB0aGUgcHJvdmlkZWQgYWN0aW9uXG5cdFx0YWN0aW9uKCk7XG5cdH1cbn1cbiJdfQ==","import { Directive, Input } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class NgxFormsErrorAbstractComponent {\n    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.2.4\", ngImport: i0, type: NgxFormsErrorAbstractComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n    static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.2.4\", type: NgxFormsErrorAbstractComponent, isStandalone: true, inputs: { errors: \"errors\", errorKeys: \"errorKeys\", data: \"data\", customErrorMessages: \"customErrorMessages\" }, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.2.4\", ngImport: i0, type: NgxFormsErrorAbstractComponent, decorators: [{\n            type: Directive\n        }], propDecorators: { errors: [{\n                type: Input,\n                args: [{ required: true }]\n            }], errorKeys: [{\n                type: Input,\n                args: [{ required: true }]\n            }], data: [{\n                type: Input,\n                args: [{ required: true }]\n            }], customErrorMessages: [{\n                type: Input\n            }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3IuY29tcG9uZW50LmFic3RyYWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2Zvcm1zL3NyYy9saWIvYWJzdHJhY3RzL2Vycm9yL2Vycm9yLmNvbXBvbmVudC5hYnN0cmFjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFJakQsTUFBTSxPQUFPLDhCQUE4Qjs4R0FBOUIsOEJBQThCO2tHQUE5Qiw4QkFBOEI7OzJGQUE5Qiw4QkFBOEI7a0JBRDFDLFNBQVM7OEJBS3lCLE1BQU07c0JBQXZDLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUlTLFNBQVM7c0JBQTFDLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUlTLElBQUk7c0JBQXJDLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUlULG1CQUFtQjtzQkFBbEMsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFZhbGlkYXRpb25FcnJvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGNsYXNzIE5neEZvcm1zRXJyb3JBYnN0cmFjdENvbXBvbmVudCB7XG5cdC8qKlxuXHQgKiBBbiBhcnJheSBvZiBlcnJvciBtZXNzYWdlcyB0aGF0IGNhbiBiZSByZW5kZXJlZFxuXHQgKi9cblx0QElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgcHVibGljIGVycm9yczogc3RyaW5nW107XG5cdC8qKlxuXHQgKiBBbiBhcnJheSBvZiBlcnJvciBrZXlzIHRoYXQgY2FuIGJlIHJlbmRlcmVkXG5cdCAqL1xuXHRASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBwdWJsaWMgZXJyb3JLZXlzOiBzdHJpbmdbXTtcblx0LyoqXG5cdCAqIFRoZSBlcnJvciBvYmplY3QgcHJvdmlkZWQgYnkgdGhlIGNvbnRyb2xcblx0ICovXG5cdEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIHB1YmxpYyBkYXRhOiBWYWxpZGF0aW9uRXJyb3JzO1xuXHQvKipcblx0ICogQW4gb2JqZWN0IGNvbnRhaW5pbmcgY3VzdG9tIGVycm9yIG1lc3NhZ2VzXG5cdCAqL1xuXHRASW5wdXQoKSBwdWJsaWMgY3VzdG9tRXJyb3JNZXNzYWdlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cbiJdfQ==","import { Directive, HostListener } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport * as i0 from \"@angular/core\";\nexport class NgxSaveOnExitComponent {\n    constructor() {\n        /**\n         * A subject to handle the onDestroy flow\n         */\n        this.destroyedSubject$ = new Subject();\n        /**\n         * An observable that emits the onDestroy event\n         */\n        this.destroyed$ = this.destroyedSubject$.asObservable();\n        /**\n         * Whether or not the beforeUnload event should be intercepted or not. By default, this behavior is set to false\n         * If set to true, closing a tab or the browser will be interrupted and a message will be displayed\n         */\n        this.allowBeforeUnloadHandler = false;\n    }\n    /**\n     * Handles the unload event of the browser and will warn the user that the application prevented the user from closing the browser\n     *\n     * @param event - The unload event from the browser\n     */\n    handleUnloadEvent(event) {\n        // Iben: If the component is dirty, we prevent the browser from closing the window or tab\n        if (this.allowBeforeUnloadHandler && this.isDirty()) {\n            event.returnValue = true;\n        }\n    }\n    ngOnDestroy() {\n        // Iben: Emit if the component gets destroyed\n        this.destroyedSubject$.next(undefined);\n        this.destroyedSubject$.complete();\n    }\n    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.2.4\", ngImport: i0, type: NgxSaveOnExitComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n    static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.2.4\", type: NgxSaveOnExitComponent, isStandalone: true, host: { listeners: { \"window:beforeunload\": \"handleUnloadEvent($event)\" } }, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.2.4\", ngImport: i0, type: NgxSaveOnExitComponent, decorators: [{\n            type: Directive\n        }], propDecorators: { handleUnloadEvent: [{\n                type: HostListener,\n                args: ['window:beforeunload', ['$event']]\n            }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2F2ZS1vbi1leGl0LmNvbXBvbmVudC5hYnN0cmFjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9mb3Jtcy9zcmMvbGliL2Fic3RyYWN0cy9zYXZlLW9uLWV4aXQvc2F2ZS1vbi1leGl0LmNvbXBvbmVudC5hYnN0cmFjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUcvQixNQUFNLE9BQWdCLHNCQUFzQjtJQUQ1QztRQWVDOztXQUVHO1FBQ2Msc0JBQWlCLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUVuRDs7V0FFRztRQUNhLGVBQVUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFbkU7OztXQUdHO1FBQ2EsNkJBQXdCLEdBQVksS0FBSyxDQUFDO0tBaUIxRDtJQTVDQTs7OztPQUlHO0lBRUgsaUJBQWlCLENBQUMsS0FBd0I7UUFDekMseUZBQXlGO1FBQ3pGLElBQUksSUFBSSxDQUFDLHdCQUF3QixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQ3JELEtBQUssQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQzFCLENBQUM7SUFDRixDQUFDO0lBNEJELFdBQVc7UUFDViw2Q0FBNkM7UUFDN0MsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbkMsQ0FBQzs4R0E1Q29CLHNCQUFzQjtrR0FBdEIsc0JBQXNCOzsyRkFBdEIsc0JBQXNCO2tCQUQzQyxTQUFTOzhCQVFULGlCQUFpQjtzQkFEaEIsWUFBWTt1QkFBQyxxQkFBcUIsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgSG9zdExpc3RlbmVyLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTmd4U2F2ZU9uRXhpdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG5cdC8qKlxuXHQgKiBIYW5kbGVzIHRoZSB1bmxvYWQgZXZlbnQgb2YgdGhlIGJyb3dzZXIgYW5kIHdpbGwgd2FybiB0aGUgdXNlciB0aGF0IHRoZSBhcHBsaWNhdGlvbiBwcmV2ZW50ZWQgdGhlIHVzZXIgZnJvbSBjbG9zaW5nIHRoZSBicm93c2VyXG5cdCAqXG5cdCAqIEBwYXJhbSBldmVudCAtIFRoZSB1bmxvYWQgZXZlbnQgZnJvbSB0aGUgYnJvd3NlclxuXHQgKi9cblx0QEhvc3RMaXN0ZW5lcignd2luZG93OmJlZm9yZXVubG9hZCcsIFsnJGV2ZW50J10pXG5cdGhhbmRsZVVubG9hZEV2ZW50KGV2ZW50OiBCZWZvcmVVbmxvYWRFdmVudCkge1xuXHRcdC8vIEliZW46IElmIHRoZSBjb21wb25lbnQgaXMgZGlydHksIHdlIHByZXZlbnQgdGhlIGJyb3dzZXIgZnJvbSBjbG9zaW5nIHRoZSB3aW5kb3cgb3IgdGFiXG5cdFx0aWYgKHRoaXMuYWxsb3dCZWZvcmVVbmxvYWRIYW5kbGVyICYmIHRoaXMuaXNEaXJ0eSgpKSB7XG5cdFx0XHRldmVudC5yZXR1cm5WYWx1ZSA9IHRydWU7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEEgc3ViamVjdCB0byBoYW5kbGUgdGhlIG9uRGVzdHJveSBmbG93XG5cdCAqL1xuXHRwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3llZFN1YmplY3QkID0gbmV3IFN1YmplY3QoKTtcblxuXHQvKipcblx0ICogQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBvbkRlc3Ryb3kgZXZlbnRcblx0ICovXG5cdHB1YmxpYyByZWFkb25seSBkZXN0cm95ZWQkID0gdGhpcy5kZXN0cm95ZWRTdWJqZWN0JC5hc09ic2VydmFibGUoKTtcblxuXHQvKipcblx0ICogV2hldGhlciBvciBub3QgdGhlIGJlZm9yZVVubG9hZCBldmVudCBzaG91bGQgYmUgaW50ZXJjZXB0ZWQgb3Igbm90LiBCeSBkZWZhdWx0LCB0aGlzIGJlaGF2aW9yIGlzIHNldCB0byBmYWxzZVxuXHQgKiBJZiBzZXQgdG8gdHJ1ZSwgY2xvc2luZyBhIHRhYiBvciB0aGUgYnJvd3NlciB3aWxsIGJlIGludGVycnVwdGVkIGFuZCBhIG1lc3NhZ2Ugd2lsbCBiZSBkaXNwbGF5ZWRcblx0ICovXG5cdHB1YmxpYyByZWFkb25seSBhbGxvd0JlZm9yZVVubG9hZEhhbmRsZXI6IGJvb2xlYW4gPSBmYWxzZTtcblxuXHQvKipcblx0ICogUmV0dXJuIHdoZXRoZXIgb3Igbm90IHRoZSBjb21wb25lbnQgaXMgZGlydHlcblx0ICovXG5cdHB1YmxpYyBhYnN0cmFjdCBpc0RpcnR5KCk6IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIFJldHVybiB3aGV0aGVyIG9yIG5vdCB0aGUgY29tcG9uZW50IGlzIHZhbGlkXG5cdCAqL1xuXHRwdWJsaWMgYWJzdHJhY3QgaXNWYWxpZCgpOiBib29sZWFuO1xuXG5cdG5nT25EZXN0cm95KCkge1xuXHRcdC8vIEliZW46IEVtaXQgaWYgdGhlIGNvbXBvbmVudCBnZXRzIGRlc3Ryb3llZFxuXHRcdHRoaXMuZGVzdHJveWVkU3ViamVjdCQubmV4dCh1bmRlZmluZWQpO1xuXHRcdHRoaXMuZGVzdHJveWVkU3ViamVjdCQuY29tcGxldGUoKTtcblx0fVxufVxuIl19","export class NgxSaveOnExitAbstractService {\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2F2ZS1vbi1leGl0LnNlcnZpY2UuYWJzdHJhY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvZm9ybXMvc3JjL2xpYi9hYnN0cmFjdHMvc2F2ZS1vbi1leGl0L3NhdmUtb24tZXhpdC5zZXJ2aWNlLmFic3RyYWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUtBLE1BQU0sT0FBZ0IsNEJBQTRCO0NBYWpEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgUm91dGVyU3RhdGVTbmFwc2hvdCB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7IE5neFNhdmVPbkV4aXRDb21wb25lbnQgfSBmcm9tICcuL3NhdmUtb24tZXhpdC5jb21wb25lbnQuYWJzdHJhY3QnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTmd4U2F2ZU9uRXhpdEFic3RyYWN0U2VydmljZSB7XG5cdC8qKlxuXHQgKiBUYWtlIGFjdGlvbiB3aGVuIHRoZSBjb21wb25lbnQgaXMgZGlydHlcblx0ICovXG5cdHB1YmxpYyBhYnN0cmFjdCBoYW5kbGVEaXJ0eVN0YXRlOiAoY29tcG9uZW50OiBOZ3hTYXZlT25FeGl0Q29tcG9uZW50KSA9PiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuXG5cdC8qKlxuXHQgKiBBbiBvcHRpb25hbCBtZXRob2QgdGhhdCwgaWYgaW1wbGVtZW50ZWQsIHByb3ZpZGVzIHRoZSBhYmlsaXR5IHRvIGJ5cGFzcyB0aGUgZ3VhcmRcblx0ICovXG5cdHB1YmxpYyBieXBhc3NTYXZlT25FeGl0PzogKFxuXHRcdGN1cnJlbnRSb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCxcblx0XHRuZXh0U3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3Rcblx0KSA9PiBib29sZWFuO1xufVxuIl19","import { InjectionToken } from '@angular/core';\nexport const NgxFormsErrorsConfigurationToken = new InjectionToken('NgxFormsErrorsConfiguration');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLWNvbmZpZy50b2tlbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9mb3Jtcy9zcmMvbGliL3Rva2Vucy9lcnJvcnMtY29uZmlnLnRva2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHL0MsTUFBTSxDQUFDLE1BQU0sZ0NBQWdDLEdBQzVDLElBQUksY0FBYyxDQUFvQyw2QkFBNkIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5neEZvcm1zRXJyb3JDb25maWd1cmF0aW9uT3B0aW9ucyB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuXG5leHBvcnQgY29uc3QgTmd4Rm9ybXNFcnJvcnNDb25maWd1cmF0aW9uVG9rZW4gPVxuXHRuZXcgSW5qZWN0aW9uVG9rZW48Tmd4Rm9ybXNFcnJvckNvbmZpZ3VyYXRpb25PcHRpb25zPignTmd4Rm9ybXNFcnJvcnNDb25maWd1cmF0aW9uJyk7XG4iXX0=","import { ChangeDetectorRef, Directive, ElementRef, Input, Renderer2, TemplateRef, ViewContainerRef, inject, } from '@angular/core';\nimport { FormGroupDirective, FormGroupName, } from '@angular/forms';\nimport { Subject, combineLatest, startWith, takeUntil, tap } from 'rxjs';\nimport { NgxFormsErrorsConfigurationToken } from '../../tokens';\nimport { touchedEventListener } from '../../utils';\nimport * as i0 from \"@angular/core\";\nexport class NgxFormsErrorsDirective {\n    /**\n     * Custom error messages to override default ones\n     */\n    set customErrorMessages(value) {\n        this.customMessages = value ?? {};\n    }\n    constructor() {\n        this.formGroupDirective = inject(FormGroupDirective, { optional: true });\n        this.formNameDirective = inject(FormGroupName, { optional: true });\n        this.templateRef = inject(TemplateRef, { optional: true });\n        this.config = inject(NgxFormsErrorsConfigurationToken, { optional: true });\n        this.viewContainer = inject(ViewContainerRef);\n        this.elementRef = inject(ElementRef);\n        this.renderer = inject(Renderer2);\n        this.cdRef = inject(ChangeDetectorRef);\n        // Iben: Handle the OnDestroy flow\n        this.onDestroySubject$ = new Subject();\n        this.onDestroy$ = this.onDestroySubject$.asObservable();\n        // Iben: Set the current template ref at constructor time so we actually have the provided template (as done in the *ngIf directive)\n        if (this.templateRef) {\n            this.template = this.templateRef;\n        }\n    }\n    ngOnDestroy() {\n        // Iben: Handle the on destroy flow\n        this.onDestroySubject$.next();\n        this.onDestroySubject$.complete();\n    }\n    ngAfterViewInit() {\n        // Iben: Render the actual input so that it is always visible\n        this.viewContainer.clear();\n        // Abdurrahman: Only render template if this directive is used in structural form\n        if (this.template) {\n            this.viewContainer.createEmbeddedView(this.template);\n        }\n        // Iben: If no control was provided, we early exit and log an error\n        if (!this.control) {\n            console.error('NgxForms: No control was provided to the NgxFormsErrorDirective');\n            return;\n        }\n        // Iben: If the control is a string, we check the parent to find the actual control.\n        // If not, we use the provided control\n        if (typeof this.control === 'string') {\n            this.abstractControl = this.formGroupDirective\n                ? this.formGroupDirective.form.get(this.control)\n                : this.formNameDirective?.control.get(this.control);\n        }\n        else {\n            this.abstractControl = this.control;\n        }\n        // Iben: If no control was found, we early exit and log an error\n        if (!this.abstractControl) {\n            console.error('NgxForms: No control was provided to the NgxFormsErrorDirective');\n            return;\n        }\n        // Iben: Listen to the value changes, status changes and the touched changes of the control\n        combineLatest([\n            this.abstractControl.valueChanges.pipe(startWith(this.abstractControl.value)),\n            touchedEventListener(this.abstractControl),\n            this.abstractControl.statusChanges.pipe(startWith(this.abstractControl.status)),\n        ])\n            .pipe(tap(([, touched]) => {\n            // Iben: Check whether we should show the error based on the provided config\n            const shouldShow = this.abstractControl.invalid &&\n                (this.config.showWhen === 'touched' ? touched : this.abstractControl.dirty);\n            // Iben: Show the error based on whether or not a component was provided\n            if (!this.config.component) {\n                this.handleNoComponentFlow(shouldShow);\n            }\n            else {\n                this.handleComponentRender(shouldShow);\n            }\n            // Iben: Detect the changes so this works with (nested) OnPush components\n            this.cdRef.detectChanges();\n        }), takeUntil(this.onDestroy$))\n            .subscribe();\n    }\n    /**\n     * Renders a provided custom component underneath the input component\n     *\n     * @param shouldShow - Whether the error should be shown\n     */\n    handleComponentRender(shouldShow) {\n        // Iben: If the error should not be shown, we check if there's already an error component and destroy it if needed\n        if (!shouldShow) {\n            if (this.errorComponent) {\n                this.componentRef.destroy();\n                this.componentRef = undefined;\n                this.errorComponent = undefined;\n            }\n            return;\n        }\n        // Iben: If there already is a component, destroy it so it can update correctly\n        if (this.componentRef) {\n            this.componentRef.destroy();\n            this.componentRef = undefined;\n        }\n        // Iben: Add the new component to the view\n        this.componentRef = this.viewContainer.createComponent(this.config.component);\n        this.errorComponent = this.componentRef.instance;\n        // Iben: Set the data of the error component\n        const { errorKeys, data } = this.getErrors(this.abstractControl.errors);\n        // Abdurrahman: Merge defaults with custom overrides if provided\n        const errors = errorKeys.map((key) => this.customMessages?.[key] || this.config.errors[key]);\n        this.errorComponent.errors = errors;\n        this.errorComponent.errorKeys = errorKeys;\n        this.errorComponent.data = data;\n        this.errorComponent.customErrorMessages = this.customMessages;\n    }\n    /**\n     * Renders a p tag underneath the input component when no custom component was provided\n     *\n     * @param shouldShow - Whether the error should be shown\n     */\n    handleNoComponentFlow(shouldShow) {\n        // Iben: We remove the current errors so that we always have a new element to work with\n        if (this.errorsElement) {\n            this.renderer.removeChild(this.elementRef.nativeElement.parentNode, this.errorsElement);\n            this.errorsElement = null;\n        }\n        // Iben: Early exit in case there's no error to show\n        if (!shouldShow) {\n            return;\n        }\n        // Iben: Create a new error paragraph\n        this.errorsElement = this.renderer.createElement('p');\n        this.renderer.setAttribute(this.errorsElement, 'class', 'ngx-forms-error');\n        // Iben: Set the errors based on the keys\n        const { errorKeys } = this.getErrors(this.abstractControl.errors);\n        // Abdurrahman: Merge defaults with custom overrides if provided\n        const errors = errorKeys.map((key) => this.customMessages?.[key] || this.config.errors[key]);\n        this.renderer.setProperty(this.errorsElement, 'textContent', errors.join(', '));\n        // Iben: insert the paragraph underneath the input component\n        this.renderer.insertBefore(this.elementRef.nativeElement.parentNode, this.errorsElement, this.renderer.nextSibling(this.elementRef.nativeElement));\n    }\n    /**\n     * Returns the errors based on the provided settings\n     *\n     * @param data - The error data we wish to use\n     */\n    getErrors(data) {\n        // Iben: Early exit in case the errors object is null\n        if (!data) {\n            return {\n                errors: [],\n                data: null,\n                errorKeys: [],\n            };\n        }\n        // Iben: If the config is set to all, we always show all errors\n        if (this.config.show === 'all') {\n            return {\n                errors: Object.keys(data).map((key) => this.config.errors[key]),\n                errorKeys: Object.keys(data),\n                data,\n            };\n        }\n        // Iben: If no limit is provided, we default to a single error\n        const limit = this.config.show === undefined ? 1 : this.config.show;\n        // Iben: Slice the errors based on the provided limit\n        return {\n            errors: Object.keys(data)\n                .map((key) => this.config.errors[key])\n                .slice(0, limit),\n            errorKeys: Object.keys(data).slice(0, limit),\n            data,\n        };\n    }\n    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.2.4\", ngImport: i0, type: NgxFormsErrorsDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n    static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.2.4\", type: NgxFormsErrorsDirective, isStandalone: true, selector: \"[ngxFormsErrors]\", inputs: { control: [\"ngxFormsErrors\", \"control\"], customErrorMessages: [\"ngxFormsErrorsCustomErrorMessages\", \"customErrorMessages\"] }, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.2.4\", ngImport: i0, type: NgxFormsErrorsDirective, decorators: [{\n            type: Directive,\n            args: [{\n                    selector: '[ngxFormsErrors]',\n                    standalone: true,\n                }]\n        }], ctorParameters: () => [], propDecorators: { control: [{\n                type: Input,\n                args: ['ngxFormsErrors']\n            }], customErrorMessages: [{\n                type: Input,\n                args: ['ngxFormsErrorsCustomErrorMessages']\n            }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9mb3Jtcy9zcmMvbGliL2RpcmVjdGl2ZXMvZXJyb3JzL2Vycm9ycy5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVOLGlCQUFpQixFQUVqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLEtBQUssRUFFTCxTQUFTLEVBQ1QsV0FBVyxFQUNYLGdCQUFnQixFQUNoQixNQUFNLEdBQ04sTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUVOLGtCQUFrQixFQUNsQixhQUFhLEdBRWIsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN6RSxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFHaEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sYUFBYSxDQUFDOztBQU1uRCxNQUFNLE9BQU8sdUJBQXVCO0lBbURuQzs7T0FFRztJQUNILElBQ1csbUJBQW1CLENBQUMsS0FBNkI7UUFDM0QsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFFRDtRQTFEaUIsdUJBQWtCLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDcEUsc0JBQWlCLEdBQUcsTUFBTSxDQUFDLGFBQWEsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzlELGdCQUFXLEdBQUcsTUFBTSxDQUFtQixXQUFXLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN4RSxXQUFNLEdBQUcsTUFBTSxDQUMvQixnQ0FB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QUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUMvRCxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7Z0JBQzVCLElBQUk7YUFDSixDQUFDO1FBQ0gsQ0FBQztRQUVELDhEQUE4RDtRQUM5RCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFFcEUscURBQXFEO1FBQ3JELE9BQU87WUFDTixNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7aUJBQ3ZCLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQ3JDLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDO1lBQ2pCLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDO1lBQzVDLElBQUk7U0FDSixDQUFDO0lBQ0gsQ0FBQzs4R0EvUFcsdUJBQXVCO2tHQUF2Qix1QkFBdUI7OzJGQUF2Qix1QkFBdUI7a0JBSm5DLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLGtCQUFrQjtvQkFDNUIsVUFBVSxFQUFFLElBQUk7aUJBQ2hCO3dEQW1EZ0MsT0FBTztzQkFBdEMsS0FBSzt1QkFBQyxnQkFBZ0I7Z0JBS1osbUJBQW1CO3NCQUQ3QixLQUFLO3VCQUFDLG1DQUFtQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdEFmdGVyVmlld0luaXQsXG5cdENoYW5nZURldGVjdG9yUmVmLFxuXHRDb21wb25lbnRSZWYsXG5cdERpcmVjdGl2ZSxcblx0RWxlbWVudFJlZixcblx0SW5wdXQsXG5cdE9uRGVzdHJveSxcblx0UmVuZGVyZXIyLFxuXHRUZW1wbGF0ZVJlZixcblx0Vmlld0NvbnRhaW5lclJlZixcblx0aW5qZWN0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG5cdEFic3RyYWN0Q29udHJvbCxcblx0Rm9ybUdyb3VwRGlyZWN0aXZlLFxuXHRGb3JtR3JvdXBOYW1lLFxuXHRWYWxpZGF0aW9uRXJyb3JzLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IFN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIHN0YXJ0V2l0aCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE5neEZvcm1zRXJyb3JzQ29uZmlndXJhdGlvblRva2VuIH0gZnJvbSAnLi4vLi4vdG9rZW5zJztcbmltcG9ydCB7IE5neEZvcm1zRXJyb3JDb25maWd1cmF0aW9uT3B0aW9ucyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgTmd4Rm9ybXNFcnJvckFic3RyYWN0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYWJzdHJhY3RzJztcbmltcG9ydCB7IHRvdWNoZWRFdmVudExpc3RlbmVyIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuXG5ARGlyZWN0aXZlKHtcblx0c2VsZWN0b3I6ICdbbmd4Rm9ybXNFcnJvcnNdJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgTmd4Rm9ybXNFcnJvcnNEaXJlY3RpdmUgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuXHRwcml2YXRlIHJlYWRvbmx5IGZvcm1Hcm91cERpcmVjdGl2ZSA9IGluamVjdChGb3JtR3JvdXBEaXJlY3RpdmUsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cdHByaXZhdGUgcmVhZG9ubHkgZm9ybU5hbWVEaXJlY3RpdmUgPSBpbmplY3QoRm9ybUdyb3VwTmFtZSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblx0cHJpdmF0ZSByZWFkb25seSB0ZW1wbGF0ZVJlZiA9IGluamVjdDxUZW1wbGF0ZVJlZjxhbnk+PihUZW1wbGF0ZVJlZiwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblx0cHJpdmF0ZSByZWFkb25seSBjb25maWcgPSBpbmplY3Q8Tmd4Rm9ybXNFcnJvckNvbmZpZ3VyYXRpb25PcHRpb25zPihcblx0XHROZ3hGb3Jtc0Vycm9yc0NvbmZpZ3VyYXRpb25Ub2tlbixcblx0XHR7IG9wdGlvbmFsOiB0cnVlIH1cblx0KTtcblx0cHJpdmF0ZSByZWFkb25seSB2aWV3Q29udGFpbmVyID0gaW5qZWN0KFZpZXdDb250YWluZXJSZWYpO1xuXHRwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZik7XG5cdHByaXZhdGUgcmVhZG9ubHkgcmVuZGVyZXIgPSBpbmplY3QoUmVuZGVyZXIyKTtcblx0cHJpdmF0ZSByZWFkb25seSBjZFJlZiA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cblx0Ly8gSWJlbjogSGFuZGxlIHRoZSBPbkRlc3Ryb3kgZmxvd1xuXHRwcml2YXRlIHJlYWRvbmx5IG9uRGVzdHJveVN1YmplY3QkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblx0cHJpdmF0ZSByZWFkb25seSBvbkRlc3Ryb3kkID0gdGhpcy5vbkRlc3Ryb3lTdWJqZWN0JC5hc09ic2VydmFibGUoKTtcblxuXHQvKipcblx0ICogIFRoZSBhY3R1YWwgdGVtcGxhdGUgb2YgdGhlIGlucHV0IGVsZW1lbnRcblx0ICovXG5cdHByaXZhdGUgdGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cblx0LyoqXG5cdCAqIFRoZSBBYnN0cmFjdENvbnRyb2wgd2Ugd2lzaCB0byBsaXN0ZW4gdG8gd2hlbiB1c2luZyB0aGUgZGlyZWN0aXZlXG5cdCAqL1xuXHRwcml2YXRlIGFic3RyYWN0Q29udHJvbDogQWJzdHJhY3RDb250cm9sO1xuXG5cdC8qKlxuXHQgKiBUaGUgcCBlbGVtZW50IHdlIGFkZCB0byB0aGUgZG9tIHdoZW4gbm8gY29tcG9uZW50IGlzIHByb3ZpZGVkXG5cdCAqL1xuXHRwcml2YXRlIGVycm9yc0VsZW1lbnQ6IGFueTtcblxuXHQvKipcblx0ICogVGhlIGNvbXBvbmVudCB0byB3aGljaCB0aGUgZXJyb3IgZGF0YSBpcyBhZGRlZFxuXHQgKi9cblx0cHJpdmF0ZSBlcnJvckNvbXBvbmVudDogTmd4Rm9ybXNFcnJvckFic3RyYWN0Q29tcG9uZW50O1xuXG5cdC8qKlxuXHQgKiBUaGUgcmVmIG9mIHRoZSBjb21wb25lbnQgd2Ugd2lzaCB0byBhZGQgZXJyb3IgZGF0YSB0b1xuXHQgKi9cblx0cHJpdmF0ZSBjb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxOZ3hGb3Jtc0Vycm9yQWJzdHJhY3RDb21wb25lbnQ+O1xuXG5cdC8qKlxuXHQgKiBDdXN0b20gZXJyb3IgbWVzc2FnZXMgdG8gb3ZlcnJpZGUgZGVmYXVsdCBvbmVzXG5cdCAqL1xuXHRwcml2YXRlIGN1c3RvbU1lc3NhZ2VzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG5cdC8qKlxuXHQgKiBBIHJlZmVyZW5jZSB0byBhIGNvbnRyb2wgb3IgYSBzdHJpbmcgcmVmZXJlbmNlIHRvIHRoZSBjb250cm9sXG5cdCAqL1xuXHRASW5wdXQoJ25neEZvcm1zRXJyb3JzJykgcHVibGljIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCB8IHN0cmluZztcblx0LyoqXG5cdCAqIEN1c3RvbSBlcnJvciBtZXNzYWdlcyB0byBvdmVycmlkZSBkZWZhdWx0IG9uZXNcblx0ICovXG5cdEBJbnB1dCgnbmd4Rm9ybXNFcnJvcnNDdXN0b21FcnJvck1lc3NhZ2VzJylcblx0cHVibGljIHNldCBjdXN0b21FcnJvck1lc3NhZ2VzKHZhbHVlOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KSB7XG5cdFx0dGhpcy5jdXN0b21NZXNzYWdlcyA9IHZhbHVlID8/IHt9O1xuXHR9XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0Ly8gSWJlbjogU2V0IHRoZSBjdXJyZW50IHRlbXBsYXRlIHJlZiBhdCBjb25zdHJ1Y3RvciB0aW1lIHNvIHdlIGFjdHVhbGx5IGhhdmUgdGhlIHByb3ZpZGVkIHRlbXBsYXRlIChhcyBkb25lIGluIHRoZSAqbmdJZiBkaXJlY3RpdmUpXG5cdFx0aWYgKHRoaXMudGVtcGxhdGVSZWYpIHtcblx0XHRcdHRoaXMudGVtcGxhdGUgPSB0aGlzLnRlbXBsYXRlUmVmO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcblx0XHQvLyBJYmVuOiBIYW5kbGUgdGhlIG9uIGRlc3Ryb3kgZmxvd1xuXHRcdHRoaXMub25EZXN0cm95U3ViamVjdCQubmV4dCgpO1xuXHRcdHRoaXMub25EZXN0cm95U3ViamVjdCQuY29tcGxldGUoKTtcblx0fVxuXG5cdHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG5cdFx0Ly8gSWJlbjogUmVuZGVyIHRoZSBhY3R1YWwgaW5wdXQgc28gdGhhdCBpdCBpcyBhbHdheXMgdmlzaWJsZVxuXHRcdHRoaXMudmlld0NvbnRhaW5lci5jbGVhcigpO1xuXG5cdFx0Ly8gQWJkdXJyYWhtYW46IE9ubHkgcmVuZGVyIHRlbXBsYXRlIGlmIHRoaXMgZGlyZWN0aXZlIGlzIHVzZWQgaW4gc3RydWN0dXJhbCBmb3JtXG5cdFx0aWYgKHRoaXMudGVtcGxhdGUpIHtcblx0XHRcdHRoaXMudmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50ZW1wbGF0ZSk7XG5cdFx0fVxuXG5cdFx0Ly8gSWJlbjogSWYgbm8gY29udHJvbCB3YXMgcHJvdmlkZWQsIHdlIGVhcmx5IGV4aXQgYW5kIGxvZyBhbiBlcnJvclxuXHRcdGlmICghdGhpcy5jb250cm9sKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKCdOZ3hGb3JtczogTm8gY29udHJvbCB3YXMgcHJvdmlkZWQgdG8gdGhlIE5neEZvcm1zRXJyb3JEaXJlY3RpdmUnKTtcblxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIEliZW46IElmIHRoZSBjb250cm9sIGlzIGEgc3RyaW5nLCB3ZSBjaGVjayB0aGUgcGFyZW50IHRvIGZpbmQgdGhlIGFjdHVhbCBjb250cm9sLlxuXHRcdC8vIElmIG5vdCwgd2UgdXNlIHRoZSBwcm92aWRlZCBjb250cm9sXG5cdFx0aWYgKHR5cGVvZiB0aGlzLmNvbnRyb2wgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aGlzLmFic3RyYWN0Q29udHJvbCA9IHRoaXMuZm9ybUdyb3VwRGlyZWN0aXZlXG5cdFx0XHRcdD8gdGhpcy5mb3JtR3JvdXBEaXJlY3RpdmUuZm9ybS5nZXQodGhpcy5jb250cm9sKVxuXHRcdFx0XHQ6IHRoaXMuZm9ybU5hbWVEaXJlY3RpdmU/LmNvbnRyb2wuZ2V0KHRoaXMuY29udHJvbCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuYWJzdHJhY3RDb250cm9sID0gdGhpcy5jb250cm9sO1xuXHRcdH1cblxuXHRcdC8vIEliZW46IElmIG5vIGNvbnRyb2wgd2FzIGZvdW5kLCB3ZSBlYXJseSBleGl0IGFuZCBsb2cgYW4gZXJyb3Jcblx0XHRpZiAoIXRoaXMuYWJzdHJhY3RDb250cm9sKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKCdOZ3hGb3JtczogTm8gY29udHJvbCB3YXMgcHJvdmlkZWQgdG8gdGhlIE5neEZvcm1zRXJyb3JEaXJlY3RpdmUnKTtcblxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIEliZW46IExpc3RlbiB0byB0aGUgdmFsdWUgY2hhbmdlcywgc3RhdHVzIGNoYW5nZXMgYW5kIHRoZSB0b3VjaGVkIGNoYW5nZXMgb2YgdGhlIGNvbnRyb2xcblx0XHRjb21iaW5lTGF0ZXN0KFtcblx0XHRcdHRoaXMuYWJzdHJhY3RDb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKHN0YXJ0V2l0aCh0aGlzLmFic3RyYWN0Q29udHJvbC52YWx1ZSkpLFxuXHRcdFx0dG91Y2hlZEV2ZW50TGlzdGVuZXIodGhpcy5hYnN0cmFjdENvbnRyb2wpLFxuXHRcdFx0dGhpcy5hYnN0cmFjdENvbnRyb2wuc3RhdHVzQ2hhbmdlcy5waXBlKHN0YXJ0V2l0aCh0aGlzLmFic3RyYWN0Q29udHJvbC5zdGF0dXMpKSxcblx0XHRdKVxuXHRcdFx0LnBpcGUoXG5cdFx0XHRcdHRhcCgoWywgdG91Y2hlZF0pID0+IHtcblx0XHRcdFx0XHQvLyBJYmVuOiBDaGVjayB3aGV0aGVyIHdlIHNob3VsZCBzaG93IHRoZSBlcnJvciBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgY29uZmlnXG5cdFx0XHRcdFx0Y29uc3Qgc2hvdWxkU2hvdyA9XG5cdFx0XHRcdFx0XHR0aGlzLmFic3RyYWN0Q29udHJvbC5pbnZhbGlkICYmXG5cdFx0XHRcdFx0XHQodGhpcy5jb25maWcuc2hvd1doZW4gPT09ICd0b3VjaGVkJyA/IHRvdWNoZWQgOiB0aGlzLmFic3RyYWN0Q29udHJvbC5kaXJ0eSk7XG5cblx0XHRcdFx0XHQvLyBJYmVuOiBTaG93IHRoZSBlcnJvciBiYXNlZCBvbiB3aGV0aGVyIG9yIG5vdCBhIGNvbXBvbmVudCB3YXMgcHJvdmlkZWRcblx0XHRcdFx0XHRpZiAoIXRoaXMuY29uZmlnLmNvbXBvbmVudCkge1xuXHRcdFx0XHRcdFx0dGhpcy5oYW5kbGVOb0NvbXBvbmVudEZsb3coc2hvdWxkU2hvdyk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRoaXMuaGFuZGxlQ29tcG9uZW50UmVuZGVyKHNob3VsZFNob3cpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIEliZW46IERldGVjdCB0aGUgY2hhbmdlcyBzbyB0aGlzIHdvcmtzIHdpdGggKG5lc3RlZCkgT25QdXNoIGNvbXBvbmVudHNcblx0XHRcdFx0XHR0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcblx0XHRcdFx0fSksXG5cdFx0XHRcdHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSQpXG5cdFx0XHQpXG5cdFx0XHQuc3Vic2NyaWJlKCk7XG5cdH1cblxuXHQvKipcblx0ICogUmVuZGVycyBhIHByb3ZpZGVkIGN1c3RvbSBjb21wb25lbnQgdW5kZXJuZWF0aCB0aGUgaW5wdXQgY29tcG9uZW50XG5cdCAqXG5cdCAqIEBwYXJhbSBzaG91bGRTaG93IC0gV2hldGhlciB0aGUgZXJyb3Igc2hvdWxkIGJlIHNob3duXG5cdCAqL1xuXHRwcml2YXRlIGhhbmRsZUNvbXBvbmVudFJlbmRlcihzaG91bGRTaG93OiBib29sZWFuKSB7XG5cdFx0Ly8gSWJlbjogSWYgdGhlIGVycm9yIHNob3VsZCBub3QgYmUgc2hvd24sIHdlIGNoZWNrIGlmIHRoZXJlJ3MgYWxyZWFkeSBhbiBlcnJvciBjb21wb25lbnQgYW5kIGRlc3Ryb3kgaXQgaWYgbmVlZGVkXG5cdFx0aWYgKCFzaG91bGRTaG93KSB7XG5cdFx0XHRpZiAodGhpcy5lcnJvckNvbXBvbmVudCkge1xuXHRcdFx0XHR0aGlzLmNvbXBvbmVudFJlZi5kZXN0cm95KCk7XG5cdFx0XHRcdHRoaXMuY29tcG9uZW50UmVmID0gdW5kZWZpbmVkO1xuXHRcdFx0XHR0aGlzLmVycm9yQ29tcG9uZW50ID0gdW5kZWZpbmVkO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gSWJlbjogSWYgdGhlcmUgYWxyZWFkeSBpcyBhIGNvbXBvbmVudCwgZGVzdHJveSBpdCBzbyBpdCBjYW4gdXBkYXRlIGNvcnJlY3RseVxuXHRcdGlmICh0aGlzLmNvbXBvbmVudFJlZikge1xuXHRcdFx0dGhpcy5jb21wb25lbnRSZWYuZGVzdHJveSgpO1xuXHRcdFx0dGhpcy5jb21wb25lbnRSZWYgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0Ly8gSWJlbjogQWRkIHRoZSBuZXcgY29tcG9uZW50IHRvIHRoZSB2aWV3XG5cdFx0dGhpcy5jb21wb25lbnRSZWYgPSB0aGlzLnZpZXdDb250YWluZXIuY3JlYXRlQ29tcG9uZW50PE5neEZvcm1zRXJyb3JBYnN0cmFjdENvbXBvbmVudD4oXG5cdFx0XHR0aGlzLmNvbmZpZy5jb21wb25lbnRcblx0XHQpO1xuXHRcdHRoaXMuZXJyb3JDb21wb25lbnQgPSB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZTtcblxuXHRcdC8vIEliZW46IFNldCB0aGUgZGF0YSBvZiB0aGUgZXJyb3IgY29tcG9uZW50XG5cdFx0Y29uc3QgeyBlcnJvcktleXMsIGRhdGEgfSA9IHRoaXMuZ2V0RXJyb3JzKHRoaXMuYWJzdHJhY3RDb250cm9sLmVycm9ycyk7XG5cblx0XHQvLyBBYmR1cnJhaG1hbjogTWVyZ2UgZGVmYXVsdHMgd2l0aCBjdXN0b20gb3ZlcnJpZGVzIGlmIHByb3ZpZGVkXG5cdFx0Y29uc3QgZXJyb3JzID0gZXJyb3JLZXlzLm1hcChcblx0XHRcdChrZXkpID0+IHRoaXMuY3VzdG9tTWVzc2FnZXM/LltrZXldIHx8IHRoaXMuY29uZmlnLmVycm9yc1trZXldXG5cdFx0KTtcblxuXHRcdHRoaXMuZXJyb3JDb21wb25lbnQuZXJyb3JzID0gZXJyb3JzO1xuXHRcdHRoaXMuZXJyb3JDb21wb25lbnQuZXJyb3JLZXlzID0gZXJyb3JLZXlzO1xuXHRcdHRoaXMuZXJyb3JDb21wb25lbnQuZGF0YSA9IGRhdGE7XG5cdFx0dGhpcy5lcnJvckNvbXBvbmVudC5jdXN0b21FcnJvck1lc3NhZ2VzID0gdGhpcy5jdXN0b21NZXNzYWdlcztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW5kZXJzIGEgcCB0YWcgdW5kZXJuZWF0aCB0aGUgaW5wdXQgY29tcG9uZW50IHdoZW4gbm8gY3VzdG9tIGNvbXBvbmVudCB3YXMgcHJvdmlkZWRcblx0ICpcblx0ICogQHBhcmFtIHNob3VsZFNob3cgLSBXaGV0aGVyIHRoZSBlcnJvciBzaG91bGQgYmUgc2hvd25cblx0ICovXG5cdHByaXZhdGUgaGFuZGxlTm9Db21wb25lbnRGbG93KHNob3VsZFNob3c6IGJvb2xlYW4pIHtcblx0XHQvLyBJYmVuOiBXZSByZW1vdmUgdGhlIGN1cnJlbnQgZXJyb3JzIHNvIHRoYXQgd2UgYWx3YXlzIGhhdmUgYSBuZXcgZWxlbWVudCB0byB3b3JrIHdpdGhcblx0XHRpZiAodGhpcy5lcnJvcnNFbGVtZW50KSB7XG5cdFx0XHR0aGlzLnJlbmRlcmVyLnJlbW92ZUNoaWxkKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudE5vZGUsIHRoaXMuZXJyb3JzRWxlbWVudCk7XG5cblx0XHRcdHRoaXMuZXJyb3JzRWxlbWVudCA9IG51bGw7XG5cdFx0fVxuXG5cdFx0Ly8gSWJlbjogRWFybHkgZXhpdCBpbiBjYXNlIHRoZXJlJ3Mgbm8gZXJyb3IgdG8gc2hvd1xuXHRcdGlmICghc2hvdWxkU2hvdykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIEliZW46IENyZWF0ZSBhIG5ldyBlcnJvciBwYXJhZ3JhcGhcblx0XHR0aGlzLmVycm9yc0VsZW1lbnQgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ3AnKTtcblx0XHR0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmVycm9yc0VsZW1lbnQsICdjbGFzcycsICduZ3gtZm9ybXMtZXJyb3InKTtcblxuXHRcdC8vIEliZW46IFNldCB0aGUgZXJyb3JzIGJhc2VkIG9uIHRoZSBrZXlzXG5cdFx0Y29uc3QgeyBlcnJvcktleXMgfSA9IHRoaXMuZ2V0RXJyb3JzKHRoaXMuYWJzdHJhY3RDb250cm9sLmVycm9ycyk7XG5cblx0XHQvLyBBYmR1cnJhaG1hbjogTWVyZ2UgZGVmYXVsdHMgd2l0aCBjdXN0b20gb3ZlcnJpZGVzIGlmIHByb3ZpZGVkXG5cdFx0Y29uc3QgZXJyb3JzID0gZXJyb3JLZXlzLm1hcChcblx0XHRcdChrZXkpID0+IHRoaXMuY3VzdG9tTWVzc2FnZXM/LltrZXldIHx8IHRoaXMuY29uZmlnLmVycm9yc1trZXldXG5cdFx0KTtcblxuXHRcdHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5lcnJvcnNFbGVtZW50LCAndGV4dENvbnRlbnQnLCBlcnJvcnMuam9pbignLCAnKSk7XG5cblx0XHQvLyBJYmVuOiBpbnNlcnQgdGhlIHBhcmFncmFwaCB1bmRlcm5lYXRoIHRoZSBpbnB1dCBjb21wb25lbnRcblx0XHR0aGlzLnJlbmRlcmVyLmluc2VydEJlZm9yZShcblx0XHRcdHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudE5vZGUsXG5cdFx0XHR0aGlzLmVycm9yc0VsZW1lbnQsXG5cdFx0XHR0aGlzLnJlbmRlcmVyLm5leHRTaWJsaW5nKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KVxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgZXJyb3JzIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBzZXR0aW5nc1xuXHQgKlxuXHQgKiBAcGFyYW0gZGF0YSAtIFRoZSBlcnJvciBkYXRhIHdlIHdpc2ggdG8gdXNlXG5cdCAqL1xuXHRwcml2YXRlIGdldEVycm9ycyhkYXRhOiBWYWxpZGF0aW9uRXJyb3JzKToge1xuXHRcdGVycm9yczogc3RyaW5nW107XG5cdFx0ZGF0YTogVmFsaWRhdGlvbkVycm9ycztcblx0XHRlcnJvcktleXM6IHN0cmluZ1tdO1xuXHR9IHtcblx0XHQvLyBJYmVuOiBFYXJseSBleGl0IGluIGNhc2UgdGhlIGVycm9ycyBvYmplY3QgaXMgbnVsbFxuXHRcdGlmICghZGF0YSkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0ZXJyb3JzOiBbXSxcblx0XHRcdFx0ZGF0YTogbnVsbCxcblx0XHRcdFx0ZXJyb3JLZXlzOiBbXSxcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0Ly8gSWJlbjogSWYgdGhlIGNvbmZpZyBpcyBzZXQgdG8gYWxsLCB3ZSBhbHdheXMgc2hvdyBhbGwgZXJyb3JzXG5cdFx0aWYgKHRoaXMuY29uZmlnLnNob3cgPT09ICdhbGwnKSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRlcnJvcnM6IE9iamVjdC5rZXlzKGRhdGEpLm1hcCgoa2V5KSA9PiB0aGlzLmNvbmZpZy5lcnJvcnNba2V5XSksXG5cdFx0XHRcdGVycm9yS2V5czogT2JqZWN0LmtleXMoZGF0YSksXG5cdFx0XHRcdGRhdGEsXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdC8vIEliZW46IElmIG5vIGxpbWl0IGlzIHByb3ZpZGVkLCB3ZSBkZWZhdWx0IHRvIGEgc2luZ2xlIGVycm9yXG5cdFx0Y29uc3QgbGltaXQgPSB0aGlzLmNvbmZpZy5zaG93ID09PSB1bmRlZmluZWQgPyAxIDogdGhpcy5jb25maWcuc2hvdztcblxuXHRcdC8vIEliZW46IFNsaWNlIHRoZSBlcnJvcnMgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGxpbWl0XG5cdFx0cmV0dXJuIHtcblx0XHRcdGVycm9yczogT2JqZWN0LmtleXMoZGF0YSlcblx0XHRcdFx0Lm1hcCgoa2V5KSA9PiB0aGlzLmNvbmZpZy5lcnJvcnNba2V5XSlcblx0XHRcdFx0LnNsaWNlKDAsIGxpbWl0KSxcblx0XHRcdGVycm9yS2V5czogT2JqZWN0LmtleXMoZGF0YSkuc2xpY2UoMCwgbGltaXQpLFxuXHRcdFx0ZGF0YSxcblx0XHR9O1xuXHR9XG59XG4iXX0=","import { inject } from '@angular/core';\nimport { of } from 'rxjs';\nimport { NgxSaveOnExitAbstractService } from '../../abstracts';\n/**\n * Checks whether or not we can navigate away from a page\n *\n * @param {NgxSaveOnExitComponent} component\n * @return {*}  {ObservableBoolean}\n * @memberof SaveOnExitGuard\n */\nexport const NgxSaveOnExitGuard = (component, currentRoute, currentState, nextState) => {\n    // Iben: Fetch all injectables\n    const saveOnExitService = inject(NgxSaveOnExitAbstractService);\n    // Iben: In case the component is not dirty, we can route without problems\n    if (!component.isDirty()) {\n        return of(true);\n    }\n    // Iben: Check if the service has a bypassSaveOnExit function. If it does, run to see of the current route needs to be bypassed\n    if (saveOnExitService.bypassSaveOnExit &&\n        saveOnExitService.bypassSaveOnExit(currentRoute, nextState)) {\n        return of(true);\n    }\n    // Iben: In case the component is dirty, we will let the SaveOnExitService know so they can take the appropriate action\n    return saveOnExitService.handleDirtyState(component);\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2F2ZS1vbi1leGl0Lmd1YXJkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2Zvcm1zL3NyYy9saWIvZ3VhcmRzL3NhdmUtb24tZXhpdC9zYXZlLW9uLWV4aXQuZ3VhcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV2QyxPQUFPLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXRDLE9BQU8sRUFBRSw0QkFBNEIsRUFBMEIsTUFBTSxpQkFBaUIsQ0FBQztBQUV2Rjs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBNEMsQ0FDMUUsU0FBaUMsRUFDakMsWUFBb0MsRUFDcEMsWUFBaUMsRUFDakMsU0FBOEIsRUFDUixFQUFFO0lBQ3hCLDhCQUE4QjtJQUM5QixNQUFNLGlCQUFpQixHQUFpQyxNQUFNLENBQUMsNEJBQTRCLENBQUMsQ0FBQztJQUU3RiwwRUFBMEU7SUFDMUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1FBQzFCLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pCLENBQUM7SUFFRCwrSEFBK0g7SUFDL0gsSUFDQyxpQkFBaUIsQ0FBQyxnQkFBZ0I7UUFDbEMsaUJBQWlCLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxFQUMxRCxDQUFDO1FBQ0YsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakIsQ0FBQztJQUVELHVIQUF1SDtJQUN2SCxPQUFPLGlCQUFpQixDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3RELENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgQ2FuRGVhY3RpdmF0ZUZuLCBSb3V0ZXJTdGF0ZVNuYXBzaG90IH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IE5neFNhdmVPbkV4aXRBYnN0cmFjdFNlcnZpY2UsIE5neFNhdmVPbkV4aXRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hYnN0cmFjdHMnO1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIG9yIG5vdCB3ZSBjYW4gbmF2aWdhdGUgYXdheSBmcm9tIGEgcGFnZVxuICpcbiAqIEBwYXJhbSB7Tmd4U2F2ZU9uRXhpdENvbXBvbmVudH0gY29tcG9uZW50XG4gKiBAcmV0dXJuIHsqfSAge09ic2VydmFibGVCb29sZWFufVxuICogQG1lbWJlcm9mIFNhdmVPbkV4aXRHdWFyZFxuICovXG5leHBvcnQgY29uc3QgTmd4U2F2ZU9uRXhpdEd1YXJkOiBDYW5EZWFjdGl2YXRlRm48Tmd4U2F2ZU9uRXhpdENvbXBvbmVudD4gPSAoXG5cdGNvbXBvbmVudDogTmd4U2F2ZU9uRXhpdENvbXBvbmVudCxcblx0Y3VycmVudFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LFxuXHRjdXJyZW50U3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3QsXG5cdG5leHRTdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdFxuKTogT2JzZXJ2YWJsZTxib29sZWFuPiA9PiB7XG5cdC8vIEliZW46IEZldGNoIGFsbCBpbmplY3RhYmxlc1xuXHRjb25zdCBzYXZlT25FeGl0U2VydmljZTogTmd4U2F2ZU9uRXhpdEFic3RyYWN0U2VydmljZSA9IGluamVjdChOZ3hTYXZlT25FeGl0QWJzdHJhY3RTZXJ2aWNlKTtcblxuXHQvLyBJYmVuOiBJbiBjYXNlIHRoZSBjb21wb25lbnQgaXMgbm90IGRpcnR5LCB3ZSBjYW4gcm91dGUgd2l0aG91dCBwcm9ibGVtc1xuXHRpZiAoIWNvbXBvbmVudC5pc0RpcnR5KCkpIHtcblx0XHRyZXR1cm4gb2YodHJ1ZSk7XG5cdH1cblxuXHQvLyBJYmVuOiBDaGVjayBpZiB0aGUgc2VydmljZSBoYXMgYSBieXBhc3NTYXZlT25FeGl0IGZ1bmN0aW9uLiBJZiBpdCBkb2VzLCBydW4gdG8gc2VlIG9mIHRoZSBjdXJyZW50IHJvdXRlIG5lZWRzIHRvIGJlIGJ5cGFzc2VkXG5cdGlmIChcblx0XHRzYXZlT25FeGl0U2VydmljZS5ieXBhc3NTYXZlT25FeGl0ICYmXG5cdFx0c2F2ZU9uRXhpdFNlcnZpY2UuYnlwYXNzU2F2ZU9uRXhpdChjdXJyZW50Um91dGUsIG5leHRTdGF0ZSlcblx0KSB7XG5cdFx0cmV0dXJuIG9mKHRydWUpO1xuXHR9XG5cblx0Ly8gSWJlbjogSW4gY2FzZSB0aGUgY29tcG9uZW50IGlzIGRpcnR5LCB3ZSB3aWxsIGxldCB0aGUgU2F2ZU9uRXhpdFNlcnZpY2Uga25vdyBzbyB0aGV5IGNhbiB0YWtlIHRoZSBhcHByb3ByaWF0ZSBhY3Rpb25cblx0cmV0dXJuIHNhdmVPbkV4aXRTZXJ2aWNlLmhhbmRsZURpcnR5U3RhdGUoY29tcG9uZW50KTtcbn07XG4iXX0=","/*\n * Public API Surface of forms\n */\nexport { NgxValidators } from './lib/validators/validators';\nexport { setFormError, clearFormError, isEmptyInputValue } from './lib/validators/utils';\nexport * from './lib/abstracts';\nexport * from './lib/utils';\nexport * from './lib/interfaces';\nexport * from './lib/directives';\nexport * from './lib/tokens';\nexport * from './lib/guards';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9mb3Jtcy9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pGLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBmb3Jtc1xuICovXG5cbmV4cG9ydCB7IE5neFZhbGlkYXRvcnMgfSBmcm9tICcuL2xpYi92YWxpZGF0b3JzL3ZhbGlkYXRvcnMnO1xuZXhwb3J0IHsgc2V0Rm9ybUVycm9yLCBjbGVhckZvcm1FcnJvciwgaXNFbXB0eUlucHV0VmFsdWUgfSBmcm9tICcuL2xpYi92YWxpZGF0b3JzL3V0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Fic3RyYWN0cyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi91dGlscyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9pbnRlcmZhY2VzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RpcmVjdGl2ZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdG9rZW5zJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2d1YXJkcyc7XG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './public-api';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3R1ZGlvaHlwZXJkcml2ZS1uZ3gtZm9ybXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvZm9ybXMvc3JjL3N0dWRpb2h5cGVyZHJpdmUtbmd4LWZvcm1zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vcHVibGljLWFwaSc7XG4iXX0="],"names":["EMPTY_SET","tap","takeUntil"],"mappings":"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"}