{"version":3,"file":"Breadcrumbs.cjs","names":[],"sources":["../../../src/components/Breadcrumbs/Breadcrumbs.tsx"],"sourcesContent":["import { Fragment } from \"react\";\nimport type { ReactNode } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./Breadcrumbs.module.css\";\n\nexport interface BreadcrumbItem {\n    label: ReactNode;\n    href?: string;\n    onClick?: () => void;\n}\n\nexport interface BreadcrumbsProps {\n    items: BreadcrumbItem[];\n    separator?: ReactNode;\n    className?: string;\n}\n\n/**\n * Hierarchical navigation breadcrumbs. The last item is rendered as plain\n * text with `aria-current=\"page\"`. Items with neither `href` nor `onClick`\n * also render as text (intermediate but non-clickable).\n */\nexport function Breadcrumbs({ items, separator = \"/\", className }: BreadcrumbsProps) {\n    return (\n        <nav aria-label=\"breadcrumb\" className={cn(styles.nav, className)}>\n            {items.map((item, index) => {\n                const isLast = index === items.length - 1;\n                const interactive = !isLast && (item.href || item.onClick);\n                return (\n                    <Fragment key={index}>\n                        <span className={styles.item}>\n                            {interactive ? (\n                                <a\n                                    href={item.href}\n                                    onClick={(event) => {\n                                        if (item.onClick) {\n                                            event.preventDefault();\n                                            item.onClick();\n                                        }\n                                    }}\n                                    className={styles.link}\n                                >\n                                    {item.label}\n                                </a>\n                            ) : (\n                                <span\n                                    aria-current={isLast ? \"page\" : undefined}\n                                    className={isLast ? styles.current : undefined}\n                                >\n                                    {item.label}\n                                </span>\n                            )}\n                        </span>\n                        {!isLast && (\n                            <span className={styles.separator} aria-hidden>\n                                {separator}\n                            </span>\n                        )}\n                    </Fragment>\n                );\n            })}\n        </nav>\n    );\n}\n"],"mappings":"kIAsBA,SAAgB,EAAY,CAAE,QAAO,YAAY,IAAK,aAA+B,CACjF,OACI,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,aAAW,aAAa,UAAW,EAAA,GAAG,EAAA,QAAO,IAAK,CAAS,EAC3D,SAAA,EAAM,KAAK,EAAM,IAAU,CACxB,IAAM,EAAS,IAAU,EAAM,OAAS,EAClC,EAAc,CAAC,IAAW,EAAK,MAAQ,EAAK,SAClD,OACI,EAAA,EAAA,KAAA,CAAC,EAAA,SAAD,CAAA,SAAA,EACI,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAW,EAAA,QAAO,KACnB,SAAA,GACG,EAAA,EAAA,IAAA,CAAC,IAAD,CACI,KAAM,EAAK,KACX,QAAU,GAAU,CACZ,EAAK,UACL,EAAM,eAAe,EACrB,EAAK,QAAQ,EAErB,EACA,UAAW,EAAA,QAAO,KAEjB,SAAA,EAAK,KACP,CAAA,GAEH,EAAA,EAAA,IAAA,CAAC,OAAD,CACI,eAAc,EAAS,OAAS,IAAA,GAChC,UAAW,EAAS,EAAA,QAAO,QAAU,IAAA,GAEpC,SAAA,EAAK,KACJ,CAAA,CAER,CAAA,EACL,CAAC,IACE,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAW,EAAA,QAAO,UAAW,cAAA,GAC9B,SAAA,CACC,CAAA,CAEJ,CAAA,EA7BK,CA6BL,CAElB,CAAC,CACA,CAAA,CAEb"}