import type { WritableFamilyToken, WritableToken } from "atom.io" import type { Canonical } from "atom.io/foundations/canonical" import { setIntoStore } from "atom.io/internal" import { useContext } from "solid-js" import { parseStateOverloads } from "./parse-state-overloads.ts" import { StoreContext } from "./store-context.ts" export function useI( token: WritableToken, ): (next: New | ((old: T) => New)) => void export function useI( token: WritableFamilyToken, key: NoInfer, ): (next: New | ((old: T) => New)) => void export function useI( ...params: | [WritableFamilyToken, NoInfer] | [WritableToken] ): (next: New | ((old: T) => New)) => void { const store = useContext(StoreContext) const token = parseStateOverloads(store, ...params) return (next) => { setIntoStore(store, token, next) } }