@ark-ui/solid
Version:
A collection of unstyled, accessible UI components for Solid, utilizing state machines for seamless interaction.
32 lines (29 loc) • 1.24 kB
JavaScript
import { splitRenderStrategyProps } from './GUFIKGZ6.js';
import { runIfFn } from './DT73WLR4.js';
import * as presence from '@zag-js/presence';
import { useMachine, normalizeProps } from '@zag-js/solid';
import { createSignal, createMemo, createEffect } 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 };