@yamada-ui/react
Version:
React UI components of the Yamada, by the Yamada, for the Yamada built with React and Emotion
47 lines (43 loc) • 1.8 kB
JavaScript
"use client";
import { styled } from "../../core/system/factory.js";
import { createSlotComponent } from "../../core/components/create-component.js";
import { listStyle } from "./list.style.js";
import { cloneElement, isValidElement, useMemo } from "react";
import { jsx, jsxs } from "react/jsx-runtime";
//#region src/components/list/list.tsx
const { PropsContext: ListPropsContext, usePropsContext: useListPropsContext, withContext, withProvider } = createSlotComponent("list", listStyle);
/**
* `List` is a component for displaying lists. By default, it renders a `ul` element.
*
* @see https://yamada-ui.com/docs/components/list
*/
const ListRoot = withProvider(({ as: asProp, children, items, stylePosition: listStylePosition, styleType: listStyleType = "none",...rest }) => {
const as = asProp ?? (listStyleType == "decimal" ? "ol" : void 0);
const computedChildren = useMemo(() => {
if (children) return children;
return items?.map((props, index) => /* @__PURE__ */ jsx(ListItem, { ...props }, index));
}, [children, items]);
return /* @__PURE__ */ jsx(styled.ul, {
as,
listStylePosition,
listStyleType,
role: "list",
...rest,
children: computedChildren
});
}, "root", { transferProps: ["styleType"] })();
const ListItem = withContext(({ children, icon,...rest }) => /* @__PURE__ */ jsxs(styled.li, {
...rest,
children: [/* @__PURE__ */ jsx(ListItemIcon, { children: icon }), children]
}), "item")();
const ListItemIcon = withContext(({ children,...rest }) => {
if (isValidElement(children)) return cloneElement(children, {
...children.props,
...rest,
role: "presentation"
});
else return null;
}, "icon")({ "data-list-icon": "" });
//#endregion
export { ListItem, ListItemIcon, ListPropsContext, ListRoot, useListPropsContext };
//# sourceMappingURL=list.js.map