{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "use-set",
  "title": "UseSet",
  "description": "Manages a Set of items with ease.",
  "files": [
    {
      "path": "registry/hooks/use-set.tsx",
      "content": "'use client';\n\nimport { useCallback, useMemo, useState } from 'react';\n\nexport type UseSetResult<T> = {\n  set: Set<T>;\n  add: (item: T) => void;\n  delete: (item: T) => void;\n  has: (item: T) => boolean;\n  clear: () => void;\n  reset: () => void;\n  setValue: (newSet: Set<T>) => void;\n  getAll: () => T[];\n};\n\nexport function useSet<T>(initialSet: Iterable<T> = []): UseSetResult<T> {\n  const [set, setSet] = useState<Set<T>>(() => new Set(initialSet));\n  const initial = useMemo(() => new Set(initialSet), [initialSet]);\n\n  const add = useCallback((item: T) => {\n    setSet((prev) => {\n      if (prev.has(item)) return prev;\n      const next = new Set(prev);\n      next.add(item);\n      return next;\n    });\n  }, []);\n\n  const deleteItem = useCallback((item: T) => {\n    setSet((prev) => {\n      if (!prev.has(item)) return prev;\n      const next = new Set(prev);\n      next.delete(item);\n      return next;\n    });\n  }, []);\n\n  const has = useCallback((item: T) => set.has(item), [set]);\n\n  const clear = useCallback(() => {\n    setSet(new Set());\n  }, []);\n\n  const reset = useCallback(() => {\n    setSet(new Set(initial));\n  }, [initial]);\n\n  const setValue = useCallback((newSet: Set<T>) => {\n    setSet(new Set(newSet));\n  }, []);\n\n  const getAll = useCallback(() => Array.from(set), [set]);\n\n  return {\n    set,\n    add,\n    delete: deleteItem,\n    has,\n    clear,\n    reset,\n    setValue,\n    getAll,\n  };\n}\n",
      "type": "registry:hook",
      "target": "hooks/guarahooks/use-set.tsx"
    }
  ],
  "categories": [
    "state-management"
  ],
  "type": "registry:hook"
}