Giter VIP home page Giter VIP logo

react-resizable-layout's Introduction

react-resizable-layout

npm version MIT License minziggped size dependencies count tree shaking

A lightweight, accessible headless React component and hook for drag-and-drop resizable layouts.

Hero Image

Edit react-resizable-layout

Storybook Demo

Features

  • πŸ“¦ Lightweight
  • πŸ•³ Headless
  • 🫢🏽 Accessible
  • 🀏 Drag and Drop Support
  • ⌨️ Keyboard Support
  • πŸ«™ Zero Dependencies

Installation

Install from npm:

# Using npm
npm install react-resizable-layout

# Using Yarn
yarn add react-resizable-layout

Usage

Resizable component

import Resizable from 'react-resizable-layout';

<Resizable axis={'x'}>
  {({ position, separatorProps }) => (
    <div className="wrapper">
      <div className="left-block" style={{ width: position }} />
      <YourSeparatorComponent {...separatorProps} />
      <div className="right-block" />
    </div>
  )}
</Resizable>

useResizable hook

import { useResizable } from 'react-resizable-layout';

const Component = () => {
  const { position, separatorProps } = useResizable({
    axis: 'x',
  })

  return (
    <div className="wrapper">
      <div className="left-block" style={{ width: position }} />
      <YourSeparatorComponent {...separatorProps} />
      <div className="right-block" />
    </div>
  )
}

Aria Props

The following attributes are added to separatorProps in accordance with W3C.
https://www.w3.org/TR/wai-aria-1.2/#separator

Attribute Value
role 'separator'
aria-valuenow position
aria-valuemin props.min
aria-valuemax props.max
aria-orientation 'vertical' or 'horizontal'
aria-disabled props.disabled

Configuration

Common Props

Name Type Default Required Description
axis 'x' or 'y' - β—― Resize direction
containerRef ReactRef - - Reference to container for calculating position
disabled boolean false - Disable resize
initial number 0 - Initial size
min number 0 - Minimum size
max number Infinity - Maximum size
reverse boolean false - If true, returns position of the opposite side
step number 10 - Pixel steps when operating with keyboard
shiftStep number 50 - Pixel steps when operating with keyboard while holding down the shift key
onResizeStart function - - Callback on resize start
onResizeEnd function - - Callback on resize end

Resizable component children args

useResizable hook returns same.

Name Type Description
position number Separator's position (Width for 'x' axis, height for 'y' axis)
endPosition number Separator's position at end of drag
isDragging boolean True if dragging
separatorProps object Separator's props like onPointerDown
setPosition function Set separator's position

About keyboard support

The following keyboard operations are supported.

Key Operation
Arrow (↑,β†’,↓,←) Move the separator by 10px (default)
Shift + Arrow (↑,β†’,↓,←) Move the separator by 50px (default)
Enter Reset the separator to the initial position

About mouse support

Double-click on the separator to return it to its initial position.

Contribution

Feel free to open an issue or make a pull request.

License

Distributed under the MIT License. See LICENSE for more information.

react-resizable-layout's People

Contributors

ryosogawa avatar dependabot[bot] avatar ryandvmartin avatar klond90 avatar kaapporaivio avatar jmredfern avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.