{"version":3,"sources":["../src/hooks/useThreads.ts"],"names":["useState","useCallback","get","useEffect","set","del"],"mappings":"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","file":"chunk-PDU6CI5B.cjs","sourcesContent":["/**\n * useThreads — multi-conversation sidebar with IndexedDB persistence.\n * Each thread has its own message list (separate IDB key).\n */\nimport { useCallback, useEffect, useState } from 'react'\nimport { get, set, del } from 'idb-keyval'\n\nconst THREADS_META_KEY = 'careless-threads-meta'\n\nexport interface ThreadMeta {\n  id: string\n  title: string\n  createdAt: number\n  updatedAt: number\n  messageCount: number\n  pinned?: boolean\n  archived?: boolean\n}\n\nexport function threadKey(id: string) { return `careless-thread-${id}` }\n\nexport function useThreads() {\n  const [threads, setThreads] = useState<ThreadMeta[]>([])\n  const [activeId, setActiveId] = useState<string | null>(null)\n\n  const load = useCallback(async () => {\n    const meta = (await get<ThreadMeta[]>(THREADS_META_KEY)) || []\n    setThreads(meta)\n    if (!activeId && meta.length) setActiveId(meta[0].id)\n  }, [activeId])\n\n  useEffect(() => { load() }, [])\n\n  const save = async (next: ThreadMeta[]) => {\n    await set(THREADS_META_KEY, next)\n    setThreads(next)\n  }\n\n  const create = useCallback(async (title = 'New thread') => {\n    const id = 't-' + Date.now().toString(36) + '-' + Math.random().toString(36).slice(2, 6)\n    const meta: ThreadMeta = {\n      id, title, createdAt: Date.now(), updatedAt: Date.now(), messageCount: 0,\n    }\n    await save([meta, ...threads])\n    setActiveId(id)\n    return id\n  }, [threads])\n\n  const remove = useCallback(async (id: string) => {\n    await del(threadKey(id))\n    const next = threads.filter(t => t.id !== id)\n    await save(next)\n    if (activeId === id) setActiveId(next[0]?.id || null)\n  }, [threads, activeId])\n\n  const rename = useCallback(async (id: string, title: string) => {\n    await save(threads.map(t => t.id === id ? { ...t, title, updatedAt: Date.now() } : t))\n  }, [threads])\n\n  const togglePin = useCallback(async (id: string) => {\n    await save(threads.map(t => t.id === id ? { ...t, pinned: !t.pinned } : t))\n  }, [threads])\n\n  const updateMeta = useCallback(async (id: string, patch: Partial<ThreadMeta>) => {\n    await save(threads.map(t => t.id === id ? { ...t, ...patch, updatedAt: Date.now() } : t))\n  }, [threads])\n\n  return {\n    threads, activeId, setActiveId,\n    create, remove, rename, togglePin, updateMeta, reload: load,\n    storageKey: activeId ? threadKey(activeId) : null,\n  }\n}\n"]}