UNPKG

ivt

Version:

Ivt Components Library

111 lines (108 loc) 4.04 kB
import * as React from 'react'; import { jsx } from 'react/jsx-runtime'; // packages/react/context/src/create-context.tsx function createContext2(rootComponentName, defaultContext) { const Context = React.createContext(defaultContext); const Provider = (props)=>{ const { children, ...context } = props; const value = React.useMemo(()=>context, Object.values(context)); return /* @__PURE__ */ jsx(Context.Provider, { value, children }); }; Provider.displayName = rootComponentName + "Provider"; function useContext2(consumerName) { const context = React.useContext(Context); if (context) return context; if (defaultContext !== void 0) return defaultContext; throw new Error(`\`${consumerName}\` must be used within \`${rootComponentName}\``); } return [ Provider, useContext2 ]; } function createContextScope(scopeName, createContextScopeDeps = []) { let defaultContexts = []; function createContext3(rootComponentName, defaultContext) { const BaseContext = React.createContext(defaultContext); const index = defaultContexts.length; defaultContexts = [ ...defaultContexts, defaultContext ]; const Provider = (props)=>{ const { scope, children, ...context } = props; const Context = scope?.[scopeName]?.[index] || BaseContext; const value = React.useMemo(()=>context, Object.values(context)); return /* @__PURE__ */ jsx(Context.Provider, { value, children }); }; Provider.displayName = rootComponentName + "Provider"; function useContext2(consumerName, scope) { const Context = scope?.[scopeName]?.[index] || BaseContext; const context = React.useContext(Context); if (context) return context; if (defaultContext !== void 0) return defaultContext; throw new Error(`\`${consumerName}\` must be used within \`${rootComponentName}\``); } return [ Provider, useContext2 ]; } const createScope = ()=>{ const scopeContexts = defaultContexts.map((defaultContext)=>{ return React.createContext(defaultContext); }); return function useScope(scope) { const contexts = scope?.[scopeName] || scopeContexts; return React.useMemo(()=>({ [`__scope${scopeName}`]: { ...scope, [scopeName]: contexts } }), [ scope, contexts ]); }; }; createScope.scopeName = scopeName; return [ createContext3, composeContextScopes(createScope, ...createContextScopeDeps) ]; } function composeContextScopes(...scopes) { const baseScope = scopes[0]; if (scopes.length === 1) return baseScope; const createScope = ()=>{ const scopeHooks = scopes.map((createScope2)=>({ useScope: createScope2(), scopeName: createScope2.scopeName })); return function useComposedScopes(overrideScopes) { const nextScopes = scopeHooks.reduce((nextScopes2, { useScope, scopeName })=>{ const scopeProps = useScope(overrideScopes); const currentScope = scopeProps[`__scope${scopeName}`]; return { ...nextScopes2, ...currentScope }; }, {}); return React.useMemo(()=>({ [`__scope${baseScope.scopeName}`]: nextScopes }), [ nextScopes ]); }; }; createScope.scopeName = baseScope.scopeName; return createScope; } export { createContext2 as a, createContextScope as c }; //# sourceMappingURL=index-DT8WgpCS.mjs.map