File size: 4,295 Bytes
a6dc518 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 | var __defProp = Object.defineProperty;
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
// src/create-context.tsx
import * as React from "react";
import { jsx } from "react/jsx-runtime";
// @__NO_SIDE_EFFECTS__
function createContext2(rootComponentName, defaultContext) {
const Context = React.createContext(defaultContext);
Context.displayName = rootComponentName + "Context";
const Provider = /* @__PURE__ */ __name((props) => {
const { children, ...context } = props;
const value = React.useMemo(() => context, Object.values(context));
return /* @__PURE__ */ jsx(Context.Provider, { value, children });
}, "Provider");
Provider.displayName = rootComponentName + "Provider";
function useContext2(consumerName, options = {}) {
const { optional = false } = options;
const context = React.useContext(Context);
if (context) return context;
if (defaultContext !== void 0) return defaultContext;
if (optional) return void 0;
throw new Error(`\`${consumerName}\` must be used within \`${rootComponentName}\``);
}
__name(useContext2, "useContext");
return [Provider, useContext2];
}
__name(createContext2, "createContext");
// @__NO_SIDE_EFFECTS__
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 = /* @__PURE__ */ __name((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");
Provider.displayName = rootComponentName + "Provider";
function useContext2(consumerName, scope, options = {}) {
const { optional = false } = options;
const Context = scope?.[scopeName]?.[index] || BaseContext;
const context = React.useContext(Context);
if (context) return context;
if (defaultContext !== void 0) return defaultContext;
if (optional) return void 0;
throw new Error(`\`${consumerName}\` must be used within \`${rootComponentName}\``);
}
__name(useContext2, "useContext");
return [Provider, useContext2];
}
__name(createContext3, "createContext");
const createScope = /* @__PURE__ */ __name(() => {
const scopeContexts = defaultContexts.map((defaultContext) => {
return React.createContext(defaultContext);
});
return /* @__PURE__ */ __name(function useScope(scope) {
const contexts = scope?.[scopeName] || scopeContexts;
return React.useMemo(
() => ({ [`__scope${scopeName}`]: { ...scope, [scopeName]: contexts } }),
[scope, contexts]
);
}, "useScope");
}, "createScope");
createScope.scopeName = scopeName;
return [createContext3, composeContextScopes(createScope, ...createContextScopeDeps)];
}
__name(createContextScope, "createContextScope");
function composeContextScopes(...scopes) {
const baseScope = scopes[0];
if (scopes.length === 1) return baseScope;
const createScope = /* @__PURE__ */ __name(() => {
const scopeHooks = scopes.map((createScope2) => ({
useScope: createScope2(),
scopeName: createScope2.scopeName
}));
return /* @__PURE__ */ __name(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]);
}, "useComposedScopes");
}, "createScope");
createScope.scopeName = baseScope.scopeName;
return createScope;
}
__name(composeContextScopes, "composeContextScopes");
export {
createContext2 as createContext,
createContextScope
};
//# sourceMappingURL=index.mjs.map
|