@smitch/fluid
Version:
A lightweight, Tailwind-powered React/Next.js UI component library.
47 lines • 2.75 kB
JavaScript
"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