@theme-ui/components
Version:
Primitive layout, typographic, and other components for use with Theme UI.
38 lines (31 loc) • 931 B
text/typescript
import type { ThemeUICSSObject, ThemeUICSSProperties } from '@theme-ui/css'
export const getProps =
(test: (k: string) => boolean) =>
<T extends object>(props: T): T => {
const next: Partial<T> = {}
for (const key in props) {
if (test(key || '')) next[key] = props[key]
}
return next as T
}
const MRE = /^m[trblxy]?$/
export interface MarginProps
extends Pick<
ThemeUICSSProperties,
'm' | 'mt' | 'mr' | 'mb' | 'ml' | 'mx' | 'my'
> {}
export const getMargin: (props: MarginProps) => MarginProps = getProps((k) =>
MRE.test(k)
)
export const omitMargin = getProps((k) => !MRE.test(k))
/** @internal */
export function __internalProps(props: __ThemeUIComponentsInternalProps) {
return props as {}
}
/**
* @internal Props used by Theme UI Components not intended for user code.
*/
export interface __ThemeUIComponentsInternalProps {
__css?: ThemeUICSSObject
__themeKey?: string
}