UNPKG

@smitch/fluid

Version:

A lightweight, Tailwind-powered React/Next.js UI component library.

47 lines 2.75 kB
"use client"; import { jsx as _jsx } from "react/jsx-runtime"; import { useMemo } from "react"; import { twMerge } from "tailwind-merge"; import Link from "next/link"; import { usePathname } from "next/navigation"; var sizes = { sm: "text-sm", md: "text-base", lg: "text-lg", }; var separators = { slash: 'before:content-["/"]', arrow: 'before:content-[">"]', pipe: 'before:content-["|"]', dot: 'before:content-["•"]', }; var Breadcrumbs = function (_a) { var _b = _a.className, className = _b === void 0 ? "" : _b, style = _a.style, _c = _a.size, size = _c === void 0 ? "md" : _c, _d = _a.homeLabel, homeLabel = _d === void 0 ? "Home" : _d, _e = _a.separator, separator = _e === void 0 ? "slash" : _e, activeLabel = _a.activeLabel, _f = _a.prefetch, prefetch = _f === void 0 ? true : _f; var sizeClasses = useMemo(function () { return sizes[size]; }, [size]); var separartorContent = useMemo(function () { return separators[separator]; }, [separator]); var pathname = usePathname(); var paths = []; if (pathname) paths = pathname.split("/"); var buildHref = function (path) { for (var i = 0; i < paths.length; i++) { if (i === paths.length - 1) break; if (paths[1] === path) { return "/" + path; } else if (paths[2] === path) { return "/" + paths[1] + "/" + path; } } return ""; }; var displayPath = function (path) { return path.replaceAll("_", " "); }; if (paths && paths.length === 2 && paths[paths.length - 1] === "") paths.length = paths.length - 1; return pathname === "/" ? (_jsx("nav", {})) : (_jsx("nav", { className: twMerge("breadcrumbs group mx-auto w-full text-dark dark:text-light ".concat(sizeClasses), className), style: style, "aria-label": "breadcrumb", "data-testid": "breadcrumbs", children: _jsx("ol", { className: "flex flex-col md:flex-row", children: paths.map(function (path, index) { return (_jsx("li", { className: "breadcrumb ps-4 capitalize first:ps-0 before:inline-block ".concat(separartorContent, " rtl:before:scale-x-[-1] first:before:content-none before:pe-3 rtl:before:pe-0 rtl:before:ps-3 ").concat(index === paths.length - 1 ? "active" : ""), "aria-current": index === paths.length - 1 ? "page" : false, children: index === 0 ? (paths.length === 1 ? ("".concat(homeLabel)) : (_jsx(Link, { href: "/", children: homeLabel }))) : index === paths.length - 1 ? (displayPath(activeLabel || path)) : (_jsx(Link, { href: buildHref(path), prefetch: prefetch, children: displayPath(path) })) }, index)); }) }) })); }; export default Breadcrumbs; //# sourceMappingURL=Breadcrumbs.js.map