229 lines
5.4 KiB
TypeScript
229 lines
5.4 KiB
TypeScript
import * as React from 'react';
|
|
import { OverridableComponent, OverrideProps } from '@mui/types';
|
|
import { Theme as SystemTheme } from '../createTheme';
|
|
import {
|
|
SxProps,
|
|
AllSystemCSSProperties,
|
|
ResponsiveStyleValue,
|
|
OverwriteCSSProperties,
|
|
AliasesCSSProperties,
|
|
} from '../styleFunctionSx';
|
|
|
|
export type PropsFor<SomeStyleFunction> =
|
|
SomeStyleFunction extends StyleFunction<infer Props> ? Props : never;
|
|
export type StyleFunction<Props> = (props: Props) => any;
|
|
export type SimpleStyleFunction<PropKey extends keyof any> = StyleFunction<
|
|
Partial<Record<PropKey, any>>
|
|
> & { filterProps: string[] };
|
|
|
|
// borders.js
|
|
export declare const borders: SimpleStyleFunction<
|
|
| 'border'
|
|
| 'borderTop'
|
|
| 'borderRight'
|
|
| 'borderBottom'
|
|
| 'borderLeft'
|
|
| 'borderColor'
|
|
| 'borderRadius'
|
|
>;
|
|
|
|
export declare const display: SimpleStyleFunction<
|
|
'display' | 'displayPrint' | 'overflow' | 'textOverflow' | 'visibility' | 'whiteSpace'
|
|
>;
|
|
|
|
export declare const flexbox: SimpleStyleFunction<
|
|
| 'flexBasis'
|
|
| 'flexDirection'
|
|
| 'flexWrap'
|
|
| 'justifyContent'
|
|
| 'alignItems'
|
|
| 'alignContent'
|
|
| 'order'
|
|
| 'flex'
|
|
| 'flexGrow'
|
|
| 'flexShrink'
|
|
| 'alignSelf'
|
|
| 'justifyItems'
|
|
| 'justifySelf'
|
|
>;
|
|
|
|
export declare const grid: SimpleStyleFunction<
|
|
| 'gap'
|
|
| 'columnGap'
|
|
| 'rowGap'
|
|
| 'gridColumn'
|
|
| 'gridRow'
|
|
| 'gridAutoFlow'
|
|
| 'gridAutoColumns'
|
|
| 'gridAutoRows'
|
|
| 'gridTemplateColumns'
|
|
| 'gridTemplateRows'
|
|
| 'gridTemplateAreas'
|
|
| 'gridArea'
|
|
>;
|
|
|
|
export declare const palette: SimpleStyleFunction<'bgcolor' | 'color'>;
|
|
|
|
export declare const positions: SimpleStyleFunction<
|
|
'zIndex' | 'position' | 'top' | 'right' | 'bottom' | 'left'
|
|
>;
|
|
|
|
export declare const shadows: SimpleStyleFunction<'boxShadow'>;
|
|
|
|
export declare const sizing: SimpleStyleFunction<
|
|
| 'width'
|
|
| 'maxWidth'
|
|
| 'minWidth'
|
|
| 'height'
|
|
| 'maxHeight'
|
|
| 'minHeight'
|
|
| 'sizeWidth'
|
|
| 'sizeHeight'
|
|
| 'boxSizing'
|
|
>;
|
|
|
|
export declare const spacing: SimpleStyleFunction<
|
|
| 'm'
|
|
| 'mt'
|
|
| 'mr'
|
|
| 'mb'
|
|
| 'ml'
|
|
| 'mx'
|
|
| 'my'
|
|
| 'p'
|
|
| 'pt'
|
|
| 'pr'
|
|
| 'pb'
|
|
| 'pl'
|
|
| 'px'
|
|
| 'py'
|
|
| 'margin'
|
|
| 'marginTop'
|
|
| 'marginRight'
|
|
| 'marginBottom'
|
|
| 'marginLeft'
|
|
| 'marginX'
|
|
| 'marginY'
|
|
| 'marginInline'
|
|
| 'marginInlineStart'
|
|
| 'marginInlineEnd'
|
|
| 'marginBlock'
|
|
| 'marginBlockStart'
|
|
| 'marginBlockEnd'
|
|
| 'padding'
|
|
| 'paddingTop'
|
|
| 'paddingRight'
|
|
| 'paddingBottom'
|
|
| 'paddingLeft'
|
|
| 'paddingX'
|
|
| 'paddingY'
|
|
| 'paddingInline'
|
|
| 'paddingInlineStart'
|
|
| 'paddingInlineEnd'
|
|
| 'paddingBlock'
|
|
| 'paddingBlockStart'
|
|
| 'paddingBlockEnd'
|
|
>;
|
|
|
|
export declare const typography: SimpleStyleFunction<
|
|
| 'typography'
|
|
| 'fontFamily'
|
|
| 'fontSize'
|
|
| 'fontStyle'
|
|
| 'fontWeight'
|
|
| 'letterSpacing'
|
|
| 'lineHeight'
|
|
| 'textAlign'
|
|
| 'textTransform'
|
|
>;
|
|
|
|
// compose.js
|
|
/**
|
|
* given a list of StyleFunction return the intersection of the props each individual
|
|
* StyleFunction requires.
|
|
*
|
|
* If `firstFn` requires { color: string } and `secondFn` requires { spacing: number }
|
|
* their composed function requires { color: string, spacing: number }
|
|
*/
|
|
type ComposedArg<T> = T extends Array<(arg: infer P) => any> ? P : never;
|
|
type ComposedOwnerState<T> = ComposedArg<T>;
|
|
|
|
export type ComposedStyleFunction<T extends Array<StyleFunction<any>>> = StyleFunction<
|
|
ComposedOwnerState<T>
|
|
> & { filterProps: string[] };
|
|
|
|
export interface CustomSystemProps extends AliasesCSSProperties, OverwriteCSSProperties {}
|
|
|
|
export type SimpleSystemKeys = keyof PropsFor<
|
|
ComposedStyleFunction<
|
|
[
|
|
typeof borders,
|
|
typeof display,
|
|
typeof flexbox,
|
|
typeof grid,
|
|
typeof palette,
|
|
typeof positions,
|
|
typeof shadows,
|
|
typeof sizing,
|
|
typeof spacing,
|
|
typeof typography,
|
|
]
|
|
>
|
|
>;
|
|
|
|
// The SimpleSystemKeys are subset of the AllSystemCSSProperties, so this should be ok
|
|
// This is needed as these are used as keys inside AllSystemCSSProperties
|
|
type StandardSystemKeys = Extract<SimpleSystemKeys, keyof AllSystemCSSProperties>;
|
|
|
|
export type SystemProps<Theme extends object = {}> = {
|
|
[K in StandardSystemKeys]?:
|
|
| ResponsiveStyleValue<AllSystemCSSProperties[K]>
|
|
| ((theme: Theme) => ResponsiveStyleValue<AllSystemCSSProperties[K]>);
|
|
};
|
|
|
|
export interface BoxOwnProps<Theme extends object = SystemTheme> extends SystemProps<Theme> {
|
|
children?: React.ReactNode;
|
|
/**
|
|
* The component used for the root node.
|
|
* Either a string to use a HTML element or a component.
|
|
*/
|
|
component?: React.ElementType;
|
|
ref?: React.Ref<unknown>;
|
|
/**
|
|
* The system prop that allows defining system overrides as well as additional CSS styles.
|
|
*/
|
|
sx?: SxProps<Theme>;
|
|
}
|
|
|
|
export interface BoxTypeMap<
|
|
AdditionalProps = {},
|
|
RootComponent extends React.ElementType = 'div',
|
|
Theme extends object = SystemTheme,
|
|
> {
|
|
props: AdditionalProps & BoxOwnProps<Theme>;
|
|
defaultComponent: RootComponent;
|
|
}
|
|
|
|
/**
|
|
*
|
|
* Demos:
|
|
*
|
|
* - [Box (Joy UI)](https://mui.com/joy-ui/react-box/)
|
|
* - [Box (Material UI)](https://mui.com/material-ui/react-box/)
|
|
* - [Box (MUI System)](https://mui.com/system/react-box/)
|
|
*
|
|
* API:
|
|
*
|
|
* - [Box API](https://mui.com/system/api/box/)
|
|
*/
|
|
declare const Box: OverridableComponent<BoxTypeMap>;
|
|
|
|
export type BoxProps<
|
|
RootComponent extends React.ElementType = BoxTypeMap['defaultComponent'],
|
|
AdditionalProps = {},
|
|
> = OverrideProps<BoxTypeMap<AdditionalProps, RootComponent>, RootComponent> & {
|
|
component?: React.ElementType;
|
|
};
|
|
|
|
export default Box;
|