{"version":3,"file":"Accordion.mjs","sources":["../../../src/components/Accordion/Accordion.tsx"],"sourcesContent":["'use client';\n\nimport type { ComponentProps, FC, ReactElement } from 'react';\nimport { Children, cloneElement, useMemo, useState } from 'react';\nimport { HiChevronDown } from 'react-icons/hi';\nimport { twMerge } from 'tailwind-merge';\nimport { mergeDeep } from '../../helpers/merge-deep';\nimport { getTheme } from '../../theme-store';\nimport type { DeepPartial } from '../../types';\nimport type { FlowbiteBoolean } from '../Flowbite';\nimport type { FlowbiteAccordionComponentTheme } from './AccordionContent';\nimport { AccordionContent } from './AccordionContent';\nimport type { AccordionPanelProps } from './AccordionPanel';\nimport { AccordionPanel } from './AccordionPanel';\nimport type { FlowbiteAccordionTitleTheme } from './AccordionTitle';\nimport { AccordionTitle } from './AccordionTitle';\n\nexport interface FlowbiteAccordionTheme {\n  root: FlowbiteAccordionRootTheme;\n  content: FlowbiteAccordionComponentTheme;\n  title: FlowbiteAccordionTitleTheme;\n}\n\nexport interface FlowbiteAccordionRootTheme {\n  base: string;\n  flush: FlowbiteBoolean;\n}\n\nexport interface AccordionProps extends ComponentProps<'div'> {\n  alwaysOpen?: boolean;\n  arrowIcon?: FC<ComponentProps<'svg'>>;\n  children: ReactElement<AccordionPanelProps> | ReactElement<AccordionPanelProps>[];\n  flush?: boolean;\n  collapseAll?: boolean;\n  theme?: DeepPartial<FlowbiteAccordionTheme>;\n}\n\nconst AccordionComponent: FC<AccordionProps> = ({\n  alwaysOpen = false,\n  arrowIcon = HiChevronDown,\n  children,\n  flush = false,\n  collapseAll = false,\n  className,\n  theme: customTheme = {},\n  ...props\n}) => {\n  const [isOpen, setOpen] = useState(collapseAll ? -1 : 0);\n\n  const panels = useMemo(\n    () =>\n      Children.map(children, (child, i) =>\n        cloneElement(child, {\n          alwaysOpen,\n          arrowIcon,\n          flush,\n          isOpen: isOpen === i,\n          setOpen: () => setOpen(isOpen === i ? -1 : i),\n        }),\n      ),\n    [alwaysOpen, arrowIcon, children, flush, isOpen],\n  );\n\n  const theme = mergeDeep(getTheme().accordion.root, customTheme);\n\n  return (\n    <div\n      className={twMerge(theme.base, theme.flush[flush ? 'on' : 'off'], className)}\n      data-testid=\"flowbite-accordion\"\n      {...props}\n    >\n      {panels}\n    </div>\n  );\n};\n\nAccordionComponent.displayName = 'Accordion';\nAccordionPanel.displayName = 'Accordion.Panel';\nAccordionTitle.displayName = 'Accordion.Title';\nAccordionContent.displayName = 'Accordion.Content';\n\nexport const Accordion = Object.assign(AccordionComponent, {\n  Panel: AccordionPanel,\n  Title: AccordionTitle,\n  Content: AccordionContent,\n});\n"],"names":["AccordionComponent","t0","$","_c","children","className","props","t1","t2","t3","t4","t5","alwaysOpen","arrowIcon","flush","collapseAll","theme","undefined","HiChevronDown","t6","customTheme","isOpen","setOpen","useState","t7","t8","t9","child","i","cloneElement","Children","map","panels","mergeDeep","getTheme","accordion","root","twMerge","base","t10","displayName","AccordionPanel","AccordionTitle","AccordionContent","Accordion","Object","assign","Panel","Title","Content"],"mappings":"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"}