stackpress
Version:
Incept is a content management framework.
30 lines (29 loc) • 2.08 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = Crumbs;
const jsx_runtime_1 = require("react/jsx-runtime");
const Item = ({ href, label, icon, last }) => {
const item = href
? (0, jsx_runtime_1.jsx)("a", { href: href, className: "crumb", children: label })
: (0, jsx_runtime_1.jsx)("span", { className: "crumb", children: label });
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [icon && (0, jsx_runtime_1.jsx)("i", { className: `icon fas fa-fw fa-${icon}` }), item, !last && (0, jsx_runtime_1.jsx)("i", { className: "next fas fa-fw fa-chevron-right" })] }));
};
const Header = ({ trail }) => {
var _a;
if (trail.length === 0)
return null;
const item = trail[trail.length - 1];
const href = item.href || ((_a = trail[trail.length - 2]) === null || _a === void 0 ? void 0 : _a.href);
if (href) {
return ((0, jsx_runtime_1.jsxs)("a", { className: "crumbs-header", href: href, children: [(0, jsx_runtime_1.jsx)("i", { className: "back fas fa-fw fa-chevron-left" }), !!item.icon && (0, jsx_runtime_1.jsx)("i", { className: `icon fas fa-fw fa-${item.icon}` }), (0, jsx_runtime_1.jsx)("span", { className: "label", children: item.label })] }));
}
return ((0, jsx_runtime_1.jsxs)("div", { className: "crumbs-header", children: [!!item.icon && (0, jsx_runtime_1.jsx)("i", { className: `icon fas fa-fw fa-${item.icon}` }), (0, jsx_runtime_1.jsx)("span", { className: "label", children: item.label })] }));
};
function Crumbs({ crumbs, className }) {
const trail = [...crumbs].filter(item => !!item.label);
const classNames = ['crumbs'];
if (className) {
classNames.push(className);
}
return ((0, jsx_runtime_1.jsxs)("nav", { children: [(0, jsx_runtime_1.jsx)("div", { className: classNames.join(' '), children: trail.map((item, key) => ((0, jsx_runtime_1.jsx)(Item, { href: item.href, label: item.label, icon: item.icon, last: key === (trail.length - 1) }, key))) }), (0, jsx_runtime_1.jsx)(Header, { trail: trail })] }));
}