{"version":3,"sources":["../src/utils/rjsf/refResolver.ts","../src/utils/rjsf/fieldMapper.ts","../src/utils/rjsf/ruleConverter.ts","../src/utils/rjsf/converter.ts","../src/utils/rjsf/reverseConverter.ts"],"sourcesContent":["import { IJsonSchemaNode } from \"./types\";\n\n/**\n * Resolve all $ref pointers in a JSON Schema, inlining referenced definitions.\n *\n * - Handles both `definitions` (draft-04) and `$defs` (draft-2019+)\n * - Merges sibling properties alongside $ref (title, description override)\n * - Detects circular references via visited set, falls back to { type: \"string\" }\n * - Strips definitions/$defs from output\n */\nexport function resolveRefs(schema: IJsonSchemaNode, maxDepth: number = 64): IJsonSchemaNode {\n  const defs: Record<string, IJsonSchemaNode> = {\n    ...(schema.definitions ?? {}),\n    ...(schema.$defs ?? {}),\n  };\n\n  const resolved = resolveNode(schema, defs, new Set<string>(), 0, maxDepth);\n\n  // Strip definition blocks from output\n  const { definitions: _d, $defs: _dd, ...clean } = resolved;\n  return clean;\n}\n\nfunction resolveNode(\n  node: IJsonSchemaNode,\n  defs: Record<string, IJsonSchemaNode>,\n  visited: Set<string>,\n  depth: number = 0,\n  maxDepth: number = 64\n): IJsonSchemaNode {\n  // Per audit P0-10: bound recursion to prevent stack overflow from deeply\n  // nested / pathologically-constructed JSON Schemas.\n  if (depth > maxDepth) {\n    throw new Error(\n      `[formosaic:rjsf] Maximum schema recursion depth (${maxDepth}) exceeded during $ref resolution.`\n    );\n  }\n  if (node.$ref) {\n    const refPath = node.$ref;\n\n    if (visited.has(refPath)) {\n      // Circular reference — fall back to string\n      return { type: \"string\" };\n    }\n\n    const resolved = lookupRef(refPath, defs);\n    if (!resolved) {\n      return { type: \"string\" };\n    }\n\n    visited.add(refPath);\n\n    // Merge sibling properties (title, description, etc.) over the resolved def\n    const { $ref: _ref, ...siblings } = node;\n    const inlined = resolveNode({ ...resolved, ...siblings }, defs, visited, depth + 1, maxDepth);\n\n    visited.delete(refPath);\n    return inlined;\n  }\n\n  const result: IJsonSchemaNode = {};\n\n  for (const [key, value] of Object.entries(node)) {\n    if (key === \"definitions\" || key === \"$defs\") {\n      continue;\n    }\n\n    if (key === \"properties\" && value && typeof value === \"object\") {\n      const props: Record<string, IJsonSchemaNode> = {};\n      for (const [propName, propValue] of Object.entries(\n        value as Record<string, IJsonSchemaNode>\n      )) {\n        props[propName] = resolveNode(propValue, defs, visited, depth + 1, maxDepth);\n      }\n      result.properties = props;\n    } else if (key === \"items\") {\n      if (Array.isArray(value)) {\n        result.items = value.map((item: IJsonSchemaNode) =>\n          resolveNode(item, defs, visited, depth + 1, maxDepth)\n        ) as unknown as IJsonSchemaNode;\n      } else if (value && typeof value === \"object\") {\n        result.items = resolveNode(value as IJsonSchemaNode, defs, visited, depth + 1, maxDepth);\n      }\n    } else if (\n      (key === \"allOf\" || key === \"oneOf\" || key === \"anyOf\") &&\n      Array.isArray(value)\n    ) {\n      (result as Record<string, unknown>)[key] = value.map(\n        (item: IJsonSchemaNode) => resolveNode(item, defs, visited, depth + 1, maxDepth)\n      );\n    } else if (key === \"if\" || key === \"then\" || key === \"else\") {\n      if (value && typeof value === \"object\") {\n        (result as Record<string, unknown>)[key] = resolveNode(\n          value as IJsonSchemaNode,\n          defs,\n          visited,\n          depth + 1,\n          maxDepth\n        );\n      }\n    } else if (key === \"dependencies\" && value && typeof value === \"object\") {\n      const deps: Record<string, string[] | IJsonSchemaNode> = {};\n      for (const [depName, depValue] of Object.entries(\n        value as Record<string, string[] | IJsonSchemaNode>\n      )) {\n        if (Array.isArray(depValue)) {\n          deps[depName] = depValue;\n        } else if (typeof depValue === \"object\" && depValue !== null) {\n          deps[depName] = resolveNode(\n            depValue as IJsonSchemaNode,\n            defs,\n            visited,\n            depth + 1,\n            maxDepth\n          );\n        }\n      }\n      result.dependencies = deps;\n    } else if (\n      key === \"additionalProperties\" &&\n      value &&\n      typeof value === \"object\"\n    ) {\n      result.additionalProperties = resolveNode(\n        value as IJsonSchemaNode,\n        defs,\n        visited,\n        depth + 1,\n        maxDepth\n      );\n    } else if (key === \"__proto__\" || key === \"constructor\" || key === \"prototype\") {\n      // Per audit P0-10: skip prototype-pollution keys.\n      continue;\n    } else {\n      (result as Record<string, unknown>)[key] = value;\n    }\n  }\n\n  return result;\n}\n\nfunction lookupRef(\n  ref: string,\n  defs: Record<string, IJsonSchemaNode>\n): IJsonSchemaNode | undefined {\n  // Support \"#/definitions/Foo\" and \"#/$defs/Foo\"\n  const match = ref.match(/^#\\/(?:definitions|\\$defs)\\/(.+)$/);\n  if (!match) return undefined;\n\n  const path = match[1];\n  // Handle nested paths like \"Foo/Bar\"\n  const parts = path.split(\"/\");\n  let current: IJsonSchemaNode | undefined = defs[parts[0]];\n  for (let i = 1; i < parts.length && current; i++) {\n    current = (current as Record<string, IJsonSchemaNode>)[parts[i]];\n  }\n  return current;\n}\n","import { IFieldConfig } from \"../../types/IFieldConfig\";\nimport { IOption } from \"../../types/IOption\";\nimport { IValidationRule } from \"../../types/IValidationRule\";\nimport { IJsonSchemaNode, IRjsfUiSchema } from \"./types\";\n\n/**\n * Map from RJSF ui:widget names to our component type keys.\n */\nconst WIDGET_MAP: Record<string, string> = {\n  text: \"Textbox\",\n  textarea: \"Textarea\",\n  password: \"Textbox\",\n  color: \"Textbox\",\n  hidden: \"DynamicFragment\",\n  select: \"Dropdown\",\n  radio: \"Dropdown\",\n  checkboxes: \"Multiselect\",\n  updown: \"Number\",\n  range: \"Slider\",\n  date: \"DateControl\",\n  datetime: \"DateControl\",\n  \"date-time\": \"DateControl\",\n  file: \"DocumentLinks\",\n  checkbox: \"Toggle\",\n};\n\n/**\n * Config overrides for specific widgets (e.g., password → config.type:\"password\").\n */\nconst WIDGET_CONFIG: Record<string, Record<string, unknown>> = {\n  password: { type: \"password\" },\n  color: { type: \"color\" },\n  radio: { display: \"radio\" },\n  checkboxes: { display: \"checkboxes\" },\n};\n\n/**\n * Convert a JSON Schema node to an IFieldConfig.\n */\nexport function schemaNodeToFieldConfig(\n  fieldName: string,\n  node: IJsonSchemaNode,\n  isRequired: boolean\n): IFieldConfig {\n  const type = mapTypeToComponent(node);\n  const validate = extractValidationRules(node);\n  const options = extractOptions(node);\n\n  const config: IFieldConfig = {\n    type,\n    label: node.title ?? fieldName,\n    required: isRequired,\n  };\n\n  if (validate.length > 0) config.validate = validate;\n  if (options) config.options = options;\n  if (node.default !== undefined) config.defaultValue = node.default;\n  if (node.description) config.description = node.description;\n\n  // const fields are read-only with the const as default\n  if (node.const !== undefined) {\n    config.readOnly = true;\n    config.defaultValue = node.const;\n  }\n\n  return config;\n}\n\n/**\n * Extract IValidationRule[] from JSON Schema constraints.\n */\nexport function extractValidationRules(\n  node: IJsonSchemaNode\n): IValidationRule[] {\n  const rules: IValidationRule[] = [];\n\n  if (node.minLength !== undefined) {\n    rules.push({ name: \"minLength\", params: { min: node.minLength } });\n  }\n  if (node.maxLength !== undefined) {\n    rules.push({ name: \"maxLength\", params: { max: node.maxLength } });\n  }\n  if (node.pattern) {\n    rules.push({\n      name: \"pattern\",\n      params: { pattern: node.pattern, message: \"Must match pattern\" },\n    });\n  }\n\n  // Numeric ranges\n  const hasMin = node.minimum !== undefined;\n  const hasMax = node.maximum !== undefined;\n  const hasExclMin = node.exclusiveMinimum !== undefined;\n  const hasExclMax = node.exclusiveMaximum !== undefined;\n\n  if (hasExclMin || hasExclMax) {\n    rules.push({\n      name: \"exclusiveNumericRange\",\n      params: {\n        exclusiveMin: node.exclusiveMinimum,\n        exclusiveMax: node.exclusiveMaximum,\n        min: node.minimum,\n        max: node.maximum,\n      },\n    });\n  } else if (hasMin || hasMax) {\n    rules.push({\n      name: \"numericRange\",\n      params: {\n        min: node.minimum ?? -Infinity,\n        max: node.maximum ?? Infinity,\n      },\n    });\n  }\n\n  if (node.multipleOf !== undefined) {\n    rules.push({\n      name: \"multipleOf\",\n      params: { factor: node.multipleOf },\n    });\n  }\n\n  // Format-based validators\n  if (node.format === \"email\") rules.push({ name: \"email\" });\n  if (node.format === \"uri\" || node.format === \"url\") rules.push({ name: \"url\" });\n  if (node.format === \"phone\") rules.push({ name: \"phone\" });\n\n  if (node.uniqueItems) {\n    rules.push({ name: \"uniqueInArray\" });\n  }\n\n  return rules;\n}\n\n/**\n * Apply RJSF uiSchema overrides to an IFieldConfig.\n */\nexport function applyUiSchema(\n  config: IFieldConfig,\n  uiSchema: IRjsfUiSchema\n): IFieldConfig {\n  const result = { ...config };\n\n  // Widget → component type override\n  const widget = uiSchema[\"ui:widget\"];\n  if (typeof widget === \"string\" && WIDGET_MAP[widget]) {\n    result.type = WIDGET_MAP[widget];\n    // Apply widget-specific config\n    const extraConfig = WIDGET_CONFIG[widget];\n    if (extraConfig) {\n      result.config = { ...(result.config ?? {}), ...extraConfig };\n    }\n  }\n\n  if (uiSchema[\"ui:title\"]) result.label = uiSchema[\"ui:title\"] as string;\n  if (uiSchema[\"ui:description\"])\n    result.description = uiSchema[\"ui:description\"] as string;\n  if (uiSchema[\"ui:help\"]) result.helpText = uiSchema[\"ui:help\"] as string;\n  if (uiSchema[\"ui:placeholder\"])\n    result.placeholder = uiSchema[\"ui:placeholder\"] as string;\n  if (uiSchema[\"ui:hidden\"] === true) result.hidden = true;\n  if (uiSchema[\"ui:readonly\"] === true) result.readOnly = true;\n  if (uiSchema[\"ui:disabled\"] === true) result.disabled = true;\n\n  if (uiSchema[\"ui:autofocus\"] === true) {\n    result.config = { ...(result.config ?? {}), autofocus: true };\n  }\n  if (uiSchema[\"ui:classNames\"]) {\n    result.config = {\n      ...(result.config ?? {}),\n      className: uiSchema[\"ui:classNames\"],\n    };\n  }\n  if (uiSchema[\"ui:options\"] && typeof uiSchema[\"ui:options\"] === \"object\") {\n    result.config = { ...(result.config ?? {}), ...uiSchema[\"ui:options\"] };\n  }\n  if (uiSchema[\"ui:label\"] === false) {\n    result.config = { ...(result.config ?? {}), hideLabel: true };\n  }\n\n  // ui:enumDisabled → mark matching options as disabled\n  const enumDisabled = uiSchema[\"ui:enumDisabled\"];\n  if (Array.isArray(enumDisabled) && result.options) {\n    result.options = result.options.map((opt) => ({\n      ...opt,\n      disabled: enumDisabled.includes(opt.value) ? true : opt.disabled,\n    }));\n  }\n\n  // ui:enumNames → override option labels\n  const enumNames = uiSchema[\"ui:enumNames\"];\n  if (Array.isArray(enumNames) && result.options) {\n    result.options = result.options.map((opt, i) => ({\n      ...opt,\n      label: enumNames[i] != null ? String(enumNames[i]) : opt.label,\n    }));\n  }\n\n  return result;\n}\n\n// --- Internal helpers ---\n\nfunction mapTypeToComponent(node: IJsonSchemaNode): string {\n  // Enum always → Dropdown\n  if (node.enum) return \"Dropdown\";\n\n  // const → Textbox (will be read-only)\n  if (node.const !== undefined) return \"Textbox\";\n\n  const type = resolveType(node);\n\n  switch (type) {\n    case \"string\":\n      if (node.format === \"date\" || node.format === \"date-time\") return \"DateControl\";\n      if (node.format === \"data-url\") return \"DocumentLinks\";\n      if (node.maxLength && node.maxLength > 200) return \"Textarea\";\n      return \"Textbox\";\n    case \"number\":\n    case \"integer\":\n      if (node.minimum !== undefined && node.maximum !== undefined) return \"Slider\";\n      return \"Number\";\n    case \"boolean\":\n      return \"Toggle\";\n    case \"array\":\n      return mapArrayType(node);\n    case \"object\":\n      return \"Textbox\"; // Objects handled at converter level\n    default:\n      return \"Textbox\";\n  }\n}\n\nfunction resolveType(node: IJsonSchemaNode): string {\n  if (!node.type) return \"string\";\n  if (typeof node.type === \"string\") return node.type;\n  // Array of types (nullable) — pick first non-null\n  const nonNull = node.type.filter((t) => t !== \"null\");\n  return nonNull[0] ?? \"string\";\n}\n\nfunction mapArrayType(node: IJsonSchemaNode): string {\n  const items = node.items;\n  if (!items || Array.isArray(items)) return \"Multiselect\";\n\n  if (items.enum) return \"Multiselect\";\n  if (items.type === \"object\" && items.properties) return \"FieldArray\";\n  return \"Multiselect\";\n}\n\nfunction extractOptions(node: IJsonSchemaNode): IOption[] | undefined {\n  if (!node.enum) return undefined;\n\n  const names = node.enumNames;\n  return node.enum.map((val, i) => ({\n    value: String(val),\n    label: names && names[i] != null ? String(names[i]) : String(val),\n  }));\n}\n","import { IFieldConfig } from \"../../types/IFieldConfig\";\nimport { ICondition } from \"../../types/ICondition\";\nimport { IRule } from \"../../types/IRule\";\nimport { IJsonSchemaNode } from \"./types\";\nimport { schemaNodeToFieldConfig } from \"./fieldMapper\";\n\n/**\n * Convert JSON Schema `dependencies` to IRule[] attached to affected fields.\n *\n * Handles both property dependencies (string[]) and schema dependencies (object).\n */\nexport function convertDependencies(\n  dependencies: Record<string, string[] | IJsonSchemaNode>,\n  fields: Record<string, IFieldConfig>,\n  rootSchema: IJsonSchemaNode,\n  idPrefix: string\n): void {\n  for (const [sourceField, dep] of Object.entries(dependencies)) {\n    if (Array.isArray(dep)) {\n      // Property dependency: when source is not empty, dependents become required\n      for (const dependentField of dep) {\n        if (!fields[dependentField]) continue;\n        const rule: IRule = {\n          id: `${idPrefix}_dep_${sourceField}_${dependentField}`,\n          when: { field: sourceField, operator: \"isNotEmpty\" },\n          then: { required: true },\n          else: { required: false },\n        };\n        fields[dependentField].rules = [\n          ...(fields[dependentField].rules ?? []),\n          rule,\n        ];\n      }\n    } else {\n      // Schema dependency: source not empty → show/require additional fields\n      convertSchemaDependency(sourceField, dep, fields, rootSchema, idPrefix);\n    }\n  }\n}\n\n/**\n * Convert JSON Schema `if/then/else` to IRule[] attached to affected fields.\n */\nexport function convertIfThenElse(\n  schema: IJsonSchemaNode,\n  fields: Record<string, IFieldConfig>,\n  rootSchema: IJsonSchemaNode,\n  idPrefix: string\n): void {\n  const condition = schemaToCondition(schema.if!);\n  if (!condition) return;\n\n  const thenSchema = schema.then;\n  const elseSchema = schema.else;\n\n  // Collect affected fields from then/else\n  const affectedFields = new Set<string>();\n  if (thenSchema?.properties) {\n    Object.keys(thenSchema.properties).forEach((f) => affectedFields.add(f));\n  }\n  if (thenSchema?.required) {\n    thenSchema.required.forEach((f) => affectedFields.add(f));\n  }\n  if (elseSchema?.properties) {\n    Object.keys(elseSchema.properties).forEach((f) => affectedFields.add(f));\n  }\n  if (elseSchema?.required) {\n    elseSchema.required.forEach((f) => affectedFields.add(f));\n  }\n\n  for (const fieldName of affectedFields) {\n    // Ensure field exists\n    if (!fields[fieldName] && thenSchema?.properties?.[fieldName]) {\n      fields[fieldName] = schemaNodeToFieldConfig(\n        fieldName,\n        thenSchema.properties[fieldName],\n        false\n      );\n      fields[fieldName].hidden = true;\n    }\n    if (!fields[fieldName] && elseSchema?.properties?.[fieldName]) {\n      fields[fieldName] = schemaNodeToFieldConfig(\n        fieldName,\n        elseSchema.properties[fieldName],\n        false\n      );\n      fields[fieldName].hidden = true;\n    }\n    if (!fields[fieldName]) continue;\n\n    const thenEffect: Record<string, unknown> = {};\n    const elseEffect: Record<string, unknown> = {};\n\n    // Visibility\n    if (thenSchema?.properties?.[fieldName]) {\n      thenEffect.hidden = false;\n    }\n    if (elseSchema?.properties?.[fieldName]) {\n      elseEffect.hidden = false;\n    }\n    // If only in then → hide in else\n    if (thenSchema?.properties?.[fieldName] && !elseSchema?.properties?.[fieldName]) {\n      elseEffect.hidden = true;\n    }\n    // If only in else → hide in then\n    if (!thenSchema?.properties?.[fieldName] && elseSchema?.properties?.[fieldName]) {\n      thenEffect.hidden = true;\n    }\n\n    // Required\n    if (thenSchema?.required?.includes(fieldName)) {\n      thenEffect.required = true;\n    }\n    if (elseSchema?.required?.includes(fieldName)) {\n      elseEffect.required = true;\n    }\n\n    const rule: IRule = {\n      id: `${idPrefix}_ite_${fieldName}`,\n      when: condition,\n      then: thenEffect,\n    };\n\n    if (Object.keys(elseEffect).length > 0) {\n      rule.else = elseEffect;\n    }\n\n    fields[fieldName].rules = [...(fields[fieldName].rules ?? []), rule];\n  }\n}\n\n/**\n * Convert oneOf/anyOf composition with discriminator detection to IRule[].\n */\nexport function convertComposition(\n  schema: IJsonSchemaNode,\n  fields: Record<string, IFieldConfig>,\n  rootSchema: IJsonSchemaNode,\n  idPrefix: string\n): void {\n  const variants = schema.oneOf ?? schema.anyOf;\n  if (!variants || variants.length === 0) return;\n\n  const compositionType = schema.oneOf ? \"oneOf\" : \"anyOf\";\n\n  // Detect discriminator: a property that has const/enum in every variant\n  const discriminator = findDiscriminator(variants);\n\n  if (discriminator) {\n    convertWithDiscriminator(\n      discriminator,\n      variants,\n      fields,\n      rootSchema,\n      idPrefix,\n      compositionType\n    );\n  } else {\n    convertWithSyntheticDiscriminator(\n      variants,\n      fields,\n      rootSchema,\n      idPrefix,\n      compositionType\n    );\n  }\n}\n\n/**\n * Convert a JSON Schema condition shape to our ICondition type.\n * Used for if/then/else, dependencies, and composition detection.\n */\nexport function schemaToCondition(\n  schema: IJsonSchemaNode\n): ICondition | null {\n  if (!schema) return null;\n\n  // { not: {...} }\n  if (schema.not) {\n    const inner = schemaToCondition(schema.not as IJsonSchemaNode);\n    if (!inner) return null;\n    return { operator: \"not\", conditions: [inner] };\n  }\n\n  // { allOf: [...] }\n  if (schema.allOf && schema.allOf.length > 0) {\n    const conditions = schema.allOf\n      .map((s) => schemaToCondition(s))\n      .filter((c): c is ICondition => c !== null);\n    if (conditions.length === 0) return null;\n    if (conditions.length === 1) return conditions[0];\n    return { operator: \"and\", conditions };\n  }\n\n  // { anyOf: [...] }\n  if (schema.anyOf && schema.anyOf.length > 0) {\n    const conditions = schema.anyOf\n      .map((s) => schemaToCondition(s))\n      .filter((c): c is ICondition => c !== null);\n    if (conditions.length === 0) return null;\n    if (conditions.length === 1) return conditions[0];\n    return { operator: \"or\", conditions };\n  }\n\n  // { required: [\"x\"] } without properties → isNotEmpty\n  if (schema.required && !schema.properties) {\n    const conditions: ICondition[] = schema.required.map((field) => ({\n      field,\n      operator: \"isNotEmpty\" as const,\n    }));\n    if (conditions.length === 1) return conditions[0];\n    return { operator: \"and\", conditions };\n  }\n\n  // { properties: { x: { const: v } } }\n  if (schema.properties) {\n    const conditions: ICondition[] = [];\n\n    for (const [field, propSchema] of Object.entries(schema.properties)) {\n      const condition = propertySchemaToCondition(field, propSchema);\n      if (condition) conditions.push(condition);\n    }\n\n    // Also handle required alongside properties\n    if (schema.required) {\n      for (const field of schema.required) {\n        if (!schema.properties[field]) {\n          conditions.push({ field, operator: \"isNotEmpty\" });\n        }\n      }\n    }\n\n    if (conditions.length === 0) return null;\n    if (conditions.length === 1) return conditions[0];\n    return { operator: \"and\", conditions };\n  }\n\n  return null;\n}\n\n// --- Internal helpers ---\n\nfunction propertySchemaToCondition(\n  field: string,\n  schema: IJsonSchemaNode\n): ICondition | null {\n  if (schema.const !== undefined) {\n    return { field, operator: \"equals\", value: schema.const };\n  }\n  if (schema.enum && schema.enum.length > 0) {\n    return { field, operator: \"in\", value: schema.enum };\n  }\n  if (schema.minimum !== undefined) {\n    return { field, operator: \"greaterThanOrEqual\", value: schema.minimum };\n  }\n  if (schema.maximum !== undefined) {\n    return { field, operator: \"lessThanOrEqual\", value: schema.maximum };\n  }\n  if (schema.minLength !== undefined && schema.minLength > 0) {\n    return { field, operator: \"isNotEmpty\" };\n  }\n  if (schema.pattern) {\n    return { field, operator: \"matches\", value: schema.pattern };\n  }\n\n  return null;\n}\n\nfunction convertSchemaDependency(\n  sourceField: string,\n  depSchema: IJsonSchemaNode,\n  fields: Record<string, IFieldConfig>,\n  rootSchema: IJsonSchemaNode,\n  idPrefix: string\n): void {\n  const depRequired = new Set(depSchema.required ?? []);\n\n  if (depSchema.properties) {\n    for (const [depFieldName, depFieldSchema] of Object.entries(\n      depSchema.properties\n    )) {\n      // Create field if it doesn't exist\n      if (!fields[depFieldName]) {\n        fields[depFieldName] = schemaNodeToFieldConfig(\n          depFieldName,\n          depFieldSchema,\n          depRequired.has(depFieldName)\n        );\n        fields[depFieldName].hidden = true;\n      }\n\n      const rule: IRule = {\n        id: `${idPrefix}_schemadep_${sourceField}_${depFieldName}`,\n        when: { field: sourceField, operator: \"isNotEmpty\" },\n        then: {\n          hidden: false,\n          ...(depRequired.has(depFieldName) ? { required: true } : {}),\n        },\n        else: {\n          hidden: true,\n        },\n      };\n\n      fields[depFieldName].rules = [\n        ...(fields[depFieldName].rules ?? []),\n        rule,\n      ];\n    }\n  }\n\n  // Handle oneOf inside schema dependencies (common RJSF pattern)\n  if (depSchema.oneOf) {\n    convertComposition(\n      depSchema,\n      fields,\n      rootSchema,\n      `${idPrefix}_schemadep_${sourceField}`\n    );\n  }\n}\n\nfunction findDiscriminator(\n  variants: IJsonSchemaNode[]\n): string | null {\n  if (variants.length < 2) return null;\n\n  // Find properties that appear in all variants with const or single-value enum\n  const firstVariant = variants[0];\n  if (!firstVariant.properties) return null;\n\n  for (const propName of Object.keys(firstVariant.properties)) {\n    const prop = firstVariant.properties[propName];\n    if (!hasConstOrSingleEnum(prop)) continue;\n\n    // Check all other variants have this property with const/enum\n    const allHave = variants.every(\n      (v) => v.properties?.[propName] && hasConstOrSingleEnum(v.properties[propName])\n    );\n\n    if (allHave) {\n      // Verify all values are distinct\n      const values = variants.map((v) =>\n        getConstValue(v.properties![propName])\n      );\n      const unique = new Set(values.map(String));\n      if (unique.size === variants.length) return propName;\n    }\n  }\n\n  return null;\n}\n\nfunction hasConstOrSingleEnum(node: IJsonSchemaNode): boolean {\n  if (node.const !== undefined) return true;\n  if (node.enum && node.enum.length === 1) return true;\n  return false;\n}\n\nfunction getConstValue(node: IJsonSchemaNode): unknown {\n  if (node.const !== undefined) return node.const;\n  if (node.enum && node.enum.length === 1) return node.enum[0];\n  return undefined;\n}\n\nfunction convertWithDiscriminator(\n  discriminatorField: string,\n  variants: IJsonSchemaNode[],\n  fields: Record<string, IFieldConfig>,\n  rootSchema: IJsonSchemaNode,\n  idPrefix: string,\n  compositionType: string\n): void {\n  // Ensure discriminator field exists as a dropdown\n  const allValues = variants.map((v) =>\n    getConstValue(v.properties![discriminatorField])\n  );\n  if (!fields[discriminatorField]) {\n    fields[discriminatorField] = {\n      type: \"Dropdown\",\n      label: discriminatorField,\n      options: allValues.map((v) => ({\n        value: String(v),\n        label: String(v),\n      })),\n    };\n  }\n\n  // For each variant, create visibility rules for variant-specific fields\n  for (const variant of variants) {\n    if (!variant.properties) continue;\n    const variantValue = getConstValue(variant.properties[discriminatorField]);\n    const variantRequired = new Set(variant.required ?? []);\n\n    for (const [fieldName, fieldSchema] of Object.entries(variant.properties)) {\n      if (fieldName === discriminatorField) continue;\n\n      if (!fields[fieldName]) {\n        fields[fieldName] = schemaNodeToFieldConfig(\n          fieldName,\n          fieldSchema,\n          variantRequired.has(fieldName)\n        );\n        fields[fieldName].hidden = true;\n      }\n\n      const rule: IRule = {\n        id: `${idPrefix}_${compositionType}_${discriminatorField}_${fieldName}`,\n        when: {\n          field: discriminatorField,\n          operator: \"equals\",\n          value: variantValue,\n        },\n        then: {\n          hidden: false,\n          ...(variantRequired.has(fieldName) ? { required: true } : {}),\n        },\n        else: { hidden: true },\n      };\n\n      fields[fieldName].rules = [\n        ...(fields[fieldName].rules ?? []),\n        rule,\n      ];\n    }\n  }\n}\n\nfunction convertWithSyntheticDiscriminator(\n  variants: IJsonSchemaNode[],\n  fields: Record<string, IFieldConfig>,\n  rootSchema: IJsonSchemaNode,\n  idPrefix: string,\n  compositionType: string\n): void {\n  // Create a synthetic _variant dropdown\n  const options = variants.map((_, i) => ({\n    value: String(i),\n    label: `Option ${i + 1}`,\n  }));\n\n  fields[\"_variant\"] = {\n    type: \"Dropdown\",\n    label: \"Variant\",\n    options,\n  };\n\n  // For each variant, create visibility rules\n  for (let i = 0; i < variants.length; i++) {\n    const variant = variants[i];\n    if (!variant.properties) continue;\n    const variantRequired = new Set(variant.required ?? []);\n\n    for (const [fieldName, fieldSchema] of Object.entries(variant.properties)) {\n      if (!fields[fieldName]) {\n        fields[fieldName] = schemaNodeToFieldConfig(\n          fieldName,\n          fieldSchema,\n          variantRequired.has(fieldName)\n        );\n        fields[fieldName].hidden = true;\n      }\n\n      const rule: IRule = {\n        id: `${idPrefix}_${compositionType}_variant${i}_${fieldName}`,\n        when: {\n          field: \"_variant\",\n          operator: \"equals\",\n          value: String(i),\n        },\n        then: {\n          hidden: false,\n          ...(variantRequired.has(fieldName) ? { required: true } : {}),\n        },\n        else: { hidden: true },\n      };\n\n      fields[fieldName].rules = [\n        ...(fields[fieldName].rules ?? []),\n        rule,\n      ];\n    }\n  }\n}\n","import { IFieldConfig } from \"../../types/IFieldConfig\";\nimport { IFormConfig } from \"../../types/IFormConfig\";\nimport { IJsonSchemaNode, IRjsfUiSchema, IRjsfConvertOptions } from \"./types\";\nimport { resolveRefs } from \"./refResolver\";\nimport {\n  schemaNodeToFieldConfig,\n  applyUiSchema,\n  extractValidationRules,\n} from \"./fieldMapper\";\nimport {\n  convertDependencies,\n  convertIfThenElse,\n  convertComposition,\n} from \"./ruleConverter\";\n\n/**\n * Convert an RJSF schema + uiSchema + formData into an IFormConfig (v2).\n *\n * This is the main entry point for RJSF migration. It:\n * 1. Resolves all $ref pointers\n * 2. Merges allOf if present\n * 3. Maps properties to IFieldConfig\n * 4. Applies uiSchema rendering hints\n * 5. Merges formData as defaultValues\n * 6. Converts dependencies → IRule[]\n * 7. Converts if/then/else → IRule[]\n * 8. Converts oneOf/anyOf → IRule[]\n * 9. Determines fieldOrder from uiSchema or property order\n */\nexport function fromRjsfSchema(\n  schema: IJsonSchemaNode,\n  uiSchema?: IRjsfUiSchema,\n  formData?: Record<string, unknown>,\n  options?: IRjsfConvertOptions\n): IFormConfig {\n  const strategy = options?.nestedObjectStrategy ?? \"flatten\";\n  const idPrefix = options?.ruleIdPrefix ?? \"rjsf\";\n\n  // Step 1: Resolve $ref pointers\n  const resolved = resolveRefs(schema);\n\n  // Step 2: Merge allOf if present\n  const merged = mergeAllOf(resolved);\n\n  // Step 3: Map properties to field configs\n  const fields: Record<string, IFieldConfig> = {};\n  const requiredSet = new Set(merged.required ?? []);\n\n  if (merged.properties) {\n    mapProperties(\n      merged.properties,\n      requiredSet,\n      fields,\n      \"\",\n      strategy,\n      uiSchema,\n      formData\n    );\n  }\n\n  // Step 4-5 handled in mapProperties\n\n  // Step 6: Convert dependencies\n  if (merged.dependencies) {\n    convertDependencies(merged.dependencies, fields, merged, idPrefix);\n  }\n\n  // Step 7: Convert if/then/else\n  if (merged.if) {\n    convertIfThenElse(merged, fields, merged, idPrefix);\n  }\n\n  // Step 8: Convert oneOf/anyOf\n  if (merged.oneOf || merged.anyOf) {\n    convertComposition(merged, fields, merged, idPrefix);\n  }\n\n  // Step 9: Determine field order\n  const fieldOrder = resolveFieldOrder(fields, uiSchema);\n\n  return {\n    version: 2,\n    fields,\n    fieldOrder,\n  };\n}\n\n// --- Internal helpers ---\n\nfunction mapProperties(\n  properties: Record<string, IJsonSchemaNode>,\n  requiredSet: Set<string>,\n  fields: Record<string, IFieldConfig>,\n  prefix: string,\n  strategy: \"flatten\" | \"fieldArray\",\n  uiSchema?: IRjsfUiSchema,\n  formData?: Record<string, unknown>\n): void {\n  for (const [propName, propSchema] of Object.entries(properties)) {\n    const fullName = prefix ? `${prefix}.${propName}` : propName;\n    const isRequired = requiredSet.has(propName);\n\n    if (isObjectType(propSchema) && propSchema.properties) {\n      if (strategy === \"flatten\") {\n        // Flatten: recurse with dot-prefix\n        const nestedRequired = new Set(propSchema.required ?? []);\n        const nestedUiSchema = uiSchema?.[propName] as IRjsfUiSchema | undefined;\n        const nestedFormData = formData?.[propName] as\n          | Record<string, unknown>\n          | undefined;\n        mapProperties(\n          propSchema.properties,\n          nestedRequired,\n          fields,\n          fullName,\n          strategy,\n          nestedUiSchema,\n          nestedFormData\n        );\n        continue;\n      } else {\n        // FieldArray strategy for nested objects\n        const items: Record<string, IFieldConfig> = {};\n        const nestedRequired = new Set(propSchema.required ?? []);\n        for (const [itemProp, itemSchema] of Object.entries(\n          propSchema.properties\n        )) {\n          items[itemProp] = schemaNodeToFieldConfig(\n            itemProp,\n            itemSchema,\n            nestedRequired.has(itemProp)\n          );\n        }\n        fields[fullName] = {\n          type: \"FieldArray\",\n          label: propSchema.title ?? propName,\n          items,\n        };\n        continue;\n      }\n    }\n\n    // Array with object items → FieldArray\n    if (isArrayWithObjectItems(propSchema)) {\n      const itemSchema = propSchema.items as IJsonSchemaNode;\n      const items: Record<string, IFieldConfig> = {};\n      const itemRequired = new Set(itemSchema.required ?? []);\n      if (itemSchema.properties) {\n        for (const [itemProp, itemPropSchema] of Object.entries(\n          itemSchema.properties\n        )) {\n          items[itemProp] = schemaNodeToFieldConfig(\n            itemProp,\n            itemPropSchema,\n            itemRequired.has(itemProp)\n          );\n        }\n      }\n      const config = schemaNodeToFieldConfig(fullName, propSchema, isRequired);\n      config.type = \"FieldArray\";\n      config.items = items;\n      if (propSchema.minItems !== undefined) config.minItems = propSchema.minItems;\n      if (propSchema.maxItems !== undefined) config.maxItems = propSchema.maxItems;\n      fields[fullName] = config;\n\n      // Apply uiSchema\n      const fieldUiSchema = getFieldUiSchema(uiSchema, propName, prefix);\n      if (fieldUiSchema) {\n        fields[fullName] = applyUiSchema(fields[fullName], fieldUiSchema);\n      }\n\n      // Apply formData\n      const dataValue = getFormDataValue(formData, propName);\n      if (dataValue !== undefined && fields[fullName].defaultValue === undefined) {\n        fields[fullName].defaultValue = dataValue;\n      }\n\n      continue;\n    }\n\n    // Standard field\n    const config = schemaNodeToFieldConfig(fullName, propSchema, isRequired);\n    fields[fullName] = config;\n\n    // Apply uiSchema\n    const fieldUiSchema = getFieldUiSchema(uiSchema, propName, prefix);\n    if (fieldUiSchema) {\n      fields[fullName] = applyUiSchema(fields[fullName], fieldUiSchema);\n    }\n\n    // Apply formData as defaultValue\n    const dataValue = getFormDataValue(formData, propName);\n    if (dataValue !== undefined && fields[fullName].defaultValue === undefined) {\n      fields[fullName].defaultValue = dataValue;\n    }\n  }\n}\n\nfunction mergeAllOf(schema: IJsonSchemaNode): IJsonSchemaNode {\n  if (!schema.allOf || schema.allOf.length === 0) return schema;\n\n  const { allOf, ...base } = schema;\n  let result = { ...base };\n\n  for (const subSchema of allOf) {\n    result = mergeSchemas(result, subSchema);\n  }\n\n  return result;\n}\n\nfunction mergeSchemas(\n  a: IJsonSchemaNode,\n  b: IJsonSchemaNode\n): IJsonSchemaNode {\n  const result = { ...a };\n\n  if (b.properties) {\n    result.properties = { ...(result.properties ?? {}), ...b.properties };\n  }\n  if (b.required) {\n    const existing = new Set(result.required ?? []);\n    for (const r of b.required) existing.add(r);\n    result.required = [...existing];\n  }\n  if (b.if) result.if = b.if;\n  if (b.then) result.then = b.then;\n  if (b.else) result.else = b.else;\n  if (b.dependencies) {\n    result.dependencies = {\n      ...(result.dependencies ?? {}),\n      ...b.dependencies,\n    };\n  }\n\n  return result;\n}\n\nfunction isObjectType(node: IJsonSchemaNode): boolean {\n  if (node.type === \"object\") return true;\n  if (Array.isArray(node.type) && node.type.includes(\"object\")) return true;\n  return false;\n}\n\nfunction isArrayWithObjectItems(node: IJsonSchemaNode): boolean {\n  const type = Array.isArray(node.type) ? node.type[0] : node.type;\n  if (type !== \"array\") return false;\n  const items = node.items;\n  if (!items || Array.isArray(items)) return false;\n  return items.type === \"object\" && !!items.properties;\n}\n\nfunction getFieldUiSchema(\n  uiSchema: IRjsfUiSchema | undefined,\n  fieldName: string,\n  prefix: string\n): IRjsfUiSchema | undefined {\n  if (!uiSchema) return undefined;\n  // Navigate into nested uiSchema for prefixed fields\n  if (prefix) {\n    const parts = prefix.split(\".\");\n    let current: IRjsfUiSchema | undefined = uiSchema;\n    for (const part of parts) {\n      current = current?.[part] as IRjsfUiSchema | undefined;\n    }\n    return current?.[fieldName] as IRjsfUiSchema | undefined;\n  }\n  return uiSchema[fieldName] as IRjsfUiSchema | undefined;\n}\n\nfunction getFormDataValue(\n  formData: Record<string, unknown> | undefined,\n  fieldName: string\n): unknown {\n  if (!formData) return undefined;\n  return formData[fieldName];\n}\n\nfunction resolveFieldOrder(\n  fields: Record<string, IFieldConfig>,\n  uiSchema?: IRjsfUiSchema\n): string[] {\n  const uiOrder = uiSchema?.[\"ui:order\"];\n  if (!Array.isArray(uiOrder)) return Object.keys(fields);\n\n  const allFields = new Set(Object.keys(fields));\n  const order: string[] = [];\n  const wildcardIdx = uiOrder.indexOf(\"*\");\n\n  for (const item of uiOrder) {\n    if (item === \"*\") continue;\n    if (allFields.has(item)) {\n      order.push(item);\n      allFields.delete(item);\n    }\n  }\n\n  if (wildcardIdx !== -1) {\n    // Insert remaining fields where * was\n    const remaining = [...allFields];\n    order.splice(wildcardIdx, 0, ...remaining);\n  } else {\n    // Append remaining at end\n    order.push(...allFields);\n  }\n\n  return order;\n}\n","import { IFieldConfig } from \"../../types/IFieldConfig\";\nimport { IFormConfig } from \"../../types/IFormConfig\";\nimport { IJsonSchemaNode, IRjsfUiSchema } from \"./types\";\n\n/**\n * Reverse-convert an IFormConfig to JSON Schema + uiSchema.\n *\n * Best-effort: structural fidelity only. Rules, computed values,\n * and other dynamic features do NOT map back to JSON Schema.\n */\nexport function toRjsfSchema(config: IFormConfig): {\n  schema: IJsonSchemaNode;\n  uiSchema: IRjsfUiSchema;\n} {\n  const properties: Record<string, IJsonSchemaNode> = {};\n  const required: string[] = [];\n  const uiSchema: IRjsfUiSchema = {};\n\n  // Cast fields to Record<string, IFieldConfig>: toRjsfSchema expects resolved configs\n  // (no template refs). If unresolved templateRefs are present they are silently skipped.\n  const resolvedFields = config.fields as Record<string, IFieldConfig>;\n  for (const [fieldName, fieldConfig] of Object.entries(resolvedFields)) {\n    // Skip any unresolved template refs (safety guard)\n    if (!fieldConfig.type) continue;\n\n    // Handle dot-notation (flattened nested objects)\n    if (fieldName.includes(\".\")) {\n      setNestedProperty(properties, required, uiSchema, fieldName, fieldConfig);\n      continue;\n    }\n\n    properties[fieldName] = fieldConfigToSchemaNode(fieldConfig);\n    if (fieldConfig.required) required.push(fieldName);\n\n    const fieldUi = fieldConfigToUiSchema(fieldConfig);\n    if (Object.keys(fieldUi).length > 0) {\n      uiSchema[fieldName] = fieldUi;\n    }\n  }\n\n  // Set field order in uiSchema\n  if (config.fieldOrder && config.fieldOrder.length > 0) {\n    uiSchema[\"ui:order\"] = config.fieldOrder;\n  }\n\n  const schema: IJsonSchemaNode = {\n    type: \"object\",\n    properties,\n  };\n  if (required.length > 0) schema.required = required;\n\n  return { schema, uiSchema };\n}\n\n// --- Internal helpers ---\n\nconst REVERSE_TYPE_MAP: Record<string, string> = {\n  Textbox: \"string\",\n  Textarea: \"string\",\n  Number: \"number\",\n  Slider: \"number\",\n  Toggle: \"boolean\",\n  DateControl: \"string\",\n  Dropdown: \"string\",\n  Multiselect: \"array\",\n  DocumentLinks: \"string\",\n  DynamicFragment: \"string\",\n};\n\nconst REVERSE_WIDGET_MAP: Record<string, string> = {\n  Textarea: \"textarea\",\n  Slider: \"range\",\n  Toggle: \"checkbox\",\n  DocumentLinks: \"file\",\n};\n\nfunction fieldConfigToSchemaNode(config: IFieldConfig): IJsonSchemaNode {\n  const node: IJsonSchemaNode = {};\n\n  // Type\n  const jsonType = REVERSE_TYPE_MAP[config.type] ?? \"string\";\n  node.type = jsonType;\n\n  if (config.label) node.title = config.label;\n  if (config.description) node.description = config.description;\n  if (config.defaultValue !== undefined) node.default = config.defaultValue;\n\n  // Options → enum\n  if (config.options && config.options.length > 0) {\n    node.enum = config.options.map((o) => o.value);\n    const labels = config.options.map((o) => o.label);\n    const valuesAsStrings = config.options.map((o) => String(o.value));\n    // Only set enumNames if labels differ from values\n    if (labels.some((l, i) => l !== valuesAsStrings[i])) {\n      node.enumNames = labels;\n    }\n  }\n\n  // Validation rules → schema constraints\n  if (config.validate) {\n    for (const rule of config.validate) {\n      applyValidationToSchema(node, rule.name, rule.params);\n    }\n  }\n\n  // FieldArray → array with object items\n  if (config.type === \"FieldArray\" && config.items) {\n    node.type = \"array\";\n    const itemProperties: Record<string, IJsonSchemaNode> = {};\n    const itemRequired: string[] = [];\n    for (const [itemName, itemConfig] of Object.entries(config.items)) {\n      itemProperties[itemName] = fieldConfigToSchemaNode(itemConfig);\n      if (itemConfig.required) itemRequired.push(itemName);\n    }\n    node.items = {\n      type: \"object\",\n      properties: itemProperties,\n      ...(itemRequired.length > 0 ? { required: itemRequired } : {}),\n    };\n    if (config.minItems !== undefined) node.minItems = config.minItems;\n    if (config.maxItems !== undefined) node.maxItems = config.maxItems;\n  }\n\n  // Multiselect → array with enum items\n  if (config.type === \"Multiselect\" && config.options) {\n    node.type = \"array\";\n    node.items = {\n      type: \"string\",\n      enum: config.options.map((o) => o.value),\n    };\n    // Move enum off the root node\n    delete node.enum;\n    delete node.enumNames;\n  }\n\n  // Format\n  if (config.type === \"DateControl\") {\n    node.format = \"date\";\n  }\n  if (config.type === \"DocumentLinks\") {\n    node.format = \"data-url\";\n  }\n\n  // Password / color via config\n  if (config.config?.type === \"password\" || config.config?.type === \"color\") {\n    // No schema equivalent, handled in uiSchema\n  }\n\n  return node;\n}\n\nfunction fieldConfigToUiSchema(config: IFieldConfig): IRjsfUiSchema {\n  const ui: IRjsfUiSchema = {};\n\n  // Widget mapping\n  const widget = REVERSE_WIDGET_MAP[config.type];\n  if (widget) ui[\"ui:widget\"] = widget;\n\n  // Config-based widget overrides\n  if (config.config?.type === \"password\") ui[\"ui:widget\"] = \"password\";\n  if (config.config?.type === \"color\") ui[\"ui:widget\"] = \"color\";\n  if (config.config?.display === \"radio\") ui[\"ui:widget\"] = \"radio\";\n  if (config.config?.display === \"checkboxes\") ui[\"ui:widget\"] = \"checkboxes\";\n\n  if (config.placeholder) ui[\"ui:placeholder\"] = config.placeholder;\n  if (config.helpText) ui[\"ui:help\"] = config.helpText;\n  if (config.hidden) ui[\"ui:hidden\"] = true;\n  if (config.readOnly) ui[\"ui:readonly\"] = true;\n  if (config.disabled) ui[\"ui:disabled\"] = true;\n  if (config.config?.autofocus) ui[\"ui:autofocus\"] = true;\n  if (config.config?.className) ui[\"ui:classNames\"] = config.config.className as string;\n  if (config.config?.hideLabel) ui[\"ui:label\"] = false;\n\n  // Disabled options\n  if (config.options) {\n    const disabled = config.options\n      .filter((o) => o.disabled)\n      .map((o) => o.value);\n    if (disabled.length > 0) ui[\"ui:enumDisabled\"] = disabled;\n  }\n\n  return ui;\n}\n\nfunction applyValidationToSchema(\n  node: IJsonSchemaNode,\n  name: string,\n  params?: Record<string, unknown>\n): void {\n  switch (name) {\n    case \"minLength\":\n      node.minLength = Number(params?.min ?? 0);\n      break;\n    case \"maxLength\":\n      node.maxLength = Number(params?.max ?? 0);\n      break;\n    case \"pattern\":\n      node.pattern = String(params?.pattern ?? \"\");\n      break;\n    case \"numericRange\":\n      if (params?.min !== undefined && params.min !== -Infinity)\n        node.minimum = Number(params.min);\n      if (params?.max !== undefined && params.max !== Infinity)\n        node.maximum = Number(params.max);\n      break;\n    case \"exclusiveNumericRange\":\n      if (params?.exclusiveMin !== undefined)\n        node.exclusiveMinimum = Number(params.exclusiveMin);\n      if (params?.exclusiveMax !== undefined)\n        node.exclusiveMaximum = Number(params.exclusiveMax);\n      break;\n    case \"multipleOf\":\n      node.multipleOf = Number(params?.factor ?? 1);\n      break;\n    case \"email\":\n      node.format = \"email\";\n      break;\n    case \"url\":\n      node.format = \"uri\";\n      break;\n    case \"uniqueInArray\":\n      node.uniqueItems = true;\n      break;\n  }\n}\n\nfunction setNestedProperty(\n  properties: Record<string, IJsonSchemaNode>,\n  required: string[],\n  uiSchema: IRjsfUiSchema,\n  dotPath: string,\n  config: IFieldConfig\n): void {\n  const parts = dotPath.split(\".\");\n  let currentProps = properties;\n  let currentUi = uiSchema;\n\n  for (let i = 0; i < parts.length - 1; i++) {\n    const part = parts[i];\n    if (!currentProps[part]) {\n      currentProps[part] = {\n        type: \"object\",\n        properties: {},\n      };\n    }\n    if (!currentProps[part].properties) {\n      currentProps[part].properties = {};\n    }\n    currentProps = currentProps[part].properties!;\n\n    if (!currentUi[part]) {\n      currentUi[part] = {};\n    }\n    currentUi = currentUi[part] as IRjsfUiSchema;\n  }\n\n  const leafName = parts[parts.length - 1];\n  currentProps[leafName] = fieldConfigToSchemaNode(config);\n  if (config.required) {\n    // Add to parent's required array\n    const parentPath = parts.slice(0, -1);\n    let parentNode: IJsonSchemaNode | undefined;\n    let props = properties;\n    for (const p of parentPath) {\n      parentNode = props[p];\n      props = parentNode?.properties ?? {};\n    }\n    if (parentNode) {\n      parentNode.required = [...(parentNode.required ?? []), leafName];\n    }\n  }\n\n  const fieldUi = fieldConfigToUiSchema(config);\n  if (Object.keys(fieldUi).length > 0) {\n    currentUi[leafName] = fieldUi;\n  }\n}\n"],"mappings":";AAUO,SAAS,YAAY,QAAyB,WAAmB,IAAqB;AAC3F,QAAM,OAAwC;AAAA,IAC5C,GAAI,OAAO,eAAe,CAAC;AAAA,IAC3B,GAAI,OAAO,SAAS,CAAC;AAAA,EACvB;AAEA,QAAM,WAAW,YAAY,QAAQ,MAAM,oBAAI,IAAY,GAAG,GAAG,QAAQ;AAGzE,QAAM,EAAE,aAAa,IAAI,OAAO,KAAK,GAAG,MAAM,IAAI;AAClD,SAAO;AACT;AAEA,SAAS,YACP,MACA,MACA,SACA,QAAgB,GAChB,WAAmB,IACF;AAGjB,MAAI,QAAQ,UAAU;AACpB,UAAM,IAAI;AAAA,MACR,oDAAoD,QAAQ;AAAA,IAC9D;AAAA,EACF;AACA,MAAI,KAAK,MAAM;AACb,UAAM,UAAU,KAAK;AAErB,QAAI,QAAQ,IAAI,OAAO,GAAG;AAExB,aAAO,EAAE,MAAM,SAAS;AAAA,IAC1B;AAEA,UAAM,WAAW,UAAU,SAAS,IAAI;AACxC,QAAI,CAAC,UAAU;AACb,aAAO,EAAE,MAAM,SAAS;AAAA,IAC1B;AAEA,YAAQ,IAAI,OAAO;AAGnB,UAAM,EAAE,MAAM,MAAM,GAAG,SAAS,IAAI;AACpC,UAAM,UAAU,YAAY,EAAE,GAAG,UAAU,GAAG,SAAS,GAAG,MAAM,SAAS,QAAQ,GAAG,QAAQ;AAE5F,YAAQ,OAAO,OAAO;AACtB,WAAO;AAAA,EACT;AAEA,QAAM,SAA0B,CAAC;AAEjC,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,IAAI,GAAG;AAC/C,QAAI,QAAQ,iBAAiB,QAAQ,SAAS;AAC5C;AAAA,IACF;AAEA,QAAI,QAAQ,gBAAgB,SAAS,OAAO,UAAU,UAAU;AAC9D,YAAM,QAAyC,CAAC;AAChD,iBAAW,CAAC,UAAU,SAAS,KAAK,OAAO;AAAA,QACzC;AAAA,MACF,GAAG;AACD,cAAM,QAAQ,IAAI,YAAY,WAAW,MAAM,SAAS,QAAQ,GAAG,QAAQ;AAAA,MAC7E;AACA,aAAO,aAAa;AAAA,IACtB,WAAW,QAAQ,SAAS;AAC1B,UAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,eAAO,QAAQ,MAAM;AAAA,UAAI,CAAC,SACxB,YAAY,MAAM,MAAM,SAAS,QAAQ,GAAG,QAAQ;AAAA,QACtD;AAAA,MACF,WAAW,SAAS,OAAO,UAAU,UAAU;AAC7C,eAAO,QAAQ,YAAY,OAA0B,MAAM,SAAS,QAAQ,GAAG,QAAQ;AAAA,MACzF;AAAA,IACF,YACG,QAAQ,WAAW,QAAQ,WAAW,QAAQ,YAC/C,MAAM,QAAQ,KAAK,GACnB;AACA,MAAC,OAAmC,GAAG,IAAI,MAAM;AAAA,QAC/C,CAAC,SAA0B,YAAY,MAAM,MAAM,SAAS,QAAQ,GAAG,QAAQ;AAAA,MACjF;AAAA,IACF,WAAW,QAAQ,QAAQ,QAAQ,UAAU,QAAQ,QAAQ;AAC3D,UAAI,SAAS,OAAO,UAAU,UAAU;AACtC,QAAC,OAAmC,GAAG,IAAI;AAAA,UACzC;AAAA,UACA;AAAA,UACA;AAAA,UACA,QAAQ;AAAA,UACR;AAAA,QACF;AAAA,MACF;AAAA,IACF,WAAW,QAAQ,kBAAkB,SAAS,OAAO,UAAU,UAAU;AACvE,YAAM,OAAmD,CAAC;AAC1D,iBAAW,CAAC,SAAS,QAAQ,KAAK,OAAO;AAAA,QACvC;AAAA,MACF,GAAG;AACD,YAAI,MAAM,QAAQ,QAAQ,GAAG;AAC3B,eAAK,OAAO,IAAI;AAAA,QAClB,WAAW,OAAO,aAAa,YAAY,aAAa,MAAM;AAC5D,eAAK,OAAO,IAAI;AAAA,YACd;AAAA,YACA;AAAA,YACA;AAAA,YACA,QAAQ;AAAA,YACR;AAAA,UACF;AAAA,QACF;AAAA,MACF;AACA,aAAO,eAAe;AAAA,IACxB,WACE,QAAQ,0BACR,SACA,OAAO,UAAU,UACjB;AACA,aAAO,uBAAuB;AAAA,QAC5B;AAAA,QACA;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,QACR;AAAA,MACF;AAAA,IACF,WAAW,QAAQ,eAAe,QAAQ,iBAAiB,QAAQ,aAAa;AAE9E;AAAA,IACF,OAAO;AACL,MAAC,OAAmC,GAAG,IAAI;AAAA,IAC7C;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,UACP,KACA,MAC6B;AAE7B,QAAM,QAAQ,IAAI,MAAM,mCAAmC;AAC3D,MAAI,CAAC,MAAO,QAAO;AAEnB,QAAM,OAAO,MAAM,CAAC;AAEpB,QAAM,QAAQ,KAAK,MAAM,GAAG;AAC5B,MAAI,UAAuC,KAAK,MAAM,CAAC,CAAC;AACxD,WAAS,IAAI,GAAG,IAAI,MAAM,UAAU,SAAS,KAAK;AAChD,cAAW,QAA4C,MAAM,CAAC,CAAC;AAAA,EACjE;AACA,SAAO;AACT;;;ACrJA,IAAM,aAAqC;AAAA,EACzC,MAAM;AAAA,EACN,UAAU;AAAA,EACV,UAAU;AAAA,EACV,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,MAAM;AAAA,EACN,UAAU;AAAA,EACV,aAAa;AAAA,EACb,MAAM;AAAA,EACN,UAAU;AACZ;AAKA,IAAM,gBAAyD;AAAA,EAC7D,UAAU,EAAE,MAAM,WAAW;AAAA,EAC7B,OAAO,EAAE,MAAM,QAAQ;AAAA,EACvB,OAAO,EAAE,SAAS,QAAQ;AAAA,EAC1B,YAAY,EAAE,SAAS,aAAa;AACtC;AAKO,SAAS,wBACd,WACA,MACA,YACc;AACd,QAAM,OAAO,mBAAmB,IAAI;AACpC,QAAM,WAAW,uBAAuB,IAAI;AAC5C,QAAM,UAAU,eAAe,IAAI;AAEnC,QAAM,SAAuB;AAAA,IAC3B;AAAA,IACA,OAAO,KAAK,SAAS;AAAA,IACrB,UAAU;AAAA,EACZ;AAEA,MAAI,SAAS,SAAS,EAAG,QAAO,WAAW;AAC3C,MAAI,QAAS,QAAO,UAAU;AAC9B,MAAI,KAAK,YAAY,OAAW,QAAO,eAAe,KAAK;AAC3D,MAAI,KAAK,YAAa,QAAO,cAAc,KAAK;AAGhD,MAAI,KAAK,UAAU,QAAW;AAC5B,WAAO,WAAW;AAClB,WAAO,eAAe,KAAK;AAAA,EAC7B;AAEA,SAAO;AACT;AAKO,SAAS,uBACd,MACmB;AACnB,QAAM,QAA2B,CAAC;AAElC,MAAI,KAAK,cAAc,QAAW;AAChC,UAAM,KAAK,EAAE,MAAM,aAAa,QAAQ,EAAE,KAAK,KAAK,UAAU,EAAE,CAAC;AAAA,EACnE;AACA,MAAI,KAAK,cAAc,QAAW;AAChC,UAAM,KAAK,EAAE,MAAM,aAAa,QAAQ,EAAE,KAAK,KAAK,UAAU,EAAE,CAAC;AAAA,EACnE;AACA,MAAI,KAAK,SAAS;AAChB,UAAM,KAAK;AAAA,MACT,MAAM;AAAA,MACN,QAAQ,EAAE,SAAS,KAAK,SAAS,SAAS,qBAAqB;AAAA,IACjE,CAAC;AAAA,EACH;AAGA,QAAM,SAAS,KAAK,YAAY;AAChC,QAAM,SAAS,KAAK,YAAY;AAChC,QAAM,aAAa,KAAK,qBAAqB;AAC7C,QAAM,aAAa,KAAK,qBAAqB;AAE7C,MAAI,cAAc,YAAY;AAC5B,UAAM,KAAK;AAAA,MACT,MAAM;AAAA,MACN,QAAQ;AAAA,QACN,cAAc,KAAK;AAAA,QACnB,cAAc,KAAK;AAAA,QACnB,KAAK,KAAK;AAAA,QACV,KAAK,KAAK;AAAA,MACZ;AAAA,IACF,CAAC;AAAA,EACH,WAAW,UAAU,QAAQ;AAC3B,UAAM,KAAK;AAAA,MACT,MAAM;AAAA,MACN,QAAQ;AAAA,QACN,KAAK,KAAK,WAAW;AAAA,QACrB,KAAK,KAAK,WAAW;AAAA,MACvB;AAAA,IACF,CAAC;AAAA,EACH;AAEA,MAAI,KAAK,eAAe,QAAW;AACjC,UAAM,KAAK;AAAA,MACT,MAAM;AAAA,MACN,QAAQ,EAAE,QAAQ,KAAK,WAAW;AAAA,IACpC,CAAC;AAAA,EACH;AAGA,MAAI,KAAK,WAAW,QAAS,OAAM,KAAK,EAAE,MAAM,QAAQ,CAAC;AACzD,MAAI,KAAK,WAAW,SAAS,KAAK,WAAW,MAAO,OAAM,KAAK,EAAE,MAAM,MAAM,CAAC;AAC9E,MAAI,KAAK,WAAW,QAAS,OAAM,KAAK,EAAE,MAAM,QAAQ,CAAC;AAEzD,MAAI,KAAK,aAAa;AACpB,UAAM,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAAA,EACtC;AAEA,SAAO;AACT;AAKO,SAAS,cACd,QACA,UACc;AACd,QAAM,SAAS,EAAE,GAAG,OAAO;AAG3B,QAAM,SAAS,SAAS,WAAW;AACnC,MAAI,OAAO,WAAW,YAAY,WAAW,MAAM,GAAG;AACpD,WAAO,OAAO,WAAW,MAAM;AAE/B,UAAM,cAAc,cAAc,MAAM;AACxC,QAAI,aAAa;AACf,aAAO,SAAS,EAAE,GAAI,OAAO,UAAU,CAAC,GAAI,GAAG,YAAY;AAAA,IAC7D;AAAA,EACF;AAEA,MAAI,SAAS,UAAU,EAAG,QAAO,QAAQ,SAAS,UAAU;AAC5D,MAAI,SAAS,gBAAgB;AAC3B,WAAO,cAAc,SAAS,gBAAgB;AAChD,MAAI,SAAS,SAAS,EAAG,QAAO,WAAW,SAAS,SAAS;AAC7D,MAAI,SAAS,gBAAgB;AAC3B,WAAO,cAAc,SAAS,gBAAgB;AAChD,MAAI,SAAS,WAAW,MAAM,KAAM,QAAO,SAAS;AACpD,MAAI,SAAS,aAAa,MAAM,KAAM,QAAO,WAAW;AACxD,MAAI,SAAS,aAAa,MAAM,KAAM,QAAO,WAAW;AAExD,MAAI,SAAS,cAAc,MAAM,MAAM;AACrC,WAAO,SAAS,EAAE,GAAI,OAAO,UAAU,CAAC,GAAI,WAAW,KAAK;AAAA,EAC9D;AACA,MAAI,SAAS,eAAe,GAAG;AAC7B,WAAO,SAAS;AAAA,MACd,GAAI,OAAO,UAAU,CAAC;AAAA,MACtB,WAAW,SAAS,eAAe;AAAA,IACrC;AAAA,EACF;AACA,MAAI,SAAS,YAAY,KAAK,OAAO,SAAS,YAAY,MAAM,UAAU;AACxE,WAAO,SAAS,EAAE,GAAI,OAAO,UAAU,CAAC,GAAI,GAAG,SAAS,YAAY,EAAE;AAAA,EACxE;AACA,MAAI,SAAS,UAAU,MAAM,OAAO;AAClC,WAAO,SAAS,EAAE,GAAI,OAAO,UAAU,CAAC,GAAI,WAAW,KAAK;AAAA,EAC9D;AAGA,QAAM,eAAe,SAAS,iBAAiB;AAC/C,MAAI,MAAM,QAAQ,YAAY,KAAK,OAAO,SAAS;AACjD,WAAO,UAAU,OAAO,QAAQ,IAAI,CAAC,SAAS;AAAA,MAC5C,GAAG;AAAA,MACH,UAAU,aAAa,SAAS,IAAI,KAAK,IAAI,OAAO,IAAI;AAAA,IAC1D,EAAE;AAAA,EACJ;AAGA,QAAM,YAAY,SAAS,cAAc;AACzC,MAAI,MAAM,QAAQ,SAAS,KAAK,OAAO,SAAS;AAC9C,WAAO,UAAU,OAAO,QAAQ,IAAI,CAAC,KAAK,OAAO;AAAA,MAC/C,GAAG;AAAA,MACH,OAAO,UAAU,CAAC,KAAK,OAAO,OAAO,UAAU,CAAC,CAAC,IAAI,IAAI;AAAA,IAC3D,EAAE;AAAA,EACJ;AAEA,SAAO;AACT;AAIA,SAAS,mBAAmB,MAA+B;AAEzD,MAAI,KAAK,KAAM,QAAO;AAGtB,MAAI,KAAK,UAAU,OAAW,QAAO;AAErC,QAAM,OAAO,YAAY,IAAI;AAE7B,UAAQ,MAAM;AAAA,IACZ,KAAK;AACH,UAAI,KAAK,WAAW,UAAU,KAAK,WAAW,YAAa,QAAO;AAClE,UAAI,KAAK,WAAW,WAAY,QAAO;AACvC,UAAI,KAAK,aAAa,KAAK,YAAY,IAAK,QAAO;AACnD,aAAO;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AACH,UAAI,KAAK,YAAY,UAAa,KAAK,YAAY,OAAW,QAAO;AACrE,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO,aAAa,IAAI;AAAA,IAC1B,KAAK;AACH,aAAO;AAAA;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;AAEA,SAAS,YAAY,MAA+B;AAClD,MAAI,CAAC,KAAK,KAAM,QAAO;AACvB,MAAI,OAAO,KAAK,SAAS,SAAU,QAAO,KAAK;AAE/C,QAAM,UAAU,KAAK,KAAK,OAAO,CAAC,MAAM,MAAM,MAAM;AACpD,SAAO,QAAQ,CAAC,KAAK;AACvB;AAEA,SAAS,aAAa,MAA+B;AACnD,QAAM,QAAQ,KAAK;AACnB,MAAI,CAAC,SAAS,MAAM,QAAQ,KAAK,EAAG,QAAO;AAE3C,MAAI,MAAM,KAAM,QAAO;AACvB,MAAI,MAAM,SAAS,YAAY,MAAM,WAAY,QAAO;AACxD,SAAO;AACT;AAEA,SAAS,eAAe,MAA8C;AACpE,MAAI,CAAC,KAAK,KAAM,QAAO;AAEvB,QAAM,QAAQ,KAAK;AACnB,SAAO,KAAK,KAAK,IAAI,CAAC,KAAK,OAAO;AAAA,IAChC,OAAO,OAAO,GAAG;AAAA,IACjB,OAAO,SAAS,MAAM,CAAC,KAAK,OAAO,OAAO,MAAM,CAAC,CAAC,IAAI,OAAO,GAAG;AAAA,EAClE,EAAE;AACJ;;;ACvPO,SAAS,oBACd,cACA,QACA,YACA,UACM;AACN,aAAW,CAAC,aAAa,GAAG,KAAK,OAAO,QAAQ,YAAY,GAAG;AAC7D,QAAI,MAAM,QAAQ,GAAG,GAAG;AAEtB,iBAAW,kBAAkB,KAAK;AAChC,YAAI,CAAC,OAAO,cAAc,EAAG;AAC7B,cAAM,OAAc;AAAA,UAClB,IAAI,GAAG,QAAQ,QAAQ,WAAW,IAAI,cAAc;AAAA,UACpD,MAAM,EAAE,OAAO,aAAa,UAAU,aAAa;AAAA,UACnD,MAAM,EAAE,UAAU,KAAK;AAAA,UACvB,MAAM,EAAE,UAAU,MAAM;AAAA,QAC1B;AACA,eAAO,cAAc,EAAE,QAAQ;AAAA,UAC7B,GAAI,OAAO,cAAc,EAAE,SAAS,CAAC;AAAA,UACrC;AAAA,QACF;AAAA,MACF;AAAA,IACF,OAAO;AAEL,8BAAwB,aAAa,KAAK,QAAQ,YAAY,QAAQ;AAAA,IACxE;AAAA,EACF;AACF;AAKO,SAAS,kBACd,QACA,QACA,YACA,UACM;AACN,QAAM,YAAY,kBAAkB,OAAO,EAAG;AAC9C,MAAI,CAAC,UAAW;AAEhB,QAAM,aAAa,OAAO;AAC1B,QAAM,aAAa,OAAO;AAG1B,QAAM,iBAAiB,oBAAI,IAAY;AACvC,MAAI,YAAY,YAAY;AAC1B,WAAO,KAAK,WAAW,UAAU,EAAE,QAAQ,CAAC,MAAM,eAAe,IAAI,CAAC,CAAC;AAAA,EACzE;AACA,MAAI,YAAY,UAAU;AACxB,eAAW,SAAS,QAAQ,CAAC,MAAM,eAAe,IAAI,CAAC,CAAC;AAAA,EAC1D;AACA,MAAI,YAAY,YAAY;AAC1B,WAAO,KAAK,WAAW,UAAU,EAAE,QAAQ,CAAC,MAAM,eAAe,IAAI,CAAC,CAAC;AAAA,EACzE;AACA,MAAI,YAAY,UAAU;AACxB,eAAW,SAAS,QAAQ,CAAC,MAAM,eAAe,IAAI,CAAC,CAAC;AAAA,EAC1D;AAEA,aAAW,aAAa,gBAAgB;AAEtC,QAAI,CAAC,OAAO,SAAS,KAAK,YAAY,aAAa,SAAS,GAAG;AAC7D,aAAO,SAAS,IAAI;AAAA,QAClB;AAAA,QACA,WAAW,WAAW,SAAS;AAAA,QAC/B;AAAA,MACF;AACA,aAAO,SAAS,EAAE,SAAS;AAAA,IAC7B;AACA,QAAI,CAAC,OAAO,SAAS,KAAK,YAAY,aAAa,SAAS,GAAG;AAC7D,aAAO,SAAS,IAAI;AAAA,QAClB;AAAA,QACA,WAAW,WAAW,SAAS;AAAA,QAC/B;AAAA,MACF;AACA,aAAO,SAAS,EAAE,SAAS;AAAA,IAC7B;AACA,QAAI,CAAC,OAAO,SAAS,EAAG;AAExB,UAAM,aAAsC,CAAC;AAC7C,UAAM,aAAsC,CAAC;AAG7C,QAAI,YAAY,aAAa,SAAS,GAAG;AACvC,iBAAW,SAAS;AAAA,IACtB;AACA,QAAI,YAAY,aAAa,SAAS,GAAG;AACvC,iBAAW,SAAS;AAAA,IACtB;AAEA,QAAI,YAAY,aAAa,SAAS,KAAK,CAAC,YAAY,aAAa,SAAS,GAAG;AAC/E,iBAAW,SAAS;AAAA,IACtB;AAEA,QAAI,CAAC,YAAY,aAAa,SAAS,KAAK,YAAY,aAAa,SAAS,GAAG;AAC/E,iBAAW,SAAS;AAAA,IACtB;AAGA,QAAI,YAAY,UAAU,SAAS,SAAS,GAAG;AAC7C,iBAAW,WAAW;AAAA,IACxB;AACA,QAAI,YAAY,UAAU,SAAS,SAAS,GAAG;AAC7C,iBAAW,WAAW;AAAA,IACxB;AAEA,UAAM,OAAc;AAAA,MAClB,IAAI,GAAG,QAAQ,QAAQ,SAAS;AAAA,MAChC,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAEA,QAAI,OAAO,KAAK,UAAU,EAAE,SAAS,GAAG;AACtC,WAAK,OAAO;AAAA,IACd;AAEA,WAAO,SAAS,EAAE,QAAQ,CAAC,GAAI,OAAO,SAAS,EAAE,SAAS,CAAC,GAAI,IAAI;AAAA,EACrE;AACF;AAKO,SAAS,mBACd,QACA,QACA,YACA,UACM;AACN,QAAM,WAAW,OAAO,SAAS,OAAO;AACxC,MAAI,CAAC,YAAY,SAAS,WAAW,EAAG;AAExC,QAAM,kBAAkB,OAAO,QAAQ,UAAU;AAGjD,QAAM,gBAAgB,kBAAkB,QAAQ;AAEhD,MAAI,eAAe;AACjB;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF,OAAO;AACL;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AAMO,SAAS,kBACd,QACmB;AACnB,MAAI,CAAC,OAAQ,QAAO;AAGpB,MAAI,OAAO,KAAK;AACd,UAAM,QAAQ,kBAAkB,OAAO,GAAsB;AAC7D,QAAI,CAAC,MAAO,QAAO;AACnB,WAAO,EAAE,UAAU,OAAO,YAAY,CAAC,KAAK,EAAE;AAAA,EAChD;AAGA,MAAI,OAAO,SAAS,OAAO,MAAM,SAAS,GAAG;AAC3C,UAAM,aAAa,OAAO,MACvB,IAAI,CAAC,MAAM,kBAAkB,CAAC,CAAC,EAC/B,OAAO,CAAC,MAAuB,MAAM,IAAI;AAC5C,QAAI,WAAW,WAAW,EAAG,QAAO;AACpC,QAAI,WAAW,WAAW,EAAG,QAAO,WAAW,CAAC;AAChD,WAAO,EAAE,UAAU,OAAO,WAAW;AAAA,EACvC;AAGA,MAAI,OAAO,SAAS,OAAO,MAAM,SAAS,GAAG;AAC3C,UAAM,aAAa,OAAO,MACvB,IAAI,CAAC,MAAM,kBAAkB,CAAC,CAAC,EAC/B,OAAO,CAAC,MAAuB,MAAM,IAAI;AAC5C,QAAI,WAAW,WAAW,EAAG,QAAO;AACpC,QAAI,WAAW,WAAW,EAAG,QAAO,WAAW,CAAC;AAChD,WAAO,EAAE,UAAU,MAAM,WAAW;AAAA,EACtC;AAGA,MAAI,OAAO,YAAY,CAAC,OAAO,YAAY;AACzC,UAAM,aAA2B,OAAO,SAAS,IAAI,CAAC,WAAW;AAAA,MAC/D;AAAA,MACA,UAAU;AAAA,IACZ,EAAE;AACF,QAAI,WAAW,WAAW,EAAG,QAAO,WAAW,CAAC;AAChD,WAAO,EAAE,UAAU,OAAO,WAAW;AAAA,EACvC;AAGA,MAAI,OAAO,YAAY;AACrB,UAAM,aAA2B,CAAC;AAElC,eAAW,CAAC,OAAO,UAAU,KAAK,OAAO,QAAQ,OAAO,UAAU,GAAG;AACnE,YAAM,YAAY,0BAA0B,OAAO,UAAU;AAC7D,UAAI,UAAW,YAAW,KAAK,SAAS;AAAA,IAC1C;AAGA,QAAI,OAAO,UAAU;AACnB,iBAAW,SAAS,OAAO,UAAU;AACnC,YAAI,CAAC,OAAO,WAAW,KAAK,GAAG;AAC7B,qBAAW,KAAK,EAAE,OAAO,UAAU,aAAa,CAAC;AAAA,QACnD;AAAA,MACF;AAAA,IACF;AAEA,QAAI,WAAW,WAAW,EAAG,QAAO;AACpC,QAAI,WAAW,WAAW,EAAG,QAAO,WAAW,CAAC;AAChD,WAAO,EAAE,UAAU,OAAO,WAAW;AAAA,EACvC;AAEA,SAAO;AACT;AAIA,SAAS,0BACP,OACA,QACmB;AACnB,MAAI,OAAO,UAAU,QAAW;AAC9B,WAAO,EAAE,OAAO,UAAU,UAAU,OAAO,OAAO,MAAM;AAAA,EAC1D;AACA,MAAI,OAAO,QAAQ,OAAO,KAAK,SAAS,GAAG;AACzC,WAAO,EAAE,OAAO,UAAU,MAAM,OAAO,OAAO,KAAK;AAAA,EACrD;AACA,MAAI,OAAO,YAAY,QAAW;AAChC,WAAO,EAAE,OAAO,UAAU,sBAAsB,OAAO,OAAO,QAAQ;AAAA,EACxE;AACA,MAAI,OAAO,YAAY,QAAW;AAChC,WAAO,EAAE,OAAO,UAAU,mBAAmB,OAAO,OAAO,QAAQ;AAAA,EACrE;AACA,MAAI,OAAO,cAAc,UAAa,OAAO,YAAY,GAAG;AAC1D,WAAO,EAAE,OAAO,UAAU,aAAa;AAAA,EACzC;AACA,MAAI,OAAO,SAAS;AAClB,WAAO,EAAE,OAAO,UAAU,WAAW,OAAO,OAAO,QAAQ;AAAA,EAC7D;AAEA,SAAO;AACT;AAEA,SAAS,wBACP,aACA,WACA,QACA,YACA,UACM;AACN,QAAM,cAAc,IAAI,IAAI,UAAU,YAAY,CAAC,CAAC;AAEpD,MAAI,UAAU,YAAY;AACxB,eAAW,CAAC,cAAc,cAAc,KAAK,OAAO;AAAA,MAClD,UAAU;AAAA,IACZ,GAAG;AAED,UAAI,CAAC,OAAO,YAAY,GAAG;AACzB,eAAO,YAAY,IAAI;AAAA,UACrB;AAAA,UACA;AAAA,UACA,YAAY,IAAI,YAAY;AAAA,QAC9B;AACA,eAAO,YAAY,EAAE,SAAS;AAAA,MAChC;AAEA,YAAM,OAAc;AAAA,QAClB,IAAI,GAAG,QAAQ,cAAc,WAAW,IAAI,YAAY;AAAA,QACxD,MAAM,EAAE,OAAO,aAAa,UAAU,aAAa;AAAA,QACnD,MAAM;AAAA,UACJ,QAAQ;AAAA,UACR,GAAI,YAAY,IAAI,YAAY,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;AAAA,QAC5D;AAAA,QACA,MAAM;AAAA,UACJ,QAAQ;AAAA,QACV;AAAA,MACF;AAEA,aAAO,YAAY,EAAE,QAAQ;AAAA,QAC3B,GAAI,OAAO,YAAY,EAAE,SAAS,CAAC;AAAA,QACnC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAGA,MAAI,UAAU,OAAO;AACnB;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA,GAAG,QAAQ,cAAc,WAAW;AAAA,IACtC;AAAA,EACF;AACF;AAEA,SAAS,kBACP,UACe;AACf,MAAI,SAAS,SAAS,EAAG,QAAO;AAGhC,QAAM,eAAe,SAAS,CAAC;AAC/B,MAAI,CAAC,aAAa,WAAY,QAAO;AAErC,aAAW,YAAY,OAAO,KAAK,aAAa,UAAU,GAAG;AAC3D,UAAM,OAAO,aAAa,WAAW,QAAQ;AAC7C,QAAI,CAAC,qBAAqB,IAAI,EAAG;AAGjC,UAAM,UAAU,SAAS;AAAA,MACvB,CAAC,MAAM,EAAE,aAAa,QAAQ,KAAK,qBAAqB,EAAE,WAAW,QAAQ,CAAC;AAAA,IAChF;AAEA,QAAI,SAAS;AAEX,YAAM,SAAS,SAAS;AAAA,QAAI,CAAC,MAC3B,cAAc,EAAE,WAAY,QAAQ,CAAC;AAAA,MACvC;AACA,YAAM,SAAS,IAAI,IAAI,OAAO,IAAI,MAAM,CAAC;AACzC,UAAI,OAAO,SAAS,SAAS,OAAQ,QAAO;AAAA,IAC9C;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,qBAAqB,MAAgC;AAC5D,MAAI,KAAK,UAAU,OAAW,QAAO;AACrC,MAAI,KAAK,QAAQ,KAAK,KAAK,WAAW,EAAG,QAAO;AAChD,SAAO;AACT;AAEA,SAAS,cAAc,MAAgC;AACrD,MAAI,KAAK,UAAU,OAAW,QAAO,KAAK;AAC1C,MAAI,KAAK,QAAQ,KAAK,KAAK,WAAW,EAAG,QAAO,KAAK,KAAK,CAAC;AAC3D,SAAO;AACT;AAEA,SAAS,yBACP,oBACA,UACA,QACA,YACA,UACA,iBACM;AAEN,QAAM,YAAY,SAAS;AAAA,IAAI,CAAC,MAC9B,cAAc,EAAE,WAAY,kBAAkB,CAAC;AAAA,EACjD;AACA,MAAI,CAAC,OAAO,kBAAkB,GAAG;AAC/B,WAAO,kBAAkB,IAAI;AAAA,MAC3B,MAAM;AAAA,MACN,OAAO;AAAA,MACP,SAAS,UAAU,IAAI,CAAC,OAAO;AAAA,QAC7B,OAAO,OAAO,CAAC;AAAA,QACf,OAAO,OAAO,CAAC;AAAA,MACjB,EAAE;AAAA,IACJ;AAAA,EACF;AAGA,aAAW,WAAW,UAAU;AAC9B,QAAI,CAAC,QAAQ,WAAY;AACzB,UAAM,eAAe,cAAc,QAAQ,WAAW,kBAAkB,CAAC;AACzE,UAAM,kBAAkB,IAAI,IAAI,QAAQ,YAAY,CAAC,CAAC;AAEtD,eAAW,CAAC,WAAW,WAAW,KAAK,OAAO,QAAQ,QAAQ,UAAU,GAAG;AACzE,UAAI,cAAc,mBAAoB;AAEtC,UAAI,CAAC,OAAO,SAAS,GAAG;AACtB,eAAO,SAAS,IAAI;AAAA,UAClB;AAAA,UACA;AAAA,UACA,gBAAgB,IAAI,SAAS;AAAA,QAC/B;AACA,eAAO,SAAS,EAAE,SAAS;AAAA,MAC7B;AAEA,YAAM,OAAc;AAAA,QAClB,IAAI,GAAG,QAAQ,IAAI,eAAe,IAAI,kBAAkB,IAAI,SAAS;AAAA,QACrE,MAAM;AAAA,UACJ,OAAO;AAAA,UACP,UAAU;AAAA,UACV,OAAO;AAAA,QACT;AAAA,QACA,MAAM;AAAA,UACJ,QAAQ;AAAA,UACR,GAAI,gBAAgB,IAAI,SAAS,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;AAAA,QAC7D;AAAA,QACA,MAAM,EAAE,QAAQ,KAAK;AAAA,MACvB;AAEA,aAAO,SAAS,EAAE,QAAQ;AAAA,QACxB,GAAI,OAAO,SAAS,EAAE,SAAS,CAAC;AAAA,QAChC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,kCACP,UACA,QACA,YACA,UACA,iBACM;AAEN,QAAM,UAAU,SAAS,IAAI,CAAC,GAAG,OAAO;AAAA,IACtC,OAAO,OAAO,CAAC;AAAA,IACf,OAAO,UAAU,IAAI,CAAC;AAAA,EACxB,EAAE;AAEF,SAAO,UAAU,IAAI;AAAA,IACnB,MAAM;AAAA,IACN,OAAO;AAAA,IACP;AAAA,EACF;AAGA,WAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACxC,UAAM,UAAU,SAAS,CAAC;AAC1B,QAAI,CAAC,QAAQ,WAAY;AACzB,UAAM,kBAAkB,IAAI,IAAI,QAAQ,YAAY,CAAC,CAAC;AAEtD,eAAW,CAAC,WAAW,WAAW,KAAK,OAAO,QAAQ,QAAQ,UAAU,GAAG;AACzE,UAAI,CAAC,OAAO,SAAS,GAAG;AACtB,eAAO,SAAS,IAAI;AAAA,UAClB;AAAA,UACA;AAAA,UACA,gBAAgB,IAAI,SAAS;AAAA,QAC/B;AACA,eAAO,SAAS,EAAE,SAAS;AAAA,MAC7B;AAEA,YAAM,OAAc;AAAA,QAClB,IAAI,GAAG,QAAQ,IAAI,eAAe,WAAW,CAAC,IAAI,SAAS;AAAA,QAC3D,MAAM;AAAA,UACJ,OAAO;AAAA,UACP,UAAU;AAAA,UACV,OAAO,OAAO,CAAC;AAAA,QACjB;AAAA,QACA,MAAM;AAAA,UACJ,QAAQ;AAAA,UACR,GAAI,gBAAgB,IAAI,SAAS,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;AAAA,QAC7D;AAAA,QACA,MAAM,EAAE,QAAQ,KAAK;AAAA,MACvB;AAEA,aAAO,SAAS,EAAE,QAAQ;AAAA,QACxB,GAAI,OAAO,SAAS,EAAE,SAAS,CAAC;AAAA,QAChC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;ACrcO,SAAS,eACd,QACA,UACA,UACA,SACa;AACb,QAAM,WAAW,SAAS,wBAAwB;AAClD,QAAM,WAAW,SAAS,gBAAgB;AAG1C,QAAM,WAAW,YAAY,MAAM;AAGnC,QAAM,SAAS,WAAW,QAAQ;AAGlC,QAAM,SAAuC,CAAC;AAC9C,QAAM,cAAc,IAAI,IAAI,OAAO,YAAY,CAAC,CAAC;AAEjD,MAAI,OAAO,YAAY;AACrB;AAAA,MACE,OAAO;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAKA,MAAI,OAAO,cAAc;AACvB,wBAAoB,OAAO,cAAc,QAAQ,QAAQ,QAAQ;AAAA,EACnE;AAGA,MAAI,OAAO,IAAI;AACb,sBAAkB,QAAQ,QAAQ,QAAQ,QAAQ;AAAA,EACpD;AAGA,MAAI,OAAO,SAAS,OAAO,OAAO;AAChC,uBAAmB,QAAQ,QAAQ,QAAQ,QAAQ;AAAA,EACrD;AAGA,QAAM,aAAa,kBAAkB,QAAQ,QAAQ;AAErD,SAAO;AAAA,IACL,SAAS;AAAA,IACT;AAAA,IACA;AAAA,EACF;AACF;AAIA,SAAS,cACP,YACA,aACA,QACA,QACA,UACA,UACA,UACM;AACN,aAAW,CAAC,UAAU,UAAU,KAAK,OAAO,QAAQ,UAAU,GAAG;AAC/D,UAAM,WAAW,SAAS,GAAG,MAAM,IAAI,QAAQ,KAAK;AACpD,UAAM,aAAa,YAAY,IAAI,QAAQ;AAE3C,QAAI,aAAa,UAAU,KAAK,WAAW,YAAY;AACrD,UAAI,aAAa,WAAW;AAE1B,cAAM,iBAAiB,IAAI,IAAI,WAAW,YAAY,CAAC,CAAC;AACxD,cAAM,iBAAiB,WAAW,QAAQ;AAC1C,cAAM,iBAAiB,WAAW,QAAQ;AAG1C;AAAA,UACE,WAAW;AAAA,UACX;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AACA;AAAA,MACF,OAAO;AAEL,cAAM,QAAsC,CAAC;AAC7C,cAAM,iBAAiB,IAAI,IAAI,WAAW,YAAY,CAAC,CAAC;AACxD,mBAAW,CAAC,UAAU,UAAU,KAAK,OAAO;AAAA,UAC1C,WAAW;AAAA,QACb,GAAG;AACD,gBAAM,QAAQ,IAAI;AAAA,YAChB;AAAA,YACA;AAAA,YACA,eAAe,IAAI,QAAQ;AAAA,UAC7B;AAAA,QACF;AACA,eAAO,QAAQ,IAAI;AAAA,UACjB,MAAM;AAAA,UACN,OAAO,WAAW,SAAS;AAAA,UAC3B;AAAA,QACF;AACA;AAAA,MACF;AAAA,IACF;AAGA,QAAI,uBAAuB,UAAU,GAAG;AACtC,YAAM,aAAa,WAAW;AAC9B,YAAM,QAAsC,CAAC;AAC7C,YAAM,eAAe,IAAI,IAAI,WAAW,YAAY,CAAC,CAAC;AACtD,UAAI,WAAW,YAAY;AACzB,mBAAW,CAAC,UAAU,cAAc,KAAK,OAAO;AAAA,UAC9C,WAAW;AAAA,QACb,GAAG;AACD,gBAAM,QAAQ,IAAI;AAAA,YAChB;AAAA,YACA;AAAA,YACA,aAAa,IAAI,QAAQ;AAAA,UAC3B;AAAA,QACF;AAAA,MACF;AACA,YAAMA,UAAS,wBAAwB,UAAU,YAAY,UAAU;AACvE,MAAAA,QAAO,OAAO;AACd,MAAAA,QAAO,QAAQ;AACf,UAAI,WAAW,aAAa,OAAW,CAAAA,QAAO,WAAW,WAAW;AACpE,UAAI,WAAW,aAAa,OAAW,CAAAA,QAAO,WAAW,WAAW;AACpE,aAAO,QAAQ,IAAIA;AAGnB,YAAMC,iBAAgB,iBAAiB,UAAU,UAAU,MAAM;AACjE,UAAIA,gBAAe;AACjB,eAAO,QAAQ,IAAI,cAAc,OAAO,QAAQ,GAAGA,cAAa;AAAA,MAClE;AAGA,YAAMC,aAAY,iBAAiB,UAAU,QAAQ;AACrD,UAAIA,eAAc,UAAa,OAAO,QAAQ,EAAE,iBAAiB,QAAW;AAC1E,eAAO,QAAQ,EAAE,eAAeA;AAAA,MAClC;AAEA;AAAA,IACF;AAGA,UAAM,SAAS,wBAAwB,UAAU,YAAY,UAAU;AACvE,WAAO,QAAQ,IAAI;AAGnB,UAAM,gBAAgB,iBAAiB,UAAU,UAAU,MAAM;AACjE,QAAI,eAAe;AACjB,aAAO,QAAQ,IAAI,cAAc,OAAO,QAAQ,GAAG,aAAa;AAAA,IAClE;AAGA,UAAM,YAAY,iBAAiB,UAAU,QAAQ;AACrD,QAAI,cAAc,UAAa,OAAO,QAAQ,EAAE,iBAAiB,QAAW;AAC1E,aAAO,QAAQ,EAAE,eAAe;AAAA,IAClC;AAAA,EACF;AACF;AAEA,SAAS,WAAW,QAA0C;AAC5D,MAAI,CAAC,OAAO,SAAS,OAAO,MAAM,WAAW,EAAG,QAAO;AAEvD,QAAM,EAAE,OAAO,GAAG,KAAK,IAAI;AAC3B,MAAI,SAAS,EAAE,GAAG,KAAK;AAEvB,aAAW,aAAa,OAAO;AAC7B,aAAS,aAAa,QAAQ,SAAS;AAAA,EACzC;AAEA,SAAO;AACT;AAEA,SAAS,aACP,GACA,GACiB;AACjB,QAAM,SAAS,EAAE,GAAG,EAAE;AAEtB,MAAI,EAAE,YAAY;AAChB,WAAO,aAAa,EAAE,GAAI,OAAO,cAAc,CAAC,GAAI,GAAG,EAAE,WAAW;AAAA,EACtE;AACA,MAAI,EAAE,UAAU;AACd,UAAM,WAAW,IAAI,IAAI,OAAO,YAAY,CAAC,CAAC;AAC9C,eAAW,KAAK,EAAE,SAAU,UAAS,IAAI,CAAC;AAC1C,WAAO,WAAW,CAAC,GAAG,QAAQ;AAAA,EAChC;AACA,MAAI,EAAE,GAAI,QAAO,KAAK,EAAE;AACxB,MAAI,EAAE,KAAM,QAAO,OAAO,EAAE;AAC5B,MAAI,EAAE,KAAM,QAAO,OAAO,EAAE;AAC5B,MAAI,EAAE,cAAc;AAClB,WAAO,eAAe;AAAA,MACpB,GAAI,OAAO,gBAAgB,CAAC;AAAA,MAC5B,GAAG,EAAE;AAAA,IACP;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,aAAa,MAAgC;AACpD,MAAI,KAAK,SAAS,SAAU,QAAO;AACnC,MAAI,MAAM,QAAQ,KAAK,IAAI,KAAK,KAAK,KAAK,SAAS,QAAQ,EAAG,QAAO;AACrE,SAAO;AACT;AAEA,SAAS,uBAAuB,MAAgC;AAC9D,QAAM,OAAO,MAAM,QAAQ,KAAK,IAAI,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK;AAC5D,MAAI,SAAS,QAAS,QAAO;AAC7B,QAAM,QAAQ,KAAK;AACnB,MAAI,CAAC,SAAS,MAAM,QAAQ,KAAK,EAAG,QAAO;AAC3C,SAAO,MAAM,SAAS,YAAY,CAAC,CAAC,MAAM;AAC5C;AAEA,SAAS,iBACP,UACA,WACA,QAC2B;AAC3B,MAAI,CAAC,SAAU,QAAO;AAEtB,MAAI,QAAQ;AACV,UAAM,QAAQ,OAAO,MAAM,GAAG;AAC9B,QAAI,UAAqC;AACzC,eAAW,QAAQ,OAAO;AACxB,gBAAU,UAAU,IAAI;AAAA,IAC1B;AACA,WAAO,UAAU,SAAS;AAAA,EAC5B;AACA,SAAO,SAAS,SAAS;AAC3B;AAEA,SAAS,iBACP,UACA,WACS;AACT,MAAI,CAAC,SAAU,QAAO;AACtB,SAAO,SAAS,SAAS;AAC3B;AAEA,SAAS,kBACP,QACA,UACU;AACV,QAAM,UAAU,WAAW,UAAU;AACrC,MAAI,CAAC,MAAM,QAAQ,OAAO,EAAG,QAAO,OAAO,KAAK,MAAM;AAEtD,QAAM,YAAY,IAAI,IAAI,OAAO,KAAK,MAAM,CAAC;AAC7C,QAAM,QAAkB,CAAC;AACzB,QAAM,cAAc,QAAQ,QAAQ,GAAG;AAEvC,aAAW,QAAQ,SAAS;AAC1B,QAAI,SAAS,IAAK;AAClB,QAAI,UAAU,IAAI,IAAI,GAAG;AACvB,YAAM,KAAK,IAAI;AACf,gBAAU,OAAO,IAAI;AAAA,IACvB;AAAA,EACF;AAEA,MAAI,gBAAgB,IAAI;AAEtB,UAAM,YAAY,CAAC,GAAG,SAAS;AAC/B,UAAM,OAAO,aAAa,GAAG,GAAG,SAAS;AAAA,EAC3C,OAAO;AAEL,UAAM,KAAK,GAAG,SAAS;AAAA,EACzB;AAEA,SAAO;AACT;;;ACzSO,SAAS,aAAa,QAG3B;AACA,QAAM,aAA8C,CAAC;AACrD,QAAM,WAAqB,CAAC;AAC5B,QAAM,WAA0B,CAAC;AAIjC,QAAM,iBAAiB,OAAO;AAC9B,aAAW,CAAC,WAAW,WAAW,KAAK,OAAO,QAAQ,cAAc,GAAG;AAErE,QAAI,CAAC,YAAY,KAAM;AAGvB,QAAI,UAAU,SAAS,GAAG,GAAG;AAC3B,wBAAkB,YAAY,UAAU,UAAU,WAAW,WAAW;AACxE;AAAA,IACF;AAEA,eAAW,SAAS,IAAI,wBAAwB,WAAW;AAC3D,QAAI,YAAY,SAAU,UAAS,KAAK,SAAS;AAEjD,UAAM,UAAU,sBAAsB,WAAW;AACjD,QAAI,OAAO,KAAK,OAAO,EAAE,SAAS,GAAG;AACnC,eAAS,SAAS,IAAI;AAAA,IACxB;AAAA,EACF;AAGA,MAAI,OAAO,cAAc,OAAO,WAAW,SAAS,GAAG;AACrD,aAAS,UAAU,IAAI,OAAO;AAAA,EAChC;AAEA,QAAM,SAA0B;AAAA,IAC9B,MAAM;AAAA,IACN;AAAA,EACF;AACA,MAAI,SAAS,SAAS,EAAG,QAAO,WAAW;AAE3C,SAAO,EAAE,QAAQ,SAAS;AAC5B;AAIA,IAAM,mBAA2C;AAAA,EAC/C,SAAS;AAAA,EACT,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,UAAU;AAAA,EACV,aAAa;AAAA,EACb,eAAe;AAAA,EACf,iBAAiB;AACnB;AAEA,IAAM,qBAA6C;AAAA,EACjD,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,eAAe;AACjB;AAEA,SAAS,wBAAwB,QAAuC;AACtE,QAAM,OAAwB,CAAC;AAG/B,QAAM,WAAW,iBAAiB,OAAO,IAAI,KAAK;AAClD,OAAK,OAAO;AAEZ,MAAI,OAAO,MAAO,MAAK,QAAQ,OAAO;AACtC,MAAI,OAAO,YAAa,MAAK,cAAc,OAAO;AAClD,MAAI,OAAO,iBAAiB,OAAW,MAAK,UAAU,OAAO;AAG7D,MAAI,OAAO,WAAW,OAAO,QAAQ,SAAS,GAAG;AAC/C,SAAK,OAAO,OAAO,QAAQ,IAAI,CAAC,MAAM,EAAE,KAAK;AAC7C,UAAM,SAAS,OAAO,QAAQ,IAAI,CAAC,MAAM,EAAE,KAAK;AAChD,UAAM,kBAAkB,OAAO,QAAQ,IAAI,CAAC,MAAM,OAAO,EAAE,KAAK,CAAC;AAEjE,QAAI,OAAO,KAAK,CAAC,GAAG,MAAM,MAAM,gBAAgB,CAAC,CAAC,GAAG;AACnD,WAAK,YAAY;AAAA,IACnB;AAAA,EACF;AAGA,MAAI,OAAO,UAAU;AACnB,eAAW,QAAQ,OAAO,UAAU;AAClC,8BAAwB,MAAM,KAAK,MAAM,KAAK,MAAM;AAAA,IACtD;AAAA,EACF;AAGA,MAAI,OAAO,SAAS,gBAAgB,OAAO,OAAO;AAChD,SAAK,OAAO;AACZ,UAAM,iBAAkD,CAAC;AACzD,UAAM,eAAyB,CAAC;AAChC,eAAW,CAAC,UAAU,UAAU,KAAK,OAAO,QAAQ,OAAO,KAAK,GAAG;AACjE,qBAAe,QAAQ,IAAI,wBAAwB,UAAU;AAC7D,UAAI,WAAW,SAAU,cAAa,KAAK,QAAQ;AAAA,IACrD;AACA,SAAK,QAAQ;AAAA,MACX,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,GAAI,aAAa,SAAS,IAAI,EAAE,UAAU,aAAa,IAAI,CAAC;AAAA,IAC9D;AACA,QAAI,OAAO,aAAa,OAAW,MAAK,WAAW,OAAO;AAC1D,QAAI,OAAO,aAAa,OAAW,MAAK,WAAW,OAAO;AAAA,EAC5D;AAGA,MAAI,OAAO,SAAS,iBAAiB,OAAO,SAAS;AACnD,SAAK,OAAO;AACZ,SAAK,QAAQ;AAAA,MACX,MAAM;AAAA,MACN,MAAM,OAAO,QAAQ,IAAI,CAAC,MAAM,EAAE,KAAK;AAAA,IACzC;AAEA,WAAO,KAAK;AACZ,WAAO,KAAK;AAAA,EACd;AAGA,MAAI,OAAO,SAAS,eAAe;AACjC,SAAK,SAAS;AAAA,EAChB;AACA,MAAI,OAAO,SAAS,iBAAiB;AACnC,SAAK,SAAS;AAAA,EAChB;AAGA,MAAI,OAAO,QAAQ,SAAS,cAAc,OAAO,QAAQ,SAAS,SAAS;AAAA,EAE3E;AAEA,SAAO;AACT;AAEA,SAAS,sBAAsB,QAAqC;AAClE,QAAM,KAAoB,CAAC;AAG3B,QAAM,SAAS,mBAAmB,OAAO,IAAI;AAC7C,MAAI,OAAQ,IAAG,WAAW,IAAI;AAG9B,MAAI,OAAO,QAAQ,SAAS,WAAY,IAAG,WAAW,IAAI;AAC1D,MAAI,OAAO,QAAQ,SAAS,QAAS,IAAG,WAAW,IAAI;AACvD,MAAI,OAAO,QAAQ,YAAY,QAAS,IAAG,WAAW,IAAI;AAC1D,MAAI,OAAO,QAAQ,YAAY,aAAc,IAAG,WAAW,IAAI;AAE/D,MAAI,OAAO,YAAa,IAAG,gBAAgB,IAAI,OAAO;AACtD,MAAI,OAAO,SAAU,IAAG,SAAS,IAAI,OAAO;AAC5C,MAAI,OAAO,OAAQ,IAAG,WAAW,IAAI;AACrC,MAAI,OAAO,SAAU,IAAG,aAAa,IAAI;AACzC,MAAI,OAAO,SAAU,IAAG,aAAa,IAAI;AACzC,MAAI,OAAO,QAAQ,UAAW,IAAG,cAAc,IAAI;AACnD,MAAI,OAAO,QAAQ,UAAW,IAAG,eAAe,IAAI,OAAO,OAAO;AAClE,MAAI,OAAO,QAAQ,UAAW,IAAG,UAAU,IAAI;AAG/C,MAAI,OAAO,SAAS;AAClB,UAAM,WAAW,OAAO,QACrB,OAAO,CAAC,MAAM,EAAE,QAAQ,EACxB,IAAI,CAAC,MAAM,EAAE,KAAK;AACrB,QAAI,SAAS,SAAS,EAAG,IAAG,iBAAiB,IAAI;AAAA,EACnD;AAEA,SAAO;AACT;AAEA,SAAS,wBACP,MACA,MACA,QACM;AACN,UAAQ,MAAM;AAAA,IACZ,KAAK;AACH,WAAK,YAAY,OAAO,QAAQ,OAAO,CAAC;AACxC;AAAA,IACF,KAAK;AACH,WAAK,YAAY,OAAO,QAAQ,OAAO,CAAC;AACxC;AAAA,IACF,KAAK;AACH,WAAK,UAAU,OAAO,QAAQ,WAAW,EAAE;AAC3C;AAAA,IACF,KAAK;AACH,UAAI,QAAQ,QAAQ,UAAa,OAAO,QAAQ;AAC9C,aAAK,UAAU,OAAO,OAAO,GAAG;AAClC,UAAI,QAAQ,QAAQ,UAAa,OAAO,QAAQ;AAC9C,aAAK,UAAU,OAAO,OAAO,GAAG;AAClC;AAAA,IACF,KAAK;AACH,UAAI,QAAQ,iBAAiB;AAC3B,aAAK,mBAAmB,OAAO,OAAO,YAAY;AACpD,UAAI,QAAQ,iBAAiB;AAC3B,aAAK,mBAAmB,OAAO,OAAO,YAAY;AACpD;AAAA,IACF,KAAK;AACH,WAAK,aAAa,OAAO,QAAQ,UAAU,CAAC;AAC5C;AAAA,IACF,KAAK;AACH,WAAK,SAAS;AACd;AAAA,IACF,KAAK;AACH,WAAK,SAAS;AACd;AAAA,IACF,KAAK;AACH,WAAK,cAAc;AACnB;AAAA,EACJ;AACF;AAEA,SAAS,kBACP,YACA,UACA,UACA,SACA,QACM;AACN,QAAM,QAAQ,QAAQ,MAAM,GAAG;AAC/B,MAAI,eAAe;AACnB,MAAI,YAAY;AAEhB,WAAS,IAAI,GAAG,IAAI,MAAM,SAAS,GAAG,KAAK;AACzC,UAAM,OAAO,MAAM,CAAC;AACpB,QAAI,CAAC,aAAa,IAAI,GAAG;AACvB,mBAAa,IAAI,IAAI;AAAA,QACnB,MAAM;AAAA,QACN,YAAY,CAAC;AAAA,MACf;AAAA,IACF;AACA,QAAI,CAAC,aAAa,IAAI,EAAE,YAAY;AAClC,mBAAa,IAAI,EAAE,aAAa,CAAC;AAAA,IACnC;AACA,mBAAe,aAAa,IAAI,EAAE;AAElC,QAAI,CAAC,UAAU,IAAI,GAAG;AACpB,gBAAU,IAAI,IAAI,CAAC;AAAA,IACrB;AACA,gBAAY,UAAU,IAAI;AAAA,EAC5B;AAEA,QAAM,WAAW,MAAM,MAAM,SAAS,CAAC;AACvC,eAAa,QAAQ,IAAI,wBAAwB,MAAM;AACvD,MAAI,OAAO,UAAU;AAEnB,UAAM,aAAa,MAAM,MAAM,GAAG,EAAE;AACpC,QAAI;AACJ,QAAI,QAAQ;AACZ,eAAW,KAAK,YAAY;AAC1B,mBAAa,MAAM,CAAC;AACpB,cAAQ,YAAY,cAAc,CAAC;AAAA,IACrC;AACA,QAAI,YAAY;AACd,iBAAW,WAAW,CAAC,GAAI,WAAW,YAAY,CAAC,GAAI,QAAQ;AAAA,IACjE;AAAA,EACF;AAEA,QAAM,UAAU,sBAAsB,MAAM;AAC5C,MAAI,OAAO,KAAK,OAAO,EAAE,SAAS,GAAG;AACnC,cAAU,QAAQ,IAAI;AAAA,EACxB;AACF;","names":["config","fieldUiSchema","dataValue"]}