{"version":3,"sources":["../src/formBuilder/FBCheckbox.tsx","../src/formBuilder/Collapse/Collapse.tsx","../src/formBuilder/radio/FBRadioButton.tsx","../src/formBuilder/radio/FBRadioGroup.tsx","../src/formBuilder/Tooltip.tsx","../src/formBuilder/dependencies/DependencyWarning.tsx","../src/formBuilder/utils.tsx","../src/formBuilder/dependencies/CardSelector.tsx","../src/formBuilder/CardEnumOptions.tsx","../src/formBuilder/dependencies/ValueSelector.tsx","../src/formBuilder/dependencies/DependencyPossibility.tsx","../src/formBuilder/dependencies/DependencyField.tsx","../src/formBuilder/CardModal.tsx","../src/formBuilder/CardGeneralParameterInputs.tsx","../src/formBuilder/Add.tsx","../src/formBuilder/Card.tsx","../src/formBuilder/defaults/defaultInputs.tsx","../src/formBuilder/SortableItem.tsx","../src/formBuilder/Section.tsx","../src/formBuilder/PlaceholderInput.tsx","../src/formBuilder/defaults/shortAnswerInputs.tsx","../src/formBuilder/defaults/longAnswerInputs.tsx","../src/formBuilder/defaults/numberInputs.tsx","../src/formBuilder/defaults/arrayInputs.tsx","../src/formBuilder/defaults/referenceInputs.tsx","../src/formBuilder/defaults/defaultFormInputs.ts","../src/formBuilder/FormBuilder.tsx","../src/formBuilder/CardGallery.tsx","../src/formBuilder/PredefinedGallery.tsx"],"names":["Box","jsx","IconButton","Typography","memo","FormControlLabel","Tooltip","jsxs","Card","Section","addProperties","Fragment","Autocomplete","TextField","useCallback","useState","CloseIcon","AddIcon","Paper","Stack","useEffect","Link","useMemo","FormControl","Button","Checkbox","React","ArrowUpwardIcon","ArrowDownwardIcon","FormHelperText","EditIcon","DeleteIcon","useSensors","useSensor","PointerSensor","KeyboardSensor","sortableKeyboardCoordinates","Alert","AlertTitle","DndContext","closestCenter","SortableContext","verticalListSortingStrategy"],"mappings":"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","file":"index.mjs","sourcesContent":["import React, { FC, memo } from 'react';\nimport Checkbox from '@mui/material/Checkbox';\nimport FormControlLabel from '@mui/material/FormControlLabel';\n\ninterface FBCheckboxProps {\n  onChangeValue: () => void;\n  isChecked: boolean;\n  label?: string;\n  value?: string;\n  disabled?: boolean;\n  dataTest?: string;\n}\n\nconst FBCheckbox: FC<FBCheckboxProps> = ({\n  onChangeValue,\n  value = '',\n  isChecked = false,\n  label = '',\n  disabled = false,\n  dataTest = '',\n}) => {\n  return (\n    <FormControlLabel\n      data-testid='checkbox'\n      control={\n        <Checkbox\n          data-testid={dataTest || undefined}\n          onChange={() => {\n            if (!disabled) {\n              onChangeValue();\n            }\n          }}\n          value={value}\n          disabled={disabled}\n          checked={isChecked}\n          size='small'\n        />\n      }\n      label={label}\n      sx={{\n        m: 0,\n        '& .MuiFormControlLabel-label': {\n          fontSize: '0.875rem',\n        },\n      }}\n    />\n  );\n};\n\nexport default memo(FBCheckbox);\n","import React, { FC, ReactNode, memo } from 'react';\nimport MuiCollapse from '@mui/material/Collapse';\nimport Box from '@mui/material/Box';\nimport Paper from '@mui/material/Paper';\nimport Typography from '@mui/material/Typography';\nimport IconButton from '@mui/material/IconButton';\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\nimport ChevronRightIcon from '@mui/icons-material/ChevronRight';\n\ninterface CollapseProps {\n  // Determines if the Collapse component is open\n  isOpen: boolean;\n  // Toggles the isOpen boolean between true and false\n  toggleCollapse: () => void;\n  // The title to display in the collapse header\n  title: ReactNode;\n  // Anything to be rendered within the collapse\n  children: Array<ReactNode>;\n  // If true will gray out and disable */\n  disableToggle?: boolean;\n  className?: string;\n  'data-testid'?: string;\n}\n\nconst Collapse: FC<CollapseProps> = (props) => {\n  return (\n    <Paper\n      variant='outlined'\n      className={props.className || ''}\n      data-testid={props['data-testid']}\n      sx={{\n        '&:hover': {\n          borderColor: 'primary.main',\n        },\n      }}\n    >\n      <Box\n        sx={{\n          display: 'flex',\n          alignItems: 'center',\n          borderBottom: props.isOpen ? 1 : 0,\n          borderColor: 'divider',\n          px: 1,\n          py: 0.5,\n        }}\n      >\n        <IconButton\n          size='small'\n          disabled={props.disableToggle}\n          onClick={() => {\n            if (!props.disableToggle) {\n              props.toggleCollapse();\n            }\n          }}\n          sx={{ mr: 1 }}\n        >\n          {props.isOpen ? <ExpandMoreIcon /> : <ChevronRightIcon />}\n        </IconButton>\n        <Typography\n          variant='subtitle1'\n          component='div'\n          sx={{\n            flexGrow: 1,\n            color: 'primary.main',\n            fontWeight: 500,\n            display: 'flex',\n            alignItems: 'center',\n            justifyContent: 'space-between',\n          }}\n        >\n          {props.title}\n        </Typography>\n      </Box>\n      <MuiCollapse in={props.isOpen}>\n        <Box sx={{ p: 2 }}>{props.children}</Box>\n      </MuiCollapse>\n    </Paper>\n  );\n};\n\nexport default memo(Collapse);\n","import React, { ReactElement, memo, useCallback } from 'react';\nimport Radio from '@mui/material/Radio';\nimport FormControlLabel from '@mui/material/FormControlLabel';\n\ntype Props = {\n  label: ReactElement | string;\n  value?: any;\n  name?: string;\n  checked?: boolean;\n  required?: boolean;\n  disabled?: boolean;\n  autoFocus?: boolean;\n  onChange: (selection: string) => void;\n};\n\nfunction FBRadioButton(props: Props): ReactElement {\n  const {\n    label,\n    value,\n    checked,\n    name,\n    onChange,\n    required,\n    disabled,\n    autoFocus,\n  } = props;\n\n  const handleChange = useCallback(() => {\n    onChange(value);\n  }, [onChange, value]);\n\n  return (\n    <FormControlLabel\n      value={value}\n      control={\n        <Radio\n          name={name}\n          checked={checked}\n          required={required}\n          disabled={disabled}\n          autoFocus={autoFocus}\n          onChange={handleChange}\n          size='small'\n        />\n      }\n      label={label}\n      sx={{\n        '& .MuiFormControlLabel-label': {\n          fontSize: '0.875rem',\n        },\n      }}\n    />\n  );\n}\n\nexport default memo(FBRadioButton);\n","import React, { ReactElement, memo, useMemo } from 'react';\nimport RadioGroup from '@mui/material/RadioGroup';\nimport FormControl from '@mui/material/FormControl';\nimport FBRadioButton from './FBRadioButton';\n\ntype FBRadioGroupPropsType = {\n  options: Array<{ label: string | ReactElement; value: string | number }>;\n  onChange: (selection: string) => void;\n  defaultValue?: any;\n  horizontal?: boolean;\n  required?: boolean;\n  disabled?: boolean;\n  autoFocus?: boolean;\n  className?: string;\n};\n\nfunction FBRadioGroup(props: FBRadioGroupPropsType): ReactElement {\n  const { options, defaultValue, onChange, horizontal, autoFocus, disabled } =\n    props;\n\n  // Use useMemo instead of creating new name on every render\n  const name = useMemo(() => Math.random().toString(), []);\n\n  return (\n    <FormControl component='fieldset'>\n      <RadioGroup name={name} defaultValue={defaultValue} row={horizontal}>\n        {options.map((option, index) => (\n          <FBRadioButton\n            value={option.value}\n            label={option.label}\n            name={name}\n            key={option.value}\n            checked={option.value === defaultValue}\n            autoFocus={autoFocus && index === 1}\n            onChange={onChange}\n            disabled={disabled}\n          />\n        ))}\n      </RadioGroup>\n    </FormControl>\n  );\n}\n\nexport default memo(FBRadioGroup);\n","/* eslint react/no-multi-comp: 0, react/prop-types: 0 */\nimport React, { ReactElement } from 'react';\nimport Tooltip from '@mui/material/Tooltip';\nimport StarIcon from '@mui/icons-material/Star';\nimport HelpOutlineIcon from '@mui/icons-material/HelpOutline';\n\nconst typeMap = {\n  alert: StarIcon,\n  help: HelpOutlineIcon,\n};\n\nexport default function TooltipComponent({\n  text,\n  type,\n}: {\n  text: string;\n  type: 'alert' | 'help';\n}): ReactElement {\n  const IconComponent = typeMap[type];\n  return (\n    <Tooltip title={text} placement='top'>\n      <IconComponent\n        fontSize='small'\n        color={type === 'alert' ? 'warning' : 'action'}\n        sx={{ verticalAlign: 'middle', cursor: 'help' }}\n      />\n    </Tooltip>\n  );\n}\n","import React, { ReactElement } from 'react';\nimport Tooltip from '../Tooltip';\n\ninterface DependencyWarningProps {\n  parameters: {\n    [key: string]: any;\n    name?: string;\n    dependents?: Array<{\n      children: Array<string>;\n      value?: any;\n    }>;\n    type?: string;\n    enum?: Array<string | number>;\n    neighborNames?: Array<string>;\n    schema?: string;\n  };\n}\n\n// warning message if not all possibilities specified\nexport default function DependencyWarning({\n  parameters,\n}: DependencyWarningProps): ReactElement | null {\n  if (\n    parameters.enum &&\n    parameters.dependents &&\n    parameters.dependents.length &&\n    parameters.dependents[0].value\n  ) {\n    // get the set of defined enum values\n    const definedVals = new Set([]);\n    (parameters.dependents || []).forEach((possibility) => {\n      if (possibility.value && possibility.value.enum)\n        possibility.value.enum.forEach((val: never) => definedVals.add(val));\n    });\n    const undefinedVals: never[] = [];\n    if (Array.isArray(parameters.enum))\n      parameters.enum.forEach((val) => {\n        if (!definedVals.has(val as never)) undefinedVals.push(val as never);\n      });\n    if (undefinedVals.length === 0) return null;\n    return (\n      <>\n        <p>\n          Warning! The following values do not have associated dependency\n          values:{' '}\n          <Tooltip\n            type='help'\n            text='Each possible value for a value-based dependency must be defined to work properly'\n          />\n        </p>\n\n        <ul>\n          {undefinedVals.map((val, index) => (\n            <li key={index}>{val}</li>\n          ))}\n        </ul>\n      </>\n    );\n  }\n\n  return null;\n}\n","import React, { ReactNode } from 'react';\nimport type { DragEndEvent } from '@dnd-kit/core';\nimport { arrayMove } from '@dnd-kit/sortable';\nimport Typography from '@mui/material/Typography';\nimport {\n  Section,\n  Card,\n  CardProps,\n  ElementProps,\n  FormInput,\n  Mods,\n  CardComponent,\n  DataOptions,\n  DataType,\n  FormElement,\n  CardComponentProps,\n  AddFormObjectParameters,\n  DefinitionData,\n  InputSelectData,\n  JsonSchema,\n  JsonSchemaProperty,\n  UiSchema,\n  UiSchemaProperty,\n} from './types';\n\nexport function parse(text: string): Record<string, unknown> {\n  if (!text || text.trim() === '') return {};\n  try {\n    return JSON.parse(text) as Record<string, unknown>;\n  } catch (error) {\n    throw new Error(\n      `Invalid JSON: ${error instanceof Error ? error.message : 'Unknown error'}`,\n    );\n  }\n}\n\nexport function stringify(obj: unknown): string {\n  if (!obj) return '{}';\n  try {\n    return JSON.stringify(obj);\n  } catch (error) {\n    throw new Error(\n      `Failed to stringify object: ${error instanceof Error ? error.message : 'Unknown error'}`,\n    );\n  }\n}\n\nexport function defaultDataProps(\n  category: string,\n  allFormInputs: { [key: string]: FormInput },\n): InputSelectData {\n  return allFormInputs[category]\n    .defaultDataSchema as unknown as InputSelectData;\n}\n\nexport function defaultUiProps(\n  category: string,\n  allFormInputs: { [key: string]: FormInput },\n): InputSelectData {\n  return allFormInputs[category].defaultUiSchema as unknown as InputSelectData;\n}\nexport function categoryType(\n  category: string,\n  allFormInputs: { [key: string]: FormInput },\n): DataType {\n  return allFormInputs[category].type;\n}\nexport function getCardBody(\n  category: string,\n  allFormInputs: { [key: string]: FormInput },\n) {\n  return (\n    (allFormInputs[category] && allFormInputs[category].cardBody) ||\n    (() => null)\n  );\n}\n\nexport function categoryToNameMap(allFormInputs: {\n  [key: string]: FormInput;\n}): Record<string, string> {\n  const categoryNameMap: Record<string, string> = {};\n  Object.keys(allFormInputs).forEach((inputName) => {\n    categoryNameMap[inputName] = allFormInputs[inputName].displayName;\n  });\n  return categoryNameMap;\n}\n\nfunction updateElementNames(elementArray: Array<ElementProps>) {\n  const elementNames = elementArray.map((elem) => elem.name);\n  return elementArray.map((elem) => {\n    const newElem = elem;\n    newElem.neighborNames = elementNames;\n    return newElem;\n  });\n}\n\nexport function generateCategoryHash(allFormInputs: {\n  [key: string]: FormInput;\n}): Record<string, string> {\n  const categoryHash: Record<string, string> = {};\n  Object.keys(allFormInputs).forEach((categoryName) => {\n    const formInput = allFormInputs[categoryName];\n    formInput.matchIf.forEach((match) => {\n      match.types.forEach((type) => {\n        const hash = `type:${type === 'null' ? '' : type};widget:${\n          match.widget || ''\n        };field:${match.field || ''};format:${match.format || ''};$ref:${\n          match.$ref ? 'true' : 'false'\n        };enum:${match.enum ? 'true' : 'false'}`;\n        if (categoryHash[hash]) {\n          throw new Error(`Duplicate hash: ${hash}`);\n        }\n        categoryHash[hash] = categoryName;\n      });\n    });\n  });\n  return categoryHash;\n}\n\n// determines a card's category based on it's properties\n// mostly useful for reading a schema for the first time\nexport function getCardCategory(\n  cardProps: CardProps,\n  categoryHash: { [key: string]: string },\n): string {\n  const currentHash = `type:${cardProps.dataOptions.type || ''};widget:${\n    cardProps.uiOptions['ui:widget'] || ''\n  };field:${cardProps.uiOptions['ui:field'] || ''};format:${\n    cardProps.dataOptions.format || ''\n  };$ref:${cardProps.$ref !== undefined ? 'true' : 'false'};enum:${\n    cardProps.dataOptions.enum ? 'true' : 'false'\n  }`;\n  const category = categoryHash[currentHash];\n  if (!category) {\n    if (cardProps.$ref) return 'ref';\n\n    console.error(`No match for card': ${currentHash} among set`);\n    return 'shortAnswer';\n  }\n  return category;\n}\n\n// check for unsupported feature in schema and uischema\nconst supportedPropertyParameters = new Set([\n  'title',\n  'description',\n  'enum',\n  'minLength',\n  'maxLength',\n  'multipleOf',\n  'minimum',\n  'maximum',\n  'format',\n  'exclusiveMinimum',\n  'exclusiveMaximum',\n  'type',\n  'default',\n  'pattern',\n  'required',\n  'properties',\n  'items',\n  'definitions',\n  '$ref',\n  'minItems',\n  'maxItems',\n  'enumNames',\n  'dependencies',\n  '$id',\n  '$schema',\n  'meta',\n  'additionalProperties',\n]);\n\nconst supportedUiParameters = new Set([\n  'ui:order',\n  'ui:widget',\n  'ui:autofocus',\n  'ui:autocomplete',\n  'ui:options',\n  'ui:field',\n  'ui:placeholder',\n  'ui:column',\n  'items',\n  'definitions',\n]);\n\n// recursively called function to check an object for unsupported features\nfunction checkObjectForUnsupportedFeatures(\n  schema: JsonSchemaProperty | Record<string, unknown>,\n  uischema: UiSchemaProperty | Record<string, unknown>,\n  supportedWidgets: Set<string>,\n  supportedFields: Set<string>,\n  supportedOptions: Set<string>,\n): string[] {\n  // add each unsupported feature to this array\n  const unsupportedFeatures: Array<string> = [];\n\n  // check for unsupported whole object features\n  if (schema && typeof schema === 'object') {\n    Object.keys(schema).forEach((property) => {\n      if (\n        !supportedPropertyParameters.has(property) &&\n        property !== 'properties'\n      ) {\n        unsupportedFeatures.push(`Unrecognized Object Property: ${property}`);\n      }\n    });\n  }\n\n  if (uischema && typeof uischema === 'object') {\n    Object.keys(uischema).forEach((uiProperty) => {\n      let propDefined = false;\n      // search for the property in the schema properties and dependencies\n      if (\n        schema.properties &&\n        Object.keys(schema.properties).includes(uiProperty)\n      ) {\n        propDefined = true;\n      }\n      if (schema.dependencies) {\n        const deps = schema.dependencies as Record<\n          string,\n          {\n            oneOf?: Array<{ properties?: Record<string, unknown> }>;\n            properties?: Record<string, unknown>;\n          }\n        >;\n        Object.keys(deps).forEach((dependencyKey) => {\n          Object.keys(deps[dependencyKey]).forEach((parameter) => {\n            if (parameter === 'oneOf') {\n              deps[dependencyKey].oneOf?.forEach((grouping) => {\n                if (grouping.properties) {\n                  if (Object.keys(grouping.properties).includes(uiProperty)) {\n                    propDefined = true;\n                  }\n                }\n              });\n            } else if (parameter === 'properties') {\n              if (\n                deps[dependencyKey].properties &&\n                Object.keys(deps[dependencyKey].properties!).includes(\n                  uiProperty,\n                )\n              ) {\n                propDefined = true;\n              }\n            }\n          });\n        });\n      }\n\n      if (!propDefined && !supportedUiParameters.has(uiProperty)) {\n        unsupportedFeatures.push(\n          `Unrecognized UI schema property: ${uiProperty}`,\n        );\n      }\n    });\n  }\n\n  // check for unsupported property parameters\n  if (schema.properties) {\n    Object.entries(schema.properties).forEach(\n      ([parameter, element]: [string, any]) => {\n        if (\n          element &&\n          typeof element === 'object' &&\n          element.type &&\n          element.type !== 'object'\n        ) {\n          // make sure that the type is valid\n          if (\n            !['array', 'string', 'integer', 'number', 'boolean'].includes(\n              element.type,\n            )\n          ) {\n            unsupportedFeatures.push(\n              `Unrecognized type: ${element.type} in ${parameter}`,\n            );\n          }\n          // check the properties of each property if it is a basic object\n          Object.keys(element).forEach((key) => {\n            if (!supportedPropertyParameters.has(key)) {\n              unsupportedFeatures.push(\n                `Property Parameter: ${key} in ${parameter}`,\n              );\n            }\n          });\n        } else {\n          // check the properties of each property if it is a basic object\n          Object.keys(element).forEach((key) => {\n            if (!supportedPropertyParameters.has(key)) {\n              unsupportedFeatures.push(\n                `Property Parameter: ${key} in ${parameter}`,\n              );\n            }\n          });\n        }\n\n        // check for unsupported UI components\n        // Skip this check for object types and $ref elements (which may reference objects)\n        const isObjectLike =\n          element &&\n          (element.type === 'object' || element.$ref || element.properties);\n        if (uischema && uischema[parameter] && element && !isObjectLike) {\n          // check for unsupported ui properties\n          Object.keys(uischema[parameter]).forEach((uiProp) => {\n            if (!supportedUiParameters.has(uiProp)) {\n              unsupportedFeatures.push(\n                `UI Property: ${uiProp} for ${parameter}`,\n              );\n            }\n\n            // check for unsupported ui widgets\n            const uiParam = uischema[parameter] as Record<string, unknown>;\n            if (\n              uiProp === 'ui:widget' &&\n              typeof uiParam[uiProp] === 'string' &&\n              !supportedWidgets.has(uiParam[uiProp] as string)\n            ) {\n              unsupportedFeatures.push(\n                `UI Widget: ${uiParam[uiProp]} for ${parameter}`,\n              );\n            }\n\n            // check for unsupported ui fields\n            if (\n              uiProp === 'ui:field' &&\n              typeof uiParam[uiProp] === 'string' &&\n              !supportedFields.has(uiParam[uiProp] as string)\n            ) {\n              unsupportedFeatures.push(\n                `UI Field: ${uiParam[uiProp]} for ${parameter}`,\n              );\n            }\n\n            // check unsupported ui option\n            if (\n              uiProp === 'ui:options' &&\n              typeof uiParam['ui:options'] === 'object' &&\n              uiParam['ui:options'] !== null\n            ) {\n              Object.keys(\n                uiParam['ui:options'] as Record<string, unknown>,\n              ).forEach((uiOption) => {\n                if (!supportedOptions.has(uiOption)) {\n                  unsupportedFeatures.push(\n                    `UI Property: ui:options.${uiOption} for ${parameter}`,\n                  );\n                }\n              });\n            }\n          });\n        }\n      },\n    );\n  }\n\n  return unsupportedFeatures;\n}\n\n// parent function that checks for unsupported features in an entire document\nexport function checkForUnsupportedFeatures(\n  schema: JsonSchema | Record<string, unknown>,\n  uischema: UiSchema | Record<string, unknown>,\n  allFormInputs: { [key: string]: FormInput },\n): string[] {\n  // add each unsupported feature to this array\n  const unsupportedFeatures = [];\n\n  const widgets: string[] = [];\n  const fields: string[] = [];\n  const options: string[] = [];\n  Object.keys(allFormInputs).forEach((inputType) => {\n    allFormInputs[inputType].matchIf.forEach((match) => {\n      if (match.widget && !widgets.includes(match.widget)) {\n        widgets.push(match.widget);\n      }\n      if (match.field && !fields.includes(match.field)) {\n        fields.push(match.field);\n      }\n    });\n    if (\n      allFormInputs[inputType].possibleOptions &&\n      Array.isArray(allFormInputs[inputType].possibleOptions)\n    ) {\n      options.push(...allFormInputs[inputType].possibleOptions!);\n    }\n  });\n  const supportedWidgets = new Set(widgets);\n  const supportedFields = new Set(fields);\n  const supportedOptions = new Set(options);\n\n  // check for unsupported whole form features\n  if (schema && typeof schema === 'object' && schema.type === 'object') {\n    unsupportedFeatures.push(\n      ...checkObjectForUnsupportedFeatures(\n        schema,\n        uischema,\n        supportedWidgets,\n        supportedFields,\n        supportedOptions,\n      ),\n    );\n  } else {\n    unsupportedFeatures.push('jsonSchema form is not of type object');\n  }\n\n  return unsupportedFeatures;\n}\n\n// make an element out of the corresponding properties and UI properties\nfunction generateDependencyElement(\n  name: string,\n  dataProps: JsonSchemaProperty | Record<string, unknown>,\n  uiProperties: UiSchemaProperty | Record<string, unknown>,\n  requiredNames: string[],\n  categoryHash: { [key: string]: string },\n  definitionData?: DefinitionData,\n  definitionUi?: { [key: string]: UiSchemaProperty },\n  useDefinitionDetails = true, // determines whether to use an element's definition details or not.\n): FormElement {\n  let uiProps = {\n    ...uiProperties,\n  };\n  const newElement: FormElement = {};\n  let elementDetails =\n    dataProps && typeof dataProps === 'object' ? dataProps : {};\n\n  // populate newElement with reference if applicable\n  if (elementDetails.$ref !== undefined && definitionData) {\n    const pathArr =\n      typeof elementDetails.$ref === 'string'\n        ? elementDetails.$ref.split('/')\n        : [];\n    if (\n      pathArr[0] === '#' &&\n      pathArr[1] === 'definitions' &&\n      definitionData[pathArr[2]] &&\n      useDefinitionDetails === true\n    ) {\n      elementDetails = {\n        ...elementDetails,\n        ...definitionData[pathArr[2]],\n      };\n    }\n\n    const definedUiProps = (definitionUi || {})[pathArr[2]];\n    uiProps = {\n      ...(definedUiProps || {}),\n      ...uiProps,\n    };\n  }\n\n  newElement.name = name;\n  newElement.required = requiredNames.includes(name);\n  newElement.$ref =\n    typeof elementDetails.$ref === 'string' ? elementDetails.$ref : undefined;\n\n  if (elementDetails.type && elementDetails.type === 'object') {\n    // create a section\n    newElement.schema = elementDetails;\n    newElement.uischema = uiProps || {};\n    newElement.propType = 'section';\n  } else {\n    // create a card\n    newElement.dataOptions = elementDetails;\n    newElement.uiOptions = uiProps || {};\n\n    // ensure that uiOptions does not have duplicate keys with dataOptions\n    const reservedKeys = Object.keys(newElement.dataOptions!);\n    Object.keys(newElement.uiOptions!).forEach((uiKey) => {\n      if (reservedKeys.includes(uiKey)) {\n        newElement.uiOptions![`ui:*${uiKey}`] = newElement.uiOptions![uiKey];\n      }\n    });\n\n    (newElement.dataOptions as Record<string, unknown>).category =\n      getCardCategory(newElement as CardProps, categoryHash);\n    newElement.propType = 'card';\n  }\n  return newElement;\n}\n\n// generate an array of element objects from a schema and uischema\nexport function generateElementPropsFromSchemas(parameters: {\n  schema: JsonSchema | Record<string, unknown>;\n  uischema: UiSchema | Record<string, unknown>;\n  definitionData?: DefinitionData;\n  definitionUi?: { [key: string]: UiSchemaProperty };\n  categoryHash: { [key: string]: string };\n}): ElementProps[] {\n  const { schema, uischema, definitionData, definitionUi, categoryHash } =\n    parameters;\n\n  if (!schema.properties) return [];\n\n  const elementDict: { [key: string]: FormElement } = {};\n  const requiredNames =\n    'required' in schema && Array.isArray(schema.required)\n      ? schema.required\n      : [];\n\n  // read regular elements from properties\n  if (!schema.properties || typeof schema.properties !== 'object') {\n    return [];\n  }\n\n  Object.entries(schema.properties).forEach(([parameter, element]) => {\n    const newElement: FormElement = {};\n    let elementDetails: JsonSchemaProperty | Record<string, unknown> =\n      element && typeof element === 'object' && !Array.isArray(element)\n        ? (element as JsonSchemaProperty)\n        : {};\n\n    // populate newElement with reference if applicable\n    if (\n      '$ref' in elementDetails &&\n      elementDetails.$ref !== undefined &&\n      definitionData\n    ) {\n      const refValue =\n        typeof elementDetails.$ref === 'string'\n          ? elementDetails.$ref\n          : String(elementDetails.$ref);\n      if (refValue && !refValue.startsWith('#/definitions')) {\n        throw new Error(\n          `Invalid definition, not at '#/definitions': ${refValue}`,\n        );\n      }\n      const pathArr = refValue ? refValue.split('/') : [];\n      if (\n        pathArr[0] === '#' &&\n        pathArr[1] === 'definitions' &&\n        pathArr[2] &&\n        definitionData[pathArr[2]]\n      ) {\n        elementDetails = {\n          ...(definitionData[pathArr[2]] as JsonSchemaProperty),\n          ...elementDetails,\n        };\n      }\n\n      const definedUiProps = definitionUi?.[pathArr[2] || ''];\n      if (typeof uischema === 'object' && uischema !== null) {\n        (uischema as Record<string, unknown>)[parameter] = {\n          ...(definedUiProps || {}),\n          ...((uischema as Record<string, unknown>)[parameter] || {}),\n        };\n      }\n    }\n    newElement.name = parameter;\n    newElement.required = requiredNames.includes(parameter);\n    newElement.$ref =\n      '$ref' in elementDetails && typeof elementDetails.$ref === 'string'\n        ? elementDetails.$ref\n        : undefined;\n    newElement.dataOptions = elementDetails as Record<string, unknown>;\n\n    if ('type' in elementDetails && elementDetails.type === 'object') {\n      // create a section\n      newElement.schema = elementDetails as Record<string, unknown>;\n      newElement.uischema = (\n        typeof uischema === 'object' &&\n        uischema !== null &&\n        parameter in uischema &&\n        typeof (uischema as Record<string, unknown>)[parameter] === 'object'\n          ? (uischema as Record<string, unknown>)[parameter]\n          : {}\n      ) as Record<string, unknown>;\n      newElement.propType = 'section';\n    } else {\n      // create a card\n      newElement.uiOptions = (\n        typeof uischema === 'object' &&\n        uischema !== null &&\n        parameter in uischema &&\n        typeof (uischema as Record<string, unknown>)[parameter] === 'object'\n          ? (uischema as Record<string, unknown>)[parameter]\n          : {}\n      ) as Record<string, unknown>;\n\n      // ensure that uiOptions does not have duplicate keys with dataOptions\n      const reservedKeys = Object.keys(newElement.dataOptions || {});\n      const uiOptions = newElement.uiOptions || {};\n      Object.keys(uiOptions).forEach((uiKey) => {\n        if (reservedKeys.includes(uiKey)) {\n          (uiOptions as Record<string, unknown>)[`ui:*${uiKey}`] =\n            uiOptions[uiKey];\n          delete (uiOptions as Record<string, unknown>)[uiKey];\n        }\n      });\n      newElement.uiOptions = uiOptions;\n\n      (newElement.dataOptions as Record<string, unknown>).category =\n        getCardCategory(newElement as CardProps, categoryHash);\n      newElement.propType = 'card';\n    }\n    elementDict[newElement.name!] = newElement;\n  });\n  // read dependent elements from dependencies\n  if (schema.dependencies) {\n    const useDefinitionDetails = false;\n    const deps = schema.dependencies as Record<\n      string,\n      {\n        oneOf?: Array<{\n          properties?: Record<string, JsonSchemaProperty>;\n          required?: string[];\n        }>;\n      }\n    >;\n    Object.keys(deps).forEach((parent) => {\n      const group = deps[parent];\n      if (group.oneOf) {\n        let possibilityIndex = 0;\n        group.oneOf.forEach((possibility) => {\n          if (!(elementDict[parent] || {}).dependents) {\n            elementDict[parent] = elementDict[parent] || {};\n            elementDict[parent].dependents = [];\n          }\n          elementDict[parent].dependents!.push({\n            children: [],\n            value: possibility.properties?.[parent] as unknown,\n          });\n          const requiredValues = possibility.required || [];\n          Object.entries(possibility.properties || {}).forEach(\n            ([parameter, element]) => {\n              // create a new element if not present in main properties\n              if (\n                !elementDict[parameter] ||\n                (parameter !== parent &&\n                  Object.keys(elementDict[parameter]).length === 1 &&\n                  elementDict[parameter].dependents)\n              ) {\n                const uiProp =\n                  typeof uischema === 'object' &&\n                  uischema !== null &&\n                  parameter in uischema\n                    ? (uischema as Record<string, unknown>)[parameter]\n                    : {};\n                const newElement = generateDependencyElement(\n                  parameter,\n                  element,\n                  uiProp as UiSchemaProperty,\n                  requiredNames,\n                  categoryHash,\n                  definitionData,\n                  definitionUi,\n                  useDefinitionDetails,\n                );\n                if (\n                  elementDict[parameter] &&\n                  elementDict[parameter].dependents\n                ) {\n                  newElement.dependents = elementDict[parameter].dependents;\n                }\n                newElement.required = requiredValues.includes(\n                  newElement.name || '',\n                );\n                elementDict[newElement.name!] = newElement;\n              }\n              if (parameter !== parent) {\n                const newElement = elementDict[parameter];\n                newElement.dependent = true;\n                newElement.parent = parent;\n                if (elementDict[parent].dependents) {\n                  (\n                    elementDict[parent].dependents as Array<{\n                      children: string[];\n                      value?: unknown;\n                    }>\n                  )[possibilityIndex].children.push(parameter);\n                }\n              }\n            },\n          );\n          possibilityIndex += 1;\n        });\n      } else if (\n        'properties' in group &&\n        group.properties &&\n        typeof group.properties === 'object'\n      ) {\n        const groupProps = group as {\n          properties: Record<string, unknown>;\n          required?: string[];\n        };\n        const requiredValues = groupProps.required || [];\n        Object.entries(groupProps.properties).forEach(\n          ([parameter, element]) => {\n            const uiProp =\n              typeof uischema === 'object' &&\n              uischema !== null &&\n              parameter in uischema\n                ? (uischema as Record<string, unknown>)[parameter]\n                : {};\n            const newElement = generateDependencyElement(\n              parameter,\n              element as JsonSchemaProperty,\n              uiProp as UiSchemaProperty,\n              requiredNames,\n              categoryHash,\n              definitionData,\n              definitionUi,\n              useDefinitionDetails,\n            );\n            newElement.required = requiredValues.includes(\n              newElement.name || '',\n            );\n            newElement.dependent = true;\n            newElement.parent = parent;\n            elementDict[newElement.name!] = newElement;\n            if (elementDict[parent]) {\n              if (elementDict[parent].dependents) {\n                elementDict[parent].dependents[0].children.push(parameter);\n              } else {\n                elementDict[parent].dependents = [{ children: [parameter] }];\n              }\n            } else {\n              elementDict[parent] = {};\n              elementDict[parent].dependents = [{ children: [parameter] }];\n            }\n          },\n        );\n      } else {\n        console.error('unsupported dependency type encountered');\n      }\n    });\n  }\n\n  // now reorder in accordance with ui:order if defined\n  const cardPropList: FormElement[] = [];\n  const uiOrder = uischema['ui:order'];\n  if (uiOrder && Array.isArray(uiOrder)) {\n    // in case there are any options not in ui:order\n    const remainder: FormElement[] = [];\n    Object.keys(elementDict).forEach((name) => {\n      if (!uiOrder.includes(name)) remainder.push(elementDict[name]);\n    });\n\n    // map ui order elements into the right order\n    uiOrder.forEach((name: string) => {\n      // if contains the wildcard *, insert remainder cards there\n      if (name === '*') {\n        remainder.forEach((remCard) => {\n          cardPropList.push(remCard);\n        });\n      } else if (elementDict[name]) {\n        cardPropList.push(elementDict[name]);\n      }\n    });\n  } else {\n    Object.keys(elementDict).forEach((name) => {\n      cardPropList.push(elementDict[name]);\n    });\n  }\n\n  updateElementNames(cardPropList as ElementProps[]);\n\n  return cardPropList as ElementProps[];\n}\n\n// determine the number of element objects from schema and uischema\nexport function countElementsFromSchema(\n  schemaData: JsonSchema | Record<string, unknown>,\n): number {\n  if (\n    !schemaData ||\n    typeof schemaData !== 'object' ||\n    !('properties' in schemaData) ||\n    !schemaData.properties ||\n    typeof schemaData.properties !== 'object'\n  ) {\n    return 0;\n  }\n  const elementDict: {\n    [key: string]: {\n      dependents?: Array<{ children: string[]; value?: unknown }>;\n      dependent?: boolean;\n      parent?: string;\n    };\n  } = {};\n  let elementCount = 0;\n\n  // read regular elements from properties\n  Object.entries(schemaData.properties).forEach(([parameter]) => {\n    elementDict[parameter] = {};\n    elementCount += 1;\n  });\n  // read dependent elements from dependencies\n  if (schemaData.dependencies) {\n    const deps = schemaData.dependencies as Record<\n      string,\n      {\n        oneOf?: Array<{ properties?: Record<string, unknown> }>;\n        properties?: Record<string, unknown>;\n      }\n    >;\n    Object.keys(deps).forEach((parent) => {\n      const group = deps[parent];\n      if (group.oneOf) {\n        let possibilityIndex = 0;\n        group.oneOf.forEach((possibility) => {\n          if (!(elementDict[parent] || {}).dependents) {\n            elementDict[parent] = elementDict[parent] || {};\n            elementDict[parent].dependents = [];\n          }\n          elementDict[parent].dependents!.push({\n            children: [],\n            value: possibility.properties?.[parent],\n          });\n          Object.entries(possibility.properties || {}).forEach(\n            ([parameter]) => {\n              // create a new element if not present in main properties\n              if (!Object.keys(elementDict).includes(parameter)) {\n                elementDict[parameter] = {};\n                elementCount += 1;\n              }\n              if (parameter !== parent) {\n                const newElement = elementDict[parameter];\n                (\n                  newElement as { dependent?: boolean; parent?: string }\n                ).dependent = true;\n                (\n                  newElement as { dependent?: boolean; parent?: string }\n                ).parent = parent;\n                if (elementDict[parent].dependents) {\n                  elementDict[parent].dependents[\n                    possibilityIndex\n                  ].children.push(parameter);\n                }\n              }\n            },\n          );\n          possibilityIndex += 1;\n        });\n      } else if (\n        'properties' in group &&\n        group.properties &&\n        typeof group.properties === 'object'\n      ) {\n        Object.entries(group.properties).forEach(([parameter]) => {\n          elementDict[parameter] = elementDict[parameter] || {};\n          elementCount += 1;\n          if (elementDict[parent]) {\n            if (elementDict[parent].dependents) {\n              elementDict[parent].dependents[0].children.push(parameter);\n            } else {\n              elementDict[parent].dependents = [{ children: [parameter] }];\n            }\n          } else {\n            elementDict[parent] = {};\n            elementDict[parent].dependents = [{ children: [parameter] }];\n          }\n        });\n      } else {\n        console.error('unsupported dependency type encountered');\n      }\n    });\n  }\n\n  return elementCount;\n}\n\n// convert an element into a schema equivalent\nfunction generateSchemaElementFromElement(\n  element: ElementProps,\n): JsonSchemaProperty {\n  if (element.$ref !== undefined) {\n    const schema = element.schema as\n      | JsonSchema\n      | Record<string, unknown>\n      | undefined;\n    const dataOptions = element.dataOptions as\n      | JsonSchemaProperty\n      | Record<string, unknown>\n      | undefined;\n    const title =\n      schema !== undefined &&\n      typeof schema === 'object' &&\n      'title' in schema &&\n      typeof schema.title === 'string'\n        ? schema.title\n        : dataOptions &&\n            typeof dataOptions === 'object' &&\n            'title' in dataOptions &&\n            typeof dataOptions.title === 'string'\n          ? dataOptions.title\n          : undefined;\n    const description =\n      schema !== undefined &&\n      typeof schema === 'object' &&\n      'description' in schema &&\n      typeof schema.description === 'string'\n        ? schema.description\n        : dataOptions &&\n            typeof dataOptions === 'object' &&\n            'description' in dataOptions &&\n            typeof dataOptions.description === 'string'\n          ? dataOptions.description\n          : undefined;\n\n    const returnElement: JsonSchemaProperty = {\n      $ref: element.$ref,\n    };\n    if (title !== undefined) returnElement.title = title;\n    if (description !== undefined) returnElement.description = description;\n\n    const required =\n      schema &&\n      typeof schema === 'object' &&\n      'required' in schema &&\n      Array.isArray(schema.required)\n        ? schema.required\n        : undefined;\n    if (required && required.length > 0) {\n      returnElement.required = required;\n    }\n    return returnElement;\n  } else if (element.propType === 'card') {\n    const dataOptions = element.dataOptions as\n      | Record<string, unknown>\n      | JsonSchemaProperty;\n    if (\n      typeof dataOptions === 'object' &&\n      dataOptions !== null &&\n      'category' in dataOptions &&\n      dataOptions.category === 'section'\n    ) {\n      return {\n        type: 'object',\n      };\n    } else {\n      const prop: Record<string, unknown> = {};\n      const dataOpts = element.dataOptions as Record<string, unknown>;\n\n      Object.keys(dataOpts).forEach((key) => {\n        if (\n          ![\n            'category',\n            'hideKey',\n            'path',\n            'definitionData',\n            'definitionUi',\n            'allFormInputs',\n          ].includes(key) &&\n          dataOpts[key] !== ''\n        )\n          prop[key] = dataOpts[key];\n      });\n      return prop as JsonSchemaProperty;\n    }\n  } else if (element.propType === 'section') {\n    return (element.schema as JsonSchemaProperty) || {};\n  } else {\n    throw new Error('Element that is neither card, section, nor ref');\n  }\n}\n\n// generate a new schema from a complete array of card objects\nexport function generateSchemaFromElementProps(\n  elementArr: ElementProps[],\n): JsonSchema {\n  if (!elementArr || !Array.isArray(elementArr)) {\n    return { type: 'object', properties: {} };\n  }\n  const newSchema: JsonSchema = {\n    type: 'object',\n    properties: {},\n  };\n\n  const props: { [key: string]: JsonSchemaProperty } = {};\n  const dependencies: {\n    [key: string]: {\n      properties?: { [key: string]: JsonSchemaProperty };\n      required?: string[];\n      oneOf?: Array<{\n        properties: { [key: string]: JsonSchemaProperty };\n        required?: string[];\n      }>;\n    };\n  } = {};\n  const elementDict: { [key: string]: ElementProps } = {};\n  const dependentElements = new Set();\n  for (let index = 0; index < elementArr.length; index += 1) {\n    const element = elementArr[index];\n    elementDict[element.name] = { ...element };\n    if (element.dependents) {\n      const deps = element.dependents as Array<{\n        children: string[];\n        value?: unknown;\n      }>;\n      deps.forEach((possibility) => {\n        possibility.children.forEach((dependentElement) => {\n          dependentElements.add(dependentElement);\n        });\n      });\n    }\n  }\n  Object.keys(elementDict).forEach((elementName) => {\n    const element = elementDict[elementName];\n    if (element.dependents && element.dependents[0]) {\n      if (element.dependents[0].value) {\n        // handle value based case\n        const dependents = element.dependents as Array<{\n          children: string[];\n          value?: unknown;\n        }>;\n        dependencies[elementName] = {\n          oneOf: dependents.map((possibility) => {\n            const childrenComponents: Record<string, JsonSchemaProperty> = {};\n            const requiredValues: string[] = [];\n            possibility?.children?.forEach((child) => {\n              if (elementDict[child]) {\n                childrenComponents[child] = generateSchemaElementFromElement(\n                  elementDict[child],\n                );\n                if (elementDict[child].required) requiredValues.push(child);\n              }\n            });\n            return {\n              properties: {\n                [elementName]: possibility.value as JsonSchemaProperty,\n                ...childrenComponents,\n              },\n              required: requiredValues,\n            };\n          }),\n        };\n      } else {\n        // handle definition based case\n        const childrenComponents: Record<string, JsonSchemaProperty> = {};\n        const requiredValues: string[] = [];\n        const dependents = element.dependents as Array<{\n          children: string[];\n          value?: unknown;\n        }>;\n        dependents[0].children.forEach((child) => {\n          childrenComponents[child] = generateSchemaElementFromElement(\n            elementDict[child],\n          );\n          if (elementDict[child].required) requiredValues.push(child);\n        });\n        dependencies[elementName] = {\n          properties: childrenComponents,\n          required: requiredValues,\n        };\n      }\n    }\n    if (!dependentElements.has(elementName)) {\n      props[element.name] = generateSchemaElementFromElement(element);\n    }\n  });\n\n  newSchema.properties = props;\n  newSchema.dependencies = dependencies;\n  newSchema.required = elementArr\n    .filter(({ required, dependent }) => required && !dependent)\n    .map(({ name }) => name);\n\n  return newSchema;\n}\n\nexport function generateUiSchemaFromElementProps(\n  elementArr: Array<ElementProps>,\n  definitionUi?: { [key: string]: UiSchemaProperty },\n): UiSchema {\n  if (!elementArr || !Array.isArray(elementArr)) {\n    return { 'ui:order': [] };\n  }\n\n  const uiSchema: { [key: string]: UiSchemaProperty } = {};\n  const uiOrder: string[] = [];\n  const definitions = definitionUi;\n\n  elementArr.forEach((element) => {\n    uiOrder.push(element.name);\n    if (element.$ref !== undefined && element.name) {\n      // look for the reference\n      const pathArr =\n        typeof element.$ref === 'string' ? element.$ref.split('/') : [];\n      if (definitions && pathArr[2] && definitions[pathArr[2]]) {\n        uiSchema[element.name] = definitions[pathArr[2]];\n      }\n    }\n    if (element.propType === 'card' && element.uiOptions && element.name) {\n      const uiOptions = element.uiOptions as Record<string, unknown>;\n      const elementUiSchema: UiSchemaProperty = {};\n      Object.keys(uiOptions).forEach((uiOption) => {\n        if (uiOption.startsWith('ui:*')) {\n          elementUiSchema[uiOption.substring(4)] = uiOptions[uiOption];\n        } else {\n          elementUiSchema[uiOption] = uiOptions[uiOption];\n        }\n      });\n      uiSchema[element.name] = elementUiSchema;\n    } else if (\n      element.propType === 'section' &&\n      element.uischema &&\n      element.name &&\n      Object.keys(element.uischema).length > 0\n    ) {\n      uiSchema[element.name] = element.uischema as UiSchemaProperty;\n    }\n  });\n\n  const result: UiSchema = { ...uiSchema, 'ui:order': uiOrder };\n  if (definitions) {\n    result.definitions = definitions;\n  }\n  return result;\n}\n\nexport function getCardParameterInputComponentForType(\n  category: string,\n  allFormInputs: { [key: string]: FormInput },\n): CardComponent {\n  return (\n    (allFormInputs[category] && allFormInputs[category].modalBody) ||\n    (() => null)\n  );\n}\n\n// takes in an array of Card Objects and updates both schemas\nexport function updateSchemas(\n  elementArr: ElementProps[],\n  parameters: {\n    schema: { [key: string]: any; definitions?: { [key: string]: any } };\n    uischema: { [key: string]: any; definitions?: { [key: string]: any } };\n    onChange: (\n      schema: { [key: string]: any },\n      uischema: { [key: string]: any },\n    ) => any;\n    definitionData?: { [key: string]: any };\n    definitionUi?: { [key: string]: any };\n  },\n) {\n  const { schema, uischema, onChange, definitionUi } = parameters;\n  const newSchema = Object.assign(\n    { ...schema },\n    generateSchemaFromElementProps(elementArr),\n  );\n\n  const newUiSchema: {\n    [key: string]: any;\n    definitions?: { [key: string]: any };\n  } = generateUiSchemaFromElementProps(elementArr, definitionUi);\n  if (uischema.definitions) {\n    newUiSchema.definitions = uischema.definitions;\n  }\n\n  // mandate that the type is an object if not already done\n  newSchema.type = 'object';\n  onChange(newSchema, newUiSchema);\n}\n\nexport const DEFAULT_INPUT_NAME = 'newInput';\n\n// ensure that each added block has a unique name\nfunction getIdFromElementsBlock(elements: Array<ElementProps>) {\n  const names = elements.map((element) => element.name);\n  const defaultNameLength = DEFAULT_INPUT_NAME.length;\n\n  return names.length > 0\n    ? Math.max(\n        ...names.map((name) => {\n          if (name.startsWith(DEFAULT_INPUT_NAME)) {\n            const index = name.substring(defaultNameLength, name.length);\n            const value = Number.parseInt(index);\n\n            if (!isNaN(value)) {\n              return value;\n            }\n          }\n\n          return 0;\n        }),\n      ) + 1\n    : 1;\n}\n\n// given an initial schema, update with a new card appended\nexport function addCardObj(parameters: AddFormObjectParameters) {\n  const {\n    schema,\n    uischema,\n    mods,\n    onChange,\n    definitionData,\n    definitionUi,\n    index,\n    categoryHash,\n  } = parameters;\n  const newElementObjArr = generateElementPropsFromSchemas({\n    schema,\n    uischema,\n    definitionData,\n    definitionUi,\n    categoryHash,\n  });\n\n  const i = getIdFromElementsBlock(newElementObjArr);\n  const dataOptions = getNewElementDefaultDataOptions(i, mods);\n\n  const newElement: ElementProps = {\n    name: `${DEFAULT_INPUT_NAME}${i}`,\n    required: false,\n    dataOptions: dataOptions,\n    uiOptions: (mods && mods.newElementDefaultUiSchema) || {},\n    propType: 'card',\n    schema: {},\n    uischema: {},\n    neighborNames: [],\n  };\n\n  if (index !== undefined && index !== null) {\n    newElementObjArr.splice(index + 1, 0, newElement);\n  } else {\n    newElementObjArr.push(newElement);\n  }\n  updateSchemas(newElementObjArr, {\n    schema,\n    uischema,\n    definitionData,\n    definitionUi,\n    onChange,\n  });\n}\n\n// given an initial schema, update with a new section appended\nexport function addSectionObj(parameters: AddFormObjectParameters) {\n  const {\n    schema,\n    uischema,\n    onChange,\n    definitionData,\n    definitionUi,\n    index,\n    categoryHash,\n  } = parameters;\n  const newElementObjArr = generateElementPropsFromSchemas({\n    schema,\n    uischema,\n    definitionData,\n    definitionUi,\n    categoryHash,\n  });\n\n  const i = getIdFromElementsBlock(newElementObjArr);\n\n  const newElement: ElementProps = {\n    name: `${DEFAULT_INPUT_NAME}${i}`,\n    required: false,\n    dataOptions: {\n      title: `New Input ${i}`,\n      type: 'object',\n      default: '',\n    },\n    uiOptions: {},\n    propType: 'section',\n    schema: { title: `New Input ${i}`, type: 'object' },\n    uischema: {},\n    neighborNames: [],\n  };\n\n  if (index !== undefined && index !== null) {\n    newElementObjArr.splice(index + 1, 0, newElement);\n  } else {\n    newElementObjArr.push(newElement);\n  }\n  updateSchemas(newElementObjArr, {\n    schema,\n    uischema,\n    definitionData,\n    definitionUi,\n    onChange,\n  });\n}\n\n// generate an array of Card and Section components from a schema\nexport function generateElementComponentsFromSchemas(parameters: {\n  schemaData: { [key: string]: any };\n  uiSchemaData: { [key: string]: any };\n  onChange: (\n    schema: { [key: string]: any },\n    uischema: { [key: string]: any },\n  ) => any;\n  definitionData?: { [key: string]: any };\n  definitionUi?: { [key: string]: any };\n  hideKey?: boolean;\n  path: string;\n  cardOpenArray: Array<boolean>;\n  setCardOpenArray: (updater: (prev: boolean[]) => boolean[]) => void;\n  allFormInputs: { [key: string]: FormInput };\n  mods?: Mods;\n  categoryHash: { [key: string]: string };\n  Card: Card;\n  Section: Section;\n}): ReactNode[] {\n  const {\n    schemaData,\n    uiSchemaData,\n    onChange,\n    definitionData,\n    definitionUi,\n    hideKey,\n    path,\n    cardOpenArray,\n    setCardOpenArray,\n    allFormInputs,\n    mods,\n    categoryHash,\n    Card,\n    Section,\n  } = parameters;\n\n  const schema = parse(stringify(schemaData));\n  const uischema = parse(stringify(uiSchemaData));\n\n  if (!schema.properties) return [];\n  const elementPropArr = generateElementPropsFromSchemas({\n    schema,\n    uischema,\n    definitionData,\n    definitionUi,\n    categoryHash,\n  });\n\n  // Use ref to access latest cardOpenArray without causing re-renders\n  const cardOpenArrayRef = { current: cardOpenArray };\n\n  const elementList = elementPropArr.map((elementProp, index) => {\n    const MIN_CARD_OPEN_ARRAY_LENGTH = index + 1;\n    const currentLength = cardOpenArrayRef.current.length;\n    const addProperties = {\n      schema,\n      uischema,\n      mods,\n      onChange,\n      definitionData: definitionData || {},\n      definitionUi: definitionUi || {},\n      index,\n      categoryHash,\n    };\n\n    if (currentLength < MIN_CARD_OPEN_ARRAY_LENGTH) {\n      const newArray = [\n        ...cardOpenArrayRef.current,\n        ...new Array(MIN_CARD_OPEN_ARRAY_LENGTH - currentLength).fill(false),\n      ];\n      cardOpenArrayRef.current = newArray;\n      // Update the actual state as well\n      setCardOpenArray(() => newArray);\n    }\n    const expanded =\n      (cardOpenArrayRef.current &&\n        index < cardOpenArrayRef.current.length &&\n        cardOpenArrayRef.current[index]) ||\n      false;\n    if (elementProp.propType === 'card') {\n      // choose the appropriate type specific parameters\n      const TypeSpecificParameters = getCardParameterInputComponentForType(\n        ((elementProp.dataOptions as Record<string, unknown>)\n          .category as string) || 'string',\n        allFormInputs,\n      );\n\n      // add a fully defined card component to the list of components\n      return (\n        <Card\n          componentProps={\n            Object.assign(\n              {\n                name: elementPropArr[index].name,\n                required: elementPropArr[index].required,\n                hideKey,\n                path: `${path}_${elementPropArr[index].name}`,\n                definitionData,\n                definitionUi,\n                neighborNames: elementPropArr[index].neighborNames,\n                dependents: elementPropArr[index].dependents,\n                dependent: elementPropArr[index].dependent,\n                parent: elementPropArr[index].parent,\n              },\n              elementPropArr[index].uiOptions,\n              elementPropArr[index].dataOptions,\n            ) as CardComponentProps\n          }\n          key={`${path}_${elementPropArr[index].name}`}\n          TypeSpecificParameters={TypeSpecificParameters}\n          onChange={(newCardObj: CardComponentProps) => {\n            const newElementObjArr = generateElementPropsFromSchemas({\n              schema,\n              uischema,\n              definitionData,\n              definitionUi,\n              categoryHash,\n            });\n\n            // extract uiOptions and other properties\n            const newDataProps: Record<string, unknown> = {};\n            const newUiProps: Record<string, unknown> = {};\n            const cardObj = newCardObj as Record<string, unknown>;\n            Object.keys(cardObj).forEach((propName) => {\n              if (propName.startsWith('ui:')) {\n                if (propName.startsWith('ui:*')) {\n                  newUiProps[propName.substring(4)] = cardObj[propName];\n                } else {\n                  newUiProps[propName] = cardObj[propName];\n                }\n              } else if (\n                ![\n                  'name',\n                  'required',\n                  'neighborNames',\n                  'dependents',\n                  'dependent',\n                  'parent',\n                ].includes(propName)\n              ) {\n                newDataProps[propName] = cardObj[propName];\n              }\n            });\n\n            if (newElementObjArr[index].propType === 'card') {\n              const oldElement = newElementObjArr[index];\n              newElementObjArr[index] = {\n                ...oldElement,\n                dataOptions: newDataProps,\n                uiOptions: newUiProps,\n                required: newCardObj.required ?? oldElement.required,\n                dependents: newCardObj.dependents,\n                dependent: newCardObj.dependent,\n                parent: newCardObj.parent,\n                name: newCardObj.name,\n                $ref: newCardObj.$ref,\n                propType: 'card',\n              };\n            } else {\n              throw new Error('Card editing non card element');\n            }\n            updateSchemas(newElementObjArr, {\n              schema,\n              uischema,\n              definitionData,\n              definitionUi,\n              onChange,\n            });\n          }}\n          onDelete={() => {\n            // splice out this index from the card array\n            const newElementObjArr = generateElementPropsFromSchemas({\n              schema,\n              uischema,\n              definitionData,\n              definitionUi,\n              categoryHash,\n            });\n            newElementObjArr.splice(index, 1);\n            setCardOpenArray((prev) => [\n              ...prev.slice(0, index),\n              ...prev.slice(index + 1),\n            ]);\n            updateSchemas(newElementObjArr, {\n              schema,\n              uischema,\n              definitionData,\n              definitionUi,\n              onChange,\n            });\n          }}\n          onMoveUp={() => {\n            const newElementObjArr = generateElementPropsFromSchemas({\n              schema,\n              uischema,\n              definitionData,\n              definitionUi,\n              categoryHash,\n            });\n            if (index === 0) return;\n\n            const tempBlock = newElementObjArr[index - 1];\n            newElementObjArr[index - 1] = newElementObjArr[index];\n            newElementObjArr[index] = tempBlock;\n            updateSchemas(newElementObjArr, {\n              schema,\n              uischema,\n              definitionData,\n              definitionUi,\n              onChange,\n            });\n          }}\n          onMoveDown={() => {\n            const newElementObjArr = generateElementPropsFromSchemas({\n              schema,\n              uischema,\n              definitionData,\n              definitionUi,\n              categoryHash,\n            });\n            if (index === elementPropArr.length - 1) return;\n\n            const tempBlock = newElementObjArr[index + 1];\n            newElementObjArr[index + 1] = newElementObjArr[index];\n            newElementObjArr[index] = tempBlock;\n            updateSchemas(newElementObjArr, {\n              schema,\n              uischema,\n              definitionData,\n              definitionUi,\n              onChange,\n            });\n          }}\n          addElem={(choice: string) => {\n            if (choice === 'card') {\n              addCardObj(addProperties);\n            } else if (choice === 'section') {\n              addSectionObj(addProperties);\n            }\n            setCardOpenArray((prev) => [...prev, false]);\n          }}\n          cardOpen={expanded}\n          setCardOpen={(newState: boolean) => {\n            setCardOpenArray((prev) => [\n              ...prev.slice(0, index),\n              newState,\n              ...prev.slice(index + 1),\n            ]);\n          }}\n          allFormInputs={allFormInputs}\n          mods={mods}\n          addProperties={addProperties}\n        />\n      );\n    } else if (elementProp.propType === 'section') {\n      // create a section with the appropriate schemas here\n      const addProperties = {\n        schema,\n        uischema,\n        mods,\n        onChange,\n        definitionData: definitionData || {},\n        definitionUi: definitionUi || {},\n        index,\n        categoryHash,\n      };\n      return (\n        <Section\n          schema={elementProp.schema}\n          uischema={elementProp.uischema}\n          onChange={(\n            newSchema: { [key: string]: any },\n            newUiSchema: { [key: string]: any },\n            newRef?: string,\n          ) => {\n            const newElementObjArr = generateElementPropsFromSchemas({\n              schema,\n              uischema,\n              definitionData,\n              definitionUi,\n              categoryHash,\n            });\n\n            const oldSection = newElementObjArr[index];\n\n            newElementObjArr[index] = {\n              ...oldSection,\n              schema: newSchema,\n              uischema: newUiSchema,\n              propType: 'section',\n            };\n\n            if (newRef) newElementObjArr[index].$ref = newRef;\n\n            updateSchemas(newElementObjArr, {\n              schema,\n              uischema,\n              definitionData,\n              definitionUi,\n              onChange,\n            });\n          }}\n          onNameChange={(newName: string) => {\n            const oldSection = elementProp;\n\n            // check if newName overlaps with an existing name\n            if (elementPropArr.map((elem) => elem.name).includes(newName))\n              return;\n\n            const newElementObjArr = generateElementPropsFromSchemas({\n              schema,\n              uischema,\n              definitionData,\n              definitionUi,\n              categoryHash,\n            });\n            newElementObjArr[index] = {\n              ...oldSection,\n              name: newName,\n            };\n            updateSchemas(newElementObjArr, {\n              schema,\n              uischema,\n              definitionData,\n              definitionUi,\n              onChange,\n            });\n          }}\n          onRequireToggle={() => {\n            const oldSection = elementProp;\n\n            const newElementObjArr = generateElementPropsFromSchemas({\n              schema,\n              uischema,\n              definitionData,\n              definitionUi,\n              categoryHash,\n            });\n            newElementObjArr[index] = {\n              ...oldSection,\n              required: !oldSection.required,\n            };\n            updateSchemas(newElementObjArr, {\n              schema,\n              uischema,\n              definitionData,\n              definitionUi,\n              onChange,\n            });\n          }}\n          onDependentsChange={(\n            newDependents: Array<{\n              children: Array<string>;\n              value?: any;\n            }>,\n          ) => {\n            const oldSection = elementProp;\n\n            const newElementObjArr = generateElementPropsFromSchemas({\n              schema,\n              uischema,\n              definitionData,\n              definitionUi,\n              categoryHash,\n            });\n            newElementObjArr[index] = {\n              ...oldSection,\n              dependents: newDependents,\n            };\n            updateSchemas(newElementObjArr, {\n              schema,\n              uischema,\n              onChange,\n              definitionData,\n              definitionUi,\n            });\n          }}\n          onDelete={() => {\n            // splice out this index from the card array\n            const newElementObjArr = generateElementPropsFromSchemas({\n              schema,\n              uischema,\n              definitionData,\n              definitionUi,\n              categoryHash,\n            });\n            newElementObjArr.splice(index, 1);\n            setCardOpenArray((prev) => [\n              ...prev.slice(0, index),\n              ...prev.slice(index + 1),\n            ]);\n            updateSchemas(newElementObjArr, {\n              schema,\n              uischema,\n              definitionData,\n              definitionUi,\n              onChange,\n            });\n          }}\n          onMoveUp={() => {\n            const newElementObjArr = generateElementPropsFromSchemas({\n              schema,\n              uischema,\n              definitionData,\n              definitionUi,\n              categoryHash,\n            });\n            if (index === 0) return;\n\n            const tempBlock = newElementObjArr[index - 1];\n            newElementObjArr[index - 1] = newElementObjArr[index];\n            newElementObjArr[index] = tempBlock;\n            updateSchemas(newElementObjArr, {\n              schema,\n              uischema,\n              definitionData,\n              definitionUi,\n              onChange,\n            });\n          }}\n          onMoveDown={() => {\n            const newElementObjArr = generateElementPropsFromSchemas({\n              schema,\n              uischema,\n              definitionData,\n              definitionUi,\n              categoryHash,\n            });\n            if (index === elementPropArr.length - 1) return;\n\n            const tempBlock = newElementObjArr[index + 1];\n            newElementObjArr[index + 1] = newElementObjArr[index];\n            newElementObjArr[index] = tempBlock;\n            updateSchemas(newElementObjArr, {\n              schema,\n              uischema,\n              definitionData,\n              definitionUi,\n              onChange,\n            });\n          }}\n          name={elementProp.name}\n          key={`${path}_${elementPropArr[index].name}`}\n          required={elementProp.required}\n          path={`${path}_${elementProp.name}`}\n          definitionData={definitionData || {}}\n          definitionUi={definitionUi || {}}\n          hideKey={hideKey}\n          reference={elementProp.$ref}\n          neighborNames={elementProp.neighborNames}\n          dependents={elementProp.dependents!}\n          dependent={elementProp.dependent}\n          parent={elementProp.parent}\n          parentProperties={addProperties}\n          cardOpen={expanded}\n          setCardOpen={(newState: boolean) => {\n            setCardOpenArray((prev) => [\n              ...prev.slice(0, index),\n              newState,\n              ...prev.slice(index + 1),\n            ]);\n          }}\n          allFormInputs={allFormInputs}\n          categoryHash={categoryHash}\n          mods={mods}\n        />\n      );\n    } else {\n      return (\n        <div key={`${path}_${elementPropArr[index].name}`}>\n          <Typography variant='body1' color='error'>\n            Error parsing element\n          </Typography>\n        </div>\n      );\n    }\n  });\n\n  return elementList;\n}\n\n// function called when drag and drop ends\nexport function onDragEnd(\n  result: any,\n  details: {\n    schema: { [key: string]: any };\n    uischema: { [key: string]: any };\n    onChange: (\n      schema: { [key: string]: any },\n      uischema: { [key: string]: any },\n    ) => any;\n    definitionData?: { [key: string]: any };\n    definitionUi?: { [key: string]: any };\n    categoryHash: { [key: string]: string };\n  },\n) {\n  const {\n    schema,\n    uischema,\n    onChange,\n    definitionData,\n    definitionUi,\n    categoryHash,\n  } = details;\n  const src = result.source.index;\n  const dest = result.destination.index;\n  const newElementObjArr = generateElementPropsFromSchemas({\n    schema,\n    uischema,\n    definitionData,\n    definitionUi,\n    categoryHash,\n  });\n\n  const tempBlock = newElementObjArr[src];\n  newElementObjArr[src] = newElementObjArr[dest];\n  newElementObjArr[dest] = tempBlock;\n\n  updateSchemas(newElementObjArr, {\n    schema,\n    uischema,\n    definitionData: definitionData || {},\n    definitionUi: definitionUi || {},\n    onChange,\n  });\n}\n\n// New drag end handler for @dnd-kit\nexport function handleDndDragEnd(\n  event: DragEndEvent,\n  details: {\n    schema: { [key: string]: any };\n    uischema: { [key: string]: any };\n    onChange: (\n      schema: { [key: string]: any },\n      uischema: { [key: string]: any },\n    ) => any;\n    definitionData?: { [key: string]: any };\n    definitionUi?: { [key: string]: any };\n    categoryHash: { [key: string]: string };\n  },\n) {\n  const { active, over } = event;\n  if (!over || active.id === over.id) return;\n\n  const {\n    schema,\n    uischema,\n    onChange,\n    definitionData,\n    definitionUi,\n    categoryHash,\n  } = details;\n\n  const elementObjArr = generateElementPropsFromSchemas({\n    schema,\n    uischema,\n    definitionData,\n    definitionUi,\n    categoryHash,\n  });\n\n  // Extract the element name from the ID (ID format is \"path_name\")\n  // The active.id and over.id are like \"root_newInput1\", we need to extract \"newInput1\"\n  const getElementNameFromId = (id: string | number): string => {\n    const idStr = String(id);\n    const lastUnderscore = idStr.lastIndexOf('_');\n    return lastUnderscore >= 0 ? idStr.substring(lastUnderscore + 1) : idStr;\n  };\n\n  const oldElementName = getElementNameFromId(active.id);\n  const newElementName = getElementNameFromId(over.id);\n\n  const oldIndex = elementObjArr.findIndex((el) => el.name === oldElementName);\n  const newIndex = elementObjArr.findIndex((el) => el.name === newElementName);\n\n  if (oldIndex === -1 || newIndex === -1) return;\n\n  const newElementObjArr = arrayMove(elementObjArr, oldIndex, newIndex);\n\n  updateSchemas(newElementObjArr, {\n    schema,\n    uischema,\n    definitionData: definitionData || {},\n    definitionUi: definitionUi || {},\n    onChange,\n  });\n}\n\n// helper function to recursively update sections\nfunction propagateElementChange(\n  elementArr: ElementProps[],\n  definitionData: { [key: string]: any },\n  definitionUi: { [key: string]: any },\n  categoryHash: { [key: string]: string },\n) {\n  const updatedElementArr: ElementProps[] = [];\n  elementArr.forEach((element) => {\n    // update section and it's children\n    if (element.propType === 'section') {\n      const childrenElements = generateElementPropsFromSchemas({\n        schema: element.schema,\n        uischema: element.uischema,\n        definitionData,\n        definitionUi,\n        categoryHash,\n      });\n      const updatedChildren = propagateElementChange(\n        childrenElements,\n        definitionData,\n        definitionUi,\n        categoryHash,\n      );\n      const newUiSchema = Object.assign(\n        { ...element.uischema },\n        generateSchemaFromElementProps(updatedChildren),\n      );\n      const newSchema = Object.assign(\n        { ...element.schema },\n        generateSchemaFromElementProps(updatedChildren),\n      );\n      const newElement = {\n        ...element,\n        schema: newSchema,\n        uischema: newUiSchema,\n      };\n      updatedElementArr.push(newElement);\n    } else {\n      updatedElementArr.push(element);\n    }\n  });\n  return updatedElementArr;\n}\n\n// propogate changes in a schema and ui schema with updated definitions but outdated body componenents\nexport function propagateDefinitionChanges(\n  schema: { [key: string]: any },\n  uischema: { [key: string]: any },\n  onChange: (\n    schema: { [key: string]: any },\n    uischema: { [key: string]: any },\n  ) => void,\n  categoryHash: { [key: string]: string },\n) {\n  const definitionData = schema.definitions;\n  const definitionUi = uischema.definitions;\n  const bodyElements = generateElementPropsFromSchemas({\n    schema,\n    uischema,\n    definitionData,\n    definitionUi,\n    categoryHash,\n  });\n  const updatedBodyElements = propagateElementChange(\n    bodyElements,\n    definitionData,\n    definitionUi,\n    categoryHash,\n  );\n\n  updateSchemas(updatedBodyElements, {\n    schema,\n    uischema,\n    definitionData,\n    definitionUi,\n    onChange,\n  });\n}\n\n// Member-wise subtraction of array2 from array1\nexport function subtractArray(array1: string[], array2?: string[]): string[] {\n  if (array2 === undefined || array2 === null) return array1;\n\n  // Create a map for performant array filtering on large arrays\n  const keys: { [key: string]: any } = array2.reduce(\n    (acc, curr) => ({\n      ...acc,\n      [curr]: true,\n    }),\n    {},\n  );\n\n  return array1.filter((v: string) => !keys[v]);\n}\n\nexport function excludeKeys(\n  obj: { [key: string]: any },\n  keys?: string[] | null,\n) {\n  if (!keys) return { ...obj };\n\n  // Create a map for performant object filtering\n  const keysHash: { [key: string]: any } = keys.reduce(\n    (acc, curr) => ({\n      ...acc,\n      [curr]: true,\n    }),\n    {},\n  );\n\n  // Create a map for performant array filtering\n  return Object.keys(obj).reduce(\n    (acc, curr) => (keysHash[curr] ? acc : { ...acc, [curr]: obj[curr] }),\n    {},\n  );\n}\n\nexport function getNewElementDefaultDataOptions(\n  i: number,\n  mods?: Mods,\n): DataOptions {\n  if (mods && mods.newElementDefaultDataOptions !== undefined) {\n    const title = `${mods.newElementDefaultDataOptions.title} ${i}`;\n    return { ...mods.newElementDefaultDataOptions, ...{ title: title } };\n  } else {\n    return {\n      title: `New Input ${i}`,\n      type: 'string',\n      default: '',\n    };\n  }\n}\n\nexport function getRandomId(): string {\n  const chars = [\n    'a',\n    'b',\n    'c',\n    'd',\n    'e',\n    'f',\n    'g',\n    'h',\n    'i',\n    'j',\n    'k',\n    'l',\n    'm',\n    'n',\n    'o',\n    'p',\n    'q',\n    'r',\n    's',\n    't',\n    'u',\n    'v',\n    'w',\n    'x',\n    'y',\n    'z',\n  ];\n  const numberOfChars = chars.length;\n  const randomIdLength = 50;\n\n  return Array.from({ length: randomIdLength })\n    .map(() => chars[Math.floor(Math.random() * numberOfChars)])\n    .join('');\n}\n\nexport const DROPPABLE_TYPE = 'rjsfb';\n","import React, { useState, ReactElement } from 'react';\nimport Autocomplete from '@mui/material/Autocomplete';\nimport TextField from '@mui/material/TextField';\nimport CloseIcon from '@mui/icons-material/Close';\nimport { getRandomId } from '../utils';\n\n// a field that lets you choose adjacent blocks\nexport default function CardSelector({\n  possibleChoices,\n  chosenChoices,\n  onChange,\n  placeholder,\n}: {\n  possibleChoices: Array<string>;\n  chosenChoices: Array<string>;\n  onChange: (chosenChoices: Array<string>) => void;\n  placeholder: string;\n}): ReactElement {\n  const [elementId] = useState(getRandomId());\n  return (\n    <>\n      <ul>\n        {chosenChoices.map((chosenChoice, index) => (\n          <li key={`${elementId}_neighbor_${index}`}>\n            {chosenChoice}{' '}\n            <CloseIcon\n              fontSize='small'\n              sx={{ cursor: 'pointer', verticalAlign: 'middle' }}\n              onClick={() =>\n                onChange([\n                  ...chosenChoices.slice(0, index),\n                  ...chosenChoices.slice(index + 1),\n                ])\n              }\n            />\n          </li>\n        ))}\n      </ul>\n      <Autocomplete\n        value={null}\n        options={possibleChoices\n          .filter((choice) => !chosenChoices.includes(choice))\n          .map((choice) => ({\n            value: choice,\n            label: choice,\n          }))}\n        getOptionLabel={(option) => option.label}\n        onChange={(_, val) => {\n          if (val) onChange([...chosenChoices, val.value]);\n        }}\n        size='small'\n        renderInput={(params) => (\n          <TextField {...params} placeholder={placeholder} />\n        )}\n      />\n    </>\n  );\n}\n","import React, {\n  ReactElement,\n  useState,\n  useRef,\n  useEffect,\n  useCallback,\n  memo,\n} from 'react';\nimport TextField from '@mui/material/TextField';\nimport Box from '@mui/material/Box';\nimport IconButton from '@mui/material/IconButton';\nimport AddIcon from '@mui/icons-material/Add';\nimport CloseIcon from '@mui/icons-material/Close';\n\ninterface CardEnumOptionsProps {\n  initialValues: Array<any>;\n  names?: Array<string>;\n  showNames: boolean;\n  onChange: (newEnums: Array<any>, newEnumNames?: Array<string>) => void;\n  type: string;\n}\n\n// Input field corresponding to an array of values, add and remove\nfunction CardEnumOptions({\n  initialValues,\n  names,\n  showNames,\n  onChange,\n  type,\n}: CardEnumOptionsProps): ReactElement {\n  // Use ref for stable ID generation (avoids issues with module-level counter)\n  const nextIdRef = useRef(0);\n  const generateId = useCallback(() => {\n    nextIdRef.current += 1;\n    return `enum-${nextIdRef.current}`;\n  }, []);\n\n  // Track stable IDs for each value to prevent focus loss on re-render\n  const [itemIds, setItemIds] = useState<string[]>(() =>\n    initialValues.map(() => {\n      nextIdRef.current += 1;\n      return `enum-${nextIdRef.current}`;\n    }),\n  );\n\n  // Keep itemIds in sync with initialValues length\n  // Only handle additions here - removals are handled explicitly in handleRemove\n  const prevLengthRef = useRef(initialValues.length);\n  useEffect(() => {\n    const currentLength = initialValues.length;\n    const prevLength = prevLengthRef.current;\n\n    if (currentLength > prevLength) {\n      // Items were added externally - add new IDs\n      setItemIds((prevIds) => {\n        const newIds = [...prevIds];\n        for (let i = prevLength; i < currentLength; i++) {\n          newIds.push(generateId());\n        }\n        return newIds;\n      });\n    }\n    // Note: We don't handle removals here because handleRemove already\n    // correctly removes the ID at the specific index. If removals happen\n    // externally (not through handleRemove), the IDs will be out of sync,\n    // but this is an edge case that would require tracking item identity.\n\n    prevLengthRef.current = currentLength;\n  }, [initialValues.length, generateId]);\n\n  const handleRemove = (indexToRemove: number) => {\n    // Update IDs first to remove the correct one\n    setItemIds((ids) => [\n      ...ids.slice(0, indexToRemove),\n      ...ids.slice(indexToRemove + 1),\n    ]);\n    // Then update values\n    onChange(\n      [\n        ...initialValues.slice(0, indexToRemove),\n        ...initialValues.slice(indexToRemove + 1),\n      ],\n      names\n        ? [...names.slice(0, indexToRemove), ...names.slice(indexToRemove + 1)]\n        : undefined,\n    );\n  };\n\n  const possibleValues = initialValues.map((value, index) => {\n    let name = `${value}`;\n    if (names && index < names.length) name = names[index];\n    const itemId = itemIds[index] || `fallback-${index}`;\n\n    return (\n      <Box\n        key={itemId}\n        sx={{\n          width: '100%',\n          display: 'flex',\n          flexDirection: 'row',\n          mb: 1,\n          alignItems: 'center',\n          gap: 1,\n        }}\n      >\n        <TextField\n          value={value === undefined || value === null ? '' : value}\n          placeholder='Possible Value'\n          type={type === 'string' ? 'text' : 'number'}\n          onChange={(ev: React.ChangeEvent<HTMLInputElement>) => {\n            let newVal: string | number;\n            switch (type) {\n              case 'string':\n                newVal = ev.target.value;\n                break;\n              case 'number':\n              case 'integer':\n                newVal = parseFloat(ev.target.value);\n                if (Number.isInteger(newVal))\n                  newVal = parseInt(ev.target.value, 10);\n                if (Number.isNaN(newVal)) newVal = 0;\n                break;\n              default:\n                throw new Error(`Enum called with unknown type ${type}`);\n            }\n            onChange(\n              [\n                ...initialValues.slice(0, index),\n                newVal,\n                ...initialValues.slice(index + 1),\n              ],\n              names,\n            );\n          }}\n          size='small'\n          sx={{ flex: 1 }}\n        />\n        {showNames && (\n          <TextField\n            value={name || ''}\n            placeholder='Label'\n            type='text'\n            onChange={(ev: React.ChangeEvent<HTMLInputElement>) => {\n              if (names)\n                onChange(initialValues, [\n                  ...names.slice(0, index),\n                  ev.target.value,\n                  ...names.slice(index + 1),\n                ]);\n            }}\n            size='small'\n            sx={{ flex: 1 }}\n          />\n        )}\n        <IconButton\n          size='small'\n          onClick={() => handleRemove(index)}\n          aria-label='Remove possible value'\n        >\n          <CloseIcon fontSize='small' />\n        </IconButton>\n      </Box>\n    );\n  });\n\n  const handleAdd = useCallback(() => {\n    // add a new dropdown option\n    onChange(\n      [...initialValues, type === 'string' ? '' : 0],\n      names ? [...names, ''] : undefined,\n    );\n  }, [initialValues, names, onChange, type]);\n\n  return (\n    <>\n      {possibleValues}\n      <IconButton\n        size='small'\n        color='primary'\n        aria-label='Add possible value'\n        onClick={handleAdd}\n      >\n        <AddIcon fontSize='small' />\n      </IconButton>\n    </>\n  );\n}\n\nexport default memo(CardEnumOptions);\n","import React, { useState, ReactElement } from 'react';\nimport TextField from '@mui/material/TextField';\nimport Box from '@mui/material/Box';\nimport Typography from '@mui/material/Typography';\nimport CloseIcon from '@mui/icons-material/Close';\nimport AddIcon from '@mui/icons-material/Add';\nimport CardEnumOptions from '../CardEnumOptions';\nimport CardSelector from './CardSelector';\nimport FBCheckbox from '../FBCheckbox';\nimport { getRandomId } from '../utils';\n\ntype combinationValue = string | number | any[] | { [key: string]: any };\n\n// handle value options for different card types\nexport default function ValueSelector({\n  possibility,\n  onChange,\n  parentEnums,\n  parentType,\n  parentName,\n  parentSchema,\n}: {\n  possibility: {\n    children: Array<string>;\n    value?: any;\n  };\n  onChange: (newPossibility: { children: Array<string>; value?: any }) => void;\n  parentEnums?: Array<string | number>;\n  parentType?: string;\n  parentName?: string;\n  parentSchema?: any;\n}): ReactElement {\n  const [elementId] = useState(getRandomId());\n  if (possibility.value) {\n    // enum type\n    if (parentEnums) {\n      const enumType = typeof parentEnums[0] === 'number' ? 'number' : 'string';\n      if (enumType === 'string')\n        return (\n          <CardSelector\n            possibleChoices={parentEnums.map((val) => `${val}`)}\n            chosenChoices={possibility.value.enum}\n            onChange={(chosenChoices: Array<string>) =>\n              onChange({ ...possibility, value: { enum: chosenChoices } })\n            }\n            placeholder='Allowed value'\n          />\n        );\n      if (enumType === 'number')\n        return (\n          <CardSelector\n            possibleChoices={parentEnums.map((val) => `${val}`)}\n            chosenChoices={possibility.value.enum}\n            onChange={(chosenChoices: Array<string>) =>\n              onChange({\n                ...possibility,\n                value: {\n                  enum: chosenChoices.map((val) => Number.parseFloat(val)),\n                },\n              })\n            }\n            placeholder='Allowed value'\n          />\n        );\n    }\n    // check box type\n    if (parentType === 'boolean') {\n      return (\n        <FBCheckbox\n          onChangeValue={() => {\n            if (possibility.value.enum && possibility.value.enum[0]) {\n              onChange({\n                ...possibility,\n                value: { enum: [false] },\n              });\n            } else {\n              onChange({\n                ...possibility,\n                value: { enum: [true] },\n              });\n            }\n          }}\n          isChecked={possibility.value.enum && possibility.value.enum[0]}\n          label={parentName}\n        />\n      );\n    }\n    // object type\n    if (parentType === 'object') {\n      const enumArr: Array<{\n        [key: string]: combinationValue;\n      }> = possibility.value.enum;\n\n      const getInput = (\n        val: string | number | any[] | { [key: string]: any },\n        index: number,\n        key: string,\n      ) => {\n        switch (typeof val) {\n          case 'string':\n            return (\n              <TextField\n                value={val || ''}\n                placeholder='String value'\n                type='text'\n                onChange={(ev: any) => {\n                  const newVal = ev.target.value;\n                  const oldCombo = possibility.value.enum[index];\n                  onChange({\n                    ...possibility,\n                    value: {\n                      enum: [\n                        ...enumArr.slice(0, index),\n                        { ...oldCombo, [key]: newVal },\n                        ...enumArr.slice(index + 1),\n                      ],\n                    },\n                  });\n                }}\n                size='small'\n                fullWidth\n              />\n            );\n          case 'number':\n            return (\n              <TextField\n                value={val || ''}\n                placeholder='Number value'\n                type='number'\n                onChange={(ev: any) => {\n                  const newVal = Number.parseFloat(ev.target.value);\n                  const oldCombo = possibility.value.enum[index];\n                  onChange({\n                    ...possibility,\n                    value: {\n                      enum: [\n                        ...enumArr.slice(0, index),\n                        { ...oldCombo, [key]: newVal },\n                        ...enumArr.slice(index + 1),\n                      ],\n                    },\n                  });\n                }}\n                size='small'\n                fullWidth\n              />\n            );\n          case 'object':\n            return (\n              <TextField\n                value={JSON.stringify(val) || ''}\n                placeholder='Object in JSON'\n                multiline\n                onChange={(ev: any) => {\n                  let newVal = val;\n                  try {\n                    newVal = JSON.parse(ev.target.value);\n                  } catch {\n                    console.error('invalid JSON object input');\n                  }\n                  const oldCombo = possibility.value.enum[index];\n                  onChange({\n                    ...possibility,\n                    value: {\n                      enum: [\n                        ...enumArr.slice(0, index),\n                        { ...oldCombo, [key]: newVal },\n                        ...enumArr.slice(index + 1),\n                      ],\n                    },\n                  });\n                }}\n                size='small'\n                fullWidth\n              />\n            );\n        }\n      };\n\n      return (\n        <Box>\n          {enumArr.map((combination, index) => (\n            <Box component='li' key={`${elementId}_possibleValue${index}`}>\n              {Object.keys(combination).map((key) => {\n                const val: combinationValue = combination[key];\n                return (\n                  <Box key={key}>\n                    <Typography variant='subtitle2' fontWeight='bold'>\n                      {key}:\n                    </Typography>\n                    {getInput(val, index, key)}\n                  </Box>\n                );\n              })}\n              <CloseIcon\n                sx={{ cursor: 'pointer' }}\n                onClick={() =>\n                  onChange({\n                    ...possibility,\n                    value: {\n                      enum: [\n                        ...enumArr.slice(0, index),\n                        ...enumArr.slice(index + 1),\n                      ],\n                    },\n                  })\n                }\n              />\n            </Box>\n          ))}\n          <AddIcon\n            sx={{ cursor: 'pointer' }}\n            onClick={() => {\n              const newCase: { [key: string]: any } = {};\n              const propArr: { [key: string]: any } = parentSchema\n                ? parentSchema.properties\n                : {};\n              Object.keys(propArr).forEach((key) => {\n                if (\n                  propArr[key].type === 'number' ||\n                  propArr[key].type === 'integer'\n                ) {\n                  newCase[key] = 0;\n                } else if (propArr[key].type === 'array' || propArr[key].enum) {\n                  newCase[key] = [];\n                } else if (\n                  propArr[key].type === 'object' ||\n                  propArr[key].properties\n                ) {\n                  newCase[key] = {};\n                } else {\n                  newCase[key] = '';\n                }\n              });\n              onChange({\n                ...possibility,\n                value: { enum: [...enumArr, newCase] },\n              });\n            }}\n          />\n        </Box>\n      );\n    }\n    return (\n      <CardEnumOptions\n        initialValues={possibility.value.enum}\n        onChange={(newEnum: Array<any>) =>\n          onChange({ ...possibility, value: { enum: newEnum } })\n        }\n        type={parentType || 'string'}\n        showNames={false}\n      />\n    );\n  } else {\n    return (\n      <Typography variant='subtitle2' color='text.secondary'>\n        Appear if defined\n      </Typography>\n    );\n  }\n}\n","import React, { ReactElement } from 'react';\nimport Box from '@mui/material/Box';\nimport Paper from '@mui/material/Paper';\nimport Typography from '@mui/material/Typography';\nimport IconButton from '@mui/material/IconButton';\nimport CloseIcon from '@mui/icons-material/Close';\nimport Tooltip from '../Tooltip';\nimport CardSelector from './CardSelector';\nimport ValueSelector from './ValueSelector';\n\n// a possible dependency\nexport default function DependencyPossibility({\n  possibility,\n  neighborNames,\n  onChange,\n  onDelete,\n  parentEnums,\n  parentType,\n  parentName,\n  parentSchema,\n}: {\n  possibility: {\n    children: Array<string>;\n    value?: any;\n  };\n  neighborNames: Array<string>;\n  onChange: (newPossibility: { children: Array<string>; value?: any }) => void;\n  onDelete: () => void;\n  parentEnums?: Array<string | number>;\n  parentType?: string;\n  parentName?: string;\n  parentSchema?: any;\n}): ReactElement {\n  return (\n    <Paper variant='outlined' sx={{ p: 2 }}>\n      <Box\n        sx={{\n          display: 'flex',\n          justifyContent: 'space-between',\n          alignItems: 'flex-start',\n        }}\n      >\n        <Box sx={{ flex: 1 }}>\n          <Typography\n            variant='subtitle2'\n            fontWeight='bold'\n            sx={{ display: 'flex', alignItems: 'center', gap: 0.5, mb: 1 }}\n          >\n            Display the following:{' '}\n            <Tooltip\n              type='help'\n              text='Choose the other form elements that depend on this one'\n            />\n          </Typography>\n          <CardSelector\n            possibleChoices={\n              neighborNames.filter((name) => name !== parentName) || []\n            }\n            chosenChoices={possibility.children}\n            onChange={(chosenChoices: Array<string>) =>\n              onChange({ ...possibility, children: [...chosenChoices] })\n            }\n            placeholder='Choose a dependent...'\n          />\n          <Typography\n            variant='subtitle2'\n            fontWeight='bold'\n            sx={{ mt: 2, mb: 1 }}\n          >\n            If &quot;{parentName}&quot; has{' '}\n            {possibility.value ? 'the value:' : 'a value.'}\n          </Typography>\n          {possibility.value && (\n            <ValueSelector\n              possibility={possibility}\n              onChange={(newPossibility: {\n                children: Array<string>;\n                value?: any;\n              }) => onChange(newPossibility)}\n              parentEnums={parentEnums}\n              parentType={parentType}\n              parentName={parentName}\n              parentSchema={parentSchema}\n            />\n          )}\n        </Box>\n        <IconButton size='small' onClick={() => onDelete()}>\n          <CloseIcon fontSize='small' />\n        </IconButton>\n      </Box>\n    </Paper>\n  );\n}\n","import React, { useState, ReactElement } from 'react';\nimport Tooltip from '@mui/material/Tooltip';\nimport Box from '@mui/material/Box';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\nimport IconButton from '@mui/material/IconButton';\nimport AddIcon from '@mui/icons-material/Add';\nimport FBRadioGroup from '../radio/FBRadioGroup';\nimport TooltipComponent from '../Tooltip';\nimport DependencyWarning from './DependencyWarning';\nimport DependencyPossibility from './DependencyPossibility';\nimport { getRandomId } from '../utils';\n\n// checks whether an array corresponds to oneOf dependencies\nfunction checkIfValueBasedDependency(\n  dependents: Array<{\n    children: Array<string>;\n    value?: any;\n  }>,\n) {\n  let valueBased = true;\n  if (dependents && Array.isArray(dependents) && dependents.length > 0) {\n    dependents.forEach((possibility) => {\n      if (!possibility.value || !possibility.value.enum) {\n        valueBased = false;\n      }\n    });\n  } else {\n    valueBased = false;\n  }\n\n  return valueBased;\n}\n\ntype DependencyParams = {\n  [key: string]: any;\n  name?: string;\n  dependents?: Array<{\n    children: Array<string>;\n    value?: any;\n  }>;\n  type?: string;\n  enum?: Array<string | number>;\n  neighborNames?: Array<string>;\n  schema?: any;\n};\n\nexport default function DependencyField({\n  parameters,\n  onChange,\n}: {\n  parameters: DependencyParams;\n  onChange: (newParams: DependencyParams) => void;\n}): ReactElement {\n  const [elementId] = useState(getRandomId());\n  const valueBased = checkIfValueBasedDependency(parameters.dependents || []);\n\n  return (\n    <Box>\n      <Typography\n        variant='subtitle2'\n        fontWeight='bold'\n        sx={{ display: 'flex', alignItems: 'center', gap: 0.5, mb: 1 }}\n      >\n        Dependencies{' '}\n        <TooltipComponent\n          type='help'\n          text='Control whether other form elements show based on this one'\n        />\n      </Typography>\n      {!!parameters.dependents && parameters.dependents.length > 0 && (\n        <Box sx={{ mb: 2 }}>\n          <FBRadioGroup\n            defaultValue={valueBased ? 'value' : 'definition'}\n            horizontal={false}\n            options={[\n              {\n                value: 'definition',\n                label: 'Any Value Dependency',\n              },\n              {\n                value: 'value',\n                label: (\n                  <Box\n                    component='span'\n                    sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}\n                  >\n                    Specific Value Dependency{' '}\n                    <TooltipComponent\n                      type='help'\n                      text=\"Specify whether these elements should show based on this element's value\"\n                    />\n                  </Box>\n                ),\n              },\n            ]}\n            onChange={(selection) => {\n              if (parameters.dependents) {\n                const newDependents = [...parameters.dependents];\n                if (selection === 'definition') {\n                  parameters.dependents.forEach((possibility, index) => {\n                    newDependents[index] = {\n                      ...possibility,\n                      value: undefined,\n                    };\n                  });\n                } else {\n                  parameters.dependents.forEach((possibility, index) => {\n                    newDependents[index] = {\n                      ...possibility,\n                      value: { enum: [] },\n                    };\n                  });\n                }\n                onChange({\n                  ...parameters,\n                  dependents: newDependents,\n                });\n              }\n            }}\n          />\n        </Box>\n      )}\n      <DependencyWarning parameters={parameters} />\n      <Stack spacing={2}>\n        {parameters.dependents?.map((possibility, index) => (\n          <DependencyPossibility\n            possibility={possibility}\n            neighborNames={parameters.neighborNames || []}\n            parentEnums={parameters.enum}\n            parentType={parameters.type}\n            parentName={parameters.name}\n            parentSchema={parameters.schema}\n            key={`${elementId}_possibility${index}`}\n            onChange={(newPossibility: {\n              children: Array<string>;\n              value?: any;\n            }) => {\n              const newDependents = parameters.dependents\n                ? [...parameters.dependents]\n                : [];\n              newDependents[index] = newPossibility;\n              onChange({\n                ...parameters,\n                dependents: newDependents,\n              });\n            }}\n            onDelete={() => {\n              const newDependents = parameters.dependents\n                ? [...parameters.dependents]\n                : [];\n              onChange({\n                ...parameters,\n                dependents: [\n                  ...newDependents.slice(0, index),\n                  ...newDependents.slice(index + 1),\n                ],\n              });\n            }}\n          />\n        ))}\n      </Stack>\n      <Tooltip\n        title='Add another dependency relation linking this element and other form elements'\n        placement='top'\n      >\n        <IconButton\n          size='small'\n          color='primary'\n          onClick={() => {\n            const newDependents = parameters.dependents\n              ? [...parameters.dependents]\n              : [];\n            newDependents.push({\n              children: [],\n              value: valueBased ? { enum: [] } : undefined,\n            });\n            onChange({\n              ...parameters,\n              dependents: newDependents,\n            });\n          }}\n          aria-label='Add another dependency relation'\n          sx={{ mt: 1 }}\n        >\n          <AddIcon />\n        </IconButton>\n      </Tooltip>\n    </Box>\n  );\n}\n","import React, { useState, useEffect, useCallback, memo } from 'react';\nimport Dialog from '@mui/material/Dialog';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogActions from '@mui/material/DialogActions';\nimport Button from '@mui/material/Button';\nimport TextField from '@mui/material/TextField';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\nimport Link from '@mui/material/Link';\nimport DependencyField from './dependencies/DependencyField';\nimport type { CardModal, CardComponentProps } from './types';\nimport Tooltip from './Tooltip';\n\nconst CardModalComponent: CardModal = ({\n  componentProps,\n  onChange,\n  isOpen,\n  onClose,\n  TypeSpecificParameters,\n}) => {\n  // assign state values for parameters that should only change on hitting \"Save\"\n  const [componentPropsState, setComponentProps] = useState(componentProps);\n\n  useEffect(() => {\n    if (isOpen) {\n      setComponentProps(componentProps);\n    }\n  }, [isOpen, componentProps]);\n\n  const handleTypeSpecificChange = useCallback(\n    (newState: CardComponentProps) => {\n      setComponentProps((prev) => ({\n        ...prev,\n        ...newState,\n      }));\n    },\n    [],\n  );\n\n  const handleColumnSizeChange = useCallback(\n    (ev: React.ChangeEvent<HTMLInputElement>) => {\n      setComponentProps((prev) => ({\n        ...prev,\n        'ui:column': ev.target.value,\n      }));\n    },\n    [],\n  );\n\n  const handleDependencyChange = useCallback(\n    (newState: Partial<CardComponentProps>) => {\n      setComponentProps((prev) => ({\n        ...prev,\n        ...newState,\n      }));\n    },\n    [],\n  );\n\n  const handleCancel = useCallback(() => {\n    onClose();\n    setComponentProps(componentProps);\n  }, [onClose, componentProps]);\n\n  const handleSave = useCallback(() => {\n    onClose();\n    onChange(componentPropsState);\n  }, [onClose, onChange, componentPropsState]);\n\n  return (\n    <Dialog open={isOpen} data-testid='card-modal' maxWidth='sm' fullWidth>\n      {!componentProps.hideKey && (\n        <DialogTitle>Additional Settings</DialogTitle>\n      )}\n      <DialogContent dividers>\n        <Stack spacing={3}>\n          <TypeSpecificParameters\n            parameters={componentPropsState}\n            onChange={handleTypeSpecificChange}\n          />\n          <Typography\n            variant='subtitle2'\n            fontWeight='bold'\n            sx={{ display: 'flex', alignItems: 'center', gap: 0.5, mb: 0.5 }}\n          >\n            Column Size{' '}\n            <Link\n              href='https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Grid_Layout/Basic_Concepts_of_Grid_Layout'\n              target='_blank'\n              rel='noopener noreferrer'\n            >\n              <Tooltip type='help' text='Set the column size of the input' />\n            </Link>\n          </Typography>\n          <TextField\n            value={componentPropsState['ui:column'] || ''}\n            placeholder='Column size'\n            type='number'\n            inputProps={{ min: 0 }}\n            onChange={handleColumnSizeChange}\n            size='small'\n            fullWidth\n          />\n          <DependencyField\n            parameters={componentPropsState}\n            onChange={handleDependencyChange}\n          />\n        </Stack>\n      </DialogContent>\n      <DialogActions>\n        <Button onClick={handleCancel} color='inherit'>\n          Cancel\n        </Button>\n        <Button onClick={handleSave} variant='contained' color='primary'>\n          Save\n        </Button>\n      </DialogActions>\n    </Dialog>\n  );\n};\n\nexport default memo(CardModalComponent);\n","import React, {\n  ReactElement,\n  memo,\n  useState,\n  useMemo,\n  useCallback,\n  useEffect,\n} from 'react';\nimport TextField from '@mui/material/TextField';\nimport Autocomplete from '@mui/material/Autocomplete';\nimport FormControl from '@mui/material/FormControl';\nimport FormHelperText from '@mui/material/FormHelperText';\nimport Box from '@mui/material/Box';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\nimport {\n  defaultUiProps,\n  defaultDataProps,\n  categoryToNameMap,\n  categoryType,\n  subtractArray,\n  getCardBody,\n} from './utils';\nimport type { Mods, ModLabels, FormInput, CardComponentProps } from './types';\nimport Tooltip from './Tooltip';\n\n// specify the inputs required for any type of object\nfunction CardGeneralParameterInputs({\n  parameters,\n  onChange,\n  allFormInputs,\n  mods,\n  showObjectNameInput = true,\n}: {\n  parameters: CardComponentProps;\n  onChange: (newParams: CardComponentProps) => void;\n  mods?: Mods;\n  allFormInputs: { [key: string]: FormInput };\n  showObjectNameInput?: boolean;\n}): ReactElement {\n  const [keyState, setKeyState] = useState(parameters.name);\n  const [keyError, setKeyError] = useState<null | string>(null);\n  const [titleState, setTitleState] = useState(parameters.title);\n  const [descriptionState, setDescriptionState] = useState(\n    parameters.description,\n  );\n\n  // Local state is maintained for controlled inputs to avoid losing focus\n  // We include parameters in dependencies to ensure callbacks have latest values\n\n  // Sync local state when parameters prop changes externally\n  useEffect(() => {\n    setKeyState(parameters.name);\n    setTitleState(parameters.title);\n    setDescriptionState(parameters.description);\n  }, [parameters.name, parameters.title, parameters.description]);\n\n  const categoryMap = useMemo(\n    () => categoryToNameMap(allFormInputs),\n    [allFormInputs],\n  );\n\n  const fetchLabel = useCallback(\n    (labelName: string, defaultLabel: string): string | undefined => {\n      return mods?.labels?.[labelName as keyof ModLabels] ?? defaultLabel;\n    },\n    [mods?.labels],\n  );\n\n  const objectNameLabel = fetchLabel('objectNameLabel', 'Object Name');\n  const displayNameLabel = fetchLabel('displayNameLabel', 'Display Name');\n  const descriptionLabel = fetchLabel('descriptionLabel', 'Description');\n  const inputTypeLabel = fetchLabel('inputTypeLabel', 'Input Type');\n\n  const availableInputTypes = useMemo(() => {\n    const definitionsInSchema =\n      parameters.definitionData &&\n      Object.keys(parameters.definitionData).length !== 0;\n\n    // Hide the \"Reference\" option if there are no definitions in the schema\n    let inputKeys = Object.keys(categoryMap).filter(\n      (key) => key !== 'ref' || definitionsInSchema,\n    );\n    // Exclude hidden inputs based on mods\n    if (mods) inputKeys = subtractArray(inputKeys, mods.deactivatedFormInputs);\n\n    return inputKeys\n      .map((key) => ({ value: key, label: categoryMap[key] }))\n      .sort((a, b) => a.label.localeCompare(b.label));\n  }, [categoryMap, mods, parameters.definitionData]);\n\n  const handleKeyChange = useCallback(\n    (ev: React.ChangeEvent<HTMLInputElement>) => {\n      setKeyState(ev.target.value);\n    },\n    [],\n  );\n\n  const handleKeyBlur = useCallback(\n    (ev: React.FocusEvent<HTMLInputElement>) => {\n      const { value } = ev.target;\n      if (\n        value === parameters.name ||\n        !(parameters.neighborNames && parameters.neighborNames.includes(value))\n      ) {\n        setKeyError(null);\n        onChange({\n          ...parameters,\n          name: value,\n        });\n      } else {\n        setKeyState(parameters.name);\n        setKeyError(`\"${value}\" is already in use.`);\n        onChange({ ...parameters });\n      }\n    },\n    [onChange, parameters],\n  );\n\n  const handleTitleChange = useCallback(\n    (ev: React.ChangeEvent<HTMLInputElement>) => {\n      setTitleState(ev.target.value);\n    },\n    [],\n  );\n\n  const handleTitleBlur = useCallback(\n    (ev: React.FocusEvent<HTMLInputElement>) => {\n      onChange({ ...parameters, title: ev.target.value });\n    },\n    [onChange, parameters],\n  );\n\n  const handleDescriptionChange = useCallback(\n    (ev: React.ChangeEvent<HTMLInputElement>) => {\n      setDescriptionState(ev.target.value);\n    },\n    [],\n  );\n\n  const handleDescriptionBlur = useCallback(\n    (ev: React.FocusEvent<HTMLInputElement>) => {\n      onChange({ ...parameters, description: ev.target.value });\n    },\n    [onChange, parameters],\n  );\n\n  const handleInputTypeChange = useCallback(\n    (_: unknown, val: { value: string; label: string } | null) => {\n      if (!val) return;\n      // figure out the new 'type'\n      const newCategory = val.value;\n\n      const newProps = {\n        ...defaultUiProps(newCategory, allFormInputs),\n        ...defaultDataProps(newCategory, allFormInputs),\n        name: parameters.name,\n        required: parameters.required,\n      };\n      if (newProps.$ref !== undefined && !newProps.$ref) {\n        // assign an initial reference\n        const firstDefinition = Object.keys(parameters.definitionData!)[0];\n        newProps.$ref = `#/definitions/${firstDefinition || 'empty'}`;\n      }\n      onChange({\n        ...newProps,\n        title: newProps.title || parameters.title,\n        description: parameters.description,\n        default: newProps.default || '',\n        type: newProps.type || categoryType(newCategory, allFormInputs),\n        category: newProps.category || newCategory,\n      });\n    },\n    [allFormInputs, onChange, parameters],\n  );\n\n  const selectedInputType = useMemo(\n    () => availableInputTypes.find((opt) => opt.value === parameters.category),\n    [availableInputTypes, parameters.category],\n  );\n\n  const CardBody = useMemo(\n    () => getCardBody(parameters.category!, allFormInputs),\n    [parameters.category, allFormInputs],\n  );\n\n  return (\n    <Stack spacing={2}>\n      <Stack direction={{ xs: 'column', sm: 'row' }} spacing={2}>\n        {showObjectNameInput && (\n          <Box sx={{ flex: 1 }}>\n            <Typography\n              variant='subtitle2'\n              fontWeight='bold'\n              sx={{ display: 'flex', alignItems: 'center', gap: 0.5, mb: 0.5 }}\n            >\n              {objectNameLabel}{' '}\n              <Tooltip\n                text={\n                  mods?.tooltipDescriptions?.cardObjectName ??\n                  'The back-end name of the object'\n                }\n                type='help'\n              />\n            </Typography>\n            <FormControl fullWidth error={keyError !== null}>\n              <TextField\n                error={keyError !== null}\n                value={keyState || ''}\n                placeholder='Key'\n                type='text'\n                onChange={handleKeyChange}\n                onBlur={handleKeyBlur}\n                size='small'\n                fullWidth\n                slotProps={{ input: { className: 'card-text' } }}\n              />\n              {keyError && <FormHelperText>{keyError}</FormHelperText>}\n            </FormControl>\n          </Box>\n        )}\n        <Box sx={{ flex: 1, opacity: parameters.$ref !== undefined ? 0.6 : 1 }}>\n          <Typography\n            variant='subtitle2'\n            fontWeight='bold'\n            sx={{ display: 'flex', alignItems: 'center', gap: 0.5, mb: 0.5 }}\n          >\n            {displayNameLabel}{' '}\n            <Tooltip\n              text={\n                mods?.tooltipDescriptions?.cardDisplayName ??\n                'The user-facing name of this object'\n              }\n              type='help'\n            />\n          </Typography>\n          <TextField\n            value={titleState || ''}\n            placeholder='Title'\n            type='text'\n            onChange={handleTitleChange}\n            onBlur={handleTitleBlur}\n            size='small'\n            fullWidth\n            disabled={parameters.$ref !== undefined}\n            slotProps={{ input: { className: 'card-text' } }}\n          />\n        </Box>\n      </Stack>\n      <Stack direction={{ xs: 'column', sm: 'row' }} spacing={2}>\n        <Box sx={{ flex: 1, opacity: parameters.$ref ? 0.6 : 1 }}>\n          <Typography\n            variant='subtitle2'\n            fontWeight='bold'\n            sx={{ display: 'flex', alignItems: 'center', gap: 0.5, mb: 0.5 }}\n          >\n            {descriptionLabel}{' '}\n            <Tooltip\n              text={\n                mods?.tooltipDescriptions?.cardDescription ??\n                'This will appear as help text on the form'\n              }\n              type='help'\n            />\n          </Typography>\n          <TextField\n            value={descriptionState || ''}\n            placeholder='Description'\n            type='text'\n            onChange={handleDescriptionChange}\n            onBlur={handleDescriptionBlur}\n            size='small'\n            fullWidth\n            disabled={parameters.$ref !== undefined}\n            slotProps={{ input: { className: 'card-text' } }}\n          />\n        </Box>\n        <Box sx={{ flex: showObjectNameInput ? 1 : 2 }}>\n          <Typography\n            variant='subtitle2'\n            fontWeight='bold'\n            sx={{ display: 'flex', alignItems: 'center', gap: 0.5, mb: 0.5 }}\n          >\n            {inputTypeLabel}{' '}\n            <Tooltip\n              text={\n                mods?.tooltipDescriptions?.cardInputType ??\n                'The type of form input displayed on the form'\n              }\n              type='help'\n            />\n          </Typography>\n          <Autocomplete\n            value={selectedInputType}\n            options={availableInputTypes}\n            getOptionLabel={(option) => option.label}\n            isOptionEqualToValue={(option, value) =>\n              option.value === value.value\n            }\n            onChange={handleInputTypeChange}\n            size='small'\n            disableClearable\n            renderInput={(params) => (\n              <TextField {...params} placeholder={inputTypeLabel} />\n            )}\n          />\n        </Box>\n      </Stack>\n      <CardBody parameters={parameters} onChange={onChange} mods={mods || {}} />\n    </Stack>\n  );\n}\n\nexport default memo(CardGeneralParameterInputs);\n","import React, { useState, ReactElement, useCallback, memo } from 'react';\nimport Popover from '@mui/material/Popover';\nimport Box from '@mui/material/Box';\nimport Stack from '@mui/material/Stack';\nimport Button from '@mui/material/Button';\nimport Typography from '@mui/material/Typography';\nimport Tooltip from '@mui/material/Tooltip';\nimport IconButton from '@mui/material/IconButton';\nimport AddIcon from '@mui/icons-material/Add';\nimport FBRadioGroup from './radio/FBRadioGroup';\nimport type { ModLabels } from './types';\n\nfunction Add({\n  addElem,\n  hidden,\n  tooltipDescription,\n  labels,\n}: {\n  addElem: (choice: string) => void;\n  hidden?: boolean;\n  tooltipDescription?: string;\n  labels?: ModLabels;\n}): ReactElement {\n  const [anchorEl, setAnchorEl] = useState<HTMLButtonElement | null>(null);\n  const [createChoice, setCreateChoice] = useState('card');\n  const [isHovered, setIsHovered] = useState(false);\n\n  const handleClick = useCallback(\n    (event: React.MouseEvent<HTMLButtonElement>) => {\n      setAnchorEl(event.currentTarget);\n    },\n    [],\n  );\n\n  const handleClose = useCallback(() => {\n    setAnchorEl(null);\n  }, []);\n\n  const handleMouseEnter = useCallback(() => {\n    setIsHovered(true);\n  }, []);\n\n  const handleMouseLeave = useCallback(() => {\n    setIsHovered(false);\n  }, []);\n\n  const handleChoiceChange = useCallback((selection: string) => {\n    setCreateChoice(selection);\n  }, []);\n\n  const handleCreate = useCallback(() => {\n    addElem(createChoice);\n    setAnchorEl(null);\n  }, [addElem, createChoice]);\n\n  const open = Boolean(anchorEl);\n\n  if (hidden) return <></>;\n\n  return (\n    <Box\n      sx={{\n        display: 'flex',\n        alignItems: 'center',\n        justifyContent: 'center',\n        py: 1,\n        my: 0.5,\n      }}\n      onMouseEnter={handleMouseEnter}\n      onMouseLeave={handleMouseLeave}\n    >\n      <Tooltip title={tooltipDescription || 'Add element here'} placement='top'>\n        <IconButton\n          onClick={handleClick}\n          size='small'\n          aria-label='Create new form element'\n          sx={{\n            transition: 'all 0.2s ease',\n            bgcolor: isHovered || open ? 'primary.main' : 'grey.100',\n            color: isHovered || open ? 'primary.contrastText' : 'grey.500',\n            '&:hover': {\n              bgcolor: 'primary.main',\n              color: 'primary.contrastText',\n            },\n          }}\n        >\n          <AddIcon fontSize='small' />\n        </IconButton>\n      </Tooltip>\n      <Popover\n        open={open}\n        anchorEl={anchorEl}\n        onClose={handleClose}\n        anchorOrigin={{\n          vertical: 'bottom',\n          horizontal: 'center',\n        }}\n        transformOrigin={{\n          vertical: 'top',\n          horizontal: 'center',\n        }}\n      >\n        <Box sx={{ p: 2, minWidth: 250 }}>\n          <Typography variant='subtitle1' fontWeight='bold' sx={{ mb: 2 }}>\n            Create New\n          </Typography>\n          <FBRadioGroup\n            defaultValue={createChoice}\n            horizontal={false}\n            options={[\n              {\n                value: 'card',\n                label: labels?.addElementLabel ?? 'Form element',\n              },\n              {\n                value: 'section',\n                label: labels?.addSectionLabel ?? 'Form section',\n              },\n            ]}\n            onChange={handleChoiceChange}\n          />\n          <Stack\n            direction='row'\n            spacing={1}\n            justifyContent='flex-end'\n            sx={{ mt: 2 }}\n          >\n            <Button\n              onClick={handleClose}\n              variant='outlined'\n              color='inherit'\n              size='small'\n            >\n              Cancel\n            </Button>\n            <Button\n              onClick={handleCreate}\n              variant='contained'\n              color='primary'\n              size='small'\n            >\n              Create\n            </Button>\n          </Stack>\n        </Box>\n      </Popover>\n    </Box>\n  );\n}\n\nexport default memo(Add);\n","import React, { ReactElement, memo, useCallback, useState } from 'react';\nimport Box from '@mui/material/Box';\nimport Stack from '@mui/material/Stack';\nimport Tooltip from '@mui/material/Tooltip';\nimport IconButton from '@mui/material/IconButton';\nimport ArrowUpwardIcon from '@mui/icons-material/ArrowUpward';\nimport ArrowDownwardIcon from '@mui/icons-material/ArrowDownward';\nimport EditIcon from '@mui/icons-material/Edit';\nimport DeleteIcon from '@mui/icons-material/Delete';\nimport FBCheckbox from './FBCheckbox';\nimport Collapse from './Collapse/Collapse';\nimport CardModal from './CardModal';\nimport CardGeneralParameterInputs from './CardGeneralParameterInputs';\nimport Add from './Add';\nimport TooltipComponent from './Tooltip';\nimport type { CardComponentPropsInternal, CardComponentProps } from './types';\n\nfunction Card({\n  componentProps,\n  onChange,\n  onDelete,\n  onMoveUp,\n  onMoveDown,\n  TypeSpecificParameters,\n  addElem,\n  cardOpen,\n  setCardOpen,\n  allFormInputs,\n  mods,\n  showObjectNameInput = true,\n  addProperties,\n}: CardComponentPropsInternal): ReactElement {\n  const [modalOpen, setModalOpen] = useState(false);\n\n  const handleToggleCollapse = useCallback(() => {\n    setCardOpen(!cardOpen);\n  }, [cardOpen]);\n\n  const handleModalOpen = useCallback(() => {\n    setModalOpen(true);\n  }, []);\n\n  const handleModalClose = useCallback(() => {\n    setModalOpen(false);\n  }, []);\n\n  const handleRequiredToggle = useCallback(() => {\n    onChange({\n      ...componentProps,\n      required: !componentProps.required,\n    });\n  }, [onChange, componentProps]);\n\n  const handleMoveUp = useCallback(\n    (e: React.MouseEvent) => {\n      e.stopPropagation();\n      onMoveUp?.();\n    },\n    [onMoveUp],\n  );\n\n  const handleMoveDown = useCallback(\n    (e: React.MouseEvent) => {\n      e.stopPropagation();\n      onMoveDown?.();\n    },\n    [onMoveDown],\n  );\n\n  const handleDelete = useCallback(() => {\n    onDelete?.();\n  }, [onDelete]);\n\n  const handleModalSave = useCallback(\n    (newComponentProps: CardComponentProps) => {\n      onChange(newComponentProps);\n    },\n    [onChange],\n  );\n\n  const handleAddElem = useCallback(\n    (choice: string) => {\n      addElem?.(choice);\n    },\n    [addElem],\n  );\n\n  return (\n    <>\n      <Collapse\n        isOpen={cardOpen}\n        toggleCollapse={handleToggleCollapse}\n        title={\n          <Stack direction='row' spacing={0.5} alignItems='center'>\n            <Box\n              component='span'\n              onClick={handleToggleCollapse}\n              sx={{\n                cursor: 'pointer',\n                display: 'flex',\n                alignItems: 'center',\n                gap: 0.5,\n              }}\n            >\n              {componentProps.title || componentProps.name}{' '}\n              {componentProps.parent && (\n                <TooltipComponent\n                  text={`Depends on ${componentProps.parent}`}\n                  type='alert'\n                />\n              )}\n              {componentProps.$ref !== undefined && (\n                <TooltipComponent\n                  text={`Is an instance of pre-configured component ${componentProps.$ref}`}\n                  type='alert'\n                />\n              )}\n            </Box>\n            <Stack direction='row' spacing={0.5}>\n              <Tooltip title='Move form element up' placement='top'>\n                <IconButton\n                  size='small'\n                  onClick={handleMoveUp}\n                  aria-label='Move form element up'\n                >\n                  <ArrowUpwardIcon fontSize='small' />\n                </IconButton>\n              </Tooltip>\n              <Tooltip title='Move form element down' placement='top'>\n                <IconButton\n                  size='small'\n                  onClick={handleMoveDown}\n                  aria-label='Move form element down'\n                >\n                  <ArrowDownwardIcon fontSize='small' />\n                </IconButton>\n              </Tooltip>\n            </Stack>\n          </Stack>\n        }\n        data-testid='card-container'\n      >\n        <Box sx={{ borderBottom: 1, borderColor: 'divider', pb: 2, mb: 2 }}>\n          <CardGeneralParameterInputs\n            parameters={componentProps}\n            onChange={onChange}\n            allFormInputs={allFormInputs}\n            mods={mods}\n            showObjectNameInput={showObjectNameInput}\n          />\n        </Box>\n        <Stack direction='row' spacing={2} alignItems='center'>\n          <Stack direction='row' spacing={0.5}>\n            <Tooltip\n              title='Additional configurations for this form element'\n              placement='top'\n            >\n              <IconButton\n                size='small'\n                onClick={handleModalOpen}\n                color='primary'\n                aria-label='Additional configurations'\n              >\n                <EditIcon fontSize='small' />\n              </IconButton>\n            </Tooltip>\n            <Tooltip title='Delete form element' placement='top'>\n              <IconButton\n                size='small'\n                onClick={handleDelete}\n                color='error'\n                aria-label='Delete form element'\n              >\n                <DeleteIcon fontSize='small' />\n              </IconButton>\n            </Tooltip>\n          </Stack>\n          <Box\n            sx={{\n              alignItems: 'center',\n              borderLeft: 1,\n              borderColor: 'divider',\n              pl: 2,\n            }}\n          >\n            <FBCheckbox\n              onChangeValue={handleRequiredToggle}\n              isChecked={!!componentProps.required}\n              label='Required'\n            />\n          </Box>\n        </Stack>\n        <CardModal\n          componentProps={componentProps as CardComponentProps}\n          isOpen={modalOpen}\n          onClose={handleModalClose}\n          onChange={handleModalSave}\n          TypeSpecificParameters={TypeSpecificParameters}\n        />\n      </Collapse>\n      {mods?.components?.add && mods?.components?.add(addProperties)}\n      {!mods?.components?.add && addElem && (\n        <Add\n          tooltipDescription={((mods || {}).tooltipDescriptions || {}).add}\n          addElem={handleAddElem}\n        />\n      )}\n    </>\n  );\n}\n\nexport default memo(Card);\n","import React from 'react';\nimport TextField from '@mui/material/TextField';\nimport Box from '@mui/material/Box';\nimport Typography from '@mui/material/Typography';\nimport FBCheckbox from '../FBCheckbox';\nimport CardEnumOptions from '../CardEnumOptions';\nimport type { FormInput, CardComponent, CardComponentProps } from '../types';\n\n// specify the inputs required for a string type object\nexport const CardDefaultParameterInputs: CardComponent = () => <div />;\n\nconst getInputCardBodyComponent = ({ type }: { type: string }) =>\n  function InputCardBodyComponent({\n    parameters,\n    onChange,\n  }: {\n    parameters: CardComponentProps;\n    onChange: (newParams: CardComponentProps) => void;\n  }) {\n    return (\n      <>\n        <Typography variant='subtitle2' fontWeight='bold'>\n          Default Value\n        </Typography>\n        <TextField\n          value={(parameters.default || '') as string | number}\n          placeholder='Default'\n          type={type}\n          onChange={(ev) =>\n            onChange({ ...parameters, default: ev.target.value })\n          }\n          size='small'\n          fullWidth\n        />\n      </>\n    );\n  };\n\nconst Checkbox: CardComponent = ({ parameters, onChange }) => {\n  return (\n    <FBCheckbox\n      onChangeValue={() => {\n        onChange({\n          ...parameters,\n          default: parameters.default ? parameters.default !== true : true,\n        });\n      }}\n      isChecked={parameters.default ? parameters.default === true : false}\n      label='Default'\n    />\n  );\n};\n\nfunction MultipleChoice({\n  parameters,\n  onChange,\n}: {\n  parameters: CardComponentProps;\n  onChange: (newParams: CardComponentProps) => void;\n}) {\n  const enumArray = Array.isArray(parameters.enum) ? parameters.enum : [];\n\n  const containsUnparsableString = enumArray.some((val) => {\n    return isNaN(val as number);\n  });\n  const containsString =\n    containsUnparsableString ||\n    enumArray.some((val) => typeof val === 'string');\n  const [isNumber, setIsNumber] = React.useState(\n    !!enumArray.length && !containsString,\n  );\n  return (\n    <>\n      <Typography variant='subtitle2' fontWeight='bold'>\n        Possible Values\n      </Typography>\n      <FBCheckbox\n        onChangeValue={() => {\n          if (Array.isArray(parameters.enumNames)) {\n            // remove the enumNames\n            onChange({\n              ...parameters,\n              enumNames: null,\n            });\n          } else {\n            // create enumNames as a copy of enum values\n            onChange({\n              ...parameters,\n              enumNames: enumArray.map((val) => `${val}`),\n            });\n          }\n        }}\n        isChecked={Array.isArray(parameters.enumNames)}\n        label='Display label is different from value'\n      />\n      <Box\n        sx={{\n          display:\n            containsUnparsableString || !enumArray.length ? 'none' : 'block',\n        }}\n      >\n        <FBCheckbox\n          onChangeValue={() => {\n            if (containsString || !isNumber) {\n              // attempt converting enum values into numbers\n              try {\n                const newEnum = enumArray.map((val) => {\n                  let newNum = 0;\n                  if (val) newNum = parseFloat(val as string) || 0;\n                  if (Number.isNaN(newNum))\n                    throw new Error(`Could not convert ${val}`);\n                  return newNum;\n                });\n                setIsNumber(true);\n                onChange({\n                  ...parameters,\n                  enum: newEnum,\n                });\n              } catch (error) {\n                console.error(error);\n              }\n            } else {\n              // convert enum values back into strings\n              const newEnum = enumArray.map((val) => `${val || 0}`);\n              setIsNumber(false);\n              onChange({\n                ...parameters,\n                enum: newEnum,\n              });\n            }\n          }}\n          isChecked={isNumber}\n          disabled={containsUnparsableString}\n          label='Force number'\n        />\n      </Box>\n      <CardEnumOptions\n        initialValues={enumArray}\n        names={\n          Array.isArray(parameters.enumNames)\n            ? parameters.enumNames.map((val) => `${val}`)\n            : undefined\n        }\n        showNames={Array.isArray(parameters.enumNames)}\n        onChange={(newEnum: Array<string>, newEnumNames?: Array<string>) =>\n          onChange({\n            ...parameters,\n            enum: newEnum,\n            enumNames: newEnumNames,\n          })\n        }\n        type={isNumber ? 'number' : 'string'}\n      />\n    </>\n  );\n}\n\nconst defaultInputs: { [key: string]: FormInput } = {\n  dateTime: {\n    displayName: 'Date-Time',\n    matchIf: [\n      {\n        types: ['string'],\n        format: 'date-time',\n      },\n    ],\n    defaultDataSchema: {\n      format: 'date-time',\n    },\n    defaultUiSchema: {},\n    type: 'string',\n    cardBody: getInputCardBodyComponent({ type: 'datetime-local' }),\n    modalBody: CardDefaultParameterInputs,\n  },\n  date: {\n    displayName: 'Date',\n    matchIf: [\n      {\n        types: ['string'],\n        format: 'date',\n      },\n    ],\n    defaultDataSchema: {\n      format: 'date',\n    },\n    defaultUiSchema: {},\n    type: 'string',\n    cardBody: getInputCardBodyComponent({ type: 'date' }),\n    modalBody: CardDefaultParameterInputs,\n  },\n  time: {\n    displayName: 'Time',\n    matchIf: [\n      {\n        types: ['string'],\n        format: 'time',\n      },\n    ],\n    defaultDataSchema: {\n      format: 'time',\n    },\n    defaultUiSchema: {},\n    type: 'string',\n    cardBody: getInputCardBodyComponent({ type: 'time' }),\n    modalBody: CardDefaultParameterInputs,\n  },\n  checkbox: {\n    displayName: 'Checkbox',\n    matchIf: [\n      {\n        types: ['boolean'],\n      },\n    ],\n    defaultDataSchema: {},\n    defaultUiSchema: {},\n    type: 'boolean',\n    cardBody: Checkbox,\n    modalBody: CardDefaultParameterInputs,\n  },\n  radio: {\n    displayName: 'Radio',\n    matchIf: [\n      {\n        types: ['string', 'number', 'integer', 'array', 'boolean', 'null'],\n        widget: 'radio',\n        enum: true,\n      },\n    ],\n    defaultDataSchema: { enum: [] },\n    defaultUiSchema: {\n      'ui:widget': 'radio',\n    },\n    type: 'string',\n    cardBody: MultipleChoice,\n    modalBody: CardDefaultParameterInputs,\n  },\n  dropdown: {\n    displayName: 'Dropdown',\n    matchIf: [\n      {\n        types: ['string', 'number', 'integer', 'array', 'boolean', 'null'],\n        enum: true,\n      },\n    ],\n    defaultDataSchema: { enum: [] },\n    defaultUiSchema: {},\n    type: 'string',\n    cardBody: MultipleChoice,\n    modalBody: CardDefaultParameterInputs,\n  },\n};\n\nexport default defaultInputs;\n","import React, { ReactElement, ReactNode } from 'react';\nimport { useSortable } from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\n\ninterface SortableItemProps {\n  id: string;\n  children: ReactNode;\n}\n\nexport default function SortableItem({\n  id,\n  children,\n}: SortableItemProps): ReactElement {\n  const {\n    attributes,\n    listeners,\n    setNodeRef,\n    transform,\n    transition,\n    isDragging,\n  } = useSortable({ id });\n\n  const style = {\n    transform: CSS.Transform.toString(transform),\n    transition,\n    opacity: isDragging ? 0.5 : 1,\n  };\n\n  return (\n    <div ref={setNodeRef} style={style} {...attributes} {...listeners}>\n      {children}\n    </div>\n  );\n}\n","import React, {\n  ReactElement,\n  memo,\n  useCallback,\n  useMemo,\n  useState,\n} from 'react';\nimport {\n  DndContext,\n  closestCenter,\n  KeyboardSensor,\n  PointerSensor,\n  useSensor,\n  useSensors,\n  DragEndEvent,\n} from '@dnd-kit/core';\nimport {\n  SortableContext,\n  sortableKeyboardCoordinates,\n  verticalListSortingStrategy,\n} from '@dnd-kit/sortable';\nimport Alert from '@mui/material/Alert';\nimport Autocomplete from '@mui/material/Autocomplete';\nimport AlertTitle from '@mui/material/AlertTitle';\nimport TextField from '@mui/material/TextField';\nimport Tooltip from '@mui/material/Tooltip';\nimport FormControl from '@mui/material/FormControl';\nimport FormHelperText from '@mui/material/FormHelperText';\nimport Box from '@mui/material/Box';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\nimport IconButton from '@mui/material/IconButton';\nimport ArrowUpwardIcon from '@mui/icons-material/ArrowUpward';\nimport ArrowDownwardIcon from '@mui/icons-material/ArrowDownward';\nimport EditIcon from '@mui/icons-material/Edit';\nimport DeleteIcon from '@mui/icons-material/Delete';\nimport FBCheckbox from './FBCheckbox';\nimport Collapse from './Collapse/Collapse';\nimport CardModal from './CardModal';\nimport { CardDefaultParameterInputs } from './defaults/defaultInputs';\nimport TooltipComponent from './Tooltip';\nimport Add from './Add';\nimport Card from './Card';\nimport {\n  checkForUnsupportedFeatures,\n  generateElementComponentsFromSchemas,\n  countElementsFromSchema,\n  addCardObj,\n  addSectionObj,\n  handleDndDragEnd,\n} from './utils';\nimport SortableItem from './SortableItem';\nimport type { SectionProps, JsonSchema } from './types';\n\nfunction Section({\n  name,\n  required,\n  schema,\n  uischema,\n  onChange,\n  onNameChange,\n  onRequireToggle,\n  onDependentsChange,\n  onDelete,\n  onMoveUp,\n  onMoveDown,\n  path,\n  definitionData,\n  definitionUi,\n  hideKey,\n  reference,\n  dependents,\n  parent,\n  parentProperties,\n  neighborNames,\n  cardOpen,\n  setCardOpen,\n  allFormInputs,\n  mods,\n  categoryHash,\n}: SectionProps): ReactElement {\n  const schemaData = useMemo(() => schema || {}, [schema]);\n\n  const unsupportedFeatures = useMemo(\n    () =>\n      checkForUnsupportedFeatures(schemaData, uischema || {}, allFormInputs),\n    [schemaData, uischema, allFormInputs],\n  );\n\n  const elementNum = countElementsFromSchema(schemaData);\n  const defaultCollapseStates = useMemo(\n    () => [...Array(elementNum)].map(() => false),\n    [elementNum],\n  );\n  const [cardOpenArray, setCardOpenArray] = useState(defaultCollapseStates);\n\n  // useState setter is already stable and functional updates automatically use latest state\n\n  // keep name in state to avoid losing focus\n  const [keyName, setKeyName] = useState(name);\n  const [keyError, setKeyError] = useState<null | string>(null);\n  // keep requirements in state to avoid rapid updates\n  const [modalOpen, setModalOpen] = useState(false);\n\n  const addProperties = useMemo(\n    () => ({\n      schema,\n      uischema,\n      mods,\n      onChange,\n      definitionData,\n      definitionUi,\n      categoryHash,\n    }),\n    [\n      schema,\n      uischema,\n      mods,\n      onChange,\n      definitionData,\n      definitionUi,\n      categoryHash,\n    ],\n  );\n\n  const hideAddButton = useMemo(\n    () =>\n      schemaData.properties && Object.keys(schemaData.properties).length !== 0,\n    [schemaData.properties],\n  );\n\n  const sensors = useSensors(\n    useSensor(PointerSensor, {\n      activationConstraint: {\n        distance: 8, // Require 8px movement before drag starts (allows clicks)\n      },\n    }),\n    useSensor(KeyboardSensor, {\n      coordinateGetter: sortableKeyboardCoordinates,\n    }),\n  );\n\n  const handleDragEnd = useCallback(\n    (event: DragEndEvent) => {\n      handleDndDragEnd(event, {\n        schema,\n        uischema,\n        onChange,\n        definitionData,\n        definitionUi,\n        categoryHash,\n      });\n    },\n    [schema, uischema, onChange, definitionData, definitionUi, categoryHash],\n  );\n\n  const sectionElements = useMemo(() => {\n    const elements = generateElementComponentsFromSchemas({\n      schemaData: schema,\n      uiSchemaData: uischema,\n      onChange,\n      path,\n      definitionData,\n      definitionUi,\n      cardOpenArray,\n      setCardOpenArray,\n      allFormInputs,\n      mods,\n      categoryHash,\n      Card,\n      Section,\n    });\n    const itemIds = elements.map((element: any) => element.key);\n    return { elements, itemIds };\n  }, [\n    schema,\n    uischema,\n    onChange,\n    path,\n    definitionData,\n    definitionUi,\n    cardOpenArray,\n    allFormInputs,\n    mods,\n    categoryHash,\n  ]);\n\n  const handleToggleCollapse = useCallback(() => {\n    setCardOpen(!cardOpen);\n  }, [cardOpen]);\n\n  const handleModalOpen = useCallback(() => {\n    setModalOpen(true);\n  }, []);\n\n  const handleModalClose = useCallback(() => {\n    setModalOpen(false);\n  }, []);\n\n  const handleMoveUp = useCallback(\n    (e: React.MouseEvent) => {\n      e.stopPropagation();\n      onMoveUp?.();\n    },\n    [onMoveUp],\n  );\n\n  const handleMoveDown = useCallback(\n    (e: React.MouseEvent) => {\n      e.stopPropagation();\n      onMoveDown?.();\n    },\n    [onMoveDown],\n  );\n\n  const handleDelete = useCallback(() => {\n    onDelete?.();\n  }, [onDelete]);\n\n  const handleKeyNameChange = useCallback(\n    (ev: React.ChangeEvent<HTMLInputElement>) => {\n      setKeyName(ev.target.value);\n    },\n    [],\n  );\n\n  const handleKeyNameBlur = useCallback(\n    (ev: React.FocusEvent<HTMLInputElement>) => {\n      const { value } = ev.target;\n      if (value === name || !(neighborNames && neighborNames.includes(value))) {\n        setKeyError(null);\n        onNameChange(value);\n      } else {\n        setKeyName(name);\n        setKeyError(`\"${value}\" is already in use.`);\n        onNameChange(name);\n      }\n    },\n    [name, neighborNames, onNameChange],\n  );\n\n  const handleTitleChange = useCallback(\n    (ev: React.ChangeEvent<HTMLInputElement>) => {\n      onChange(\n        {\n          ...schema,\n          title: ev.target.value,\n        },\n        uischema,\n      );\n    },\n    [onChange, schema, uischema],\n  );\n\n  const handleDescriptionChange = useCallback(\n    (ev: React.ChangeEvent<HTMLInputElement>) => {\n      onChange(\n        {\n          ...schema,\n          description: ev.target.value,\n        },\n        uischema,\n      );\n    },\n    [onChange, schema, uischema],\n  );\n\n  const handleReferenceChange = useCallback(\n    (_: unknown, val: { value: string; label: string } | null) => {\n      if (val) onChange(schema, uischema, val.value);\n    },\n    [onChange, schema, uischema],\n  );\n\n  const handleModalSave = useCallback(\n    (newComponentProps: { [key: string]: any }) => {\n      onDependentsChange(newComponentProps.dependents);\n      onChange(schema, {\n        ...uischema,\n        'ui:column': newComponentProps['ui:column'],\n      });\n    },\n    [onChange, onDependentsChange, schema, uischema],\n  );\n\n  const handleAddElem = useCallback(\n    (choice: string) => {\n      if (choice === 'card') {\n        addCardObj(addProperties);\n      } else if (choice === 'section') {\n        addSectionObj(addProperties);\n      }\n    },\n    [addProperties],\n  );\n\n  const handleParentAddElem = useCallback(\n    (choice: string) => {\n      if (choice === 'card') {\n        addCardObj(parentProperties);\n      } else if (choice === 'section') {\n        addSectionObj(parentProperties);\n      }\n      setCardOpen(false);\n    },\n    [parentProperties],\n  );\n\n  const referenceOptions = useMemo(\n    () =>\n      Object.keys(definitionData).map((key) => ({\n        value: `#/definitions/${key}`,\n        label: `#/definitions/${key}`,\n      })),\n    [definitionData],\n  );\n\n  const referenceValue = useMemo(\n    () => (reference ? { value: reference, label: reference } : undefined),\n    [reference],\n  );\n\n  const modalComponentProps = useMemo(\n    () => ({\n      dependents,\n      neighborNames,\n      name: keyName,\n      schema,\n      type: 'object' as const,\n      'ui:column': (uischema['ui:column'] as string | undefined) ?? '',\n      'ui:options':\n        (uischema['ui:options'] as Record<string, unknown> | undefined) ??\n        ({} as Record<string, unknown>),\n    }),\n    [dependents, neighborNames, keyName, schema, uischema],\n  );\n\n  return (\n    <>\n      <Collapse\n        isOpen={cardOpen}\n        toggleCollapse={handleToggleCollapse}\n        title={\n          <Stack direction='row' spacing={0.5} alignItems='center'>\n            <Box\n              component='span'\n              onClick={handleToggleCollapse}\n              sx={{\n                cursor: 'pointer',\n                display: 'flex',\n                alignItems: 'center',\n                gap: 0.5,\n              }}\n            >\n              {((schemaData as JsonSchema).title as string | undefined) ||\n                keyName}{' '}\n              {parent && (\n                <TooltipComponent text={`Depends on ${parent}`} type='alert' />\n              )}\n            </Box>\n            <Stack direction='row' spacing={0.5}>\n              <Tooltip title='Move form element up' placement='top'>\n                <IconButton\n                  size='small'\n                  onClick={handleMoveUp}\n                  aria-label='Move form element up'\n                >\n                  <ArrowUpwardIcon fontSize='small' />\n                </IconButton>\n              </Tooltip>\n              <Tooltip title='Move form element down' placement='top'>\n                <IconButton\n                  size='small'\n                  onClick={handleMoveDown}\n                  aria-label='Move form element down'\n                >\n                  <ArrowDownwardIcon fontSize='small' />\n                </IconButton>\n              </Tooltip>\n            </Stack>\n          </Stack>\n        }\n        data-testid='section-container'\n      >\n        <Stack\n          spacing={2}\n          sx={{ borderBottom: 1, borderColor: 'divider', pb: 2, mb: 2 }}\n        >\n          {reference && (\n            <Box data-testid='section-reference'>\n              <Typography variant='subtitle2' fontWeight='bold'>\n                Reference Section\n              </Typography>\n              <Autocomplete\n                value={referenceValue}\n                options={referenceOptions}\n                getOptionLabel={(option) => option.label}\n                isOptionEqualToValue={(option, value) =>\n                  option.value === value.value\n                }\n                onChange={handleReferenceChange}\n                size='small'\n                disableClearable\n                renderInput={(params) => (\n                  <TextField {...params} placeholder='Reference' />\n                )}\n                sx={{ mt: 0.5 }}\n              />\n            </Box>\n          )}\n          <Stack direction={{ xs: 'column', sm: 'row' }} spacing={2}>\n            <Box sx={{ flex: 1 }} data-testid='section-object-name'>\n              <Typography\n                variant='subtitle2'\n                fontWeight='bold'\n                sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}\n              >\n                Section Object Name{' '}\n                <TooltipComponent\n                  text={\n                    mods?.tooltipDescriptions?.cardSectionObjectName ??\n                    'The key to the object that will represent this form section.'\n                  }\n                  type='help'\n                />\n              </Typography>\n              <FormControl fullWidth error={keyError !== null} sx={{ mt: 0.5 }}>\n                <TextField\n                  error={keyError !== null}\n                  value={keyName || ''}\n                  placeholder='Key'\n                  type='text'\n                  onChange={handleKeyNameChange}\n                  onBlur={handleKeyNameBlur}\n                  size='small'\n                  fullWidth\n                  disabled={hideKey}\n                  slotProps={{ input: { className: 'card-text' } }}\n                />\n                {keyError && <FormHelperText>{keyError}</FormHelperText>}\n              </FormControl>\n            </Box>\n            <Box sx={{ flex: 1 }} data-testid='section-display-name'>\n              <Typography\n                variant='subtitle2'\n                fontWeight='bold'\n                sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}\n              >\n                Section Display Name{' '}\n                <TooltipComponent\n                  text={\n                    mods?.tooltipDescriptions?.cardSectionDisplayName ??\n                    'The name of the form section that will be shown to users of the form.'\n                  }\n                  type='help'\n                />\n              </Typography>\n              <TextField\n                value={schemaData.title || ''}\n                placeholder='Title'\n                type='text'\n                onChange={handleTitleChange}\n                size='small'\n                fullWidth\n                sx={{ mt: 0.5 }}\n                slotProps={{ input: { className: 'card-text' } }}\n              />\n            </Box>\n            <Box sx={{ flex: 1 }} data-testid='section-description'>\n              <Typography\n                variant='subtitle2'\n                fontWeight='bold'\n                sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}\n              >\n                Section Description{' '}\n                <TooltipComponent\n                  text={\n                    mods?.tooltipDescriptions?.cardSectionDescription ??\n                    'A description of the section which will be visible on the form.'\n                  }\n                  type='help'\n                />\n              </Typography>\n              <TextField\n                value={schemaData.description || ''}\n                placeholder='Description'\n                type='text'\n                onChange={handleDescriptionChange}\n                size='small'\n                fullWidth\n                sx={{ mt: 0.5 }}\n                slotProps={{ input: { className: 'card-text' } }}\n              />\n            </Box>\n          </Stack>\n          {unsupportedFeatures.length > 0 && (\n            <Alert severity='warning'>\n              <AlertTitle>Unsupported Features</AlertTitle>\n              <Box component='ul' sx={{ margin: 0, pl: 2.5 }}>\n                {unsupportedFeatures.map((message) => (\n                  <Box component='li' key={message}>\n                    {message}\n                  </Box>\n                ))}\n              </Box>\n            </Alert>\n          )}\n        </Stack>\n        <DndContext\n          sensors={sensors}\n          collisionDetection={closestCenter}\n          onDragEnd={handleDragEnd}\n        >\n          <SortableContext\n            items={sectionElements.itemIds}\n            strategy={verticalListSortingStrategy}\n          >\n            {sectionElements.elements.map((element: any) => (\n              <SortableItem key={element.key} id={element.key}>\n                {element}\n              </SortableItem>\n            ))}\n          </SortableContext>\n        </DndContext>\n        <Box sx={{ mt: 2, textAlign: 'center' }}>\n          {!hideAddButton &&\n            mods?.components?.add &&\n            mods.components.add(addProperties)}\n          {!mods?.components?.add && (\n            <Add\n              tooltipDescription={\n                ((mods || {}).tooltipDescriptions || {}).add as\n                  | string\n                  | undefined\n              }\n              addElem={handleAddElem}\n              hidden={hideAddButton as boolean}\n            />\n          )}\n        </Box>\n        <Stack\n          direction='row'\n          spacing={2}\n          alignItems='center'\n          sx={{ borderTop: 1, borderColor: 'divider', pt: 2, mt: 2 }}\n        >\n          <Stack direction='row' spacing={0.5}>\n            <Tooltip\n              title='Additional configurations for this form element'\n              placement='top'\n            >\n              <IconButton\n                size='small'\n                onClick={handleModalOpen}\n                color='primary'\n                aria-label='Additional configurations'\n              >\n                <EditIcon fontSize='small' />\n              </IconButton>\n            </Tooltip>\n            <Tooltip title='Delete form element' placement='top'>\n              <IconButton\n                size='small'\n                onClick={handleDelete}\n                color='error'\n                aria-label='Delete form element'\n              >\n                <DeleteIcon fontSize='small' />\n              </IconButton>\n            </Tooltip>\n          </Stack>\n          <Box\n            sx={{\n              alignItems: 'center',\n              borderLeft: 1,\n              borderColor: 'divider',\n              pl: 2,\n            }}\n          >\n            <FBCheckbox\n              onChangeValue={onRequireToggle}\n              isChecked={required}\n              label='Required'\n            />\n          </Box>\n        </Stack>\n        <CardModal\n          componentProps={modalComponentProps}\n          isOpen={modalOpen}\n          onClose={handleModalClose}\n          onChange={handleModalSave}\n          TypeSpecificParameters={CardDefaultParameterInputs}\n        />\n      </Collapse>\n      {mods?.components?.add && mods.components.add(parentProperties)}\n      {!mods?.components?.add && (\n        <Add\n          tooltipDescription={((mods || {}).tooltipDescriptions || {}).add}\n          addElem={handleParentAddElem}\n        />\n      )}\n    </>\n  );\n}\n\nexport default memo(Section);\n","import React from 'react';\nimport TextField from '@mui/material/TextField';\nimport Typography from '@mui/material/Typography';\nimport Link from '@mui/material/Link';\nimport type { CardComponent } from './types';\nimport Tooltip from './Tooltip';\n\nexport const PlaceholderInput: CardComponent = ({ parameters, onChange }) => {\n  return (\n    <>\n      <Typography variant='subtitle2' fontWeight='bold'>\n        Placeholder{' '}\n        <Link\n          href='https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#attr-placeholder'\n          target='_blank'\n          rel='noopener noreferrer'\n        >\n          <Tooltip\n            type='help'\n            text='Hint to the user as to what kind of information is expected in the field'\n          />\n        </Link>\n      </Typography>\n      <TextField\n        value={parameters['ui:placeholder'] ? parameters['ui:placeholder'] : ''}\n        placeholder='Placeholder'\n        type='text'\n        onChange={(ev) => {\n          onChange({\n            ...parameters,\n            'ui:placeholder': ev.target.value,\n          });\n        }}\n        size='small'\n        fullWidth\n      />\n    </>\n  );\n};\n","import React from 'react';\nimport TextField from '@mui/material/TextField';\nimport Autocomplete from '@mui/material/Autocomplete';\nimport Box from '@mui/material/Box';\nimport Typography from '@mui/material/Typography';\nimport Link from '@mui/material/Link';\nimport FBCheckbox from '../FBCheckbox';\nimport Tooltip from '../Tooltip';\nimport type { CardComponent, FormInput, DataType } from '../types';\nimport { PlaceholderInput } from '../PlaceholderInput';\n\nconst formatDictionary = {\n  '': 'None',\n  email: 'Email',\n  hostname: 'Hostname',\n  uri: 'URI',\n  regex: 'Regular Expression',\n};\n\ntype FormatDictionaryKey = '' | 'email' | 'hostname' | 'uri' | 'regex';\n\nconst formatTypeDictionary = {\n  email: 'email',\n  url: 'uri',\n};\n\ntype FormatTypeDictionaryKey = 'email' | 'url';\n\nconst autoDictionary = {\n  '': 'None',\n  email: 'Email',\n  username: 'User Name',\n  password: 'Password',\n  'street-address': 'Street Address',\n  country: 'Country',\n};\n\ntype AutoDictionaryKey =\n  | ''\n  | 'email'\n  | 'username'\n  | 'password'\n  | 'street-address'\n  | 'country';\n\n// specify the inputs required for a string type object\nconst CardShortAnswerParameterInputs: CardComponent = ({\n  parameters,\n  onChange,\n}) => {\n  return (\n    <Box>\n      <Typography variant='subtitle2' fontWeight='bold'>\n        Minimum Length\n      </Typography>\n      <TextField\n        value={parameters.minLength ? parameters.minLength : ''}\n        placeholder='Minimum Length'\n        type='number'\n        onChange={(ev) => {\n          onChange({\n            ...parameters,\n            minLength: parseInt(ev.target.value, 10),\n          });\n        }}\n        size='small'\n        fullWidth\n        sx={{ mb: 2 }}\n      />\n      <Typography variant='subtitle2' fontWeight='bold'>\n        Maximum Length\n      </Typography>\n      <TextField\n        value={parameters.maxLength ? parameters.maxLength : ''}\n        placeholder='Maximum Length'\n        type='number'\n        onChange={(ev) => {\n          onChange({\n            ...parameters,\n            maxLength: parseInt(ev.target.value, 10),\n          });\n        }}\n        size='small'\n        fullWidth\n        sx={{ mb: 2 }}\n      />\n      <Typography variant='subtitle2' fontWeight='bold'>\n        Regular Expression Pattern{' '}\n        <Link\n          href='https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions'\n          target='_blank'\n          rel='noopener noreferrer'\n        >\n          <Tooltip\n            type='help'\n            text='Regular expression pattern that this must satisfy'\n          />\n        </Link>\n      </Typography>\n      <TextField\n        value={parameters.pattern ? parameters.pattern : ''}\n        placeholder='Regular Expression Pattern'\n        type='text'\n        onChange={(ev) => {\n          onChange({\n            ...parameters,\n            pattern: ev.target.value,\n          });\n        }}\n        size='small'\n        fullWidth\n        sx={{ mb: 2 }}\n      />\n      <Typography variant='subtitle2' fontWeight='bold'>\n        Format{' '}\n        <Tooltip\n          type='help'\n          text='Require string input to match a certain common format'\n        />\n      </Typography>\n      <Autocomplete\n        value={\n          Object.keys(formatDictionary)\n            .map((key) => ({\n              value: key,\n              label: formatDictionary[key as FormatDictionaryKey],\n            }))\n            .find((opt) => opt.value === (parameters.format || '')) || {\n            value: '',\n            label: 'None',\n          }\n        }\n        options={Object.keys(formatDictionary).map((key: string) => ({\n          value: key,\n          label: formatDictionary[key as FormatDictionaryKey],\n        }))}\n        getOptionLabel={(option) => option.label}\n        isOptionEqualToValue={(option, value) => option.value === value.value}\n        onChange={(_, val) => {\n          if (val) {\n            onChange({\n              ...parameters,\n              format: val.value,\n            });\n          }\n        }}\n        size='small'\n        disableClearable\n        renderInput={(params) => <TextField {...params} placeholder='Format' />}\n        sx={{ mb: 2 }}\n      />\n      <Typography variant='subtitle2' fontWeight='bold'>\n        Auto Complete Category{' '}\n        <Link\n          href='https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete'\n          target='_blank'\n          rel='noopener noreferrer'\n        >\n          <Tooltip\n            type='help'\n            text=\"Suggest entries based on the user's browser history\"\n          />\n        </Link>\n      </Typography>\n      <Autocomplete\n        value={\n          Object.keys(autoDictionary)\n            .map((key) => ({\n              value: key,\n              label: autoDictionary[key as AutoDictionaryKey],\n            }))\n            .find(\n              (opt) =>\n                opt.value ===\n                (typeof parameters['ui:autocomplete'] === 'string'\n                  ? parameters['ui:autocomplete']\n                  : ''),\n            ) || { value: '', label: 'None' }\n        }\n        options={Object.keys(autoDictionary).map((key) => ({\n          value: key,\n          label: autoDictionary[key as AutoDictionaryKey],\n        }))}\n        getOptionLabel={(option) => option.label}\n        isOptionEqualToValue={(option, value) => option.value === value.value}\n        onChange={(_, val) => {\n          if (val) {\n            onChange({\n              ...parameters,\n              'ui:autocomplete': val.value,\n            });\n          }\n        }}\n        size='small'\n        disableClearable\n        renderInput={(params) => (\n          <TextField {...params} placeholder='Auto Complete' />\n        )}\n        sx={{ mb: 2 }}\n      />\n      <PlaceholderInput parameters={parameters} onChange={onChange} />\n      <FBCheckbox\n        onChangeValue={() => {\n          onChange({\n            ...parameters,\n            'ui:autofocus': parameters['ui:autofocus']\n              ? parameters['ui:autofocus'] !== true\n              : true,\n          });\n        }}\n        isChecked={\n          parameters['ui:autofocus']\n            ? parameters['ui:autofocus'] === true\n            : false\n        }\n        label='Auto Focus'\n      />\n    </Box>\n  );\n};\n\nconst ShortAnswerField: CardComponent = ({ parameters, onChange }) => {\n  return (\n    <>\n      <Typography variant='subtitle2' fontWeight='bold'>\n        Default Value\n      </Typography>\n      <TextField\n        value={\n          parameters.default as string | number | readonly string[] | undefined\n        }\n        placeholder='Default'\n        type={\n          (formatTypeDictionary[\n            parameters.format as FormatTypeDictionaryKey\n          ] as 'email' | 'url') || 'text'\n        }\n        onChange={(ev) => onChange({ ...parameters, default: ev.target.value })}\n        size='small'\n        fullWidth\n      />\n    </>\n  );\n};\n\nconst Password: CardComponent = ({ parameters, onChange }) => {\n  return (\n    <>\n      <Typography variant='subtitle2' fontWeight='bold'>\n        Default password\n      </Typography>\n      <TextField\n        value={\n          parameters.default as string | number | readonly string[] | undefined\n        }\n        placeholder='Default'\n        type='password'\n        onChange={(ev) => onChange({ ...parameters, default: ev.target.value })}\n        size='small'\n        fullWidth\n      />\n    </>\n  );\n};\n\nconst shortAnswerInput: { [key: string]: FormInput } = {\n  shortAnswer: {\n    displayName: 'Short Answer',\n    matchIf: [\n      {\n        types: ['string'],\n      },\n      ...['email', 'hostname', 'uri', 'regex'].map((format) => ({\n        types: ['string'] as DataType[],\n        format,\n      })),\n    ],\n    defaultDataSchema: {},\n    defaultUiSchema: {},\n    type: 'string',\n    cardBody: ShortAnswerField,\n    modalBody: CardShortAnswerParameterInputs,\n  },\n  password: {\n    displayName: 'Password',\n    matchIf: [\n      {\n        types: ['string'],\n        widget: 'password',\n      },\n    ],\n    defaultDataSchema: {},\n    defaultUiSchema: {\n      'ui:widget': 'password',\n    },\n    type: 'string',\n    cardBody: Password,\n    modalBody: CardShortAnswerParameterInputs,\n  },\n};\n\nexport default shortAnswerInput;\n","import React from 'react';\nimport TextField from '@mui/material/TextField';\nimport Box from '@mui/material/Box';\nimport Typography from '@mui/material/Typography';\nimport Link from '@mui/material/Link';\nimport FBCheckbox from '../FBCheckbox';\nimport Tooltip from '../Tooltip';\nimport type { FormInput, CardComponent } from '../types';\nimport { PlaceholderInput } from '../PlaceholderInput';\n\n// specify the inputs required for a string type object\nconst CardLongAnswerParameterInputs: CardComponent = ({\n  parameters,\n  onChange,\n}) => {\n  return (\n    <Box>\n      <Typography variant='subtitle2' fontWeight='bold'>\n        Minimum Length\n      </Typography>\n      <TextField\n        value={parameters.minLength ? parameters.minLength : ''}\n        placeholder='Minimum Length'\n        type='number'\n        onChange={(ev) => {\n          onChange({\n            ...parameters,\n            minLength: parseInt(ev.target.value, 10),\n          });\n        }}\n        size='small'\n        fullWidth\n        sx={{ mb: 2 }}\n      />\n      <Typography variant='subtitle2' fontWeight='bold'>\n        Maximum Length\n      </Typography>\n      <TextField\n        value={parameters.maxLength ? parameters.maxLength : ''}\n        placeholder='Maximum Length'\n        type='number'\n        onChange={(ev) => {\n          onChange({\n            ...parameters,\n            maxLength: parseInt(ev.target.value, 10),\n          });\n        }}\n        size='small'\n        fullWidth\n        sx={{ mb: 2 }}\n      />\n      <Typography variant='subtitle2' fontWeight='bold'>\n        Regular Expression Pattern{' '}\n        <Link\n          href='https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions'\n          target='_blank'\n          rel='noopener noreferrer'\n        >\n          <Tooltip\n            type='help'\n            text='Regular expression pattern that this must satisfy'\n          />\n        </Link>\n      </Typography>\n      <TextField\n        value={parameters.pattern ? parameters.pattern : ''}\n        placeholder='Regular Expression Pattern'\n        type='text'\n        onChange={(ev) => {\n          onChange({\n            ...parameters,\n            pattern: ev.target.value,\n          });\n        }}\n        size='small'\n        fullWidth\n        sx={{ mb: 2 }}\n      />\n      <PlaceholderInput parameters={parameters} onChange={onChange} />\n      <Box sx={{ mt: 2 }}>\n        <FBCheckbox\n          onChangeValue={() => {\n            onChange({\n              ...parameters,\n              'ui:autofocus': parameters['ui:autofocus']\n                ? parameters['ui:autofocus'] !== true\n                : true,\n            });\n          }}\n          isChecked={\n            parameters['ui:autofocus']\n              ? parameters['ui:autofocus'] === true\n              : false\n          }\n          label='Auto Focus'\n        />\n      </Box>\n    </Box>\n  );\n};\n\nconst LongAnswer: CardComponent = ({ parameters, onChange }) => {\n  return (\n    <>\n      <Typography variant='subtitle2' fontWeight='bold'>\n        Default Value\n      </Typography>\n      <TextField\n        value={\n          parameters.default as string | number | readonly string[] | undefined\n        }\n        placeholder='Default'\n        multiline\n        rows={3}\n        onChange={(ev) => onChange({ ...parameters, default: ev.target.value })}\n        size='small'\n        fullWidth\n      />\n    </>\n  );\n};\n\nconst longAnswerInput: { [key: string]: FormInput } = {\n  longAnswer: {\n    displayName: 'Long Answer',\n    matchIf: [\n      {\n        types: ['string'],\n        widget: 'textarea',\n      },\n    ],\n    defaultDataSchema: {},\n    defaultUiSchema: {\n      'ui:widget': 'textarea',\n    },\n    type: 'string',\n    cardBody: LongAnswer,\n    modalBody: CardLongAnswerParameterInputs as CardComponent,\n  },\n};\n\nexport default longAnswerInput;\n","import React from 'react';\nimport TextField from '@mui/material/TextField';\nimport Box from '@mui/material/Box';\nimport Typography from '@mui/material/Typography';\nimport FBCheckbox from '../FBCheckbox';\nimport Tooltip from '../Tooltip';\nimport type { FormInput, CardComponent } from '../types';\n\n// specify the inputs required for a number type object\nconst CardNumberParameterInputs: CardComponent = ({ parameters, onChange }) => {\n  return (\n    <Box>\n      <Typography variant='subtitle2' fontWeight='bold'>\n        Multiple of{' '}\n        <Tooltip\n          type='help'\n          text='Require number to be a multiple of this number'\n        />\n      </Typography>\n      <TextField\n        value={parameters.multipleOf ? parameters.multipleOf : ''}\n        placeholder='ex: 2'\n        type='number'\n        onChange={(ev) => {\n          let newVal: null | number = parseFloat(ev.target.value);\n          if (Number.isNaN(newVal)) newVal = null;\n          onChange({\n            ...parameters,\n            multipleOf: newVal,\n          });\n        }}\n        size='small'\n        fullWidth\n        sx={{ mb: 2 }}\n      />\n      <Typography variant='subtitle2' fontWeight='bold'>\n        Minimum\n      </Typography>\n      <TextField\n        value={parameters.minimum || parameters.exclusiveMinimum || ''}\n        placeholder='ex: 3'\n        type='number'\n        onChange={(ev) => {\n          let newVal: null | number = parseFloat(ev.target.value);\n          if (Number.isNaN(newVal)) newVal = null;\n          // change either min or exclusiveMin depending on which one is active\n          if (parameters.exclusiveMinimum) {\n            onChange({\n              ...parameters,\n              exclusiveMinimum: newVal,\n              minimum: null,\n            });\n          } else {\n            onChange({\n              ...parameters,\n              minimum: newVal,\n              exclusiveMinimum: null,\n            });\n          }\n        }}\n        size='small'\n        fullWidth\n        sx={{ mb: 1 }}\n      />\n      <Box sx={{ mb: 2 }}>\n        <FBCheckbox\n          onChangeValue={() => {\n            const newMin = parameters.minimum || parameters.exclusiveMinimum;\n            if (parameters.exclusiveMinimum) {\n              onChange({\n                ...parameters,\n                exclusiveMinimum: null,\n                minimum: newMin,\n              });\n            } else {\n              onChange({\n                ...parameters,\n                exclusiveMinimum: newMin,\n                minimum: null,\n              });\n            }\n          }}\n          isChecked={!!parameters.exclusiveMinimum}\n          disabled={!parameters.minimum && !parameters.exclusiveMinimum}\n          label='Exclusive Minimum'\n        />\n      </Box>\n      <Typography variant='subtitle2' fontWeight='bold'>\n        Maximum\n      </Typography>\n      <TextField\n        value={parameters.maximum || parameters.exclusiveMaximum || ''}\n        placeholder='ex: 8'\n        type='number'\n        onChange={(ev) => {\n          let newVal: null | number = parseFloat(ev.target.value);\n          if (Number.isNaN(newVal)) newVal = null;\n          // change either max or exclusiveMax depending on which one is active\n          if (parameters.exclusiveMinimum) {\n            onChange({\n              ...parameters,\n              exclusiveMaximum: newVal,\n              maximum: null,\n            });\n          } else {\n            onChange({\n              ...parameters,\n              maximum: newVal,\n              exclusiveMaximum: null,\n            });\n          }\n        }}\n        size='small'\n        fullWidth\n        sx={{ mb: 1 }}\n      />\n      <Box>\n        <FBCheckbox\n          onChangeValue={() => {\n            const newMax = parameters.maximum || parameters.exclusiveMaximum;\n            if (parameters.exclusiveMaximum) {\n              onChange({\n                ...parameters,\n                exclusiveMaximum: null,\n                maximum: newMax,\n              });\n            } else {\n              onChange({\n                ...parameters,\n                exclusiveMaximum: newMax,\n                maximum: null,\n              });\n            }\n          }}\n          isChecked={!!parameters.exclusiveMaximum}\n          disabled={!parameters.maximum && !parameters.exclusiveMaximum}\n          label='Exclusive Maximum'\n        />\n      </Box>\n    </Box>\n  );\n};\n\nconst NumberField: CardComponent = ({ parameters, onChange }) => {\n  return (\n    <>\n      <Typography variant='subtitle2' fontWeight='bold'>\n        Default number\n      </Typography>\n      <TextField\n        value={\n          parameters.default as string | number | readonly string[] | undefined\n        }\n        placeholder='Default'\n        type='number'\n        onChange={(ev) =>\n          onChange({\n            ...parameters,\n            default: parseFloat(ev.target.value),\n          })\n        }\n        size='small'\n        fullWidth\n      />\n    </>\n  );\n};\n\nconst numberInputs: { [key: string]: FormInput } = {\n  integer: {\n    displayName: 'Integer',\n    matchIf: [\n      {\n        types: ['integer'],\n      },\n      {\n        types: ['integer'],\n        widget: 'number',\n      },\n    ],\n    defaultDataSchema: {},\n    defaultUiSchema: {},\n    type: 'integer',\n    cardBody: NumberField,\n    modalBody: CardNumberParameterInputs,\n  },\n  number: {\n    displayName: 'Number',\n    matchIf: [\n      {\n        types: ['number'],\n      },\n    ],\n    defaultDataSchema: {},\n    defaultUiSchema: {},\n    type: 'number',\n    cardBody: NumberField,\n    modalBody: CardNumberParameterInputs,\n  },\n};\n\nexport default numberInputs;\n","import React, { useState } from 'react';\nimport TextField from '@mui/material/TextField';\nimport Box from '@mui/material/Box';\nimport Typography from '@mui/material/Typography';\nimport {\n  excludeKeys,\n  generateElementComponentsFromSchemas,\n  generateCategoryHash,\n} from '../utils';\nimport Card from '../Card';\nimport Section from '../Section';\nimport FBCheckbox from '../FBCheckbox';\nimport shortAnswerInputs from './shortAnswerInputs';\nimport longAnswerInputs from './longAnswerInputs';\nimport numberInputs from './numberInputs';\nimport defaultInputs from './defaultInputs';\nimport { getRandomId } from '../utils';\nimport type { FormInput, CardComponent, CardComponentProps } from '../types';\n\n// specify the inputs required for a string type object\nconst CardArrayParameterInputs: CardComponent = ({ parameters, onChange }) => {\n  return (\n    <Box>\n      <Typography variant='subtitle2' fontWeight='bold'>\n        Minimum Items\n      </Typography>\n      <TextField\n        value={parameters.minItems || ''}\n        placeholder='ex: 2'\n        type='number'\n        onChange={(ev) => {\n          onChange({\n            ...parameters,\n            minItems: parseInt(ev.target.value, 10),\n          });\n        }}\n        size='small'\n        fullWidth\n        sx={{ mb: 2 }}\n      />\n      <Typography variant='subtitle2' fontWeight='bold'>\n        Maximum Items\n      </Typography>\n      <TextField\n        value={parameters.maxItems || ''}\n        placeholder='ex: 2'\n        type='number'\n        onChange={(ev) => {\n          onChange({\n            ...parameters,\n            maxItems: parseInt(ev.target.value, 10),\n          });\n        }}\n        size='small'\n        fullWidth\n        sx={{ mb: 2 }}\n      />\n    </Box>\n  );\n};\n\nconst InnerCard: CardComponent = ({ parameters, onChange, mods }) => {\n  const [elementId] = useState(getRandomId);\n  const newDataProps: { [key: string]: any } = {};\n  const newUiProps: { [key: string]: any } = {};\n  const allFormInputs = excludeKeys(\n    Object.assign({}, defaultFormInputs, (mods && mods.customFormInputs) || {}),\n    mods && mods.deactivatedFormInputs,\n  );\n\n  // parse components into data and ui relevant pieces\n  Object.keys(parameters).forEach((propName: string) => {\n    if (propName.startsWith('ui:*')) {\n      newUiProps[propName.substring(4)] =\n        parameters[propName as keyof CardComponentProps];\n    } else if (propName.startsWith('ui:')) {\n      newUiProps[propName] = parameters[propName as keyof CardComponentProps];\n    } else if (!['name', 'required'].includes(propName)) {\n      newDataProps[propName] = parameters[propName as keyof CardComponentProps];\n    }\n  });\n\n  const definitionData = parameters.definitionData\n    ? parameters.definitionData\n    : {};\n  const definitionUi = parameters.definitionUi ? parameters.definitionUi : {};\n  const [cardOpen, setCardOpen] = React.useState(false);\n  if (parameters.type !== 'array') {\n    return (\n      <Typography variant='body2' color='error'>\n        Not an array\n      </Typography>\n    );\n  }\n  return (\n    <>\n      <FBCheckbox\n        onChangeValue={() => {\n          if (newDataProps.items.type === 'object') {\n            onChange({\n              ...parameters,\n              items: {\n                ...newDataProps.items,\n                type: 'string',\n              },\n            });\n          } else {\n            onChange({\n              ...parameters,\n              items: {\n                ...newDataProps.items,\n                type: 'object',\n              },\n            });\n          }\n        }}\n        isChecked={newDataProps.items.type === 'object'}\n        label='Section'\n      />\n      {generateElementComponentsFromSchemas({\n        schemaData: { properties: { item: newDataProps.items } },\n        uiSchemaData: { item: newUiProps.items },\n        onChange: (schema, uischema) => {\n          onChange({\n            ...parameters,\n            items: schema.properties.item,\n            'ui:*items': uischema.item || {},\n          });\n        },\n        path: elementId,\n        definitionData,\n        definitionUi,\n        hideKey: true,\n        cardOpenArray: [cardOpen],\n        setCardOpenArray: (updater) => {\n          const newArr =\n            typeof updater === 'function' ? updater([cardOpen]) : updater;\n          setCardOpen(newArr[0]);\n        },\n        allFormInputs,\n        mods,\n        categoryHash: generateCategoryHash(allFormInputs),\n        Card: (props) => <Card {...props} showObjectNameInput={false} />,\n        Section,\n      })}\n    </>\n  );\n};\n\nfunction getInnerCardComponent(): CardComponent {\n  return InnerCard;\n}\n\nconst defaultFormInputs: { [key: string]: FormInput } = {\n  ...defaultInputs,\n  ...shortAnswerInputs,\n  ...longAnswerInputs,\n  ...numberInputs,\n};\ndefaultFormInputs.array = {\n  displayName: 'Array',\n  matchIf: [\n    {\n      types: ['array'],\n    },\n  ],\n  defaultDataSchema: {\n    items: { type: 'string' },\n  },\n  defaultUiSchema: {},\n  type: 'array',\n  cardBody: getInnerCardComponent(),\n  modalBody: CardArrayParameterInputs,\n};\n\nconst ArrayInputs: { [key: string]: FormInput } = {\n  array: {\n    displayName: 'Array',\n    matchIf: [\n      {\n        types: ['array'],\n      },\n    ],\n    defaultDataSchema: {\n      items: { type: 'string' },\n    },\n    defaultUiSchema: {},\n    type: 'array',\n    cardBody: getInnerCardComponent(),\n    modalBody: CardArrayParameterInputs,\n  },\n};\n\nexport default ArrayInputs;\n","import React from 'react';\nimport type { FormInput, CardComponent } from '../types';\nimport Autocomplete from '@mui/material/Autocomplete';\nimport TextField from '@mui/material/TextField';\nimport { PlaceholderInput } from '../PlaceholderInput';\n\nexport const CardReferenceParameterInputs: CardComponent = ({\n  parameters,\n  onChange,\n}) => {\n  return <PlaceholderInput parameters={parameters} onChange={onChange} />;\n};\n\nconst RefChoice: CardComponent = ({ parameters, onChange }) => {\n  const pathArr = (parameters.$ref || '').split('/');\n  const defData = (parameters.definitionData || {}) as Record<\n    string,\n    { title?: string }\n  >;\n  const currentValueLabel =\n    pathArr.length === 3 &&\n    pathArr[0] === '#' &&\n    pathArr[1] === 'definitions' &&\n    defData[pathArr[2]]\n      ? defData[pathArr[2]].title || parameters.$ref\n      : parameters.$ref;\n\n  const options = Object.keys(defData).map((key) => ({\n    value: `#/definitions/${key}`,\n    label: defData[key].title || `#/definitions/${key}`,\n  }));\n\n  return (\n    <Autocomplete\n      value={{ value: parameters.$ref || '', label: currentValueLabel || '' }}\n      options={options}\n      getOptionLabel={(option) => option.label}\n      isOptionEqualToValue={(option, value) => option.value === value.value}\n      onChange={(_, val) => {\n        if (val) onChange({ ...parameters, $ref: val.value });\n      }}\n      size='small'\n      disableClearable\n      renderInput={(params) => (\n        <TextField {...params} placeholder='Reference' />\n      )}\n    />\n  );\n};\n\nconst referenceInputs: { [key: string]: FormInput } = {\n  ref: {\n    displayName: 'Reference',\n    matchIf: [\n      {\n        types: ['null'],\n        $ref: true,\n      },\n    ],\n    defaultDataSchema: {\n      $ref: '',\n      title: '',\n      description: '',\n    },\n    defaultUiSchema: {},\n    type: 'string',\n    cardBody: RefChoice,\n    modalBody: CardReferenceParameterInputs,\n  },\n};\n\nexport default referenceInputs;\n","import shortAnswerInputs from './shortAnswerInputs';\nimport longAnswerInputs from './longAnswerInputs';\nimport numberInputs from './numberInputs';\nimport arrayInputs from './arrayInputs';\nimport defaultInputs from './defaultInputs';\nimport referenceInputs from './referenceInputs';\nimport { FormInput } from '../types';\n\nconst DEFAULT_FORM_INPUTS: { [key: string]: FormInput } = {\n  ...defaultInputs,\n  ...referenceInputs,\n  ...shortAnswerInputs,\n  ...longAnswerInputs,\n  ...numberInputs,\n  ...arrayInputs,\n};\n\nexport default DEFAULT_FORM_INPUTS;\n","import React, {\n  ReactElement,\n  useEffect,\n  useState,\n  useMemo,\n  useCallback,\n  memo,\n} from 'react';\nimport {\n  DndContext,\n  closestCenter,\n  KeyboardSensor,\n  PointerSensor,\n  useSensor,\n  useSensors,\n  DragEndEvent,\n} from '@dnd-kit/core';\nimport {\n  SortableContext,\n  sortableKeyboardCoordinates,\n  verticalListSortingStrategy,\n} from '@dnd-kit/sortable';\nimport Alert from '@mui/material/Alert';\nimport AlertTitle from '@mui/material/AlertTitle';\nimport TextField from '@mui/material/TextField';\nimport Box from '@mui/material/Box';\nimport Paper from '@mui/material/Paper';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\nimport Card from './Card';\nimport Section from './Section';\nimport Add from './Add';\nimport {\n  parse,\n  stringify,\n  checkForUnsupportedFeatures,\n  generateElementComponentsFromSchemas,\n  addCardObj,\n  addSectionObj,\n  handleDndDragEnd,\n  countElementsFromSchema,\n  generateCategoryHash,\n  excludeKeys,\n} from './utils';\nimport SortableItem from './SortableItem';\nimport DEFAULT_FORM_INPUTS from './defaults/defaultFormInputs';\nimport type {\n  Mods,\n  InitParameters,\n  AddFormObjectParameters,\n  JsonSchema,\n  UiSchema,\n  DefinitionData,\n  UiSchemaProperty,\n} from './types';\n\nfunction FormBuilder({\n  schema,\n  uischema,\n  onMount,\n  onChange,\n  mods,\n  className,\n}: {\n  schema: string;\n  uischema: string;\n  onMount?: (parameters: InitParameters) => any;\n  onChange: (schema: string, uischema: string) => any;\n  mods?: Mods;\n  className?: string;\n}): ReactElement {\n  // Parse schema and ensure it has type: 'object' (immutably)\n  const schemaData = useMemo(() => {\n    const parsed = parse(schema) as JsonSchema;\n    return { ...parsed, type: 'object' as const };\n  }, [schema]);\n\n  const uiSchemaData = useMemo(() => parse(uischema) as UiSchema, [uischema]);\n\n  const allFormInputs = useMemo(\n    () =>\n      excludeKeys(\n        Object.assign(\n          {},\n          DEFAULT_FORM_INPUTS,\n          (mods && mods.customFormInputs) || {},\n        ),\n        mods && mods.deactivatedFormInputs,\n      ),\n    [mods],\n  );\n\n  const unsupportedFeatures = useMemo(\n    () => checkForUnsupportedFeatures(schemaData, uiSchemaData, allFormInputs),\n    [schemaData, uiSchemaData, allFormInputs],\n  );\n\n  const elementNum = countElementsFromSchema(schemaData);\n  const defaultCollapseStates = useMemo(\n    () => [...Array(elementNum)].map(() => false),\n    [elementNum],\n  );\n  const [cardOpenArray, setCardOpenArray] = useState(defaultCollapseStates);\n\n  // useState setter is already stable and functional updates automatically use latest state\n\n  const categoryHash = useMemo(\n    () => generateCategoryHash(allFormInputs),\n    [allFormInputs],\n  );\n\n  const [isFirstRender, setIsFirstRender] = useState(true);\n\n  // Memoized onChange handler for schema changes\n  const handleSchemaChange = useCallback(\n    (\n      newSchema: { [key: string]: any },\n      newUiSchema: { [key: string]: any },\n    ) => {\n      onChange(stringify(newSchema), stringify(newUiSchema));\n    },\n    [onChange],\n  );\n\n  // Memoized onChange handler for element components to avoid recreating on every render\n  const handleElementChange = useCallback(\n    (\n      newSchema: { [key: string]: any },\n      newUiSchema: { [key: string]: any },\n    ) => {\n      onChange(stringify(newSchema), stringify(newUiSchema));\n    },\n    [onChange],\n  );\n\n  const addProperties = useMemo<AddFormObjectParameters>(\n    () => ({\n      schema: schemaData as JsonSchema,\n      uischema: uiSchemaData as UiSchema,\n      mods,\n      onChange: handleSchemaChange,\n      definitionData: (schemaData.definitions || {}) as DefinitionData,\n      definitionUi: (uiSchemaData.definitions || {}) as Record<\n        string,\n        UiSchemaProperty\n      >,\n      categoryHash,\n    }),\n    [schemaData, uiSchemaData, mods, handleSchemaChange, categoryHash],\n  );\n\n  const hideAddButton = useMemo(\n    () =>\n      schemaData.properties && Object.keys(schemaData.properties).length !== 0,\n    [schemaData],\n  );\n\n  const sensors = useSensors(\n    useSensor(PointerSensor, {\n      activationConstraint: {\n        distance: 8, // Require 8px movement before drag starts (allows clicks)\n      },\n    }),\n    useSensor(KeyboardSensor, {\n      coordinateGetter: sortableKeyboardCoordinates,\n    }),\n  );\n\n  const handleDragEnd = useCallback(\n    (event: DragEndEvent) => {\n      handleDndDragEnd(event, {\n        schema: schemaData,\n        uischema: uiSchemaData,\n        onChange: handleSchemaChange,\n        definitionData: schemaData.definitions,\n        definitionUi: uiSchemaData.definitions,\n        categoryHash,\n      });\n    },\n    [schemaData, uiSchemaData, handleSchemaChange, categoryHash],\n  );\n\n  useEffect(() => {\n    if (isFirstRender) {\n      if (onMount)\n        onMount({\n          categoryHash,\n        });\n      setIsFirstRender(false);\n    }\n  }, [isFirstRender, onMount, categoryHash]);\n\n  const formElements = useMemo(() => {\n    const elements = generateElementComponentsFromSchemas({\n      schemaData,\n      uiSchemaData,\n      onChange: handleElementChange,\n      definitionData: schemaData.definitions,\n      definitionUi: uiSchemaData.definitions,\n      path: 'root',\n      cardOpenArray,\n      setCardOpenArray,\n      allFormInputs,\n      mods,\n      categoryHash,\n      Card,\n      Section,\n    });\n    const itemIds = elements.map((element: any) => element.key);\n    return { elements, itemIds };\n  }, [\n    schemaData,\n    uiSchemaData,\n    handleElementChange,\n    cardOpenArray,\n    allFormInputs,\n    mods,\n    categoryHash,\n  ]);\n\n  return (\n    <Box className={className || ''}>\n      {unsupportedFeatures.length > 0 && (\n        <Alert\n          severity='warning'\n          className='alert-warning'\n          sx={{ mb: 2, mx: 'auto', maxWidth: 800 }}\n        >\n          <AlertTitle>Unsupported Features</AlertTitle>\n          <Box component='ul' sx={{ margin: 0, pl: 2.5 }}>\n            {unsupportedFeatures.map((message, index) => (\n              <Box component='li' key={index}>\n                {message}\n              </Box>\n            ))}\n          </Box>\n        </Alert>\n      )}\n      {(!mods || mods.showFormHead !== false) && (\n        <Paper\n          variant='outlined'\n          data-testid='form-head'\n          sx={{\n            p: 2,\n            mb: 3,\n            mx: 'auto',\n            maxWidth: 800,\n          }}\n        >\n          <Stack direction={{ xs: 'column', sm: 'row' }} spacing={3}>\n            <Box sx={{ flex: 1 }}>\n              <Typography\n                variant='subtitle2'\n                component='label'\n                fontWeight='bold'\n                data-testid='form-name-label'\n              >\n                {mods?.labels?.formNameLabel ?? 'Form Name'}\n              </Typography>\n              <TextField\n                value={(schemaData as JsonSchema).title || ''}\n                placeholder='Title'\n                type='text'\n                onChange={(ev) => {\n                  onChange(\n                    stringify({\n                      ...schemaData,\n                      title: ev.target.value,\n                    }),\n                    uischema,\n                  );\n                }}\n                size='small'\n                fullWidth\n                sx={{ mt: 0.5 }}\n              />\n            </Box>\n            <Box sx={{ flex: 1 }}>\n              <Typography\n                variant='subtitle2'\n                component='label'\n                fontWeight='bold'\n                data-testid='form-description-label'\n              >\n                {mods?.labels?.formDescriptionLabel ?? 'Form Description'}\n              </Typography>\n              <TextField\n                value={(schemaData as JsonSchema).description || ''}\n                placeholder='Description'\n                type='text'\n                onChange={(ev) =>\n                  onChange(\n                    stringify({\n                      ...schemaData,\n                      description: ev.target.value,\n                    }),\n                    uischema,\n                  )\n                }\n                size='small'\n                fullWidth\n                sx={{ mt: 0.5 }}\n              />\n            </Box>\n          </Stack>\n        </Paper>\n      )}\n      <Stack\n        spacing={2}\n        data-testid='form-body'\n        sx={{ mx: 'auto', maxWidth: 800 }}\n      >\n        <DndContext\n          sensors={sensors}\n          collisionDetection={closestCenter}\n          onDragEnd={handleDragEnd}\n        >\n          <SortableContext\n            items={formElements.itemIds}\n            strategy={verticalListSortingStrategy}\n          >\n            {formElements.elements.map((element: any) => (\n              <SortableItem key={element.key} id={element.key}>\n                {element}\n              </SortableItem>\n            ))}\n          </SortableContext>\n        </DndContext>\n      </Stack>\n      <Box className='form-footer' sx={{ mt: 2, textAlign: 'center' }}>\n        {!hideAddButton &&\n          mods?.components?.add &&\n          mods.components.add(addProperties)}\n        {!mods?.components?.add && (\n          <Add\n            tooltipDescription={((mods || {}).tooltipDescriptions || {}).add}\n            labels={mods?.labels ?? {}}\n            addElem={(choice: string) => {\n              if (choice === 'card') {\n                addCardObj(addProperties);\n              } else if (choice === 'section') {\n                addSectionObj(addProperties);\n              }\n            }}\n            hidden={hideAddButton}\n          />\n        )}\n      </Box>\n    </Box>\n  );\n}\n\nexport default memo(FormBuilder);\n","import React, { ReactElement } from 'react';\nimport Box from '@mui/material/Box';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\nimport {\n  generateElementComponentsFromSchemas,\n  countElementsFromSchema,\n  addCardObj,\n  addSectionObj,\n} from './utils';\nimport Card from './Card';\nimport Section from './Section';\nimport Add from './Add';\nimport DEFAULT_FORM_INPUTS from './defaults/defaultFormInputs';\nimport type { Mods } from './types';\n\ninterface CardGalleryProps {\n  definitionSchema: { [key: string]: any };\n  definitionUiSchema: { [key: string]: any };\n  onChange: (\n    schema: { [key: string]: any },\n    uischema: { [key: string]: any },\n  ) => void;\n  mods?: Mods;\n  categoryHash: { [key: string]: string };\n}\n\nexport default function CardGallery({\n  definitionSchema,\n  definitionUiSchema,\n  onChange,\n  mods,\n  categoryHash,\n}: CardGalleryProps): ReactElement {\n  const elementNum = countElementsFromSchema({\n    properties: definitionSchema,\n  });\n  const defaultCollapseStates = [...Array(elementNum)].map(() => false);\n  const [cardOpenArray, setCardOpenArray] = React.useState(\n    defaultCollapseStates,\n  );\n  const allFormInputs = Object.assign(\n    {},\n    DEFAULT_FORM_INPUTS,\n    (mods && mods.customFormInputs) || {},\n  );\n  const componentArr = generateElementComponentsFromSchemas({\n    schemaData: { properties: definitionSchema },\n    uiSchemaData: definitionUiSchema,\n    onChange: (newDefinitions, newDefinitionUis) => {\n      const oldUi = newDefinitionUis;\n      const newUi: { [key: string]: any } = {};\n\n      Object.keys(oldUi).forEach((definedUi) => {\n        if (!['definitions', 'ui:order'].includes(definedUi))\n          newUi[definedUi] = oldUi[definedUi];\n      });\n      onChange(newDefinitions.properties, newUi);\n    },\n    path: 'definitions',\n    definitionData: definitionSchema,\n    definitionUi: definitionUiSchema,\n    cardOpenArray,\n    setCardOpenArray,\n    allFormInputs,\n    mods,\n    categoryHash,\n    Card,\n    Section,\n  }).map((element: any) => (\n    <Box\n      key={typeof element.key === 'string' ? element.key : ''}\n      data-testid='form-gallery-container'\n    >\n      {element}\n    </Box>\n  ));\n\n  const hideAddButton =\n    !!definitionSchema && Object.keys(definitionSchema).length !== 0;\n\n  const addProperties = {\n    schema: { properties: definitionSchema },\n    uischema: definitionUiSchema,\n    mods: mods,\n    onChange: (\n      newDefinitions: { [key: string]: any },\n      newDefinitionUis: { [key: string]: any },\n    ) => {\n      const oldUi = newDefinitionUis;\n      const newUi: { [key: string]: any } = {};\n\n      Object.keys(oldUi).forEach((definedUiSchemaKey) => {\n        if (!['definitions', 'ui:order'].includes(definedUiSchemaKey))\n          newUi[definedUiSchemaKey] = oldUi[definedUiSchemaKey];\n      });\n      onChange(newDefinitions.properties, newUi);\n    },\n    definitionData: definitionSchema,\n    definitionUi: definitionUiSchema,\n    categoryHash,\n  };\n\n  return (\n    <Stack\n      spacing={2}\n      sx={{ maxWidth: 800, mx: 'auto' }}\n      data-testid='form-gallery'\n    >\n      {componentArr}\n      {componentArr.length === 0 && (\n        <Typography variant='body2' color='text.secondary'>\n          No components in &quot;definitions&quot;\n        </Typography>\n      )}\n      <div>\n        {!hideAddButton &&\n          mods?.components?.add &&\n          mods.components.add(addProperties)}\n        {!mods?.components?.add && (\n          <Add\n            tooltipDescription={((mods || {}).tooltipDescriptions || {}).add}\n            addElem={(choice: string) => {\n              if (choice === 'card') {\n                addCardObj(addProperties);\n              } else if (choice === 'section') {\n                addSectionObj(addProperties);\n              }\n            }}\n            hidden={hideAddButton}\n          />\n        )}\n      </div>\n    </Stack>\n  );\n}\n","import React, {\n  ReactElement,\n  memo,\n  useMemo,\n  useEffect,\n  useCallback,\n} from 'react';\nimport Box from '@mui/material/Box';\nimport CardGallery from './CardGallery';\nimport {\n  parse,\n  stringify,\n  propagateDefinitionChanges,\n  generateCategoryHash,\n  excludeKeys,\n} from './utils';\nimport DEFAULT_FORM_INPUTS from './defaults/defaultFormInputs';\nimport type { Mods } from './types';\n\nfunction PredefinedGallery({\n  schema,\n  uischema,\n  onChange,\n  mods,\n  className,\n}: {\n  schema: string;\n  uischema: string;\n  onChange: (schema: string, uischema: string) => any;\n  mods?: Mods;\n  className?: string;\n}): ReactElement {\n  const schemaData = useMemo(() => parse(schema) || {}, [schema]);\n  const uiSchemaData = useMemo(() => parse(uischema) || {}, [uischema]);\n\n  const allFormInputs = useMemo(\n    () =>\n      excludeKeys(\n        Object.assign(\n          {},\n          DEFAULT_FORM_INPUTS,\n          (mods && mods.customFormInputs) || {},\n        ),\n        mods && mods.deactivatedFormInputs,\n      ),\n    [mods],\n  );\n\n  const categoryHash = useMemo(\n    () => generateCategoryHash(allFormInputs),\n    [allFormInputs],\n  );\n\n  useEffect(() => {\n    if (!uiSchemaData.definitions) {\n      console.log('Parsing UI schema to assign UI for definitions');\n      // need to create definitions from scratch\n      const references: string[] = [];\n      // recursively search for all $refs in the schemaData\n      const findRefs = (name: string, schemaObject: { [key: string]: any }) => {\n        if (!schemaObject) return;\n        if (typeof schemaObject === 'object')\n          Object.keys(schemaObject).forEach((key) => {\n            if (typeof key === 'string') {\n              if (key === '$ref') references.push(name);\n              findRefs(key, schemaObject[key]);\n            }\n          });\n        if (Array.isArray(schemaObject))\n          schemaObject.forEach((innerObj) => {\n            findRefs(name, innerObj);\n          });\n      };\n\n      findRefs('root', schemaData);\n\n      // Build definitions immutably\n      const referenceSet = new Set(references);\n      const newDefinitions: { [key: string]: any } = {};\n      Object.keys(uiSchemaData).forEach((uiProp) => {\n        if (referenceSet.has(uiProp)) {\n          newDefinitions[uiProp] = uiSchemaData[uiProp];\n        }\n      });\n\n      const updatedUiSchemaData = {\n        ...uiSchemaData,\n        definitions: Object.keys(newDefinitions).length\n          ? newDefinitions\n          : undefined,\n      };\n      onChange(stringify(schemaData), stringify(updatedUiSchemaData));\n    }\n  }, [uiSchemaData, schemaData, onChange]);\n\n  const handleGalleryChange = useCallback(\n    (\n      newDefinitions: { [key: string]: any },\n      newDefinitionsUi: { [key: string]: any },\n    ) => {\n      // propagate changes in ui definitions to all relavant parties in main schema\n      propagateDefinitionChanges(\n        { ...schemaData, definitions: newDefinitions },\n        { ...uiSchemaData, definitions: newDefinitionsUi },\n        (newSchema, newUiSchema) =>\n          onChange(stringify(newSchema), stringify(newUiSchema)),\n        categoryHash,\n      );\n    },\n    [schemaData, uiSchemaData, onChange, categoryHash],\n  );\n\n  return (\n    <Box className={className || ''}>\n      <CardGallery\n        definitionSchema={schemaData.definitions || {}}\n        definitionUiSchema={uiSchemaData.definitions || {}}\n        onChange={handleGalleryChange}\n        mods={mods}\n        categoryHash={categoryHash}\n      />\n    </Box>\n  );\n}\n\nexport default memo(PredefinedGallery);\n"]}