@yamada-ui/react
Version:
React UI components of the Yamada, by the Yamada, for the Yamada built with React and Emotion
81 lines (77 loc) • 2.75 kB
JavaScript
"use client";
const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
const require_children = require('../../utils/children.cjs');
const require_utils_index = require('../../utils/index.cjs');
const require_i18n_provider = require('../../providers/i18n-provider/i18n-provider.cjs');
let react = require("react");
react = require_rolldown_runtime.__toESM(react);
//#region src/components/breadcrumb/use-breadcrumb.tsx
const useBreadcrumb = ({ children, ellipsis, endBoundaries = 0, items = [], link, startBoundaries = 0,...rest } = {}) => {
const validChildren = require_children.useValidChildren(children);
const length = validChildren.length || items.length;
const { t } = require_i18n_provider.useI18n("breadcrumb");
const hasBoundaries = startBoundaries + endBoundaries > 0 && length > startBoundaries + endBoundaries;
const renderLink = (0, react.useCallback)((items$1) => {
if (!link) return [];
return items$1.map(({ label,...rest$1 }) => (0, react.cloneElement)(link, {
...link.props,
children: label,
...rest$1
}));
}, [link]);
const renderEllipsis = (0, react.useCallback)((items$1) => {
if (!ellipsis) return null;
return (0, require_utils_index.utils_exports.runIfFn)(ellipsis, { items: items$1 });
}, [ellipsis]);
const splitItems = (0, react.useCallback)((items$1) => {
const length$1 = items$1.length;
return [
items$1.slice(0, startBoundaries),
items$1.slice(startBoundaries, length$1 - endBoundaries),
items$1.slice(length$1 - endBoundaries)
];
}, [startBoundaries, endBoundaries]);
const cloneChildren = (0, react.useMemo)(() => {
if (!!validChildren.length) return validChildren;
else if (hasBoundaries) {
const [firstItems, ellipsisItems, lastItems] = splitItems(items);
return [
...renderLink(firstItems),
renderEllipsis(ellipsisItems),
...renderLink(lastItems)
];
} else return renderLink(items);
}, [
validChildren,
items,
hasBoundaries,
renderEllipsis,
renderLink,
splitItems
]);
const getRootProps = (0, react.useCallback)((props) => ({
"aria-label": t("Breadcrumb"),
...rest,
...props
}), [rest, t]);
const getListProps = (0, react.useCallback)((props) => ({ ...props }), []);
const getLinkProps = (0, react.useCallback)(({ href, currentPage,...props } = {}) => ({
href: !currentPage ? href : void 0,
"aria-current": currentPage ? "page" : void 0,
...props
}), []);
return {
children: cloneChildren,
getEllipsisProps: (0, react.useCallback)((props) => ({
"aria-label": t("Ellipsis"),
role: "presentation",
...props
}), [t]),
getLinkProps,
getListProps,
getRootProps
};
};
//#endregion
exports.useBreadcrumb = useBreadcrumb;
//# sourceMappingURL=use-breadcrumb.cjs.map