{"version":3,"file":"index.cjs","sources":["../../../../src/components/accordion/index.tsx"],"sourcesContent":["import React, {\n    type ReactElement,\n    type ReactNode,\n    useCallback,\n    useMemo,\n    useState,\n} from \"react\";\nimport { matchChildByType, mergedCva } from \"../../utils/components\";\nimport { AccordionContextProvider } from \"./context\";\nimport { AccordionDetails } from \"./details\";\nimport { AccordionSummary } from \"./summary\";\n\nexport * from \"./details\";\nexport * from \"./summary\";\n\nconst rootStyles = mergedCva([\n    \"cui-font-mono\",\n    \"odd:cui-border-t\",\n    \"cui-border-r\",\n    \"cui-border-l\",\n    \"odd:cui-border-b\",\n    \"cui-border-black\",\n    \"dark:cui-border-white\",\n    \"[&:first-of-type>div:nth-child(1)]:cui-rounded-t-xxl\",\n    \"[&:first-of-type]:cui-rounded-t-xxl\",\n    \"[&:last-of-type]:cui-rounded-b-xxl\",\n    \"[&:last-of-type>div:nth-child(1)]:cui-rounded-b-xxl\",\n]);\n\nexport interface AccordionProps {\n    onChange?: (event: React.MouseEvent, expanded: boolean) => void;\n    expanded?: boolean;\n    className?: { root?: string };\n    children: ReactElement[];\n}\n\nexport const Accordion = ({\n    onChange,\n    expanded,\n    className,\n    children,\n    ...rest\n}: AccordionProps): ReactElement => {\n    const [internalExpanded, setInternalExpanded] = useState<boolean>(false);\n\n    const isControlled = useMemo(() => expanded !== undefined, [expanded]);\n    const isExpanded = useMemo(\n        () => (isControlled ? !!expanded : internalExpanded),\n        [isControlled, expanded, internalExpanded],\n    );\n\n    const { summaryChildren, detailsChildren } = useMemo(() => {\n        return React.Children.toArray(children).reduce(\n            (\n                accumulator: {\n                    summaryChildren: ReactNode[];\n                    detailsChildren: ReactNode[];\n                },\n                child,\n            ) => {\n                if (matchChildByType(child, AccordionSummary))\n                    accumulator.summaryChildren.push(child);\n                else if (matchChildByType(child, AccordionDetails))\n                    accumulator.detailsChildren.push(child);\n                return accumulator;\n            },\n            { summaryChildren: [], detailsChildren: [] },\n        );\n    }, [children]);\n\n    const handleOnClick = useCallback(\n        (event: React.MouseEvent) => {\n            if (onChange) {\n                onChange(event, internalExpanded);\n            }\n\n            // update the internal state if the component is not controlled\n            if (!isControlled) {\n                setInternalExpanded(!internalExpanded);\n            }\n        },\n        [onChange, setInternalExpanded, internalExpanded, isControlled],\n    );\n\n    const accordionContextValue = useMemo(\n        () => ({\n            toggle: handleOnClick,\n            expanded: isExpanded,\n        }),\n        [handleOnClick, isExpanded],\n    );\n\n    return (\n        <div {...rest} className={rootStyles({ className: className?.root })}>\n            <AccordionContextProvider value={accordionContextValue}>\n                {summaryChildren}\n            </AccordionContextProvider>\n            {isExpanded && detailsChildren}\n        </div>\n    );\n};\n"],"names":["mergedCva","useState","useMemo","matchChildByType","AccordionSummary","AccordionDetails","useCallback","AccordionContextProvider"],"mappings":";;;;;;;;AAeA,MAAM,aAAaA,oBAAU,CAAA;AAAA,EACzB,eAAA;AAAA,EACA,kBAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,kBAAA;AAAA,EACA,kBAAA;AAAA,EACA,uBAAA;AAAA,EACA,sDAAA;AAAA,EACA,qCAAA;AAAA,EACA,oCAAA;AAAA,EACA,qDAAA;AACJ,CAAC,CAAA,CAAA;AASM,MAAM,YAAY,CAAC;AAAA,EACtB,QAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG,IAAA;AACP,CAAoC,KAAA;AAChC,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAIC,eAAkB,KAAK,CAAA,CAAA;AAEvE,EAAA,MAAM,eAAeC,aAAQ,CAAA,MAAM,aAAa,KAAW,CAAA,EAAA,CAAC,QAAQ,CAAC,CAAA,CAAA;AACrE,EAAA,MAAM,UAAa,GAAAA,aAAA;AAAA,IACf,MAAO,YAAA,GAAe,CAAC,CAAC,QAAW,GAAA,gBAAA;AAAA,IACnC,CAAC,YAAc,EAAA,QAAA,EAAU,gBAAgB,CAAA;AAAA,GAC7C,CAAA;AAEA,EAAA,MAAM,EAAE,eAAA,EAAiB,eAAgB,EAAA,GAAIA,cAAQ,MAAM;AACvD,IAAA,OAAO,KAAM,CAAA,QAAA,CAAS,OAAQ,CAAA,QAAQ,CAAE,CAAA,MAAA;AAAA,MACpC,CACI,aAIA,KACC,KAAA;AACD,QAAI,IAAAC,2BAAA,CAAiB,OAAOC,wBAAgB,CAAA;AACxC,UAAY,WAAA,CAAA,eAAA,CAAgB,KAAK,KAAK,CAAA,CAAA;AAAA,aACjC,IAAAD,2BAAA,CAAiB,OAAOE,sBAAgB,CAAA;AAC7C,UAAY,WAAA,CAAA,eAAA,CAAgB,KAAK,KAAK,CAAA,CAAA;AAC1C,QAAO,OAAA,WAAA,CAAA;AAAA,OACX;AAAA,MACA,EAAE,eAAiB,EAAA,EAAI,EAAA,eAAA,EAAiB,EAAG,EAAA;AAAA,KAC/C,CAAA;AAAA,GACJ,EAAG,CAAC,QAAQ,CAAC,CAAA,CAAA;AAEb,EAAA,MAAM,aAAgB,GAAAC,iBAAA;AAAA,IAClB,CAAC,KAA4B,KAAA;AACzB,MAAA,IAAI,QAAU,EAAA;AACV,QAAA,QAAA,CAAS,OAAO,gBAAgB,CAAA,CAAA;AAAA,OACpC;AAGA,MAAA,IAAI,CAAC,YAAc,EAAA;AACf,QAAA,mBAAA,CAAoB,CAAC,gBAAgB,CAAA,CAAA;AAAA,OACzC;AAAA,KACJ;AAAA,IACA,CAAC,QAAA,EAAU,mBAAqB,EAAA,gBAAA,EAAkB,YAAY,CAAA;AAAA,GAClE,CAAA;AAEA,EAAA,MAAM,qBAAwB,GAAAJ,aAAA;AAAA,IAC1B,OAAO;AAAA,MACH,MAAQ,EAAA,aAAA;AAAA,MACR,QAAU,EAAA,UAAA;AAAA,KACd,CAAA;AAAA,IACA,CAAC,eAAe,UAAU,CAAA;AAAA,GAC9B,CAAA;AAEA,EAAA,2CACK,KAAK,EAAA,EAAA,GAAG,MAAM,SAAW,EAAA,UAAA,CAAW,EAAE,SAAW,EAAA,SAAA,EAAW,MAAM,CAAA,EAAA,sCAC9DK,gCAAyB,EAAA,EAAA,KAAA,EAAO,yBAC5B,eACL,CAAA,EACC,cAAc,eACnB,CAAA,CAAA;AAER;;;;;;"}