Extended Flexbox
flexbox propertiesimport { extendedFlexbox } from 'jynx'
The extendedFlexbox function gives you control of a component's flex styles with
additional support for shorthand aliases not found in the base
flexbox function.
All the verbose props are still accessible and can be used interchangeably with the aliases; this is simply an extension of the original function that allows the use of a more concise syntax.
Usage
To use the extendedFlexbox function, create a component using the ExtendedFlexboxProps type and include the function within it's style argument.
/* Import the function and its corresponding props type */
import { extendedFlexbox, ExtendedFlexboxProps } from 'jynx'
/* Then define a component with the type and include the
function within its style argument */
export const Component = styled.div<ExtendedFlexboxProps>`
${extendedFlexbox}
`
/* Or using the legacy functional syntax */
export const Component = styled.div<ExtendedFlexboxProps>((props) => `
${extendedFlexbox}
`)Props
By default, when passing a string to any extendedFlexbox props, the raw css value is used. This means you can define extendedFlexbox styles however you normally would:
<Component direction='column' />As with the flexbox function, when using props like align and
justify that support a set of pre-declared string values (flex-start, space-between,
etc), these should be provided as suggestions in your IDE.
Additionally, any standard named values (inherit, initial, etc) are available to use, and when using typescript, will show up as suggestions in your IDE.
Types
When working in typescript, use the ExtendedFlexboxProps interface to provide reliable type definitions for your components and value suggestions in your IDE.
interface ExtendedFlexboxProps extends FlexboxProps {
direction?: StyleProp<CSS.Property.FlexDirection>
flow?: StyleProp<CSS.Property.FlexFlow>
wrap?: StyleProp<CSS.Property.FlexWrap>
align?: StyleProp<CSS.Property.AlignItems>
justify?: StyleProp<CSS.Property.JustifyContent>
grow?: StyleProp<CSS.Property.FlexGrow>
shrink?: StyleProp<CSS.Property.FlexShrink>
basis?: StyleProp<CSS.Property.FlexBasis>
}
API
The extendedFlexbox function allows for a number of props to be passed to your component from directly within your jsx / tsx.
| Prop | Shorthand | CSS Property | Theme Scale |
|---|---|---|---|
| direction | flex-direction | ||
| flow | flex-flow | ||
| wrap | flex-wrap | ||
| align | align-items | ||
| justify | justify-content | ||
| grow | flex-grow | ||
| shrink | flex-shrink | ||
| basis | flex-basis |
These props are in addition to those available in flexbox.
Examples
/* using plain CSS values */
<Component wrap='nowrap' />
/* based on a conditional */
<Component align={isFullWidth ? 'stretch' : 'flex-start'} />
/* using responsive styles */
<Component justify={['flex-start', 'center', null, 'flex-start']} />
<Component direction={{_: 'column', md: 'row'}} />