@yamada-ui/react
Version:
React UI components of the Yamada, by the Yamada, for the Yamada built with React and Emotion
45 lines (41 loc) • 1.37 kB
JavaScript
"use client";
import { utils_exports } from "../../utils/index.js";
import { createContext, use, useCallback, useMemo, useRef } from "react";
import { jsx, jsxs } from "react/jsx-runtime";
//#region src/core/system/environment-provider.tsx
const defaultEnvironment = {
getDocument: () => document,
getRootNode: () => document,
getWindow: () => window
};
const EnvironmentContext = createContext(defaultEnvironment);
const EnvironmentProvider = ({ children, value }) => {
const ref = useRef(null);
const getRootNode = useCallback(() => {
return (0, utils_exports.runIfFn)(value) ?? ref.current?.getRootNode() ?? document;
}, [value, ref]);
return /* @__PURE__ */ jsxs(EnvironmentContext, {
value: useMemo(() => {
if ((0, utils_exports.createdDom)()) return {
getDocument: () => (0, utils_exports.getDocument)(getRootNode()),
getRootNode,
getWindow: () => (0, utils_exports.getWindow)(getRootNode())
};
else return {
getDocument: () => void 0,
getRootNode: () => void 0,
getWindow: () => void 0
};
}, [getRootNode]),
children: [children, !value ? /* @__PURE__ */ jsx("span", {
ref,
hidden: true
}) : null]
});
};
const useEnvironment = () => {
return use(EnvironmentContext);
};
//#endregion
export { EnvironmentProvider, defaultEnvironment, useEnvironment };
//# sourceMappingURL=environment-provider.js.map