@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
JavaScript
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 };