UNPKG

@mui/internal-docs-infra

Version:

MUI Infra - internal documentation creation tools.

67 lines (65 loc) 1.97 kB
'use client'; import * as React from 'react'; import { TypesDataContext } from "./TypesDataContext.mjs"; /** * Provider that collects type data from all `useTypes()` calls within its subtree. * This enables `useType(name)` to look up individual type data anywhere in the tree, * and `useTypeProp(typeName, propName)` to look up individual properties. */ import { jsx as _jsx } from "react/jsx-runtime"; export function TypesDataProvider({ children }) { const [types, setTypes] = React.useState(() => new Map()); const [typeProps, setTypeProps] = React.useState(() => new Map()); const registerTypes = React.useCallback(entries => { setTypes(prev => { let changed = false; for (const entry of entries) { const existing = prev.get(entry.name); if (existing?.meta !== entry.data.meta || existing?.href !== entry.data.href) { changed = true; break; } } if (!changed) { return prev; } const next = new Map(prev); for (const entry of entries) { next.set(entry.name, entry.data); } return next; }); }, []); const registerTypeProps = React.useCallback(entries => { setTypeProps(prev => { let changed = false; for (const entry of entries) { const existing = prev.get(entry.key); if (existing?.property !== entry.data.property || existing?.href !== entry.data.href) { changed = true; break; } } if (!changed) { return prev; } const next = new Map(prev); for (const entry of entries) { next.set(entry.key, entry.data); } return next; }); }, []); const value = React.useMemo(() => ({ types, registerTypes, typeProps, registerTypeProps }), [types, registerTypes, typeProps, registerTypeProps]); return /*#__PURE__*/_jsx(TypesDataContext.Provider, { value: value, children: children }); }