1.7.0 โ€ข Published 5 months ago

react-checkbox-pro v1.7.0

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

React Checkbox Pro

A fully accessible, customizable React checkbox component with indeterminate state support, keyboard shortcuts, and modern styling.

npm version npm downloads License

๐Ÿ“š Demo & Documentation

Documentation

Features

Core Features

  • โœจ Modern, lightweight checkbox component
  • ๐Ÿ”„ Controlled & Uncontrolled modes support
  • ๐Ÿ‘ฅ Checkbox group for managing multiple selections
  • ๐ŸŽฏ Indeterminate state support
  • โŒจ๏ธ Full keyboard navigation and shortcuts
  • ๐ŸŽจ CSS-in-JS with Tailwind variants

Styling & Customization

  • ๐ŸŽญ Custom icons support
  • ๐Ÿ–ผ๏ธ Built-in check and indeterminate icons
  • ๐ŸŽจ Multiple built-in color variants
  • Default, Primary, Secondary, Success, Warning, Danger
  • ๐Ÿ“ Four size variants (xs, sm, md, lg)
  • ๐Ÿ”ฒ Configurable border radius
  • ๐Ÿ“ Flexible label placement (left, right, top, bottom)
  • ๐Ÿ’… Works with both Tailwind CSS and custom CSS
  • ๐ŸŽฏ Custom styles without breaking accessibility
  • ๐ŸŽช Compound variants support

Accessibility & UX

  • โ™ฟ๏ธ WAI-ARIA 1.2 compliant
  • ๐Ÿ” Screen reader friendly
  • ๐ŸŽฏ Focus management and indicators
  • ๐Ÿ’ฌ Support for helper text and error messages
  • ๐Ÿ“ฑ Responsive and touch-friendly
  • ๐Ÿ–ฑ๏ธ Click area optimization
  • ๐Ÿ”„ Smooth transitions

Developer Experience

  • ๐Ÿ“ Written in TypeScript with full type definitions
  • ๐Ÿƒโ€โ™‚๏ธ Tree-shakeable and optimized bundle
  • ๐Ÿ“š Comprehensive documentation and examples
  • ๐Ÿงช Reliable with proper error handling
  • ๐Ÿ”ง Easy to integrate and customize
  • ๐ŸŽ Zero external runtime dependencies
  • ๐Ÿ“ฆ Small bundle size
  • ๐Ÿ” Source maps included

Advanced Features

  • ๐Ÿ”‘ Keyboard shortcuts customization
  • ๐ŸŽ›๏ธ Form integration support
  • ๐Ÿ”„ Async state management
  • ๐ŸŽจ Theme customization support
  • ๐Ÿ”’ Disabled and readonly states
  • ๐Ÿ“Š Group selection management
  • ๐ŸŽฏ Compound variants for complex styling
  • ๐ŸŽจ CSS variables support
  • ๐Ÿ”„ State persistence options
  • ๐ŸŽจ Custom styles without breaking accessibility

Installation

npm install react-checkbox-pro
# or
yarn add react-checkbox-pro
# or
pnpm add react-checkbox-pro

Usage

Add the plugin to your tailwind.config.js:

module.exports = {
  content: [
    "./src/**/*.{js,ts,jsx,tsx}",
    "./node_modules/@shakibdshy/tailwind-theme/dist/**/*.{js,ts,jsx,tsx,mdx}",
  ],
  plugins: [
    require('@shakibdshy/tailwind-theme')
  ],
}

Quick Start

import { Checkbox } from 'react-checkbox-pro';

function App() {
  return (
    <Checkbox defaultChecked>
      Click me
    </Checkbox>
  );
}

Color Variants

<Checkbox color="default">Default</Checkbox>
<Checkbox color="primary">Primary</Checkbox>
<Checkbox color="secondary">Secondary</Checkbox>
<Checkbox color="success">Success</Checkbox>
<Checkbox color="warning">Warning</Checkbox>
<Checkbox color="danger">Danger</Checkbox>

Size Variants

<Checkbox size="xs">Extra Small</Checkbox>
<Checkbox size="sm">Small</Checkbox>
<Checkbox size="md">Medium</Checkbox>
<Checkbox size="lg">Large</Checkbox>

Label Placement

<Checkbox labelPlacement="left">Left Label</Checkbox>
<Checkbox labelPlacement="right">Right Label</Checkbox>
<Checkbox labelPlacement="top">Top Label</Checkbox>
<Checkbox labelPlacement="bottom">Bottom Label</Checkbox>

With Error State

<Checkbox
  error={true}
  errorMessage="This field is required"
  required
>
  Accept terms and conditions
</Checkbox>

Controlled and Uncontrolled

// Controlled
const [checked, setChecked] = useState(false);

<Checkbox
  checked={checked}
  onChange={setChecked}
  helperText="Optional helper text"
>
  Accept terms and conditions
</Checkbox>

// Uncontrolled
<Checkbox
  defaultChecked
  onChange={(checked) => console.log(checked)}
>
  Remember me
</Checkbox>

With Keyboard Shortcuts

<Checkbox
  shortcut="ctrl+1"
  onShortcut={() => console.log('Shortcut triggered')}
>
  Toggle with Ctrl+1
</Checkbox>

Checkbox Group

function App() {
  const [selected, setSelected] = useState(['apple']);

  return (
    <CheckboxGroup
      value={selected}
      onChange={setSelected}
      orientation="vertical"
    >
      <Checkbox value="apple">Apple</Checkbox>
      <Checkbox value="banana">Banana</Checkbox>
      <Checkbox value="orange">Orange</Checkbox>
    </CheckboxGroup>
  );
}

Indeterminate State Example

function TodoList() {
  const [todos, setTodos] = useState([
    { id: 1, title: "Task 1", completed: false },
    { id: 2, title: "Task 2", completed: false },
  ]);

  const allSelected = todos.every((todo) => todo.completed);
  const someSelected = todos.some((todo) => todo.completed);
  const isIndeterminate = someSelected && !allSelected;

  const handleParentChange = (checked) => {
    setTodos((prev) => prev.map((todo) => ({
      ...todo,
      completed: checked,
    })));
  };

  return (
    <div>
      <Checkbox
        checked={allSelected}
        indeterminate={isIndeterminate}
        onChange={handleParentChange}
      >
        Select All
      </Checkbox>
      
      {todos.map((todo) => (
        <Checkbox
          key={todo.id}
          checked={todo.completed}
          onChange={(checked) => handleTodoChange(todo.id, checked)}
        >
          {todo.title}
        </Checkbox>
      ))}
    </div>
  );
}

Custom Icons

import { CircleIcon, CheckIcon } from './icons';

<Checkbox
  icon={<CircleIcon />}
  checkedIcon={<CheckIcon />}
>
  Custom Icons
</Checkbox>

Props

Checkbox Props

PropTypeDefaultDescription
checkedbooleanundefinedControlled checked state
defaultCheckedbooleanfalseDefault checked state for uncontrolled component
onChange(checked: boolean) => void | (event: ChangeEvent) => voidundefinedChange handler
disabledbooleanfalseWhether the checkbox is disabled
requiredbooleanfalseWhether the checkbox is required
errorbooleanfalseWhether to show error state
errorMessagestringundefinedError message to display
helperTextstringundefinedHelper text to display
indeterminatebooleanfalseWhether to show indeterminate state
size'xs' \| 'sm' \| 'md' \| 'lg''md'Size of the checkbox
color'default' \| 'primary' \| 'secondary' \| 'success' \| 'warning' \| 'danger''primary'Color variant
radius'none' \| 'sm' \| 'md' \| 'lg' \| 'full''md'Border radius variant
labelPlacement'left' \| 'right' \| 'top' \| 'bottom''right'Label placement
iconReactNodeundefinedCustom unchecked icon
checkedIconReactNodeundefinedCustom checked icon
shortcutstringundefinedKeyboard shortcut (e.g., 'ctrl+1')
onShortcut() => voidundefinedShortcut callback

CheckboxGroup Props

PropTypeDefaultDescription
valuestring[]undefinedControlled selected values
defaultValuestring[][]Default selected values
onChange(values: string[]) => voidundefinedChange handler
disabledbooleanfalseDisable all checkboxes in group
orientation'horizontal' \| 'vertical''vertical'Layout orientation
spacing'sm' \| 'md' \| 'lg''md'Space between checkboxes
labelPlacement'left' \| 'right' \| 'top' \| 'bottom''right'Label placement for all checkboxes

Accessibility

The component is built with accessibility in mind and follows WAI-ARIA guidelines:

  • Proper ARIA attributes (aria-checked, aria-invalid, etc.)
  • Keyboard navigation support
  • Screen reader friendly
  • Clear focus indicators
  • Proper labeling and descriptions

Contributing

We welcome contributions! Please see our Contributing Guide for details.

License

MIT ยฉ Md Habibur Rahman

Support

  • Create an Issue
  • Follow on Twitter
  • Star the repo โญ๏ธ