import React, { useEffect, useState } from "react"; import { login, refresh, fetchPacks, fetchAdminPacks, fetchPackValidation, fetchPackProvenance, fetchPackVersions, fetchPackComments, upsertPack, publishPack, governanceAction, addReviewComment, listLearners, createLearner, fetchLearnerState, fetchRecommendations, postEvidence, submitEvaluatorJob, fetchEvaluatorHistory, fetchEvaluatorTrace } from "./api"; import { loadAuth, saveAuth, clearAuth } from "./authStore"; function LoginView({ onAuth }) { const [username, setUsername] = useState("wesley"); const [password, setPassword] = useState("demo-pass"); const [error, setError] = useState(""); async function doLogin() { try { const result = await login(username, password); saveAuth(result); onAuth(result); } catch { setError("Login failed"); } } return (

Didactopus login

{error ?
{error}
: null}
); } function NavTabs({ tab, setTab, role }) { return (
{role === "admin" ? <> : null}
); } function PackAuthorForm({ value, onChange, onSave }) { function setField(field, val) { onChange({ ...value, [field]: val }); } function setCompliance(field, val) { onChange({ ...value, compliance: { ...value.compliance, [field]: val } }); } return (