1.0.8 • Published 12 months ago

@atawi/react-popover v1.0.8

Weekly downloads
-
License
MIT
Repository
github
Last release
12 months ago

npm.io codecov License: MIT

React Popover Component

A lightweight, fully-featured, accessible, and customizable popover component for React apps.

Features

  • 🎯 12 placement options with smart auto-positioning
  • 🎨 Smooth animations and transitions
  • 🔄 Multiple trigger types (click, hover, focus)
  • 📱 Responsive and mobile-friendly
  • ♿ Accessible (WAI-ARIA compliant)
  • 🎛️ Controlled and uncontrolled modes
  • 🎯 Auto-placement to stay within viewport
  • 🖌️ Highly customizable styling
  • 📦 TypeScript support
  • ⚡ Optimized performance
  • ❌ No external dependencies

API documentation website

Installation

npm install @atawi/react-popover

Basic Usage

import { Popover } from "@atawi/react-popover";
import "@atawi/react-popover/dist/style.css"; // Optional: Import default styles

function App() {
  return (
    <Popover
      trigger={<button>Click me</button>}
      content={<div>Popover content</div>}
      placement="top"
    />
  );
}

Props

PropTypeDefaultDescription
triggerReactNode-The element that triggers the popover
contentReactNode-The content to display in the popover
placementPopoverPlacement'top'Preferred placement of the popover
offsetnumber8Distance between trigger and popover
classNamestring''Class name for the popover wrapper
containerClassNamestring''Class name for the container
contentClassNamestring''Class name for the content wrapper
openboolean-Control popover visibility externally
onOpenChange(open: boolean) => void-Callback when visibility changes
styleCSSProperties-Additional styles for the popover
autoPlacementbooleanfalseEnable automatic repositioning
animatedbooleanfalseEnable enter/exit animations
triggerTypePopoverTrigger \| PopoverTrigger[]'click'How to trigger the popover
hoverDelaynumber200Delay before showing on hover
closeDelaynumber400Delay before hiding on hover out
closeOnScrollbooleanfalseClose popover when window is scrolled
closeOnResizebooleanfalseClose popover when window is resized

Examples

Basic Popover

<Popover
  trigger={<button>Click me</button>}
  content="Simple popover content"
  placement="top"
/>

With Auto-placement

<Popover
  trigger={<button>Hover me</button>}
  content="Content that stays in viewport"
  placement="top"
  autoPlacement
  triggerType="hover"
/>

Animated Popover

<Popover
  trigger={<button>Animated</button>}
  content="Smooth animation"
  placement="right"
  animated
/>

Multiple Triggers

<Popover
  trigger={<button>Interactive</button>}
  content="Accessible content"
  placement="bottom"
  triggerType={["hover", "focus"]}
/>

Controlled Mode

function ControlledExample() {
  const [open, setOpen] = useState(false);

  return (
    <Popover
      trigger={<button>Controlled</button>}
      content="Controlled content"
      open={open}
      onOpenChange={setOpen}
    />
  );
}

Custom Styling

<Popover
  trigger={<button>Styled</button>}
  content="Custom styled content"
  className="custom-popover"
  contentClassName="custom-content"
  style={{ maxWidth: "300px" }}
/>

Placement Options

The placement prop accepts the following values:

  • top | top-start | top-end
  • bottom | bottom-start | bottom-end
  • left | left-start | left-end
  • right | right-start | right-end

Trigger Types

The triggerType prop accepts:

  • 'click' - Opens on click/tap
  • 'hover' - Opens on mouse hover
  • 'focus' - Opens on focus (keyboard navigation)
  • Array of the above for multiple triggers

Styling

The component uses CSS modules and provides several class names for customization:

  • .container - The root container
  • .trigger - The trigger wrapper
  • .content - The popover content wrapper
  • .contentInner - The inner content container
  • .animated - Applied when animations are enabled
  • .enter - Applied during enter animation
  • .exit - Applied during exit animation

Accessibility

The component follows WAI-ARIA guidelines:

  • Proper ARIA attributes
  • Keyboard navigation support
  • Focus management
  • Screen reader friendly

Browser Support

  • Chrome (latest)
  • Firefox (latest)
  • Safari (latest)
  • Edge (latest)
  • IE11 (with polyfills)

Contributing

Contributions are welcome! Please read our contributing guidelines before submitting a pull request.

License

MIT © Atawi

1.0.8

12 months ago

1.0.7

12 months ago

1.0.6

12 months ago

1.0.5

12 months ago

1.0.4

12 months ago

1.0.3

12 months ago

1.0.2

12 months ago

1.0.1

12 months ago

1.0.0

12 months ago