1 звезда на GitHub = 1 новый компонент.

Поставить звезду
Формыinputfile

Simple File Input

Лаконичное поле выбора файла с настраиваемой кнопкой обзора.

Живое превью

Использование

Скопируйте и вставьте этот код в ваш React-компонент:

tsx
import { SimpleFileInput } from 'react-component-kit-ui/forms';

<SimpleFileInput id="avatar" label="Upload Profile Picture" accept="image/*" />

Ручная установка

Если вы не используете пакет npm, создайте файл и вставьте следующий код: src/components/SimpleFileInput.tsx + SimpleFileInput.css:

SimpleFileInput.tsx
'use client';

import './SimpleFileInput.css';

/**
 * SimpleFileInput — A minimalist file upload button that masks the native browser input.
 * 
 * @param {string} label - The text displayed on the button. Default is "Choose File".
 * @param {string} id - HTML ID for the file input.
 * @param {string} name - HTML name binding.
 * @param {string} accept - Allowed file formats.
 */
export interface SimpleFileInputProps {
  label?: string;
  id: string;
  name?: string;
  accept?: string;
}

export function SimpleFileInput({ label = "Choose File", id, name, accept }: SimpleFileInputProps) {
  return (
    <>
      <label className="file-btn" htmlFor={id} data-rk-908bfa="">
        <input type="file" id={id} name={name} accept={accept} className="file-btn__input" data-rk-908bfa="" />
        <span className="file-btn__label" data-rk-908bfa="">{label}</span>
      </label>
    </>
  );
}

export default SimpleFileInput;
SimpleFileInput.css
/* SimpleFileInput — ported from astro-component-kit (forms/SimpleFileInput.astro) */

.file-btn:where([data-rk-908bfa]) { 
  position: relative; 
  overflow: hidden; 
  display: inline-block; 
  cursor: pointer; 
}

.file-btn__input:where([data-rk-908bfa]) { 
  position: absolute; 
  left: 0; top: 0; 
  width: 100%; height: 100%;
  opacity: 0; cursor: pointer; 
  font-size: 0;
}

.file-btn__label:where([data-rk-908bfa]) { 
  background: var(--c-primary, #6366f1); 
  color: #fff; 
  padding: 0.8rem 1.6rem; 
  border-radius: var(--r-md, 10px); 
  font-weight: 700; 
  display: inline-block; 
  transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
  box-shadow: 0 4px 15px rgba(99, 102, 241, 0.2);
  font-size: 0.95rem;
}

.file-btn:hover:where([data-rk-908bfa]) .file-btn__label:where([data-rk-908bfa]) { 
  filter: brightness(1.1);
  transform: translateY(-2px);
  box-shadow: 0 6px 20px rgba(99, 102, 241, 0.3);
}

.file-btn:active:where([data-rk-908bfa]) .file-btn__label:where([data-rk-908bfa]) {
  transform: translateY(0);
}

Краткая информация

Категория
Формы
Имя файла
SimpleFileInput.tsx
Зависимости
Нет — чистый React + CSS
Теги
inputfile