cowrite / client /doc.html
lvwerra's picture
lvwerra HF Staff
LaTeX math via lazily-loaded KaTeX ($x$ inline, $$...$$ display), agent-proposable; Enter sends a comment, Shift+Enter adds a line
735a30f verified
Raw
History Blame Contribute Delete
6.95 kB
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Document</title>
<script>
// theme before first paint: a stored choice, else the OS setting
try {
var t = localStorage.getItem('cw-theme')
document.documentElement.dataset.theme =
t === 'dark' || t === 'light' ? t : matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'
} catch (e) {
document.documentElement.dataset.theme = 'light'
}
</script>
<link rel="preload" href="/fonts/inter-latin.woff2" as="font" type="font/woff2" crossorigin />
<!--boot-->
<link rel="stylesheet" href="/app.css" />
<link rel="icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Crect width='32' height='32' rx='8' fill='%231d5c45'/%3E%3Crect x='9' y='10' width='14' height='2.2' rx='1.1' fill='white'/%3E%3Crect x='9' y='15' width='14' height='2.2' rx='1.1' fill='white'/%3E%3Crect x='9' y='20' width='9' height='2.2' rx='1.1' fill='white'/%3E%3C/svg%3E" />
</head>
<body class="page-doc">
<div id="signin" class="overlay hidden">
<div class="card">
<h2>cowrite</h2>
<p>Collaborative documents where agents comment and suggest — but never write.</p>
<a class="btn primary" id="signin-btn" href="/auth/login">Sign in with Hugging Face</a>
<div id="dev-login" class="hidden">
<input id="dev-user" placeholder="dev username" />
<button class="btn" id="dev-go">Dev sign-in</button>
</div>
</div>
</div>
<header id="topbar">
<a id="back-link" href="/" title="All documents"></a>
<button class="iconbtn phone-only" id="m-pages" title="Pages"></button>
<span id="doc-title"></span>
<span id="conn" title="connection"></span>
<div id="header-tools"></div>
<div class="spacer"></div>
<div id="presence"></div>
<div id="mode-switch" title="Editing writes straight into the document; Suggesting proposes changes instead"></div>
<button class="iconbtn phone-only" id="m-fmt" title="Formatting">Aa</button>
<button class="iconbtn phone-only" id="m-comments" title="Comments"></button>
<button class="iconbtn phone-only" id="m-more" title="More"></button>
<button class="iconbtn" id="theme-btn" title="Switch theme"></button>
<button class="btn ghost small" id="share-btn">Share</button>
<button class="btn ghost small" id="agents-btn">Agents</button>
<span id="whoami"></span>
</header>
<div id="more-pop" class="hidden"></div>
<div id="scrim" class="hidden"></div>
<div id="share-pop" class="hidden">
<h3>Share</h3>
<p class="hint">People you share with can read, edit, comment — and point their own agents at this doc.</p>
<div id="share-list" class="muted">loading…</div>
<form id="share-form">
<input id="share-user" placeholder="Hugging Face username" />
<button class="btn small" type="submit">Share</button>
</form>
</div>
<div id="agents-pop" class="hidden">
<h3>Agents</h3>
<p class="hint">Agents that can act in this doc (their owners have access). Register your own,
copy its prompt, and mention it in any comment: <b>@handle do something</b>. They answer by
proposing changes in the document and keep their replies short.</p>
<div id="agents-list" class="muted">loading…</div>
<form id="agent-form">
<input id="agent-handle" placeholder="handle, e.g. leandro-claude" />
<button class="btn small" type="submit">Add</button>
</form>
</div>
<div id="link-pop" class="hidden">
<input id="link-url" placeholder="https://…" />
<button class="btn small primary" id="link-apply">Link</button>
</div>
<main id="layout">
<nav id="sidebar" class="hidden">
<div id="sidebar-head">
<span class="sidebar-title">Pages</span>
<button class="iconbtn" id="page-add" title="Add page">+</button>
<button class="iconbtn phone-only" id="sidebar-close" title="Close"></button>
</div>
<div id="page-tree"></div>
<a id="structure-link" title="Edit the page tree (a YAML page — changes can be suggested)">structure</a>
</nav>
<button id="sidebar-toggle" title="Toggle pages sidebar"></button>
<button id="margin-toggle" title="Toggle comments panel"></button>
<div id="editor-col">
<!-- Painted with the first frame, before the editor bundle has even
parsed, and removed once the document has synced. Without it the
first thing you see is an empty sheet, which reads as "loaded but
blank" rather than "still coming". -->
<div id="doc-skeleton" aria-hidden="true">
<div class="sk-line sk-title"></div>
<div class="sk-line w90"></div>
<div class="sk-line w75"></div>
<div class="sk-line w82"></div>
<div class="sk-line sk-gap w40"></div>
<div class="sk-line w88"></div>
<div class="sk-line w70"></div>
<div class="sk-line w80"></div>
</div>
<div id="editor"></div>
<div id="proposal-view" class="hidden"></div>
<div id="selection-menu" class="hidden">
<button id="comment-btn"></button>
<button id="suggest-btn"></button>
</div>
</div>
<aside id="margin-col">
<div id="margin-head">
<span id="margin-grab"></span>
<span id="margin-head-title">Comments</span>
<button class="iconbtn" id="margin-close" title="Close comments"></button>
</div>
<div id="margin-tools">
<label class="row" style="gap:6px; cursor:pointer;"><input type="checkbox" id="show-resolved" /> show resolved</label>
</div>
<div id="margin-items">
<div id="composer" class="composer-box hidden">
<blockquote id="composer-quote"></blockquote>
<textarea id="composer-text" rows="3" placeholder="Comment — @handle to hand it to an agent. Enter sends, Shift+Enter for a new line."></textarea>
<div id="composer-mentions" class="mention-menu hidden"></div>
<div class="row">
<button class="btn small ghost" id="composer-cancel">Cancel</button>
<button class="btn small primary" id="composer-send">Comment</button>
</div>
</div>
<div id="suggest-composer" class="composer-box hidden">
<blockquote id="suggest-quote"></blockquote>
<textarea id="suggest-text" rows="6" placeholder="Rewrite the selected block(s) in markdown…"></textarea>
<input id="suggest-rationale" placeholder="Why? (optional)" />
<div class="row">
<button class="btn small ghost" id="suggest-cancel">Cancel</button>
<button class="btn small primary" id="suggest-send">Suggest</button>
</div>
</div>
</div>
</aside>
</main>
<script src="/doc.js"></script>
</body>
</html>