UNPKG

@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
"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