import { forwardRef, cloneElement, isValidElement, type ReactNode, type PropsWithChildren, type ForwardedRef, } from 'react'; import type { Disclosure as DisclosureElement, DisclosureProperties, } from '@watching/clips/elements'; import {useCustomElementProperties} from './shared.ts'; export interface DisclosureProps extends PropsWithChildren, 'label'>> { ref?: ForwardedRef; label?: ReactNode; } declare module 'react' { namespace JSX { interface IntrinsicElements { 'ui-disclosure': DisclosureProps; } } } export const Disclosure = forwardRef( function Disclosure({label, children, ...props}, ref) { const allProps: DisclosureProps = {...props}; let labelElement: ReactNode; if (label) { if (isValidElement(label)) { labelElement = cloneElement(label, {slot: 'label'}); } else { allProps.label = label; } } const wrapperRef = useCustomElementProperties(allProps, ref); return ( {children} {labelElement} ); }, );