import FieldGrid from './field-grid' import { useState } from 'react' import { ColorArea, parseColor } from '@react-spectrum/s2/ColorArea' import { ColorField } from '@react-spectrum/s2/ColorField' import { ColorSlider } from '@react-spectrum/s2/ColorSlider' import { ColorWheel } from '@react-spectrum/s2/ColorWheel' import { ColorSwatch, ColorSwatchPicker } from '@react-spectrum/s2/ColorSwatchPicker' import { DropZone } from '@react-spectrum/s2/DropZone' import { FileTrigger } from '@react-spectrum/s2/FileTrigger' import { Button } from '@react-spectrum/s2/Button' import styles from './form-examples.module.css' export default function ColorFileFields({ disabled }: { disabled: boolean }) { const [color, setColor] = useState(() => parseColor('hsl(265, 75%, 60%)')) const [files, setFiles] = useState([]) const [fileError, setFileError] = useState('') return ( <>

颜色选择

输入框、色板、色轮和滑块共享同一个颜色值。

{ if (next) setColor(next) }} />
预设色板
二维颜色面板
色轮
{color.toString('hexa')}

文件选择与拖放

!disabled && types.has('Files') ? 'copy' : 'cancel'} onDrop={async (event) => { try { const next = await Promise.all(event.items.filter((item) => item.kind === 'file').map((item) => item.getFile())) setFiles(next) setFileError('') } catch { setFileError('无法读取文件,请重新选择。') } }}>

将文件拖放到这里,或从设备中选择。

{ if (selected) { setFiles(Array.from(selected)); setFileError('') } }}>

仅在本页预览文件信息,不上传。

{fileError &&

{fileError}

}
{files.length ?
    {files.map((file, index) =>
  • {file.name} · {Math.ceil(file.size / 1024)} KB
  • )}
:

尚未选择文件。

}
{files.length > 0 && } ({ name, size, type })))} />
) }