@mmstack/form-core 20.4.0 → 21.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -223,10 +223,11 @@ function formArray(initial, factory, opt) {
|
|
|
223
223
|
const length = computed(() => ctrl.value().length, ...(ngDevMode ? [{ debugName: "length" }] : []));
|
|
224
224
|
const reconcileChildren = createReconcileChildren(factory, { equal: eq });
|
|
225
225
|
// linkedSignal used to re-use previous value so that only length changes are affected and existing controls are kept, but updated
|
|
226
|
-
const children = linkedSignal({
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
226
|
+
const children = linkedSignal(...(ngDevMode ? [{ debugName: "children", source: () => length(),
|
|
227
|
+
computation: (len, prev) => reconcileChildren(len, ctrl.value, prev?.value) }] : [{
|
|
228
|
+
source: () => length(),
|
|
229
|
+
computation: (len, prev) => reconcileChildren(len, ctrl.value, prev?.value),
|
|
230
|
+
}]));
|
|
230
231
|
const ownError = computed(() => ctrl.error(), ...(ngDevMode ? [{ debugName: "ownError" }] : []));
|
|
231
232
|
const error = computed(() => {
|
|
232
233
|
const own = ownError();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mmstack-form-core.mjs","sources":["../tmp-esm2022/lib/util.js","../tmp-esm2022/lib/form-control.js","../tmp-esm2022/lib/form-array.js","../tmp-esm2022/lib/form-group.js","../tmp-esm2022/mmstack-form-core.js"],"sourcesContent":["/**\n * Merges two arrays element by element using the `mergeIfObject` logic.\n *\n * The resulting array will have the same length as the `next` array.\n * For each index `i`, the element in the resulting array is determined by:\n * `mergeIfObject(prev[i], next[i])`.\n * If `prev` is shorter than `next`, `prev[i]` will be `undefined` for the out-of-bounds indices.\n *\n * @template {any[]} T The array type being merged.\n * @param {T} prev The previous array.\n * @param {T} next The next array.\n * @returns {T} A new array containing the merged elements.\n * @example\n * const prev = [1, { id: 1, name: \"A\" }, [10], \"extraPrev\"];\n * const next = [2, { id: 1, status: \"B\" }, [20, 21], missing , { id: 2 }];\n *\n * mergeArray(prev, next);\n * // Result approx:\n * // [\n * // 2, // Primitive replaced\n * // { id: 1, name: \"A\", status: \"B\" }, // Objects shallow-merged\n * // [20, 21], // Arrays replaced (via mergeIfObject -> mergeArray)\n * // undefined, // Primitive replaced by missing item in sparse 'next' array\n * // { id: 2 } // Added from 'next' (prev[4] was undefined)\n * // ]\n */\nexport function mergeArray(prev, next) {\n return next.map((item, index) => mergeIfObject(prev[index], item));\n}\n/**\n * Merges two values (`prev`, `next`), prioritizing `next` in most cases.\n *\n * Behavior:\n * - If both `prev` and `next` are non-null, non-array objects, it performs a **shallow merge**\n * (`{ ...prev, ...next }`), where properties from `next` overwrite those in `prev`.\n * - If both `prev` and `next` are arrays, it delegates to `mergeArray` for element-wise merging.\n * - In all other scenarios (type mismatch, primitives, null involved, array mixed with object),\n * it simply returns the `next` value.\n *\n * @template T The type of the values being merged.\n * @param {T | undefined} prev The previous value (can be undefined if accessed out of array bounds).\n * @param {T} next The next value.\n * @returns {T} The merged result based on the rules above.\n */\nexport function mergeIfObject(prev, next) {\n if (typeof prev !== typeof next)\n return next;\n if (typeof prev !== 'object' || typeof next !== 'object')\n return next;\n if (prev === null || next === null)\n return next;\n if (Array.isArray(prev) && Array.isArray(next))\n return mergeArray(prev, next);\n if (Array.isArray(prev) || Array.isArray(next))\n return next;\n return { ...prev, ...next };\n}\n/**\n * Generates a unique ID using crypto.randomUUID if available,\n * otherwise falls back to a non-secure random string.\n * @returns {string}\n */\nexport function generateID() {\n if (globalThis.crypto?.randomUUID) {\n return globalThis.crypto.randomUUID();\n }\n return Math.random().toString(36).substring(2);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Zvcm0vY29yZS9zcmMvbGliL3V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5Qkc7QUFDSCxNQUFNLFVBQVUsVUFBVSxDQUFrQixJQUFPLEVBQUUsSUFBTztJQUMxRCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFhLEVBQUUsQ0FDekMsYUFBYSxDQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FDdkMsQ0FBQztBQUNULENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE1BQU0sVUFBVSxhQUFhLENBQUksSUFBTyxFQUFFLElBQU87SUFDL0MsSUFBSSxPQUFPLElBQUksS0FBSyxPQUFPLElBQUk7UUFBRSxPQUFPLElBQUksQ0FBQztJQUM3QyxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDdEUsSUFBSSxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxJQUFJO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDaEQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1FBQUUsT0FBTyxVQUFVLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzlFLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBRTVELE9BQU8sRUFBRSxHQUFHLElBQUksRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDO0FBQzlCLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLFVBQVU7SUFDeEIsSUFBSSxVQUFVLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxDQUFDO1FBQ2xDLE9BQU8sVUFBVSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNZXJnZXMgdHdvIGFycmF5cyBlbGVtZW50IGJ5IGVsZW1lbnQgdXNpbmcgdGhlIGBtZXJnZUlmT2JqZWN0YCBsb2dpYy5cbiAqXG4gKiBUaGUgcmVzdWx0aW5nIGFycmF5IHdpbGwgaGF2ZSB0aGUgc2FtZSBsZW5ndGggYXMgdGhlIGBuZXh0YCBhcnJheS5cbiAqIEZvciBlYWNoIGluZGV4IGBpYCwgdGhlIGVsZW1lbnQgaW4gdGhlIHJlc3VsdGluZyBhcnJheSBpcyBkZXRlcm1pbmVkIGJ5OlxuICogYG1lcmdlSWZPYmplY3QocHJldltpXSwgbmV4dFtpXSlgLlxuICogSWYgYHByZXZgIGlzIHNob3J0ZXIgdGhhbiBgbmV4dGAsIGBwcmV2W2ldYCB3aWxsIGJlIGB1bmRlZmluZWRgIGZvciB0aGUgb3V0LW9mLWJvdW5kcyBpbmRpY2VzLlxuICpcbiAqIEB0ZW1wbGF0ZSB7YW55W119IFQgVGhlIGFycmF5IHR5cGUgYmVpbmcgbWVyZ2VkLlxuICogQHBhcmFtIHtUfSBwcmV2IFRoZSBwcmV2aW91cyBhcnJheS5cbiAqIEBwYXJhbSB7VH0gbmV4dCBUaGUgbmV4dCBhcnJheS5cbiAqIEByZXR1cm5zIHtUfSBBIG5ldyBhcnJheSBjb250YWluaW5nIHRoZSBtZXJnZWQgZWxlbWVudHMuXG4gKiBAZXhhbXBsZVxuICogY29uc3QgcHJldiA9IFsxLCB7IGlkOiAxLCBuYW1lOiBcIkFcIiB9LCBbMTBdLCAgICAgICAgXCJleHRyYVByZXZcIl07XG4gKiBjb25zdCBuZXh0ID0gWzIsIHsgaWQ6IDEsIHN0YXR1czogXCJCXCIgfSwgWzIwLCAyMV0sICBtaXNzaW5nICAsIHsgaWQ6IDIgfV07XG4gKlxuICogbWVyZ2VBcnJheShwcmV2LCBuZXh0KTtcbiAqIC8vIFJlc3VsdCBhcHByb3g6XG4gKiAvLyBbXG4gKiAvLyAgIDIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByaW1pdGl2ZSByZXBsYWNlZFxuICogLy8gICB7IGlkOiAxLCBuYW1lOiBcIkFcIiwgc3RhdHVzOiBcIkJcIiB9LCAvLyBPYmplY3RzIHNoYWxsb3ctbWVyZ2VkXG4gKiAvLyAgIFsyMCwgMjFdLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXJyYXlzIHJlcGxhY2VkICh2aWEgbWVyZ2VJZk9iamVjdCAtPiBtZXJnZUFycmF5KVxuICogLy8gICB1bmRlZmluZWQsICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByaW1pdGl2ZSByZXBsYWNlZCBieSBtaXNzaW5nIGl0ZW0gaW4gc3BhcnNlICduZXh0JyBhcnJheVxuICogLy8gICB7IGlkOiAyIH0gICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkZGVkIGZyb20gJ25leHQnIChwcmV2WzRdIHdhcyB1bmRlZmluZWQpXG4gKiAvLyBdXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUFycmF5PFQgZXh0ZW5kcyBhbnlbXT4ocHJldjogVCwgbmV4dDogVCk6IFQge1xuICByZXR1cm4gbmV4dC5tYXAoKGl0ZW0sIGluZGV4KTogVFtudW1iZXJdID0+XG4gICAgbWVyZ2VJZk9iamVjdDxUW251bWJlcl0+KHByZXZbaW5kZXhdLCBpdGVtKSxcbiAgKSBhcyBUO1xufVxuXG4vKipcbiAqIE1lcmdlcyB0d28gdmFsdWVzIChgcHJldmAsIGBuZXh0YCksIHByaW9yaXRpemluZyBgbmV4dGAgaW4gbW9zdCBjYXNlcy5cbiAqXG4gKiBCZWhhdmlvcjpcbiAqIC0gSWYgYm90aCBgcHJldmAgYW5kIGBuZXh0YCBhcmUgbm9uLW51bGwsIG5vbi1hcnJheSBvYmplY3RzLCBpdCBwZXJmb3JtcyBhICoqc2hhbGxvdyBtZXJnZSoqXG4gKiAoYHsgLi4ucHJldiwgLi4ubmV4dCB9YCksIHdoZXJlIHByb3BlcnRpZXMgZnJvbSBgbmV4dGAgb3ZlcndyaXRlIHRob3NlIGluIGBwcmV2YC5cbiAqIC0gSWYgYm90aCBgcHJldmAgYW5kIGBuZXh0YCBhcmUgYXJyYXlzLCBpdCBkZWxlZ2F0ZXMgdG8gYG1lcmdlQXJyYXlgIGZvciBlbGVtZW50LXdpc2UgbWVyZ2luZy5cbiAqIC0gSW4gYWxsIG90aGVyIHNjZW5hcmlvcyAodHlwZSBtaXNtYXRjaCwgcHJpbWl0aXZlcywgbnVsbCBpbnZvbHZlZCwgYXJyYXkgbWl4ZWQgd2l0aCBvYmplY3QpLFxuICogaXQgc2ltcGx5IHJldHVybnMgdGhlIGBuZXh0YCB2YWx1ZS5cbiAqXG4gKiBAdGVtcGxhdGUgVCBUaGUgdHlwZSBvZiB0aGUgdmFsdWVzIGJlaW5nIG1lcmdlZC5cbiAqIEBwYXJhbSB7VCB8IHVuZGVmaW5lZH0gcHJldiBUaGUgcHJldmlvdXMgdmFsdWUgKGNhbiBiZSB1bmRlZmluZWQgaWYgYWNjZXNzZWQgb3V0IG9mIGFycmF5IGJvdW5kcykuXG4gKiBAcGFyYW0ge1R9IG5leHQgVGhlIG5leHQgdmFsdWUuXG4gKiBAcmV0dXJucyB7VH0gVGhlIG1lcmdlZCByZXN1bHQgYmFzZWQgb24gdGhlIHJ1bGVzIGFib3ZlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VJZk9iamVjdDxUPihwcmV2OiBULCBuZXh0OiBUKTogVCB7XG4gIGlmICh0eXBlb2YgcHJldiAhPT0gdHlwZW9mIG5leHQpIHJldHVybiBuZXh0O1xuICBpZiAodHlwZW9mIHByZXYgIT09ICdvYmplY3QnIHx8IHR5cGVvZiBuZXh0ICE9PSAnb2JqZWN0JykgcmV0dXJuIG5leHQ7XG4gIGlmIChwcmV2ID09PSBudWxsIHx8IG5leHQgPT09IG51bGwpIHJldHVybiBuZXh0O1xuICBpZiAoQXJyYXkuaXNBcnJheShwcmV2KSAmJiBBcnJheS5pc0FycmF5KG5leHQpKSByZXR1cm4gbWVyZ2VBcnJheShwcmV2LCBuZXh0KTtcbiAgaWYgKEFycmF5LmlzQXJyYXkocHJldikgfHwgQXJyYXkuaXNBcnJheShuZXh0KSkgcmV0dXJuIG5leHQ7XG5cbiAgcmV0dXJuIHsgLi4ucHJldiwgLi4ubmV4dCB9O1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBhIHVuaXF1ZSBJRCB1c2luZyBjcnlwdG8ucmFuZG9tVVVJRCBpZiBhdmFpbGFibGUsXG4gKiBvdGhlcndpc2UgZmFsbHMgYmFjayB0byBhIG5vbi1zZWN1cmUgcmFuZG9tIHN0cmluZy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUlEKCkge1xuICBpZiAoZ2xvYmFsVGhpcy5jcnlwdG8/LnJhbmRvbVVVSUQpIHtcbiAgICByZXR1cm4gZ2xvYmFsVGhpcy5jcnlwdG8ucmFuZG9tVVVJRCgpO1xuICB9XG4gIHJldHVybiBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMik7XG59XG4iXX0=","import { computed, isSignal, signal, untracked, } from '@angular/core';\nimport { generateID } from './util';\n/**\n * Creates a `FormControlSignal`, a reactive form control that holds a value and tracks its\n * validity, dirty state, touched state, and other metadata.\n *\n * @typeParam T - The type of the form control's value.\n * @typeParam TParent - The type of the parent form control's value (if this control is part of a group or array).\n * @typeParam TControlType - The type of the control. Defaults to `'control'`.\n * @typeParam TPartialValue - The type of value when patching\n * @param initial - The initial value of the control, or a `DerivedSignal` if this control is part of a `formGroup` or `formArray`.\n * @param options - Optional configuration options for the control.\n * @returns A `FormControlSignal` instance.\n *\n * @example\n * // Create a simple form control:\n * const name = formControl('Initial Name');\n *\n * // Create a form control with validation:\n * const age = formControl(0, {\n * validator: () => (value) => value >= 18 ? '' : 'Must be at least 18',\n * });\n *\n * // Create a derived form control (equivalent to the above, but more explicit):\n * const user = signal({ name: 'John Doe', age: 30 });\n * const name = formControl(derived(user, {\n * from: (u) => u.name,\n * onChange: (newName) => user.update(u => ({...u, name: newName}))\n * }));\n *\n * // Create a form group with nested controls:\n * const user = signal({ name: 'John Doe', age: 30 });\n * const form = formGroup(user, {\n * name: formControl(derived(user, 'name')),\n * age: formControl(derived(user, 'age')),\n * })\n */\nexport function formControl(initial, opt) {\n const value = isSignal(initial) ? initial : signal(initial, opt);\n const initialValue = signal(untracked(value), ...(ngDevMode ? [{ debugName: \"initialValue\" }] : []));\n const eq = opt?.equal ?? Object.is;\n const dirtyEq = opt?.dirtyEquality ?? eq;\n const disabled = computed(() => opt?.disable?.() ?? false, ...(ngDevMode ? [{ debugName: \"disabled\" }] : []));\n const readonly = computed(() => opt?.readonly?.() ?? false, ...(ngDevMode ? [{ debugName: \"readonly\" }] : []));\n const dirty = computed(() => !dirtyEq(value(), initialValue()), ...(ngDevMode ? [{ debugName: \"dirty\" }] : []));\n const touched = signal(false, ...(ngDevMode ? [{ debugName: \"touched\" }] : []));\n const validator = computed(() => opt?.validator?.() ?? (() => ''), ...(ngDevMode ? [{ debugName: \"validator\" }] : []));\n const error = computed(() => {\n if (opt?.overrideValidation)\n return opt.overrideValidation();\n if (disabled() || readonly())\n return '';\n return validator()(value());\n }, ...(ngDevMode ? [{ debugName: \"error\" }] : []));\n const markAsTouched = () => {\n touched.set(true);\n opt?.onTouched?.();\n };\n const markAllAsTouched = markAsTouched;\n const markAsPristine = () => touched.set(false);\n const markAllAsPristine = markAsPristine;\n const label = computed(() => opt?.label?.() ?? '', ...(ngDevMode ? [{ debugName: \"label\" }] : []));\n const partialValue = computed(() => (dirty() ? value() : undefined), ...(ngDevMode ? [{ debugName: \"partialValue\" }] : []));\n const internalReconcile = (newValue, force = false) => {\n const isDirty = untracked(dirty);\n if (!isDirty || force) {\n // very dangerous use of untracked here, don't do this everywhere :)\n // thanks to u/synalx for the idea to use untracked here\n untracked(() => {\n initialValue.set(newValue);\n value.set(newValue);\n });\n }\n };\n const pending = computed(() => opt?.pending?.() ?? false, ...(ngDevMode ? [{ debugName: \"pending\" }] : []));\n return {\n id: opt?.id?.() ?? generateID(),\n value,\n dirty,\n touched,\n error,\n label,\n required: computed(() => opt?.required?.() ?? false),\n disabled,\n readonly,\n pending,\n valid: computed(() => !pending() && !error()),\n hint: computed(() => opt?.hint?.() ?? ''),\n markAsTouched,\n markAllAsTouched,\n markAsPristine,\n markAllAsPristine,\n from: (isSignal(initial) ? initial.from : undefined),\n reconcile: (newValue) => internalReconcile(newValue),\n forceReconcile: (newValue) => internalReconcile(newValue, true),\n reset: () => {\n opt?.onReset?.();\n value.set(untracked(initialValue));\n },\n resetWithInitial: (initial) => {\n opt?.onReset?.();\n initialValue.set(initial);\n value.set(initial);\n },\n equal: eq,\n controlType: (opt?.controlType ?? 'control'),\n partialValue: partialValue,\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1jb250cm9sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZm9ybS9jb3JlL3NyYy9saWIvZm9ybS1jb250cm9sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxRQUFRLEVBQ1IsUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEdBS1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQTRHcEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQ0c7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQU16QixPQUFzQyxFQUN0QyxHQUErQztJQUUvQyxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNqRSxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyx3REFBQyxDQUFDO0lBQzlDLE1BQU0sRUFBRSxHQUFHLEdBQUcsRUFBRSxLQUFLLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQztJQUVuQyxNQUFNLE9BQU8sR0FBRyxHQUFHLEVBQUUsYUFBYSxJQUFJLEVBQUUsQ0FBQztJQUV6QyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksS0FBSyxvREFBQyxDQUFDO0lBQzNELE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsSUFBSSxLQUFLLG9EQUFDLENBQUM7SUFFNUQsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLFlB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QUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FJMUM7UUFDVCxTQUFTLEVBQUUsQ0FBQyxRQUFXLEVBQUUsRUFBRSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQztRQUN2RCxjQUFjLEVBQUUsQ0FBQyxRQUFXLEVBQUUsRUFBRSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUM7UUFDbEUsS0FBSyxFQUFFLEdBQUcsRUFBRTtZQUNWLEdBQUcsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQ2pCLEtBQUssQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7UUFDckMsQ0FBQztRQUNELGdCQUFnQixFQUFFLENBQUMsT0FBVSxFQUFFLEVBQUU7WUFDL0IsR0FBRyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDakIsWUFBWSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMxQixLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JCLENBQUM7UUFDRCxLQUFLLEVBQUUsRUFBRTtRQUNULFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxXQUFXLElBQUksU0FBUyxDQUFpQjtRQUM1RCxZQUFZLEVBQUUsWUFBcUM7S0FDcEQsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIGNvbXB1dGVkLFxyXG4gIGlzU2lnbmFsLFxyXG4gIHNpZ25hbCxcclxuICB1bnRyYWNrZWQsXHJcbiAgdHlwZSBDcmVhdGVTaWduYWxPcHRpb25zLFxyXG4gIHR5cGUgU2lnbmFsLFxyXG4gIHR5cGUgVmFsdWVFcXVhbGl0eUZuLFxyXG4gIHR5cGUgV3JpdGFibGVTaWduYWwsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IHR5cGUgRGVyaXZlZFNpZ25hbCB9IGZyb20gJ0BtbXN0YWNrL3ByaW1pdGl2ZXMnO1xyXG5pbXBvcnQgeyBnZW5lcmF0ZUlEIH0gZnJvbSAnLi91dGlsJztcclxuXHJcbi8qKlxyXG4gKiBSZXByZXNlbnRzIHRoZSB0eXBlIG9mIGEgZm9ybSBjb250cm9sLlxyXG4gKiAtIGBjb250cm9sYDogQSBzaW5nbGUgZm9ybSBjb250cm9sIChlLmcuLCBhbiBpbnB1dCBmaWVsZCkuXHJcbiAqIC0gYGFycmF5YDogQW4gYXJyYXkgb2YgZm9ybSBjb250cm9scyAobGlrZSBBbmd1bGFyJ3MgYEZvcm1BcnJheWApLlxyXG4gKiAtIGBncm91cGA6IEEgZ3JvdXAgb2YgZm9ybSBjb250cm9scyAobGlrZSBBbmd1bGFyJ3MgYEZvcm1Hcm91cGApLlxyXG4gKi9cclxuZXhwb3J0IHR5cGUgQ29udHJvbFR5cGUgPSAnY29udHJvbCcgfCAnYXJyYXknIHwgJ2dyb3VwJztcclxuXHJcbi8qKlxyXG4gKiBSZXByZXNlbnRzIGEgcmVhY3RpdmUgZm9ybSBjb250cm9sLiAgSXQgaG9sZHMgdGhlIHZhbHVlLCB2YWxpZGF0aW9uIHN0YXR1cywgYW5kIG90aGVyXHJcbiAqIG1ldGFkYXRhIGZvciBhIGZvcm0gZmllbGQuICBUaGlzIGlzIHRoZSBjb3JlIGJ1aWxkaW5nIGJsb2NrIGZvciBjcmVhdGluZyByZWFjdGl2ZSBmb3Jtc1xyXG4gKiB3aXRoIHNpZ25hbHMuXHJcbiAqXHJcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSBmb3JtIGNvbnRyb2wncyB2YWx1ZS5cclxuICogQHR5cGVQYXJhbSBUUGFyZW50IC0gVGhlIHR5cGUgb2YgdGhlIHBhcmVudCBmb3JtIGNvbnRyb2wncyB2YWx1ZSAoaWYgdGhpcyBjb250cm9sIGlzIHBhcnQgb2YgYSBncm91cCBvciBhcnJheSkuIERlZmF1bHRzIHRvIGB1bmRlZmluZWRgLlxyXG4gKiBAdHlwZVBhcmFtIFRDb250cm9sVHlwZSAtIFRoZSB0eXBlIG9mIHRoZSBjb250cm9sICgnY29udHJvbCcsICdhcnJheScsIG9yICdncm91cCcpLiBEZWZhdWx0cyB0byAnY29udHJvbCcuXHJcbiAqIEB0eXBlUGFyYW0gVFBhcnRpYWxWYWx1ZSAtICBUaGUgdHlwZSBvZiB0aGUgcGFydGlhbCB2YWx1ZSwgdXNlZCBmb3IgcGF0Y2hpbmcuXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBGb3JtQ29udHJvbFNpZ25hbDxcclxuICBULFxyXG4gIFRQYXJlbnQgPSB1bmRlZmluZWQsXHJcbiAgVENvbnRyb2xUeXBlIGV4dGVuZHMgQ29udHJvbFR5cGUgPSAnY29udHJvbCcsXHJcbiAgVFBhcnRpYWxWYWx1ZSA9IFQgfCB1bmRlZmluZWQsXHJcbj4gPSB7XHJcbiAgLyoqIEEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBjb250cm9sLiBVc2VkIGZvciB0cmFja2luZyBpbiBgQGZvcmAgbG9vcHMuICovXHJcbiAgaWQ6IHN0cmluZztcclxuICAvKiogVGhlIG1haW4gdmFsdWUgc2lnbmFsIGZvciB0aGUgY29udHJvbC4gKi9cclxuICB2YWx1ZTogV3JpdGFibGVTaWduYWw8VD47XHJcbiAgLyoqIEEgc2lnbmFsIGluZGljYXRpbmcgd2hldGhlciB0aGUgY29udHJvbCdzIHZhbHVlIGhhcyBiZWVuIGNoYW5nZWQuICovXHJcbiAgZGlydHk6IFNpZ25hbDxib29sZWFuPjtcclxuICAvKiogQSBzaWduYWwgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBjb250cm9sIGhhcyBiZWVuIGludGVyYWN0ZWQgd2l0aCAoZS5nLiwgYmx1cnJlZCkuICovXHJcbiAgdG91Y2hlZDogU2lnbmFsPGJvb2xlYW4+O1xyXG4gIC8qKiBBIHNpZ25hbCBjb250YWluaW5nIHRoZSBjdXJyZW50IHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZSAoZW1wdHkgc3RyaW5nIGlmIHZhbGlkKS4gKi9cclxuICBlcnJvcjogU2lnbmFsPHN0cmluZz47XHJcbiAgLyoqIEEgc2lnbmFsIGluZGljYXRpbmcgd2hldGhlciB0aGUgY29udHJvbCBpcyBwZW5kaW5nICovXHJcbiAgcGVuZGluZzogU2lnbmFsPGJvb2xlYW4+O1xyXG4gIC8qKiBBIHNpZ25hbCBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGNvbnRyb2wgaXMgZGlzYWJsZWQuICovXHJcbiAgLyoqIEEgc2lnbmFsIGluZGljYXRpbmcgd2hldGhlciB0aGUgY29udHJvbCBpcyBpbiBhIHZhbGlkIHN0YXRlICh3aXRob3V0IGVycm9ycyAmIG5vdCBwZW5kaW5nKSAqL1xyXG4gIHZhbGlkOiBTaWduYWw8Ym9vbGVhbj47XHJcbiAgZGlzYWJsZWQ6IFNpZ25hbDxib29sZWFuPjtcclxuICAvKiogQSBzaWduYWwgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBjb250cm9sIGlzIHJlYWQtb25seS4gKi9cclxuICByZWFkb25seTogU2lnbmFsPGJvb2xlYW4+O1xyXG4gIC8qKiBBIHNpZ25hbCBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGNvbnRyb2wgaXMgcmVxdWlyZWQuICovXHJcbiAgcmVxdWlyZWQ6IFNpZ25hbDxib29sZWFuPjtcclxuICAvKiogQSBzaWduYWwgY29udGFpbmluZyB0aGUgbGFiZWwgZm9yIHRoZSBjb250cm9sLiAqL1xyXG4gIGxhYmVsOiBTaWduYWw8c3RyaW5nPjtcclxuICAvKiogQSBzaWduYWwgY29udGFpbmluZyB0aGUgaGludCB0ZXh0IGZvciB0aGUgY29udHJvbC4gKi9cclxuICBoaW50OiBTaWduYWw8c3RyaW5nPjtcclxuICAvKiogTWFya3MgdGhlIGNvbnRyb2wgYXMgdG91Y2hlZC4gKi9cclxuICBtYXJrQXNUb3VjaGVkOiAoKSA9PiB2b2lkO1xyXG4gIC8qKiBNYXJrcyB0aGUgY29udHJvbCBhbmQgYWxsIGl0cyBjaGlsZCBjb250cm9scyAoaWYgYW55KSBhcyB0b3VjaGVkLiAqL1xyXG4gIG1hcmtBbGxBc1RvdWNoZWQ6ICgpID0+IHZvaWQ7XHJcbiAgLyoqIE1hcmtzIHRoZSBjb250cm9sIGFzIHByaXN0aW5lIChub3QgdG91Y2hlZCkuICovXHJcbiAgbWFya0FzUHJpc3RpbmU6ICgpID0+IHZvaWQ7XHJcbiAgLyoqIE1hcmtzIHRoZSBjb250cm9sIGFuZCBhbGwgaXRzIGNoaWxkIGNvbnRyb2xzIChpZiBhbnkpIGFzIHByaXN0aW5lLiAqL1xyXG4gIG1hcmtBbGxBc1ByaXN0aW5lOiAoKSA9PiB2b2lkO1xyXG4gIC8qKlxyXG4gICAqIFJlc2V0cyB0aGUgY29udHJvbCB0byBhIG5ldyB2YWx1ZSBhbmQgc2V0cyBhIG5ldyBpbml0aWFsIHZhbHVlLiBUaGlzIGlzIGludGVuZGVkIGZvclxyXG4gICAqIHNjZW5hcmlvcyB3aGVyZSB0aGUgdW5kZXJseWluZyBkYXRhIGlzIHVwZGF0ZWQgZXh0ZXJuYWxseSAoZS5nLiwgZGF0YSBjb21pbmcgZnJvbVxyXG4gICAqIHRoZSBzZXJ2ZXIpLiAgSWYgdGhlIGNvbnRyb2wgaXMgbm90IGRpcnR5LCB0aGUgdmFsdWUgaXMgdXBkYXRlZC4gSWYgdGhlIGNvbnRyb2wgKmlzKlxyXG4gICAqIGRpcnR5LCB0aGUgdmFsdWUgaXMgKm5vdCogdXBkYXRlZCAocHJlc2VydmluZyB1c2VyIGNoYW5nZXMpLlxyXG4gICAqL1xyXG4gIHJlY29uY2lsZTogKG5ld1ZhbHVlOiBUKSA9PiB2b2lkO1xyXG4gIC8qKlxyXG4gICAqIFNpbWlsYXIgdG8gYHJlY29uY2lsZWAsIGJ1dCBmb3JjZXMgdGhlIHVwZGF0ZSBldmVuIGlmIHRoZSBjb250cm9sIGlzIGRpcnR5LlxyXG4gICAqL1xyXG4gIGZvcmNlUmVjb25jaWxlOiAobmV3VmFsdWU6IFQpID0+IHZvaWQ7XHJcbiAgLyoqIFJlc2V0cyB0aGUgY29udHJvbCdzIHZhbHVlIHRvIGl0cyBpbml0aWFsIHZhbHVlLiAqL1xyXG4gIHJlc2V0OiAoKSA9PiB2b2lkO1xyXG4gIC8qKiBSZXNldHMgdGhlIGNvbnRyb2wncyB2YWx1ZSBhbmQgaW5pdGlhbCB2YWx1ZS4gKi9cclxuICByZXNldFdpdGhJbml0aWFsOiAoaW5pdGlhbDogVCkgPT4gdm9pZDtcclxuICAvKipcclxuICAgKiBUaGUgZGVyaXZhdGlvbiBmdW5jdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGlzIGNvbnRyb2wgaWYgaXQncyBwYXJ0IG9mIGEgYGZvcm1Hcm91cGAgb3IgYGZvcm1BcnJheWAuXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgZnJvbT86IERlcml2ZWRTaWduYWw8VFBhcmVudCwgVD5bJ2Zyb20nXTtcclxuICAvKiogVGhlIGVxdWFsaXR5IGZ1bmN0aW9uIHVzZWQgdG8gY29tcGFyZSB2YWx1ZXMuIERlZmF1bHRzIHRvIGBPYmplY3QuaXNgLiAqL1xyXG4gIGVxdWFsOiAoYTogVCwgYjogVCkgPT4gYm9vbGVhbjtcclxuICAvKiogVGhlIHR5cGUgb2YgdGhlIGNvbnRyb2wgKCdjb250cm9sJywgJ2FycmF5Jywgb3IgJ2dyb3VwJykuICovXHJcbiAgY29udHJvbFR5cGU6IFRDb250cm9sVHlwZTtcclxuICAvKipcclxuICAgKiBBIHNpZ25hbCByZXByZXNlbnRpbmcgdGhlIHBhcnRpYWwgdmFsdWUgb2YgdGhlIGNvbnRyb2wsIHN1aXRhYmxlIGZvciBwYXRjaGluZyBkYXRhIG9uIGEgc2VydmVyLlxyXG4gICAqIEl0IGNvbnRhaW5zIHRoZSBjaGFuZ2VkIHZhbHVlIGlmIGBkaXJ0eWAgaXMgYHRydWVgLlxyXG4gICAqL1xyXG4gIHBhcnRpYWxWYWx1ZTogU2lnbmFsPFRQYXJ0aWFsVmFsdWU+O1xyXG59O1xyXG5cclxuZXhwb3J0IHR5cGUgQ3JlYXRlRm9ybUNvbnRyb2xPcHRpb25zPFxyXG4gIFQsXHJcbiAgVENvbnRyb2xUeXBlIGV4dGVuZHMgQ29udHJvbFR5cGUgPSBDb250cm9sVHlwZSxcclxuPiA9IENyZWF0ZVNpZ25hbE9wdGlvbnM8VD4gJiB7XHJcbiAgdmFsaWRhdG9yPzogKCkgPT4gKHZhbHVlOiBUKSA9PiBzdHJpbmc7XHJcbiAgb25Ub3VjaGVkPzogKCkgPT4gdm9pZDtcclxuICBkaXNhYmxlPzogKCkgPT4gYm9vbGVhbjtcclxuICByZWFkb25seT86ICgpID0+IGJvb2xlYW47XHJcbiAgcmVxdWlyZWQ/OiAoKSA9PiBib29sZWFuO1xyXG4gIGxhYmVsPzogKCkgPT4gc3RyaW5nO1xyXG4gIGlkPzogKCkgPT4gc3RyaW5nO1xyXG4gIGhpbnQ/OiAoKSA9PiBzdHJpbmc7XHJcbiAgZGlydHlFcXVhbGl0eT86IFZhbHVlRXF1YWxpdHlGbjxUPjtcclxuICBvblJlc2V0PzogKCkgPT4gdm9pZDtcclxuICBjb250cm9sVHlwZT86IFRDb250cm9sVHlwZTtcclxuICBvdmVycmlkZVZhbGlkYXRpb24/OiAoKSA9PiBzdHJpbmc7XHJcbiAgcGVuZGluZz86ICgpID0+IGJvb2xlYW47XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIGBGb3JtQ29udHJvbFNpZ25hbGAsIGEgcmVhY3RpdmUgZm9ybSBjb250cm9sIHRoYXQgaG9sZHMgYSB2YWx1ZSBhbmQgdHJhY2tzIGl0c1xyXG4gKiB2YWxpZGl0eSwgZGlydHkgc3RhdGUsIHRvdWNoZWQgc3RhdGUsIGFuZCBvdGhlciBtZXRhZGF0YS5cclxuICpcclxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdGhlIGZvcm0gY29udHJvbCdzIHZhbHVlLlxyXG4gKiBAdHlwZVBhcmFtIFRQYXJlbnQgLSBUaGUgdHlwZSBvZiB0aGUgcGFyZW50IGZvcm0gY29udHJvbCdzIHZhbHVlIChpZiB0aGlzIGNvbnRyb2wgaXMgcGFydCBvZiBhIGdyb3VwIG9yIGFycmF5KS5cclxuICogQHR5cGVQYXJhbSBUQ29udHJvbFR5cGUgLSBUaGUgdHlwZSBvZiB0aGUgY29udHJvbC4gRGVmYXVsdHMgdG8gYCdjb250cm9sJ2AuXHJcbiAqIEB0eXBlUGFyYW0gVFBhcnRpYWxWYWx1ZSAtIFRoZSB0eXBlIG9mIHZhbHVlIHdoZW4gcGF0Y2hpbmdcclxuICogQHBhcmFtIGluaXRpYWwgLSBUaGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgY29udHJvbCwgb3IgYSBgRGVyaXZlZFNpZ25hbGAgaWYgdGhpcyBjb250cm9sIGlzIHBhcnQgb2YgYSBgZm9ybUdyb3VwYCBvciBgZm9ybUFycmF5YC5cclxuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBjb250cm9sLlxyXG4gKiBAcmV0dXJucyBBIGBGb3JtQ29udHJvbFNpZ25hbGAgaW5zdGFuY2UuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIC8vIENyZWF0ZSBhIHNpbXBsZSBmb3JtIGNvbnRyb2w6XHJcbiAqIGNvbnN0IG5hbWUgPSBmb3JtQ29udHJvbCgnSW5pdGlhbCBOYW1lJyk7XHJcbiAqXHJcbiAqIC8vIENyZWF0ZSBhIGZvcm0gY29udHJvbCB3aXRoIHZhbGlkYXRpb246XHJcbiAqIGNvbnN0IGFnZSA9IGZvcm1Db250cm9sKDAsIHtcclxuICogICB2YWxpZGF0b3I6ICgpID0+ICh2YWx1ZSkgPT4gdmFsdWUgPj0gMTggPyAnJyA6ICdNdXN0IGJlIGF0IGxlYXN0IDE4JyxcclxuICogfSk7XHJcbiAqXHJcbiAqIC8vIENyZWF0ZSBhIGRlcml2ZWQgZm9ybSBjb250cm9sIChlcXVpdmFsZW50IHRvIHRoZSBhYm92ZSwgYnV0IG1vcmUgZXhwbGljaXQpOlxyXG4gKiAgY29uc3QgdXNlciA9IHNpZ25hbCh7IG5hbWU6ICdKb2huIERvZScsIGFnZTogMzAgfSk7XHJcbiAqICBjb25zdCBuYW1lID0gZm9ybUNvbnRyb2woZGVyaXZlZCh1c2VyLCB7XHJcbiAqICAgIGZyb206ICh1KSA9PiB1Lm5hbWUsXHJcbiAqICAgIG9uQ2hhbmdlOiAobmV3TmFtZSkgPT4gdXNlci51cGRhdGUodSA9PiAoey4uLnUsIG5hbWU6IG5ld05hbWV9KSlcclxuICogIH0pKTtcclxuICpcclxuICogLy8gQ3JlYXRlIGEgZm9ybSBncm91cCB3aXRoIG5lc3RlZCBjb250cm9sczpcclxuICogY29uc3QgdXNlciA9IHNpZ25hbCh7IG5hbWU6ICdKb2huIERvZScsIGFnZTogMzAgfSk7XHJcbiAqIGNvbnN0IGZvcm0gPSBmb3JtR3JvdXAodXNlciwge1xyXG4gKiAgbmFtZTogZm9ybUNvbnRyb2woZGVyaXZlZCh1c2VyLCAnbmFtZScpKSxcclxuICogIGFnZTogZm9ybUNvbnRyb2woZGVyaXZlZCh1c2VyLCAnYWdlJykpLFxyXG4gKiB9KVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1Db250cm9sPFxyXG4gIFQsXHJcbiAgVFBhcmVudCA9IHVuZGVmaW5lZCxcclxuICBUQ29udHJvbFR5cGUgZXh0ZW5kcyBDb250cm9sVHlwZSA9ICdjb250cm9sJyxcclxuICBUUGFydGlhbFZhbHVlID0gVCB8IHVuZGVmaW5lZCxcclxuPihcclxuICBpbml0aWFsOiBEZXJpdmVkU2lnbmFsPFRQYXJlbnQsIFQ+IHwgVCxcclxuICBvcHQ/OiBDcmVhdGVGb3JtQ29udHJvbE9wdGlvbnM8VCwgVENvbnRyb2xUeXBlPixcclxuKTogRm9ybUNvbnRyb2xTaWduYWw8VCwgVFBhcmVudCwgVENvbnRyb2xUeXBlLCBUUGFydGlhbFZhbHVlPiB7XHJcbiAgY29uc3QgdmFsdWUgPSBpc1NpZ25hbChpbml0aWFsKSA/IGluaXRpYWwgOiBzaWduYWwoaW5pdGlhbCwgb3B0KTtcclxuICBjb25zdCBpbml0aWFsVmFsdWUgPSBzaWduYWwodW50cmFja2VkKHZhbHVlKSk7XHJcbiAgY29uc3QgZXEgPSBvcHQ/LmVxdWFsID8/IE9iamVjdC5pcztcclxuXHJcbiAgY29uc3QgZGlydHlFcSA9IG9wdD8uZGlydHlFcXVhbGl0eSA/PyBlcTtcclxuXHJcbiAgY29uc3QgZGlzYWJsZWQgPSBjb21wdXRlZCgoKSA9PiBvcHQ/LmRpc2FibGU/LigpID8/IGZhbHNlKTtcclxuICBjb25zdCByZWFkb25seSA9IGNvbXB1dGVkKCgpID0+IG9wdD8ucmVhZG9ubHk/LigpID8/IGZhbHNlKTtcclxuXHJcbiAgY29uc3QgZGlydHkgPSBjb21wdXRlZCgoKSA9PiAhZGlydHlFcSh2YWx1ZSgpLCBpbml0aWFsVmFsdWUoKSkpO1xyXG5cclxuICBjb25zdCB0b3VjaGVkID0gc2lnbmFsKGZhbHNlKTtcclxuXHJcbiAgY29uc3QgdmFsaWRhdG9yID0gY29tcHV0ZWQoKCkgPT4gb3B0Py52YWxpZGF0b3I/LigpID8/ICgoKSA9PiAnJykpO1xyXG5cclxuICBjb25zdCBlcnJvciA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgIGlmIChvcHQ/Lm92ZXJyaWRlVmFsaWRhdGlvbikgcmV0dXJuIG9wdC5vdmVycmlkZVZhbGlkYXRpb24oKTtcclxuICAgIGlmIChkaXNhYmxlZCgpIHx8IHJlYWRvbmx5KCkpIHJldHVybiAnJztcclxuICAgIHJldHVybiB2YWxpZGF0b3IoKSh2YWx1ZSgpKTtcclxuICB9KTtcclxuXHJcbiAgY29uc3QgbWFya0FzVG91Y2hlZCA9ICgpID0+IHtcclxuICAgIHRvdWNoZWQuc2V0KHRydWUpO1xyXG4gICAgb3B0Py5vblRvdWNoZWQ/LigpO1xyXG4gIH07XHJcbiAgY29uc3QgbWFya0FsbEFzVG91Y2hlZCA9IG1hcmtBc1RvdWNoZWQ7XHJcblxyXG4gIGNvbnN0IG1hcmtBc1ByaXN0aW5lID0gKCkgPT4gdG91Y2hlZC5zZXQoZmFsc2UpO1xyXG4gIGNvbnN0IG1hcmtBbGxBc1ByaXN0aW5lID0gbWFya0FzUHJpc3RpbmU7XHJcblxyXG4gIGNvbnN0IGxhYmVsID0gY29tcHV0ZWQoKCkgPT4gb3B0Py5sYWJlbD8uKCkgPz8gJycpO1xyXG5cclxuICBjb25zdCBwYXJ0aWFsVmFsdWUgPSBjb21wdXRlZCgoKSA9PiAoZGlydHkoKSA/IHZhbHVlKCkgOiB1bmRlZmluZWQpKTtcclxuXHJcbiAgY29uc3QgaW50ZXJuYWxSZWNvbmNpbGUgPSAobmV3VmFsdWU6IFQsIGZvcmNlID0gZmFsc2UpID0+IHtcclxuICAgIGNvbnN0IGlzRGlydHkgPSB1bnRyYWNrZWQoZGlydHkpO1xyXG5cclxuICAgIGlmICghaXNEaXJ0eSB8fCBmb3JjZSkge1xyXG4gICAgICAvLyB2ZXJ5IGRhbmdlcm91cyB1c2Ugb2YgdW50cmFja2VkIGhlcmUsIGRvbid0IGRvIHRoaXMgZXZlcnl3aGVyZSA6KVxyXG4gICAgICAvLyB0aGFua3MgdG8gIHUvc3luYWx4IGZvciB0aGUgaWRlYSB0byB1c2UgdW50cmFja2VkIGhlcmVcclxuXHJcbiAgICAgIHVudHJhY2tlZCgoKSA9PiB7XHJcbiAgICAgICAgaW5pdGlhbFZhbHVlLnNldChuZXdWYWx1ZSk7XHJcbiAgICAgICAgdmFsdWUuc2V0KG5ld1ZhbHVlKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgY29uc3QgcGVuZGluZyA9IGNvbXB1dGVkKCgpID0+IG9wdD8ucGVuZGluZz8uKCkgPz8gZmFsc2UpO1xyXG5cclxuICByZXR1cm4ge1xyXG4gICAgaWQ6IG9wdD8uaWQ/LigpID8/IGdlbmVyYXRlSUQoKSxcclxuICAgIHZhbHVlLFxyXG4gICAgZGlydHksXHJcbiAgICB0b3VjaGVkLFxyXG4gICAgZXJyb3IsXHJcbiAgICBsYWJlbCxcclxuICAgIHJlcXVpcmVkOiBjb21wdXRlZCgoKSA9PiBvcHQ/LnJlcXVpcmVkPy4oKSA/PyBmYWxzZSksXHJcbiAgICBkaXNhYmxlZCxcclxuICAgIHJlYWRvbmx5LFxyXG4gICAgcGVuZGluZyxcclxuICAgIHZhbGlkOiBjb21wdXRlZCgoKSA9PiAhcGVuZGluZygpICYmICFlcnJvcigpKSxcclxuICAgIGhpbnQ6IGNvbXB1dGVkKCgpID0+IG9wdD8uaGludD8uKCkgPz8gJycpLFxyXG4gICAgbWFya0FzVG91Y2hlZCxcclxuICAgIG1hcmtBbGxBc1RvdWNoZWQsXHJcbiAgICBtYXJrQXNQcmlzdGluZSxcclxuICAgIG1hcmtBbGxBc1ByaXN0aW5lLFxyXG4gICAgZnJvbTogKGlzU2lnbmFsKGluaXRpYWwpID8gaW5pdGlhbC5mcm9tIDogdW5kZWZpbmVkKSBhcyBGb3JtQ29udHJvbFNpZ25hbDxcclxuICAgICAgVCxcclxuICAgICAgVFBhcmVudCxcclxuICAgICAgVENvbnRyb2xUeXBlXHJcbiAgICA+Wydmcm9tJ10sXHJcbiAgICByZWNvbmNpbGU6IChuZXdWYWx1ZTogVCkgPT4gaW50ZXJuYWxSZWNvbmNpbGUobmV3VmFsdWUpLFxyXG4gICAgZm9yY2VSZWNvbmNpbGU6IChuZXdWYWx1ZTogVCkgPT4gaW50ZXJuYWxSZWNvbmNpbGUobmV3VmFsdWUsIHRydWUpLFxyXG4gICAgcmVzZXQ6ICgpID0+IHtcclxuICAgICAgb3B0Py5vblJlc2V0Py4oKTtcclxuICAgICAgdmFsdWUuc2V0KHVudHJhY2tlZChpbml0aWFsVmFsdWUpKTtcclxuICAgIH0sXHJcbiAgICByZXNldFdpdGhJbml0aWFsOiAoaW5pdGlhbDogVCkgPT4ge1xyXG4gICAgICBvcHQ/Lm9uUmVzZXQ/LigpO1xyXG4gICAgICBpbml0aWFsVmFsdWUuc2V0KGluaXRpYWwpO1xyXG4gICAgICB2YWx1ZS5zZXQoaW5pdGlhbCk7XHJcbiAgICB9LFxyXG4gICAgZXF1YWw6IGVxLFxyXG4gICAgY29udHJvbFR5cGU6IChvcHQ/LmNvbnRyb2xUeXBlID8/ICdjb250cm9sJykgYXMgVENvbnRyb2xUeXBlLFxyXG4gICAgcGFydGlhbFZhbHVlOiBwYXJ0aWFsVmFsdWUgYXMgU2lnbmFsPFRQYXJ0aWFsVmFsdWU+LFxyXG4gIH07XHJcbn1cclxuIl19","import { computed, linkedSignal, untracked, } from '@angular/core';\nimport { derived } from '@mmstack/primitives';\nimport { formControl, } from './form-control';\nimport { mergeArray } from './util';\nfunction createReconcileChildren(factory, opt) {\n return (length, source, prev) => {\n if (!prev) {\n const nextControls = [];\n for (let i = 0; i < length; i++) {\n nextControls.push(factory(derived(source, i, { equal: opt?.equal }), i));\n }\n return nextControls;\n }\n if (length === prev.length)\n return prev;\n const next = [...prev];\n if (length < prev.length) {\n next.splice(length);\n }\n else if (length > prev.length) {\n for (let i = prev.length; i < length; i++) {\n next.push(factory(derived(source, i, { equal: opt?.equal }), i));\n }\n }\n return next;\n };\n}\nexport function formArray(initial, factory, opt) {\n const eq = opt?.equal ?? Object.is;\n const arrayEqual = (a, b) => {\n if (a.length !== b.length)\n return false;\n if (!a.length)\n return true;\n return a.every((v, i) => eq(v, b[i]));\n };\n const min = computed(() => opt?.min?.() ?? 0, ...(ngDevMode ? [{ debugName: \"min\" }] : []));\n const max = computed(() => opt?.max?.() ?? Number.MAX_SAFE_INTEGER, ...(ngDevMode ? [{ debugName: \"max\" }] : []));\n const arrayOptions = {\n ...opt,\n equal: arrayEqual,\n dirtyEquality: (a, b) => a.length === b.length,\n controlType: 'array',\n };\n const ctrl = formControl(initial, arrayOptions);\n const length = computed(() => ctrl.value().length, ...(ngDevMode ? [{ debugName: \"length\" }] : []));\n const reconcileChildren = createReconcileChildren(factory, { equal: eq });\n // linkedSignal used to re-use previous value so that only length changes are affected and existing controls are kept, but updated\n const children = linkedSignal({\n source: () => length(),\n computation: (len, prev) => reconcileChildren(len, ctrl.value, prev?.value),\n });\n const ownError = computed(() => ctrl.error(), ...(ngDevMode ? [{ debugName: \"ownError\" }] : []));\n const error = computed(() => {\n const own = ownError();\n if (own)\n return own;\n if (!children().length)\n return '';\n return children()\n .map((c, idx) => (c.error() ? `${idx}: ${c.error()}` : ''))\n .filter(Boolean)\n .join('\\n');\n }, ...(ngDevMode ? [{ debugName: \"error\" }] : []));\n const dirty = computed(() => {\n if (ctrl.dirty())\n return true;\n if (!children().length)\n return false;\n return children().some((c) => c.dirty());\n }, ...(ngDevMode ? [{ debugName: \"dirty\" }] : []));\n const markAllAsTouched = () => {\n ctrl.markAllAsTouched();\n for (const c of untracked(children)) {\n c.markAllAsTouched();\n }\n };\n const markAllAsPristine = () => {\n ctrl.markAllAsPristine();\n for (const c of untracked(children)) {\n c.markAllAsPristine();\n }\n };\n const toPartialValue = opt?.toPartialValue ?? ((v) => v);\n const partialValue = computed(() => {\n if (!dirty())\n return undefined;\n return children().map((c) => {\n const pv = c.partialValue();\n if (pv)\n return pv;\n if (c.controlType === 'control')\n return undefined;\n // return full value for child objects/arrays as this cannot be partially patched without idx\n return toPartialValue(c.value());\n });\n }, ...(ngDevMode ? [{ debugName: \"partialValue\" }] : []));\n const touched = computed(() => ctrl.touched() ||\n !!(children().length && children().some((c) => c.touched())), ...(ngDevMode ? [{ debugName: \"touched\" }] : []));\n const reconcile = (newValue) => {\n const ctrls = untracked(children);\n for (let i = 0; i < newValue.length; i++) {\n ctrls.at(i)?.reconcile(newValue[i]); // reconcile existing controls that are relevant addition/removal will be handled after ctrl.reconcile through linkedSignal\n }\n ctrl.reconcile(mergeArray(newValue, untracked(ctrl.value)));\n };\n const forceReconcile = (newValue) => {\n const ctrls = untracked(children);\n for (let i = 0; i < newValue.length; i++) {\n ctrls.at(i)?.forceReconcile(newValue[i]);\n }\n ctrl.forceReconcile(newValue);\n };\n const childrenValid = computed(() => {\n if (!children().length)\n return true;\n return children().every((d) => d.valid());\n }, ...(ngDevMode ? [{ debugName: \"childrenValid\" }] : []));\n const childrenPending = computed(() => !!children().length && children().some((d) => d.pending()), ...(ngDevMode ? [{ debugName: \"childrenPending\" }] : []));\n return {\n ...ctrl,\n ownError,\n error,\n valid: computed(() => ctrl.valid() && childrenValid()),\n pending: computed(() => ctrl.pending() || childrenPending()),\n touched,\n children,\n dirty,\n markAllAsTouched,\n markAllAsPristine,\n min,\n max,\n partialValue,\n canAdd: computed(() => !ctrl.disabled() && !ctrl.readonly() && length() < max()),\n canRemove: computed(() => !ctrl.disabled() && !ctrl.readonly() && length() > min()),\n reconcile,\n forceReconcile,\n reset: () => {\n for (const c of untracked(children)) {\n c.reset();\n }\n ctrl.reset();\n },\n resetWithInitial: (initial) => {\n const ctrls = untracked(children);\n for (let i = 0; i < initial.length; i++) {\n ctrls.at(i)?.resetWithInitial(initial[i]);\n }\n ctrl.resetWithInitial(initial);\n },\n push: (next) => ctrl.value.update((cur) => [...cur, next]),\n remove: (idx) => ctrl.value.update((cur) => cur.filter((_, i) => i !== idx)),\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1hcnJheS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Zvcm0vY29yZS9zcmMvbGliL2Zvcm0tYXJyYXkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFFBQVEsRUFDUixZQUFZLEVBQ1osU0FBUyxHQUdWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQXNCLE1BQU0scUJBQXFCLENBQUM7QUFDbEUsT0FBTyxFQUNMLFdBQVcsR0FHWixNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxRQUFRLENBQUM7QUF3Q3BDLFNBQVMsdUJBQXVCLENBSTlCLE9BQXNFLEVBQ3RFLEdBQXVDO0lBRXZDLE9BQU8sQ0FDTCxNQUFjLEVBQ2QsTUFBMkIsRUFDM0IsSUFBeUIsRUFDTCxFQUFFO1FBQ3RCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNWLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQztZQUV4QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ2hDLFlBQVksQ0FBQyxJQUFJLENBQ2YsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUN0RCxDQUFDO1lBQ0osQ0FBQztZQUVELE9BQU8sWUFBWSxDQUFDO1FBQ3RCLENBQUM7UUFFRCxJQUFJLE1BQU0sS0FBSyxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBRXhDLE1BQU0sSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUV2QixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDekIsSUFB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QUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUMsQ0FBQztZQUNELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNqQyxDQUFDO1FBQ0QsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMxRCxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUNkLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0tBQzlELENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBjb21wdXRlZCxcclxuICBsaW5rZWRTaWduYWwsXHJcbiAgdW50cmFja2VkLFxyXG4gIHR5cGUgU2lnbmFsLFxyXG4gIHR5cGUgV3JpdGFibGVTaWduYWwsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGRlcml2ZWQsIHR5cGUgRGVyaXZlZFNpZ25hbCB9IGZyb20gJ0BtbXN0YWNrL3ByaW1pdGl2ZXMnO1xyXG5pbXBvcnQge1xyXG4gIGZvcm1Db250cm9sLFxyXG4gIHR5cGUgQ3JlYXRlRm9ybUNvbnRyb2xPcHRpb25zLFxyXG4gIHR5cGUgRm9ybUNvbnRyb2xTaWduYWwsXHJcbn0gZnJvbSAnLi9mb3JtLWNvbnRyb2wnO1xyXG5pbXBvcnQgeyB0eXBlIFNpZ25hbFZhbHVlIH0gZnJvbSAnLi9zaWduYWwtdmFsdWUudHlwZSc7XHJcbmltcG9ydCB7IG1lcmdlQXJyYXkgfSBmcm9tICcuL3V0aWwnO1xyXG5cclxuZXhwb3J0IHR5cGUgRm9ybUFycmF5U2lnbmFsPFxyXG4gIFQsXHJcbiAgVEluZGl2aWR1YWxTdGF0ZSBleHRlbmRzIEZvcm1Db250cm9sU2lnbmFsPFxyXG4gICAgVCxcclxuICAgIGFueSxcclxuICAgIGFueSxcclxuICAgIGFueVxyXG4gID4gPSBGb3JtQ29udHJvbFNpZ25hbDxULCBhbnksIGFueSwgYW55PixcclxuICBUUGFyZW50ID0gdW5kZWZpbmVkLFxyXG4+ID0gRm9ybUNvbnRyb2xTaWduYWw8XHJcbiAgVFtdLFxyXG4gIFRQYXJlbnQsXHJcbiAgJ2FycmF5JyxcclxuICB8IEV4Y2x1ZGU8U2lnbmFsVmFsdWU8VEluZGl2aWR1YWxTdGF0ZVsncGFydGlhbFZhbHVlJ10+LCBudWxsIHwgdW5kZWZpbmVkPltdXHJcbiAgfCB1bmRlZmluZWRcclxuPiAmIHtcclxuICBvd25FcnJvcjogU2lnbmFsPHN0cmluZz47XHJcbiAgY2hpbGRyZW46IFNpZ25hbDxUSW5kaXZpZHVhbFN0YXRlW10+O1xyXG4gIHB1c2g6ICh2YWx1ZTogVCkgPT4gdm9pZDsgLy8gYWRkIG5ldyBjb250cm9sIHdpdGggdmFsdWVcclxuICByZW1vdmU6IChpbmRleDogbnVtYmVyKSA9PiB2b2lkOyAvLyByZW1vdmUgYXQgaW5kZXhcclxuICBtaW46IFNpZ25hbDxudW1iZXI+OyAvLyBmb3IgZGlzcGxheSBwdXJwb3Nlc1xyXG4gIG1heDogU2lnbmFsPG51bWJlcj47IC8vIGZvciBkaXNwbGF5IHB1cnBvc2VzXHJcbiAgY2FuQWRkOiBTaWduYWw8Ym9vbGVhbj47IC8vIGRpc2FibGUgYWRkIGJ1dHRvbiBpZiBmYWxzZVxyXG4gIGNhblJlbW92ZTogU2lnbmFsPGJvb2xlYW4+OyAvLyBkaXNhYmxlIHJlbW92ZSBidXR0b25zIGlmIGZhbHNlXHJcbn07XHJcblxyXG5leHBvcnQgdHlwZSBDcmVhdGVGb3JtQXJyYXlTaWduYWxPcHRpb25zPFxyXG4gIFQsXHJcbiAgVEluZGl2aWR1YWxTdGF0ZSBleHRlbmRzIEZvcm1Db250cm9sU2lnbmFsPFQsIGFueSwgYW55LCBhbnk+LFxyXG4+ID0gT21pdDxDcmVhdGVGb3JtQ29udHJvbE9wdGlvbnM8VFtdPiwgJ2VxdWFsJz4gJiB7XHJcbiAgbWluPzogKCkgPT4gbnVtYmVyO1xyXG4gIG1heD86ICgpID0+IG51bWJlcjtcclxuICBlcXVhbD86IChhOiBULCBiOiBUKSA9PiBib29sZWFuO1xyXG4gIHRvUGFydGlhbFZhbHVlPzogKFxyXG4gICAgdjogVCxcclxuICApID0+IEV4Y2x1ZGU8U2lnbmFsVmFsdWU8VEluZGl2aWR1YWxTdGF0ZVsncGFydGlhbFZhbHVlJ10+LCBudWxsIHwgdW5kZWZpbmVkPjtcclxufTtcclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZVJlY29uY2lsZUNoaWxkcmVuPFxyXG4gIFQsXHJcbiAgVEluZGl2aWR1YWxTdGF0ZSBleHRlbmRzIEZvcm1Db250cm9sU2lnbmFsPFQsIGFueSwgYW55LCBhbnk+LFxyXG4+KFxyXG4gIGZhY3Rvcnk6ICh2YWw6IERlcml2ZWRTaWduYWw8VFtdLCBUPiwgaWR4OiBudW1iZXIpID0+IFRJbmRpdmlkdWFsU3RhdGUsXHJcbiAgb3B0OiB7IGVxdWFsOiAoYTogVCwgYjogVCkgPT4gYm9vbGVhbiB9LFxyXG4pIHtcclxuICByZXR1cm4gKFxyXG4gICAgbGVuZ3RoOiBudW1iZXIsXHJcbiAgICBzb3VyY2U6IFdyaXRhYmxlU2lnbmFsPFRbXT4sXHJcbiAgICBwcmV2PzogVEluZGl2aWR1YWxTdGF0ZVtdLFxyXG4gICk6IFRJbmRpdmlkdWFsU3RhdGVbXSA9PiB7XHJcbiAgICBpZiAoIXByZXYpIHtcclxuICAgICAgY29uc3QgbmV4dENvbnRyb2xzID0gW107XHJcblxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgbmV4dENvbnRyb2xzLnB1c2goXHJcbiAgICAgICAgICBmYWN0b3J5KGRlcml2ZWQoc291cmNlLCBpLCB7IGVxdWFsOiBvcHQ/LmVxdWFsIH0pLCBpKSxcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gbmV4dENvbnRyb2xzO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChsZW5ndGggPT09IHByZXYubGVuZ3RoKSByZXR1cm4gcHJldjtcclxuXHJcbiAgICBjb25zdCBuZXh0ID0gWy4uLnByZXZdO1xyXG5cclxuICAgIGlmIChsZW5ndGggPCBwcmV2Lmxlbmd0aCkge1xyXG4gICAgICBuZXh0LnNwbGljZShsZW5ndGgpO1xyXG4gICAgfSBlbHNlIGlmIChsZW5ndGggPiBwcmV2Lmxlbmd0aCkge1xyXG4gICAgICBmb3IgKGxldCBpID0gcHJldi5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xyXG4gICAgICAgIG5leHQucHVzaChmYWN0b3J5KGRlcml2ZWQoc291cmNlLCBpLCB7IGVxdWFsOiBvcHQ/LmVxdWFsIH0pLCBpKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbmV4dDtcclxuICB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZm9ybUFycmF5PFxyXG4gIFQsXHJcbiAgVEluZGl2aWR1YWxTdGF0ZSBleHRlbmRzIEZvcm1Db250cm9sU2lnbmFsPFxyXG4gICAgVCxcclxuICAgIGFueSxcclxuICAgIGFueSxcclxuICAgIGFueVxyXG4gID4gPSBGb3JtQ29udHJvbFNpZ25hbDxULCBhbnksIGFueSwgYW55PixcclxuICBUUGFyZW50ID0gdW5kZWZpbmVkLFxyXG4+KFxyXG4gIGluaXRpYWw6IFRbXSB8IERlcml2ZWRTaWduYWw8VFBhcmVudCwgVFtdPixcclxuICBmYWN0b3J5OiAodmFsOiBEZXJpdmVkU2lnbmFsPFRbXSwgVD4sIGlkeDogbnVtYmVyKSA9PiBUSW5kaXZpZHVhbFN0YXRlLFxyXG4gIG9wdD86IENyZWF0ZUZvcm1BcnJheVNpZ25hbE9wdGlvbnM8VCwgVEluZGl2aWR1YWxTdGF0ZT4sXHJcbik6IEZvcm1BcnJheVNpZ25hbDxULCBUSW5kaXZpZHVhbFN0YXRlLCBUUGFyZW50PiB7XHJcbiAgY29uc3QgZXEgPSBvcHQ/LmVxdWFsID8/IE9iamVjdC5pcztcclxuXHJcbiAgY29uc3QgYXJyYXlFcXVhbCA9IChhOiBUW10sIGI6IFRbXSkgPT4ge1xyXG4gICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgaWYgKCFhLmxlbmd0aCkgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgcmV0dXJuIGEuZXZlcnkoKHYsIGkpID0+IGVxKHYsIGJbaV0pKTtcclxuICB9O1xyXG5cclxuICBjb25zdCBtaW4gPSBjb21wdXRlZCgoKSA9PiBvcHQ/Lm1pbj8uKCkgPz8gMCk7XHJcbiAgY29uc3QgbWF4ID0gY29tcHV0ZWQoKCkgPT4gb3B0Py5tYXg/LigpID8/IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKTtcclxuXHJcbiAgY29uc3QgYXJyYXlPcHRpb25zOiBDcmVhdGVGb3JtQ29udHJvbE9wdGlvbnM8VFtdLCAnYXJyYXknPiA9IHtcclxuICAgIC4uLm9wdCxcclxuICAgIGVxdWFsOiBhcnJheUVxdWFsLFxyXG4gICAgZGlydHlFcXVhbGl0eTogKGEsIGIpID0+IGEubGVuZ3RoID09PSBiLmxlbmd0aCxcclxuICAgIGNvbnRyb2xUeXBlOiAnYXJyYXknLFxyXG4gIH07XHJcblxyXG4gIGNvbnN0IGN0cmwgPSBmb3JtQ29udHJvbDxUW10sIFRQYXJlbnQsICdhcnJheSc+KFxyXG4gICAgaW5pdGlhbCxcclxuICAgIGFycmF5T3B0aW9ucyxcclxuICApIHNhdGlzZmllcyBGb3JtQ29udHJvbFNpZ25hbDxUW10sIFRQYXJlbnQsICdhcnJheSc+O1xyXG5cclxuICBjb25zdCBsZW5ndGggPSBjb21wdXRlZCgoKSA9PiBjdHJsLnZhbHVlKCkubGVuZ3RoKTtcclxuXHJcbiAgY29uc3QgcmVjb25jaWxlQ2hpbGRyZW4gPSBjcmVhdGVSZWNvbmNpbGVDaGlsZHJlbjxULCBUSW5kaXZpZHVhbFN0YXRlPihcclxuICAgIGZhY3RvcnksXHJcbiAgICB7IGVxdWFsOiBlcSB9LFxyXG4gICk7XHJcblxyXG4gIC8vIGxpbmtlZFNpZ25hbCB1c2VkIHRvIHJlLXVzZSBwcmV2aW91cyB2YWx1ZSBzbyB0aGF0IG9ubHkgbGVuZ3RoIGNoYW5nZXMgYXJlIGFmZmVjdGVkIGFuZCBleGlzdGluZyBjb250cm9scyBhcmUga2VwdCwgYnV0IHVwZGF0ZWRcclxuICBjb25zdCBjaGlsZHJlbiA9IGxpbmtlZFNpZ25hbDxudW1iZXIsIFRJbmRpdmlkdWFsU3RhdGVbXT4oe1xyXG4gICAgc291cmNlOiAoKSA9PiBsZW5ndGgoKSxcclxuICAgIGNvbXB1dGF0aW9uOiAobGVuLCBwcmV2KSA9PiByZWNvbmNpbGVDaGlsZHJlbihsZW4sIGN0cmwudmFsdWUsIHByZXY/LnZhbHVlKSxcclxuICB9KTtcclxuXHJcbiAgY29uc3Qgb3duRXJyb3IgPSBjb21wdXRlZCgoKSA9PiBjdHJsLmVycm9yKCkpO1xyXG5cclxuICBjb25zdCBlcnJvciA9IGNvbXB1dGVkKCgpOiBzdHJpbmcgPT4ge1xyXG4gICAgY29uc3Qgb3duID0gb3duRXJyb3IoKTtcclxuICAgIGlmIChvd24pIHJldHVybiBvd247XHJcbiAgICBpZiAoIWNoaWxkcmVuKCkubGVuZ3RoKSByZXR1cm4gJyc7XHJcbiAgICByZXR1cm4gY2hpbGRyZW4oKVxyXG4gICAgICAubWFwKChjLCBpZHgpID0+IChjLmVycm9yKCkgPyBgJHtpZHh9OiAke2MuZXJyb3IoKX1gIDogJycpKVxyXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pXHJcbiAgICAgIC5qb2luKCdcXG4nKTtcclxuICB9KTtcclxuXHJcbiAgY29uc3QgZGlydHkgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICBpZiAoY3RybC5kaXJ0eSgpKSByZXR1cm4gdHJ1ZTtcclxuICAgIGlmICghY2hpbGRyZW4oKS5sZW5ndGgpIHJldHVybiBmYWxzZTtcclxuICAgIHJldHVybiBjaGlsZHJlbigpLnNvbWUoKGMpID0+IGMuZGlydHkoKSk7XHJcbiAgfSk7XHJcblxyXG4gIGNvbnN0IG1hcmtBbGxBc1RvdWNoZWQgPSAoKSA9PiB7XHJcbiAgICBjdHJsLm1hcmtBbGxBc1RvdWNoZWQoKTtcclxuICAgIGZvciAoY29uc3QgYyBvZiB1bnRyYWNrZWQoY2hpbGRyZW4pKSB7XHJcbiAgICAgIGMubWFya0FsbEFzVG91Y2hlZCgpO1xyXG4gICAgfVxyXG4gIH07XHJcbiAgY29uc3QgbWFya0FsbEFzUHJpc3RpbmUgPSAoKSA9PiB7XHJcbiAgICBjdHJsLm1hcmtBbGxBc1ByaXN0aW5lKCk7XHJcbiAgICBmb3IgKGNvbnN0IGMgb2YgdW50cmFja2VkKGNoaWxkcmVuKSkge1xyXG4gICAgICBjLm1hcmtBbGxBc1ByaXN0aW5lKCk7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgY29uc3QgdG9QYXJ0aWFsVmFsdWUgPSBvcHQ/LnRvUGFydGlhbFZhbHVlID8/ICgodjogVCkgPT4gdik7XHJcbiAgY29uc3QgcGFydGlhbFZhbHVlID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgaWYgKCFkaXJ0eSgpKSByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgcmV0dXJuIGNoaWxkcmVuKCkubWFwKChjKSA9PiB7XHJcbiAgICAgIGNvbnN0IHB2ID0gYy5wYXJ0aWFsVmFsdWUoKTtcclxuICAgICAgaWYgKHB2KSByZXR1cm4gcHY7XHJcbiAgICAgIGlmIChjLmNvbnRyb2xUeXBlID09PSAnY29udHJvbCcpIHJldHVybiB1bmRlZmluZWQ7XHJcblxyXG4gICAgICAvLyByZXR1cm4gZnVsbCB2YWx1ZSBmb3IgIGNoaWxkIG9iamVjdHMvYXJyYXlzIGFzIHRoaXMgY2Fubm90IGJlIHBhcnRpYWxseSBwYXRjaGVkIHdpdGhvdXQgaWR4XHJcbiAgICAgIHJldHVybiB0b1BhcnRpYWxWYWx1ZShjLnZhbHVlKCkpO1xyXG4gICAgfSk7XHJcbiAgfSk7XHJcblxyXG4gIGNvbnN0IHRvdWNoZWQgPSBjb21wdXRlZChcclxuICAgICgpID0+XHJcbiAgICAgIGN0cmwudG91Y2hlZCgpIHx8XHJcbiAgICAgICEhKGNoaWxkcmVuKCkubGVuZ3RoICYmIGNoaWxkcmVuKCkuc29tZSgoYykgPT4gYy50b3VjaGVkKCkpKSxcclxuICApO1xyXG5cclxuICBjb25zdCByZWNvbmNpbGUgPSAobmV3VmFsdWU6IFRbXSkgPT4ge1xyXG4gICAgY29uc3QgY3RybHMgPSB1bnRyYWNrZWQoY2hpbGRyZW4pO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmV3VmFsdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY3RybHMuYXQoaSk/LnJlY29uY2lsZShuZXdWYWx1ZVtpXSk7IC8vIHJlY29uY2lsZSBleGlzdGluZyBjb250cm9scyB0aGF0IGFyZSByZWxldmFudCBhZGRpdGlvbi9yZW1vdmFsIHdpbGwgYmUgaGFuZGxlZCBhZnRlciBjdHJsLnJlY29uY2lsZSB0aHJvdWdoIGxpbmtlZFNpZ25hbFxyXG4gICAgfVxyXG5cclxuICAgIGN0cmwucmVjb25jaWxlKG1lcmdlQXJyYXkobmV3VmFsdWUsIHVudHJhY2tlZChjdHJsLnZhbHVlKSkpO1xyXG4gIH07XHJcblxyXG4gIGNvbnN0IGZvcmNlUmVjb25jaWxlID0gKG5ld1ZhbHVlOiBUW10pID0+IHtcclxuICAgIGNvbnN0IGN0cmxzID0gdW50cmFja2VkKGNoaWxkcmVuKTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5ld1ZhbHVlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGN0cmxzLmF0KGkpPy5mb3JjZVJlY29uY2lsZShuZXdWYWx1ZVtpXSk7XHJcbiAgICB9XHJcblxyXG4gICAgY3RybC5mb3JjZVJlY29uY2lsZShuZXdWYWx1ZSk7XHJcbiAgfTtcclxuXHJcbiAgY29uc3QgY2hpbGRyZW5WYWxpZCA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgIGlmICghY2hpbGRyZW4oKS5sZW5ndGgpIHJldHVybiB0cnVlO1xyXG4gICAgcmV0dXJuIGNoaWxkcmVuKCkuZXZlcnkoKGQpID0+IGQudmFsaWQoKSk7XHJcbiAgfSk7XHJcblxyXG4gIGNvbnN0IGNoaWxkcmVuUGVuZGluZyA9IGNvbXB1dGVkKFxyXG4gICAgKCkgPT4gISFjaGlsZHJlbigpLmxlbmd0aCAmJiBjaGlsZHJlbigpLnNvbWUoKGQpID0+IGQucGVuZGluZygpKSxcclxuICApO1xyXG5cclxuICByZXR1cm4ge1xyXG4gICAgLi4uY3RybCxcclxuICAgIG93bkVycm9yLFxyXG4gICAgZXJyb3IsXHJcbiAgICB2YWxpZDogY29tcHV0ZWQoKCkgPT4gY3RybC52YWxpZCgpICYmIGNoaWxkcmVuVmFsaWQoKSksXHJcbiAgICBwZW5kaW5nOiBjb21wdXRlZCgoKSA9PiBjdHJsLnBlbmRpbmcoKSB8fCBjaGlsZHJlblBlbmRpbmcoKSksXHJcbiAgICB0b3VjaGVkLFxyXG4gICAgY2hpbGRyZW4sXHJcbiAgICBkaXJ0eSxcclxuICAgIG1hcmtBbGxBc1RvdWNoZWQsXHJcbiAgICBtYXJrQWxsQXNQcmlzdGluZSxcclxuICAgIG1pbixcclxuICAgIG1heCxcclxuICAgIHBhcnRpYWxWYWx1ZSxcclxuICAgIGNhbkFkZDogY29tcHV0ZWQoXHJcbiAgICAgICgpID0+ICFjdHJsLmRpc2FibGVkKCkgJiYgIWN0cmwucmVhZG9ubHkoKSAmJiBsZW5ndGgoKSA8IG1heCgpLFxyXG4gICAgKSxcclxuICAgIGNhblJlbW92ZTogY29tcHV0ZWQoXHJcbiAgICAgICgpID0+ICFjdHJsLmRpc2FibGVkKCkgJiYgIWN0cmwucmVhZG9ubHkoKSAmJiBsZW5ndGgoKSA+IG1pbigpLFxyXG4gICAgKSxcclxuICAgIHJlY29uY2lsZSxcclxuICAgIGZvcmNlUmVjb25jaWxlLFxyXG4gICAgcmVzZXQ6ICgpID0+IHtcclxuICAgICAgZm9yIChjb25zdCBjIG9mIHVudHJhY2tlZChjaGlsZHJlbikpIHtcclxuICAgICAgICBjLnJlc2V0KCk7XHJcbiAgICAgIH1cclxuICAgICAgY3RybC5yZXNldCgpO1xyXG4gICAgfSxcclxuICAgIHJlc2V0V2l0aEluaXRpYWw6IChpbml0aWFsOiBUW10pID0+IHtcclxuICAgICAgY29uc3QgY3RybHMgPSB1bnRyYWNrZWQoY2hpbGRyZW4pO1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGluaXRpYWwubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjdHJscy5hdChpKT8ucmVzZXRXaXRoSW5pdGlhbChpbml0aWFsW2ldKTtcclxuICAgICAgfVxyXG4gICAgICBjdHJsLnJlc2V0V2l0aEluaXRpYWwoaW5pdGlhbCk7XHJcbiAgICB9LFxyXG4gICAgcHVzaDogKG5leHQpID0+IGN0cmwudmFsdWUudXBkYXRlKChjdXIpID0+IFsuLi5jdXIsIG5leHRdKSxcclxuICAgIHJlbW92ZTogKGlkeCkgPT5cclxuICAgICAgY3RybC52YWx1ZS51cGRhdGUoKGN1cikgPT4gY3VyLmZpbHRlcigoXywgaSkgPT4gaSAhPT0gaWR4KSksXHJcbiAgfTtcclxufVxyXG4iXX0=","import { computed, isSignal, signal, untracked, } from '@angular/core';\nimport { isDerivation, toFakeSignalDerivation, } from '@mmstack/primitives';\nimport { formControl, } from './form-control';\nimport { mergeIfObject } from './util';\n/**\n * Creates a `FormGroupSignal`, which aggregates a set of child form controls into a single object.\n *\n * @typeParam T - The type of the form group's value (an object).\n * @typeParam TDerivations - A record where keys are the names of the child controls and values are the `FormControlSignal` instances.\n * @typeParam TParent - The type of the parent form control's value (if this group is nested within another group or array).\n * @param initial - The initial value of the form group (or a `WritableSignal` or `DerivedSignal` if the group is nested).\n * @param providedChildren - An object containing the child `FormControlSignal` instances, or a function that returns such an object.\n * Using a function allows for dynamic creation of child controls (e.g., in response to changes in other signals).\n * @param options - Optional configuration options for the form group.\n * @returns A `FormGroupSignal` instance.\n *\n * @example\n * // Create a simple form group:\n * const user = signal({ name: 'John Doe', age: 30 });\n * const form = formGroup(user, {\n * name: formControl(derived(user, 'name')),\n * age: formControl(derived(user, 'age')),\n * })\n *\n * // Create a nested form group:\n * const user = signal({ name: 'John', age: 30, address: {street: \"Some street\"} });\n *\n * const address = derived(user, 'address');\n * const userForm = formGroup(user, {\n * name: formControl(derived(user, 'name')),\n * age: formControl(derived(user, 'age')),\n * address: formGroup(address, {\n * street: formControl(derived(address, (address) => address.street), {\n * validator: () => (value) => value ? \"\" : \"required!\"\n * }) // you can create deeply nested structures.\n * })\n * });\n *\n * // Create a form group with dynamically created children replaced rare FormRecord requirements.\n * const showAddress = signal(false);\n * type Characteristic = {\n * valueType: 'string';\n * value: string;\n * } | {\n * valueType: 'number';\n * value: number;\n * }\n * const char = signal<Characteristic>({ valueType: 'string', value: '' });\n * const charForm = formGroup(char, () => {\n * if (char().valueType === 'string) return createStringControl(char);\n * return createNumberControl(char);\n * });\n *\n */\nexport function formGroup(initial, providedChildren, opt) {\n const valueSignal = isSignal(initial) ? initial : signal(initial);\n // we fake a derivation if not present, so that .from is present on the signal\n const value = isDerivation(valueSignal)\n ? valueSignal\n : toFakeSignalDerivation(valueSignal);\n // we allow for a function/signal to be passed, this case should only be used if the child controls change dependent upon something, say if a formControl is flipped into a formGroup.\n const children = typeof providedChildren === 'function'\n ? computed(() => providedChildren())\n : computed(() => providedChildren);\n // array allows for easier handling\n const derivationsArray = computed(() => Object.values(children()), ...(ngDevMode ? [{ debugName: \"derivationsArray\" }] : []));\n const childrenDirty = computed(() => !!derivationsArray().length && derivationsArray().some((d) => d.dirty()), ...(ngDevMode ? [{ debugName: \"childrenDirty\" }] : []));\n // by default dont compare object references, just use childrenDirtySignal\n const baseDirtyEq = opt?.dirtyEquality ?? opt?.equal ?? (() => true);\n // function which calls a signal becomes a signal\n const dirtyEquality = (a, b) => {\n return baseDirtyEq(a, b) && !childrenDirty();\n };\n // group control\n const ctrl = formControl(value, {\n ...opt,\n dirtyEquality,\n controlType: 'group',\n readonly: () => {\n // readonly if is readonly or all children are readonly\n if (opt?.readonly?.())\n return true;\n return (!!derivationsArray().length &&\n derivationsArray().every((d) => d.readonly()));\n },\n disable: () => {\n if (opt?.disable?.())\n return true;\n return (!!derivationsArray().length &&\n derivationsArray().every((d) => d.disabled()));\n },\n });\n const childrenTouched = computed(() => !!derivationsArray().length &&\n derivationsArray().some((d) => d.touched()), ...(ngDevMode ? [{ debugName: \"childrenTouched\" }] : []));\n const touched = computed(() => ctrl.touched() || childrenTouched(), ...(ngDevMode ? [{ debugName: \"touched\" }] : []));\n const childError = computed(() => {\n if (!derivationsArray().length)\n return '';\n return derivationsArray()\n .map((d) => (d.error() ? `${d.label()}: ${d.error()}` : ''))\n .filter(Boolean)\n .join('\\n');\n }, ...(ngDevMode ? [{ debugName: \"childError\" }] : []));\n const error = computed(() => {\n const ownError = ctrl.error();\n if (ownError)\n return ownError;\n return childError() ? 'INVALID' : '';\n }, ...(ngDevMode ? [{ debugName: \"error\" }] : []));\n const markAllAsTouched = () => {\n ctrl.markAllAsTouched();\n for (const ctrl of untracked(derivationsArray)) {\n ctrl.markAllAsTouched();\n }\n };\n const markAllAsPristine = () => {\n ctrl.markAllAsPristine();\n for (const ctrl of untracked(derivationsArray)) {\n ctrl.markAllAsPristine();\n }\n };\n const reconcile = (newValue) => {\n // set the children values based on the derivation of the new value\n for (const ctrl of untracked(derivationsArray)) {\n const from = ctrl.from;\n if (!from)\n continue;\n ctrl.reconcile(from(newValue));\n }\n ctrl.reconcile(mergeIfObject(newValue, untracked(value)));\n };\n const forceReconcile = (newValue) => {\n for (const ctrl of untracked(derivationsArray)) {\n const from = ctrl.from;\n if (!from)\n continue;\n ctrl.forceReconcile(from(newValue));\n }\n ctrl.forceReconcile(newValue);\n };\n const createBaseValueFn = opt?.createBasePartialValue;\n const basePartialValue = createBaseValueFn\n ? computed(() => createBaseValueFn(ctrl.value()))\n : computed(() => ({}));\n const partialValue = computed(() => {\n const obj = {\n ...basePartialValue(),\n };\n if (!ctrl.dirty())\n return obj;\n for (const [key, ctrl] of Object.entries(children())) {\n const pv = ctrl.partialValue();\n if (pv === undefined)\n continue;\n obj[key] = pv;\n }\n return obj;\n }, ...(ngDevMode ? [{ debugName: \"partialValue\" }] : []));\n const childrenValid = computed(() => {\n if (!derivationsArray().length)\n return true;\n return derivationsArray().every((d) => d.valid());\n }, ...(ngDevMode ? [{ debugName: \"childrenValid\" }] : []));\n const childrenPending = computed(() => !!derivationsArray().length &&\n derivationsArray().some((d) => d.pending()), ...(ngDevMode ? [{ debugName: \"childrenPending\" }] : []));\n return {\n ...ctrl,\n children,\n partialValue,\n reconcile,\n forceReconcile,\n ownError: ctrl.error,\n touched,\n error,\n valid: computed(() => ctrl.valid() && childrenValid()),\n pending: computed(() => ctrl.pending() || childrenPending()),\n markAllAsPristine,\n markAllAsTouched,\n reset: () => {\n for (const ctrl of untracked(derivationsArray)) {\n ctrl.reset();\n }\n ctrl.reset();\n },\n resetWithInitial: (initial) => {\n for (const ctrl of untracked(derivationsArray)) {\n const from = ctrl.from;\n if (from)\n ctrl.resetWithInitial(from(initial));\n else\n ctrl.reset();\n }\n ctrl.resetWithInitial(initial);\n },\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1ncm91cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Zvcm0vY29yZS9zcmMvbGliL2Zvcm0tZ3JvdXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFFBQVEsRUFDUixRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsR0FHVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsWUFBWSxFQUNaLHNCQUFzQixHQUV2QixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFDTCxXQUFXLEdBR1osTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBZ0V2Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWlERztBQUNILE1BQU0sVUFBVSxTQUFTLENBS3ZCLE9BQTBELEVBQzFELGdCQUFxRCxFQUNyRCxHQUE2QztJQUU3QyxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2xFLDhFQUE4RTtJQUM5RSxNQUFNLEtBQUssR0FBRyxZQUFZLENBQWEsV0FBVyxDQUFDO1FBQ2pELENBQUMsQ0FBQyxXQUFXO1FBQ2IsQ0FBQyxDQUFDLHNCQUFzQixDQUFhLFdBQVcsQ0FBQyxDQUFDO0lBRXBELHNMQUFzTDtJQUN0TCxNQUFNLFFBQVEsR0FDWixPQUFPLGdCQUFnQixLQUFLLFVBQVU7UUFDcEMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUV2QyxtQ0FBbUM7SUFDbkMsTUFBTSxnQkFBZ0IsR0FB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SUFBSSxTQUFTLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO2dCQUMvQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO2dCQUN2QixJQUFJLElBQUk7b0JBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDOztvQkFDMUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3BCLENBQUM7WUFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDakMsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBjb21wdXRlZCxcclxuICBpc1NpZ25hbCxcclxuICBzaWduYWwsXHJcbiAgdW50cmFja2VkLFxyXG4gIHR5cGUgU2lnbmFsLFxyXG4gIHR5cGUgV3JpdGFibGVTaWduYWwsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgaXNEZXJpdmF0aW9uLFxyXG4gIHRvRmFrZVNpZ25hbERlcml2YXRpb24sXHJcbiAgdHlwZSBEZXJpdmVkU2lnbmFsLFxyXG59IGZyb20gJ0BtbXN0YWNrL3ByaW1pdGl2ZXMnO1xyXG5pbXBvcnQge1xyXG4gIGZvcm1Db250cm9sLFxyXG4gIHR5cGUgQ3JlYXRlRm9ybUNvbnRyb2xPcHRpb25zLFxyXG4gIHR5cGUgRm9ybUNvbnRyb2xTaWduYWwsXHJcbn0gZnJvbSAnLi9mb3JtLWNvbnRyb2wnO1xyXG5pbXBvcnQgeyB0eXBlIFNpZ25hbFZhbHVlIH0gZnJvbSAnLi9zaWduYWwtdmFsdWUudHlwZSc7XHJcbmltcG9ydCB7IG1lcmdlSWZPYmplY3QgfSBmcm9tICcuL3V0aWwnO1xyXG5cclxudHlwZSBBbnlPYmplY3QgPSBSZWNvcmQ8UHJvcGVydHlLZXksIGFueT47XHJcblxyXG4vKipcclxuICogRXh0cmFjdHMgdGhlIHBhcnRpYWwgdmFsdWUgdHlwZXMgZnJvbSBhIHJlY29yZCBvZiBgRm9ybUNvbnRyb2xTaWduYWxgIGluc3RhbmNlcy5cclxuICogVGhpcyBpcyB1c2VkIHRvIGNvbnN0cnVjdCB0aGUgYHBhcnRpYWxWYWx1ZWAgdHlwZSBmb3IgYEZvcm1Hcm91cFNpZ25hbGAuXHJcbiAqIEBpbnRlcm5hbFxyXG4gKi9cclxudHlwZSBEZXJpdmF0aW9uUGFydGlhbFZhbHVlczxcclxuICBURGVyaXZhdGlvbnMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBGb3JtQ29udHJvbFNpZ25hbDxhbnksIGFueSwgYW55LCBhbnk+PixcclxuPiA9IHtcclxuICBbSyBpbiBrZXlvZiBURGVyaXZhdGlvbnNdOiBFeGNsdWRlPFxyXG4gICAgU2lnbmFsVmFsdWU8VERlcml2YXRpb25zW0tdWydwYXJ0aWFsVmFsdWUnXT4sXHJcbiAgICB1bmRlZmluZWRcclxuICA+O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJlcHJlc2VudHMgYSBncm91cCBvZiBmb3JtIGNvbnRyb2xzLCBzaW1pbGFyIHRvIEFuZ3VsYXIncyBgRm9ybUdyb3VwYC4gIEl0IGFnZ3JlZ2F0ZXNcclxuICogdGhlIHZhbHVlcyBhbmQgc3RhdGVzIG9mIGl0cyBjaGlsZCBjb250cm9scyBpbnRvIGEgc2luZ2xlIG9iamVjdC5cclxuICpcclxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdGhlIGZvcm0gZ3JvdXAncyB2YWx1ZSAoYW4gb2JqZWN0KS5cclxuICogQHR5cGVQYXJhbSBURGVyaXZhdGlvbnMgLSBBIHJlY29yZCB3aGVyZSBrZXlzIGFyZSB0aGUgbmFtZXMgb2YgdGhlIGNoaWxkIGNvbnRyb2xzIGFuZCB2YWx1ZXMgYXJlIHRoZSBgRm9ybUNvbnRyb2xTaWduYWxgIGluc3RhbmNlcy5cclxuICogQHR5cGVQYXJhbSBUUGFyZW50IC0gVGhlIHR5cGUgb2YgdGhlIHBhcmVudCBmb3JtIGNvbnRyb2wncyB2YWx1ZSAoaWYgdGhpcyBncm91cCBpcyBuZXN0ZWQpLlxyXG4gKi9cclxuZXhwb3J0IHR5cGUgRm9ybUdyb3VwU2lnbmFsPFxyXG4gIFQsXHJcbiAgVERlcml2YXRpb25zIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgRm9ybUNvbnRyb2xTaWduYWw8YW55LCBULCBhbnksIGFueT4+LFxyXG4gIFRQYXJlbnQgPSB1bmRlZmluZWQsXHJcbj4gPSBGb3JtQ29udHJvbFNpZ25hbDxcclxuICBULFxyXG4gIFRQYXJlbnQsXHJcbiAgJ2dyb3VwJyxcclxuICBQYXJ0aWFsPERlcml2YXRpb25QYXJ0aWFsVmFsdWVzPFREZXJpdmF0aW9ucz4+XHJcbj4gJiB7XHJcbiAgLyoqXHJcbiAgICogQSBzaWduYWwgdGhhdCBob2xkcyBhIHJlY29yZCBvZiB0aGUgY2hpbGQgZm9ybSBjb250cm9scy4gIFRoZSBrZXlzIGFyZSB0aGUgbmFtZXNcclxuICAgKiBvZiB0aGUgY29udHJvbHMsIGFuZCB0aGUgdmFsdWVzIGFyZSB0aGUgYEZvcm1Db250cm9sU2lnbmFsYCBpbnN0YW5jZXMuXHJcbiAgICovXHJcbiAgY2hpbGRyZW46IFNpZ25hbDxURGVyaXZhdGlvbnM+O1xyXG4gIC8qKlxyXG4gICAqIEEgc2lnbmFsIHRoYXQgaG9sZHMgdGhlIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZSBvZiB0aGUgZ3JvdXAgaXRzZWxmIChleGNsdWRpbmcgY2hpbGQgZXJyb3JzKS5cclxuICAgKi9cclxuICBvd25FcnJvcjogU2lnbmFsPHN0cmluZz47XHJcbn07XHJcblxyXG4vKipcclxuICogT3B0aW9ucyBmb3IgY3JlYXRpbmcgYSBgRm9ybUdyb3VwU2lnbmFsYC4gIEV4dGVuZHMgYENyZWF0ZUZvcm1Db250cm9sT3B0aW9uc2AuXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBDcmVhdGVGb3JtR3JvdXBPcHRpb25zPFxyXG4gIFQsXHJcbiAgVERlcml2YXRpb25zIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgRm9ybUNvbnRyb2xTaWduYWw8YW55LCBULCBhbnksIGFueT4+LFxyXG4+ID0gQ3JlYXRlRm9ybUNvbnRyb2xPcHRpb25zPFQsICdncm91cCc+ICYge1xyXG4gIC8qKlxyXG4gICAqIEFuIG9wdGlvbmFsIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIGJhc2Ugb2JqZWN0IGZvciB0aGUgYHBhcnRpYWxWYWx1ZWAgc2lnbmFsLlxyXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gcHJlLXBvcHVsYXRlIHRoZSBwYXJ0aWFsIHZhbHVlIHdpdGggZGVmYXVsdCB2YWx1ZXMgb3JcclxuICAgKiB0byBwZXJmb3JtIGN1c3RvbSBsb2dpYyBiZWZvcmUgbWVyZ2luZyBpbiB0aGUgcGFydGlhbCB2YWx1ZXMgZnJvbSBjaGlsZCBjb250cm9scy5cclxuICAgKi9cclxuICBjcmVhdGVCYXNlUGFydGlhbFZhbHVlPzogKFxyXG4gICAgdmFsdWU6IFQsXHJcbiAgKSA9PiBQYXJ0aWFsPERlcml2YXRpb25QYXJ0aWFsVmFsdWVzPFREZXJpdmF0aW9ucz4+O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBgRm9ybUdyb3VwU2lnbmFsYCwgd2hpY2ggYWdncmVnYXRlcyBhIHNldCBvZiBjaGlsZCBmb3JtIGNvbnRyb2xzIGludG8gYSBzaW5nbGUgb2JqZWN0LlxyXG4gKlxyXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgZm9ybSBncm91cCdzIHZhbHVlIChhbiBvYmplY3QpLlxyXG4gKiBAdHlwZVBhcmFtIFREZXJpdmF0aW9ucyAtICBBIHJlY29yZCB3aGVyZSBrZXlzIGFyZSB0aGUgbmFtZXMgb2YgdGhlIGNoaWxkIGNvbnRyb2xzIGFuZCB2YWx1ZXMgYXJlIHRoZSBgRm9ybUNvbnRyb2xTaWduYWxgIGluc3RhbmNlcy5cclxuICogQHR5cGVQYXJhbSBUUGFyZW50IC0gVGhlIHR5cGUgb2YgdGhlIHBhcmVudCBmb3JtIGNvbnRyb2wncyB2YWx1ZSAoaWYgdGhpcyBncm91cCBpcyBuZXN0ZWQgd2l0aGluIGFub3RoZXIgZ3JvdXAgb3IgYXJyYXkpLlxyXG4gKiBAcGFyYW0gaW5pdGlhbCAtIFRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSBmb3JtIGdyb3VwIChvciBhIGBXcml0YWJsZVNpZ25hbGAgb3IgYERlcml2ZWRTaWduYWxgIGlmIHRoZSBncm91cCBpcyBuZXN0ZWQpLlxyXG4gKiBAcGFyYW0gcHJvdmlkZWRDaGlsZHJlbiAtIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBjaGlsZCBgRm9ybUNvbnRyb2xTaWduYWxgIGluc3RhbmNlcywgb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgc3VjaCBhbiBvYmplY3QuXHJcbiAqICAgICAgICAgICAgICAgICAgICAgICAgVXNpbmcgYSBmdW5jdGlvbiBhbGxvd3MgZm9yIGR5bmFtaWMgY3JlYXRpb24gb2YgY2hpbGQgY29udHJvbHMgKGUuZy4sIGluIHJlc3BvbnNlIHRvIGNoYW5nZXMgaW4gb3RoZXIgc2lnbmFscykuXHJcbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgZm9ybSBncm91cC5cclxuICogQHJldHVybnMgQSBgRm9ybUdyb3VwU2lnbmFsYCBpbnN0YW5jZS5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogLy8gQ3JlYXRlIGEgc2ltcGxlIGZvcm0gZ3JvdXA6XHJcbiAqICBjb25zdCB1c2VyID0gc2lnbmFsKHsgbmFtZTogJ0pvaG4gRG9lJywgYWdlOiAzMCB9KTtcclxuICogIGNvbnN0IGZvcm0gPSBmb3JtR3JvdXAodXNlciwge1xyXG4gKiAgbmFtZTogZm9ybUNvbnRyb2woZGVyaXZlZCh1c2VyLCAnbmFtZScpKSxcclxuICogIGFnZTogZm9ybUNvbnRyb2woZGVyaXZlZCh1c2VyLCAnYWdlJykpLFxyXG4gKiAgfSlcclxuICpcclxuICogLy8gQ3JlYXRlIGEgbmVzdGVkIGZvcm0gZ3JvdXA6XHJcbiAqICBjb25zdCB1c2VyID0gc2lnbmFsKHsgbmFtZTogJ0pvaG4nLCBhZ2U6IDMwLCBhZGRyZXNzOiB7c3RyZWV0OiBcIlNvbWUgc3RyZWV0XCJ9IH0pO1xyXG4gKlxyXG4gKiBjb25zdCBhZGRyZXNzID0gZGVyaXZlZCh1c2VyLCAnYWRkcmVzcycpO1xyXG4gKiBjb25zdCB1c2VyRm9ybSA9IGZvcm1Hcm91cCh1c2VyLCB7XHJcbiAqICAgbmFtZTogZm9ybUNvbnRyb2woZGVyaXZlZCh1c2VyLCAnbmFtZScpKSxcclxuICogICBhZ2U6IGZvcm1Db250cm9sKGRlcml2ZWQodXNlciwgJ2FnZScpKSxcclxuICogICBhZGRyZXNzOiBmb3JtR3JvdXAoYWRkcmVzcywge1xyXG4gKiAgICAgICBzdHJlZXQ6IGZvcm1Db250cm9sKGRlcml2ZWQoYWRkcmVzcywgKGFkZHJlc3MpID0+IGFkZHJlc3Muc3RyZWV0KSwge1xyXG4gKiAgICAgICAgICAgdmFsaWRhdG9yOiAoKSA9PiAodmFsdWUpID0+IHZhbHVlID8gXCJcIiA6IFwicmVxdWlyZWQhXCJcclxuICogICAgICAgfSkgLy8geW91IGNhbiBjcmVhdGUgZGVlcGx5IG5lc3RlZCBzdHJ1Y3R1cmVzLlxyXG4gKiAgIH0pXHJcbiAqIH0pO1xyXG4gKlxyXG4gKiAvLyBDcmVhdGUgYSBmb3JtIGdyb3VwIHdpdGggZHluYW1pY2FsbHkgY3JlYXRlZCBjaGlsZHJlbiByZXBsYWNlZCByYXJlIEZvcm1SZWNvcmQgcmVxdWlyZW1lbnRzLlxyXG4gKiBjb25zdCBzaG93QWRkcmVzcyA9IHNpZ25hbChmYWxzZSk7XHJcbiAqIHR5cGUgQ2hhcmFjdGVyaXN0aWMgPSB7XHJcbiAqICB2YWx1ZVR5cGU6ICdzdHJpbmcnO1xyXG4gKiAgdmFsdWU6IHN0cmluZztcclxuICogfSB8IHtcclxuICogIHZhbHVlVHlwZTogJ251bWJlcic7XHJcbiAqICB2YWx1ZTogbnVtYmVyO1xyXG4gKiB9XHJcbiAqIGNvbnN0IGNoYXIgPSBzaWduYWw8Q2hhcmFjdGVyaXN0aWM+KHsgdmFsdWVUeXBlOiAnc3RyaW5nJywgdmFsdWU6ICcnIH0pO1xyXG4gKiBjb25zdCBjaGFyRm9ybSA9IGZvcm1Hcm91cChjaGFyLCAoKSA9PiB7XHJcbiAqICBpZiAoY2hhcigpLnZhbHVlVHlwZSA9PT0gJ3N0cmluZykgcmV0dXJuIGNyZWF0ZVN0cmluZ0NvbnRyb2woY2hhcik7XHJcbiAqICByZXR1cm4gY3JlYXRlTnVtYmVyQ29udHJvbChjaGFyKTtcclxuICogfSk7XHJcbiAqXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZm9ybUdyb3VwPFxyXG4gIFQsXHJcbiAgVERlcml2YXRpb25zIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgRm9ybUNvbnRyb2xTaWduYWw8YW55LCBULCBhbnksIGFueT4+LFxyXG4gIFRQYXJlbnQgPSB1bmRlZmluZWQsXHJcbj4oXHJcbiAgaW5pdGlhbDogRGVyaXZlZFNpZ25hbDxUUGFyZW50LCBUPiB8IFQgfCBXcml0YWJsZVNpZ25hbDxUPixcclxuICBwcm92aWRlZENoaWxkcmVuOiAoKCkgPT4gVERlcml2YXRpb25zKSB8IFREZXJpdmF0aW9ucyxcclxuICBvcHQ/OiBDcmVhdGVGb3JtR3JvdXBPcHRpb25zPFQsIFREZXJpdmF0aW9ucz4sXHJcbik6IEZvcm1Hcm91cFNpZ25hbDxULCBURGVyaXZhdGlvbnMsIFRQYXJlbnQ+IHtcclxuICBjb25zdCB2YWx1ZVNpZ25hbCA9IGlzU2lnbmFsKGluaXRpYWwpID8gaW5pdGlhbCA6IHNpZ25hbChpbml0aWFsKTtcclxuICAvLyB3ZSBmYWtlIGEgZGVyaXZhdGlvbiBpZiBub3QgcHJlc2VudCwgc28gdGhhdCAuZnJvbSBpcyBwcmVzZW50IG9uIHRoZSBzaWduYWxcclxuICBjb25zdCB2YWx1ZSA9IGlzRGVyaXZhdGlvbjxUUGFyZW50LCBUPih2YWx1ZVNpZ25hbClcclxuICAgID8gdmFsdWVTaWduYWxcclxuICAgIDogdG9GYWtlU2lnbmFsRGVyaXZhdGlvbjxUUGFyZW50LCBUPih2YWx1ZVNpZ25hbCk7XHJcblxyXG4gIC8vIHdlIGFsbG93IGZvciBhIGZ1bmN0aW9uL3NpZ25hbCB0byBiZSBwYXNzZWQsIHRoaXMgY2FzZSBzaG91bGQgb25seSBiZSB1c2VkIGlmIHRoZSBjaGlsZCBjb250cm9scyBjaGFuZ2UgZGVwZW5kZW50IHVwb24gc29tZXRoaW5nLCBzYXkgaWYgYSBmb3JtQ29udHJvbCBpcyBmbGlwcGVkIGludG8gYSBmb3JtR3JvdXAuXHJcbiAgY29uc3QgY2hpbGRyZW4gPVxyXG4gICAgdHlwZW9mIHByb3ZpZGVkQ2hpbGRyZW4gPT09ICdmdW5jdGlvbidcclxuICAgICAgPyBjb21wdXRlZCgoKSA9PiBwcm92aWRlZENoaWxkcmVuKCkpXHJcbiAgICAgIDogY29tcHV0ZWQoKCkgPT4gcHJvdmlkZWRDaGlsZHJlbik7XHJcblxyXG4gIC8vIGFycmF5IGFsbG93cyBmb3IgZWFzaWVyIGhhbmRsaW5nXHJcbiAgY29uc3QgZGVyaXZhdGlvbnNBcnJheSA9IGNvbXB1dGVkKCgpID0+IE9iamVjdC52YWx1ZXMoY2hpbGRyZW4oKSkpO1xyXG5cclxuICBjb25zdCBjaGlsZHJlbkRpcnR5ID0gY29tcHV0ZWQoXHJcbiAgICAoKSA9PlxyXG4gICAgICAhIWRlcml2YXRpb25zQXJyYXkoKS5sZW5ndGggJiYgZGVyaXZhdGlvbnNBcnJheSgpLnNvbWUoKGQpID0+IGQuZGlydHkoKSksXHJcbiAgKTtcclxuXHJcbiAgLy8gYnkgZGVmYXVsdCBkb250IGNvbXBhcmUgb2JqZWN0IHJlZmVyZW5jZXMsIGp1c3QgdXNlIGNoaWxkcmVuRGlydHlTaWduYWxcclxuICBjb25zdCBiYXNlRGlydHlFcSA9IG9wdD8uZGlydHlFcXVhbGl0eSA/PyBvcHQ/LmVxdWFsID8/ICgoKSA9PiB0cnVlKTtcclxuXHJcbiAgLy8gZnVuY3Rpb24gd2hpY2ggY2FsbHMgYSBzaWduYWwgYmVjb21lcyBhIHNpZ25hbFxyXG4gIGNvbnN0IGRpcnR5RXF1YWxpdHkgPSAoYTogVCwgYjogVCkgPT4ge1xyXG4gICAgcmV0dXJuIGJhc2VEaXJ0eUVxKGEsIGIpICYmICFjaGlsZHJlbkRpcnR5KCk7XHJcbiAgfTtcclxuXHJcbiAgLy8gZ3JvdXAgY29udHJvbFxyXG4gIGNvbnN0IGN0cmwgPSBmb3JtQ29udHJvbDxULCBUUGFyZW50LCAnZ3JvdXAnPih2YWx1ZSwge1xyXG4gICAgLi4ub3B0LFxyXG4gICAgZGlydHlFcXVhbGl0eSxcclxuICAgIGNvbnRyb2xUeXBlOiAnZ3JvdXAnLFxyXG4gICAgcmVhZG9ubHk6ICgpID0+IHtcclxuICAgICAgLy8gcmVhZG9ubHkgaWYgaXMgcmVhZG9ubHkgb3IgYWxsIGNoaWxkcmVuIGFyZSByZWFkb25seVxyXG4gICAgICBpZiAob3B0Py5yZWFkb25seT8uKCkpIHJldHVybiB0cnVlO1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgICEhZGVyaXZhdGlvbnNBcnJheSgpLmxlbmd0aCAmJlxyXG4gICAgICAgIGRlcml2YXRpb25zQXJyYXkoKS5ldmVyeSgoZCkgPT4gZC5yZWFkb25seSgpKVxyXG4gICAgICApO1xyXG4gICAgfSxcclxuICAgIGRpc2FibGU6ICgpID0+IHtcclxuICAgICAgaWYgKG9wdD8uZGlzYWJsZT8uKCkpIHJldHVybiB0cnVlO1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgICEhZGVyaXZhdGlvbnNBcnJheSgpLmxlbmd0aCAmJlxyXG4gICAgICAgIGRlcml2YXRpb25zQXJyYXkoKS5ldmVyeSgoZCkgPT4gZC5kaXNhYmxlZCgpKVxyXG4gICAgICApO1xyXG4gICAgfSxcclxuICB9KSBzYXRpc2ZpZXMgRm9ybUNvbnRyb2xTaWduYWw8VCwgVFBhcmVudCwgJ2dyb3VwJz47XHJcblxyXG4gIGNvbnN0IGNoaWxkcmVuVG91Y2hlZCA9IGNvbXB1dGVkKFxyXG4gICAgKCkgPT5cclxuICAgICAgISFkZXJpdmF0aW9uc0FycmF5KCkubGVuZ3RoICYmXHJcbiAgICAgIGRlcml2YXRpb25zQXJyYXkoKS5zb21lKChkKSA9PiBkLnRvdWNoZWQoKSksXHJcbiAgKTtcclxuXHJcbiAgY29uc3QgdG91Y2hlZCA9IGNvbXB1dGVkKCgpID0+IGN0cmwudG91Y2hlZCgpIHx8IGNoaWxkcmVuVG91Y2hlZCgpKTtcclxuXHJcbiAgY29uc3QgY2hpbGRFcnJvciA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgIGlmICghZGVyaXZhdGlvbnNBcnJheSgpLmxlbmd0aCkgcmV0dXJuICcnO1xyXG4gICAgcmV0dXJuIGRlcml2YXRpb25zQXJyYXkoKVxyXG4gICAgICAubWFwKChkKSA9PiAoZC5lcnJvcigpID8gYCR7ZC5sYWJlbCgpfTogJHtkLmVycm9yKCl9YCA6ICcnKSlcclxuICAgICAgLmZpbHRlcihCb29sZWFuKVxyXG4gICAgICAuam9pbignXFxuJyk7XHJcbiAgfSk7XHJcblxyXG4gIGNvbnN0IGVycm9yID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgY29uc3Qgb3duRXJyb3IgPSBjdHJsLmVycm9yKCk7XHJcbiAgICBpZiAob3duRXJyb3IpIHJldHVybiBvd25FcnJvcjtcclxuICAgIHJldHVybiBjaGlsZEVycm9yKCkgPyAnSU5WQUxJRCcgOiAnJztcclxuICB9KTtcclxuXHJcbiAgY29uc3QgbWFya0FsbEFzVG91Y2hlZCA9ICgpID0+IHtcclxuICAgIGN0cmwubWFya0FsbEFzVG91Y2hlZCgpO1xyXG4gICAgZm9yIChjb25zdCBjdHJsIG9mIHVudHJhY2tlZChkZXJpdmF0aW9uc0FycmF5KSkge1xyXG4gICAgICBjdHJsLm1hcmtBbGxBc1RvdWNoZWQoKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBjb25zdCBtYXJrQWxsQXNQcmlzdGluZSA9ICgpID0+IHtcclxuICAgIGN0cmwubWFya0FsbEFzUHJpc3RpbmUoKTtcclxuICAgIGZvciAoY29uc3QgY3RybCBvZiB1bnRyYWNrZWQoZGVyaXZhdGlvbnNBcnJheSkpIHtcclxuICAgICAgY3RybC5tYXJrQWxsQXNQcmlzdGluZSgpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIGNvbnN0IHJlY29uY2lsZSA9IChuZXdWYWx1ZTogVCkgPT4ge1xyXG4gICAgLy8gc2V0IHRoZSBjaGlsZHJlbiB2YWx1ZXMgYmFzZWQgb24gdGhlIGRlcml2YXRpb24gb2YgdGhlIG5ldyB2YWx1ZVxyXG4gICAgZm9yIChjb25zdCBjdHJsIG9mIHVudHJhY2tlZChkZXJpdmF0aW9uc0FycmF5KSkge1xyXG4gICAgICBjb25zdCBmcm9tID0gY3RybC5mcm9tO1xyXG4gICAgICBpZiAoIWZyb20pIGNvbnRpbnVlO1xyXG4gICAgICBjdHJsLnJlY29uY2lsZShmcm9tKG5ld1ZhbHVlKSk7XHJcbiAgICB9XHJcbiAgICBjdHJsLnJlY29uY2lsZShtZXJnZUlmT2JqZWN0KG5ld1ZhbHVlLCB1bnRyYWNrZWQodmFsdWUpKSk7XHJcbiAgfTtcclxuXHJcbiAgY29uc3QgZm9yY2VSZWNvbmNpbGUgPSAobmV3VmFsdWU6IFQpID0+IHtcclxuICAgIGZvciAoY29uc3QgY3RybCBvZiB1bnRyYWNrZWQoZGVyaXZhdGlvbnNBcnJheSkpIHtcclxuICAgICAgY29uc3QgZnJvbSA9IGN0cmwuZnJvbTtcclxuICAgICAgaWYgKCFmcm9tKSBjb250aW51ZTtcclxuICAgICAgY3RybC5mb3JjZVJlY29uY2lsZShmcm9tKG5ld1ZhbHVlKSk7XHJcbiAgICB9XHJcbiAgICBjdHJsLmZvcmNlUmVjb25jaWxlKG5ld1ZhbHVlKTtcclxuICB9O1xyXG5cclxuICBjb25zdCBjcmVhdGVCYXNlVmFsdWVGbiA9IG9wdD8uY3JlYXRlQmFzZVBhcnRpYWxWYWx1ZTtcclxuXHJcbiAgY29uc3QgYmFzZVBhcnRpYWxWYWx1ZTogU2lnbmFsPFxyXG4gICAgUGFydGlhbDxEZXJpdmF0aW9uUGFydGlhbFZhbHVlczxURGVyaXZhdGlvbnM+PlxyXG4gID4gPSBjcmVhdGVCYXNlVmFsdWVGblxyXG4gICAgPyBjb21wdXRlZCgoKSA9PiBjcmVhdGVCYXNlVmFsdWVGbihjdHJsLnZhbHVlKCkpKVxyXG4gICAgOiBjb21wdXRlZCgoKSA9PiAoe30pKTtcclxuXHJcbiAgY29uc3QgcGFydGlhbFZhbHVlID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgY29uc3Qgb2JqOiBQYXJ0aWFsPERlcml2YXRpb25QYXJ0aWFsVmFsdWVzPFREZXJpdmF0aW9ucz4+ID0ge1xyXG4gICAgICAuLi5iYXNlUGFydGlhbFZhbHVlKCksXHJcbiAgICB9O1xyXG5cclxuICAgIGlmICghY3RybC5kaXJ0eSgpKSByZXR1cm4gb2JqO1xyXG5cclxuICAgIGZvciAoY29uc3QgW2tleSwgY3RybF0gb2YgT2JqZWN0LmVudHJpZXMoY2hpbGRyZW4oKSkpIHtcclxuICAgICAgY29uc3QgcHYgPSBjdHJsLnBhcnRpYWxWYWx1ZSgpO1xyXG5cclxuICAgICAgaWYgKHB2ID09PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xyXG4gICAgICAob2JqIGFzIEFueU9iamVjdClba2V5XSA9IHB2O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvYmo7XHJcbiAgfSk7XHJcblxyXG4gIGNvbnN0IGNoaWxkcmVuVmFsaWQgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICBpZiAoIWRlcml2YXRpb25zQXJyYXkoKS5sZW5ndGgpIHJldHVybiB0cnVlO1xyXG4gICAgcmV0dXJuIGRlcml2YXRpb25zQXJyYXkoKS5ldmVyeSgoZCkgPT4gZC52YWxpZCgpKTtcclxuICB9KTtcclxuXHJcbiAgY29uc3QgY2hpbGRyZW5QZW5kaW5nID0gY29tcHV0ZWQoXHJcbiAgICAoKSA9PlxyXG4gICAgICAhIWRlcml2YXRpb25zQXJyYXkoKS5sZW5ndGggJiZcclxuICAgICAgZGVyaXZhdGlvbnNBcnJheSgpLnNvbWUoKGQpID0+IGQucGVuZGluZygpKSxcclxuICApO1xyXG5cclxuICByZXR1cm4ge1xyXG4gICAgLi4uY3RybCxcclxuICAgIGNoaWxkcmVuLFxyXG4gICAgcGFydGlhbFZhbHVlLFxyXG4gICAgcmVjb25jaWxlLFxyXG4gICAgZm9yY2VSZWNvbmNpbGUsXHJcbiAgICBvd25FcnJvcjogY3RybC5lcnJvcixcclxuICAgIHRvdWNoZWQsXHJcbiAgICBlcnJvcixcclxuICAgIHZhbGlkOiBjb21wdXRlZCgoKSA9PiBjdHJsLnZhbGlkKCkgJiYgY2hpbGRyZW5WYWxpZCgpKSxcclxuICAgIHBlbmRpbmc6IGNvbXB1dGVkKCgpID0+IGN0cmwucGVuZGluZygpIHx8IGNoaWxkcmVuUGVuZGluZygpKSxcclxuICAgIG1hcmtBbGxBc1ByaXN0aW5lLFxyXG4gICAgbWFya0FsbEFzVG91Y2hlZCxcclxuICAgIHJlc2V0OiAoKSA9PiB7XHJcbiAgICAgIGZvciAoY29uc3QgY3RybCBvZiB1bnRyYWNrZWQoZGVyaXZhdGlvbnNBcnJheSkpIHtcclxuICAgICAgICBjdHJsLnJlc2V0KCk7XHJcbiAgICAgIH1cclxuICAgICAgY3RybC5yZXNldCgpO1xyXG4gICAgfSxcclxuICAgIHJlc2V0V2l0aEluaXRpYWw6IChpbml0aWFsOiBUKSA9PiB7XHJcbiAgICAgIGZvciAoY29uc3QgY3RybCBvZiB1bnRyYWNrZWQoZGVyaXZhdGlvbnNBcnJheSkpIHtcclxuICAgICAgICBjb25zdCBmcm9tID0gY3RybC5mcm9tO1xyXG4gICAgICAgIGlmIChmcm9tKSBjdHJsLnJlc2V0V2l0aEluaXRpYWwoZnJvbShpbml0aWFsKSk7XHJcbiAgICAgICAgZWxzZSBjdHJsLnJlc2V0KCk7XHJcbiAgICAgIH1cclxuICAgICAgY3RybC5yZXNldFdpdGhJbml0aWFsKGluaXRpYWwpO1xyXG4gICAgfSxcclxuICB9O1xyXG59XHJcbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW1zdGFjay1mb3JtLWNvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9mb3JtL2NvcmUvc3JjL21tc3RhY2stZm9ybS1jb3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":[],"mappings":";;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE;AACvC,IAAI,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE;AAC1C,IAAI,IAAI,OAAO,IAAI,KAAK,OAAO,IAAI;AACnC,QAAQ,OAAO,IAAI;AACnB,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,QAAQ;AAC5D,QAAQ,OAAO,IAAI;AACnB,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI;AACtC,QAAQ,OAAO,IAAI;AACnB,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;AAClD,QAAQ,OAAO,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC;AACrC,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;AAClD,QAAQ,OAAO,IAAI;AACnB,IAAI,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,EAAE;AAC/B;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,UAAU,GAAG;AAC7B,IAAI,IAAI,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE;AACvC,QAAQ,OAAO,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE;AAC7C;AACA,IAAI,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;AAClD;;ACjEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,WAAW,CAAC,OAAO,EAAE,GAAG,EAAE;AAC1C,IAAI,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC;AACpE,IAAI,MAAM,YAAY,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACxG,IAAI,MAAM,EAAE,GAAG,GAAG,EAAE,KAAK,IAAI,MAAM,CAAC,EAAE;AACtC,IAAI,MAAM,OAAO,GAAG,GAAG,EAAE,aAAa,IAAI,EAAE;AAC5C,IAAI,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,GAAG,EAAE,OAAO,IAAI,IAAI,KAAK,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACjH,IAAI,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,GAAG,EAAE,QAAQ,IAAI,IAAI,KAAK,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAClH,IAAI,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACnH,IAAI,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACnF,IAAI,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,GAAG,EAAE,SAAS,IAAI,KAAK,MAAM,EAAE,CAAC,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC1H,IAAI,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM;AACjC,QAAQ,IAAI,GAAG,EAAE,kBAAkB;AACnC,YAAY,OAAO,GAAG,CAAC,kBAAkB,EAAE;AAC3C,QAAQ,IAAI,QAAQ,EAAE,IAAI,QAAQ,EAAE;AACpC,YAAY,OAAO,EAAE;AACrB,QAAQ,OAAO,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC;AACnC,KAAK,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACtD,IAAI,MAAM,aAAa,GAAG,MAAM;AAChC,QAAQ,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACzB,QAAQ,GAAG,EAAE,SAAS,IAAI;AAC1B,KAAK;AACL,IAAI,MAAM,gBAAgB,GAAG,aAAa;AAC1C,IAAI,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AACnD,IAAI,MAAM,iBAAiB,GAAG,cAAc;AAC5C,IAAI,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,GAAG,EAAE,KAAK,IAAI,IAAI,EAAE,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACtG,IAAI,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,KAAK,EAAE,GAAG,KAAK,EAAE,GAAG,SAAS,CAAC,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC/H,IAAI,MAAM,iBAAiB,GAAG,CAAC,QAAQ,EAAE,KAAK,GAAG,KAAK,KAAK;AAC3D,QAAQ,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC;AACxC,QAAQ,IAAI,CAAC,OAAO,IAAI,KAAK,EAAE;AAC/B;AACA;AACA,YAAY,SAAS,CAAC,MAAM;AAC5B,gBAAgB,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC1C,gBAAgB,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;AACnC,aAAa,CAAC;AACd;AACA,KAAK;AACL,IAAI,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,GAAG,EAAE,OAAO,IAAI,IAAI,KAAK,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC/G,IAAI,OAAO;AACX,QAAQ,EAAE,EAAE,GAAG,EAAE,EAAE,IAAI,IAAI,UAAU,EAAE;AACvC,QAAQ,KAAK;AACb,QAAQ,KAAK;AACb,QAAQ,OAAO;AACf,QAAQ,KAAK;AACb,QAAQ,KAAK;AACb,QAAQ,QAAQ,EAAE,QAAQ,CAAC,MAAM,GAAG,EAAE,QAAQ,IAAI,IAAI,KAAK,CAAC;AAC5D,QAAQ,QAAQ;AAChB,QAAQ,QAAQ;AAChB,QAAQ,OAAO;AACf,QAAQ,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;AACrD,QAAQ,IAAI,EAAE,QAAQ,CAAC,MAAM,GAAG,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC;AACjD,QAAQ,aAAa;AACrB,QAAQ,gBAAgB;AACxB,QAAQ,cAAc;AACtB,QAAQ,iBAAiB;AACzB,QAAQ,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC;AAC5D,QAAQ,SAAS,EAAE,CAAC,QAAQ,KAAK,iBAAiB,CAAC,QAAQ,CAAC;AAC5D,QAAQ,cAAc,EAAE,CAAC,QAAQ,KAAK,iBAAiB,CAAC,QAAQ,EAAE,IAAI,CAAC;AACvE,QAAQ,KAAK,EAAE,MAAM;AACrB,YAAY,GAAG,EAAE,OAAO,IAAI;AAC5B,YAAY,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;AAC9C,SAAS;AACT,QAAQ,gBAAgB,EAAE,CAAC,OAAO,KAAK;AACvC,YAAY,GAAG,EAAE,OAAO,IAAI;AAC5B,YAAY,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC;AACrC,YAAY,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC;AAC9B,SAAS;AACT,QAAQ,KAAK,EAAE,EAAE;AACjB,QAAQ,WAAW,GAAG,GAAG,EAAE,WAAW,IAAI,SAAS,CAAC;AACpD,QAAQ,YAAY,EAAE,YAAY;AAClC,KAAK;AACL;;ACxGA,SAAS,uBAAuB,CAAC,OAAO,EAAE,GAAG,EAAE;AAC/C,IAAI,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,KAAK;AACrC,QAAQ,IAAI,CAAC,IAAI,EAAE;AACnB,YAAY,MAAM,YAAY,GAAG,EAAE;AACnC,YAAY,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;AAC7C,gBAAgB,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACxF;AACA,YAAY,OAAO,YAAY;AAC/B;AACA,QAAQ,IAAI,MAAM,KAAK,IAAI,CAAC,MAAM;AAClC,YAAY,OAAO,IAAI;AACvB,QAAQ,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC;AAC9B,QAAQ,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;AAClC,YAAY,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;AAC/B;AACA,aAAa,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;AACvC,YAAY,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;AACvD,gBAAgB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAChF;AACA;AACA,QAAQ,OAAO,IAAI;AACnB,KAAK;AACL;AACO,SAAS,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE;AACjD,IAAI,MAAM,EAAE,GAAG,GAAG,EAAE,KAAK,IAAI,MAAM,CAAC,EAAE;AACtC,IAAI,MAAM,UAAU,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK;AACjC,QAAQ,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;AACjC,YAAY,OAAO,KAAK;AACxB,QAAQ,IAAI,CAAC,CAAC,CAAC,MAAM;AACrB,YAAY,OAAO,IAAI;AACvB,QAAQ,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7C,KAAK;AACL,IAAI,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC/F,IAAI,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,IAAI,MAAM,CAAC,gBAAgB,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACrH,IAAI,MAAM,YAAY,GAAG;AACzB,QAAQ,GAAG,GAAG;AACd,QAAQ,KAAK,EAAE,UAAU;AACzB,QAAQ,aAAa,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;AACtD,QAAQ,WAAW,EAAE,OAAO;AAC5B,KAAK;AACL,IAAI,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,EAAE,YAAY,CAAC;AACnD,IAAI,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACvG,IAAI,MAAM,iBAAiB,GAAG,uBAAuB,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AAC7E;AACA,IAAI,MAAM,QAAQ,GAAG,YAAY,CAAC;AAClC,QAAQ,MAAM,EAAE,MAAM,MAAM,EAAE;AAC9B,QAAQ,WAAW,EAAE,CAAC,GAAG,EAAE,IAAI,KAAK,iBAAiB,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC;AACnF,KAAK,CAAC;AACN,IAAI,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACpG,IAAI,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM;AACjC,QAAQ,MAAM,GAAG,GAAG,QAAQ,EAAE;AAC9B,QAAQ,IAAI,GAAG;AACf,YAAY,OAAO,GAAG;AACtB,QAAQ,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM;AAC9B,YAAY,OAAO,EAAE;AACrB,QAAQ,OAAO,QAAQ;AACvB,aAAa,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;AACtE,aAAa,MAAM,CAAC,OAAO;AAC3B,aAAa,IAAI,CAAC,IAAI,CAAC;AACvB,KAAK,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACtD,IAAI,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM;AACjC,QAAQ,IAAI,IAAI,CAAC,KAAK,EAAE;AACxB,YAAY,OAAO,IAAI;AACvB,QAAQ,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM;AAC9B,YAAY,OAAO,KAAK;AACxB,QAAQ,OAAO,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;AAChD,KAAK,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACtD,IAAI,MAAM,gBAAgB,GAAG,MAAM;AACnC,QAAQ,IAAI,CAAC,gBAAgB,EAAE;AAC/B,QAAQ,KAAK,MAAM,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,EAAE;AAC7C,YAAY,CAAC,CAAC,gBAAgB,EAAE;AAChC;AACA,KAAK;AACL,IAAI,MAAM,iBAAiB,GAAG,MAAM;AACpC,QAAQ,IAAI,CAAC,iBAAiB,EAAE;AAChC,QAAQ,KAAK,MAAM,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,EAAE;AAC7C,YAAY,CAAC,CAAC,iBAAiB,EAAE;AACjC;AACA,KAAK;AACL,IAAI,MAAM,cAAc,GAAG,GAAG,EAAE,cAAc,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;AAC5D,IAAI,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM;AACxC,QAAQ,IAAI,CAAC,KAAK,EAAE;AACpB,YAAY,OAAO,SAAS;AAC5B,QAAQ,OAAO,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK;AACrC,YAAY,MAAM,EAAE,GAAG,CAAC,CAAC,YAAY,EAAE;AACvC,YAAY,IAAI,EAAE;AAClB,gBAAgB,OAAO,EAAE;AACzB,YAAY,IAAI,CAAC,CAAC,WAAW,KAAK,SAAS;AAC3C,gBAAgB,OAAO,SAAS;AAChC;AACA,YAAY,OAAO,cAAc,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;AAC5C,SAAS,CAAC;AACV,KAAK,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC7D,IAAI,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE;AACjD,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC,MAAM,IAAI,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACvH,IAAI,MAAM,SAAS,GAAG,CAAC,QAAQ,KAAK;AACpC,QAAQ,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC;AACzC,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAClD,YAAY,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AAChD;AACA,QAAQ,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACnE,KAAK;AACL,IAAI,MAAM,cAAc,GAAG,CAAC,QAAQ,KAAK;AACzC,QAAQ,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC;AACzC,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAClD,YAAY,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AACpD;AACA,QAAQ,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC;AACrC,KAAK;AACL,IAAI,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM;AACzC,QAAQ,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM;AAC9B,YAAY,OAAO,IAAI;AACvB,QAAQ,OAAO,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;AACjD,KAAK,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC9D,IAAI,MAAM,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC,MAAM,IAAI,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAChK,IAAI,OAAO;AACX,QAAQ,GAAG,IAAI;AACf,QAAQ,QAAQ;AAChB,QAAQ,KAAK;AACb,QAAQ,KAAK,EAAE,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,IAAI,aAAa,EAAE,CAAC;AAC9D,QAAQ,OAAO,EAAE,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,IAAI,eAAe,EAAE,CAAC;AACpE,QAAQ,OAAO;AACf,QAAQ,QAAQ;AAChB,QAAQ,KAAK;AACb,QAAQ,gBAAgB;AACxB,QAAQ,iBAAiB;AACzB,QAAQ,GAAG;AACX,QAAQ,GAAG;AACX,QAAQ,YAAY;AACpB,QAAQ,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,MAAM,EAAE,GAAG,GAAG,EAAE,CAAC;AACxF,QAAQ,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,MAAM,EAAE,GAAG,GAAG,EAAE,CAAC;AAC3F,QAAQ,SAAS;AACjB,QAAQ,cAAc;AACtB,QAAQ,KAAK,EAAE,MAAM;AACrB,YAAY,KAAK,MAAM,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,EAAE;AACjD,gBAAgB,CAAC,CAAC,KAAK,EAAE;AACzB;AACA,YAAY,IAAI,CAAC,KAAK,EAAE;AACxB,SAAS;AACT,QAAQ,gBAAgB,EAAE,CAAC,OAAO,KAAK;AACvC,YAAY,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC;AAC7C,YAAY,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACrD,gBAAgB,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACzD;AACA,YAAY,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;AAC1C,SAAS;AACT,QAAQ,IAAI,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,GAAG,EAAE,IAAI,CAAC,CAAC;AAClE,QAAQ,MAAM,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;AACpF,KAAK;AACL;;ACrJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,SAAS,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,EAAE;AAC1D,IAAI,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;AACrE;AACA,IAAI,MAAM,KAAK,GAAG,YAAY,CAAC,WAAW;AAC1C,UAAU;AACV,UAAU,sBAAsB,CAAC,WAAW,CAAC;AAC7C;AACA,IAAI,MAAM,QAAQ,GAAG,OAAO,gBAAgB,KAAK;AACjD,UAAU,QAAQ,CAAC,MAAM,gBAAgB,EAAE;AAC3C,UAAU,QAAQ,CAAC,MAAM,gBAAgB,CAAC;AAC1C;AACA,IAAI,MAAM,gBAAgB,GAAG,QAAQ,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACjI,IAAI,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,gBAAgB,EAAE,CAAC,MAAM,IAAI,gBAAgB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC1K;AACA,IAAI,MAAM,WAAW,GAAG,GAAG,EAAE,aAAa,IAAI,GAAG,EAAE,KAAK,KAAK,MAAM,IAAI,CAAC;AACxE;AACA,IAAI,MAAM,aAAa,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK;AACpC,QAAQ,OAAO,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE;AACpD,KAAK;AACL;AACA,IAAI,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,EAAE;AACpC,QAAQ,GAAG,GAAG;AACd,QAAQ,aAAa;AACrB,QAAQ,WAAW,EAAE,OAAO;AAC5B,QAAQ,QAAQ,EAAE,MAAM;AACxB;AACA,YAAY,IAAI,GAAG,EAAE,QAAQ,IAAI;AACjC,gBAAgB,OAAO,IAAI;AAC3B,YAAY,QAAQ,CAAC,CAAC,gBAAgB,EAAE,CAAC,MAAM;AAC/C,gBAAgB,gBAAgB,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC;AAC7D,SAAS;AACT,QAAQ,OAAO,EAAE,MAAM;AACvB,YAAY,IAAI,GAAG,EAAE,OAAO,IAAI;AAChC,gBAAgB,OAAO,IAAI;AAC3B,YAAY,QAAQ,CAAC,CAAC,gBAAgB,EAAE,CAAC,MAAM;AAC/C,gBAAgB,gBAAgB,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC;AAC7D,SAAS;AACT,KAAK,CAAC;AACN,IAAI,MAAM,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,gBAAgB,EAAE,CAAC,MAAM;AACtE,QAAQ,gBAAgB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC9G,IAAI,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,IAAI,eAAe,EAAE,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACzH,IAAI,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM;AACtC,QAAQ,IAAI,CAAC,gBAAgB,EAAE,CAAC,MAAM;AACtC,YAAY,OAAO,EAAE;AACrB,QAAQ,OAAO,gBAAgB;AAC/B,aAAa,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;AACvE,aAAa,MAAM,CAAC,OAAO;AAC3B,aAAa,IAAI,CAAC,IAAI,CAAC;AACvB,KAAK,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC3D,IAAI,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM;AACjC,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE;AACrC,QAAQ,IAAI,QAAQ;AACpB,YAAY,OAAO,QAAQ;AAC3B,QAAQ,OAAO,UAAU,EAAE,GAAG,SAAS,GAAG,EAAE;AAC5C,KAAK,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACtD,IAAI,MAAM,gBAAgB,GAAG,MAAM;AACnC,QAAQ,IAAI,CAAC,gBAAgB,EAAE;AAC/B,QAAQ,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,gBAAgB,CAAC,EAAE;AACxD,YAAY,IAAI,CAAC,gBAAgB,EAAE;AACnC;AACA,KAAK;AACL,IAAI,MAAM,iBAAiB,GAAG,MAAM;AACpC,QAAQ,IAAI,CAAC,iBAAiB,EAAE;AAChC,QAAQ,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,gBAAgB,CAAC,EAAE;AACxD,YAAY,IAAI,CAAC,iBAAiB,EAAE;AACpC;AACA,KAAK;AACL,IAAI,MAAM,SAAS,GAAG,CAAC,QAAQ,KAAK;AACpC;AACA,QAAQ,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,gBAAgB,CAAC,EAAE;AACxD,YAAY,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI;AAClC,YAAY,IAAI,CAAC,IAAI;AACrB,gBAAgB;AAChB,YAAY,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC1C;AACA,QAAQ,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,QAAQ,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AACjE,KAAK;AACL,IAAI,MAAM,cAAc,GAAG,CAAC,QAAQ,KAAK;AACzC,QAAQ,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,gBAAgB,CAAC,EAAE;AACxD,YAAY,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI;AAClC,YAAY,IAAI,CAAC,IAAI;AACrB,gBAAgB;AAChB,YAAY,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC/C;AACA,QAAQ,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC;AACrC,KAAK;AACL,IAAI,MAAM,iBAAiB,GAAG,GAAG,EAAE,sBAAsB;AACzD,IAAI,MAAM,gBAAgB,GAAG;AAC7B,UAAU,QAAQ,CAAC,MAAM,iBAAiB,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;AACxD,UAAU,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;AAC9B,IAAI,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM;AACxC,QAAQ,MAAM,GAAG,GAAG;AACpB,YAAY,GAAG,gBAAgB,EAAE;AACjC,SAAS;AACT,QAAQ,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACzB,YAAY,OAAO,GAAG;AACtB,QAAQ,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,EAAE;AAC9D,YAAY,MAAM,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE;AAC1C,YAAY,IAAI,EAAE,KAAK,SAAS;AAChC,gBAAgB;AAChB,YAAY,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE;AACzB;AACA,QAAQ,OAAO,GAAG;AAClB,KAAK,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC7D,IAAI,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM;AACzC,QAAQ,IAAI,CAAC,gBAAgB,EAAE,CAAC,MAAM;AACtC,YAAY,OAAO,IAAI;AACvB,QAAQ,OAAO,gBAAgB,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;AACzD,KAAK,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC9D,IAAI,MAAM,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,gBAAgB,EAAE,CAAC,MAAM;AACtE,QAAQ,gBAAgB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC9G,IAAI,OAAO;AACX,QAAQ,GAAG,IAAI;AACf,QAAQ,QAAQ;AAChB,QAAQ,YAAY;AACpB,QAAQ,SAAS;AACjB,QAAQ,cAAc;AACtB,QAAQ,QAAQ,EAAE,IAAI,CAAC,KAAK;AAC5B,QAAQ,OAAO;AACf,QAAQ,KAAK;AACb,QAAQ,KAAK,EAAE,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,IAAI,aAAa,EAAE,CAAC;AAC9D,QAAQ,OAAO,EAAE,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,IAAI,eAAe,EAAE,CAAC;AACpE,QAAQ,iBAAiB;AACzB,QAAQ,gBAAgB;AACxB,QAAQ,KAAK,EAAE,MAAM;AACrB,YAAY,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,gBAAgB,CAAC,EAAE;AAC5D,gBAAgB,IAAI,CAAC,KAAK,EAAE;AAC5B;AACA,YAAY,IAAI,CAAC,KAAK,EAAE;AACxB,SAAS;AACT,QAAQ,gBAAgB,EAAE,CAAC,OAAO,KAAK;AACvC,YAAY,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,gBAAgB,CAAC,EAAE;AAC5D,gBAAgB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI;AACtC,gBAAgB,IAAI,IAAI;AACxB,oBAAoB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACxD;AACA,oBAAoB,IAAI,CAAC,KAAK,EAAE;AAChC;AACA,YAAY,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;AAC1C,SAAS;AACT,KAAK;AACL;;ACnMA;AACA;AACA;;;;"}
|
|
1
|
+
{"version":3,"file":"mmstack-form-core.mjs","sources":["../../../../../packages/form/core/src/lib/util.ts","../../../../../packages/form/core/src/lib/form-control.ts","../../../../../packages/form/core/src/lib/form-array.ts","../../../../../packages/form/core/src/lib/form-group.ts","../../../../../packages/form/core/src/mmstack-form-core.ts"],"sourcesContent":["/**\r\n * Merges two arrays element by element using the `mergeIfObject` logic.\r\n *\r\n * The resulting array will have the same length as the `next` array.\r\n * For each index `i`, the element in the resulting array is determined by:\r\n * `mergeIfObject(prev[i], next[i])`.\r\n * If `prev` is shorter than `next`, `prev[i]` will be `undefined` for the out-of-bounds indices.\r\n *\r\n * @template {any[]} T The array type being merged.\r\n * @param {T} prev The previous array.\r\n * @param {T} next The next array.\r\n * @returns {T} A new array containing the merged elements.\r\n * @example\r\n * const prev = [1, { id: 1, name: \"A\" }, [10], \"extraPrev\"];\r\n * const next = [2, { id: 1, status: \"B\" }, [20, 21], missing , { id: 2 }];\r\n *\r\n * mergeArray(prev, next);\r\n * // Result approx:\r\n * // [\r\n * // 2, // Primitive replaced\r\n * // { id: 1, name: \"A\", status: \"B\" }, // Objects shallow-merged\r\n * // [20, 21], // Arrays replaced (via mergeIfObject -> mergeArray)\r\n * // undefined, // Primitive replaced by missing item in sparse 'next' array\r\n * // { id: 2 } // Added from 'next' (prev[4] was undefined)\r\n * // ]\r\n */\r\nexport function mergeArray<T extends any[]>(prev: T, next: T): T {\r\n return next.map((item, index): T[number] =>\r\n mergeIfObject<T[number]>(prev[index], item),\r\n ) as T;\r\n}\r\n\r\n/**\r\n * Merges two values (`prev`, `next`), prioritizing `next` in most cases.\r\n *\r\n * Behavior:\r\n * - If both `prev` and `next` are non-null, non-array objects, it performs a **shallow merge**\r\n * (`{ ...prev, ...next }`), where properties from `next` overwrite those in `prev`.\r\n * - If both `prev` and `next` are arrays, it delegates to `mergeArray` for element-wise merging.\r\n * - In all other scenarios (type mismatch, primitives, null involved, array mixed with object),\r\n * it simply returns the `next` value.\r\n *\r\n * @template T The type of the values being merged.\r\n * @param {T | undefined} prev The previous value (can be undefined if accessed out of array bounds).\r\n * @param {T} next The next value.\r\n * @returns {T} The merged result based on the rules above.\r\n */\r\nexport function mergeIfObject<T>(prev: T, next: T): T {\r\n if (typeof prev !== typeof next) return next;\r\n if (typeof prev !== 'object' || typeof next !== 'object') return next;\r\n if (prev === null || next === null) return next;\r\n if (Array.isArray(prev) && Array.isArray(next)) return mergeArray(prev, next);\r\n if (Array.isArray(prev) || Array.isArray(next)) return next;\r\n\r\n return { ...prev, ...next };\r\n}\r\n\r\n/**\r\n * Generates a unique ID using crypto.randomUUID if available,\r\n * otherwise falls back to a non-secure random string.\r\n * @returns {string}\r\n */\r\nexport function generateID() {\r\n if (globalThis.crypto?.randomUUID) {\r\n return globalThis.crypto.randomUUID();\r\n }\r\n return Math.random().toString(36).substring(2);\r\n}\r\n","import {\r\n computed,\r\n isSignal,\r\n signal,\r\n untracked,\r\n type CreateSignalOptions,\r\n type Signal,\r\n type ValueEqualityFn,\r\n type WritableSignal,\r\n} from '@angular/core';\r\nimport { type DerivedSignal } from '@mmstack/primitives';\r\nimport { generateID } from './util';\r\n\r\n/**\r\n * Represents the type of a form control.\r\n * - `control`: A single form control (e.g., an input field).\r\n * - `array`: An array of form controls (like Angular's `FormArray`).\r\n * - `group`: A group of form controls (like Angular's `FormGroup`).\r\n */\r\nexport type ControlType = 'control' | 'array' | 'group';\r\n\r\n/**\r\n * Represents a reactive form control. It holds the value, validation status, and other\r\n * metadata for a form field. This is the core building block for creating reactive forms\r\n * with signals.\r\n *\r\n * @typeParam T - The type of the form control's value.\r\n * @typeParam TParent - The type of the parent form control's value (if this control is part of a group or array). Defaults to `undefined`.\r\n * @typeParam TControlType - The type of the control ('control', 'array', or 'group'). Defaults to 'control'.\r\n * @typeParam TPartialValue - The type of the partial value, used for patching.\r\n */\r\nexport type FormControlSignal<\r\n T,\r\n TParent = undefined,\r\n TControlType extends ControlType = 'control',\r\n TPartialValue = T | undefined,\r\n> = {\r\n /** A unique identifier for the control. Used for tracking in `@for` loops. */\r\n id: string;\r\n /** The main value signal for the control. */\r\n value: WritableSignal<T>;\r\n /** A signal indicating whether the control's value has been changed. */\r\n dirty: Signal<boolean>;\r\n /** A signal indicating whether the control has been interacted with (e.g., blurred). */\r\n touched: Signal<boolean>;\r\n /** A signal containing the current validation error message (empty string if valid). */\r\n error: Signal<string>;\r\n /** A signal indicating whether the control is pending */\r\n pending: Signal<boolean>;\r\n /** A signal indicating whether the control is disabled. */\r\n /** A signal indicating whether the control is in a valid state (without errors & not pending) */\r\n valid: Signal<boolean>;\r\n disabled: Signal<boolean>;\r\n /** A signal indicating whether the control is read-only. */\r\n readonly: Signal<boolean>;\r\n /** A signal indicating whether the control is required. */\r\n required: Signal<boolean>;\r\n /** A signal containing the label for the control. */\r\n label: Signal<string>;\r\n /** A signal containing the hint text for the control. */\r\n hint: Signal<string>;\r\n /** Marks the control as touched. */\r\n markAsTouched: () => void;\r\n /** Marks the control and all its child controls (if any) as touched. */\r\n markAllAsTouched: () => void;\r\n /** Marks the control as pristine (not touched). */\r\n markAsPristine: () => void;\r\n /** Marks the control and all its child controls (if any) as pristine. */\r\n markAllAsPristine: () => void;\r\n /**\r\n * Resets the control to a new value and sets a new initial value. This is intended for\r\n * scenarios where the underlying data is updated externally (e.g., data coming from\r\n * the server). If the control is not dirty, the value is updated. If the control *is*\r\n * dirty, the value is *not* updated (preserving user changes).\r\n */\r\n reconcile: (newValue: T) => void;\r\n /**\r\n * Similar to `reconcile`, but forces the update even if the control is dirty.\r\n */\r\n forceReconcile: (newValue: T) => void;\r\n /** Resets the control's value to its initial value. */\r\n reset: () => void;\r\n /** Resets the control's value and initial value. */\r\n resetWithInitial: (initial: T) => void;\r\n /**\r\n * The derivation function used to create this control if it's part of a `formGroup` or `formArray`.\r\n * @internal\r\n */\r\n from?: DerivedSignal<TParent, T>['from'];\r\n /** The equality function used to compare values. Defaults to `Object.is`. */\r\n equal: (a: T, b: T) => boolean;\r\n /** The type of the control ('control', 'array', or 'group'). */\r\n controlType: TControlType;\r\n /**\r\n * A signal representing the partial value of the control, suitable for patching data on a server.\r\n * It contains the changed value if `dirty` is `true`.\r\n */\r\n partialValue: Signal<TPartialValue>;\r\n};\r\n\r\nexport type CreateFormControlOptions<\r\n T,\r\n TControlType extends ControlType = ControlType,\r\n> = CreateSignalOptions<T> & {\r\n validator?: () => (value: T) => string;\r\n onTouched?: () => void;\r\n disable?: () => boolean;\r\n readonly?: () => boolean;\r\n required?: () => boolean;\r\n label?: () => string;\r\n id?: () => string;\r\n hint?: () => string;\r\n dirtyEquality?: ValueEqualityFn<T>;\r\n onReset?: () => void;\r\n controlType?: TControlType;\r\n overrideValidation?: () => string;\r\n pending?: () => boolean;\r\n};\r\n\r\n/**\r\n * Creates a `FormControlSignal`, a reactive form control that holds a value and tracks its\r\n * validity, dirty state, touched state, and other metadata.\r\n *\r\n * @typeParam T - The type of the form control's value.\r\n * @typeParam TParent - The type of the parent form control's value (if this control is part of a group or array).\r\n * @typeParam TControlType - The type of the control. Defaults to `'control'`.\r\n * @typeParam TPartialValue - The type of value when patching\r\n * @param initial - The initial value of the control, or a `DerivedSignal` if this control is part of a `formGroup` or `formArray`.\r\n * @param options - Optional configuration options for the control.\r\n * @returns A `FormControlSignal` instance.\r\n *\r\n * @example\r\n * // Create a simple form control:\r\n * const name = formControl('Initial Name');\r\n *\r\n * // Create a form control with validation:\r\n * const age = formControl(0, {\r\n * validator: () => (value) => value >= 18 ? '' : 'Must be at least 18',\r\n * });\r\n *\r\n * // Create a derived form control (equivalent to the above, but more explicit):\r\n * const user = signal({ name: 'John Doe', age: 30 });\r\n * const name = formControl(derived(user, {\r\n * from: (u) => u.name,\r\n * onChange: (newName) => user.update(u => ({...u, name: newName}))\r\n * }));\r\n *\r\n * // Create a form group with nested controls:\r\n * const user = signal({ name: 'John Doe', age: 30 });\r\n * const form = formGroup(user, {\r\n * name: formControl(derived(user, 'name')),\r\n * age: formControl(derived(user, 'age')),\r\n * })\r\n */\r\nexport function formControl<\r\n T,\r\n TParent = undefined,\r\n TControlType extends ControlType = 'control',\r\n TPartialValue = T | undefined,\r\n>(\r\n initial: DerivedSignal<TParent, T> | T,\r\n opt?: CreateFormControlOptions<T, TControlType>,\r\n): FormControlSignal<T, TParent, TControlType, TPartialValue> {\r\n const value = isSignal(initial) ? initial : signal(initial, opt);\r\n const initialValue = signal(untracked(value));\r\n const eq = opt?.equal ?? Object.is;\r\n\r\n const dirtyEq = opt?.dirtyEquality ?? eq;\r\n\r\n const disabled = computed(() => opt?.disable?.() ?? false);\r\n const readonly = computed(() => opt?.readonly?.() ?? false);\r\n\r\n const dirty = computed(() => !dirtyEq(value(), initialValue()));\r\n\r\n const touched = signal(false);\r\n\r\n const validator = computed(() => opt?.validator?.() ?? (() => ''));\r\n\r\n const error = computed(() => {\r\n if (opt?.overrideValidation) return opt.overrideValidation();\r\n if (disabled() || readonly()) return '';\r\n return validator()(value());\r\n });\r\n\r\n const markAsTouched = () => {\r\n touched.set(true);\r\n opt?.onTouched?.();\r\n };\r\n const markAllAsTouched = markAsTouched;\r\n\r\n const markAsPristine = () => touched.set(false);\r\n const markAllAsPristine = markAsPristine;\r\n\r\n const label = computed(() => opt?.label?.() ?? '');\r\n\r\n const partialValue = computed(() => (dirty() ? value() : undefined));\r\n\r\n const internalReconcile = (newValue: T, force = false) => {\r\n const isDirty = untracked(dirty);\r\n\r\n if (!isDirty || force) {\r\n // very dangerous use of untracked here, don't do this everywhere :)\r\n // thanks to u/synalx for the idea to use untracked here\r\n\r\n untracked(() => {\r\n initialValue.set(newValue);\r\n value.set(newValue);\r\n });\r\n }\r\n };\r\n\r\n const pending = computed(() => opt?.pending?.() ?? false);\r\n\r\n return {\r\n id: opt?.id?.() ?? generateID(),\r\n value,\r\n dirty,\r\n touched,\r\n error,\r\n label,\r\n required: computed(() => opt?.required?.() ?? false),\r\n disabled,\r\n readonly,\r\n pending,\r\n valid: computed(() => !pending() && !error()),\r\n hint: computed(() => opt?.hint?.() ?? ''),\r\n markAsTouched,\r\n markAllAsTouched,\r\n markAsPristine,\r\n markAllAsPristine,\r\n from: (isSignal(initial) ? initial.from : undefined) as FormControlSignal<\r\n T,\r\n TParent,\r\n TControlType\r\n >['from'],\r\n reconcile: (newValue: T) => internalReconcile(newValue),\r\n forceReconcile: (newValue: T) => internalReconcile(newValue, true),\r\n reset: () => {\r\n opt?.onReset?.();\r\n value.set(untracked(initialValue));\r\n },\r\n resetWithInitial: (initial: T) => {\r\n opt?.onReset?.();\r\n initialValue.set(initial);\r\n value.set(initial);\r\n },\r\n equal: eq,\r\n controlType: (opt?.controlType ?? 'control') as TControlType,\r\n partialValue: partialValue as Signal<TPartialValue>,\r\n };\r\n}\r\n","import {\r\n computed,\r\n linkedSignal,\r\n untracked,\r\n type Signal,\r\n type WritableSignal,\r\n} from '@angular/core';\r\nimport { derived, type DerivedSignal } from '@mmstack/primitives';\r\nimport {\r\n formControl,\r\n type CreateFormControlOptions,\r\n type FormControlSignal,\r\n} from './form-control';\r\nimport { type SignalValue } from './signal-value.type';\r\nimport { mergeArray } from './util';\r\n\r\nexport type FormArraySignal<\r\n T,\r\n TIndividualState extends FormControlSignal<\r\n T,\r\n any,\r\n any,\r\n any\r\n > = FormControlSignal<T, any, any, any>,\r\n TParent = undefined,\r\n> = FormControlSignal<\r\n T[],\r\n TParent,\r\n 'array',\r\n | Exclude<SignalValue<TIndividualState['partialValue']>, null | undefined>[]\r\n | undefined\r\n> & {\r\n ownError: Signal<string>;\r\n children: Signal<TIndividualState[]>;\r\n push: (value: T) => void; // add new control with value\r\n remove: (index: number) => void; // remove at index\r\n min: Signal<number>; // for display purposes\r\n max: Signal<number>; // for display purposes\r\n canAdd: Signal<boolean>; // disable add button if false\r\n canRemove: Signal<boolean>; // disable remove buttons if false\r\n};\r\n\r\nexport type CreateFormArraySignalOptions<\r\n T,\r\n TIndividualState extends FormControlSignal<T, any, any, any>,\r\n> = Omit<CreateFormControlOptions<T[]>, 'equal'> & {\r\n min?: () => number;\r\n max?: () => number;\r\n equal?: (a: T, b: T) => boolean;\r\n toPartialValue?: (\r\n v: T,\r\n ) => Exclude<SignalValue<TIndividualState['partialValue']>, null | undefined>;\r\n};\r\n\r\nfunction createReconcileChildren<\r\n T,\r\n TIndividualState extends FormControlSignal<T, any, any, any>,\r\n>(\r\n factory: (val: DerivedSignal<T[], T>, idx: number) => TIndividualState,\r\n opt: { equal: (a: T, b: T) => boolean },\r\n) {\r\n return (\r\n length: number,\r\n source: WritableSignal<T[]>,\r\n prev?: TIndividualState[],\r\n ): TIndividualState[] => {\r\n if (!prev) {\r\n const nextControls = [];\r\n\r\n for (let i = 0; i < length; i++) {\r\n nextControls.push(\r\n factory(derived(source, i, { equal: opt?.equal }), i),\r\n );\r\n }\r\n\r\n return nextControls;\r\n }\r\n\r\n if (length === prev.length) return prev;\r\n\r\n const next = [...prev];\r\n\r\n if (length < prev.length) {\r\n next.splice(length);\r\n } else if (length > prev.length) {\r\n for (let i = prev.length; i < length; i++) {\r\n next.push(factory(derived(source, i, { equal: opt?.equal }), i));\r\n }\r\n }\r\n\r\n return next;\r\n };\r\n}\r\n\r\nexport function formArray<\r\n T,\r\n TIndividualState extends FormControlSignal<\r\n T,\r\n any,\r\n any,\r\n any\r\n > = FormControlSignal<T, any, any, any>,\r\n TParent = undefined,\r\n>(\r\n initial: T[] | DerivedSignal<TParent, T[]>,\r\n factory: (val: DerivedSignal<T[], T>, idx: number) => TIndividualState,\r\n opt?: CreateFormArraySignalOptions<T, TIndividualState>,\r\n): FormArraySignal<T, TIndividualState, TParent> {\r\n const eq = opt?.equal ?? Object.is;\r\n\r\n const arrayEqual = (a: T[], b: T[]) => {\r\n if (a.length !== b.length) return false;\r\n if (!a.length) return true;\r\n\r\n return a.every((v, i) => eq(v, b[i]));\r\n };\r\n\r\n const min = computed(() => opt?.min?.() ?? 0);\r\n const max = computed(() => opt?.max?.() ?? Number.MAX_SAFE_INTEGER);\r\n\r\n const arrayOptions: CreateFormControlOptions<T[], 'array'> = {\r\n ...opt,\r\n equal: arrayEqual,\r\n dirtyEquality: (a, b) => a.length === b.length,\r\n controlType: 'array',\r\n };\r\n\r\n const ctrl = formControl<T[], TParent, 'array'>(\r\n initial,\r\n arrayOptions,\r\n ) satisfies FormControlSignal<T[], TParent, 'array'>;\r\n\r\n const length = computed(() => ctrl.value().length);\r\n\r\n const reconcileChildren = createReconcileChildren<T, TIndividualState>(\r\n factory,\r\n { equal: eq },\r\n );\r\n\r\n // linkedSignal used to re-use previous value so that only length changes are affected and existing controls are kept, but updated\r\n const children = linkedSignal<number, TIndividualState[]>({\r\n source: () => length(),\r\n computation: (len, prev) => reconcileChildren(len, ctrl.value, prev?.value),\r\n });\r\n\r\n const ownError = computed(() => ctrl.error());\r\n\r\n const error = computed((): string => {\r\n const own = ownError();\r\n if (own) return own;\r\n if (!children().length) return '';\r\n return children()\r\n .map((c, idx) => (c.error() ? `${idx}: ${c.error()}` : ''))\r\n .filter(Boolean)\r\n .join('\\n');\r\n });\r\n\r\n const dirty = computed(() => {\r\n if (ctrl.dirty()) return true;\r\n if (!children().length) return false;\r\n return children().some((c) => c.dirty());\r\n });\r\n\r\n const markAllAsTouched = () => {\r\n ctrl.markAllAsTouched();\r\n for (const c of untracked(children)) {\r\n c.markAllAsTouched();\r\n }\r\n };\r\n const markAllAsPristine = () => {\r\n ctrl.markAllAsPristine();\r\n for (const c of untracked(children)) {\r\n c.markAllAsPristine();\r\n }\r\n };\r\n\r\n const toPartialValue = opt?.toPartialValue ?? ((v: T) => v);\r\n const partialValue = computed(() => {\r\n if (!dirty()) return undefined;\r\n return children().map((c) => {\r\n const pv = c.partialValue();\r\n if (pv) return pv;\r\n if (c.controlType === 'control') return undefined;\r\n\r\n // return full value for child objects/arrays as this cannot be partially patched without idx\r\n return toPartialValue(c.value());\r\n });\r\n });\r\n\r\n const touched = computed(\r\n () =>\r\n ctrl.touched() ||\r\n !!(children().length && children().some((c) => c.touched())),\r\n );\r\n\r\n const reconcile = (newValue: T[]) => {\r\n const ctrls = untracked(children);\r\n\r\n for (let i = 0; i < newValue.length; i++) {\r\n ctrls.at(i)?.reconcile(newValue[i]); // reconcile existing controls that are relevant addition/removal will be handled after ctrl.reconcile through linkedSignal\r\n }\r\n\r\n ctrl.reconcile(mergeArray(newValue, untracked(ctrl.value)));\r\n };\r\n\r\n const forceReconcile = (newValue: T[]) => {\r\n const ctrls = untracked(children);\r\n\r\n for (let i = 0; i < newValue.length; i++) {\r\n ctrls.at(i)?.forceReconcile(newValue[i]);\r\n }\r\n\r\n ctrl.forceReconcile(newValue);\r\n };\r\n\r\n const childrenValid = computed(() => {\r\n if (!children().length) return true;\r\n return children().every((d) => d.valid());\r\n });\r\n\r\n const childrenPending = computed(\r\n () => !!children().length && children().some((d) => d.pending()),\r\n );\r\n\r\n return {\r\n ...ctrl,\r\n ownError,\r\n error,\r\n valid: computed(() => ctrl.valid() && childrenValid()),\r\n pending: computed(() => ctrl.pending() || childrenPending()),\r\n touched,\r\n children,\r\n dirty,\r\n markAllAsTouched,\r\n markAllAsPristine,\r\n min,\r\n max,\r\n partialValue,\r\n canAdd: computed(\r\n () => !ctrl.disabled() && !ctrl.readonly() && length() < max(),\r\n ),\r\n canRemove: computed(\r\n () => !ctrl.disabled() && !ctrl.readonly() && length() > min(),\r\n ),\r\n reconcile,\r\n forceReconcile,\r\n reset: () => {\r\n for (const c of untracked(children)) {\r\n c.reset();\r\n }\r\n ctrl.reset();\r\n },\r\n resetWithInitial: (initial: T[]) => {\r\n const ctrls = untracked(children);\r\n for (let i = 0; i < initial.length; i++) {\r\n ctrls.at(i)?.resetWithInitial(initial[i]);\r\n }\r\n ctrl.resetWithInitial(initial);\r\n },\r\n push: (next) => ctrl.value.update((cur) => [...cur, next]),\r\n remove: (idx) =>\r\n ctrl.value.update((cur) => cur.filter((_, i) => i !== idx)),\r\n };\r\n}\r\n","import {\r\n computed,\r\n isSignal,\r\n signal,\r\n untracked,\r\n type Signal,\r\n type WritableSignal,\r\n} from '@angular/core';\r\nimport {\r\n isDerivation,\r\n toFakeSignalDerivation,\r\n type DerivedSignal,\r\n} from '@mmstack/primitives';\r\nimport {\r\n formControl,\r\n type CreateFormControlOptions,\r\n type FormControlSignal,\r\n} from './form-control';\r\nimport { type SignalValue } from './signal-value.type';\r\nimport { mergeIfObject } from './util';\r\n\r\ntype AnyObject = Record<PropertyKey, any>;\r\n\r\n/**\r\n * Extracts the partial value types from a record of `FormControlSignal` instances.\r\n * This is used to construct the `partialValue` type for `FormGroupSignal`.\r\n * @internal\r\n */\r\ntype DerivationPartialValues<\r\n TDerivations extends Record<string, FormControlSignal<any, any, any, any>>,\r\n> = {\r\n [K in keyof TDerivations]: Exclude<\r\n SignalValue<TDerivations[K]['partialValue']>,\r\n undefined\r\n >;\r\n};\r\n\r\n/**\r\n * Represents a group of form controls, similar to Angular's `FormGroup`. It aggregates\r\n * the values and states of its child controls into a single object.\r\n *\r\n * @typeParam T - The type of the form group's value (an object).\r\n * @typeParam TDerivations - A record where keys are the names of the child controls and values are the `FormControlSignal` instances.\r\n * @typeParam TParent - The type of the parent form control's value (if this group is nested).\r\n */\r\nexport type FormGroupSignal<\r\n T,\r\n TDerivations extends Record<string, FormControlSignal<any, T, any, any>>,\r\n TParent = undefined,\r\n> = FormControlSignal<\r\n T,\r\n TParent,\r\n 'group',\r\n Partial<DerivationPartialValues<TDerivations>>\r\n> & {\r\n /**\r\n * A signal that holds a record of the child form controls. The keys are the names\r\n * of the controls, and the values are the `FormControlSignal` instances.\r\n */\r\n children: Signal<TDerivations>;\r\n /**\r\n * A signal that holds the validation error message of the group itself (excluding child errors).\r\n */\r\n ownError: Signal<string>;\r\n};\r\n\r\n/**\r\n * Options for creating a `FormGroupSignal`. Extends `CreateFormControlOptions`.\r\n */\r\nexport type CreateFormGroupOptions<\r\n T,\r\n TDerivations extends Record<string, FormControlSignal<any, T, any, any>>,\r\n> = CreateFormControlOptions<T, 'group'> & {\r\n /**\r\n * An optional function to create a base object for the `partialValue` signal.\r\n * This can be used to pre-populate the partial value with default values or\r\n * to perform custom logic before merging in the partial values from child controls.\r\n */\r\n createBasePartialValue?: (\r\n value: T,\r\n ) => Partial<DerivationPartialValues<TDerivations>>;\r\n};\r\n\r\n/**\r\n * Creates a `FormGroupSignal`, which aggregates a set of child form controls into a single object.\r\n *\r\n * @typeParam T - The type of the form group's value (an object).\r\n * @typeParam TDerivations - A record where keys are the names of the child controls and values are the `FormControlSignal` instances.\r\n * @typeParam TParent - The type of the parent form control's value (if this group is nested within another group or array).\r\n * @param initial - The initial value of the form group (or a `WritableSignal` or `DerivedSignal` if the group is nested).\r\n * @param providedChildren - An object containing the child `FormControlSignal` instances, or a function that returns such an object.\r\n * Using a function allows for dynamic creation of child controls (e.g., in response to changes in other signals).\r\n * @param options - Optional configuration options for the form group.\r\n * @returns A `FormGroupSignal` instance.\r\n *\r\n * @example\r\n * // Create a simple form group:\r\n * const user = signal({ name: 'John Doe', age: 30 });\r\n * const form = formGroup(user, {\r\n * name: formControl(derived(user, 'name')),\r\n * age: formControl(derived(user, 'age')),\r\n * })\r\n *\r\n * // Create a nested form group:\r\n * const user = signal({ name: 'John', age: 30, address: {street: \"Some street\"} });\r\n *\r\n * const address = derived(user, 'address');\r\n * const userForm = formGroup(user, {\r\n * name: formControl(derived(user, 'name')),\r\n * age: formControl(derived(user, 'age')),\r\n * address: formGroup(address, {\r\n * street: formControl(derived(address, (address) => address.street), {\r\n * validator: () => (value) => value ? \"\" : \"required!\"\r\n * }) // you can create deeply nested structures.\r\n * })\r\n * });\r\n *\r\n * // Create a form group with dynamically created children replaced rare FormRecord requirements.\r\n * const showAddress = signal(false);\r\n * type Characteristic = {\r\n * valueType: 'string';\r\n * value: string;\r\n * } | {\r\n * valueType: 'number';\r\n * value: number;\r\n * }\r\n * const char = signal<Characteristic>({ valueType: 'string', value: '' });\r\n * const charForm = formGroup(char, () => {\r\n * if (char().valueType === 'string) return createStringControl(char);\r\n * return createNumberControl(char);\r\n * });\r\n *\r\n */\r\nexport function formGroup<\r\n T,\r\n TDerivations extends Record<string, FormControlSignal<any, T, any, any>>,\r\n TParent = undefined,\r\n>(\r\n initial: DerivedSignal<TParent, T> | T | WritableSignal<T>,\r\n providedChildren: (() => TDerivations) | TDerivations,\r\n opt?: CreateFormGroupOptions<T, TDerivations>,\r\n): FormGroupSignal<T, TDerivations, TParent> {\r\n const valueSignal = isSignal(initial) ? initial : signal(initial);\r\n // we fake a derivation if not present, so that .from is present on the signal\r\n const value = isDerivation<TParent, T>(valueSignal)\r\n ? valueSignal\r\n : toFakeSignalDerivation<TParent, T>(valueSignal);\r\n\r\n // we allow for a function/signal to be passed, this case should only be used if the child controls change dependent upon something, say if a formControl is flipped into a formGroup.\r\n const children =\r\n typeof providedChildren === 'function'\r\n ? computed(() => providedChildren())\r\n : computed(() => providedChildren);\r\n\r\n // array allows for easier handling\r\n const derivationsArray = computed(() => Object.values(children()));\r\n\r\n const childrenDirty = computed(\r\n () =>\r\n !!derivationsArray().length && derivationsArray().some((d) => d.dirty()),\r\n );\r\n\r\n // by default dont compare object references, just use childrenDirtySignal\r\n const baseDirtyEq = opt?.dirtyEquality ?? opt?.equal ?? (() => true);\r\n\r\n // function which calls a signal becomes a signal\r\n const dirtyEquality = (a: T, b: T) => {\r\n return baseDirtyEq(a, b) && !childrenDirty();\r\n };\r\n\r\n // group control\r\n const ctrl = formControl<T, TParent, 'group'>(value, {\r\n ...opt,\r\n dirtyEquality,\r\n controlType: 'group',\r\n readonly: () => {\r\n // readonly if is readonly or all children are readonly\r\n if (opt?.readonly?.()) return true;\r\n return (\r\n !!derivationsArray().length &&\r\n derivationsArray().every((d) => d.readonly())\r\n );\r\n },\r\n disable: () => {\r\n if (opt?.disable?.()) return true;\r\n return (\r\n !!derivationsArray().length &&\r\n derivationsArray().every((d) => d.disabled())\r\n );\r\n },\r\n }) satisfies FormControlSignal<T, TParent, 'group'>;\r\n\r\n const childrenTouched = computed(\r\n () =>\r\n !!derivationsArray().length &&\r\n derivationsArray().some((d) => d.touched()),\r\n );\r\n\r\n const touched = computed(() => ctrl.touched() || childrenTouched());\r\n\r\n const childError = computed(() => {\r\n if (!derivationsArray().length) return '';\r\n return derivationsArray()\r\n .map((d) => (d.error() ? `${d.label()}: ${d.error()}` : ''))\r\n .filter(Boolean)\r\n .join('\\n');\r\n });\r\n\r\n const error = computed(() => {\r\n const ownError = ctrl.error();\r\n if (ownError) return ownError;\r\n return childError() ? 'INVALID' : '';\r\n });\r\n\r\n const markAllAsTouched = () => {\r\n ctrl.markAllAsTouched();\r\n for (const ctrl of untracked(derivationsArray)) {\r\n ctrl.markAllAsTouched();\r\n }\r\n };\r\n\r\n const markAllAsPristine = () => {\r\n ctrl.markAllAsPristine();\r\n for (const ctrl of untracked(derivationsArray)) {\r\n ctrl.markAllAsPristine();\r\n }\r\n };\r\n\r\n const reconcile = (newValue: T) => {\r\n // set the children values based on the derivation of the new value\r\n for (const ctrl of untracked(derivationsArray)) {\r\n const from = ctrl.from;\r\n if (!from) continue;\r\n ctrl.reconcile(from(newValue));\r\n }\r\n ctrl.reconcile(mergeIfObject(newValue, untracked(value)));\r\n };\r\n\r\n const forceReconcile = (newValue: T) => {\r\n for (const ctrl of untracked(derivationsArray)) {\r\n const from = ctrl.from;\r\n if (!from) continue;\r\n ctrl.forceReconcile(from(newValue));\r\n }\r\n ctrl.forceReconcile(newValue);\r\n };\r\n\r\n const createBaseValueFn = opt?.createBasePartialValue;\r\n\r\n const basePartialValue: Signal<\r\n Partial<DerivationPartialValues<TDerivations>>\r\n > = createBaseValueFn\r\n ? computed(() => createBaseValueFn(ctrl.value()))\r\n : computed(() => ({}));\r\n\r\n const partialValue = computed(() => {\r\n const obj: Partial<DerivationPartialValues<TDerivations>> = {\r\n ...basePartialValue(),\r\n };\r\n\r\n if (!ctrl.dirty()) return obj;\r\n\r\n for (const [key, ctrl] of Object.entries(children())) {\r\n const pv = ctrl.partialValue();\r\n\r\n if (pv === undefined) continue;\r\n (obj as AnyObject)[key] = pv;\r\n }\r\n\r\n return obj;\r\n });\r\n\r\n const childrenValid = computed(() => {\r\n if (!derivationsArray().length) return true;\r\n return derivationsArray().every((d) => d.valid());\r\n });\r\n\r\n const childrenPending = computed(\r\n () =>\r\n !!derivationsArray().length &&\r\n derivationsArray().some((d) => d.pending()),\r\n );\r\n\r\n return {\r\n ...ctrl,\r\n children,\r\n partialValue,\r\n reconcile,\r\n forceReconcile,\r\n ownError: ctrl.error,\r\n touched,\r\n error,\r\n valid: computed(() => ctrl.valid() && childrenValid()),\r\n pending: computed(() => ctrl.pending() || childrenPending()),\r\n markAllAsPristine,\r\n markAllAsTouched,\r\n reset: () => {\r\n for (const ctrl of untracked(derivationsArray)) {\r\n ctrl.reset();\r\n }\r\n ctrl.reset();\r\n },\r\n resetWithInitial: (initial: T) => {\r\n for (const ctrl of untracked(derivationsArray)) {\r\n const from = ctrl.from;\r\n if (from) ctrl.resetWithInitial(from(initial));\r\n else ctrl.reset();\r\n }\r\n ctrl.resetWithInitial(initial);\r\n },\r\n };\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mmstack/form-core",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "21.0.0",
|
|
4
4
|
"keywords": [
|
|
5
5
|
"angular",
|
|
6
6
|
"signals",
|
|
@@ -19,21 +19,21 @@
|
|
|
19
19
|
},
|
|
20
20
|
"homepage": "https://github.com/mihajm/mmstack/blob/master/packages/form/core",
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"@mmstack/primitives": "^
|
|
22
|
+
"@mmstack/primitives": "^21.0.0",
|
|
23
23
|
"tslib": "^2.3.0"
|
|
24
24
|
},
|
|
25
25
|
"peerDependencies": {
|
|
26
|
-
"@angular/core": "
|
|
26
|
+
"@angular/core": ">=21 <22"
|
|
27
27
|
},
|
|
28
28
|
"sideEffects": false,
|
|
29
29
|
"module": "fesm2022/mmstack-form-core.mjs",
|
|
30
|
-
"typings": "
|
|
30
|
+
"typings": "types/mmstack-form-core.d.ts",
|
|
31
31
|
"exports": {
|
|
32
32
|
"./package.json": {
|
|
33
33
|
"default": "./package.json"
|
|
34
34
|
},
|
|
35
35
|
".": {
|
|
36
|
-
"types": "./
|
|
36
|
+
"types": "./types/mmstack-form-core.d.ts",
|
|
37
37
|
"default": "./fesm2022/mmstack-form-core.mjs"
|
|
38
38
|
}
|
|
39
39
|
}
|
|
File without changes
|