import * as React from 'react' import { getRegisteredStyles, insertStyles, registerStyles } from '@emotion/utils' import { serializeStyles } from '@emotion/serialize' import isDevelopment from '#is-development' import { withEmotionCache } from './context' import { ThemeContext } from './theming' import { useInsertionEffectAlwaysWithSyncFallback } from '@emotion/use-insertion-effect-with-fallbacks' import isBrowser from '#is-browser' /* type ClassNameArg = | string | boolean | { [key: string]: boolean } | Array | null | void */ let classnames = (args /*: Array */) /*: string */ => { let len = args.length let i = 0 let cls = '' for (; i < len; i++) { let arg = args[i] if (arg == null) continue let toAdd switch (typeof arg) { case 'boolean': break case 'object': { if (Array.isArray(arg)) { toAdd = classnames(arg) } else { if ( isDevelopment && arg.styles !== undefined && arg.name !== undefined ) { console.error( 'You have passed styles created with `css` from `@emotion/react` package to the `cx`.\n' + '`cx` is meant to compose class names (strings) so you should convert those styles to a class name by passing them to the `css` received from component.' ) } toAdd = '' for (const 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 /*: Object */, css /*: (...args: Array) => string */, className /*: string */ ) { const registeredStyles = [] const rawClassName = getRegisteredStyles( registered, registeredStyles, className ) if (registeredStyles.length < 2) { return className } return rawClassName + css(registeredStyles) } const Insertion = ({ cache, serializedArr }) => { let rules = useInsertionEffectAlwaysWithSyncFallback(() => { let rules = '' for (let i = 0; i < serializedArr.length; i++) { let res = insertStyles(cache, serializedArr[i], false) if (!isBrowser && res !== undefined) { rules += res } } if (!isBrowser) { return rules } }) if (!isBrowser && rules.length !== 0) { return (