/* Tab: Lanzamiento Automatizado → Lista — hoja editable (aún sin backend: los datos no se guardan, se pierden al recargar). Selector de canal (Todos + cada canal activo) igual que en Producción · Kanban. Clic en una celda para rellenarla; al escribir el título de la última fila se añade automáticamente una fila nueva debajo. */ const LAUNCH_SHEET_COLUMNS = ["Título", "Narración", "Estado", "Canal", "Coste", ""]; const LAUNCH_CELL_STYLE = { width: "100%", border: "none", background: "transparent", outline: "none", fontSize: 12.5, color: "var(--text)", padding: "4px 2px", fontFamily: "inherit", }; // Icono de canal: logo si tiene, si no el avatar (como en el resto de la app), si no // las iniciales. function LaunchChannelIcon({ ch, size = 18 }) { if (!ch) return null; const src = ch.logo || ch.avatarUrl || null; return ( {src ? : ch.initials} ); } function NarrationModal({ row, onClose, onSave }) { const [text, setText] = React.useState(row.narration || ""); const [useOwn, setUseOwn] = React.useState(!!row.useOwnNarration); const [maintainContext, setMaintainContext] = React.useState(!!row.maintainObjectContext); return (
e.stopPropagation()} style={{ width: "100%", maxWidth: 560, maxHeight: "90vh", overflowY: "auto", display: "flex", flexDirection: "column", gap: 12, }}>
Narración
Pega aquí la narración ya escrita para "{row.title || "este vídeo"}".