51 lines
1.6 KiB
JavaScript
Executable File
51 lines
1.6 KiB
JavaScript
Executable File
"use client";
|
|
|
|
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
|
|
}); |