{{#if hasBlock}}
  {{component labelComponent label=label required=required isValid=isValid isInvalid=isInvalid inputId=inputId}}

  {{yield (hash
    value=_val
    update=(action "update")
    setDirty=(action "setDirty")
    model=model
    name=name
    inputId=inputId
  )}}

  {{#if hint}}
    {{component hintComponent hint=hint}}
  {{/if}}

  {{#if (and showValidity errors)}}
    {{component errorComponent errors=errors}}
  {{/if}}
{{else}}
  {{component renderComponent
    type=type
    value=_val
    inputId=inputId
    options=options
    name=name
    inputName=inputName
    disabled=disabled
    autofocus=autofocus
    autocomplete=autocomplete
    rows=rows
    cols=cols
    model=model
    isValid=isValid
    isInvalid=isInvalid
    placeholder=placeholder
    class=class

    optionLabelPath=optionLabelPath
    optionValuePath=optionValuePath
    optionTargetPath=optionTargetPath
    includeBlank=includeBlank
    multiple=multiple

    update=(action "update")
    setDirty=(action "setDirty")

    labelComponent=(component labelComponent label=label required=required isValid=isValid isInvalid=isInvalid inputId=inputId)
    hintComponent=(if hint (component hintComponent hint=hint))
    errorComponent=(if (and showValidity errors) (component errorComponent errors=errors))
  }}
{{/if}}

{{#if hasBlock}}
  {{component labelComponent label=label required=required isValid=isValid isInvalid=isInvalid inputId=inputId}}

  {{yield (hash
    value=_val
    update=(action "update")
    setDirty=(action "setDirty")
    model=model
    name=name
    inputId=inputId
    isValid=isValid
    isInvalid=isInvalid
  )}}

  {{#if hint}}
    {{component hintComponent hint=hint}}
  {{/if}}

  {{#if (and showValidity errors)}}
    {{component errorComponent errors=errors}}
  {{/if}}
{{else}}
  {{component renderComponent
    type=type
    value=_val
    inputId=inputId
    options=options
    name=name
    inputName=inputName
    disabled=disabled
    autofocus=autofocus
    autocomplete=autocomplete
    rows=rows
    cols=cols
    model=model
    isValid=isValid
    isInvalid=isInvalid
    placeholder=placeholder
    class=class

    optionLabelPath=optionLabelPath
    optionValuePath=optionValuePath
    optionTargetPath=optionTargetPath
    includeBlank=includeBlank
    multiple=multiple

    update=(action "update")
    setDirty=(action "setDirty")

    labelComponent=(component labelComponent label=label required=required isValid=isValid isInvalid=isInvalid inputId=inputId)
    hintComponent=(if hint (component hintComponent hint=hint))
    errorComponent=(if (and showValidity errors) (component errorComponent errors=errors))
  }}
{{/if}}

ADD more properties to yield
ADD more properties to yield

We could add all properties but I don't want to
pollute the namespace/yield too much.

Better to add more properties as they are needed.
