@kiwicom/orbit-components
Version:
Orbit-components is a React component library which provides developers with the easiest possible way of building Kiwi.com’s products.
146 lines (90 loc) • 3.71 kB
Markdown
# Right to left languages
Package `orbit-components` supports right to left languages. It's done with `theme` context from `styled-components`.
If you need to enable `rtl` inside `orbit-components`, set it inside `ThemeProvider`:
```jsx
import { ThemeProvider } from "styled-components";
import { defaultTheme } from "@kiwicom/orbit-components";
<ThemeProvider theme={{ ...defaultTheme, rtl: true }}>
<App />
</ThemeProvider>;
```
It's also important to pass some `orbit` object, in our case `defaultTheme`.
With this approach, all `orbit-components` will be ready to use with some right to left language.
> In addition, you need to set up `direction` on `html` to have value `rtl`.
## Utilities
`styled-components` doesn't know automatically how to switch `margin`, `padding` and i.e. `left` properties to the other direction. So it's necessary to use some `utilities` inside your styles.
### rtlSpacing
Function `rtlSpacing` switches the values for properties `margin` and `padding`.
#### Usage
```jsx
import { rtlSpacing } from "@kiwicom/orbit-components/lib/utils/rtl";
const Component = styled.div`
margin: ${rtlSpacing("10px 20px 30px 40px")};
`;
```
If the `rtl` inside theme context will be `true`, the margin for our component will be `10px 40px 30px 20px`. Otherwise the default passed value.
This function accepts only one parameter - `string`.
---
### left
The `left` utility returns `right`, if the `rtl` is set to `true`. Otherwise, it returns `left`.
#### Usage
```jsx
import { left } from "@kiwicom/orbit-components/lib/utils/rtl";
const Component = styled.div`
${left}: 0;
`;
```
This utility doesn't accept any parameter.
---
### right
The `right` utility returns `left`, if the `rtl` is set to `true`. Otherwise, it returns `right`.
#### Usage
```jsx
import { right } from "@kiwicom/orbit-components/lib/utils/rtl";
const Component = styled.div`
${right}: 0;
`;
```
This utility doesn't accept any parameter.
---
### borderRadius
Function `borderRadius` switches the values for `border-radius` property.
#### Usage
```jsx
import { borderRadius } from "@kiwicom/orbit-components/lib/utils/rtl";
const Component = styled.div`
border-radius: ${borderRadius("0 3px 3px 0")};
`;
```
If the `rtl` inside theme context will be `true`, the `border-radius` for our component will be `3px 0 0 3px`. Otherwise the default passed value.
This function accepts only one parameter - `string`.
---
### textAlign
Function `textAlign` switches the values for `text-align` property.
#### Usage with left
```jsx
import { textAlign } from "@kiwicom/orbit-components/lib/utils/rtl";
const Component = styled.div`
text-align: ${textAlign("left")};
`;
```
If the `rtl` inside theme context will be `true`, the `text-align` for our component will be `right`. Otherwise the default passed value.
#### Usage with right
```jsx
import { textAlign } from "@kiwicom/orbit-components/lib/utils/rtl";
const Component = styled.div`
text-align: ${textAlign("right")};
`;
```
If the `rtl` inside theme context will be `true`, the `text-align` for our component will be `left`. Otherwise the default passed value.
This function accepts only one parameter - `string` which needs to be either `left` or `right`.
### translate3d
Function `translate3d` switches the values for `transform` property.
```jsx
import { translate3d } from "@kiwicom/orbit-components/lib/utils/rtl";
const Component = styled.div`
transform: ${translate3d("400px, 0, 0")};
`;
```
If the `rtl` inside theme context will be `true`, the `translate3d` first value for our component will be `-400px`. Otherwise the default passed value.
This function accepts only one parameter - `string`.