@ark-ui/solid
Version:
A collection of unstyled, accessible UI components for Solid, utilizing state machines for seamless interaction.
47 lines (43 loc) • 1.52 kB
JavaScript
import { createContext } from './TROPIN4C.js';
import { runIfFn } from './DT73WLR4.js';
import { createComponent, memo, template, use } 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 _tmpl$ = /* @__PURE__ */ template(`<span hidden>`);
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() {
var _el$ = _tmpl$();
use(setSpanRef, _el$);
return _el$;
}
})];
}
});
};
export { EnvironmentProvider, useEnvironmentContext };