React Accessible Accordion Versions Save

Accessible Accordion component for React

v3.0.1

4 years ago

Fixed

v3.0.0

5 years ago

This release is the culmination of a massive amount of work, resulting in some new features and significantly stronger and more reliable WAI ARIA spec compliance. Notably, the project has been migrated from Flow to Typescript, and a full accessibility audit has been performed - revealing a few holes in our compliance which have now been entirely addressed.

Thanks to everyone who has contributed to this release - and not just those who have written code. Contribution by way of issues relating to spec compliance, pull-request commentary, advice and assistance is all greatly appreciated. Thanks also to the patient users who have endured an extended period without a release while we made sure to get this 100% right! Release cadence should return to normal again now.

Breaking Changes - Upgrade Guide:

  1. Rename all of your AccordionItemTitle components to AccordionItemHeading and then nest an AccordionItemButton directly inside of each one. Note that in order for your Accordion to remain spec-compliant, you may not put any other children inside AccordionItemHeading.

    // Before:
    import { AccordionItemTitle } from 'react-accessible-accordion';
    
    const headingBefore = <AccordionItemTitle>Foo</AccordionItemTitle>;
    
    //  After:
    import {
        AcccordionItemHeading,
        AccordionItemButton,
    } from 'react-accessible-accordion';
    
    const headingAfter = (
        <AccordionItemHeading>
            <AccordionItemButton>Foo</AccordionItemButton>
        </AccordionItemHeading>
    );
    
  2. Rename all of your AccordionItemBody components to AccordionItemPanel.

    // Before:
    import { AccordionItemBody } from 'react-accessible-accordion';
    
    const panelBefore = (
        <AccordionItemBody>
            Voluptate elit eiusmod laborum proident esse officia dolor laboris
            laboris amet nulla officia cillum.
        </AccordionItemBody>
    );
    
    // After:
    import { AccordionItemPanel } from 'react-accessible-accordion';
    
    const panelAfter = (
        <AccordionItemPanel>
            Voluptate elit eiusmod laborum proident esse officia dolor laboris
            laboris amet nulla officia cillum.
        </AccordionItemPanel>
    );
    
  3. Remove all instances of hideBodyClassName. This prop is no longer valid, as AccordionItemPanel components are now hidden without additional styling. If you must have a different className prop when an item is collapsed, then you may leverage the new AccordionItemState component.

    // Before
    import { AccordionItemPanel } from 'react-accessible-accordion';
    
    const panelBefore = (
        <AccordionItemPanel className="foo" hideBodyClassName="foo--hidden" />
    );
    
    // After:
    import {
        AccordionItemPanel,
        AccordionItemState,
    } from 'react-accessible-accordion';
    
    const panelAfter = (
        <AccordionItemState>
            {({ expanded }) => (
                <AccordionItemPanel
                    className={expanded ? 'foo' : 'foo foo--hidden'}
                />
            )}
        </AccordionItemState>
    );
    
  4. Remove all instances of AccordionItem’s expanded prop and instead use Accordion’s preExpanded prop. Note that this means that ‘controlled’ accordions are no longer a supported pattern. Please raise an issue if you have a use-case which calls for the ability to manually control expanded state.

    // Before
    import { Accordion, AccordionItem } from 'react-accessible-accordion';
    
    const accordionBefore = (
        <Accordion>
            <AccordionItem expanded />
        </Accordion>
    );
    
    // After:
    import { Accordion, AccordionItem } from 'react-accessible-accordion';
    
    const accordionAfter = (
        <Accordion preExpanded={['foo']}>
            <AccordionItem uuid="foo" />
        </Accordion>
    );
    
  5. Remove all instances of Accordion’s accordion prop. Instead, use a combination of allowZeroExpanded and allowMultipleExpanded props to suit your requirements. If you were not explicitly setting accordion to false then you probably are not required to make any changes here.

    // Before
    import { Accordion } from 'react-accessible-accordion';
    
    const accordionBefore = <Accordion accordion={false} />;
    
    // After:
    import { Accordion } from 'react-accessible-accordion';
    
    const accordionAfter = <Accordion allowMultipleExpanded />;
    
  6. Upgrade to React v16.3+

  7. Remove your minimal-example.css import. These styles only applied display: none to panels when collapsed, but browsers apply these styles to elements with the hidden attribute, which the AccordionItemPanel component now has (when collapsed).

Added

  • Added AccordionItemButton component.
  • Added AccordionItemState component.
  • Added allowZeroExpanded prop to Accordion.
  • Added allowMultipleExpanded prop to Accordion.
  • Out-of-the-box Typescript support.
  • Integration tests to explicitly assert every line of the WAI ARIA 'Accordion' spec.
  • Additional keyboard functionality (Up, Down, Left, Right, Home, End).

Changed

  • Renamed AccordionItemTitle to AccordionItemHeading to be consistent with the language used in the WAI ARIA spec.
  • Renamed AccordionItemBody to AccordionItemPanel to be consistent with the language used in the WAI ARIA spec.
  • Updated AccordionItemPanel to have a hidden attribute.
  • Roles and aria attributes all audited and updated to match the WAI ARIA spec.
  • Update onChange to always be called with an array of the currently expanded items.

Fixed

  • Fixes SSR (server-side rendering).
  • Fixes incorrect roles and attributes as per the WAI ARIA spec.

Removed

  • Removed Flow support (but we hope to reinstate typing in the future. Track progress here).
  • Removed undocumented expanded mechanism for AccordionItems.
  • Removed undocumented disabled mechanism for AccordionItems.
  • Remove hideBodyClassName prop.

v2.4.5

5 years ago

Fixed

  • Fixes SSR.

v2.4.4-beta.1

5 years ago

v2.4.4

5 years ago

This release addresses some performance concerns, and should result in lower memory usage and prevented crashes.

Fixed

  • Fixes performance issue with not re-instantiating render-prop callbacks on each re-render.

v2.4.2

5 years ago

Changed

  • Removes invalid test
  • Minor change to package.json to remove some redundant Jest config.
  • Upgrade one forgotten devDependency.

Fixed

  • Emergency bug fix to remove asyc/await from the code (see PR#95)

v2.4.1

6 years ago

This release brings support for React 16.3+ by way of some minor refactoring to remove deprecated lifecycle methods.

Changed

  • Replace deprecated lifecycle methods 'componentWillReceiveProps', 'componentWillUpdate' and 'componentWillMount'.
  • Updated unstated (internal dependency) to latest major release.
  • Updated all devDependencies.

v2.4.0

6 years ago

Added

Fixed

v2.3.1

6 years ago

Fixed

  • Add dist folder to list of Flow ignores, so Flow doesn’t error after a build.
  • Issue with babel helpers. Just reverted commit 6f9f2c324a6fad4a35a84307241f4f710407f242 for now.

Changed

  • Removed a couple of old npm scripts from the days before we introduced rollup to the build pipeline.
  • Upgraded a bunch of devDependencies, including Webpack which required a bit of a config refactor.

v2.3.0

6 years ago

Changed

  • Refactored to use unstated for state-management instead of mobx + mobx-react, cutting the size of the bundle by approximately 60% 🎉.