react-bootstrap
Version:
Bootstrap 5 components built with React
49 lines • 1.66 kB
JavaScript
import classNames from 'classnames';
import * as React from 'react';
import { useMemo } from 'react';
import { useUncontrolled } from 'uncontrollable';
import { useBootstrapPrefix } from './ThemeProvider';
import AccordionBody from './AccordionBody';
import AccordionButton from './AccordionButton';
import AccordionCollapse from './AccordionCollapse';
import AccordionContext from './AccordionContext';
import AccordionHeader from './AccordionHeader';
import AccordionItem from './AccordionItem';
import { jsx as _jsx } from "react/jsx-runtime";
const Accordion = /*#__PURE__*/React.forwardRef((props, ref) => {
const {
// Need to define the default "as" during prop destructuring to be compatible with styled-components github.com/react-bootstrap/react-bootstrap/issues/3595
as: Component = 'div',
activeKey,
bsPrefix,
className,
onSelect,
flush,
alwaysOpen,
...controlledProps
} = useUncontrolled(props, {
activeKey: 'onSelect'
});
const prefix = useBootstrapPrefix(bsPrefix, 'accordion');
const contextValue = useMemo(() => ({
activeEventKey: activeKey,
onSelect,
alwaysOpen
}), [activeKey, onSelect, alwaysOpen]);
return /*#__PURE__*/_jsx(AccordionContext.Provider, {
value: contextValue,
children: /*#__PURE__*/_jsx(Component, {
ref: ref,
...controlledProps,
className: classNames(className, prefix, flush && `${prefix}-flush`)
})
});
});
Accordion.displayName = 'Accordion';
export default Object.assign(Accordion, {
Button: AccordionButton,
Collapse: AccordionCollapse,
Item: AccordionItem,
Header: AccordionHeader,
Body: AccordionBody
});