Переиспользуемый React-компонент для загрузки и предварительного просмотра изображений. Построен с React, Vite, MUI и Emotion — обеспечивает современный, доступный и легко интегрируемый виджет для работы с картинками.
- React 18
- Vite
- MUI (Material UI)
- Emotion (
@emotion/react&@emotion/styled) - Storybook
- Мгновенный превью выбранного изображения
- Валидация типа файла (только изображения)
- Валидация размера файла (не более 5 МБ)
- Удаление/сброс выбранного файла
- Пользовательская надпись (label) и стилизация
- Доступность (ARIA) и адаптивная вёрстка
- Лёгкая интеграция в любые формы
Попробовать компонент в действии можно здесь:
https://elka57.github.io/image-upload-widget/
- Клонируйте репозиторий и перейдите в папку:
git clone https://github.com/Elka57/image-upload-widget.git
cd image-upload-widget- Установите зависимости:
npm install- Установите peer-зависимости для MUI:
npm install @mui/material @mui/icons-material @emotion/react @emotion/styledЧтобы увидеть компонент в минимальном приложении через Vite:
npm run devОткройте в браузере: http://localhost:5173
Storybook позволяет интерактивно исследовать состояния компонента:
npm run storybookОткройте в браузере: http://localhost:6006
Чтобы собрать статичную версию Storybook:
npm run build-storybookИмпортируйте компонент и вставьте в вашу форму:
import React, { useState } from "react";
import ImageUpload from "./src/ImageUpload";
function ProfileForm() {
const [imageData, setImageData] = useState(null);
return (
<form>
<ImageUpload
label="Фото профиля"
value={imageData}
onChange={setImageData}
required
/>
{/* Другие поля формы… */}
</form>
);
}Поле value должно быть либо null, либо объектом:
{
file: File, // выбранный файл
previewUrl: string, // URL.createObjectURL(file)
}| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
label |
string |
"" |
Текстовая надпись (лейбл) над областью предпросмотра |
value |
{ file: File; previewUrl: string } | null |
null |
Текущее состояние: выбранный файл и его URL для предпросмотра |
onChange |
(value: { file: File; previewUrl: string } | null) |
() => {} |
Функция-обработчик при выборе или удалении изображения |
required |
boolean |
false |
Если true, добавляет HTML-валидацию required к input |
Этот проект распространяется под лицензией MIT. Подробности см. в файле LICENSE.
Компонент использует сторонние open-source библиотеки, каждая из которых распространяется под лицензией MIT:
Все эти технологии свободны для использования в коммерческих и некоммерческих проектах.
Если вы интегрируете ImageUpload Widget в свой продукт, убедитесь, что соблюдаете условия соответствующих лицензий (MIT).

