UNPKG

@tanstack/hotkeys

Version:

Type-safe, framework-agnostic keyboard hotkey management for the browser

43 lines (42 loc) • 1.02 kB
//#region src/_store.ts const queue = /* @__PURE__ */ new Set(); function notify(listeners) { for (const listener of listeners) queue.add(listener); for (const listener of queue) { queue.delete(listener); listener(); } } /** * Creates a store. Listeners run synchronously after each change, and an * update to an equal value (by `Object.is`) notifies no one. */ function createStore(initialState) { let state = initialState; const listeners = /* @__PURE__ */ new Set(); return { get state() { return state; }, get: () => state, setState(updater) { const next = updater(state); if (Object.is(state, next)) return; state = next; notify(listeners); }, subscribe(observerOrFn) { const listener = () => { if (typeof observerOrFn === "function") observerOrFn(state); else observerOrFn.next?.(state); }; listeners.add(listener); return { unsubscribe() { listeners.delete(listener); queue.delete(listener); } }; } }; } //#endregion export { createStore };