UNPKG

@patreon/studio

Version:

Patreon Studio Design System

306 lines (305 loc) 11 kB
import type { CSSProp } from 'styled-components'; import type { OpaqueResponsive, ValueOrResponsive } from '../..'; import type { StylableProps } from '../../types/component'; import type { ColorToken } from '../../types/tokens'; export declare type Border = boolean | string; declare type Element = 'address' | 'article' | 'aside' | 'div' | 'footer' | 'header' | 'main' | 'nav' | 'section' | 'li'; declare type CornerRadius = 'none' | 'small' | 'default' | 'imageDefault' | 'circle'; declare type AlignContent = 'flex-start' | 'flex-end' | 'center' | 'baseline' | 'stretch'; declare type AlignItems = 'flex-start' | 'flex-end' | 'center' | 'baseline' | 'stretch'; declare type AlignSelf = 'auto' | 'flex-start' | 'flex-end' | 'center' | 'baseline' | 'stretch'; declare type BorderStyle = 'none' | 'solid' | 'dashed' | 'dotted'; declare type Display = 'block' | 'flex' | 'grid' | 'inherit' | 'inline-block' | 'inline-flex' | 'inline-grid' | 'inline' | 'none'; declare type FlexBasis = number | string | 'auto'; declare type FlexDirection = 'row' | 'row-reverse' | 'column' | 'column-reverse'; declare type FlexWrap = 'nowrap' | 'wrap' | 'wrap-reverse'; declare type JustifyContent = 'flex-start' | 'flex-end' | 'center' | 'space-between' | 'space-around' | 'space-evenly'; declare type MaxHeight = 'none' | 'fill-available' | 'fit-content' | 'max-content' | 'min-content'; declare type MaxWidth = 'none' | 'fit-content' | 'max-content' | 'min-content'; declare type MinHeight = 'none' | 'fill-available' | 'fit-content' | 'max-content' | 'min-content'; declare type MinWidth = 'none' | 'fit-content' | 'max-content' | 'min-content'; declare type Overflow = 'visible' | 'hidden' | 'scroll' | 'auto'; declare type Position = 'static' | 'relative' | 'absolute' | 'fixed'; declare type TextAlign = 'left' | 'center' | 'right'; declare type VerticalAlign = 'baseline' | 'sub' | 'super' | 'text-top' | 'text-bottom' | 'middle' | 'top' | 'bottom'; declare type Height = 'auto' | 'fit-content' | '100%' | 'inherit' | 'max-content' | 'min-content'; declare type Width = 'auto' | 'fit-content' | '100%' | 'inherit' | 'max-content' | 'min-content'; /** * @deprecated Use styled.div`` instead. If you need responsive properties, use the `mediaForBreakpoint` utility */ export interface BoxProps extends React.AriaAttributes, StylableProps { /** * See flexbox section below */ alignContent?: ValueOrResponsive<AlignContent>; /** * See flexbox section below */ alignItems?: ValueOrResponsive<AlignItems>; /** * See flexbox section below */ alignSelf?: ValueOrResponsive<AlignSelf>; /** * See border section below */ b?: ValueOrResponsive<Border>; /** * See border section below */ bb?: ValueOrResponsive<Border>; /** * See border section below */ bl?: ValueOrResponsive<Border>; /** * See border section below */ br?: ValueOrResponsive<Border>; /** * See border section below */ bt?: ValueOrResponsive<Border>; /** * Accepts token value */ backgroundColor?: ValueOrResponsive<ColorToken>; /** * Accepts an token value * @default tokens.global.border.action.default */ borderColor?: ColorToken; /** * See border section below */ borderStrokeWidth?: string; /** * See border section below * @default "solid" */ borderStyle?: BorderStyle; /** * Accepts any React node */ children?: React.ReactNode; /** * Corner/border radius, using theme keywords */ cornerRadius?: ValueOrResponsive<CornerRadius>; /** * Custom css (via styled-components/css) */ css?: CSSProp; /** * String descriptor for testing */ 'data-tag'?: string; /** * CSS [display](https://developer.mozilla.org/en-US/docs/Web/CSS/display). Accepts `<Responsive>` values. Keyword values are `none`, `block`, `flex`, `inline-block`, `inline-flex`, `inline`, and `inherit`. `<div>` (default element) defaults to `block`. */ display?: ValueOrResponsive<Display>; /** * The HTML element the `<Box>` is rendered as. * @default "div" */ el?: Element; /** * See flexbox section below */ flexBasis?: ValueOrResponsive<FlexBasis>; /** * See flexbox section below */ flexDirection?: ValueOrResponsive<FlexDirection>; /** * See flexbox section below */ flexGrow?: ValueOrResponsive<number>; /** * See flexbox section below */ flexShrink?: ValueOrResponsive<number>; /** * See flexbox section below */ flexWrap?: ValueOrResponsive<FlexWrap>; /** * Sets `height: 100%` */ fluidHeight?: ValueOrResponsive<boolean>; /** * Sets `width: 100%` */ fluidWidth?: ValueOrResponsive<boolean>; /** * CSS [height](https://developer.mozilla.org/en-US/docs/Web/CSS/height). Accepts `<Responsive>` values. */ height?: ValueOrResponsive<number | string | Height>; /** * HTML id property. */ id?: string; /** * See flexbox section below */ justifyContent?: ValueOrResponsive<JustifyContent>; /** * See margin & padding section below */ m?: ValueOrResponsive<number>; /** * CSS [max-height](https://developer.mozilla.org/en-US/docs/Web/CSS/max-height). Accepts `<Responsive>` values. */ maxHeight?: ValueOrResponsive<number | string | MaxHeight>; /** * CSS [max-width](https://developer.mozilla.org/en-US/docs/Web/CSS/max-width). Accepts `<Responsive>` values. */ maxWidth?: ValueOrResponsive<number | string | MaxWidth>; /** * See margin & padding section below */ mb?: ValueOrResponsive<number>; /** * See margin & padding section below */ mh?: ValueOrResponsive<number>; /** * CSS [min-height](https://developer.mozilla.org/en-US/docs/Web/CSS/min-height). Accepts `<Responsive>` values. */ minHeight?: ValueOrResponsive<number | string | MinHeight>; /** * CSS [min-width](https://developer.mozilla.org/en-US/docs/Web/CSS/min-width). Accepts `<Responsive>` values. */ minWidth?: ValueOrResponsive<number | string | MinWidth>; /** * See margin & padding section below */ ml?: ValueOrResponsive<number>; /** * See margin & padding section below */ mr?: ValueOrResponsive<number>; /** * See margin & padding section below */ mt?: ValueOrResponsive<number>; /** * See margin & padding section below */ mv?: ValueOrResponsive<number>; /** * Callback function for Box click. */ onClick?: (e: React.MouseEvent<HTMLElement>) => void; /** * Callback function for Box mouseEnter. */ onMouseEnter?: (e: React.MouseEvent<HTMLElement>) => void; /** * Callback function for Box mouseLeave. */ onMouseLeave?: (e: React.MouseEvent<HTMLElement>) => void; /** * See flexbox section below */ order?: ValueOrResponsive<number>; /** * CSS [overflow](https://developer.mozilla.org/en-US/docs/Web/CSS/overflow). Accepts `<Responsive>` values. */ overflow?: ValueOrResponsive<Overflow>; /** * See margin & padding section below */ p?: ValueOrResponsive<number>; /** * See margin & padding section below */ pl?: ValueOrResponsive<number>; /** * See margin & padding section below */ pr?: ValueOrResponsive<number>; /** * See margin & padding section below */ pt?: ValueOrResponsive<number>; /** * See margin & padding section below */ pb?: ValueOrResponsive<number>; /** * See margin & padding section below */ pv?: ValueOrResponsive<number>; /** * See margin & padding section below */ ph?: ValueOrResponsive<number>; /** * CSS [position](https://developer.mozilla.org/en-US/docs/Web/CSS/position). Accepts `<Responsive>` values. */ position?: ValueOrResponsive<Position>; /** * Horizontal alignment of an inline or table-cell box. `<Text>` should still be used to compose text. * See [docs](https://developer.mozilla.org/en-US/docs/Web/CSS/text-align) for more info. * Accepts `<Responsive>` values. */ textAlign?: ValueOrResponsive<TextAlign>; /** * Vertical alignment of an inline or table-cell box. * See [docs](https://developer.mozilla.org/en-US/docs/Web/CSS/vertical-align) for more info. * Accepts `<Responsive>` values. */ verticalAlign?: ValueOrResponsive<VerticalAlign>; /** * CSS [width](https://developer.mozilla.org/en-US/docs/Web/CSS/width). Accepts `<Responsive>` values. */ width?: ValueOrResponsive<number | string | Width>; } export declare type StyledProps = Required<Pick<BoxProps, 'borderColor' | 'borderStyle'>> & Pick<BoxProps, 'borderStrokeWidth' | 'css' | 'children' | 'data-tag' | 'el' | 'id' | 'onClick' | 'onMouseEnter' | 'onMouseLeave'> & { alignContent: OpaqueResponsive<AlignContent>; alignItems: OpaqueResponsive<AlignItems>; alignSelf: OpaqueResponsive<AlignSelf>; backgroundColor: OpaqueResponsive<ColorToken>; cornerRadius: OpaqueResponsive<CornerRadius>; display: OpaqueResponsive<Display>; flexBasis: OpaqueResponsive<FlexBasis>; flexDirection: OpaqueResponsive<FlexDirection>; flexGrow: OpaqueResponsive<number>; flexShrink: OpaqueResponsive<number>; flexWrap: OpaqueResponsive<FlexWrap>; fluidHeight: OpaqueResponsive<boolean>; fluidWidth: OpaqueResponsive<boolean>; height: OpaqueResponsive<number | string | Height>; justifyContent: OpaqueResponsive<JustifyContent>; maxHeight: OpaqueResponsive<number | string | MaxHeight>; maxWidth: OpaqueResponsive<number | string | MaxWidth>; minHeight: OpaqueResponsive<number | string | MinHeight>; minWidth: OpaqueResponsive<number | string | MinWidth>; order: OpaqueResponsive<number>; overflow: OpaqueResponsive<Overflow>; position: OpaqueResponsive<Position>; textAlign: OpaqueResponsive<TextAlign>; verticalAlign: OpaqueResponsive<VerticalAlign>; width: OpaqueResponsive<number | string | Width>; b: OpaqueResponsive<Border>; bt: OpaqueResponsive<Border>; br: OpaqueResponsive<Border>; bb: OpaqueResponsive<Border>; bl: OpaqueResponsive<Border>; p: OpaqueResponsive<number>; pv: OpaqueResponsive<number>; ph: OpaqueResponsive<number>; pt: OpaqueResponsive<number>; pr: OpaqueResponsive<number>; pb: OpaqueResponsive<number>; pl: OpaqueResponsive<number>; m: OpaqueResponsive<number>; mv: OpaqueResponsive<number>; mh: OpaqueResponsive<number>; mt: OpaqueResponsive<number>; mr: OpaqueResponsive<number>; mb: OpaqueResponsive<number>; ml: OpaqueResponsive<number>; }; export {};