UNPKG

@lobehub/ui

Version:

Lobe UI is an open-source UI component library for building AIGC web apps

42 lines (41 loc) 1.55 kB
import { createContext, memo, use, useMemo } from "react"; import { jsx } from "react/jsx-runtime"; //#region src/Accordion/context.tsx /** * Per-item context: each AccordionItem gets its own provider, so a toggle * only invalidates the value seen by that single item. Sibling items keep * the same context value identity and skip re-render. */ const AccordionItemStateContext = createContext(null); /** * Static config shared by all items. Identity changes only when the user * changes config props on <Accordion>, which is rare. */ const AccordionConfigContext = createContext(null); const useAccordionItemState = () => use(AccordionItemStateContext); const useAccordionConfig = () => use(AccordionConfigContext); const AccordionItemStateProvider = memo(({ children, expandedKeys, isOpenKey, isOpen, itemKey, onToggleKey, onToggleKeys, preferProviderKeyForNestedItems }) => { return /* @__PURE__ */ jsx(AccordionItemStateContext, { value: useMemo(() => ({ isOpenKey, isOpen, itemKey, onToggle: () => onToggleKey(itemKey), onToggleKey, onToggleNestedKey: (key) => onToggleKeys([itemKey, key], preferProviderKeyForNestedItems ? itemKey : key) }), [ expandedKeys, isOpenKey, isOpen, itemKey, onToggleKey, onToggleKeys, preferProviderKeyForNestedItems ]), children }); }); AccordionItemStateProvider.displayName = "AccordionItemStateProvider"; //#endregion export { AccordionConfigContext, AccordionItemStateProvider, useAccordionConfig, useAccordionItemState }; //# sourceMappingURL=context.mjs.map