UNPKG

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