{"version":3,"file":"ajsf-core.mjs","sources":["../../../../projects/ajsf-core/src/lib/shared/convert-schema-to-draft6.function.ts","../../../../projects/ajsf-core/src/lib/shared/validator.functions.ts","../../../../projects/ajsf-core/src/lib/shared/utility.functions.ts","../../../../projects/ajsf-core/src/lib/shared/jsonpointer.functions.ts","../../../../projects/ajsf-core/src/lib/shared/format-regex.constants.ts","../../../../projects/ajsf-core/src/lib/shared/json.validators.ts","../../../../projects/ajsf-core/src/lib/shared/merge-schemas.function.ts","../../../../projects/ajsf-core/src/lib/shared/json-schema.functions.ts","../../../../projects/ajsf-core/src/lib/shared/form-group.functions.ts","../../../../projects/ajsf-core/src/lib/shared/layout.functions.ts","../../../../projects/ajsf-core/src/lib/shared/index.ts","../../../../projects/ajsf-core/src/lib/locale/de-validation-messages.ts","../../../../projects/ajsf-core/src/lib/locale/en-validation-messages.ts","../../../../projects/ajsf-core/src/lib/locale/es-validation-messages.ts","../../../../projects/ajsf-core/src/lib/locale/fr-validation-messages.ts","../../../../projects/ajsf-core/src/lib/locale/it-validation-messages.ts","../../../../projects/ajsf-core/src/lib/locale/pt-validation-messages.ts","../../../../projects/ajsf-core/src/lib/locale/zh-validation-messages.ts","../../../../projects/ajsf-core/src/lib/json-schema-form.service.ts","../../../../projects/ajsf-core/src/lib/framework-library/framework.ts","../../../../projects/ajsf-core/src/lib/widget-library/add-reference.component.ts","../../../../projects/ajsf-core/src/lib/widget-library/button.component.ts","../../../../projects/ajsf-core/src/lib/widget-library/checkbox.component.ts","../../../../projects/ajsf-core/src/lib/widget-library/checkboxes.component.ts","../../../../projects/ajsf-core/src/lib/widget-library/file.component.ts","../../../../projects/ajsf-core/src/lib/widget-library/input.component.ts","../../../../projects/ajsf-core/src/lib/widget-library/message.component.ts","../../../../projects/ajsf-core/src/lib/widget-library/none.component.ts","../../../../projects/ajsf-core/src/lib/widget-library/number.component.ts","../../../../projects/ajsf-core/src/lib/widget-library/one-of.component.ts","../../../../projects/ajsf-core/src/lib/widget-library/radios.component.ts","../../../../projects/ajsf-core/src/lib/widget-library/select-framework.component.ts","../../../../projects/ajsf-core/src/lib/widget-library/orderable.directive.ts","../../../../projects/ajsf-core/src/lib/widget-library/root.component.ts","../../../../projects/ajsf-core/src/lib/widget-library/section.component.ts","../../../../projects/ajsf-core/src/lib/widget-library/select.component.ts","../../../../projects/ajsf-core/src/lib/widget-library/select-widget.component.ts","../../../../projects/ajsf-core/src/lib/widget-library/submit.component.ts","../../../../projects/ajsf-core/src/lib/widget-library/tabs.component.ts","../../../../projects/ajsf-core/src/lib/widget-library/template.component.ts","../../../../projects/ajsf-core/src/lib/widget-library/textarea.component.ts","../../../../projects/ajsf-core/src/lib/widget-library/widget-library.service.ts","../../../../projects/ajsf-core/src/lib/framework-library/framework-library.service.ts","../../../../projects/ajsf-core/src/lib/json-schema-form.component.ts","../../../../projects/ajsf-core/src/lib/json-schema-form.component.html","../../../../projects/ajsf-core/src/lib/framework-library/no-framework.component.ts","../../../../projects/ajsf-core/src/lib/framework-library/no-framework.component.html","../../../../projects/ajsf-core/src/lib/framework-library/no.framework.ts","../../../../projects/ajsf-core/src/lib/widget-library/hidden.component.ts","../../../../projects/ajsf-core/src/lib/widget-library/tab.component.ts","../../../../projects/ajsf-core/src/lib/widget-library/index.ts","../../../../projects/ajsf-core/src/lib/widget-library/widget-library.module.ts","../../../../projects/ajsf-core/src/lib/framework-library/no-framework.module.ts","../../../../projects/ajsf-core/src/lib/json-schema-form.module.ts","../../../../projects/ajsf-core/src/public_api.ts","../../../../projects/ajsf-core/src/ajsf-core.ts"],"sourcesContent":["import cloneDeep from 'lodash/cloneDeep';\n\n/**\n * 'convertSchemaToDraft6' function\n *\n * Converts a JSON Schema from draft 1 through 4 format to draft 6 format\n *\n * Inspired by on geraintluff's JSON Schema 3 to 4 compatibility function:\n *   https://github.com/geraintluff/json-schema-compatibility\n * Also uses suggestions from AJV's JSON Schema 4 to 6 migration guide:\n *   https://github.com/epoberezkin/ajv/releases/tag/5.0.0\n * And additional details from the official JSON Schema documentation:\n *   http://json-schema.org\n *\n * //  { object } originalSchema - JSON schema (draft 1, 2, 3, 4, or 6)\n * //  { OptionObject = {} } options - options: parent schema changed?, schema draft number?\n * // { object } - JSON schema (draft 6)\n */\nexport interface OptionObject { changed?: boolean; draft?: number; }\nexport function convertSchemaToDraft6(schema, options: OptionObject = {}) {\n  let draft: number = options.draft || null;\n  let changed: boolean = options.changed || false;\n\n  if (typeof schema !== 'object') { return schema; }\n  if (typeof schema.map === 'function') {\n    return [...schema.map(subSchema => convertSchemaToDraft6(subSchema, { changed, draft }))];\n  }\n  let newSchema = { ...schema };\n  const simpleTypes = ['array', 'boolean', 'integer', 'null', 'number', 'object', 'string'];\n\n  if (typeof newSchema.$schema === 'string' &&\n    /http\\:\\/\\/json\\-schema\\.org\\/draft\\-0\\d\\/schema\\#/.test(newSchema.$schema)\n  ) {\n    draft = newSchema.$schema[30];\n  }\n\n  // Convert v1-v2 'contentEncoding' to 'media.binaryEncoding'\n  // Note: This is only used in JSON hyper-schema (not regular JSON schema)\n  if (newSchema.contentEncoding) {\n    newSchema.media = { binaryEncoding: newSchema.contentEncoding };\n    delete newSchema.contentEncoding;\n    changed = true;\n  }\n\n  // Convert v1-v3 'extends' to 'allOf'\n  if (typeof newSchema.extends === 'object') {\n    newSchema.allOf = typeof newSchema.extends.map === 'function' ?\n      newSchema.extends.map(subSchema => convertSchemaToDraft6(subSchema, { changed, draft })) :\n      [convertSchemaToDraft6(newSchema.extends, { changed, draft })];\n    delete newSchema.extends;\n    changed = true;\n  }\n\n  // Convert v1-v3 'disallow' to 'not'\n  if (newSchema.disallow) {\n    if (typeof newSchema.disallow === 'string') {\n      newSchema.not = { type: newSchema.disallow };\n    } else if (typeof newSchema.disallow.map === 'function') {\n      newSchema.not = {\n        anyOf: newSchema.disallow\n          .map(type => typeof type === 'object' ? type : { type })\n      };\n    }\n    delete newSchema.disallow;\n    changed = true;\n  }\n\n  // Convert v3 string 'dependencies' properties to arrays\n  if (typeof newSchema.dependencies === 'object' &&\n    Object.keys(newSchema.dependencies)\n      .some(key => typeof newSchema.dependencies[key] === 'string')\n  ) {\n    newSchema.dependencies = { ...newSchema.dependencies };\n    Object.keys(newSchema.dependencies)\n      .filter(key => typeof newSchema.dependencies[key] === 'string')\n      .forEach(key => newSchema.dependencies[key] = [newSchema.dependencies[key]]);\n    changed = true;\n  }\n\n  // Convert v1 'maxDecimal' to 'multipleOf'\n  if (typeof newSchema.maxDecimal === 'number') {\n    newSchema.multipleOf = 1 / Math.pow(10, newSchema.maxDecimal);\n    delete newSchema.divisibleBy;\n    changed = true;\n    if (!draft || draft === 2) { draft = 1; }\n  }\n\n  // Convert v2-v3 'divisibleBy' to 'multipleOf'\n  if (typeof newSchema.divisibleBy === 'number') {\n    newSchema.multipleOf = newSchema.divisibleBy;\n    delete newSchema.divisibleBy;\n    changed = true;\n  }\n\n  // Convert v1-v2 boolean 'minimumCanEqual' to 'exclusiveMinimum'\n  if (typeof newSchema.minimum === 'number' && newSchema.minimumCanEqual === false) {\n    newSchema.exclusiveMinimum = newSchema.minimum;\n    delete newSchema.minimum;\n    changed = true;\n    if (!draft) { draft = 2; }\n  } else if (typeof newSchema.minimumCanEqual === 'boolean') {\n    delete newSchema.minimumCanEqual;\n    changed = true;\n    if (!draft) { draft = 2; }\n  }\n\n  // Convert v3-v4 boolean 'exclusiveMinimum' to numeric\n  if (typeof newSchema.minimum === 'number' && newSchema.exclusiveMinimum === true) {\n    newSchema.exclusiveMinimum = newSchema.minimum;\n    delete newSchema.minimum;\n    changed = true;\n  } else if (typeof newSchema.exclusiveMinimum === 'boolean') {\n    delete newSchema.exclusiveMinimum;\n    changed = true;\n  }\n\n  // Convert v1-v2 boolean 'maximumCanEqual' to 'exclusiveMaximum'\n  if (typeof newSchema.maximum === 'number' && newSchema.maximumCanEqual === false) {\n    newSchema.exclusiveMaximum = newSchema.maximum;\n    delete newSchema.maximum;\n    changed = true;\n    if (!draft) { draft = 2; }\n  } else if (typeof newSchema.maximumCanEqual === 'boolean') {\n    delete newSchema.maximumCanEqual;\n    changed = true;\n    if (!draft) { draft = 2; }\n  }\n\n  // Convert v3-v4 boolean 'exclusiveMaximum' to numeric\n  if (typeof newSchema.maximum === 'number' && newSchema.exclusiveMaximum === true) {\n    newSchema.exclusiveMaximum = newSchema.maximum;\n    delete newSchema.maximum;\n    changed = true;\n  } else if (typeof newSchema.exclusiveMaximum === 'boolean') {\n    delete newSchema.exclusiveMaximum;\n    changed = true;\n  }\n\n  // Search object 'properties' for 'optional', 'required', and 'requires' items,\n  // and convert them into object 'required' arrays and 'dependencies' objects\n  if (typeof newSchema.properties === 'object') {\n    const properties = { ...newSchema.properties };\n    const requiredKeys = Array.isArray(newSchema.required) ?\n      new Set(newSchema.required) : new Set();\n\n    // Convert v1-v2 boolean 'optional' properties to 'required' array\n    if (draft === 1 || draft === 2 ||\n      Object.keys(properties).some(key => properties[key].optional === true)\n    ) {\n      Object.keys(properties)\n        .filter(key => properties[key].optional !== true)\n        .forEach(key => requiredKeys.add(key));\n      changed = true;\n      if (!draft) { draft = 2; }\n    }\n\n    // Convert v3 boolean 'required' properties to 'required' array\n    if (Object.keys(properties).some(key => properties[key].required === true)) {\n      Object.keys(properties)\n        .filter(key => properties[key].required === true)\n        .forEach(key => requiredKeys.add(key));\n      changed = true;\n    }\n\n    if (requiredKeys.size) { newSchema.required = Array.from(requiredKeys); }\n\n    // Convert v1-v2 array or string 'requires' properties to 'dependencies' object\n    if (Object.keys(properties).some(key => properties[key].requires)) {\n      const dependencies = typeof newSchema.dependencies === 'object' ?\n        { ...newSchema.dependencies } : {};\n      Object.keys(properties)\n        .filter(key => properties[key].requires)\n        .forEach(key => dependencies[key] =\n          typeof properties[key].requires === 'string' ?\n            [properties[key].requires] : properties[key].requires\n        );\n      newSchema.dependencies = dependencies;\n      changed = true;\n      if (!draft) { draft = 2; }\n    }\n\n    newSchema.properties = properties;\n  }\n\n  // Revove v1-v2 boolean 'optional' key\n  if (typeof newSchema.optional === 'boolean') {\n    delete newSchema.optional;\n    changed = true;\n    if (!draft) { draft = 2; }\n  }\n\n  // Revove v1-v2 'requires' key\n  if (newSchema.requires) {\n    delete newSchema.requires;\n  }\n\n  // Revove v3 boolean 'required' key\n  if (typeof newSchema.required === 'boolean') {\n    delete newSchema.required;\n  }\n\n  // Convert id to $id\n  if (typeof newSchema.id === 'string' && !newSchema.$id) {\n    if (newSchema.id.slice(-1) === '#') {\n      newSchema.id = newSchema.id.slice(0, -1);\n    }\n    newSchema.$id = newSchema.id + '-CONVERTED-TO-DRAFT-06#';\n    delete newSchema.id;\n    changed = true;\n  }\n\n  // Check if v1-v3 'any' or object types will be converted\n  if (newSchema.type && (typeof newSchema.type.every === 'function' ?\n    !newSchema.type.every(type => simpleTypes.includes(type)) :\n    !simpleTypes.includes(newSchema.type)\n  )) {\n    changed = true;\n  }\n\n  // If schema changed, update or remove $schema identifier\n  if (typeof newSchema.$schema === 'string' &&\n    /http\\:\\/\\/json\\-schema\\.org\\/draft\\-0[1-4]\\/schema\\#/.test(newSchema.$schema)\n  ) {\n    newSchema.$schema = 'http://json-schema.org/draft-06/schema#';\n    changed = true;\n  } else if (changed && typeof newSchema.$schema === 'string') {\n    const addToDescription = 'Converted to draft 6 from ' + newSchema.$schema;\n    if (typeof newSchema.description === 'string' && newSchema.description.length) {\n      newSchema.description += '\\n' + addToDescription;\n    } else {\n      newSchema.description = addToDescription;\n    }\n    delete newSchema.$schema;\n  }\n\n  // Convert v1-v3 'any' and object types\n  if (newSchema.type && (typeof newSchema.type.every === 'function' ?\n    !newSchema.type.every(type => simpleTypes.includes(type)) :\n    !simpleTypes.includes(newSchema.type)\n  )) {\n    if (newSchema.type.length === 1) { newSchema.type = newSchema.type[0]; }\n    if (typeof newSchema.type === 'string') {\n      // Convert string 'any' type to array of all standard types\n      if (newSchema.type === 'any') {\n        newSchema.type = simpleTypes;\n        // Delete non-standard string type\n      } else {\n        delete newSchema.type;\n      }\n    } else if (typeof newSchema.type === 'object') {\n      if (typeof newSchema.type.every === 'function') {\n        // If array of strings, only allow standard types\n        if (newSchema.type.every(type => typeof type === 'string')) {\n          newSchema.type = newSchema.type.some(type => type === 'any') ?\n            newSchema.type = simpleTypes :\n            newSchema.type.filter(type => simpleTypes.includes(type));\n          // If type is an array with objects, convert the current schema to an 'anyOf' array\n        } else if (newSchema.type.length > 1) {\n          const arrayKeys = ['additionalItems', 'items', 'maxItems', 'minItems', 'uniqueItems', 'contains'];\n          const numberKeys = ['multipleOf', 'maximum', 'exclusiveMaximum', 'minimum', 'exclusiveMinimum'];\n          const objectKeys = ['maxProperties', 'minProperties', 'required', 'additionalProperties',\n            'properties', 'patternProperties', 'dependencies', 'propertyNames'];\n          const stringKeys = ['maxLength', 'minLength', 'pattern', 'format'];\n          const filterKeys = {\n            'array': [...numberKeys, ...objectKeys, ...stringKeys],\n            'integer': [...arrayKeys, ...objectKeys, ...stringKeys],\n            'number': [...arrayKeys, ...objectKeys, ...stringKeys],\n            'object': [...arrayKeys, ...numberKeys, ...stringKeys],\n            'string': [...arrayKeys, ...numberKeys, ...objectKeys],\n            'all': [...arrayKeys, ...numberKeys, ...objectKeys, ...stringKeys],\n          };\n          const anyOf = [];\n          for (const type of newSchema.type) {\n            const newType = typeof type === 'string' ? { type } : { ...type };\n            Object.keys(newSchema)\n              .filter(key => !newType.hasOwnProperty(key) &&\n                ![...(filterKeys[newType.type] || filterKeys.all), 'type', 'default']\n                  .includes(key)\n              )\n              .forEach(key => newType[key] = newSchema[key]);\n            anyOf.push(newType);\n          }\n          newSchema = newSchema.hasOwnProperty('default') ?\n            { anyOf, default: newSchema.default } : { anyOf };\n          // If type is an object, merge it with the current schema\n        } else {\n          const typeSchema = newSchema.type;\n          delete newSchema.type;\n          Object.assign(newSchema, typeSchema);\n        }\n      }\n    } else {\n      delete newSchema.type;\n    }\n  }\n\n  // Convert sub schemas\n  Object.keys(newSchema)\n    .filter(key => typeof newSchema[key] === 'object')\n    .forEach(key => {\n      if (\n        ['definitions', 'dependencies', 'properties', 'patternProperties']\n          .includes(key) && typeof newSchema[key].map !== 'function'\n      ) {\n        const newKey = {};\n        Object.keys(newSchema[key]).forEach(subKey => newKey[subKey] =\n          convertSchemaToDraft6(newSchema[key][subKey], { changed, draft })\n        );\n        newSchema[key] = newKey;\n      } else if (\n        ['items', 'additionalItems', 'additionalProperties',\n          'allOf', 'anyOf', 'oneOf', 'not'].includes(key)\n      ) {\n        newSchema[key] = convertSchemaToDraft6(newSchema[key], { changed, draft });\n      } else {\n        newSchema[key] = cloneDeep(newSchema[key]);\n      }\n    });\n\n  return newSchema;\n}\n","import { AbstractControl } from '@angular/forms';\nimport { from, Observable } from 'rxjs';\n\n/**\n * Validator utility function library:\n *\n * Validator and error utilities:\n *   _executeValidators, _executeAsyncValidators, _mergeObjects, _mergeErrors\n *\n * Individual value checking:\n *   isDefined, hasValue, isEmpty\n *\n * Individual type checking:\n *   isString, isNumber, isInteger, isBoolean, isFunction, isObject, isArray,\n *   isMap, isSet, isPromise, isObservable\n *\n * Multiple type checking and fixing:\n *   getType, isType, isPrimitive, toJavaScriptType, toSchemaType,\n *   _toPromise, toObservable\n *\n * Utility functions:\n *   inArray, xor\n *\n * Typescript types and interfaces:\n *   SchemaPrimitiveType, SchemaType, JavaScriptPrimitiveType, JavaScriptType,\n *   PrimitiveValue, PlainObject, IValidatorFn, AsyncIValidatorFn\n *\n * Note: 'IValidatorFn' is short for 'invertable validator function',\n *   which is a validator functions that accepts an optional second\n *   argument which, if set to TRUE, causes the validator to perform\n *   the opposite of its original function.\n */\n\nexport type SchemaPrimitiveType =\n  'string' | 'number' | 'integer' | 'boolean' | 'null';\nexport type SchemaType =\n  'string' | 'number' | 'integer' | 'boolean' | 'null' | 'object' | 'array';\nexport type JavaScriptPrimitiveType =\n  'string' | 'number' | 'boolean' | 'null' | 'undefined';\nexport type JavaScriptType =\n  'string' | 'number' | 'boolean' | 'null' | 'undefined' | 'object' | 'array' |\n  'map' | 'set' | 'arguments' | 'date' | 'error' | 'function' | 'json' |\n  'math' | 'regexp'; // Note: this list is incomplete\nexport type PrimitiveValue = string | number | boolean | null | undefined;\nexport interface PlainObject { [k: string]: any; }\n\nexport type IValidatorFn = (c: AbstractControl, i?: boolean) => PlainObject;\nexport type AsyncIValidatorFn = (c: AbstractControl, i?: boolean) => any;\n\n/**\n * '_executeValidators' utility function\n *\n * Validates a control against an array of validators, and returns\n * an array of the same length containing a combination of error messages\n * (from invalid validators) and null values (from valid validators)\n *\n * //  { AbstractControl } control - control to validate\n * //  { IValidatorFn[] } validators - array of validators\n * //  { boolean } invert - invert?\n * // { PlainObject[] } - array of nulls and error message\n */\nexport function _executeValidators(control, validators, invert = false) {\n  return validators.map(validator => validator(control, invert));\n}\n\n/**\n * '_executeAsyncValidators' utility function\n *\n * Validates a control against an array of async validators, and returns\n * an array of observabe results of the same length containing a combination of\n * error messages (from invalid validators) and null values (from valid ones)\n *\n * //  { AbstractControl } control - control to validate\n * //  { AsyncIValidatorFn[] } validators - array of async validators\n * //  { boolean } invert - invert?\n * //  - array of observable nulls and error message\n */\nexport function _executeAsyncValidators(control, validators, invert = false) {\n  return validators.map(validator => validator(control, invert));\n}\n\n/**\n * '_mergeObjects' utility function\n *\n * Recursively Merges one or more objects into a single object with combined keys.\n * Automatically detects and ignores null and undefined inputs.\n * Also detects duplicated boolean 'not' keys and XORs their values.\n *\n * //  { PlainObject[] } objects - one or more objects to merge\n * // { PlainObject } - merged object\n */\nexport function _mergeObjects(...objects) {\n  const mergedObject: PlainObject = { };\n  for (const currentObject of objects) {\n    if (isObject(currentObject)) {\n      for (const key of Object.keys(currentObject)) {\n        const currentValue = currentObject[key];\n        const mergedValue = mergedObject[key];\n        mergedObject[key] = !isDefined(mergedValue) ? currentValue :\n          key === 'not' && isBoolean(mergedValue, 'strict') &&\n            isBoolean(currentValue, 'strict') ? xor(mergedValue, currentValue) :\n          getType(mergedValue) === 'object' && getType(currentValue) === 'object' ?\n            _mergeObjects(mergedValue, currentValue) :\n            currentValue;\n      }\n    }\n  }\n  return mergedObject;\n}\n\n/**\n * '_mergeErrors' utility function\n *\n * Merges an array of objects.\n * Used for combining the validator errors returned from 'executeValidators'\n *\n * //  { PlainObject[] } arrayOfErrors - array of objects\n * // { PlainObject } - merged object, or null if no usable input objectcs\n */\nexport function _mergeErrors(arrayOfErrors) {\n  const mergedErrors = _mergeObjects(...arrayOfErrors);\n  return isEmpty(mergedErrors) ? null : mergedErrors;\n}\n\n/**\n * 'isDefined' utility function\n *\n * Checks if a variable contains a value of any type.\n * Returns true even for otherwise 'falsey' values of 0, '', and false.\n *\n * //   value - the value to check\n * // { boolean } - false if undefined or null, otherwise true\n */\nexport function isDefined(value) {\n  return value !== undefined && value !== null;\n}\n\n/**\n * 'hasValue' utility function\n *\n * Checks if a variable contains a value.\n * Returs false for null, undefined, or a zero-length strng, '',\n * otherwise returns true.\n * (Stricter than 'isDefined' because it also returns false for '',\n * though it stil returns true for otherwise 'falsey' values 0 and false.)\n *\n * //   value - the value to check\n * // { boolean } - false if undefined, null, or '', otherwise true\n */\nexport function hasValue(value) {\n  return value !== undefined && value !== null && value !== '';\n}\n\n/**\n * 'isEmpty' utility function\n *\n * Similar to !hasValue, but also returns true for empty arrays and objects.\n *\n * //   value - the value to check\n * // { boolean } - false if undefined, null, or '', otherwise true\n */\nexport function isEmpty(value) {\n  if (isArray(value)) { return !value.length; }\n  if (isObject(value)) { return !Object.keys(value).length; }\n  return value === undefined || value === null || value === '';\n}\n\n/**\n * 'isString' utility function\n *\n * Checks if a value is a string.\n *\n * //   value - the value to check\n * // { boolean } - true if string, false if not\n */\nexport function isString(value) {\n  return typeof value === 'string';\n}\n\n/**\n * 'isNumber' utility function\n *\n * Checks if a value is a regular number, numeric string, or JavaScript Date.\n *\n * //   value - the value to check\n * //  { any = false } strict - if truthy, also checks JavaScript tyoe\n * // { boolean } - true if number, false if not\n */\nexport function isNumber(value, strict: any = false) {\n  if (strict && typeof value !== 'number') { return false; }\n  return !isNaN(value) && value !== value / 0;\n}\n\n/**\n * 'isInteger' utility function\n *\n * Checks if a value is an integer.\n *\n * //   value - the value to check\n * //  { any = false } strict - if truthy, also checks JavaScript tyoe\n * // {boolean } - true if number, false if not\n */\nexport function isInteger(value, strict: any = false) {\n  if (strict && typeof value !== 'number') { return false; }\n  return !isNaN(value) &&  value !== value / 0 && value % 1 === 0;\n}\n\n/**\n * 'isBoolean' utility function\n *\n * Checks if a value is a boolean.\n *\n * //   value - the value to check\n * //  { any = null } option - if 'strict', also checks JavaScript type\n *                              if TRUE or FALSE, checks only for that value\n * // { boolean } - true if boolean, false if not\n */\nexport function isBoolean(value, option: any = null) {\n  if (option === 'strict') { return value === true || value === false; }\n  if (option === true) {\n    return value === true || value === 1 || value === 'true' || value === '1';\n  }\n  if (option === false) {\n    return value === false || value === 0 || value === 'false' || value === '0';\n  }\n  return value === true || value === 1 || value === 'true' || value === '1' ||\n    value === false || value === 0 || value === 'false' || value === '0';\n}\n\nexport function isFunction(item: any): boolean {\n  return typeof item === 'function';\n}\n\nexport function isObject(item: any): boolean {\n  return item !== null && typeof item === 'object';\n}\n\nexport function isArray(item: any): boolean {\n  return Array.isArray(item);\n}\n\nexport function isDate(item: any): boolean {\n  return !!item && Object.prototype.toString.call(item) === '[object Date]';\n}\n\nexport function isMap(item: any): boolean {\n  return !!item && Object.prototype.toString.call(item) === '[object Map]';\n}\n\nexport function isSet(item: any): boolean {\n  return !!item && Object.prototype.toString.call(item) === '[object Set]';\n}\n\nexport function isSymbol(item: any): boolean {\n  return typeof item === 'symbol';\n}\n\n/**\n * 'getType' function\n *\n * Detects the JSON Schema Type of a value.\n * By default, detects numbers and integers even if formatted as strings.\n * (So all integers are also numbers, and any number may also be a string.)\n * However, it only detects true boolean values (to detect boolean values\n * in non-boolean formats, use isBoolean() instead).\n *\n * If passed a second optional parameter of 'strict', it will only detect\n * numbers and integers if they are formatted as JavaScript numbers.\n *\n * Examples:\n * getType('10.5') = 'number'\n * getType(10.5) = 'number'\n * getType('10') = 'integer'\n * getType(10) = 'integer'\n * getType('true') = 'string'\n * getType(true) = 'boolean'\n * getType(null) = 'null'\n * getType({ }) = 'object'\n * getType([]) = 'array'\n *\n * getType('10.5', 'strict') = 'string'\n * getType(10.5, 'strict') = 'number'\n * getType('10', 'strict') = 'string'\n * getType(10, 'strict') = 'integer'\n * getType('true', 'strict') = 'string'\n * getType(true, 'strict') = 'boolean'\n *\n * //   value - value to check\n * //  { any = false } strict - if truthy, also checks JavaScript tyoe\n * // { SchemaType }\n */\nexport function getType(value, strict: any = false) {\n  if (!isDefined(value)) { return 'null'; }\n  if (isArray(value)) { return 'array'; }\n  if (isObject(value)) { return 'object'; }\n  if (isBoolean(value, 'strict')) { return 'boolean'; }\n  if (isInteger(value, strict)) { return 'integer'; }\n  if (isNumber(value, strict)) { return 'number'; }\n  if (isString(value) || (!strict && isDate(value))) { return 'string'; }\n  return null;\n}\n\n/**\n * 'isType' function\n *\n * Checks wether an input (probably string) value contains data of\n * a specified JSON Schema type\n *\n * //  { PrimitiveValue } value - value to check\n * //  { SchemaPrimitiveType } type - type to check\n * // { boolean }\n */\nexport function isType(value, type) {\n  switch (type) {\n    case 'string':\n      return isString(value) || isDate(value);\n    case 'number':\n      return isNumber(value);\n    case 'integer':\n      return isInteger(value);\n    case 'boolean':\n      return isBoolean(value);\n    case 'null':\n      return !hasValue(value);\n    default:\n      console.error(`isType error: \"${type}\" is not a recognized type.`);\n      return null;\n  }\n}\n\n/**\n * 'isPrimitive' function\n *\n * Checks wether an input value is a JavaScript primitive type:\n * string, number, boolean, or null.\n *\n * //   value - value to check\n * // { boolean }\n */\nexport function isPrimitive(value) {\n  return (isString(value) || isNumber(value) ||\n    isBoolean(value, 'strict') || value === null);\n}\n\n/**\n * \n * @param date \n * @returns {string}\n * exmaple:\n * toDateString('2018-01-01') = '2018-01-01'\n * toDateString('2018-01-30T00:00:00.000Z') = '2018-01-30'\n */\nexport const toIsoString = (date: Date) => {\n  const day = date.getDate();\n  const month = date.getMonth() + 1;\n  const year = date.getFullYear();\n  return `${year}-${month < 10 ? '0' + month : month}-${day < 10 ? '0' + day : day}`;\n}\n\n/**\n * 'toJavaScriptType' function\n *\n * Converts an input (probably string) value to a JavaScript primitive type -\n * 'string', 'number', 'boolean', or 'null' - before storing in a JSON object.\n *\n * Does not coerce values (other than null), and only converts the types\n * of values that would otherwise be valid.\n *\n * If the optional third parameter 'strictIntegers' is TRUE, and the\n * JSON Schema type 'integer' is specified, it also verifies the input value\n * is an integer and, if it is, returns it as a JaveScript number.\n * If 'strictIntegers' is FALSE (or not set) the type 'integer' is treated\n * exactly the same as 'number', and allows decimals.\n *\n * Valid Examples:\n * toJavaScriptType('10',   'number' ) = 10   // '10'   is a number\n * toJavaScriptType('10',   'integer') = 10   // '10'   is also an integer\n * toJavaScriptType( 10,    'integer') = 10   //  10    is still an integer\n * toJavaScriptType( 10,    'string' ) = '10' //  10    can be made into a string\n * toJavaScriptType('10.5', 'number' ) = 10.5 // '10.5' is a number\n *\n * Invalid Examples:\n * toJavaScriptType('10.5', 'integer') = null // '10.5' is not an integer\n * toJavaScriptType( 10.5,  'integer') = null //  10.5  is still not an integer\n *\n * //  { PrimitiveValue } value - value to convert\n * //  { SchemaPrimitiveType | SchemaPrimitiveType[] } types - types to convert to\n * //  { boolean = false } strictIntegers - if FALSE, treat integers as numbers\n * // { PrimitiveValue }\n */\nexport function toJavaScriptType(value, types, strictIntegers = true)  {\n  if (!isDefined(value)) { return null; }\n  if (isString(types)) { types = [types]; }\n  if (strictIntegers && inArray('integer', types)) {\n    if (isInteger(value, 'strict')) { return value; }\n    if (isInteger(value)) { return parseInt(value, 10); }\n  }\n  if (inArray('number', types) || (!strictIntegers && inArray('integer', types))) {\n    if (isNumber(value, 'strict')) { return value; }\n    if (isNumber(value)) { return parseFloat(value); }\n  }\n  if (inArray('string', types)) {\n    if (isString(value)) { return value; }\n    // If value is a date, and types includes 'string',\n    // convert the date to a string\n    if (isDate(value)) { return toIsoString(value); }\n    if (isNumber(value)) { return value.toString(); }\n  }\n  // If value is a date, and types includes 'integer' or 'number',\n  // but not 'string', convert the date to a number\n  if (isDate(value) && (inArray('integer', types) || inArray('number', types))) {\n    return value.getTime();\n  }\n  if (inArray('boolean', types)) {\n    if (isBoolean(value, true)) { return true; }\n    if (isBoolean(value, false)) { return false; }\n  }\n  return null;\n}\n\n/**\n * 'toSchemaType' function\n *\n * Converts an input (probably string) value to the \"best\" JavaScript\n * equivalent available from an allowed list of JSON Schema types, which may\n * contain 'string', 'number', 'integer', 'boolean', and/or 'null'.\n * If necssary, it does progressively agressive type coersion.\n * It will not return null unless null is in the list of allowed types.\n *\n * Number conversion examples:\n * toSchemaType('10', ['number','integer','string']) = 10 // integer\n * toSchemaType('10', ['number','string']) = 10 // number\n * toSchemaType('10', ['string']) = '10' // string\n * toSchemaType('10.5', ['number','integer','string']) = 10.5 // number\n * toSchemaType('10.5', ['integer','string']) = '10.5' // string\n * toSchemaType('10.5', ['integer']) = 10 // integer\n * toSchemaType(10.5, ['null','boolean','string']) = '10.5' // string\n * toSchemaType(10.5, ['null','boolean']) = true // boolean\n *\n * String conversion examples:\n * toSchemaType('1.5x', ['boolean','number','integer','string']) = '1.5x' // string\n * toSchemaType('1.5x', ['boolean','number','integer']) = '1.5' // number\n * toSchemaType('1.5x', ['boolean','integer']) = '1' // integer\n * toSchemaType('1.5x', ['boolean']) = true // boolean\n * toSchemaType('xyz', ['number','integer','boolean','null']) = true // boolean\n * toSchemaType('xyz', ['number','integer','null']) = null // null\n * toSchemaType('xyz', ['number','integer']) = 0 // number\n *\n * Boolean conversion examples:\n * toSchemaType('1', ['integer','number','string','boolean']) = 1 // integer\n * toSchemaType('1', ['number','string','boolean']) = 1 // number\n * toSchemaType('1', ['string','boolean']) = '1' // string\n * toSchemaType('1', ['boolean']) = true // boolean\n * toSchemaType('true', ['number','string','boolean']) = 'true' // string\n * toSchemaType('true', ['boolean']) = true // boolean\n * toSchemaType('true', ['number']) = 0 // number\n * toSchemaType(true, ['number','string','boolean']) = true // boolean\n * toSchemaType(true, ['number','string']) = 'true' // string\n * toSchemaType(true, ['number']) = 1 // number\n *\n * //  { PrimitiveValue } value - value to convert\n * //  { SchemaPrimitiveType | SchemaPrimitiveType[] } types - allowed types to convert to\n * // { PrimitiveValue }\n */\nexport function toSchemaType(value, types) {\n  if (!isArray(<SchemaPrimitiveType>types)) {\n    types = <SchemaPrimitiveType[]>[types];\n  }\n  if ((<SchemaPrimitiveType[]>types).includes('null') && !hasValue(value)) {\n    return null;\n  }\n  if ((<SchemaPrimitiveType[]>types).includes('boolean') && !isBoolean(value, 'strict')) {\n    return value;\n  }\n  if ((<SchemaPrimitiveType[]>types).includes('integer')) {\n    const testValue = toJavaScriptType(value, 'integer');\n    if (testValue !== null) { return +testValue; }\n  }\n  if ((<SchemaPrimitiveType[]>types).includes('number')) {\n    const testValue = toJavaScriptType(value, 'number');\n    if (testValue !== null) { return +testValue; }\n  }\n  if (\n    (isString(value) || isNumber(value, 'strict')) &&\n    (<SchemaPrimitiveType[]>types).includes('string')\n  ) { // Convert number to string\n    return toJavaScriptType(value, 'string');\n  }\n  if ((<SchemaPrimitiveType[]>types).includes('boolean') && isBoolean(value)) {\n    return toJavaScriptType(value, 'boolean');\n  }\n  if ((<SchemaPrimitiveType[]>types).includes('string')) { // Convert null & boolean to string\n    if (value === null) { return ''; }\n    const testValue = toJavaScriptType(value, 'string');\n    if (testValue !== null) { return testValue; }\n  }\n  if ((\n    (<SchemaPrimitiveType[]>types).includes('number') ||\n    (<SchemaPrimitiveType[]>types).includes('integer'))\n  ) {\n    if (value === true) { return 1; } // Convert boolean & null to number\n    if (value === false || value === null || value === '') { return 0; }\n  }\n  if ((<SchemaPrimitiveType[]>types).includes('number')) { // Convert mixed string to number\n    const testValue = parseFloat(<string>value);\n    if (!!testValue) { return testValue; }\n  }\n  if ((<SchemaPrimitiveType[]>types).includes('integer')) { // Convert string or number to integer\n    const testValue = parseInt(<string>value, 10);\n    if (!!testValue) { return testValue; }\n  }\n  if ((<SchemaPrimitiveType[]>types).includes('boolean')) { // Convert anything to boolean\n    return !!value;\n  }\n  if ((\n      (<SchemaPrimitiveType[]>types).includes('number') ||\n      (<SchemaPrimitiveType[]>types).includes('integer')\n    ) && !(<SchemaPrimitiveType[]>types).includes('null')\n  ) {\n    return 0; // If null not allowed, return 0 for non-convertable values\n  }\n}\n\n/**\n * 'isPromise' function\n *\n * //   object\n * // { boolean }\n */\nexport function isPromise(object): object is Promise<any> {\n  return !!object && typeof object.then === 'function';\n}\n\n/**\n * 'isObservable' function\n *\n * //   object\n * // { boolean }\n */\nexport function isObservable(object): object is Observable<any> {\n  return !!object && typeof object.subscribe === 'function';\n}\n\n/**\n * '_toPromise' function\n *\n * //  { object } object\n * // { Promise<any> }\n */\nexport function _toPromise(object): Promise<any> {\n  return isPromise(object) ? object : object.toPromise();\n}\n\n/**\n * 'toObservable' function\n *\n * //  { object } object\n * // { Observable<any> }\n */\nexport function toObservable(object): Observable<any> {\n  const observable = isPromise(object) ? from(object) : object;\n  if (isObservable(observable)) { return observable; }\n  console.error('toObservable error: Expected validator to return Promise or Observable.');\n  return new Observable();\n}\n\n/**\n * 'inArray' function\n *\n * Searches an array for an item, or one of a list of items, and returns true\n * as soon as a match is found, or false if no match.\n *\n * If the optional third parameter allIn is set to TRUE, and the item to find\n * is an array, then the function returns true only if all elements from item\n * are found in the array list, and false if any element is not found. If the\n * item to find is not an array, setting allIn to TRUE has no effect.\n *\n * //  { any|any[] } item - the item to search for\n * //   array - the array to search\n * //  { boolean = false } allIn - if TRUE, all items must be in array\n * // { boolean } - true if item(s) in array, false otherwise\n */\nexport function inArray(item, array, allIn = false) {\n  if (!isDefined(item) || !isArray(array)) { return false; }\n  return isArray(item) ?\n    item[allIn ? 'every' : 'some'](subItem => array.includes(subItem)) :\n    array.includes(item);\n}\n\n/**\n * 'xor' utility function - exclusive or\n *\n * Returns true if exactly one of two values is truthy.\n *\n * //   value1 - first value to check\n * //   value2 - second value to check\n * // { boolean } - true if exactly one input value is truthy, false if not\n */\nexport function xor(value1, value2) {\n  return (!!value1 && !value2) || (!value1 && !!value2);\n}\n","import {hasValue, inArray, isArray, isDefined, isEmpty, isMap, isObject, isSet, isString, PlainObject} from './validator.functions';\n\n/**\n * Utility function library:\n *\n * addClasses, copy, forEach, forEachCopy, hasOwn, mergeFilteredObject,\n * uniqueItems, commonItems, fixTitle, toTitleCase\n*/\n\n/**\n * 'addClasses' function\n *\n * Merges two space-delimited lists of CSS classes and removes duplicates.\n *\n * // {string | string[] | Set<string>} oldClasses\n * // {string | string[] | Set<string>} newClasses\n * // {string | string[] | Set<string>} - Combined classes\n */\nexport function addClasses(\n  oldClasses: string | string[] | Set<string>,\n  newClasses: string | string[] | Set<string>\n): string | string[] | Set<string> {\n  const badType = i => !isSet(i) && !isArray(i) && !isString(i);\n  if (badType(newClasses)) { return oldClasses; }\n  if (badType(oldClasses)) { oldClasses = ''; }\n  const toSet = i => isSet(i) ? i : isArray(i) ? new Set(i) : new Set(i.split(' '));\n  const combinedSet: Set<any> = toSet(oldClasses);\n  const newSet: Set<any> = toSet(newClasses);\n  newSet.forEach(c => combinedSet.add(c));\n  if (isSet(oldClasses)) { return combinedSet; }\n  if (isArray(oldClasses)) { return Array.from(combinedSet); }\n  return Array.from(combinedSet).join(' ');\n}\n\n/**\n * 'copy' function\n *\n * Makes a shallow copy of a JavaScript object, array, Map, or Set.\n * If passed a JavaScript primitive value (string, number, boolean, or null),\n * it returns the value.\n *\n * // {Object|Array|string|number|boolean|null} object - The object to copy\n * // {boolean = false} errors - Show errors?\n * // {Object|Array|string|number|boolean|null} - The copied object\n */\nexport function copy(object: any, errors = false): any {\n  if (typeof object !== 'object' || object === null) { return object; }\n  if (isMap(object))    { return new Map(object); }\n  if (isSet(object))    { return new Set(object); }\n  if (isArray(object))  { return [ ...object ];   }\n  if (isObject(object)) { return { ...object };   }\n  if (errors) {\n    console.error('copy error: Object to copy must be a JavaScript object or value.');\n  }\n  return object;\n}\n\n/**\n * 'forEach' function\n *\n * Iterates over all items in the first level of an object or array\n * and calls an iterator funciton on each item.\n *\n * The iterator function is called with four values:\n * 1. The current item's value\n * 2. The current item's key\n * 3. The parent object, which contains the current item\n * 4. The root object\n *\n * Setting the optional third parameter to 'top-down' or 'bottom-up' will cause\n * it to also recursively iterate over items in sub-objects or sub-arrays in the\n * specified direction.\n *\n * // {Object|Array} object - The object or array to iterate over\n * // {function} fn - the iterator funciton to call on each item\n * // {boolean = false} errors - Show errors?\n * // {void}\n */\nexport function forEach(\n  object: any, fn: (v: any, k?: string | number, c?: any, rc?: any) => any,\n  recurse: boolean | string = false, rootObject: any = object, errors = false\n): void {\n  if (isEmpty(object)) { return; }\n  if ((isObject(object) || isArray(object)) && typeof fn === 'function') {\n    for (const key of Object.keys(object)) {\n      const value = object[key];\n      if (recurse === 'bottom-up' && (isObject(value) || isArray(value))) {\n        forEach(value, fn, recurse, rootObject);\n      }\n      fn(value, key, object, rootObject);\n      if (recurse === 'top-down' && (isObject(value) || isArray(value))) {\n        forEach(value, fn, recurse, rootObject);\n      }\n    }\n  }\n  if (errors) {\n    if (typeof fn !== 'function') {\n      console.error('forEach error: Iterator must be a function.');\n      console.error('function', fn);\n    }\n    if (!isObject(object) && !isArray(object)) {\n      console.error('forEach error: Input object must be an object or array.');\n      console.error('object', object);\n    }\n  }\n}\n\n/**\n * 'forEachCopy' function\n *\n * Iterates over all items in the first level of an object or array\n * and calls an iterator function on each item. Returns a new object or array\n * with the same keys or indexes as the original, and values set to the results\n * of the iterator function.\n *\n * Does NOT recursively iterate over items in sub-objects or sub-arrays.\n *\n * // {Object | Array} object - The object or array to iterate over\n * // {function} fn - The iterator funciton to call on each item\n * // {boolean = false} errors - Show errors?\n * // {Object | Array} - The resulting object or array\n */\nexport function forEachCopy(\n  object: any, fn: (v: any, k?: string | number, o?: any, p?: string) => any,\n  errors = false\n): any {\n  if (!hasValue(object)) { return; }\n  if ((isObject(object) || isArray(object)) && typeof object !== 'function') {\n    const newObject: any = isArray(object) ? [] : {};\n    for (const key of Object.keys(object)) {\n      newObject[key] = fn(object[key], key, object);\n    }\n    return newObject;\n  }\n  if (errors) {\n    if (typeof fn !== 'function') {\n      console.error('forEachCopy error: Iterator must be a function.');\n      console.error('function', fn);\n    }\n    if (!isObject(object) && !isArray(object)) {\n      console.error('forEachCopy error: Input object must be an object or array.');\n      console.error('object', object);\n    }\n  }\n}\n\n/**\n * 'hasOwn' utility function\n *\n * Checks whether an object or array has a particular property.\n *\n * // {any} object - the object to check\n * // {string} property - the property to look for\n * // {boolean} - true if object has property, false if not\n */\nexport function hasOwn(object: any, property: string): boolean {\n  if (!object || !['number', 'string', 'symbol'].includes(typeof property) ||\n    (!isObject(object) && !isArray(object) && !isMap(object) && !isSet(object))\n  ) { return false; }\n  if (isMap(object) || isSet(object)) { return object.has(property); }\n  if (typeof property === 'number') {\n    if (isArray(object)) { return object[<number>property]; }\n    property = property + '';\n  }\n  return object.hasOwnProperty(property);\n}\n\n/**\n * Types of possible expressions which the app is able to evaluate.\n */\nexport enum ExpressionType {\n  EQUALS,\n  NOT_EQUALS,\n  NOT_AN_EXPRESSION\n}\n\n/**\n * Detects the type of expression from the given candidate. `==` for equals,\n * `!=` for not equals. If none of these are contained in the candidate, the candidate\n * is not considered to be an expression at all and thus `NOT_AN_EXPRESSION` is returned.\n * // {expressionCandidate} expressionCandidate - potential expression\n */\nexport function getExpressionType(expressionCandidate: string): ExpressionType {\n  if (expressionCandidate.indexOf('==') !== -1) {\n    return ExpressionType.EQUALS;\n  }\n\n  if (expressionCandidate.toString().indexOf('!=') !== -1) {\n    return ExpressionType.NOT_EQUALS;\n  }\n\n  return ExpressionType.NOT_AN_EXPRESSION;\n}\n\nexport function isEqual(expressionType) {\n  return expressionType as ExpressionType === ExpressionType.EQUALS;\n}\n\nexport function isNotEqual(expressionType) {\n  return expressionType as ExpressionType === ExpressionType.NOT_EQUALS;\n}\n\nexport function isNotExpression(expressionType) {\n  return expressionType as ExpressionType === ExpressionType.NOT_AN_EXPRESSION;\n}\n\n/**\n * Splits the expression key by the expressionType on a pair of values\n * before and after the equals or nor equals sign.\n * // {expressionType} enum of an expression type\n * // {key} the given key from a for loop iver all conditions\n */\nexport function getKeyAndValueByExpressionType(expressionType: ExpressionType, key: string) {\n  if (isEqual(expressionType)) {\n    return key.split('==', 2);\n  }\n\n  if (isNotEqual(expressionType)) {\n    return key.split('!=', 2);\n  }\n\n  return null;\n}\n\nexport function cleanValueOfQuotes(keyAndValue): String {\n  if (keyAndValue.charAt(0) === '\\'' && keyAndValue.charAt(keyAndValue.length - 1) === '\\'') {\n    return keyAndValue.replace('\\'', '').replace('\\'', '');\n  }\n  return keyAndValue;\n}\n\n/**\n * 'mergeFilteredObject' utility function\n *\n * Shallowly merges two objects, setting key and values from source object\n * in target object, excluding specified keys.\n *\n * Optionally, it can also use functions to transform the key names and/or\n * the values of the merging object.\n *\n * // {PlainObject} targetObject - Target object to add keys and values to\n * // {PlainObject} sourceObject - Source object to copy keys and values from\n * // {string[]} excludeKeys - Array of keys to exclude\n * // {(string: string) => string = (k) => k} keyFn - Function to apply to keys\n * // {(any: any) => any = (v) => v} valueFn - Function to apply to values\n * // {PlainObject} - Returns targetObject\n */\nexport function mergeFilteredObject(\n  targetObject: PlainObject,\n  sourceObject: PlainObject,\n  excludeKeys = <string[]>[],\n  keyFn = (key: string): string => key,\n  valFn = (val: any): any => val\n): PlainObject {\n  if (!isObject(sourceObject)) { return targetObject; }\n  if (!isObject(targetObject)) { targetObject = {}; }\n  for (const key of Object.keys(sourceObject)) {\n    if (!inArray(key, excludeKeys) && isDefined(sourceObject[key])) {\n      targetObject[keyFn(key)] = valFn(sourceObject[key]);\n    }\n  }\n  return targetObject;\n}\n\n/**\n * 'uniqueItems' function\n *\n * Accepts any number of string value inputs,\n * and returns an array of all input vaues, excluding duplicates.\n *\n * // {...string} ...items -\n * // {string[]} -\n */\nexport function uniqueItems(...items): string[] {\n  const returnItems = [];\n  for (const item of items) {\n    if (!returnItems.includes(item)) { returnItems.push(item); }\n  }\n  return returnItems;\n}\n\n/**\n * 'commonItems' function\n *\n * Accepts any number of strings or arrays of string values,\n * and returns a single array containing only values present in all inputs.\n *\n * // {...string|string[]} ...arrays -\n * // {string[]} -\n */\nexport function commonItems(...arrays): string[] {\n  let returnItems = null;\n  for (let array of arrays) {\n    if (isString(array)) { array = [array]; }\n    returnItems = returnItems === null ? [ ...array ] :\n      returnItems.filter(item => array.includes(item));\n    if (!returnItems.length) { return []; }\n  }\n  return returnItems;\n}\n\n/**\n * 'fixTitle' function\n *\n *\n * // {string} input -\n * // {string} -\n */\nexport function fixTitle(name: string): string {\n  return name && toTitleCase(name.replace(/([a-z])([A-Z])/g, '$1 $2').replace(/_/g, ' '));\n}\n\n/**\n * 'toTitleCase' function\n *\n * Intelligently converts an input string to Title Case.\n *\n * Accepts an optional second parameter with a list of additional\n * words and abbreviations to force into a particular case.\n *\n * This function is built on prior work by John Gruber and David Gouch:\n * http://daringfireball.net/2008/08/title_case_update\n * https://github.com/gouch/to-title-case\n *\n * // {string} input -\n * // {string|string[]} forceWords? -\n * // {string} -\n */\nexport function toTitleCase(input: string, forceWords?: string|string[]): string {\n  if (!isString(input)) { return input; }\n  let forceArray: string[] = ['a', 'an', 'and', 'as', 'at', 'but', 'by', 'en',\n   'for', 'if', 'in', 'nor', 'of', 'on', 'or', 'per', 'the', 'to', 'v', 'v.',\n   'vs', 'vs.', 'via'];\n  if (isString(forceWords)) { forceWords = (<string>forceWords).split('|'); }\n  if (isArray(forceWords)) { forceArray = forceArray.concat(forceWords); }\n  const forceArrayLower: string[] = forceArray.map(w => w.toLowerCase());\n  const noInitialCase: boolean =\n    input === input.toUpperCase() || input === input.toLowerCase();\n  let prevLastChar = '';\n  input = input.trim();\n  return input.replace(/[A-Za-z0-9\\u00C0-\\u00FF]+[^\\s-]*/g, (word, idx) => {\n    if (!noInitialCase && word.slice(1).search(/[A-Z]|\\../) !== -1) {\n      return word;\n    } else {\n      let newWord: string;\n      const forceWord: string =\n        forceArray[forceArrayLower.indexOf(word.toLowerCase())];\n      if (!forceWord) {\n        if (noInitialCase) {\n          if (word.slice(1).search(/\\../) !== -1) {\n            newWord = word.toLowerCase();\n          } else {\n            newWord = word[0].toUpperCase() + word.slice(1).toLowerCase();\n          }\n        } else {\n          newWord = word[0].toUpperCase() + word.slice(1);\n        }\n      } else if (\n        forceWord === forceWord.toLowerCase() && (\n          idx === 0 || idx + word.length === input.length ||\n          prevLastChar === ':' || input[idx - 1].search(/[^\\s-]/) !== -1 ||\n          (input[idx - 1] !== '-' && input[idx + word.length] === '-')\n        )\n      ) {\n        newWord = forceWord[0].toUpperCase() + forceWord.slice(1);\n      } else {\n        newWord = forceWord;\n      }\n      prevLastChar = word.slice(-1);\n      return newWord;\n    }\n  });\n}\n","import {\n  cleanValueOfQuotes,\n  copy,\n  ExpressionType,\n  getExpressionType,\n  getKeyAndValueByExpressionType,\n  hasOwn,\n  isEqual,\n  isNotEqual,\n  isNotExpression\n} from './utility.functions';\nimport {Injectable} from '@angular/core';\nimport {isArray, isDefined, isEmpty, isMap, isNumber, isObject, isString} from './validator.functions';\n\n/**\n * 'JsonPointer' class\n *\n * Some utilities for using JSON Pointers with JSON objects\n * https://tools.ietf.org/html/rfc6901\n *\n * get, getCopy, getFirst, set, setCopy, insert, insertCopy, remove, has, dict,\n * forEachDeep, forEachDeepCopy, escape, unescape, parse, compile, toKey,\n * isJsonPointer, isSubPointer, toIndexedPointer, toGenericPointer,\n * toControlPointer, toSchemaPointer, toDataPointer, parseObjectPath\n *\n * Some functions based on manuelstofer's json-pointer utilities\n * https://github.com/manuelstofer/json-pointer\n */\nexport type Pointer = string | string[];\n\n@Injectable()\nexport class JsonPointer {\n\n  /**\n   * 'get' function\n   *\n   * Uses a JSON Pointer to retrieve a value from an object.\n   *\n   * //  { object } object - Object to get value from\n   * //  { Pointer } pointer - JSON Pointer (string or array)\n   * //  { number = 0 } startSlice - Zero-based index of first Pointer key to use\n   * //  { number } endSlice - Zero-based index of last Pointer key to use\n   * //  { boolean = false } getBoolean - Return only true or false?\n   * //  { boolean = false } errors - Show error if not found?\n   * // { object } - Located value (or true or false if getBoolean = true)\n   */\n  static get(\n    object, pointer, startSlice = 0, endSlice: number = null,\n    getBoolean = false, errors = false\n  ) {\n    if (object === null) { return getBoolean ? false : undefined; }\n    let keyArray: any[] = this.parse(pointer, errors);\n    if (typeof object === 'object' && keyArray !== null) {\n      let subObject = object;\n      if (startSlice >= keyArray.length || endSlice <= -keyArray.length) { return object; }\n      if (startSlice <= -keyArray.length) { startSlice = 0; }\n      if (!isDefined(endSlice) || endSlice >= keyArray.length) { endSlice = keyArray.length; }\n      keyArray = keyArray.slice(startSlice, endSlice);\n      for (let key of keyArray) {\n        if (key === '-' && isArray(subObject) && subObject.length) {\n          key = subObject.length - 1;\n        }\n        if (isMap(subObject) && subObject.has(key)) {\n          subObject = subObject.get(key);\n        } else if (typeof subObject === 'object' && subObject !== null &&\n          hasOwn(subObject, key)\n        ) {\n          subObject = subObject[key];\n        } else {\n          const evaluatedExpression = JsonPointer.evaluateExpression(subObject, key);\n          if (evaluatedExpression.passed) {\n            subObject = evaluatedExpression.key ? subObject[evaluatedExpression.key] : subObject;\n          } else {\n            this.logErrors(errors, key, pointer, object);\n            return getBoolean ? false : undefined;\n          }\n        }\n      }\n      return getBoolean ? true : subObject;\n    }\n    if (errors && keyArray === null) {\n      console.error(`get error: Invalid JSON Pointer: ${pointer}`);\n    }\n    if (errors && typeof object !== 'object') {\n      console.error('get error: Invalid object:');\n      console.error(object);\n    }\n    return getBoolean ? false : undefined;\n  }\n\n  private static logErrors(errors, key, pointer, object) {\n    if (errors) {\n      console.error(`get error: \"${key}\" key not found in object.`);\n      console.error(pointer);\n      console.error(object);\n    }\n  }\n\n  /**\n   * Evaluates conditional expression in form of `model.<property>==<value>` or\n   * `model.<property>!=<value>` where the first one means that the value must match to be\n   * shown in a form, while the former shows the property only when the property value is not\n   * set, or does not equal the given value.\n   *\n   * // { subObject } subObject -  an object containing the data values of properties\n   * // { key } key - the key from the for loop in a form of `<property>==<value>`\n   *\n   * Returns the object with two properties. The property passed informs whether\n   * the expression evaluated successfully and the property key returns either the same\n   * key if it is not contained inside the subObject or the key of the property if it is contained.\n   */\n  static evaluateExpression(subObject: Object, key: any) {\n    const defaultResult = {passed: false, key: key};\n    const keysAndExpression = this.parseKeysAndExpression(key, subObject);\n    if (!keysAndExpression) {\n      return defaultResult;\n    }\n\n    const ownCheckResult = this.doOwnCheckResult(subObject, keysAndExpression);\n    if (ownCheckResult) {\n      return ownCheckResult;\n    }\n\n    const cleanedValue = cleanValueOfQuotes(keysAndExpression.keyAndValue[1]);\n\n    const evaluatedResult = this.performExpressionOnValue(keysAndExpression, cleanedValue, subObject);\n    if (evaluatedResult) {\n      return evaluatedResult;\n    }\n\n    return defaultResult;\n  }\n\n  /**\n   * Performs the actual evaluation on the given expression with given values and keys.\n   * // { cleanedValue } cleanedValue - the given valued cleaned of quotes if it had any\n   * // { subObject } subObject - the object with properties values\n   * // { keysAndExpression } keysAndExpression - an object holding the expressions with\n   */\n  private static performExpressionOnValue(keysAndExpression: any, cleanedValue: String, subObject: Object) {\n    const propertyByKey = subObject[keysAndExpression.keyAndValue[0]];\n    if (this.doComparisonByExpressionType(keysAndExpression.expressionType, propertyByKey, cleanedValue)) {\n      return {passed: true, key: keysAndExpression.keyAndValue[0]};\n    }\n\n    return null;\n  }\n\n  private static doComparisonByExpressionType(expressionType: ExpressionType, propertyByKey, cleanedValue: String): Boolean {\n    if (isEqual(expressionType)) {\n      return propertyByKey === cleanedValue;\n    }\n    if (isNotEqual(expressionType)) {\n      return propertyByKey !== cleanedValue;\n    }\n    return false;\n  }\n\n  /**\n   * Does the checks when the parsed key is actually no a property inside subObject.\n   * That would mean that the equal comparison makes no sense and thus the negative result\n   * is returned, and the not equal comparison is not necessary because it doesn't equal\n   * obviously. Returns null when the given key is a real property inside the subObject.\n   * // { subObject } subObject - the object with properties values\n   * // { keysAndExpression } keysAndExpression - an object holding the expressions with\n   * the associated keys.\n   */\n  private static doOwnCheckResult(subObject: Object, keysAndExpression) {\n    let ownCheckResult = null;\n    if (!hasOwn(subObject, keysAndExpression.keyAndValue[0])) {\n      if (isEqual(keysAndExpression.expressionType)) {\n        ownCheckResult = {passed: false, key: null};\n      }\n      if (isNotEqual(keysAndExpression.expressionType)) {\n        ownCheckResult = {passed: true, key: null};\n      }\n    }\n    return ownCheckResult;\n  }\n\n  /**\n   * Does the basic checks and tries to parse an expression and a pair\n   * of key and value.\n   * // { key } key - the original for loop created value containing key and value in one string\n   * // { subObject } subObject - the object with properties values\n   */\n  private static parseKeysAndExpression(key: string, subObject) {\n    if (this.keyOrSubObjEmpty(key, subObject)) {\n      return null;\n    }\n    const expressionType = getExpressionType(key.toString());\n    if (isNotExpression(expressionType)) {\n      return null;\n    }\n    const keyAndValue = getKeyAndValueByExpressionType(expressionType, key);\n    if (!keyAndValue || !keyAndValue[0] || !keyAndValue[1]) {\n      return null;\n    }\n    return {expressionType: expressionType, keyAndValue: keyAndValue};\n  }\n\n  private static keyOrSubObjEmpty(key: any, subObject: Object) {\n    return !key || !subObject;\n  }\n\n  /**\n   * 'getCopy' function\n   *\n   * Uses a JSON Pointer to deeply clone a value from an object.\n   *\n   * //  { object } object - Object to get value from\n   * //  { Pointer } pointer - JSON Pointer (string or array)\n   * //  { number = 0 } startSlice - Zero-based index of first Pointer key to use\n   * //  { number } endSlice - Zero-based index of last Pointer key to use\n   * //  { boolean = false } getBoolean - Return only true or false?\n   * //  { boolean = false } errors - Show error if not found?\n   * // { object } - Located value (or true or false if getBoolean = true)\n   */\n  static getCopy(\n    object, pointer, startSlice = 0, endSlice: number = null,\n    getBoolean = false, errors = false\n  ) {\n    const objectToCopy =\n      this.get(object, pointer, startSlice, endSlice, getBoolean, errors);\n    return this.forEachDeepCopy(objectToCopy);\n  }\n\n  /**\n   * 'getFirst' function\n   *\n   * Takes an array of JSON Pointers and objects,\n   * checks each object for a value specified by the pointer,\n   * and returns the first value found.\n   *\n   * //  { [object, pointer][] } items - Array of objects and pointers to check\n   * //  { any = null } defaultValue - Value to return if nothing found\n   * //  { boolean = false } getCopy - Return a copy instead?\n   * //  - First value found\n   */\n  static getFirst(items, defaultValue: any = null, getCopy = false) {\n    if (isEmpty(items)) { return; }\n    if (isArray(items)) {\n      for (const item of items) {\n        if (isEmpty(item)) { continue; }\n        if (isArray(item) && item.length >= 2) {\n          if (isEmpty(item[0]) || isEmpty(item[1])) { continue; }\n          const value = getCopy ?\n            this.getCopy(item[0], item[1]) :\n            this.get(item[0], item[1]);\n          if (value) { return value; }\n          continue;\n        }\n        console.error('getFirst error: Input not in correct format.\\n' +\n          'Should be: [ [ object1, pointer1 ], [ object 2, pointer2 ], etc... ]');\n        return;\n      }\n      return defaultValue;\n    }\n    if (isMap(items)) {\n      for (const [object, pointer] of items) {\n        if (object === null || !this.isJsonPointer(pointer)) { continue; }\n        const value = getCopy ?\n          this.getCopy(object, pointer) :\n          this.get(object, pointer);\n        if (value) { return value; }\n      }\n      return defaultValue;\n    }\n    console.error('getFirst error: Input not in correct format.\\n' +\n      'Should be: [ [ object1, pointer1 ], [ object 2, pointer2 ], etc... ]');\n    return defaultValue;\n  }\n\n  /**\n   * 'getFirstCopy' function\n   *\n   * Similar to getFirst, but always returns a copy.\n   *\n   * //  { [object, pointer][] } items - Array of objects and pointers to check\n   * //  { any = null } defaultValue - Value to return if nothing found\n   * //  - Copy of first value found\n   */\n  static getFirstCopy(items, defaultValue: any = null) {\n    const firstCopy = this.getFirst(items, defaultValue, true);\n    return firstCopy;\n  }\n\n  /**\n   * 'set' function\n   *\n   * Uses a JSON Pointer to set a value on an object.\n   * Also creates any missing sub objects or arrays to contain that value.\n   *\n   * If the optional fourth parameter is TRUE and the inner-most container\n   * is an array, the function will insert the value as a new item at the\n   * specified location in the array, rather than overwriting the existing\n   * value (if any) at that location.\n   *\n   * So set([1, 2, 3], '/1', 4) => [1, 4, 3]\n   * and\n   * So set([1, 2, 3], '/1', 4, true) => [1, 4, 2, 3]\n   *\n   * //  { object } object - The object to set value in\n   * //  { Pointer } pointer - The JSON Pointer (string or array)\n   * //   value - The new value to set\n   * //  { boolean } insert - insert value?\n   * // { object } - The original object, modified with the set value\n   */\n  static set(object, pointer, value, insert = false) {\n    const keyArray = this.parse(pointer);\n    if (keyArray !== null && keyArray.length) {\n      let subObject = object;\n      for (let i = 0; i < keyArray.length - 1; ++i) {\n        let key = keyArray[i];\n        if (key === '-' && isArray(subObject)) {\n          key = subObject.length;\n        }\n        if (isMap(subObject) && subObject.has(key)) {\n          subObject = subObject.get(key);\n        } else {\n          if (!hasOwn(subObject, key)) {\n            subObject[key] = (keyArray[i + 1].match(/^(\\d+|-)$/)) ? [] : {};\n          }\n          subObject = subObject[key];\n        }\n      }\n      const lastKey = keyArray[keyArray.length - 1];\n      if (isArray(subObject) && lastKey === '-') {\n        subObject.push(value);\n      } else if (insert && isArray(subObject) && !isNaN(+lastKey)) {\n        subObject.splice(lastKey, 0, value);\n      } else if (isMap(subObject)) {\n        subObject.set(lastKey, value);\n      } else {\n        subObject[lastKey] = value;\n      }\n      return object;\n    }\n    console.error(`set error: Invalid JSON Pointer: ${pointer}`);\n    return object;\n  }\n\n  /**\n   * 'setCopy' function\n   *\n   * Copies an object and uses a JSON Pointer to set a value on the copy.\n   * Also creates any missing sub objects or arrays to contain that value.\n   *\n   * If the optional fourth parameter is TRUE and the inner-most container\n   * is an array, the function will insert the value as a new item at the\n   * specified location in the array, rather than overwriting the existing value.\n   *\n   * //  { object } object - The object to copy and set value in\n   * //  { Pointer } pointer - The JSON Pointer (string or array)\n   * //   value - The value to set\n   * //  { boolean } insert - insert value?\n   * // { object } - The new object with the set value\n   */\n  static setCopy(object, pointer, value, insert = false) {\n    const keyArray = this.parse(pointer);\n    if (keyArray !== null) {\n      const newObject = copy(object);\n      let subObject = newObject;\n      for (let i = 0; i < keyArray.length - 1; ++i) {\n        let key = keyArray[i];\n        if (key === '-' && isArray(subObject)) {\n          key = subObject.length;\n        }\n        if (isMap(subObject) && subObject.has(key)) {\n          subObject.set(key, copy(subObject.get(key)));\n          subObject = subObject.get(key);\n        } else {\n          if (!hasOwn(subObject, key)) {\n            subObject[key] = (keyArray[i + 1].match(/^(\\d+|-)$/)) ? [] : {};\n          }\n          subObject[key] = copy(subObject[key]);\n          subObject = subObject[key];\n        }\n      }\n      const lastKey = keyArray[keyArray.length - 1];\n      if (isArray(subObject) && lastKey === '-') {\n        subObject.push(value);\n      } else if (insert && isArray(subObject) && !isNaN(+lastKey)) {\n        subObject.splice(lastKey, 0, value);\n      } else if (isMap(subObject)) {\n        subObject.set(lastKey, value);\n      } else {\n        subObject[lastKey] = value;\n      }\n      return newObject;\n    }\n    console.error(`setCopy error: Invalid JSON Pointer: ${pointer}`);\n    return object;\n  }\n\n  /**\n   * 'insert' function\n   *\n   * Calls 'set' with insert = TRUE\n   *\n   * //  { object } object - object to insert value in\n   * //  { Pointer } pointer - JSON Pointer (string or array)\n   * //   value - value to insert\n   * // { object }\n   */\n  static insert(object, pointer, value) {\n    const updatedObject = this.set(object, pointer, value, true);\n    return updatedObject;\n  }\n\n  /**\n   * 'insertCopy' function\n   *\n   * Calls 'setCopy' with insert = TRUE\n   *\n   * //  { object } object - object to insert value in\n   * //  { Pointer } pointer - JSON Pointer (string or array)\n   * //   value - value to insert\n   * // { object }\n   */\n  static insertCopy(object, pointer, value) {\n    const updatedObject = this.setCopy(object, pointer, value, true);\n    return updatedObject;\n  }\n\n  /**\n   * 'remove' function\n   *\n   * Uses a JSON Pointer to remove a key and its attribute from an object\n   *\n   * //  { object } object - object to delete attribute from\n   * //  { Pointer } pointer - JSON Pointer (string or array)\n   * // { object }\n   */\n  static remove(object, pointer) {\n    const keyArray = this.parse(pointer);\n    if (keyArray !== null && keyArray.length) {\n      let lastKey = keyArray.pop();\n      const parentObject = this.get(object, keyArray);\n      if (isArray(parentObject)) {\n        if (lastKey === '-') { lastKey = parentObject.length - 1; }\n        parentObject.splice(lastKey, 1);\n      } else if (isObject(parentObject)) {\n        delete parentObject[lastKey];\n      }\n      return object;\n    }\n    console.error(`remove error: Invalid JSON Pointer: ${pointer}`);\n    return object;\n  }\n\n  /**\n   * 'has' function\n   *\n   * Tests if an object has a value at the location specified by a JSON Pointer\n   *\n   * //  { object } object - object to chek for value\n   * //  { Pointer } pointer - JSON Pointer (string or array)\n   * // { boolean }\n   */\n  static has(object, pointer) {\n    const hasValue = this.get(object, pointer, 0, null, true);\n    return hasValue;\n  }\n\n  /**\n   * 'dict' function\n   *\n   * Returns a (pointer -> value) dictionary for an object\n   *\n   * //  { object } object - The object to create a dictionary from\n   * // { object } - The resulting dictionary object\n   */\n  static dict(object) {\n    const results: any = {};\n    this.forEachDeep(object, (value, pointer) => {\n      if (typeof value !== 'object') { results[pointer] = value; }\n    });\n    return results;\n  }\n\n  /**\n   * 'forEachDeep' function\n   *\n   * Iterates over own enumerable properties of an object or items in an array\n   * and invokes an iteratee function for each key/value or index/value pair.\n   * By default, iterates over items within objects and arrays after calling\n   * the iteratee function on the containing object or array itself.\n   *\n   * The iteratee is invoked with three arguments: (value, pointer, rootObject),\n   * where pointer is a JSON pointer indicating the location of the current\n   * value within the root object, and rootObject is the root object initially\n   * submitted to th function.\n   *\n   * If a third optional parameter 'bottomUp' is set to TRUE, the iterator\n   * function will be called on sub-objects and arrays after being\n   * called on their contents, rather than before, which is the default.\n   *\n   * This function can also optionally be called directly on a sub-object by\n   * including optional 4th and 5th parameterss to specify the initial\n   * root object and pointer.\n   *\n   * //  { object } object - the initial object or array\n   * //  { (v: any, p?: string, o?: any) => any } function - iteratee function\n   * //  { boolean = false } bottomUp - optional, set to TRUE to reverse direction\n   * //  { object = object } rootObject - optional, root object or array\n   * //  { string = '' } pointer - optional, JSON Pointer to object within rootObject\n   * // { object } - The modified object\n   */\n  static forEachDeep(\n    object, fn: (v: any, p?: string, o?: any) => any = (v) => v,\n    bottomUp = false, pointer = '', rootObject = object\n  ) {\n    if (typeof fn !== 'function') {\n      console.error(`forEachDeep error: Iterator is not a function:`, fn);\n      return;\n    }\n    if (!bottomUp) { fn(object, pointer, rootObject); }\n    if (isObject(object) || isArray(object)) {\n      for (const key of Object.keys(object)) {\n        const newPointer = pointer + '/' + this.escape(key);\n        this.forEachDeep(object[key], fn, bottomUp, newPointer, rootObject);\n      }\n    }\n    if (bottomUp) { fn(object, pointer, rootObject); }\n  }\n\n  /**\n   * 'forEachDeepCopy' function\n   *\n   * Similar to forEachDeep, but returns a copy of the original object, with\n   * the same keys and indexes, but with values replaced with the result of\n   * the iteratee function.\n   *\n   * //  { object } object - the initial object or array\n   * //  { (v: any, k?: string, o?: any, p?: any) => any } function - iteratee function\n   * //  { boolean = false } bottomUp - optional, set to TRUE to reverse direction\n   * //  { object = object } rootObject - optional, root object or array\n   * //  { string = '' } pointer - optional, JSON Pointer to object within rootObject\n   * // { object } - The copied object\n   */\n  static forEachDeepCopy(\n    object, fn: (v: any, p?: string, o?: any) => any = (v) => v,\n    bottomUp = false, pointer = '', rootObject = object\n  ) {\n    if (typeof fn !== 'function') {\n      console.error(`forEachDeepCopy error: Iterator is not a function:`, fn);\n      return null;\n    }\n    if (isObject(object) || isArray(object)) {\n      let newObject = isArray(object) ? [ ...object ] : { ...object };\n      if (!bottomUp) { newObject = fn(newObject, pointer, rootObject); }\n      for (const key of Object.keys(newObject)) {\n        const newPointer = pointer + '/' + this.escape(key);\n        newObject[key] = this.forEachDeepCopy(\n          newObject[key], fn, bottomUp, newPointer, rootObject\n        );\n      }\n      if (bottomUp) { newObject = fn(newObject, pointer, rootObject); }\n      return newObject;\n    } else {\n      return fn(object, pointer, rootObject);\n    }\n  }\n\n  /**\n   * 'escape' function\n   *\n   * Escapes a string reference key\n   *\n   * //  { string } key - string key to escape\n   * // { string } - escaped key\n   */\n  static escape(key) {\n    const escaped = key.toString().replace(/~/g, '~0').replace(/\\//g, '~1');\n    return escaped;\n  }\n\n  /**\n   * 'unescape' function\n   *\n   * Unescapes a string reference key\n   *\n   * //  { string } key - string key to unescape\n   * // { string } - unescaped key\n   */\n  static unescape(key) {\n    const unescaped = key.toString().replace(/~1/g, '/').replace(/~0/g, '~');\n    return unescaped;\n  }\n\n  /**\n   * 'parse' function\n   *\n   * Converts a string JSON Pointer into a array of keys\n   * (if input is already an an array of keys, it is returned unchanged)\n   *\n   * //  { Pointer } pointer - JSON Pointer (string or array)\n   * //  { boolean = false } errors - Show error if invalid pointer?\n   * // { string[] } - JSON Pointer array of keys\n   */\n  static parse(pointer, errors = false) {\n    if (!this.isJsonPointer(pointer)) {\n      if (errors) { console.error(`parse error: Invalid JSON Pointer: ${pointer}`); }\n      return null;\n    }\n    if (isArray(pointer)) { return <string[]>pointer; }\n    if (typeof pointer === 'string') {\n      if ((<string>pointer)[0] === '#') { pointer = pointer.slice(1); }\n      if (<string>pointer === '' || <string>pointer === '/') { return []; }\n      return (<string>pointer).slice(1).split('/').map(this.unescape);\n    }\n  }\n\n  /**\n   * 'compile' function\n   *\n   * Converts an array of keys into a JSON Pointer string\n   * (if input is already a string, it is normalized and returned)\n   *\n   * The optional second parameter is a default which will replace any empty keys.\n   *\n   * //  { Pointer } pointer - JSON Pointer (string or array)\n   * //  { string | number = '' } defaultValue - Default value\n   * //  { boolean = false } errors - Show error if invalid pointer?\n   * // { string } - JSON Pointer string\n   */\n  static compile(pointer, defaultValue = '', errors = false) {\n    if (pointer === '#') { return ''; }\n    if (!this.isJsonPointer(pointer)) {\n      if (errors) { console.error(`compile error: Invalid JSON Pointer: ${pointer}`); }\n      return null;\n    }\n    if (isArray(pointer)) {\n      if ((<string[]>pointer).length === 0) { return ''; }\n      return '/' + (<string[]>pointer).map(\n        key => key === '' ? defaultValue : this.escape(key)\n      ).join('/');\n    }\n    if (typeof pointer === 'string') {\n      if (pointer[0] === '#') { pointer = pointer.slice(1); }\n      return pointer;\n    }\n  }\n\n  /**\n   * 'toKey' function\n   *\n   * Extracts name of the final key from a JSON Pointer.\n   *\n   * //  { Pointer } pointer - JSON Pointer (string or array)\n   * //  { boolean = false } errors - Show error if invalid pointer?\n   * // { string } - the extracted key\n   */\n  static toKey(pointer, errors = false) {\n    const keyArray = this.parse(pointer, errors);\n    if (keyArray === null) { return null; }\n    if (!keyArray.length) { return ''; }\n    return keyArray[keyArray.length - 1];\n  }\n\n  /**\n   * 'isJsonPointer' function\n   *\n   * Checks a string or array value to determine if it is a valid JSON Pointer.\n   * Returns true if a string is empty, or starts with '/' or '#/'.\n   * Returns true if an array contains only string values.\n   *\n   * //   value - value to check\n   * // { boolean } - true if value is a valid JSON Pointer, otherwise false\n   */\n  static isJsonPointer(value) {\n    if (isArray(value)) {\n      return value.every(key => typeof key === 'string');\n    } else if (isString(value)) {\n      if (value === '' || value === '#') { return true; }\n      if (value[0] === '/' || value.slice(0, 2) === '#/') {\n        return !/(~[^01]|~$)/g.test(value);\n      }\n    }\n    return false;\n  }\n\n  /**\n   * 'isSubPointer' function\n   *\n   * Checks whether one JSON Pointer is a subset of another.\n   *\n   * //  { Pointer } shortPointer - potential subset JSON Pointer\n   * //  { Pointer } longPointer - potential superset JSON Pointer\n   * //  { boolean = false } trueIfMatching - return true if pointers match?\n   * //  { boolean = false } errors - Show error if invalid pointer?\n   * // { boolean } - true if shortPointer is a subset of longPointer, false if not\n   */\n  static isSubPointer(\n    shortPointer, longPointer, trueIfMatching = false, errors = false\n  ) {\n    if (!this.isJsonPointer(shortPointer) || !this.isJsonPointer(longPointer)) {\n      if (errors) {\n        let invalid = '';\n        if (!this.isJsonPointer(shortPointer)) { invalid += ` 1: ${shortPointer}`; }\n        if (!this.isJsonPointer(longPointer)) { invalid += ` 2: ${longPointer}`; }\n        console.error(`isSubPointer error: Invalid JSON Pointer ${invalid}`);\n      }\n      return;\n    }\n    shortPointer = this.compile(shortPointer, '', errors);\n    longPointer = this.compile(longPointer, '', errors);\n    return shortPointer === longPointer ? trueIfMatching :\n      `${shortPointer}/` === longPointer.slice(0, shortPointer.length + 1);\n  }\n\n  /**\n   * 'toIndexedPointer' function\n   *\n   * Merges an array of numeric indexes and a generic pointer to create an\n   * indexed pointer for a specific item.\n   *\n   * For example, merging the generic pointer '/foo/-/bar/-/baz' and\n   * the array [4, 2] would result in the indexed pointer '/foo/4/bar/2/baz'\n   *\n   *\n   * //  { Pointer } genericPointer - The generic pointer\n   * //  { number[] } indexArray - The array of numeric indexes\n   * //  { Map<string, number> } arrayMap - An optional array map\n   * // { string } - The merged pointer with indexes\n   */\n  static toIndexedPointer(\n    genericPointer, indexArray, arrayMap: Map<string, number> = null\n  ) {\n    if (this.isJsonPointer(genericPointer) && isArray(indexArray)) {\n      let indexedPointer = this.compile(genericPointer);\n      if (isMap(arrayMap)) {\n        let arrayIndex = 0;\n        return indexedPointer.replace(/\\/\\-(?=\\/|$)/g, (key, stringIndex) =>\n          arrayMap.has((<string>indexedPointer).slice(0, stringIndex)) ?\n            '/' + indexArray[arrayIndex++] : key\n        );\n      } else {\n        for (const pointerIndex of indexArray) {\n          indexedPointer = indexedPointer.replace('/-', '/' + pointerIndex);\n        }\n        return indexedPointer;\n      }\n    }\n    if (!this.isJsonPointer(genericPointer)) {\n      console.error(`toIndexedPointer error: Invalid JSON Pointer: ${genericPointer}`);\n    }\n    if (!isArray(indexArray)) {\n      console.error(`toIndexedPointer error: Invalid indexArray: ${indexArray}`);\n    }\n  }\n\n  /**\n   * 'toGenericPointer' function\n   *\n   * Compares an indexed pointer to an array map and removes list array\n   * indexes (but leaves tuple arrray indexes and all object keys, including\n   * numeric keys) to create a generic pointer.\n   *\n   * For example, using the indexed pointer '/foo/1/bar/2/baz/3' and\n   * the arrayMap [['/foo', 0], ['/foo/-/bar', 3], ['/foo/-/bar/-/baz', 0]]\n   * would result in the generic pointer '/foo/-/bar/2/baz/-'\n   * Using the indexed pointer '/foo/1/bar/4/baz/3' and the same arrayMap\n   * would result in the generic pointer '/foo/-/bar/-/baz/-'\n   * (the bar array has 3 tuple items, so index 2 is retained, but 4 is removed)\n   *\n   * The structure of the arrayMap is: [['path to array', number of tuple items]...]\n   *\n   *\n   * //  { Pointer } indexedPointer - The indexed pointer (array or string)\n   * //  { Map<string, number> } arrayMap - The optional array map (for preserving tuple indexes)\n   * // { string } - The generic pointer with indexes removed\n   */\n  static toGenericPointer(indexedPointer, arrayMap = new Map<string, number>()) {\n    if (this.isJsonPointer(indexedPointer) && isMap(arrayMap)) {\n      const pointerArray = this.parse(indexedPointer);\n      for (let i = 1; i < pointerArray.length; i++) {\n        const subPointer = this.compile(pointerArray.slice(0, i));\n        if (arrayMap.has(subPointer) &&\n          arrayMap.get(subPointer) <= +pointerArray[i]\n        ) {\n          pointerArray[i] = '-';\n        }\n      }\n      return this.compile(pointerArray);\n    }\n    if (!this.isJsonPointer(indexedPointer)) {\n      console.error(`toGenericPointer error: invalid JSON Pointer: ${indexedPointer}`);\n    }\n    if (!isMap(arrayMap)) {\n      console.error(`toGenericPointer error: invalid arrayMap: ${arrayMap}`);\n    }\n  }\n\n  /**\n   * 'toControlPointer' function\n   *\n   * Accepts a JSON Pointer for a data object and returns a JSON Pointer for the\n   * matching control in an Angular FormGroup.\n   *\n   * //  { Pointer } dataPointer - JSON Pointer (string or array) to a data object\n   * //  { FormGroup } formGroup - Angular FormGroup to get value from\n   * //  { boolean = false } controlMustExist - Only return if control exists?\n   * // { Pointer } - JSON Pointer (string) to the formGroup object\n   */\n  static toControlPointer(dataPointer, formGroup, controlMustExist = false) {\n    const dataPointerArray = this.parse(dataPointer);\n    const controlPointerArray: string[] = [];\n    let subGroup = formGroup;\n    if (dataPointerArray !== null) {\n      for (const key of dataPointerArray) {\n        if (hasOwn(subGroup, 'controls')) {\n          controlPointerArray.push('controls');\n          subGroup = subGroup.controls;\n        }\n        if (isArray(subGroup) && (key === '-')) {\n          controlPointerArray.push((subGroup.length - 1).toString());\n          subGroup = subGroup[subGroup.length - 1];\n        } else if (hasOwn(subGroup, key)) {\n          controlPointerArray.push(key);\n          subGroup = subGroup[key];\n        } else if (controlMustExist) {\n          console.error(`toControlPointer error: Unable to find \"${key}\" item in FormGroup.`);\n          console.error(dataPointer);\n          console.error(formGroup);\n          return;\n        } else {\n          controlPointerArray.push(key);\n          subGroup = { controls: {} };\n        }\n      }\n      return this.compile(controlPointerArray);\n    }\n    console.error(`toControlPointer error: Invalid JSON Pointer: ${dataPointer}`);\n  }\n\n  /**\n   * 'toSchemaPointer' function\n   *\n   * Accepts a JSON Pointer to a value inside a data object and a JSON schema\n   * for that object.\n   *\n   * Returns a Pointer to the sub-schema for the value inside the object's schema.\n   *\n   * //  { Pointer } dataPointer - JSON Pointer (string or array) to an object\n   * //   schema - JSON schema for the object\n   * // { Pointer } - JSON Pointer (string) to the object's schema\n   */\n  static toSchemaPointer(dataPointer, schema) {\n    if (this.isJsonPointer(dataPointer) && typeof schema === 'object') {\n      const pointerArray = this.parse(dataPointer);\n      if (!pointerArray.length) { return ''; }\n      const firstKey = pointerArray.shift();\n      if (schema.type === 'object' || schema.properties || schema.additionalProperties) {\n        if ((schema.properties || {})[firstKey]) {\n          return `/properties/${this.escape(firstKey)}` +\n            this.toSchemaPointer(pointerArray, schema.properties[firstKey]);\n        } else  if (schema.additionalProperties) {\n          return '/additionalProperties' +\n            this.toSchemaPointer(pointerArray, schema.additionalProperties);\n        }\n      }\n      if ((schema.type === 'array' || schema.items) &&\n        (isNumber(firstKey) || firstKey === '-' || firstKey === '')\n      ) {\n        const arrayItem = firstKey === '-' || firstKey === '' ? 0 : +firstKey;\n        if (isArray(schema.items)) {\n          if (arrayItem < schema.items.length) {\n            return '/items/' + arrayItem +\n              this.toSchemaPointer(pointerArray, schema.items[arrayItem]);\n          } else if (schema.additionalItems) {\n            return '/additionalItems' +\n              this.toSchemaPointer(pointerArray, schema.additionalItems);\n          }\n        } else if (isObject(schema.items)) {\n          return '/items' + this.toSchemaPointer(pointerArray, schema.items);\n        } else if (isObject(schema.additionalItems)) {\n          return '/additionalItems' +\n            this.toSchemaPointer(pointerArray, schema.additionalItems);\n        }\n      }\n      console.error(`toSchemaPointer error: Data pointer ${dataPointer} ` +\n        `not compatible with schema ${schema}`);\n      return null;\n    }\n    if (!this.isJsonPointer(dataPointer)) {\n      console.error(`toSchemaPointer error: Invalid JSON Pointer: ${dataPointer}`);\n    }\n    if (typeof schema !== 'object') {\n      console.error(`toSchemaPointer error: Invalid JSON Schema: ${schema}`);\n    }\n    return null;\n  }\n\n  /**\n   * 'toDataPointer' function\n   *\n   * Accepts a JSON Pointer to a sub-schema inside a JSON schema and the schema.\n   *\n   * If possible, returns a generic Pointer to the corresponding value inside\n   * the data object described by the JSON schema.\n   *\n   * Returns null if the sub-schema is in an ambiguous location (such as\n   * definitions or additionalProperties) where the corresponding value\n   * location cannot be determined.\n   *\n   * //  { Pointer } schemaPointer - JSON Pointer (string or array) to a JSON schema\n   * //   schema - the JSON schema\n   * //  { boolean = false } errors - Show errors?\n   * // { Pointer } - JSON Pointer (string) to the value in the data object\n   */\n  static toDataPointer(schemaPointer, schema, errors = false) {\n    if (this.isJsonPointer(schemaPointer) && typeof schema === 'object' &&\n      this.has(schema, schemaPointer)\n    ) {\n      const pointerArray = this.parse(schemaPointer);\n      if (!pointerArray.length) { return ''; }\n      const firstKey = pointerArray.shift();\n      if (firstKey === 'properties' ||\n        (firstKey === 'items' && isArray(schema.items))\n      ) {\n        const secondKey = pointerArray.shift();\n        const pointerSuffix = this.toDataPointer(pointerArray, schema[firstKey][secondKey]);\n        return pointerSuffix === null ? null : '/' + secondKey + pointerSuffix;\n      } else if (firstKey === 'additionalItems' ||\n        (firstKey === 'items' && isObject(schema.items))\n      ) {\n        const pointerSuffix = this.toDataPointer(pointerArray, schema[firstKey]);\n        return pointerSuffix === null ? null : '/-' + pointerSuffix;\n      } else if (['allOf', 'anyOf', 'oneOf'].includes(firstKey)) {\n        const secondKey = pointerArray.shift();\n        return this.toDataPointer(pointerArray, schema[firstKey][secondKey]);\n      } else if (firstKey === 'not') {\n        return this.toDataPointer(pointerArray, schema[firstKey]);\n      } else if (['contains', 'definitions', 'dependencies', 'additionalItems',\n        'additionalProperties', 'patternProperties', 'propertyNames'].includes(firstKey)\n      ) {\n        if (errors) { console.error(`toDataPointer error: Ambiguous location`); }\n      }\n      return '';\n    }\n    if (errors) {\n      if (!this.isJsonPointer(schemaPointer)) {\n        console.error(`toDataPointer error: Invalid JSON Pointer: ${schemaPointer}`);\n      }\n      if (typeof schema !== 'object') {\n        console.error(`toDataPointer error: Invalid JSON Schema: ${schema}`);\n      }\n      if (typeof schema !== 'object') {\n        console.error(`toDataPointer error: Pointer ${schemaPointer} invalid for Schema: ${schema}`);\n      }\n    }\n    return null;\n  }\n\n  /**\n   * 'parseObjectPath' function\n   *\n   * Parses a JavaScript object path into an array of keys, which\n   * can then be passed to compile() to convert into a string JSON Pointer.\n   *\n   * Based on mike-marcacci's excellent objectpath parse function:\n   * https://github.com/mike-marcacci/objectpath\n   *\n   * //  { Pointer } path - The object path to parse\n   * // { string[] } - The resulting array of keys\n   */\n  static parseObjectPath(path) {\n    if (isArray(path)) { return <string[]>path; }\n    if (this.isJsonPointer(path)) { return this.parse(path); }\n    if (typeof path === 'string') {\n      let index = 0;\n      const parts: string[] = [];\n      while (index < path.length) {\n        const nextDot = path.indexOf('.', index);\n        const nextOB = path.indexOf('[', index); // next open bracket\n        if (nextDot === -1 && nextOB === -1) { // last item\n          parts.push(path.slice(index));\n          index = path.length;\n        } else if (nextDot !== -1 && (nextDot < nextOB || nextOB === -1)) { // dot notation\n          parts.push(path.slice(index, nextDot));\n          index = nextDot + 1;\n        } else { // bracket notation\n          if (nextOB > index) {\n            parts.push(path.slice(index, nextOB));\n            index = nextOB;\n          }\n          const quote = path.charAt(nextOB + 1);\n          if (quote === '\"' || quote === '\\'') { // enclosing quotes\n            let nextCB = path.indexOf(quote + ']', nextOB); // next close bracket\n            while (nextCB !== -1 && path.charAt(nextCB - 1) === '\\\\') {\n              nextCB = path.indexOf(quote + ']', nextCB + 2);\n            }\n            if (nextCB === -1) { nextCB = path.length; }\n            parts.push(path.slice(index + 2, nextCB)\n              .replace(new RegExp('\\\\' + quote, 'g'), quote));\n            index = nextCB + 2;\n          } else { // no enclosing quotes\n            let nextCB = path.indexOf(']', nextOB); // next close bracket\n            if (nextCB === -1) { nextCB = path.length; }\n            parts.push(path.slice(index + 1, nextCB));\n            index = nextCB + 1;\n          }\n          if (path.charAt(index) === '.') { index++; }\n        }\n      }\n      return parts;\n    }\n    console.error('parseObjectPath error: Input object path must be a string.');\n  }\n}\n","// updated from AJV fast format regular expressions:\n// https://github.com/epoberezkin/ajv/blob/master/lib/compile/formats.js\n\nexport const jsonSchemaFormatTests = {\n\n  'date': /^\\d\\d\\d\\d-[0-1]\\d-[0-3]\\d$/,\n\n  'time': /^[0-2]\\d:[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:z|[+-]\\d\\d:\\d\\d)?$/i,\n\n  // Modified to allow incomplete entries, such as\n  // \"2000-03-14T01:59:26.535\" (needs \"Z\") or \"2000-03-14T01:59\" (needs \":00Z\")\n  'date-time': /^\\d\\d\\d\\d-[0-1]\\d-[0-3]\\d[t\\s][0-2]\\d:[0-5]\\d(?::[0-5]\\d)?(?:\\.\\d+)?(?:z|[+-]\\d\\d:\\d\\d)?$/i,\n\n  // email (sources from jsen validator):\n  // http://stackoverflow.com/questions/201323/using-a-regular-expression-to-validate-an-email-address#answer-8829363\n  // http://www.w3.org/TR/html5/forms.html#valid-e-mail-address (search for 'willful violation')\n  'email': /^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i,\n\n  'hostname': /^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*$/i,\n\n  // optimized https://www.safaribooksonline.com/library/view/regular-expressions-cookbook/9780596802837/ch07s16.html\n  'ipv4': /^(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$/,\n\n  // optimized http://stackoverflow.com/questions/53497/regular-expression-that-matches-valid-ipv6-addresses\n  // tslint:disable-next-line:max-line-length\n  'ipv6': /^\\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(?:%.+)?\\s*$/i,\n\n  // uri: https://github.com/mafintosh/is-my-json-valid/blob/master/formats.js\n  'uri': /^(?:[a-z][a-z0-9+-.]*)(?::|\\/)\\/?[^\\s]*$/i,\n\n  // uri fragment: https://tools.ietf.org/html/rfc3986#appendix-A\n  'uri-reference': /^(?:(?:[a-z][a-z0-9+-.]*:)?\\/\\/)?[^\\s]*$/i,\n\n  // uri-template: https://tools.ietf.org/html/rfc6570\n  // tslint:disable-next-line:max-line-length\n  'uri-template': /^(?:(?:[^\\x00-\\x20\"'<>%\\\\^`{|}]|%[0-9a-f]{2})|\\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\\*)?)*\\})*$/i,\n\n  // For the source: https://gist.github.com/dperini/729294\n  // For test cases: https://mathiasbynens.be/demo/url-regex\n  // tslint:disable-next-line:max-line-length\n  // @todo Delete current URL in favour of the commented out URL rule when this ajv issue is fixed https://github.com/eslint/eslint/issues/7983.\n  // tslint:disable-next-line:max-line-length\n  // URL: /^(?:(?:https?|ftp):\\/\\/)(?:\\S+(?::\\S*)?@)?(?:(?!10(?:\\.\\d{1,3}){3})(?!127(?:\\.\\d{1,3}){3})(?!169\\.254(?:\\.\\d{1,3}){2})(?!192\\.168(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u{00a1}-\\u{ffff}0-9]+-?)*[a-z\\u{00a1}-\\u{ffff}0-9]+)(?:\\.(?:[a-z\\u{00a1}-\\u{ffff}0-9]+-?)*[a-z\\u{00a1}-\\u{ffff}0-9]+)*(?:\\.(?:[a-z\\u{00a1}-\\u{ffff}]{2,})))(?::\\d{2,5})?(?:\\/[^\\s]*)?$/iu,\n  // tslint:disable-next-line:max-line-length\n  'url': /^(?:(?:http[s\\u017F]?|ftp):\\/\\/)(?:(?:[\\0-\\x08\\x0E-\\x1F!-\\x9F\\xA1-\\u167F\\u1681-\\u1FFF\\u200B-\\u2027\\u202A-\\u202E\\u2030-\\u205E\\u2060-\\u2FFF\\u3001-\\uD7FF\\uE000-\\uFEFE\\uFF00-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+(?::(?:[\\0-\\x08\\x0E-\\x1F!-\\x9F\\xA1-\\u167F\\u1681-\\u1FFF\\u200B-\\u2027\\u202A-\\u202E\\u2030-\\u205E\\u2060-\\u2FFF\\u3001-\\uD7FF\\uE000-\\uFEFE\\uFF00-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])*)?@)?(?:(?!10(?:\\.[0-9]{1,3}){3})(?!127(?:\\.[0-9]{1,3}){3})(?!169\\.254(?:\\.[0-9]{1,3}){2})(?!192\\.168(?:\\.[0-9]{1,3}){2})(?!172\\.(?:1[6-9]|2[0-9]|3[01])(?:\\.[0-9]{1,3}){2})(?:[1-9][0-9]?|1[0-9][0-9]|2[01][0-9]|22[0-3])(?:\\.(?:1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])){2}(?:\\.(?:[1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-4]))|(?:(?:(?:[0-9KSa-z\\xA1-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+-?)*(?:[0-9KSa-z\\xA1-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+)(?:\\.(?:(?:[0-9KSa-z\\xA1-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+-?)*(?:[0-9KSa-z\\xA1-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+)*(?:\\.(?:(?:[KSa-z\\xA1-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]){2,})))(?::[0-9]{2,5})?(?:\\/(?:[\\0-\\x08\\x0E-\\x1F!-\\x9F\\xA1-\\u167F\\u1681-\\u1FFF\\u200B-\\u2027\\u202A-\\u202E\\u2030-\\u205E\\u2060-\\u2FFF\\u3001-\\uD7FF\\uE000-\\uFEFE\\uFF00-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])*)?$/i,\n\n  // uuid: http://tools.ietf.org/html/rfc4122\n  'uuid': /^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i,\n\n  // optimized https://gist.github.com/olmokramer/82ccce673f86db7cda5e\n  // tslint:disable-next-line:max-line-length\n  'color': /^\\s*(#(?:[\\da-f]{3}){1,2}|rgb\\((?:\\d{1,3},\\s*){2}\\d{1,3}\\)|rgba\\((?:\\d{1,3},\\s*){3}\\d*\\.?\\d+\\)|hsl\\(\\d{1,3}(?:,\\s*\\d{1,3}%){2}\\)|hsla\\(\\d{1,3}(?:,\\s*\\d{1,3}%){2},\\s*\\d*\\.?\\d+\\))\\s*$/gi,\n\n  // JSON-pointer: https://tools.ietf.org/html/rfc6901\n  'json-pointer': /^(?:\\/(?:[^~/]|~0|~1)*)*$|^#(?:\\/(?:[a-z0-9_\\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i,\n\n  'relative-json-pointer': /^(?:0|[1-9][0-9]*)(?:#|(?:\\/(?:[^~/]|~0|~1)*)*)$/,\n\n  'regex': function (str) {\n    if (/[^\\\\]\\\\Z/.test(str)) { return false; }\n    try {\n      return true;\n    } catch (e) {\n      return false;\n    }\n  }\n\n};\n\nexport type JsonSchemaFormatNames =\n  'date' | 'time' | 'date-time' | 'email' | 'hostname' | 'ipv4' | 'ipv6' |\n  'uri' | 'uri-reference' | 'uri-template' | 'url' | 'uuid' | 'color' |\n  'json-pointer' | 'relative-json-pointer' | 'regex';\n","import isEqual from 'lodash/isEqual';\nimport {\n  _executeAsyncValidators,\n  _executeValidators,\n  _mergeErrors,\n  _mergeObjects,\n  AsyncIValidatorFn,\n  getType,\n  hasValue,\n  isArray,\n  isBoolean,\n  isDefined,\n  isEmpty,\n  isNumber,\n  isString,\n  isType,\n  IValidatorFn,\n  SchemaPrimitiveType,\n  toJavaScriptType,\n  toObservable,\n  xor\n  } from './validator.functions';\nimport { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\nimport { forEachCopy } from './utility.functions';\nimport { forkJoin } from 'rxjs';\nimport { JsonSchemaFormatNames, jsonSchemaFormatTests } from './format-regex.constants';\nimport { map } from 'rxjs/operators';\n\n\n\n/**\n * 'JsonValidators' class\n *\n * Provides an extended set of validators to be used by form controls,\n * compatible with standard JSON Schema validation options.\n * http://json-schema.org/latest/json-schema-validation.html\n *\n * Note: This library is designed as a drop-in replacement for the Angular\n * Validators library, and except for one small breaking change to the 'pattern'\n * validator (described below) it can even be imported as a substitute, like so:\n *\n *   import { JsonValidators as Validators } from 'json-validators';\n *\n * and it should work with existing code as a complete replacement.\n *\n * The one exception is the 'pattern' validator, which has been changed to\n * matche partial values by default (the standard 'pattern' validator wrapped\n * all patterns in '^' and '$', forcing them to always match an entire value).\n * However, the old behavior can be restored by simply adding '^' and '$'\n * around your patterns, or by passing an optional second parameter of TRUE.\n * This change is to make the 'pattern' validator match the behavior of a\n * JSON Schema pattern, which allows partial matches, rather than the behavior\n * of an HTML input control pattern, which does not.\n *\n * This library replaces Angular's validators and combination functions\n * with the following validators and transformation functions:\n *\n * Validators:\n *   For all formControls:     required (*), type, enum, const\n *   For text formControls:    minLength (*), maxLength (*), pattern (*), format\n *   For numeric formControls: maximum, exclusiveMaximum,\n *                             minimum, exclusiveMinimum, multipleOf\n *   For formGroup objects:    minProperties, maxProperties, dependencies\n *   For formArray arrays:     minItems, maxItems, uniqueItems, contains\n *   Not used by JSON Schema:  min (*), max (*), requiredTrue (*), email (*)\n * (Validators originally included with Angular are maked with (*).)\n *\n * NOTE / TODO: The dependencies validator is not complete.\n * NOTE / TODO: The contains validator is not complete.\n *\n * Validators not used by JSON Schema (but included for compatibility)\n * and their JSON Schema equivalents:\n *\n *   Angular validator | JSON Schema equivalent\n *   ------------------|-----------------------\n *     min(number)     |   minimum(number)\n *     max(number)     |   maximum(number)\n *     requiredTrue()  |   const(true)\n *     email()         |   format('email')\n *\n * Validator transformation functions:\n *   composeAnyOf, composeOneOf, composeAllOf, composeNot\n * (Angular's original combination funciton, 'compose', is also included for\n * backward compatibility, though it is functionally equivalent to composeAllOf,\n * asside from its more generic error message.)\n *\n * All validators have also been extended to accept an optional second argument\n * which, if passed a TRUE value, causes the validator to perform the opposite\n * of its original finction. (This is used internally to enable 'not' and\n * 'composeOneOf' to function and return useful error messages.)\n *\n * The 'required' validator has also been overloaded so that if called with\n * a boolean parameter (or no parameters) it returns the original validator\n * function (rather than executing it). However, if it is called with an\n * AbstractControl parameter (as was previously required), it behaves\n * exactly as before.\n *\n * This enables all validators (including 'required') to be constructed in\n * exactly the same way, so they can be automatically applied using the\n * equivalent key names and values taken directly from a JSON Schema.\n *\n * This source code is partially derived from Angular,\n * which is Copyright (c) 2014-2017 Google, Inc.\n * Use of this source code is therefore governed by the same MIT-style license\n * that can be found in the LICENSE file at https://angular.io/license\n *\n * Original Angular Validators:\n * https://github.com/angular/angular/blob/master/packages/forms/src/validators.ts\n */\nexport class JsonValidators {\n\n  /**\n   * Validator functions:\n   *\n   * For all formControls:     required, type, enum, const\n   * For text formControls:    minLength, maxLength, pattern, format\n   * For numeric formControls: maximum, exclusiveMaximum,\n   *                           minimum, exclusiveMinimum, multipleOf\n   * For formGroup objects:    minProperties, maxProperties, dependencies\n   * For formArray arrays:     minItems, maxItems, uniqueItems, contains\n   *\n   * TODO: finish dependencies validator\n   */\n\n  /**\n   * 'required' validator\n   *\n   * This validator is overloaded, compared to the default required validator.\n   * If called with no parameters, or TRUE, this validator returns the\n   * 'required' validator function (rather than executing it). This matches\n   * the behavior of all other validators in this library.\n   *\n   * If this validator is called with an AbstractControl parameter\n   * (as was previously required) it behaves the same as Angular's default\n   * required validator, and returns an error if the control is empty.\n   *\n   * Old behavior: (if input type = AbstractControl)\n   * // {AbstractControl} control - required control\n   * // {{[key: string]: boolean}} - returns error message if no input\n   *\n   * New behavior: (if no input, or input type = boolean)\n   * // {boolean = true} required? - true to validate, false to disable\n   * // {IValidatorFn} - returns the 'required' validator function itself\n   */\n  static required(input: AbstractControl): ValidationErrors|null;\n  static required(input?: boolean): IValidatorFn;\n\n  static required(input?: AbstractControl|boolean): ValidationErrors|null|IValidatorFn {\n    if (input === undefined) { input = true; }\n    switch (input) {\n      case true: // Return required function (do not execute it yet)\n        return (control: AbstractControl, invert = false): ValidationErrors|null => {\n          if (invert) { return null; } // if not required, always return valid\n          return hasValue(control.value) ? null : { 'required': true };\n        };\n      case false: // Do nothing (if field is not required, it is always valid)\n        return JsonValidators.nullValidator;\n      default: // Execute required function\n        return hasValue((<AbstractControl>input).value) ? null : { 'required': true };\n    }\n  }\n\n  /**\n   * 'type' validator\n   *\n   * Requires a control to only accept values of a specified type,\n   * or one of an array of types.\n   *\n   * Note: SchemaPrimitiveType = 'string'|'number'|'integer'|'boolean'|'null'\n   *\n   * // {SchemaPrimitiveType|SchemaPrimitiveType[]} type - type(s) to accept\n   * // {IValidatorFn}\n   */\n  static type(requiredType: SchemaPrimitiveType|SchemaPrimitiveType[]): IValidatorFn {\n    if (!hasValue(requiredType)) { return JsonValidators.nullValidator; }\n    return (control: AbstractControl, invert = false): ValidationErrors|null => {\n      if (isEmpty(control.value)) { return null; }\n      const currentValue: any = control.value;\n      const isValid = isArray(requiredType) ?\n        (<SchemaPrimitiveType[]>requiredType).some(type => isType(currentValue, type)) :\n        isType(currentValue, <SchemaPrimitiveType>requiredType);\n      return xor(isValid, invert) ?\n        null : { 'type': { requiredType, currentValue } };\n    };\n  }\n\n  /**\n   * 'enum' validator\n   *\n   * Requires a control to have a value from an enumerated list of values.\n   *\n   * Converts types as needed to allow string inputs to still correctly\n   * match number, boolean, and null enum values.\n   *\n   * // {any[]} allowedValues - array of acceptable values\n   * // {IValidatorFn}\n   */\n  static enum(allowedValues: any[]): IValidatorFn {\n    if (!isArray(allowedValues)) { return JsonValidators.nullValidator; }\n    return (control: AbstractControl, invert = false): ValidationErrors|null => {\n      if (isEmpty(control.value)) { return null; }\n      const currentValue: any = control.value;\n      const isEqualVal = (enumValue, inputValue) =>\n        enumValue === inputValue ||\n        (isNumber(enumValue) && +inputValue === +enumValue) ||\n        (isBoolean(enumValue, 'strict') &&\n          toJavaScriptType(inputValue, 'boolean') === enumValue) ||\n        (enumValue === null && !hasValue(inputValue)) ||\n        isEqual(enumValue, inputValue);\n      const isValid = isArray(currentValue) ?\n        currentValue.every(inputValue => allowedValues.some(enumValue =>\n          isEqualVal(enumValue, inputValue)\n        )) :\n        allowedValues.some(enumValue => isEqualVal(enumValue, currentValue));\n      return xor(isValid, invert) ?\n        null : { 'enum': { allowedValues, currentValue } };\n    };\n  }\n\n  /**\n   * 'const' validator\n   *\n   * Requires a control to have a specific value.\n   *\n   * Converts types as needed to allow string inputs to still correctly\n   * match number, boolean, and null values.\n   *\n   * TODO: modify to work with objects\n   *\n   * // {any[]} requiredValue - required value\n   * // {IValidatorFn}\n   */\n  static const(requiredValue: any): IValidatorFn {\n    if (!hasValue(requiredValue)) { return JsonValidators.nullValidator; }\n    return (control: AbstractControl, invert = false): ValidationErrors|null => {\n      if (isEmpty(control.value)) { return null; }\n      const currentValue: any = control.value;\n      const isEqualVal = (constValue, inputValue) =>\n        constValue === inputValue ||\n        isNumber(constValue) && +inputValue === +constValue ||\n        isBoolean(constValue, 'strict') &&\n          toJavaScriptType(inputValue, 'boolean') === constValue ||\n        constValue === null && !hasValue(inputValue);\n      const isValid = isEqualVal(requiredValue, currentValue);\n      return xor(isValid, invert) ?\n        null : { 'const': { requiredValue, currentValue } };\n    };\n  }\n\n  /**\n   * 'minLength' validator\n   *\n   * Requires a control's text value to be greater than a specified length.\n   *\n   * // {number} minimumLength - minimum allowed string length\n   * // {boolean = false} invert - instead return error object only if valid\n   * // {IValidatorFn}\n   */\n  static minLength(minimumLength: number): IValidatorFn {\n    if (!hasValue(minimumLength)) { return JsonValidators.nullValidator; }\n    return (control: AbstractControl, invert = false): ValidationErrors|null => {\n      if (isEmpty(control.value)) { return null; }\n      const currentLength = isString(control.value) ? control.value.length : 0;\n      const isValid = currentLength >= minimumLength;\n      return xor(isValid, invert) ?\n        null : { 'minLength': { minimumLength, currentLength } };\n    };\n  }\n\n  /**\n   * 'maxLength' validator\n   *\n   * Requires a control's text value to be less than a specified length.\n   *\n   * // {number} maximumLength - maximum allowed string length\n   * // {boolean = false} invert - instead return error object only if valid\n   * // {IValidatorFn}\n   */\n  static maxLength(maximumLength: number): IValidatorFn {\n    if (!hasValue(maximumLength)) { return JsonValidators.nullValidator; }\n    return (control: AbstractControl, invert = false): ValidationErrors|null => {\n      const currentLength = isString(control.value) ? control.value.length : 0;\n      const isValid = currentLength <= maximumLength;\n      return xor(isValid, invert) ?\n        null : { 'maxLength': { maximumLength, currentLength } };\n    };\n  }\n\n  /**\n   * 'pattern' validator\n   *\n   * Note: NOT the same as Angular's default pattern validator.\n   *\n   * Requires a control's value to match a specified regular expression pattern.\n   *\n   * This validator changes the behavior of default pattern validator\n   * by replacing RegExp(`^${pattern}$`) with RegExp(`${pattern}`),\n   * which allows for partial matches.\n   *\n   * To return to the default funcitonality, and match the entire string,\n   * pass TRUE as the optional second parameter.\n   *\n   * // {string} pattern - regular expression pattern\n   * // {boolean = false} wholeString - match whole value string?\n   * // {IValidatorFn}\n   */\n  static pattern(pattern: string|RegExp, wholeString = false): IValidatorFn {\n    if (!hasValue(pattern)) { return JsonValidators.nullValidator; }\n    return (control: AbstractControl, invert = false): ValidationErrors|null => {\n      if (isEmpty(control.value)) { return null; }\n      let regex: RegExp;\n      let requiredPattern: string;\n      if (typeof pattern === 'string') {\n        requiredPattern = (wholeString) ? `^${pattern}$` : pattern;\n        regex = new RegExp(requiredPattern);\n      } else {\n        requiredPattern = pattern.toString();\n        regex = pattern;\n      }\n      const currentValue: string = control.value;\n      const isValid = isString(currentValue) ? regex.test(currentValue) : false;\n      return xor(isValid, invert) ?\n        null : { 'pattern': { requiredPattern, currentValue } };\n    };\n  }\n\n  /**\n   * 'format' validator\n   *\n   * Requires a control to have a value of a certain format.\n   *\n   * This validator currently checks the following formsts:\n   *   date, time, date-time, email, hostname, ipv4, ipv6,\n   *   uri, uri-reference, uri-template, url, uuid, color,\n   *   json-pointer, relative-json-pointer, regex\n   *\n   * Fast format regular expressions copied from AJV:\n   * https://github.com/epoberezkin/ajv/blob/master/lib/compile/formats.js\n   *\n   * // {JsonSchemaFormatNames} requiredFormat - format to check\n   * // {IValidatorFn}\n   */\n  static format(requiredFormat: JsonSchemaFormatNames): IValidatorFn {\n    if (!hasValue(requiredFormat)) { return JsonValidators.nullValidator; }\n    return (control: AbstractControl, invert = false): ValidationErrors|null => {\n      if (isEmpty(control.value)) { return null; }\n      let isValid: boolean;\n      const currentValue: string|Date = control.value;\n      if (isString(currentValue)) {\n        const formatTest: Function|RegExp = jsonSchemaFormatTests[requiredFormat];\n        if (typeof formatTest === 'object') {\n          isValid = (<RegExp>formatTest).test(<string>currentValue);\n        } else if (typeof formatTest === 'function') {\n          isValid = (<Function>formatTest)(<string>currentValue);\n        } else {\n          console.error(`format validator error: \"${requiredFormat}\" is not a recognized format.`);\n          isValid = true;\n        }\n      } else {\n        // Allow JavaScript Date objects\n        isValid = ['date', 'time', 'date-time'].includes(requiredFormat) &&\n          Object.prototype.toString.call(currentValue) === '[object Date]';\n      }\n      return xor(isValid, invert) ?\n        null : { 'format': { requiredFormat, currentValue } };\n    };\n  }\n\n  /**\n   * 'minimum' validator\n   *\n   * Requires a control's numeric value to be greater than or equal to\n   * a minimum amount.\n   *\n   * Any non-numeric value is also valid (according to the HTML forms spec,\n   * a non-numeric value doesn't have a minimum).\n   * https://www.w3.org/TR/html5/forms.html#attr-input-max\n   *\n   * // {number} minimum - minimum allowed value\n   * // {IValidatorFn}\n   */\n  static minimum(minimumValue: number): IValidatorFn {\n    if (!hasValue(minimumValue)) { return JsonValidators.nullValidator; }\n    return (control: AbstractControl, invert = false): ValidationErrors|null => {\n      if (isEmpty(control.value)) { return null; }\n      const currentValue = control.value;\n      const isValid = !isNumber(currentValue) || currentValue >= minimumValue;\n      return xor(isValid, invert) ?\n        null : { 'minimum': { minimumValue, currentValue } };\n    };\n  }\n\n  /**\n   * 'exclusiveMinimum' validator\n   *\n   * Requires a control's numeric value to be less than a maximum amount.\n   *\n   * Any non-numeric value is also valid (according to the HTML forms spec,\n   * a non-numeric value doesn't have a maximum).\n   * https://www.w3.org/TR/html5/forms.html#attr-input-max\n   *\n   * // {number} exclusiveMinimumValue - maximum allowed value\n   * // {IValidatorFn}\n   */\n  static exclusiveMinimum(exclusiveMinimumValue: number): IValidatorFn {\n    if (!hasValue(exclusiveMinimumValue)) { return JsonValidators.nullValidator; }\n    return (control: AbstractControl, invert = false): ValidationErrors|null => {\n      if (isEmpty(control.value)) { return null; }\n      const currentValue = control.value;\n      const isValid = !isNumber(currentValue) || +currentValue < exclusiveMinimumValue;\n      return xor(isValid, invert) ?\n        null : { 'exclusiveMinimum': { exclusiveMinimumValue, currentValue } };\n    };\n  }\n\n  /**\n   * 'maximum' validator\n   *\n   * Requires a control's numeric value to be less than or equal to\n   * a maximum amount.\n   *\n   * Any non-numeric value is also valid (according to the HTML forms spec,\n   * a non-numeric value doesn't have a maximum).\n   * https://www.w3.org/TR/html5/forms.html#attr-input-max\n   *\n   * // {number} maximumValue - maximum allowed value\n   * // {IValidatorFn}\n   */\n  static maximum(maximumValue: number): IValidatorFn {\n    if (!hasValue(maximumValue)) { return JsonValidators.nullValidator; }\n    return (control: AbstractControl, invert = false): ValidationErrors|null => {\n      if (isEmpty(control.value)) { return null; }\n      const currentValue = control.value;\n      const isValid = !isNumber(currentValue) || +currentValue <= maximumValue;\n      return xor(isValid, invert) ?\n        null : { 'maximum': { maximumValue, currentValue } };\n    };\n  }\n\n  /**\n   * 'exclusiveMaximum' validator\n   *\n   * Requires a control's numeric value to be less than a maximum amount.\n   *\n   * Any non-numeric value is also valid (according to the HTML forms spec,\n   * a non-numeric value doesn't have a maximum).\n   * https://www.w3.org/TR/html5/forms.html#attr-input-max\n   *\n   * // {number} exclusiveMaximumValue - maximum allowed value\n   * // {IValidatorFn}\n   */\n  static exclusiveMaximum(exclusiveMaximumValue: number): IValidatorFn {\n    if (!hasValue(exclusiveMaximumValue)) { return JsonValidators.nullValidator; }\n    return (control: AbstractControl, invert = false): ValidationErrors|null => {\n      if (isEmpty(control.value)) { return null; }\n      const currentValue = control.value;\n      const isValid = !isNumber(currentValue) || +currentValue < exclusiveMaximumValue;\n      return xor(isValid, invert) ?\n        null : { 'exclusiveMaximum': { exclusiveMaximumValue, currentValue } };\n    };\n  }\n\n  /**\n   * 'multipleOf' validator\n   *\n   * Requires a control to have a numeric value that is a multiple\n   * of a specified number.\n   *\n   * // {number} multipleOfValue - number value must be a multiple of\n   * // {IValidatorFn}\n   */\n  static multipleOf(multipleOfValue: number): IValidatorFn {\n    if (!hasValue(multipleOfValue)) { return JsonValidators.nullValidator; }\n    return (control: AbstractControl, invert = false): ValidationErrors|null => {\n      if (isEmpty(control.value)) { return null; }\n      const currentValue = control.value;\n      const isValid = isNumber(currentValue) &&\n        currentValue % multipleOfValue === 0;\n      return xor(isValid, invert) ?\n        null : { 'multipleOf': { multipleOfValue, currentValue } };\n    };\n  }\n\n  /**\n   * 'minProperties' validator\n   *\n   * Requires a form group to have a minimum number of properties (i.e. have\n   * values entered in a minimum number of controls within the group).\n   *\n   * // {number} minimumProperties - minimum number of properties allowed\n   * // {IValidatorFn}\n   */\n  static minProperties(minimumProperties: number): IValidatorFn {\n    if (!hasValue(minimumProperties)) { return JsonValidators.nullValidator; }\n    return (control: AbstractControl, invert = false): ValidationErrors|null => {\n      if (isEmpty(control.value)) { return null; }\n      const currentProperties = Object.keys(control.value).length || 0;\n      const isValid = currentProperties >= minimumProperties;\n      return xor(isValid, invert) ?\n        null : { 'minProperties': { minimumProperties, currentProperties } };\n    };\n  }\n\n  /**\n   * 'maxProperties' validator\n   *\n   * Requires a form group to have a maximum number of properties (i.e. have\n   * values entered in a maximum number of controls within the group).\n   *\n   * Note: Has no effect if the form group does not contain more than the\n   * maximum number of controls.\n   *\n   * // {number} maximumProperties - maximum number of properties allowed\n   * // {IValidatorFn}\n   */\n  static maxProperties(maximumProperties: number): IValidatorFn {\n    if (!hasValue(maximumProperties)) { return JsonValidators.nullValidator; }\n    return (control: AbstractControl, invert = false): ValidationErrors|null => {\n      const currentProperties = Object.keys(control.value).length || 0;\n      const isValid = currentProperties <= maximumProperties;\n      return xor(isValid, invert) ?\n        null : { 'maxProperties': { maximumProperties, currentProperties } };\n    };\n  }\n\n  /**\n   * 'dependencies' validator\n   *\n   * Requires the controls in a form group to meet additional validation\n   * criteria, depending on the values of other controls in the group.\n   *\n   * Examples:\n   * https://spacetelescope.github.io/understanding-json-schema/reference/object.html#dependencies\n   *\n   * // {any} dependencies - required dependencies\n   * // {IValidatorFn}\n   */\n  static dependencies(dependencies: any): IValidatorFn {\n    if (getType(dependencies) !== 'object' || isEmpty(dependencies)) {\n      return JsonValidators.nullValidator;\n    }\n    return (control: AbstractControl, invert = false): ValidationErrors|null => {\n      if (isEmpty(control.value)) { return null; }\n      const allErrors = _mergeObjects(\n        forEachCopy(dependencies, (value, requiringField) => {\n          if (!hasValue(control.value[requiringField])) { return null; }\n          let requiringFieldErrors: ValidationErrors = { };\n          let requiredFields: string[];\n          let properties: ValidationErrors = { };\n          if (getType(dependencies[requiringField]) === 'array') {\n            requiredFields = dependencies[requiringField];\n          } else if (getType(dependencies[requiringField]) === 'object') {\n            requiredFields = dependencies[requiringField]['required'] || [];\n            properties = dependencies[requiringField]['properties'] || { };\n          }\n\n          // Validate property dependencies\n          for (const requiredField of requiredFields) {\n            if (xor(!hasValue(control.value[requiredField]), invert)) {\n              requiringFieldErrors[requiredField] = { 'required': true };\n            }\n          }\n\n          // Validate schema dependencies\n          requiringFieldErrors = _mergeObjects(requiringFieldErrors,\n            forEachCopy(properties, (requirements, requiredField) => {\n              const requiredFieldErrors = _mergeObjects(\n                forEachCopy(requirements, (requirement, parameter) => {\n                  let validator: IValidatorFn = null;\n                  if (requirement === 'maximum' || requirement === 'minimum') {\n                    const exclusive = !!requirements['exclusiveM' + requirement.slice(1)];\n                    validator = JsonValidators[requirement](parameter, exclusive);\n                  } else if (typeof JsonValidators[requirement] === 'function') {\n                    validator = JsonValidators[requirement](parameter);\n                  }\n                  return !isDefined(validator) ?\n                    null : validator(control.value[requiredField]);\n                })\n              );\n              return isEmpty(requiredFieldErrors) ?\n                null : { [requiredField]: requiredFieldErrors };\n            })\n          );\n          return isEmpty(requiringFieldErrors) ?\n            null : { [requiringField]: requiringFieldErrors };\n        })\n      );\n      return isEmpty(allErrors) ? null : allErrors;\n    };\n  }\n\n  /**\n   * 'minItems' validator\n   *\n   * Requires a form array to have a minimum number of values.\n   *\n   * // {number} minimumItems - minimum number of items allowed\n   * // {IValidatorFn}\n   */\n  static minItems(minimumItems: number): IValidatorFn {\n    if (!hasValue(minimumItems)) { return JsonValidators.nullValidator; }\n    return (control: AbstractControl, invert = false): ValidationErrors|null => {\n      if (isEmpty(control.value)) { return null; }\n      const currentItems = isArray(control.value) ? control.value.length : 0;\n      const isValid = currentItems >= minimumItems;\n      return xor(isValid, invert) ?\n        null : { 'minItems': { minimumItems, currentItems } };\n    };\n  }\n\n  /**\n   * 'maxItems' validator\n   *\n   * Requires a form array to have a maximum number of values.\n   *\n   * // {number} maximumItems - maximum number of items allowed\n   * // {IValidatorFn}\n   */\n  static maxItems(maximumItems: number): IValidatorFn {\n    if (!hasValue(maximumItems)) { return JsonValidators.nullValidator; }\n    return (control: AbstractControl, invert = false): ValidationErrors|null => {\n      const currentItems = isArray(control.value) ? control.value.length : 0;\n      const isValid = currentItems <= maximumItems;\n      return xor(isValid, invert) ?\n        null : { 'maxItems': { maximumItems, currentItems } };\n    };\n  }\n\n  /**\n   * 'uniqueItems' validator\n   *\n   * Requires values in a form array to be unique.\n   *\n   * // {boolean = true} unique? - true to validate, false to disable\n   * // {IValidatorFn}\n   */\n  static uniqueItems(unique = true): IValidatorFn {\n    if (!unique) { return JsonValidators.nullValidator; }\n    return (control: AbstractControl, invert = false): ValidationErrors|null => {\n      if (isEmpty(control.value)) { return null; }\n      const sorted: any[] = control.value.slice().sort();\n      const duplicateItems = [];\n      for (let i = 1; i < sorted.length; i++) {\n        if (sorted[i - 1] === sorted[i] && duplicateItems.includes(sorted[i])) {\n          duplicateItems.push(sorted[i]);\n        }\n      }\n      const isValid = !duplicateItems.length;\n      return xor(isValid, invert) ?\n        null : { 'uniqueItems': { duplicateItems } };\n    };\n  }\n\n  /**\n   * 'contains' validator\n   *\n   * TODO: Complete this validator\n   *\n   * Requires values in a form array to be unique.\n   *\n   * // {boolean = true} unique? - true to validate, false to disable\n   * // {IValidatorFn}\n   */\n  static contains(requiredItem = true): IValidatorFn {\n    if (!requiredItem) { return JsonValidators.nullValidator; }\n    return (control: AbstractControl, invert = false): ValidationErrors|null => {\n      if (isEmpty(control.value) || !isArray(control.value)) { return null; }\n      const currentItems = control.value;\n      // const isValid = currentItems.some(item =>\n      //\n      // );\n      const isValid = true;\n      return xor(isValid, invert) ?\n        null : { 'contains': { requiredItem, currentItems } };\n    };\n  }\n\n  /**\n   * No-op validator. Included for backward compatibility.\n   */\n  static nullValidator(control: AbstractControl): ValidationErrors|null {\n    return null;\n  }\n\n  /**\n   * Validator transformation functions:\n   * composeAnyOf, composeOneOf, composeAllOf, composeNot,\n   * compose, composeAsync\n   *\n   * TODO: Add composeAnyOfAsync, composeOneOfAsync,\n   *           composeAllOfAsync, composeNotAsync\n   */\n\n  /**\n   * 'composeAnyOf' validator combination function\n   *\n   * Accepts an array of validators and returns a single validator that\n   * evaluates to valid if any one or more of the submitted validators are\n   * valid. If every validator is invalid, it returns combined errors from\n   * all validators.\n   *\n   * // {IValidatorFn[]} validators - array of validators to combine\n   * // {IValidatorFn} - single combined validator function\n   */\n  static composeAnyOf(validators: IValidatorFn[]): IValidatorFn {\n    if (!validators) { return null; }\n    const presentValidators = validators.filter(isDefined);\n    if (presentValidators.length === 0) { return null; }\n    return (control: AbstractControl, invert = false): ValidationErrors|null => {\n      const arrayOfErrors =\n        _executeValidators(control, presentValidators, invert).filter(isDefined);\n      const isValid = validators.length > arrayOfErrors.length;\n      return xor(isValid, invert) ?\n        null : _mergeObjects(...arrayOfErrors, { 'anyOf': !invert });\n    };\n  }\n\n  /**\n   * 'composeOneOf' validator combination function\n   *\n   * Accepts an array of validators and returns a single validator that\n   * evaluates to valid only if exactly one of the submitted validators\n   * is valid. Otherwise returns combined information from all validators,\n   * both valid and invalid.\n   *\n   * // {IValidatorFn[]} validators - array of validators to combine\n   * // {IValidatorFn} - single combined validator function\n   */\n  static composeOneOf(validators: IValidatorFn[]): IValidatorFn {\n    if (!validators) { return null; }\n    const presentValidators = validators.filter(isDefined);\n    if (presentValidators.length === 0) { return null; }\n    return (control: AbstractControl, invert = false): ValidationErrors|null => {\n      const arrayOfErrors =\n        _executeValidators(control, presentValidators);\n      const validControls =\n        validators.length - arrayOfErrors.filter(isDefined).length;\n      const isValid = validControls === 1;\n      if (xor(isValid, invert)) { return null; }\n      const arrayOfValids =\n        _executeValidators(control, presentValidators, invert);\n      return _mergeObjects(...arrayOfErrors, ...arrayOfValids, { 'oneOf': !invert });\n    };\n  }\n\n  /**\n   * 'composeAllOf' validator combination function\n   *\n   * Accepts an array of validators and returns a single validator that\n   * evaluates to valid only if all the submitted validators are individually\n   * valid. Otherwise it returns combined errors from all invalid validators.\n   *\n   * // {IValidatorFn[]} validators - array of validators to combine\n   * // {IValidatorFn} - single combined validator function\n   */\n  static composeAllOf(validators: IValidatorFn[]): IValidatorFn {\n    if (!validators) { return null; }\n    const presentValidators = validators.filter(isDefined);\n    if (presentValidators.length === 0) { return null; }\n    return (control: AbstractControl, invert = false): ValidationErrors|null => {\n      const combinedErrors = _mergeErrors(\n        _executeValidators(control, presentValidators, invert)\n      );\n      const isValid = combinedErrors === null;\n      return (xor(isValid, invert)) ?\n        null : _mergeObjects(combinedErrors, { 'allOf': !invert });\n    };\n  }\n\n  /**\n   * 'composeNot' validator inversion function\n   *\n   * Accepts a single validator function and inverts its result.\n   * Returns valid if the submitted validator is invalid, and\n   * returns invalid if the submitted validator is valid.\n   * (Note: this function can itself be inverted\n   *   - e.g. composeNot(composeNot(validator)) -\n   *   but this can be confusing and is therefore not recommended.)\n   *\n   * // {IValidatorFn[]} validators - validator(s) to invert\n   * // {IValidatorFn} - new validator function that returns opposite result\n   */\n  static composeNot(validator: IValidatorFn): IValidatorFn {\n    if (!validator) { return null; }\n    return (control: AbstractControl, invert = false): ValidationErrors|null => {\n      if (isEmpty(control.value)) { return null; }\n      const error = validator(control, !invert);\n      const isValid = error === null;\n      return (xor(isValid, invert)) ?\n        null : _mergeObjects(error, { 'not': !invert });\n    };\n  }\n\n  /**\n   * 'compose' validator combination function\n   *\n   * // {IValidatorFn[]} validators - array of validators to combine\n   * // {IValidatorFn} - single combined validator function\n   */\n  static compose(validators: IValidatorFn[]): IValidatorFn {\n    if (!validators) { return null; }\n    const presentValidators = validators.filter(isDefined);\n    if (presentValidators.length === 0) { return null; }\n    return (control: AbstractControl, invert = false): ValidationErrors|null =>\n      _mergeErrors(_executeValidators(control, presentValidators, invert));\n  }\n\n  /**\n   * 'composeAsync' async validator combination function\n   *\n   * // {AsyncIValidatorFn[]} async validators - array of async validators\n   * // {AsyncIValidatorFn} - single combined async validator function\n   */\n  static composeAsync(validators: AsyncIValidatorFn[]): AsyncIValidatorFn {\n    if (!validators) { return null; }\n    const presentValidators = validators.filter(isDefined);\n    if (presentValidators.length === 0) { return null; }\n    return (control: AbstractControl) => {\n      const observables =\n        _executeAsyncValidators(control, presentValidators).map(toObservable);\n      return map.call(forkJoin(observables), _mergeErrors);\n    };\n  }\n\n  // Additional angular validators (not used by Angualr JSON Schema Form)\n  // From https://github.com/angular/angular/blob/master/packages/forms/src/validators.ts\n\n  /**\n   * Validator that requires controls to have a value greater than a number.\n   */\n  static min(min: number): ValidatorFn {\n    if (!hasValue(min)) { return JsonValidators.nullValidator; }\n    return (control: AbstractControl): ValidationErrors|null => {\n      // don't validate empty values to allow optional controls\n      if (isEmpty(control.value) || isEmpty(min)) { return null; }\n      const value = parseFloat(control.value);\n      const actual = control.value;\n      // Controls with NaN values after parsing should be treated as not having a\n      // minimum, per the HTML forms spec: https://www.w3.org/TR/html5/forms.html#attr-input-min\n      return isNaN(value) || value >= min ? null : { 'min': { min, actual } };\n    };\n  }\n\n  /**\n   * Validator that requires controls to have a value less than a number.\n   */\n  static max(max: number): ValidatorFn {\n    if (!hasValue(max)) { return JsonValidators.nullValidator; }\n    return (control: AbstractControl): ValidationErrors|null => {\n      // don't validate empty values to allow optional controls\n      if (isEmpty(control.value) || isEmpty(max)) { return null; }\n      const value = parseFloat(control.value);\n      const actual = control.value;\n      // Controls with NaN values after parsing should be treated as not having a\n      // maximum, per the HTML forms spec: https://www.w3.org/TR/html5/forms.html#attr-input-max\n      return isNaN(value) || value <= max ? null : { 'max': { max, actual } };\n    };\n  }\n\n  /**\n   * Validator that requires control value to be true.\n   */\n  static requiredTrue(control: AbstractControl): ValidationErrors|null {\n    if (!control) { return JsonValidators.nullValidator; }\n    return control.value === true ? null : { 'required': true };\n  }\n\n  /**\n   * Validator that performs email validation.\n   */\n  static email(control: AbstractControl): ValidationErrors|null {\n    if (!control) { return JsonValidators.nullValidator; }\n    const EMAIL_REGEXP =\n      // tslint:disable-next-line:max-line-length\n      /^(?=.{1,254}$)(?=.{1,64}@)[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+(\\.[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+)*@[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?(\\.[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?)*$/;\n    return EMAIL_REGEXP.test(control.value) ? null : { 'email': true };\n  }\n}\n","import isEqual from 'lodash/isEqual';\n\nimport {\n  isArray, isEmpty, isNumber, isObject, isString\n} from './validator.functions';\nimport { hasOwn, uniqueItems, commonItems } from './utility.functions';\nimport { JsonPointer, Pointer } from './jsonpointer.functions';\n\n/**\n * 'mergeSchemas' function\n *\n * Merges multiple JSON schemas into a single schema with combined rules.\n *\n * If able to logically merge properties from all schemas,\n * returns a single schema object containing all merged properties.\n *\n * Example: ({ a: b, max: 1 }, { c: d, max: 2 }) => { a: b, c: d, max: 1 }\n *\n * If unable to logically merge, returns an allOf schema object containing\n * an array of the original schemas;\n *\n * Example: ({ a: b }, { a: d }) => { allOf: [ { a: b }, { a: d } ] }\n *\n * //   schemas - one or more input schemas\n * //  - merged schema\n */\nexport function mergeSchemas(...schemas) {\n  schemas = schemas.filter(schema => !isEmpty(schema));\n  if (schemas.some(schema => !isObject(schema))) { return null; }\n  const combinedSchema: any = {};\n  for (const schema of schemas) {\n    for (const key of Object.keys(schema)) {\n      const combinedValue = combinedSchema[key];\n      const schemaValue = schema[key];\n      if (!hasOwn(combinedSchema, key) || isEqual(combinedValue, schemaValue)) {\n        combinedSchema[key] = schemaValue;\n      } else {\n        switch (key) {\n          case 'allOf':\n            // Combine all items from both arrays\n            if (isArray(combinedValue) && isArray(schemaValue)) {\n              combinedSchema.allOf = mergeSchemas(...combinedValue, ...schemaValue);\n            } else {\n              return { allOf: [ ...schemas ] };\n            }\n          break;\n          case 'additionalItems': case 'additionalProperties':\n          case 'contains': case 'propertyNames':\n            // Merge schema objects\n            if (isObject(combinedValue) && isObject(schemaValue)) {\n              combinedSchema[key] = mergeSchemas(combinedValue, schemaValue);\n            // additionalProperties == false in any schema overrides all other values\n            } else if (\n              key === 'additionalProperties' &&\n              (combinedValue === false || schemaValue === false)\n            ) {\n              combinedSchema.combinedSchema = false;\n            } else {\n              return { allOf: [ ...schemas ] };\n            }\n          break;\n          case 'anyOf': case 'oneOf': case 'enum':\n            // Keep only items that appear in both arrays\n            if (isArray(combinedValue) && isArray(schemaValue)) {\n              combinedSchema[key] = combinedValue.filter(item1 =>\n                schemaValue.findIndex(item2 => isEqual(item1, item2)) > -1\n              );\n              if (!combinedSchema[key].length) { return { allOf: [ ...schemas ] }; }\n            } else {\n              return { allOf: [ ...schemas ] };\n            }\n          break;\n          case 'definitions':\n            // Combine keys from both objects\n            if (isObject(combinedValue) && isObject(schemaValue)) {\n              const combinedObject = { ...combinedValue };\n              for (const subKey of Object.keys(schemaValue)) {\n                if (!hasOwn(combinedObject, subKey) ||\n                  isEqual(combinedObject[subKey], schemaValue[subKey])\n                ) {\n                  combinedObject[subKey] = schemaValue[subKey];\n                // Don't combine matching keys with different values\n                } else {\n                  return { allOf: [ ...schemas ] };\n                }\n              }\n              combinedSchema.definitions = combinedObject;\n            } else {\n              return { allOf: [ ...schemas ] };\n            }\n          break;\n          case 'dependencies':\n            // Combine all keys from both objects\n            // and merge schemas on matching keys,\n            // converting from arrays to objects if necessary\n            if (isObject(combinedValue) && isObject(schemaValue)) {\n              const combinedObject = { ...combinedValue };\n              for (const subKey of Object.keys(schemaValue)) {\n                if (!hasOwn(combinedObject, subKey) ||\n                  isEqual(combinedObject[subKey], schemaValue[subKey])\n                ) {\n                  combinedObject[subKey] = schemaValue[subKey];\n                // If both keys are arrays, include all items from both arrays,\n                // excluding duplicates\n                } else if (\n                  isArray(schemaValue[subKey]) && isArray(combinedObject[subKey])\n                ) {\n                  combinedObject[subKey] =\n                    uniqueItems(...combinedObject[subKey], ...schemaValue[subKey]);\n                // If either key is an object, merge the schemas\n                } else if (\n                  (isArray(schemaValue[subKey]) || isObject(schemaValue[subKey])) &&\n                  (isArray(combinedObject[subKey]) || isObject(combinedObject[subKey]))\n                ) {\n                  // If either key is an array, convert it to an object first\n                  const required = isArray(combinedSchema.required) ?\n                    combinedSchema.required : [];\n                  const combinedDependency = isArray(combinedObject[subKey]) ?\n                    { required: uniqueItems(...required, combinedObject[subKey]) } :\n                    combinedObject[subKey];\n                  const schemaDependency = isArray(schemaValue[subKey]) ?\n                    { required: uniqueItems(...required, schemaValue[subKey]) } :\n                    schemaValue[subKey];\n                  combinedObject[subKey] =\n                    mergeSchemas(combinedDependency, schemaDependency);\n                } else {\n                  return { allOf: [ ...schemas ] };\n                }\n              }\n              combinedSchema.dependencies = combinedObject;\n            } else {\n              return { allOf: [ ...schemas ] };\n            }\n          break;\n          case 'items':\n            // If arrays, keep only items that appear in both arrays\n            if (isArray(combinedValue) && isArray(schemaValue)) {\n              combinedSchema.items = combinedValue.filter(item1 =>\n                schemaValue.findIndex(item2 => isEqual(item1, item2)) > -1\n              );\n              if (!combinedSchema.items.length) { return { allOf: [ ...schemas ] }; }\n            // If both keys are objects, merge them\n            } else if (isObject(combinedValue) && isObject(schemaValue)) {\n              combinedSchema.items = mergeSchemas(combinedValue, schemaValue);\n            // If object + array, combine object with each array item\n            } else if (isArray(combinedValue) && isObject(schemaValue)) {\n              combinedSchema.items =\n                combinedValue.map(item => mergeSchemas(item, schemaValue));\n            } else if (isObject(combinedValue) && isArray(schemaValue)) {\n              combinedSchema.items =\n                schemaValue.map(item => mergeSchemas(item, combinedValue));\n            } else {\n              return { allOf: [ ...schemas ] };\n            }\n          break;\n          case 'multipleOf':\n            // TODO: Adjust to correctly handle decimal values\n            // If numbers, set to least common multiple\n            if (isNumber(combinedValue) && isNumber(schemaValue)) {\n              const gcd = (x, y) => !y ? x : gcd(y, x % y);\n              const lcm = (x, y) => (x * y) / gcd(x, y);\n              combinedSchema.multipleOf = lcm(combinedValue, schemaValue);\n            } else {\n              return { allOf: [ ...schemas ] };\n            }\n          break;\n          case 'maximum': case 'exclusiveMaximum': case 'maxLength':\n          case 'maxItems': case 'maxProperties':\n            // If numbers, set to lowest value\n            if (isNumber(combinedValue) && isNumber(schemaValue)) {\n              combinedSchema[key] = Math.min(combinedValue, schemaValue);\n            } else {\n              return { allOf: [ ...schemas ] };\n            }\n          break;\n          case 'minimum': case 'exclusiveMinimum': case 'minLength':\n          case 'minItems': case 'minProperties':\n            // If numbers, set to highest value\n            if (isNumber(combinedValue) && isNumber(schemaValue)) {\n              combinedSchema[key] = Math.max(combinedValue, schemaValue);\n            } else {\n              return { allOf: [ ...schemas ] };\n            }\n          break;\n          case 'not':\n            // Combine not values into anyOf array\n            if (isObject(combinedValue) && isObject(schemaValue)) {\n              const notAnyOf = [combinedValue, schemaValue]\n                .reduce((notAnyOfArray, notSchema) =>\n                  isArray(notSchema.anyOf) &&\n                  Object.keys(notSchema).length === 1 ?\n                    [ ...notAnyOfArray, ...notSchema.anyOf ] :\n                    [ ...notAnyOfArray, notSchema ]\n                , []);\n              // TODO: Remove duplicate items from array\n              combinedSchema.not = { anyOf: notAnyOf };\n            } else {\n              return { allOf: [ ...schemas ] };\n            }\n          break;\n          case 'patternProperties':\n            // Combine all keys from both objects\n            // and merge schemas on matching keys\n            if (isObject(combinedValue) && isObject(schemaValue)) {\n              const combinedObject = { ...combinedValue };\n              for (const subKey of Object.keys(schemaValue)) {\n                if (!hasOwn(combinedObject, subKey) ||\n                  isEqual(combinedObject[subKey], schemaValue[subKey])\n                ) {\n                  combinedObject[subKey] = schemaValue[subKey];\n                // If both keys are objects, merge them\n                } else if (\n                  isObject(schemaValue[subKey]) && isObject(combinedObject[subKey])\n                ) {\n                  combinedObject[subKey] =\n                    mergeSchemas(combinedObject[subKey], schemaValue[subKey]);\n                } else {\n                  return { allOf: [ ...schemas ] };\n                }\n              }\n              combinedSchema.patternProperties = combinedObject;\n            } else {\n              return { allOf: [ ...schemas ] };\n            }\n          break;\n          case 'properties':\n            // Combine all keys from both objects\n            // unless additionalProperties === false\n            // and merge schemas on matching keys\n            if (isObject(combinedValue) && isObject(schemaValue)) {\n              const combinedObject = { ...combinedValue };\n              // If new schema has additionalProperties,\n              // merge or remove non-matching property keys in combined schema\n              if (hasOwn(schemaValue, 'additionalProperties')) {\n                Object.keys(combinedValue)\n                  .filter(combinedKey => !Object.keys(schemaValue).includes(combinedKey))\n                  .forEach(nonMatchingKey => {\n                    if (schemaValue.additionalProperties === false) {\n                      delete combinedObject[nonMatchingKey];\n                    } else if (isObject(schemaValue.additionalProperties)) {\n                      combinedObject[nonMatchingKey] = mergeSchemas(\n                        combinedObject[nonMatchingKey],\n                        schemaValue.additionalProperties\n                      );\n                    }\n                  });\n              }\n              for (const subKey of Object.keys(schemaValue)) {\n                if (isEqual(combinedObject[subKey], schemaValue[subKey]) || (\n                  !hasOwn(combinedObject, subKey) &&\n                  !hasOwn(combinedObject, 'additionalProperties')\n                )) {\n                  combinedObject[subKey] = schemaValue[subKey];\n                // If combined schema has additionalProperties,\n                // merge or ignore non-matching property keys in new schema\n                } else if (\n                  !hasOwn(combinedObject, subKey) &&\n                  hasOwn(combinedObject, 'additionalProperties')\n                ) {\n                  // If combinedObject.additionalProperties === false,\n                  // do nothing (don't set key)\n                  // If additionalProperties is object, merge with new key\n                  if (isObject(combinedObject.additionalProperties)) {\n                    combinedObject[subKey] = mergeSchemas(\n                      combinedObject.additionalProperties, schemaValue[subKey]\n                    );\n                  }\n                // If both keys are objects, merge them\n                } else if (\n                  isObject(schemaValue[subKey]) &&\n                  isObject(combinedObject[subKey])\n                ) {\n                  combinedObject[subKey] =\n                    mergeSchemas(combinedObject[subKey], schemaValue[subKey]);\n                } else {\n                  return { allOf: [ ...schemas ] };\n                }\n              }\n              combinedSchema.properties = combinedObject;\n            } else {\n              return { allOf: [ ...schemas ] };\n            }\n          break;\n          case 'required':\n            // If arrays, include all items from both arrays, excluding duplicates\n            if (isArray(combinedValue) && isArray(schemaValue)) {\n              combinedSchema.required = uniqueItems(...combinedValue, ...schemaValue);\n            // If booleans, aet true if either true\n            } else if (\n              typeof schemaValue === 'boolean' &&\n              typeof combinedValue === 'boolean'\n            ) {\n              combinedSchema.required = !!combinedValue || !!schemaValue;\n            } else {\n              return { allOf: [ ...schemas ] };\n            }\n          break;\n          case '$schema': case '$id': case 'id':\n            // Don't combine these keys\n          break;\n          case 'title': case 'description': case '$comment':\n            // Return the last value, overwriting any previous one\n            // These properties are not used for validation, so conflicts don't matter\n            combinedSchema[key] = schemaValue;\n          break;\n          case 'type':\n            if (\n              (isArray(schemaValue) || isString(schemaValue)) &&\n              (isArray(combinedValue) || isString(combinedValue))\n            ) {\n              const combinedTypes = commonItems(combinedValue, schemaValue);\n              if (!combinedTypes.length) { return { allOf: [ ...schemas ] }; }\n              combinedSchema.type = combinedTypes.length > 1 ? combinedTypes : combinedTypes[0];\n            } else {\n              return { allOf: [ ...schemas ] };\n            }\n          break;\n          case 'uniqueItems':\n            // Set true if either true\n            combinedSchema.uniqueItems = !!combinedValue || !!schemaValue;\n          break;\n          default:\n            return { allOf: [ ...schemas ] };\n        }\n      }\n    }\n  }\n  return combinedSchema;\n}\n","import cloneDeep from 'lodash/cloneDeep';\nimport { forEach, hasOwn, mergeFilteredObject } from './utility.functions';\nimport {\n  getType,\n  hasValue,\n  inArray,\n  isArray,\n  isNumber,\n  isObject,\n  isString\n  } from './validator.functions';\nimport { JsonPointer } from './jsonpointer.functions';\nimport { mergeSchemas } from './merge-schemas.function';\n\n\n/**\n * JSON Schema function library:\n *\n * buildSchemaFromLayout:   TODO: Write this function\n *\n * buildSchemaFromData:\n *\n * getFromSchema:\n *\n * removeRecursiveReferences:\n *\n * getInputType:\n *\n * checkInlineType:\n *\n * isInputRequired:\n *\n * updateInputOptions:\n *\n * getTitleMapFromOneOf:\n *\n * getControlValidators:\n *\n * resolveSchemaReferences:\n *\n * getSubSchema:\n *\n * combineAllOf:\n *\n * fixRequiredArrayProperties:\n */\n\n/**\n * 'buildSchemaFromLayout' function\n *\n * TODO: Build a JSON Schema from a JSON Form layout\n *\n * //   layout - The JSON Form layout\n * //  - The new JSON Schema\n */\nexport function buildSchemaFromLayout(layout) {\n  return;\n  // let newSchema: any = { };\n  // const walkLayout = (layoutItems: any[], callback: Function): any[] => {\n  //   let returnArray: any[] = [];\n  //   for (let layoutItem of layoutItems) {\n  //     const returnItem: any = callback(layoutItem);\n  //     if (returnItem) { returnArray = returnArray.concat(callback(layoutItem)); }\n  //     if (layoutItem.items) {\n  //       returnArray = returnArray.concat(walkLayout(layoutItem.items, callback));\n  //     }\n  //   }\n  //   return returnArray;\n  // };\n  // walkLayout(layout, layoutItem => {\n  //   let itemKey: string;\n  //   if (typeof layoutItem === 'string') {\n  //     itemKey = layoutItem;\n  //   } else if (layoutItem.key) {\n  //     itemKey = layoutItem.key;\n  //   }\n  //   if (!itemKey) { return; }\n  //   //\n  // });\n}\n\n/**\n * 'buildSchemaFromData' function\n *\n * Build a JSON Schema from a data object\n *\n * //   data - The data object\n * //  { boolean = false } requireAllFields - Require all fields?\n * //  { boolean = true } isRoot - is root\n * //  - The new JSON Schema\n */\nexport function buildSchemaFromData(\n  data, requireAllFields = false, isRoot = true\n) {\n  const newSchema: any = {};\n  const getFieldType = (value: any): string => {\n    const fieldType = getType(value, 'strict');\n    return { integer: 'number', null: 'string' }[fieldType] || fieldType;\n  };\n  const buildSubSchema = (value) =>\n    buildSchemaFromData(value, requireAllFields, false);\n  if (isRoot) { newSchema.$schema = 'http://json-schema.org/draft-06/schema#'; }\n  newSchema.type = getFieldType(data);\n  if (newSchema.type === 'object') {\n    newSchema.properties = {};\n    if (requireAllFields) { newSchema.required = []; }\n    for (const key of Object.keys(data)) {\n      newSchema.properties[key] = buildSubSchema(data[key]);\n      if (requireAllFields) { newSchema.required.push(key); }\n    }\n  } else if (newSchema.type === 'array') {\n    newSchema.items = data.map(buildSubSchema);\n    // If all items are the same type, use an object for items instead of an array\n    if ((new Set(data.map(getFieldType))).size === 1) {\n      newSchema.items = newSchema.items.reduce((a, b) => ({ ...a, ...b }), {});\n    }\n    if (requireAllFields) { newSchema.minItems = 1; }\n  }\n  return newSchema;\n}\n\n/**\n * 'getFromSchema' function\n *\n * Uses a JSON Pointer for a value within a data object to retrieve\n * the schema for that value within schema for the data object.\n *\n * The optional third parameter can also be set to return something else:\n * 'schema' (default): the schema for the value indicated by the data pointer\n * 'parentSchema': the schema for the value's parent object or array\n * 'schemaPointer': a pointer to the value's schema within the object's schema\n * 'parentSchemaPointer': a pointer to the schema for the value's parent object or array\n *\n * //   schema - The schema to get the sub-schema from\n * //  { Pointer } dataPointer - JSON Pointer (string or array)\n * //  { string = 'schema' } returnType - what to return?\n * //  - The located sub-schema\n */\nexport function getFromSchema(schema, dataPointer, returnType = 'schema') {\n  const dataPointerArray: any[] = JsonPointer.parse(dataPointer);\n  if (dataPointerArray === null) {\n    console.error(`getFromSchema error: Invalid JSON Pointer: ${dataPointer}`);\n    return null;\n  }\n  let subSchema = schema;\n  const schemaPointer = [];\n  const length = dataPointerArray.length;\n  if (returnType.slice(0, 6) === 'parent') { dataPointerArray.length--; }\n  for (let i = 0; i < length; ++i) {\n    const parentSchema = subSchema;\n    const key = dataPointerArray[i];\n    let subSchemaFound = false;\n    if (typeof subSchema !== 'object') {\n      console.error(`getFromSchema error: Unable to find \"${key}\" key in schema.`);\n      console.error(schema);\n      console.error(dataPointer);\n      return null;\n    }\n    if (subSchema.type === 'array' && (!isNaN(key) || key === '-')) {\n      if (hasOwn(subSchema, 'items')) {\n        if (isObject(subSchema.items)) {\n          subSchemaFound = true;\n          subSchema = subSchema.items;\n          schemaPointer.push('items');\n        } else if (isArray(subSchema.items)) {\n          if (!isNaN(key) && subSchema.items.length >= +key) {\n            subSchemaFound = true;\n            subSchema = subSchema.items[+key];\n            schemaPointer.push('items', key);\n          }\n        }\n      }\n      if (!subSchemaFound && isObject(subSchema.additionalItems)) {\n        subSchemaFound = true;\n        subSchema = subSchema.additionalItems;\n        schemaPointer.push('additionalItems');\n      } else if (subSchema.additionalItems !== false) {\n        subSchemaFound = true;\n        subSchema = { };\n        schemaPointer.push('additionalItems');\n      }\n    } else if (subSchema.type === 'object') {\n      if (isObject(subSchema.properties) && hasOwn(subSchema.properties, key)) {\n        subSchemaFound = true;\n        subSchema = subSchema.properties[key];\n        schemaPointer.push('properties', key);\n      } else if (isObject(subSchema.additionalProperties)) {\n        subSchemaFound = true;\n        subSchema = subSchema.additionalProperties;\n        schemaPointer.push('additionalProperties');\n      } else if (subSchema.additionalProperties !== false) {\n        subSchemaFound = true;\n        subSchema = { };\n        schemaPointer.push('additionalProperties');\n      }\n    }\n    if (!subSchemaFound) {\n      console.error(`getFromSchema error: Unable to find \"${key}\" item in schema.`);\n      console.error(schema);\n      console.error(dataPointer);\n      return;\n    }\n  }\n  return returnType.slice(-7) === 'Pointer' ? schemaPointer : subSchema;\n}\n\n/**\n * 'removeRecursiveReferences' function\n *\n * Checks a JSON Pointer against a map of recursive references and returns\n * a JSON Pointer to the shallowest equivalent location in the same object.\n *\n * Using this functions enables an object to be constructed with unlimited\n * recursion, while maintaing a fixed set of metadata, such as field data types.\n * The object can grow as large as it wants, and deeply recursed nodes can\n * just refer to the metadata for their shallow equivalents, instead of having\n * to add additional redundant metadata for each recursively added node.\n *\n * Example:\n *\n * pointer:         '/stuff/and/more/and/more/and/more/and/more/stuff'\n * recursiveRefMap: [['/stuff/and/more/and/more', '/stuff/and/more/']]\n * returned:        '/stuff/and/more/stuff'\n *\n * //  { Pointer } pointer -\n * //  { Map<string, string> } recursiveRefMap -\n * //  { Map<string, number> = new Map() } arrayMap - optional\n * // { string } -\n */\nexport function removeRecursiveReferences(\n  pointer, recursiveRefMap, arrayMap = new Map()\n) {\n  if (!pointer) { return ''; }\n  let genericPointer =\n    JsonPointer.toGenericPointer(JsonPointer.compile(pointer), arrayMap);\n  if (genericPointer.indexOf('/') === -1) { return genericPointer; }\n  let possibleReferences = true;\n  while (possibleReferences) {\n    possibleReferences = false;\n    recursiveRefMap.forEach((toPointer, fromPointer) => {\n      if (JsonPointer.isSubPointer(toPointer, fromPointer)) {\n        while (JsonPointer.isSubPointer(fromPointer, genericPointer, true)) {\n          genericPointer = JsonPointer.toGenericPointer(\n            toPointer + genericPointer.slice(fromPointer.length), arrayMap\n          );\n          possibleReferences = true;\n        }\n      }\n    });\n  }\n  return genericPointer;\n}\n\n/**\n * 'getInputType' function\n *\n * //   schema\n * //  { any = null } layoutNode\n * // { string }\n */\nexport function getInputType(schema, layoutNode: any = null) {\n  // x-schema-form = Angular Schema Form compatibility\n  // widget & component = React Jsonschema Form compatibility\n  const controlType = JsonPointer.getFirst([\n    [schema, '/x-schema-form/type'],\n    [schema, '/x-schema-form/widget/component'],\n    [schema, '/x-schema-form/widget'],\n    [schema, '/widget/component'],\n    [schema, '/widget']\n  ]);\n  if (isString(controlType)) { return checkInlineType(controlType, schema, layoutNode); }\n  let schemaType = schema.type;\n  if (schemaType) {\n    if (isArray(schemaType)) { // If multiple types listed, use most inclusive type\n      schemaType =\n        inArray('object', schemaType) && hasOwn(schema, 'properties') ? 'object' :\n        inArray('array', schemaType) && hasOwn(schema, 'items') ? 'array' :\n        inArray('array', schemaType) && hasOwn(schema, 'additionalItems') ? 'array' :\n        inArray('string', schemaType) ? 'string' :\n        inArray('number', schemaType) ? 'number' :\n        inArray('integer', schemaType) ? 'integer' :\n        inArray('boolean', schemaType) ? 'boolean' : 'unknown';\n    }\n    if (schemaType === 'boolean') { return 'checkbox'; }\n    if (schemaType === 'object') {\n      if (hasOwn(schema, 'properties') || hasOwn(schema, 'additionalProperties')) {\n        return 'section';\n      }\n      // TODO: Figure out how to handle additionalProperties\n      if (hasOwn(schema, '$ref')) { return '$ref'; }\n    }\n    if (schemaType === 'array') {\n      const itemsObject = JsonPointer.getFirst([\n        [schema, '/items'],\n        [schema, '/additionalItems']\n      ]) || {};\n      return hasOwn(itemsObject, 'enum') && schema.maxItems !== 1 ?\n        checkInlineType('checkboxes', schema, layoutNode) : 'array';\n    }\n    if (schemaType === 'null') { return 'none'; }\n    if (JsonPointer.has(layoutNode, '/options/titleMap') ||\n      hasOwn(schema, 'enum') || getTitleMapFromOneOf(schema, null, true)\n    ) { return 'select'; }\n    if (schemaType === 'number' || schemaType === 'integer') {\n      return (schemaType === 'integer' || hasOwn(schema, 'multipleOf')) &&\n        hasOwn(schema, 'maximum') && hasOwn(schema, 'minimum') ? 'range' : schemaType;\n    }\n    if (schemaType === 'string') {\n      return {\n        'color': 'color',\n        'date': 'date',\n        'date-time': 'datetime-local',\n        'email': 'email',\n        'uri': 'url',\n      }[schema.format] || 'text';\n    }\n  }\n  if (hasOwn(schema, '$ref')) { return '$ref'; }\n  if (isArray(schema.oneOf) || isArray(schema.anyOf)) { return 'one-of'; }\n  console.error(`getInputType error: Unable to determine input type for ${schemaType}`);\n  console.error('schema', schema);\n  if (layoutNode) { console.error('layoutNode', layoutNode); }\n  return 'none';\n}\n\n/**\n * 'checkInlineType' function\n *\n * Checks layout and schema nodes for 'inline: true', and converts\n * 'radios' or 'checkboxes' to 'radios-inline' or 'checkboxes-inline'\n *\n * //  { string } controlType -\n * //   schema -\n * //  { any = null } layoutNode -\n * // { string }\n */\nexport function checkInlineType(controlType, schema, layoutNode: any = null) {\n  if (!isString(controlType) || (\n    controlType.slice(0, 8) !== 'checkbox' && controlType.slice(0, 5) !== 'radio'\n  )) {\n    return controlType;\n  }\n  if (\n    JsonPointer.getFirst([\n      [layoutNode, '/inline'],\n      [layoutNode, '/options/inline'],\n      [schema, '/inline'],\n      [schema, '/x-schema-form/inline'],\n      [schema, '/x-schema-form/options/inline'],\n      [schema, '/x-schema-form/widget/inline'],\n      [schema, '/x-schema-form/widget/component/inline'],\n      [schema, '/x-schema-form/widget/component/options/inline'],\n      [schema, '/widget/inline'],\n      [schema, '/widget/component/inline'],\n      [schema, '/widget/component/options/inline'],\n    ]) === true\n  ) {\n    return controlType.slice(0, 5) === 'radio' ?\n      'radios-inline' : 'checkboxes-inline';\n  } else {\n    return controlType;\n  }\n}\n\n/**\n * 'isInputRequired' function\n *\n * Checks a JSON Schema to see if an item is required\n *\n * //   schema - the schema to check\n * //  { string } schemaPointer - the pointer to the item to check\n * // { boolean } - true if the item is required, false if not\n */\nexport function isInputRequired(schema, schemaPointer) {\n  if (!isObject(schema)) {\n    console.error('isInputRequired error: Input schema must be an object.');\n    return false;\n  }\n  const listPointerArray = JsonPointer.parse(schemaPointer);\n  if (isArray(listPointerArray)) {\n    if (!listPointerArray.length) { return schema.required === true; }\n    const keyName = listPointerArray.pop();\n    const nextToLastKey = listPointerArray[listPointerArray.length - 1];\n    if (['properties', 'additionalProperties', 'patternProperties', 'items', 'additionalItems']\n      .includes(nextToLastKey)\n    ) {\n      listPointerArray.pop();\n    }\n    const parentSchema = JsonPointer.get(schema, listPointerArray) || {};\n    if (isArray(parentSchema.required)) {\n      return parentSchema.required.includes(keyName);\n    }\n    if (parentSchema.type === 'array') {\n      return hasOwn(parentSchema, 'minItems') &&\n        isNumber(keyName) &&\n        +parentSchema.minItems > +keyName;\n    }\n  }\n  return false;\n}\n\n/**\n * 'updateInputOptions' function\n *\n * //   layoutNode\n * //   schema\n * //   jsf\n * // { void }\n */\nexport function updateInputOptions(layoutNode, schema, jsf) {\n  if (!isObject(layoutNode) || !isObject(layoutNode.options)) { return; }\n\n  // Set all option values in layoutNode.options\n  const newOptions: any = { };\n  const fixUiKeys = key => key.slice(0, 3).toLowerCase() === 'ui:' ? key.slice(3) : key;\n  mergeFilteredObject(newOptions, jsf.formOptions.defautWidgetOptions, [], fixUiKeys);\n  [ [ JsonPointer.get(schema, '/ui:widget/options'), [] ],\n    [ JsonPointer.get(schema, '/ui:widget'), [] ],\n    [ schema, [\n      'additionalProperties', 'additionalItems', 'properties', 'items',\n      'required', 'type', 'x-schema-form', '$ref'\n    ] ],\n    [ JsonPointer.get(schema, '/x-schema-form/options'), [] ],\n    [ JsonPointer.get(schema, '/x-schema-form'), ['items', 'options'] ],\n    [ layoutNode, [\n      '_id', '$ref', 'arrayItem', 'arrayItemType', 'dataPointer', 'dataType',\n      'items', 'key', 'name', 'options', 'recursiveReference', 'type', 'widget'\n    ] ],\n    [ layoutNode.options, [] ],\n  ].forEach(([ object, excludeKeys ]) =>\n    mergeFilteredObject(newOptions, object, excludeKeys, fixUiKeys)\n  );\n  if (!hasOwn(newOptions, 'titleMap')) {\n    let newTitleMap: any = null;\n    newTitleMap = getTitleMapFromOneOf(schema, newOptions.flatList);\n    if (newTitleMap) { newOptions.titleMap = newTitleMap; }\n    if (!hasOwn(newOptions, 'titleMap') && !hasOwn(newOptions, 'enum') && hasOwn(schema, 'items')) {\n      if (JsonPointer.has(schema, '/items/titleMap')) {\n        newOptions.titleMap = schema.items.titleMap;\n      } else if (JsonPointer.has(schema, '/items/enum')) {\n        newOptions.enum = schema.items.enum;\n        if (!hasOwn(newOptions, 'enumNames') && JsonPointer.has(schema, '/items/enumNames')) {\n          newOptions.enumNames = schema.items.enumNames;\n        }\n      } else if (JsonPointer.has(schema, '/items/oneOf')) {\n        newTitleMap = getTitleMapFromOneOf(schema.items, newOptions.flatList);\n        if (newTitleMap) { newOptions.titleMap = newTitleMap; }\n      }\n    }\n  }\n\n  // If schema type is integer, enforce by setting multipleOf = 1\n  if (schema.type === 'integer' && !hasValue(newOptions.multipleOf)) {\n    newOptions.multipleOf = 1;\n  }\n\n  // Copy any typeahead word lists to options.typeahead.source\n  if (JsonPointer.has(newOptions, '/autocomplete/source')) {\n    newOptions.typeahead = newOptions.autocomplete;\n  } else if (JsonPointer.has(newOptions, '/tagsinput/source')) {\n    newOptions.typeahead = newOptions.tagsinput;\n  } else if (JsonPointer.has(newOptions, '/tagsinput/typeahead/source')) {\n    newOptions.typeahead = newOptions.tagsinput.typeahead;\n  }\n\n  layoutNode.options = newOptions;\n}\n\n/**\n * 'getTitleMapFromOneOf' function\n *\n * //  { schema } schema\n * //  { boolean = null } flatList\n * //  { boolean = false } validateOnly\n * // { validators }\n */\nexport function getTitleMapFromOneOf(\n  schema: any = {}, flatList: boolean = null, validateOnly = false\n) {\n  let titleMap = null;\n  const oneOf = schema.oneOf || schema.anyOf || null;\n  if (isArray(oneOf) && oneOf.every(item => item.title)) {\n    if (oneOf.every(item => isArray(item.enum) && item.enum.length === 1)) {\n      if (validateOnly) { return true; }\n      titleMap = oneOf.map(item => ({ name: item.title, value: item.enum[0] }));\n    } else if (oneOf.every(item => item.const)) {\n      if (validateOnly) { return true; }\n      titleMap = oneOf.map(item => ({ name: item.title, value: item.const }));\n    }\n\n    // if flatList !== false and some items have colons, make grouped map\n    if (flatList !== false && (titleMap || [])\n      .filter(title => ((title || {}).name || '').indexOf(': ')).length > 1\n    ) {\n\n      // Split name on first colon to create grouped map (name -> group: name)\n      const newTitleMap = titleMap.map(title => {\n        const [group, name] = title.name.split(/: (.+)/);\n        return group && name ? { ...title, group, name } : title;\n      });\n\n      // If flatList === true or at least one group has multiple items, use grouped map\n      if (flatList === true || newTitleMap.some((title, index) => index &&\n        hasOwn(title, 'group') && title.group === newTitleMap[index - 1].group\n      )) {\n        titleMap = newTitleMap;\n      }\n    }\n  }\n  return validateOnly ? false : titleMap;\n}\n\n/**\n * 'getControlValidators' function\n *\n * //  schema\n * // { validators }\n */\nexport function getControlValidators(schema) {\n  if (!isObject(schema)) { return null; }\n  const validators: any = { };\n  if (hasOwn(schema, 'type')) {\n    switch (schema.type) {\n      case 'string':\n        forEach(['pattern', 'format', 'minLength', 'maxLength'], (prop) => {\n          if (hasOwn(schema, prop)) { validators[prop] = [schema[prop]]; }\n        });\n      break;\n      case 'number': case 'integer':\n        forEach(['Minimum', 'Maximum'], (ucLimit) => {\n          const eLimit = 'exclusive' + ucLimit;\n          const limit = ucLimit.toLowerCase();\n          if (hasOwn(schema, limit)) {\n            const exclusive = hasOwn(schema, eLimit) && schema[eLimit] === true;\n            validators[limit] = [schema[limit], exclusive];\n          }\n        });\n        forEach(['multipleOf', 'type'], (prop) => {\n          if (hasOwn(schema, prop)) { validators[prop] = [schema[prop]]; }\n        });\n      break;\n      case 'object':\n        forEach(['minProperties', 'maxProperties', 'dependencies'], (prop) => {\n          if (hasOwn(schema, prop)) { validators[prop] = [schema[prop]]; }\n        });\n      break;\n      case 'array':\n        forEach(['minItems', 'maxItems', 'uniqueItems'], (prop) => {\n          if (hasOwn(schema, prop)) { validators[prop] = [schema[prop]]; }\n        });\n      break;\n    }\n  }\n  if (hasOwn(schema, 'enum')) { validators.enum = [schema.enum]; }\n  return validators;\n}\n\n/**\n * 'resolveSchemaReferences' function\n *\n * Find all $ref links in schema and save links and referenced schemas in\n * schemaRefLibrary, schemaRecursiveRefMap, and dataRecursiveRefMap\n *\n * //  schema\n * //  schemaRefLibrary\n * // { Map<string, string> } schemaRecursiveRefMap\n * // { Map<string, string> } dataRecursiveRefMap\n * // { Map<string, number> } arrayMap\n * //\n */\nexport function resolveSchemaReferences(\n  schema, schemaRefLibrary, schemaRecursiveRefMap, dataRecursiveRefMap, arrayMap\n) {\n  if (!isObject(schema)) {\n    console.error('resolveSchemaReferences error: schema must be an object.');\n    return;\n  }\n  const refLinks = new Set<string>();\n  const refMapSet = new Set<string>();\n  const refMap = new Map<string, string>();\n  const recursiveRefMap = new Map<string, string>();\n  const refLibrary: any = {};\n\n  // Search schema for all $ref links, and build full refLibrary\n  JsonPointer.forEachDeep(schema, (subSchema, subSchemaPointer) => {\n    if (hasOwn(subSchema, '$ref') && isString(subSchema['$ref'])) {\n      const refPointer = JsonPointer.compile(subSchema['$ref']);\n      refLinks.add(refPointer);\n      refMapSet.add(subSchemaPointer + '~~' + refPointer);\n      refMap.set(subSchemaPointer, refPointer);\n    }\n  });\n  refLinks.forEach(ref => refLibrary[ref] = getSubSchema(schema, ref));\n\n  // Follow all ref links and save in refMapSet,\n  // to find any multi-link recursive refernces\n  let checkRefLinks = true;\n  while (checkRefLinks) {\n    checkRefLinks = false;\n    Array.from(refMap).forEach(([fromRef1, toRef1]) => Array.from(refMap)\n      .filter(([fromRef2, toRef2]) =>\n        JsonPointer.isSubPointer(toRef1, fromRef2, true) &&\n        !JsonPointer.isSubPointer(toRef2, toRef1, true) &&\n        !refMapSet.has(fromRef1 + fromRef2.slice(toRef1.length) + '~~' + toRef2)\n      )\n      .forEach(([fromRef2, toRef2]) => {\n        refMapSet.add(fromRef1 + fromRef2.slice(toRef1.length) + '~~' + toRef2);\n        checkRefLinks = true;\n      })\n    );\n  }\n\n  // Build full recursiveRefMap\n  // First pass - save all internally recursive refs from refMapSet\n  Array.from(refMapSet)\n    .map(refLink => refLink.split('~~'))\n    .filter(([fromRef, toRef]) => JsonPointer.isSubPointer(toRef, fromRef))\n    .forEach(([fromRef, toRef]) => recursiveRefMap.set(fromRef, toRef));\n  // Second pass - create recursive versions of any other refs that link to recursive refs\n  Array.from(refMap)\n    .filter(([fromRef1, toRef1]) => Array.from(recursiveRefMap.keys())\n      .every(fromRef2 => !JsonPointer.isSubPointer(fromRef1, fromRef2, true))\n    )\n    .forEach(([fromRef1, toRef1]) => Array.from(recursiveRefMap)\n      .filter(([fromRef2, toRef2]) =>\n        !recursiveRefMap.has(fromRef1 + fromRef2.slice(toRef1.length)) &&\n        JsonPointer.isSubPointer(toRef1, fromRef2, true) &&\n        !JsonPointer.isSubPointer(toRef1, fromRef1, true)\n      )\n      .forEach(([fromRef2, toRef2]) => recursiveRefMap.set(\n        fromRef1 + fromRef2.slice(toRef1.length),\n        fromRef1 + toRef2.slice(toRef1.length)\n      ))\n    );\n\n  // Create compiled schema by replacing all non-recursive $ref links with\n  // thieir linked schemas and, where possible, combining schemas in allOf arrays.\n  let compiledSchema = { ...schema };\n  delete compiledSchema.definitions;\n  compiledSchema =\n    getSubSchema(compiledSchema, '', refLibrary, recursiveRefMap);\n\n  // Make sure all remaining schema $refs are recursive, and build final\n  // schemaRefLibrary, schemaRecursiveRefMap, dataRecursiveRefMap, & arrayMap\n  JsonPointer.forEachDeep(compiledSchema, (subSchema, subSchemaPointer) => {\n    if (isString(subSchema['$ref'])) {\n      let refPointer = JsonPointer.compile(subSchema['$ref']);\n      if (!JsonPointer.isSubPointer(refPointer, subSchemaPointer, true)) {\n        refPointer = removeRecursiveReferences(subSchemaPointer, recursiveRefMap);\n        JsonPointer.set(compiledSchema, subSchemaPointer, { $ref: `#${refPointer}` });\n      }\n      if (!hasOwn(schemaRefLibrary, 'refPointer')) {\n        schemaRefLibrary[refPointer] = !refPointer.length ? compiledSchema :\n          getSubSchema(compiledSchema, refPointer, schemaRefLibrary, recursiveRefMap);\n      }\n      if (!schemaRecursiveRefMap.has(subSchemaPointer)) {\n        schemaRecursiveRefMap.set(subSchemaPointer, refPointer);\n      }\n      const fromDataRef = JsonPointer.toDataPointer(subSchemaPointer, compiledSchema);\n      if (!dataRecursiveRefMap.has(fromDataRef)) {\n        const toDataRef = JsonPointer.toDataPointer(refPointer, compiledSchema);\n        dataRecursiveRefMap.set(fromDataRef, toDataRef);\n      }\n    }\n    if (subSchema.type === 'array' &&\n      (hasOwn(subSchema, 'items') || hasOwn(subSchema, 'additionalItems'))\n    ) {\n      const dataPointer = JsonPointer.toDataPointer(subSchemaPointer, compiledSchema);\n      if (!arrayMap.has(dataPointer)) {\n        const tupleItems = isArray(subSchema.items) ? subSchema.items.length : 0;\n        arrayMap.set(dataPointer, tupleItems);\n      }\n    }\n  }, true);\n  return compiledSchema;\n}\n\n/**\n * 'getSubSchema' function\n *\n * //   schema\n * //  { Pointer } pointer\n * //  { object } schemaRefLibrary\n * //  { Map<string, string> } schemaRecursiveRefMap\n * //  { string[] = [] } usedPointers\n * //\n */\nexport function getSubSchema(\n  schema, pointer, schemaRefLibrary = null,\n  schemaRecursiveRefMap: Map<string, string> = null, usedPointers: string[] = []\n) {\n  if (!schemaRefLibrary || !schemaRecursiveRefMap) {\n    return JsonPointer.getCopy(schema, pointer);\n  }\n  if (typeof pointer !== 'string') { pointer = JsonPointer.compile(pointer); }\n  usedPointers = [ ...usedPointers, pointer ];\n  let newSchema: any = null;\n  if (pointer === '') {\n    newSchema = cloneDeep(schema);\n  } else {\n    const shortPointer = removeRecursiveReferences(pointer, schemaRecursiveRefMap);\n    if (shortPointer !== pointer) { usedPointers = [ ...usedPointers, shortPointer ]; }\n    newSchema = JsonPointer.getFirstCopy([\n      [schemaRefLibrary, [shortPointer]],\n      [schema, pointer],\n      [schema, shortPointer]\n    ]);\n  }\n  return JsonPointer.forEachDeepCopy(newSchema, (subSchema, subPointer) => {\n    if (isObject(subSchema)) {\n\n      // Replace non-recursive $ref links with referenced schemas\n      if (isString(subSchema.$ref)) {\n        const refPointer = JsonPointer.compile(subSchema.$ref);\n        if (refPointer.length && usedPointers.every(ptr =>\n          !JsonPointer.isSubPointer(refPointer, ptr, true)\n        )) {\n          const refSchema = getSubSchema(\n            schema, refPointer, schemaRefLibrary, schemaRecursiveRefMap, usedPointers\n          );\n          if (Object.keys(subSchema).length === 1) {\n            return refSchema;\n          } else {\n            const extraKeys = { ...subSchema };\n            delete extraKeys.$ref;\n            return mergeSchemas(refSchema, extraKeys);\n          }\n        }\n      }\n\n      // TODO: Convert schemas with 'type' arrays to 'oneOf'\n\n      // Combine allOf subSchemas\n      if (isArray(subSchema.allOf)) { return combineAllOf(subSchema); }\n\n      // Fix incorrectly placed array object required lists\n      if (subSchema.type === 'array' && isArray(subSchema.required)) {\n        return fixRequiredArrayProperties(subSchema);\n      }\n    }\n    return subSchema;\n  }, true, <string>pointer);\n}\n\n/**\n * 'combineAllOf' function\n *\n * Attempt to convert an allOf schema object into\n * a non-allOf schema object with equivalent rules.\n *\n * //   schema - allOf schema object\n * //  - converted schema object\n */\nexport function combineAllOf(schema) {\n  if (!isObject(schema) || !isArray(schema.allOf)) { return schema; }\n  let mergedSchema = mergeSchemas(...schema.allOf);\n  if (Object.keys(schema).length > 1) {\n    const extraKeys = { ...schema };\n    delete extraKeys.allOf;\n    mergedSchema = mergeSchemas(mergedSchema, extraKeys);\n  }\n  return mergedSchema;\n}\n\n/**\n * 'fixRequiredArrayProperties' function\n *\n * Fixes an incorrectly placed required list inside an array schema, by moving\n * it into items.properties or additionalItems.properties, where it belongs.\n *\n * //   schema - allOf schema object\n * //  - converted schema object\n */\nexport function fixRequiredArrayProperties(schema) {\n  if (schema.type === 'array' && isArray(schema.required)) {\n    const itemsObject = hasOwn(schema.items, 'properties') ? 'items' :\n      hasOwn(schema.additionalItems, 'properties') ? 'additionalItems' : null;\n    if (itemsObject && !hasOwn(schema[itemsObject], 'required') && (\n      hasOwn(schema[itemsObject], 'additionalProperties') ||\n      schema.required.every(key => hasOwn(schema[itemsObject].properties, key))\n    )) {\n      schema = cloneDeep(schema);\n      schema[itemsObject].required = schema.required;\n      delete schema.required;\n    }\n  }\n  return schema;\n}\n","import cloneDeep from 'lodash/cloneDeep';\nimport filter from 'lodash/filter';\nimport map from 'lodash/map';\nimport {\n  AbstractControl,\n  UntypedFormArray,\n  UntypedFormControl,\n  UntypedFormGroup,\n  ValidatorFn\n} from '@angular/forms';\nimport { forEach, hasOwn } from './utility.functions';\nimport { getControlValidators, removeRecursiveReferences } from './json-schema.functions';\nimport {\n  hasValue,\n  inArray,\n  isArray,\n  isDate,\n  isDefined,\n  isEmpty,\n  isObject,\n  isPrimitive,\n  SchemaPrimitiveType,\n  toJavaScriptType,\n  toSchemaType\n} from './validator.functions';\nimport { JsonPointer, Pointer } from './jsonpointer.functions';\nimport { JsonValidators } from './json.validators';\n\n\n\n/**\n * FormGroup function library:\n *\n * buildFormGroupTemplate:  Builds a FormGroupTemplate from schema\n *\n * buildFormGroup:          Builds an Angular FormGroup from a FormGroupTemplate\n *\n * mergeValues:\n *\n * setRequiredFields:\n *\n * formatFormData:\n *\n * getControl:\n *\n * ---- TODO: ----\n * TODO: add buildFormGroupTemplateFromLayout function\n * buildFormGroupTemplateFromLayout: Builds a FormGroupTemplate from a form layout\n */\n\n/**\n * 'buildFormGroupTemplate' function\n *\n * Builds a template for an Angular FormGroup from a JSON Schema.\n *\n * TODO: add support for pattern properties\n * https://spacetelescope.github.io/understanding-json-schema/reference/object.html\n *\n * //  {any} jsf -\n * //  {any = null} nodeValue -\n * //  {boolean = true} mapArrays -\n * //  {string = ''} schemaPointer -\n * //  {string = ''} dataPointer -\n * //  {any = ''} templatePointer -\n * // {any} -\n */\nexport function buildFormGroupTemplate(\n  jsf: any, nodeValue: any = null, setValues = true,\n  schemaPointer = '', dataPointer = '', templatePointer = ''\n) {\n  const schema = JsonPointer.get(jsf.schema, schemaPointer);\n  if (setValues) {\n    if (!isDefined(nodeValue) && (\n      jsf.formOptions.setSchemaDefaults === true ||\n      (jsf.formOptions.setSchemaDefaults === 'auto' && isEmpty(jsf.formValues))\n    )) {\n      nodeValue = JsonPointer.get(jsf.schema, schemaPointer + '/default');\n    }\n  } else {\n    nodeValue = null;\n  }\n  // TODO: If nodeValue still not set, check layout for default value\n  const schemaType: string | string[] = JsonPointer.get(schema, '/type');\n  const controlType =\n    (hasOwn(schema, 'properties') || hasOwn(schema, 'additionalProperties')) &&\n      schemaType === 'object' ? 'FormGroup' :\n      (hasOwn(schema, 'items') || hasOwn(schema, 'additionalItems')) &&\n        schemaType === 'array' ? 'FormArray' :\n        !schemaType && hasOwn(schema, '$ref') ? '$ref' : 'FormControl';\n  const shortDataPointer =\n    removeRecursiveReferences(dataPointer, jsf.dataRecursiveRefMap, jsf.arrayMap);\n  if (!jsf.dataMap.has(shortDataPointer)) {\n    jsf.dataMap.set(shortDataPointer, new Map());\n  }\n  const nodeOptions = jsf.dataMap.get(shortDataPointer);\n  if (!nodeOptions.has('schemaType')) {\n    nodeOptions.set('schemaPointer', schemaPointer);\n    nodeOptions.set('schemaType', schema.type);\n    if (schema.format) {\n      nodeOptions.set('schemaFormat', schema.format);\n      if (!schema.type) { nodeOptions.set('schemaType', 'string'); }\n    }\n    if (controlType) {\n      nodeOptions.set('templatePointer', templatePointer);\n      nodeOptions.set('templateType', controlType);\n    }\n  }\n  let controls: any;\n  const validators = getControlValidators(schema);\n  switch (controlType) {\n\n    case 'FormGroup':\n      controls = {};\n      if (hasOwn(schema, 'ui:order') || hasOwn(schema, 'properties')) {\n        const propertyKeys = schema['ui:order'] || Object.keys(schema.properties);\n        if (propertyKeys.includes('*') && !hasOwn(schema.properties, '*')) {\n          const unnamedKeys = Object.keys(schema.properties)\n            .filter(key => !propertyKeys.includes(key));\n          for (let i = propertyKeys.length - 1; i >= 0; i--) {\n            if (propertyKeys[i] === '*') {\n              propertyKeys.splice(i, 1, ...unnamedKeys);\n            }\n          }\n        }\n        propertyKeys\n          .filter(key => hasOwn(schema.properties, key) ||\n            hasOwn(schema, 'additionalProperties')\n          )\n          .forEach(key => controls[key] = buildFormGroupTemplate(\n            jsf, JsonPointer.get(nodeValue, [<string>key]), setValues,\n            schemaPointer + (hasOwn(schema.properties, key) ?\n              '/properties/' + key : '/additionalProperties'\n            ),\n            dataPointer + '/' + key,\n            templatePointer + '/controls/' + key\n          ));\n        jsf.formOptions.fieldsRequired = setRequiredFields(schema, controls);\n      }\n      return { controlType, controls, validators };\n\n    case 'FormArray':\n      controls = [];\n      const minItems =\n        Math.max(schema.minItems || 0, nodeOptions.get('minItems') || 0);\n      const maxItems =\n        Math.min(schema.maxItems || 1000, nodeOptions.get('maxItems') || 1000);\n      let additionalItemsPointer: string = null;\n      if (isArray(schema.items)) { // 'items' is an array = tuple items\n        const tupleItems = nodeOptions.get('tupleItems') ||\n          (isArray(schema.items) ? Math.min(schema.items.length, maxItems) : 0);\n        for (let i = 0; i < tupleItems; i++) {\n          if (i < minItems) {\n            controls.push(buildFormGroupTemplate(\n              jsf, isArray(nodeValue) ? nodeValue[i] : nodeValue, setValues,\n              schemaPointer + '/items/' + i,\n              dataPointer + '/' + i,\n              templatePointer + '/controls/' + i\n            ));\n          } else {\n            const schemaRefPointer = removeRecursiveReferences(\n              schemaPointer + '/items/' + i, jsf.schemaRecursiveRefMap\n            );\n            const itemRefPointer = removeRecursiveReferences(\n              shortDataPointer + '/' + i, jsf.dataRecursiveRefMap, jsf.arrayMap\n            );\n            const itemRecursive = itemRefPointer !== shortDataPointer + '/' + i;\n            if (!hasOwn(jsf.templateRefLibrary, itemRefPointer)) {\n              jsf.templateRefLibrary[itemRefPointer] = null;\n              jsf.templateRefLibrary[itemRefPointer] = buildFormGroupTemplate(\n                jsf, null, setValues,\n                schemaRefPointer,\n                itemRefPointer,\n                templatePointer + '/controls/' + i\n              );\n            }\n            controls.push(\n              isArray(nodeValue) ?\n                buildFormGroupTemplate(\n                  jsf, nodeValue[i], setValues,\n                  schemaPointer + '/items/' + i,\n                  dataPointer + '/' + i,\n                  templatePointer + '/controls/' + i\n                ) :\n                itemRecursive ?\n                  null : cloneDeep(jsf.templateRefLibrary[itemRefPointer])\n            );\n          }\n        }\n\n        // If 'additionalItems' is an object = additional list items (after tuple items)\n        if (schema.items.length < maxItems && isObject(schema.additionalItems)) {\n          additionalItemsPointer = schemaPointer + '/additionalItems';\n        }\n\n        // If 'items' is an object = list items only (no tuple items)\n      } else {\n        additionalItemsPointer = schemaPointer + '/items';\n      }\n\n      if (additionalItemsPointer) {\n        const schemaRefPointer = removeRecursiveReferences(\n          additionalItemsPointer, jsf.schemaRecursiveRefMap\n        );\n        const itemRefPointer = removeRecursiveReferences(\n          shortDataPointer + '/-', jsf.dataRecursiveRefMap, jsf.arrayMap\n        );\n        const itemRecursive = itemRefPointer !== shortDataPointer + '/-';\n        if (!hasOwn(jsf.templateRefLibrary, itemRefPointer)) {\n          jsf.templateRefLibrary[itemRefPointer] = null;\n          jsf.templateRefLibrary[itemRefPointer] = buildFormGroupTemplate(\n            jsf, null, setValues,\n            schemaRefPointer,\n            itemRefPointer,\n            templatePointer + '/controls/-'\n          );\n        }\n        // const itemOptions = jsf.dataMap.get(itemRefPointer) || new Map();\n        const itemOptions = nodeOptions;\n        if (!itemRecursive || hasOwn(validators, 'required')) {\n          const arrayLength = Math.min(Math.max(\n            itemRecursive ? 0 :\n              (itemOptions.get('tupleItems') + itemOptions.get('listItems')) || 0,\n            isArray(nodeValue) ? nodeValue.length : 0\n          ), maxItems);\n          for (let i = controls.length; i < arrayLength; i++) {\n            controls.push(\n              isArray(nodeValue) ?\n                buildFormGroupTemplate(\n                  jsf, nodeValue[i], setValues,\n                  schemaRefPointer,\n                  dataPointer + '/-',\n                  templatePointer + '/controls/-'\n                ) :\n                itemRecursive ?\n                  null : cloneDeep(jsf.templateRefLibrary[itemRefPointer])\n            );\n          }\n        }\n      }\n      return { controlType, controls, validators };\n\n    case '$ref':\n      const schemaRef = JsonPointer.compile(schema.$ref);\n      const dataRef = JsonPointer.toDataPointer(schemaRef, schema);\n      const refPointer = removeRecursiveReferences(\n        dataRef, jsf.dataRecursiveRefMap, jsf.arrayMap\n      );\n      if (refPointer && !hasOwn(jsf.templateRefLibrary, refPointer)) {\n        // Set to null first to prevent recursive reference from causing endless loop\n        jsf.templateRefLibrary[refPointer] = null;\n        const newTemplate = buildFormGroupTemplate(jsf, setValues, setValues, schemaRef);\n        if (newTemplate) {\n          jsf.templateRefLibrary[refPointer] = newTemplate;\n        } else {\n          delete jsf.templateRefLibrary[refPointer];\n        }\n      }\n      return null;\n\n    case 'FormControl':\n      const value = {\n        value: setValues && isPrimitive(nodeValue) ? nodeValue : null,\n        disabled: nodeOptions.get('disabled') || false\n      };\n      return { controlType, value, validators };\n\n    default:\n      return null;\n  }\n}\n\n/**\n * 'buildFormGroup' function\n *\n * // {any} template -\n * // {AbstractControl}\n*/\nexport function buildFormGroup(template: any): AbstractControl {\n  const validatorFns: ValidatorFn[] = [];\n  let validatorFn: ValidatorFn = null;\n  if (hasOwn(template, 'validators')) {\n    forEach(template.validators, (parameters, validator) => {\n      if (typeof JsonValidators[validator] === 'function') {\n        validatorFns.push(JsonValidators[validator].apply(null, parameters));\n      }\n    });\n    if (validatorFns.length &&\n      inArray(template.controlType, ['FormGroup', 'FormArray'])\n    ) {\n      validatorFn = validatorFns.length > 1 ?\n        JsonValidators.compose(validatorFns) : validatorFns[0];\n    }\n  }\n  if (hasOwn(template, 'controlType')) {\n    switch (template.controlType) {\n      case 'FormGroup':\n        const groupControls: { [key: string]: AbstractControl } = {};\n        forEach(template.controls, (controls, key) => {\n          const newControl: AbstractControl = buildFormGroup(controls);\n          if (newControl) { groupControls[key] = newControl; }\n        });\n        return new UntypedFormGroup(groupControls, validatorFn);\n      case 'FormArray':\n        return new UntypedFormArray(filter(map(template.controls,\n          controls => buildFormGroup(controls)\n        )), validatorFn);\n      case 'FormControl':\n        return new UntypedFormControl(template.value, validatorFns);\n    }\n  }\n  return null;\n}\n\n/**\n * 'mergeValues' function\n *\n * //  {any[]} ...valuesToMerge - Multiple values to merge\n * // {any} - Merged values\n */\nexport function mergeValues(...valuesToMerge) {\n  let mergedValues: any = null;\n  for (const currentValue of valuesToMerge) {\n    if (!isEmpty(currentValue)) {\n      if (typeof currentValue === 'object' &&\n        (isEmpty(mergedValues) || typeof mergedValues !== 'object')\n      ) {\n        if (isArray(currentValue)) {\n          mergedValues = [...currentValue];\n        } else if (isObject(currentValue)) {\n          mergedValues = { ...currentValue };\n        }\n      } else if (typeof currentValue !== 'object') {\n        mergedValues = currentValue;\n      } else if (isObject(mergedValues) && isObject(currentValue)) {\n        Object.assign(mergedValues, currentValue);\n      } else if (isObject(mergedValues) && isArray(currentValue)) {\n        const newValues = [];\n        for (const value of currentValue) {\n          newValues.push(mergeValues(mergedValues, value));\n        }\n        mergedValues = newValues;\n      } else if (isArray(mergedValues) && isObject(currentValue)) {\n        const newValues = [];\n        for (const value of mergedValues) {\n          newValues.push(mergeValues(value, currentValue));\n        }\n        mergedValues = newValues;\n      } else if (isArray(mergedValues) && isArray(currentValue)) {\n        const newValues = [];\n        for (let i = 0; i < Math.max(mergedValues.length, currentValue.length); i++) {\n          if (i < mergedValues.length && i < currentValue.length) {\n            newValues.push(mergeValues(mergedValues[i], currentValue[i]));\n          } else if (i < mergedValues.length) {\n            newValues.push(mergedValues[i]);\n          } else if (i < currentValue.length) {\n            newValues.push(currentValue[i]);\n          }\n        }\n        mergedValues = newValues;\n      }\n    }\n  }\n  return mergedValues;\n}\n\n/**\n * 'setRequiredFields' function\n *\n * // {schema} schema - JSON Schema\n * // {object} formControlTemplate - Form Control Template object\n * // {boolean} - true if any fields have been set to required, false if not\n */\nexport function setRequiredFields(schema: any, formControlTemplate: any): boolean {\n  let fieldsRequired = false;\n  if (hasOwn(schema, 'required') && !isEmpty(schema.required)) {\n    fieldsRequired = true;\n    let requiredArray = isArray(schema.required) ? schema.required : [schema.required];\n    requiredArray = forEach(requiredArray,\n      key => JsonPointer.set(formControlTemplate, '/' + key + '/validators/required', [])\n    );\n  }\n  return fieldsRequired;\n\n  // TODO: Add support for patternProperties\n  // https://spacetelescope.github.io/understanding-json-schema/reference/object.html#pattern-properties\n}\n\n/**\n * 'formatFormData' function\n *\n * // {any} formData - Angular FormGroup data object\n * // {Map<string, any>} dataMap -\n * // {Map<string, string>} recursiveRefMap -\n * // {Map<string, number>} arrayMap -\n * // {boolean = false} fixErrors - if TRUE, tries to fix data\n * // {any} - formatted data object\n */\nexport function formatFormData(\n  formData: any, dataMap: Map<string, any>,\n  recursiveRefMap: Map<string, string>, arrayMap: Map<string, number>,\n  returnEmptyFields = false, fixErrors = false\n): any {\n  if (formData === null || typeof formData !== 'object') { return formData; }\n  const formattedData = isArray(formData) ? [] : {};\n  JsonPointer.forEachDeep(formData, (value, dataPointer) => {\n\n    // If returnEmptyFields === true,\n    // add empty arrays and objects to all allowed keys\n    if (returnEmptyFields && isArray(value)) {\n      JsonPointer.set(formattedData, dataPointer, []);\n    } else if (returnEmptyFields && isObject(value) && !isDate(value)) {\n      JsonPointer.set(formattedData, dataPointer, {});\n    } else {\n      const genericPointer =\n        JsonPointer.has(dataMap, [dataPointer, 'schemaType']) ? dataPointer :\n          removeRecursiveReferences(dataPointer, recursiveRefMap, arrayMap);\n      if (JsonPointer.has(dataMap, [genericPointer, 'schemaType'])) {\n        const schemaType: SchemaPrimitiveType | SchemaPrimitiveType[] =\n          dataMap.get(genericPointer).get('schemaType');\n        if (schemaType === 'null') {\n          JsonPointer.set(formattedData, dataPointer, null);\n        } else if ((hasValue(value) || returnEmptyFields) &&\n          inArray(schemaType, ['string', 'integer', 'number', 'boolean'])\n        ) {\n          const newValue = (fixErrors || (value === null && returnEmptyFields)) ?\n            toSchemaType(value, schemaType) : toJavaScriptType(value, schemaType);\n          if (isDefined(newValue) || returnEmptyFields) {\n            JsonPointer.set(formattedData, dataPointer, newValue);\n          }\n        }\n\n        // Finish incomplete 'date-time' entries\n        if (dataMap.get(genericPointer).get('schemaFormat') === 'date-time') {\n          // \"2000-03-14T01:59:26.535\" -> \"2000-03-14T01:59:26.535Z\" (add \"Z\")\n          if (/^\\d\\d\\d\\d-[0-1]\\d-[0-3]\\d[t\\s][0-2]\\d:[0-5]\\d:[0-5]\\d(?:\\.\\d+)?$/i.test(value)) {\n            JsonPointer.set(formattedData, dataPointer, `${value}Z`);\n            // \"2000-03-14T01:59\" -> \"2000-03-14T01:59:00Z\" (add \":00Z\")\n          } else if (/^\\d\\d\\d\\d-[0-1]\\d-[0-3]\\d[t\\s][0-2]\\d:[0-5]\\d$/i.test(value)) {\n            JsonPointer.set(formattedData, dataPointer, `${value}:00Z`);\n            // \"2000-03-14\" -> \"2000-03-14T00:00:00Z\" (add \"T00:00:00Z\")\n          } else if (fixErrors && /^\\d\\d\\d\\d-[0-1]\\d-[0-3]\\d$/i.test(value)) {\n            JsonPointer.set(formattedData, dataPointer, `${value}:00:00:00Z`);\n          }\n        }\n      } else if (typeof value !== 'object' || isDate(value) ||\n        (value === null && returnEmptyFields)\n      ) {\n        console.error('formatFormData error: ' +\n          `Schema type not found for form value at ${genericPointer}`);\n        console.error('dataMap', dataMap);\n        console.error('recursiveRefMap', recursiveRefMap);\n        console.error('genericPointer', genericPointer);\n      }\n    }\n  });\n  return formattedData;\n}\n\n/**\n * 'getControl' function\n *\n * Uses a JSON Pointer for a data object to retrieve a control from\n * an Angular formGroup or formGroup template. (Note: though a formGroup\n * template is much simpler, its basic structure is idential to a formGroup).\n *\n * If the optional third parameter 'returnGroup' is set to TRUE, the group\n * containing the control is returned, rather than the control itself.\n *\n * // {FormGroup} formGroup - Angular FormGroup to get value from\n * // {Pointer} dataPointer - JSON Pointer (string or array)\n * // {boolean = false} returnGroup - If true, return group containing control\n * // {group} - Located value (or null, if no control found)\n */\nexport function getControl(\n  formGroup: any, dataPointer: Pointer, returnGroup = false\n): any {\n  if (!isObject(formGroup) || !JsonPointer.isJsonPointer(dataPointer)) {\n    if (!JsonPointer.isJsonPointer(dataPointer)) {\n      // If dataPointer input is not a valid JSON pointer, check to\n      // see if it is instead a valid object path, using dot notaion\n      if (typeof dataPointer === 'string') {\n        const formControl = formGroup.get(dataPointer);\n        if (formControl) { return formControl; }\n      }\n      console.error(`getControl error: Invalid JSON Pointer: ${dataPointer}`);\n    }\n    if (!isObject(formGroup)) {\n      console.error(`getControl error: Invalid formGroup: ${formGroup}`);\n    }\n    return null;\n  }\n  let dataPointerArray = JsonPointer.parse(dataPointer);\n  if (returnGroup) { dataPointerArray = dataPointerArray.slice(0, -1); }\n\n  // If formGroup input is a real formGroup (not a formGroup template)\n  // try using formGroup.get() to return the control\n  if (typeof formGroup.get === 'function' &&\n    dataPointerArray.every(key => key.indexOf('.') === -1)\n  ) {\n    const formControl = formGroup.get(dataPointerArray.join('.'));\n    if (formControl) { return formControl; }\n  }\n\n  // If formGroup input is a formGroup template,\n  // or formGroup.get() failed to return the control,\n  // search the formGroup object for dataPointer's control\n  let subGroup = formGroup;\n  for (const key of dataPointerArray) {\n    if (hasOwn(subGroup, 'controls')) { subGroup = subGroup.controls; }\n    if (isArray(subGroup) && (key === '-')) {\n      subGroup = subGroup[subGroup.length - 1];\n    } else if (hasOwn(subGroup, key)) {\n      subGroup = subGroup[key];\n    } else {\n      console.error(`getControl error: Unable to find \"${key}\" item in FormGroup.`);\n      console.error(dataPointer);\n      console.error(formGroup);\n      return;\n    }\n  }\n  return subGroup;\n}\n","import uniqueId from 'lodash/uniqueId';\nimport cloneDeep from 'lodash/cloneDeep';\nimport {\n  checkInlineType,\n  getFromSchema,\n  getInputType,\n  isInputRequired,\n  removeRecursiveReferences,\n  updateInputOptions\n  } from './json-schema.functions';\nimport {\n  copy,\n  fixTitle,\n  forEach,\n  hasOwn\n  } from './utility.functions';\nimport {\n  inArray,\n  isArray,\n  isDefined,\n  isEmpty,\n  isNumber,\n  isObject,\n  isString\n  } from './validator.functions';\nimport { JsonPointer } from './jsonpointer.functions';\nimport { TitleMapItem } from '../json-schema-form.service';\n\n\n\n/**\n * Layout function library:\n *\n * buildLayout:            Builds a complete layout from an input layout and schema\n *\n * buildLayoutFromSchema:  Builds a complete layout entirely from an input schema\n *\n * mapLayout:\n *\n * getLayoutNode:\n *\n * buildTitleMap:\n */\n\n/**\n * 'buildLayout' function\n *\n * //   jsf\n * //   widgetLibrary\n * //\n */\nexport function buildLayout(jsf, widgetLibrary) {\n  let hasSubmitButton = !JsonPointer.get(jsf, '/formOptions/addSubmit');\n  const formLayout = mapLayout(jsf.layout, (layoutItem, index, layoutPointer) => {\n    const newNode: any = {\n      _id: uniqueId(),\n      options: {},\n    };\n    if (isObject(layoutItem)) {\n      Object.assign(newNode, layoutItem);\n      Object.keys(newNode)\n        .filter(option => !inArray(option, [\n          '_id', '$ref', 'arrayItem', 'arrayItemType', 'dataPointer', 'dataType',\n          'items', 'key', 'name', 'options', 'recursiveReference', 'type', 'widget'\n        ]))\n        .forEach(option => {\n          newNode.options[option] = newNode[option];\n          delete newNode[option];\n        });\n      if (!hasOwn(newNode, 'type') && isString(newNode.widget)) {\n        newNode.type = newNode.widget;\n        delete newNode.widget;\n      }\n      if (!hasOwn(newNode.options, 'title')) {\n        if (hasOwn(newNode.options, 'legend')) {\n          newNode.options.title = newNode.options.legend;\n          delete newNode.options.legend;\n        }\n      }\n      if (!hasOwn(newNode.options, 'validationMessages')) {\n        if (hasOwn(newNode.options, 'errorMessages')) {\n          newNode.options.validationMessages = newNode.options.errorMessages;\n          delete newNode.options.errorMessages;\n\n          // Convert Angular Schema Form (AngularJS) 'validationMessage' to\n          // Angular JSON Schema Form 'validationMessages'\n          // TV4 codes from https://github.com/geraintluff/tv4/blob/master/source/api.js\n        } else if (hasOwn(newNode.options, 'validationMessage')) {\n          if (typeof newNode.options.validationMessage === 'string') {\n            newNode.options.validationMessages = newNode.options.validationMessage;\n          } else {\n            newNode.options.validationMessages = {};\n            Object.keys(newNode.options.validationMessage).forEach(key => {\n              const code = key + '';\n              const newKey =\n                code === '0' ? 'type' :\n                  code === '1' ? 'enum' :\n                    code === '100' ? 'multipleOf' :\n                      code === '101' ? 'minimum' :\n                        code === '102' ? 'exclusiveMinimum' :\n                          code === '103' ? 'maximum' :\n                            code === '104' ? 'exclusiveMaximum' :\n                              code === '200' ? 'minLength' :\n                                code === '201' ? 'maxLength' :\n                                  code === '202' ? 'pattern' :\n                                    code === '300' ? 'minProperties' :\n                                      code === '301' ? 'maxProperties' :\n                                        code === '302' ? 'required' :\n                                          code === '304' ? 'dependencies' :\n                                            code === '400' ? 'minItems' :\n                                              code === '401' ? 'maxItems' :\n                                                code === '402' ? 'uniqueItems' :\n                                                  code === '500' ? 'format' : code + '';\n              newNode.options.validationMessages[newKey] = newNode.options.validationMessage[key];\n            });\n          }\n          delete newNode.options.validationMessage;\n        }\n      }\n    } else if (JsonPointer.isJsonPointer(layoutItem)) {\n      newNode.dataPointer = layoutItem;\n    } else if (isString(layoutItem)) {\n      newNode.key = layoutItem;\n    } else {\n      console.error('buildLayout error: Form layout element not recognized:');\n      console.error(layoutItem);\n      return null;\n    }\n    let nodeSchema: any = null;\n\n    // If newNode does not have a dataPointer, try to find an equivalent\n    if (!hasOwn(newNode, 'dataPointer')) {\n\n      // If newNode has a key, change it to a dataPointer\n      if (hasOwn(newNode, 'key')) {\n        newNode.dataPointer = newNode.key === '*' ? newNode.key :\n          JsonPointer.compile(JsonPointer.parseObjectPath(newNode.key), '-');\n        delete newNode.key;\n\n        // If newNode is an array, search for dataPointer in child nodes\n      } else if (hasOwn(newNode, 'type') && newNode.type.slice(-5) === 'array') {\n        const findDataPointer = (items) => {\n          if (items === null || typeof items !== 'object') { return; }\n          if (hasOwn(items, 'dataPointer')) { return items.dataPointer; }\n          if (isArray(items.items)) {\n            for (const item of items.items) {\n              if (hasOwn(item, 'dataPointer') && item.dataPointer.indexOf('/-') !== -1) {\n                return item.dataPointer;\n              }\n              if (hasOwn(item, 'items')) {\n                const searchItem = findDataPointer(item);\n                if (searchItem) { return searchItem; }\n              }\n            }\n          }\n        };\n        const childDataPointer = findDataPointer(newNode);\n        if (childDataPointer) {\n          newNode.dataPointer =\n            childDataPointer.slice(0, childDataPointer.lastIndexOf('/-'));\n        }\n      }\n    }\n\n    if (hasOwn(newNode, 'dataPointer')) {\n      if (newNode.dataPointer === '*') {\n        return buildLayoutFromSchema(jsf, widgetLibrary, jsf.formValues);\n      }\n      const nodeValue =\n        JsonPointer.get(jsf.formValues, newNode.dataPointer.replace(/\\/-/g, '/1'));\n\n      // TODO: Create function getFormValues(jsf, dataPointer, forRefLibrary)\n      // check formOptions.setSchemaDefaults and formOptions.setLayoutDefaults\n      // then set apropriate values from initialVaues, schema, or layout\n\n      newNode.dataPointer =\n        JsonPointer.toGenericPointer(newNode.dataPointer, jsf.arrayMap);\n      const LastKey = JsonPointer.toKey(newNode.dataPointer);\n      if (!newNode.name && isString(LastKey) && LastKey !== '-') {\n        newNode.name = LastKey;\n      }\n      const shortDataPointer = removeRecursiveReferences(\n        newNode.dataPointer, jsf.dataRecursiveRefMap, jsf.arrayMap\n      );\n      const recursive = !shortDataPointer.length ||\n        shortDataPointer !== newNode.dataPointer;\n      let schemaPointer: string;\n      if (!jsf.dataMap.has(shortDataPointer)) {\n        jsf.dataMap.set(shortDataPointer, new Map());\n      }\n      const nodeDataMap = jsf.dataMap.get(shortDataPointer);\n      if (nodeDataMap.has('schemaPointer')) {\n        schemaPointer = nodeDataMap.get('schemaPointer');\n      } else {\n        schemaPointer = JsonPointer.toSchemaPointer(shortDataPointer, jsf.schema);\n        nodeDataMap.set('schemaPointer', schemaPointer);\n      }\n      nodeDataMap.set('disabled', !!newNode.options.disabled);\n      nodeSchema = JsonPointer.get(jsf.schema, schemaPointer);\n      if (nodeSchema) {\n        if (!hasOwn(newNode, 'type')) {\n          newNode.type = getInputType(nodeSchema, newNode);\n        } else if (!widgetLibrary.hasWidget(newNode.type)) {\n          const oldWidgetType = newNode.type;\n          newNode.type = getInputType(nodeSchema, newNode);\n          console.error(`error: widget type \"${oldWidgetType}\" ` +\n            `not found in library. Replacing with \"${newNode.type}\".`);\n        } else {\n          newNode.type = checkInlineType(newNode.type, nodeSchema, newNode);\n        }\n        if (nodeSchema.type === 'object' && isArray(nodeSchema.required)) {\n          nodeDataMap.set('required', nodeSchema.required);\n        }\n        newNode.dataType =\n          nodeSchema.type || (hasOwn(nodeSchema, '$ref') ? '$ref' : null);\n        updateInputOptions(newNode, nodeSchema, jsf);\n\n        // Present checkboxes as single control, rather than array\n        if (newNode.type === 'checkboxes' && hasOwn(nodeSchema, 'items')) {\n          updateInputOptions(newNode, nodeSchema.items, jsf);\n        } else if (newNode.dataType === 'array') {\n          newNode.options.maxItems = Math.min(\n            nodeSchema.maxItems || 1000, newNode.options.maxItems || 1000\n          );\n          newNode.options.minItems = Math.max(\n            nodeSchema.minItems || 0, newNode.options.minItems || 0\n          );\n          newNode.options.listItems = Math.max(\n            newNode.options.listItems || 0, isArray(nodeValue) ? nodeValue.length : 0\n          );\n          newNode.options.tupleItems =\n            isArray(nodeSchema.items) ? nodeSchema.items.length : 0;\n          if (newNode.options.maxItems < newNode.options.tupleItems) {\n            newNode.options.tupleItems = newNode.options.maxItems;\n            newNode.options.listItems = 0;\n          } else if (newNode.options.maxItems <\n            newNode.options.tupleItems + newNode.options.listItems\n          ) {\n            newNode.options.listItems =\n              newNode.options.maxItems - newNode.options.tupleItems;\n          } else if (newNode.options.minItems >\n            newNode.options.tupleItems + newNode.options.listItems\n          ) {\n            newNode.options.listItems =\n              newNode.options.minItems - newNode.options.tupleItems;\n          }\n          if (!nodeDataMap.has('maxItems')) {\n            nodeDataMap.set('maxItems', newNode.options.maxItems);\n            nodeDataMap.set('minItems', newNode.options.minItems);\n            nodeDataMap.set('tupleItems', newNode.options.tupleItems);\n            nodeDataMap.set('listItems', newNode.options.listItems);\n          }\n          if (!jsf.arrayMap.has(shortDataPointer)) {\n            jsf.arrayMap.set(shortDataPointer, newNode.options.tupleItems);\n          }\n        }\n        if (isInputRequired(jsf.schema, schemaPointer)) {\n          newNode.options.required = true;\n          jsf.fieldsRequired = true;\n        }\n      } else {\n        // TODO: create item in FormGroup model from layout key (?)\n        updateInputOptions(newNode, {}, jsf);\n      }\n\n      if (!newNode.options.title && !/^\\d+$/.test(newNode.name)) {\n        newNode.options.title = fixTitle(newNode.name);\n      }\n\n      if (hasOwn(newNode.options, 'copyValueTo')) {\n        if (typeof newNode.options.copyValueTo === 'string') {\n          newNode.options.copyValueTo = [newNode.options.copyValueTo];\n        }\n        if (isArray(newNode.options.copyValueTo)) {\n          newNode.options.copyValueTo = newNode.options.copyValueTo.map(item =>\n            JsonPointer.compile(JsonPointer.parseObjectPath(item), '-')\n          );\n        }\n      }\n\n      newNode.widget = widgetLibrary.getWidget(newNode.type);\n      nodeDataMap.set('inputType', newNode.type);\n      nodeDataMap.set('widget', newNode.widget);\n\n      if (newNode.dataType === 'array' &&\n        (hasOwn(newNode, 'items') || hasOwn(newNode, 'additionalItems'))\n      ) {\n        const itemRefPointer = removeRecursiveReferences(\n          newNode.dataPointer + '/-', jsf.dataRecursiveRefMap, jsf.arrayMap\n        );\n        if (!jsf.dataMap.has(itemRefPointer)) {\n          jsf.dataMap.set(itemRefPointer, new Map());\n        }\n        jsf.dataMap.get(itemRefPointer).set('inputType', 'section');\n\n        // Fix insufficiently nested array item groups\n        if (newNode.items.length > 1) {\n          const arrayItemGroup = [];\n          for (let i = newNode.items.length - 1; i >= 0; i--) {\n            const subItem = newNode.items[i];\n            if (hasOwn(subItem, 'dataPointer') &&\n              subItem.dataPointer.slice(0, itemRefPointer.length) === itemRefPointer\n            ) {\n              const arrayItem = newNode.items.splice(i, 1)[0];\n              arrayItem.dataPointer = newNode.dataPointer + '/-' +\n                arrayItem.dataPointer.slice(itemRefPointer.length);\n              arrayItemGroup.unshift(arrayItem);\n            } else {\n              subItem.arrayItem = true;\n              // TODO: Check schema to get arrayItemType and removable\n              subItem.arrayItemType = 'list';\n              subItem.removable = newNode.options.removable !== false;\n            }\n          }\n          if (arrayItemGroup.length) {\n            newNode.items.push({\n              _id: uniqueId(),\n              arrayItem: true,\n              arrayItemType: newNode.options.tupleItems > newNode.items.length ?\n                'tuple' : 'list',\n              items: arrayItemGroup,\n              options: { removable: newNode.options.removable !== false, },\n              dataPointer: newNode.dataPointer + '/-',\n              type: 'section',\n              widget: widgetLibrary.getWidget('section'),\n            });\n          }\n        } else {\n          // TODO: Fix to hndle multiple items\n          newNode.items[0].arrayItem = true;\n          if (!newNode.items[0].dataPointer) {\n            newNode.items[0].dataPointer =\n              JsonPointer.toGenericPointer(itemRefPointer, jsf.arrayMap);\n          }\n          if (!JsonPointer.has(newNode, '/items/0/options/removable')) {\n            newNode.items[0].options.removable = true;\n          }\n          if (newNode.options.orderable === false) {\n            newNode.items[0].options.orderable = false;\n          }\n          newNode.items[0].arrayItemType =\n            newNode.options.tupleItems ? 'tuple' : 'list';\n        }\n\n        if (isArray(newNode.items)) {\n          const arrayListItems =\n            newNode.items.filter(item => item.type !== '$ref').length -\n            newNode.options.tupleItems;\n          if (arrayListItems > newNode.options.listItems) {\n            newNode.options.listItems = arrayListItems;\n            nodeDataMap.set('listItems', arrayListItems);\n          }\n        }\n\n        if (!hasOwn(jsf.layoutRefLibrary, itemRefPointer)) {\n          jsf.layoutRefLibrary[itemRefPointer] =\n            cloneDeep(newNode.items[newNode.items.length - 1]);\n          if (recursive) {\n            jsf.layoutRefLibrary[itemRefPointer].recursiveReference = true;\n          }\n          forEach(jsf.layoutRefLibrary[itemRefPointer], (item, key) => {\n            if (hasOwn(item, '_id')) { item._id = null; }\n            if (recursive) {\n              if (hasOwn(item, 'dataPointer')) {\n                item.dataPointer = item.dataPointer.slice(itemRefPointer.length);\n              }\n            }\n          }, 'top-down');\n        }\n\n        // Add any additional default items\n        if (!newNode.recursiveReference || newNode.options.required) {\n          const arrayLength = Math.min(Math.max(\n            newNode.options.tupleItems + newNode.options.listItems,\n            isArray(nodeValue) ? nodeValue.length : 0\n          ), newNode.options.maxItems);\n          for (let i = newNode.items.length; i < arrayLength; i++) {\n            newNode.items.push(getLayoutNode({\n              $ref: itemRefPointer,\n              dataPointer: newNode.dataPointer,\n              recursiveReference: newNode.recursiveReference,\n            }, jsf, widgetLibrary));\n          }\n        }\n\n        // If needed, add button to add items to array\n        if (newNode.options.addable !== false &&\n          newNode.options.minItems < newNode.options.maxItems &&\n          (newNode.items[newNode.items.length - 1] || {}).type !== '$ref'\n        ) {\n          let buttonText = 'Add';\n          if (newNode.options.title) {\n            if (/^add\\b/i.test(newNode.options.title)) {\n              buttonText = newNode.options.title;\n            } else {\n              buttonText += ' ' + newNode.options.title;\n            }\n          } else if (newNode.name && !/^\\d+$/.test(newNode.name)) {\n            if (/^add\\b/i.test(newNode.name)) {\n              buttonText += ' ' + fixTitle(newNode.name);\n            } else {\n              buttonText = fixTitle(newNode.name);\n            }\n\n            // If newNode doesn't have a title, look for title of parent array item\n          } else {\n            const parentSchema =\n              getFromSchema(jsf.schema, newNode.dataPointer, 'parentSchema');\n            if (hasOwn(parentSchema, 'title')) {\n              buttonText += ' to ' + parentSchema.title;\n            } else {\n              const pointerArray = JsonPointer.parse(newNode.dataPointer);\n              buttonText += ' to ' + fixTitle(pointerArray[pointerArray.length - 2]);\n            }\n          }\n          newNode.items.push({\n            _id: uniqueId(),\n            arrayItem: true,\n            arrayItemType: 'list',\n            dataPointer: newNode.dataPointer + '/-',\n            options: {\n              listItems: newNode.options.listItems,\n              maxItems: newNode.options.maxItems,\n              minItems: newNode.options.minItems,\n              removable: false,\n              title: buttonText,\n              tupleItems: newNode.options.tupleItems,\n            },\n            recursiveReference: recursive,\n            type: '$ref',\n            widget: widgetLibrary.getWidget('$ref'),\n            $ref: itemRefPointer,\n          });\n          if (isString(JsonPointer.get(newNode, '/style/add'))) {\n            newNode.items[newNode.items.length - 1].options.fieldStyle =\n              newNode.style.add;\n            delete newNode.style.add;\n            if (isEmpty(newNode.style)) { delete newNode.style; }\n          }\n        }\n      } else {\n        newNode.arrayItem = false;\n      }\n    } else if (hasOwn(newNode, 'type') || hasOwn(newNode, 'items')) {\n      const parentType: string =\n        JsonPointer.get(jsf.layout, layoutPointer, 0, -2).type;\n      if (!hasOwn(newNode, 'type')) {\n        newNode.type =\n          inArray(parentType, ['tabs', 'tabarray']) ? 'tab' : 'array';\n      }\n      newNode.arrayItem = parentType === 'array';\n      newNode.widget = widgetLibrary.getWidget(newNode.type);\n      updateInputOptions(newNode, {}, jsf);\n    }\n    if (newNode.type === 'submit') { hasSubmitButton = true; }\n    return newNode;\n  });\n  if (jsf.hasRootReference) {\n    const fullLayout = cloneDeep(formLayout);\n    if (fullLayout[fullLayout.length - 1].type === 'submit') { fullLayout.pop(); }\n    jsf.layoutRefLibrary[''] = {\n      _id: null,\n      dataPointer: '',\n      dataType: 'object',\n      items: fullLayout,\n      name: '',\n      options: cloneDeep(jsf.formOptions.defautWidgetOptions),\n      recursiveReference: true,\n      required: false,\n      type: 'section',\n      widget: widgetLibrary.getWidget('section'),\n    };\n  }\n  if (!hasSubmitButton) {\n    formLayout.push({\n      _id: uniqueId(),\n      options: { title: 'Submit' },\n      type: 'submit',\n      widget: widgetLibrary.getWidget('submit'),\n    });\n  }\n  return formLayout;\n}\n\n/**\n * 'buildLayoutFromSchema' function\n *\n * //   jsf -\n * //   widgetLibrary -\n * //   nodeValue -\n * //  { string = '' } schemaPointer -\n * //  { string = '' } dataPointer -\n * //  { boolean = false } arrayItem -\n * //  { string = null } arrayItemType -\n * //  { boolean = null } removable -\n * //  { boolean = false } forRefLibrary -\n * //  { string = '' } dataPointerPrefix -\n * //\n */\nexport function buildLayoutFromSchema(\n  jsf, widgetLibrary, nodeValue = null, schemaPointer = '',\n  dataPointer = '', arrayItem = false, arrayItemType: string = null,\n  removable: boolean = null, forRefLibrary = false, dataPointerPrefix = ''\n) {\n  const schema = JsonPointer.get(jsf.schema, schemaPointer);\n  if (!hasOwn(schema, 'type') && !hasOwn(schema, '$ref') &&\n    !hasOwn(schema, 'x-schema-form')\n  ) { return null; }\n  const newNodeType: string = getInputType(schema);\n  if (!isDefined(nodeValue) && (\n    jsf.formOptions.setSchemaDefaults === true ||\n    (jsf.formOptions.setSchemaDefaults === 'auto' && isEmpty(jsf.formValues))\n  )) {\n    nodeValue = JsonPointer.get(jsf.schema, schemaPointer + '/default');\n  }\n  let newNode: any = {\n    _id: forRefLibrary ? null : uniqueId(),\n    arrayItem: arrayItem,\n    dataPointer: JsonPointer.toGenericPointer(dataPointer, jsf.arrayMap),\n    dataType: schema.type || (hasOwn(schema, '$ref') ? '$ref' : null),\n    options: {},\n    required: isInputRequired(jsf.schema, schemaPointer),\n    type: newNodeType,\n    widget: widgetLibrary.getWidget(newNodeType),\n  };\n  const lastDataKey = JsonPointer.toKey(newNode.dataPointer);\n  if (lastDataKey !== '-') { newNode.name = lastDataKey; }\n  if (newNode.arrayItem) {\n    newNode.arrayItemType = arrayItemType;\n    newNode.options.removable = removable !== false;\n  }\n  const shortDataPointer = removeRecursiveReferences(\n    dataPointerPrefix + dataPointer, jsf.dataRecursiveRefMap, jsf.arrayMap\n  );\n  const recursive = !shortDataPointer.length ||\n    shortDataPointer !== dataPointerPrefix + dataPointer;\n  if (!jsf.dataMap.has(shortDataPointer)) {\n    jsf.dataMap.set(shortDataPointer, new Map());\n  }\n  const nodeDataMap = jsf.dataMap.get(shortDataPointer);\n  if (!nodeDataMap.has('inputType')) {\n    nodeDataMap.set('schemaPointer', schemaPointer);\n    nodeDataMap.set('inputType', newNode.type);\n    nodeDataMap.set('widget', newNode.widget);\n    nodeDataMap.set('disabled', !!newNode.options.disabled);\n  }\n  updateInputOptions(newNode, schema, jsf);\n  if (!newNode.options.title && newNode.name && !/^\\d+$/.test(newNode.name)) {\n    newNode.options.title = fixTitle(newNode.name);\n  }\n\n  if (newNode.dataType === 'object') {\n    if (isArray(schema.required) && !nodeDataMap.has('required')) {\n      nodeDataMap.set('required', schema.required);\n    }\n    if (isObject(schema.properties)) {\n      const newSection: any[] = [];\n      const propertyKeys = schema['ui:order'] || Object.keys(schema.properties);\n      if (propertyKeys.includes('*') && !hasOwn(schema.properties, '*')) {\n        const unnamedKeys = Object.keys(schema.properties)\n          .filter(key => !propertyKeys.includes(key));\n        for (let i = propertyKeys.length - 1; i >= 0; i--) {\n          if (propertyKeys[i] === '*') {\n            propertyKeys.splice(i, 1, ...unnamedKeys);\n          }\n        }\n      }\n      propertyKeys\n        .filter(key => hasOwn(schema.properties, key) ||\n          hasOwn(schema, 'additionalProperties')\n        )\n        .forEach(key => {\n          const keySchemaPointer = hasOwn(schema.properties, key) ?\n            '/properties/' + key : '/additionalProperties';\n          const innerItem = buildLayoutFromSchema(\n            jsf, widgetLibrary, isObject(nodeValue) ? nodeValue[key] : null,\n            schemaPointer + keySchemaPointer,\n            dataPointer + '/' + key,\n            false, null, null, forRefLibrary, dataPointerPrefix\n          );\n          if (innerItem) {\n            if (isInputRequired(schema, '/' + key)) {\n              innerItem.options.required = true;\n              jsf.fieldsRequired = true;\n            }\n            newSection.push(innerItem);\n          }\n        });\n      if (dataPointer === '' && !forRefLibrary) {\n        newNode = newSection;\n      } else {\n        newNode.items = newSection;\n      }\n    }\n    // TODO: Add patternProperties and additionalProperties inputs?\n    // ... possibly provide a way to enter both key names and values?\n    // if (isObject(schema.patternProperties)) { }\n    // if (isObject(schema.additionalProperties)) { }\n\n  } else if (newNode.dataType === 'array') {\n    newNode.items = [];\n    newNode.options.maxItems = Math.min(\n      schema.maxItems || 1000, newNode.options.maxItems || 1000\n    );\n    newNode.options.minItems = Math.max(\n      schema.minItems || 0, newNode.options.minItems || 0\n    );\n    if (!newNode.options.minItems && isInputRequired(jsf.schema, schemaPointer)) {\n      newNode.options.minItems = 1;\n    }\n    if (!hasOwn(newNode.options, 'listItems')) { newNode.options.listItems = 1; }\n    newNode.options.tupleItems = isArray(schema.items) ? schema.items.length : 0;\n    if (newNode.options.maxItems <= newNode.options.tupleItems) {\n      newNode.options.tupleItems = newNode.options.maxItems;\n      newNode.options.listItems = 0;\n    } else if (newNode.options.maxItems <\n      newNode.options.tupleItems + newNode.options.listItems\n    ) {\n      newNode.options.listItems = newNode.options.maxItems - newNode.options.tupleItems;\n    } else if (newNode.options.minItems >\n      newNode.options.tupleItems + newNode.options.listItems\n    ) {\n      newNode.options.listItems = newNode.options.minItems - newNode.options.tupleItems;\n    }\n    if (!nodeDataMap.has('maxItems')) {\n      nodeDataMap.set('maxItems', newNode.options.maxItems);\n      nodeDataMap.set('minItems', newNode.options.minItems);\n      nodeDataMap.set('tupleItems', newNode.options.tupleItems);\n      nodeDataMap.set('listItems', newNode.options.listItems);\n    }\n    if (!jsf.arrayMap.has(shortDataPointer)) {\n      jsf.arrayMap.set(shortDataPointer, newNode.options.tupleItems);\n    }\n    removable = newNode.options.removable !== false;\n    let additionalItemsSchemaPointer: string = null;\n\n    // If 'items' is an array = tuple items\n    if (isArray(schema.items)) {\n      newNode.items = [];\n      for (let i = 0; i < newNode.options.tupleItems; i++) {\n        let newItem: any;\n        const itemRefPointer = removeRecursiveReferences(\n          shortDataPointer + '/' + i, jsf.dataRecursiveRefMap, jsf.arrayMap\n        );\n        const itemRecursive = !itemRefPointer.length ||\n          itemRefPointer !== shortDataPointer + '/' + i;\n\n        // If removable, add tuple item layout to layoutRefLibrary\n        if (removable && i >= newNode.options.minItems) {\n          if (!hasOwn(jsf.layoutRefLibrary, itemRefPointer)) {\n            // Set to null first to prevent recursive reference from causing endless loop\n            jsf.layoutRefLibrary[itemRefPointer] = null;\n            jsf.layoutRefLibrary[itemRefPointer] = buildLayoutFromSchema(\n              jsf, widgetLibrary, isArray(nodeValue) ? nodeValue[i] : null,\n              schemaPointer + '/items/' + i,\n              itemRecursive ? '' : dataPointer + '/' + i,\n              true, 'tuple', true, true, itemRecursive ? dataPointer + '/' + i : ''\n            );\n            if (itemRecursive) {\n              jsf.layoutRefLibrary[itemRefPointer].recursiveReference = true;\n            }\n          }\n          newItem = getLayoutNode({\n            $ref: itemRefPointer,\n            dataPointer: dataPointer + '/' + i,\n            recursiveReference: itemRecursive,\n          }, jsf, widgetLibrary, isArray(nodeValue) ? nodeValue[i] : null);\n        } else {\n          newItem = buildLayoutFromSchema(\n            jsf, widgetLibrary, isArray(nodeValue) ? nodeValue[i] : null,\n            schemaPointer + '/items/' + i,\n            dataPointer + '/' + i,\n            true, 'tuple', false, forRefLibrary, dataPointerPrefix\n          );\n        }\n        if (newItem) { newNode.items.push(newItem); }\n      }\n\n      // If 'additionalItems' is an object = additional list items, after tuple items\n      if (isObject(schema.additionalItems)) {\n        additionalItemsSchemaPointer = schemaPointer + '/additionalItems';\n      }\n\n      // If 'items' is an object = list items only (no tuple items)\n    } else if (isObject(schema.items)) {\n      additionalItemsSchemaPointer = schemaPointer + '/items';\n    }\n\n    if (additionalItemsSchemaPointer) {\n      const itemRefPointer = removeRecursiveReferences(\n        shortDataPointer + '/-', jsf.dataRecursiveRefMap, jsf.arrayMap\n      );\n      const itemRecursive = !itemRefPointer.length ||\n        itemRefPointer !== shortDataPointer + '/-';\n      const itemSchemaPointer = removeRecursiveReferences(\n        additionalItemsSchemaPointer, jsf.schemaRecursiveRefMap, jsf.arrayMap\n      );\n      // Add list item layout to layoutRefLibrary\n      if (itemRefPointer.length && !hasOwn(jsf.layoutRefLibrary, itemRefPointer)) {\n        // Set to null first to prevent recursive reference from causing endless loop\n        jsf.layoutRefLibrary[itemRefPointer] = null;\n        jsf.layoutRefLibrary[itemRefPointer] = buildLayoutFromSchema(\n          jsf, widgetLibrary, null,\n          itemSchemaPointer,\n          itemRecursive ? '' : dataPointer + '/-',\n          true, 'list', removable, true, itemRecursive ? dataPointer + '/-' : ''\n        );\n        if (itemRecursive) {\n          jsf.layoutRefLibrary[itemRefPointer].recursiveReference = true;\n        }\n      }\n\n      // Add any additional default items\n      if (!itemRecursive || newNode.options.required) {\n        const arrayLength = Math.min(Math.max(\n          itemRecursive ? 0 :\n            newNode.options.tupleItems + newNode.options.listItems,\n          isArray(nodeValue) ? nodeValue.length : 0\n        ), newNode.options.maxItems);\n        if (newNode.items.length < arrayLength) {\n          for (let i = newNode.items.length; i < arrayLength; i++) {\n            newNode.items.push(getLayoutNode({\n              $ref: itemRefPointer,\n              dataPointer: dataPointer + '/-',\n              recursiveReference: itemRecursive,\n            }, jsf, widgetLibrary, isArray(nodeValue) ? nodeValue[i] : null));\n          }\n        }\n      }\n\n      // If needed, add button to add items to array\n      if (newNode.options.addable !== false &&\n        newNode.options.minItems < newNode.options.maxItems &&\n        (newNode.items[newNode.items.length - 1] || {}).type !== '$ref'\n      ) {\n        let buttonText =\n          ((jsf.layoutRefLibrary[itemRefPointer] || {}).options || {}).title;\n        const prefix = buttonText ? 'Add ' : 'Add to ';\n        if (!buttonText) {\n          buttonText = schema.title || fixTitle(JsonPointer.toKey(dataPointer));\n        }\n        if (!/^add\\b/i.test(buttonText)) { buttonText = prefix + buttonText; }\n        newNode.items.push({\n          _id: uniqueId(),\n          arrayItem: true,\n          arrayItemType: 'list',\n          dataPointer: newNode.dataPointer + '/-',\n          options: {\n            listItems: newNode.options.listItems,\n            maxItems: newNode.options.maxItems,\n            minItems: newNode.options.minItems,\n            removable: false,\n            title: buttonText,\n            tupleItems: newNode.options.tupleItems,\n          },\n          recursiveReference: itemRecursive,\n          type: '$ref',\n          widget: widgetLibrary.getWidget('$ref'),\n          $ref: itemRefPointer,\n        });\n      }\n    }\n\n  } else if (newNode.dataType === '$ref') {\n    const schemaRef = JsonPointer.compile(schema.$ref);\n    const dataRef = JsonPointer.toDataPointer(schemaRef, jsf.schema);\n    let buttonText = '';\n\n    // Get newNode title\n    if (newNode.options.add) {\n      buttonText = newNode.options.add;\n    } else if (newNode.name && !/^\\d+$/.test(newNode.name)) {\n      buttonText =\n        (/^add\\b/i.test(newNode.name) ? '' : 'Add ') + fixTitle(newNode.name);\n\n      // If newNode doesn't have a title, look for title of parent array item\n    } else {\n      const parentSchema =\n        JsonPointer.get(jsf.schema, schemaPointer, 0, -1);\n      if (hasOwn(parentSchema, 'title')) {\n        buttonText = 'Add to ' + parentSchema.title;\n      } else {\n        const pointerArray = JsonPointer.parse(newNode.dataPointer);\n        buttonText = 'Add to ' + fixTitle(pointerArray[pointerArray.length - 2]);\n      }\n    }\n    Object.assign(newNode, {\n      recursiveReference: true,\n      widget: widgetLibrary.getWidget('$ref'),\n      $ref: dataRef,\n    });\n    Object.assign(newNode.options, {\n      removable: false,\n      title: buttonText,\n    });\n    if (isNumber(JsonPointer.get(jsf.schema, schemaPointer, 0, -1).maxItems)) {\n      newNode.options.maxItems =\n        JsonPointer.get(jsf.schema, schemaPointer, 0, -1).maxItems;\n    }\n\n    // Add layout template to layoutRefLibrary\n    if (dataRef.length) {\n      if (!hasOwn(jsf.layoutRefLibrary, dataRef)) {\n        // Set to null first to prevent recursive reference from causing endless loop\n        jsf.layoutRefLibrary[dataRef] = null;\n        const newLayout = buildLayoutFromSchema(\n          jsf, widgetLibrary, null, schemaRef, '',\n          newNode.arrayItem, newNode.arrayItemType, true, true, dataPointer\n        );\n        if (newLayout) {\n          newLayout.recursiveReference = true;\n          jsf.layoutRefLibrary[dataRef] = newLayout;\n        } else {\n          delete jsf.layoutRefLibrary[dataRef];\n        }\n      } else if (!jsf.layoutRefLibrary[dataRef].recursiveReference) {\n        jsf.layoutRefLibrary[dataRef].recursiveReference = true;\n      }\n    }\n  }\n  return newNode;\n}\n\n/**\n * 'mapLayout' function\n *\n * Creates a new layout by running each element in an existing layout through\n * an iteratee. Recursively maps within array elements 'items' and 'tabs'.\n * The iteratee is invoked with four arguments: (value, index, layout, path)\n *\n * The returned layout may be longer (or shorter) then the source layout.\n *\n * If an item from the source layout returns multiple items (as '*' usually will),\n * this function will keep all returned items in-line with the surrounding items.\n *\n * If an item from the source layout causes an error and returns null, it is\n * skipped without error, and the function will still return all non-null items.\n *\n * //   layout - the layout to map\n * //  { (v: any, i?: number, l?: any, p?: string) => any }\n *   function - the funciton to invoke on each element\n * //  { string|string[] = '' } layoutPointer - the layoutPointer to layout, inside rootLayout\n * //  { any[] = layout } rootLayout - the root layout, which conatins layout\n * //\n */\nexport function mapLayout(layout, fn, layoutPointer = '', rootLayout = layout) {\n  let indexPad = 0;\n  let newLayout: any[] = [];\n  forEach(layout, (item, index) => {\n    const realIndex = +index + indexPad;\n    const newLayoutPointer = layoutPointer + '/' + realIndex;\n    let newNode: any = copy(item);\n    let itemsArray: any[] = [];\n    if (isObject(item)) {\n      if (hasOwn(item, 'tabs')) {\n        item.items = item.tabs;\n        delete item.tabs;\n      }\n      if (hasOwn(item, 'items')) {\n        itemsArray = isArray(item.items) ? item.items : [item.items];\n      }\n    }\n    if (itemsArray.length) {\n      newNode.items = mapLayout(itemsArray, fn, newLayoutPointer + '/items', rootLayout);\n    }\n    newNode = fn(newNode, realIndex, newLayoutPointer, rootLayout);\n    if (!isDefined(newNode)) {\n      indexPad--;\n    } else {\n      if (isArray(newNode)) { indexPad += newNode.length - 1; }\n      newLayout = newLayout.concat(newNode);\n    }\n  });\n  return newLayout;\n}\n\n/**\n * 'getLayoutNode' function\n * Copy a new layoutNode from layoutRefLibrary\n *\n * //   refNode -\n * //   layoutRefLibrary -\n * //  { any = null } widgetLibrary -\n * //  { any = null } nodeValue -\n * //  copied layoutNode\n */\nexport function getLayoutNode(\n  refNode, jsf, widgetLibrary: any = null, nodeValue: any = null\n) {\n\n  // If recursive reference and building initial layout, return Add button\n  if (refNode.recursiveReference && widgetLibrary) {\n    const newLayoutNode = cloneDeep(refNode);\n    if (!newLayoutNode.options) { newLayoutNode.options = {}; }\n    Object.assign(newLayoutNode, {\n      recursiveReference: true,\n      widget: widgetLibrary.getWidget('$ref'),\n    });\n    Object.assign(newLayoutNode.options, {\n      removable: false,\n      title: 'Add ' + newLayoutNode.$ref,\n    });\n    return newLayoutNode;\n\n    // Otherwise, return referenced layout\n  } else {\n    let newLayoutNode = jsf.layoutRefLibrary[refNode.$ref];\n    // If value defined, build new node from schema (to set array lengths)\n    if (isDefined(nodeValue)) {\n      newLayoutNode = buildLayoutFromSchema(\n        jsf, widgetLibrary, nodeValue,\n        JsonPointer.toSchemaPointer(refNode.$ref, jsf.schema),\n        refNode.$ref, newLayoutNode.arrayItem,\n        newLayoutNode.arrayItemType, newLayoutNode.options.removable, false\n      );\n    } else {\n      // If value not defined, copy node from layoutRefLibrary\n      newLayoutNode = cloneDeep(newLayoutNode);\n      JsonPointer.forEachDeep(newLayoutNode, (subNode, pointer) => {\n\n        // Reset all _id's in newLayoutNode to unique values\n        if (hasOwn(subNode, '_id')) { subNode._id = uniqueId(); }\n\n        // If adding a recursive item, prefix current dataPointer\n        // to all dataPointers in new layoutNode\n        if (refNode.recursiveReference && hasOwn(subNode, 'dataPointer')) {\n          subNode.dataPointer = refNode.dataPointer + subNode.dataPointer;\n        }\n      });\n    }\n    return newLayoutNode;\n  }\n}\n\n/**\n * 'buildTitleMap' function\n *\n * //   titleMap -\n * //   enumList -\n * //  { boolean = true } fieldRequired -\n * //  { boolean = true } flatList -\n * // { TitleMapItem[] }\n */\nexport function buildTitleMap(\n  titleMap, enumList, fieldRequired = true, flatList = true\n) {\n  let newTitleMap: TitleMapItem[] = [];\n  let hasEmptyValue = false;\n  if (titleMap) {\n    if (isArray(titleMap)) {\n      if (enumList) {\n        for (const i of Object.keys(titleMap)) {\n          if (isObject(titleMap[i])) { // JSON Form style\n            const value = titleMap[i].value;\n            if (enumList.includes(value)) {\n              const name = titleMap[i].name;\n              newTitleMap.push({ name, value });\n              if (value === undefined || value === null) { hasEmptyValue = true; }\n            }\n          } else if (isString(titleMap[i])) { // React Jsonschema Form style\n            if (i < enumList.length) {\n              const name = titleMap[i];\n              const value = enumList[i];\n              newTitleMap.push({ name, value });\n              if (value === undefined || value === null) { hasEmptyValue = true; }\n            }\n          }\n        }\n      } else { // If array titleMap and no enum list, just return the titleMap - Angular Schema Form style\n        newTitleMap = titleMap;\n        if (!fieldRequired) {\n          hasEmptyValue = !!newTitleMap\n            .filter(i => i.value === undefined || i.value === null)\n            .length;\n        }\n      }\n    } else if (enumList) { // Alternate JSON Form style, with enum list\n      for (const i of Object.keys(enumList)) {\n        const value = enumList[i];\n        if (hasOwn(titleMap, value)) {\n          const name = titleMap[value];\n          newTitleMap.push({ name, value });\n          if (value === undefined || value === null) { hasEmptyValue = true; }\n        }\n      }\n    } else { // Alternate JSON Form style, without enum list\n      for (const value of Object.keys(titleMap)) {\n        const name = titleMap[value];\n        newTitleMap.push({ name, value });\n        if (value === undefined || value === null) { hasEmptyValue = true; }\n      }\n    }\n  } else if (enumList) { // Build map from enum list alone\n    for (const i of Object.keys(enumList)) {\n      const name = enumList[i];\n      const value = enumList[i];\n      newTitleMap.push({ name, value });\n      if (value === undefined || value === null) { hasEmptyValue = true; }\n    }\n  } else { // If no titleMap and no enum list, return default map of boolean values\n    newTitleMap = [{ name: 'True', value: true }, { name: 'False', value: false }];\n  }\n\n  // Does titleMap have groups?\n  if (newTitleMap.some(title => hasOwn(title, 'group'))) {\n    hasEmptyValue = false;\n\n    // If flatList = true, flatten items & update name to group: name\n    if (flatList) {\n      newTitleMap = newTitleMap.reduce((groupTitleMap, title) => {\n        if (hasOwn(title, 'group')) {\n          if (isArray(title.items)) {\n            groupTitleMap = [\n              ...groupTitleMap,\n              ...title.items.map(item =>\n                ({ ...item, ...{ name: `${title.group}: ${item.name}` } })\n              )\n            ];\n            if (title.items.some(item => item.value === undefined || item.value === null)) {\n              hasEmptyValue = true;\n            }\n          }\n          if (hasOwn(title, 'name') && hasOwn(title, 'value')) {\n            title.name = `${title.group}: ${title.name}`;\n            delete title.group;\n            groupTitleMap.push(title);\n            if (title.value === undefined || title.value === null) {\n              hasEmptyValue = true;\n            }\n          }\n        } else {\n          groupTitleMap.push(title);\n          if (title.value === undefined || title.value === null) {\n            hasEmptyValue = true;\n          }\n        }\n        return groupTitleMap;\n      }, []);\n\n      // If flatList = false, combine items from matching groups\n    } else {\n      newTitleMap = newTitleMap.reduce((groupTitleMap, title) => {\n        if (hasOwn(title, 'group')) {\n          if (title.group !== (groupTitleMap[groupTitleMap.length - 1] || {}).group) {\n            groupTitleMap.push({ group: title.group, items: title.items || [] });\n          }\n          if (hasOwn(title, 'name') && hasOwn(title, 'value')) {\n            groupTitleMap[groupTitleMap.length - 1].items\n              .push({ name: title.name, value: title.value });\n            if (title.value === undefined || title.value === null) {\n              hasEmptyValue = true;\n            }\n          }\n        } else {\n          groupTitleMap.push(title);\n          if (title.value === undefined || title.value === null) {\n            hasEmptyValue = true;\n          }\n        }\n        return groupTitleMap;\n      }, []);\n    }\n  }\n  if (!fieldRequired && !hasEmptyValue) {\n    newTitleMap.unshift({ name: '<em>None</em>', value: null });\n  }\n  return newTitleMap;\n}\n","// Warning: Changing the following order may cause errors if the new order\n// causes a library to be imported before another library it depends on.\n\nexport {\n  _executeValidators, _executeAsyncValidators, _mergeObjects, _mergeErrors,\n  isDefined, hasValue, isEmpty, isString, isNumber, isInteger, isBoolean,\n  isFunction, isObject, isArray, isDate, isMap, isSet, isPromise, isObservable,\n  getType, isType, isPrimitive, toJavaScriptType, toSchemaType, _toPromise,\n  toObservable, inArray, xor, SchemaPrimitiveType, SchemaType, JavaScriptPrimitiveType,\n  JavaScriptType, PrimitiveValue, PlainObject, IValidatorFn, AsyncIValidatorFn\n} from './validator.functions';\n\nexport {\n  addClasses, copy, forEach, forEachCopy, hasOwn, mergeFilteredObject,\n  uniqueItems, commonItems, fixTitle, toTitleCase\n} from './utility.functions';\n\nexport { Pointer, JsonPointer } from './jsonpointer.functions';\n\nexport { JsonValidators } from './json.validators';\n\nexport {\n  buildSchemaFromLayout, buildSchemaFromData, getFromSchema,\n  removeRecursiveReferences, getInputType, checkInlineType, isInputRequired,\n  updateInputOptions, getTitleMapFromOneOf, getControlValidators,\n  resolveSchemaReferences, getSubSchema, combineAllOf, fixRequiredArrayProperties\n} from './json-schema.functions';\n\nexport { convertSchemaToDraft6 } from './convert-schema-to-draft6.function';\n\nexport { mergeSchemas } from './merge-schemas.function';\n\nexport {\n  buildFormGroupTemplate, buildFormGroup, formatFormData,\n  getControl, setRequiredFields\n} from './form-group.functions';\n\nexport {\n  buildLayout, buildLayoutFromSchema, mapLayout, getLayoutNode, buildTitleMap\n} from './layout.functions';\n","export const deValidationMessages: any = { // Default German error messages\n  required: 'Darf nicht leer sein',\n  minLength: 'Mindestens {{minimumLength}} Zeichen benötigt (aktuell: {{currentLength}})',\n  maxLength: 'Maximal {{maximumLength}} Zeichen erlaubt (aktuell: {{currentLength}})',\n  pattern: 'Entspricht nicht diesem regulären Ausdruck: {{requiredPattern}}',\n  format: function (error) {\n    switch (error.requiredFormat) {\n      case 'date':\n        return 'Muss ein Datum sein, z. B. \"2000-12-31\"';\n      case 'time':\n        return 'Muss eine Zeitangabe sein, z. B. \"16:20\" oder \"03:14:15.9265\"';\n      case 'date-time':\n        return 'Muss Datum mit Zeit beinhalten, z. B. \"2000-03-14T01:59\" oder \"2000-03-14T01:59:26.535Z\"';\n      case 'email':\n        return 'Keine gültige E-Mail-Adresse (z. B. \"name@example.com\")';\n      case 'hostname':\n        return 'Kein gültiger Hostname (z. B. \"example.com\")';\n      case 'ipv4':\n        return 'Keine gültige IPv4-Adresse (z. B. \"127.0.0.1\")';\n      case 'ipv6':\n        return 'Keine gültige IPv6-Adresse (z. B. \"1234:5678:9ABC:DEF0:1234:5678:9ABC:DEF0\")';\n      // TODO: add examples for 'uri', 'uri-reference', and 'uri-template'\n      // case 'uri': case 'uri-reference': case 'uri-template':\n      case 'url':\n        return 'Keine gültige URL (z. B. \"http://www.example.com/page.html\")';\n      case 'uuid':\n        return 'Keine gültige UUID (z. B. \"12345678-9ABC-DEF0-1234-56789ABCDEF0\")';\n      case 'color':\n        return 'Kein gültiger Farbwert (z. B. \"#FFFFFF\" oder \"rgb(255, 255, 255)\")';\n      case 'json-pointer':\n        return 'Kein gültiger JSON-Pointer (z. B. \"/pointer/to/something\")';\n      case 'relative-json-pointer':\n        return 'Kein gültiger relativer JSON-Pointer (z. B. \"2/pointer/to/something\")';\n      case 'regex':\n        return 'Kein gültiger regulärer Ausdruck (z. B. \"(1-)?\\\\d{3}-\\\\d{3}-\\\\d{4}\")';\n      default:\n        return 'Muss diesem Format entsprechen: ' + error.requiredFormat;\n    }\n  },\n  minimum: 'Muss mindestens {{minimumValue}} sein',\n  exclusiveMinimum: 'Muss größer als {{exclusiveMinimumValue}} sein',\n  maximum: 'Darf maximal {{maximumValue}} sein',\n  exclusiveMaximum: 'Muss kleiner als {{exclusiveMaximumValue}} sein',\n  multipleOf: function (error) {\n    if ((1 / error.multipleOfValue) % 10 === 0) {\n      const decimals = Math.log10(1 / error.multipleOfValue);\n      return `Maximal ${decimals} Dezimalstellen erlaubt`;\n    } else {\n      return `Muss ein Vielfaches von ${error.multipleOfValue} sein`;\n    }\n  },\n  minProperties: 'Mindestens {{minimumProperties}} Attribute erforderlich (aktuell: {{currentProperties}})',\n  maxProperties: 'Maximal {{maximumProperties}} Attribute erlaubt (aktuell: {{currentProperties}})',\n  minItems: 'Mindestens {{minimumItems}} Werte erforderlich (aktuell: {{currentItems}})',\n  maxItems: 'Maximal {{maximumItems}} Werte erlaubt (aktuell: {{currentItems}})',\n  uniqueItems: 'Alle Werte müssen eindeutig sein',\n  // Note: No default error messages for 'type', 'const', 'enum', or 'dependencies'\n};\n","export const enValidationMessages: any = { // Default English error messages\n  required: 'This field is required.',\n  minLength: 'Must be {{minimumLength}} characters or longer (current length: {{currentLength}})',\n  maxLength: 'Must be {{maximumLength}} characters or shorter (current length: {{currentLength}})',\n  pattern: 'Must match pattern: {{requiredPattern}}',\n  format: function (error) {\n    switch (error.requiredFormat) {\n      case 'date':\n        return 'Must be a date, like \"2000-12-31\"';\n      case 'time':\n        return 'Must be a time, like \"16:20\" or \"03:14:15.9265\"';\n      case 'date-time':\n        return 'Must be a date-time, like \"2000-03-14T01:59\" or \"2000-03-14T01:59:26.535Z\"';\n      case 'email':\n        return 'Must be an email address, like \"name@example.com\"';\n      case 'hostname':\n        return 'Must be a hostname, like \"example.com\"';\n      case 'ipv4':\n        return 'Must be an IPv4 address, like \"127.0.0.1\"';\n      case 'ipv6':\n        return 'Must be an IPv6 address, like \"1234:5678:9ABC:DEF0:1234:5678:9ABC:DEF0\"';\n      // TODO: add examples for 'uri', 'uri-reference', and 'uri-template'\n      // case 'uri': case 'uri-reference': case 'uri-template':\n      case 'url':\n        return 'Must be a url, like \"http://www.example.com/page.html\"';\n      case 'uuid':\n        return 'Must be a uuid, like \"12345678-9ABC-DEF0-1234-56789ABCDEF0\"';\n      case 'color':\n        return 'Must be a color, like \"#FFFFFF\" or \"rgb(255, 255, 255)\"';\n      case 'json-pointer':\n        return 'Must be a JSON Pointer, like \"/pointer/to/something\"';\n      case 'relative-json-pointer':\n        return 'Must be a relative JSON Pointer, like \"2/pointer/to/something\"';\n      case 'regex':\n        return 'Must be a regular expression, like \"(1-)?\\\\d{3}-\\\\d{3}-\\\\d{4}\"';\n      default:\n        return 'Must be a correctly formatted ' + error.requiredFormat;\n    }\n  },\n  minimum: 'Must be {{minimumValue}} or more',\n  exclusiveMinimum: 'Must be more than {{exclusiveMinimumValue}}',\n  maximum: 'Must be {{maximumValue}} or less',\n  exclusiveMaximum: 'Must be less than {{exclusiveMaximumValue}}',\n  multipleOf: function (error) {\n    if ((1 / error.multipleOfValue) % 10 === 0) {\n      const decimals = Math.log10(1 / error.multipleOfValue);\n      return `Must have ${decimals} or fewer decimal places.`;\n    } else {\n      return `Must be a multiple of ${error.multipleOfValue}.`;\n    }\n  },\n  minProperties: 'Must have {{minimumProperties}} or more items (current items: {{currentProperties}})',\n  maxProperties: 'Must have {{maximumProperties}} or fewer items (current items: {{currentProperties}})',\n  minItems: 'Must have {{minimumItems}} or more items (current items: {{currentItems}})',\n  maxItems: 'Must have {{maximumItems}} or fewer items (current items: {{currentItems}})',\n  uniqueItems: 'All items must be unique',\n  // Note: No default error messages for 'type', 'const', 'enum', or 'dependencies'\n};\n","export const esValidationMessages: any = { // Default Spanish error messages\n  required: 'Este campo está requerido.',\n  minLength: 'Debe tener {{minimumLength}} caracteres o más longitud (longitud actual: {{currentLength}})',\n  maxLength: 'Debe tener {{maximumLength}} caracteres o menos longitud (longitud actual: {{currentLength}})',\n  pattern: 'Must match pattern: {{requiredPattern}}',\n  format: function (error) {\n    switch (error.requiredFormat) {\n      case 'date':\n        return 'Debe tener una fecha, ej \"2000-12-31\"';\n      case 'time':\n        return 'Debe tener una hora, ej \"16:20\" o \"03:14:15.9265\"';\n      case 'date-time':\n        return 'Debe tener fecha y hora, ej \"2000-03-14T01:59\" o \"2000-03-14T01:59:26.535Z\"';\n      case 'email':\n        return 'No hay dirección de correo electrónico válida, ej \"name@example.com\"';\n      case 'hostname':\n        return 'Debe ser un nombre de host válido, ej \"example.com\"';\n      case 'ipv4':\n        return 'Debe ser una dirección de IPv4, ej \"127.0.0.1\"';\n      case 'ipv6':\n        return 'Debe ser una dirección de IPv6, ej \"1234:5678:9ABC:DEF0:1234:5678:9ABC:DEF0\"';\n      case 'url':\n        return 'Debe ser una URL, ej \"http://www.example.com/page.html\"';\n      case 'uuid':\n        return 'Debe ser un UUID, ej \"12345678-9ABC-DEF0-1234-56789ABCDEF0\"';\n      case 'color':\n        return 'Debe ser un color, ej \"#FFFFFF\" or \"rgb(255, 255, 255)\"';\n      case 'json-pointer':\n        return 'Debe ser un JSON Pointer, ej \"/pointer/to/something\"';\n      case 'relative-json-pointer':\n        return 'Debe ser un JSON Pointer relativo, ej \"2/pointer/to/something\"';\n      case 'regex':\n        return 'Debe ser una expresión regular, ej \"(1-)?\\\\d{3}-\\\\d{3}-\\\\d{4}\"';\n      default:\n        return 'Debe tener el formato correcto ' + error.requiredFormat;\n    }\n  },\n  minimum: 'Debe ser {{minimumValue}} o más',\n  exclusiveMinimum: 'Debe ser superior a {{exclusiveMinimumValue}}',\n  maximum: 'Debe ser {{maximumValue}} o menos',\n  exclusiveMaximum: 'Debe ser menor que {{exclusiveMaximumValue}}',\n  multipleOf: function (error) {\n    if ((1 / error.multipleOfValue) % 10 === 0) {\n      const decimals = Math.log10(1 / error.multipleOfValue);\n      return `Se permite un máximo de ${decimals} decimales`;\n    } else {\n      return `Debe ser múltiplo de ${error.multipleOfValue}.`;\n    }\n  },\n  minProperties: 'Debe tener {{minimumProperties}} o más elementos (elementos actuales: {{currentProperties}})',\n  maxProperties: 'Debe tener {{maximumProperties}} o menos elementos (elementos actuales: {{currentProperties}})',\n  minItems: 'Debe tener {{minimumItems}} o más elementos (elementos actuales: {{currentItems}})',\n  maxItems: 'Debe tener {{maximumItems}} o menos elementos (elementos actuales: {{currentItems}})',\n  uniqueItems: 'Todos los elementos deben ser únicos',\n};\n","export const frValidationMessages: any = { // French error messages\n  required: 'Est obligatoire.',\n  minLength: 'Doit avoir minimum {{minimumLength}} caractères (actuellement: {{currentLength}})',\n  maxLength: 'Doit avoir maximum {{maximumLength}} caractères (actuellement: {{currentLength}})',\n  pattern: 'Doit respecter: {{requiredPattern}}',\n  format: function (error) {\n    switch (error.requiredFormat) {\n      case 'date':\n        return 'Doit être une date, tel que \"2000-12-31\"';\n      case 'time':\n        return 'Doit être une heure, tel que \"16:20\" ou \"03:14:15.9265\"';\n      case 'date-time':\n        return 'Doit être une date et une heure, tel que \"2000-03-14T01:59\" ou \"2000-03-14T01:59:26.535Z\"';\n      case 'email':\n        return 'Doit être une adresse e-mail, tel que \"name@example.com\"';\n      case 'hostname':\n        return 'Doit être un nom de domaine, tel que \"example.com\"';\n      case 'ipv4':\n        return 'Doit être une adresse IPv4, tel que \"127.0.0.1\"';\n      case 'ipv6':\n        return 'Doit être une adresse IPv6, tel que \"1234:5678:9ABC:DEF0:1234:5678:9ABC:DEF0\"';\n      // TODO: add examples for 'uri', 'uri-reference', and 'uri-template'\n      // case 'uri': case 'uri-reference': case 'uri-template':\n      case 'url':\n        return 'Doit être une URL, tel que \"http://www.example.com/page.html\"';\n      case 'uuid':\n        return 'Doit être un UUID, tel que \"12345678-9ABC-DEF0-1234-56789ABCDEF0\"';\n      case 'color':\n        return 'Doit être une couleur, tel que \"#FFFFFF\" or \"rgb(255, 255, 255)\"';\n      case 'json-pointer':\n        return 'Doit être un JSON Pointer, tel que \"/pointer/to/something\"';\n      case 'relative-json-pointer':\n        return 'Doit être un relative JSON Pointer, tel que \"2/pointer/to/something\"';\n      case 'regex':\n        return 'Doit être une expression régulière, tel que \"(1-)?\\\\d{3}-\\\\d{3}-\\\\d{4}\"';\n      default:\n        return 'Doit être avoir le format correct: ' + error.requiredFormat;\n    }\n  },\n  minimum: 'Doit être supérieur à {{minimumValue}}',\n  exclusiveMinimum: 'Doit avoir minimum {{exclusiveMinimumValue}} charactères',\n  maximum: 'Doit être inférieur à {{maximumValue}}',\n  exclusiveMaximum: 'Doit avoir maximum {{exclusiveMaximumValue}} charactères',\n  multipleOf: function (error) {\n    if ((1 / error.multipleOfValue) % 10 === 0) {\n      const decimals = Math.log10(1 / error.multipleOfValue);\n      return `Doit comporter ${decimals} ou moins de decimales.`;\n    } else {\n      return `Doit être un multiple de ${error.multipleOfValue}.`;\n    }\n  },\n  minProperties: 'Doit comporter au minimum {{minimumProperties}} éléments',\n  maxProperties: 'Doit comporter au maximum {{maximumProperties}} éléments',\n  minItems: 'Doit comporter au minimum {{minimumItems}} éléments',\n  maxItems: 'Doit comporter au maximum {{minimumItems}} éléments',\n  uniqueItems: 'Tous les éléments doivent être uniques',\n  // Note: No default error messages for 'type', 'const', 'enum', or 'dependencies'\n};\n","export const itValidationMessages: any = { // Default Italian error messages\n  required: 'Il campo è obbligatorio',\n  minLength: 'Deve inserire almeno {{minimumLength}} caratteri (lunghezza corrente: {{currentLength}})',\n  maxLength: 'Il numero massimo di caratteri consentito è {{maximumLength}} (lunghezza corrente: {{currentLength}})',\n  pattern: 'Devi rispettare il pattern : {{requiredPattern}}',\n  format: function (error) {\n    switch (error.requiredFormat) {\n      case 'date':\n        return 'Deve essere una data, come \"31-12-2000\"';\n      case 'time':\n        return 'Deve essere un orario, come \"16:20\" o \"03:14:15.9265\"';\n      case 'date-time':\n        return 'Deve essere data-orario, come \"14-03-2000T01:59\" or \"14-03-2000T01:59:26.535Z\"';\n      case 'email':\n        return 'Deve essere un indirzzo email, come \"name@example.com\"';\n      case 'hostname':\n        return 'Deve essere un hostname, come \"example.com\"';\n      case 'ipv4':\n        return 'Deve essere un indirizzo IPv4, come \"127.0.0.1\"';\n      case 'ipv6':\n        return 'Deve essere un indirizzo IPv6, come \"1234:5678:9ABC:DEF0:1234:5678:9ABC:DEF0\"';\n      // TODO: add examples for 'uri', 'uri-reference', and 'uri-template'\n      // case 'uri': case 'uri-reference': case 'uri-template':\n      case 'url':\n        return 'Deve essere un url, come \"http://www.example.com/page.html\"';\n      case 'uuid':\n        return 'Deve essere un uuid, come \"12345678-9ABC-DEF0-1234-56789ABCDEF0\"';\n      case 'color':\n        return 'Deve essere un colore, come \"#FFFFFF\" o \"rgb(255, 255, 255)\"';\n      case 'json-pointer':\n        return 'Deve essere un JSON Pointer, come \"/pointer/to/something\"';\n      case 'relative-json-pointer':\n        return 'Deve essere un JSON Pointer relativo, come \"2/pointer/to/something\"';\n      case 'regex':\n        return 'Deve essere una regular expression, come \"(1-)?\\\\d{3}-\\\\d{3}-\\\\d{4}\"';\n      default:\n        return 'Deve essere formattato correttamente ' + error.requiredFormat;\n    }\n  },\n  minimum: 'Deve essere {{minimumValue}} o più',\n  exclusiveMinimum: 'Deve essere più di {{exclusiveMinimumValue}}',\n  maximum: 'Deve essere {{maximumValue}} o meno',\n  exclusiveMaximum: 'Deve essere minore di {{exclusiveMaximumValue}}',\n  multipleOf: function (error) {\n    if ((1 / error.multipleOfValue) % 10 === 0) {\n      const decimals = Math.log10(1 / error.multipleOfValue);\n      return `Deve avere ${decimals} o meno decimali.`;\n    } else {\n      return `Deve essere multiplo di ${error.multipleOfValue}.`;\n    }\n  },\n  minProperties: 'Deve avere {{minimumProperties}} o più elementi (elementi correnti: {{currentProperties}})',\n  maxProperties: 'Deve avere {{maximumProperties}} o meno elementi (elementi correnti: {{currentProperties}})',\n  minItems: 'Deve avere {{minimumItems}} o più elementi (elementi correnti: {{currentItems}})',\n  maxItems: 'Deve avere {{maximumItems}} o meno elementi (elementi correnti: {{currentItems}})',\n  uniqueItems: 'Tutti gli elementi devono essere unici',\n  // Note: No default error messages for 'type', 'const', 'enum', or 'dependencies'\n};\n","export const ptValidationMessages: any = { // Brazilian Portuguese error messages\n  required: 'Este campo é obrigatório.',\n  minLength: 'É preciso no mínimo {{minimumLength}} caracteres ou mais (tamanho atual: {{currentLength}})',\n  maxLength: 'É preciso no máximo  {{maximumLength}} caracteres ou menos (tamanho atual: {{currentLength}})',\n  pattern: 'Tem que ajustar ao formato: {{requiredPattern}}',\n  format: function (error) {\n    switch (error.requiredFormat) {\n      case 'date':\n        return 'Tem que ser uma data, por exemplo \"2000-12-31\"';\n      case 'time':\n        return 'Tem que ser horário, por exemplo \"16:20\" ou \"03:14:15.9265\"';\n      case 'date-time':\n        return 'Tem que ser data e hora, por exemplo \"2000-03-14T01:59\" ou \"2000-03-14T01:59:26.535Z\"';\n      case 'email':\n        return 'Tem que ser um email, por exemplo \"fulano@exemplo.com.br\"';\n      case 'hostname':\n        return 'Tem que ser uma nome de domínio, por exemplo \"exemplo.com.br\"';\n      case 'ipv4':\n        return 'Tem que ser um endereço IPv4, por exemplo \"127.0.0.1\"';\n      case 'ipv6':\n        return 'Tem que ser um endereço IPv6, por exemplo \"1234:5678:9ABC:DEF0:1234:5678:9ABC:DEF0\"';\n      // TODO: add examples for 'uri', 'uri-reference', and 'uri-template'\n      // case 'uri': case 'uri-reference': case 'uri-template':\n      case 'url':\n        return 'Tem que ser uma URL, por exemplo \"http://www.exemplo.com.br/pagina.html\"';\n      case 'uuid':\n        return 'Tem que ser um uuid, por exemplo \"12345678-9ABC-DEF0-1234-56789ABCDEF0\"';\n      case 'color':\n        return 'Tem que ser uma cor, por exemplo \"#FFFFFF\" ou \"rgb(255, 255, 255)\"';\n      case 'json-pointer':\n        return 'Tem que ser um JSON Pointer, por exemplo \"/referencia/para/algo\"';\n      case 'relative-json-pointer':\n        return 'Tem que ser um JSON Pointer relativo, por exemplo \"2/referencia/para/algo\"';\n      case 'regex':\n        return 'Tem que ser uma expressão regular, por exemplo \"(1-)?\\\\d{3}-\\\\d{3}-\\\\d{4}\"';\n      default:\n        return 'Tem que ser no formato: ' + error.requiredFormat;\n    }\n  },\n  minimum: 'Tem que ser {{minimumValue}} ou mais',\n  exclusiveMinimum: 'Tem que ser mais que {{exclusiveMinimumValue}}',\n  maximum: 'Tem que ser {{maximumValue}} ou menos',\n  exclusiveMaximum: 'Tem que ser menor que {{exclusiveMaximumValue}}',\n  multipleOf: function (error) {\n    if ((1 / error.multipleOfValue) % 10 === 0) {\n      const decimals = Math.log10(1 / error.multipleOfValue);\n      return `Tem que ter ${decimals} ou menos casas decimais.`;\n    } else {\n      return `Tem que ser um múltiplo de ${error.multipleOfValue}.`;\n    }\n  },\n  minProperties: 'Deve ter {{minimumProperties}} ou mais itens (itens até o momento: {{currentProperties}})',\n  maxProperties: 'Deve ter {{maximumProperties}} ou menos intens (itens até o momento: {{currentProperties}})',\n  minItems: 'Deve ter {{minimumItems}} ou mais itens (itens até o momento: {{currentItems}})',\n  maxItems: 'Deve ter {{maximumItems}} ou menos itens (itens até o momento: {{currentItems}})',\n  uniqueItems: 'Todos os itens devem ser únicos',\n  // Note: No default error messages for 'type', 'const', 'enum', or 'dependencies'\n};\n","export const zhValidationMessages: any = { // Chinese error messages\n  required: '必填字段.',\n  minLength: '字符长度必须大于或者等于 {{minimumLength}} (当前长度: {{currentLength}})',\n  maxLength: '字符长度必须小于或者等于 {{maximumLength}} (当前长度: {{currentLength}})',\n  pattern: '必须匹配正则表达式: {{requiredPattern}}',\n  format: function (error) {\n    switch (error.requiredFormat) {\n      case 'date':\n        return '必须为日期格式, 比如 \"2000-12-31\"';\n      case 'time':\n        return '必须为时间格式, 比如 \"16:20\" 或者 \"03:14:15.9265\"';\n      case 'date-time':\n        return '必须为日期时间格式, 比如 \"2000-03-14T01:59\" 或者 \"2000-03-14T01:59:26.535Z\"';\n      case 'email':\n        return '必须为邮箱地址, 比如 \"name@example.com\"';\n      case 'hostname':\n        return '必须为主机名, 比如 \"example.com\"';\n      case 'ipv4':\n        return '必须为 IPv4 地址, 比如 \"127.0.0.1\"';\n      case 'ipv6':\n        return '必须为 IPv6 地址, 比如 \"1234:5678:9ABC:DEF0:1234:5678:9ABC:DEF0\"';\n      // TODO: add examples for 'uri', 'uri-reference', and 'uri-template'\n      // case 'uri': case 'uri-reference': case 'uri-template':\n      case 'url':\n        return '必须为 url, 比如 \"http://www.example.com/page.html\"';\n      case 'uuid':\n        return '必须为 uuid, 比如 \"12345678-9ABC-DEF0-1234-56789ABCDEF0\"';\n      case 'color':\n        return '必须为颜色值, 比如 \"#FFFFFF\" 或者 \"rgb(255, 255, 255)\"';\n      case 'json-pointer':\n        return '必须为 JSON Pointer, 比如 \"/pointer/to/something\"';\n      case 'relative-json-pointer':\n        return '必须为相对的 JSON Pointer, 比如 \"2/pointer/to/something\"';\n      case 'regex':\n        return '必须为正则表达式, 比如 \"(1-)?\\\\d{3}-\\\\d{3}-\\\\d{4}\"';\n      default:\n        return '必须为格式正确的 ' + error.requiredFormat;\n    }\n  },\n  minimum: '必须大于或者等于最小值: {{minimumValue}}',\n  exclusiveMinimum: '必须大于最小值: {{exclusiveMinimumValue}}',\n  maximum: '必须小于或者等于最大值: {{maximumValue}}',\n  exclusiveMaximum: '必须小于最大值: {{exclusiveMaximumValue}}',\n  multipleOf: function (error) {\n    if ((1 / error.multipleOfValue) % 10 === 0) {\n      const decimals = Math.log10(1 / error.multipleOfValue);\n      return `必须有 ${decimals} 位或更少的小数位`;\n    } else {\n      return `必须为 ${error.multipleOfValue} 的倍数`;\n    }\n  },\n  minProperties: '项目数必须大于或者等于 {{minimumProperties}} (当前项目数: {{currentProperties}})',\n  maxProperties: '项目数必须小于或者等于 {{maximumProperties}} (当前项目数: {{currentProperties}})',\n  minItems: '项目数必须大于或者等于 {{minimumItems}} (当前项目数: {{currentItems}})',\n  maxItems: '项目数必须小于或者等于 {{maximumItems}} (当前项目数: {{currentItems}})',\n  uniqueItems: '所有项目必须是唯一的',\n  // Note: No default error messages for 'type', 'const', 'enum', or 'dependencies'\n};\n","import { Injectable } from '@angular/core';\nimport { AbstractControl, UntypedFormArray, UntypedFormGroup } from '@angular/forms';\nimport { Subject } from 'rxjs';\nimport cloneDeep from 'lodash/cloneDeep';\nimport Ajv from 'ajv';\nimport jsonDraft6 from 'ajv/lib/refs/json-schema-draft-06.json';\nimport {\n  buildFormGroup,\n  buildFormGroupTemplate,\n  formatFormData,\n  getControl,\n  fixTitle,\n  forEach,\n  hasOwn,\n  toTitleCase,\n  buildLayout,\n  getLayoutNode,\n  buildSchemaFromData,\n  buildSchemaFromLayout,\n  removeRecursiveReferences,\n  hasValue,\n  isArray,\n  isDefined,\n  isEmpty,\n  isObject,\n  JsonPointer\n} from './shared';\nimport {\n  deValidationMessages,\n  enValidationMessages,\n  esValidationMessages,\n  frValidationMessages,\n  itValidationMessages,\n  ptValidationMessages,\n  zhValidationMessages\n} from './locale';\n\n\nexport interface TitleMapItem {\n  name?: string;\n  value?: any;\n  checked?: boolean;\n  group?: string;\n  items?: TitleMapItem[];\n}\nexport interface ErrorMessages {\n  [control_name: string]: {\n    message: string | Function | Object;\n    code: string;\n  }[];\n}\n\n@Injectable()\nexport class JsonSchemaFormService {\n  JsonFormCompatibility = false;\n  ReactJsonSchemaFormCompatibility = false;\n  AngularSchemaFormCompatibility = false;\n  tpldata: any = {};\n\n  ajvOptions: any = {\n    allErrors: true,\n    jsonPointers: true,\n    unknownFormats: 'ignore'\n  };\n  ajv: any = new Ajv(this.ajvOptions); // AJV: Another JSON Schema Validator\n  validateFormData: any = null; // Compiled AJV function to validate active form's schema\n\n  formValues: any = {}; // Internal form data (may not have correct types)\n  data: any = {}; // Output form data (formValues, formatted with correct data types)\n  schema: any = {}; // Internal JSON Schema\n  layout: any[] = []; // Internal form layout\n  formGroupTemplate: any = {}; // Template used to create formGroup\n  formGroup: any = null; // Angular formGroup, which powers the reactive form\n  framework: any = null; // Active framework component\n  formOptions: any; // Active options, used to configure the form\n\n  validData: any = null; // Valid form data (or null) (=== isValid ? data : null)\n  isValid: boolean = null; // Is current form data valid?\n  ajvErrors: any = null; // Ajv errors for current data\n  validationErrors: any = null; // Any validation errors for current data\n  dataErrors: any = new Map(); //\n  formValueSubscription: any = null; // Subscription to formGroup.valueChanges observable (for un- and re-subscribing)\n  dataChanges: Subject<any> = new Subject(); // Form data observable\n  isValidChanges: Subject<any> = new Subject(); // isValid observable\n  validationErrorChanges: Subject<any> = new Subject(); // validationErrors observable\n\n  arrayMap: Map<string, number> = new Map(); // Maps arrays in data object and number of tuple values\n  dataMap: Map<string, any> = new Map(); // Maps paths in form data to schema and formGroup paths\n  dataRecursiveRefMap: Map<string, string> = new Map(); // Maps recursive reference points in form data\n  schemaRecursiveRefMap: Map<string, string> = new Map(); // Maps recursive reference points in schema\n  schemaRefLibrary: any = {}; // Library of schemas for resolving schema $refs\n  layoutRefLibrary: any = { '': null }; // Library of layout nodes for adding to form\n  templateRefLibrary: any = {}; // Library of formGroup templates for adding to form\n  hasRootReference = false; // Does the form include a recursive reference to itself?\n\n  language = 'en-US'; // Does the form include a recursive reference to itself?\n\n  // Default global form options\n  defaultFormOptions: any = {\n    autocomplete: true, // Allow the web browser to remember previous form submission values as defaults\n    addSubmit: 'auto', // Add a submit button if layout does not have one?\n    // for addSubmit: true = always, false = never,\n    // 'auto' = only if layout is undefined (form is built from schema alone)\n    debug: false, // Show debugging output?\n    disableInvalidSubmit: true, // Disable submit if form invalid?\n    formDisabled: false, // Set entire form as disabled? (not editable, and disables outputs)\n    formReadonly: false, // Set entire form as read only? (not editable, but outputs still enabled)\n    fieldsRequired: false, // (set automatically) Are there any required fields in the form?\n    framework: 'no-framework', // The framework to load\n    loadExternalAssets: false, // Load external css and JavaScript for framework?\n    pristine: { errors: true, success: true },\n    supressPropertyTitles: false,\n    setSchemaDefaults: 'auto', // Set fefault values from schema?\n    // true = always set (unless overridden by layout default or formValues)\n    // false = never set\n    // 'auto' = set in addable components, and everywhere if formValues not set\n    setLayoutDefaults: 'auto', // Set fefault values from layout?\n    // true = always set (unless overridden by formValues)\n    // false = never set\n    // 'auto' = set in addable components, and everywhere if formValues not set\n    validateOnRender: 'auto', // Validate fields immediately, before they are touched?\n    // true = validate all fields immediately\n    // false = only validate fields after they are touched by user\n    // 'auto' = validate fields with values immediately, empty fields after they are touched\n    widgets: {}, // Any custom widgets to load\n    defautWidgetOptions: {\n      // Default options for form control widgets\n      listItems: 1, // Number of list items to initially add to arrays with no default value\n      addable: true, // Allow adding items to an array or $ref point?\n      orderable: true, // Allow reordering items within an array?\n      removable: true, // Allow removing items from an array or $ref point?\n      enableErrorState: true, // Apply 'has-error' class when field fails validation?\n      // disableErrorState: false, // Don't apply 'has-error' class when field fails validation?\n      enableSuccessState: true, // Apply 'has-success' class when field validates?\n      // disableSuccessState: false, // Don't apply 'has-success' class when field validates?\n      feedback: false, // Show inline feedback icons?\n      feedbackOnRender: false, // Show errorMessage on Render?\n      notitle: false, // Hide title?\n      disabled: false, // Set control as disabled? (not editable, and excluded from output)\n      readonly: false, // Set control as read only? (not editable, but included in output)\n      returnEmptyFields: true, // return values for fields that contain no data?\n      validationMessages: {} // set by setLanguage()\n    }\n  };\n\n  constructor() {\n    this.setLanguage(this.language);\n    this.ajv.addMetaSchema(jsonDraft6);\n  }\n\n  setLanguage(language: string = 'en-US') {\n    this.language = language;\n    const languageValidationMessages = {\n      de: deValidationMessages,\n      en: enValidationMessages,\n      es: esValidationMessages,\n      fr: frValidationMessages,\n      it: itValidationMessages,\n      pt: ptValidationMessages,\n      zh: zhValidationMessages,\n    };\n    const languageCode = language.slice(0, 2);\n\n    const validationMessages = languageValidationMessages[languageCode];\n\n    this.defaultFormOptions.defautWidgetOptions.validationMessages = cloneDeep(\n      validationMessages\n    );\n  }\n\n  getData() {\n    return this.data;\n  }\n\n  getSchema() {\n    return this.schema;\n  }\n\n  getLayout() {\n    return this.layout;\n  }\n\n  resetAllValues() {\n    this.JsonFormCompatibility = false;\n    this.ReactJsonSchemaFormCompatibility = false;\n    this.AngularSchemaFormCompatibility = false;\n    this.tpldata = {};\n    this.validateFormData = null;\n    this.formValues = {};\n    this.schema = {};\n    this.layout = [];\n    this.formGroupTemplate = {};\n    this.formGroup = null;\n    this.framework = null;\n    this.data = {};\n    this.validData = null;\n    this.isValid = null;\n    this.validationErrors = null;\n    this.arrayMap = new Map();\n    this.dataMap = new Map();\n    this.dataRecursiveRefMap = new Map();\n    this.schemaRecursiveRefMap = new Map();\n    this.layoutRefLibrary = {};\n    this.schemaRefLibrary = {};\n    this.templateRefLibrary = {};\n    this.formOptions = cloneDeep(this.defaultFormOptions);\n  }\n\n  /**\n   * 'buildRemoteError' function\n   *\n   * Example errors:\n   * {\n   *   last_name: [ {\n   *     message: 'Last name must by start with capital letter.',\n   *     code: 'capital_letter'\n   *   } ],\n   *   email: [ {\n   *     message: 'Email must be from example.com domain.',\n   *     code: 'special_domain'\n   *   }, {\n   *     message: 'Email must contain an @ symbol.',\n   *     code: 'at_symbol'\n   *   } ]\n   * }\n   * //{ErrorMessages} errors\n   */\n  buildRemoteError(errors: ErrorMessages) {\n    forEach(errors, (value, key) => {\n      if (key in this.formGroup.controls) {\n        for (const error of value) {\n          const err = {};\n          err[error['code']] = error['message'];\n          this.formGroup.get(key).setErrors(err, { emitEvent: true });\n        }\n      }\n    });\n  }\n\n  validateData(newValue: any, updateSubscriptions = true): void {\n    // Format raw form data to correct data types\n    this.data = formatFormData(\n      newValue,\n      this.dataMap,\n      this.dataRecursiveRefMap,\n      this.arrayMap,\n      this.formOptions.returnEmptyFields\n    );\n    this.isValid = this.validateFormData(this.data);\n    this.validData = this.isValid ? this.data : null;\n    const compileErrors = errors => {\n      const compiledErrors = {};\n      (errors || []).forEach(error => {\n        if (!compiledErrors[error.dataPath]) {\n          compiledErrors[error.dataPath] = [];\n        }\n        compiledErrors[error.dataPath].push(error.message);\n      });\n      return compiledErrors;\n    };\n    this.ajvErrors = this.validateFormData.errors;\n    this.validationErrors = compileErrors(this.validateFormData.errors);\n    if (updateSubscriptions) {\n      this.dataChanges.next(this.data);\n      this.isValidChanges.next(this.isValid);\n      this.validationErrorChanges.next(this.ajvErrors);\n    }\n  }\n\n  buildFormGroupTemplate(formValues: any = null, setValues = true) {\n    this.formGroupTemplate = buildFormGroupTemplate(\n      this,\n      formValues,\n      setValues\n    );\n  }\n\n  buildFormGroup() {\n    this.formGroup = <UntypedFormGroup>buildFormGroup(this.formGroupTemplate);\n    if (this.formGroup) {\n      this.compileAjvSchema();\n      this.validateData(this.formGroup.value);\n\n      // Set up observables to emit data and validation info when form data changes\n      if (this.formValueSubscription) {\n        this.formValueSubscription.unsubscribe();\n      }\n      this.formValueSubscription = this.formGroup.valueChanges.subscribe(\n        formValue => this.validateData(formValue)\n      );\n    }\n  }\n\n  buildLayout(widgetLibrary: any) {\n    this.layout = buildLayout(this, widgetLibrary);\n  }\n\n  setOptions(newOptions: any) {\n    if (isObject(newOptions)) {\n      const addOptions = cloneDeep(newOptions);\n      // Backward compatibility for 'defaultOptions' (renamed 'defautWidgetOptions')\n      if (isObject(addOptions.defaultOptions)) {\n        Object.assign(\n          this.formOptions.defautWidgetOptions,\n          addOptions.defaultOptions\n        );\n        delete addOptions.defaultOptions;\n      }\n      if (isObject(addOptions.defautWidgetOptions)) {\n        Object.assign(\n          this.formOptions.defautWidgetOptions,\n          addOptions.defautWidgetOptions\n        );\n        delete addOptions.defautWidgetOptions;\n      }\n      Object.assign(this.formOptions, addOptions);\n\n      // convert disableErrorState / disableSuccessState to enable...\n      const globalDefaults = this.formOptions.defautWidgetOptions;\n      ['ErrorState', 'SuccessState']\n        .filter(suffix => hasOwn(globalDefaults, 'disable' + suffix))\n        .forEach(suffix => {\n          globalDefaults['enable' + suffix] = !globalDefaults[\n            'disable' + suffix\n          ];\n          delete globalDefaults['disable' + suffix];\n        });\n    }\n  }\n\n  compileAjvSchema() {\n    if (!this.validateFormData) {\n      // if 'ui:order' exists in properties, move it to root before compiling with ajv\n      if (Array.isArray(this.schema.properties['ui:order'])) {\n        this.schema['ui:order'] = this.schema.properties['ui:order'];\n        delete this.schema.properties['ui:order'];\n      }\n      this.ajv.removeSchema(this.schema);\n      this.validateFormData = this.ajv.compile(this.schema);\n    }\n  }\n\n  buildSchemaFromData(data?: any, requireAllFields = false): any {\n    if (data) {\n      return buildSchemaFromData(data, requireAllFields);\n    }\n    this.schema = buildSchemaFromData(this.formValues, requireAllFields);\n  }\n\n  buildSchemaFromLayout(layout?: any): any {\n    if (layout) {\n      return buildSchemaFromLayout(layout);\n    }\n    this.schema = buildSchemaFromLayout(this.layout);\n  }\n\n  setTpldata(newTpldata: any = {}): void {\n    this.tpldata = newTpldata;\n  }\n\n  parseText(\n    text = '',\n    value: any = {},\n    values: any = {},\n    key: number | string = null\n  ): string {\n    if (!text || !/{{.+?}}/.test(text)) {\n      return text;\n    }\n    return text.replace(/{{(.+?)}}/g, (...a) =>\n      this.parseExpression(a[1], value, values, key, this.tpldata)\n    );\n  }\n\n  parseExpression(\n    expression = '',\n    value: any = {},\n    values: any = {},\n    key: number | string = null,\n    tpldata: any = null\n  ) {\n    if (typeof expression !== 'string') {\n      return '';\n    }\n    const index = typeof key === 'number' ? key + 1 + '' : key || '';\n    expression = expression.trim();\n    if (\n      (expression[0] === \"'\" || expression[0] === '\"') &&\n      expression[0] === expression[expression.length - 1] &&\n      expression.slice(1, expression.length - 1).indexOf(expression[0]) === -1\n    ) {\n      return expression.slice(1, expression.length - 1);\n    }\n    if (expression === 'idx' || expression === '$index') {\n      return index;\n    }\n    if (expression === 'value' && !hasOwn(values, 'value')) {\n      return value;\n    }\n    if (\n      ['\"', \"'\", ' ', '||', '&&', '+'].every(\n        delim => expression.indexOf(delim) === -1\n      )\n    ) {\n      const pointer = JsonPointer.parseObjectPath(expression);\n      return pointer[0] === 'value' && JsonPointer.has(value, pointer.slice(1))\n        ? JsonPointer.get(value, pointer.slice(1))\n        : pointer[0] === 'values' && JsonPointer.has(values, pointer.slice(1))\n          ? JsonPointer.get(values, pointer.slice(1))\n          : pointer[0] === 'tpldata' && JsonPointer.has(tpldata, pointer.slice(1))\n            ? JsonPointer.get(tpldata, pointer.slice(1))\n            : JsonPointer.has(values, pointer)\n              ? JsonPointer.get(values, pointer)\n              : '';\n    }\n    if (expression.indexOf('[idx]') > -1) {\n      expression = expression.replace(/\\[idx\\]/g, <string>index);\n    }\n    if (expression.indexOf('[$index]') > -1) {\n      expression = expression.replace(/\\[$index\\]/g, <string>index);\n    }\n    // TODO: Improve expression evaluation by parsing quoted strings first\n    // let expressionArray = expression.match(/([^\"']+|\"[^\"]+\"|'[^']+')/g);\n    if (expression.indexOf('||') > -1) {\n      return expression\n        .split('||')\n        .reduce(\n          (all, term) =>\n            all || this.parseExpression(term, value, values, key, tpldata),\n          ''\n        );\n    }\n    if (expression.indexOf('&&') > -1) {\n      return expression\n        .split('&&')\n        .reduce(\n          (all, term) =>\n            all && this.parseExpression(term, value, values, key, tpldata),\n          ' '\n        )\n        .trim();\n    }\n    if (expression.indexOf('+') > -1) {\n      return expression\n        .split('+')\n        .map(term => this.parseExpression(term, value, values, key, tpldata))\n        .join('');\n    }\n    return '';\n  }\n\n  setArrayItemTitle(\n    parentCtx: any = {},\n    childNode: any = null,\n    index: number = null\n  ): string {\n    const parentNode = parentCtx.layoutNode;\n    const parentValues: any = this.getFormControlValue(parentCtx);\n    const isArrayItem =\n      (parentNode.type || '').slice(-5) === 'array' && isArray(parentValues);\n    const text = JsonPointer.getFirst(\n      isArrayItem && childNode.type !== '$ref'\n        ? [\n          [childNode, '/options/legend'],\n          [childNode, '/options/title'],\n          [parentNode, '/options/title'],\n          [parentNode, '/options/legend']\n        ]\n        : [\n          [childNode, '/options/title'],\n          [childNode, '/options/legend'],\n          [parentNode, '/options/title'],\n          [parentNode, '/options/legend']\n        ]\n    );\n    if (!text) {\n      return text;\n    }\n    const childValue =\n      isArray(parentValues) && index < parentValues.length\n        ? parentValues[index]\n        : parentValues;\n    return this.parseText(text, childValue, parentValues, index);\n  }\n\n  setItemTitle(ctx: any) {\n    return !ctx.options.title && /^(\\d+|-)$/.test(ctx.layoutNode.name)\n      ? null\n      : this.parseText(\n        ctx.options.title || toTitleCase(ctx.layoutNode.name),\n        this.getFormControlValue(this),\n        (this.getFormControlGroup(this) || <any>{}).value,\n        ctx.dataIndex[ctx.dataIndex.length - 1]\n      );\n  }\n\n  evaluateCondition(layoutNode: any, dataIndex: number[]): boolean {\n    const arrayIndex = dataIndex && dataIndex[dataIndex.length - 1];\n    let result = true;\n    if (hasValue((layoutNode.options || {}).condition)) {\n      if (typeof layoutNode.options.condition === 'string') {\n        let pointer = layoutNode.options.condition;\n        if (hasValue(arrayIndex)) {\n          pointer = pointer.replace('[arrayIndex]', `[${arrayIndex}]`);\n        }\n        pointer = JsonPointer.parseObjectPath(pointer);\n        result = !!JsonPointer.get(this.data, pointer);\n        if (!result && pointer[0] === 'model') {\n          result = !!JsonPointer.get({ model: this.data }, pointer);\n        }\n      } else if (typeof layoutNode.options.condition === 'function') {\n        result = layoutNode.options.condition(this.data);\n      } else if (\n        typeof layoutNode.options.condition.functionBody === 'string'\n      ) {\n        try {\n          const dynFn = new Function(\n            'model',\n            'arrayIndices',\n            layoutNode.options.condition.functionBody\n          );\n          result = dynFn(this.data, dataIndex);\n        } catch (e) {\n          result = true;\n          console.error(\n            'condition functionBody errored out on evaluation: ' +\n            layoutNode.options.condition.functionBody\n          );\n        }\n      }\n    }\n    return result;\n  }\n\n  initializeControl(ctx: any, bind = true): boolean {\n    if (!isObject(ctx)) {\n      return false;\n    }\n    if (isEmpty(ctx.options)) {\n      ctx.options = !isEmpty((ctx.layoutNode || {}).options)\n        ? ctx.layoutNode.options\n        : cloneDeep(this.formOptions);\n    }\n    ctx.formControl = this.getFormControl(ctx);\n    ctx.boundControl = bind && !!ctx.formControl;\n    if (ctx.formControl) {\n      ctx.controlName = this.getFormControlName(ctx);\n      ctx.controlValue = ctx.formControl.value;\n      ctx.controlDisabled = ctx.formControl.disabled;\n      ctx.options.errorMessage =\n        ctx.formControl.status === 'VALID'\n          ? null\n          : this.formatErrors(\n            ctx.formControl.errors,\n            ctx.options.validationMessages\n          );\n      ctx.options.showErrors =\n        this.formOptions.validateOnRender === true ||\n        (this.formOptions.validateOnRender === 'auto' &&\n          hasValue(ctx.controlValue));\n      ctx.formControl.statusChanges.subscribe(\n        status =>\n          (ctx.options.errorMessage =\n            status === 'VALID'\n              ? null\n              : this.formatErrors(\n                ctx.formControl.errors,\n                ctx.options.validationMessages\n              ))\n      );\n      ctx.formControl.valueChanges.subscribe(value => {\n        if (!!value) {\n          ctx.controlValue = value;\n        }\n      });\n    } else {\n      ctx.controlName = ctx.layoutNode.name;\n      ctx.controlValue = ctx.layoutNode.value || null;\n      const dataPointer = this.getDataPointer(ctx);\n      if (bind && dataPointer) {\n        console.error(\n          `warning: control \"${dataPointer}\" is not bound to the Angular FormGroup.`\n        );\n      }\n    }\n    return ctx.boundControl;\n  }\n\n  formatErrors(errors: any, validationMessages: any = {}): string {\n    if (isEmpty(errors)) {\n      return null;\n    }\n    if (!isObject(validationMessages)) {\n      validationMessages = {};\n    }\n    const addSpaces = string =>\n      string[0].toUpperCase() +\n      (string.slice(1) || '')\n        .replace(/([a-z])([A-Z])/g, '$1 $2')\n        .replace(/_/g, ' ');\n    const formatError = error =>\n      typeof error === 'object'\n        ? Object.keys(error)\n          .map(key =>\n            error[key] === true\n              ? addSpaces(key)\n              : error[key] === false\n                ? 'Not ' + addSpaces(key)\n                : addSpaces(key) + ': ' + formatError(error[key])\n          )\n          .join(', ')\n        : addSpaces(error.toString());\n    const messages = [];\n    return (\n      Object.keys(errors)\n        // Hide 'required' error, unless it is the only one\n        .filter(\n          errorKey =>\n            errorKey !== 'required' || Object.keys(errors).length === 1\n        )\n        .map(errorKey =>\n          // If validationMessages is a string, return it\n          typeof validationMessages === 'string'\n            ? validationMessages\n            : // If custom error message is a function, return function result\n            typeof validationMessages[errorKey] === 'function'\n              ? validationMessages[errorKey](errors[errorKey])\n              : // If custom error message is a string, replace placeholders and return\n              typeof validationMessages[errorKey] === 'string'\n                ? // Does error message have any {{property}} placeholders?\n                !/{{.+?}}/.test(validationMessages[errorKey])\n                  ? validationMessages[errorKey]\n                  : // Replace {{property}} placeholders with values\n                  Object.keys(errors[errorKey]).reduce(\n                    (errorMessage, errorProperty) =>\n                      errorMessage.replace(\n                        new RegExp('{{' + errorProperty + '}}', 'g'),\n                        errors[errorKey][errorProperty]\n                      ),\n                    validationMessages[errorKey]\n                  )\n                : // If no custom error message, return formatted error data instead\n                addSpaces(errorKey) + ' Error: ' + formatError(errors[errorKey])\n        )\n        .join('<br>')\n    );\n  }\n\n  updateValue(ctx: any, value: any): void {\n    // Set value of current control\n    ctx.controlValue = value;\n    if (ctx.boundControl) {\n      ctx.formControl.setValue(value);\n      ctx.formControl.markAsDirty();\n    }\n    ctx.layoutNode.value = value;\n\n    // Set values of any related controls in copyValueTo array\n    if (isArray(ctx.options.copyValueTo)) {\n      for (const item of ctx.options.copyValueTo) {\n        const targetControl = getControl(this.formGroup, item);\n        if (\n          isObject(targetControl) &&\n          typeof targetControl.setValue === 'function'\n        ) {\n          targetControl.setValue(value);\n          targetControl.markAsDirty();\n        }\n      }\n    }\n  }\n\n  updateArrayCheckboxList(ctx: any, checkboxList: TitleMapItem[]): void {\n    const formArray = <UntypedFormArray>this.getFormControl(ctx);\n\n    // Remove all existing items\n    while (formArray.value.length) {\n      formArray.removeAt(0);\n    }\n\n    // Re-add an item for each checked box\n    const refPointer = removeRecursiveReferences(\n      ctx.layoutNode.dataPointer + '/-',\n      this.dataRecursiveRefMap,\n      this.arrayMap\n    );\n    for (const checkboxItem of checkboxList) {\n      if (checkboxItem.checked) {\n        const newFormControl = buildFormGroup(\n          this.templateRefLibrary[refPointer]\n        );\n        newFormControl.setValue(checkboxItem.value);\n        formArray.push(newFormControl);\n      }\n    }\n    formArray.markAsDirty();\n  }\n\n  getFormControl(ctx: any): AbstractControl {\n    if (\n      !ctx.layoutNode ||\n      !isDefined(ctx.layoutNode.dataPointer) ||\n      ctx.layoutNode.type === '$ref'\n    ) {\n      return null;\n    }\n    return getControl(this.formGroup, this.getDataPointer(ctx));\n  }\n\n  getFormControlValue(ctx: any): AbstractControl {\n    if (\n      !ctx.layoutNode ||\n      !isDefined(ctx.layoutNode.dataPointer) ||\n      ctx.layoutNode.type === '$ref'\n    ) {\n      return null;\n    }\n    const control = getControl(this.formGroup, this.getDataPointer(ctx));\n    return control ? control.value : null;\n  }\n\n  getFormControlGroup(ctx: any): UntypedFormArray | UntypedFormGroup {\n    if (!ctx.layoutNode || !isDefined(ctx.layoutNode.dataPointer)) {\n      return null;\n    }\n    return getControl(this.formGroup, this.getDataPointer(ctx), true);\n  }\n\n  getFormControlName(ctx: any): string {\n    if (\n      !ctx.layoutNode ||\n      !isDefined(ctx.layoutNode.dataPointer) ||\n      !hasValue(ctx.dataIndex)\n    ) {\n      return null;\n    }\n    return JsonPointer.toKey(this.getDataPointer(ctx));\n  }\n\n  getLayoutArray(ctx: any): any[] {\n    return JsonPointer.get(this.layout, this.getLayoutPointer(ctx), 0, -1);\n  }\n\n  getParentNode(ctx: any): any {\n    return JsonPointer.get(this.layout, this.getLayoutPointer(ctx), 0, -2);\n  }\n\n  getDataPointer(ctx: any): string {\n    if (\n      !ctx.layoutNode ||\n      !isDefined(ctx.layoutNode.dataPointer) ||\n      !hasValue(ctx.dataIndex)\n    ) {\n      return null;\n    }\n    return JsonPointer.toIndexedPointer(\n      ctx.layoutNode.dataPointer,\n      ctx.dataIndex,\n      this.arrayMap\n    );\n  }\n\n  getLayoutPointer(ctx: any): string {\n    if (!hasValue(ctx.layoutIndex)) {\n      return null;\n    }\n    return '/' + ctx.layoutIndex.join('/items/');\n  }\n\n  isControlBound(ctx: any): boolean {\n    if (\n      !ctx.layoutNode ||\n      !isDefined(ctx.layoutNode.dataPointer) ||\n      !hasValue(ctx.dataIndex)\n    ) {\n      return false;\n    }\n    const controlGroup = this.getFormControlGroup(ctx);\n    const name = this.getFormControlName(ctx);\n    return controlGroup ? hasOwn(controlGroup.controls, name) : false;\n  }\n\n  addItem(ctx: any, name?: string): boolean {\n    if (\n      !ctx.layoutNode ||\n      !isDefined(ctx.layoutNode.$ref) ||\n      !hasValue(ctx.dataIndex) ||\n      !hasValue(ctx.layoutIndex)\n    ) {\n      return false;\n    }\n\n    // Create a new Angular form control from a template in templateRefLibrary\n    const newFormGroup = buildFormGroup(\n      this.templateRefLibrary[ctx.layoutNode.$ref]\n    );\n\n    // Add the new form control to the parent formArray or formGroup\n    if (ctx.layoutNode.arrayItem) {\n      // Add new array item to formArray\n      (<UntypedFormArray>this.getFormControlGroup(ctx)).push(newFormGroup);\n    } else {\n      // Add new $ref item to formGroup\n      (<UntypedFormGroup>this.getFormControlGroup(ctx)).addControl(\n        name || this.getFormControlName(ctx),\n        newFormGroup\n      );\n    }\n\n    // Copy a new layoutNode from layoutRefLibrary\n    const newLayoutNode = getLayoutNode(ctx.layoutNode, this);\n    newLayoutNode.arrayItem = ctx.layoutNode.arrayItem;\n    if (ctx.layoutNode.arrayItemType) {\n      newLayoutNode.arrayItemType = ctx.layoutNode.arrayItemType;\n    } else {\n      delete newLayoutNode.arrayItemType;\n    }\n    if (name) {\n      newLayoutNode.name = name;\n      newLayoutNode.dataPointer += '/' + JsonPointer.escape(name);\n      newLayoutNode.options.title = fixTitle(name);\n    }\n\n    // Add the new layoutNode to the form layout\n    JsonPointer.insert(this.layout, this.getLayoutPointer(ctx), newLayoutNode);\n\n    return true;\n  }\n\n  moveArrayItem(ctx: any, oldIndex: number, newIndex: number): boolean {\n    if (\n      !ctx.layoutNode ||\n      !isDefined(ctx.layoutNode.dataPointer) ||\n      !hasValue(ctx.dataIndex) ||\n      !hasValue(ctx.layoutIndex) ||\n      !isDefined(oldIndex) ||\n      !isDefined(newIndex) ||\n      oldIndex === newIndex\n    ) {\n      return false;\n    }\n\n    // Move item in the formArray\n    const formArray = <UntypedFormArray>this.getFormControlGroup(ctx);\n    const arrayItem = formArray.at(oldIndex);\n    formArray.removeAt(oldIndex);\n    formArray.insert(newIndex, arrayItem);\n    formArray.updateValueAndValidity();\n\n    // Move layout item\n    const layoutArray = this.getLayoutArray(ctx);\n    layoutArray.splice(newIndex, 0, layoutArray.splice(oldIndex, 1)[0]);\n    return true;\n  }\n\n  removeItem(ctx: any): boolean {\n    if (\n      !ctx.layoutNode ||\n      !isDefined(ctx.layoutNode.dataPointer) ||\n      !hasValue(ctx.dataIndex) ||\n      !hasValue(ctx.layoutIndex)\n    ) {\n      return false;\n    }\n\n    // Remove the Angular form control from the parent formArray or formGroup\n    if (ctx.layoutNode.arrayItem) {\n      // Remove array item from formArray\n      (<UntypedFormArray>this.getFormControlGroup(ctx)).removeAt(\n        ctx.dataIndex[ctx.dataIndex.length - 1]\n      );\n    } else {\n      // Remove $ref item from formGroup\n      (<UntypedFormGroup>this.getFormControlGroup(ctx)).removeControl(\n        this.getFormControlName(ctx)\n      );\n    }\n\n    // Remove layoutNode from layout\n    JsonPointer.remove(this.layout, this.getLayoutPointer(ctx));\n    return true;\n  }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class Framework {\n  name: string;\n  framework: any;\n  widgets?: { [key: string]: any } = {};\n  stylesheets?: string[] = [];\n  scripts?: string[] = [];\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  Input,\n  OnInit\n  } from '@angular/core';\nimport { JsonSchemaFormService } from '../json-schema-form.service';\n\n\n@Component({\n  // tslint:disable-next-line:component-selector\n  selector: 'add-reference-widget',\n  template: `\n    <button *ngIf=\"showAddButton\"\n      [class]=\"options?.fieldHtmlClass || ''\"\n      [disabled]=\"options?.readonly\"\n      (click)=\"addItem($event)\">\n      <span *ngIf=\"options?.icon\" [class]=\"options?.icon\"></span>\n      <span *ngIf=\"options?.title\" [innerHTML]=\"buttonText\"></span>\n    </button>`,\n    changeDetection: ChangeDetectionStrategy.Default,\n})\nexport class AddReferenceComponent implements OnInit {\n  options: any;\n  itemCount: number;\n  previousLayoutIndex: number[];\n  previousDataIndex: number[];\n  @Input() layoutNode: any;\n  @Input() layoutIndex: number[];\n  @Input() dataIndex: number[];\n\n  constructor(\n    private jsf: JsonSchemaFormService\n  ) { }\n\n  ngOnInit() {\n    this.options = this.layoutNode.options || {};\n  }\n\n  get showAddButton(): boolean {\n    return !this.layoutNode.arrayItem ||\n      this.layoutIndex[this.layoutIndex.length - 1] < this.options.maxItems;\n  }\n\n  addItem(event) {\n    event.preventDefault();\n    this.jsf.addItem(this);\n  }\n\n  get buttonText(): string {\n    const parent: any = {\n      dataIndex: this.dataIndex.slice(0, -1),\n      layoutIndex: this.layoutIndex.slice(0, -1),\n      layoutNode: this.jsf.getParentNode(this)\n    };\n    return parent.layoutNode.add ||\n      this.jsf.setArrayItemTitle(parent, this.layoutNode, this.itemCount);\n  }\n}\n","import { AbstractControl } from '@angular/forms';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { JsonSchemaFormService } from '../json-schema-form.service';\n\n\n@Component({\n  // tslint:disable-next-line:component-selector\n  selector: 'button-widget',\n  template: `\n    <div\n      [class]=\"options?.htmlClass || ''\">\n      <button\n        [attr.readonly]=\"options?.readonly ? 'readonly' : null\"\n        [attr.aria-describedby]=\"'control' + layoutNode?._id + 'Status'\"\n        [class]=\"options?.fieldHtmlClass || ''\"\n        [disabled]=\"controlDisabled\"\n        [name]=\"controlName\"\n        [type]=\"layoutNode?.type\"\n        [value]=\"controlValue\"\n        (click)=\"updateValue($event)\">\n        <span *ngIf=\"options?.icon || options?.title\"\n          [class]=\"options?.icon\"\n          [innerHTML]=\"options?.title\"></span>\n      </button>\n    </div>`,\n})\nexport class ButtonComponent implements OnInit {\n  formControl: AbstractControl;\n  controlName: string;\n  controlValue: any;\n  controlDisabled = false;\n  boundControl = false;\n  options: any;\n  @Input() layoutNode: any;\n  @Input() layoutIndex: number[];\n  @Input() dataIndex: number[];\n\n  constructor(\n    private jsf: JsonSchemaFormService\n  ) { }\n\n  ngOnInit() {\n    this.options = this.layoutNode.options || {};\n    this.jsf.initializeControl(this);\n  }\n\n  updateValue(event) {\n    if (typeof this.options.onClick === 'function') {\n      this.options.onClick(event);\n    } else {\n      this.jsf.updateValue(this, event.target.value);\n    }\n  }\n}\n","import { AbstractControl } from '@angular/forms';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { JsonSchemaFormService } from '../json-schema-form.service';\n\n\n@Component({\n  // tslint:disable-next-line:component-selector\n  selector: 'checkbox-widget',\n  template: `\n    <label\n      [attr.for]=\"'control' + layoutNode?._id\"\n      [class]=\"options?.itemLabelHtmlClass || ''\">\n      <input *ngIf=\"boundControl\"\n        [formControl]=\"formControl\"\n        [attr.aria-describedby]=\"'control' + layoutNode?._id + 'Status'\"\n        [class]=\"(options?.fieldHtmlClass || '') + (isChecked ?\n          (' ' + (options?.activeClass || '') + ' ' + (options?.style?.selected || '')) :\n          (' ' + (options?.style?.unselected || '')))\"\n        [id]=\"'control' + layoutNode?._id\"\n        [name]=\"controlName\"\n        [readonly]=\"options?.readonly ? 'readonly' : null\"\n        type=\"checkbox\">\n      <input *ngIf=\"!boundControl\"\n        [attr.aria-describedby]=\"'control' + layoutNode?._id + 'Status'\"\n        [checked]=\"isChecked ? 'checked' : null\"\n        [class]=\"(options?.fieldHtmlClass || '') + (isChecked ?\n          (' ' + (options?.activeClass || '') + ' ' + (options?.style?.selected || '')) :\n          (' ' + (options?.style?.unselected || '')))\"\n        [disabled]=\"controlDisabled\"\n        [id]=\"'control' + layoutNode?._id\"\n        [name]=\"controlName\"\n        [readonly]=\"options?.readonly ? 'readonly' : null\"\n        [value]=\"controlValue\"\n        type=\"checkbox\"\n        (change)=\"updateValue($event)\">\n      <span *ngIf=\"options?.title\"\n        [style.display]=\"options?.notitle ? 'none' : ''\"\n        [innerHTML]=\"options?.title\"></span>\n    </label>`,\n})\nexport class CheckboxComponent implements OnInit {\n  formControl: AbstractControl;\n  controlName: string;\n  controlValue: any;\n  controlDisabled = false;\n  boundControl = false;\n  options: any;\n  trueValue: any = true;\n  falseValue: any = false;\n  @Input() layoutNode: any;\n  @Input() layoutIndex: number[];\n  @Input() dataIndex: number[];\n\n  constructor(\n    private jsf: JsonSchemaFormService\n  ) { }\n\n  ngOnInit() {\n    this.options = this.layoutNode.options || {};\n    this.jsf.initializeControl(this);\n    if (this.controlValue === null || this.controlValue === undefined) {\n      this.controlValue = this.options.title;\n    }\n  }\n\n  updateValue(event) {\n    event.preventDefault();\n    this.jsf.updateValue(this, event.target.checked ? this.trueValue : this.falseValue);\n  }\n\n  get isChecked() {\n    return this.jsf.getFormControlValue(this) === this.trueValue;\n  }\n}\n","import { AbstractControl } from '@angular/forms';\nimport { buildTitleMap } from '../shared';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { JsonSchemaFormService, TitleMapItem } from '../json-schema-form.service';\n\n\n@Component({\n  // tslint:disable-next-line:component-selector\n  selector: 'checkboxes-widget',\n  template: `\n    <label *ngIf=\"options?.title\"\n      [class]=\"options?.labelHtmlClass || ''\"\n      [style.display]=\"options?.notitle ? 'none' : ''\"\n      [innerHTML]=\"options?.title\"></label>\n\n    <!-- 'horizontal' = checkboxes-inline or checkboxbuttons -->\n    <div *ngIf=\"layoutOrientation === 'horizontal'\" [class]=\"options?.htmlClass || ''\">\n      <label *ngFor=\"let checkboxItem of checkboxList\"\n        [attr.for]=\"'control' + layoutNode?._id + '/' + checkboxItem.value\"\n        [class]=\"(options?.itemLabelHtmlClass || '') + (checkboxItem.checked ?\n          (' ' + (options?.activeClass || '') + ' ' + (options?.style?.selected || '')) :\n          (' ' + (options?.style?.unselected || '')))\">\n        <input type=\"checkbox\"\n          [attr.required]=\"options?.required\"\n          [checked]=\"checkboxItem.checked\"\n          [class]=\"options?.fieldHtmlClass || ''\"\n          [disabled]=\"controlDisabled\"\n          [id]=\"'control' + layoutNode?._id + '/' + checkboxItem.value\"\n          [name]=\"checkboxItem?.name\"\n          [readonly]=\"options?.readonly ? 'readonly' : null\"\n          [value]=\"checkboxItem.value\"\n          (change)=\"updateValue($event)\">\n        <span [innerHTML]=\"checkboxItem.name\"></span>\n      </label>\n    </div>\n\n    <!-- 'vertical' = regular checkboxes -->\n    <div *ngIf=\"layoutOrientation === 'vertical'\">\n      <div *ngFor=\"let checkboxItem of checkboxList\" [class]=\"options?.htmlClass || ''\">\n        <label\n          [attr.for]=\"'control' + layoutNode?._id + '/' + checkboxItem.value\"\n          [class]=\"(options?.itemLabelHtmlClass || '') + (checkboxItem.checked ?\n            (' ' + (options?.activeClass || '') + ' ' + (options?.style?.selected || '')) :\n            (' ' + (options?.style?.unselected || '')))\">\n          <input type=\"checkbox\"\n            [attr.required]=\"options?.required\"\n            [checked]=\"checkboxItem.checked\"\n            [class]=\"options?.fieldHtmlClass || ''\"\n            [disabled]=\"controlDisabled\"\n            [id]=\"options?.name + '/' + checkboxItem.value\"\n            [name]=\"checkboxItem?.name\"\n            [readonly]=\"options?.readonly ? 'readonly' : null\"\n            [value]=\"checkboxItem.value\"\n            (change)=\"updateValue($event)\">\n          <span [innerHTML]=\"checkboxItem?.name\"></span>\n        </label>\n      </div>\n    </div>`,\n})\nexport class CheckboxesComponent implements OnInit {\n  formControl: AbstractControl;\n  controlName: string;\n  controlValue: any;\n  controlDisabled = false;\n  boundControl = false;\n  options: any;\n  layoutOrientation: string;\n  formArray: AbstractControl;\n  checkboxList: TitleMapItem[] = [];\n  @Input() layoutNode: any;\n  @Input() layoutIndex: number[];\n  @Input() dataIndex: number[];\n\n  constructor(\n    private jsf: JsonSchemaFormService\n  ) { }\n\n  ngOnInit() {\n    this.options = this.layoutNode.options || {};\n    this.layoutOrientation = (this.layoutNode.type === 'checkboxes-inline' ||\n      this.layoutNode.type === 'checkboxbuttons') ? 'horizontal' : 'vertical';\n    this.jsf.initializeControl(this);\n    this.checkboxList = buildTitleMap(\n      this.options.titleMap || this.options.enumNames, this.options.enum, true\n    );\n    if (this.boundControl) {\n      const formArray = this.jsf.getFormControl(this);\n      this.checkboxList.forEach(checkboxItem =>\n        checkboxItem.checked = formArray.value.includes(checkboxItem.value)\n      );\n    }\n  }\n\n  updateValue(event) {\n    for (const checkboxItem of this.checkboxList) {\n      if (event.target.value === checkboxItem.value) {\n        checkboxItem.checked = event.target.checked;\n      }\n    }\n    if (this.boundControl) {\n      this.jsf.updateArrayCheckboxList(this, this.checkboxList);\n    }\n  }\n}\n","import { AbstractControl } from '@angular/forms';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { JsonSchemaFormService } from '../json-schema-form.service';\n\n\n// TODO: Add this control\n\n@Component({\n  // tslint:disable-next-line:component-selector\n  selector: 'file-widget',\n  template: ``,\n})\nexport class FileComponent implements OnInit {\n  formControl: AbstractControl;\n  controlName: string;\n  controlValue: any;\n  controlDisabled = false;\n  boundControl = false;\n  options: any;\n  @Input() layoutNode: any;\n  @Input() layoutIndex: number[];\n  @Input() dataIndex: number[];\n\n  constructor(\n    private jsf: JsonSchemaFormService\n  ) { }\n\n  ngOnInit() {\n    this.options = this.layoutNode.options || {};\n    this.jsf.initializeControl(this);\n  }\n\n  updateValue(event) {\n    this.jsf.updateValue(this, event.target.value);\n  }\n}\n","import { AbstractControl } from '@angular/forms';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { JsonSchemaFormService } from '../json-schema-form.service';\n\n\n@Component({\n  // tslint:disable-next-line:component-selector\n  selector: 'input-widget',\n  template: `\n    <div [class]=\"options?.htmlClass || ''\">\n      <label *ngIf=\"options?.title\"\n        [attr.for]=\"'control' + layoutNode?._id\"\n        [class]=\"options?.labelHtmlClass || ''\"\n        [style.display]=\"options?.notitle ? 'none' : ''\"\n        [innerHTML]=\"options?.title\"></label>\n      <input *ngIf=\"boundControl\"\n        [formControl]=\"formControl\"\n        [attr.aria-describedby]=\"'control' + layoutNode?._id + 'Status'\"\n        [attr.list]=\"'control' + layoutNode?._id + 'Autocomplete'\"\n        [attr.maxlength]=\"options?.maxLength\"\n        [attr.minlength]=\"options?.minLength\"\n        [attr.pattern]=\"options?.pattern\"\n        [attr.placeholder]=\"options?.placeholder\"\n        [attr.required]=\"options?.required\"\n        [class]=\"options?.fieldHtmlClass || ''\"\n        [id]=\"'control' + layoutNode?._id\"\n        [name]=\"controlName\"\n        [readonly]=\"options?.readonly ? 'readonly' : null\"\n        [type]=\"layoutNode?.type\">\n      <input *ngIf=\"!boundControl\"\n        [attr.aria-describedby]=\"'control' + layoutNode?._id + 'Status'\"\n        [attr.list]=\"'control' + layoutNode?._id + 'Autocomplete'\"\n        [attr.maxlength]=\"options?.maxLength\"\n        [attr.minlength]=\"options?.minLength\"\n        [attr.pattern]=\"options?.pattern\"\n        [attr.placeholder]=\"options?.placeholder\"\n        [attr.required]=\"options?.required\"\n        [class]=\"options?.fieldHtmlClass || ''\"\n        [disabled]=\"controlDisabled\"\n        [id]=\"'control' + layoutNode?._id\"\n        [name]=\"controlName\"\n        [readonly]=\"options?.readonly ? 'readonly' : null\"\n        [type]=\"layoutNode?.type\"\n        [value]=\"controlValue\"\n        (input)=\"updateValue($event)\">\n        <datalist *ngIf=\"options?.typeahead?.source\"\n          [id]=\"'control' + layoutNode?._id + 'Autocomplete'\">\n          <option *ngFor=\"let word of options?.typeahead?.source\" [value]=\"word\">\n        </datalist>\n    </div>`,\n})\nexport class InputComponent implements OnInit {\n  formControl: AbstractControl;\n  controlName: string;\n  controlValue: string;\n  controlDisabled = false;\n  boundControl = false;\n  options: any;\n  autoCompleteList: string[] = [];\n  @Input() layoutNode: any;\n  @Input() layoutIndex: number[];\n  @Input() dataIndex: number[];\n\n  constructor(\n    private jsf: JsonSchemaFormService\n  ) { }\n\n  ngOnInit() {\n    this.options = this.layoutNode.options || {};\n    this.jsf.initializeControl(this);\n  }\n\n  updateValue(event) {\n    this.jsf.updateValue(this, event.target.value);\n  }\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { JsonSchemaFormService } from '../json-schema-form.service';\n\n\n@Component({\n  // tslint:disable-next-line:component-selector\n  selector: 'message-widget',\n  template: `\n    <span *ngIf=\"message\"\n      [class]=\"options?.labelHtmlClass || ''\"\n      [innerHTML]=\"message\"></span>`,\n})\nexport class MessageComponent implements OnInit {\n  options: any;\n  message: string = null;\n  @Input() layoutNode: any;\n  @Input() layoutIndex: number[];\n  @Input() dataIndex: number[];\n\n  constructor(\n    private jsf: JsonSchemaFormService\n  ) { }\n\n  ngOnInit() {\n    this.options = this.layoutNode.options || {};\n    this.message = this.options.help || this.options.helpvalue ||\n      this.options.msg || this.options.message;\n  }\n}\n","import { Component, Input } from '@angular/core';\n\n@Component({\n  // tslint:disable-next-line:component-selector\n  selector: 'none-widget',\n  template: ``,\n})\nexport class NoneComponent {\n  @Input() layoutNode: any;\n  @Input() layoutIndex: number[];\n  @Input() dataIndex: number[];\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { AbstractControl } from '@angular/forms';\n\nimport { JsonSchemaFormService } from '../json-schema-form.service';\n\n@Component({\n  // tslint:disable-next-line:component-selector\n  selector: 'number-widget',\n  template: `\n    <div [class]=\"options?.htmlClass || ''\">\n      <label *ngIf=\"options?.title\"\n        [attr.for]=\"'control' + layoutNode?._id\"\n        [class]=\"options?.labelHtmlClass || ''\"\n        [style.display]=\"options?.notitle ? 'none' : ''\"\n        [innerHTML]=\"options?.title\"></label>\n      <input *ngIf=\"boundControl\"\n        [formControl]=\"formControl\"\n        [attr.aria-describedby]=\"'control' + layoutNode?._id + 'Status'\"\n        [attr.max]=\"options?.maximum\"\n        [attr.min]=\"options?.minimum\"\n        [attr.placeholder]=\"options?.placeholder\"\n        [attr.required]=\"options?.required\"\n        [attr.readonly]=\"options?.readonly ? 'readonly' : null\"\n        [attr.step]=\"options?.multipleOf || options?.step || 'any'\"\n        [class]=\"options?.fieldHtmlClass || ''\"\n        [id]=\"'control' + layoutNode?._id\"\n        [name]=\"controlName\"\n        [readonly]=\"options?.readonly ? 'readonly' : null\"\n        [title]=\"lastValidNumber\"\n        [type]=\"layoutNode?.type === 'range' ? 'range' : 'number'\">\n      <input *ngIf=\"!boundControl\"\n        [attr.aria-describedby]=\"'control' + layoutNode?._id + 'Status'\"\n        [attr.max]=\"options?.maximum\"\n        [attr.min]=\"options?.minimum\"\n        [attr.placeholder]=\"options?.placeholder\"\n        [attr.required]=\"options?.required\"\n        [attr.readonly]=\"options?.readonly ? 'readonly' : null\"\n        [attr.step]=\"options?.multipleOf || options?.step || 'any'\"\n        [class]=\"options?.fieldHtmlClass || ''\"\n        [disabled]=\"controlDisabled\"\n        [id]=\"'control' + layoutNode?._id\"\n        [name]=\"controlName\"\n        [readonly]=\"options?.readonly ? 'readonly' : null\"\n        [title]=\"lastValidNumber\"\n        [type]=\"layoutNode?.type === 'range' ? 'range' : 'number'\"\n        [value]=\"controlValue\"\n        (input)=\"updateValue($event)\">\n      <span *ngIf=\"layoutNode?.type === 'range'\" [innerHTML]=\"controlValue\"></span>\n    </div>`,\n})\nexport class NumberComponent implements OnInit {\n  formControl: AbstractControl;\n  controlName: string;\n  controlValue: any;\n  controlDisabled = false;\n  boundControl = false;\n  options: any;\n  allowNegative = true;\n  allowDecimal = true;\n  allowExponents = false;\n  lastValidNumber = '';\n  @Input() layoutNode: any;\n  @Input() layoutIndex: number[];\n  @Input() dataIndex: number[];\n\n  constructor(\n    private jsf: JsonSchemaFormService\n  ) { }\n\n  ngOnInit() {\n    this.options = this.layoutNode.options || {};\n    this.jsf.initializeControl(this);\n    if (this.layoutNode.dataType === 'integer') { this.allowDecimal = false; }\n  }\n\n  updateValue(event) {\n    this.jsf.updateValue(this, event.target.value);\n  }\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { AbstractControl } from '@angular/forms';\n\nimport { JsonSchemaFormService } from '../json-schema-form.service';\n\n// TODO: Add this control\n\n@Component({\n  // tslint:disable-next-line:component-selector\n  selector: 'one-of-widget',\n  template: ``,\n})\nexport class OneOfComponent implements OnInit {\n  formControl: AbstractControl;\n  controlName: string;\n  controlValue: any;\n  controlDisabled = false;\n  boundControl = false;\n  options: any;\n  @Input() layoutNode: any;\n  @Input() layoutIndex: number[];\n  @Input() dataIndex: number[];\n\n  constructor(\n    private jsf: JsonSchemaFormService\n  ) { }\n\n  ngOnInit() {\n    this.options = this.layoutNode.options || {};\n    this.jsf.initializeControl(this);\n  }\n\n  updateValue(event) {\n    this.jsf.updateValue(this, event.target.value);\n  }\n}\n","import { AbstractControl } from '@angular/forms';\nimport { buildTitleMap } from '../shared';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { JsonSchemaFormService } from '../json-schema-form.service';\n\n\n@Component({\n  // tslint:disable-next-line:component-selector\n  selector: 'radios-widget',\n  template: `\n    <label *ngIf=\"options?.title\"\n      [attr.for]=\"'control' + layoutNode?._id\"\n      [class]=\"options?.labelHtmlClass || ''\"\n      [style.display]=\"options?.notitle ? 'none' : ''\"\n      [innerHTML]=\"options?.title\"></label>\n\n    <!-- 'horizontal' = radios-inline or radiobuttons -->\n    <div *ngIf=\"layoutOrientation === 'horizontal'\"\n      [class]=\"options?.htmlClass || ''\">\n      <label *ngFor=\"let radioItem of radiosList\"\n        [attr.for]=\"'control' + layoutNode?._id + '/' + radioItem?.value\"\n        [class]=\"(options?.itemLabelHtmlClass || '') +\n          ((controlValue + '' === radioItem?.value + '') ?\n          (' ' + (options?.activeClass || '') + ' ' + (options?.style?.selected || '')) :\n          (' ' + (options?.style?.unselected || '')))\">\n        <input type=\"radio\"\n          [attr.aria-describedby]=\"'control' + layoutNode?._id + 'Status'\"\n          [attr.readonly]=\"options?.readonly ? 'readonly' : null\"\n          [attr.required]=\"options?.required\"\n          [checked]=\"radioItem?.value === controlValue\"\n          [class]=\"options?.fieldHtmlClass || ''\"\n          [disabled]=\"controlDisabled\"\n          [id]=\"'control' + layoutNode?._id + '/' + radioItem?.value\"\n          [name]=\"controlName\"\n          [value]=\"radioItem?.value\"\n          (change)=\"updateValue($event)\">\n        <span [innerHTML]=\"radioItem?.name\"></span>\n      </label>\n    </div>\n\n    <!-- 'vertical' = regular radios -->\n    <div *ngIf=\"layoutOrientation !== 'horizontal'\">\n      <div *ngFor=\"let radioItem of radiosList\"\n        [class]=\"options?.htmlClass || ''\">\n        <label\n          [attr.for]=\"'control' + layoutNode?._id + '/' + radioItem?.value\"\n          [class]=\"(options?.itemLabelHtmlClass || '') +\n            ((controlValue + '' === radioItem?.value + '') ?\n            (' ' + (options?.activeClass || '') + ' ' + (options?.style?.selected || '')) :\n            (' ' + (options?.style?.unselected || '')))\">\n          <input type=\"radio\"\n            [attr.aria-describedby]=\"'control' + layoutNode?._id + 'Status'\"\n            [attr.readonly]=\"options?.readonly ? 'readonly' : null\"\n            [attr.required]=\"options?.required\"\n            [checked]=\"radioItem?.value === controlValue\"\n            [class]=\"options?.fieldHtmlClass || ''\"\n            [disabled]=\"controlDisabled\"\n            [id]=\"'control' + layoutNode?._id + '/' + radioItem?.value\"\n            [name]=\"controlName\"\n            [value]=\"radioItem?.value\"\n            (change)=\"updateValue($event)\">\n          <span [innerHTML]=\"radioItem?.name\"></span>\n        </label>\n      </div>\n    </div>`,\n})\nexport class RadiosComponent implements OnInit {\n  formControl: AbstractControl;\n  controlName: string;\n  controlValue: any;\n  controlDisabled = false;\n  boundControl = false;\n  options: any;\n  layoutOrientation = 'vertical';\n  radiosList: any[] = [];\n  @Input() layoutNode: any;\n  @Input() layoutIndex: number[];\n  @Input() dataIndex: number[];\n\n  constructor(\n    private jsf: JsonSchemaFormService\n  ) { }\n\n  ngOnInit() {\n    this.options = this.layoutNode.options || {};\n    if (this.layoutNode.type === 'radios-inline' ||\n      this.layoutNode.type === 'radiobuttons'\n    ) {\n      this.layoutOrientation = 'horizontal';\n    }\n    this.radiosList = buildTitleMap(\n      this.options.titleMap || this.options.enumNames,\n      this.options.enum, true\n    );\n    this.jsf.initializeControl(this);\n  }\n\n  updateValue(event) {\n    this.jsf.updateValue(this, event.target.value);\n  }\n}\n","import {\n  Component, ComponentFactoryResolver, ComponentRef, Input,\n  OnChanges, OnInit, ViewChild, ViewContainerRef\n} from '@angular/core';\n\nimport { JsonSchemaFormService } from '../json-schema-form.service';\n\n@Component({\n  // tslint:disable-next-line:component-selector\n  selector: 'select-framework-widget',\n  template: `<div #widgetContainer></div>`,\n})\nexport class SelectFrameworkComponent implements OnChanges, OnInit {\n  newComponent: ComponentRef<any> = null;\n  @Input() layoutNode: any;\n  @Input() layoutIndex: number[];\n  @Input() dataIndex: number[];\n  @ViewChild('widgetContainer', {\n      read: ViewContainerRef,\n      static: true })\n    widgetContainer: ViewContainerRef;\n\n  constructor(\n    private componentFactory: ComponentFactoryResolver,\n    private jsf: JsonSchemaFormService\n  ) { }\n\n  ngOnInit() {\n    this.updateComponent();\n  }\n\n  ngOnChanges() {\n    this.updateComponent();\n  }\n\n  updateComponent() {\n    if (this.widgetContainer && !this.newComponent && this.jsf.framework) {\n      this.newComponent = this.widgetContainer.createComponent(\n        this.componentFactory.resolveComponentFactory(this.jsf.framework)\n      );\n    }\n    if (this.newComponent) {\n      for (const input of ['layoutNode', 'layoutIndex', 'dataIndex']) {\n        this.newComponent.instance[input] = this[input];\n      }\n    }\n  }\n}\n","import {\n  Directive,\n  ElementRef,\n  Input,\n  NgZone,\n  OnInit\n  } from '@angular/core';\nimport { JsonSchemaFormService } from '../json-schema-form.service';\n\n\n/**\n * OrderableDirective\n *\n * Enables array elements to be reordered by dragging and dropping.\n *\n * Only works for arrays that have at least two elements.\n *\n * Also detects arrays-within-arrays, and correctly moves either\n * the child array element or the parent array element,\n * depending on the drop targert.\n *\n * Listeners for movable element being dragged:\n * - dragstart: add 'dragging' class to element, set effectAllowed = 'move'\n * - dragover: set dropEffect = 'move'\n * - dragend: remove 'dragging' class from element\n *\n * Listeners for stationary items being dragged over:\n * - dragenter: add 'drag-target-...' classes to element\n * - dragleave: remove 'drag-target-...' classes from element\n * - drop: remove 'drag-target-...' classes from element, move dropped array item\n */\n@Directive({\n  // tslint:disable-next-line:directive-selector\n  selector: '[orderable]',\n})\nexport class OrderableDirective implements OnInit {\n  arrayLayoutIndex: string;\n  element: any;\n  overParentElement = false;\n  overChildElement = false;\n  @Input() orderable: boolean;\n  @Input() layoutNode: any;\n  @Input() layoutIndex: number[];\n  @Input() dataIndex: number[];\n\n  constructor(\n    private elementRef: ElementRef,\n    private jsf: JsonSchemaFormService,\n    private ngZone: NgZone\n  ) { }\n\n  ngOnInit() {\n    if (this.orderable && this.layoutNode && this.layoutIndex && this.dataIndex) {\n      this.element = this.elementRef.nativeElement;\n      this.element.draggable = true;\n      this.arrayLayoutIndex = 'move:' + this.layoutIndex.slice(0, -1).toString();\n\n      this.ngZone.runOutsideAngular(() => {\n\n        // Listeners for movable element being dragged:\n\n        this.element.addEventListener('dragstart', (event) => {\n          event.dataTransfer.effectAllowed = 'move';\n          event.dataTransfer.setData('text', '');\n          // Hack to bypass stupid HTML drag-and-drop dataTransfer protection\n          // so drag source info will be available on dragenter\n          const sourceArrayIndex = this.dataIndex[this.dataIndex.length - 1];\n          sessionStorage.setItem(this.arrayLayoutIndex, sourceArrayIndex + '');\n        });\n\n        this.element.addEventListener('dragover', (event) => {\n          if (event.preventDefault) { event.preventDefault(); }\n          event.dataTransfer.dropEffect = 'move';\n          return false;\n        });\n\n        // Listeners for stationary items being dragged over:\n\n        this.element.addEventListener('dragenter', (event) => {\n          // Part 1 of a hack, inspired by Dragster, to simulate mouseover and mouseout\n          // behavior while dragging items - http://bensmithett.github.io/dragster/\n          if (this.overParentElement) {\n            return this.overChildElement = true;\n          } else {\n            this.overParentElement = true;\n          }\n\n          const sourceArrayIndex = sessionStorage.getItem(this.arrayLayoutIndex);\n          if (sourceArrayIndex !== null) {\n            if (this.dataIndex[this.dataIndex.length - 1] < +sourceArrayIndex) {\n              this.element.classList.add('drag-target-top');\n            } else if (this.dataIndex[this.dataIndex.length - 1] > +sourceArrayIndex) {\n              this.element.classList.add('drag-target-bottom');\n            }\n          }\n        });\n\n        this.element.addEventListener('dragleave', (event) => {\n          // Part 2 of the Dragster hack\n          if (this.overChildElement) {\n            this.overChildElement = false;\n          } else if (this.overParentElement) {\n            this.overParentElement = false;\n          }\n\n          const sourceArrayIndex = sessionStorage.getItem(this.arrayLayoutIndex);\n          if (!this.overParentElement && !this.overChildElement && sourceArrayIndex !== null) {\n            this.element.classList.remove('drag-target-top');\n            this.element.classList.remove('drag-target-bottom');\n          }\n        });\n\n        this.element.addEventListener('drop', (event) => {\n          this.element.classList.remove('drag-target-top');\n          this.element.classList.remove('drag-target-bottom');\n          // Confirm that drop target is another item in the same array as source item\n          const sourceArrayIndex = sessionStorage.getItem(this.arrayLayoutIndex);\n          const destArrayIndex = this.dataIndex[this.dataIndex.length - 1];\n          if (sourceArrayIndex !== null && +sourceArrayIndex !== destArrayIndex) {\n            // Move array item\n            this.jsf.moveArrayItem(this, +sourceArrayIndex, destArrayIndex);\n          }\n          sessionStorage.removeItem(this.arrayLayoutIndex);\n          return false;\n        });\n\n      });\n    }\n  }\n}\n","import { Component, Input } from '@angular/core';\nimport { JsonSchemaFormService } from '../json-schema-form.service';\n\n\n@Component({\n  // tslint:disable-next-line:component-selector\n  selector: 'root-widget',\n  template: `\n    <div *ngFor=\"let layoutItem of layout; let i = index\"\n      [class.form-flex-item]=\"isFlexItem\"\n      [style.align-self]=\"(layoutItem.options || {})['align-self']\"\n      [style.flex-basis]=\"getFlexAttribute(layoutItem, 'flex-basis')\"\n      [style.flex-grow]=\"getFlexAttribute(layoutItem, 'flex-grow')\"\n      [style.flex-shrink]=\"getFlexAttribute(layoutItem, 'flex-shrink')\"\n      [style.order]=\"(layoutItem.options || {}).order\">\n      <div\n        [dataIndex]=\"layoutItem?.arrayItem ? (dataIndex || []).concat(i) : (dataIndex || [])\"\n        [layoutIndex]=\"(layoutIndex || []).concat(i)\"\n        [layoutNode]=\"layoutItem\"\n        [orderable]=\"isDraggable(layoutItem)\">\n        <select-framework-widget *ngIf=\"showWidget(layoutItem)\"\n          [dataIndex]=\"layoutItem?.arrayItem ? (dataIndex || []).concat(i) : (dataIndex || [])\"\n          [layoutIndex]=\"(layoutIndex || []).concat(i)\"\n          [layoutNode]=\"layoutItem\"></select-framework-widget>\n      </div>\n    </div>`,\n  styles: [`\n    [draggable=true] {\n      transition: all 150ms cubic-bezier(.4, 0, .2, 1);\n    }\n    [draggable=true]:hover {\n      cursor: move;\n      box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.2);\n      position: relative; z-index: 10;\n      margin-top: -1px;\n      margin-left: -1px;\n      margin-right: 1px;\n      margin-bottom: 1px;\n    }\n    [draggable=true].drag-target-top {\n      box-shadow: 0 -2px 0 #000;\n      position: relative; z-index: 20;\n    }\n    [draggable=true].drag-target-bottom {\n      box-shadow: 0 2px 0 #000;\n      position: relative; z-index: 20;\n    }\n  `],\n})\nexport class RootComponent {\n  options: any;\n  @Input() dataIndex: number[];\n  @Input() layoutIndex: number[];\n  @Input() layout: any[];\n  @Input() isOrderable: boolean;\n  @Input() isFlexItem = false;\n\n  constructor(\n    private jsf: JsonSchemaFormService\n  ) { }\n\n  isDraggable(node: any): boolean {\n    return node.arrayItem && node.type !== '$ref' &&\n      node.arrayItemType === 'list' && this.isOrderable !== false;\n  }\n\n  // Set attributes for flexbox child\n  // (container attributes are set in section.component)\n  getFlexAttribute(node: any, attribute: string) {\n    const index = ['flex-grow', 'flex-shrink', 'flex-basis'].indexOf(attribute);\n    return ((node.options || {}).flex || '').split(/\\s+/)[index] ||\n      (node.options || {})[attribute] || ['1', '1', 'auto'][index];\n  }\n\n  showWidget(layoutNode: any): boolean {\n    return this.jsf.evaluateCondition(layoutNode, this.dataIndex);\n  }\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { JsonSchemaFormService } from '../json-schema-form.service';\n\n\n@Component({\n  // tslint:disable-next-line:component-selector\n  selector: 'section-widget',\n  template: `\n    <div *ngIf=\"containerType === 'div'\"\n      [class]=\"options?.htmlClass || ''\"\n      [class.expandable]=\"options?.expandable && !expanded\"\n      [class.expanded]=\"options?.expandable && expanded\">\n      <label *ngIf=\"sectionTitle\"\n        class=\"legend\"\n        [class]=\"options?.labelHtmlClass || ''\"\n        [innerHTML]=\"sectionTitle\"\n        (click)=\"toggleExpanded()\"></label>\n      <root-widget *ngIf=\"expanded\"\n        [dataIndex]=\"dataIndex\"\n        [layout]=\"layoutNode.items\"\n        [layoutIndex]=\"layoutIndex\"\n        [isFlexItem]=\"getFlexAttribute('is-flex')\"\n        [isOrderable]=\"options?.orderable\"\n        [class.form-flex-column]=\"getFlexAttribute('flex-direction') === 'column'\"\n        [class.form-flex-row]=\"getFlexAttribute('flex-direction') === 'row'\"\n        [style.align-content]=\"getFlexAttribute('align-content')\"\n        [style.align-items]=\"getFlexAttribute('align-items')\"\n        [style.display]=\"getFlexAttribute('display')\"\n        [style.flex-direction]=\"getFlexAttribute('flex-direction')\"\n        [style.flex-wrap]=\"getFlexAttribute('flex-wrap')\"\n        [style.justify-content]=\"getFlexAttribute('justify-content')\"></root-widget>\n    </div>\n    <fieldset *ngIf=\"containerType === 'fieldset'\"\n      [class]=\"options?.htmlClass || ''\"\n      [class.expandable]=\"options?.expandable && !expanded\"\n      [class.expanded]=\"options?.expandable && expanded\"\n      [disabled]=\"options?.readonly\">\n      <legend *ngIf=\"sectionTitle\"\n        class=\"legend\"\n        [class]=\"options?.labelHtmlClass || ''\"\n        [innerHTML]=\"sectionTitle\"\n        (click)=\"toggleExpanded()\"></legend>\n      <div *ngIf=\"options?.messageLocation !== 'bottom'\">\n        <p *ngIf=\"options?.description\"\n        class=\"help-block\"\n        [class]=\"options?.labelHelpBlockClass || ''\"\n        [innerHTML]=\"options?.description\"></p>\n      </div>\n      <root-widget *ngIf=\"expanded\"\n        [dataIndex]=\"dataIndex\"\n        [layout]=\"layoutNode.items\"\n        [layoutIndex]=\"layoutIndex\"\n        [isFlexItem]=\"getFlexAttribute('is-flex')\"\n        [isOrderable]=\"options?.orderable\"\n        [class.form-flex-column]=\"getFlexAttribute('flex-direction') === 'column'\"\n        [class.form-flex-row]=\"getFlexAttribute('flex-direction') === 'row'\"\n        [style.align-content]=\"getFlexAttribute('align-content')\"\n        [style.align-items]=\"getFlexAttribute('align-items')\"\n        [style.display]=\"getFlexAttribute('display')\"\n        [style.flex-direction]=\"getFlexAttribute('flex-direction')\"\n        [style.flex-wrap]=\"getFlexAttribute('flex-wrap')\"\n        [style.justify-content]=\"getFlexAttribute('justify-content')\"></root-widget>\n      <div *ngIf=\"options?.messageLocation === 'bottom'\">\n        <p *ngIf=\"options?.description\"\n        class=\"help-block\"\n        [class]=\"options?.labelHelpBlockClass || ''\"\n        [innerHTML]=\"options?.description\"></p>\n      </div>\n    </fieldset>`,\n  styles: [`\n    .legend { font-weight: bold; }\n    .expandable > legend:before, .expandable > label:before  { content: '▶'; padding-right: .3em; }\n    .expanded > legend:before, .expanded > label:before  { content: '▼'; padding-right: .2em; }\n  `],\n})\nexport class SectionComponent implements OnInit {\n  options: any;\n  expanded = true;\n  containerType: string;\n  @Input() layoutNode: any;\n  @Input() layoutIndex: number[];\n  @Input() dataIndex: number[];\n\n  constructor(\n    private jsf: JsonSchemaFormService\n  ) { }\n\n  get sectionTitle() {\n    return this.options.notitle ? null : this.jsf.setItemTitle(this);\n  }\n\n  ngOnInit() {\n    this.jsf.initializeControl(this);\n    this.options = this.layoutNode.options || {};\n    this.expanded = typeof this.options.expanded === 'boolean' ?\n      this.options.expanded : !this.options.expandable;\n    switch (this.layoutNode.type) {\n      case 'fieldset': case 'array': case 'tab': case 'advancedfieldset':\n      case 'authfieldset': case 'optionfieldset': case 'selectfieldset':\n        this.containerType = 'fieldset';\n      break;\n      default: // 'div', 'flex', 'section', 'conditional', 'actions', 'tagsinput'\n        this.containerType = 'div';\n      break;\n    }\n  }\n\n  toggleExpanded() {\n    if (this.options.expandable) { this.expanded = !this.expanded; }\n  }\n\n  // Set attributes for flexbox container\n  // (child attributes are set in root.component)\n  getFlexAttribute(attribute: string) {\n    const flexActive: boolean =\n      this.layoutNode.type === 'flex' ||\n      !!this.options.displayFlex ||\n      this.options.display === 'flex';\n    if (attribute !== 'flex' && !flexActive) { return null; }\n    switch (attribute) {\n      case 'is-flex':\n        return flexActive;\n      case 'display':\n        return flexActive ? 'flex' : 'initial';\n      case 'flex-direction': case 'flex-wrap':\n        const index = ['flex-direction', 'flex-wrap'].indexOf(attribute);\n        return (this.options['flex-flow'] || '').split(/\\s+/)[index] ||\n          this.options[attribute] || ['column', 'nowrap'][index];\n      case 'justify-content': case 'align-items': case 'align-content':\n        return this.options[attribute];\n    }\n  }\n}\n","import { AbstractControl } from '@angular/forms';\nimport { buildTitleMap, isArray } from '../shared';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { JsonSchemaFormService } from '../json-schema-form.service';\n\n\n@Component({\n  // tslint:disable-next-line:component-selector\n  selector: 'select-widget',\n  template: `\n    <div\n      [class]=\"options?.htmlClass || ''\">\n      <label *ngIf=\"options?.title\"\n        [attr.for]=\"'control' + layoutNode?._id\"\n        [class]=\"options?.labelHtmlClass || ''\"\n        [style.display]=\"options?.notitle ? 'none' : ''\"\n        [innerHTML]=\"options?.title\"></label>\n      <select *ngIf=\"boundControl\"\n        [formControl]=\"formControl\"\n        [attr.aria-describedby]=\"'control' + layoutNode?._id + 'Status'\"\n        [attr.readonly]=\"options?.readonly ? 'readonly' : null\"\n        [attr.required]=\"options?.required\"\n        [class]=\"options?.fieldHtmlClass || ''\"\n        [id]=\"'control' + layoutNode?._id\"\n        [name]=\"controlName\">\n        <ng-template ngFor let-selectItem [ngForOf]=\"selectList\">\n          <option *ngIf=\"!isArray(selectItem?.items)\"\n            [value]=\"selectItem?.value\">\n            <span [innerHTML]=\"selectItem?.name\"></span>\n          </option>\n          <optgroup *ngIf=\"isArray(selectItem?.items)\"\n            [label]=\"selectItem?.group\">\n            <option *ngFor=\"let subItem of selectItem.items\"\n              [value]=\"subItem?.value\">\n              <span [innerHTML]=\"subItem?.name\"></span>\n            </option>\n          </optgroup>\n        </ng-template>\n      </select>\n      <select *ngIf=\"!boundControl\"\n        [attr.aria-describedby]=\"'control' + layoutNode?._id + 'Status'\"\n        [attr.readonly]=\"options?.readonly ? 'readonly' : null\"\n        [attr.required]=\"options?.required\"\n        [class]=\"options?.fieldHtmlClass || ''\"\n        [disabled]=\"controlDisabled\"\n        [id]=\"'control' + layoutNode?._id\"\n        [name]=\"controlName\"\n        (change)=\"updateValue($event)\">\n        <ng-template ngFor let-selectItem [ngForOf]=\"selectList\">\n          <option *ngIf=\"!isArray(selectItem?.items)\"\n            [selected]=\"selectItem?.value === controlValue\"\n            [value]=\"selectItem?.value\">\n            <span [innerHTML]=\"selectItem?.name\"></span>\n          </option>\n          <optgroup *ngIf=\"isArray(selectItem?.items)\"\n            [label]=\"selectItem?.group\">\n            <option *ngFor=\"let subItem of selectItem.items\"\n              [attr.selected]=\"subItem?.value === controlValue\"\n              [value]=\"subItem?.value\">\n              <span [innerHTML]=\"subItem?.name\"></span>\n            </option>\n          </optgroup>\n        </ng-template>\n      </select>\n    </div>`,\n})\nexport class SelectComponent implements OnInit {\n  formControl: AbstractControl;\n  controlName: string;\n  controlValue: any;\n  controlDisabled = false;\n  boundControl = false;\n  options: any;\n  selectList: any[] = [];\n  isArray = isArray;\n  @Input() layoutNode: any;\n  @Input() layoutIndex: number[];\n  @Input() dataIndex: number[];\n\n  constructor(\n    private jsf: JsonSchemaFormService\n  ) { }\n\n  ngOnInit() {\n    this.options = this.layoutNode.options || {};\n    this.selectList = buildTitleMap(\n      this.options.titleMap || this.options.enumNames,\n      this.options.enum, !!this.options.required, !!this.options.flatList\n    );\n    this.jsf.initializeControl(this);\n  }\n\n  updateValue(event) {\n    this.jsf.updateValue(this, event.target.value);\n  }\n}\n","import {\n  Component, ComponentFactoryResolver, ComponentRef, Input,\n  OnChanges, OnInit, ViewChild, ViewContainerRef\n} from '@angular/core';\n\nimport { JsonSchemaFormService } from '../json-schema-form.service';\n\n@Component({\n  // tslint:disable-next-line:component-selector\n  selector: 'select-widget-widget',\n  template: `<div #widgetContainer></div>`,\n})\nexport class SelectWidgetComponent implements OnChanges, OnInit {\n  newComponent: ComponentRef<any> = null;\n  @Input() layoutNode: any;\n  @Input() layoutIndex: number[];\n  @Input() dataIndex: number[];\n  @ViewChild('widgetContainer', { read: ViewContainerRef, static: true })\n    widgetContainer: ViewContainerRef;\n\n  constructor(\n    private componentFactory: ComponentFactoryResolver,\n    private jsf: JsonSchemaFormService\n  ) { }\n\n  ngOnInit() {\n    this.updateComponent();\n  }\n\n  ngOnChanges() {\n    this.updateComponent();\n  }\n\n  updateComponent() {\n    if (this.widgetContainer && !this.newComponent && (this.layoutNode || {}).widget) {\n      this.newComponent = this.widgetContainer.createComponent(\n        this.componentFactory.resolveComponentFactory(this.layoutNode.widget)\n      );\n    }\n    if (this.newComponent) {\n      for (const input of ['layoutNode', 'layoutIndex', 'dataIndex']) {\n        this.newComponent.instance[input] = this[input];\n      }\n    }\n  }\n}\n","import { AbstractControl } from '@angular/forms';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { hasOwn } from '../shared/utility.functions';\nimport { JsonSchemaFormService } from '../json-schema-form.service';\n\n\n@Component({\n  // tslint:disable-next-line:component-selector\n  selector: 'submit-widget',\n  template: `\n    <div\n      [class]=\"options?.htmlClass || ''\">\n      <input\n        [attr.aria-describedby]=\"'control' + layoutNode?._id + 'Status'\"\n        [attr.readonly]=\"options?.readonly ? 'readonly' : null\"\n        [attr.required]=\"options?.required\"\n        [class]=\"options?.fieldHtmlClass || ''\"\n        [disabled]=\"controlDisabled\"\n        [id]=\"'control' + layoutNode?._id\"\n        [name]=\"controlName\"\n        [type]=\"layoutNode?.type\"\n        [value]=\"controlValue\"\n        (click)=\"updateValue($event)\">\n    </div>`,\n})\nexport class SubmitComponent implements OnInit {\n  formControl: AbstractControl;\n  controlName: string;\n  controlValue: any;\n  controlDisabled = false;\n  boundControl = false;\n  options: any;\n  @Input() layoutNode: any;\n  @Input() layoutIndex: number[];\n  @Input() dataIndex: number[];\n\n  constructor(\n    private jsf: JsonSchemaFormService\n  ) { }\n\n  ngOnInit() {\n    this.options = this.layoutNode.options || {};\n    this.jsf.initializeControl(this);\n    if (hasOwn(this.options, 'disabled')) {\n      this.controlDisabled = this.options.disabled;\n    } else if (this.jsf.formOptions.disableInvalidSubmit) {\n      this.controlDisabled = !this.jsf.isValid;\n      this.jsf.isValidChanges.subscribe(isValid => this.controlDisabled = !isValid);\n    }\n    if (this.controlValue === null || this.controlValue === undefined) {\n      this.controlValue = this.options.title;\n    }\n  }\n\n  updateValue(event) {\n    if (typeof this.options.onClick === 'function') {\n      this.options.onClick(event);\n    } else {\n      this.jsf.updateValue(this, event.target.value);\n    }\n  }\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { JsonSchemaFormService } from '../json-schema-form.service';\n\n\n@Component({\n  // tslint:disable-next-line:component-selector\n  selector: 'tabs-widget',\n  template: `\n    <ul\n      [class]=\"options?.labelHtmlClass || ''\">\n      <li *ngFor=\"let item of layoutNode?.items; let i = index\"\n        [class]=\"(options?.itemLabelHtmlClass || '') + (selectedItem === i ?\n          (' ' + (options?.activeClass || '') + ' ' + (options?.style?.selected || '')) :\n          (' ' + options?.style?.unselected))\"\n        role=\"presentation\"\n        data-tabs>\n        <a *ngIf=\"showAddTab || item.type !== '$ref'\"\n           [class]=\"'nav-link' + (selectedItem === i ? (' ' + options?.activeClass + ' ' + options?.style?.selected) :\n            (' ' + options?.style?.unselected))\"\n          [innerHTML]=\"setTabTitle(item, i)\"\n          (click)=\"select(i)\"></a>\n      </li>\n    </ul>\n\n    <div *ngFor=\"let layoutItem of layoutNode?.items; let i = index\"\n      [class]=\"options?.htmlClass || ''\">\n\n      <select-framework-widget *ngIf=\"selectedItem === i\"\n        [class]=\"(options?.fieldHtmlClass || '') +\n          ' ' + (options?.activeClass || '') +\n          ' ' + (options?.style?.selected || '')\"\n        [dataIndex]=\"layoutNode?.dataType === 'array' ? (dataIndex || []).concat(i) : dataIndex\"\n        [layoutIndex]=\"(layoutIndex || []).concat(i)\"\n        [layoutNode]=\"layoutItem\"></select-framework-widget>\n\n    </div>`,\n  styles: [` a { cursor: pointer; } `],\n})\nexport class TabsComponent implements OnInit {\n  options: any;\n  itemCount: number;\n  selectedItem = 0;\n  showAddTab = true;\n  @Input() layoutNode: any;\n  @Input() layoutIndex: number[];\n  @Input() dataIndex: number[];\n\n  constructor(\n    private jsf: JsonSchemaFormService\n  ) { }\n\n  ngOnInit() {\n    this.options = this.layoutNode.options || {};\n    this.itemCount = this.layoutNode.items.length - 1;\n    this.updateControl();\n  }\n\n  select(index) {\n    if (this.layoutNode.items[index].type === '$ref') {\n      this.itemCount = this.layoutNode.items.length;\n      this.jsf.addItem({\n        layoutNode: this.layoutNode.items[index],\n        layoutIndex: this.layoutIndex.concat(index),\n        dataIndex: this.dataIndex.concat(index)\n      });\n      this.updateControl();\n    }\n    this.selectedItem = index;\n  }\n\n  updateControl() {\n    const lastItem = this.layoutNode.items[this.layoutNode.items.length - 1];\n    if (lastItem.type === '$ref' &&\n      this.itemCount >= (lastItem.options.maxItems || 1000)\n    ) {\n      this.showAddTab = false;\n    }\n  }\n\n  setTabTitle(item: any, index: number): string {\n    return this.jsf.setArrayItemTitle(this, item, index);\n  }\n}\n","import {\n  Component,\n  ComponentFactoryResolver,\n  ComponentRef,\n  Input,\n  OnChanges,\n  OnInit,\n  ViewChild,\n  ViewContainerRef\n  } from '@angular/core';\nimport { JsonSchemaFormService } from '../json-schema-form.service';\n\n\n@Component({\n  // tslint:disable-next-line:component-selector\n  selector: 'template-widget',\n  template: `<div #widgetContainer></div>`,\n})\nexport class TemplateComponent implements OnInit, OnChanges {\n  newComponent: ComponentRef<any> = null;\n  @Input() layoutNode: any;\n  @Input() layoutIndex: number[];\n  @Input() dataIndex: number[];\n  @ViewChild('widgetContainer', { read: ViewContainerRef , static: true})\n    widgetContainer: ViewContainerRef;\n\n  constructor(\n    private componentFactory: ComponentFactoryResolver,\n    private jsf: JsonSchemaFormService\n  ) { }\n\n  ngOnInit() {\n    this.updateComponent();\n  }\n\n  ngOnChanges() {\n    this.updateComponent();\n  }\n\n  updateComponent() {\n    if (this.widgetContainer && !this.newComponent && this.layoutNode.options.template) {\n      this.newComponent = this.widgetContainer.createComponent(\n        this.componentFactory.resolveComponentFactory(this.layoutNode.options.template)\n      );\n    }\n    if (this.newComponent) {\n      for (const input of ['layoutNode', 'layoutIndex', 'dataIndex']) {\n        this.newComponent.instance[input] = this[input];\n      }\n    }\n  }\n}\n","import { AbstractControl } from '@angular/forms';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { JsonSchemaFormService } from '../json-schema-form.service';\n\n\n@Component({\n  // tslint:disable-next-line:component-selector\n  selector: 'textarea-widget',\n  template: `\n    <div\n      [class]=\"options?.htmlClass || ''\">\n      <label *ngIf=\"options?.title\"\n        [attr.for]=\"'control' + layoutNode?._id\"\n        [class]=\"options?.labelHtmlClass || ''\"\n        [style.display]=\"options?.notitle ? 'none' : ''\"\n        [innerHTML]=\"options?.title\"></label>\n      <textarea *ngIf=\"boundControl\"\n        [formControl]=\"formControl\"\n        [attr.aria-describedby]=\"'control' + layoutNode?._id + 'Status'\"\n        [attr.maxlength]=\"options?.maxLength\"\n        [attr.minlength]=\"options?.minLength\"\n        [attr.pattern]=\"options?.pattern\"\n        [attr.placeholder]=\"options?.placeholder\"\n        [attr.readonly]=\"options?.readonly ? 'readonly' : null\"\n        [attr.required]=\"options?.required\"\n        [class]=\"options?.fieldHtmlClass || ''\"\n        [id]=\"'control' + layoutNode?._id\"\n        [name]=\"controlName\"></textarea>\n      <textarea *ngIf=\"!boundControl\"\n        [attr.aria-describedby]=\"'control' + layoutNode?._id + 'Status'\"\n        [attr.maxlength]=\"options?.maxLength\"\n        [attr.minlength]=\"options?.minLength\"\n        [attr.pattern]=\"options?.pattern\"\n        [attr.placeholder]=\"options?.placeholder\"\n        [attr.readonly]=\"options?.readonly ? 'readonly' : null\"\n        [attr.required]=\"options?.required\"\n        [class]=\"options?.fieldHtmlClass || ''\"\n        [disabled]=\"controlDisabled\"\n        [id]=\"'control' + layoutNode?._id\"\n        [name]=\"controlName\"\n        [value]=\"controlValue\"\n        (input)=\"updateValue($event)\">{{controlValue}}</textarea>\n    </div>`,\n})\nexport class TextareaComponent implements OnInit {\n  formControl: AbstractControl;\n  controlName: string;\n  controlValue: any;\n  controlDisabled = false;\n  boundControl = false;\n  options: any;\n  @Input() layoutNode: any;\n  @Input() layoutIndex: number[];\n  @Input() dataIndex: number[];\n\n  constructor(\n    private jsf: JsonSchemaFormService\n  ) { }\n\n  ngOnInit() {\n    this.options = this.layoutNode.options || {};\n    this.jsf.initializeControl(this);\n  }\n\n  updateValue(event) {\n    this.jsf.updateValue(this, event.target.value);\n  }\n}\n","import { AddReferenceComponent } from './add-reference.component';\nimport { ButtonComponent } from './button.component';\nimport { CheckboxComponent } from './checkbox.component';\nimport { CheckboxesComponent } from './checkboxes.component';\nimport { FileComponent } from './file.component';\nimport { hasOwn } from '../shared/utility.functions';\nimport { Injectable } from '@angular/core';\nimport { InputComponent } from './input.component';\nimport { MessageComponent } from './message.component';\nimport { NoneComponent } from './none.component';\nimport { NumberComponent } from './number.component';\nimport { OneOfComponent } from './one-of.component';\nimport { RadiosComponent } from './radios.component';\nimport { RootComponent } from './root.component';\nimport { SectionComponent } from './section.component';\nimport { SelectComponent } from './select.component';\nimport { SelectFrameworkComponent } from './select-framework.component';\nimport { SelectWidgetComponent } from './select-widget.component';\nimport { SubmitComponent } from './submit.component';\nimport { TabsComponent } from './tabs.component';\nimport { TemplateComponent } from './template.component';\nimport { TextareaComponent } from './textarea.component';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class WidgetLibraryService {\n\n  defaultWidget = 'text';\n  widgetLibrary: any = {\n\n  // Angular JSON Schema Form administrative widgets\n    'none': NoneComponent, // Placeholder, for development - displays nothing\n    'root': RootComponent, // Form root, renders a complete layout\n    'select-framework': SelectFrameworkComponent, // Applies the selected framework to a specified widget\n    'select-widget': SelectWidgetComponent, // Displays a specified widget\n    '$ref': AddReferenceComponent, // Button to add a new array item or $ref element\n\n  // Free-form text HTML 'input' form control widgets <input type=\"...\">\n    'email': 'text',\n    'integer': 'number', // Note: 'integer' is not a recognized HTML input type\n    'number': NumberComponent,\n    'password': 'text',\n    'search': 'text',\n    'tel': 'text',\n    'text': InputComponent,\n    'url': 'text',\n\n  // Controlled text HTML 'input' form control widgets <input type=\"...\">\n    'color': 'text',\n    'date': 'text',\n    'datetime': 'text',\n    'datetime-local': 'text',\n    'month': 'text',\n    'range': 'number',\n    'time': 'text',\n    'week': 'text',\n\n  // Non-text HTML 'input' form control widgets <input type=\"...\">\n    // 'button': <input type=\"button\"> not used, use <button> instead\n    'checkbox': CheckboxComponent, // TODO: Set ternary = true for 3-state ??\n    'file': FileComponent, // TODO: Finish 'file' widget\n    'hidden': 'text',\n    'image': 'text', // TODO: Figure out how to handle these\n    'radio': 'radios',\n    'reset': 'submit', // TODO: Figure out how to handle these\n    'submit': SubmitComponent,\n\n  // Other (non-'input') HTML form control widgets\n    'button': ButtonComponent,\n    'select': SelectComponent,\n    // 'option': automatically generated by select widgets\n    // 'optgroup': automatically generated by select widgets\n    'textarea': TextareaComponent,\n\n  // HTML form control widget sets\n    'checkboxes': CheckboxesComponent, // Grouped list of checkboxes\n    'checkboxes-inline': 'checkboxes', // Checkboxes in one line\n    'checkboxbuttons': 'checkboxes', // Checkboxes as html buttons\n    'radios': RadiosComponent, // Grouped list of radio buttons\n    'radios-inline': 'radios', // Radio controls in one line\n    'radiobuttons': 'radios', // Radio controls as html buttons\n\n  // HTML Layout widgets\n    // 'label': automatically added to data widgets\n    // 'legend': automatically added to fieldsets\n    'section': SectionComponent, // Just a div <div>\n    'div': 'section', // Still just a div <div>\n    'fieldset': 'section', // A fieldset, with an optional legend <fieldset>\n    'flex': 'section', // A flexbox container <div style=\"display: flex\">\n\n  // Non-HTML layout widgets\n    'one-of': OneOfComponent, // A select box that changes another input\n                              // TODO: Finish 'one-of' widget\n    'array': 'section', // A list you can add, remove and reorder <fieldset>\n    'tabarray': 'tabs', // A tabbed version of array\n    'tab': 'section', // A tab group, similar to a fieldset or section <fieldset>\n    'tabs': TabsComponent, // A tabbed set of panels with different controls\n    'message': MessageComponent, // Insert arbitrary html\n    'help': 'message', // Insert arbitrary html\n    'msg': 'message', // Insert arbitrary html\n    'html': 'message', // Insert arbitrary html\n    'template': TemplateComponent, // Insert a custom Angular component\n\n  // Widgets included for compatibility with JSON Form API\n    'advancedfieldset': 'section', // Adds 'Advanced settings' title <fieldset>\n    'authfieldset': 'section', // Adds 'Authentication settings' title <fieldset>\n    'optionfieldset': 'one-of', // Option control, displays selected sub-item <fieldset>\n    'selectfieldset': 'one-of', // Select control, displays selected sub-item <fieldset>\n    'conditional': 'section', // Identical to 'section' (depeciated) <div>\n    'actions': 'section', // Horizontal button list, can only submit, uses buttons as items <div>\n    'tagsinput': 'section', // For entering short text tags <div>\n    // See: http://ulion.github.io/jsonform/playground/?example=fields-checkboxbuttons\n\n  // Widgets included for compatibility with React JSON Schema Form API\n    'updown': 'number',\n    'date-time': 'datetime-local',\n    'alt-datetime': 'datetime-local',\n    'alt-date': 'date',\n\n  // Widgets included for compatibility with Angular Schema Form API\n    'wizard': 'section', // TODO: Sequential panels with \"Next\" and \"Previous\" buttons\n\n  // Widgets included for compatibility with other libraries\n    'textline': 'text',\n\n  // Recommended 3rd-party add-on widgets (TODO: create wrappers for these...)\n    // 'ng2-select': Select control replacement - http://valor-software.com/ng2-select/\n    // 'flatpickr': Flatpickr date picker - https://github.com/chmln/flatpickr\n    // 'pikaday': Pikaday date picker - https://github.com/dbushell/Pikaday\n    // 'spectrum': Spectrum color picker - http://bgrins.github.io/spectrum\n    // 'bootstrap-slider': Bootstrap Slider range control - https://github.com/seiyria/bootstrap-slider\n    // 'ace': ACE code editor - https://ace.c9.io\n    // 'ckeditor': CKEditor HTML / rich text editor - http://ckeditor.com\n    // 'tinymce': TinyMCE HTML / rich text editor - https://www.tinymce.com\n    // 'imageselect': Bootstrap drop-down image selector - http://silviomoreto.github.io/bootstrap-select\n    // 'wysihtml5': HTML editor - http://jhollingworth.github.io/bootstrap-wysihtml5\n    // 'quill': Quill HTML / rich text editor (?) - https://quilljs.com\n  };\n  registeredWidgets: any = { };\n  frameworkWidgets: any = { };\n  activeWidgets: any = { };\n\n  constructor() {\n    this.setActiveWidgets();\n  }\n\n  setActiveWidgets(): boolean {\n    this.activeWidgets = Object.assign(\n      { }, this.widgetLibrary, this.frameworkWidgets, this.registeredWidgets\n    );\n    for (const widgetName of Object.keys(this.activeWidgets)) {\n      let widget: any = this.activeWidgets[widgetName];\n      // Resolve aliases\n      if (typeof widget === 'string') {\n        const usedAliases: string[] = [];\n        while (typeof widget === 'string' && !usedAliases.includes(widget)) {\n          usedAliases.push(widget);\n          widget = this.activeWidgets[widget];\n        }\n        if (typeof widget !== 'string') {\n          this.activeWidgets[widgetName] = widget;\n        }\n      }\n    }\n    return true;\n  }\n\n  setDefaultWidget(type: string): boolean {\n    if (!this.hasWidget(type)) { return false; }\n    this.defaultWidget = type;\n    return true;\n  }\n\n  hasWidget(type: string, widgetSet = 'activeWidgets'): boolean {\n    if (!type || typeof type !== 'string') { return false; }\n    return hasOwn(this[widgetSet], type);\n  }\n\n  hasDefaultWidget(type: string): boolean {\n    return this.hasWidget(type, 'widgetLibrary');\n  }\n\n  registerWidget(type: string, widget: any): boolean {\n    if (!type || !widget || typeof type !== 'string') { return false; }\n    this.registeredWidgets[type] = widget;\n    return this.setActiveWidgets();\n  }\n\n  unRegisterWidget(type: string): boolean {\n    if (!hasOwn(this.registeredWidgets, type)) { return false; }\n    delete this.registeredWidgets[type];\n    return this.setActiveWidgets();\n  }\n\n  unRegisterAllWidgets(unRegisterFrameworkWidgets = true): boolean {\n    this.registeredWidgets = { };\n    if (unRegisterFrameworkWidgets) { this.frameworkWidgets = { }; }\n    return this.setActiveWidgets();\n  }\n\n  registerFrameworkWidgets(widgets: any): boolean {\n    if (widgets === null || typeof widgets !== 'object') { widgets = { }; }\n    this.frameworkWidgets = widgets;\n    return this.setActiveWidgets();\n  }\n\n  unRegisterFrameworkWidgets(): boolean {\n    if (Object.keys(this.frameworkWidgets).length) {\n      this.frameworkWidgets = { };\n      return this.setActiveWidgets();\n    }\n    return false;\n  }\n\n  getWidget(type?: string, widgetSet = 'activeWidgets'): any {\n    if (this.hasWidget(type, widgetSet)) {\n      return this[widgetSet][type];\n    } else if (this.hasWidget(this.defaultWidget, widgetSet)) {\n      return this[widgetSet][this.defaultWidget];\n    } else {\n      return null;\n    }\n  }\n\n  getAllWidgets(): any {\n    return {\n      widgetLibrary: this.widgetLibrary,\n      registeredWidgets: this.registeredWidgets,\n      frameworkWidgets: this.frameworkWidgets,\n      activeWidgets: this.activeWidgets,\n    };\n  }\n}\n","import { Framework } from './framework';\nimport { hasOwn } from '../shared/utility.functions';\nimport { Inject, Injectable } from '@angular/core';\nimport { WidgetLibraryService } from '../widget-library/widget-library.service';\n\n// Possible future frameworks:\n// - Foundation 6:\n//   http://justindavis.co/2017/06/15/using-foundation-6-in-angular-4/\n//   https://github.com/zurb/foundation-sites\n// - Semantic UI:\n//   https://github.com/edcarroll/ng2-semantic-ui\n//   https://github.com/vladotesanovic/ngSemantic\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class FrameworkLibraryService {\n  activeFramework: Framework = null;\n  stylesheets: (HTMLStyleElement|HTMLLinkElement)[];\n  scripts: HTMLScriptElement[];\n  loadExternalAssets = false;\n  defaultFramework: string;\n  frameworkLibrary: { [name: string]: Framework } = {};\n\n  constructor(\n    @Inject(Framework) private frameworks: any[],\n    @Inject(WidgetLibraryService) private widgetLibrary: WidgetLibraryService\n  ) {\n    this.frameworks.forEach(framework =>\n      this.frameworkLibrary[framework.name] = framework\n    );\n    this.defaultFramework = this.frameworks[0].name;\n    this.setFramework(this.defaultFramework);\n  }\n\n  public setLoadExternalAssets(loadExternalAssets = true): void {\n    this.loadExternalAssets = !!loadExternalAssets;\n  }\n\n  public setFramework(\n    framework: string|Framework = this.defaultFramework,\n    loadExternalAssets = this.loadExternalAssets\n  ): boolean {\n    this.activeFramework =\n      typeof framework === 'string' && this.hasFramework(framework) ?\n        this.frameworkLibrary[framework] :\n      typeof framework === 'object' && hasOwn(framework, 'framework') ?\n        framework :\n        this.frameworkLibrary[this.defaultFramework];\n    return this.registerFrameworkWidgets(this.activeFramework);\n  }\n\n  registerFrameworkWidgets(framework: Framework): boolean {\n    return hasOwn(framework, 'widgets') ?\n      this.widgetLibrary.registerFrameworkWidgets(framework.widgets) :\n      this.widgetLibrary.unRegisterFrameworkWidgets();\n  }\n\n  public hasFramework(type: string): boolean {\n    return hasOwn(this.frameworkLibrary, type);\n  }\n\n  public getFramework(): any {\n    if (!this.activeFramework) { this.setFramework('default', true); }\n    return this.activeFramework.framework;\n  }\n\n  public getFrameworkWidgets(): any {\n    return this.activeFramework.widgets || {};\n  }\n\n  public getFrameworkStylesheets(load: boolean = this.loadExternalAssets): string[] {\n    return (load && this.activeFramework.stylesheets) || [];\n  }\n\n  public getFrameworkScripts(load: boolean = this.loadExternalAssets): string[] {\n    return (load && this.activeFramework.scripts) || [];\n  }\n}\n","import cloneDeep from 'lodash/cloneDeep';\nimport isEqual from 'lodash/isEqual';\n\nimport {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  forwardRef,\n  Input,\n  OnChanges,\n  OnInit,\n  Output,\n  SimpleChanges,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { convertSchemaToDraft6 } from './shared/convert-schema-to-draft6.function';\nimport { forEach, hasOwn } from './shared/utility.functions';\nimport { FrameworkLibraryService } from './framework-library/framework-library.service';\nimport {\n  hasValue,\n  inArray,\n  isArray,\n  isEmpty,\n  isObject\n} from './shared/validator.functions';\nimport { JsonPointer } from './shared/jsonpointer.functions';\nimport { JsonSchemaFormService } from './json-schema-form.service';\nimport { resolveSchemaReferences } from './shared/json-schema.functions';\nimport { WidgetLibraryService } from './widget-library/widget-library.service';\n\nexport const JSON_SCHEMA_FORM_VALUE_ACCESSOR: any = {\n  provide: NG_VALUE_ACCESSOR,\n  useExisting: forwardRef(() => JsonSchemaFormComponent),\n  multi: true,\n};\n\n/**\n * @module 'JsonSchemaFormComponent' - Angular JSON Schema Form\n *\n * Root module of the Angular JSON Schema Form client-side library,\n * an Angular library which generates an HTML form from a JSON schema\n * structured data model and/or a JSON Schema Form layout description.\n *\n * This library also validates input data by the user, using both validators on\n * individual controls to provide real-time feedback while the user is filling\n * out the form, and then validating the entire input against the schema when\n * the form is submitted to make sure the returned JSON data object is valid.\n *\n * This library is similar to, and mostly API compatible with:\n *\n * - JSON Schema Form's Angular Schema Form library for AngularJs\n *   http://schemaform.io\n *   http://schemaform.io/examples/bootstrap-example.html (examples)\n *\n * - Mozilla's react-jsonschema-form library for React\n *   https://github.com/mozilla-services/react-jsonschema-form\n *   https://mozilla-services.github.io/react-jsonschema-form (examples)\n *\n * - Joshfire's JSON Form library for jQuery\n *   https://github.com/joshfire/jsonform\n *   http://ulion.github.io/jsonform/playground (examples)\n *\n * This library depends on:\n *  - Angular (obviously)                  https://angular.io\n *  - lodash, JavaScript utility library   https://github.com/lodash/lodash\n *  - ajv, Another JSON Schema validator   https://github.com/epoberezkin/ajv\n *\n * In addition, the Example Playground also depends on:\n *  - brace, Browserified Ace editor       http://thlorenz.github.io/brace\n */\n@Component({\n  // tslint:disable-next-line:component-selector\n  selector: 'json-schema-form',\n  templateUrl: './json-schema-form.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  // Adding 'JsonSchemaFormService' here, instead of in the module,\n  // creates a separate instance of the service for each component\n  providers:  [ JsonSchemaFormService, JSON_SCHEMA_FORM_VALUE_ACCESSOR ],\n})\nexport class JsonSchemaFormComponent implements ControlValueAccessor, OnChanges, OnInit {\n  // TODO: quickfix to avoid subscribing twice to the same emitters\n  private unsubscribeOnActivateForm$ = new Subject<void>();\n\n  debugOutput: any; // Debug information, if requested\n  formValueSubscription: any = null;\n  formInitialized = false;\n  objectWrap = false; // Is non-object input schema wrapped in an object?\n\n  formValuesInput: string; // Name of the input providing the form data\n  previousInputs: { // Previous input values, to detect which input triggers onChanges\n    schema: any, layout: any[], data: any, options: any, framework: any | string,\n    widgets: any, form: any, model: any, JSONSchema: any, UISchema: any,\n    formData: any, loadExternalAssets: boolean, debug: boolean,\n  } = {\n      schema: null, layout: null, data: null, options: null, framework: null,\n      widgets: null, form: null, model: null, JSONSchema: null, UISchema: null,\n      formData: null, loadExternalAssets: null, debug: null,\n    };\n\n  // Recommended inputs\n  @Input() schema: any; // The JSON Schema\n  @Input() layout: any[]; // The form layout\n  @Input() data: any; // The form data\n  @Input() options: any; // The global form options\n  @Input() framework: any | string; // The framework to load\n  @Input() widgets: any; // Any custom widgets to load\n\n  // Alternate combined single input\n  @Input() form: any; // For testing, and JSON Schema Form API compatibility\n\n  // Angular Schema Form API compatibility input\n  @Input() model: any; // Alternate input for form data\n\n  // React JSON Schema Form API compatibility inputs\n  @Input() JSONSchema: any; // Alternate input for JSON Schema\n  @Input() UISchema: any; // UI schema - alternate form layout format\n  @Input() formData: any; // Alternate input for form data\n\n  @Input() ngModel: any; // Alternate input for Angular forms\n\n  @Input() language: string; // Language\n\n  // Development inputs, for testing and debugging\n  @Input() loadExternalAssets: boolean; // Load external framework assets?\n  @Input() debug: boolean; // Show debug information?\n\n  @Input()\n  get value(): any {\n    return this.objectWrap ? this.jsf.data['1'] : this.jsf.data;\n  }\n  set value(value: any) {\n    this.setFormValues(value, false);\n  }\n\n  // Outputs\n  @Output() onChanges = new EventEmitter<any>(); // Live unvalidated internal form data\n  @Output() onSubmit = new EventEmitter<any>(); // Complete validated form data\n  @Output() isValid = new EventEmitter<boolean>(); // Is current data valid?\n  @Output() validationErrors = new EventEmitter<any>(); // Validation errors (if any)\n  @Output() formSchema = new EventEmitter<any>(); // Final schema used to create form\n  @Output() formLayout = new EventEmitter<any>(); // Final layout used to create form\n\n  // Outputs for possible 2-way data binding\n  // Only the one input providing the initial form data will be bound.\n  // If there is no inital data, input '{}' to activate 2-way data binding.\n  // There is no 2-way binding if inital data is combined inside the 'form' input.\n  @Output() dataChange = new EventEmitter<any>();\n  @Output() modelChange = new EventEmitter<any>();\n  @Output() formDataChange = new EventEmitter<any>();\n  @Output() ngModelChange = new EventEmitter<any>();\n\n  onChange: Function;\n  onTouched: Function;\n\n  constructor(\n    private changeDetector: ChangeDetectorRef,\n    private frameworkLibrary: FrameworkLibraryService,\n    private widgetLibrary: WidgetLibraryService,\n    public jsf: JsonSchemaFormService,\n  ) { }\n\n  private resetScriptsAndStyleSheets() {\n    document.querySelectorAll('.ajsf').forEach(element => element.remove());\n  }\n  private loadScripts() {\n    const scripts = this.frameworkLibrary.getFrameworkScripts();\n    scripts.map(script => {\n      const scriptTag: HTMLScriptElement = document.createElement('script');\n      scriptTag.src = script;\n      scriptTag.type = 'text/javascript';\n      scriptTag.async = true;\n      scriptTag.setAttribute('class', 'ajsf');\n      document.getElementsByTagName('head')[0].appendChild(scriptTag);\n    });\n  }\n  private loadStyleSheets() {\n    const stylesheets = this.frameworkLibrary.getFrameworkStylesheets();\n    stylesheets.map(stylesheet => {\n      const linkTag: HTMLLinkElement = document.createElement('link');\n      linkTag.rel = 'stylesheet';\n      linkTag.href = stylesheet;\n      linkTag.setAttribute('class', 'ajsf');\n      document.getElementsByTagName('head')[0].appendChild(linkTag);\n    });\n  }\n  private loadAssets() {\n    this.resetScriptsAndStyleSheets();\n    this.loadScripts();\n    this.loadStyleSheets();\n  }\n  ngOnInit() {\n    this.updateForm();\n    this.loadAssets();\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    this.updateForm();\n    // Check if there's changes in Framework then load assets if that's the\n    if (changes.framework) {\n      if (!changes.framework.isFirstChange() &&\n        (changes.framework.previousValue !== changes.framework.currentValue)) {\n        this.loadAssets();\n      }\n    }\n  }\n\n  writeValue(value: any) {\n    this.setFormValues(value, false);\n    if (!this.formValuesInput) { this.formValuesInput = 'ngModel'; }\n  }\n\n  registerOnChange(fn: Function) {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(fn: Function) {\n    this.onTouched = fn;\n  }\n\n  setDisabledState(isDisabled: boolean) {\n    if (this.jsf.formOptions.formDisabled !== !!isDisabled) {\n      this.jsf.formOptions.formDisabled = !!isDisabled;\n      this.initializeForm();\n    }\n  }\n\n  updateForm() {\n    if (!this.formInitialized || !this.formValuesInput ||\n      (this.language && this.language !== this.jsf.language)\n    ) {\n      this.initializeForm();\n    } else {\n      if (this.language && this.language !== this.jsf.language) {\n        this.jsf.setLanguage(this.language);\n      }\n\n      // Get names of changed inputs\n      let changedInput = Object.keys(this.previousInputs)\n        .filter(input => this.previousInputs[input] !== this[input]);\n      let resetFirst = true;\n      if (changedInput.length === 1 && changedInput[0] === 'form' &&\n        this.formValuesInput.startsWith('form.')\n      ) {\n        // If only 'form' input changed, get names of changed keys\n        changedInput = Object.keys(this.previousInputs.form || {})\n          .filter(key => !isEqual(this.previousInputs.form[key], this.form[key]))\n          .map(key => `form.${key}`);\n        resetFirst = false;\n      }\n\n      // If only input values have changed, update the form values\n      if (changedInput.length === 1 && changedInput[0] === this.formValuesInput) {\n        if (this.formValuesInput.indexOf('.') === -1) {\n          this.setFormValues(this[this.formValuesInput], resetFirst);\n        } else {\n          const [input, key] = this.formValuesInput.split('.');\n          this.setFormValues(this[input][key], resetFirst);\n        }\n\n        // If anything else has changed, re-render the entire form\n      } else if (changedInput.length) {\n        this.initializeForm();\n        if (this.onChange) { this.onChange(this.jsf.formValues); }\n        if (this.onTouched) { this.onTouched(this.jsf.formValues); }\n      }\n\n      // Update previous inputs\n      Object.keys(this.previousInputs)\n        .filter(input => this.previousInputs[input] !== this[input])\n        .forEach(input => this.previousInputs[input] = this[input]);\n    }\n  }\n\n  setFormValues(formValues: any, resetFirst = true) {\n    if (formValues) {\n      const newFormValues = this.objectWrap ? formValues['1'] : formValues;\n      if (!this.jsf.formGroup) {\n        this.jsf.formValues = formValues;\n        this.activateForm();\n      } else if (resetFirst) {\n        this.jsf.formGroup.reset();\n      }\n      if (this.jsf.formGroup) {\n        this.jsf.formGroup.patchValue(newFormValues);\n      }\n      if (this.onChange) { this.onChange(newFormValues); }\n      if (this.onTouched) { this.onTouched(newFormValues); }\n    } else {\n      this.jsf.formGroup.reset();\n    }\n  }\n\n  submitForm() {\n    const validData = this.jsf.validData;\n    this.onSubmit.emit(this.objectWrap ? validData['1'] : validData);\n  }\n\n  /**\n   * 'initializeForm' function\n   *\n   * - Update 'schema', 'layout', and 'formValues', from inputs.\n   *\n   * - Create 'schemaRefLibrary' and 'schemaRecursiveRefMap'\n   *   to resolve schema $ref links, including recursive $ref links.\n   *\n   * - Create 'dataRecursiveRefMap' to resolve recursive links in data\n   *   and corectly set output formats for recursively nested values.\n   *\n   * - Create 'layoutRefLibrary' and 'templateRefLibrary' to store\n   *   new layout nodes and formGroup elements to use when dynamically\n   *   adding form components to arrays and recursive $ref points.\n   *\n   * - Create 'dataMap' to map the data to the schema and template.\n   *\n   * - Create the master 'formGroupTemplate' then from it 'formGroup'\n   *   the Angular formGroup used to control the reactive form.\n   */\n  initializeForm() {\n    if (\n      this.schema || this.layout || this.data || this.form || this.model ||\n      this.JSONSchema || this.UISchema || this.formData || this.ngModel ||\n      this.jsf.data\n    ) {\n\n      this.jsf.resetAllValues();  // Reset all form values to defaults\n      this.initializeOptions();   // Update options\n      this.initializeSchema();    // Update schema, schemaRefLibrary,\n      // schemaRecursiveRefMap, & dataRecursiveRefMap\n      this.initializeLayout();    // Update layout, layoutRefLibrary,\n      this.initializeData();      // Update formValues\n      this.activateForm();        // Update dataMap, templateRefLibrary,\n      // formGroupTemplate, formGroup\n\n      // Uncomment individual lines to output debugging information to console:\n      // (These always work.)\n      // console.log('loading form...');\n      // console.log('schema', this.jsf.schema);\n      // console.log('layout', this.jsf.layout);\n      // console.log('options', this.options);\n      // console.log('formValues', this.jsf.formValues);\n      // console.log('formGroupTemplate', this.jsf.formGroupTemplate);\n      // console.log('formGroup', this.jsf.formGroup);\n      // console.log('formGroup.value', this.jsf.formGroup.value);\n      // console.log('schemaRefLibrary', this.jsf.schemaRefLibrary);\n      // console.log('layoutRefLibrary', this.jsf.layoutRefLibrary);\n      // console.log('templateRefLibrary', this.jsf.templateRefLibrary);\n      // console.log('dataMap', this.jsf.dataMap);\n      // console.log('arrayMap', this.jsf.arrayMap);\n      // console.log('schemaRecursiveRefMap', this.jsf.schemaRecursiveRefMap);\n      // console.log('dataRecursiveRefMap', this.jsf.dataRecursiveRefMap);\n\n      // Uncomment individual lines to output debugging information to browser:\n      // (These only work if the 'debug' option has also been set to 'true'.)\n      if (this.debug || this.jsf.formOptions.debug) {\n        const vars: any[] = [];\n        // vars.push(this.jsf.schema);\n        // vars.push(this.jsf.layout);\n        // vars.push(this.options);\n        // vars.push(this.jsf.formValues);\n        // vars.push(this.jsf.formGroup.value);\n        // vars.push(this.jsf.formGroupTemplate);\n        // vars.push(this.jsf.formGroup);\n        // vars.push(this.jsf.schemaRefLibrary);\n        // vars.push(this.jsf.layoutRefLibrary);\n        // vars.push(this.jsf.templateRefLibrary);\n        // vars.push(this.jsf.dataMap);\n        // vars.push(this.jsf.arrayMap);\n        // vars.push(this.jsf.schemaRecursiveRefMap);\n        // vars.push(this.jsf.dataRecursiveRefMap);\n        this.debugOutput = vars.map(v => JSON.stringify(v, null, 2)).join('\\n');\n      }\n      this.formInitialized = true;\n    }\n  }\n\n  /**\n   * 'initializeOptions' function\n   *\n   * Initialize 'options' (global form options) and set framework\n   * Combine available inputs:\n   * 1. options - recommended\n   * 2. form.options - Single input style\n   */\n  private initializeOptions() {\n    if (this.language && this.language !== this.jsf.language) {\n      this.jsf.setLanguage(this.language);\n    }\n    this.jsf.setOptions({ debug: !!this.debug });\n    let loadExternalAssets: boolean = this.loadExternalAssets || false;\n    let framework: any = this.framework || 'default';\n    if (isObject(this.options)) {\n      this.jsf.setOptions(this.options);\n      loadExternalAssets = this.options.loadExternalAssets || loadExternalAssets;\n      framework = this.options.framework || framework;\n    }\n    if (isObject(this.form) && isObject(this.form.options)) {\n      this.jsf.setOptions(this.form.options);\n      loadExternalAssets = this.form.options.loadExternalAssets || loadExternalAssets;\n      framework = this.form.options.framework || framework;\n    }\n    if (isObject(this.widgets)) {\n      this.jsf.setOptions({ widgets: this.widgets });\n    }\n    this.frameworkLibrary.setLoadExternalAssets(loadExternalAssets);\n    this.frameworkLibrary.setFramework(framework);\n    this.jsf.framework = this.frameworkLibrary.getFramework();\n    if (isObject(this.jsf.formOptions.widgets)) {\n      for (const widget of Object.keys(this.jsf.formOptions.widgets)) {\n        this.widgetLibrary.registerWidget(widget, this.jsf.formOptions.widgets[widget]);\n      }\n    }\n    if (isObject(this.form) && isObject(this.form.tpldata)) {\n      this.jsf.setTpldata(this.form.tpldata);\n    }\n  }\n\n  /**\n   * 'initializeSchema' function\n   *\n   * Initialize 'schema'\n   * Use first available input:\n   * 1. schema - recommended / Angular Schema Form style\n   * 2. form.schema - Single input / JSON Form style\n   * 3. JSONSchema - React JSON Schema Form style\n   * 4. form.JSONSchema - For testing single input React JSON Schema Forms\n   * 5. form - For testing single schema-only inputs\n   *\n   * ... if no schema input found, the 'activateForm' function, below,\n   *     will make two additional attempts to build a schema\n   * 6. If layout input - build schema from layout\n   * 7. If data input - build schema from data\n   */\n  private initializeSchema() {\n\n    // TODO: update to allow non-object schemas\n\n    if (isObject(this.schema)) {\n      this.jsf.AngularSchemaFormCompatibility = true;\n      this.jsf.schema = cloneDeep(this.schema);\n    } else if (hasOwn(this.form, 'schema') && isObject(this.form.schema)) {\n      this.jsf.schema = cloneDeep(this.form.schema);\n    } else if (isObject(this.JSONSchema)) {\n      this.jsf.ReactJsonSchemaFormCompatibility = true;\n      this.jsf.schema = cloneDeep(this.JSONSchema);\n    } else if (hasOwn(this.form, 'JSONSchema') && isObject(this.form.JSONSchema)) {\n      this.jsf.ReactJsonSchemaFormCompatibility = true;\n      this.jsf.schema = cloneDeep(this.form.JSONSchema);\n    } else if (hasOwn(this.form, 'properties') && isObject(this.form.properties)) {\n      this.jsf.schema = cloneDeep(this.form);\n    } else if (isObject(this.form)) {\n      // TODO: Handle other types of form input\n    }\n\n    if (!isEmpty(this.jsf.schema)) {\n\n      // If other types also allowed, render schema as an object\n      if (inArray('object', this.jsf.schema.type)) {\n        this.jsf.schema.type = 'object';\n      }\n\n      // Wrap non-object schemas in object.\n      if (hasOwn(this.jsf.schema, 'type') && this.jsf.schema.type !== 'object') {\n        this.jsf.schema = {\n          'type': 'object',\n          'properties': { 1: this.jsf.schema }\n        };\n        this.objectWrap = true;\n      } else if (!hasOwn(this.jsf.schema, 'type')) {\n\n        // Add type = 'object' if missing\n        if (isObject(this.jsf.schema.properties) ||\n          isObject(this.jsf.schema.patternProperties) ||\n          isObject(this.jsf.schema.additionalProperties)\n        ) {\n          this.jsf.schema.type = 'object';\n\n          // Fix JSON schema shorthand (JSON Form style)\n        } else {\n          this.jsf.JsonFormCompatibility = true;\n          this.jsf.schema = {\n            'type': 'object',\n            'properties': this.jsf.schema\n          };\n        }\n      }\n\n      // If needed, update JSON Schema to draft 6 format, including\n      // draft 3 (JSON Form style) and draft 4 (Angular Schema Form style)\n      this.jsf.schema = convertSchemaToDraft6(this.jsf.schema);\n\n      // Initialize ajv and compile schema\n      this.jsf.compileAjvSchema();\n\n      // Create schemaRefLibrary, schemaRecursiveRefMap, dataRecursiveRefMap, & arrayMap\n      this.jsf.schema = resolveSchemaReferences(\n        this.jsf.schema, this.jsf.schemaRefLibrary, this.jsf.schemaRecursiveRefMap,\n        this.jsf.dataRecursiveRefMap, this.jsf.arrayMap\n      );\n      if (hasOwn(this.jsf.schemaRefLibrary, '')) {\n        this.jsf.hasRootReference = true;\n      }\n\n      // TODO: (?) Resolve external $ref links\n      // // Create schemaRefLibrary & schemaRecursiveRefMap\n      // this.parser.bundle(this.schema)\n      //   .then(schema => this.schema = resolveSchemaReferences(\n      //     schema, this.jsf.schemaRefLibrary,\n      //     this.jsf.schemaRecursiveRefMap, this.jsf.dataRecursiveRefMap\n      //   ));\n    }\n  }\n\n  /**\n   * 'initializeData' function\n   *\n   * Initialize 'formValues'\n   * defulat or previously submitted values used to populate form\n   * Use first available input:\n   * 1. data - recommended\n   * 2. model - Angular Schema Form style\n   * 3. form.value - JSON Form style\n   * 4. form.data - Single input style\n   * 5. formData - React JSON Schema Form style\n   * 6. form.formData - For easier testing of React JSON Schema Forms\n   * 7. (none) no data - initialize data from schema and layout defaults only\n   */\n  private initializeData() {\n    if (hasValue(this.data)) {\n      this.jsf.formValues = cloneDeep(this.data);\n      this.formValuesInput = 'data';\n    } else if (hasValue(this.model)) {\n      this.jsf.AngularSchemaFormCompatibility = true;\n      this.jsf.formValues = cloneDeep(this.model);\n      this.formValuesInput = 'model';\n    } else if (hasValue(this.ngModel)) {\n      this.jsf.AngularSchemaFormCompatibility = true;\n      this.jsf.formValues = cloneDeep(this.ngModel);\n      this.formValuesInput = 'ngModel';\n    } else if (isObject(this.form) && hasValue(this.form.value)) {\n      this.jsf.JsonFormCompatibility = true;\n      this.jsf.formValues = cloneDeep(this.form.value);\n      this.formValuesInput = 'form.value';\n    } else if (isObject(this.form) && hasValue(this.form.data)) {\n      this.jsf.formValues = cloneDeep(this.form.data);\n      this.formValuesInput = 'form.data';\n    } else if (hasValue(this.formData)) {\n      this.jsf.ReactJsonSchemaFormCompatibility = true;\n      this.formValuesInput = 'formData';\n    } else if (hasOwn(this.form, 'formData') && hasValue(this.form.formData)) {\n      this.jsf.ReactJsonSchemaFormCompatibility = true;\n      this.jsf.formValues = cloneDeep(this.form.formData);\n      this.formValuesInput = 'form.formData';\n    } else {\n      this.formValuesInput = null;\n    }\n  }\n\n  /**\n   * 'initializeLayout' function\n   *\n   * Initialize 'layout'\n   * Use first available array input:\n   * 1. layout - recommended\n   * 2. form - Angular Schema Form style\n   * 3. form.form - JSON Form style\n   * 4. form.layout - Single input style\n   * 5. (none) no layout - set default layout instead\n   *    (full layout will be built later from the schema)\n   *\n   * Also, if alternate layout formats are available,\n   * import from 'UISchema' or 'customFormItems'\n   * used for React JSON Schema Form and JSON Form API compatibility\n   * Use first available input:\n   * 1. UISchema - React JSON Schema Form style\n   * 2. form.UISchema - For testing single input React JSON Schema Forms\n   * 2. form.customFormItems - JSON Form style\n   * 3. (none) no input - don't import\n   */\n  private initializeLayout() {\n\n    // Rename JSON Form-style 'options' lists to\n    // Angular Schema Form-style 'titleMap' lists.\n    const fixJsonFormOptions = (layout: any): any => {\n      if (isObject(layout) || isArray(layout)) {\n        forEach(layout, (value, key) => {\n          if (hasOwn(value, 'options') && isObject(value.options)) {\n            value.titleMap = value.options;\n            delete value.options;\n          }\n        }, 'top-down');\n      }\n      return layout;\n    };\n\n    // Check for layout inputs and, if found, initialize form layout\n    if (isArray(this.layout)) {\n      this.jsf.layout = cloneDeep(this.layout);\n    } else if (isArray(this.form)) {\n      this.jsf.AngularSchemaFormCompatibility = true;\n      this.jsf.layout = cloneDeep(this.form);\n    } else if (this.form && isArray(this.form.form)) {\n      this.jsf.JsonFormCompatibility = true;\n      this.jsf.layout = fixJsonFormOptions(cloneDeep(this.form.form));\n    } else if (this.form && isArray(this.form.layout)) {\n      this.jsf.layout = cloneDeep(this.form.layout);\n    } else {\n      this.jsf.layout = ['*'];\n    }\n\n    // Check for alternate layout inputs\n    let alternateLayout: any = null;\n    if (isObject(this.UISchema)) {\n      this.jsf.ReactJsonSchemaFormCompatibility = true;\n      alternateLayout = cloneDeep(this.UISchema);\n    } else if (hasOwn(this.form, 'UISchema')) {\n      this.jsf.ReactJsonSchemaFormCompatibility = true;\n      alternateLayout = cloneDeep(this.form.UISchema);\n    } else if (hasOwn(this.form, 'uiSchema')) {\n      this.jsf.ReactJsonSchemaFormCompatibility = true;\n      alternateLayout = cloneDeep(this.form.uiSchema);\n    } else if (hasOwn(this.form, 'customFormItems')) {\n      this.jsf.JsonFormCompatibility = true;\n      alternateLayout = fixJsonFormOptions(cloneDeep(this.form.customFormItems));\n    }\n\n    // if alternate layout found, copy alternate layout options into schema\n    if (alternateLayout) {\n      JsonPointer.forEachDeep(alternateLayout, (value, pointer) => {\n        const schemaPointer = pointer\n          .replace(/\\//g, '/properties/')\n          .replace(/\\/properties\\/items\\/properties\\//g, '/items/properties/')\n          .replace(/\\/properties\\/titleMap\\/properties\\//g, '/titleMap/properties/');\n        if (hasValue(value) && hasValue(pointer)) {\n          let key = JsonPointer.toKey(pointer);\n          const groupPointer = (JsonPointer.parse(schemaPointer) || []).slice(0, -2);\n          let itemPointer: string | string[];\n\n          // If 'ui:order' object found, copy into object schema root\n          if (key.toLowerCase() === 'ui:order') {\n            itemPointer = [...groupPointer, 'ui:order'];\n\n            // Copy other alternate layout options to schema 'x-schema-form',\n            // (like Angular Schema Form options) and remove any 'ui:' prefixes\n          } else {\n            if (key.slice(0, 3).toLowerCase() === 'ui:') { key = key.slice(3); }\n            itemPointer = [...groupPointer, 'x-schema-form', key];\n          }\n          if (JsonPointer.has(this.jsf.schema, groupPointer) &&\n            !JsonPointer.has(this.jsf.schema, itemPointer)\n          ) {\n            JsonPointer.set(this.jsf.schema, itemPointer, value);\n          }\n        }\n      });\n    }\n  }\n\n  /**\n   * 'activateForm' function\n   *\n   * ...continued from 'initializeSchema' function, above\n   * If 'schema' has not been initialized (i.e. no schema input found)\n   * 6. If layout input - build schema from layout input\n   * 7. If data input - build schema from data input\n   *\n   * Create final layout,\n   * build the FormGroup template and the Angular FormGroup,\n   * subscribe to changes,\n   * and activate the form.\n   */\n  private activateForm() {\n    this.unsubscribeOnActivateForm$.next();\n    // If 'schema' not initialized\n    if (isEmpty(this.jsf.schema)) {\n\n      // TODO: If full layout input (with no '*'), build schema from layout\n      // if (!this.jsf.layout.includes('*')) {\n      //   this.jsf.buildSchemaFromLayout();\n      // } else\n\n      // If data input, build schema from data\n      if (!isEmpty(this.jsf.formValues)) {\n        this.jsf.buildSchemaFromData();\n      }\n    }\n\n    if (!isEmpty(this.jsf.schema)) {\n\n      // If not already initialized, initialize ajv and compile schema\n      this.jsf.compileAjvSchema();\n\n      // Update all layout elements, add values, widgets, and validators,\n      // replace any '*' with a layout built from all schema elements,\n      // and update the FormGroup template with any new validators\n      this.jsf.buildLayout(this.widgetLibrary);\n\n      // Build the Angular FormGroup template from the schema\n      this.jsf.buildFormGroupTemplate(this.jsf.formValues);\n\n      // Build the real Angular FormGroup from the FormGroup template\n      this.jsf.buildFormGroup();\n    }\n\n    if (this.jsf.formGroup) {\n\n      // Reset initial form values\n      if (!isEmpty(this.jsf.formValues) &&\n        this.jsf.formOptions.setSchemaDefaults !== true &&\n        this.jsf.formOptions.setLayoutDefaults !== true\n      ) {\n        this.setFormValues(this.jsf.formValues);\n      }\n\n      // TODO: Figure out how to display calculated values without changing object data\n      // See http://ulion.github.io/jsonform/playground/?example=templating-values\n      // Calculate references to other fields\n      // if (!isEmpty(this.jsf.formGroup.value)) {\n      //   forEach(this.jsf.formGroup.value, (value, key, object, rootObject) => {\n      //     if (typeof value === 'string') {\n      //       object[key] = this.jsf.parseText(value, value, rootObject, key);\n      //     }\n      //   }, 'top-down');\n      // }\n\n      // Subscribe to form changes to output live data, validation, and errors\n      this.jsf.dataChanges.pipe(takeUntil(this.unsubscribeOnActivateForm$)).subscribe(data => {\n        this.onChanges.emit(this.objectWrap ? data['1'] : data);\n        if (this.formValuesInput && this.formValuesInput.indexOf('.') === -1) {\n          this[`${this.formValuesInput}Change`].emit(this.objectWrap ? data['1'] : data);\n        }\n      });\n\n      // Trigger change detection on statusChanges to show updated errors\n      this.jsf.formGroup.statusChanges.pipe(takeUntil(this.unsubscribeOnActivateForm$)).subscribe(() => this.changeDetector.markForCheck());\n      this.jsf.isValidChanges.pipe(takeUntil(this.unsubscribeOnActivateForm$)).subscribe(isValid => this.isValid.emit(isValid));\n      this.jsf.validationErrorChanges.pipe(takeUntil(this.unsubscribeOnActivateForm$)).subscribe(err => this.validationErrors.emit(err));\n\n      // Output final schema, final layout, and initial data\n      this.formSchema.emit(this.jsf.schema);\n      this.formLayout.emit(this.jsf.layout);\n      this.onChanges.emit(this.objectWrap ? this.jsf.data['1'] : this.jsf.data);\n\n      // If validateOnRender, output initial validation and any errors\n      const validateOnRender =\n        JsonPointer.get(this.jsf, '/formOptions/validateOnRender');\n      if (validateOnRender) { // validateOnRender === 'auto' || true\n        const touchAll = (control) => {\n          if (validateOnRender === true || hasValue(control.value)) {\n            control.markAsTouched();\n          }\n          Object.keys(control.controls || {})\n            .forEach(key => touchAll(control.controls[key]));\n        };\n        touchAll(this.jsf.formGroup);\n        this.isValid.emit(this.jsf.isValid);\n        this.validationErrors.emit(this.jsf.ajvErrors);\n      }\n    }\n  }\n}\n","<form [autocomplete]=\"jsf?.formOptions?.autocomplete ? 'on' : 'off'\" class=\"json-schema-form\" (ngSubmit)=\"submitForm()\">\n  <root-widget [layout]=\"jsf?.layout\"></root-widget>\n</form>\n<div *ngIf=\"debug || jsf?.formOptions?.debug\">\n  Debug output:\n  <pre>{{debugOutput}}</pre>\n</div>","import { Component, Input } from '@angular/core';\n\n@Component({\n  selector: 'no-framework',\n  templateUrl: './no-framework.component.html',\n})\nexport class NoFrameworkComponent {\n  @Input() layoutNode: any;\n  @Input() layoutIndex: number[];\n  @Input() dataIndex: number[];\n}\n","<select-widget-widget [dataIndex]=\"dataIndex\" [layoutIndex]=\"layoutIndex\" [layoutNode]=\"layoutNode\">\n</select-widget-widget>","import { Injectable } from '@angular/core';\nimport { Framework } from './framework';\nimport { NoFrameworkComponent } from './no-framework.component';\n// No framework - plain HTML controls (styles from form layout only)\n\n@Injectable()\nexport class NoFramework extends Framework {\n  name = 'no-framework';\n\n  framework = NoFrameworkComponent;\n}\n","import { AbstractControl } from '@angular/forms';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { JsonSchemaFormService } from '../json-schema-form.service';\n\n\n@Component({\n  // tslint:disable-next-line:component-selector\n  selector: 'hidden-widget',\n  template: `\n    <input *ngIf=\"boundControl\"\n      [formControl]=\"formControl\"\n      [id]=\"'control' + layoutNode?._id\"\n      [name]=\"controlName\"\n      type=\"hidden\">\n    <input *ngIf=\"!boundControl\"\n      [disabled]=\"controlDisabled\"\n      [name]=\"controlName\"\n      [id]=\"'control' + layoutNode?._id\"\n      type=\"hidden\"\n      [value]=\"controlValue\">`,\n})\nexport class HiddenComponent implements OnInit {\n  formControl: AbstractControl;\n  controlName: string;\n  controlValue: any;\n  controlDisabled = false;\n  boundControl = false;\n  @Input() layoutNode: any;\n  @Input() layoutIndex: number[];\n  @Input() dataIndex: number[];\n\n  constructor(\n    private jsf: JsonSchemaFormService\n  ) { }\n\n  ngOnInit() {\n    this.jsf.initializeControl(this);\n  }\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { JsonSchemaFormService } from '../json-schema-form.service';\n\n\n@Component({\n  // tslint:disable-next-line:component-selector\n  selector: 'tab-widget',\n  template: `\n    <div [class]=\"options?.htmlClass || ''\">\n      <root-widget\n        [dataIndex]=\"dataIndex\"\n        [layoutIndex]=\"layoutIndex\"\n        [layout]=\"layoutNode.items\"></root-widget>\n    </div>`,\n})\nexport class TabComponent implements OnInit {\n  options: any;\n  @Input() layoutNode: any;\n  @Input() layoutIndex: number[];\n  @Input() dataIndex: number[];\n\n  constructor(\n    private jsf: JsonSchemaFormService\n  ) { }\n\n  ngOnInit() {\n    this.options = this.layoutNode.options || {};\n  }\n}\n","import { AddReferenceComponent } from './add-reference.component';\nimport { ButtonComponent } from './button.component';\nimport { CheckboxComponent } from './checkbox.component';\nimport { CheckboxesComponent } from './checkboxes.component';\nimport { FileComponent } from './file.component';\nimport { HiddenComponent } from './hidden.component';\nimport { InputComponent } from './input.component';\nimport { MessageComponent } from './message.component';\nimport { NoneComponent } from './none.component';\nimport { NumberComponent } from './number.component';\nimport { OneOfComponent } from './one-of.component';\nimport { RadiosComponent } from './radios.component';\nimport { RootComponent } from './root.component';\nimport { SectionComponent } from './section.component';\nimport { SelectComponent } from './select.component';\nimport { SelectFrameworkComponent } from './select-framework.component';\nimport { SelectWidgetComponent } from './select-widget.component';\nimport { SubmitComponent } from './submit.component';\nimport { TabComponent } from './tab.component';\nimport { TabsComponent } from './tabs.component';\nimport { TemplateComponent } from './template.component';\nimport { TextareaComponent } from './textarea.component';\n\nexport const BASIC_WIDGETS = [\n  AddReferenceComponent, OneOfComponent, ButtonComponent, CheckboxComponent,\n  CheckboxesComponent, FileComponent, HiddenComponent, InputComponent,\n  MessageComponent, NoneComponent, NumberComponent, RadiosComponent,\n  RootComponent, SectionComponent, SelectComponent, SelectFrameworkComponent,\n  SelectWidgetComponent, SubmitComponent, TabComponent, TabsComponent,\n  TemplateComponent, TextareaComponent\n];\n\nexport { AddReferenceComponent } from './add-reference.component';\nexport { OneOfComponent } from './one-of.component';\nexport { ButtonComponent } from './button.component';\nexport { CheckboxComponent } from './checkbox.component';\nexport { CheckboxesComponent } from './checkboxes.component';\nexport { FileComponent } from './file.component';\nexport { HiddenComponent } from './hidden.component';\nexport { InputComponent } from './input.component';\nexport { MessageComponent } from './message.component';\nexport { NoneComponent } from './none.component';\nexport { NumberComponent } from './number.component';\nexport { OrderableDirective } from './orderable.directive';\nexport { RadiosComponent } from './radios.component';\nexport { RootComponent } from './root.component';\nexport { SectionComponent } from './section.component';\nexport { SelectComponent } from './select.component';\nexport { SelectFrameworkComponent } from './select-framework.component';\nexport { SelectWidgetComponent } from './select-widget.component';\nexport { SubmitComponent } from './submit.component';\nexport { TabComponent } from './tab.component';\nexport { TabsComponent } from './tabs.component';\nexport { TemplateComponent } from './template.component';\nexport { TextareaComponent } from './textarea.component';\nexport { WidgetLibraryService } from './widget-library.service';\n","import { BASIC_WIDGETS } from './index';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { NgModule } from '@angular/core';\nimport { OrderableDirective } from './orderable.directive';\n\n@NgModule({\n    imports: [CommonModule, FormsModule, ReactiveFormsModule],\n    declarations: [...BASIC_WIDGETS, OrderableDirective],\n    exports: [...BASIC_WIDGETS, OrderableDirective]\n})\nexport class WidgetLibraryModule {\n}\n","import { CommonModule } from '@angular/common';\nimport { Framework } from './framework';\nimport { NgModule } from '@angular/core';\nimport { NoFramework } from './no.framework';\nimport { NoFrameworkComponent } from './no-framework.component';\nimport { WidgetLibraryModule } from '../widget-library/widget-library.module';\n\n// No framework - plain HTML controls (styles from form layout only)\n\n@NgModule({\n    imports: [CommonModule, WidgetLibraryModule],\n    declarations: [NoFrameworkComponent],\n    exports: [NoFrameworkComponent],\n    providers: [\n        { provide: Framework, useClass: NoFramework, multi: true }\n    ]\n})\nexport class NoFrameworkModule { }\n","import { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { NgModule } from '@angular/core';\nimport { JsonSchemaFormComponent } from './json-schema-form.component';\nimport { NoFrameworkModule } from './framework-library/no-framework.module';\nimport { WidgetLibraryModule } from './widget-library/widget-library.module';\n\n@NgModule({\n  imports: [\n    CommonModule, FormsModule, ReactiveFormsModule,\n    WidgetLibraryModule, NoFrameworkModule\n  ],\n  declarations: [JsonSchemaFormComponent],\n  exports: [JsonSchemaFormComponent, WidgetLibraryModule]\n})\nexport class JsonSchemaFormModule {\n}\n","/*\n * Public API Surface of json-schema-form\n */\n\nexport { JsonSchemaFormModule } from './lib/json-schema-form.module';\nexport { TitleMapItem, ErrorMessages, JsonSchemaFormService } from './lib/json-schema-form.service';\nexport { JsonSchemaFormComponent } from './lib/json-schema-form.component';\nexport { Framework } from './lib/framework-library/framework';\nexport { FrameworkLibraryService } from './lib/framework-library/framework-library.service';\nexport {\n    deValidationMessages,\n    enValidationMessages,\n    esValidationMessages,\n    frValidationMessages,\n    itValidationMessages,\n    ptValidationMessages,\n    zhValidationMessages\n  } from './lib/locale';\nexport * from './lib/widget-library';\nexport * from './lib/widget-library/widget-library.module';\nexport * from './lib/shared';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["isEqual","map","i1.JsonSchemaFormService","i3.SelectFrameworkComponent","i4.OrderableDirective","i3.RootComponent","i1.FrameworkLibraryService","i2.WidgetLibraryService","i3.JsonSchemaFormService","i4","i5","i6.RootComponent","i1.SelectWidgetComponent","i2.RootComponent","i1.AddReferenceComponent","i2.OneOfComponent","i3.ButtonComponent","i4.CheckboxComponent","i5.CheckboxesComponent","i6.FileComponent","i7.HiddenComponent","i8.InputComponent","i9.MessageComponent","i10.NoneComponent","i11.NumberComponent","i12.RadiosComponent","i13.RootComponent","i14.SectionComponent","i15.SelectComponent","i16.SelectFrameworkComponent","i17.SelectWidgetComponent","i18.SubmitComponent","i19.TabComponent","i20.TabsComponent","i21.TemplateComponent","i22.TextareaComponent"],"mappings":"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"}