createInputRowFromDefinition = (type, paramDefinition, prevParameterValues, rebuildSolid) => {
  let subControls
  switch (type) {
    case 'choice':
      subControls = createChoiceControl(paramDefinition, prevParameterValues[paramDefinition.name])
      break
    case 'radio':
      subControls = createRadioControl(paramDefinition, prevParameterValues[paramDefinition.name])
      break
    default:
      subControls = createInputControl(paramDefinition, prevParameterValues[paramDefinition.name])
      break
  }

  let label = paramDefinition.name + ':'
  let tdClassName = ''
  if ('caption' in paramDefinition) {
    label = paramDefinition.caption
    tdClassName = 'caption'
  }

  let trClassName = 'controlsLine'
  if (currentGroupName) {
    trClassName += ' ' + currentGroupName
  }
  const trStyle = (currentGroupIsExpanded ? '' : 'display:none')

  subControls.forEach((control) => {
    control.onchange = () => {
      if (rebuildSolid) {
        rebuildSolid(paramControls)
      }
    }
  })

  const subItems = subControls.map((control) => html`<div>${control} ${'label' in control ? control.label : ''}</div>`)
  const element = html`<tr class=${trClassName} style=${trStyle} >
        <td class=${tdClassName}> ${label} </td>
        <td colspan="2"> ${subItems}</td>
      </tr>`
  element.dataset.groupName = currentGroupName
  return element
}
Render an Input parameter in HTML
@param {string} type - the type of input to create.
@param paramDefinition
@param prevParameterValues
@param rebuildSolid
@returns { element }