FileInput

Capture file input from user.

Import

import { FileInput } from '@tidbcloud/uikit'

Usage

import { FileInput } from '@tidbcloud/uikit'
 
function Demo() {
  return <FileInput label="Upload files" placeholder="Upload files" />
}

Multiple files

Set multiple prop to allow picking multiple files:

import { FileInput } from '@tidbcloud/uikit'
 
function Demo() {
  return <FileInput label="Upload files" placeholder="Upload files" multiple />
}

Accept

Use accept prop to restrict file types:

import { FileInput } from '@tidbcloud/uikit'
 
function Demo() {
  return <FileInput accept="image/png,image/jpeg" label="Upload images" placeholder="Upload images" />
}

Clearable

Set clearable prop to show clear button:

import { FileInput } from '@tidbcloud/uikit'
 
function Demo() {
  return <FileInput clearable label="Upload files" placeholder="Upload files" />
}

Custom value component

Use valueComponent to customize how selected files are displayed:

import { FileInput, FileInputProps, Pill } from '@tidbcloud/uikit'
 
const ValueComponent: FileInputProps['valueComponent'] = ({ value }) => {
  if (value === null) {
    return null
  }
 
  if (Array.isArray(value)) {
    return (
      <Pill.Group>
        {value.map((file, index) => (
          <Pill key={index}>{file.name}</Pill>
        ))}
      </Pill.Group>
    )
  }
 
  return <Pill>{value.name}</Pill>
}
 
function Demo() {
  return <FileInput label="Upload files" placeholder="Upload files" multiple valueComponent={ValueComponent} />
}

Left and right sections

import { FileInput, rem } from '@tidbcloud/uikit'
import { IconFileCv } from '@tabler/icons-react'
 
function Demo() {
  const icon = <IconFileCv style={{ width: rem(18), height: rem(18) }} stroke={1.5} />
 
  return (
    <>
      <FileInput leftSection={icon} label="With left section" placeholder="With left section" />
      <FileInput rightSection={icon} label="With right section" placeholder="With right section" mt="md" />
    </>
  )
}

Error state

import { FileInput } from '@tidbcloud/uikit'
 
function Demo() {
  return (
    <>
      <FileInput label="Boolean error" placeholder="Boolean error" error />
      <FileInput mt="md" label="With error message" placeholder="With error message" error="Invalid file" />
    </>
  )
}

Disabled state

import { FileInput } from '@tidbcloud/uikit'
 
function Demo() {
  return <FileInput disabled label="Disabled" placeholder="Disabled" />
}

Props

PropTypeDefaultDescription
valueFile | File[] | null-Controlled value
defaultValueFile | File[] | null-Default value
onChange(value: File | File[] | null) => void-Change callback
acceptstring-Accepted file types
multiplebooleanfalseAllow multiple files
clearablebooleanfalseShow clear button
valueComponentComponentType-Custom value display
leftSectionReactNode-Left section content
rightSectionReactNode-Right section content
labelReactNode-Input label
descriptionReactNode-Input description
errorReactNode-Error message
placeholderstring-Placeholder text
disabledbooleanfalseDisable input
requiredbooleanfalseRequired field
radiusMantineRadius-Border radius
sizeMantineSize’sm’Input size
variant’default’ | ‘filled’ | ‘unstyled''default’Input variant