UNPKG

@emotion/styled

Version:
39 lines (33 loc) 1.17 kB
import * as React from 'react' import isPropValid from '@emotion/is-prop-valid' import { StyledOptions, ElementType } from './types' const testOmitPropsOnStringTag = isPropValid const testOmitPropsOnComponent = (key: string) => key !== 'theme' export const getDefaultShouldForwardProp = (tag: React.ElementType) => typeof tag === 'string' && // 96 is one less than the char code // for "a" so this is checking that // it's a lowercase character tag.charCodeAt(0) > 96 ? testOmitPropsOnStringTag : testOmitPropsOnComponent export const composeShouldForwardProps = ( tag: ElementType, options: StyledOptions | undefined, isReal: boolean ) => { let shouldForwardProp if (options) { const optionsShouldForwardProp = options.shouldForwardProp shouldForwardProp = tag.__emotion_forwardProp && optionsShouldForwardProp ? (propName: string) => tag.__emotion_forwardProp!(propName) && optionsShouldForwardProp(propName) : optionsShouldForwardProp } if (typeof shouldForwardProp !== 'function' && isReal) { shouldForwardProp = tag.__emotion_forwardProp } return shouldForwardProp }