// Generated by scripts/generate-showcase.mjs. Do not edit directly. page FileInputDetail { layout = "showcase" state playground_size = ctx.url.searchParams.get("pg_size") ?? "default" state playground_color = ctx.url.searchParams.get("pg_color") ?? "primary" state playground_id = ctx.url.searchParams.get("pg_id") ?? "file-input-1" state playground_name = ctx.url.searchParams.get("pg_name") ?? "file-inputField" state playground_label = ctx.url.searchParams.get("pg_label") ?? "Profile image" state playground_hiddenLabel = ctx.url.searchParams.get("pg_hiddenLabel") ?? "false" state playground_placeholder = ctx.url.searchParams.get("pg_placeholder") ?? "Choose an image" state playground_value = ctx.url.searchParams.get("pg_value") ?? "" state playground_icon = ctx.url.searchParams.get("pg_icon") ?? "" state playground_iconPosition = ctx.url.searchParams.get("pg_iconPosition") ?? "start" state playground_accept = ctx.url.searchParams.get("pg_accept") ?? "image/png,image/jpeg" state playground_multiple = ctx.url.searchParams.get("pg_multiple") ?? "false" state playground_helperText = ctx.url.searchParams.get("pg_helperText") ?? "Helpful context for this field." state playground_cornerHint = ctx.url.searchParams.get("pg_cornerHint") ?? "" state playground_error = ctx.url.searchParams.get("pg_error") ?? "" state playground_inline = ctx.url.searchParams.get("pg_inline") ?? "false" state playground_variant = ctx.url.searchParams.get("pg_variant") ?? "normal" state playground_readonly = ctx.url.searchParams.get("pg_readonly") ?? "false" state playground_disabled = ctx.url.searchParams.get("pg_disabled") ?? "false" state playground_required = ctx.url.searchParams.get("pg_required") ?? "false" state playground_class = ctx.url.searchParams.get("pg_class") ?? "" seo { title = "File Input" description = "Theme-aware, responsive file input component." } view {
Forms component

File Input

Theme-aware, responsive file input component.

21 props0 slots7 eventsTheme readyResponsive
Interactive playground

Configure File Input

Change any prop and inspect the server-rendered component immediately.

Live preview
Component code
<FileInput
  id="file-input-1"
  name="file-inputField"
  label="Profile image"
  placeholder="Choose an image"
  accept="image/png,image/jpeg"
  helperText="Helpful context for this field."
/>
Component props21 controls
Live examples

Designed for real product surfaces

Compare configurations and resize the browser to check responsive behavior.

Basic usage

Default field

Use a labelled field with a value, placeholder, and supporting helper text.

01
Live preview
Component usage.wrn
<FileInput
  id="file-input-1"
  name="file-inputField"
  label="Profile image"
  placeholder="Choose an image"
  accept="image/png,image/jpeg"
  helperText="Helpful context for this field."
/>
Appearance

Outlined with start icon

Combine an outlined treatment with a leading icon.

02
Live preview
Component usage.wrn
<FileInput
  id="file-input-2"
  name="file-inputField"
  label="Profile image"
  placeholder="Choose an image"
  icon="icon-[lucide--sparkles]"
  accept="image/png,image/jpeg"
  variant="outlined"
/>
Appearance

Floating label

Move the label into the control while preserving an accessible field name.

03
Live preview
Component usage.wrn
<FileInput
  id="file-input-3"
  name="file-inputField"
  label="Profile image"
  placeholder="Choose an image"
  icon="icon-[lucide--circle-user-round]"
  iconPosition="end"
  accept="image/png,image/jpeg"
  variant="floating"
/>
Appearance

Pill and compact size

Use pill styling and compact sizing in dense interfaces.

04
Live preview
Component usage.wrn
<FileInput
  size="sm"
  id="file-input-4"
  name="file-inputField"
  label="Profile image"
  placeholder="Choose an image"
  accept="image/png,image/jpeg"
  variant="pill"
/>
States

Read only

Display a submitted value without allowing it to be changed.

05
Live preview
Component usage.wrn
<FileInput
  id="file-input-5"
  name="file-inputField"
  label="Profile image"
  placeholder="Choose an image"
  accept="image/png,image/jpeg"
  readonly="true"
/>
States

Disabled

Prevent interaction and communicate that the field is unavailable.

06
Live preview
Component usage.wrn
<FileInput
  id="file-input-6"
  name="file-inputField"
  label="Profile image"
  placeholder="Choose an image"
  accept="image/png,image/jpeg"
  disabled="true"
/>
Layout

Inline helper text

Place the label, control, and supporting text on one responsive line.

07
Live preview
Component usage.wrn
<FileInput
  id="file-input-7"
  name="file-inputField"
  label="Profile image"
  placeholder="Choose an image"
  accept="image/png,image/jpeg"
  helperText="We'll never share your details."
  inline="true"
/>
Layout

Field with corner hint

Place optional context opposite the label and keep the control on the next line.

08
Live preview
Component usage.wrn
<FileInput
  id="file-input-8"
  name="file-inputField"
  label="Profile image"
  placeholder="Choose an image"
  accept="image/png,image/jpeg"
  cornerHint="Optional"
/>
Validation

Validated field

Surface validation through @wrnexus/validation-compatible error targets and accessible state.

09
Live preview
Component usage.wrn
<FileInput
  id="file-input-9"
  name="validatedField"
  label="Profile image"
  placeholder="Choose an image"
  accept="image/png,image/jpeg"
  required="true"
/>
Component events

Events

Public events declared by this component. Custom events bubble from the component root and expose state through event.detail.

@inputFires immediately as the component value changes.
@changeFires when the component value or selection changes.
@focusFires when the component receives focus.
@blurFires when focus leaves the component.
@selectFires when an item or option is selected.
@clearFires after the current value or collection is cleared.
@invalidFires when the component emits the invalid event.
Event listener.js
const component = document.querySelector('[data-wrn-events]')

component.addEventListener('input', (event) => {
  console.log(event.detail)
})
Component API

Props and configuration

All content and behavior shown above is supplied through these props and slots.

PropTypeDefaultRequired
sizestring"default"No
colorstring"primary"No
idstring""No
namestring""No
labelstring"File"No
hiddenLabelbooleanfalseNo
placeholderstring"Choose a file"No
valuestring""No
iconstring"icon-[lucide--upload]"No
iconPositionstring"start"No
acceptstring""No
multiplebooleanfalseNo
helperTextstring""No
cornerHintstring""No
errorstring""No
inlinebooleanfalseNo
variantstring"normal"No
readonlybooleanfalseNo
disabledbooleanfalseNo
requiredbooleanfalseNo
classstring""No
} }