import type Agent from "@atproto/api"; import { atom, createStore, useAtomValue } from "jotai"; import { atomWithStorage } from "jotai/utils"; import { useEffect } from "react"; export const store = createStore(); export const selectedFeedUriAtom = atomWithStorage( "selectedFeedUri", null ); //export const feedScrollPositionsAtom = atom>({}); export const feedScrollPositionsAtom = atomWithStorage>( "feedscrollpositions", {} ); export const likedPostsAtom = atomWithStorage>( "likedPosts", {} ); export const defaultconstellationURL = "constellation.microcosm.blue"; export const constellationURLAtom = atomWithStorage( "constellationURL", defaultconstellationURL ); export const defaultslingshotURL = "slingshot.microcosm.blue"; export const slingshotURLAtom = atomWithStorage( "slingshotURL", defaultslingshotURL ); export const defaultaturilistservice = "aturilistservice.reddwarf.app"; export const aturiListServiceAtom = atomWithStorage( "aturilistservice", defaultaturilistservice ); export const defaultImgCDN = "cdn.bsky.app"; export const imgCDNAtom = atomWithStorage("imgcdnurl", defaultImgCDN); export const defaultVideoCDN = "video.bsky.app"; export const videoCDNAtom = atomWithStorage( "videocdnurl", defaultVideoCDN ); export const defaulthue = 28; export const hueAtom = atomWithStorage("hue", defaulthue); export const isAtTopAtom = atom(true); type ComposerState = | { kind: "closed" } | { kind: "root" } | { kind: "reply"; parent: string } | { kind: "quote"; subject: string }; export const composerAtom = atom({ kind: "closed" }); export const agentAtom = atom(null); export const authedAtom = atom(false); export function useAtomCssVar(atom: typeof hueAtom, cssVar: string) { const value = useAtomValue(atom); useEffect(() => { document.documentElement.style.setProperty(cssVar, value.toString()); }, [value, cssVar]); useEffect(() => { document.documentElement.style.setProperty(cssVar, value.toString()); }, []); } hueAtom.onMount = (setAtom) => { const stored = localStorage.getItem("hue"); if (stored != null) setAtom(Number(stored)); }; // export function initAtomToCssVar(atom: typeof hueAtom, cssVar: string) { // const initial = store.get(atom); // console.log("atom get ", initial); // document.documentElement.style.setProperty(cssVar, initial.toString()); // }