UNPKG

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