diff --git a/src/FormField.php b/src/FormField.php
index 8b22235..31309f2 100644
--- a/src/FormField.php
+++ b/src/FormField.php
@@ -397,6 +397,322 @@ public function file($name, $options = [])
return $this->text($name, $options);
}
+ /**
+ * Drop file input field with drag-and-drop and clipboard paste functionality.
+ *
+ * @param string $name The file field name and id attribute.
+ * @param array $options Additional attribute for the file input.
+ * @return string Generated drop file input form field.
+ */
+ public function fileDrop($name, $options = [])
+ {
+ $requiredClass = (isset($options['required']) && $options['required'] == true) ? 'required ' : '';
+ $hasError = $this->errorBag->has($this->formatArrayName($name));
+ $hasErrorClass = $hasError ? 'has-error' : '';
+ $htmlForm = '
';
+
+ // Add the JavaScript for drag-and-drop and clipboard functionality
+ $htmlForm .= $this->getFileDropScript($dropzoneId, $fileInputId, $previewId, $accept, $multiple);
+
+ $htmlForm .= $this->getInfoTextLine($options);
+
+ $htmlForm .= $this->errorBag->first($this->formatArrayName($name), ':message');
+
+ $htmlForm .= '';
+
+ return $htmlForm;
+ }
+
+ /**
+ * Generate JavaScript for drop file input functionality.
+ *
+ * @param string $dropzoneId The dropzone element ID.
+ * @param string $fileInputId The file input element ID.
+ * @param string $previewId The preview element ID.
+ * @param string $accept File accept types.
+ * @param string $multiple Multiple files flag.
+ * @return string JavaScript code.
+ */
+ private function getFileDropScript($dropzoneId, $fileInputId, $previewId, $accept, $multiple)
+ {
+ $script = '';
+
+ return $script;
+ }
+
/**
* One form which only have "one button" and "hidden fields".
* This is suitable for, e.g. set status, delete button,
diff --git a/tests/Fields/FileDropTest.php b/tests/Fields/FileDropTest.php
new file mode 100644
index 0000000..59ab7d5
--- /dev/null
+++ b/tests/Fields/FileDropTest.php
@@ -0,0 +1,181 @@
+formField->fileDrop('document');
+
+ $this->assertTrue(str_contains($result, 'file-dropzone'));
+ $this->assertTrue(str_contains($result, 'Drop files here or click to browse'));
+ $this->assertTrue(str_contains($result, 'Or paste images from clipboard'));
+ $this->assertTrue(str_contains($result, 'type="file"'));
+ $this->assertTrue(str_contains($result, 'name="document"'));
+ $this->assertTrue(str_contains($result, 'id="file-input-document"'));
+ $this->assertTrue(str_contains($result, '