@yamada-ui/react
Version:
React UI components of the Yamada, by the Yamada, for the Yamada built with React and Emotion
77 lines (73 loc) • 2.9 kB
JavaScript
"use client";
import { styled } from "../../core/system/factory.js";
import { createSlotComponent } from "../../core/components/create-component.js";
import { ChevronRightIcon } from "../icon/icons/chevron-right-icon.js";
import { EllipsisIcon } from "../icon/icons/ellipsis-icon.js";
import { breadcrumbStyle } from "./breadcrumb.style.js";
import { useBreadcrumb } from "./use-breadcrumb.js";
import { Fragment, useMemo } from "react";
import { jsx, jsxs } from "react/jsx-runtime";
//#region src/components/breadcrumb/breadcrumb.tsx
const { ComponentContext, PropsContext: BreadcrumbPropsContext, useComponentContext, usePropsContext: useBreadcrumbPropsContext, withContext, withProvider } = createSlotComponent("breadcrumb", breadcrumbStyle);
/**
* `Breadcrumb` is a component that helps users understand the hierarchy of a website.
*
* @see https://yamada-ui.com/docs/components/breadcrumb
*/
const BreadcrumbRoot = withProvider(({ endBoundaries, gap, separator, startBoundaries, itemProps, listProps, separatorProps,...rest }) => {
const { children, getEllipsisProps, getLinkProps, getListProps, getRootProps } = useBreadcrumb({
ellipsis: /* @__PURE__ */ jsx(BreadcrumbEllipsis, {}),
endBoundaries,
link: /* @__PURE__ */ jsx(BreadcrumbLink, {}),
startBoundaries,
...rest
});
return /* @__PURE__ */ jsx(ComponentContext, {
value: useMemo(() => ({
getEllipsisProps,
getLinkProps
}), [getEllipsisProps, getLinkProps]),
children: /* @__PURE__ */ jsx(styled.nav, {
...getRootProps(),
children: /* @__PURE__ */ jsx(BreadcrumbList, {
...getListProps({
gap,
...listProps
}),
children: children.map((child, index) => {
const last = index === children.length - 1;
return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(BreadcrumbItem, {
...itemProps,
children: child
}), !last ? /* @__PURE__ */ jsx(BreadcrumbSeparator, {
...separatorProps,
children: separator
}) : null] }, index);
})
})
})
});
}, "root")();
const BreadcrumbList = withContext("ol", "list")();
const BreadcrumbItem = withContext("li", "item")();
const BreadcrumbSeparator = withContext(BreadcrumbItem, "separator")(({ children,...rest }) => ({
children: children ?? /* @__PURE__ */ jsx(ChevronRightIcon, {}),
...rest
}));
const BreadcrumbLink = withContext("a", "link")(void 0, ({ currentPage,...rest }) => {
const { getLinkProps } = useComponentContext();
return {
as: !currentPage ? "a" : "span",
...getLinkProps({
currentPage,
...rest
})
};
});
const BreadcrumbEllipsis = withContext(EllipsisIcon, "ellipsis")(void 0, (props) => {
const { getEllipsisProps } = useComponentContext();
return { ...getEllipsisProps(props) };
});
//#endregion
export { BreadcrumbEllipsis, BreadcrumbLink, BreadcrumbPropsContext, BreadcrumbRoot, useBreadcrumbPropsContext };
//# sourceMappingURL=breadcrumb.js.map