import { createContext, createRenderEffect, createSignal, untrack, useContext, type Accessor, type Signal, } from "solid-js"; export type HeroSource = { [key: string | symbol | number]: DOMRect | undefined; }; const HeroSourceContext = createContext>(/* __@PURE__ */undefined); export const HeroSourceProvider = HeroSourceContext.Provider; function useHeroSource() { return useContext(HeroSourceContext); } /** * Use hero value for the {@link key}. */ export function useHeroSignal( key: string | symbol | number, ): Accessor { const source = useHeroSource(); if (source) { const [get, set] = createSignal(); createRenderEffect(() => { const value = source[0](); if (value[key]) { set(value[key]); source[1]((x) => { const cpy = Object.assign({}, x); delete cpy[key]; return cpy; }); } }); return get; } else { return () => undefined; } }