@heroui/breadcrumbs
Version:
Breadcrumbs display a hierarchy of links to the current page or resource in an application.
107 lines (104 loc) • 3.05 kB
JavaScript
"use client";
import {
breadcrumb_item_default
} from "./chunk-2ZLUAXBT.mjs";
// src/use-breadcrumbs.ts
import { Children } from "react";
import { mapPropsVariants, useProviderContext } from "@heroui/system";
import { breadcrumbs, cn } from "@heroui/theme";
import { filterDOMProps, pickChildren, useDOMRef } from "@heroui/react-utils";
import { useBreadcrumbs as useAriaBreadcrumbs } from "@react-aria/breadcrumbs";
import { useMemo } from "react";
import { dataAttr, objectToDeps, mergeProps } from "@heroui/shared-utils";
function useBreadcrumbs(originalProps) {
var _a, _b;
const globalContext = useProviderContext();
const disableAnimation = (_b = (_a = originalProps == null ? void 0 : originalProps.disableAnimation) != null ? _a : globalContext == null ? void 0 : globalContext.disableAnimation) != null ? _b : false;
const [props, variantProps] = mapPropsVariants(originalProps, breadcrumbs.variantKeys);
const {
ref,
as,
color,
underline,
isDisabled,
separator,
children: childrenProp,
itemsBeforeCollapse = 1,
itemsAfterCollapse = 2,
maxItems = 8,
hideSeparator,
renderEllipsis,
className,
classNames,
itemClasses,
onAction,
...otherProps
} = props;
const Component = as || "nav";
const shouldFilterDOMProps = typeof Component === "string";
const { navProps } = useAriaBreadcrumbs(originalProps);
const [, children] = pickChildren(childrenProp, breadcrumb_item_default);
const childCount = Children.count(children);
const domRef = useDOMRef(ref);
const slots = useMemo(
() => breadcrumbs({
...variantProps
}),
[objectToDeps(variantProps)]
);
const baseStyles = cn(classNames == null ? void 0 : classNames.base, className);
const itemProps = {
color,
underline,
disableAnimation,
hideSeparator,
size: originalProps == null ? void 0 : originalProps.size,
classNames: itemClasses
};
const getBaseProps = () => ({
ref: domRef,
"data-slot": "base",
className: slots.base({ class: baseStyles }),
...mergeProps(
navProps,
filterDOMProps(otherProps, {
enabled: shouldFilterDOMProps
})
)
});
const getListProps = () => ({
"data-slot": "list",
className: slots.list({ class: classNames == null ? void 0 : classNames.list })
});
const getEllipsisProps = () => ({
"data-slot": "ellipsis",
className: slots.ellipsis({ class: classNames == null ? void 0 : classNames.ellipsis })
});
const getSeparatorProps = () => ({
"data-slot": "separator",
"aria-hidden": dataAttr(true),
className: slots.separator({ class: classNames == null ? void 0 : classNames.separator })
});
return {
Component,
children,
slots,
separator,
childCount,
itemsAfterCollapse,
itemsBeforeCollapse,
maxItems,
classNames,
isDisabled,
itemProps,
renderEllipsis,
getBaseProps,
getListProps,
getEllipsisProps,
getSeparatorProps,
onAction
};
}
export {
useBreadcrumbs
};