Spaces:
Build error
Build error
| // src/create-context.tsx | |
| import * as React from "react"; | |
| import { jsx } from "react/jsx-runtime"; | |
| function createContext2(rootComponentName, defaultContext) { | |
| const Context = React.createContext(defaultContext); | |
| Context.displayName = rootComponentName + "Context"; | |
| 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); | |
| BaseContext.displayName = rootComponentName + "Context"; | |
| 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 createContext, | |
| createContextScope | |
| }; | |
| //# sourceMappingURL=index.mjs.map | |