Skip to content

Repository files navigation

Build StatusLicense: MITcode style: prettierCommitizen friendly

React Offcanvas Component

Create Off-canvas Sidebars with React and Popmotion's pose

Installation

This npm module utilizes react-pose for animations.

yarn

yarn add react-pose react-offcanvas-component

npm

npm i -S react-pose react-offcanvas-component

Developments

This repo uses Commitizen for git commit conventions.

Run yarn commit or npm run commit

You'll be prompted to fill in any required fields and your commit messages will be formatted according to the standards

Basic usage

Please visit this Repo for examples.

importReactOffcanvasComponentfrom"react-offcanvas-component";import"./Basic.css";const{ Menu, DropdownMenu, CloseButton }=ReactOffcanvasComponent;constopenAnimation={x: 0,transition: {duration: 200}};<ReactOffcanvasComponentclassName="wrapper"open={visibility}openAnimation={openAnimation}><CloseButtononClick={handleClick}style={{right: 10}}>
x
</CloseButton><divclassName="logo">ROC</div><Menu><MenuItemclassName="menu-item">Home</MenuItem><MenuItemclassName="menu-item">Another Menu Item</MenuItem><MenuItemhasDropdownname="dropdown-b"className="dropdown">
Dropdown
<DropdownMenu><MenuItemclassName="dropdown-item">Abc</MenuItem><MenuItemclassName="dropdown-item">Abc</MenuItem><MenuItemclassName="dropdown-item">Abc</MenuItem></DropdownMenu></MenuItem><MenuItemclassName="menu-item">Is n't it awesome</MenuItem></Menu></ReactOffcanvasComponent>;
.wrapper {
width:400px;
background:#fff;
padding:20px;
}
.menu-item {
margin-bottom:20px;
}
.dropdown {
cursor: pointer;
margin-bottom:20px;
}
.dropdown-item {
padding:10px;
margin-top:20px;
background:#e2e2e2;
}
.logo {
padding-bottom:10px;
margin-bottom:20px;
border-bottom:1px solid #e2e2e2;
width:200px;
}

API

ReactOffcanvasComponent

PropTypeDefaultRequiredDescription
openBooleanfalseyesSetting values as true will Reveal Sidebar and false will Hide Sidebar
classNameStringnonoOverride the styles applied to the component with css
styleObjectnonoOverride the styles applied to the component with inline styles
openAnimationObjectSee Default AnimationsnoOverride the default open animation
closeAnimationObjectSee Default AnimationsnoOverride the default close animation
overlayBooleanfalsenoShow / Hide background overlay
overlayClassNameStringnonoOverride the default styles applied to the Overlay component with css classes

AnimatedPanel

PropTypeDefaultRequiredDescription
classNameStringnonoOverride the styles applied to the component with css
styleObjectnonoOverride the styles applied to the component with inline styles
openAnimationObjectSee Default AnimationsnoOverride the default open animation
closeAnimationObjectSee Default AnimationsnoOverride the default close animation

CloseButton

PropTypeDefaultRequiredDescription
onClickFunctionnonofunction(event: object) => void
styleObjectnonoOverride the styles applied to the component with inline styles
classNameStringnonoOverride the styles applied to the component with css

DropdownMenu

PropTypeDefaultRequiredDescription
styleObjectnonoOverride the styles applied to the component with inline styles
classNameStringnonoOverride the styles applied to the component with css

DropdownMenu

PropTypeDefaultRequiredDescription
classNameStringnonoOverride the styles applied to the component with css

MenuItem

PropTypeDefaultRequiredDescription
styleObjectnonoOverride the styles applied to the component with inline styles
classNameStringnonoOverride the styles applied to the component with css
onClickFunctionnonofunction(event: object) => void
dropdownIconClassNameStringnonoOverride the styles applied to the dropdown menu icon with css
hasDropdownBooleannonoIf the MenuItem contains a dropdown menu set this value to true

Default Animations

I have used react-pose to create the animations. A tons of customization possible via pose api.

ReactOffcanvasComponent

Open

{x: "-100px",transition: {ease: [0.175,0.885,0.32,1.275],duration: 300},delayChildren: 150,staggerChildren: 100}

Close

{x: "-100%",transition: {duration: 100},afterChildren: true}

AnimatedPanel

Open

{x: "0%",transition: {ease: [0.175,0.885,0.32,1.275],duration: 300},delayChildren: 300,staggerChildren: 100}

Close

{x: "-100%",transition: {duration: 100},afterChildren: true}

Todo:

  • Add tests and coverage reports