{"version":3,"file":"Accordion.cjs","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 { get } from \"../../helpers/get\";\nimport { resolveProps } from \"../../helpers/resolve-props\";\nimport { useResolveTheme } from \"../../helpers/resolve-theme\";\nimport { twMerge } from \"../../helpers/tailwind-merge\";\nimport { ChevronDownIcon } from \"../../icons/chevron-down-icon\";\nimport { useThemeProvider } from \"../../theme/provider\";\nimport type { FlowbiteBoolean, ThemingProps } from \"../../types\";\nimport type { AccordionContentTheme } from \"./AccordionContent\";\nimport type { AccordionPanelProps } from \"./AccordionPanel\";\nimport type { AccordionTitleTheme } from \"./AccordionTitle\";\nimport { accordionTheme } from \"./theme\";\n\nexport interface AccordionTheme {\n  root: AccordionRootTheme;\n  content: AccordionContentTheme;\n  title: AccordionTitleTheme;\n}\n\nexport interface AccordionRootTheme {\n  base: string;\n  flush: FlowbiteBoolean;\n}\n\nexport interface AccordionProps extends ComponentProps<\"div\">, ThemingProps<AccordionRootTheme> {\n  alwaysOpen?: boolean;\n  arrowIcon?: FC<ComponentProps<\"svg\">>;\n  children: ReactElement<AccordionPanelProps> | ReactElement<AccordionPanelProps>[];\n  flush?: boolean;\n  collapseAll?: boolean;\n}\n\nexport function Accordion(props: AccordionProps) {\n  const provider = useThemeProvider();\n  const theme = useResolveTheme(\n    [accordionTheme.root, provider.theme?.accordion?.root, props.theme],\n    [get(provider.clearTheme, \"accordion.root\"), props.clearTheme],\n    [get(provider.applyTheme, \"accordion.root\"), props.applyTheme],\n  );\n\n  const {\n    alwaysOpen = false,\n    arrowIcon = ChevronDownIcon,\n    children,\n    flush = false,\n    collapseAll = false,\n    className,\n    ...restProps\n  } = resolveProps(props, provider.props?.accordion);\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  return (\n    <div\n      className={twMerge(theme.base, theme.flush[flush ? \"on\" : \"off\"], className)}\n      data-testid=\"flowbite-accordion\"\n      {...restProps}\n    >\n      {panels}\n    </div>\n  );\n}\n\nAccordion.displayName = \"Accordion\";\n"],"names":["provider","useThemeProvider","theme","useResolveTheme","accordionTheme","get","ChevronDownIcon","resolveProps","useState","useMemo","Children","cloneElement","jsx","twMerge"],"mappings":";;;;;;;;;;;;AAWO,SAAS,SAAS,CAAC,KAAK,EAAE;AACjC,EAAE,MAAMA,UAAQ,GAAGC,yBAAgB,EAAE;AACrC,EAAE,MAAMC,OAAK,GAAGC,4BAAe;AAC/B,IAAI,CAACC,oBAAc,CAAC,IAAI,EAAEJ,UAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC;AACvE,IAAI,CAACK,OAAG,CAACL,UAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC;AAClE,IAAI,CAACK,OAAG,CAACL,UAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC,EAAE,KAAK,CAAC,UAAU;AACjE,GAAG;AACH,EAAE,MAAM;AACR,IAAI,UAAU,GAAG,KAAK;AACtB,IAAI,SAAS,GAAGM,+BAAe;AAC/B,IAAI,QAAQ;AACZ,IAAI,KAAK,GAAG,KAAK;AACjB,IAAI,WAAW,GAAG,KAAK;AACvB,IAAI,SAAS;AACb,IAAI,GAAG;AACP,GAAG,GAAGC,yBAAY,CAAC,KAAK,EAAEP,UAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;AACpD,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAGQ,cAAQ,CAAC,WAAW,GAAG,EAAE,GAAG,CAAC,CAAC;AAC1D,EAAE,MAAM,MAAM,GAAGC,aAAO;AACxB,IAAI,MAAMC,cAAQ,CAAC,GAAG;AACtB,MAAM,QAAQ;AACd,MAAM,CAAC,KAAK,EAAE,CAAC,KAAKC,kBAAY,CAAC,KAAK,EAAE;AACxC,QAAQ,UAAU;AAClB,QAAQ,SAAS;AACjB,QAAQ,KAAK;AACb,QAAQ,MAAM,EAAE,MAAM,KAAK,CAAC;AAC5B,QAAQ,OAAO,EAAE,MAAM,OAAO,CAAC,MAAM,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC;AACpD,OAAO;AACP,KAAK;AACL,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM;AACnD,GAAG;AACH,EAAE,uBAAuBC,cAAG;AAC5B,IAAI,KAAK;AACT,IAAI;AACJ,MAAM,SAAS,EAAEC,qBAAO,CAACX,OAAK,CAAC,IAAI,EAAEA,OAAK,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,GAAG,KAAK,CAAC,EAAE,SAAS,CAAC;AAClF,MAAM,aAAa,EAAE,oBAAoB;AACzC,MAAM,GAAG,SAAS;AAClB,MAAM,QAAQ,EAAE;AAChB;AACA,GAAG;AACH;AACA,SAAS,CAAC,WAAW,GAAG,WAAW;;;;"}