{"version":3,"file":"ibenvandeveire-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/chronological-dates/chronological-dates.validator.js","../tmp-esm2022/lib/validators/date-range/date-range.validator.js","../tmp-esm2022/lib/validators/decimals-after-comma/decimals-after-comma.validator.js","../tmp-esm2022/lib/validators/depended-required/depended-required.validator.js","../tmp-esm2022/lib/validators/validators.js","../tmp-esm2022/lib/utils/custom-update-value-and-validity/custom-update-value-and-validity.util.js","../tmp-esm2022/lib/utils/mark-all-as-dirty/mark-all-as-dirty.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/base-form/base-form.accessor.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/lib/providers/errors/errors-configuration.provider.js","../tmp-esm2022/index.js","../tmp-esm2022/ibenvandeveire-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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXMtZW1wdHktaW5wdXQtdmFsdWUudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9mb3Jtcy9zcmMvbGliL3ZhbGlkYXRvcnMvdXRpbHMvaXMtZW1wdHktaW5wdXQtdmFsdWUudXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLEtBQVUsRUFBVyxFQUFFO0lBQ3hELDhEQUE4RDtJQUM5RCxPQUFPLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7QUFDNUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IGlzRW1wdHlJbnB1dFZhbHVlID0gKHZhbHVlOiBhbnkpOiBib29sZWFuID0+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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1lcnJvci51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2Zvcm1zL3NyYy9saWIvdmFsaWRhdG9ycy91dGlscy9mb3JtLWVycm9yLnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxLQUFLLE1BQU0sV0FBVyxDQUFDO0FBRTlCOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsT0FBd0IsRUFBRSxLQUFhLEVBQVEsRUFBRTtJQUMvRSxvSUFBb0k7SUFDcEksTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFMUQsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUM3QyxPQUFPO0lBQ1IsQ0FBQztJQUVELHFHQUFxRztJQUNyRyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUM1QyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXhCLE9BQU87SUFDUixDQUFDO0lBRUQsc0VBQXNFO0lBQ3RFLE9BQU8sQ0FBQyxTQUFTLENBQ2hCLEtBQUssQ0FBQztRQUNMLEdBQUcsT0FBTyxDQUFDLE1BQU07UUFDakIsQ0FBQyxLQUFLLENBQUMsRUFBRSxTQUFTO0tBQ2xCLENBQUMsQ0FDRixDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBRUY7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQUMsT0FBd0IsRUFBRSxLQUFhLEVBQUUsUUFBYSxJQUFJLEVBQVEsRUFBRTtJQUNoRyw2REFBNkQ7SUFDN0QsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDN0IsT0FBTztJQUNSLENBQUM7SUFFRCwrQkFBK0I7SUFDL0IsT0FBTyxDQUFDLFNBQVMsQ0FBQztRQUNqQixHQUFHLE9BQU8sQ0FBQyxNQUFNO1FBQ2pCLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSztLQUNkLENBQUMsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0Q29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCBjbGVhbiBmcm9tICdvYmotY2xlYW4nO1xuXG4vKipcbiAqIFJlbW92ZXMgYW4gZXJyb3IgZnJvbSBhIGZvcm0gY29udHJvbFxuICpcbiAqIEBwYXJhbSBjb250cm9sIC0gRm9ybSBjb250cm9sIHRvIHJlbW92ZSB0aGUgZXJyb3IgZnJvbS5cbiAqIEBwYXJhbSBlcnJvciAgLSBOYW1lIG9mIHRoZSBlcnJvciB0byByZW1vdmUgZnJvbSB0aGUgY29udHJvbC5cbiAqL1xuZXhwb3J0IGNvbnN0IGNsZWFyRm9ybUVycm9yID0gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgZXJyb3I6IHN0cmluZyk6IHZvaWQgPT4ge1xuXHQvLyBJYmVuOiBDaGVjayBpZiB0aGVyZSBhcmUgbm8gZXJyb3JzIGV4aXN0aW5nIG9uIHRoaXMgY29udHJvbCBvciBpZiB0aGUgdGhlIHByb3ZpZGVkIGVycm9yIGRvZXMgbm90IGV4aXN0LCBhbmQgZWFybHkgZXhpdCBpZiBuZWVkZWRcblx0Y29uc3QgZXJyb3JzID0gbmV3IFNldChPYmplY3Qua2V5cyhjb250cm9sLmVycm9ycyB8fCB7fSkpO1xuXG5cdGlmIChlcnJvcnMuc2l6ZSA9PT0gMCB8fCAhZXJyb3JzLmhhcyhlcnJvcikpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBJYmVuOiBJbiBjYXNlIHRoZSBwcm92aWRlZCBlcnJvciBpcyB0aGUgb25seSBlcnJvciBvbiB0aGUgY29udHJvbCwgY2xlYXIgYWxsIGVycm9ycyBhbmQgZWFybHkgZXhpdFxuXHRpZiAoZXJyb3JzLmhhcyhlcnJvcikgJiYgZXJyb3JzLnNpemUgPT09IDEpIHtcblx0XHRjb250cm9sLnNldEVycm9ycyhudWxsKTtcblxuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIEliZW46IEluIGNhc2UgdGhlcmUgYXJlIG1vcmUgZXJyb3JzLCByZW1vdmUgb25seSB0aGUgcHJvdmlkZWQgZXJyb3Jcblx0Y29udHJvbC5zZXRFcnJvcnMoXG5cdFx0Y2xlYW4oe1xuXHRcdFx0Li4uY29udHJvbC5lcnJvcnMsXG5cdFx0XHRbZXJyb3JdOiB1bmRlZmluZWQsXG5cdFx0fSlcblx0KTtcbn07XG5cbi8qKlxuICogQWRkcyBhbiBlcnJvciB0byBhIGZvcm0gY29udHJvbFxuICpcbiAqIEBwYXJhbSBjb250cm9sIC0gRm9ybSBjb250cm9sIHRvIGF0dGFjaCB0aGUgZXJyb3IgdG8uXG4gKiBAcGFyYW0gZXJyb3IgLSBOYW1lIG9mIHRoZSBlcnJvciB0byBhdHRhY2ggdG8gdGhlIGNvbnRyb2wuXG4gKiBAcGFyYW0gdmFsdWUgLSBWYWx1ZSBvZiB0aGUgZXJyb3IgYmVpbmcgYXR0YWNoZWQgdG8gdGhlIGNvbnRyb2xcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEZvcm1FcnJvciA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsIGVycm9yOiBzdHJpbmcsIHZhbHVlOiBhbnkgPSB0cnVlKTogdm9pZCA9PiB7XG5cdC8vIEliZW46IEVhcmx5IGV4aXQgaW4gY2FzZSB0aGUgY29udHJvbCBhbHJlYWR5IGhhcyB0aGUgZXJyb3Jcblx0aWYgKGNvbnRyb2wuaGFzRXJyb3IoZXJyb3IpKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gSWJlbjogQWRkIHRoZSBwcm92aWRlZCBlcnJvclxuXHRjb250cm9sLnNldEVycm9ycyh7XG5cdFx0Li4uY29udHJvbC5lcnJvcnMsXG5cdFx0W2Vycm9yXTogdmFsdWUsXG5cdH0pO1xufTtcbiJdfQ==","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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxsLW9yLW5vdGhpbmctcmVxdWlyZWQudmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2Zvcm1zL3NyYy9saWIvdmFsaWRhdG9ycy9hbGwtb3Itbm90aGluZy1yZXF1aXJlZC9hbGwtb3Itbm90aGluZy1yZXF1aXJlZC52YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxLQUFLLE1BQU0sV0FBVyxDQUFDO0FBRTlCLE9BQU8sRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRXhELE1BQU0sU0FBUyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBRWpEOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUFHLENBQzVDLElBQWUsRUFDa0MsRUFBRTtJQUNuRCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVyQyx1RUFBdUU7SUFDdkUsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDNUUsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN4QixjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUMzQyxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDYixDQUFDO0lBRUQsMERBQTBEO0lBQzFELE1BQU0sWUFBWSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFFdkMsZ0ZBQWdGO0lBQ2hGLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtRQUNwQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTlCLHNDQUFzQztRQUN0QyxNQUFNLE9BQU8sR0FDWixPQUFPLE9BQU8sQ0FBQyxLQUFLLEtBQUssUUFBUSxJQUFJLE9BQU8sQ0FBQyxLQUFLLEtBQUssSUFBSTtZQUMxRCxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUM7WUFDaEQsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWpDLDBDQUEwQztRQUMxQyxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ2IsWUFBWSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztZQUVsQyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZCLENBQUM7YUFBTSxDQUFDO1lBQ1AsY0FBYyxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztZQUVwQyxZQUFZLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLENBQUM7SUFDRixDQUFDLENBQUMsQ0FBQztJQUVILG9HQUFvRztJQUNwRyxPQUFPLFlBQVksQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUseUJBQXlCLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO0FBQ2pHLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCBjbGVhbiBmcm9tICdvYmotY2xlYW4nO1xuXG5pbXBvcnQgeyBjbGVhckZvcm1FcnJvciwgc2V0Rm9ybUVycm9yIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5jb25zdCBFTVBUWV9TRVQgPSBuZXcgU2V0KFt1bmRlZmluZWQsIG51bGwsICcnXSk7XG5cbi8qKlxuICogRm9ybUdyb3VwIHZhbGlkYXRvciB3aGljaCBjaGVja3MgaWYgZWl0aGVyIGFsbCB2YWx1ZXMgb3Igbm8gdmFsdWVzIGFyZSBmaWxsZWQgaW5cbiAqXG4gKiBAcGFyYW0gY29udHJvbHMgLSBBbiBhcnJheSBvZiBjb250cm9scy5cbiAqIEBwYXJhbSBkZXBlbmRlZENvbnRyb2xLZXkgLSBBIGNvbnRyb2wgd2l0aGluIHRoZSBncm91cCB3aGljaCB0aGUgb3RoZXIgY29udHJvbHMgZGVwZW5kIG9uLlxuICogQHBhcmFtIG1hdGNoRnVuY3Rpb24gLSBPcHRpb25hbCBmdW5jdGlvbiB0aGUgZGVwZW5kZWRDb250cm9sIHNob3VsZCBjaGVja1xuICovXG5leHBvcnQgY29uc3QgYWxsT3JOb3RoaW5nUmVxdWlyZWRWYWxpZGF0b3IgPSAoXG5cdGZvcm06IEZvcm1Hcm91cFxuKTogeyBhbGxPck5vdGhpbmdSZXF1aXJlZEVycm9yOiBzdHJpbmdbXSB9IHwgbnVsbCA9PiB7XG5cdGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhmb3JtLnZhbHVlKTtcblxuXHQvLyBJYmVuOiAgSWYgdGhlIGdyb3VwIGlzIGNvbXBsZXRlbHkgZW1wdHkgd2UgY2xlYXIgYWxsIHJlcXVpcmVkIGVycm9yc1xuXHRpZiAoT2JqZWN0LmtleXMoY2xlYW4oZm9ybS52YWx1ZSwgeyBwcmVzZXJ2ZUFycmF5czogZmFsc2UgfSkpLmxlbmd0aCA9PT0gMCkge1xuXHRcdGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcblx0XHRcdGNsZWFyRm9ybUVycm9yKGZvcm0uZ2V0KGtleSksICdyZXF1aXJlZCcpO1xuXHRcdH1cblxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Ly8gSWJlbjogIENvbGxlY3QgYWxsIGNvbnRyb2wga2V5cyB0aGF0IGFyZSBtaXNzaW5nIHZhbHVlc1xuXHRjb25zdCByZXF1aXJlZEtleXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuXHQvLyBJYmVuOiBMb29wIG92ZXIgYWxsIGtleXMgYW5kIGNoZWNrIGVhY2ggY29udHJvbCBvbiB3aGV0aGVyIGl0IGlzIGVtcHR5IG9yIG5vdFxuXHRrZXlzLmZvckVhY2goKGtleSkgPT4ge1xuXHRcdGNvbnN0IGNvbnRyb2wgPSBmb3JtLmdldChrZXkpO1xuXG5cdFx0Ly8gSWJlbjogQ2hlY2sgaWYgdGhlIGNvbnRyb2wgaXMgZW1wdHlcblx0XHRjb25zdCBpc0VtcHR5ID1cblx0XHRcdHR5cGVvZiBjb250cm9sLnZhbHVlID09PSAnb2JqZWN0JyAmJiBjb250cm9sLnZhbHVlICE9PSBudWxsXG5cdFx0XHRcdD8gT2JqZWN0LmtleXMoY2xlYW4oY29udHJvbC52YWx1ZSkpLmxlbmd0aCA9PT0gMFxuXHRcdFx0XHQ6IEVNUFRZX1NFVC5oYXMoY29udHJvbC52YWx1ZSk7XG5cblx0XHQvLyBJYmVuOiBBZGQvcmVtb3ZlIHRoZSBlcnJvcnMgd2hlbiBuZWVkZWRcblx0XHRpZiAoaXNFbXB0eSkge1xuXHRcdFx0c2V0Rm9ybUVycm9yKGNvbnRyb2wsICdyZXF1aXJlZCcpO1xuXG5cdFx0XHRyZXF1aXJlZEtleXMuYWRkKGtleSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNsZWFyRm9ybUVycm9yKGNvbnRyb2wsICdyZXF1aXJlZCcpO1xuXG5cdFx0XHRyZXF1aXJlZEtleXMuZGVsZXRlKGtleSk7XG5cdFx0fVxuXHR9KTtcblxuXHQvLyBJYmVuOiBSZXR1cm4gZWl0aGVyIG51bGwgb3IgdGhlIGxpc3Qgb2YgY29udHJvbHMgdGhhdCBhcmUgbWlzc2luZyB2YWx1ZXMgYmFzZWQgb24gdGhlIGVtcHR5IHN0YXRlXG5cdHJldHVybiByZXF1aXJlZEtleXMuc2l6ZSA9PT0gMCA/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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXQtbGVhc3Qtb25lLXJlcXVpcmVkLnZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9mb3Jtcy9zcmMvbGliL3ZhbGlkYXRvcnMvYXQtbGVhc3Qtb25lLXJlcXVpcmVkL2F0LWxlYXN0LW9uZS1yZXF1aXJlZC52YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxLQUFLLE1BQU0sV0FBVyxDQUFDO0FBRTlCLE9BQU8sRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBT3hEOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRyxDQUMxQyxPQUFxRCxFQUNwRCxFQUFFO0lBQ0gsT0FBTyxDQUFDLEtBQWdCLEVBQTRDLEVBQUU7UUFDckUsNkNBQTZDO1FBQzdDLElBQUksbUJBQTJDLENBQUM7UUFDaEQsSUFBSSxJQUFlLENBQUM7UUFFcEIsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNiLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQztZQUNsRCxJQUFJLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztRQUN6QixDQUFDO1FBQ0QsMkRBQTJEO1FBQzNELE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QyxNQUFNLFdBQVcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztRQUMzRCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMvQyxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQztRQUVyQyxvREFBb0Q7UUFDcEQsSUFDQyxDQUFDLEtBQUssSUFBSSxDQUFDLG1CQUFtQixDQUFDO1lBQy9CLENBQUMsS0FBSyxJQUFJLG1CQUFtQixJQUFJLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUNqRSxDQUFDO1lBQ0YsS0FBSyxNQUFNLE9BQU8sSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDaEMsWUFBWSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztZQUNuQyxDQUFDO1lBRUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLElBQUksRUFBRSxDQUFDO1FBQzFDLENBQUM7UUFFRCxvREFBb0Q7UUFDcEQsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNWLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxNQUFNLElBQUksV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUV0RixpRUFBaUU7WUFDakUscUZBQXFGO1lBQ3JGLElBQ0MsQ0FBQyxDQUFDLFNBQVMsSUFBSSxDQUFDLG1CQUFtQixDQUFDO2dCQUNwQyxDQUFDLENBQUMsU0FBUyxJQUFJLG1CQUFtQixJQUFJLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUN0RSxDQUFDO2dCQUNGLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7b0JBQ3hCLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO2dCQUMxQyxDQUFDO2dCQUVELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUMxQyxDQUFDO1FBQ0YsQ0FBQztRQUVELCtFQUErRTtRQUMvRSxLQUFLLE1BQU0sT0FBTyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2hDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDckMsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2IsQ0FBQyxDQUFDO0FBQ0gsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IGNsZWFuIGZyb20gJ29iai1jbGVhbic7XG5cbmltcG9ydCB7IGNsZWFyRm9ybUVycm9yLCBzZXRGb3JtRXJyb3IgfSBmcm9tICcuLi91dGlscyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXRMZWFzdE9uZVJlcXVpcmVkVmFsaWRhdG9yT3B0aW9uczxLZXlUeXBlIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPiB7XG5cdGNvbnRyb2xzPzogS2V5VHlwZVtdO1xuXHRjb25kaXRpb25hbEZ1bmN0aW9uPzogKGRhdGE6IGFueSkgPT4gYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBGb3JtR3JvdXAgdmFsaWRhdG9yIHdoaWNoIGNoZWNrcyBpZiBlaXRoZXIgYXQgbGVhc3Qgb25lIHZhbHVlIGlzIGZpbGxlZCBpblxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb3B0aW9uYWwgb2JqZWN0IHdpdGggY29uZmlndXJhdGlvbiBvcHRpb25zLCBzZWUgYmVsb3cgcGFyYW1zIGZvciBtb3JlIGluZm9cbiAqL1xuZXhwb3J0IGNvbnN0IGF0TGVhc3RPbmVSZXF1aXJlZFZhbGlkYXRvciA9IDxLZXlUeXBlIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPihcblx0b3B0aW9ucz86IEF0TGVhc3RPbmVSZXF1aXJlZFZhbGlkYXRvck9wdGlvbnM8S2V5VHlwZT5cbikgPT4ge1xuXHRyZXR1cm4gKGdyb3VwOiBGb3JtR3JvdXApOiB7IGF0TGVhc3RPbmVSZXF1aXJlZEVycm9yOiB0cnVlIH0gfCBudWxsID0+IHtcblx0XHQvLyBJYmVuOiBHZXQgdGhlIG9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gaXRlbXNcblx0XHRsZXQgY29uZGl0aW9uYWxGdW5jdGlvbjogKGRhdGE6IGFueSkgPT4gYm9vbGVhbjtcblx0XHRsZXQga2V5czogS2V5VHlwZVtdO1xuXG5cdFx0aWYgKG9wdGlvbnMpIHtcblx0XHRcdGNvbmRpdGlvbmFsRnVuY3Rpb24gPSBvcHRpb25zLmNvbmRpdGlvbmFsRnVuY3Rpb247XG5cdFx0XHRrZXlzID0gb3B0aW9ucy5jb250cm9scztcblx0XHR9XG5cdFx0Ly8gSWJlbjogU2V0dXAgdGhlIG5lZWRlZCB2YXJpYWJsZXMgdG8gaGFuZGxlIHRoZSB2YWxpZGF0b3Jcblx0XHRjb25zdCBjbGVhbmVkRm9ybVZhbHVlID0gY2xlYW4oZ3JvdXAudmFsdWUpO1xuXHRcdGNvbnN0IGNsZWFuZWRLZXlzID0gbmV3IFNldChPYmplY3Qua2V5cyhjbGVhbmVkRm9ybVZhbHVlKSk7XG5cdFx0Y29uc3QgY29udHJvbHMgPSBPYmplY3QudmFsdWVzKGdyb3VwLmNvbnRyb2xzKTtcblx0XHRjb25zdCBlbXB0eSA9IGNsZWFuZWRLZXlzLnNpemUgPT09IDA7XG5cblx0XHQvLyBJYmVuOiBJZiBub3RoaW5nIGlzIGZpbGxlZCBpbiwgd2UgcmV0dXJuIGFuIGVycm9yXG5cdFx0aWYgKFxuXHRcdFx0KGVtcHR5ICYmICFjb25kaXRpb25hbEZ1bmN0aW9uKSB8fFxuXHRcdFx0KGVtcHR5ICYmIGNvbmRpdGlvbmFsRnVuY3Rpb24gJiYgY29uZGl0aW9uYWxGdW5jdGlvbihncm91cC52YWx1ZSkpXG5cdFx0KSB7XG5cdFx0XHRmb3IgKGNvbnN0IGNvbnRyb2wgb2YgY29udHJvbHMpIHtcblx0XHRcdFx0c2V0Rm9ybUVycm9yKGNvbnRyb2wsICdyZXF1aXJlZCcpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4geyBhdExlYXN0T25lUmVxdWlyZWRFcnJvcjogdHJ1ZSB9O1xuXHRcdH1cblxuXHRcdC8vIEliZW46IENoZWNrIGlmIHdlIG5lZWQgdG8gY2hlY2sgb24gYSBzcGVjaWZpYyBrZXlcblx0XHRpZiAoa2V5cykge1xuXHRcdFx0Y29uc3QgaGFzT25lS2V5ID0ga2V5cy5yZWR1Y2UoKGhhc09uZSwga2V5KSA9PiBoYXNPbmUgfHwgY2xlYW5lZEtleXMuaGFzKGtleSksIGZhbHNlKTtcblxuXHRcdFx0Ly8gSWJlbjogT25seSByZXR1cm4gYW4gZXJyb3Igd2hlbiB0aGVyZSBpcyBubyBrZXkgbWF0Y2hlZCBhdCBhbGxcblx0XHRcdC8vIGFuZCBpbiBjYXNlIG9mIGEgY29uZGl0aW9uYWxGdW5jdGlvbiBpZiB0aGUgY29uZGl0aW9uYWxGdW5jdGlvbiBpcyBtYXRjaGVkIGFzIHdlbGxcblx0XHRcdGlmIChcblx0XHRcdFx0KCFoYXNPbmVLZXkgJiYgIWNvbmRpdGlvbmFsRnVuY3Rpb24pIHx8XG5cdFx0XHRcdCghaGFzT25lS2V5ICYmIGNvbmRpdGlvbmFsRnVuY3Rpb24gJiYgY29uZGl0aW9uYWxGdW5jdGlvbihncm91cC52YWx1ZSkpXG5cdFx0XHQpIHtcblx0XHRcdFx0Zm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuXHRcdFx0XHRcdHNldEZvcm1FcnJvcihncm91cC5nZXQoa2V5KSwgJ3JlcXVpcmVkJyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4geyBhdExlYXN0T25lUmVxdWlyZWRFcnJvcjogdHJ1ZSB9O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEliZW46IEluIGNhc2UgdGhlcmUgYXJlIG5vIGVycm9ycywgY2xlYW4gdGhlIHJlcXVpcmVkIGVycm9ycyBhbmQgcmV0dXJuIG51bGxcblx0XHRmb3IgKGNvbnN0IGNvbnRyb2wgb2YgY29udHJvbHMpIHtcblx0XHRcdGNsZWFyRm9ybUVycm9yKGNvbnRyb2wsICdyZXF1aXJlZCcpO1xuXHRcdH1cblxuXHRcdHJldHVybiBudWxsO1xuXHR9O1xufTtcbiJdfQ==","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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hyb25vbG9naWNhbC1kYXRlcy52YWxpZGF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvZm9ybXMvc3JjL2xpYi92YWxpZGF0b3JzL2Nocm9ub2xvZ2ljYWwtZGF0ZXMvY2hyb25vbG9naWNhbC1kYXRlcy52YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFM0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFeEQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsQ0FDMUMsZUFBdUIsRUFDdkIsYUFBcUIsRUFDckIsVUFBVSxHQUFHLFlBQVksRUFDWCxFQUFFO0lBQ2hCLE9BQU8sQ0FBQyxJQUFlLEVBQWdELEVBQUU7UUFDeEUsNEJBQTRCO1FBQzVCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNqQyxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDMUMsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRXRDLCtDQUErQztRQUMvQyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsRUFBRSw0QkFBNEIsQ0FBQyxDQUFDO1FBRXRFLDhHQUE4RztRQUM5RyxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDOUIsT0FBTyxJQUFJLENBQUM7UUFDYixDQUFDO1FBRUQscURBQXFEO1FBQ3JELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDcEUsT0FBTyxJQUFJLENBQUM7UUFDYixDQUFDO1FBRUQsNENBQTRDO1FBQzVDLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUMzRCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFFdkQsd0dBQXdHO1FBQ3hHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDbEUsT0FBTyxJQUFJLENBQUM7UUFDYixDQUFDO1FBRUQsc0VBQXNFO1FBQ3RFLElBQUksT0FBTyxHQUFHLFNBQVMsRUFBRSxDQUFDO1lBQ3pCLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxFQUFFLDRCQUE0QixDQUFDLENBQUM7WUFFcEUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLElBQUksRUFBRSxDQUFDO1FBQzlDLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNiLENBQUMsQ0FBQztBQUNILENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZvcm1Hcm91cCwgVmFsaWRhdG9yRm4gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBmb3JtYXQsIGlzVmFsaWQgfSBmcm9tICdkYXRlLWZucyc7XG5cbmltcG9ydCB7IGNsZWFyRm9ybUVycm9yLCBzZXRGb3JtRXJyb3IgfSBmcm9tICcuLi91dGlscyc7XG5cbi8qKlxuICogQSBGb3JtR3JvdXAgdmFsaWRhdG9yIHRvIGNoZWNrIHdoZXRoZXIgYSBzdGFydCBhbmQgZW5kIGRhdGUgYXJlIGNocm9ub2xvZ2ljYWxseSBjb3JyZWN0XG4gKlxuICogQHBhcmFtIHN0YXJ0Q29udHJvbEtleSAtIFRoZSBrZXkgb2YgdGhlIGNvbnRyb2wgY29udGFpbmluZyB0aGUgc3RhcnQgZGF0ZSB2YWx1ZVxuICogQHBhcmFtIGVuZENvbnRyb2xLZXkgLSBUaGUga2V5IG9mIHRoZSBjb250cm9sIGNvbnRhaW5pbmcgdGhlIGVuZCBkYXRlIHZhbHVlXG4gKiBAcGFyYW0gZm9ybWF0IC0gT3B0aW9uYWwgZm9ybWF0IG9mIHRoZSBkYXRlcyBwcm92aWRlZCBieSB0aGUgY29udHJvbHMsIGJ5IGRlZmF1bHQgeXl5eS1NTS1kZFxuICovXG5leHBvcnQgY29uc3QgY2hyb25vbG9naWNhbERhdGVzVmFsaWRhdG9yID0gKFxuXHRzdGFydENvbnRyb2xLZXk6IHN0cmluZyxcblx0ZW5kQ29udHJvbEtleTogc3RyaW5nLFxuXHRkYXRlRm9ybWF0ID0gJ3l5eXktTU0tZGQnXG4pOiBWYWxpZGF0b3JGbiA9PiB7XG5cdHJldHVybiAoZm9ybTogRm9ybUdyb3VwKTogeyBpbmNvcnJlY3RDaHJvbm9sb2dpY2FsRGF0ZXM6IHRydWUgfSB8IG51bGwgPT4ge1xuXHRcdC8vIEliZW46IEdldCB0aGUgZGF0ZSB2YWx1ZXNcblx0XHRjb25zdCB2YWx1ZSA9IGZvcm0uZ2V0UmF3VmFsdWUoKTtcblx0XHRjb25zdCBzdGFydFZhbHVlID0gdmFsdWVbc3RhcnRDb250cm9sS2V5XTtcblx0XHRjb25zdCBlbmRWYWx1ZSA9IHZhbHVlW2VuZENvbnRyb2xLZXldO1xuXG5cdFx0Ly8gSWJlbjogQ2xlYXIgdGhlIGZvcm0gZXJyb3Igb24gdGhlIGVuZENvbnRyb2xcblx0XHRjbGVhckZvcm1FcnJvcihmb3JtLmdldChlbmRDb250cm9sS2V5KSwgJ2luY29ycmVjdENocm9ub2xvZ2ljYWxEYXRlJyk7XG5cblx0XHQvLyBJYmVuOiBJZiBlaXRoZXIgZGF0ZSB2YWx1ZSBpcyBub3QgZmlsbGVkIGluLCB3ZSBlYXJseSBleGl0IHRvIGhhbmRsZSB0aGlzIGluIGEgcG90ZW50aWFsIHJlcXVpcmVkIHZhbGlkYXRvclxuXHRcdGlmICghc3RhcnRWYWx1ZSB8fCAhZW5kVmFsdWUpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdC8vIEliZW46IElmIHRoZSBkYXRlcyBhcyBpcyBhcmUgbm90IHZhbGlkLCBlYXJseSBleGl0XG5cdFx0aWYgKCFpc1ZhbGlkKG5ldyBEYXRlKHN0YXJ0VmFsdWUpKSB8fCAhaXNWYWxpZChuZXcgRGF0ZShlbmRWYWx1ZSkpKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHQvLyBJYmVuOiBDcmVhdGUgZGF0ZXMgc28gd2UgY2FuIGNvbXBhcmUgdGhlbVxuXHRcdGNvbnN0IHN0YXJ0RGF0ZSA9IGZvcm1hdChuZXcgRGF0ZShzdGFydFZhbHVlKSwgZGF0ZUZvcm1hdCk7XG5cdFx0Y29uc3QgZW5kRGF0ZSA9IGZvcm1hdChuZXcgRGF0ZShlbmRWYWx1ZSksIGRhdGVGb3JtYXQpO1xuXG5cdFx0Ly8gSWJlbjogSWYgZWl0aGVyIGRhdGUgaXMgaW52YWxpZCBiYXNlZCBvbiB0aGUgZm9ybWF0LCB3ZSBlYXJseSBleGl0IHRvIGhhbmRsZSB0aGlzIGluIGEgZGF0ZSB2YWxpZGF0b3Jcblx0XHRpZiAoIWlzVmFsaWQobmV3IERhdGUoc3RhcnREYXRlKSkgfHwgIWlzVmFsaWQobmV3IERhdGUoZW5kRGF0ZSkpKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHQvLyBJYmVuOiBJZiB0aGUgZW5kRGF0ZSBmYWxscyBiZWZvcmUgdGhlIHN0YXJ0RGF0ZSwgd2UgcmV0dXJuIGFuIGVycm9yXG5cdFx0aWYgKGVuZERhdGUgPCBzdGFydERhdGUpIHtcblx0XHRcdHNldEZvcm1FcnJvcihmb3JtLmdldChlbmRDb250cm9sS2V5KSwgJ2luY29ycmVjdENocm9ub2xvZ2ljYWxEYXRlJyk7XG5cblx0XHRcdHJldHVybiB7IGluY29ycmVjdENocm9ub2xvZ2ljYWxEYXRlczogdHJ1ZSB9O1xuXHRcdH1cblxuXHRcdHJldHVybiBudWxsO1xuXHR9O1xufTtcbiJdfQ==","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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1yYW5nZS52YWxpZGF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvZm9ybXMvc3JjL2xpYi92YWxpZGF0b3JzL2RhdGUtcmFuZ2UvZGF0ZS1yYW5nZS52YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFRMUM7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxHQUFXLEVBQUUsR0FBVyxFQUFFLFNBQWlCLFlBQVksRUFBRSxFQUFFO0lBQzdGLE9BQU8sQ0FBQyxPQUF3QixFQUFnRCxFQUFFO1FBQ2pGLG1FQUFtRTtRQUNuRSxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDO1lBQ3JCLE9BQU8sSUFBSSxDQUFDO1FBQ2IsQ0FBQztRQUVELHlEQUF5RDtRQUN6RCxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztRQUMvQyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLENBQUM7UUFFL0MsbUlBQW1JO1FBQ25JLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUM1QyxPQUFPO2dCQUNOLFlBQVksRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLGdCQUFnQjthQUNyRSxDQUFDO1FBQ0gsQ0FBQztRQUVELDZHQUE2RztRQUM3RyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDcEIsT0FBTyxJQUFJLENBQUM7UUFDYixDQUFDO1FBRUQseUZBQXlGO1FBQ3pGLElBQUksQ0FBQyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDOUMsT0FBTztnQkFDTixZQUFZLEVBQUUsSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLG1CQUFtQjthQUN2RSxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2IsQ0FBQyxDQUFDO0FBQ0gsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgaXNWYWxpZCwgcGFyc2UgfSBmcm9tICdkYXRlLWZucyc7XG5cbnR5cGUgRGF0ZVJhbmdlRXJyb3JDb2RlcyA9XG5cdHwgJ2ludmFsaWRNYXhEYXRlJ1xuXHR8ICdpbnZhbGlkTWluRGF0ZSdcblx0fCAnZGF0ZUFmdGVyTWF4RGF0ZSdcblx0fCAnZGF0ZUJlZm9yZU1pbkRhdGUnO1xuXG4vKipcbiAqIEZvcm0gY29udHJvbCB2YWxpZGF0b3Igd2hpY2ggdmFsaWRhdGVzIGlmIGEgZGF0ZSBpcyBiZXR3ZWVuIGEgcHJvdmlkZWQgcmFuZ2UgKGVkZ2VzIG5vdCBpbmNsdWRlZClcbiAqXG4gKiBAcGFyYW0gbWluRGF0ZSAtIE1pbmltdW0gdmFsaWQgZGF0ZVxuICogQHBhcmFtIG1heERhdGUgLSBNYXhpbXVtIHZhbGlkIGRhdGVcbiAqIEBwYXJhbSBmb3JtYXQgLSBPcHRpb25hbCBmb3JtYXQgdXNlZCBmb3IgYWxsIDMgZGF0ZXMsIGJ5IGRlZmF1bHQgeXl5eS1NTS1kZFxuICovXG5leHBvcnQgY29uc3QgZGF0ZVJhbmdlVmFsaWRhdG9yID0gKG1pbjogc3RyaW5nLCBtYXg6IHN0cmluZywgZm9ybWF0OiBzdHJpbmcgPSAneXl5eS1NTS1kZCcpID0+IHtcblx0cmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiB7IGludmFsaWRSYW5nZTogRGF0ZVJhbmdlRXJyb3JDb2RlcyB9IHwgbnVsbCA9PiB7XG5cdFx0Ly8gSWJlbjogRWFybHkgZXhpdCBpbiBjYXNlIHRoZSBjb250cm9sIG9yIHRoZSB2YWx1ZSBkb2VzIG5vdCBleGlzdFxuXHRcdGlmICghY29udHJvbD8udmFsdWUpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdC8vIEliZW4gOiBDcmVhdGUgZGF0ZSBvYmplY3RzIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBkYXRlc1xuXHRcdGNvbnN0IGRhdGUgPSBwYXJzZShjb250cm9sLnZhbHVlLCBmb3JtYXQsIG5ldyBEYXRlKCkpO1xuXHRcdGNvbnN0IG1heERhdGUgPSBwYXJzZShtYXgsIGZvcm1hdCwgbmV3IERhdGUoKSk7XG5cdFx0Y29uc3QgbWluRGF0ZSA9IHBhcnNlKG1pbiwgZm9ybWF0LCBuZXcgRGF0ZSgpKTtcblxuXHRcdC8vIEliZW46IEluIGNhc2UgZWl0aGVyIG9mIHRoZSBib3VuZGFyeSBkYXRlcyBpcyBpbnZhbGlkLCB3ZSBtYXJrIHRoZSBpbnB1dCBhcyBpbnZhbGlkIGFzIHdlIGNhbm5vdCBjb25maXJtIGl0J3MgaW4gdGhlIHJpZ2h0IHJhbmdlXG5cdFx0aWYgKCFpc1ZhbGlkKG1heERhdGUpIHx8ICFpc1ZhbGlkKG1pbkRhdGUpKSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRpbnZhbGlkUmFuZ2U6ICFpc1ZhbGlkKG1heERhdGUpID8gJ2ludmFsaWRNYXhEYXRlJyA6ICdpbnZhbGlkTWluRGF0ZScsXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdC8vIEliZW46IEluIGNhc2UgdGhlIGRhdGUgaXRzZWxmIGlzIGludmFsaWQsIHdlIGVhcmx5IGV4aXQgdG8gbGV0IGEgcG90ZW50aWFsIGRhdGUgdmFsaWRhdG9yIGhhbmRsZSB0aGUgZXJyb3Jcblx0XHRpZiAoIWlzVmFsaWQoZGF0ZSkpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdC8vIEliZW46IFdlIGNoZWNrIGlmIHRoZSBkYXRlIGlzIGluIGJldHdlZW4gdGhlIGJvdW5kYXJpZXMgYW5kIHJldHVybiBhbiBlcnJvciBpZiBuZWVkIGJlXG5cdFx0aWYgKCEobWluRGF0ZSA8PSBkYXRlKSB8fCAhKGRhdGUgPD0gbWF4RGF0ZSkpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGludmFsaWRSYW5nZTogZGF0ZSA+IG1heERhdGUgPyAnZGF0ZUFmdGVyTWF4RGF0ZScgOiAnZGF0ZUJlZm9yZU1pbkRhdGUnLFxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbnVsbDtcblx0fTtcbn07XG4iXX0=","/**\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjaW1hbHMtYWZ0ZXItY29tbWEudmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2Zvcm1zL3NyYy9saWIvdmFsaWRhdG9ycy9kZWNpbWFscy1hZnRlci1jb21tYS9kZWNpbWFscy1hZnRlci1jb21tYS52YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUE7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUU7SUFDMUQsT0FBTyxDQUFDLE9BQW9CLEVBQThDLEVBQUU7UUFDM0UsdUZBQXVGO1FBQ3ZGLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksT0FBTyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3pELE9BQU8sSUFBSSxDQUFDO1FBQ2IsQ0FBQztRQUVELCtHQUErRztRQUMvRyxPQUFPLElBQUksTUFBTSxDQUFDLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNwRSxDQUFDLENBQUMsSUFBSTtZQUNOLENBQUMsQ0FBQyxFQUFFLHlCQUF5QixFQUFFLElBQUksRUFBRSxDQUFDO0lBQ3hDLENBQUMsQ0FBQztBQUNILENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG4vKipcbiAqIFZhbGlkYXRlcyB3aGV0aGVyIHRoZSBpbnB1dHRlZCB2YWx1ZSBoYXMgZXhjZWVkZWQgdGhlIG1heGltdW0gYW1vdW50IG9mIGRlY2ltYWxzIGFmdGVyIHRoZSBjb21tYVxuICpcbiAqIEBwYXJhbSBtYXggLSBUaGUgbWF4aW11bSBudW1iZXIgb2YgZGVjaW1hbHMgYWZ0ZXIgdGhlIGNvbW1hXG4gKi9cbmV4cG9ydCBjb25zdCBkZWNpbWFsc0FmdGVyQ29tbWFWYWxpZGF0b3IgPSAobWF4OiBudW1iZXIpID0+IHtcblx0cmV0dXJuIChjb250cm9sOiBGb3JtQ29udHJvbCk6IHsgaW52YWxpZERlY2ltYWxzQWZ0ZXJDb21tYTogdHJ1ZSB9IHwgbnVsbCA9PiB7XG5cdFx0Ly8gSWJlbjogSW4gY2FzZSBubyBjb250cm9sIHdhcyBwcm92aWRlZCwgb3IgdGhlIGNvbnRyb2wgdmFsdWUgd2FzIGVtcHR5LCB3ZSBlYXJseSBleGl0XG5cdFx0aWYgKCFjb250cm9sIHx8ICghY29udHJvbC52YWx1ZSAmJiBjb250cm9sLnZhbHVlICE9PSAwKSkge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0Ly8gSWJlbjogV2UgY2hlY2sgaWYgdGhlIGlucHV0IHZhbHVlIG1hdGNoZXMgdGhlIGFtb3VudCBvZiBkZWNpbWFscyBhZnRlciB0aGUgY29tbWEsIGlmIG5vdCwgd2UgcmV0dXJuIGFuIGVycm9yXG5cdFx0cmV0dXJuIG5ldyBSZWdFeHAoYF5cXFxcZCsoLlxcXFxkezEsJHttYXh9fSk/JGApLnRlc3QoYCR7Y29udHJvbC52YWx1ZX1gKVxuXHRcdFx0PyBudWxsXG5cdFx0XHQ6IHsgaW52YWxpZERlY2ltYWxzQWZ0ZXJDb21tYTogdHJ1ZSB9O1xuXHR9O1xufTtcbiJdfQ==","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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwZW5kZWQtcmVxdWlyZWQudmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2Zvcm1zL3NyYy9saWIvdmFsaWRhdG9ycy9kZXBlbmRlZC1yZXF1aXJlZC9kZXBlbmRlZC1yZXF1aXJlZC52YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFeEQsTUFBTSxTQUFTLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFFakQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsQ0FDeEMsUUFBbUIsRUFDbkIsa0JBQTJCLEVBQzNCLGFBQXNDLEVBQ3JDLEVBQUU7SUFDSCxPQUFPLENBQUMsSUFBZSxFQUFpRCxFQUFFO1FBQ3pFLCtEQUErRDtRQUMvRCxNQUFNLGNBQWMsR0FBRyxJQUFJLEdBQUcsRUFBVyxDQUFDO1FBQzFDLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUVyRCxpSUFBaUk7UUFDakksSUFDQyxDQUFDLGVBQWU7WUFDaEIsQ0FBQyxDQUFDLGFBQWE7Z0JBQ2QsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDO2dCQUN0QyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUN4QyxDQUFDO1lBQ0YsS0FBSyxNQUFNLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDNUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFFOUIscUNBQXFDO2dCQUNyQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ2QsU0FBUztnQkFDVixDQUFDO2dCQUVELGNBQWMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDckMsQ0FBQztZQUVELE9BQU8sSUFBSSxDQUFDO1FBQ2IsQ0FBQztRQUVELGdGQUFnRjtRQUNoRixJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFFckIsS0FBSyxNQUFNLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUM1QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRTlCLDJDQUEyQztZQUMzQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2QsU0FBUztZQUNWLENBQUM7WUFFRCxRQUFRLEdBQUcsUUFBUSxJQUFJLFNBQVMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRXBELHNGQUFzRjtZQUN0RixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDbkMsY0FBYyxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztnQkFDcEMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM1QixDQUFDO2lCQUFNLENBQUM7Z0JBQ1AsWUFBWSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztnQkFDbEMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN6QixDQUFDO1FBQ0YsQ0FBQztRQUVELE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFMUMsT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUMvRCxDQUFDLENBQUM7QUFDSCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IGNsZWFyRm9ybUVycm9yLCBzZXRGb3JtRXJyb3IgfSBmcm9tICcuLi91dGlscyc7XG5cbmNvbnN0IEVNUFRZX1NFVCA9IG5ldyBTZXQoW3VuZGVmaW5lZCwgbnVsbCwgJyddKTtcblxuLyoqXG4gKiBGb3JtR3JvdXAgdmFsaWRhdG9yIHdoaWNoIGNoZWNrcyBpZiBhbiBhcnJheSBvZiBjb250cm9scyBpbiB0aGUgY29udHJvbCBhcmUgZmlsbGVkIGluIGlmIHRoZSBkZXBlbmRlZCBjb250cm9sIGlzIGZpbGxlZCBpblxuICpcbiAqIEBwYXJhbSBjb250cm9scyAtIEFuIGFycmF5IG9mIGNvbnRyb2xzLlxuICogQHBhcmFtIGRlcGVuZGVkQ29udHJvbEtleSAtIEEgY29udHJvbCB3aXRoaW4gdGhlIGdyb3VwIHdoaWNoIHRoZSBvdGhlciBjb250cm9scyBkZXBlbmQgb24uXG4gKiBAcGFyYW0gbWF0Y2hGdW5jdGlvbiAtIE9wdGlvbmFsIGZ1bmN0aW9uIHRoZSBkZXBlbmRlZENvbnRyb2wgc2hvdWxkIGNoZWNrXG4gKi9cbmV4cG9ydCBjb25zdCBkZXBlbmRlZFJlcXVpcmVkVmFsaWRhdG9yID0gPEtleVR5cGUgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmc+KFxuXHRjb250cm9sczogS2V5VHlwZVtdLFxuXHRkZXBlbmRlZENvbnRyb2xLZXk6IEtleVR5cGUsXG5cdG1hdGNoRnVuY3Rpb24/OiAoZGF0YTogYW55KSA9PiBib29sZWFuXG4pID0+IHtcblx0cmV0dXJuIChmb3JtOiBGb3JtR3JvdXApOiB7IGhhc0RlcGVuZGVkUmVxdWlyZWRFcnJvcjogc3RyaW5nW10gfSB8IG51bGwgPT4ge1xuXHRcdC8vIEliZW46IE1ha2UgYSBzZXQgc28gd2Uga25vdyB3aGljaCBjb250cm9scyBhcmUgbm90IGZpbGxlZCBpblxuXHRcdGNvbnN0IGtleXNXaXRoRXJyb3JzID0gbmV3IFNldDxLZXlUeXBlPigpO1xuXHRcdGNvbnN0IGRlcGVuZGVkQ29udHJvbCA9IGZvcm0uZ2V0KGRlcGVuZGVkQ29udHJvbEtleSk7XG5cblx0XHQvLyBJYmVuOiBJZiB0aGUgY29udHJvbCBpcyBub3QgZmlsbGVkIGluIG9yIHRoZSB2YWx1ZSBkb2Vzbid0IG1hdGNoLCB3ZSBkbyBhbiBlYXJseSBleGl0IGFuZCByZW1vdmUgYWxsIHBvdGVudGlhbCByZXF1aXJlZCBlcnJvcnNcblx0XHRpZiAoXG5cdFx0XHQhZGVwZW5kZWRDb250cm9sIHx8XG5cdFx0XHQhKG1hdGNoRnVuY3Rpb25cblx0XHRcdFx0PyBtYXRjaEZ1bmN0aW9uKGRlcGVuZGVkQ29udHJvbC52YWx1ZSlcblx0XHRcdFx0OiAhRU1QVFlfU0VULmhhcyhkZXBlbmRlZENvbnRyb2wudmFsdWUpKVxuXHRcdCkge1xuXHRcdFx0Zm9yIChjb25zdCBrZXkgb2YgY29udHJvbHMpIHtcblx0XHRcdFx0Y29uc3QgY29udHJvbCA9IGZvcm0uZ2V0KGtleSk7XG5cblx0XHRcdFx0Ly8gQ29udGludWUgaWYgY29udHJvbCBkb2VzIG5vdCBleGlzdFxuXHRcdFx0XHRpZiAoIWNvbnRyb2wpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNsZWFyRm9ybUVycm9yKGNvbnRyb2wsICdyZXF1aXJlZCcpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHQvLyBJYmVuOiBTZXQgYW4gb3ZlcmFsbCBlcnJvciBzbyB3ZSBjYW4gc2VlIGlmIGFsbCBjb250cm9scyBhcmUgZmlsbGVkIGluIG9yIG5vdFxuXHRcdGxldCBoYXNFcnJvciA9IGZhbHNlO1xuXG5cdFx0Zm9yIChjb25zdCBrZXkgb2YgY29udHJvbHMpIHtcblx0XHRcdGNvbnN0IGNvbnRyb2wgPSBmb3JtLmdldChrZXkpO1xuXG5cdFx0XHQvLyBJYmVuOiBDb250aW51ZSBpZiBjb250cm9sIGRvZXMgbm90IGV4aXN0XG5cdFx0XHRpZiAoIWNvbnRyb2wpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGhhc0Vycm9yID0gaGFzRXJyb3IgfHwgRU1QVFlfU0VULmhhcyhjb250cm9sLnZhbHVlKTtcblxuXHRcdFx0Ly8gSWJlbjogSWYgdGhlIGNvbnRyb2wgaXMgbm90IGZpbGxlZCBpbiB3ZSBzZXQgYSByZXF1aXJlZCBlcnJvciwgaWYgbm90LCB3ZSByZW1vdmUgaXRcblx0XHRcdGlmICghRU1QVFlfU0VULmhhcyhjb250cm9sLnZhbHVlKSkge1xuXHRcdFx0XHRjbGVhckZvcm1FcnJvcihjb250cm9sLCAncmVxdWlyZWQnKTtcblx0XHRcdFx0a2V5c1dpdGhFcnJvcnMuZGVsZXRlKGtleSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzZXRGb3JtRXJyb3IoY29udHJvbCwgJ3JlcXVpcmVkJyk7XG5cdFx0XHRcdGtleXNXaXRoRXJyb3JzLmFkZChrZXkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNvbnN0IGVycm9ycyA9IEFycmF5LmZyb20oa2V5c1dpdGhFcnJvcnMpO1xuXG5cdFx0cmV0dXJuIGhhc0Vycm9yID8geyBoYXNEZXBlbmRlZFJlcXVpcmVkRXJyb3I6IGVycm9ycyB9IDogbnVsbDtcblx0fTtcbn07XG4iXX0=","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 { chronologicalDatesValidator } from './chronological-dates/chronological-dates.validator';\nimport { dateRangeValidator } from './date-range/date-range.validator';\nimport { decimalsAfterCommaValidator } from './decimals-after-comma/decimals-after-comma.validator';\nimport { dependedRequiredValidator } from './depended-required/depended-required.validator';\n/**\n * Exported Class\n */\nexport class NgxValidators {\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     * 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//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9mb3Jtcy9zcmMvbGliL3ZhbGlkYXRvcnMvdmFsaWRhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSw2REFBNkQsQ0FBQztBQUM1RyxPQUFPLEVBRU4sMkJBQTJCLEdBQzNCLE1BQU0seURBQXlELENBQUM7QUFDakUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDbEcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdkUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDcEcsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0saURBQWlELENBQUM7QUFFNUY7O0dBRUc7QUFFSCxNQUFNLE9BQU8sYUFBYTtJQUN6Qjs7Ozs7Ozs7T0FRRztJQUNILE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxPQUFrQjtRQUM3QyxPQUFPLDZCQUE2QixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILE1BQU0sQ0FBQyxrQkFBa0IsQ0FDeEIsT0FBcUQ7UUFFckQsT0FBTywyQkFBMkIsQ0FBVSxPQUFPLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxNQUFNLENBQUMsZ0JBQWdCLENBQ3RCLFFBQW1CLEVBQ25CLGtCQUEyQixFQUMzQixhQUFzQztRQUV0QyxPQUFPLHlCQUF5QixDQUFVLFFBQVEsRUFBRSxrQkFBa0IsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUN4RixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsTUFBTSxDQUFDLGtCQUFrQixDQUFDLEdBQVc7UUFDcEMsT0FBTywyQkFBMkIsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxNQUFNLENBQUMsa0JBQWtCLENBQ3hCLGVBQXVCLEVBQ3ZCLGFBQXFCLEVBQ3JCLE1BQU0sR0FBRyxZQUFZO1FBRXJCLE9BQU8sMkJBQTJCLENBQUMsZUFBZSxFQUFFLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxNQUFNLENBQUMsa0JBQWtCLENBQUMsR0FBVyxFQUFFLEdBQVcsRUFBRSxNQUFNLEdBQUcsWUFBWTtRQUN4RSxPQUFPLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDN0MsQ0FBQztDQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRm9ybUdyb3VwLCBWYWxpZGF0aW9uRXJyb3JzLCBWYWxpZGF0b3JGbiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgYWxsT3JOb3RoaW5nUmVxdWlyZWRWYWxpZGF0b3IgfSBmcm9tICcuL2FsbC1vci1ub3RoaW5nLXJlcXVpcmVkL2FsbC1vci1ub3RoaW5nLXJlcXVpcmVkLnZhbGlkYXRvcic7XG5pbXBvcnQge1xuXHRBdExlYXN0T25lUmVxdWlyZWRWYWxpZGF0b3JPcHRpb25zLFxuXHRhdExlYXN0T25lUmVxdWlyZWRWYWxpZGF0b3IsXG59IGZyb20gJy4vYXQtbGVhc3Qtb25lLXJlcXVpcmVkL2F0LWxlYXN0LW9uZS1yZXF1aXJlZC52YWxpZGF0b3InO1xuaW1wb3J0IHsgY2hyb25vbG9naWNhbERhdGVzVmFsaWRhdG9yIH0gZnJvbSAnLi9jaHJvbm9sb2dpY2FsLWRhdGVzL2Nocm9ub2xvZ2ljYWwtZGF0ZXMudmFsaWRhdG9yJztcbmltcG9ydCB7IGRhdGVSYW5nZVZhbGlkYXRvciB9IGZyb20gJy4vZGF0ZS1yYW5nZS9kYXRlLXJhbmdlLnZhbGlkYXRvcic7XG5pbXBvcnQgeyBkZWNpbWFsc0FmdGVyQ29tbWFWYWxpZGF0b3IgfSBmcm9tICcuL2RlY2ltYWxzLWFmdGVyLWNvbW1hL2RlY2ltYWxzLWFmdGVyLWNvbW1hLnZhbGlkYXRvcic7XG5pbXBvcnQgeyBkZXBlbmRlZFJlcXVpcmVkVmFsaWRhdG9yIH0gZnJvbSAnLi9kZXBlbmRlZC1yZXF1aXJlZC9kZXBlbmRlZC1yZXF1aXJlZC52YWxpZGF0b3InO1xuXG4vKipcbiAqIEV4cG9ydGVkIENsYXNzXG4gKi9cblxuZXhwb3J0IGNsYXNzIE5neFZhbGlkYXRvcnMge1xuXHQvKipcblx0ICogQSB2YWxpZGF0b3IgdG8gY2hlY2sgaWYgYWxsIG9yIG5vbmUgb2YgdGhlIHZhbHVlcyBvZiBhIGZvcm0gZ3JvdXAgYXJlIGZpbGxlZCBpbi5cblx0ICogUGFydGljdWxhcmx5IHVzZWZ1bCBpbiBzaXR1YXRpb25zIHdoZXJlIGEgZm9ybSBncm91cCBmaWVsZCB3aXRoaW4gaXRzZWxmIGlzIG9wdGlvbmFsLFxuXHQgKiBidXQgYWxsIGZpZWxkcyBhcmUgcmVxdWlyZWQgaW4gY2FzZSBpdCBkb2VzIGdldCBmaWxsZWQgaW5cblx0ICpcblx0ICogUmV0dXJucyBhbiBgYWxsT3JOb3RoaW5nUmVxdWlyZWRFcnJvcmAgZXJyb3Igb24gdGhlIHByb3ZpZGVkIEZvcm1Hcm91cCBhbmQgYSBgcmVxdWlyZWRgIGVycm9yIG9uIHRoZSBpbmRpdmlkdWFsIGNvbnRyb2xzXG5cdCAqXG5cdCAqIEBwYXJhbSBjb250cm9sIC0gQSBmb3JtIGdyb3VwIGNvbnRyb2xcblx0ICovXG5cdHN0YXRpYyBhbGxPck5vdGhpbmdSZXF1aXJlZChjb250cm9sOiBGb3JtR3JvdXApOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG5cdFx0cmV0dXJuIGFsbE9yTm90aGluZ1JlcXVpcmVkVmFsaWRhdG9yKGNvbnRyb2wpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEEgdmFsaWRhdG9yIHRvIGNoZWNrIGlmIGF0IGxlYXN0IG9uZSBvZiB0aGUgcHJvdmlkZWQgY29udHJvbHMgb2YgdGhlIGZvcm0gZ3JvdXAgYXJlIGZpbGxlZCBpblxuXHQgKlxuXHQgKiBSZXR1cm5zIGFuIGBhdExlYXN0T25lUmVxdWlyZWRFcnJvcmAgZXJyb3Igb24gdGhlIHByb3ZpZGVkIEZvcm1Hcm91cCBhbmQgYSBgcmVxdWlyZWRgIGVycm9yIG9uIHRoZSBpbmRpdmlkdWFsIGNvbnRyb2xzXG5cdCAqXG5cdCAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb3B0aW9uYWwgb2JqZWN0IHdpdGggY29uZmlndXJhdGlvbiBvcHRpb25zLCBzZWUgYmVsb3cgcGFyYW1zIGZvciBtb3JlIGluZm9cblx0ICogQHBhcmFtIGNvbnRyb2xOYW1lcyAtIE9wdGlvbmFsIGxpc3Qgb2YgY29udHJvbHMsIGlmIG5vdCBwcm92aWRlZCB0aGUgdmFsaWRhdG9yIGlzIGFwcGxpZWQgdG8gYWxsIGNvbnRyb2xzIG9mIHRoZSBncm91cFxuXHQgKiBAcGFyYW0gY29uZGl0aW9uYWxGdW5jdGlvbiAtIE9wdGlvbmFsIGZ1bmN0aW9uIHRoZSBmb3JtIHZhbHVlIG5lZWRzIHRvIHJldHVybiB0cnVlIHRvIGZvciB0aGUgcmVxdWlyZWQgdG8gYmUgc2Vcblx0ICovXG5cdHN0YXRpYyBhdExlYXN0T25lUmVxdWlyZWQ8S2V5VHlwZSBleHRlbmRzIHN0cmluZyA9IHN0cmluZz4oXG5cdFx0b3B0aW9ucz86IEF0TGVhc3RPbmVSZXF1aXJlZFZhbGlkYXRvck9wdGlvbnM8S2V5VHlwZT5cblx0KTogVmFsaWRhdG9yRm4ge1xuXHRcdHJldHVybiBhdExlYXN0T25lUmVxdWlyZWRWYWxpZGF0b3I8S2V5VHlwZT4ob3B0aW9ucyk7XG5cdH1cblxuXHQvKipcblx0ICogRm9ybUdyb3VwIHZhbGlkYXRvciB3aGljaCBjaGVja3MgaWYgYW4gYXJyYXkgb2YgY29udHJvbHMgaW4gdGhlIGNvbnRyb2wgYXJlIGZpbGxlZCBpbiBpZiB0aGUgZGVwZW5kZWQgY29udHJvbCBpcyBmaWxsZWQgaW5cblx0ICpcblx0ICogUmV0dXJucyBhIGBoYXNEZXBlbmRlZFJlcXVpcmVkRXJyb3JgIGVycm9yIG9uIHRoZSBwcm92aWRlZCBGb3JtR3JvdXAgYW5kIGEgYHJlcXVpcmVkYCBlcnJvciBvbiB0aGUgaW5kaXZpZHVhbCBjb250cm9sc1xuXHQgKlxuXHQgKiBAcGFyYW0gY29udHJvbHMgLSBBbiBhcnJheSBvZiBjb250cm9scy5cblx0ICogQHBhcmFtIGRlcGVuZGVkQ29udHJvbEtleSAtIEEgY29udHJvbCB3aXRoaW4gdGhlIGdyb3VwIHdoaWNoIHRoZSBvdGhlciBjb250cm9scyBkZXBlbmQgb24uXG5cdCAqIEBwYXJhbSBtYXRjaEZ1bmN0aW9uIC0gT3B0aW9uYWwgZnVuY3Rpb24gdGhlIGRlcGVuZGVkQ29udHJvbCBzaG91bGQgY2hlY2tcblx0ICovXG5cdHN0YXRpYyBkZXBlbmRlZFJlcXVpcmVkPEtleVR5cGUgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmc+KFxuXHRcdGNvbnRyb2xzOiBLZXlUeXBlW10sXG5cdFx0ZGVwZW5kZWRDb250cm9sS2V5OiBLZXlUeXBlLFxuXHRcdG1hdGNoRnVuY3Rpb24/OiAoZGF0YTogYW55KSA9PiBib29sZWFuXG5cdCk6IFZhbGlkYXRvckZuIHtcblx0XHRyZXR1cm4gZGVwZW5kZWRSZXF1aXJlZFZhbGlkYXRvcjxLZXlUeXBlPihjb250cm9scywgZGVwZW5kZWRDb250cm9sS2V5LCBtYXRjaEZ1bmN0aW9uKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBWYWxpZGF0ZXMgd2hldGhlciB0aGUgaW5wdXR0ZWQgdmFsdWUgaGFzIGV4Y2VlZGVkIHRoZSBtYXhpbXVtIGFtb3VudCBvZiBkZWNpbWFscyBhZnRlciB0aGUgY29tbWFcblx0ICpcblx0ICogUmV0dXJucyBhbiBgaW52YWxpZERlY2ltYWxzQWZ0ZXJDb21tYWAgZXJyb3Igb24gdGhlIHByb3ZpZGVkIGNvbnRyb2xcblx0ICpcblx0ICogQHBhcmFtIG1heCAtIFRoZSBtYXhpbXVtIG51bWJlciBvZiBkZWNpbWFscyBhZnRlciB0aGUgY29tbWFcblx0ICovXG5cdHN0YXRpYyBkZWNpbWFsc0FmdGVyQ29tbWEobWF4OiBudW1iZXIpOiBWYWxpZGF0b3JGbiB7XG5cdFx0cmV0dXJuIGRlY2ltYWxzQWZ0ZXJDb21tYVZhbGlkYXRvcihtYXgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEEgRm9ybUdyb3VwIHZhbGlkYXRvciB0byBjaGVjayB3aGV0aGVyIGEgc3RhcnQgYW5kIGVuZCBkYXRlIGFyZSBjaHJvbm9sb2dpY2FsbHkgY29ycmVjdFxuXHQgKlxuXHQgKiBSZXR1cm5zIGFuIGBpbmNvcnJlY3RDaHJvbm9sb2dpY2FsRGF0ZXNgIGVycm9yIG9uIHRoZSBwcm92aWRlZCBGb3JtR3JvdXAgYW5kIGEgYGluY29ycmVjdENocm9ub2xvZ2ljYWxEYXRlYCBvbiB0aGUgZW5kQ29udHJvbFxuXHQgKlxuXHQgKiBAcGFyYW0gc3RhcnRDb250cm9sS2V5IC0gVGhlIGtleSBvZiB0aGUgY29udHJvbCBjb250YWluaW5nIHRoZSBzdGFydCBkYXRlIHZhbHVlXG5cdCAqIEBwYXJhbSBlbmRDb250cm9sS2V5IC0gVGhlIGtleSBvZiB0aGUgY29udHJvbCBjb250YWluaW5nIHRoZSBlbmQgZGF0ZSB2YWx1ZVxuXHQgKiBAcGFyYW0gZm9ybWF0IC0gT3B0aW9uYWwgZm9ybWF0IG9mIHRoZSBkYXRlcyBwcm92aWRlZCBieSB0aGUgY29udHJvbHMsIGJ5IGRlZmF1bHQgeXl5eS1NTS1kZFxuXHQgKi9cblx0c3RhdGljIGNocm9ub2xvZ2ljYWxEYXRlcyhcblx0XHRzdGFydENvbnRyb2xLZXk6IHN0cmluZyxcblx0XHRlbmRDb250cm9sS2V5OiBzdHJpbmcsXG5cdFx0Zm9ybWF0ID0gJ3l5eXktTU0tZGQnXG5cdCk6IFZhbGlkYXRvckZuIHtcblx0XHRyZXR1cm4gY2hyb25vbG9naWNhbERhdGVzVmFsaWRhdG9yKHN0YXJ0Q29udHJvbEtleSwgZW5kQ29udHJvbEtleSwgZm9ybWF0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGb3JtIGNvbnRyb2wgdmFsaWRhdG9yIHdoaWNoIHZhbGlkYXRlcyBpZiBhIGRhdGUgaXMgYmV0d2VlbiBhIHByb3ZpZGVkIHJhbmdlXG5cdCAqXG5cdCAqIFJldHVybnMgYW4gYGludmFsaWRSYW5nZWAgZXJyb3Jcblx0ICpcblx0ICogQHBhcmFtIG1pbkRhdGUgLSBNaW5pbXVtIHZhbGlkIGRhdGVcblx0ICogQHBhcmFtIG1heERhdGUgLSBNYXhpbXVtIHZhbGlkIGRhdGVcblx0ICogQHBhcmFtIGZvcm1hdCAtIE9wdGlvbmFsIGZvcm1hdCB1c2VkIGZvciBhbGwgMyBkYXRlcywgYnkgZGVmYXVsdCB5eXl5LU1NLWRkXG5cdCAqL1xuXHRzdGF0aWMgZGF0ZVJhbmdlVmFsaWRhdG9yKG1pbjogc3RyaW5nLCBtYXg6IHN0cmluZywgZm9ybWF0ID0gJ3l5eXktTU0tZGQnKTogVmFsaWRhdG9yRm4ge1xuXHRcdHJldHVybiBkYXRlUmFuZ2VWYWxpZGF0b3IobWluLCBtYXgsIGZvcm1hdCk7XG5cdH1cbn1cbiJdfQ==","/**\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXVwZGF0ZS12YWx1ZS1hbmQtdmFsaWRpdHkudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9mb3Jtcy9zcmMvbGliL3V0aWxzL2N1c3RvbS11cGRhdGUtdmFsdWUtYW5kLXZhbGlkaXR5L2N1c3RvbS11cGRhdGUtdmFsdWUtYW5kLXZhbGlkaXR5LnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUE7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxDQUN4QyxJQUFxQixFQUNyQixVQUFrQyxFQUFFLEVBQ25DLEVBQUU7SUFDSCxpREFBaUQ7SUFDakQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3JDLGdGQUFnRjtJQUNoRixJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7UUFDaEMsT0FBTztJQUNSLENBQUM7SUFFRCw0RUFBNEU7SUFDNUUsMEJBQTBCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDOUUsQ0FBQyxDQUFDO0FBQ0Y7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxDQUN6QyxRQUE2RCxFQUM3RCxVQUFrQyxFQUFFLEVBQ25DLEVBQUU7SUFDSCxrQ0FBa0M7SUFDbEMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtRQUNsRix3RkFBd0Y7UUFDeEYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQzFCLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN4QyxPQUFPO1FBQ1IsQ0FBQztRQUVELGtGQUFrRjtRQUNsRiwwQkFBMEIsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDMUQsQ0FBQyxDQUFDLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IEZvcm1TdGF0ZU9wdGlvbnNFbnRpdHkgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbi8qKlxuICogQWRkcyBhIGRlZXAgdXBkYXRlIHZhbHVlIGFuZCB2YWxpZGl0eSB0byB0aGUgZXhpc3RpbmcgdXBkYXRlIHZhbHVlIGFuZCB2YWxpZGl0eVxuICpcbiAqIEBwYXJhbSBmb3JtIC0gVGhlIHByb3ZpZGVkIGFic3RyYWN0IGNvbnRyb2xcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgd2Ugd2lzaCB0byBjYWxsIGFsb25nIHdpdGggdGhlIHVwZGF0ZSB2YWx1ZSBhbmQgdmFsaWRpdHkgZnVuY3Rpb25cbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUFsbFZhbHVlQW5kVmFsaWRpdHkgPSAoXG5cdGZvcm06IEFic3RyYWN0Q29udHJvbCxcblx0b3B0aW9uczogRm9ybVN0YXRlT3B0aW9uc0VudGl0eSA9IHt9XG4pID0+IHtcblx0Ly8gSWJlbjogQ2FsbCB0aGUgb3JpZ2luYWwgdXBkYXRlVmFsdWVBbmRWYWxpZGl0eVxuXHRmb3JtLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkob3B0aW9ucyk7XG5cdC8vIEliZW46IElmIHdlIGRvbid0IGhhdmUgdGhlIGlubmVyIGZvcm0geWV0IHdlIGp1c3QgZG8gdGhlIGRlZmF1bHQgdXBkYXRlIHZhbHVlXG5cdGlmICghZm9ybSB8fCAhZm9ybVsnY29udHJvbHMnXSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIEliZW46IFdlIHVwZGF0ZSB0aGUgdmFsdWUgYW5kIHZhbGlkaXR5IHJlY3Vyc2l2ZWx5IGZvciBlYWNoIGNoaWxkIGNvbnRyb2xcblx0ZGVlcFVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoZm9ybVsnY29udHJvbHMnXSwgeyAuLi5vcHRpb25zLCBvbmx5U2VsZjogdHJ1ZSB9KTtcbn07XG4vKipcbiAqIEFsbG93cyBmb3IgYSBkZWVwIHVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkgb2YgYWxsIGNvbnRyb2xzLiBDYW4gYmUgdXNlZCBmb3IgYSBGb3JtR3JvdXAgb3IgYSBGb3JtQXJyYXlcbiAqXG4gKiBAcGFyYW0gY29udHJvbHMgLSBUaGUgY29udHJvbHMgd2Ugd2lzaCB0byB1cGRhdGUgdGhlIHZhbHVlIGFuZCB2YWxpZGl0eSBvZlxuICogQHBhcmFtIG9ubHlTZWxmIC0gV2hldGhlciBvciBub3Qgd2Ugd2FudCBpdCB0byBiZSBvbmx5IHRoZSBjb250cm9sIGl0c2VsZiBhbmQgbm90IHRoZSBkaXJlY3QgYW5jZXN0b3JzLiBEZWZhdWx0IHRoaXMgaXMgdHJ1ZVxuICovXG5leHBvcnQgY29uc3QgZGVlcFVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkgPSAoXG5cdGNvbnRyb2xzOiBSZWNvcmQ8c3RyaW5nLCBBYnN0cmFjdENvbnRyb2w+IHwgQWJzdHJhY3RDb250cm9sW10sXG5cdG9wdGlvbnM6IEZvcm1TdGF0ZU9wdGlvbnNFbnRpdHkgPSB7fVxuKSA9PiB7XG5cdC8vIEliZW46IFdlIGxvb3Agb3ZlciBhbGwgY29udHJvbHNcblx0KEFycmF5LmlzQXJyYXkoY29udHJvbHMpID8gY29udHJvbHMgOiBPYmplY3QudmFsdWVzKGNvbnRyb2xzKSkuZm9yRWFjaCgoY29udHJvbCkgPT4ge1xuXHRcdC8vIEliZW46IElmIHRoZXJlIGFyZSBubyBjaGlsZCBjb250cm9scywgd2UgdXBkYXRlIHRoZSB2YWx1ZSBhbmQgdmFsaWRpdHkgb2YgdGhlIGNvbnRyb2xcblx0XHRpZiAoIWNvbnRyb2xbJ2NvbnRyb2xzJ10pIHtcblx0XHRcdGNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShvcHRpb25zKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBJYmVuOiBJZiB0aGVyZSBhcmUgY2hpbGQgY29udHJvbHMsIHdlIHJlY3Vyc2l2ZWx5IHVwZGF0ZSB0aGUgdmFsdWUgYW5kIHZhbGlkaXR5XG5cdFx0ZGVlcFVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoY29udHJvbFsnY29udHJvbHMnXSwgb3B0aW9ucyk7XG5cdH0pO1xufTtcbiJdfQ==","/**\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFyay1hbGwtYXMtZGlydHkudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9mb3Jtcy9zcmMvbGliL3V0aWxzL21hcmstYWxsLWFzLWRpcnR5L21hcmstYWxsLWFzLWRpcnR5LnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUE7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FDN0IsUUFBNkQsRUFDN0QsVUFBa0MsRUFBRSxFQUNuQyxFQUFFO0lBQ0gsa0NBQWtDO0lBQ2xDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7UUFDbEYsd0ZBQXdGO1FBQ3hGLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUMxQixPQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzdCLE9BQU87UUFDUixDQUFDO1FBRUQsa0ZBQWtGO1FBQ2xGLGNBQWMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDOUMsQ0FBQyxDQUFDLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IEZvcm1TdGF0ZU9wdGlvbnNFbnRpdHkgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbi8qKlxuICogQWxsb3dzIGZvciBhIGRlZXAgbWFya0FzRGlydHkgb2YgYWxsIGNvbnRyb2xzLiBDYW4gYmUgdXNlZCBmb3IgYSBGb3JtR3JvdXAgb3IgYSBGb3JtQXJyYXlcbiAqXG4gKiBAcGFyYW0gY29udHJvbHMgLSBUaGUgY29udHJvbHMgd2Ugd2lzaCB0byB1cGRhdGUgdGhlIHZhbHVlIGFuZCB2YWxpZGl0eSBvZlxuICogQHBhcmFtIG9ubHlTZWxmIC0gV2hldGhlciBvciBub3Qgd2Ugd2FudCBpdCB0byBiZSBvbmx5IHRoZSBjb250cm9sIGl0c2VsZiBhbmQgbm90IHRoZSBkaXJlY3QgYW5jZXN0b3JzLiBEZWZhdWx0IHRoaXMgaXMgdHJ1ZVxuICovXG5leHBvcnQgY29uc3QgbWFya0FsbEFzRGlydHkgPSAoXG5cdGNvbnRyb2xzOiBSZWNvcmQ8c3RyaW5nLCBBYnN0cmFjdENvbnRyb2w+IHwgQWJzdHJhY3RDb250cm9sW10sXG5cdG9wdGlvbnM6IEZvcm1TdGF0ZU9wdGlvbnNFbnRpdHkgPSB7fVxuKSA9PiB7XG5cdC8vIEliZW46IFdlIGxvb3Agb3ZlciBhbGwgY29udHJvbHNcblx0KEFycmF5LmlzQXJyYXkoY29udHJvbHMpID8gY29udHJvbHMgOiBPYmplY3QudmFsdWVzKGNvbnRyb2xzKSkuZm9yRWFjaCgoY29udHJvbCkgPT4ge1xuXHRcdC8vIEliZW46IElmIHRoZXJlIGFyZSBubyBjaGlsZCBjb250cm9scywgd2UgdXBkYXRlIHRoZSB2YWx1ZSBhbmQgdmFsaWRpdHkgb2YgdGhlIGNvbnRyb2xcblx0XHRpZiAoIWNvbnRyb2xbJ2NvbnRyb2xzJ10pIHtcblx0XHRcdGNvbnRyb2wubWFya0FzRGlydHkob3B0aW9ucyk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gSWJlbjogSWYgdGhlcmUgYXJlIGNoaWxkIGNvbnRyb2xzLCB3ZSByZWN1cnNpdmVseSB1cGRhdGUgdGhlIHZhbHVlIGFuZCB2YWxpZGl0eVxuXHRcdG1hcmtBbGxBc0RpcnR5KGNvbnRyb2xbJ2NvbnRyb2xzJ10sIG9wdGlvbnMpO1xuXHR9KTtcbn07XG4iXX0=","import { updateAllValueAndValidity } from '../custom-update-value-and-validity/custom-update-value-and-validity.util';\nimport { markAllAsDirty } from '../mark-all-as-dirty/mark-all-as-dirty.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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1hY2Nlc3Nvci51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9mb3Jtcy9zcmMvbGliL3V0aWxzL2Zvcm0tYWNjZXNzb3IvZm9ybS1hY2Nlc3Nvci51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwyRUFBMkUsQ0FBQztBQUN0SCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFFN0U7Ozs7O0dBS0c7QUFDSCxNQUFNLG1DQUFtQyxHQUFHLENBQzNDLElBQXFCLEVBQ3JCLElBQWlCLEVBQ2pCLFNBQWtCLEVBQ2pCLEVBQUU7SUFDSCxzRkFBc0Y7SUFDdEYsSUFDQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQy9DLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUM5QyxDQUFDO1FBQ0YsT0FBTztJQUNSLENBQUM7SUFFRCxvREFBb0Q7SUFDcEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7QUFDekYsQ0FBQyxDQUFDO0FBRUY7Ozs7O0dBS0c7QUFDSCxNQUFNLHNCQUFzQixHQUFHLENBQUMsSUFBZSxFQUFFLElBQWlCLEVBQUUsU0FBa0IsRUFBRSxFQUFFO0lBQ3pGLDJHQUEyRztJQUMzRyxjQUFjLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBRWhDLHlCQUF5QjtJQUN6QixLQUFLLENBQUMsSUFBSSxD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RUFDckIsU0FBOEMsRUFDOUMsVUFBa0MsRUFBRSxFQUNuQyxFQUFFO0lBQ0gsMERBQTBEO0lBQzFELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBRXhCLG1JQUFtSTtJQUNuSSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDbkUsQ0FBQyxDQUFDO0FBRUY7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZ0NBQWdDLEdBQUcsQ0FDL0MsSUFBcUIsRUFDckIsU0FBOEMsRUFDOUMsVUFBa0MsRUFBRSxFQUNuQyxFQUFFO0lBQ0gsMERBQTBEO0lBQzFELElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUV0QixtSUFBbUk7SUFDbkksU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ3BFLENBQUMsQ0FBQztBQUVGOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxNQUFNLHdDQUF3QyxHQUFHLENBQ3ZELElBQXFCLEVBQ3JCLFNBQThDLEVBQzlDLFVBQWtDLEVBQUUsRUFDbkMsRUFBRTtJQUNILGtEQUFrRDtJQUNsRCx5QkFBeUIsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFekMsZ0lBQWdJO0lBQ2hJLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyx5QkFBeUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQy9FLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBEYXRhRm9ybUFjY2Vzc29yLCBGb3JtQWNjZXNzb3IgfSBmcm9tICcuLi8uLi9hYnN0cmFjdHMnO1xuaW1wb3J0IHsgRm9ybVN0YXRlT3B0aW9uc0VudGl0eSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IHVwZGF0ZUFsbFZhbHVlQW5kVmFsaWRpdHkgfSBmcm9tICcuLi9jdXN0b20tdXBkYXRlLXZhbHVlLWFuZC12YWxpZGl0eS9jdXN0b20tdXBkYXRlLXZhbHVlLWFuZC12YWxpZGl0eS51dGlsJztcbmltcG9ydCB7IG1hcmtBbGxBc0RpcnR5IH0gZnJvbSAnLi4vbWFyay1hbGwtYXMtZGlydHkvbWFyay1hbGwtYXMtZGlydHkudXRpbCc7XG5cbi8qKlxuICogRGlzYWJsZSBhIEZvcm1Db250cm9sL0Zvcm1BcnJheVxuICpcbiAqIEBwYXJhbSBrZXlzIC0gVGhlIGtleXMgb2YgdGhlIGZpZWxkcyB3ZSB3aXNoIHRvIGRpc2FibGVcbiAqIEBwYXJhbSBlbWl0RXZlbnQgLSBXaGV0aGVyIG9yIG5vdCB3ZSB3aXNoIHRvIGVtaXQgdGhlIGV2ZW50XG4gKi9cbmNvbnN0IGhhbmRsZURpc2FibGVGb3JtQ29udHJvbE9mRm9ybUFycmF5ID0gKFxuXHRmb3JtOiBBYnN0cmFjdENvbnRyb2wsXG5cdGtleXM6IFNldDxzdHJpbmc+LFxuXHRlbWl0RXZlbnQ6IGJvb2xlYW5cbikgPT4ge1xuXHQvLyBJYmVuOiBFYXJseSBleGl0IGluIGNhc2UgdGhlIHN0YXRlIGFscmVhZHkgbWF0Y2hlcyBzbyB3ZSBkb24ndCBkbyB1bm5lY2Vzc2FyeSBlbWl0c1xuXHRpZiAoXG5cdFx0KGtleXMuaGFzKCdmb3JtQWNjZXNzb3JTZWxmJykgJiYgZm9ybS5kaXNhYmxlZCkgfHxcblx0XHQoIWtleXMuaGFzKCdmb3JtQWNjZXNzb3JTZWxmJykgJiYgZm9ybS5lbmFibGVkKVxuXHQpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBJYmVuOiBEaXNhYmxlL2VuYWJsZSB0aGUgY29udHJvbCBiYXNlZCBvbiB0aGUga2V5XG5cdGtleXMuaGFzKCdmb3JtQWNjZXNzb3JTZWxmJykgPyBmb3JtLmRpc2FibGUoeyBlbWl0RXZlbnQgfSkgOiBmb3JtLmVuYWJsZSh7IGVtaXRFdmVudCB9KTtcbn07XG5cbi8qKlxuICogRGlzYWJsZSB0aGUgY29udHJvbHMgb2YgYSBGb3JtR3JvdXBcbiAqXG4gKiBAcGFyYW0ga2V5cyAtIFRoZSBrZXlzIG9mIHRoZSBmaWVsZHMgd2Ugd2lzaCB0byBkaXNhYmxlXG4gKiBAcGFyYW0gZW1pdEV2ZW50IC0gV2hldGhlciBvciBub3Qgd2Ugd2lzaCB0byBlbWl0IHRoZSBldmVudFxuICovXG5jb25zdCBoYW5kbGVEaXNhYmxlRm9ybUdyb3VwID0gKGZvcm06IEZvcm1Hcm91cCwga2V5czogU2V0PHN0cmluZz4sIGVtaXRFdmVudDogYm9vbGVhbikgPT4ge1xuXHQvLyBJYmVuOiBMb29wIG92ZXIgYWxsIGNvbnRyb2xzIGFuZCBlbmFibGUgdGhlbSBzbyB0aGF0IHRoZXkgYXJlIHJlLWVuYWJsZWQgaW4gY2FzZSB0aGUgc2V0IG9mIGtleXMgY2hhbmdlc1xuXHRlbmFibGVDb250cm9scyhmb3JtLCBlbWl0RXZlbnQpO1xuXG5cdC8vIEliZW46IERpc2FibGUgdGhlIGtleXNcblx0QXJyYXkuZnJvbShrZXlzKS5mb3JFYWNoKChrZXkpID0+IHtcblx0XHRjb25zdCBjb250cm9sID0gZm9ybS5nZXQoa2V5KTtcblx0XHRpZiAoIWNvbnRyb2wpIHtcblx0XHRcdGNvbnNvbGUud2Fybihcblx0XHRcdFx0YEZvcm1BY2Nlc3NvcjogVGhlIGtleSBcIiR7a2V5fVwiIHdhcyBwcm92aWRlZCBpbiB0aGUgZGlzYWJsZUZpZWxkcyBhcnJheSBidXQgd2FzIG5vdCBmb3VuZCBpbiB0aGUgcHJvdmlkZWQgZm9ybS5gXG5cdFx0XHQpO1xuXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gSWJlbjogUHJldmVudCBlbWl0IGV2ZW50IGlmIHRoZSBjb250cm9sIGlzIGFscmVhZHkgZGlzYWJsZWRcblx0XHRpZiAoIWNvbnRyb2wuZGlzYWJsZWQpIHtcblx0XHRcdGNvbnRyb2wuZGlzYWJsZSh7IGVtaXRFdmVudCB9KTtcblx0XHR9XG5cdH0pO1xufTtcblxuLyoqXG4gKiBSZWN1cnNpdmVseSBlbmFibGVzIGFsbCBmaWVsZHMgb2YgYSBjb250cm9sXG4gKlxuICogQHBhcmFtIGNvbnRyb2wgLSBBbiBBYnN0cmFjdENvbnRyb2wgd2hpY2ggd2Ugd2FudCB0byBlbmFibGUgYW5kIGVuYWJsZSBhbGwgY2hpbGRyZW4gb2ZmXG4gKiBAcGFyYW0gZW1pdEV2ZW50IC0gV2hldGhlciBvciBub3Qgd2Ugd2lzaCB0byBlbWl0IGFuIGV2ZW50XG4gKi9cbmNvbnN0IGVuYWJsZUNvbnRyb2xzID0gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgZW1pdEV2ZW50OiBib29sZWFuID0gZmFsc2UpOiB2b2lkID0+IHtcblx0Ly9JYmVuOiBJZiBubyBjb250cm9sIHdhcyBmb3VuZCwgZWFybHkgZXhpdFxuXHRpZiAoIWNvbnRyb2wpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBJYmVuOiBFbmFibGUgdGhlIGNvbnRyb2wgaXRzZWxmIGlmIGl0IGlzIG5vdCBlbmFibGVkIHlldFxuXHRpZiAoIWNvbnRyb2wuZW5hYmxlZCkge1xuXHRcdGNvbnRyb2wuZW5hYmxlKHsgZW1pdEV2ZW50IH0pO1xuXHR9XG5cblx0Ly8gSWJlbjogSWYgdGhlcmUgYXJlIG5vIGNvbnRyb2xzLCBlYXJseSBleGl0XG5cdGlmICghY29udHJvbFsnY29udHJvbHMnXSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIEliZW46IFJlY3Vyc2l2ZWx5IGVuYWJsZSBlYWNoIGNvbnRyb2xcblx0KEFycmF5LmlzQXJyYXkoY29udHJvbFsnY29udHJvbHMnXSlcblx0XHQ/IGNvbnRyb2xbJ2NvbnRyb2xzJ11cblx0XHQ6IE9iamVjdC52YWx1ZXMoY29udHJvbFsnY29udHJvbHMnXSlcblx0KS5mb3JFYWNoKChjaGlsZDogQWJzdHJhY3RDb250cm9sKSA9PiB7XG5cdFx0ZW5hYmxlQ29udHJvbHMoY2hpbGQsIGVtaXRFdmVudCk7XG5cdH0pO1xufTtcblxuLyoqXG4gKiBEaXNhYmxlcyBhbmQgZW5hYmxlcyBhIGZvcm0ncyBjb250cm9sIGJhc2VkIG9uIGEgc2V0IG9mIHByb3ZpZGVkIGtleXNcbiAqXG4gKiBAcGFyYW0gZm9ybSAtIFRoZSBmb3JtIHdlIHdpc2ggdG8gZGlzYWJsZSB0aGUgY29udHJvbHMgZm9yXG4gKiBAcGFyYW0gY29udHJvbEtleXMgLSBBIHNldCBvZiBrZXlzIG9mIHRoZSBjb250cm9sc1xuICogQHBhcmFtIGVtaXRFdmVudCAtIFdoZXRoZXIgb3Igbm90IHdlIHdpc2ggdG8gZW1pdCB0aGUgZXZlbnRcbiAqL1xuZXhwb3J0IGNvbnN0IGhhbmRsZUZvcm1BY2Nlc3NvckNvbnRyb2xEaXNhYmxpbmcgPSAoXG5cdGZvcm06IEFic3RyYWN0Q29udHJvbCxcblx0Y29udHJvbEtleXM6IFNldDxzdHJpbmc+LFxuXHRlbWl0RXZlbnQ6IGJvb2xlYW5cbikgPT4ge1xuXHQvLyBJYmVuOiBEZXBlbmRpbmcgb24gd2hldGhlciB3ZSdyZSBkZWFsaW5nIHdpdGggYSBGb3JtQXJyYXkvRm9ybUNvbnRyb2wgb3IgYSBGb3JtR3JvdXAsIHdlIGhhdmUgZGlmZmVyZW50ICBhbmQgaGFuZGxlIHRoZSBkaXNhYmxlL2VuYWJsZSBzdGF0ZVxuXHRpZiAoIWZvcm1bJ2NvbnRyb2xzJ10gfHwgQXJyYXkuaXNBcnJheShmb3JtWydjb250cm9scyddKSkge1xuXHRcdGhhbmRsZURpc2FibGVGb3JtQ29udHJvbE9mRm9ybUFycmF5KGZvcm0sIGNvbnRyb2xLZXlzLCBlbWl0RXZlbnQpO1xuXHR9IGVsc2Uge1xuXHRcdGhhbmRsZURpc2FibGVGb3JtR3JvdXAoZm9ybSBhcyBGb3JtR3JvdXAsIGNvbnRyb2xLZXlzLCBlbWl0RXZlbnQpO1xuXHR9XG59O1xuXG4vKipcbiAqIE1hcmtzIGEgZm9ybSBhbmQgYWxsIHRoZSBmb3JtLWFjY2Vzc29ycyB0aGlzIGZvcm0gaXMgYmFzZWQgb24gYXMgZGlydHlcbiAqXG4gKiBAcGFyYW0gZm9ybSAtIFRoZSBmb3JtIHdlIHdpc2ggdG8gbWFyayBhcyBkaXJ0eVxuICogQHBhcmFtIGFjY2Vzc29ycyAtIEFuIGFycmF5IG9mIGFsbCB0aGUgYWNjZXNzb3JzIHdlIHdpc2ggdG8gbWFyayBhcyBkaXJ0eVxuICogQHBhcmFtIG9wdGlvbnMgLSBGb3JtIHN0YXRlIG9wdGlvbnMgd2Ugd2lzaCB0byBwcm92aWRlXG4gKi9cbmV4cG9ydCBjb25zdCBoYW5kbGVGb3JtQWNjZXNzb3JNYXJrQXNEaXJ0eSA9IChcblx0Zm9ybTogQWJzdHJhY3RDb250cm9sLFxuXHRhY2Nlc3NvcnM6IChGb3JtQWNjZXNzb3IgfCBEYXRhRm9ybUFjY2Vzc29yKVtdLFxuXHRvcHRpb25zOiBGb3JtU3RhdGVPcHRpb25zRW50aXR5ID0ge31cbikgPT4ge1xuXHQvLyBJYmVuOiBJZiB0aGUgY29udHJvbCBoYXMgY2hpbGQgY29udHJvbHMsIHJlY3Vyc2l2ZWx5IG1hcmsgdGhlbSBhcyBkaXJ0eVxuXHRpZiAoZm9ybVsnY29udHJvbHMnXSkge1xuXHRcdG1hcmtBbGxBc0RpcnR5KGZvcm1bJ2NvbnRyb2xzJ10sIG9wdGlvbnMpO1xuXHR9IGVsc2Uge1xuXHRcdC8vIEliZW4gOiBNYXJrIHRoZSBmb3JtIGFzIGRpcnR5XG5cdFx0Zm9ybS5tYXJrQXNEaXJ0eShvcHRpb25zKTtcblx0fVxuXG5cdC8vIEliZW46IExvb3Agb3ZlciBlYWNoIGZvcm0gYWNjZXNzb3IgYW5kIGNhbGwgdGhlIG1hcmsgYXMgZGlydHkgZnVuY3Rpb24sIHNvIGFsbCBzdWJzZXF1ZW50IGFjY2Vzc29ycyBhcmUgYWxzbyBtYXJrZWQgYXMgZGlydHlcblx0YWNjZXNzb3JzPy5mb3JFYWNoKChhY2Nlc3NvcikgPT4gYWNjZXNzb3IubWFya0FzRGlydHkob3B0aW9ucykpO1xufTtcblxuLyoqXG4gKiBNYXJrcyBhIGZvcm0gYW5kIGFsbCB0aGUgZm9ybS1hY2Nlc3NvcnMgdGhpcyBmb3JtIGlzIGJhc2VkIG9uIGFzIHRvdWNoZWRcbiAqXG4gKiBAcGFyYW0gZm9ybSAtIFRoZSBmb3JtIHdlIHdpc2ggdG8gbWFyayBhcyB0b3VjaGVkXG4gKiBAcGFyYW0gYWNjZXNzb3JzIC0gQW4gYXJyYXkgb2YgYWxsIHRoZSBhY2Nlc3NvcnMgd2Ugd2lzaCB0byBtYXJrIGFzIHRvdWNoZWRcbiAqIEBwYXJhbSBvcHRpb25zIC0gRm9ybSBzdGF0ZSBvcHRpb25zIHdlIHdpc2ggdG8gcHJvdmlkZVxuICovXG5leHBvcnQgY29uc3QgaGFuZGxlRm9ybUFjY2Vzc29yTWFya0FzVG91Y2hlZCA9IChcblx0Zm9ybTogQWJzdHJhY3RDb250cm9sLFxuXHRhY2Nlc3NvcnM6IChGb3JtQWNjZXNzb3IgfCBEYXRhRm9ybUFjY2Vzc29yKVtdLFxuXHRvcHRpb25zOiBGb3JtU3RhdGVPcHRpb25zRW50aXR5ID0ge31cbikgPT4ge1xuXHQvLyBJYmVuOiBNYXJrIGFsbCB0aGUgY29udHJvbHMgYW5kIHRoZSBjaGlsZHJlbiBhcyB0b3VjaGVkXG5cdGZvcm0ubWFya0FsbEFzVG91Y2hlZCgpO1xuXG5cdC8vIEliZW46IExvb3Agb3ZlciBlYWNoIGZvcm0gYWNjZXNzb3IgYW5kIGNhbGwgdGhlIG1hcmsgYXMgdG91Y2hlZCBmdW5jdGlvbiwgc28gYWxsIHN1YnNlcXVlbnQgYWNjZXNzb3JzIGFyZSBhbHNvIG1hcmtlZCBhcyB0b3VjaGVkXG5cdGFjY2Vzc29ycz8uZm9yRWFjaCgoYWNjZXNzb3IpID0+IGFjY2Vzc29yLm1hcmtBc1RvdWNoZWQob3B0aW9ucykpO1xufTtcblxuLyoqXG4gKiBNYXJrcyBhIGZvcm0gYW5kIGFsbCB0aGUgZm9ybS1hY2Nlc3NvcnMgdGhpcyBmb3JtIGlzIGJhc2VkIG9uIGFzIHByaXN0aW5lXG4gKlxuICogQHBhcmFtIGZvcm0gLSBUaGUgZm9ybSB3ZSB3aXNoIHRvIG1hcmsgYXMgcHJpc3RpbmVcbiAqIEBwYXJhbSBhY2Nlc3NvcnMgLSBBbiBhcnJheSBvZiBhbGwgdGhlIGFjY2Vzc29ycyB3ZSB3aXNoIHRvIG1hcmsgYXMgcHJpc3RpbmVcbiAqIEBwYXJhbSBvcHRpb25zIC0gRm9ybSBzdGF0ZSBvcHRpb25zIHdlIHdpc2ggdG8gcHJvdmlkZVxuICovXG5leHBvcnQgY29uc3QgaGFuZGxlRm9ybUFjY2Vzc29yTWFya0FzUHJpc3RpbmUgPSAoXG5cdGZvcm06IEFic3RyYWN0Q29udHJvbCxcblx0YWNjZXNzb3JzOiAoRm9ybUFjY2Vzc29yIHwgRGF0YUZvcm1BY2Nlc3NvcilbXSxcblx0b3B0aW9uczogRm9ybVN0YXRlT3B0aW9uc0VudGl0eSA9IHt9XG4pID0+IHtcblx0Ly8gSWJlbjogTWFyayBhbGwgdGhlIGNvbnRyb2xzIGFuZCB0aGUgY2hpbGRyZW4gYXMgdG91Y2hlZFxuXHRmb3JtLm1hcmtBc1ByaXN0aW5lKCk7XG5cblx0Ly8gSWJlbjogTG9vcCBvdmVyIGVhY2ggZm9ybSBhY2Nlc3NvciBhbmQgY2FsbCB0aGUgbWFyayBhcyB0b3VjaGVkIGZ1bmN0aW9uLCBzbyBhbGwgc3Vic2VxdWVudCBhY2Nlc3NvcnMgYXJlIGFsc28gbWFya2VkIGFzIHRvdWNoZWRcblx0YWNjZXNzb3JzPy5mb3JFYWNoKChhY2Nlc3NvcikgPT4gYWNjZXNzb3IubWFya0FzUHJpc3RpbmUob3B0aW9ucykpO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIGEgZm9ybSBhbmQgYWxsIHRoZSBmb3JtLWFjY2Vzc29ycyB0aGlzIGZvcm0gaVxuICpcbiAqIEBwYXJhbSBmb3JtIC0gVGhlIGZvcm0gd2Ugd2lzaCB0byB1cGRhdGUgdGhlIHZhbHVlIGFuZCB2YWxpZGl0eSBvZlxuICogQHBhcmFtIGFjY2Vzc29ycyAtIEFuIGFycmF5IG9mIGFsbCB0aGUgYWNjZXNzb3JzIHdlIHdpc2ggdG8gdXBkYXRlIHRoZSB2YWx1ZSBhbmQgdmFsaWRpdHkgb2ZcbiAqIEBwYXJhbSBvcHRpb25zIC0gRm9ybSBzdGF0ZSBvcHRpb25zIHdlIHdpc2ggdG8gcHJvdmlkZVxuICovXG5leHBvcnQgY29uc3QgaGFuZGxlRm9ybUFjY2Vzc29yVXBkYXRlVmFsdWVBbmRWYWxpZGl0eSA9IChcblx0Zm9ybTogQWJzdHJhY3RDb250cm9sLFxuXHRhY2Nlc3NvcnM6IChGb3JtQWNjZXNzb3IgfCBEYXRhRm9ybUFjY2Vzc29yKVtdLFxuXHRvcHRpb25zOiBGb3JtU3RhdGVPcHRpb25zRW50aXR5ID0ge31cbikgPT4ge1xuXHQvLyBJYmVuOiBVcGRhdGUgdGhlIHZhbHVlIGFuZCB2YWxpZGl0eSBvZiB0aGUgZm9ybVxuXHR1cGRhdGVBbGxWYWx1ZUFuZFZhbGlkaXR5KGZvcm0sIG9wdGlvbnMpO1xuXG5cdC8vIEliZW46IExvb3Agb3ZlciBlYWNoIGZvcm0gYWNjZXNzb3IgYW5kIGNhbGwgdGhlIHVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkgZnVuY3Rpb24sIHNvIGFsbCBzdWJzZXF1ZW50IGFjY2Vzc29ycyBhcmUgYWxzbyB1cGRhdGVkXG5cdGFjY2Vzc29ycz8uZm9yRWFjaCgoYWNjZXNzb3IpID0+IGFjY2Vzc29yLnVwZGF0ZUFsbFZhbHVlQW5kVmFsaWRpdHkob3B0aW9ucykpO1xufTtcbiJdfQ==","/**\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 no control is found, early exit\n    if (!control) {\n        return false;\n    }\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFzLWVycm9ycy51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2Zvcm1zL3NyYy9saWIvdXRpbHMvaGFzLWVycm9ycy9oYXMtZXJyb3JzLnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUE7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxDQUFDLE9BQXdCLEVBQVcsRUFBRTtJQUM5RCwyQ0FBMkM7SUFDM0MsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2QsT0FBTyxLQUFLLENBQUM7SUFDZCxDQUFDO0lBRUQsaUZBQWlGO0lBQ2pGLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztRQUMxQixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUM7SUFDeEIsQ0FBQztJQUVELHFGQUFxRjtJQUNyRixNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFckMsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQ3RGLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FDbEIsQ0FBQztBQUNILENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0Q29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuLyoqXG4gKiBSZWN1cnNpdmVseSBjaGVja3MgaWYgYSBmb3JtIGFuZCBpdHMgcG9zc2libGUgY2hpbGRyZW4gaGF2ZSBhbiBlcnJvclxuICpcbiAqIEBwYXJhbSAgY29udHJvbCAtIFRoZSBwcm92aWRlZCBhYnN0cmFjdCBjb250cm9sXG4gKi9cbmV4cG9ydCBjb25zdCBoYXNFcnJvcnMgPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogYm9vbGVhbiA9PiB7XG5cdC8vIEliZW46IElmIG5vIGNvbnRyb2wgaXMgZm91bmQsIGVhcmx5IGV4aXRcblx0aWYgKCFjb250cm9sKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Ly8gSWJlbjogSWYgdGhlIGZvcm0gaGFzIG5vIGNoaWxkcmVuIHdlIGp1c3QgcmV0dXJuIHRoZSBzdGF0ZSBvZiB0aGUgY3VycmVudCBmb3JtXG5cdGlmICghY29udHJvbFsnY29udHJvbHMnXSkge1xuXHRcdHJldHVybiBjb250cm9sLmludmFsaWQ7XG5cdH1cblxuXHQvLyBJYmVuOiBJZiB0aGUgZm9ybSBoYXMgY2hpbGRyZW4sIHdlIGNoZWNrIGlmIHNvbWUgb2YgdGhlIGNoaWxkIGNvbnRyb2xzIGhhdmUgZXJyb3JzXG5cdGNvbnN0IGNvbnRyb2xzID0gY29udHJvbFsnY29udHJvbHMnXTtcblxuXHRyZXR1cm4gKEFycmF5LmlzQXJyYXkoY29udHJvbHMpID8gY29udHJvbHMgOiBPYmplY3QudmFsdWVzKGNvbnRyb2xzKSkuc29tZSgoY29udHJvbCkgPT5cblx0XHRoYXNFcnJvcnMoY29udHJvbClcblx0KTtcbn07XG4iXX0=","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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG91Y2hlZC1ldmVudC1saXN0ZW5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9mb3Jtcy9zcmMvbGliL3V0aWxzL3RvdWNoZWQtZXZlbnQtbGlzdGVuZXIvdG91Y2hlZC1ldmVudC1saXN0ZW5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBRW5EOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLE9BQXdCLEVBQXVCLEVBQUU7SUFDckYsNkRBQTZEO0lBQzdELE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUM7SUFDNUMsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQztJQUVoRCxxREFBcUQ7SUFDckQsTUFBTSxjQUFjLEdBQUcsSUFBSSxlQUFlLENBQVUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRXJFLG9FQUFvRTtJQUNwRSxPQUFPLENBQUMsYUFBYSxHQUFHLENBQUMsT0FBK0IsRUFBRSxFQUFFO1FBQzNELGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUIsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN0QyxDQUFDLENBQUM7SUFFRixPQUFPLENBQUMsZUFBZSxHQUFHLENBQUMsT0FBK0IsRUFBRSxFQUFFO1FBQzdELGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0IsZUFBZSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN4QyxDQUFDLENBQUM7SUFFRixpQ0FBaUM7SUFDakMsT0FBTyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDdEMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbi8qKlxuICogTGlzdGVuIHRvIHRoZSB0b3VjaGVkIGV2ZW50IG9mIGEgY29udHJvbFxuICpcbiAqIEBwYXJhbSBjb250cm9sIC0gQW4gQWJzdHJhY3RDb250cm9sXG4gKi9cbmV4cG9ydCBjb25zdCB0b3VjaGVkRXZlbnRMaXN0ZW5lciA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBPYnNlcnZhYmxlPGJvb2xlYW4+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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXNzb3ItcHJvdmlkZXJzLnV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvZm9ybXMvc3JjL2xpYi91dGlscy9hY2Nlc3Nvci1wcm92aWRlcnMvYWNjZXNzb3ItcHJvdmlkZXJzLnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFZLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRCxPQUFPLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFXbkQ7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLENBQ3RDLFNBQThDLEVBQ2pDLEVBQUU7SUFDZixPQUFPO1FBQ04scURBQXFEO1FBQ3JEO1lBQ0MsT0FBTyxFQUFFLGlCQUFpQjtZQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQztZQUN4QyxLQUFLLEVBQUUsSUFBSTtTQUNYO1FBQ0Qsd0RBQXdEO1FBQ3hEO1lBQ0MsT0FBTyxFQUFFLGFBQWE7WUFDdEIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUM7WUFDeEMsS0FBSyxFQUFFLElBQUk7U0FDWDtRQUNELDJEQUEyRDtRQUMzRDtZQUNDLE9BQU8sRUFBRSxnQkFBZ0I7WUFDekIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUM7U0FDeEM7S0FDRCxDQUFDO0FBQ0gsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUHJvdmlkZXIsIGZvcndhcmRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5HX1ZBTElEQVRPUlMsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBCYXNlRm9ybUFjY2Vzc29yIH0gZnJvbSAnLi4vLi4vYWJzdHJhY3RzJztcblxuLyoqXG4gKiBBbiBpbnRlcmZhY2UgdG8gd3JhcCBhbiBjb21wb25lbnQgY2xhc3MgaW4uXG4gKlxuICogVGhpcyBpbnRlcmZhY2UgaXMgZm9yIGludGVybmFsIHVzZSwgYXMgYSBzaW1pbGFyIG9uZSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgQ0RLLCBidXQgd2UgZG9uJ3Qgd2FudCB0byBjcmVhdGUgYSBkZXBlbmRlbmN5IG9uIHRoYXQgZm9yIHRoaXMgcGFja2FnZS5cbiAqL1xuaW50ZXJmYWNlIENvbXBvbmVudFR5cGVXcmFwcGVyPENvbXBvbmVudFR5cGU+IHtcblx0bmV3ICguLi5hcmdzOiBhbnlbXSk6IENvbXBvbmVudFR5cGU7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBuZWNlc3NhcnkgcHJvdmlkZXJzIGZvciBhIChEYXRhKUZvcm1BY2Nlc3Nvci5cbiAqXG4gKiBAcGFyYW0gIGNvbXBvbmVudCAtIFRoZSBjb21wb25lbnQgY2xhc3Mgb2YgdGhlIChEYXRhKUZvcm1BY2Nlc3NvclxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlQWNjZXNzb3JQcm92aWRlcnMgPSA8Q29tcG9uZW50VHlwZT4oXG5cdGNvbXBvbmVudDogQ29tcG9uZW50VHlwZVdyYXBwZXI8Q29tcG9uZW50VHlwZT5cbik6IFByb3ZpZGVyW10gPT4ge1xuXHRyZXR1cm4gW1xuXHRcdC8vIEliZW46IEdlbmVyYXRlIGEgcHJvdmlkZXIgZm9yIHRoZSBjb250cm9sIGhhbmRsaW5nXG5cdFx0e1xuXHRcdFx0cHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG5cdFx0XHR1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBjb21wb25lbnQpLFxuXHRcdFx0bXVsdGk6IHRydWUsXG5cdFx0fSxcblx0XHQvLyBJYmVuOiBHZW5lcmF0ZSBhIHByb3ZpZGVyIGZvciB0aGUgdmFsaWRhdGlvbiBoYW5kbGluZ1xuXHRcdHtcblx0XHRcdHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG5cdFx0XHR1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBjb21wb25lbnQpLFxuXHRcdFx0bXVsdGk6IHRydWUsXG5cdFx0fSxcblx0XHQvLyBJYmVuOiBHZW5lcmF0ZSBhIHByb3ZpZGVyIGZvciB0aGUgRm9ybUNvbnRhaW5lciBoYW5kbGluZ1xuXHRcdHtcblx0XHRcdHByb3ZpZGU6IEJhc2VGb3JtQWNjZXNzb3IsXG5cdFx0XHR1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBjb21wb25lbnQpLFxuXHRcdH0sXG5cdF07XG59O1xuIl19","/**\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1mb3JtLmFjY2Vzc29yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2Zvcm1zL3NyYy9saWIvYWJzdHJhY3RzL2Jhc2UtZm9ybS9iYXNlLWZvcm0uYWNjZXNzb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUNILE1BQU0sT0FBTyxnQkFBZ0I7Q0FBRyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogSW4gb3JkZXIgdG8gc2VsZWN0IGFsbCBhY2Nlc3NvcnMgaW4gYSBGb3JtQ29udGFpbmVyLCB3ZSBuZWVkIHRoaXMgYmFzZSBjbGFzcyB0byBwYXNzIHRvIG91ciBWaWV3Q2hpbGRyZW4uXG4gKlxuICogSU1QT1JUQU5UOiBUaGlzIHdpbGwgbmV2ZXIgYmUgdXNlZCBhcyBhbiBhY3R1YWwgZnVuY3Rpb25hbCBjb21wb25lbnRcbiAqL1xuZXhwb3J0IGNsYXNzIEJhc2VGb3JtQWNjZXNzb3Ige31cbiJdfQ==","import { ChangeDetectorRef, DestroyRef, Directive, Injector, inject, input, signal, viewChildren, } from '@angular/core';\nimport { outputFromObservable, takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { NgControl, } from '@angular/forms';\nimport { BehaviorSubject, Subject, combineLatest, filter, of, switchMap, take, takeUntil, tap, } from 'rxjs';\nimport { handleFormAccessorControlDisabling, handleFormAccessorMarkAsDirty, handleFormAccessorMarkAsPristine, handleFormAccessorMarkAsTouched, handleFormAccessorUpdateValueAndValidity, hasErrors, } from '../../utils';\nimport { BaseFormAccessor } from '../base-form/base-form.accessor';\nimport * as i0 from \"@angular/core\";\nexport class NgxFormsControlValueAccessor {\n    /**\n     *  The Injector needed in the constructor\n     */\n    injector = inject(Injector);\n    /**\n     *  The OnDestroyRef reference\n     */\n    destroyRef = inject(DestroyRef);\n    /**\n     *  The ChangeDetector reference\n     */\n    cdRef = inject(ChangeDetectorRef);\n    /**\n     * A subject to hold the parent control\n     */\n    parent = signal(undefined, ...(ngDevMode ? [{ debugName: \"parent\" }] : []));\n    /**\n     * A reference to the control tied to this control value accessor\n     */\n    parentControl = this.parent.asReadonly();\n    /**\n     * Whether the first setDisable has run\n     */\n    initialSetDisableHasRun = false;\n    /**\n     * Subject to check whether the form is initialized\n     */\n    initializedSubject$ = new BehaviorSubject(false);\n    /**\n     * A list of all DataFormAccessors en FormAccessors of this component\n     */\n    accessors = viewChildren(BaseFormAccessor, ...(ngDevMode ? [{ debugName: \"accessors\" }] : []));\n    /**\n     * An observable that emits whenever the form is initialized\n     */\n    initialized$ = this.initializedSubject$.asObservable();\n    /**\n     * Inner form to write to\n     */\n    form;\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    disableFields = input(...(ngDevMode ? [undefined, { debugName: \"disableFields\" }] : []));\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    skipInitialSetDisable = input(true, ...(ngDevMode ? [{ debugName: \"skipInitialSetDisable\" }] : []));\n    /**\n     * Emits to know whether the form has been initialized\n     */\n    initializedForm = outputFromObservable(this.initializedSubject$.asObservable());\n    constructor() {\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                // Iben: Set the parent control\n                this.parent.set(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                console.warn('NgxForms: No parent control was found while trying to set up the form accessor.');\n            }\n        });\n        combineLatest([this.initialized$, toObservable(this.disableFields)])\n            .pipe(switchMap(([, keys]) => {\n            // Iben: Early exit in case the keys are not provided\n            if (!keys) {\n                return of();\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            return this.initializedSubject$.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        }), takeUntilDestroyed(this.destroyRef))\n            .subscribe();\n    }\n    /**\n     * Sets up the ControlValueAccessor connectors\n     */\n    onTouch = () => { }; // tslint:disable-line:no-empty\n    onChange = (_) => { }; // tslint:disable-line:no-empty\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: Wait until the form is ready\n        this.initialized$\n            .pipe(filter(Boolean), take(1), tap(() => {\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            .subscribe();\n    }\n    /**\n     * Mark all controls of the form as touched\n     */\n    markAsTouched(options = {}) {\n        handleFormAccessorMarkAsTouched(this.form, this.accessors() || [], 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() || [], 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() || [], 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() || [], 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    static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: NgxFormsControlValueAccessor, deps: [], target: i0.ɵɵFactoryTarget.Directive });\n    static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.2.0\", version: \"20.2.1\", type: NgxFormsControlValueAccessor, isStandalone: true, inputs: { disableFields: { classPropertyName: \"disableFields\", publicName: \"disableFields\", isSignal: true, isRequired: false, transformFunction: null }, skipInitialSetDisable: { classPropertyName: \"skipInitialSetDisable\", publicName: \"skipInitialSetDisable\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { initializedForm: \"initializedForm\" }, viewQueries: [{ propertyName: \"accessors\", predicate: BaseFormAccessor, descendants: true, isSignal: true }], ngImport: i0 });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: NgxFormsControlValueAccessor, decorators: [{\n            type: Directive\n        }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLWNvbnRyb2wtdmFsdWUtYWNjZXNzb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvZm9ybXMvc3JjL2xpYi9hYnN0cmFjdHMvY3VzdG9tLWNvbnRyb2wtdmFsdWUtYWNjZXNzb3IvY3VzdG9tLWNvbnRyb2wtdmFsdWUtYWNjZXNzb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLGlCQUFpQixFQUNqQixVQUFVLEVBQ1YsU0FBUyxFQUNULFFBQVEsRUFLUixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BHLE9BQU8sRUFJTixTQUFTLEdBRVQsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQ04sZUFBZSxFQUVmLE9BQU8sRUFDUCxhQUFhLEVBQ2IsTUFBTSxFQUNOLEVBQUUsRUFDRixTQUFTLEVBQ1QsSUFBSSxFQUNKLFNBQVMsRUFDVCxHQUFHLEdBQ0gsTUFBTSxNQUFNLENBQUM7QUFHZCxPQUFPLEVBQ04sa0NBQWtDLEVBQ2xDLDZCQUE2QixFQUM3QixnQ0FBZ0MsRUFDaEMsK0JBQStCLEVBQy9CLHdDQUF3QyxFQUN4QyxTQUFTLEdBQ1QsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7O0FBR25FLE1BQU0sT0FBZ0IsNEJBQTRCO0lBTWpEOztPQUVHO0lBQ2MsUUFBUSxHQUFhLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUV2RDs7T0FFRztJQUNnQixVQUFVLEdBQWUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRS9EOztPQUVHO0lBQ2EsS0FBSyxHQUFzQixNQUFNLENBQUMsaUJBQWlC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QUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQ25FLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUM7WUFFcEMsT0FBTztRQUNSLENBQUM7UUFFRCxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDekMsQ0FBQzthQUFNLENBQUM7WUFDUCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3hDLENBQUM7UUFFRCw2REFBNkQ7UUFDN0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUM1QixDQUFDO3VHQWhYb0IsNEJBQTRCOzJGQUE1Qiw0QkFBNEIsaWNBd0RqQixnQkFBZ0I7OzJGQXhEM0IsNEJBQTRCO2tCQURqRCxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Q2hhbmdlRGV0ZWN0b3JSZWYsXG5cdERlc3Ryb3lSZWYsXG5cdERpcmVjdGl2ZSxcblx0SW5qZWN0b3IsXG5cdElucHV0U2lnbmFsLFxuXHRPdXRwdXRSZWYsXG5cdFNpZ25hbCxcblx0V3JpdGFibGVTaWduYWwsXG5cdGluamVjdCxcblx0aW5wdXQsXG5cdHNpZ25hbCxcblx0dmlld0NoaWxkcmVuLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG91dHB1dEZyb21PYnNlcnZhYmxlLCB0YWtlVW50aWxEZXN0cm95ZWQsIHRvT2JzZXJ2YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7XG5cdEFic3RyYWN0Q29udHJvbCxcblx0Q29udHJvbFZhbHVlQWNjZXNzb3IsXG5cdEZvcm1Db250cm9sLFxuXHROZ0NvbnRyb2wsXG5cdFZhbGlkYXRpb25FcnJvcnMsXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG5cdEJlaGF2aW9yU3ViamVjdCxcblx0T2JzZXJ2YWJsZSxcblx0U3ViamVjdCxcblx0Y29tYmluZUxhdGVzdCxcblx0ZmlsdGVyLFxuXHRvZixcblx0c3dpdGNoTWFwLFxuXHR0YWtlLFxuXHR0YWtlVW50aWwsXG5cdHRhcCxcbn0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEZvcm1BY2Nlc3NvckNvbnRyb2xzRW50aXR5LCBGb3JtU3RhdGVPcHRpb25zRW50aXR5IH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHtcblx0aGFuZGxlRm9ybUFjY2Vzc29yQ29udHJvbERpc2FibGluZyxcblx0aGFuZGxlRm9ybUFjY2Vzc29yTWFya0FzRGlydHksXG5cdGhhbmRsZUZvcm1BY2Nlc3Nvck1hcmtBc1ByaXN0aW5lLFxuXHRoYW5kbGVGb3JtQWNjZXNzb3JNYXJrQXNUb3VjaGVkLFxuXHRoYW5kbGVGb3JtQWNjZXNzb3JVcGRhdGVWYWx1ZUFuZFZhbGlkaXR5LFxuXHRoYXNFcnJvcnMsXG59IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IEJhc2VGb3JtQWNjZXNzb3IgfSBmcm9tICcuLi9iYXNlLWZvcm0vYmFzZS1mb3JtLmFjY2Vzc29yJztcblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTmd4Rm9ybXNDb250cm9sVmFsdWVBY2Nlc3Nvcjxcblx0RGF0YVR5cGUgPSB1bmtub3duLFxuXHRGb3JtQWNjZXNzb3JGb3JtVHlwZSBleHRlbmRzIEFic3RyYWN0Q29udHJvbCA9IEZvcm1Db250cm9sLFxuXHRGb3JtVmFsdWVUeXBlID0gRGF0YVR5cGVcbj4gaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3Nvclxue1xuXHQvKipcblx0ICogIFRoZSBJbmplY3RvciBuZWVkZWQgaW4gdGhlIGNvbnN0cnVjdG9yXG5cdCAqL1xuXHRwcml2YXRlIHJlYWRvbmx5IGluamVjdG9yOiBJbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG5cblx0LyoqXG5cdCAqICBUaGUgT25EZXN0cm95UmVmIHJlZmVyZW5jZVxuXHQgKi9cblx0cHJvdGVjdGVkIHJlYWRvbmx5IGRlc3Ryb3lSZWY6IERlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cblx0LyoqXG5cdCAqICBUaGUgQ2hhbmdlRGV0ZWN0b3IgcmVmZXJlbmNlXG5cdCAqL1xuXHRwdWJsaWMgcmVhZG9ubHkgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcblxuXHQvKipcblx0ICogQSBzdWJqZWN0IHRvIGhvbGQgdGhlIHBhcmVudCBjb250cm9sXG5cdCAqL1xuXHRwcml2YXRlIHJlYWRvbmx5IHBhcmVudDogV3JpdGFibGVTaWduYWw8QWJzdHJhY3RDb250cm9sPiA9IHNpZ25hbDxBYnN0cmFjdENvbnRyb2w+KHVuZGVmaW5lZCk7XG5cblx0LyoqXG5cdCAqIEEgcmVmZXJlbmNlIHRvIHRoZSBjb250cm9sIHRpZWQgdG8gdGhpcyBjb250cm9sIHZhbHVlIGFjY2Vzc29yXG5cdCAqL1xuXHRwcm90ZWN0ZWQgcGFyZW50Q29udHJvbDogU2lnbmFsPEFic3RyYWN0Q29udHJvbD4gPSB0aGlzLnBhcmVudC5hc1JlYWRvbmx5KCk7XG5cblx0LyoqXG5cdCAqIFdoZXRoZXIgdGhlIGZpcnN0IHNldERpc2FibGUgaGFzIHJ1blxuXHQgKi9cblx0cHJvdGVjdGVkIGluaXRpYWxTZXREaXNhYmxlSGFzUnVuOiBib29sZWFuID0gZmFsc2U7XG5cblx0LyoqXG5cdCAqIFN1YmplY3QgdG8gY2hlY2sgd2hldGhlciB0aGUgZm9ybSBpcyBpbml0aWFsaXplZFxuXHQgKi9cblx0cHJvdGVjdGVkIHJlYWRvbmx5IGluaXRpYWxpemVkU3ViamVjdCQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oXG5cdFx0ZmFsc2Vcblx0KTtcblxuXHQvKipcblx0ICogV2hldGhlciBvciBub3Qgd2Ugd2FudCB0byBlbWl0IGEgdmFsdWUgd2hlbiB3ZSB1c2UgdGhlIGRpc2FibGVGaWVsZHMsIGJ5IGRlZmF1bHQgdGhpcyB3aWxsIGVtaXRcblx0ICpcblx0ICogQHBhcmFtICBrZXlzIC0gS2V5cyB3ZSdyZSBhYm91dCB0byBkaXNhYmxlXG5cdCAqL1xuXHRwcm90ZWN0ZWQgZW1pdFZhbHVlV2hlbkRpc2FibGVGaWVsZHNVc2luZ0lucHV0Pyhcblx0XHRrZXlzOiBGb3JtQWNjZXNzb3JDb250cm9sc0VudGl0eTxGb3JtQWNjZXNzb3JGb3JtVHlwZT5bXVxuXHQpOiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBBIGxpc3Qgb2YgYWxsIERhdGFGb3JtQWNjZXNzb3JzIGVuIEZvcm1BY2Nlc3NvcnMgb2YgdGhpcyBjb21wb25lbnRcblx0ICovXG5cdHByb3RlY3RlZCByZWFkb25seSBhY2Nlc3NvcnM6IFNpZ25hbDxCYXNlRm9ybUFjY2Vzc29yPiA9XG5cdFx0dmlld0NoaWxkcmVuPEJhc2VGb3JtQWNjZXNzb3I+KEJhc2VGb3JtQWNjZXNzb3IpO1xuXG5cdC8qKlxuXHQgKiBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgd2hlbmV2ZXIgdGhlIGZvcm0gaXMgaW5pdGlhbGl6ZWRcblx0ICovXG5cdHB1YmxpYyBpbml0aWFsaXplZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLmluaXRpYWxpemVkU3ViamVjdCQuYXNPYnNlcnZhYmxlKCk7XG5cblx0LyoqXG5cdCAqIElubmVyIGZvcm0gdG8gd3JpdGUgdG9cblx0ICovXG5cdHB1YmxpYyBmb3JtOiBGb3JtQWNjZXNzb3JGb3JtVHlwZTtcblxuXHQvKipcblx0ICogS2V5cyBvZiB0aGUgZmllbGRzIHdlIHdpc2ggdG8gZGlzYWJsZS5cblx0ICogQnkgZGVmYXVsdCB0aGlzIHdpbGwgZW1pdCBhIHZhbHVlQ2hhbmdlcywgdGhpcyBjYW4gYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIGVtaXRWYWx1ZVdoZW5EaXNhYmxlRmllbGRzVXNpbmdJbnB1dCBpbiB0aGUgQWNjZXNzb3Jcblx0ICpcblx0ICogQG1lbWJlcm9mIEZvcm1BY2Nlc3NvclxuXHQgKi9cblx0cHVibGljIGRpc2FibGVGaWVsZHM6IElucHV0U2lnbmFsPEZvcm1BY2Nlc3NvckNvbnRyb2xzRW50aXR5PEZvcm1BY2Nlc3NvckZvcm1UeXBlPltdPiA9XG5cdFx0aW5wdXQ8Rm9ybUFjY2Vzc29yQ29udHJvbHNFbnRpdHk8Rm9ybUFjY2Vzc29yRm9ybVR5cGU+W10+KCk7XG5cblx0LyoqXG5cdCAqIFdoZXRoZXIgd2Ugd2FudCB0byBza2lwIHRoZSBmaXJzdCBzZXREaXNhYmxlIChodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL3B1bGwvNDc1NzYpLlxuXHQgKiBCeSBkZWZhdWx0LCB0aGlzIGlzIHRydWVcblx0ICovXG5cdHB1YmxpYyByZWFkb25seSBza2lwSW5pdGlhbFNldERpc2FibGUgPSBpbnB1dDxib29sZWFuPih0cnVlKTtcblxuXHQvKipcblx0ICogRW1pdHMgdG8ga25vdyB3aGV0aGVyIHRoZSBmb3JtIGhhcyBiZWVuIGluaXRpYWxpemVkXG5cdCAqL1xuXHRwdWJsaWMgcmVhZG9ubHkgaW5pdGlhbGl6ZWRGb3JtOiBPdXRwdXRSZWY8Ym9vbGVhbj4gPSBvdXRwdXRGcm9tT2JzZXJ2YWJsZShcblx0XHR0aGlzLmluaXRpYWxpemVkU3ViamVjdCQuYXNPYnNlcnZhYmxlKClcblx0KTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHQvLyBJYmVuOiBVc2Ugc2V0VGltZU91dCB0byBhdm9pZCB0aGUgY2lyY3VsYXIgZGVwZW5kZW5jeSBpc3N1ZVxuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3QgcGFyZW50Q29udHJvbCA9IHRoaXMuaW5qZWN0b3IuZ2V0KE5nQ29udHJvbCk7XG5cblx0XHRcdFx0Ly8gSWJlbjogSWYgZm9yIHNvbWUgcmVhc29uIHdlIGNhbid0IGZpbmQgdGhlIGNvbnRyb2wgb3IgdGhlIG5nQ29udHJvbCwgZWFybHkgZXhpdCBhbmQgdGhyb3cgYW4gZXJyb3Jcblx0XHRcdFx0aWYgKCFwYXJlbnRDb250cm9sPy5jb250cm9sKSB7XG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcihcblx0XHRcdFx0XHRcdCdOZ3hGb3JtczogTm8gY29udHJvbCB3YXMgZm91bmQgYWZ0ZXIgaW5pdGlhbGl6aW5nLiBDaGVjayBpZiBhIGNvbnRyb2wgd2FzIGFzc2lnbmVkIHRvIHRoZSBGb3JtQWNjZXNzb3IuJ1xuXHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBJYmVuOiBTZXQgdGhlIHBhcmVudCBjb250cm9sXG5cdFx0XHRcdHRoaXMucGFyZW50LnNldChwYXJlbnRDb250cm9sLmNvbnRyb2wpO1xuXG5cdFx0XHRcdC8vIEliZW46IEdyYWIgdGhlIGNvbnRyb2wgZnJvbSB0aGUgcGFyZW50IGNvbnRhaW5lclxuXHRcdFx0XHRjb25zdCBjb250cm9sID0gcGFyZW50Q29udHJvbC5jb250cm9sO1xuXG5cdFx0XHRcdC8vIEliZW46IFNldHVwIHRoZSBtYXJrQXNUb3VjaGVkIGZsb3dcblx0XHRcdFx0Ly8gSWJlbjogS2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgb3JpZ2luYWwgYG1hcmtBc1RvdWNoZWRgIGhhbmRsZXIuXG5cdFx0XHRcdGNvbnN0IG1hcmtBc1RvdWNoZWQgPSBjb250cm9sLm1hcmtBc1RvdWNoZWQuYmluZChjb250cm9sKTtcblxuXHRcdFx0XHQvLyBJYmVuOiBPdmVycmlkZSB0aGUgYG1hcmtBc1RvdWNoZWRgIGhhbmRsZXIgd2l0aCBvdXIgb3duLlxuXHRcdFx0XHRjb250cm9sLm1hcmtBc1RvdWNoZWQgPSAob3B0aW9ucz86IEZvcm1TdGF0ZU9wdGlvbnNFbnRpdHkpID0+IHtcblx0XHRcdFx0XHQvLyBJYmVuOiBJZiB0aGUgY29udHJvbCBpcyBhbHJlYWR5IG1hcmtlZCBhcyB0b3VjaGVkLCB3ZSBlYXJseSBleGl0XG5cdFx0XHRcdFx0aWYgKGNvbnRyb2wudG91Y2hlZCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIEliZW46IEludm9rZSB0aGUgb3JpZ2luYWwgYG1hcmtBc1RvdWNoZWRIYW5kbGVyYC5cblx0XHRcdFx0XHRtYXJrQXNUb3VjaGVkKG9wdGlvbnMpO1xuXG5cdFx0XHRcdFx0Ly8gSWJlbjogSWYgdGhlIG9ubHlTZWxmIGZsYWcgaXMgc2V0IHRvIHRydWUsIHdlIGVhcmx5IGV4aXRcblx0XHRcdFx0XHRpZiAob3B0aW9ucz8ub25seVNlbGYpIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBJYmVuOiBJbnZva2UgdGhlIGN1c3RvbSBgbWFya0FzVG91Y2hlZEhhbmRsZXJgLlxuXHRcdFx0XHRcdHRoaXMubWFya0FzVG91Y2hlZChvcHRpb25zKTtcblx0XHRcdFx0fTtcblxuXHRcdFx0XHQvLyBJYmVuOiBTZXR1cCB0aGUgbWFya0FzRGlydHkgZmxvd1xuXHRcdFx0XHQvLyBJYmVuOiBLZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSBvcmlnaW5hbCBgbWFya0FzRGlydHlgIGhhbmRsZXIuXG5cdFx0XHRcdGNvbnN0IG1hcmtBc0RpcnR5ID0gY29udHJvbC5tYXJrQXNEaXJ0eS5iaW5kKGNvbnRyb2wpO1xuXG5cdFx0XHRcdC8vIEliZW46IE92ZXJyaWRlIHRoZSBgbWFya0FzRGlydHlgIGhhbmRsZXIgd2l0aCBvdXIgb3duLlxuXHRcdFx0XHRjb250cm9sLm1hcmtBc0RpcnR5ID0gKG9wdGlvbnM/OiBGb3JtU3RhdGVPcHRpb25zRW50aXR5KSA9PiB7XG5cdFx0XHRcdFx0Ly8gSWJlbjogSWYgdGhlIGNvbnRyb2wgaXMgYWxyZWFkeSBtYXJrZWQgYXMgZGlydHksIHdlIGVhcmx5IGV4aXRcblx0XHRcdFx0XHRpZiAoY29udHJvbC5kaXJ0eSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIEliZW46IEludm9rZSB0aGUgb3JpZ2luYWwgYG1hcmtBc0RpcnR5SGFuZGxlcmAuXG5cdFx0XHRcdFx0bWFya0FzRGlydHkob3B0aW9ucyk7XG5cblx0XHRcdFx0XHQvLyBJYmVuOiBJZiB0aGUgb25seVNlbGYgZmxhZyBpcyBzZXQgdG8gdHJ1ZSwgd2UgZWFybHkgZXhpdFxuXHRcdFx0XHRcdGlmIChvcHRpb25zPy5vbmx5U2VsZikge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIEliZW46IEludm9rZSB0aGUgY3VzdG9tIGBtYXJrQXNEaXJ0eUhhbmRsZXJgLlxuXHRcdFx0XHRcdHRoaXMubWFya0FzRGlydHkob3B0aW9ucyk7XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0Ly8gSWJlbjogU2V0dXAgdGhlIG1hcmtBc1ByaXN0aW5lIGZsb3dcblx0XHRcdFx0Ly8gSWJlbjogS2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgb3JpZ2luYWwgYG1hcmtBc1ByaXN0aW5lYCBoYW5kbGVyLlxuXHRcdFx0XHRjb25zdCBtYXJrQXNQcmlzdGluZSA9IGNvbnRyb2wubWFya0FzUHJpc3RpbmUuYmluZChjb250cm9sKTtcblxuXHRcdFx0XHQvLyBJYmVuOiBPdmVycmlkZSB0aGUgYG1hcmtBc1ByaXN0aW5lYCBoYW5kbGVyIHdpdGggb3VyIG93bi5cblx0XHRcdFx0Y29udHJvbC5tYXJrQXNQcmlzdGluZSA9IChvcHRpb25zPzogRm9ybVN0YXRlT3B0aW9uc0VudGl0eSkgPT4ge1xuXHRcdFx0XHRcdC8vIEliZW46IElmIHRoZSBjb250cm9sIGlzIGFscmVhZHkgbWFya2VkIGFzIHByaXN0aW5lLCB3ZSBlYXJseSBleGl0XG5cdFx0XHRcdFx0aWYgKGNvbnRyb2wucHJpc3RpbmUpIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBJYmVuOiBJbnZva2UgdGhlIG9yaWdpbmFsIGBtYXJrQXNQcmlzdGluZUhhbmRsZXJgLlxuXHRcdFx0XHRcdG1hcmtBc1ByaXN0aW5lKG9wdGlvbnMpO1xuXG5cdFx0XHRcdFx0Ly8gSWJlbjogSWYgdGhlIG9ubHlTZWxmIGZsYWcgaXMgc2V0IHRvIHRydWUsIHdlIGVhcmx5IGV4aXRcblx0XHRcdFx0XHRpZiAob3B0aW9ucz8ub25seVNlbGYpIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBJYmVuOiBJbnZva2UgdGhlIGN1c3RvbSBgbWFya0FzUHJpc3RpbmVIYW5kbGVyYC5cblx0XHRcdFx0XHR0aGlzLm1hcmtBc1ByaXN0aW5lKG9wdGlvbnMpO1xuXHRcdFx0XHR9O1xuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0Y29uc29sZS53YXJuKFxuXHRcdFx0XHRcdCdOZ3hGb3JtczogTm8gcGFyZW50IGNvbnRyb2wgd2FzIGZvdW5kIHdoaWxlIHRyeWluZyB0byBzZXQgdXAgdGhlIGZvcm0gYWNjZXNzb3IuJ1xuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0Y29tYmluZUxhdGVzdChbdGhpcy5pbml0aWFsaXplZCQsIHRvT2JzZXJ2YWJsZSh0aGlzLmRpc2FibGVGaWVsZHMpXSlcblx0XHRcdC5waXBlKFxuXHRcdFx0XHRzd2l0Y2hNYXAoKFssIGtleXNdKSA9PiB7XG5cdFx0XHRcdFx0Ly8gSWJlbjogRWFybHkgZXhpdCBpbiBjYXNlIHRoZSBrZXlzIGFyZSBub3QgcHJvdmlkZWRcblx0XHRcdFx0XHRpZiAoIWtleXMpIHtcblx0XHRcdFx0XHRcdHJldHVybiBvZigpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIEliZW46IFNldHVwIGEgc3ViamVjdCB0byB0cmFjayB3aGV0aGVyIHdlJ3JlIHN0aWxsIGRpc2FibGluZyB0aGUgZmllbGRzXG5cdFx0XHRcdFx0Y29uc3QgZGlzYWJsaW5nID0gbmV3IFN1YmplY3QoKTtcblxuXHRcdFx0XHRcdC8vIEliZW46IEFkZCB0aGUga2V5cyB0byBhIHNldCBmb3IgbW9yZSBwZXJmb3JtYW50IGxvb2t1cCBhbmQgY29udmVydCB0aG9zZSB0byBhIHN0cmluZyB0byBub3QgaGF2ZSBUeXBlc2NyaXB0IGlzc3VlcyBsYXRlciBkb3duIHRoZSBsaW5lXG5cdFx0XHRcdFx0Y29uc3QgY29udHJvbEtleXMgPSBuZXcgU2V0KGtleXMpO1xuXG5cdFx0XHRcdFx0Ly8gSWJlbjogQ2hlY2sgaWYgd2UgbmVlZCB0byBkaXNwYXRjaCB0aGUgZGlzYWJsZSBvciBlbmFibGUgZXZlbnRcblx0XHRcdFx0XHRjb25zdCBlbWl0RXZlbnQgPSB0aGlzLmVtaXRWYWx1ZVdoZW5EaXNhYmxlRmllbGRzVXNpbmdJbnB1dFxuXHRcdFx0XHRcdFx0PyB0aGlzLmVtaXRWYWx1ZVdoZW5EaXNhYmxlRmllbGRzVXNpbmdJbnB1dChrZXlzKVxuXHRcdFx0XHRcdFx0OiB0cnVlO1xuXG5cdFx0XHRcdFx0Ly8gSWJlbjogTGlzdGVuIHRvIHRoZSBpbml0aWFsaXplZCBzdGF0ZSBvZiB0aGUgZm9ybVxuXHRcdFx0XHRcdHJldHVybiB0aGlzLmluaXRpYWxpemVkU3ViamVjdCQucGlwZShcblx0XHRcdFx0XHRcdGZpbHRlcihCb29sZWFuKSxcblx0XHRcdFx0XHRcdHRhcCgoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdC8vIFRPRE86IEliZW46IFJlbW92ZSB0aGlzIHNldFRpbWVvdXQgb25jZSB3ZSdyZSBpbiBhIFNpZ25hbCBiYXNlZCBjb21wb25lbnRcblx0XHRcdFx0XHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gSWJlbjogSGFuZGxlIHRoZSBkaXNhYmxpbmcgb2YgdGhlIGZpZWxkc1xuXHRcdFx0XHRcdFx0XHRcdGhhbmRsZUZvcm1BY2Nlc3NvckNvbnRyb2xEaXNhYmxpbmcoXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmZvcm0sXG5cdFx0XHRcdFx0XHRcdFx0XHRjb250cm9sS2V5cyxcblx0XHRcdFx0XHRcdFx0XHRcdGVtaXRFdmVudFxuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHRcdC8vIEliZW46IFNldCB0aGUgZGlzYWJsaW5nIHN1YmplY3Qgc28gdGhhdCB3ZSBjYW4gY29tcGxldGUgdGhpcyBzdWJzY3JpcHRpb25cblx0XHRcdFx0XHRcdFx0ZGlzYWJsaW5nLm5leHQodW5kZWZpbmVkKTtcblx0XHRcdFx0XHRcdFx0ZGlzYWJsaW5nLmNvbXBsZXRlKCk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdHRha2VVbnRpbChkaXNhYmxpbmcpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSksXG5cdFx0XHRcdHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXG5cdFx0XHQpXG5cdFx0XHQuc3Vic2NyaWJlKCk7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB1cCB0aGUgQ29udHJvbFZhbHVlQWNjZXNzb3IgY29ubmVjdG9yc1xuXHQgKi9cblx0cHVibGljIG9uVG91Y2g6IEZ1bmN0aW9uID0gKCkgPT4ge307IC8vIHRzbGludDpkaXNhYmxlLWxpbmU6bm8tZW1wdHlcblx0cHVibGljIG9uQ2hhbmdlOiBGdW5jdGlvbiA9IChfOiBhbnkpID0+IHt9OyAvLyB0c2xpbnQ6ZGlzYWJsZS1saW5lOm5vLWVtcHR5XG5cblx0cHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuXHRcdHRoaXMub25DaGFuZ2UgPSBmbjtcblx0fVxuXG5cdHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG5cdFx0dGhpcy5vblRvdWNoID0gZm47XG5cdH1cblxuXHQvKipcblx0ICogV3JpdGVzIHZhbHVlIHRvIHRoZSBpbm5lciBmb3JtXG5cdCAqXG5cdCAqIEBwYXJhbSB2YWx1ZSAtIFZhbHVlIHRvIHBhdGNoIGluIHRoZSBpbm5lciBmb3JtXG5cdCAqL1xuXHRwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogRGF0YVR5cGUgfCB1bmRlZmluZWQgfCBudWxsKTogdm9pZCB7XG5cdFx0Ly8gSWJlbjogV2FpdCB1bnRpbCB0aGUgZm9ybSBpcyByZWFkeVxuXHRcdHRoaXMuaW5pdGlhbGl6ZWQkXG5cdFx0XHQucGlwZShcblx0XHRcdFx0ZmlsdGVyKEJvb2xlYW4pLFxuXHRcdFx0XHR0YWtlKDEpLFxuXHRcdFx0XHR0YXAoKCkgPT4ge1xuXHRcdFx0XHRcdC8vIEliZW46IEVhcmx5IGV4aXQgaW4gY2FzZSB0aGUgZm9ybSB3YXMgbm90IGZvdW5kXG5cdFx0XHRcdFx0aWYgKCF0aGlzLmZvcm0pIHtcblx0XHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoXG5cdFx0XHRcdFx0XHRcdCdOZ3hGb3JtczogTm8gZm9ybSB3YXMgZm91bmQgd2hlbiB0cnlpbmcgdG8gd3JpdGUgYSB2YWx1ZS4gVGhpcyBlcnJvciBjYW4gb2NjdXIgd2hlbiBvdmVyd3JpdGluZyB0aGUgbmdPbkluaXQgd2l0aG91dCBpbnZva2luZyBzdXBlci5PbkluaXQoKS4nXG5cdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gSWJlbjogUmVzZXQgdGhlIGN1cnJlbnQgZm9ybSB3aXRob3V0IGVtaXRFdmVudCB0byBub3QgdHJpZ2dlciB0aGUgdmFsdWVDaGFuZ2VzXG5cdFx0XHRcdFx0dGhpcy5mb3JtLnJlc2V0KHVuZGVmaW5lZCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuXG5cdFx0XHRcdFx0Ly8gSWJlbjogUGF0Y2ggdGhlIGN1cnJlbnQgZm9ybSB3aXRoIHRoZSBuZXcgdmFsdWUgd2l0aG91dCBlbWl0RXZlbnQgdG8gbm90IHRyaWdnZXIgdGhlIHZhbHVlQ2hhbmdlc1xuXHRcdFx0XHRcdGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmZvcm0ucGF0Y2hWYWx1ZShcblx0XHRcdFx0XHRcdFx0dGhpcy5vbldyaXRlVmFsdWVNYXBwZXIgPyB0aGlzLm9uV3JpdGVWYWx1ZU1hcHBlcih2YWx1ZSkgOiB2YWx1ZSxcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdGVtaXRFdmVudDogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gSWJlbjogVmFsaWRhdGUgdGhlIGN1cnJlbnQgdmFsdWVcblx0XHRcdFx0XHR0aGlzLnZhbGlkYXRlKCk7XG5cblx0XHRcdFx0XHQvLyBJYmVuOiBEZXRlY3QgY2hhbmdlcyBzbyB0aGUgY2hhbmdlcyBhcmUgdmlzaWJsZSBpbiB0aGUgZG9tXG5cdFx0XHRcdFx0dGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG5cdFx0XHRcdH0pXG5cdFx0XHQpXG5cdFx0XHQuc3Vic2NyaWJlKCk7XG5cdH1cblxuXHQvKipcblx0ICogTWFyayBhbGwgY29udHJvbHMgb2YgdGhlIGZvcm0gYXMgdG91Y2hlZFxuXHQgKi9cblx0cHVibGljIG1hcmtBc1RvdWNoZWQob3B0aW9uczogRm9ybVN0YXRlT3B0aW9uc0VudGl0eSA9IHt9KTogdm9pZCB7XG5cdFx0aGFuZGxlRm9ybUFjY2Vzc29yTWFya0FzVG91Y2hlZCh0aGlzLmZvcm0sICh0aGlzLmFjY2Vzc29ycygpIGFzIGFueSkgfHwgW10sIG9wdGlvbnMpO1xuXG5cdFx0Ly8gSWJlbjogRGV0ZWN0IGNoYW5nZXMgc28gdGhlIGNoYW5nZXMgYXJlIHZpc2libGUgaW4gdGhlIGRvbVxuXHRcdHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1hcmsgYWxsIGNvbnRyb2xzIG9mIHRoZSBmb3JtIGFzIGRpcnR5XG5cdCAqL1xuXHRwdWJsaWMgbWFya0FzRGlydHkob3B0aW9uczogRm9ybVN0YXRlT3B0aW9uc0VudGl0eSA9IHt9KTogdm9pZCB7XG5cdFx0aGFuZGxlRm9ybUFjY2Vzc29yTWFya0FzRGlydHkodGhpcy5mb3JtLCAodGhpcy5hY2Nlc3NvcnMoKSBhcyBhbnkpIHx8IFtdLCBvcHRpb25zKTtcblxuXHRcdC8vIEliZW46IERldGVjdCBjaGFuZ2VzIHNvIHRoZSBjaGFuZ2VzIGFyZSB2aXNpYmxlIGluIHRoZSBkb21cblx0XHR0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNYXJrIGFsbCBjb250cm9scyBvZiB0aGUgZm9ybSBhcyBwcmlzdGluZVxuXHQgKi9cblx0cHVibGljIG1hcmtBc1ByaXN0aW5lKG9wdGlvbnM6IEZvcm1TdGF0ZU9wdGlvbnNFbnRpdHkgPSB7fSk6IHZvaWQge1xuXHRcdGhhbmRsZUZvcm1BY2Nlc3Nvck1hcmtBc1ByaXN0aW5lKHRoaXMuZm9ybSwgKHRoaXMuYWNjZXNzb3JzKCkgYXMgYW55KSB8fCBbXSwgb3B0aW9ucyk7XG5cblx0XHQvLyBJYmVuOiBEZXRlY3QgY2hhbmdlcyBzbyB0aGUgY2hhbmdlcyBhcmUgdmlzaWJsZSBpbiB0aGUgZG9tXG5cdFx0dGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG5cdH1cblxuXHQvKipcblx0ICogVXBkYXRlIHRoZSB2YWx1ZSBhbmQgdmFsaWRpdHkgb2YgdGhlIHByb3ZpZGVkIGZvcm1cblx0ICovXG5cdHB1YmxpYyB1cGRhdGVBbGxWYWx1ZUFuZFZhbGlkaXR5KG9wdGlvbnM6IEZvcm1TdGF0ZU9wdGlvbnNFbnRpdHkpOiB2b2lkIHtcblx0XHRoYW5kbGVGb3JtQWNjZXNzb3JVcGRhdGVWYWx1ZUFuZFZhbGlkaXR5KFxuXHRcdFx0dGhpcy5mb3JtLFxuXHRcdFx0KHRoaXMuYWNjZXNzb3JzKCkgYXMgYW55KSB8fCBbXSxcblx0XHRcdG9wdGlvbnNcblx0XHQpO1xuXG5cdFx0Ly8gSWJlbjogRGV0ZWN0IGNoYW5nZXMgc28gdGhlIGNoYW5nZXMgYXJlIHZpc2libGUgaW4gdGhlIGRvbVxuXHRcdHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFZhbGlkYXRlcyB0aGUgaW5uZXIgZm9ybVxuXHQgKi9cblx0cHVibGljIHZhbGlkYXRlKCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcblx0XHQvLyBJYmVuOiBJZiB0aGUgZm9ybSBpdHNlbGYgaXMgaW52YWxpZCwgd2UgcmV0dXJuIHRoZSBpbnZhbGlkRm9ybTogdHJ1ZSByaWdodCBhd2F5XG5cdFx0aWYgKHRoaXMuZm9ybT8uaW52YWxpZCkge1xuXHRcdFx0cmV0dXJuIHsgaW52YWxpZEZvcm06IHRydWUgfTtcblx0XHR9XG5cblx0XHQvLyBJYmVuOiBJbiBjYXNlIHRoZSBmb3JtIGlzIGludmFsaWQsIHdlIGNoZWNrIGlmIHRoZSBjaGlsZCBjb250cm9scyBhcmUgcG9zc2libHkgaW52YWxpZFxuXHRcdHJldHVybiBoYXNFcnJvcnModGhpcy5mb3JtKSA/IHsgaW52YWxpZEZvcm06IHRydWUgfSA6IG51bGw7XG5cdH1cblxuXHQvKipcblx0ICogRGlzYWJsZXMvZW5hYmxlcyB0aGUgaW5uZXIgZm9ybSBiYXNlZCBvbiB0aGUgcGFzc2VkIHZhbHVlXG5cdCAqXG5cdCAqIEBwYXJhbSBpc0Rpc2FibGVkIC0gV2hldGhlciBvciBub3QgdGhlIGZvcm0gc2hvdWxkIGJlIGRpc2FibGVkXG5cdCAqL1xuXHRwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKSB7XG5cdFx0Ly8gSWJlbjogU2tpcCB0aGUgaW5pdGlhbCBzZXREaXNhYmxlZCwgYXMgdGhpcyBtZXNzZXMgdXAgb3VyIGZvcm0gYXBwcm9hY2guXG5cdFx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9wdWxsLzQ3NTc2XG5cdFx0aWYgKHRoaXMuc2tpcEluaXRpYWxTZXREaXNhYmxlKCkgJiYgIXRoaXMuaW5pdGlhbFNldERpc2FibGVIYXNSdW4pIHtcblx0XHRcdHRoaXMuaW5pdGlhbFNldERpc2FibGVIYXNSdW4gPSB0cnVlO1xuXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKGlzRGlzYWJsZWQpIHtcblx0XHRcdHRoaXMuZm9ybS5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5mb3JtLmVuYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG5cdFx0fVxuXG5cdFx0Ly8gSWJlbjogRGV0ZWN0IGNoYW5nZXMgc28gdGhlIGNoYW5nZXMgYXJlIHZpc2libGUgaW4gdGhlIGRvbVxuXHRcdHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE9wdGlvbmFsIG1ldGhvZCB0byBtYXAgdGhlIGlubmVyIGZvcm0gdmFsdWUgdG8gYW4gb3V0ZXIgZm9ybSBzcGVjaWZpYyBmb3JtYXRcblx0ICpcblx0ICogQHBhcmFtIHZhbHVlIC0gVmFsdWUgZnJvbSB0aGUgZm9ybVxuXHQgKi9cblx0cHVibGljIG9uQ2hhbmdlTWFwcGVyPyh2YWx1ZTogUGFydGlhbDxGb3JtVmFsdWVUeXBlPik6IERhdGFUeXBlO1xuXG5cdC8qKlxuXHQgKiBPcHRpb25hbCBtZXRob2QgdG8gbWFwIHRoZSBvdXRlciBmb3JtIHZhbHVlIHRvIGFuIGlubmVyIGZvcm0gc3BlY2lmaWMgZm9ybWF0XG5cdCAqXG5cdCAqIEBwYXJhbSB2YWx1ZSAtIFZhbHVlIGZyb20gdGhlIGZvcm1cblx0ICovXG5cdHB1YmxpYyBvbldyaXRlVmFsdWVNYXBwZXI/KHZhbHVlOiBEYXRhVHlwZSk6IEZvcm1WYWx1ZVR5cGU7XG59XG4iXX0=","import { Directive } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { 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        }), takeUntilDestroyed(this.destroyRef))\n            .subscribe();\n    }\n    static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: FormAccessor, deps: null, target: i0.ɵɵFactoryTarget.Directive });\n    static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.2.1\", type: FormAccessor, isStandalone: true, usesInheritance: true, ngImport: i0 });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: FormAccessor, decorators: [{\n            type: Directive\n        }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5hY2Nlc3Nvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9mb3Jtcy9zcmMvbGliL2Fic3RyYWN0cy9mb3JtL2Zvcm0uYWNjZXNzb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVoRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckMsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sa0NBQWtDLENBQUM7O0FBR2hGLE1BQU0sT0FBZ0IsWUFLckIsU0FBUSw0QkFBMkU7SUFRNUUsUUFBUTtRQUNkLDJCQUEyQjtRQUMzQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUU1QixrREFBa0Q7UUFDbEQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNoQixPQUFPLENBQUMsS0FBSyxDQUNaLDhGQUE4RixDQUM5RixDQUFDO1lBRUYsT0FBTztRQUNSLENBQUM7UUFFRCx1RUFBdUU7UUFDdkUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVwQyx1REFBdUQ7UUFDdkQsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZO2FBQ3BCLElBQUksQ0FDSixHQUFHLENBQWdCLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDNUIseUVBQXlFO1lBQ3pFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekUsQ0FBQyxDQUFDLEVBQ0Ysa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUNuQzthQUNBLFNBQVMsRUFBRSxDQUFDO0lBQ2YsQ0FBQzt1R0F2Q29CLFlBQVk7MkZBQVosWUFBWTs7MkZBQVosWUFBWTtrQkFEakMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBOZ3hGb3Jtc0NvbnRyb2xWYWx1ZUFjY2Vzc29yIH0gZnJvbSAnLi4vY3VzdG9tLWNvbnRyb2wtdmFsdWUtYWNjZXNzb3InO1xuXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBGb3JtQWNjZXNzb3I8XG5cdFx0RGF0YVR5cGUgPSB1bmtub3duLFxuXHRcdEZvcm1BY2Nlc3NvckZvcm1UeXBlIGV4dGVuZHMgQWJzdHJhY3RDb250cm9sID0gRm9ybUNvbnRyb2wsXG5cdFx0Rm9ybVZhbHVlVHlwZSA9IERhdGFUeXBlXG5cdD5cblx0ZXh0ZW5kcyBOZ3hGb3Jtc0NvbnRyb2xWYWx1ZUFjY2Vzc29yPERhdGFUeXBlLCBGb3JtQWNjZXNzb3JGb3JtVHlwZSwgRm9ybVZhbHVlVHlwZT5cblx0aW1wbGVtZW50cyBPbkluaXRcbntcblx0LyoqXG5cdCAqIE1ldGhvZCB0byBzZXQgdXAgdGhlIGlubmVyIGZvcm1cblx0ICovXG5cdGFic3RyYWN0IGluaXRGb3JtKCk6IEZvcm1BY2Nlc3NvckZvcm1UeXBlO1xuXG5cdHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcblx0XHQvLyBJYmVuOiBTZXQgdGhlIGlubmVyIGZvcm1cblx0XHR0aGlzLmZvcm0gPSB0aGlzLmluaXRGb3JtKCk7XG5cblx0XHQvLyBJYmVuOiBFYXJseSBleGl0IGluIGNhc2UgdGhlIGZvcm0gd2FzIG5vdCBmb3VuZFxuXHRcdGlmICghdGhpcy5mb3JtKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKFxuXHRcdFx0XHQnTmd4Rm9ybXM6IE5vIGZvcm0gd2FzIGZvdW5kIGFmdGVyIGluaXRpYWxpemluZy4gQ2hlY2sgaWYgdGhlIGluaXRGb3JtIG1ldGhvZCByZXR1cm5zIGEgZm9ybS4nXG5cdFx0XHQpO1xuXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gSWJlbjogV2FybiB0aGUgaW5pdGlhbGl6ZWQkIG9ic2VydmFibGUgdGhhdCB0aGUgZm9ybSBoYXMgYmVlbiBzZXQgdXBcblx0XHR0aGlzLmluaXRpYWxpemVkU3ViamVjdCQubmV4dCh0cnVlKTtcblxuXHRcdC8vIEliZW46IExpc3RlbiB0byB0aGUgY2hhbmdlcyBhbmQgd2FybiB0aGUgcGFyZW50IGZvcm1cblx0XHR0aGlzLmZvcm0udmFsdWVDaGFuZ2VzXG5cdFx0XHQucGlwZShcblx0XHRcdFx0dGFwPEZvcm1WYWx1ZVR5cGU+KCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdC8vIEluIGNhc2UgdGhlcmUncyBhIG1hcHBlciB3ZSBtYXAgdGhlIHZhbHVlLCBlbHNlIHdlIHNlbmQgdGhlIGZvcm0gdmFsdWVcblx0XHRcdFx0XHR0aGlzLm9uQ2hhbmdlKHRoaXMub25DaGFuZ2VNYXBwZXIgPyB0aGlzLm9uQ2hhbmdlTWFwcGVyKHZhbHVlKSA6IHZhbHVlKTtcblx0XHRcdFx0fSksXG5cdFx0XHRcdHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXG5cdFx0XHQpXG5cdFx0XHQuc3Vic2NyaWJlKCk7XG5cdH1cbn1cbiJdfQ==","import { Directive, input } from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { isEqual } from 'lodash';\nimport { of, Subject } from 'rxjs';\nimport { switchMap, takeUntil, tap } from 'rxjs/operators';\nimport { NgxFormsControlValueAccessor } from '../custom-control-value-accessor';\nimport * as i0 from \"@angular/core\";\nexport class DataFormAccessor extends NgxFormsControlValueAccessor {\n    // Iben: Keep a reference to the current data so we don't make a new form if the data itself hasn't changed\n    currentData;\n    /**\n     * A subject that emits when the form has been destroyed in favor of a new one\n     */\n    destroyFormSubject$ = new Subject();\n    /**\n     * The data we wish to use to set up the form\n     */\n    data = input.required(...(ngDevMode ? [{ debugName: \"data\" }] : []));\n    data$ = toObservable(this.data);\n    ngOnInit() {\n        this.data$\n            .pipe(switchMap((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 of();\n            }\n            this.initializedSubject$.next(false);\n            this.currentData = data;\n            // Iben: Emit to the destroy so the previous subscription is cancelled\n            this.destroyFormSubject$.next();\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 of();\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            return this.form.valueChanges.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.destroyFormSubject$));\n        }), takeUntilDestroyed(this.destroyRef))\n            .subscribe();\n    }\n    ngOnDestroy() {\n        // Iben: Destroy the currently open form\n        this.destroyFormSubject$.next();\n        this.destroyFormSubject$.complete();\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 ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: DataFormAccessor, deps: null, target: i0.ɵɵFactoryTarget.Directive });\n    static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.2.1\", type: DataFormAccessor, isStandalone: true, inputs: { data: { classPropertyName: \"data\", publicName: \"data\", isSignal: true, isRequired: true, transformFunction: null } }, usesInheritance: true, ngImport: i0 });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: DataFormAccessor, decorators: [{\n            type: Directive\n        }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1mb3JtLmFjY2Vzc29yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2Zvcm1zL3NyYy9saWIvYWJzdHJhY3RzL2RhdGEtZm9ybS9kYXRhLWZvcm0uYWNjZXNzb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQWtDLE1BQU0sZUFBZSxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUU5RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ2pDLE9BQU8sRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNELE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOztBQUdoRixNQUFNLE9BQWdCLGdCQU1yQixTQUFRLDRCQUEyRTtJQUduRiwyR0FBMkc7SUFDbkcsV0FBVyxDQUF1QjtJQUUxQzs7T0FFRztJQUNjLG1CQUFtQixHQUFrQixJQUFJLE9BQU8sRUFBRSxDQUFDO0lBT3BFOztPQUVHO0lBQ2EsSUFBSSxHQUFzQyxLQUFLLENBQUMsUUFBUSwrQ0FBRSxDQUFDO0lBRTFELEtBQUssR0FBcUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUU1RSxRQUFRO1FBQ2QsSUFBSSxDQUFDLEtBQUs7YUFDUixJQUFJLENBQ0osU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDbEIsNEdBQTRHO1lBQzVHLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUN6RCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztnQkFDeEIsT0FBTyxFQUFFLEVBQUUsQ0FBQztZQUNiLENBQUM7WUFFRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1lBRXhCLHNFQUFzRTtZQUN0RSxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLENBQUM7WUFFaEMscUJBQXFCO1lBQ3JCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUVoQyxrREFBa0Q7WUFDbEQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDaEIsT0FBTyxDQUFDLEtBQUssQ0FDWiw4RkFBOEYsQ0FDOUYsQ0FBQztnQkFFRixPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQ2IsQ0FBQztZQUVELHNDQUFzQztZQUN0QyxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFbEMsbUVBQW1FO1lBQ25FLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBRTNCLHVDQUF1QztZQUN2QyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FDakMsR0FBRyxDQUFnQixDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUM1Qix5RUFBeUU7Z0JBQ3pFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDekUsQ0FBQyxDQUFDLEVBQ0YsU0FBUyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUNuQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLEVBQ0Ysa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUNuQzthQUNBLFNBQVMsRUFBRSxDQUFDO0lBQ2YsQ0FBQztJQUVELFdBQVc7UUFDVix3Q0FBd0M7UUFDeEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNPLHNCQUFzQixDQUFDLElBQTBCO1FBQzFELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkYsQ0FBQzt1R0FqR29CLGdCQUFnQjsyRkFBaEIsZ0JBQWdCOzsyRkFBaEIsZ0JBQWdCO2tCQURyQyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBpbnB1dCwgSW5wdXRTaWduYWwsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQsIHRvT2JzZXJ2YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBpc0VxdWFsIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBzd2l0Y2hNYXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBOZ3hGb3Jtc0NvbnRyb2xWYWx1ZUFjY2Vzc29yIH0gZnJvbSAnLi4vY3VzdG9tLWNvbnRyb2wtdmFsdWUtYWNjZXNzb3InO1xuXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBEYXRhRm9ybUFjY2Vzc29yPFxuXHRcdENvbnN0cnVjdGlvbkRhdGFUeXBlID0gdW5rbm93bixcblx0XHREYXRhVHlwZSA9IHVua25vd24sXG5cdFx0Rm9ybUFjY2Vzc29yRm9ybVR5cGUgZXh0ZW5kcyBBYnN0cmFjdENvbnRyb2wgPSBGb3JtQ29udHJvbCxcblx0XHRGb3JtVmFsdWVUeXBlID0gRGF0YVR5cGVcblx0PlxuXHRleHRlbmRzIE5neEZvcm1zQ29udHJvbFZhbHVlQWNjZXNzb3I8RGF0YVR5cGUsIEZvcm1BY2Nlc3NvckZvcm1UeXBlLCBGb3JtVmFsdWVUeXBlPlxuXHRpbXBsZW1lbnRzIE9uRGVzdHJveSwgT25Jbml0XG57XG5cdC8vIEliZW46IEtlZXAgYSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZGF0YSBzbyB3ZSBkb24ndCBtYWtlIGEgbmV3IGZvcm0gaWYgdGhlIGRhdGEgaXRzZWxmIGhhc24ndCBjaGFuZ2VkXG5cdHByaXZhdGUgY3VycmVudERhdGE6IENvbnN0cnVjdGlvbkRhdGFUeXBlO1xuXG5cdC8qKlxuXHQgKiBBIHN1YmplY3QgdGhhdCBlbWl0cyB3aGVuIHRoZSBmb3JtIGhhcyBiZWVuIGRlc3Ryb3llZCBpbiBmYXZvciBvZiBhIG5ldyBvbmVcblx0ICovXG5cdHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveUZvcm1TdWJqZWN0JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBzZXQgdXAgdGhlIGlubmVyIGZvcm1cblx0ICovXG5cdGFic3RyYWN0IGluaXRGb3JtKGRhdGE6IENvbnN0cnVjdGlvbkRhdGFUeXBlKTogRm9ybUFjY2Vzc29yRm9ybVR5cGU7XG5cblx0LyoqXG5cdCAqIFRoZSBkYXRhIHdlIHdpc2ggdG8gdXNlIHRvIHNldCB1cCB0aGUgZm9ybVxuXHQgKi9cblx0cHVibGljIHJlYWRvbmx5IGRhdGE6IElucHV0U2lnbmFsPENvbnN0cnVjdGlvbkRhdGFUeXBlPiA9IGlucHV0LnJlcXVpcmVkKCk7XG5cblx0cHJpdmF0ZSByZWFkb25seSBkYXRhJDogT2JzZXJ2YWJsZTxDb25zdHJ1Y3Rpb25EYXRhVHlwZT4gPSB0b09ic2VydmFibGUodGhpcy5kYXRhKTtcblxuXHRwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG5cdFx0dGhpcy5kYXRhJFxuXHRcdFx0LnBpcGUoXG5cdFx0XHRcdHN3aXRjaE1hcCgoZGF0YSkgPT4ge1xuXHRcdFx0XHRcdC8vIEliZW46IElmIHdlIGFscmVhZHkgaGF2ZSBjdXJyZW50IGRhdGEgYW5kIHRoZSBjdXJyZW50IGRhdGEgbWF0Y2hlcyB0aGUgbmV3IGRhdGEsIHdlIGRvbid0IG1ha2UgYSBuZXcgZm9ybVxuXHRcdFx0XHRcdGlmICh0aGlzLmN1cnJlbnREYXRhICYmIGlzRXF1YWwodGhpcy5jdXJyZW50RGF0YSwgZGF0YSkpIHtcblx0XHRcdFx0XHRcdHRoaXMuY3VycmVudERhdGEgPSBkYXRhO1xuXHRcdFx0XHRcdFx0cmV0dXJuIG9mKCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dGhpcy5pbml0aWFsaXplZFN1YmplY3QkLm5leHQoZmFsc2UpO1xuXHRcdFx0XHRcdHRoaXMuY3VycmVudERhdGEgPSBkYXRhO1xuXG5cdFx0XHRcdFx0Ly8gSWJlbjogRW1pdCB0byB0aGUgZGVzdHJveSBzbyB0aGUgcHJldmlvdXMgc3Vic2NyaXB0aW9uIGlzIGNhbmNlbGxlZFxuXHRcdFx0XHRcdHRoaXMuZGVzdHJveUZvcm1TdWJqZWN0JC5uZXh0KCk7XG5cblx0XHRcdFx0XHQvLyBTZXQgdGhlIGlubmVyIGZvcm1cblx0XHRcdFx0XHR0aGlzLmZvcm0gPSB0aGlzLmluaXRGb3JtKGRhdGEpO1xuXG5cdFx0XHRcdFx0Ly8gSWJlbjogRWFybHkgZXhpdCBpbiBjYXNlIHRoZSBmb3JtIHdhcyBub3QgZm91bmRcblx0XHRcdFx0XHRpZiAoIXRoaXMuZm9ybSkge1xuXHRcdFx0XHRcdFx0Y29uc29sZS5lcnJvcihcblx0XHRcdFx0XHRcdFx0J05neEZvcm1zOiBObyBmb3JtIHdhcyBmb3VuZCBhZnRlciBpbml0aWFsaXppbmcuIENoZWNrIGlmIHRoZSBpbml0Rm9ybSBtZXRob2QgcmV0dXJucyBhIGZvcm0uJ1xuXHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0cmV0dXJuIG9mKCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gRGVuaXM6IHNldCB0aGUgaW5pdGlhbGl6ZWQgcHJvcGVydHlcblx0XHRcdFx0XHR0aGlzLnNldEluaXRpYWxpemVkV2l0aERhdGEoZGF0YSk7XG5cblx0XHRcdFx0XHQvLyBJYmVuOiBDaGVjayBpZiB0aGUgZm9ybSBpcyB2YWxpZCBkZXBlbmRpbmcgb24gdGhlIHByb3ZpZGVkIHZhbHVlXG5cdFx0XHRcdFx0dGhpcy52YWxpZGF0ZSgpO1xuXHRcdFx0XHRcdHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuXG5cdFx0XHRcdFx0Ly8gSWJlbjogU3Vic2NyaWJlIHRvIHRoZSB2YWx1ZSBjaGFuZ2VzXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuZm9ybS52YWx1ZUNoYW5nZXMucGlwZShcblx0XHRcdFx0XHRcdHRhcDxGb3JtVmFsdWVUeXBlPigodmFsdWUpID0+IHtcblx0XHRcdFx0XHRcdFx0Ly8gSW4gY2FzZSB0aGVyZSdzIGEgbWFwcGVyIHdlIG1hcCB0aGUgdmFsdWUsIGVsc2Ugd2Ugc2VuZCB0aGUgZm9ybSB2YWx1ZVxuXHRcdFx0XHRcdFx0XHR0aGlzLm9uQ2hhbmdlKHRoaXMub25DaGFuZ2VNYXBwZXIgPyB0aGlzLm9uQ2hhbmdlTWFwcGVyKHZhbHVlKSA6IHZhbHVlKTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0dGFrZVVudGlsKHRoaXMuZGVzdHJveUZvcm1TdWJqZWN0JClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9KSxcblx0XHRcdFx0dGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcblx0XHRcdClcblx0XHRcdC5zdWJzY3JpYmUoKTtcblx0fVxuXG5cdG5nT25EZXN0cm95KCk6IHZvaWQge1xuXHRcdC8vIEliZW46IERlc3Ryb3kgdGhlIGN1cnJlbnRseSBvcGVuIGZvcm1cblx0XHR0aGlzLmRlc3Ryb3lGb3JtU3ViamVjdCQubmV4dCgpO1xuXHRcdHRoaXMuZGVzdHJveUZvcm1TdWJqZWN0JC5jb21wbGV0ZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIHNldEluaXRpYWxpemVkXG5cdCAqXG5cdCAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIGluaXRpYWxpemVkIHByb3BlcnR5IHRvIHRydWUgd2hlbiB0aGUgZm9ybSBpcyBpbml0aWFsaXplZC5cblx0ICogVGhpcyBmdW5jdGlvbmFsaXR5IGhhcyBiZWVuIG1vdmVkIHRvIGEgc2VwYXJhdGUgbWV0aG9kIHRvIGVuYWJsZVxuXHQgKiBvdmVyd3JpdGluZyB0aGlzIG1ldGhvZCB0byBmaXQgY2VydGFpbiB1c2UtY2FzZXMuXG5cdCAqXG5cdCAqIEBwYXJhbSB7Q29uc3RydWN0aW9uRGF0ZVR5cGV9IGRhdGFcblx0ICogQHJldHVybnMgdm9pZFxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0cHJvdGVjdGVkIHNldEluaXRpYWxpemVkV2l0aERhdGEoZGF0YTogQ29uc3RydWN0aW9uRGF0YVR5cGUpOiB2b2lkIHtcblx0XHR0aGlzLmluaXRpYWxpemVkU3ViamVjdCQubmV4dChBcnJheS5pc0FycmF5KGRhdGEpID8gZGF0YSAmJiBkYXRhLmxlbmd0aCA+IDAgOiAhIWRhdGEpO1xuXHR9XG59XG4iXX0=","import { Directive, viewChildren } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { handleFormAccessorMarkAsDirty, handleFormAccessorMarkAsTouched, handleFormAccessorUpdateValueAndValidity, } from '../../utils';\nimport { BaseFormAccessor } from '../base-form/base-form.accessor';\nimport * as i0 from \"@angular/core\";\nexport class FormAccessorContainer {\n    /**\n     * A list of all DataFormAccessors en FormAccessors of this component\n     */\n    accessors = viewChildren(BaseFormAccessor, ...(ngDevMode ? [{ debugName: \"accessors\" }] : []));\n    /**\n     * Destroyed state of the component\n     */\n    destroyed$ = new Subject();\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() || [], 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() || [], 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() || [], 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        const accessors = this.accessors();\n        if (!accessors || accessors.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 ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: FormAccessorContainer, deps: [], target: i0.ɵɵFactoryTarget.Directive });\n    static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.2.0\", version: \"20.2.1\", type: FormAccessorContainer, isStandalone: true, viewQueries: [{ propertyName: \"accessors\", predicate: BaseFormAccessor, descendants: true, isSignal: true }], ngImport: i0 });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: FormAccessorContainer, decorators: [{\n            type: Directive\n        }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1hY2Nlc3Nvci1jb250YWluZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvZm9ybXMvc3JjL2xpYi9hYnN0cmFjdHMvZm9ybS1hY2Nlc3Nvci1jb250YWluZXIvZm9ybS1hY2Nlc3Nvci1jb250YWluZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUcvQixPQUFPLEVBQ04sNkJBQTZCLEVBQzdCLCtCQUErQixFQUMvQix3Q0FBd0MsR0FDeEMsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7O0FBR25FLE1BQU0sT0FBTyxxQkFBcUI7SUFDakM7O09BRUc7SUFDTSxTQUFTLEdBQUcsWUFBWSxDQUFDLGdCQUFnQixxREFBQyxDQUFDO0lBRXBEOztPQUVHO0lBQ2dCLFVBQVUsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0lBRTlDOzs7Ozs7O09BT0c7SUFDSSxjQUFjLENBQUMsSUFBcUIsRUFBRSxVQUFrQyxFQUFFO1FBQ2hGLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLEVBQUU7WUFDL0IsNkJBQTZCLENBQUMsSUFBSSxFQUFHLElBQUksQ0FBQyxTQUFTLEVBQVUsSUFBSSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDL0UsQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNJLGdCQUFnQixDQUFDLElBQXFCLEVBQUUsVUFBa0MsRUFBRTtRQUNsRixJQUFJLENBQUMscUJBQXFCLENBQUMsR0FBRyxFQUFFO1lBQy9CLCtCQUErQixDQUFDLElBQUksRUFBRyxJQUFJLENBQUMsU0FBUyxFQUFVLElBQUksRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ2pGLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0kseUJBQXlCLENBQy9CLElBQXFCLEVBQ3JCLFVBQWtDLEVBQUU7UUFFcEMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsRUFBRTtZQUMvQix3Q0FBd0MsQ0FDdkMsSUFBSSxFQUNILElBQUksQ0FBQyxTQUFTLEVBQVUsSUFBSSxFQUFFLEVBQy9CLE9BQU8sQ0FDUCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSSxXQUFXO1FBQ2pCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxxQkFBcUIsQ0FBQyxNQUFrQjtRQUMvQywwREFBMEQ7UUFDMUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ25DLElBQUksQ0FBQyxTQUFTLElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMxQyxPQUFPLENBQUMsSUFBSSxDQUNYLGlOQUFpTixDQUNqTixDQUFDO1FBQ0gsQ0FBQztRQUVELG1DQUFtQztRQUNuQyxNQUFNLEVBQUUsQ0FBQztJQUNWLENBQUM7dUdBbEZXLHFCQUFxQjsyRkFBckIscUJBQXFCLDRFQUlDLGdCQUFnQjs7MkZBSnRDLHFCQUFxQjtrQkFEakMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgT25EZXN0cm95LCB2aWV3Q2hpbGRyZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgRm9ybVN0YXRlT3B0aW9uc0VudGl0eSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7XG5cdGhhbmRsZUZvcm1BY2Nlc3Nvck1hcmtBc0RpcnR5LFxuXHRoYW5kbGVGb3JtQWNjZXNzb3JNYXJrQXNUb3VjaGVkLFxuXHRoYW5kbGVGb3JtQWNjZXNzb3JVcGRhdGVWYWx1ZUFuZFZhbGlkaXR5LFxufSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBCYXNlRm9ybUFjY2Vzc29yIH0gZnJvbSAnLi4vYmFzZS1mb3JtL2Jhc2UtZm9ybS5hY2Nlc3Nvcic7XG5cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGNsYXNzIEZvcm1BY2Nlc3NvckNvbnRhaW5lciBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG5cdC8qKlxuXHQgKiBBIGxpc3Qgb2YgYWxsIERhdGFGb3JtQWNjZXNzb3JzIGVuIEZvcm1BY2Nlc3NvcnMgb2YgdGhpcyBjb21wb25lbnRcblx0ICovXG5cdHJlYWRvbmx5IGFjY2Vzc29ycyA9IHZpZXdDaGlsZHJlbihCYXNlRm9ybUFjY2Vzc29yKTtcblxuXHQvKipcblx0ICogRGVzdHJveWVkIHN0YXRlIG9mIHRoZSBjb21wb25lbnRcblx0ICovXG5cdHByb3RlY3RlZCByZWFkb25seSBkZXN0cm95ZWQkID0gbmV3IFN1YmplY3QoKTtcblxuXHQvKipcblx0ICogQGRlcHJlY2F0ZWQgVGhpcyBtZXRob2Qgc2hvdWxkIG5vIGxvbmdlciBiZSB1c2VkLCB1c2UgdGhlIG1hcmtBc0RpcnR5IG9uIHRoZSBmb3JtIGl0c2VsZiBpbnN0ZWFkXG5cdCAqXG5cdCAqIE1hcmtzIHRoZSBmb3JtIGFuZCBhbGwgdGhlIGlucHV0cyBvZiBldmVyeSBzdWJzZXF1ZW50IGZvcm0tYWNjZXNzb3JzIGFzIGRpcnR5XG5cdCAqXG5cdCAqIEBwYXJhbSAgZm9ybSAtIFRoZSBmb3JtIHVzZWQgaW4gdGhlIGNvbXBvbmVudFxuXHQgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgcGFzc2VkIHRvIHRoZSBmb3JtIHN0YXRlIGNoYW5nZXJcblx0ICovXG5cdHB1YmxpYyBtYXJrQWxsQXNEaXJ0eShmb3JtOiBBYnN0cmFjdENvbnRyb2wsIG9wdGlvbnM6IEZvcm1TdGF0ZU9wdGlvbnNFbnRpdHkgPSB7fSk6IHZvaWQge1xuXHRcdHRoaXMuaGFuZGxlQWNjZXNzb3JzQWN0aW9uKCgpID0+IHtcblx0XHRcdGhhbmRsZUZvcm1BY2Nlc3Nvck1hcmtBc0RpcnR5KGZvcm0sICh0aGlzLmFjY2Vzc29ycygpIGFzIGFueSkgfHwgW10sIG9wdGlvbnMpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBkZXByZWNhdGVkIFRoaXMgbWV0aG9kIHNob3VsZCBubyBsb25nZXIgYmUgdXNlZCwgdXNlIHRoZSBtYXJrQXNUb3VjaGVkIG9uIHRoZSBmb3JtIGl0c2VsZiBpbnN0ZWFkXG5cdCAqXG5cdCAqIE1hcmtzIHRoZSBmb3JtIGFuZCBhbGwgdGhlIGlucHV0cyBvZiBldmVyeSBzdWJzZXF1ZW50IGZvcm0tYWNjZXNzb3JzIGFzIHRvdWNoZWRcblx0ICpcblx0ICogQHBhcmFtICBmb3JtIC0gVGhlIGZvcm0gdXNlZCBpbiB0aGUgY29tcG9uZW50XG5cdCAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyBwYXNzZWQgdG8gdGhlIGZvcm0gc3RhdGUgY2hhbmdlclxuXHQgKi9cblx0cHVibGljIG1hcmtBbGxBc1RvdWNoZWQoZm9ybTogQWJzdHJhY3RDb250cm9sLCBvcHRpb25zOiBGb3JtU3RhdGVPcHRpb25zRW50aXR5ID0ge30pOiB2b2lkIHtcblx0XHR0aGlzLmhhbmRsZUFjY2Vzc29yc0FjdGlvbigoKSA9PiB7XG5cdFx0XHRoYW5kbGVGb3JtQWNjZXNzb3JNYXJrQXNUb3VjaGVkKGZvcm0sICh0aGlzLmFjY2Vzc29ycygpIGFzIGFueSkgfHwgW10sIG9wdGlvbnMpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFVwZGF0ZXMgdGhlIHZhbHVlIGFuZCB2YWxpZGl0eSBvZiB0aGUgZm9ybSBhbmQgYWxsIHRoZSBpbnB1dHMgb2YgZXZlcnkgc3Vic2VxdWVudCBmb3JtLWFjY2Vzc29yc1xuXHQgKlxuXHQgKiBAcGFyYW0gZm9ybSAtIFRoZSBwcm92aWRlZCBmb3Jtc1xuXHQgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgcGFzc2VkIHRvIHRoZSB1cGRhdGVWYWx1ZUFuZFZhbGlkaXR5XG5cdCAqL1xuXHRwdWJsaWMgdXBkYXRlQWxsVmFsdWVBbmRWYWxpZGl0eShcblx0XHRmb3JtOiBBYnN0cmFjdENvbnRyb2wsXG5cdFx0b3B0aW9uczogRm9ybVN0YXRlT3B0aW9uc0VudGl0eSA9IHt9XG5cdCk6IHZvaWQge1xuXHRcdHRoaXMuaGFuZGxlQWNjZXNzb3JzQWN0aW9uKCgpID0+IHtcblx0XHRcdGhhbmRsZUZvcm1BY2Nlc3NvclVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoXG5cdFx0XHRcdGZvcm0sXG5cdFx0XHRcdCh0aGlzLmFjY2Vzc29ycygpIGFzIGFueSkgfHwgW10sXG5cdFx0XHRcdG9wdGlvbnNcblx0XHRcdCk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlIHRoZSBkZXN0cm95IHN0YXRlIG9mIHRoZSBjb21wb25lbnRcblx0ICovXG5cdHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcblx0XHR0aGlzLmRlc3Ryb3llZCQubmV4dCh1bmRlZmluZWQpO1xuXHRcdHRoaXMuZGVzdHJveWVkJC5jb21wbGV0ZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZSB0aGUgYWNjZXNzb3JzIGFjdGlvbiBvZiB0aGUgRm9ybUNvbnRhaW5lciBhbmQgdGhyb3cgYSB3YXJuaW5nIGlmIG5vIGFjY2Vzc29ycyBhcmUgcHJvdmlkZWRcblx0ICpcblx0ICogQHBhcmFtICBhY3Rpb24gLSBUaGUgcHJvdmlkZWQgYWN0aW9uXG5cdCAqL1xuXHRwcml2YXRlIGhhbmRsZUFjY2Vzc29yc0FjdGlvbihhY3Rpb246ICgpID0+IHZvaWQpIHtcblx0XHQvLyBJYmVuOiBUaHJvdyBhIHdhcm4gaW4gY2FzZSB0aGVyZSBhcmUgbm8gYWNjZXNzb3JzIGZvdW5kXG5cdFx0Y29uc3QgYWNjZXNzb3JzID0gdGhpcy5hY2Nlc3NvcnMoKTtcblx0XHRpZiAoIWFjY2Vzc29ycyB8fCBhY2Nlc3NvcnMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oXG5cdFx0XHRcdCdOZ3hGb3JtczogTm8gKERhdGEpRm9ybUFjY2Vzc29ycyB3ZXJlIGZvdW5kIGluIHRoaXMgY29tcG9uZW50LiBDaGVjayBpZiBlYWNoIChEYXRhKUZvcm1BY2Nlc3NvciBhbHNvIHByb3ZpZGVzIHRoZSBCYXNlRm9ybUFjY2Vzc29yIGluIGl0cyBwcm92aWRlcnMgYXJyYXkuIElmIHRoaXMgaXMgaW50ZW50aW9uYWwsIHRoaXMgd2FybmluZyBjYW4gYmUgaWdub3JlZC4nXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdC8vIEliZW46IEhhbmRsZSB0aGUgcHJvdmlkZWQgYWN0aW9uXG5cdFx0YWN0aW9uKCk7XG5cdH1cbn1cbiJdfQ==","import { Directive, input } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class NgxFormsErrorAbstractComponent {\n    /**\n     * An array of error messages that can be rendered\n     */\n    errors = input.required(...(ngDevMode ? [{ debugName: \"errors\" }] : []));\n    /**\n     * An array of error keys that can be rendered\n     */\n    errorKeys = input.required(...(ngDevMode ? [{ debugName: \"errorKeys\" }] : []));\n    /**\n     * The error object provided by the control\n     */\n    data = input.required(...(ngDevMode ? [{ debugName: \"data\" }] : []));\n    static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: NgxFormsErrorAbstractComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive });\n    static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.2.1\", type: NgxFormsErrorAbstractComponent, isStandalone: true, inputs: { errors: { classPropertyName: \"errors\", publicName: \"errors\", isSignal: true, isRequired: true, transformFunction: null }, errorKeys: { classPropertyName: \"errorKeys\", publicName: \"errorKeys\", isSignal: true, isRequired: true, transformFunction: null }, data: { classPropertyName: \"data\", publicName: \"data\", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: NgxFormsErrorAbstractComponent, decorators: [{\n            type: Directive\n        }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3IuY29tcG9uZW50LmFic3RyYWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2Zvcm1zL3NyYy9saWIvYWJzdHJhY3RzL2Vycm9yL2Vycm9yLmNvbXBvbmVudC5hYnN0cmFjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFJakQsTUFBTSxPQUFPLDhCQUE4QjtJQUMxQzs7T0FFRztJQUNhLE1BQU0sR0FBRyxLQUFLLENBQUMsUUFBUSxpREFBWSxDQUFDO0lBQ3BEOztPQUVHO0lBQ2EsU0FBUyxHQUFHLEtBQUssQ0FBQyxRQUFRLG9EQUFZLENBQUM7SUFDdkQ7O09BRUc7SUFDYSxJQUFJLEdBQUcsS0FBSyxDQUFDLFFBQVEsK0NBQW9CLENBQUM7dUdBWjlDLDhCQUE4QjsyRkFBOUIsOEJBQThCOzsyRkFBOUIsOEJBQThCO2tCQUQxQyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBpbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVmFsaWRhdGlvbkVycm9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgY2xhc3MgTmd4Rm9ybXNFcnJvckFic3RyYWN0Q29tcG9uZW50IHtcblx0LyoqXG5cdCAqIEFuIGFycmF5IG9mIGVycm9yIG1lc3NhZ2VzIHRoYXQgY2FuIGJlIHJlbmRlcmVkXG5cdCAqL1xuXHRwdWJsaWMgcmVhZG9ubHkgZXJyb3JzID0gaW5wdXQucmVxdWlyZWQ8c3RyaW5nW10+KCk7XG5cdC8qKlxuXHQgKiBBbiBhcnJheSBvZiBlcnJvciBrZXlzIHRoYXQgY2FuIGJlIHJlbmRlcmVkXG5cdCAqL1xuXHRwdWJsaWMgcmVhZG9ubHkgZXJyb3JLZXlzID0gaW5wdXQucmVxdWlyZWQ8c3RyaW5nW10+KCk7XG5cdC8qKlxuXHQgKiBUaGUgZXJyb3Igb2JqZWN0IHByb3ZpZGVkIGJ5IHRoZSBjb250cm9sXG5cdCAqL1xuXHRwdWJsaWMgcmVhZG9ubHkgZGF0YSA9IGlucHV0LnJlcXVpcmVkPFZhbGlkYXRpb25FcnJvcnM+KCk7XG59XG4iXX0=","import { Directive, HostListener } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport * as i0 from \"@angular/core\";\nexport class NgxSaveOnExitComponent {\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    /**\n     * A subject to handle the onDestroy flow\n     */\n    destroyedSubject$ = new Subject();\n    /**\n     * An observable that emits the onDestroy event\n     */\n    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    allowBeforeUnloadHandler = false;\n    ngOnDestroy() {\n        // Iben: Emit if the component gets destroyed\n        this.destroyedSubject$.next(undefined);\n        this.destroyedSubject$.complete();\n    }\n    static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: NgxSaveOnExitComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive });\n    static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.2.1\", type: NgxSaveOnExitComponent, isStandalone: true, host: { listeners: { \"window:beforeunload\": \"handleUnloadEvent($event)\" } }, ngImport: i0 });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.2.1\", 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2F2ZS1vbi1leGl0LmNvbXBvbmVudC5hYnN0cmFjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9mb3Jtcy9zcmMvbGliL2Fic3RyYWN0cy9zYXZlLW9uLWV4aXQvc2F2ZS1vbi1leGl0LmNvbXBvbmVudC5hYnN0cmFjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUcvQixNQUFNLE9BQWdCLHNCQUFzQjtJQUMzQzs7OztPQUlHO0lBRUgsaUJBQWlCLENBQUMsS0FBd0I7UUFDekMseUZBQXlGO1FBQ3pGLElBQUksSUFBSSxDQUFDLHdCQUF3QixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQ3JELEtBQUssQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQzFCLENBQUM7SUFDRixDQUFDO0lBRUQ7O09BRUc7SUFDYyxpQkFBaUIsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0lBRW5EOztPQUVHO0lBQ2EsVUFBVSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUVuRTs7O09BR0c7SUFDYSx3QkFBd0IsR0FBWSxLQUFLLENBQUM7SUFZMUQsV0FBVztRQUNWLDZDQUE2QztRQUM3QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNuQyxDQUFDO3VHQTVDb0Isc0JBQXNCOzJGQUF0QixzQkFBc0I7OzJGQUF0QixzQkFBc0I7a0JBRDNDLFNBQVM7OEJBUVQsaUJBQWlCO3NCQURoQixZQUFZO3VCQUFDLHFCQUFxQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBIb3N0TGlzdGVuZXIsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBOZ3hTYXZlT25FeGl0Q29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcblx0LyoqXG5cdCAqIEhhbmRsZXMgdGhlIHVubG9hZCBldmVudCBvZiB0aGUgYnJvd3NlciBhbmQgd2lsbCB3YXJuIHRoZSB1c2VyIHRoYXQgdGhlIGFwcGxpY2F0aW9uIHByZXZlbnRlZCB0aGUgdXNlciBmcm9tIGNsb3NpbmcgdGhlIGJyb3dzZXJcblx0ICpcblx0ICogQHBhcmFtIGV2ZW50IC0gVGhlIHVubG9hZCBldmVudCBmcm9tIHRoZSBicm93c2VyXG5cdCAqL1xuXHRASG9zdExpc3RlbmVyKCd3aW5kb3c6YmVmb3JldW5sb2FkJywgWyckZXZlbnQnXSlcblx0aGFuZGxlVW5sb2FkRXZlbnQoZXZlbnQ6IEJlZm9yZVVubG9hZEV2ZW50KSB7XG5cdFx0Ly8gSWJlbjogSWYgdGhlIGNvbXBvbmVudCBpcyBkaXJ0eSwgd2UgcHJldmVudCB0aGUgYnJvd3NlciBmcm9tIGNsb3NpbmcgdGhlIHdpbmRvdyBvciB0YWJcblx0XHRpZiAodGhpcy5hbGxvd0JlZm9yZVVubG9hZEhhbmRsZXIgJiYgdGhpcy5pc0RpcnR5KCkpIHtcblx0XHRcdGV2ZW50LnJldHVyblZhbHVlID0gdHJ1ZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQSBzdWJqZWN0IHRvIGhhbmRsZSB0aGUgb25EZXN0cm95IGZsb3dcblx0ICovXG5cdHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveWVkU3ViamVjdCQgPSBuZXcgU3ViamVjdCgpO1xuXG5cdC8qKlxuXHQgKiBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIG9uRGVzdHJveSBldmVudFxuXHQgKi9cblx0cHVibGljIHJlYWRvbmx5IGRlc3Ryb3llZCQgPSB0aGlzLmRlc3Ryb3llZFN1YmplY3QkLmFzT2JzZXJ2YWJsZSgpO1xuXG5cdC8qKlxuXHQgKiBXaGV0aGVyIG9yIG5vdCB0aGUgYmVmb3JlVW5sb2FkIGV2ZW50IHNob3VsZCBiZSBpbnRlcmNlcHRlZCBvciBub3QuIEJ5IGRlZmF1bHQsIHRoaXMgYmVoYXZpb3IgaXMgc2V0IHRvIGZhbHNlXG5cdCAqIElmIHNldCB0byB0cnVlLCBjbG9zaW5nIGEgdGFiIG9yIHRoZSBicm93c2VyIHdpbGwgYmUgaW50ZXJydXB0ZWQgYW5kIGEgbWVzc2FnZSB3aWxsIGJlIGRpc3BsYXllZFxuXHQgKi9cblx0cHVibGljIHJlYWRvbmx5IGFsbG93QmVmb3JlVW5sb2FkSGFuZGxlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG5cdC8qKlxuXHQgKiBSZXR1cm4gd2hldGhlciBvciBub3QgdGhlIGNvbXBvbmVudCBpcyBkaXJ0eVxuXHQgKi9cblx0cHVibGljIGFic3RyYWN0IGlzRGlydHkoKTogYm9vbGVhbjtcblxuXHQvKipcblx0ICogUmV0dXJuIHdoZXRoZXIgb3Igbm90IHRoZSBjb21wb25lbnQgaXMgdmFsaWRcblx0ICovXG5cdHB1YmxpYyBhYnN0cmFjdCBpc1ZhbGlkKCk6IGJvb2xlYW47XG5cblx0bmdPbkRlc3Ryb3koKSB7XG5cdFx0Ly8gSWJlbjogRW1pdCBpZiB0aGUgY29tcG9uZW50IGdldHMgZGVzdHJveWVkXG5cdFx0dGhpcy5kZXN0cm95ZWRTdWJqZWN0JC5uZXh0KHVuZGVmaW5lZCk7XG5cdFx0dGhpcy5kZXN0cm95ZWRTdWJqZWN0JC5jb21wbGV0ZSgpO1xuXHR9XG59XG4iXX0=","export class NgxSaveOnExitAbstractService {\n    /**\n     * An optional method that, if implemented, provides the ability to bypass the guard\n     */\n    bypassSaveOnExit;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2F2ZS1vbi1leGl0LnNlcnZpY2UuYWJzdHJhY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvZm9ybXMvc3JjL2xpYi9hYnN0cmFjdHMvc2F2ZS1vbi1leGl0L3NhdmUtb24tZXhpdC5zZXJ2aWNlLmFic3RyYWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUtBLE1BQU0sT0FBZ0IsNEJBQTRCO0lBTWpEOztPQUVHO0lBQ0ksZ0JBQWdCLENBR1Y7Q0FDYiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIFJvdXRlclN0YXRlU25hcHNob3QgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBOZ3hTYXZlT25FeGl0Q29tcG9uZW50IH0gZnJvbSAnLi9zYXZlLW9uLWV4aXQuY29tcG9uZW50LmFic3RyYWN0JztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE5neFNhdmVPbkV4aXRBYnN0cmFjdFNlcnZpY2Uge1xuXHQvKipcblx0ICogVGFrZSBhY3Rpb24gd2hlbiB0aGUgY29tcG9uZW50IGlzIGRpcnR5XG5cdCAqL1xuXHRwdWJsaWMgYWJzdHJhY3QgaGFuZGxlRGlydHlTdGF0ZTogKGNvbXBvbmVudDogTmd4U2F2ZU9uRXhpdENvbXBvbmVudCkgPT4gT2JzZXJ2YWJsZTxib29sZWFuPjtcblxuXHQvKipcblx0ICogQW4gb3B0aW9uYWwgbWV0aG9kIHRoYXQsIGlmIGltcGxlbWVudGVkLCBwcm92aWRlcyB0aGUgYWJpbGl0eSB0byBieXBhc3MgdGhlIGd1YXJkXG5cdCAqL1xuXHRwdWJsaWMgYnlwYXNzU2F2ZU9uRXhpdD86IChcblx0XHRjdXJyZW50Um91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXG5cdFx0bmV4dFN0YXRlOiBSb3V0ZXJTdGF0ZVNuYXBzaG90XG5cdCkgPT4gYm9vbGVhbjtcbn1cbiJdfQ==","import { InjectionToken } from '@angular/core';\nexport const NgxFormsErrorsConfigurationToken = new InjectionToken('NgxFormsErrorsConfiguration');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLWNvbmZpZy50b2tlbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9mb3Jtcy9zcmMvbGliL3Rva2Vucy9lcnJvcnMtY29uZmlnLnRva2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJL0MsTUFBTSxDQUFDLE1BQU0sZ0NBQWdDLEdBQzVDLElBQUksY0FBYyxDQUFvQyw2QkFBNkIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgTmd4Rm9ybXNFcnJvckNvbmZpZ3VyYXRpb25PcHRpb25zIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY29uc3QgTmd4Rm9ybXNFcnJvcnNDb25maWd1cmF0aW9uVG9rZW4gPVxuXHRuZXcgSW5qZWN0aW9uVG9rZW48Tmd4Rm9ybXNFcnJvckNvbmZpZ3VyYXRpb25PcHRpb25zPignTmd4Rm9ybXNFcnJvcnNDb25maWd1cmF0aW9uJyk7XG4iXX0=","import { ChangeDetectorRef, Directive, ElementRef, inject, Renderer2, TemplateRef, ViewContainerRef, input, DestroyRef, signal, } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormGroupDirective, FormGroupName, } from '@angular/forms';\nimport { combineLatest, startWith, tap } from 'rxjs';\nimport { NgxFormsErrorsConfigurationToken } from '../../tokens';\nimport { touchedEventListener } from '../../utils';\nimport * as i0 from \"@angular/core\";\nexport class NgxFormsErrorsDirective {\n    /**\n     *  An optional instance of the FormGroup directive\n     */\n    formGroupDirective = inject(FormGroupDirective, {\n        optional: true,\n    });\n    /**\n     *  An optional instance of the FormGroupName directive\n     */\n    formNameDirective = inject(FormGroupName, { optional: true });\n    /**\n     *  The optional global configuration used form the NgxFormsError\n     */\n    config = inject(NgxFormsErrorsConfigurationToken, { optional: true });\n    /**\n     *  An instance of the ViewContainerRef\n     */\n    viewContainer = inject(ViewContainerRef);\n    /**\n     *  An instance of the ElementRef\n     */\n    elementRef = inject(ElementRef);\n    /**\n     *  An instance of Renderer2\n     */\n    renderer = inject(Renderer2);\n    /**\n     *  An instance of the TemplateRef\n     */\n    templateRef = inject(TemplateRef);\n    /**\n     *  An instance of the ChangeDetectorRef\n     */\n    cdRef = inject(ChangeDetectorRef);\n    /**\n     *  An instance of the DestroyRef\n     */\n    destroyRef = inject(DestroyRef);\n    /**\n     *  Whether the control has errors\n     */\n    hasErrors = signal(false, ...(ngDevMode ? [{ debugName: \"hasErrors\" }] : []));\n    /**\n     *  The actual template of the input element\n     */\n    template;\n    /**\n     * The AbstractControl we wish to listen to when using the directive\n     */\n    abstractControl;\n    /**\n     * The p element we add to the dom when no component is provided\n     */\n    errorsElement;\n    /**\n     * The component to which the error data is added\n     */\n    errorComponent;\n    /**\n     * The ref of the component we wish to add error data to\n     */\n    componentRef;\n    /**\n     * A reference to a control or a string reference to the control\n     */\n    control = input(undefined, ...(ngDevMode ? [{ debugName: \"control\", alias: 'ngxFormsErrors' }] : [{\n            alias: 'ngxFormsErrors',\n        }]));\n    constructor() {\n        // Iben: Set the current template ref at constructor time so we actually have the provided template (as done in the *ngIf directive)\n        this.template = this.templateRef;\n    }\n    ngAfterViewInit() {\n        // Iben: Render the actual input so that it is always visible\n        this.viewContainer.clear();\n        this.viewContainer.createEmbeddedView(this.template);\n        //Iben: Set a base class to the element\n        const element = this.templateRef.elementRef.nativeElement.previousElementSibling;\n        if (element) {\n            this.renderer.addClass(element, 'ngx-forms-errors-input');\n        }\n        // Iben: If no control was provided, we early exit and log an error\n        const control = this.control();\n        if (!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 control === 'string') {\n            this.abstractControl = this.formGroupDirective\n                ? this.formGroupDirective.form.get(control)\n                : this.formNameDirective?.control.get(control);\n        }\n        else {\n            this.abstractControl = 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            this.hasErrors.set(this.abstractControl.invalid &&\n                (this.config.showWhen === 'touched'\n                    ? touched\n                    : this.abstractControl.dirty));\n            // Iben: Set the errors class if needed\n            if (element) {\n                this.hasErrors()\n                    ? this.renderer.addClass(element, 'ngx-forms-errors-invalid')\n                    : this.renderer.removeClass(element, 'ngx-forms-errors-invalid');\n            }\n            // Iben: Show the error based on whether or not a component was provided\n            if (!this.config.component) {\n                this.handleNoComponentFlow(this.hasErrors());\n            }\n            else {\n                this.handleComponentRender(this.hasErrors());\n            }\n            // Iben: Detect the changes so this works with (nested) OnPush components\n            this.cdRef.detectChanges();\n        }), takeUntilDestroyed(this.destroyRef))\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 { errors, errorKeys, data } = this.getErrors(this.abstractControl.errors);\n        this.componentRef.setInput('errors', errors);\n        this.componentRef.setInput('errorKeys', errorKeys);\n        this.componentRef.setInput('data', data);\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        this.renderer.setProperty(this.errorsElement, 'innerHTML', this.getErrors(this.abstractControl.errors).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 ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: NgxFormsErrorsDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\n    static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.2.1\", type: NgxFormsErrorsDirective, isStandalone: true, selector: \"[ngxFormsErrors]\", inputs: { control: { classPropertyName: \"control\", publicName: \"ngxFormsErrors\", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.2.1\", ngImport: i0, type: NgxFormsErrorsDirective, decorators: [{\n            type: Directive,\n            args: [{\n                    selector: '[ngxFormsErrors]',\n                    standalone: true,\n                }]\n        }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9mb3Jtcy9zcmMvbGliL2RpcmVjdGl2ZXMvZXJyb3JzL2Vycm9ycy5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVOLGlCQUFpQixFQUVqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLE1BQU0sRUFDTixTQUFTLEVBQ1QsV0FBVyxFQUNYLGdCQUFnQixFQUNoQixLQUFLLEVBQ0wsVUFBVSxFQUVWLE1BQU0sR0FDTixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBRU4sa0JBQWtCLEVBQ2xCLGFBQWEsR0FFYixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUdyRCxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFaEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sYUFBYSxDQUFDOztBQU1uRCxNQUFNLE9BQU8sdUJBQXVCO0lBQ25DOztPQUVHO0lBQ2dCLGtCQUFrQixHQUF1QixNQUFNLENBQUMsa0JBQWtCLEVBQUU7UUFDdEYsUUFBUSxFQUFFLElBQUk7S0FDZCxDQUFDLENBQUM7SUFFSDs7T0FFRztJQUNnQixpQkFBaUIsR0FBa0IsTUFBTSxDQUFDLGFBQWEsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBRWhHOztPQUVHO0lBQ2MsTUFBTSxHQUFzQyxNQUFNLENBQ2xFLGdDQUFnQyxFQUNoQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FDbEIsQ0FBQztJQUVGOztPQUVHO0lBQ2dCLGFBQWEsR0FBcUIsTUFBTSxDQUFDLGdCQUFnQixD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Vmlld0luaXQsXG5cdENoYW5nZURldGVjdG9yUmVmLFxuXHRDb21wb25lbnRSZWYsXG5cdERpcmVjdGl2ZSxcblx0RWxlbWVudFJlZixcblx0aW5qZWN0LFxuXHRSZW5kZXJlcjIsXG5cdFRlbXBsYXRlUmVmLFxuXHRWaWV3Q29udGFpbmVyUmVmLFxuXHRpbnB1dCxcblx0RGVzdHJveVJlZixcblx0V3JpdGFibGVTaWduYWwsXG5cdHNpZ25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQge1xuXHRBYnN0cmFjdENvbnRyb2wsXG5cdEZvcm1Hcm91cERpcmVjdGl2ZSxcblx0Rm9ybUdyb3VwTmFtZSxcblx0VmFsaWRhdGlvbkVycm9ycyxcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgc3RhcnRXaXRoLCB0YXAgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgTmd4Rm9ybXNFcnJvckFic3RyYWN0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYWJzdHJhY3RzJztcbmltcG9ydCB7IE5neEZvcm1zRXJyb3JzQ29uZmlndXJhdGlvblRva2VuIH0gZnJvbSAnLi4vLi4vdG9rZW5zJztcbmltcG9ydCB7IE5neEZvcm1zRXJyb3JDb25maWd1cmF0aW9uT3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IHRvdWNoZWRFdmVudExpc3RlbmVyIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuXG5ARGlyZWN0aXZlKHtcblx0c2VsZWN0b3I6ICdbbmd4Rm9ybXNFcnJvcnNdJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgTmd4Rm9ybXNFcnJvcnNEaXJlY3RpdmUgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcblx0LyoqXG5cdCAqICBBbiBvcHRpb25hbCBpbnN0YW5jZSBvZiB0aGUgRm9ybUdyb3VwIGRpcmVjdGl2ZVxuXHQgKi9cblx0cHJvdGVjdGVkIHJlYWRvbmx5IGZvcm1Hcm91cERpcmVjdGl2ZTogRm9ybUdyb3VwRGlyZWN0aXZlID0gaW5qZWN0KEZvcm1Hcm91cERpcmVjdGl2ZSwge1xuXHRcdG9wdGlvbmFsOiB0cnVlLFxuXHR9KTtcblxuXHQvKipcblx0ICogIEFuIG9wdGlvbmFsIGluc3RhbmNlIG9mIHRoZSBGb3JtR3JvdXBOYW1lIGRpcmVjdGl2ZVxuXHQgKi9cblx0cHJvdGVjdGVkIHJlYWRvbmx5IGZvcm1OYW1lRGlyZWN0aXZlOiBGb3JtR3JvdXBOYW1lID0gaW5qZWN0KEZvcm1Hcm91cE5hbWUsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cblx0LyoqXG5cdCAqICBUaGUgb3B0aW9uYWwgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gdXNlZCBmb3JtIHRoZSBOZ3hGb3Jtc0Vycm9yXG5cdCAqL1xuXHRwcml2YXRlIHJlYWRvbmx5IGNvbmZpZzogTmd4Rm9ybXNFcnJvckNvbmZpZ3VyYXRpb25PcHRpb25zID0gaW5qZWN0KFxuXHRcdE5neEZvcm1zRXJyb3JzQ29uZmlndXJhdGlvblRva2VuLFxuXHRcdHsgb3B0aW9uYWw6IHRydWUgfVxuXHQpO1xuXG5cdC8qKlxuXHQgKiAgQW4gaW5zdGFuY2Ugb2YgdGhlIFZpZXdDb250YWluZXJSZWZcblx0ICovXG5cdHByb3RlY3RlZCByZWFkb25seSB2aWV3Q29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmID0gaW5qZWN0KFZpZXdDb250YWluZXJSZWYpO1xuXG5cdC8qKlxuXHQgKiAgQW4gaW5zdGFuY2Ugb2YgdGhlIEVsZW1lbnRSZWZcblx0ICovXG5cdHByb3RlY3RlZCByZWFkb25seSBlbGVtZW50UmVmOiBFbGVtZW50UmVmID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuXG5cdC8qKlxuXHQgKiAgQW4gaW5zdGFuY2Ugb2YgUmVuZGVyZXIyXG5cdCAqL1xuXHRwcm90ZWN0ZWQgcmVhZG9ubHkgcmVuZGVyZXI6IFJlbmRlcmVyMiA9IGluamVjdChSZW5kZXJlcjIpO1xuXG5cdC8qKlxuXHQgKiAgQW4gaW5zdGFuY2Ugb2YgdGhlIFRlbXBsYXRlUmVmXG5cdCAqL1xuXHRwcm90ZWN0ZWQgcmVhZG9ubHkgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT4gPSBpbmplY3QoVGVtcGxhdGVSZWYpO1xuXG5cdC8qKlxuXHQgKiAgQW4gaW5zdGFuY2Ugb2YgdGhlIENoYW5nZURldGVjdG9yUmVmXG5cdCAqL1xuXHRwcm90ZWN0ZWQgcmVhZG9ubHkgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcblxuXHQvKipcblx0ICogIEFuIGluc3RhbmNlIG9mIHRoZSBEZXN0cm95UmVmXG5cdCAqL1xuXHRwcm90ZWN0ZWQgcmVhZG9ubHkgZGVzdHJveVJlZjogRGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuXHQvKipcblx0ICogIFdoZXRoZXIgdGhlIGNvbnRyb2wgaGFzIGVycm9yc1xuXHQgKi9cblx0cHJvdGVjdGVkIGhhc0Vycm9yczogV3JpdGFibGVTaWduYWw8Ym9vbGVhbj4gPSBzaWduYWwoZmFsc2UpO1xuXG5cdC8qKlxuXHQgKiAgVGhlIGFjdHVhbCB0ZW1wbGF0ZSBvZiB0aGUgaW5wdXQgZWxlbWVudFxuXHQgKi9cblx0cHJpdmF0ZSB0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuXHQvKipcblx0ICogVGhlIEFic3RyYWN0Q29udHJvbCB3ZSB3aXNoIHRvIGxpc3RlbiB0byB3aGVuIHVzaW5nIHRoZSBkaXJlY3RpdmVcblx0ICovXG5cdHByaXZhdGUgYWJzdHJhY3RDb250cm9sOiBBYnN0cmFjdENvbnRyb2w7XG5cblx0LyoqXG5cdCAqIFRoZSBwIGVsZW1lbnQgd2UgYWRkIHRvIHRoZSBkb20gd2hlbiBubyBjb21wb25lbnQgaXMgcHJvdmlkZWRcblx0ICovXG5cdHByaXZhdGUgZXJyb3JzRWxlbWVudDogYW55O1xuXG5cdC8qKlxuXHQgKiBUaGUgY29tcG9uZW50IHRvIHdoaWNoIHRoZSBlcnJvciBkYXRhIGlzIGFkZGVkXG5cdCAqL1xuXHRwcml2YXRlIGVycm9yQ29tcG9uZW50OiBOZ3hGb3Jtc0Vycm9yQWJzdHJhY3RDb21wb25lbnQ7XG5cblx0LyoqXG5cdCAqIFRoZSByZWYgb2YgdGhlIGNvbXBvbmVudCB3ZSB3aXNoIHRvIGFkZCBlcnJvciBkYXRhIHRvXG5cdCAqL1xuXHRwcml2YXRlIGNvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPE5neEZvcm1zRXJyb3JBYnN0cmFjdENvbXBvbmVudD47XG5cblx0LyoqXG5cdCAqIEEgcmVmZXJlbmNlIHRvIGEgY29udHJvbCBvciBhIHN0cmluZyByZWZlcmVuY2UgdG8gdGhlIGNvbnRyb2xcblx0ICovXG5cdHB1YmxpYyByZWFkb25seSBjb250cm9sID0gaW5wdXQ8QWJzdHJhY3RDb250cm9sIHwgc3RyaW5nPih1bmRlZmluZWQsIHtcblx0XHRhbGlhczogJ25neEZvcm1zRXJyb3JzJyxcblx0fSk7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0Ly8gSWJlbjogU2V0IHRoZSBjdXJyZW50IHRlbXBsYXRlIHJlZiBhdCBjb25zdHJ1Y3RvciB0aW1lIHNvIHdlIGFjdHVhbGx5IGhhdmUgdGhlIHByb3ZpZGVkIHRlbXBsYXRlIChhcyBkb25lIGluIHRoZSAqbmdJZiBkaXJlY3RpdmUpXG5cdFx0dGhpcy50ZW1wbGF0ZSA9IHRoaXMudGVtcGxhdGVSZWY7XG5cdH1cblxuXHRwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuXHRcdC8vIEliZW46IFJlbmRlciB0aGUgYWN0dWFsIGlucHV0IHNvIHRoYXQgaXQgaXMgYWx3YXlzIHZpc2libGVcblx0XHR0aGlzLnZpZXdDb250YWluZXIuY2xlYXIoKTtcblx0XHR0aGlzLnZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGUpO1xuXG5cdFx0Ly9JYmVuOiBTZXQgYSBiYXNlIGNsYXNzIHRvIHRoZSBlbGVtZW50XG5cdFx0Y29uc3QgZWxlbWVudDogSFRNTEVsZW1lbnQgPVxuXHRcdFx0dGhpcy50ZW1wbGF0ZVJlZi5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucHJldmlvdXNFbGVtZW50U2libGluZztcblxuXHRcdGlmIChlbGVtZW50KSB7XG5cdFx0XHR0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGVsZW1lbnQsICduZ3gtZm9ybXMtZXJyb3JzLWlucHV0Jyk7XG5cdFx0fVxuXG5cdFx0Ly8gSWJlbjogSWYgbm8gY29udHJvbCB3YXMgcHJvdmlkZWQsIHdlIGVhcmx5IGV4aXQgYW5kIGxvZyBhbiBlcnJvclxuXHRcdGNvbnN0IGNvbnRyb2wgPSB0aGlzLmNvbnRyb2woKTtcblx0XHRpZiAoIWNvbnRyb2wpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ05neEZvcm1zOiBObyBjb250cm9sIHdhcyBwcm92aWRlZCB0byB0aGUgTmd4Rm9ybXNFcnJvckRpcmVjdGl2ZScpO1xuXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gSWJlbjogSWYgdGhlIGNvbnRyb2wgaXMgYSBzdHJpbmcsIHdlIGNoZWNrIHRoZSBwYXJlbnQgdG8gZmluZCB0aGUgYWN0dWFsIGNvbnRyb2wuXG5cdFx0Ly8gSWYgbm90LCB3ZSB1c2UgdGhlIHByb3ZpZGVkIGNvbnRyb2xcblx0XHRpZiAodHlwZW9mIGNvbnRyb2wgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aGlzLmFic3RyYWN0Q29udHJvbCA9IHRoaXMuZm9ybUdyb3VwRGlyZWN0aXZlXG5cdFx0XHRcdD8gdGhpcy5mb3JtR3JvdXBEaXJlY3RpdmUuZm9ybS5nZXQoY29udHJvbClcblx0XHRcdFx0OiB0aGlzLmZvcm1OYW1lRGlyZWN0aXZlPy5jb250cm9sLmdldChjb250cm9sKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5hYnN0cmFjdENvbnRyb2wgPSBjb250cm9sO1xuXHRcdH1cblxuXHRcdC8vIEliZW46IElmIG5vIGNvbnRyb2wgd2FzIGZvdW5kLCB3ZSBlYXJseSBleGl0IGFuZCBsb2cgYW4gZXJyb3Jcblx0XHRpZiAoIXRoaXMuYWJzdHJhY3RDb250cm9sKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKCdOZ3hGb3JtczogTm8gY29udHJvbCB3YXMgcHJvdmlkZWQgdG8gdGhlIE5neEZvcm1zRXJyb3JEaXJlY3RpdmUnKTtcblxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIEliZW46IExpc3RlbiB0byB0aGUgdmFsdWUgY2hhbmdlcywgc3RhdHVzIGNoYW5nZXMgYW5kIHRoZSB0b3VjaGVkIGNoYW5nZXMgb2YgdGhlIGNvbnRyb2xcblx0XHRjb21iaW5lTGF0ZXN0KFtcblx0XHRcdHRoaXMuYWJzdHJhY3RDb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKHN0YXJ0V2l0aCh0aGlzLmFic3RyYWN0Q29udHJvbC52YWx1ZSkpLFxuXHRcdFx0dG91Y2hlZEV2ZW50TGlzdGVuZXIodGhpcy5hYnN0cmFjdENvbnRyb2wpLFxuXHRcdFx0dGhpcy5hYnN0cmFjdENvbnRyb2wuc3RhdHVzQ2hhbmdlcy5waXBlKHN0YXJ0V2l0aCh0aGlzLmFic3RyYWN0Q29udHJvbC5zdGF0dXMpKSxcblx0XHRdKVxuXHRcdFx0LnBpcGUoXG5cdFx0XHRcdHRhcCgoWywgdG91Y2hlZF0pID0+IHtcblx0XHRcdFx0XHQvLyBJYmVuOiBDaGVjayB3aGV0aGVyIHdlIHNob3VsZCBzaG93IHRoZSBlcnJvciBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgY29uZmlnXG5cdFx0XHRcdFx0dGhpcy5oYXNFcnJvcnMuc2V0KFxuXHRcdFx0XHRcdFx0dGhpcy5hYnN0cmFjdENvbnRyb2wuaW52YWxpZCAmJlxuXHRcdFx0XHRcdFx0XHQodGhpcy5jb25maWcuc2hvd1doZW4gPT09ICd0b3VjaGVkJ1xuXHRcdFx0XHRcdFx0XHRcdD8gdG91Y2hlZFxuXHRcdFx0XHRcdFx0XHRcdDogdGhpcy5hYnN0cmFjdENvbnRyb2wuZGlydHkpXG5cdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdC8vIEliZW46IFNldCB0aGUgZXJyb3JzIGNsYXNzIGlmIG5lZWRlZFxuXG5cdFx0XHRcdFx0aWYgKGVsZW1lbnQpIHtcblx0XHRcdFx0XHRcdHRoaXMuaGFzRXJyb3JzKClcblx0XHRcdFx0XHRcdFx0PyB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGVsZW1lbnQsICduZ3gtZm9ybXMtZXJyb3JzLWludmFsaWQnKVxuXHRcdFx0XHRcdFx0XHQ6IHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoZWxlbWVudCwgJ25neC1mb3Jtcy1lcnJvcnMtaW52YWxpZCcpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIEliZW46IFNob3cgdGhlIGVycm9yIGJhc2VkIG9uIHdoZXRoZXIgb3Igbm90IGEgY29tcG9uZW50IHdhcyBwcm92aWRlZFxuXHRcdFx0XHRcdGlmICghdGhpcy5jb25maWcuY29tcG9uZW50KSB7XG5cdFx0XHRcdFx0XHR0aGlzLmhhbmRsZU5vQ29tcG9uZW50Rmxvdyh0aGlzLmhhc0Vycm9ycygpKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhpcy5oYW5kbGVDb21wb25lbnRSZW5kZXIodGhpcy5oYXNFcnJvcnMoKSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gSWJlbjogRGV0ZWN0IHRoZSBjaGFuZ2VzIHNvIHRoaXMgd29ya3Mgd2l0aCAobmVzdGVkKSBPblB1c2ggY29tcG9uZW50c1xuXHRcdFx0XHRcdHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuXHRcdFx0XHR9KSxcblx0XHRcdFx0dGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcblx0XHRcdClcblx0XHRcdC5zdWJzY3JpYmUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW5kZXJzIGEgcHJvdmlkZWQgY3VzdG9tIGNvbXBvbmVudCB1bmRlcm5lYXRoIHRoZSBpbnB1dCBjb21wb25lbnRcblx0ICpcblx0ICogQHBhcmFtIHNob3VsZFNob3cgLSBXaGV0aGVyIHRoZSBlcnJvciBzaG91bGQgYmUgc2hvd25cblx0ICovXG5cdHByaXZhdGUgaGFuZGxlQ29tcG9uZW50UmVuZGVyKHNob3VsZFNob3c6IGJvb2xlYW4pIHtcblx0XHQvLyBJYmVuOiBJZiB0aGUgZXJyb3Igc2hvdWxkIG5vdCBiZSBzaG93biwgd2UgY2hlY2sgaWYgdGhlcmUncyBhbHJlYWR5IGFuIGVycm9yIGNvbXBvbmVudCBhbmQgZGVzdHJveSBpdCBpZiBuZWVkZWRcblx0XHRpZiAoIXNob3VsZFNob3cpIHtcblx0XHRcdGlmICh0aGlzLmVycm9yQ29tcG9uZW50KSB7XG5cdFx0XHRcdHRoaXMuY29tcG9uZW50UmVmLmRlc3Ryb3koKTtcblx0XHRcdFx0dGhpcy5jb21wb25lbnRSZWYgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdHRoaXMuZXJyb3JDb21wb25lbnQgPSB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBJYmVuOiBJZiB0aGVyZSBhbHJlYWR5IGlzIGEgY29tcG9uZW50LCBkZXN0cm95IGl0IHNvIGl0IGNhbiB1cGRhdGUgY29ycmVjdGx5XG5cdFx0aWYgKHRoaXMuY29tcG9uZW50UmVmKSB7XG5cdFx0XHR0aGlzLmNvbXBvbmVudFJlZi5kZXN0cm95KCk7XG5cdFx0XHR0aGlzLmNvbXBvbmVudFJlZiA9IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHQvLyBJYmVuOiBBZGQgdGhlIG5ldyBjb21wb25lbnQgdG8gdGhlIHZpZXdcblx0XHR0aGlzLmNvbXBvbmVudFJlZiA9IHRoaXMudmlld0NvbnRhaW5lci5jcmVhdGVDb21wb25lbnQ8Tmd4Rm9ybXNFcnJvckFic3RyYWN0Q29tcG9uZW50Pihcblx0XHRcdHRoaXMuY29uZmlnLmNvbXBvbmVudFxuXHRcdCk7XG5cdFx0dGhpcy5lcnJvckNvbXBvbmVudCA9IHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlO1xuXG5cdFx0Ly8gSWJlbjogU2V0IHRoZSBkYXRhIG9mIHRoZSBlcnJvciBjb21wb25lbnRcblx0XHRjb25zdCB7IGVycm9ycywgZXJyb3JLZXlzLCBkYXRhIH0gPSB0aGlzLmdldEVycm9ycyh0aGlzLmFic3RyYWN0Q29udHJvbC5lcnJvcnMpO1xuXG5cdFx0dGhpcy5jb21wb25lbnRSZWYuc2V0SW5wdXQoJ2Vycm9ycycsIGVycm9ycyk7XG5cdFx0dGhpcy5jb21wb25lbnRSZWYuc2V0SW5wdXQoJ2Vycm9yS2V5cycsIGVycm9yS2V5cyk7XG5cdFx0dGhpcy5jb21wb25lbnRSZWYuc2V0SW5wdXQoJ2RhdGEnLCBkYXRhKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW5kZXJzIGEgcCB0YWcgdW5kZXJuZWF0aCB0aGUgaW5wdXQgY29tcG9uZW50IHdoZW4gbm8gY3VzdG9tIGNvbXBvbmVudCB3YXMgcHJvdmlkZWRcblx0ICpcblx0ICogQHBhcmFtIHNob3VsZFNob3cgLSBXaGV0aGVyIHRoZSBlcnJvciBzaG91bGQgYmUgc2hvd25cblx0ICovXG5cdHByaXZhdGUgaGFuZGxlTm9Db21wb25lbnRGbG93KHNob3VsZFNob3c6IGJvb2xlYW4pIHtcblx0XHQvLyBJYmVuOiBXZSByZW1vdmUgdGhlIGN1cnJlbnQgZXJyb3JzIHNvIHRoYXQgd2UgYWx3YXlzIGhhdmUgYSBuZXcgZWxlbWVudCB0byB3b3JrIHdpdGhcblx0XHRpZiAodGhpcy5lcnJvcnNFbGVtZW50KSB7XG5cdFx0XHR0aGlzLnJlbmRlcmVyLnJlbW92ZUNoaWxkKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudE5vZGUsIHRoaXMuZXJyb3JzRWxlbWVudCk7XG5cblx0XHRcdHRoaXMuZXJyb3JzRWxlbWVudCA9IG51bGw7XG5cdFx0fVxuXG5cdFx0Ly8gSWJlbjogRWFybHkgZXhpdCBpbiBjYXNlIHRoZXJlJ3Mgbm8gZXJyb3IgdG8gc2hvd1xuXHRcdGlmICghc2hvdWxkU2hvdykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIEliZW46IENyZWF0ZSBhIG5ldyBlcnJvciBwYXJhZ3JhcGhcblx0XHR0aGlzLmVycm9yc0VsZW1lbnQgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ3AnKTtcblx0XHR0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmVycm9yc0VsZW1lbnQsICdjbGFzcycsICduZ3gtZm9ybXMtZXJyb3InKTtcblxuXHRcdC8vIEliZW46IFNldCB0aGUgZXJyb3JzIGJhc2VkIG9uIHRoZSBrZXlzXG5cdFx0dGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eShcblx0XHRcdHRoaXMuZXJyb3JzRWxlbWVudCxcblx0XHRcdCdpbm5lckhUTUwnLFxuXHRcdFx0dGhpcy5nZXRFcnJvcnModGhpcy5hYnN0cmFjdENvbnRyb2wuZXJyb3JzKS5lcnJvcnMuam9pbignLCAnKVxuXHRcdCk7XG5cblx0XHQvLyBJYmVuOiBpbnNlcnQgdGhlIHBhcmFncmFwaCB1bmRlcm5lYXRoIHRoZSBpbnB1dCBjb21wb25lbnRcblx0XHR0aGlzLnJlbmRlcmVyLmluc2VydEJlZm9yZShcblx0XHRcdHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudE5vZGUsXG5cdFx0XHR0aGlzLmVycm9yc0VsZW1lbnQsXG5cdFx0XHR0aGlzLnJlbmRlcmVyLm5leHRTaWJsaW5nKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KVxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgZXJyb3JzIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBzZXR0aW5nc1xuXHQgKlxuXHQgKiBAcGFyYW0gZGF0YSAtIFRoZSBlcnJvciBkYXRhIHdlIHdpc2ggdG8gdXNlXG5cdCAqL1xuXHRwcml2YXRlIGdldEVycm9ycyhkYXRhOiBWYWxpZGF0aW9uRXJyb3JzKToge1xuXHRcdGVycm9yczogc3RyaW5nW107XG5cdFx0ZGF0YTogVmFsaWRhdGlvbkVycm9ycztcblx0XHRlcnJvcktleXM6IHN0cmluZ1tdO1xuXHR9IHtcblx0XHQvLyBJYmVuOiBFYXJseSBleGl0IGluIGNhc2UgdGhlIGVycm9ycyBvYmplY3QgaXMgbnVsbFxuXHRcdGlmICghZGF0YSkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0ZXJyb3JzOiBbXSxcblx0XHRcdFx0ZGF0YTogbnVsbCxcblx0XHRcdFx0ZXJyb3JLZXlzOiBbXSxcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0Ly8gSWJlbjogSWYgdGhlIGNvbmZpZyBpcyBzZXQgdG8gYWxsLCB3ZSBhbHdheXMgc2hvdyBhbGwgZXJyb3JzXG5cdFx0aWYgKHRoaXMuY29uZmlnLnNob3cgPT09ICdhbGwnKSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRlcnJvcnM6IE9iamVjdC5rZXlzKGRhdGEpLm1hcCgoa2V5KSA9PiB0aGlzLmNvbmZpZy5lcnJvcnNba2V5XSksXG5cdFx0XHRcdGVycm9yS2V5czogT2JqZWN0LmtleXMoZGF0YSksXG5cdFx0XHRcdGRhdGEsXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdC8vIEliZW46IElmIG5vIGxpbWl0IGlzIHByb3ZpZGVkLCB3ZSBkZWZhdWx0IHRvIGEgc2luZ2xlIGVycm9yXG5cdFx0Y29uc3QgbGltaXQgPSB0aGlzLmNvbmZpZy5zaG93ID09PSB1bmRlZmluZWQgPyAxIDogdGhpcy5jb25maWcuc2hvdztcblxuXHRcdC8vIEliZW46IFNsaWNlIHRoZSBlcnJvcnMgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGxpbWl0XG5cdFx0cmV0dXJuIHtcblx0XHRcdGVycm9yczogT2JqZWN0LmtleXMoZGF0YSlcblx0XHRcdFx0Lm1hcCgoa2V5KSA9PiB0aGlzLmNvbmZpZy5lcnJvcnNba2V5XSlcblx0XHRcdFx0LnNsaWNlKDAsIGxpbWl0KSxcblx0XHRcdGVycm9yS2V5czogT2JqZWN0LmtleXMoZGF0YSkuc2xpY2UoMCwgbGltaXQpLFxuXHRcdFx0ZGF0YSxcblx0XHR9O1xuXHR9XG59XG4iXX0=","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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2F2ZS1vbi1leGl0Lmd1YXJkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2Zvcm1zL3NyYy9saWIvZ3VhcmRzL3NhdmUtb24tZXhpdC9zYXZlLW9uLWV4aXQuZ3VhcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV2QyxPQUFPLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXRDLE9BQU8sRUFBRSw0QkFBNEIsRUFBMEIsTUFBTSxpQkFBaUIsQ0FBQztBQUV2Rjs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBNEMsQ0FDMUUsU0FBaUMsRUFDakMsWUFBb0MsRUFDcEMsWUFBaUMsRUFDakMsU0FBOEIsRUFDUixFQUFFO0lBQ3hCLDhCQUE4QjtJQUM5QixNQUFNLGlCQUFpQixHQUFpQyxNQUFNLENBQUMsNEJBQTRCLENBQUMsQ0FBQztJQUU3RiwwRUFBMEU7SUFDMUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1FBQzFCLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pCLENBQUM7SUFFRCwrSEFBK0g7SUFDL0gsSUFDQyxpQkFBaUIsQ0FBQyxnQkFBZ0I7UUFDbEMsaUJBQWlCLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxFQUMxRCxDQUFDO1FBQ0YsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakIsQ0FBQztJQUVELHVIQUF1SDtJQUN2SCxPQUFPLGlCQUFpQixDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3RELENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgQ2FuRGVhY3RpdmF0ZUZuLCBSb3V0ZXJTdGF0ZVNuYXBzaG90IH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IE5neFNhdmVPbkV4aXRBYnN0cmFjdFNlcnZpY2UsIE5neFNhdmVPbkV4aXRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hYnN0cmFjdHMnO1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIG9yIG5vdCB3ZSBjYW4gbmF2aWdhdGUgYXdheSBmcm9tIGEgcGFnZVxuICpcbiAqIEBwYXJhbSB7Tmd4U2F2ZU9uRXhpdENvbXBvbmVudH0gY29tcG9uZW50XG4gKiBAcmV0dXJuIHsqfSAge09ic2VydmFibGVCb29sZWFufVxuICogQG1lbWJlcm9mIFNhdmVPbkV4aXRHdWFyZFxuICovXG5leHBvcnQgY29uc3QgTmd4U2F2ZU9uRXhpdEd1YXJkOiBDYW5EZWFjdGl2YXRlRm48Tmd4U2F2ZU9uRXhpdENvbXBvbmVudD4gPSAoXG5cdGNvbXBvbmVudDogTmd4U2F2ZU9uRXhpdENvbXBvbmVudCxcblx0Y3VycmVudFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LFxuXHRjdXJyZW50U3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3QsXG5cdG5leHRTdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdFxuKTogT2JzZXJ2YWJsZTxib29sZWFuPiA9PiB7XG5cdC8vIEliZW46IEZldGNoIGFsbCBpbmplY3RhYmxlc1xuXHRjb25zdCBzYXZlT25FeGl0U2VydmljZTogTmd4U2F2ZU9uRXhpdEFic3RyYWN0U2VydmljZSA9IGluamVjdChOZ3hTYXZlT25FeGl0QWJzdHJhY3RTZXJ2aWNlKTtcblxuXHQvLyBJYmVuOiBJbiBjYXNlIHRoZSBjb21wb25lbnQgaXMgbm90IGRpcnR5LCB3ZSBjYW4gcm91dGUgd2l0aG91dCBwcm9ibGVtc1xuXHRpZiAoIWNvbXBvbmVudC5pc0RpcnR5KCkpIHtcblx0XHRyZXR1cm4gb2YodHJ1ZSk7XG5cdH1cblxuXHQvLyBJYmVuOiBDaGVjayBpZiB0aGUgc2VydmljZSBoYXMgYSBieXBhc3NTYXZlT25FeGl0IGZ1bmN0aW9uLiBJZiBpdCBkb2VzLCBydW4gdG8gc2VlIG9mIHRoZSBjdXJyZW50IHJvdXRlIG5lZWRzIHRvIGJlIGJ5cGFzc2VkXG5cdGlmIChcblx0XHRzYXZlT25FeGl0U2VydmljZS5ieXBhc3NTYXZlT25FeGl0ICYmXG5cdFx0c2F2ZU9uRXhpdFNlcnZpY2UuYnlwYXNzU2F2ZU9uRXhpdChjdXJyZW50Um91dGUsIG5leHRTdGF0ZSlcblx0KSB7XG5cdFx0cmV0dXJuIG9mKHRydWUpO1xuXHR9XG5cblx0Ly8gSWJlbjogSW4gY2FzZSB0aGUgY29tcG9uZW50IGlzIGRpcnR5LCB3ZSB3aWxsIGxldCB0aGUgU2F2ZU9uRXhpdFNlcnZpY2Uga25vdyBzbyB0aGV5IGNhbiB0YWtlIHRoZSBhcHByb3ByaWF0ZSBhY3Rpb25cblx0cmV0dXJuIHNhdmVPbkV4aXRTZXJ2aWNlLmhhbmRsZURpcnR5U3RhdGUoY29tcG9uZW50KTtcbn07XG4iXX0=","import { NgxFormsErrorsConfigurationToken } from '../../tokens';\n/**\n * Provides the necessary configuration for the NgxFormErrorsDirective\n *\n * @param configuration - The configuration for the directive\n */\nexport const provideNgxFormErrorsConfiguration = (configuration) => {\n    return {\n        provide: NgxFormsErrorsConfigurationToken,\n        useValue: configuration,\n    };\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLWNvbmZpZ3VyYXRpb24ucHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvZm9ybXMvc3JjL2xpYi9wcm92aWRlcnMvZXJyb3JzL2Vycm9ycy1jb25maWd1cmF0aW9uLnByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUdoRTs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0saUNBQWlDLEdBQUcsQ0FDaEQsYUFBZ0QsRUFDckMsRUFBRTtJQUNiLE9BQU87UUFDTixPQUFPLEVBQUUsZ0NBQWdDO1FBQ3pDLFFBQVEsRUFBRSxhQUFhO0tBQ3ZCLENBQUM7QUFDSCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQcm92aWRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBOZ3hGb3Jtc0Vycm9yc0NvbmZpZ3VyYXRpb25Ub2tlbiB9IGZyb20gJy4uLy4uL3Rva2Vucyc7XG5pbXBvcnQgeyBOZ3hGb3Jtc0Vycm9yQ29uZmlndXJhdGlvbk9wdGlvbnMgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbi8qKlxuICogUHJvdmlkZXMgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIGZvciB0aGUgTmd4Rm9ybUVycm9yc0RpcmVjdGl2ZVxuICpcbiAqIEBwYXJhbSBjb25maWd1cmF0aW9uIC0gVGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBkaXJlY3RpdmVcbiAqL1xuZXhwb3J0IGNvbnN0IHByb3ZpZGVOZ3hGb3JtRXJyb3JzQ29uZmlndXJhdGlvbiA9IChcblx0Y29uZmlndXJhdGlvbjogTmd4Rm9ybXNFcnJvckNvbmZpZ3VyYXRpb25PcHRpb25zXG4pOiBQcm92aWRlciA9PiB7XG5cdHJldHVybiB7XG5cdFx0cHJvdmlkZTogTmd4Rm9ybXNFcnJvcnNDb25maWd1cmF0aW9uVG9rZW4sXG5cdFx0dXNlVmFsdWU6IGNvbmZpZ3VyYXRpb24sXG5cdH07XG59O1xuIl19","/*\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/types';\nexport * from './lib/directives';\nexport * from './lib/tokens';\nexport * from './lib/guards';\nexport * from './lib/providers';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvZm9ybXMvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzVELE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekYsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsaUJBQWlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIGZvcm1zXG4gKi9cblxuZXhwb3J0IHsgTmd4VmFsaWRhdG9ycyB9IGZyb20gJy4vbGliL3ZhbGlkYXRvcnMvdmFsaWRhdG9ycyc7XG5leHBvcnQgeyBzZXRGb3JtRXJyb3IsIGNsZWFyRm9ybUVycm9yLCBpc0VtcHR5SW5wdXRWYWx1ZSB9IGZyb20gJy4vbGliL3ZhbGlkYXRvcnMvdXRpbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYWJzdHJhY3RzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3V0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3R5cGVzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RpcmVjdGl2ZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdG9rZW5zJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2d1YXJkcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9wcm92aWRlcnMnO1xuIl19","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWJlbnZhbmRldmVpcmUtbmd4LWZvcm1zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2Zvcm1zL3NyYy9pYmVudmFuZGV2ZWlyZS1uZ3gtZm9ybXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0="],"names":["EMPTY_SET","tap","switchMap","takeUntil"],"mappings":"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"}