Carpetas: anidación, compartir, plantillas y banner — UI completa
Cierre de la línea de carpetas avanzadas iniciada en v7.37/v7.38. Ahora todas las funciones que tenían el schema listo en DB tienen UI funcional: árbol jerárquico de carpetas en el sidebar, modal de invitar usuarios con roles (viewer/editor/admin), galería de plantillas en el modal de crear carpeta, "Guardar como plantilla" desde Settings, banner image (URL) y picker de carpeta padre. Smart filters se queda para más adelante (necesita un editor de query JSON).
Nuevo
- 🪺 Sidebar renderiza carpetas anidadas como árbol con indentación + línea punteada lateral.
- 🔗 Tab "Compartir" en Settings con búsqueda por email + roles + cambiar/quitar acceso.
- 💾 Botón "Guardar como plantilla" en tab Organización (con flag pública/privada).
- 🖼️ Campo "Banner image URL" con preview live.
- 🌲 Picker de carpeta padre (anidación).
- 📊 use_count se incrementa cuando alguien usa una plantilla.
Mejorado
- 📦 Galería de plantillas en CreateFolderModal con preview y aplicación instantánea.
API endpoints nuevos
- GET / POST / PATCH /api/folder-templates — list (own + public), create, increment use_count.
- DELETE / PATCH /api/folder-templates/:id — solo owner via RLS.
- GET / POST /api/folders/:id/shares — list (con profiles join) e invite por email/user_id.
- PATCH / DELETE /api/folders/:id/shares/:shareId — cambiar rol o quitar acceso.
- Validación de permisos: owner + admins de la carpeta pueden invitar/eliminar; el invitado puede salirse.
CreateFolderModal — Plantillas
- Carga GET /api/folder-templates al abrir.
- Sección colapsable "Empezar desde una plantilla" con grid 2 columnas.
- Cada tarjeta muestra icono+color, nombre, descripción, badge "Pública", use_count y count tools.
- Click → applyTemplate() rellena icon/accent/instructions automáticamente.
- Pill superior con nombre de plantilla aplicada + X para quitarla.
- Al crear, se incrementa use_count vía PATCH.
FolderSettingsModal — 2 tabs nuevas
- Tab "Compartir": email input + role select + invite button (gradient violet→fuchsia).
- Lista de personas con avatar, nombre, fecha invitación, role select (viewer/editor/admin), botón quitar.
- Tab "Organización": banner URL con preview + parent folder picker + sección "Guardar como plantilla".
- Save as template: name + description + toggle pública/privada.
FolderSettingsModal — saveFolder
- Persiste banner_url y parent_folder_id junto con los demás campos.
Sidebar — árbol jerárquico
- Agrupa folders por parent_folder_id en una map.
- Renderiza root folders primero. Cada nivel tiene paddingLeft proporcional (max 3 niveles).
- Borde lateral punteado para indicar la jerarquía visual.
- Recursive renderWithChildren() ilimitado en profundidad.
Pendiente
- 🧠 Smart filters: editor visual de filtros JSON. Schema (smart_filters_json) listo en DB.
- 🖼️ Banner upload: actualmente solo URL. Falta integración con Storage para upload.
- 🤖 Auto-classify: sugerir carpeta para chat nuevo basado en primer mensaje.
