UNPKG

@hakuna-matata-ui/styled-system

Version:

Style function for css-in-js building component libraries

252 lines (248 loc) 8.27 kB
import * as CSS from "csstype" import { Length, t, Token, transforms } from "../utils" import { createTransform } from "../utils/create-transform" import { Config } from "../utils/prop-config" import { spaceXTemplate, spaceYTemplate } from "../utils/templates" export const flexbox: Config = { alignItems: true, alignContent: true, justifyItems: true, justifyContent: true, flexWrap: true, flexDirection: { transform: transforms.flexDirection }, experimental_spaceX: { static: spaceXTemplate, transform: createTransform({ scale: "space", transform: (value) => value !== null ? { "--chakra-space-x": value } : null, }), }, experimental_spaceY: { static: spaceYTemplate, transform: createTransform({ scale: "space", transform: (value) => value != null ? { "--chakra-space-y": value } : null, }), }, flex: true, flexFlow: true, flexGrow: true, flexShrink: true, flexBasis: t.sizes("flexBasis"), justifySelf: true, alignSelf: true, order: true, placeItems: true, placeContent: true, placeSelf: true, gap: t.space("gap"), rowGap: t.space("rowGap"), columnGap: t.space("columnGap"), } Object.assign(flexbox, { flexDir: flexbox.flexDirection, }) export interface FlexboxProps { /** * The CSS `align-items` property. * * It defines the `align-self` value on all direct children as a group. * * - In Flexbox, it controls the alignment of items on the Cross Axis. * - In Grid Layout, it controls the alignment of items on the Block Axis within their grid area. * * @see [Mozilla Docs](https://developer.mozilla.org/docs/Web/CSS/align-items) */ alignItems?: Token<CSS.Property.AlignItems> /** * The CSS `align-content` property. * * It defines the distribution of space between and around * content items along a flexbox's cross-axis or a grid's block axis. * * @see [Mozilla Docs](https://developer.mozilla.org/docs/Web/CSS/align-content) */ alignContent?: Token<CSS.Property.AlignContent> /** * The CSS `justify-items` property. * * It defines the default `justify-self` for all items of the box, * giving them all a default way of justifying each box * along the appropriate axis. * * @see [Mozilla Docs](https://developer.mozilla.org/docs/Web/CSS/justify-items) */ justifyItems?: Token<CSS.Property.JustifyItems> /** * The CSS `justify-content` property. * * It defines how the browser distributes space between and around content items * along the main-axis of a flex container, and the inline axis of a grid container. * * @see [Mozilla Docs](https://developer.mozilla.org/docs/Web/CSS/justify-content) */ justifyContent?: Token<CSS.Property.JustifyContent> /** * The CSS `flex-wrap` property. * * It defines whether flex items are forced onto one line or * can wrap onto multiple lines. If wrapping is allowed, * it sets the direction that lines are stacked. * * @see [Mozilla Docs](https://developer.mozilla.org/docs/Web/CSS/flex-wrap) */ flexWrap?: Token<CSS.Property.FlexWrap> /** * The CSS `flex-flow` property. * * It is a shorthand property for `flex-direction` and `flex-wrap`. * It specifies the direction of a flex container, as well as its wrapping behavior. * * @see [Mozilla Docs](https://developer.mozilla.org/docs/Web/CSS/flex-flow) */ flexFlow?: Token<CSS.Property.FlexFlow> /** * The CSS `flex-basis` property. * * It defines the initial main size of a flex item. * * @see [Mozilla Docs](https://developer.mozilla.org/docs/Web/CSS/flex-basis) */ flexBasis?: Token<CSS.Property.FlexBasis<Length>> /** * The CSS `flex-direction` property. * * It defines how flex items are placed in the flex container * defining the main axis and the direction (normal or reversed). * * @see [Mozilla Docs](https://developer.mozilla.org/docs/Web/CSS/flex-direction) */ flexDirection?: Token<CSS.Property.FlexDirection> /** * The CSS `flex-direction` property. * * It defines how flex items are placed in the flex container * defining the main axis and the direction (normal or reversed). * * @see [Mozilla Docs](https://developer.mozilla.org/docs/Web/CSS/flex-direction) */ flexDir?: Token<CSS.Property.FlexDirection> /** * The CSS `flex` property. * * It defines how a flex item will grow or shrink * to fit the space available in its flex container. * * @see [Mozilla Docs](https://developer.mozilla.org/docs/Web/CSS/flex) */ flex?: Token<CSS.Property.Flex<Length>> /** * The CSS `gap` property. * * It defines the gap between items in both flex and * grid contexts. * * @see [Mozilla Docs](https://developer.mozilla.org/docs/Web/CSS/gap) */ gap?: Token<CSS.Property.Gap<Length>, "space"> /** * The CSS `row-gap` property. * * It sets the size of the gap (gutter) between an element's grid rows. * * @see [Mozilla Docs](https://developer.mozilla.org/docs/Web/CSS/row-gap) */ rowGap?: Token<CSS.Property.RowGap<Length>, "space"> /** * The CSS `column-gap` property. * * It sets the size of the gap (gutter) between an element's columns. * * @see [Mozilla Docs](https://developer.mozilla.org/docs/Web/CSS/column-gap) */ columnGap?: Token<CSS.Property.ColumnGap<Length>, "space"> /** * The CSS `justify-self` property. * * It defines the way a box is justified inside its * alignment container along the appropriate axis. * * @see [Mozilla Docs](https://developer.mozilla.org/docs/Web/CSS/flex-flow) */ justifySelf?: Token<CSS.Property.JustifySelf> /** * The CSS `align-self` property. * * It works like `align-items`, but applies only to a * single flexbox item, instead of all of them. * * @see [Mozilla Docs](https://developer.mozilla.org/docs/Web/CSS/align-self) */ alignSelf?: Token<CSS.Property.AlignSelf> /** * The CSS `order` property. * * It defines the order to lay out an item in a flex or grid container. * * @see [Mozilla Docs](https://developer.mozilla.org/docs/Web/CSS/order) */ order?: Token<CSS.Property.Order> /** * The CSS `flex-grow` property. * * It defines how much a flexbox item should grow * if there's space available. * * @see [Mozilla Docs](https://developer.mozilla.org/docs/Web/CSS/flex-grow) */ flexGrow?: Token<CSS.Property.FlexGrow | (string & number)> /** * The CSS `flex-shrink` property. * * It defines how much a flexbox item should shrink * if there's not enough space available. * * @see [Mozilla Docs](https://developer.mozilla.org/docs/Web/CSS/flex-shrink) */ flexShrink?: Token<CSS.Property.FlexShrink | (string & number)> /** * The CSS `place-items` property. * * It allows you to align items along both the block and * inline directions at once (i.e. the align-items and justify-items properties) * in a relevant layout system such as `Grid` or `Flex`. * * @see [Mozilla Docs](https://developer.mozilla.org/docs/Web/CSS/place-items) */ placeItems?: Token<CSS.Property.PlaceItems> /** * The CSS `place-content` property. * * It allows you to align content along both the block and * inline directions at once (i.e. the align-content and justify-content properties) * in a relevant layout system such as Grid or Flexbox. * * @see [Mozilla Docs](https://developer.mozilla.org/docs/Web/CSS/place-content) */ placeContent?: Token<CSS.Property.PlaceContent> /** * The CSS `place-self` property. * * It allows you to align an individual item in both the block and * inline directions at once (i.e. the align-self and justify-self properties) * in a relevant layout system such as Grid or Flexbox. * * @see [Mozilla Docs](https://developer.mozilla.org/docs/Web/CSS/place-self) */ placeSelf?: Token<CSS.Property.PlaceSelf> /** * Controls the horizontal space between elements */ experimental_spaceX?: Token<CSS.Property.Margin | number, "space"> /** * Controls the vertical space between elements */ experimental_spaceY?: Token<CSS.Property.Margin | number, "space"> }