diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..f319765
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,10 @@
+# Build files
+.tmp
+bower_components
+node_modules
+coverage
+.sass-cache
+.idea
+.env
+npm-debug.log
+.DS_Store
\ No newline at end of file
diff --git a/.nvmrc b/.nvmrc
new file mode 100644
index 0000000..7cbea07
--- /dev/null
+++ b/.nvmrc
@@ -0,0 +1 @@
+5.2.0
\ No newline at end of file
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..9de147f
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,20 @@
+language: node_js
+node_js:
+- 5.2.0
+before_install:
+- npm install
+sudo: false
+before_deploy:
+- npm-prepublish --verbose
+deploy:
+- provider: npm
+ email: "$NPM_EMAIL"
+ api_key: "$NPM_API_KEY"
+ on:
+ tags: true
+env:
+ global:
+ # NPM_EMAIL
+ - secure: "XVgfIy4vm0kOX+saefkpE98aHSzvSk0S9OydHC2/TfNnnfJfrdySOPyuVhfgtap/pKd9R2VtofSCIAy1bRNeE3wsFOpXNv/V/wQQ40cyJGQRL6uCJDkc7yvYnhCh5ZD6Jh2kJzB2FcT8V18+u12Azftbxz+SM0/wk4tgw5akRtUGVEZ01PaivY4VIESJ2qBJZiXeKfMCtCDi/a3OnUMUA6b8tbP+n35zl6JZGJtJhwcYqliyxzgnIR5bCDqPcab32cHsdcb7E8+Q/Co8vYc2ZVI6aQ/Oe+Cd2ON+WyTHZoWfKlKnXuYJ3DUnUxaDRTgfz+AdFZHwvlwfuDLexoTOS5Lps/aNh5/4kt7LwJyj3N4kxW/XgoZzJvn6foIYCqd6RnvTp05PVTUWiLKQwiMN9QxTLPhVv0RBqo+N9sDflq4eORv9WlsRF3XawZIr8GSqLiu7WM8w9wzdn66V94j4qO+gHQH/U3ck4z4Bie+QeDeOc8oYckbH5PaUcoRc3vEnGy9YKMwZ0RwJKZHXLE+g4xbDzJfhovC6835Hb6Sj81muSz4E8WVAsnyEtLs+JaWHA90qpfwsNB11aZHB7YO0HrHnMKA9P1F6A8eRagj6Ynhbl5Ko4Agtz0bqHVhyWi9bcF1V8WneuJSreC9naoWVvLYoyKc4UY/Qt7j7mdynm7w="
+ # NPM_API_KEY
+ - secure: "S9r5O41PS0+95/N5CTr8Euf5GISLmE8E6Rn9UWhuigjfuiquU3D7MWtl+v3Nyog7HH4k7wP13yg7UtmXekB9T5axSg3ViXiFAedGH7breS0nl0CCUCFCJdNiBDxiMTCDpI2C0KWKvTFdU1aCXJfRhVfDQE1kjJksdQ1BQvr0rLF5OIjh0JgRl6lmR9gMI3kY9hB/m6DRbvjonVe5T9yoWGKWPDODdkLT3GXW7hAQABluX01ARodHwvo5t/5dfIVjm3A2TKt7UHpR33ZM18zZ6qaJKsHosoWZ7JxuN4FrUvfxC4G/bXQML4a8MG566qV2Jr8cl6CYWY9sVyFWwgncbJdJEsYXongr6Mm41wREX0efXh0Fy9rDSGmXxVJSqY33MyYXGNQHzQ38V+dNascQ2V4Sk++3kfGGcDQ5s3yQpFdYXTORBra+O/eYwP8midJlLSJLD+vmrzTg/NWiFJeCvr0mqOMuQ+1Rwyf7xx6Qa2vhq8Bb8qEZgoPlefgHl5ivUzHT7JFiCcuigyeAGuOdR8Rdi6CEvmRpEy8KDvc/VtdBEXRCx2MZ/SGT4Q0h3Q4bdbeFDaXz8slLqt9uKhzHI5e+1CU5csHwpzkXrnsX/JZWYZtCT+3QopMwZYuDUNYF0hIJNCps6NCODrU2MulokcbTxUDMSkA8GQlNriGgF/0="
diff --git a/LICENSE.md b/LICENSE.md
new file mode 100644
index 0000000..c2001b2
--- /dev/null
+++ b/LICENSE.md
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015 Appirio
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
\ No newline at end of file
diff --git a/README.md b/README.md
index 28170cf..a5e4694 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,17 @@
-# file-uploader
-File uploader component built in ReactJS
+# Appirio File Uploader
+
+## Using the repo in your app
+
+## Install
+
+```shell
+npm install appirio-tech-file-uploader
+```
+
+## Developing
+
+```shell
+nvm use
+npm install
+npm run example
+```
diff --git a/components/ExampleApp/ExampleApp.cjsx b/components/ExampleApp/ExampleApp.cjsx
new file mode 100644
index 0000000..85e31fe
--- /dev/null
+++ b/components/ExampleApp/ExampleApp.cjsx
@@ -0,0 +1,17 @@
+require './ExampleApp.scss'
+
+React = require 'react'
+ExampleNav = require '../ExampleNav/ExampleNav.cjsx'
+
+component =
+ render: ->
+
+ {this.props.children}
+
+
+
+
+
+
+module.exports = React.createClass component
+
diff --git a/components/ExampleApp/ExampleApp.scss b/components/ExampleApp/ExampleApp.scss
new file mode 100644
index 0000000..703006c
--- /dev/null
+++ b/components/ExampleApp/ExampleApp.scss
@@ -0,0 +1,18 @@
+@import "work/work-styles";
+
+body {
+ background-color: $grey-lighter;
+ padding: 15px;
+
+ .invisible {
+ opacity: .3;
+ visibility: visible;
+ }
+
+ h1 {
+ margin : 80px 0 40px 0;
+ text-align : center;
+ padding-bottom: 10px;
+ border-bottom : 1px solid $grey-light;
+ }
+}
diff --git a/components/ExampleNav/ExampleNav.cjsx b/components/ExampleNav/ExampleNav.cjsx
new file mode 100644
index 0000000..ec1a88c
--- /dev/null
+++ b/components/ExampleNav/ExampleNav.cjsx
@@ -0,0 +1,23 @@
+'use strict'
+
+require './ExampleNav.scss'
+
+React = require 'react'
+classNames = require 'classnames'
+
+{ Link } = require 'react-router'
+
+component = ({data, state}) ->
+
+
+ FileUploaderContainer
+
+ UploadedFile
+
+ UploadedFiles
+
+ FileUploader
+
+
+
+module.exports = component
\ No newline at end of file
diff --git a/components/ExampleNav/ExampleNav.scss b/components/ExampleNav/ExampleNav.scss
new file mode 100644
index 0000000..7f6e441
--- /dev/null
+++ b/components/ExampleNav/ExampleNav.scss
@@ -0,0 +1,15 @@
+.ExampleNav {
+ position: fixed;
+ bottom: 0;
+ background-color: #fff;
+ opacity: 0.6;
+
+ li {
+ display: inline-block;
+ }
+
+ a {
+ margin: 10px;
+ display: inline-block;
+ }
+}
\ No newline at end of file
diff --git a/components/FileUploader/FileUploader.cjsx b/components/FileUploader/FileUploader.cjsx
new file mode 100644
index 0000000..521bd56
--- /dev/null
+++ b/components/FileUploader/FileUploader.cjsx
@@ -0,0 +1,27 @@
+'use strict'
+
+require './FileUploaderStyles'
+
+React = require 'react'
+UploadedFilesContainer = require '../UploadedFiles/UploadedFilesContainer'
+Dropzone = require 'react-dropzone'
+Loader = require 'appirio-tech-ng-ui-components/components/Loader/Loader.cjsx'
+
+FileUploader = ({ multiple, onChange, loading}) ->
+
+ {
+ if loading
+
+ }
+
+
+
+
+ Choose files to upload.
+
+
+
+
+module.exports = FileUploader
+
+
diff --git a/components/FileUploader/FileUploaderContainer.cjsx b/components/FileUploader/FileUploaderContainer.cjsx
new file mode 100644
index 0000000..8303eba
--- /dev/null
+++ b/components/FileUploader/FileUploaderContainer.cjsx
@@ -0,0 +1,38 @@
+'use strict'
+
+React = require 'react'
+{ connect } = require 'react-redux'
+{ uploadFile } = require 'appirio-tech-client-app-layer'
+classnames = require 'classnames'
+FileUploader = require './FileUploader'
+
+{ createClass, createElement, PropTypes } = React
+
+mapStateToProps = (state) ->
+ { id, assetType, category, loading } = state?.fileUploader
+
+ { id, assetType, category, loading }
+
+container =
+ propTypes:
+ id : PropTypes.string.isRequired
+ assetType: PropTypes.string.isRequired
+ category : PropTypes.string.isRequired
+ dispatch : PropTypes.func.isRequired
+ loading : PropTypes.bool
+
+ onChange: (files) ->
+ { dispatch, id, assetType, category } = this.props
+
+ files.map (file) ->
+ dispatch uploadFile({ id, assetType, category, file })
+
+ render: ->
+ { onChange } = this
+
+ { loading } = this.props
+
+ createElement FileUploader, { onChange, loading }
+
+module.exports = connect(mapStateToProps)(createClass(container))
+
diff --git a/components/FileUploader/FileUploaderContainerExamples.cjsx b/components/FileUploader/FileUploaderContainerExamples.cjsx
new file mode 100644
index 0000000..cfc09e5
--- /dev/null
+++ b/components/FileUploader/FileUploaderContainerExamples.cjsx
@@ -0,0 +1,13 @@
+'use strict'
+
+FileUploaderContainer = require './FileUploaderContainer'
+React = require 'react'
+
+FileUploaderContainerExamples = ->
+
+
Default
+
+
+
+
+module.exports = FileUploaderContainerExamples
diff --git a/components/FileUploader/FileUploaderExamples.cjsx b/components/FileUploader/FileUploaderExamples.cjsx
new file mode 100644
index 0000000..8f13193
--- /dev/null
+++ b/components/FileUploader/FileUploaderExamples.cjsx
@@ -0,0 +1,17 @@
+'use strict'
+
+FileUploader = require './FileUploader'
+React = require 'react'
+
+FileUploaderExamples = ->
+
+
Default
+
+
+
+ multiple is true
+
+
+
+
+module.exports = FileUploaderExamples
diff --git a/components/FileUploader/FileUploaderStyles.scss b/components/FileUploader/FileUploaderStyles.scss
new file mode 100644
index 0000000..01174bf
--- /dev/null
+++ b/components/FileUploader/FileUploaderStyles.scss
@@ -0,0 +1,21 @@
+@import "work/work-includes";
+
+.FileUploader {
+ position: relative;
+
+ .Loader {
+ z-index: 1;
+ }
+
+ .UploadedFiles {
+ margin-bottom: 20px;
+ }
+
+ .Dropzone {
+ display: inline-block;
+ }
+
+ .dropzone-container {
+ text-align: center;
+ }
+}
\ No newline at end of file
diff --git a/components/Router/Router.cjsx b/components/Router/Router.cjsx
new file mode 100644
index 0000000..227a6d6
--- /dev/null
+++ b/components/Router/Router.cjsx
@@ -0,0 +1,64 @@
+'use strict'
+
+React = require 'react'
+{ Provider } = require 'react-redux'
+configureStore = require('appirio-tech-client-app-layer').default
+ExampleApp = require '../ExampleApp/ExampleApp.cjsx'
+Router = require '../Router/Router.cjsx'
+UploadedFileExamples = require '../UploadedFile/UploadedFileExamples.cjsx'
+UploadedFilesExamples = require '../UploadedFiles/UploadedFilesExamples.cjsx'
+FileUploaderExamples = require '../FileUploader/FileUploaderExamples.cjsx'
+FileUploaderContainerExamples = require '../FileUploader/FileUploaderContainerExamples.cjsx'
+
+{ Router, Route, Link, IndexRoute, browserHistory } = require 'react-router'
+
+store = configureStore
+ attachments:
+ 'mockDataInRouter.jpg':
+ assetType : 'specs'
+ progress : 33
+ category :'work'
+ fileName : 'mockDataInRouter.jpg'
+ filePath : 'some/unique/path'
+ fileType : 'image/jpeg'
+ id : 'workid'
+ 'specsworkworkidmockDataInRouterError.jpg':
+ assetType : 'specs'
+ progress : 33
+ category :'work'
+ fileName : 'mockDataInRouterError.jpg'
+ filePath : 'some/unique/path3'
+ fileType : 'image/jpeg'
+ id : 'workid'
+ errors : []
+ 'mockDataInRouter2.jpg':
+ assetType : 'specs'
+ progress : 33
+ category :'work'
+ fileName : 'mockDataInRouter2.jpg'
+ filePath : 'some/unique/path2'
+ fileType : 'image/jpeg'
+ id : 'workid'
+ preview : 'data:image/gif;base64,R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/XBs/fNwfjZ0frl3/zy7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABAALAAAAAAQABAAAAVVICSOZGlCQAosJ6mu7fiyZeKqNKToQGDsM8hBADgUXoGAiqhSvp5QAnQKGIgUhwFUYLCVDFCrKUE1lBavAViFIDlTImbKC5Gm2hB0SlBCBMQiB0UjIQA7'
+ fileUploader:
+ id : 'workid' # has to match schemas
+ assetType: 'specs' # has to match schemas
+ category : 'work' # has to match schemas
+
+component = ->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+module.exports = component
\ No newline at end of file
diff --git a/components/UploadedFile/UploadedFile.cjsx b/components/UploadedFile/UploadedFile.cjsx
new file mode 100644
index 0000000..fe94dba
--- /dev/null
+++ b/components/UploadedFile/UploadedFile.cjsx
@@ -0,0 +1,53 @@
+'use strict'
+
+require './UploadedFileStyles'
+
+React = require 'react'
+classnames = require 'classnames'
+
+UploadedFile = ({ status, preview, progress, fileName, enableCaptions, captions, onDelete }) ->
+
+
+ {
+ if status == 'failed'
+
+
+
+
+ retry
+
+
+ else
+ if preview
+
+ else
+
+ }
+ {
+ if status == 'uploading'
+
+ }
+
+
+
+
{ fileName }
+ {
+ unless status == 'uploading'
+
+
+
+ }
+
+
+ {
+ if enableCaptions
+
+ }
+
+
+module.exports = UploadedFile
+
diff --git a/components/UploadedFile/UploadedFileExamples.cjsx b/components/UploadedFile/UploadedFileExamples.cjsx
new file mode 100644
index 0000000..e4661f6
--- /dev/null
+++ b/components/UploadedFile/UploadedFileExamples.cjsx
@@ -0,0 +1,43 @@
+'use strict'
+
+UploadedFile = require './UploadedFile'
+React = require 'react'
+preview = 'data:image/gif;base64,R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/XBs/fNwfjZ0frl3/zy7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABAALAAAAAAQABAAAAVVICSOZGlCQAosJ6mu7fiyZeKqNKToQGDsM8hBADgUXoGAiqhSvp5QAnQKGIgUhwFUYLCVDFCrKUE1lBavAViFIDlTImbKC5Gm2hB0SlBCBMQiB0UjIQA7'
+
+UploadedFileExamples = ->
+
+
Default
+
+
+
+ File failed to upload
+
+
+
+ File with image src is uploading at 50 progress
+
+
+
+ File is uploading at 50 progress
+
+
+
+ Image was uploaded, enable captions
+
+
+
+ Non-Image was uploaded
+
+
+
+
+module.exports = UploadedFileExamples
diff --git a/components/UploadedFile/UploadedFileStyles.scss b/components/UploadedFile/UploadedFileStyles.scss
new file mode 100644
index 0000000..bd95970
--- /dev/null
+++ b/components/UploadedFile/UploadedFileStyles.scss
@@ -0,0 +1,73 @@
+@import "work/work-includes";
+
+.UploadedFile {
+ width: 203px;
+
+ main {
+ background-color: $grey-lighter;
+ height : 135px;
+ position : relative;
+
+ .document-icon {
+ width : 35px;
+ height: 35px;
+ }
+
+ .preview {
+ height : 135px;
+ width : 100%;
+ background-size: cover;
+ }
+ }
+
+ .cross {
+ height: 10px;
+ width: 10px;
+ }
+
+ .file-name {
+ margin-top: 5px;
+
+ p {
+ @include ellipsis(180px);
+
+ font-weight: 400;
+ }
+ }
+
+ .progress {
+ position : absolute;
+ width : 100%;
+ left : 0;
+ top : 100px;
+ padding : 13px 20px 7px 20px;
+ background-color: rgba(255,255,255,0.7);
+ }
+
+ progress {
+ width: 100%;
+ }
+
+ .failed {
+ button {
+ margin-top: 10px;
+ }
+
+ img {
+ opacity: .60;
+ }
+ }
+
+ textarea {
+ margin-top : 5px;
+ width : 100%;
+ height : 82px;
+ border-width: 0;
+ color : $text-color-lighter;
+
+ &:focus {
+ border-width: 1px;
+ color: $text-color;
+ }
+ }
+}
diff --git a/components/UploadedFile/example.txt b/components/UploadedFile/example.txt
new file mode 100644
index 0000000..70ad263
--- /dev/null
+++ b/components/UploadedFile/example.txt
@@ -0,0 +1 @@
+hello world!
\ No newline at end of file
diff --git a/components/UploadedFile/icon-alert-red.svg b/components/UploadedFile/icon-alert-red.svg
new file mode 100644
index 0000000..796d9ed
--- /dev/null
+++ b/components/UploadedFile/icon-alert-red.svg
@@ -0,0 +1,26 @@
+
+
+
+
+
+icon-alert-red
+Created with Sketch.
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/components/UploadedFile/icon-document.svg b/components/UploadedFile/icon-document.svg
new file mode 100644
index 0000000..994741e
--- /dev/null
+++ b/components/UploadedFile/icon-document.svg
@@ -0,0 +1,23 @@
+
+
+
+
+
+icon-document
+Created with Sketch.
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/components/UploadedFiles/UploadedFiles.cjsx b/components/UploadedFiles/UploadedFiles.cjsx
new file mode 100644
index 0000000..e1c2608
--- /dev/null
+++ b/components/UploadedFiles/UploadedFiles.cjsx
@@ -0,0 +1,36 @@
+'use strict'
+
+require './UploadedFilesStyles'
+
+React = require 'react'
+UploadedFile = require '../UploadedFile/UploadedFile'
+
+UploadedFiles = ({ files, onDelete, enableCaptions }) ->
+
+ {
+ files?.map (file, i) ->
+ { preview, progress, fileName, fileId, errors } = file
+
+ status = 'uploaded'
+ status = 'uploading' unless fileId
+ status = 'failed' if errors
+ captions = 'hello'
+ onDeleteProxy = ->
+ onDelete file
+
+
+
+
+ }
+
+
+module.exports = UploadedFiles
+
diff --git a/components/UploadedFiles/UploadedFilesContainer.cjsx b/components/UploadedFiles/UploadedFilesContainer.cjsx
new file mode 100644
index 0000000..61e523a
--- /dev/null
+++ b/components/UploadedFiles/UploadedFilesContainer.cjsx
@@ -0,0 +1,56 @@
+'use strict'
+
+React = require 'react'
+{ connect } = require 'react-redux'
+classnames = require 'classnames'
+UploadedFiles = require './UploadedFiles'
+
+{ getAttachments, deleteAttachment } = require 'appirio-tech-client-app-layer'
+
+{ createClass, createElement, PropTypes } = React
+
+mapStateToProps = (state) ->
+ { id, assetType, category, enableCaptions } = state?.fileUploader
+
+ filterAttachments = (attachments) ->
+ filteredFiles = []
+
+ for key, attachment of attachments
+ if id == attachment.id
+ if assetType == attachment.assetType
+ if category == attachment.category
+ filteredFiles.push attachment
+
+ filteredFiles
+
+ files = filterAttachments(state?.attachments)
+
+ { id, assetType, category, files }
+
+container =
+ propTypes:
+ id : PropTypes.string.isRequired
+ assetType : PropTypes.string.isRequired
+ category : PropTypes.string.isRequired
+ dispatch : PropTypes.func.isRequired
+ files : PropTypes.array.isRequired
+ enableCaptions: PropTypes.bool
+
+ onDelete: (file) ->
+ this.props.dispatch deleteAttachment file
+
+ componentWillMount: ->
+ { dispatch, id, assetType, category } = this.props
+
+ dispatch getAttachments { id, assetType, category }
+
+ render: ->
+ { files, enableCaptions } = this.props
+
+ createElement UploadedFiles,
+ files : files
+ onDelete : this.onDelete
+ enableCaptions: enableCaptions
+
+module.exports = connect(mapStateToProps)(createClass(container))
+
diff --git a/components/UploadedFiles/UploadedFilesExamples.cjsx b/components/UploadedFiles/UploadedFilesExamples.cjsx
new file mode 100644
index 0000000..53e57dd
--- /dev/null
+++ b/components/UploadedFiles/UploadedFilesExamples.cjsx
@@ -0,0 +1,17 @@
+'use strict'
+
+UploadedFiles = require './UploadedFiles'
+React = require 'react'
+
+UploadedFilesExamples = ->
+
+
Default
+
+
+
+ has 5 files
+
+
+
+
+module.exports = UploadedFilesExamples
diff --git a/components/UploadedFiles/UploadedFilesStyles.scss b/components/UploadedFiles/UploadedFilesStyles.scss
new file mode 100644
index 0000000..77cd6ac
--- /dev/null
+++ b/components/UploadedFiles/UploadedFilesStyles.scss
@@ -0,0 +1,10 @@
+@import "work/work-includes";
+
+.UploadedFiles {
+ margin-right: auto;
+ margin-left: auto;
+
+ li {
+ margin: 12px 10px;
+ }
+}
diff --git a/example.coffee b/example.coffee
new file mode 100644
index 0000000..5c8e7da
--- /dev/null
+++ b/example.coffee
@@ -0,0 +1,8 @@
+require 'appirio-tech-api-schemas'
+
+React = require 'react'
+ReactDOM = require 'react-dom'
+Router = require './components/Router/Router.cjsx'
+
+ReactDOM.render Router(), document.getElementById('root')
+
diff --git a/index.coffee b/index.coffee
new file mode 100644
index 0000000..187e73a
--- /dev/null
+++ b/index.coffee
@@ -0,0 +1,2 @@
+module.exports =
+ default: require './components/FileUploader/FileUploaderContainer.cjsx'
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..f30bcb9
--- /dev/null
+++ b/index.html
@@ -0,0 +1,23 @@
+
+
+
+ File Uploader
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..3fb5196
--- /dev/null
+++ b/package.json
@@ -0,0 +1,25 @@
+{
+ "name": "appirio-tech-file-uploader",
+ "version": "0.0.0",
+ "main": "./index.coffee",
+ "devDependencies": {
+ "react-router": "^1.0.3",
+ "history": "^1.17.0",
+ "npm-prepublish": "^1.2.1",
+ "appirio-tech-webpack-config": "0.x.x"
+ },
+ "scripts": {
+ "example": "webpack-dev-server -d --progress --inline --colors",
+ "dev": "webpack-dev-server -d --progress --inline --colors --dev",
+ "clean": "rm -r dist",
+ "build": "webpack --config webpack.config.js; cp example/index.html dist/"
+ },
+ "dependencies": {
+ "appirio-styles": "0.x.x",
+ "appirio-tech-client-app-layer": "0.x.x",
+ "appirio-tech-ng-auth": "4.x.x",
+ "appirio-tech-ng-ui-components": "2.x.x",
+ "react-dropzone": "3.x.x",
+ "react-redux": "4.x.x"
+ }
+}
diff --git a/webpack.config.coffee b/webpack.config.coffee
new file mode 100644
index 0000000..becdc74
--- /dev/null
+++ b/webpack.config.coffee
@@ -0,0 +1,10 @@
+webpackConfig = require 'appirio-tech-webpack-config'
+
+module.exports = webpackConfig
+ dirname: __dirname
+ template: './index.html'
+ entry:
+ example: [
+ 'webpack-dev-server/client?http://localhost:8080'
+ './example.coffee'
+ ]
\ No newline at end of file