diff --git a/.babelrc b/.babelrc new file mode 100644 index 0000000..0ba4d21 --- /dev/null +++ b/.babelrc @@ -0,0 +1,16 @@ +{ + "stage": 0, + "plugins": [ + "react-transform" + ], + "extra": { + "react-transform": [{ + "target": "react-transform-webpack-hmr", + "imports": ["react"], + "locals": ["module"] + }, { + "target": "react-transform-catch-errors", + "imports": ["react", "redbox-react"] + }] + } +} diff --git a/.eslintrc b/.eslintrc index 699fc90..2ebd867 100644 --- a/.eslintrc +++ b/.eslintrc @@ -1,193 +1,7 @@ { - "parser": "babel-eslint", // https://github.com/babel/babel-eslint - "plugins": [ - "react" // https://github.com/yannickcr/eslint-plugin-react - ], - "env": { // http://eslint.org/docs/user-guide/configuring.html#specifying-environments - "browser": true, // browser global variables - "node": true // Node.js global variables and Node.js-specific rules - }, - "ecmaFeatures": { - "arrowFunctions": true, - "blockBindings": true, - "classes": true, - "defaultParams": true, - "destructuring": true, - "forOf": true, - "generators": false, - "modules": true, - "objectLiteralComputedProperties": true, - "objectLiteralDuplicateProperties": false, - "objectLiteralShorthandMethods": true, - "objectLiteralShorthandProperties": true, - "spread": true, - "superInFunctions": true, - "templateStrings": true, - "jsx": true - }, + "extends": "airbnb", "rules": { -/** - * Strict mode - */ - // babel inserts "use strict"; for us - "strict": [2, "never"], // http://eslint.org/docs/rules/strict - -/** - * ES6 - */ - "no-var": 2, // http://eslint.org/docs/rules/no-var - "prefer-const": 2, // http://eslint.org/docs/rules/prefer-const - -/** - * Variables - */ - "no-shadow": 2, // http://eslint.org/docs/rules/no-shadow - "no-shadow-restricted-names": 2, // http://eslint.org/docs/rules/no-shadow-restricted-names - "no-unused-vars": [2, { // http://eslint.org/docs/rules/no-unused-vars - "vars": "local", - "args": "after-used" - }], - "no-use-before-define": 2, // http://eslint.org/docs/rules/no-use-before-define - -/** - * Possible errors - */ - "comma-dangle": [2, "never"], // http://eslint.org/docs/rules/comma-dangle - "no-cond-assign": [2, "always"], // http://eslint.org/docs/rules/no-cond-assign - "no-console": 1, // http://eslint.org/docs/rules/no-console - "no-debugger": 1, // http://eslint.org/docs/rules/no-debugger - "no-alert": 1, // http://eslint.org/docs/rules/no-alert - "no-constant-condition": 1, // http://eslint.org/docs/rules/no-constant-condition - "no-dupe-keys": 2, // http://eslint.org/docs/rules/no-dupe-keys - "no-duplicate-case": 2, // http://eslint.org/docs/rules/no-duplicate-case - "no-empty": 2, // http://eslint.org/docs/rules/no-empty - "no-ex-assign": 2, // http://eslint.org/docs/rules/no-ex-assign - "no-extra-boolean-cast": 0, // http://eslint.org/docs/rules/no-extra-boolean-cast - "no-extra-semi": 2, // http://eslint.org/docs/rules/no-extra-semi - "no-func-assign": 2, // http://eslint.org/docs/rules/no-func-assign - "no-inner-declarations": 2, // http://eslint.org/docs/rules/no-inner-declarations - "no-invalid-regexp": 2, // http://eslint.org/docs/rules/no-invalid-regexp - "no-irregular-whitespace": 2, // http://eslint.org/docs/rules/no-irregular-whitespace - "no-obj-calls": 2, // http://eslint.org/docs/rules/no-obj-calls - "no-reserved-keys": 2, // http://eslint.org/docs/rules/no-reserved-keys - "no-sparse-arrays": 2, // http://eslint.org/docs/rules/no-sparse-arrays - "no-unreachable": 2, // http://eslint.org/docs/rules/no-unreachable - "use-isnan": 2, // http://eslint.org/docs/rules/use-isnan - "block-scoped-var": 2, // http://eslint.org/docs/rules/block-scoped-var - -/** - * Best practices - */ - "consistent-return": 2, // http://eslint.org/docs/rules/consistent-return - "curly": [2, "multi-line"], // http://eslint.org/docs/rules/curly - "default-case": 2, // http://eslint.org/docs/rules/default-case - "dot-notation": [2, { // http://eslint.org/docs/rules/dot-notation - "allowKeywords": true - }], - "eqeqeq": 2, // http://eslint.org/docs/rules/eqeqeq - "guard-for-in": 2, // http://eslint.org/docs/rules/guard-for-in - "no-caller": 2, // http://eslint.org/docs/rules/no-caller - "no-else-return": 2, // http://eslint.org/docs/rules/no-else-return - "no-eq-null": 2, // http://eslint.org/docs/rules/no-eq-null - "no-eval": 2, // http://eslint.org/docs/rules/no-eval - "no-extend-native": 2, // http://eslint.org/docs/rules/no-extend-native - "no-extra-bind": 2, // http://eslint.org/docs/rules/no-extra-bind - "no-fallthrough": 2, // http://eslint.org/docs/rules/no-fallthrough - "no-floating-decimal": 2, // http://eslint.org/docs/rules/no-floating-decimal - "no-implied-eval": 2, // http://eslint.org/docs/rules/no-implied-eval - "no-lone-blocks": 2, // http://eslint.org/docs/rules/no-lone-blocks - "no-loop-func": 2, // http://eslint.org/docs/rules/no-loop-func - "no-multi-str": 2, // http://eslint.org/docs/rules/no-multi-str - "no-native-reassign": 2, // http://eslint.org/docs/rules/no-native-reassign - "no-new": 2, // http://eslint.org/docs/rules/no-new - "no-new-func": 2, // http://eslint.org/docs/rules/no-new-func - "no-new-wrappers": 2, // http://eslint.org/docs/rules/no-new-wrappers - "no-octal": 2, // http://eslint.org/docs/rules/no-octal - "no-octal-escape": 2, // http://eslint.org/docs/rules/no-octal-escape - "no-param-reassign": 2, // http://eslint.org/docs/rules/no-param-reassign - "no-proto": 2, // http://eslint.org/docs/rules/no-proto - "no-redeclare": 2, // http://eslint.org/docs/rules/no-redeclare - "no-return-assign": 2, // http://eslint.org/docs/rules/no-return-assign - "no-script-url": 2, // http://eslint.org/docs/rules/no-script-url - "no-self-compare": 2, // http://eslint.org/docs/rules/no-self-compare - "no-sequences": 2, // http://eslint.org/docs/rules/no-sequences - "no-throw-literal": 2, // http://eslint.org/docs/rules/no-throw-literal - "no-with": 2, // http://eslint.org/docs/rules/no-with - "radix": 2, // http://eslint.org/docs/rules/radix - "vars-on-top": 2, // http://eslint.org/docs/rules/vars-on-top - "wrap-iife": [2, "any"], // http://eslint.org/docs/rules/wrap-iife - "yoda": 2, // http://eslint.org/docs/rules/yoda - -/** - * Style - */ - "indent": [2, 2], // http://eslint.org/docs/rules/indent - "brace-style": [2, // http://eslint.org/docs/rules/brace-style - "1tbs", { - "allowSingleLine": true - }], - "quotes": [ - 2, "single", "avoid-escape" // http://eslint.org/docs/rules/quotes - ], - "camelcase": [2, { // http://eslint.org/docs/rules/camelcase - "properties": "never" - }], - "comma-spacing": [2, { // http://eslint.org/docs/rules/comma-spacing - "before": false, - "after": true - }], - "comma-style": [2, "last"], // http://eslint.org/docs/rules/comma-style - "eol-last": 2, // http://eslint.org/docs/rules/eol-last - "func-names": 1, // http://eslint.org/docs/rules/func-names - "key-spacing": [2, { // http://eslint.org/docs/rules/key-spacing - "beforeColon": false, - "afterColon": true - }], - "new-cap": [2, { // http://eslint.org/docs/rules/new-cap - "newIsCap": true - }], - "no-multiple-empty-lines": [2, { // http://eslint.org/docs/rules/no-multiple-empty-lines - "max": 2 - }], - "no-nested-ternary": 2, // http://eslint.org/docs/rules/no-nested-ternary - "no-new-object": 2, // http://eslint.org/docs/rules/no-new-object - "no-spaced-func": 2, // http://eslint.org/docs/rules/no-spaced-func - "no-trailing-spaces": 2, // http://eslint.org/docs/rules/no-trailing-spaces - "no-wrap-func": 2, // http://eslint.org/docs/rules/no-wrap-func - "no-underscore-dangle": 0, // http://eslint.org/docs/rules/no-underscore-dangle - "one-var": [2, "never"], // http://eslint.org/docs/rules/one-var - "padded-blocks": [2, "never"], // http://eslint.org/docs/rules/padded-blocks - "semi": [2, "always"], // http://eslint.org/docs/rules/semi - "semi-spacing": [2, { // http://eslint.org/docs/rules/semi-spacing - "before": false, - "after": true - }], - "space-after-keywords": 2, // http://eslint.org/docs/rules/space-after-keywords - "space-before-blocks": 2, // http://eslint.org/docs/rules/space-before-blocks - "space-before-function-paren": [2, "never"], // http://eslint.org/docs/rules/space-before-function-paren - "space-infix-ops": 2, // http://eslint.org/docs/rules/space-infix-ops - "space-return-throw-case": 2, // http://eslint.org/docs/rules/space-return-throw-case - "spaced-line-comment": 2, // http://eslint.org/docs/rules/spaced-line-comment - -/** - * JSX style - */ - "react/display-name": 0, // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/display-name.md - "react/jsx-boolean-value": 2, // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-boolean-value.md - "react/jsx-quotes": [2, "double"], // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-quotes.md - "react/jsx-no-undef": 2, // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-undef.md - "react/jsx-sort-props": 0, // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-sort-props.md - "react/jsx-sort-prop-types": 0, // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-sort-prop-types.md - "react/jsx-uses-react": 2, // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-uses-react.md - "react/jsx-uses-vars": 2, // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-uses-vars.md - "react/no-did-mount-set-state": [2, "allow-in-func"], // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-did-mount-set-state.md - "react/no-did-update-set-state": 2, // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-did-update-set-state.md - "react/no-multi-comp": 2, // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-multi-comp.md - "react/no-unknown-property": 2, // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-unknown-property.md - "react/prop-types": 2, // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prop-types.md - "react/react-in-jsx-scope": 2, // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/react-in-jsx-scope.md - "react/self-closing-comp": 2, // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/self-closing-comp.md - "react/wrap-multilines": 2, // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/wrap-multilines.md + "comma-dangle": 0, "react/sort-comp": [2, { // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/sort-comp.md "order": [ "constructor", diff --git a/CHANGELOG.md b/CHANGELOG.md index 683cf1d..d735632 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,9 @@ This project adheres to [Semantic Versioning](http://semver.org/). ## To Be Released +### Changed +- [Button, Card, Choice, ComboBox, Option, Placeholder, Rating, Select, Separator, TextInput, Toggle] Removed the 'Belle ' prefix from displayName + ## 1.2.2 - 2015-09-04 ### Fixed diff --git a/README.md b/README.md index 7050035..6d92a04 100644 --- a/README.md +++ b/README.md @@ -122,16 +122,11 @@ You can install the development environment with npm install ``` -Note: In case you want to add a peerDependency please make sure it get's removed -after running install since peerDependencies should not be in node_modules to -make them work properly. React & Underscore are removed in the `postinstall` -script which is defined in `package.json`. +`npm run build` will trigger a build into the `lib` folder. To develop a component it's convenient to use the examples or docs application. -Whenever you change something in `src/` you can compile it during development with +### Run the examples or docs application -``` -npm start -``` +To run the examples or docs you go into the folder `docs` or `examples` and run `npm install` and `npm start`. The app will run with hot reloading on `http://localhost:3000`. ### Tests @@ -145,12 +140,6 @@ In order to run the tests use npm test ``` -### Run the examples or docs - -To run the examples or docs you should run `npm install` and `npm start` in the examples/docs folder as well. - -Use `python -m SimpleHTTPServer 8310` in the examples folder to run it on localhost. - ## Discussion or need help? Join us at the **#belle** channel of the [Reactiflux](http://reactiflux.com/) Slack community or our [Gitter room](https://gitter.im/nikgraf/belle). diff --git a/docs/README.md b/docs/README.md index 0716703..a571e84 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,19 +1,18 @@ Belle Documentation ================ -## Setup +## Install ``` npm install ``` -Note: To make the development setup as easy as possible `npm install` will copy -the code styles from node_modules & establish a symlink from inside node_modules -to the root of the belle directory. Ideally `npm link` could be used, but it -doesn't play well with `peerDependencies` -> [Issue](https://github.com/npm/npm/issues/5875). +Make sure you ran `npm install` in the root folder of Belle. -## Development Environment +## Run ``` npm start ``` + +The app will run with hot reloading on `http://localhost:3000`. diff --git a/docs/js/About.jsx b/docs/components/About.js similarity index 100% rename from docs/js/About.jsx rename to docs/components/About.js diff --git a/docs/js/Base.jsx b/docs/components/Base.js similarity index 99% rename from docs/js/Base.jsx rename to docs/components/Base.js index 7ae72be..3c7147a 100644 --- a/docs/js/Base.jsx +++ b/docs/components/Base.js @@ -2,7 +2,7 @@ import React from 'react'; import {Card} from 'belle'; import {RouteHandler, Link} from 'react-router'; import Column from './Column'; -import ViewportMixin from './mixin/viewport'; +import ViewportMixin from '../mixin/viewport'; export default React.createClass({ diff --git a/docs/js/ButtonDocumentation.jsx b/docs/components/ButtonDocumentation.js similarity index 100% rename from docs/js/ButtonDocumentation.jsx rename to docs/components/ButtonDocumentation.js diff --git a/docs/js/CardDocumentation.jsx b/docs/components/CardDocumentation.js similarity index 100% rename from docs/js/CardDocumentation.jsx rename to docs/components/CardDocumentation.js diff --git a/docs/js/ChoiceDocumentation.jsx b/docs/components/ChoiceDocumentation.js similarity index 100% rename from docs/js/ChoiceDocumentation.jsx rename to docs/components/ChoiceDocumentation.js diff --git a/docs/js/Code.jsx b/docs/components/Code.js similarity index 100% rename from docs/js/Code.jsx rename to docs/components/Code.js diff --git a/docs/js/Column.jsx b/docs/components/Column.js similarity index 94% rename from docs/js/Column.jsx rename to docs/components/Column.js index f53a7d6..4094586 100644 --- a/docs/js/Column.jsx +++ b/docs/components/Column.js @@ -1,6 +1,6 @@ import React from 'react'; import {omit} from 'underscore'; -import ViewportMixin from './mixin/viewport'; +import ViewportMixin from '../mixin/viewport'; export default React.createClass({ diff --git a/docs/js/ComboBoxDocumentation.jsx b/docs/components/ComboBoxDocumentation.js similarity index 100% rename from docs/js/ComboBoxDocumentation.jsx rename to docs/components/ComboBoxDocumentation.js diff --git a/docs/js/Configuration.jsx b/docs/components/Configuration.js similarity index 99% rename from docs/js/Configuration.jsx rename to docs/components/Configuration.js index f3a8da9..259e73a 100644 --- a/docs/js/Configuration.jsx +++ b/docs/components/Configuration.js @@ -1,7 +1,7 @@ import React, {Component} from 'react'; import {Button, Card} from 'belle'; import Code from './Code'; -import ThemeSwitch from './theme/ThemeSwitch'; +import ThemeSwitch from '../theme/ThemeSwitch'; const overwriteCardStyleExample = `var belle = require('belle'); diff --git a/docs/js/FormComponents.jsx b/docs/components/FormComponents.js similarity index 100% rename from docs/js/FormComponents.jsx rename to docs/components/FormComponents.js diff --git a/docs/js/GettingStarted.jsx b/docs/components/GettingStarted.js similarity index 100% rename from docs/js/GettingStarted.jsx rename to docs/components/GettingStarted.js diff --git a/docs/js/Home.jsx b/docs/components/Home.js similarity index 98% rename from docs/js/Home.jsx rename to docs/components/Home.js index ef41b88..b625507 100644 --- a/docs/js/Home.jsx +++ b/docs/components/Home.js @@ -1,5 +1,5 @@ import React, {Component} from 'react'; -import ThemeSwitch from './theme/ThemeSwitch'; +import ThemeSwitch from '../theme/ThemeSwitch'; import GettingStarted from './GettingStarted'; import {Card} from 'belle'; diff --git a/docs/js/OptionDocumentation.jsx b/docs/components/OptionDocumentation.js similarity index 100% rename from docs/js/OptionDocumentation.jsx rename to docs/components/OptionDocumentation.js diff --git a/docs/js/Philosophy.jsx b/docs/components/Philosophy.js similarity index 100% rename from docs/js/Philosophy.jsx rename to docs/components/Philosophy.js diff --git a/docs/js/PlaceholderDocumentation.jsx b/docs/components/PlaceholderDocumentation.js similarity index 100% rename from docs/js/PlaceholderDocumentation.jsx rename to docs/components/PlaceholderDocumentation.js diff --git a/docs/js/RatingDocumentation.jsx b/docs/components/RatingDocumentation.js similarity index 100% rename from docs/js/RatingDocumentation.jsx rename to docs/components/RatingDocumentation.js diff --git a/docs/js/SelectDocumentation.jsx b/docs/components/SelectDocumentation.js similarity index 100% rename from docs/js/SelectDocumentation.jsx rename to docs/components/SelectDocumentation.js diff --git a/docs/js/SeparatorDocumentation.jsx b/docs/components/SeparatorDocumentation.js similarity index 100% rename from docs/js/SeparatorDocumentation.jsx rename to docs/components/SeparatorDocumentation.js diff --git a/docs/js/TextInputDocumentation.jsx b/docs/components/TextInputDocumentation.js similarity index 100% rename from docs/js/TextInputDocumentation.jsx rename to docs/components/TextInputDocumentation.js diff --git a/docs/js/ToggleDocumentation.jsx b/docs/components/ToggleDocumentation.js similarity index 100% rename from docs/js/ToggleDocumentation.jsx rename to docs/components/ToggleDocumentation.js diff --git a/docs/js/guides/IntroducingBelle.jsx b/docs/components/guides/IntroducingBelle.js similarity index 100% rename from docs/js/guides/IntroducingBelle.jsx rename to docs/components/guides/IntroducingBelle.js diff --git a/docs/js/routes.jsx b/docs/components/routes.js similarity index 100% rename from docs/js/routes.jsx rename to docs/components/routes.js diff --git a/docs/js/style.js b/docs/components/style.js similarity index 100% rename from docs/js/style.js rename to docs/components/style.js diff --git a/docs/index.html b/docs/index.html index 076eb29..99d5357 100644 --- a/docs/index.html +++ b/docs/index.html @@ -44,7 +44,7 @@
- + + diff --git a/examples/js/app.jsx b/examples/index.js similarity index 81% rename from examples/js/app.jsx rename to examples/index.js index 773fb6d..7c36449 100644 --- a/examples/js/app.jsx +++ b/examples/index.js @@ -2,13 +2,13 @@ import React, {Component} from 'react'; import {style} from 'belle'; import {config} from 'belle'; import {extend} from 'underscore'; -import ButtonPlayground from './ButtonPlayground'; -import CardPlayground from './CardPlayground'; -import SelectPlayground from './SelectPlayground'; -import TextInputPlayground from './TextInputPlayground'; -import RatingPlayground from './RatingPlayground'; -import ComboBoxPlayground from './ComboBoxPlayground'; -import TogglePlayground from './TogglePlayground'; +import ButtonPlayground from './components/ButtonPlayground'; +import CardPlayground from './components/CardPlayground'; +import SelectPlayground from './components/SelectPlayground'; +import TextInputPlayground from './components/TextInputPlayground'; +import RatingPlayground from './components/RatingPlayground'; +import ComboBoxPlayground from './components/ComboBoxPlayground'; +import TogglePlayground from './components/TogglePlayground'; // TODO create a button to switch between those stylings for testing purposes if (true) { diff --git a/examples/package.json b/examples/package.json index e421566..1b4614c 100644 --- a/examples/package.json +++ b/examples/package.json @@ -1,7 +1,7 @@ { "name": "belleExamples", "version": "1.2.2", - "description": "Playground for using Belle components", + "description": "Playground for using & developing Belle components", "author": { "name": "Nik Graf", "email": "nik@nikgraf.com", @@ -17,20 +17,15 @@ "underscore": "=1.8.3" }, "devDependencies": { - "babelify": "=6.1.2", - "browserify": "=10.2.4", - "watchify": "=3.2.3" + "babel-core": "^5.8.23", + "babel-loader": "^5.3.2", + "express": "^4.13.3", + "node-libs-browser": "^0.5.2", + "react-hot-loader": "^1.3.0", + "webpack": "^1.12.1", + "webpack-dev-server": "^1.10.1" }, "scripts": { - "prestart": "rm -rf ../node_modules/react", - "start": "watchify -o js/bundle.js --extension=.jsx -v -d js/app.jsx", - "build": "browserify -o js/bundle.js --extension=.jsx .", - "postinstall": "ln -snf ../../ node_modules/belle" - }, - "browserify": { - "extension": ["jsx"], - "transform": [ - "babelify" - ] + "start": "node server.js" } } diff --git a/examples/server.js b/examples/server.js new file mode 100644 index 0000000..2dfb7ab --- /dev/null +++ b/examples/server.js @@ -0,0 +1,29 @@ +var path = require('path'); +var express = require('express'); +var webpack = require('webpack'); +var config = require('./webpack.config'); + +var app = express(); +var compiler = webpack(config); + +app.use('/css', express.static('css')); + +app.use(require('webpack-dev-middleware')(compiler, { + noInfo: true, + publicPath: config.output.publicPath +})); + +app.use(require('webpack-hot-middleware')(compiler)); + +app.get('*', function(req, res) { + res.sendFile(path.join(__dirname, 'index.html')); +}); + +app.listen(3000, 'localhost', function (err) { + if (err) { + console.log(err); + return; + } + + console.log('Listening at http://localhost:3000'); +}); diff --git a/examples/webpack.config.js b/examples/webpack.config.js new file mode 100644 index 0000000..8fda9ed --- /dev/null +++ b/examples/webpack.config.js @@ -0,0 +1,38 @@ +var path = require('path'); +var webpack = require('webpack'); + +module.exports = { + devtool: 'eval', + entry: [ + 'webpack-hot-middleware/client', + './index' + ], + output: { + path: path.join(__dirname, 'dist'), + filename: 'bundle.js', + publicPath: '/static/' + }, + plugins: [ + new webpack.HotModuleReplacementPlugin(), + new webpack.NoErrorsPlugin() + ], + resolve: { + alias: { + 'belle': path.join(__dirname, '..', 'src'), + 'react': path.join(__dirname, 'node_modules', 'react') + }, + extensions: ['', '.js'] + }, + module: { + loaders: [{ + test: /\.js$/, + loaders: ['babel'], + exclude: /node_modules/, + include: __dirname + }, { + test: /\.js$/, + loaders: ['babel'], + include: path.join(__dirname, '..', 'src') + }] + } +}; diff --git a/package.json b/package.json index 526cea7..064c4ab 100644 --- a/package.json +++ b/package.json @@ -25,37 +25,43 @@ "react": ">=0.13.0 || ^0.14.0-beta3" }, "scripts": { - "start": "babel --watch --source-maps-inline --optional='es7.classProperties' --out-dir='lib' src", - "build": "babel --out-dir='lib' --optional='es7.classProperties' src", + "build": "babel --out-dir='lib' --ignore='__tests__/*' src", "prepublish": "npm run build", "postpublish": "./scripts/publish_gh_pages.sh", - "pretest": "rm -rf node_modules/react", - "test": "babel --out-dir='lib' --optional='es7.classProperties' src && cd tests && npm install && ln -snf ../lib lib && cd .. && jest tests/" + "test": "BABEL_JEST_STAGE=0 jest src/", + "lint": "eslint src/" }, "devDependencies": { - "babel": "^5.6.14", + "babel": "^5.8.23", + "babel-core": "^5.8.23", + "babel-eslint": "^4.1.1", "babel-jest": "^5.3.0", - "babel-eslint": "^3.1.20", - "eslint": "^0.24.0", - "eslint-plugin-react": "^2.6.4", - "jest-cli": "^0.4.15", - "react": ">=0.13.3" + "babel-loader": "^5.3.2", + "babel-plugin-react-transform": "^1.0.3", + "eslint": "^1.3.1", + "eslint-config-airbnb": "0.0.8", + "eslint-plugin-react": "^3.3.1", + "jest-cli": "^0.5.2", + "react": "^0.13.3", + "react-hot-loader": "^1.3.0", + "react-transform-catch-errors": "^0.1.1", + "react-transform-webpack-hmr": "^0.1.4", + "redbox-react": "^1.0.2", + "underscore": "^1.8.3", + "webpack": "^1.12.1", + "webpack-dev-middleware": "^1.2.0", + "webpack-dev-server": "^1.10.1", + "webpack-hot-middleware": "^2.0.0" }, "jest": { "unmockedModulePathPatterns": [ - "react", - "underscore" + "/node_modules/react", + "underscore", + "../utils/helpers", + "../utils/union-class-names", + "../utils/is-component-of-type" ], - "scriptPreprocessor": "/node_modules/babel-jest", - "testFileExtensions": [ - "jsx", - "js" - ], - "moduleFileExtensions": [ - "js", - "json", - "jsx" - ] + "scriptPreprocessor": "/node_modules/babel-jest" }, "license": "MIT", "dependencies": { diff --git a/tests/__tests__/Button-test.jsx b/src/__tests__/Button-test.js similarity index 94% rename from tests/__tests__/Button-test.jsx rename to src/__tests__/Button-test.js index 8d58c81..bdf7bf0 100644 --- a/tests/__tests__/Button-test.jsx +++ b/src/__tests__/Button-test.js @@ -1,18 +1,18 @@ -/*global jest describe beforeEach it expect */ +/* global jest describe beforeEach it expect */ -jest.dontMock('../lib/components/Button'); -jest.dontMock('../lib/utils/inject-style'); -jest.dontMock('../lib/utils/union-class-names'); +jest.dontMock('../components/Button'); +jest.dontMock('../utils/inject-style'); +jest.dontMock('../utils/union-class-names'); import React from 'react/addons'; const TestUtils = React.addons.TestUtils; -const injectStyle = require('../lib/utils/inject-style'); +const injectStyle = require('../utils/inject-style'); // Babel would move an import in front of the jest.dontMock. That's why require // is used instead of import. -const Button = require('../lib/components/Button'); +const Button = require('../components/Button'); describe('Button', () => { describe('without any properties', () => { diff --git a/tests/__tests__/Card-test.jsx b/src/__tests__/Card-test.js similarity index 87% rename from tests/__tests__/Card-test.jsx rename to src/__tests__/Card-test.js index 680bc0b..ad6dda1 100644 --- a/tests/__tests__/Card-test.jsx +++ b/src/__tests__/Card-test.js @@ -1,14 +1,14 @@ -/*global jest describe beforeEach it expect */ +/* global jest describe beforeEach it expect */ -jest.dontMock('../lib/components/Card'); -jest.dontMock('../lib/utils/inject-style'); +jest.dontMock('../components/Card'); +jest.dontMock('../utils/inject-style'); import React from 'react/addons'; const TestUtils = React.addons.TestUtils; // Babel would move an import in front of the jest.dontMock. That's why require // is used instead of import. -const Card = require('../lib/components/Card'); +const Card = require('../components/Card'); describe('Card', () => { it('should come with default styles', () => { diff --git a/tests/__tests__/ComboBox-test.jsx b/src/__tests__/ComboBox-test.js similarity index 97% rename from tests/__tests__/ComboBox-test.jsx rename to src/__tests__/ComboBox-test.js index c452d92..7724ec3 100644 --- a/tests/__tests__/ComboBox-test.jsx +++ b/src/__tests__/ComboBox-test.js @@ -1,7 +1,7 @@ -/*global jest describe beforeEach it expect */ +/* global jest describe beforeEach it expect */ -jest.dontMock('../lib/components/ComboBox'); -jest.dontMock('../lib/components/Option'); +jest.dontMock('../components/ComboBox'); +jest.dontMock('../components/Option'); import {extend} from 'underscore'; import React from 'react/addons'; @@ -9,8 +9,8 @@ const TestUtils = React.addons.TestUtils; // Babel would move an import in front of the jest.dontMock. That's why require // is used instead of import. -const ComboBox = require('../lib/components/ComboBox'); -const Option = require('../lib/components/Option'); +const ComboBox = require('../components/ComboBox'); +const Option = require('../components/Option'); describe('ComboBox', () => { it('should initialise inputValue & filteredOptions during construction', () => { diff --git a/tests/__tests__/Option-test.jsx b/src/__tests__/Option-test.js similarity index 91% rename from tests/__tests__/Option-test.jsx rename to src/__tests__/Option-test.js index 3a23997..b9ddc3a 100644 --- a/tests/__tests__/Option-test.jsx +++ b/src/__tests__/Option-test.js @@ -1,13 +1,13 @@ -/*global jest describe beforeEach it expect */ +/* global jest describe beforeEach it expect */ -jest.dontMock('../lib/components/Option'); +jest.dontMock('../components/Option'); import React from 'react/addons'; const TestUtils = React.addons.TestUtils; // Babel would move an import in front of the jest.dontMock. That's why require // is used instead of import. -const Option = require('../lib/components/Option'); +const Option = require('../components/Option'); describe('Option', () => { it('should initialise _isHovered & _isDisplayedAsSelected during construction', () => { diff --git a/tests/__tests__/Placeholder-test.jsx b/src/__tests__/Placeholder-test.js similarity index 88% rename from tests/__tests__/Placeholder-test.jsx rename to src/__tests__/Placeholder-test.js index 0e7e339..5354508 100644 --- a/tests/__tests__/Placeholder-test.jsx +++ b/src/__tests__/Placeholder-test.js @@ -1,13 +1,13 @@ -/*global jest describe beforeEach it expect */ +/* global jest describe beforeEach it expect */ -jest.dontMock('../lib/components/Placeholder'); +jest.dontMock('../components/Placeholder'); import React from 'react/addons'; const TestUtils = React.addons.TestUtils; // Babel would move an import in front of the jest.dontMock. That's why require // is used instead of import. -const Placeholder = require('../lib/components/Placeholder'); +const Placeholder = require('../components/Placeholder'); describe('Placeholder', () => { it('should come with a set of default styles', () => { diff --git a/tests/__tests__/Rating-test.jsx b/src/__tests__/Rating-test.js similarity index 90% rename from tests/__tests__/Rating-test.jsx rename to src/__tests__/Rating-test.js index 32e3916..af39790 100644 --- a/tests/__tests__/Rating-test.jsx +++ b/src/__tests__/Rating-test.js @@ -1,15 +1,15 @@ -/*global jest describe beforeEach it expect */ +/* global jest describe beforeEach it expect */ -jest.dontMock('../lib/components/Rating'); -jest.dontMock('../lib/utils/inject-style'); -jest.dontMock('../lib/utils/union-class-names'); +jest.dontMock('../components/Rating'); +jest.dontMock('../utils/inject-style'); +jest.dontMock('../utils/union-class-names'); import React from 'react/addons'; const TestUtils = React.addons.TestUtils; // Babel would move an import in front of the jest.dontMock. That's why require // is used instead of import. -const Rating = require('../lib/components/Rating'); +const Rating = require('../components/Rating'); describe('Rating', () => { it('should be able to provide a valueLink', () => { diff --git a/tests/__tests__/Select-test.jsx b/src/__tests__/Select-test.js similarity index 96% rename from tests/__tests__/Select-test.jsx rename to src/__tests__/Select-test.js index 1aa990c..77f922e 100644 --- a/tests/__tests__/Select-test.jsx +++ b/src/__tests__/Select-test.js @@ -1,9 +1,9 @@ -/*global jest describe beforeEach it expect */ +/* global jest describe beforeEach it expect */ -jest.dontMock('../lib/components/Select'); -jest.dontMock('../lib/components/Option'); -jest.dontMock('../lib/components/Placeholder'); -jest.dontMock('../lib/components/Separator'); +jest.dontMock('../components/Select'); +jest.dontMock('../components/Option'); +jest.dontMock('../components/Placeholder'); +jest.dontMock('../components/Separator'); import {extend} from 'underscore'; import React from 'react/addons'; @@ -11,10 +11,10 @@ const TestUtils = React.addons.TestUtils; // Babel would move an import in front of the jest.dontMock. That's why require // is used instead of import. -const Select = require('../lib/components/Select'); -const Option = require('../lib/components/Option'); -const Placeholder = require('../lib/components/Placeholder'); -const Separator = require('../lib/components/Separator'); +const Select = require('../components/Select'); +const Option = require('../components/Option'); +const Placeholder = require('../components/Placeholder'); +const Separator = require('../components/Separator'); describe('Select', () => { it('should initialise selectedValue & focusedOptionValue during construction', () => { diff --git a/tests/__tests__/Separator-test.jsx b/src/__tests__/Separator-test.js similarity index 88% rename from tests/__tests__/Separator-test.jsx rename to src/__tests__/Separator-test.js index 94771a0..80fbfb7 100644 --- a/tests/__tests__/Separator-test.jsx +++ b/src/__tests__/Separator-test.js @@ -1,13 +1,13 @@ -/*global jest describe beforeEach it expect */ +/* global jest describe beforeEach it expect */ -jest.dontMock('../lib/components/Separator'); +jest.dontMock('../components/Separator'); import React from 'react/addons'; const TestUtils = React.addons.TestUtils; // Babel would move an import in front of the jest.dontMock. That's why require // is used instead of import. -const Separator = require('../lib/components/Separator'); +const Separator = require('../components/Separator'); describe('Separator', () => { it('should come with a set of default styles', () => { diff --git a/tests/__tests__/TextInput-test.jsx b/src/__tests__/TextInput-test.js similarity index 94% rename from tests/__tests__/TextInput-test.jsx rename to src/__tests__/TextInput-test.js index 96a03ab..f76251b 100644 --- a/tests/__tests__/TextInput-test.jsx +++ b/src/__tests__/TextInput-test.js @@ -1,15 +1,15 @@ -/*global jest, describe, it, expect*/ +/* global jest, describe, it, expect*/ -jest.dontMock('../lib/components/TextInput'); -jest.dontMock('../lib/utils/inject-style'); +jest.dontMock('../components/TextInput'); +jest.dontMock('../utils/inject-style'); import React from 'react/addons'; const TestUtils = React.addons.TestUtils; // Babel would move an import in front of the jest.dontMock. That's why require // is used instead of import. -const injectStyle = require('../lib/utils/inject-style'); -const TextInput = require('../lib/components/TextInput'); +const injectStyle = require('../utils/inject-style'); +const TextInput = require('../components/TextInput'); describe('TextInput', () => { it('should come with default styles', () => { diff --git a/tests/__tests__/helpers-test.js b/src/__tests__/helpers-test.js similarity index 98% rename from tests/__tests__/helpers-test.js rename to src/__tests__/helpers-test.js index b6c102f..15d36ea 100644 --- a/tests/__tests__/helpers-test.js +++ b/src/__tests__/helpers-test.js @@ -1,8 +1,8 @@ -/*global jest, describe, it, expect*/ +/* global jest, describe, it, expect*/ -jest.dontMock('../lib/utils/helpers'); +jest.dontMock('../utils/helpers'); -const helpers = require('../lib/utils/helpers'); +const helpers = require('../utils/helpers'); describe('helpers has method', () => { const obj = {test: true}; @@ -218,7 +218,6 @@ describe('helpers mapObject method', () => { describe('helpers find method', () => { const arr = [123, 'abc', () => {}, undefined]; - const obj = 100; const predicate = (object) => { return typeof object === 'number'; }; @@ -270,7 +269,6 @@ describe('helpers isEmpty method', () => { describe('helpers findIndex method', () => { const arr = [123, 'abc', () => {}, undefined]; - const obj = 100; const predicate = (object) => { return typeof object === 'number'; }; diff --git a/tests/__tests__/union-class-names-test.js b/src/__tests__/union-class-names-test.js similarity index 82% rename from tests/__tests__/union-class-names-test.js rename to src/__tests__/union-class-names-test.js index b27a3a1..b4a8de6 100644 --- a/tests/__tests__/union-class-names-test.js +++ b/src/__tests__/union-class-names-test.js @@ -1,8 +1,6 @@ -/*global jest, describe, it, expect*/ +/* global jest, describe, it, expect*/ -jest.dontMock('../lib/utils/union-class-names'); - -const unionClassNames = require('../lib/utils/union-class-names'); +const unionClassNames = require('../utils/union-class-names'); describe('unionClassNames', () => { it('should add a class to existing ones', () => { diff --git a/src/components/Button.jsx b/src/components/Button.js similarity index 99% rename from src/components/Button.jsx rename to src/components/Button.js index 8d9ff40..1a3b81e 100644 --- a/src/components/Button.jsx +++ b/src/components/Button.js @@ -113,7 +113,7 @@ export default class Button extends Component { this.mouseDownOnButton = false; } - static displayName = 'Belle Button'; + static displayName = 'Button'; static propTypes = { activeStyle: React.PropTypes.object, diff --git a/src/components/Card.jsx b/src/components/Card.js similarity index 97% rename from src/components/Card.jsx rename to src/components/Card.js index 09260e3..dcd604d 100644 --- a/src/components/Card.jsx +++ b/src/components/Card.js @@ -24,7 +24,7 @@ export default class Card extends Component { }; } - static displayName = 'Belle Card'; + static displayName = 'Card'; static propTypes = { children: React.PropTypes.oneOfType([ diff --git a/src/components/Choice.jsx b/src/components/Choice.js similarity index 91% rename from src/components/Choice.jsx rename to src/components/Choice.js index 59fb781..10da04d 100644 --- a/src/components/Choice.jsx +++ b/src/components/Choice.js @@ -9,7 +9,7 @@ export default class Choice extends Component { super(properties); } - static displayName = 'Belle Choice'; + static displayName = 'Choice'; static propTypes = { children: React.PropTypes.oneOfType([ diff --git a/src/components/ComboBox.jsx b/src/components/ComboBox.js similarity index 99% rename from src/components/ComboBox.jsx rename to src/components/ComboBox.js index 3ab7a9b..c90f585 100644 --- a/src/components/ComboBox.jsx +++ b/src/components/ComboBox.js @@ -147,7 +147,7 @@ export default class ComboBox extends Component { this.filteredOptions = ComboBox.filterOptions(inputValue, properties); } - static displayName = 'Belle ComboBox'; + static displayName = 'ComboBox'; static propTypes = { children: React.PropTypes.oneOfType([React.PropTypes.array, React.PropTypes.object]), @@ -587,7 +587,7 @@ export default class ComboBox extends Component { /** * Function to filter options using input value. */ - static filterOptions(inputValue, properties) { /*eslint react/sort-comp:0*/ + static filterOptions(inputValue, properties) { /* eslint react/sort-comp:0*/ let filteredOptions = []; if (!isEmpty(properties.children)) { if (inputValue) { diff --git a/src/components/Option.jsx b/src/components/Option.js similarity index 98% rename from src/components/Option.jsx rename to src/components/Option.js index c22fe85..10dc0a5 100644 --- a/src/components/Option.jsx +++ b/src/components/Option.js @@ -32,7 +32,7 @@ export default class Option extends Component { }; } - static displayName = 'Belle Option'; + static displayName = 'Option'; static propTypes = { children: React.PropTypes.oneOfType([ diff --git a/src/components/Placeholder.jsx b/src/components/Placeholder.js similarity index 97% rename from src/components/Placeholder.jsx rename to src/components/Placeholder.js index 203aa37..cc9265a 100644 --- a/src/components/Placeholder.jsx +++ b/src/components/Placeholder.js @@ -23,7 +23,7 @@ export default class Placeholder extends Component { }; } - static displayName = 'Belle Placeholder'; + static displayName = 'Placeholder'; static propTypes = { children: React.PropTypes.oneOfType([ diff --git a/src/components/Rating.jsx b/src/components/Rating.js similarity index 99% rename from src/components/Rating.jsx rename to src/components/Rating.js index 9ef6c5a..6f3c6cb 100644 --- a/src/components/Rating.jsx +++ b/src/components/Rating.js @@ -107,7 +107,7 @@ export default class Rating extends Component { this.preventFocusStyleForTouchAndClick = has(properties, 'preventFocusStyleForTouchAndClick') ? properties.preventFocusStyleForTouchAndClick : config.preventFocusStyleForTouchAndClick; } - static displayName = 'Belle Rating'; + static displayName = 'Rating'; static propTypes = { defaultValue: React.PropTypes.oneOf([1, 2, 3, 4, 5]), @@ -551,7 +551,7 @@ export default class Rating extends Component { * * This can be used in case you as developer want to reset the rating manually. */ - resetValue() { /*eslint react/sort-comp:0*/ + resetValue() { /* eslint react/sort-comp:0*/ this.setState({ value: undefined, focusedValue: undefined diff --git a/src/components/Select.jsx b/src/components/Select.js similarity index 99% rename from src/components/Select.jsx rename to src/components/Select.js index 326a454..ff42dc9 100644 --- a/src/components/Select.jsx +++ b/src/components/Select.js @@ -14,21 +14,21 @@ React.initializeTouchEvents && React.initializeTouchEvents(true); * Returns true if the provided property is a Placeholder component from Belle. */ function isPlaceholder(reactElement) { - return isComponentOfType('Belle Placeholder', reactElement); + return isComponentOfType('Placeholder', reactElement); } /** * Returns true if the provided property is a Option component from Belle. */ function isOption(reactElement) { - return isComponentOfType('Belle Option', reactElement); + return isComponentOfType('Option', reactElement); } /** * Returns true if the provided property is a Separator component from Belle. */ function isSeparator(reactElement) { - return isComponentOfType('Belle Separator', reactElement); + return isComponentOfType('Separator', reactElement); } /** @@ -238,7 +238,7 @@ export default class Select extends Component { }; } - static displayName = 'Belle Select'; + static displayName = 'Select'; static propTypes = { children: validateChildrenAreOptionsAndMaximumOnePlaceholder, @@ -719,6 +719,18 @@ export default class Select extends Component { } } + /** + * Returns the index of the entry with a certain value from the component's + * children. + * + * The index search includes only option components. + */ + _getIndexOfFocusedOption() { + return findIndex(this.options, (element) => { + return element.props.value === this.state.focusedOptionValue; + }); + } + /** * After an option has been selected the menu gets closed and the * selection processed. @@ -748,18 +760,6 @@ export default class Select extends Component { } } - /** - * Returns the index of the entry with a certain value from the component's - * children. - * - * The index search includes only option components. - */ - _getIndexOfFocusedOption() { - return findIndex(this.options, (element) => { - return element.props.value === this.state.focusedOptionValue; - }); - } - render() { const defaultStyle = extend({}, style.style, this.props.style); const hoverStyle = extend({}, defaultStyle, style.hoverStyle, this.props.hoverStyle); diff --git a/src/components/Separator.jsx b/src/components/Separator.js similarity index 96% rename from src/components/Separator.jsx rename to src/components/Separator.js index 47b676e..b19ab0e 100644 --- a/src/components/Separator.jsx +++ b/src/components/Separator.js @@ -23,7 +23,7 @@ export default class Separator extends Component { }; } - static displayName = 'Belle Separator'; + static displayName = 'Separator'; static propTypes = { children: React.PropTypes.oneOfType([ diff --git a/src/components/TextInput.jsx b/src/components/TextInput.js similarity index 99% rename from src/components/TextInput.jsx rename to src/components/TextInput.js index db0a7bc..7bb3fee 100644 --- a/src/components/TextInput.jsx +++ b/src/components/TextInput.js @@ -103,7 +103,7 @@ export default class TextInput extends Component { }; } - static displayName = 'Belle TextInput'; + static displayName = 'TextInput'; static propTypes = { className: React.PropTypes.string, diff --git a/src/components/Toggle.jsx b/src/components/Toggle.js similarity index 99% rename from src/components/Toggle.jsx rename to src/components/Toggle.js index f7d2843..852753d 100644 --- a/src/components/Toggle.jsx +++ b/src/components/Toggle.js @@ -77,7 +77,7 @@ function sanitizeHandleProps(properties) { * Verifies that the provided property is a Choice from Belle. */ function choicePropType(props, propName, componentName) { - if (!(props[propName] && isComponentOfType('Belle Choice', props[propName]))) { + if (!(props[propName] && isComponentOfType('Choice', props[propName]))) { return new Error(`Invalid children supplied to \`${componentName}\`, expected a Choice component from Belle.`); } } @@ -174,7 +174,7 @@ export default class Toggle extends Component { this.preventFocusStyleForTouchAndClick = has(properties, 'preventFocusStyleForTouchAndClick') ? properties.preventFocusStyleForTouchAndClick : config.preventFocusStyleForTouchAndClick; } - static displayName = 'Belle Toggle'; + static displayName = 'Toggle'; static propTypes = { activeHandleStyle: React.PropTypes.object, diff --git a/src/config/select.js b/src/config/select.js index 231d127..3ef73f6 100644 --- a/src/config/select.js +++ b/src/config/select.js @@ -9,7 +9,7 @@ import {filterReactChildren, findIndex} from '../utils/helpers'; * The index search includes separator & option components. */ const findIndexOfSelectedOption = (component) => { - const filterFunction = (child) => (isComponentOfType('Belle Option', child) || isComponentOfType('Belle Separator', child)); + const filterFunction = (child) => (isComponentOfType('Option', child) || isComponentOfType('Separator', child)); return findIndex(filterReactChildren(component.props.children, filterFunction), (element) => { return element.props.value === component.state.selectedValue; }); diff --git a/src/style/animations.js b/src/style/animations.js index 06d01a4..bfaddd7 100644 --- a/src/style/animations.js +++ b/src/style/animations.js @@ -1,7 +1,5 @@ const animations = [ - -'\n@-webkit-keyframes belle-button-focus {\n0% { box-shadow: 0 0 0 0 rgba(140, 224, 255, 1); }\n99% { box-shadow: 0 0 0 8px #fff }\n100% { box-shadow: 0 0 0 0 rgba(0, 131, 180, 0); }\n}\n@-webkit-keyframes belle-toggle-focus {\n0% { box-shadow: 0 0 0 0 rgba(140, 224, 255, 1); }\n99% { box-shadow: 0 0 0 8px #fff }\n100% { box-shadow: 0 0 0 0 rgba(0, 131, 180, 0); }\n}\n@-webkit-keyframes belle-rating-focus {\n0% { background: rgba(140, 224, 255, 0); box-shadow: 0 0 0 0 rgba(140, 224, 255, 1); }\n25% { background: rgba(140, 224, 255, 0.15) }\n99% { background: transparent; box-shadow: 0 0 0 8px #fff }\n100% { background: transparent; box-shadow: 0 0 0 0 rgba(0, 131, 180, 0); }\n}\n' - + '\n@-webkit-keyframes belle-button-focus {\n0% { box-shadow: 0 0 0 0 rgba(140, 224, 255, 1); }\n99% { box-shadow: 0 0 0 8px #fff }\n100% { box-shadow: 0 0 0 0 rgba(0, 131, 180, 0); }\n}\n@-webkit-keyframes belle-toggle-focus {\n0% { box-shadow: 0 0 0 0 rgba(140, 224, 255, 1); }\n99% { box-shadow: 0 0 0 8px #fff }\n100% { box-shadow: 0 0 0 0 rgba(0, 131, 180, 0); }\n}\n@-webkit-keyframes belle-rating-focus {\n0% { background: rgba(140, 224, 255, 0); box-shadow: 0 0 0 0 rgba(140, 224, 255, 1); }\n25% { background: rgba(140, 224, 255, 0.15) }\n99% { background: transparent; box-shadow: 0 0 0 8px #fff }\n100% { background: transparent; box-shadow: 0 0 0 0 rgba(0, 131, 180, 0); }\n}\n' ]; export default animations; diff --git a/tests/lib b/tests/lib deleted file mode 120000 index dc598c5..0000000 --- a/tests/lib +++ /dev/null @@ -1 +0,0 @@ -../lib \ No newline at end of file diff --git a/tests/package.json b/tests/package.json deleted file mode 100644 index cac6201..0000000 --- a/tests/package.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "belle", - "version": "1.2.2", - "description": "Tests for Belle", - "author": { - "name": "Nik Graf", - "email": "nik@nikgraf.com", - "url": "http://www.nikgraf.com" - }, - "main": "lib/index.js", - "dependencies": { - "react": ">=0.13.0", - "underscore": ">=1.8.2" - }, - "license": "MIT" -}