import { createMemo, createSignal, onMount, sharedConfig, splitProps, untrack } from "solid-js";
import { isServer } from "solid-js/web";
/**
 *
 * Read more: https://docs.solidjs.com/solid-start/reference/client/client-only
 */
// not using Suspense
export default function clientOnly(fn, options = {}) {
    if (isServer)
        return (props) => props.fallback;
    const [comp, setComp] = createSignal();
    !options.lazy && load(fn, setComp);
    return (props) => {
        let Comp;
        let m;
        const [, rest] = splitProps(props, ["fallback"]);
        options.lazy && load(fn, setComp);
        if ((Comp = comp()) && !sharedConfig.context)
            return Comp(rest);
        const [mounted, setMounted] = createSignal(!sharedConfig.context);
        onMount(() => setMounted(true));
        return createMemo(() => ((Comp = comp()), (m = mounted()), untrack(() => (Comp && m ? Comp(rest) : props.fallback))));
    };
}
function load(fn, setComp) {
    fn().then(m => setComp(() => m.default));
}
