Grafikart / CustomElement-DropFiles

Customized built-in element to add user interactions on a file input with multiple files as a progressive enhancement.
88 stars 18 forks source link

Customized built-in elements is="drop-files"

npm Build Status Build Status

The goal of this module is to add user interaction on a file input with multiple files as a progressive enhancement (the form still works if this JavaScript is disabled). Live demo

Usage

With npm

Install the package using npm or yarn

npm i @grafikart/drop-files-element
# or
yarn add @grafikart/drop-files-element

Then import it in your script

import '@grafikart/drop-files-element'

With unpkg.com

<script type="module" src="https://github.com/Grafikart/CustomElement-DropFiles/raw/master//unpkg.com/@grafikart/drop-files-element"></script>

Then use the custom element in your html using is="drop-files.

<input
        type="file"
        multiple
        name="files[]"
        label="Drop files here or click to upload."
        help="Upload files here and they won't be sent immediately"
        is="drop-files"
/>

Safari

Unfortunately safari doesn't support Custom built-in elements and does not have a constructor for DataTransfer (https://bugs.webkit.org/show_bug.cgi?id=170168) so this custom element won't display (native input will be displayed)

Customization

Attributes

Attribute Type Description
label string The label used as a bold text for the drop area
help string Help text used as a secondary text for the drop area

CSS Custom Properties

Property
--drop-border-color
--drop-border-color-hover

HTML Structure

This component doesn't use shadow dom so you can customize the style using CSS and overwrite the style already included inside this custom element.

Changelog

1.0.9

1.0.8

1.0.7

1.0.6

1.0.5

1.0.4