/** * External dependencies */ import { useState } from '@wordpress/element'; import clsx from 'clsx'; import { Icon, chevronUp, chevronDown } from '@wordpress/icons'; import type { ReactNode, ReactElement } from 'react'; /** * Internal dependencies */ import './style.scss'; export interface PanelProps { children: ReactNode; className?: string | undefined; initialOpen?: boolean; hasBorder?: boolean; title: ReactNode; titleTag?: keyof JSX.IntrinsicElements; state?: [ boolean, React.Dispatch< React.SetStateAction< boolean > > ]; } const Panel = ( { children, className, initialOpen = false, hasBorder = false, title, titleTag: TitleTag = 'div', state, }: PanelProps ): ReactElement => { let [ isOpen, setIsOpen ] = useState< boolean >( initialOpen ); // If state is managed externally, we override the internal state. if ( Array.isArray( state ) && state.length === 2 ) { [ isOpen, setIsOpen ] = state; } return (
{ isOpen && (
{ children }
) }
); }; export default Panel;