UNPKG

@ark-ui/solid

Version:

A collection of unstyled, accessible UI components for Solid, utilizing state machines for seamless interaction.

48 lines (44 loc) 1.51 kB
import { runIfFn } from './DT73WLR4.js'; import { ark } from './EPLBB4QN.js'; import { createContext } from './THN5C4U6.js'; import { createComponent, memo } from 'solid-js/web'; import { getWindow, getDocument } from '@zag-js/dom-query'; import { createSignal, createMemo, Show } from 'solid-js'; // src/providers/environment/use-environment-context.ts var [EnvironmentContextProvider, useEnvironmentContext] = createContext({ hookName: "useEnvironmentContext", providerName: "<EnvironmentProvider />", strict: false, defaultValue: () => ({ getRootNode: () => document, getDocument: () => document, getWindow: () => window }) }); // src/providers/environment/environment-provider.tsx var EnvironmentProvider = (props) => { const [spanRef, setSpanRef] = createSignal(); const getRootNode = () => runIfFn(props.value) ?? spanRef()?.getRootNode() ?? document; const environment = createMemo(() => ({ getRootNode, getDocument: () => getDocument(getRootNode()), getWindow: () => getWindow(getRootNode()) })); return createComponent(EnvironmentContextProvider, { value: environment, get children() { return [memo(() => props.children), createComponent(Show, { get when() { return !props.value; }, get children() { return createComponent(ark.span, { hidden: true, ref: setSpanRef }); } })]; } }); }; export { EnvironmentProvider, useEnvironmentContext };