flapstacks
Version:
Flex layout primitive for React & React Native
113 lines (85 loc) • 3.17 kB
Markdown
# 🥞 flapstacks
[](https://npmjs.org/package/flapstacks)
[](https://npmjs.org/package/flapstacks)
[](https://github.com/RichardLitt/standard-readme)
[](https://npmjs.org/package/flapstacks)
[](http://makeapullrequest.com)
Flex layout primitive for React & React Native (wip)
## 📖 Table of Contents
- [🥞 flapstacks](#-flapstacks)
- [📖 Table of Contents](#-table-of-contents)
- [👀 Background](#-background)
- [Features](#features)
- [⚙️ Install](#️-install)
- [📖 Usage](#-usage)
- [Overridable styles](#overridable-styles)
- [📚 API](#-api)
- [💬 Contributing](#-contributing)
- [🪪 License](#-license)
## 👀 Background
This package is a tiny wrapper around the [Flexbox](https://developer.mozilla.org/en-US/docs/Learn/CSS/CSS_layout/Flexbox) one-dimensional layout method to allow for a prop based styling API as seen in [Styled System](https://styled-system.com/).
### Features
- Works in React and React Native (wip)
- Flexible shorthand props
- TypeScript support with [API docs](https://paka.dev/npm/flapstacks)
- Polymorphic component type
- Style overriding to hook into your Design System
## ⚙️ Install
Install the package locally within you project folder with your package manager:
With `npm`:
```sh
npm install flapstacks
```
With `yarn`:
```sh
yarn add flapstacks
```
With `pnpm`:
```sh
pnpm add flapstacks
```
## 📖 Usage
```tsx
import { Stack } from "flapstacks";
const Box = () => (
<div style={{ height: 100, width: 100, backgroundColor: "tomato" }} />
);
export default function App() {
return (
<Stack
as="main"
direction="column"
cross="center"
justifyContentSpaceBetween
gap={2}
>
<Box />
<Box />
<Box />
<Box />
<Box />
</Stack>
);
}
```
### Overridable styles
If you have an existing set to design tokens that you would like to connect to the props of the stack then the `onOverrideStyles` prop can be used:
```tsx
const CustomStack = (props) => {
const handleOverride = (style: CSSProperties) => {
// Design tokens
const scale = ["16px", "32px"]
if (style.gap) {
style.gap = scale[style.gap as number];
}
return style;
}
return <Stack {...props} onOverrideStyles={handleOverride}>
}
```
## 📚 API
For all configuration options, please see the [API docs](https://paka.dev/npm/flapstacks).
## 💬 Contributing
Got an idea for a new feature? Found a bug? Contributions are welcome! Please [open up an issue](https://github.com/tiaanduplessis/flapstacks/issues) or [make a pull request](https://makeapullrequest.com/).
## 🪪 License
[MIT © Tiaan du Plessis](./LICENSE)