artworkLoader.ts
1 import { writable } from 'svelte/store'; 2 import type { Writable } from 'svelte/store'; 3 4 export type ArtworkLoaderStore = { 5 subscribe: Writable<WeakMap<Element, boolean>>['subscribe']; 6 addEntry: (entry: Element, isVisible: boolean) => void; 7 cleanupEntry: (entry: Element) => void; 8 }; 9 10 export function createArtworkLoaderStore(): ArtworkLoaderStore { 11 const value = new WeakMap(); 12 const { subscribe, update } = writable(value); 13 14 return { 15 subscribe, 16 addEntry: (entry: Element, isVisible: boolean) => { 17 update((map) => { 18 map.set(entry, isVisible); 19 return map; 20 }); 21 }, 22 23 cleanupEntry: (entry: Element) => { 24 update((map) => { 25 map.delete(entry); 26 return map; 27 }); 28 }, 29 }; 30 }