@ark-ui/solid
Version:
A collection of unstyled, accessible UI components for Solid, utilizing state machines for seamless interaction.
39 lines (36 loc) • 1.29 kB
JSX
import {
splitRenderStrategyProps
} from "./VNMGX67M.jsx";
import {
runIfFn
} from "./KGOB2IMX.jsx";
// src/components/presence/use-presence.ts
import * as presence from "@zag-js/presence";
import { normalizeProps, useMachine } from "@zag-js/solid";
import { createEffect, createMemo, createSignal } from "solid-js";
var usePresence = (props) => {
const [renderStrategyProps, localProps] = splitRenderStrategyProps(runIfFn(props));
const [wasEverPresent, setWasEverPresent] = createSignal(false);
const service = useMachine(presence.machine, props);
const api = createMemo(() => presence.connect(service, normalizeProps));
createEffect(() => {
const present = api().present;
if (present) setWasEverPresent(true);
});
const setNode = (node) => {
if (!node) return;
service.send({ type: "NODE.SET", node });
};
return createMemo(() => ({
unmounted: !api().present && !wasEverPresent() && renderStrategyProps.lazyMount || renderStrategyProps.unmountOnExit && !api().present && wasEverPresent(),
present: api().present,
ref: setNode,
presenceProps: {
hidden: !api().present,
"data-state": api().skip && localProps.skipAnimationOnMount ? void 0 : localProps.present ? "open" : "closed"
}
}));
};
export {
usePresence
};