{"version":3,"file":"use-set.cjs","names":[],"sources":["../../src/hooks/use-set.ts"],"sourcesContent":["import { useCallback, useMemo, useState } from \"react\";\n\nexport interface UseSetResult<T> {\n    set: ReadonlySet<T>;\n    add: (value: T) => void;\n    delete: (value: T) => void;\n    clear: () => void;\n    has: (value: T) => boolean;\n    toggle: (value: T) => void;\n    size: number;\n}\n\n/**\n * Reactive `Set` wrapper. Mutating via `add` / `delete` / `clear` / `toggle`\n * triggers a re-render and yields a fresh `set` reference each time.\n *\n * @typeParam T - element type.\n * @param initial - initial values.\n * @returns `{ set, add, delete, clear, has, toggle, size }`.\n */\nexport function useSet<T>(initial?: Iterable<T>): UseSetResult<T> {\n    const [set, setSet] = useState<Set<T>>(() => new Set(initial));\n\n    const add = useCallback((value: T): void => {\n        setSet((current) => {\n            if (current.has(value)) return current;\n            const next = new Set(current);\n            next.add(value);\n            return next;\n        });\n    }, []);\n\n    const remove = useCallback((value: T): void => {\n        setSet((current) => {\n            if (!current.has(value)) return current;\n            const next = new Set(current);\n            next.delete(value);\n            return next;\n        });\n    }, []);\n\n    const clear = useCallback((): void => {\n        setSet((current) => (current.size === 0 ? current : new Set<T>()));\n    }, []);\n\n    const has = useCallback((value: T): boolean => set.has(value), [set]);\n\n    const toggle = useCallback((value: T): void => {\n        setSet((current) => {\n            const next = new Set(current);\n            if (next.has(value)) next.delete(value);\n            else next.add(value);\n            return next;\n        });\n    }, []);\n\n    return useMemo<UseSetResult<T>>(\n        () => ({\n            set,\n            add,\n            delete: remove,\n            clear,\n            has,\n            toggle,\n            size: set.size,\n        }),\n        [set, add, remove, clear, has, toggle],\n    );\n}\n"],"mappings":"uBAoBA,SAAgB,EAAU,EAAwC,CAC9D,GAAM,CAAC,EAAK,IAAA,EAAU,EAAA,SAAA,KAAuB,IAAI,IAAI,CAAO,CAAC,EAEvD,GAAA,EAAM,EAAA,YAAA,CAAa,GAAmB,CACxC,EAAQ,GAAY,CAChB,GAAI,EAAQ,IAAI,CAAK,EAAG,OAAO,EAC/B,IAAM,EAAO,IAAI,IAAI,CAAO,EAE5B,OADA,EAAK,IAAI,CAAK,EACP,CACX,CAAC,CACL,EAAG,CAAC,CAAC,EAEC,GAAA,EAAS,EAAA,YAAA,CAAa,GAAmB,CAC3C,EAAQ,GAAY,CAChB,GAAI,CAAC,EAAQ,IAAI,CAAK,EAAG,OAAO,EAChC,IAAM,EAAO,IAAI,IAAI,CAAO,EAE5B,OADA,EAAK,OAAO,CAAK,EACV,CACX,CAAC,CACL,EAAG,CAAC,CAAC,EAEC,GAAA,EAAQ,EAAA,YAAA,KAAwB,CAClC,EAAQ,GAAa,EAAQ,OAAS,EAAI,EAAU,IAAI,GAAS,CACrE,EAAG,CAAC,CAAC,EAEC,GAAA,EAAM,EAAA,YAAA,CAAa,GAAsB,EAAI,IAAI,CAAK,EAAG,CAAC,CAAG,CAAC,EAE9D,GAAA,EAAS,EAAA,YAAA,CAAa,GAAmB,CAC3C,EAAQ,GAAY,CAChB,IAAM,EAAO,IAAI,IAAI,CAAO,EAG5B,OAFI,EAAK,IAAI,CAAK,EAAG,EAAK,OAAO,CAAK,EACjC,EAAK,IAAI,CAAK,EACZ,CACX,CAAC,CACL,EAAG,CAAC,CAAC,EAEL,OAAA,EAAO,EAAA,QAAA,MACI,CACH,MACA,MACA,OAAQ,EACR,QACA,MACA,SACA,KAAM,EAAI,IACd,GACA,CAAC,EAAK,EAAK,EAAQ,EAAO,EAAK,CAAM,CACzC,CACJ"}