Special inputs
As listed in our features, the library supports all native HTML form fields. This includes the HTML <select /> element as well as special cases of the <input /> element.
In our playground you can take a look at such fields and test them out.
Checkbox
A simple checkbox represents a boolean and is true when checked or false otherwise.
<Field of={form} path={['cookies']}>
{#snippet children(field)}
<label>
<input {...field.props} type="checkbox" checked={field.input} />
Yes, I want cookies
</label>
{/snippet}
</Field>However, you can also use multiple checkboxes to represent an array of strings. For this you simply have to add the value attribute to the HTML <input /> element.
{#each [{ label: 'Bananas', value: 'bananas' }, { label: 'Apples', value: 'apples' }, { label: 'Grapes', value: 'grapes' }] as { label, value }}
<Field of={form} path={['fruits']}>
{#snippet children(field)}
<label>
<input
{...field.props}
type="checkbox"
{value}
checked={field.input?.includes(value)}
/>
{label}
</label>
{/snippet}
</Field>
{/each}Select
An HTML <select /> element allows you to select a string from a predefined list of options.
<Field of={form} path={['framework']}>
{#snippet children(field)}
<select {...field.props}>
{#each [{ label: 'Preact', value: 'preact' }, { label: 'Solid', value: 'solid' }, { label: 'Qwik', value: 'qwik' }] as { label, value }}
<option {value} selected={field.input === value}>
{label}
</option>
{/each}
</select>
{/snippet}
</Field>However, if you set the multiple attribute, multiple options can be selected making the field represent an array of strings.
<Field of={form} path={['frameworks']}>
{#snippet children(field)}
<select {...field.props} multiple>
{#each [{ label: 'Preact', value: 'preact' }, { label: 'Solid', value: 'solid' }, { label: 'Qwik', value: 'qwik' }] as { label, value }}
<option {value} selected={field.input?.includes(value)}>
{label}
</option>
{/each}
</select>
{/snippet}
</Field>File
For the HTML <input type="file" /> element it works similar to the HTML <select /> element. Without the multiple attribute it represents a single file and with, a list of files.
<Field of={form} path={['avatar']}>
{#snippet children(field)}
<input {...field.props} type="file" accept="image/*" />
{/snippet}
</Field>With the multiple attribute, users can select multiple files:
<Field of={form} path={['documents']}>
{#snippet children(field)}
<input {...field.props} type="file" multiple />
{/snippet}
</Field>