diff --git a/client/components/file-picker/README.md b/client/components/file-picker/README.md
new file mode 100644
index 00000000000000..34ddad3f033970
--- /dev/null
+++ b/client/components/file-picker/README.md
@@ -0,0 +1,28 @@
+FilePicker
+==========
+
+This component opens a native file picker when its children are clicked on.
+It is a very thin wrapper around
+[`component/file-picker`](https://github.com/component/file-picker)
+
+#### How to use:
+
+```js
+var FilePicker = require( 'components/file-picker' );
+
+render: function() {
+ return (
+
+ Select a few images!
+
+ );
+}
+```
+
+#### Props
+
+* `multiple`: (bool) Allow selecting multiple files (Defaults to `false`).
+* `directory`: (bool) Allow selecting of a directory (Defaults to `false`).
+* `accept`: (string) Content type MIME to accept. Wildcards (`*`) are supported.
+* `onPick`: (func) Function to call when the user has selected one or more files.
+
diff --git a/client/components/file-picker/docs/example.jsx b/client/components/file-picker/docs/example.jsx
new file mode 100644
index 00000000000000..1a4b8d88e37049
--- /dev/null
+++ b/client/components/file-picker/docs/example.jsx
@@ -0,0 +1,68 @@
+/**
+ * External dependencies
+ */
+import React from 'react';
+
+/**
+ * Internal dependencies
+ */
+import Card from 'components/card';
+import Button from 'components/button';
+import FilePicker from 'components/file-picker';
+
+export default class FilePickers extends React.Component {
+ constructor( props ) {
+ super( props );
+ }
+
+ onSingle( files ) {
+ alert( 'Selected file: ' + JSON.stringify( files[0].name ) );
+ }
+
+ onMulti( files ) {
+ alert( 'Selected files:\n' + [].slice.call( files ).map( ( file ) => {
+ return ' ' + JSON.stringify( file.name );
+ } ).join( '\n' ) );
+ }
+
+ render() {
+ return (
+
+
+
+
+
+ Select a single file:
+
+
+
+
+ Select a multiple files:
+
+
+
+
+ Select a directory:
+
+
+
+
+ Select an image file:
+
+
+
+
+ Any internal content works:
+
+ Select Fileā¦
+
+
+
+
+ );
+ }
+}
+
+FilePickers.displayName = 'FilePickers';
diff --git a/client/components/file-picker/index.jsx b/client/components/file-picker/index.jsx
new file mode 100644
index 00000000000000..52ebb4a038063c
--- /dev/null
+++ b/client/components/file-picker/index.jsx
@@ -0,0 +1,44 @@
+/** @ssr-ready **/
+
+/**
+ * External dependencies
+ */
+import React from 'react';
+import assign from 'lodash/assign';
+import noop from 'lodash/noop';
+import pick from 'component-file-picker';
+
+export default class FilePicker extends React.Component {
+ constructor( props ) {
+ super( props );
+ this.showPicker = this.showPicker.bind( this );
+ }
+
+ showPicker() {
+ pick( assign( {}, this.props ), this.props.onPick );
+ }
+
+ render() {
+ return (
+
+ { this.props.children }
+
+ );
+ }
+}
+
+FilePicker.displayName = 'FilePicker';
+
+FilePicker.propTypes = {
+ multiple: React.PropTypes.bool,
+ directory: React.PropTypes.bool,
+ accept: React.PropTypes.string,
+ onPick: React.PropTypes.func
+};
+
+FilePicker.defaultProps = {
+ multiple: false,
+ directory: false,
+ accept: null,
+ onPick: noop
+};
diff --git a/client/devdocs/design/index.jsx b/client/devdocs/design/index.jsx
index 9ad032101d7f0d..882cf6cd3c5d4a 100644
--- a/client/devdocs/design/index.jsx
+++ b/client/devdocs/design/index.jsx
@@ -48,6 +48,7 @@ import Version from 'components/version/docs/example';
import BulkSelect from 'components/bulk-select/docs/example';
import ExternalLink from 'components/external-link/docs/example';
import FeatureGate from 'components/feature-example/docs/example';
+import FilePickers from 'components/file-picker/docs/example';
import Collection from 'devdocs/design/search-collection';
export default React.createClass( {
@@ -94,6 +95,7 @@ export default React.createClass( {
+
diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json
index 551df088433a89..fc6a6d529de7ad 100644
--- a/npm-shrinkwrap.json
+++ b/npm-shrinkwrap.json
@@ -8553,6 +8553,14 @@
},
"semver": {
"version": "5.1.0"
+ },
+ "component-file-picker": {
+ "version": "0.2.1",
+ "dependencies": {
+ "component-event": {
+ "version": "0.1.4"
+ }
+ }
}
}
}
diff --git a/package.json b/package.json
index 4c38c43e585767..459ed8dfa7901b 100644
--- a/package.json
+++ b/package.json
@@ -28,6 +28,7 @@
"commander": "2.3.0",
"component-classes": "1.2.1",
"component-closest": "0.1.4",
+ "component-file-picker": "0.2.1",
"component-tip": "2.5.0",
"component-uid": "0.0.2",
"cookie": "0.1.2",