import * as C from "csstype" ; import * as T from "../types" ; import { PX_SCALE } from "../constants" ; import { compose } from "../compose" ; import { extend } from "../style" ; import { addPx } from "../utils" ; const MT = "marginTop" ; const MR = "marginRight" ; const MB = "marginBottom" ; const ML = "marginLeft" ; const PT = "paddingTop" ; const PR = "paddingRight" ; const PB = "paddingBottom" ; const PL = "paddingLeft" ; const ex = extend ( { themeKeys : [ "spaces" ] , transform : addPx , defaults : PX_SCALE } ) ; export type MarginValue = C . MarginProperty < T . Length > ; export type MarginProp = T . Prop < MarginValue > ; export interface MarginTopProps extends T . ThemeProps { [ MT ] ? : MarginProp ; mt ? : MarginProp ; } export interface MarginTopStyle extends T . Style { [ MT ] ? : MarginValue ; } export const marginTop = ex < MarginTopProps , MarginTopStyle > ( { propsKeys : [ MT , "mt" ] } ) ; export interface MarginRightProps extends T . ThemeProps { [ MR ] ? : MarginProp ; mr ? : MarginProp ; } export interface MarginRightStyle extends T . Style { [ MR ] ? : MarginValue ; } export const marginRight = ex < MarginRightProps , MarginRightStyle > ( { propsKeys : [ MR , "mr" ] } ) ; export interface MarginBottomProps extends T . ThemeProps { [ MB ] ? : MarginProp ; mb ? : MarginProp ; } export interface MarginBottomStyle extends T . Style { [ MB ] ? : MarginValue ; } export const marginBottom = ex < MarginBottomProps , MarginBottomStyle > ( { propsKeys : [ MB , "mb" ] } ) ; export interface MarginLeftProps extends T . ThemeProps { [ ML ] ? : MarginProp ; ml ? : MarginProp ; } export interface MarginLeftStyle extends T . Style { [ ML ] ? : MarginValue ; } export const marginLeft = ex < MarginLeftProps , MarginLeftStyle > ( { propsKeys : [ ML , "ml" ] } ) ; export interface MarginXProps extends T . ThemeProps { marginX ? : MarginProp ; mx ? : MarginProp ; } export interface MarginXStyle extends T . Style { [ ML ] ? : MarginValue ; [ MR ] ? : MarginValue ; } export const marginX = ex < MarginXProps , MarginXStyle > ( { propsKeys : [ "marginX" , "mx" ] , styleKeys : [ ML , MR ] } ) ; export interface MarginYProps extends T . ThemeProps { marginY ? : MarginProp ; my ? : MarginProp ; } export interface MarginYStyle extends T . Style { [ MT ] ? : MarginValue ; [ MB ] ? : MarginValue ; } export const marginY = ex < MarginYProps , MarginYStyle > ( { propsKeys : [ "marginY" , "my" ] , styleKeys : [ MT , MB ] } ) ; export interface MarginProps extends T . ThemeProps { margin ? : MarginProp ; m ? : MarginProp ; } export interface MarginStyle extends T . Style { margin ? : MarginValue ; } export const margin = ex < MarginProps , MarginStyle > ( { propsKeys : [ "margin" , "m" ] } ) ; export type PaddingValue = C . PaddingProperty < T . Length > ; export type PaddingProp = T . Prop < PaddingValue > ; export interface PaddingTopProps extends T . ThemeProps { [ PT ] ? : PaddingProp ; pt ? : PaddingProp ; } export interface PaddingTopStyle extends T . Style { [ PT ] ? : PaddingValue ; } export const paddingTop = ex < PaddingTopProps , PaddingTopStyle > ( { propsKeys : [ PT , "pt" ] } ) ; export interface PaddingRightProps extends T . ThemeProps { [ PR ] ? : PaddingProp ; pr ? : PaddingProp ; } export interface PaddingRightStyle extends T . Style { [ PR ] ? : PaddingValue ; } export const paddingRight = ex < PaddingRightProps , PaddingRightStyle > ( { propsKeys : [ PR , "pr" ] } ) ; export interface PaddingBottomProps extends T . ThemeProps { [ PB ] ? : PaddingProp ; pb ? : PaddingProp ; } export interface PaddingBottomStyle extends T . Style { [ PB ] ? : PaddingValue ; } export const paddingBottom = ex < PaddingBottomProps , PaddingBottomStyle > ( { propsKeys : [ PB , "pb" ] } ) ; export interface PaddingLeftProps extends T . ThemeProps { [ PL ] ? : PaddingProp ; pl ? : PaddingProp ; } export interface PaddingLeftStyle extends T . Style { [ PL ] ? : PaddingValue ; } export const paddingLeft = ex < PaddingLeftProps , PaddingLeftStyle > ( { propsKeys : [ PL , "pl" ] } ) ; export interface PaddingXProps extends T . ThemeProps { paddingX ? : PaddingProp ; px ? : PaddingProp ; } export interface PaddingXStyle extends T . Style { [ PL ] ? : PaddingValue ; [ PR ] ? : PaddingValue ; } export const paddingX = ex < PaddingXProps , PaddingXStyle > ( { propsKeys : [ "paddingX" , "px" ] , styleKeys : [ PL , PR ] } ) ; export interface PaddingYProps extends T . ThemeProps { paddingY ? : PaddingProp ; py ? : PaddingProp ; } export interface PaddingYStyle extends T . Style { [ PT ] ? : PaddingValue ; [ PB ] ? : PaddingValue ; } export const paddingY = ex < PaddingYProps , PaddingYStyle > ( { propsKeys : [ "paddingY" , "py" ] , styleKeys : [ PT , PB ] } ) ; export interface PaddingProps extends T . ThemeProps { padding ? : PaddingProp ; p ? : PaddingProp ; } export interface PaddingStyle extends T . Style { padding ? : PaddingValue ; } export const padding = ex < PaddingProps , PaddingStyle > ( { propsKeys : [ "padding" , "p" ] } ) ; export type MarginSetProps = MarginProps & MarginXProps & MarginYProps & MarginTopProps & MarginRightProps & MarginBottomProps & MarginLeftProps ; export type MarginSetStyle = MarginStyle & MarginXStyle & MarginYStyle & MarginTopStyle & MarginRightStyle & MarginBottomStyle & MarginLeftStyle ; export const marginSet = compose < MarginSetProps , MarginSetStyle > ( { name : "margin" , renderers : [ margin , marginX , marginY , marginTop , marginRight , marginBottom , marginLeft ] } ) ; export type PaddingSetProps = PaddingProps & PaddingXProps & PaddingYProps & PaddingTopProps & PaddingRightProps & PaddingBottomProps & PaddingLeftProps ; export type PaddingSetStyle = PaddingStyle & PaddingXStyle & PaddingYStyle & PaddingTopStyle & PaddingRightStyle & PaddingBottomStyle & PaddingLeftStyle ; export const paddingSet = compose < PaddingSetProps , PaddingSetStyle > ( { name : "padding" , renderers : [ padding , paddingX , paddingY , paddingTop , paddingRight , paddingBottom , paddingLeft ] } ) ; export type SpaceSetProps = MarginSetProps & PaddingSetProps ; export type SpaceSetStyle = MarginSetStyle & PaddingSetStyle ; export const spaceSet = compose < SpaceSetProps , SpaceSetStyle > ( { name : "space" , renderers : [ marginSet , paddingSet ] } ) ;