v3.0.0
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:
- 
Rename all of your AccordionItemTitlecomponents toAccordionItemHeading
 and then nest anAccordionItemButtondirectly inside of each one. Note that
 in order for your Accordion to remain spec-compliant, you may not put any
 other children insideAccordionItemHeading.// 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> ); 
- 
Rename all of your AccordionItemBodycomponents toAccordionItemPanel.// 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> ); 
- 
Remove all instances of hideBodyClassName. This prop is no longer valid, as
 AccordionItemPanelcomponents are now hidden without additional styling. If
 you must have a differentclassNameprop when an item is collapsed, then
 you may leverage the newAccordionItemStatecomponent.// 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> ); 
- 
Remove all instances of AccordionItem’sexpandedprop and instead use
 Accordion’spreExpandedprop. 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> ); 
- 
Remove all instances of Accordion’saccordionprop. Instead, use a
 combination ofallowZeroExpandedandallowMultipleExpandedprops to suit
 your requirements. If you were not explicitly settingaccordiontofalse
 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 />; 
- 
Upgrade to React v16.3+ 
- 
Remove your minimal-example.cssimport. These styles only applied
 display: noneto panels when collapsed, but browsers apply these styles to
 elements with thehiddenattribute, which theAccordionItemPanel
 component now has (when collapsed).
Added
- Added AccordionItemButtoncomponent.
- Added AccordionItemStatecomponent.
- Added allowZeroExpandedprop toAccordion.
- Added allowMultipleExpandedprop toAccordion.
- 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 AccordionItemTitletoAccordionItemHeadingto be consistent with
 the language used in the WAI ARIA spec.
- Renamed AccordionItemBodytoAccordionItemPanelto be consistent with
 the language used in the WAI ARIA spec.
- Updated AccordionItemPanelto have ahiddenattribute.
- Roles and aria attributes all audited and updated to match the WAI ARIA
 spec.
- Update onChangeto 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 expandedmechanism forAccordionItems.
- Removed undocumented disabledmechanism forAccordionItems.
- Remove hideBodyClassNameprop.