انتقل إلى المحتوى
TopClass UI

رفع الملفات

منطقة إفلات هي حقل ملفات حقيقي، فتعمل وتُرسل قبل تشغيل أي سكربت. والملفات المختارة تظهر في قائمة.

client - الحجم لم يُقَس بعد

رفع الملفات

client - الحجم لم يُقَس بعد

منطقة إفلات هي حقل ملفات حقيقي، فتعمل وتُرسل قبل تشغيل أي سكربت. والملفات المختارة تظهر في قائمة.

تثبيت

جرّبه

maxFiles
maxSize
invalid
visibleRows

الشيفرة

file-upload.tsx
import { FileUpload } from 'topclassui/file-upload'

<div className="grid gap-1.5">
  <label htmlFor="file-upload-playground" className="text-sm font-medium text-body">Attachment</label>
  <FileUpload id="file-upload-playground" name="attachment" accept=".png,.jpg,.jpeg,.pdf">
    PNG, JPG or PDF
  </FileUpload>
</div>

maxSize بالبايت، ويُتحقق منه في المتصفح فقط: تحقّق منه مجددًا في الإجراء.

كل الحالات، بدون تمرير الفأرة

حالتان
أفلت الملفات هناتصفّحA file is required
    أفلت الملفات هناتصفّحUploads are closed

      أو استورده من الحزمة

      topclassui/file-upload
      import { FileUpload } from 'topclassui/file-upload'

      ثبّت مرة واحدة:npm i topclassui@beta zod

      أمثلة

      • العناصر الأبناء هي التلميح داخل المنطقة، مثل «PDF أو PNG، حتى 5 ميغابايت»، وهي تصف الحقل.
      • maxFiles (من 1 إلى 100، والافتراضي 1) هو وحده ما يقرر إن كان الحقل يقبل عدة ملفات دفعة واحدة؛ ومع 1 يحل الملف الجديد محل القديم.
      • maxSize يرفض الملف الأكبر لأنه كبير جدًا؛ ويُعلن كل رفض، ولا يُرسل الملف المرفوض أبدًا.
      • لا يستطيع الحقل ضبط encType لنموذجه: النموذج ذو الإجراء النصي يحتاج multipart/form-data، وإلا أرسل أسماء الملفات فقط.
      • تتراكم القائمة عبر الاختيارات والإفلاتات، وتعرض visibleRows صفوف قبل التمرير. وonValueChange يستقبل الملفات المحفوظة بعد كل تغيير.
      basic
      أفلت الملفات هناتصفّحPNG, JPG or PDF, up to 10 MB
        multiple
        أفلت الملفات هناتصفّحPDF or PNG, up to 5 files
          in-field
          أفلت الملفات هناتصفّحDrop them here, 5 MB each
            PDF or PNG, up to 5 files
            form
            أفلت الملفات هناتصفّحUp to 5 files
              بالعربية، من اليمين إلى اليسار
              أفلت الملفات هناتصفّحPDF أو PNG، حتى 5 ملفات

                الخصائص

                خصائص FileUpload
                الخاصيةالنوعالافتراضيالحدودالوصف
                aria-labelstring--The name read out when no visible label names the control.
                aria-labelledbystring--The id of the visible text that names the control.
                idstring--The id a <label htmlFor> points at.
                childrenReactNode--The hint inside the zone, such as "PDF or PNG, up to 5 MB": it describes the input; a link in it takes its own click.
                classNamestring--On the root, merged last.
                invalidbooleanfalse-Marks the files as wrong: sets aria-invalid on the input, and the line of the zone turns to danger and thickens.
                maxFilesinteger, min 1, max 1001min 1, max 100How many files the list keeps, clamped to 1 to 100; above 1 the input takes several at once.
                maxSizeinteger, min 1, max 1073741824010737418240min 1, max 10737418240The largest file accepted, in bytes, clamped to 1 to 10 GiB; checked in the browser only.
                onValueChange((files: readonly File[]) => void)--The accepted files after each pick, drop or remove. Client-only.
                refRef<HTMLDivElement>--The root element, a <div>.
                styleCSSProperties--On the root.
                visibleRowsnumber, min 1, max 207min 1, max 20Rows the list shows before it scrolls, clamped; left out, the --tc-list-rows knob applies.

                لوحة المفاتيح وإمكانية الوصول

                لوحة مفاتيح FileUpload
                المفاتيحما يفعله
                Tabيصل إلى حقل الملفات، فترسم المنطقة حلقة التركيز؛ ثم إلى كل زر إزالة.
                EnterSpaceيفتحان منتقي الملفات؛ وعلى زر إزالة، يزيلان ذلك الملف.
                • الاسم مطلوب: id لتسمية <label htmlFor>، أو aria-label، أو aria-labelledby.
                • لكل ملف زر إزالة يحمل اسمه، مثل «إزالة brief.pdf»؛ وبعد الإزالة ينتقل التركيز إلى الملف التالي، أو السابق، أو إلى الحقل.
                • سحب الملفات يميّز المنطقة بخط أساسي متصل؛ وفي وضع الألوان القسرية يصبح الخط Highlight. وinvalid يحوّله إلى لون الخطر.

                من اليمين إلى اليسار

                تتوسط المنطقة، وتنعكس الصفوف، ويأخذ كل اسم ملف اتجاهه الخاص. وتُكتب الأحجام بأرقام القارئ.

                الخادم والمتصفح

                مكوّن متصفح: يُعرض على الخادم ثم يُرطَّب في المتصفح.

                الملفات: index.tsx, client.tsx.

                على الشارة: client - الحجم لم يُقَس بعد.