diff --git a/.babelrc b/.babelrc index c70f090..c8c5fe5 100644 --- a/.babelrc +++ b/.babelrc @@ -1,16 +1,17 @@ { - "presets": [ - "es2015", - "react", - "stage-0" - ], + "presets": ["@babel/preset-env", "@babel/react"], "plugins": [ - "transform-array-from", - "transform-class-properties", - "transform-es2015-spread", - "transform-object-rest-spread", - "transform-decorators-legacy" - ], - "ignore": [ + [ + "@babel/plugin-proposal-decorators", + { + "legacy": true + } + ], + [ + "@babel/plugin-proposal-class-properties", + { + "loose": true + } + ] ] } diff --git a/.editorconfig b/.editorconfig index 9d08a1a..beffa30 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,9 +1,11 @@ root = true [*] -charset = utf-8 indent_style = space indent_size = 2 -end_of_line = lf -insert_final_newline = true +charset = utf-8 trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/.gitignore b/.gitignore index 786df0e..736ebbc 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,8 @@ bower_components coverage npm-debug.log yarn.lock +Gemfile.lock +yarn-error.log package-lock.json .DS_Store .idea diff --git a/.npmignore b/.npmignore index 81d50e1..2fb2535 100644 --- a/.npmignore +++ b/.npmignore @@ -1,9 +1,23 @@ -build -src -config -static +.idea +.DS_Store +.prettierrc .babelrc -.gitignore -yarn.lock +.editorconfig +Gemfile +postcss.config.js +Rakefile +**/npm-debug.log +**/node_modules test -index.html +__test__ +src +docs +build +docs +public +tests +postcss.config.js +webpack.config.babel.js + + + diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..62d7190 --- /dev/null +++ b/.npmrc @@ -0,0 +1,2 @@ +sass_binary_site=https://npm.taobao.org/mirrors/node-sass/ +package-lock=false diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..cc1879e --- /dev/null +++ b/.prettierrc @@ -0,0 +1,38 @@ +{ + "trailingComma": "none", + "arrowParens": "always", + "printWidth": 80, + "bracketSpacing": true, + "jsxBracketSameLine": true, + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "overrides": [ + { + "files": [ + "*.json", + ".eslintrc", + ".tslintrc", + ".prettierrc", + ".tern-project" + ], + "options": { + "parser": "json", + "tabWidth": 2 + } + }, + { + "files": "*.{css,sass,scss,less}", + "options": { + "parser": "postcss", + "tabWidth": 2 + } + }, + { + "files": "*.ts", + "options": { + "parser": "typescript" + } + } + ] +} diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..2b5ea5a --- /dev/null +++ b/Gemfile @@ -0,0 +1,5 @@ +source 'https://rubygems.org' + +gem 'fileutils' +gem 'sshkit' +gem 'semver' diff --git a/LICENSE b/LICENSE deleted file mode 100644 index ba8940f..0000000 --- a/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2016 Po-Yu Chen - -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. diff --git a/README.md b/README.md index b7e6dd5..ee2883c 100644 --- a/README.md +++ b/README.md @@ -1,116 +1,50 @@ # react-status-manager > React component for status manager. - -## properties: -```javascript - - static propTypes = { - className: PropTypes.string, - items: PropTypes.array, - value: PropTypes.any, - nodeName: PropTypes.any - }; - - static defaultProps = { - items: [], - nodeName: nodeName() - }; - +## install +```shell +npm install -S afeiship/react-status-manager ``` -## usage: -```jsx -class App extends React.Component{ - constructor(props){ - super(props); - this.state = { - value:'init', - smvalue:'N', - step:0, - }; - } - - click1 = (e)=>{ - this.setState({value:'init'}); - console.log('click1'); - } - click2 = (e)=>{ - this.setState({value:'active'}); - console.log('click2'); - } - click3 = (e)=>{ - this.setState({value:'running'}); - console.log('click3'); - } - click4 = (e)=>{ - this.setState({value:'finish'}); - console.log('click4'); - } - - _click5 =(e)=>{ - this.setState({ - smvalue:'A' - }) - }; - - _clickStep = (e) =>{ - let step = this.state.step; - this.setState({ - step: step ===3 ? 0: step+1 - }) - }; - - render(){ - return ( -
- - 下拉刷新 - 释放更新 - - 更新完毕 - - - - - 未开始 - 进行中 - 已经结束 - - - - - - - - - -

Wizard

- - -
step1,input password
-
step2,input phone
-
step3,input other info
-
step4,do submit!
-
-
- ); +## usage +1. import css + ```scss + @import "~react-status-manager/style.scss"; + + // customize your styles: + $react-status-manager-options: () + ``` +2. import js + ```js + import React from 'react'; + import ReactDOM from 'react-dom'; + import ReactStatusManager from 'react-status-manager'; + + // your app: + class App extends React.Component{ + render(){ + return ( + + ) + } } -} - -``` - -## in react-native -```jsx - - TEXT-N - TEXT-A - -``` - -## todos: -- [ ] status/statusList -> value/items - -## resource: -+ http://ionicframework.com/docs/components/#full-buttons + // render to dom: + ReactDOM.render(, document.getElementById('app')); + ``` + +## documentation +- https://afeiship.github.io/react-status-manager/ + +## resouces +- https://www.robinwieruch.de/minimal-react-webpack-babel-setup/ +- https://www.valentinog.com/blog/react-webpack-babel/ +- https://jestjs.io/docs/en/tutorial-react#snapshot-testing-with-mocks-enzyme-and-react-16 +- https://testing-library.com/docs/react-testing-library/api + +## todos +- [ ] Add: semver number for every build files. +- [ ] Add: need output css files. +- [ ] Add: PWA support for docs. +- [ ] Add: source.map file for dist(`you can upload for production debug`). +- [ ] BUG: npm run dev will clean dist. diff --git a/Rakefile b/Rakefile new file mode 100644 index 0000000..3b186fa --- /dev/null +++ b/Rakefile @@ -0,0 +1,4 @@ + +Dir["./node_modules/rake-*/index.rake"].each do |task| + load task +end diff --git a/_README.md b/_README.md deleted file mode 100644 index c10fa69..0000000 --- a/_README.md +++ /dev/null @@ -1,28 +0,0 @@ -# react-status-manager -> React component for status manager. - - -## properties: -```javascript -BACKUP_PROPERTIES -``` - -## usage: -```jsx -BACKUP_USAGE -``` - -## in react-native -```jsx - - TEXT-N - TEXT-A - -``` - -## todos: -- [ ] status/statusList -> value/items - -## resource: -+ http://ionicframework.com/docs/components/#full-buttons - diff --git a/build/auto-readme.js b/build/auto-readme.js deleted file mode 100644 index 9284984..0000000 --- a/build/auto-readme.js +++ /dev/null @@ -1,25 +0,0 @@ -const fs = require('fs'); -const path = require('path'); -const fileRegExp = require('file-regexp'); -const exampleRE = /\/\*===example start===\*\/\n([a-zA-Z.{\s()<="-<_>}?:+0-9\[\]\u4E00-\u9FA5`!]*)\/\*===example end===\*\//; -const templateRE = /\/\*===properties start===\*\/([()\[\]\w\s={}:.;,'"]*)\/\*===properties end===\*\//; - -const targetPropsRE = /## properties:\n```javascript\n(.*)\n```/; -const targetUsageRE = /## usage:\n```jsx\n(.*)\n```/; - -let readmeFile = path.join(__dirname,'../README.MD'); -let _readmeFile = path.join(__dirname,'../_README.MD'); -let exampleFile = path.join(__dirname,'../src/dev.js'); -let templateFile = path.join(__dirname,'../src/components/react-status-manager.js'); - - - -let exampleRs = fileRegExp.fileGetContent(exampleFile,exampleRE); -let templateRs = fileRegExp.fileGetContent(templateFile,templateRE); - -// set default readme file: -fs.writeFileSync(readmeFile, fs.readFileSync(_readmeFile,'utf-8')); - -//do replace: -fileRegExp.fileReplaceContent(readmeFile,targetPropsRE,templateRs); -fileRegExp.fileReplaceContent(readmeFile,targetUsageRE,exampleRs); diff --git a/build/build.js b/build/build.js index 349e1a4..ae35c4e 100644 --- a/build/build.js +++ b/build/build.js @@ -1,35 +1,17 @@ -// https://github.com/shelljs/shelljs -require('./check-versions')() -require('shelljs/global') -env.NODE_ENV = 'production' +import baseConfig from '.'; +import merge from 'webpack-merge'; +import { + configs, + inputs, + outputs, + loaders, + plugins, + externals +} from 'webpack-lib-kits'; -var path = require('path') -var config = require('../config') -var ora = require('ora') -var webpack = require('webpack') -var webpackConfig = require('./webpack.prod.conf') - -console.log( - ' Tip:\n' + - ' Built files are meant to be served over an HTTP server.\n' + - ' Opening index.html over file:// won\'t work.\n' -) - -var spinner = ora('building for production...') -spinner.start() - -var assetsPath = path.join(config.build.assetsRoot) -rm('-rf', assetsPath) -mkdir('-p', assetsPath) - -webpack(webpackConfig, function (err, stats) { - spinner.stop() - if (err) throw err - process.stdout.write(stats.toString({ - colors: true, - modules: false, - children: false, - chunks: false, - chunkModules: false - }) + '\n') -}) +export default merge(baseConfig, { + entry: inputs.build(), + output: outputs.build(), + externals: externals.base(), + plugins: [plugins.clean(), plugins.copyStyles()] +}); diff --git a/build/check-versions.js b/build/check-versions.js deleted file mode 100644 index e2b6cf7..0000000 --- a/build/check-versions.js +++ /dev/null @@ -1,45 +0,0 @@ -var semver = require('semver') -var chalk = require('chalk') -var packageConfig = require('../package.json') -var exec = function (cmd) { - return require('child_process') - .execSync(cmd).toString().trim() -} - -var versionRequirements = [ - { - name: 'node', - currentVersion: semver.clean(process.version), - versionRequirement: packageConfig.engines.node - }, - { - name: 'npm', - currentVersion: exec('npm --version'), - versionRequirement: packageConfig.engines.npm - } -] - -module.exports = function () { - var warnings = [] - for (var i = 0; i < versionRequirements.length; i++) { - var mod = versionRequirements[i] - if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) { - warnings.push(mod.name + ': ' + - chalk.red(mod.currentVersion) + ' should be ' + - chalk.green(mod.versionRequirement) - ) - } - } - - if (warnings.length) { - console.log('') - console.log(chalk.yellow('To use this template, you must update following to modules:')) - console.log() - for (var i = 0; i < warnings.length; i++) { - var warning = warnings[i] - console.log(' ' + warning) - } - console.log() - process.exit(1) - } -} diff --git a/build/dev-client.js b/build/dev-client.js deleted file mode 100644 index 18aa1e2..0000000 --- a/build/dev-client.js +++ /dev/null @@ -1,9 +0,0 @@ -/* eslint-disable */ -require('eventsource-polyfill') -var hotClient = require('webpack-hot-middleware/client?noInfo=true&reload=true') - -hotClient.subscribe(function (event) { - if (event.action === 'reload') { - window.location.reload() - } -}) diff --git a/build/dev-server.js b/build/dev-server.js deleted file mode 100644 index 38218c4..0000000 --- a/build/dev-server.js +++ /dev/null @@ -1,74 +0,0 @@ -require('./check-versions')() -var config = require('../config') -if (!process.env.NODE_ENV) process.env.NODE_ENV = JSON.parse(config.dev.env.NODE_ENV) -var path = require('path') -var express = require('express') -var webpack = require('webpack') -var opn = require('opn') -var proxyMiddleware = require('http-proxy-middleware') -var webpackConfig = process.env.NODE_ENV === 'testing' - ? require('./webpack.prod.conf') - : require('./webpack.dev.conf') - -// default port where dev server listens for incoming traffic -var port = process.env.PORT || config.dev.port -// Define HTTP proxies to your custom API backend -// https://github.com/chimurai/http-proxy-middleware -var proxyTable = config.dev.proxyTable - -var app = express() -var compiler = webpack(webpackConfig) - -var devMiddleware = require('webpack-dev-middleware')(compiler, { - publicPath: webpackConfig.output.publicPath, - stats: { - colors: true, - chunks: false - } -}) - -var hotMiddleware = require('webpack-hot-middleware')(compiler) -// force page reload when html-webpack-plugin template changes -compiler.plugin('compilation', function (compilation) { - compilation.plugin('html-webpack-plugin-after-emit', function (data, cb) { - hotMiddleware.publish({ action: 'reload' }) - cb() - }) -}) - -// proxy api requests -Object.keys(proxyTable).forEach(function (context) { - var options = proxyTable[context] - if (typeof options === 'string') { - options = { target: options } - } - app.use(proxyMiddleware(context, options)) -}) - -// handle fallback for HTML5 history API -app.use(require('connect-history-api-fallback')()) - -// serve webpack bundle output -app.use(devMiddleware) - -// enable hot-reload and state-preserving -// compilation error display -app.use(hotMiddleware) - -// serve pure static assets -var staticPath = path.posix.join(config.dev.assetsPublicPath, config.dev.assetsSubDirectory) -app.use(staticPath, express.static('./static')) - -module.exports = app.listen(port, function (err) { - if (err) { - console.log(err) - return - } - var uri = 'http://localhost:' + port - console.log('Listening at ' + uri + '\n') - - // when env is testing, don't need open it - if (process.env.NODE_ENV !== 'testing') { - opn(uri) - } -}) diff --git a/build/dev.js b/build/dev.js new file mode 100644 index 0000000..b78e8eb --- /dev/null +++ b/build/dev.js @@ -0,0 +1,11 @@ +import baseConfig from '.'; +import merge from 'webpack-merge'; +import { configs, inputs, outputs, loaders, plugins } from 'webpack-lib-kits'; + +export default merge(baseConfig, { + entry: inputs.docs(), + output: outputs.dev(), + devtool: configs.devtool(), + devServer: configs.devServer(), + plugins: [plugins.html()] +}); diff --git a/build/docs.js b/build/docs.js new file mode 100644 index 0000000..7da596e --- /dev/null +++ b/build/docs.js @@ -0,0 +1,9 @@ +import baseConfig from '.'; +import merge from 'webpack-merge'; +import { configs, inputs, outputs, loaders, plugins } from 'webpack-lib-kits'; + +export default merge(baseConfig, { + entry: inputs.docs(), + output: outputs.docs(), + plugins: [plugins.clean(), plugins.html()] +}); diff --git a/build/index.js b/build/index.js new file mode 100644 index 0000000..8c649ea --- /dev/null +++ b/build/index.js @@ -0,0 +1,15 @@ +import { configs, inputs, outputs, loaders, plugins } from 'webpack-lib-kits'; + +export default { + mode: configs.mode(), + entry: inputs.build(), + output: outputs.dev(), + resolve: { + extensions: configs.extensions(), + alias: configs.alias() + }, + module: { + rules: [loaders.babel(), loaders.image(), loaders.sass()] + }, + plugins: [plugins.minCssExtract()] +}; diff --git a/build/release.js b/build/release.js new file mode 100644 index 0000000..77dca50 --- /dev/null +++ b/build/release.js @@ -0,0 +1,6 @@ +import buildConfig from './build'; +import merge from 'webpack-merge'; +import { configs, inputs, outputs, loaders, plugins } from 'webpack-lib-kits'; +export default merge(buildConfig, { + plugins: [plugins.semver()] +}); diff --git a/build/server.js b/build/server.js new file mode 100644 index 0000000..a53d448 --- /dev/null +++ b/build/server.js @@ -0,0 +1,10 @@ +const express = require('express'); +const app = express(); +const portNumber = 3000; +const sourceDir = 'docs'; + +app.use(express.static(sourceDir)); +app.listen(portNumber, () => { + console.log(`Express web server started: http://localhost:${portNumber}`); + console.log(`Serving content from /${sourceDir}/`); +}); diff --git a/build/utils.js b/build/utils.js deleted file mode 100644 index dc3cdd0..0000000 --- a/build/utils.js +++ /dev/null @@ -1,61 +0,0 @@ -var path = require('path') -var config = require('../config') -var ExtractTextPlugin = require('extract-text-webpack-plugin') - -exports.assetsPath = function (_path) { - var assetsSubDirectory = process.env.NODE_ENV === 'production' - ? config.build.assetsSubDirectory - : config.dev.assetsSubDirectory - return path.posix.join(assetsSubDirectory, _path) -} - -exports.cssLoaders = function (options) { - options = options || {} - // generate loader string to be used with extract text plugin - function generateLoaders (loaders) { - var sourceLoader = loaders.map(function (loader) { - var extraParamChar - if (/\?/.test(loader)) { - loader = loader.replace(/\?/, '-loader?') - extraParamChar = '&' - } else { - loader = loader + '-loader' - extraParamChar = '?' - } - return loader + (options.sourceMap ? extraParamChar + 'sourceMap' : '') - }).join('!') - - // Extract CSS when that option is specified - // (which is the case during production build) - if (options.extract) { - return ExtractTextPlugin.extract('vue-style-loader', sourceLoader) - } else { - return ['vue-style-loader', sourceLoader].join('!') - } - } - - // http://vuejs.github.io/vue-loader/en/configurations/extract-css.html - return { - css: generateLoaders(['css']), - postcss: generateLoaders(['css']), - less: generateLoaders(['css', 'less']), - sass: generateLoaders(['css', 'sass?indentedSyntax']), - scss: generateLoaders(['css', 'sass']), - stylus: generateLoaders(['css', 'stylus']), - styl: generateLoaders(['css', 'stylus']) - } -} - -// Generate loaders for standalone style files (outside of .vue) -exports.styleLoaders = function (options) { - var output = [] - var loaders = exports.cssLoaders(options) - for (var extension in loaders) { - var loader = loaders[extension] - output.push({ - test: new RegExp('\\.' + extension + '$'), - loader: loader - }) - } - return output -} diff --git a/build/webpack.base.conf.js b/build/webpack.base.conf.js deleted file mode 100644 index 5a5772e..0000000 --- a/build/webpack.base.conf.js +++ /dev/null @@ -1,75 +0,0 @@ -var path = require('path') -var webpack = require('webpack') -var config = require('../config') -var utils = require('./utils') -var env = process.env.NODE_ENV; - -// check env & config/index.js to decide weither to enable CSS Sourcemaps for the -// various preprocessor loaders added to vue-loader at the end of this file -var cssSourceMapDev = (env === 'development' && config.dev.cssSourceMap) -var cssSourceMapProd = (env === 'production' && config.build.productionSourceMap) -var useCssSourceMap = cssSourceMapDev || cssSourceMapProd; -var externals = process.env.NODE_ENV === 'production' ? { - 'react': 'react', - 'react-default-node-name': 'react-default-node-name', - "prop-types": "prop-types", - 'react-dom': 'react-dom' -} : {}; - -module.exports = { - entry: { - app: './src/dev.js' - }, - output: { - path: config.build.assetsRoot, - publicPath: process.env.NODE_ENV === 'production' ? config.build.assetsPublicPath : config.dev.assetsPublicPath, - filename: '[name].js' - }, - resolve: { - extensions: ['', '.js', '.jsx', '.scss'], - fallback: [path.join(__dirname, '../node_modules')], - alias: { - React: path.resolve(__dirname, '../node_modules/react'), - ReactDOM: path.resolve(__dirname, '../node_modules/react-dom'), - 'src': path.resolve(__dirname, '../src'), - 'assets': path.resolve(__dirname, '../src/assets'), - 'components': path.resolve(__dirname, '../src/components') - } - }, - plugins: [ - new webpack.ProvidePlugin({ - 'React': 'react', - 'ReactDOM': 'react-dom' - }), - ], - resolveLoader: { - fallback: [path.join(__dirname, '../node_modules')] - }, - externals: externals, - module: { - loaders: [{ - test: /\.js$/, - loader: 'babel', - exclude: /node_modules/ - }, { - test: /\.css$/, - loader: 'style-loader!css-loader!autoprefixer-loader', - }, { - test: /\.scss$/, - loader: 'style-loader!css-loader!autoprefixer-loader!sass-loader' - }, { - test: /\.(gif|jpg|png)\??.*$/, - loader: 'url-loader?limit=8096&name=images/[name].[ext]' - }, { - test: /\.(woff|svg|eot|ttf)\??.*$/, - loader: 'url-loader?limit=8096&name=fonts/[name].[ext]' - }, { - test: /\.(html|tpl)$/, - loader: 'html-loader' - }, { - test: /\.js|jsx$/, - loaders: ["react-hot-loader/webpack", 'babel-loader?presets[]=react,presets[]=es2015'], - include: path.join(__dirname, 'js') - }] - } -} diff --git a/build/webpack.dev.conf.js b/build/webpack.dev.conf.js deleted file mode 100644 index c101bc3..0000000 --- a/build/webpack.dev.conf.js +++ /dev/null @@ -1,31 +0,0 @@ -var config = require('../config') -var webpack = require('webpack') -var merge = require('webpack-merge') -var utils = require('./utils') -var baseWebpackConfig = require('./webpack.base.conf') -var HtmlWebpackPlugin = require('html-webpack-plugin') - -// add hot-reload related code to entry chunks -Object.keys(baseWebpackConfig.entry).forEach(function (name) { - baseWebpackConfig.entry[name] = ['./build/dev-client'].concat(baseWebpackConfig.entry[name]) -}) - -module.exports = merge(baseWebpackConfig, { - // eval-source-map is faster for development - devtool: '#eval-source-map', - plugins: [ - new webpack.DefinePlugin({ - 'process.env': config.dev.env - }), - // https://github.com/glenjamin/webpack-hot-middleware#installation--usage - new webpack.optimize.OccurenceOrderPlugin(), - new webpack.HotModuleReplacementPlugin(), - new webpack.NoErrorsPlugin(), - // https://github.com/ampedandwired/html-webpack-plugin - new HtmlWebpackPlugin({ - filename: 'index.html', - template: 'index.html', - inject: true - }) - ] -}) diff --git a/build/webpack.prod.conf.js b/build/webpack.prod.conf.js deleted file mode 100644 index 8d86576..0000000 --- a/build/webpack.prod.conf.js +++ /dev/null @@ -1,32 +0,0 @@ -const webpack = require('webpack') -const base = require('./webpack.base.conf') -const config = require('../config') - -base.entry = { - lib: './src/main.js' -} - -base.output = { - path: config.build.assetsRoot, - publicPath: config.build.assetsPublicPath, - filename: 'react-status-manager.js', - library: 'ReactStatusManager', - libraryTarget: 'umd' -} - -var webpackConfig = Object.assign({}, base) - -webpackConfig.devtool = '#source-map' -webpackConfig.plugins = (webpackConfig.plugins || []).concat([ - new webpack.DefinePlugin({ - 'process.env': { - NODE_ENV: '"production"' - } - }), - new webpack.optimize.UglifyJsPlugin({ - compress: { warnings: false } - }), - new webpack.optimize.OccurenceOrderPlugin(), -]) - -module.exports = webpackConfig diff --git a/config/dev.env.js b/config/dev.env.js deleted file mode 100644 index de37f15..0000000 --- a/config/dev.env.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - NODE_ENV: '"development"' -} diff --git a/config/index.js b/config/index.js deleted file mode 100644 index 207dfbd..0000000 --- a/config/index.js +++ /dev/null @@ -1,32 +0,0 @@ -// see http://vuejs-templates.github.io/webpack for documentation. -var path = require('path') - -module.exports = { - build: { - env: require('./prod.env'), - index: path.resolve(__dirname, '../dist/index.html'), - assetsRoot: path.resolve(__dirname, '../dist'), - assetsSubDirectory: 'static', - assetsPublicPath: '/', - productionSourceMap: true, - // Gzip off by default as many popular static hosts such as - // Surge or Netlify already gzip all static assets for you. - // Before setting to `true`, make sure to: - // npm install --save-dev compression-webpack-plugin - productionGzip: false, - productionGzipExtensions: ['js', 'css'] - }, - dev: { - env: require('./dev.env'), - port: 8080, - assetsSubDirectory: 'static', - assetsPublicPath: '/', - proxyTable: {}, - // CSS Sourcemaps off by default because relative paths are "buggy" - // with this option, according to the CSS-Loader README - // (https://github.com/webpack/css-loader#sourcemaps) - // In our experience, they generally work as expected, - // just be aware of this issue when enabling this option. - cssSourceMap: false - } -} diff --git a/config/prod.env.js b/config/prod.env.js deleted file mode 100644 index 773d263..0000000 --- a/config/prod.env.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - NODE_ENV: '"production"' -} diff --git a/dist/index.js b/dist/index.js new file mode 100644 index 0000000..a6637b7 --- /dev/null +++ b/dist/index.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("prop-types"),require("react"),require("react-dom"),require("classnames"),require("noop"),require("object-assign")):"function"==typeof define&&define.amd?define(["prop-types","react","react-dom","classnames","noop","object-assign"],t):"object"==typeof exports?exports.BoilerplateReactComponent=t(require("prop-types"),require("react"),require("react-dom"),require("classnames"),require("noop"),require("object-assign")):e.BoilerplateReactComponent=t(e["prop-types"],e.react,e["react-dom"],e.classnames,e.noop,e["object-assign"])}(window,function(e,t,r,n,o,i){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=6)}([function(t,r){t.exports=e},function(e,r){e.exports=t},function(e,t){e.exports=r},function(e,t){e.exports=n},function(e,t){e.exports=o},function(e,t){e.exports=i},function(e,t,r){"use strict";r.r(t);var n=r(1),o=r.n(n),i=(r(2),r(0)),u=r.n(i);r(3),r(4),r(5);function c(e){return(c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function f(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function p(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},i=Object.keys(e);for(n=0;n=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function l(e,t){for(var r=0;r=0||Object.prototype.hasOwnProperty.call(e,n)&&(r[n]=e[n]);return r}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function u(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var c=Object.assign||function(e){for(var t=1;t= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\t\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\t\n\tfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\t\n\tfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\t\n\tvar _default = function (_Component) {\n\t _inherits(_default, _Component);\n\t\n\t function _default() {\n\t _classCallCheck(this, _default);\n\t\n\t return _possibleConstructorReturn(this, (_default.__proto__ || Object.getPrototypeOf(_default)).apply(this, arguments));\n\t }\n\t\n\t _createClass(_default, [{\n\t key: 'render',\n\t value: function render() {\n\t var _props = this.props,\n\t value = _props.value,\n\t items = _props.items,\n\t children = _props.children,\n\t nodeName = _props.nodeName,\n\t props = _objectWithoutProperties(_props, ['value', 'items', 'children', 'nodeName']);\n\t\n\t return (0, _react.createElement)(nodeName, _extends({\n\t children: this.children\n\t }, props));\n\t }\n\t }, {\n\t key: 'children',\n\t\n\t /*===properties end===*/\n\t\n\t /*===properties start===*/\n\t get: function get() {\n\t var _props2 = this.props,\n\t value = _props2.value,\n\t children = _props2.children,\n\t items = _props2.items;\n\t\n\t return children.map(function (child, index) {\n\t return value === items[index] ? child : null;\n\t });\n\t }\n\t }]);\n\t\n\t return _default;\n\t}(_react.Component);\n\t\n\t_default.propTypes = {\n\t className: _propTypes2.default.string,\n\t items: _propTypes2.default.array,\n\t value: _propTypes2.default.any,\n\t nodeName: _propTypes2.default.any\n\t};\n\t_default.defaultProps = {\n\t items: [],\n\t nodeName: (0, _reactDefaultNodeName2.default)()\n\t};\n\texports.default = _default;\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_2__;\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_3__;\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_4__;\n\n/***/ })\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// react-status-manager.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 75ac05337f1f2a89a512","import ReactStatusManager from 'components/react-status-manager';\nexport default ReactStatusManager;\n\n\n\n// WEBPACK FOOTER //\n// ./src/main.js","import { Component, createElement } from 'react';\nimport PropTypes from 'prop-types';\nimport nodeName from 'react-default-node-name';\n\nexport default class extends Component {\n /*===properties start===*/\n static propTypes = {\n className: PropTypes.string,\n items: PropTypes.array,\n value: PropTypes.any,\n nodeName: PropTypes.any\n };\n\n static defaultProps = {\n items: [],\n nodeName: nodeName()\n };\n /*===properties end===*/\n\n get children() {\n const { value, children, items } = this.props;\n return children.map((child, index) => {\n return value === items[index] ? child : null;\n });\n }\n\n render() {\n const { value, items, children, nodeName, ...props } = this.props;\n return createElement(nodeName, {\n children: this.children,\n ...props\n });\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/react-status-manager.js","module.exports = __WEBPACK_EXTERNAL_MODULE_2__;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"prop-types\"\n// module id = 2\n// module chunks = 0","module.exports = __WEBPACK_EXTERNAL_MODULE_3__;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"react\"\n// module id = 3\n// module chunks = 0","module.exports = __WEBPACK_EXTERNAL_MODULE_4__;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"react-default-node-name\"\n// module id = 4\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/style.scss b/dist/style.scss new file mode 100644 index 0000000..67bf68a --- /dev/null +++ b/dist/style.scss @@ -0,0 +1,4 @@ +$react-status-manager-options: () !default; + +.react-status-manager { +} diff --git a/docs/assets/bundle.4f1bedde15b6b6695b2c.js b/docs/assets/bundle.4f1bedde15b6b6695b2c.js new file mode 100644 index 0000000..34eeecc --- /dev/null +++ b/docs/assets/bundle.4f1bedde15b6b6695b2c.js @@ -0,0 +1,42 @@ +!function(e){var t={};function n(r){if(t[r])return t[r].exports;var l=t[r]={i:r,l:!1,exports:{}};return e[r].call(l.exports,l,l.exports,n),l.l=!0,l.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var l in e)n.d(r,l,function(t){return e[t]}.bind(null,l));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=17)}([function(e,t,n){"use strict";e.exports=n(4)},function(e,t,n){e.exports=n(9)()},function(e,t,n){"use strict"; +/* +object-assign +(c) Sindre Sorhus +@license MIT +*/var r=Object.getOwnPropertySymbols,l=Object.prototype.hasOwnProperty,i=Object.prototype.propertyIsEnumerable;function o(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map(function(e){return t[e]}).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach(function(e){r[e]=e}),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(e){return!1}}()?Object.assign:function(e,t){for(var n,a,u=o(e),c=1;cU.length&&U.push(e)}function z(e,t,n){return null==e?0:function e(t,n,r,l){var a=typeof t;"undefined"!==a&&"boolean"!==a||(t=null);var u=!1;if(null===t)u=!0;else switch(a){case"string":case"number":u=!0;break;case"object":switch(t.$$typeof){case i:case o:u=!0}}if(u)return r(l,t,""===n?"."+D(t,0):n),1;if(u=0,n=""===n?".":n+":",Array.isArray(t))for(var c=0;cthis.eventPool.length&&this.eventPool.push(e)}function fe(e){e.eventPool=[],e.getPooled=ce,e.release=se}l(ue.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=oe)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=oe)},persist:function(){this.isPersistent=oe},isPersistent:ae,destructor:function(){var e,t=this.constructor.Interface;for(e in t)this[e]=null;this.nativeEvent=this._targetInst=this.dispatchConfig=null,this.isPropagationStopped=this.isDefaultPrevented=ae,this._dispatchInstances=this._dispatchListeners=null}}),ue.Interface={type:null,target:null,currentTarget:function(){return null},eventPhase:null,bubbles:null,cancelable:null,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:null,isTrusted:null},ue.extend=function(e){function t(){}function n(){return r.apply(this,arguments)}var r=this;t.prototype=r.prototype;var i=new t;return l(i,n.prototype),n.prototype=i,n.prototype.constructor=n,n.Interface=l({},r.Interface,e),n.extend=r.extend,fe(n),n},fe(ue);var de=ue.extend({data:null}),pe=ue.extend({data:null}),me=[9,13,27,32],he=H&&"CompositionEvent"in window,ve=null;H&&"documentMode"in document&&(ve=document.documentMode);var ye=H&&"TextEvent"in window&&!ve,ge=H&&(!he||ve&&8=ve),be=String.fromCharCode(32),ke={beforeInput:{phasedRegistrationNames:{bubbled:"onBeforeInput",captured:"onBeforeInputCapture"},dependencies:["compositionend","keypress","textInput","paste"]},compositionEnd:{phasedRegistrationNames:{bubbled:"onCompositionEnd",captured:"onCompositionEndCapture"},dependencies:"blur compositionend keydown keypress keyup mousedown".split(" ")},compositionStart:{phasedRegistrationNames:{bubbled:"onCompositionStart",captured:"onCompositionStartCapture"},dependencies:"blur compositionstart keydown keypress keyup mousedown".split(" ")},compositionUpdate:{phasedRegistrationNames:{bubbled:"onCompositionUpdate",captured:"onCompositionUpdateCapture"},dependencies:"blur compositionupdate keydown keypress keyup mousedown".split(" ")}},we=!1;function xe(e,t){switch(e){case"keyup":return-1!==me.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"blur":return!0;default:return!1}}function Te(e){return"object"==typeof(e=e.detail)&&"data"in e?e.data:null}var Se=!1;var _e={eventTypes:ke,extractEvents:function(e,t,n,r){var l=void 0,i=void 0;if(he)e:{switch(e){case"compositionstart":l=ke.compositionStart;break e;case"compositionend":l=ke.compositionEnd;break e;case"compositionupdate":l=ke.compositionUpdate;break e}l=void 0}else Se?xe(e,n)&&(l=ke.compositionEnd):"keydown"===e&&229===n.keyCode&&(l=ke.compositionStart);return l?(ge&&"ko"!==n.locale&&(Se||l!==ke.compositionStart?l===ke.compositionEnd&&Se&&(i=ie()):(re="value"in(ne=r)?ne.value:ne.textContent,Se=!0)),l=de.getPooled(l,t,n,r),i?l.data=i:null!==(i=Te(n))&&(l.data=i),$(l),i=l):i=null,(e=ye?function(e,t){switch(e){case"compositionend":return Te(t);case"keypress":return 32!==t.which?null:(we=!0,be);case"textInput":return(e=t.data)===be&&we?null:e;default:return null}}(e,n):function(e,t){if(Se)return"compositionend"===e||!he&&xe(e,t)?(e=ie(),le=re=ne=null,Se=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1