1.6.1 • Published 6 months ago

@figliolia/bottom-sheet v1.6.1

Weekly downloads
-
License
-
Repository
github
Last release
6 months ago

Bottom Sheet

A responsive bottom sheet for react applications. This bottom sheet will morph into a more standard modal appearance when the screen size is above that of a typical mobile device

Installation

npm i @figliolia/bottom-sheet
# or
yarn add @figliolia/bottom-sheet

Basic Usage

To create a bottom sheet, wrap your content in <BottomSheet/> tags and specify your options:

import { BottomSheet } from "@figliolia/bottom-sheet";

export const BottomSheetForm = ({ open, closeFN }: {
  open: boolean;
  closeFN: () => void;
}) => {
  return (
    <BottomSheet 
      dim 
      notch 
      open={open}
      close={closeFN}
      className="my-bottom-sheet">
      <form>
        <input type="text" placeholder="Enter a value:"/>
        <input type="submit">Submit</button>
      </form>
    </BottomSheet>
  );
}

You've now created a bottom sheet that'll morph into a modal on larger devices!

Options

OptionDefault ValueDescription
dimfalseWhether to dim the background when the bottom sheet is open
notchfalseWhether to display an iOS like swipe indicator on the top of the bottom sheet when viewing on mobile devices
clickOutsidetrueWhether clicking outside the bottom sheet will cause it to close
openfalseA trigger to open/close the bottom sheet
closeundefinedA callback to run when the bottom sheet is closed
classNameundefinedAn optional css class to apply to your bottom sheet
childrenundefinedContent elements you wish to render inside your bottom sheet
onScrollundefinedAn optional callback to execute when your bottom sheet is scrolled
focusableContainertrueWhether or not the content container of the bottom sheet can be focused. You can disable this when the content inside of your bottom sheet is interactive

Accessibility

By default the bottom sheet uses the role='dialog' with aria-modal='true'. For bottom sheets that should announce content you can replace the role with alertdialog.

Bottom sheets that behave like dialogs should have corresponding aria-attributes that identify the label/title as well as descriptive content inside. To accomplish this you can use a combination of aria-label, aria-labelledby, aria-description, or aria-describedby

import { useId } from 'react';
import { BottomSheet } from "@figliolia/bottom-sheet";

export const BottomSheetForm = ({ open, closeFN }: {
  open: boolean;
  closeFN: () => void;
}) => {
  const title = useId();
  const description = useId();
  return (
    <BottomSheet 
      dim 
      notch 
      open={open}
      close={closeFN}
      aria-labelledby={title}
      aria-describedby={description}
      className="my-bottom-sheet">
      <h2 id={title}>Your title / label here</h2>
      <p id={description}>Your description here</p>
    </BottomSheet>
  );
}

Styling Tips

There are three CSS custom properties that can be accessed to easily theme your bottom sheets

--background: #fff; --notch-color: #d0cece; --backdrop-color: #00000082;

PropertyDefault ValueDescription
--sheet-background#fffThe color of your sheet
--notch-color#d0ceceThe color of the notch. Visible when notch={true}
--backdrop-color#00000082The color of the backdrop behind the sheet. Visible when dim={true}

Browser Support

This package relies on CSS Custom Properties in order to function. For more detailed information on specific browser version support, please reference the CSS Custom Properties support table.

1.6.1

6 months ago

1.6.0

6 months ago

1.5.1

6 months ago

1.5.0

6 months ago

1.4.1

10 months ago

1.2.0

1 year ago

1.1.9

1 year ago

1.2.3

1 year ago

1.3.1

1 year ago

1.2.2

1 year ago

1.3.0

1 year ago

1.2.1

1 year ago

1.1.8

1 year ago

1.1.1

1 year ago

1.1.0

1 year ago

1.1.7

1 year ago

1.1.6

1 year ago

1.1.5

1 year ago

1.1.4

1 year ago

1.1.3

1 year ago

1.0.3

1 year ago

1.0.2

1 year ago

1.0.1

1 year ago

1.0.0

1 year ago