import { createSignal, FlowComponent, JSX, mergeProps, splitProps, } from "solid-js"; import Collapsible from "./Collapsible"; const createAccordion = (defaultItem: number | null = 0) => { const [item, setItem] = createSignal(defaultItem); const AccordionItem: FlowComponent< { alignCenter?: boolean; label?: JSX.Element; item?: number; } & Parameters[0] > = (p) => { const mprops = mergeProps({ alignCenter: true, item: Math.random() }, p); const [props, rest] = splitProps(mprops, [ "alignCenter", "item", "label", "children", ]); return ( {props.label} } onChange={(evt: any) => setItem(evt.currentTarget.checked && props.item) } {...rest} > {props.children} ); }; return [AccordionItem, item, setItem] as [ typeof AccordionItem, typeof item, typeof setItem ]; }; export default createAccordion;