@ark-ui/solid
Version:
A collection of unstyled, accessible UI components for Solid, utilizing state machines for seamless interaction.
28 lines (26 loc) • 1.03 kB
JSX
// src/utils/create-context.ts
import { hasProp, isFunction } from "@zag-js/utils";
import { createContext as createSolidContext, useContext as useSolidContext } from "solid-js";
function getErrorMessage(hook, provider) {
return `${hook} returned \`undefined\`. Seems you forgot to wrap component within ${provider}`;
}
function createContext(options = {}) {
const { strict = true, hookName = "useContext", providerName = "Provider", errorMessage, defaultValue } = options;
const Context = createSolidContext(defaultValue);
function useContext() {
const context = useSolidContext(Context);
if (!context && strict) {
const error = new Error(errorMessage ?? getErrorMessage(hookName, providerName));
error.name = "ContextError";
if (hasProp(Error, "captureStackTrace") && isFunction(Error.captureStackTrace)) {
Error.captureStackTrace(error, useContext);
}
throw error;
}
return context;
}
return [Context.Provider, useContext, Context];
}
export {
createContext
};