From ae542c018489f842736b462120c2a2940e91bfc9 Mon Sep 17 00:00:00 2001 From: Vadim Dalecky Date: Sat, 24 Mar 2018 16:41:43 +0000 Subject: [PATCH] feat: add react preset --- docs/Presets.md | 1 + preset/react.js | 38 ++++++++++++++++++++++++++++++++++++++ preset/vdom.js | 9 +++++++++ 3 files changed, 48 insertions(+) create mode 100644 preset/react.js diff --git a/docs/Presets.md b/docs/Presets.md index b0790f88..70c7c8de 100644 --- a/docs/Presets.md +++ b/docs/Presets.md @@ -25,3 +25,4 @@ Below is a list of available presets. - `sheet` — installs [`sheet()`](./sheet.md) addon, as well as `stable`, `nesting`, `atoms`, and `keyframes` addons - `vdom` — similar to `sheet` preset, but also installs [`jsx()`](./jsx.md) addon, you need to provide `h` function in configuration +- `react` — similar to `vdom` preset, but specifies hyperscript function `h` automatically and also installs `snake`, `style`, `styled`, and `decorator` addons diff --git a/preset/react.js b/preset/react.js new file mode 100644 index 00000000..9049dcd6 --- /dev/null +++ b/preset/react.js @@ -0,0 +1,38 @@ +'use strict'; + +var h = require('react').createElement; +var create = require('../index').create; +var addonCache = require('../addon/cache').addon; +var addonStable = require('../addon/stable').addon; +var addonNesting = require('../addon/nesting').addon; +var addonAtoms = require('../addon/atoms').addon; +var addonSnake = require('../addon/snake').addon; +var addonKeyframes = require('../addon/keyframes').addon; +var addonRule = require('../addon/rule').addon; +var addonSheet = require('../addon/sheet').addon; +var addonJsx = require('../addon/jsx').addon; +var addonStyle = require('../addon/style').addon; +var addonStyled = require('../addon/styled').addon; +var addonDecorator = require('../addon/decorator').addon; + +exports.preset = function (config) { + config = config || {}; + config.h = config.h || h; + + var nano = create(config); + + addonCache(nano); + addonStable(nano); + addonNesting(nano); + addonAtoms(nano); + addonSnake(nano); + addonKeyframes(nano); + addonRule(nano); + addonSheet(nano); + addonJsx(nano); + addonStyle(nano); + addonStyled(nano); + addonDecorator(nano); + + return nano; +}; diff --git a/preset/vdom.js b/preset/vdom.js index 465a1f0c..f858a36a 100644 --- a/preset/vdom.js +++ b/preset/vdom.js @@ -11,6 +11,15 @@ var addonSheet = require('../addon/sheet').addon; var addonJsx = require('../addon/jsx').addon; exports.preset = function (config) { + if (process.env.NODE_ENV !== 'production') { + if (!config || !(config instanceof Object) || !config.h) { + console.error( + 'For "vdom" nano-css preset you have to provide virtual DOM ' + + 'hyperscript function h. Such as: preset({h: require("react").createElement})' + ); + } + } + var nano = create(config); addonCache(nano);