react-bulma-components
Version:
React components for Bulma framework
200 lines (178 loc) • 4.5 kB
TypeScript
import * as React from 'react';
interface HelperProps {
clearfix?: boolean;
pull?: 'left' | 'right';
marginless?: boolean;
paddingless?: boolean;
overlay?: boolean;
clipped?: boolean;
radiusless?: boolean;
shadowless?: boolean;
unselectable?: boolean;
invisible?: boolean;
hidden?: boolean;
srOnly?: boolean;
}
type SpacingSize = 0 | 1 | 2 | 3 | 4 | 5 | 6 | Number | String;
interface SpacingProps {
m?: SpacingSize;
mt?: SpacingSize;
mr?: SpacingSize;
mb?: SpacingSize;
ml?: SpacingSize;
mx?: SpacingSize;
my?: SpacingSize;
p?: SpacingSize;
pt?: SpacingSize;
pr?: SpacingSize;
pb?: SpacingSize;
pl?: SpacingSize;
px?: SpacingSize;
py?: SpacingSize;
}
interface FlexboxProps {
flexDirection?: 'row' | 'row-reverse' | 'column' | 'column-reverse';
flexWrap?: 'nowrap' | 'wrap' | 'wrap-reverse';
justifyContent?:
| 'flex-start'
| 'flex-end'
| 'center'
| 'space-around'
| 'space-between'
| 'space-evenly'
| 'start'
| 'end'
| 'left'
| 'right';
alignContent?:
| 'flex-start'
| 'flex-end'
| 'center'
| 'space-around'
| 'space-between'
| 'space-evenly'
| 'stretch'
| 'start'
| 'end'
| 'baseline';
alignItems?:
| 'auto'
| 'flex-start'
| 'flex-end'
| 'center'
| 'baseline'
| 'stretch';
}
type DisplayModifier =
| 'relative'
| 'block'
| 'flex'
| 'inline'
| 'inline-block'
| 'inline-flex'
| 'hidden';
export interface ResponsiveModifiers {
display?: DisplayModifier;
textSize?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | Number | String;
invisible?: Boolean;
textAlign?: 'center' | 'justify' | 'left' | 'right';
}
interface ResponsiveProps {
display?: DisplayModifier;
mobile?: ResponsiveModifiers;
tablet?: ResponsiveModifiers & { only?: Boolean; };
desktop?: ResponsiveModifiers & { only?: Boolean; };
widescreen?: ResponsiveModifiers & { only?: Boolean; };
fullhd?: ResponsiveModifiers;
touch?: ResponsiveModifiers;
untilWidescreen?: ResponsiveModifiers;
untilFullhd?: ResponsiveModifiers;
}
interface ColorProps {
textColor?: string;
backgroundColor?: string;
colorVariant?: 'light' | 'dark' | String;
}
interface TypographyProps {
textSize?: 1 | 2 | 3 | 4 | 5 | 6 | Number | String;
textAlign?: 'center' | 'justify' | 'left' | 'right' | String;
textTransform?: 'capitalized' | 'lowercase' | 'uppercase';
textWeight?: 'light' | 'normal' | 'semibold' | 'bold';
textFamily?: 'sans-serif' | 'monospace' | 'primary' | 'secondary' | 'code' | String;
italic?: boolean;
}
type HTMLAttributes<K extends keyof JSX.IntrinsicElements> = OmitKeys<
JSX.IntrinsicElements[K],
keyof ModifierProps | 'ref'
>;
type ModifierProps = SpacingProps &
FlexboxProps &
HelperProps &
ColorProps &
ResponsiveProps &
TypographyProps;
/**
* Defines all Bulma color values
*/
export type Color =
| 'primary'
| 'success'
| 'info'
| 'warning'
| 'danger'
| 'light'
| 'dark'
| 'white'
| 'black'
| 'link'
| String;
/**
* Defines all Bulma size values
*/
export type Size = 'small' | 'medium' | 'large' | String;
/**
* Defines all Bulma breakpoint values
*/
export type Breakpoint =
| 'desktop'
| 'tablet'
| 'mobile'
| 'widescreen'
| 'fullhd'
| 'touch'
| String;
type RenderAsComponentProps<
TComponent
> = TComponent extends keyof JSX.IntrinsicElements
? HTMLAttributes<TComponent>
: TComponent extends React.ComponentType<infer Props>
? Props & JSX.IntrinsicAttributes
: never;
export type OmitKeys<T, U> = Pick<T, Exclude<keyof T, U>>;
export type RenderAsComponent = React.ElementType;
export type ElementProps<
TProps,
TComponent extends RenderAsComponent
> = ModifierProps & {
className?: string;
domRef?: React.RefObject<TComponent>;
renderAs?: TComponent;
style?: React.CSSProperties;
display?: DisplayModifier;
invisible?: boolean;
} & OmitKeys<RenderAsComponentProps<TComponent>, keyof TProps>;
export type BulmaComponent<
TProps,
TDefaultHTMLElement extends RenderAsComponent
> = <TComponent extends RenderAsComponent = TDefaultHTMLElement>(
props: TProps & ElementProps<TProps, TComponent>,
) => React.ReactElement;
export type BulmaComponentWithoutRenderAs<
TProps,
THTMLElement extends RenderAsComponent
> = (
props: TProps & Omit<ElementProps<TProps, THTMLElement>, 'renderAs'>,
) => React.ReactElement;
export type BulmaComponentWithoutModifiers<TProps> = (
props: TProps,
) => React.ReactElement;