1import type { DesktopPreviewPointerEvent } from "@t3tools/contracts";
2import { create } from "zustand";
3
4interface BrowserPointerStoreState {
5 readonly byTabId: Record<string, DesktopPreviewPointerEvent>;
6 readonly apply: (event: DesktopPreviewPointerEvent) => void;
7 readonly clear: (tabId: string) => void;
8}
9
10export const useBrowserPointerStore = create<BrowserPointerStoreState>()((set) => ({
11 byTabId: {},
12 apply: (event) =>
13 set((state) => ({
14 byTabId: {
15 ...state.byTabId,
16 [event.tabId]: event,
17 },
18 })),
19 clear: (tabId) =>
20 set((state) => {
21 if (!(tabId in state.byTabId)) return state;
22 const { [tabId]: _removed, ...byTabId } = state.byTabId;
23 return { byTabId };
24 }),
25}));