amis-rpc-design/node_modules/react-pro-sidebar/README.md
2023-10-07 19:42:30 +08:00

394 lines
12 KiB
Markdown

# [React Pro Sidebar](https://www.npmjs.com/package/react-pro-sidebar)
[![npm][version]][npm-url]
[![License][license]][npm-url]
[![Peer][peer]][npm-url]
[![Download][download]][npm-url]
[![Stars][stars]][github-url]
[version]: https://img.shields.io/npm/v/react-pro-sidebar.svg?style=flat-square
[license]: https://img.shields.io/github/license/azouaoui-med/react-pro-sidebar?style=flat-square
[peer]: https://img.shields.io/npm/dependency-version/react-pro-sidebar/peer/react?style=flat-square
[download]: https://img.shields.io/npm/dt/react-pro-sidebar?style=flat-square
[stars]: https://img.shields.io/github/stars/azouaoui-med/react-pro-sidebar?style=social
[npm-url]: https://www.npmjs.com/package/react-pro-sidebar
[github-url]: https://github.com/azouaoui-med/react-pro-sidebar
React Pro Sidebar provides a set of components for creating high level and customizable side navigation
## Old versions
- [v0.x](https://github.com/azouaoui-med/react-pro-sidebar/tree/v0.x)
## Live Preview
- [Demo](https://azouaoui-med.github.io/react-pro-sidebar/iframe.html?id=playground--playground&args=&viewMode=story)
- [Storybook](https://azouaoui-med.github.io/react-pro-sidebar/?path=/docs/sidebar--basic)
## Screenshot
![react-pro-sidebar](https://user-images.githubusercontent.com/25878302/212479928-553c2d37-793b-4bcd-ac53-352f26337955.jpg)
## Installation
### yarn
```bash
yarn add react-pro-sidebar
```
### npm
```bash
npm install react-pro-sidebar
```
## Usage
```jsx
import { Sidebar, Menu, MenuItem, SubMenu } from 'react-pro-sidebar';
<Sidebar>
<Menu>
<SubMenu label="Charts">
<MenuItem> Pie charts </MenuItem>
<MenuItem> Line charts </MenuItem>
</SubMenu>
<MenuItem> Documentation </MenuItem>
<MenuItem> Calendar </MenuItem>
</Menu>
</Sidebar>;
```
## Using React Router
You can make use of the `component` prop to integrate [React Router](https://reactrouter.com/en/main) link
**Example Usage**
```jsx
import { Sidebar, Menu, MenuItem } from 'react-pro-sidebar';
import { Link } from 'react-router-dom';
<Sidebar>
<Menu
menuItemStyles={{
button: {
// the active class will be added automatically by react router
// so we can use it to style the active menu item
[`&.active`]: {
backgroundColor: '#13395e',
color: '#b6c8d9',
},
},
}}
>
<MenuItem component={<Link to="/documentation" />}> Documentation</MenuItem>
<MenuItem component={<Link to="/calendar" />}> Calendar</MenuItem>
<MenuItem component={<Link to="/e-commerce" />}> E-commerce</MenuItem>
</Menu>
</Sidebar>;
```
## Customization
We provide for each component `rootStyles` prop that can be used to customize the styles
its recommended using utility classes (`sidebarClasses`, `menuClasses`) for selecting target child nodes
**Example usage**
```jsx
<Sidebar
rootStyles={{
[`.${sidebarClasses.container}`]: {
backgroundColor: 'red',
},
}}
>
// ...
</Sidebar>
```
For `Menu` component, in addition to `rootStyles` you can also use `menuItemStyles` prop for customizing all `MenuItem` & `SubMenu` components and their children
**Type definition**
```jsx
interface MenuItemStyles {
root?: ElementStyles;
button?: ElementStyles;
label?: ElementStyles;
prefix?: ElementStyles;
suffix?: ElementStyles;
icon?: ElementStyles;
subMenuContent?: ElementStyles;
SubMenuExpandIcon?: ElementStyles;
}
type ElementStyles = CSSObject | ((params: MenuItemStylesParams) => CSSObject | undefined);
```
**Example usage**
```jsx
<Sidebar>
<Menu
menuItemStyles={{
button: ({ level, active, disabled }) => {
// only apply styles on first level elements of the tree
if (level === 0)
return {
color: disabled ? '#f5d9ff' : '#d359ff',
backgroundColor: active ? '#eecef9' : undefined,
};
},
}}
>
//...
</Menu>
</Sidebar>
```
## API
<table>
<thead>
<tr>
<th>Component</th>
<th>Prop</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr>
<td rowspan=13>Sidebar</td>
<td >defaultCollapsed</td>
<td><code>boolean</code></td>
<td>Initial collapsed status</td>
<td><code>false</code></td>
</tr>
<tr>
<td>collapsed</td>
<td><code>boolean</code></td>
<td>Sidebar collapsed state</td>
<td><code>false</code></td>
</tr>
<tr>
<td>toggled</td>
<td><code>boolean</code></td>
<td>Sidebar toggled state</td>
<td><code>false</code></td>
</tr>
<tr>
<td>width</td>
<td><code>number | string</code></td>
<td>Width of the sidebar</td>
<td><code>270px</code></td>
</tr>
<tr>
<td>collapsedWidth</td>
<td><code>number | string</code></td>
<td>Width of the sidebar on collapsed state</td>
<td><code>80px</code></td>
</tr>
<tr>
<td>backgroundColor</td>
<td><code>string</code></td>
<td>Set background color for sidebar</td>
<td><code>rgb(249, 249, 249, 0.7)</code></td>
</tr>
<tr>
<td>image</td>
<td><code>string</code></td>
<td>Url of the image to use in the sidebar background, need to apply transparency to background color </td>
<td>-</td>
</tr>
<tr>
<td>breakPoint</td>
<td><code>xs</code> | <code>sm</code> | <code>md</code> | <code>lg</code> | <code>xl</code> | <code>xxl</code> | <code>all</code></td>
<td>Set when the sidebar should trigger responsiveness behavior </td>
<td>-</td>
</tr>
<tr>
<td>customBreakPoint</td>
<td><code>string</code></td>
<td>Set custom breakpoint value, this will override breakPoint prop </td>
<td>-</td>
</tr>
<tr>
<td>transitionDuration</td>
<td><code>number</code></td>
<td>Duration for the transition in milliseconds to be used in collapse and toggle behavior</td>
<td><code>300</code></td>
</tr>
<tr>
<td>rtl</td>
<td><code>boolean</code></td>
<td>RTL direction</td>
<td><code>false</code></td>
</tr>
<tr>
<td>rootStyles</td>
<td><code>CSSObject</code></td>
<td>Apply styles to sidebar element</td>
<td>-</td>
</tr>
<tr>
<td>onBackdropClick</td>
<td><code>() => void</code></td>
<td>Callback function to be called when backdrop is clicked</td>
<td>-</td>
</tr>
<tr>
<td rowspan=5>Menu</td>
<td>closeOnClick</td>
<td><code>boolean</code></td>
<td>If <code>true</code> and sidebar is in collapsed state, submenu popper will automatically close on MenuItem click</td>
<td><code>false</code></td>
</tr>
<tr>
<td>menuItemStyles</td>
<td><code>MenuItemStyles</code></td>
<td>Apply styles to MenuItem and SubMenu components and their children </td>
<td>-</td>
</tr>
<tr>
<td>renderExpandIcon</td>
<td><code>(params: { level: number; collapsed: boolean; disabled: boolean; active: boolean; open: boolean; }) => React.ReactNode</code></td>
<td>Render method for customizing submenu expand icon</td>
<td>-</td>
</tr>
<tr>
<td>transitionDuration</td>
<td><code>number</code></td>
<td>Transition duration in milliseconds to use when sliding submenu content</td>
<td><code>300</code></td>
</tr>
<tr>
<td>rootStyles</td>
<td><code>CSSObject</code></td>
<td>Apply styles from Menu root element</td>
<td>-</td>
</tr>
<tr>
<td rowspan=7>MenuItem</td>
<td>icon</td>
<td><code>ReactNode</code></td>
<td>Icon for the menu item </td>
<td>-</td>
</tr>
<tr>
<td>active</td>
<td><code>boolean</code></td>
<td>If <code>true</code>, the component is active</td>
<td><code>false</code></td>
</tr>
<tr>
<td>disabled</td>
<td><code>boolean</code></td>
<td>If <code>true</code>, the component is disabled </td>
<td>-</td>
</tr>
<tr>
<td>prefix</td>
<td><code>ReactNode</code></td>
<td>Add a prefix to the menuItem </td>
<td>-</td>
</tr>
<tr>
<td>suffix</td>
<td><code>ReactNode</code></td>
<td>Add a suffix to the menuItem </td>
<td>-</td>
</tr>
<tr>
<td>component</td>
<td><code>string | ReactElement</code></td>
<td>A component used for menu button node, can be string (ex: 'div') or a component </td>
<td>-</td>
</tr>
<tr>
<td>rootStyles</td>
<td><code>CSSObject</code></td>
<td>Apply styles to MenuItem element</td>
<td>-</td>
</tr>
<tr>
<td rowspan=11>SubMenu</td>
<td>label</td>
<td><code>string | ReactNode</code></td>
<td>Label for the submenu </td>
<td>-</td>
</tr>
<tr>
<td>icon</td>
<td><code>ReactNode</code></td>
<td>Icon for submenu</td>
<td>-</td>
</tr>
<tr>
<td>defaultOpen</td>
<td><code>boolean</code></td>
<td>Set if the submenu is open by default</td>
<td><code>false</code></td>
</tr>
<tr>
<td>open</td>
<td><code>boolean</code></td>
<td>Set open value if you want to control the state</td>
<td>-</td>
</tr>
<tr>
<td>active</td>
<td><code>boolean</code></td>
<td>If <code>true</code>, the component is active</td>
<td><code>false</code></td>
</tr>
<tr>
<td>disabled</td>
<td><code>boolean</code></td>
<td>If <code>true</code>, the component is disabled </td>
<td>-</td>
</tr>
<tr>
<td>prefix</td>
<td><code>ReactNode</code></td>
<td>Add a prefix to the submenu </td>
<td>-</td>
</tr>
<tr>
<td>suffix</td>
<td><code>ReactNode</code></td>
<td>Add a suffix to the submenu </td>
<td>-</td>
</tr>
<tr>
<td>onOpenChange</td>
<td><code>(open: boolean) => void</code></td>
<td>Callback function called when submenu state changes</td>
<td>-</td>
</tr>
<tr>
<td>component</td>
<td><code>string | React.ReactElement</code></td>
<td>A component used for menu button node, can be string (ex: 'div') or a component </td>
<td>-</td>
</tr>
<tr>
<td>rootStyles</td>
<td><code>CSSObject</code></td>
<td>Apply styles to SubMenu element</td>
<td>-</td>
</tr>
</tbody>
</table>
## License
MIT © [Mohamed Azouaoui](https://azouaoui.netlify.app)