flowbite-react
Version:
Official React components built for Flowbite and Tailwind CSS
1 lines • 4.27 kB
Source Map (JSON)
{"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":[],"mappings":";;;;;;;;;;AAWA,MAAM,kBAAkB,GAAG,CAAC;AAC5B,EAAE,UAAU,GAAG,KAAK;AACpB,EAAE,SAAS,GAAG,aAAa;AAC3B,EAAE,QAAQ;AACV,EAAE,KAAK,GAAG,KAAK;AACf,EAAE,WAAW,GAAG,KAAK;AACrB,EAAE,SAAS;AACX,EAAE,KAAK,EAAE,WAAW,GAAG,EAAE;AACzB,EAAE,GAAG,KAAK;AACV,CAAC,KAAK;AACN,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3D,EAAE,MAAM,MAAM,GAAG,OAAO;AACxB,IAAI,MAAM,QAAQ,CAAC,GAAG;AACtB,MAAM,QAAQ;AACd,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,YAAY,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,CAAC,CAAC,GAAG,CAAC,CAAC;AACrD,OAAO,CAAC;AACR,KAAK;AACL,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC;AACpD,GAAG,CAAC;AACJ,EAAE,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;AAClE,EAAE,uBAAuB,GAAG;AAC5B,IAAI,KAAK;AACT,IAAI;AACJ,MAAM,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,GAAG,KAAK,CAAC,EAAE,SAAS,CAAC;AAClF,MAAM,aAAa,EAAE,oBAAoB;AACzC,MAAM,GAAG,KAAK;AACd,MAAM,QAAQ,EAAE,MAAM;AACtB,KAAK;AACL,GAAG,CAAC;AACJ,CAAC,CAAC;AACF,kBAAkB,CAAC,WAAW,GAAG,WAAW,CAAC;AAC7C,cAAc,CAAC,WAAW,GAAG,iBAAiB,CAAC;AAC/C,cAAc,CAAC,WAAW,GAAG,iBAAiB,CAAC;AAC/C,gBAAgB,CAAC,WAAW,GAAG,mBAAmB,CAAC;AACvC,MAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,kBAAkB,EAAE;AAC3D,EAAE,KAAK,EAAE,cAAc;AACvB,EAAE,KAAK,EAAE,cAAc;AACvB,EAAE,OAAO,EAAE,gBAAgB;AAC3B,CAAC;;;;"}