UNPKG

flowbite-react

Version:

Official React components built for Flowbite and Tailwind CSS

1 lines 4.31 kB
{"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;;;;"}