import { onScopeDispose, readonly, shallowRef, type DeepReadonly, type Ref, type ShallowRef } from "vue"; import type { KeisenStore } from "../context/keys"; /** * Subscribe to a store slice and expose it as a readonly shallowRef. */ export const useStoreSlice = ( store: KeisenStore, selector: (state: ReturnType) => T, ): DeepReadonly> => { const value = shallowRef(selector(store.getState())) as ShallowRef; const unsubscribe = store.subscribeSlice(selector, () => { value.value = selector(store.getState()); }); onScopeDispose(unsubscribe); return readonly(value); };