├── src ├── __tests__ │ ├── setup.js │ └── index.test.js ├── plugins │ ├── prefixer.js │ ├── classnames.js │ ├── dom.js │ ├── attr.js │ ├── on.js │ └── css.js ├── applyPlugins.js └── patch.js ├── .storybook ├── addons.js ├── config.js ├── dom.stories.js ├── attr.stories.js ├── on.stories.js ├── css.stories.js ├── prefixer.stories.js ├── lifecycles.stories.js └── classnames.stories.js ├── .gitignore ├── .npmignore ├── .travis.yml ├── renovate.json ├── README.md └── package.json /src/__tests__/setup.js: -------------------------------------------------------------------------------- 1 | process.env.NODE_ENV = 'production'; 2 | -------------------------------------------------------------------------------- /src/__tests__/index.test.js: -------------------------------------------------------------------------------- 1 | describe('works', () => { 2 | it('runs', () => {}); 3 | }); -------------------------------------------------------------------------------- /.storybook/addons.js: -------------------------------------------------------------------------------- 1 | import '@storybook/addon-actions/register'; 2 | import '@storybook/addon-links/register'; 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .idea/ 2 | node_modules/ 3 | .nyc_output/ 4 | coverage/ 5 | package-lock.json 6 | yarn.lock 7 | .DS_Store 8 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | test/ 3 | .idea/ 4 | .nyc_output/ 5 | coverage/ 6 | package-lock.json 7 | yarn.lock 8 | .DS_Store 9 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | sudo: false 2 | os: 3 | - linux 4 | language: node_js 5 | node_js: 6 | - '8' 7 | matrix: 8 | allow_failures: [] 9 | fast_finish: true 10 | cache: 11 | yarn: true 12 | directories: 13 | - "node_modules" 14 | -------------------------------------------------------------------------------- /renovate.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "config:base" 4 | ], 5 | "automerge": true, 6 | "pinVersions": false, 7 | "major": { 8 | "automerge": false 9 | }, 10 | "devDependencies": { 11 | "automerge": true, 12 | "pinVersions": true 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /.storybook/config.js: -------------------------------------------------------------------------------- 1 | import {configure} from '@storybook/react'; 2 | 3 | // automatically import all files ending in *.stories.js 4 | const req = require.context('.', true, /.stories.js$/); 5 | function loadStories() { 6 | req.keys().forEach(filename => req(filename)); 7 | } 8 | 9 | configure(loadStories, module); 10 | -------------------------------------------------------------------------------- /src/plugins/prefixer.js: -------------------------------------------------------------------------------- 1 | import Prefixer from 'inline-style-prefixer' 2 | 3 | const prefixer = new Prefixer(); 4 | 5 | const plugin = (args) => { 6 | const props = args[1]; 7 | 8 | if (props && props.style) { 9 | props.style = prefixer.prefix(props.style); 10 | } 11 | 12 | return args; 13 | }; 14 | 15 | export default plugin; 16 | -------------------------------------------------------------------------------- /.storybook/dom.stories.js: -------------------------------------------------------------------------------- 1 | import '../src/patch'; 2 | import React from 'react'; 3 | import {storiesOf} from '@storybook/react'; 4 | import {action} from '@storybook/addon-actions'; 5 | import {linkTo} from '@storybook/addon-links'; 6 | import {create} from 'nano-css'; 7 | import {addon as addonRule} from 'nano-css/addon/rule'; 8 | 9 | storiesOf('dom', module) 10 | .add('.innerHTML', () =>
) 11 | -------------------------------------------------------------------------------- /src/applyPlugins.js: -------------------------------------------------------------------------------- 1 | const applyPlugins = (h, plugins) => { 2 | return (...args) => { 3 | const type = args[0]; 4 | const props = args[1]; 5 | 6 | if (props && (typeof type === 'string')) { 7 | for (let i = 0; i < plugins.length; i++) 8 | args = plugins[i](args); 9 | } 10 | 11 | return h(...args); 12 | }; 13 | }; 14 | 15 | export default applyPlugins; 16 | -------------------------------------------------------------------------------- /src/plugins/classnames.js: -------------------------------------------------------------------------------- 1 | import cx from 'classnames'; 2 | 3 | const plugin = (args) => { 4 | const props = args[1]; 5 | 6 | if (!props) return args; 7 | 8 | let className = props.className || props.class; 9 | 10 | delete props.class; 11 | 12 | if (className) { 13 | className = cx(className); 14 | props.className = className; 15 | } 16 | 17 | return args; 18 | }; 19 | 20 | export default plugin; 21 | -------------------------------------------------------------------------------- /.storybook/attr.stories.js: -------------------------------------------------------------------------------- 1 | import '../src/patch'; 2 | import React from 'react'; 3 | import {storiesOf} from '@storybook/react'; 4 | import {action} from '@storybook/addon-actions'; 5 | import {linkTo} from '@storybook/addon-links'; 6 | import {create} from 'nano-css'; 7 | import {addon as addonRule} from 'nano-css/addon/rule'; 8 | 9 | storiesOf('attr', module) 10 | .add('[aria-hidden]', () =>