unpkg/public/@emotion/core@10.0.6/dist/core.cjs.dev.js

475 lines
13 KiB
JavaScript

'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
var React = require('react');
var createCache = _interopDefault(require('@emotion/cache'));
var utils = require('@emotion/utils');
var serialize = require('@emotion/serialize');
var sheet = require('@emotion/sheet');
var css = _interopDefault(require('@emotion/css'));
function _inheritsLoose(subClass, superClass) {
subClass.prototype = Object.create(superClass.prototype);
subClass.prototype.constructor = subClass;
subClass.__proto__ = superClass;
}
var isBrowser = typeof document !== 'undefined';
var EmotionCacheContext = React.createContext(isBrowser ? createCache() : null);
var ThemeContext = React.createContext({});
var CacheProvider = EmotionCacheContext.Provider;
exports.withEmotionCache = function withEmotionCache(func) {
var render = function render(props, ref) {
return React.createElement(EmotionCacheContext.Consumer, null, function ( // $FlowFixMe we know it won't be null
cache) {
return func(props, cache, ref);
});
}; // $FlowFixMe
return React.forwardRef(render);
};
if (!isBrowser) {
var BasicProvider =
/*#__PURE__*/
function (_React$Component) {
_inheritsLoose(BasicProvider, _React$Component);
function BasicProvider(props, context, updater) {
var _this;
_this = _React$Component.call(this, props, context, updater) || this;
_this.state = {
value: createCache()
};
return _this;
}
var _proto = BasicProvider.prototype;
_proto.render = function render() {
return React.createElement(EmotionCacheContext.Provider, this.state, this.props.children(this.state.value));
};
return BasicProvider;
}(React.Component);
exports.withEmotionCache = function withEmotionCache(func) {
return function (props) {
return React.createElement(EmotionCacheContext.Consumer, null, function (context) {
if (context === null) {
return React.createElement(BasicProvider, null, function (newContext) {
return func(props, newContext);
});
} else {
return func(props, context);
}
});
};
};
}
var typePropName = '__EMOTION_TYPE_PLEASE_DO_NOT_USE__';
var labelPropName = '__EMOTION_LABEL_PLEASE_DO_NOT_USE__';
var hasOwnProperty = Object.prototype.hasOwnProperty;
var render = function render(cache, props, theme, ref) {
var type = props[typePropName];
var registeredStyles = [];
var className = '';
var cssProp = theme === null ? props.css : props.css(theme); // so that using `css` from `emotion` and passing the result to the css prop works
// not passing the registered cache to serializeStyles because it would
// make certain babel optimisations not possible
if (typeof cssProp === 'string' && cache.registered[cssProp] !== undefined) {
cssProp = cache.registered[cssProp];
}
registeredStyles.push(cssProp);
if (props.className !== undefined) {
className = utils.getRegisteredStyles(cache.registered, registeredStyles, props.className);
}
var serialized = serialize.serializeStyles(registeredStyles);
if (process.env.NODE_ENV !== 'production' && serialized.name.indexOf('-') === -1) {
var labelFromStack = props[labelPropName];
if (labelFromStack) {
serialized = serialize.serializeStyles([serialized, 'label:' + labelFromStack + ';']);
}
}
var rules = utils.insertStyles(cache, serialized, typeof type === 'string');
className += cache.key + "-" + serialized.name;
var newProps = {};
for (var key in props) {
if (hasOwnProperty.call(props, key) && key !== 'css' && key !== typePropName && (process.env.NODE_ENV === 'production' || key !== labelPropName)) {
newProps[key] = props[key];
}
}
newProps.ref = ref;
newProps.className = className;
var ele = React.createElement(type, newProps);
if (!isBrowser && rules !== undefined) {
var _ref;
var serializedNames = serialized.name;
var next = serialized.next;
while (next !== undefined) {
serializedNames += ' ' + next.name;
next = next.next;
}
return React.createElement(React.Fragment, null, React.createElement("style", (_ref = {}, _ref["data-emotion-" + cache.key] = serializedNames, _ref.dangerouslySetInnerHTML = {
__html: rules
}, _ref.nonce = cache.sheet.nonce, _ref)), ele);
}
return ele;
};
var Emotion = exports.withEmotionCache(function (props, cache, ref) {
// use Context.read for the theme when it's stable
if (typeof props.css === 'function') {
return React.createElement(ThemeContext.Consumer, null, function (theme) {
return render(cache, props, theme, ref);
});
}
return render(cache, props, null, ref);
}); // $FlowFixMe
var jsx = function jsx(type, props) {
var args = arguments;
if (props == null || props.css == null) {
// $FlowFixMe
return React.createElement.apply(undefined, args);
}
if (process.env.NODE_ENV !== 'production' && typeof props.css === 'string' && // check if there is a css declaration
props.css.indexOf(':') !== -1) {
throw new Error("Strings are not allowed as css prop values, please wrap it in a css template literal from '@emotion/css' like this: css`" + props.css + "`");
}
var argsLength = args.length;
var createElementArgArray = new Array(argsLength);
createElementArgArray[0] = Emotion;
var newProps = {};
for (var key in props) {
if (hasOwnProperty.call(props, key)) {
newProps[key] = props[key];
}
}
newProps[typePropName] = type;
if (process.env.NODE_ENV !== 'production') {
var error = new Error();
if (error.stack) {
// chrome
var match = error.stack.match(/at jsx.*\n\s+at ([A-Z][A-Za-z]+) /);
if (!match) {
// safari and firefox
match = error.stack.match(/^.*\n([A-Z][A-Za-z]+)@/);
}
if (match) {
newProps[labelPropName] = match[1];
}
}
}
createElementArgArray[1] = newProps;
for (var i = 2; i < argsLength; i++) {
createElementArgArray[i] = args[i];
} // $FlowFixMe
return React.createElement.apply(null, createElementArgArray);
};
var warnedAboutCssPropForGlobal = false;
var Global =
/* #__PURE__ */
exports.withEmotionCache(function (props, cache) {
if (process.env.NODE_ENV !== 'production' && !warnedAboutCssPropForGlobal && ( // check for className as well since the user is
// probably using the custom createElement which
// means it will be turned into a className prop
// $FlowFixMe I don't really want to add it to the type since it shouldn't be used
props.className || props.css)) {
console.error("It looks like you're using the css prop on Global, did you mean to use the styles prop instead?");
warnedAboutCssPropForGlobal = true;
}
var styles = props.styles;
if (typeof styles === 'function') {
return React.createElement(ThemeContext.Consumer, null, function (theme) {
var serialized = serialize.serializeStyles([styles(theme)]);
return React.createElement(InnerGlobal, {
serialized: serialized,
cache: cache
});
});
}
var serialized = serialize.serializeStyles([styles]);
return React.createElement(InnerGlobal, {
serialized: serialized,
cache: cache
});
});
// maintain place over rerenders.
// initial render from browser, insertBefore context.sheet.tags[0] or if a style hasn't been inserted there yet, appendChild
// initial client-side render from SSR, use place of hydrating tag
var InnerGlobal =
/*#__PURE__*/
function (_React$Component) {
_inheritsLoose(InnerGlobal, _React$Component);
function InnerGlobal(props, context, updater) {
return _React$Component.call(this, props, context, updater) || this;
}
var _proto = InnerGlobal.prototype;
_proto.componentDidMount = function componentDidMount() {
this.sheet = new sheet.StyleSheet({
key: this.props.cache.key + "-global",
nonce: this.props.cache.sheet.nonce,
container: this.props.cache.sheet.container
}); // $FlowFixMe
var node = document.querySelector("style[data-emotion-" + this.props.cache.key + "=\"" + this.props.serialized.name + "\"]");
if (node !== null) {
this.sheet.tags.push(node);
}
if (this.props.cache.sheet.tags.length) {
this.sheet.before = this.props.cache.sheet.tags[0];
}
this.insertStyles();
};
_proto.componentDidUpdate = function componentDidUpdate(prevProps) {
if (prevProps.serialized.name !== this.props.serialized.name) {
this.insertStyles();
}
};
_proto.insertStyles = function insertStyles() {
if (this.props.serialized.next !== undefined) {
// insert keyframes
utils.insertStyles(this.props.cache, this.props.serialized.next, true);
}
if (this.sheet.tags.length) {
// if this doesn't exist then it will be null so the style element will be appended
var element = this.sheet.tags[this.sheet.tags.length - 1].nextElementSibling;
this.sheet.before = element;
this.sheet.flush();
}
this.props.cache.insert("", this.props.serialized, this.sheet, false);
};
_proto.componentWillUnmount = function componentWillUnmount() {
this.sheet.flush();
};
_proto.render = function render() {
if (!isBrowser) {
var _ref;
var serialized = this.props.serialized;
var serializedNames = serialized.name;
var serializedStyles = serialized.styles;
var next = serialized.next;
while (next !== undefined) {
serializedNames += ' ' + next.name;
serializedStyles += next.styles;
next = next.next;
}
var rules = this.props.cache.insert("", {
name: serializedNames,
styles: serializedStyles
}, this.sheet, false);
return React.createElement("style", (_ref = {}, _ref["data-emotion-" + this.props.cache.key] = serializedNames, _ref.dangerouslySetInnerHTML = {
__html: rules
}, _ref.nonce = this.props.cache.sheet.nonce, _ref));
}
return null;
};
return InnerGlobal;
}(React.Component);
var keyframes = function keyframes() {
var insertable = css.apply(void 0, arguments);
var name = "animation-" + insertable.name; // $FlowFixMe
return {
name: name,
styles: "@keyframes " + name + "{" + insertable.styles + "}",
anim: 1,
toString: function toString() {
return "_EMO_" + this.name + "_" + this.styles + "_EMO_";
}
};
};
var classnames = function classnames(args) {
var len = args.length;
var i = 0;
var cls = '';
for (; i < len; i++) {
var arg = args[i];
if (arg == null) continue;
var toAdd = void 0;
switch (typeof arg) {
case 'boolean':
break;
case 'object':
{
if (Array.isArray(arg)) {
toAdd = classnames(arg);
} else {
toAdd = '';
for (var k in arg) {
if (arg[k] && k) {
toAdd && (toAdd += ' ');
toAdd += k;
}
}
}
break;
}
default:
{
toAdd = arg;
}
}
if (toAdd) {
cls && (cls += ' ');
cls += toAdd;
}
}
return cls;
};
function merge(registered, css$$1, className) {
var registeredStyles = [];
var rawClassName = utils.getRegisteredStyles(registered, registeredStyles, className);
if (registeredStyles.length < 2) {
return className;
}
return rawClassName + css$$1(registeredStyles);
}
var ClassNames = exports.withEmotionCache(function (props, context) {
return React.createElement(ThemeContext.Consumer, null, function (theme) {
var rules = '';
var serializedHashes = '';
var hasRendered = false;
var css$$1 = function css$$1() {
if (hasRendered && process.env.NODE_ENV !== 'production') {
throw new Error('css can only be used during render');
}
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
var serialized = serialize.serializeStyles(args, context.registered);
if (isBrowser) {
utils.insertStyles(context, serialized, false);
} else {
var res = utils.insertStyles(context, serialized, false);
if (res !== undefined) {
rules += res;
}
}
if (!isBrowser) {
serializedHashes += " " + serialized.name;
}
return context.key + "-" + serialized.name;
};
var cx = function cx() {
if (hasRendered && process.env.NODE_ENV !== 'production') {
throw new Error('cx can only be used during render');
}
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
args[_key2] = arguments[_key2];
}
return merge(context.registered, css$$1, classnames(args));
};
var content = {
css: css$$1,
cx: cx,
theme: theme
};
var ele = props.children(content);
hasRendered = true;
if (!isBrowser && rules.length !== 0) {
var _ref;
return React.createElement(React.Fragment, null, React.createElement("style", (_ref = {}, _ref["data-emotion-" + context.key] = serializedHashes.substring(1), _ref.dangerouslySetInnerHTML = {
__html: rules
}, _ref.nonce = context.sheet.nonce, _ref)), ele);
}
return ele;
});
});
exports.css = css;
exports.CacheProvider = CacheProvider;
exports.ThemeContext = ThemeContext;
exports.jsx = jsx;
exports.Global = Global;
exports.keyframes = keyframes;
exports.ClassNames = ClassNames;