@styli/react
Version:
127 lines (106 loc) • 3.3 kB
JavaScript
import { injectGlobalStyle, setConfig } from '@styli/core';
import { styled } from '@styli/styled';
import presetWeb from '@styli/preset-web';
import { createElement, forwardRef } from 'react';
import { store } from '@styli/store';
import { Parser } from '@styli/parser';
function _extends() {
_extends = Object.assign || function (target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i];
for (var key in source) {
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key];
}
}
}
return target;
};
return _extends.apply(this, arguments);
}
function _objectWithoutPropertiesLoose(source, excluded) {
if (source == null) return {};
var target = {};
var sourceKeys = Object.keys(source);
var key, i;
for (i = 0; i < sourceKeys.length; i++) {
key = sourceKeys[i];
if (excluded.indexOf(key) >= 0) continue;
target[key] = source[key];
}
return target;
}
/**
* JSX Pragma
* TODO: this is minimal version
* @param element element type
* @param props element props
* @param children element children
*/
function jsx(element, props) {
if (props === void 0) {
props = {};
}
for (var _len = arguments.length, children = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
children[_key - 2] = arguments[_key];
}
// Do'not handle third-party Component and empty props
if (typeof element !== 'string' || !props || !Object.keys(props).length) {
return createElement.apply(null, arguments);
}
var parser = new Parser(props);
var parsedProps = parser.getParsedProps();
var inline = store.config.inline;
if (inline) {
if (Array.isArray(props.style)) {
parsedProps.style = [parser.toStyle(), props.style];
} else {
parsedProps.style = _extends({}, parser.toStyle(), props.style);
}
} else {
parser.insertRule();
var finalClassName = parser.getClassNames().join(' ').trim();
if (finalClassName) parsedProps.className = finalClassName;
}
return createElement.apply(null, [element, parsedProps].concat(children));
}
var Box = /*#__PURE__*/forwardRef(function (props, ref) {
var _props$as = props.as,
as = _props$as === void 0 ? 'div' : _props$as,
rest = _objectWithoutPropertiesLoose(props, ["as"]);
var parser = new Parser(rest);
var parsedProps = parser.getParsedProps();
var inline = store.config.inline;
if (inline) {
if (Array.isArray(rest.style)) {
parsedProps.style = [parser.toStyle(), rest.style];
} else {
parsedProps.style = _extends({}, parser.toStyle(), rest.style);
}
} else {
parser.insertRule();
var finalClassName = parser.getClassNames().join(' ');
parsedProps.className = finalClassName;
}
return createElement(as, _extends({
ref: ref
}, parsedProps));
});
var View = /*#__PURE__*/styled('div');
var Text = /*#__PURE__*/styled('span');
var Image = /*#__PURE__*/styled('img');
injectGlobalStyle({
'*': {
border: '0 solid #ccc',
boxSizing: 'border-box'
},
'*::before': {
boxSizing: 'border-box'
},
'*::after': {
boxSizing: 'border-box'
}
});
setConfig(presetWeb);
export { Box, Image, Text, View, jsx };
//# sourceMappingURL=react.esm.js.map