"use client"; import { useI18n } from "@/components/i18n"; /** * THE MINIMAL HOME (owner, 2026-10-06 — the no-graph home, take two): * when GRAPH RENDERING is off (graph.rendering in settings), the home's * main view is this — deliberately quiet, deliberately minimal. The * eventual plan is the DATA VIEW as home; until that is designed and * built, this is the placeholder that asks for nothing new: the SAME * composer blob home already floats (teach/practice switcher + pick * pill — untouched), the graph chrome's survivors in the SAME places * the graph view keeps them (top-right column: actions row, cost pill * BELOW it), and a centered, quiet summary of the knowledge base in * numbers. No recent sessions (the sidebar owns that), no canvas, no * list scrolling under the composer. * * The CHAIN TABLE stays behind its button exactly as on the graph view: * the standard overlay, unchanged — this component owns only the button. * The practice pick flow mirrors GraphView's contract verbatim (home * lifts the pick set; the chip opens the overlay in select mode). */ import { useCallback, useEffect, useRef, useState } from "react"; import { ListTreeIcon, UploadIcon } from "lucide-react"; import { ChainTableOverlay } from "@/components/chain-table.tsx"; import { GraphCostControl } from "@/components/graph-view.tsx"; import { NotesImportErrors, useNotesImport } from "@/components/notes-import.tsx"; import { Hint } from "@/components/ui/hint"; import { countLabel } from "@/src/core"; import type { ChatSummary, GraphCostSummary, GraphSnapshot } from "@/src/core"; /** The quiet centered summary — a pure body (props in, markup out) so * the render suite can pin it statically. Very quiet by owner ruling: * muted small text, no cards, no chrome. */ export function KnowledgeSummary({ propositions, chains, teachSessions, practiceSessions, importedNotes, }: { propositions: number; chains: number; teachSessions: number; practiceSessions: number; importedNotes: number; }) { const { t, language } = useI18n(); const empty = propositions === 0 && chains === 0 && teachSessions === 0 && practiceSessions === 0 && importedNotes === 0; return (
{/* Own-line law (owner, 2026-10-06): every count sits on its own row — no dot separators; the two blocks (graph, sessions) part with one empty line; the notes COUNT (never the file list) rides after the same parting. */}

{countLabel(language, propositions, "proposition", "propositions")}

{countLabel(language, chains, "chain", "chains")}