feat: add title and description fields to capture grammar
Implement | prefix for titles and // separator for descriptions across the full stack: parser, schema, API, CLI, and web frontend. - Parser: line-aware extraction for |title, |title // desc, // leading desc, body // inline desc. URL-safe (skips :// lines). Modifiers (#tag, @time, ^card) extracted from all segments. - Schema: ALTER TABLE migration adds title, description columns - DB: Entity/EntityUpdate structs, all CRUD queries updated - API: title/description on create/update/response, body validation relaxed (title-only entries valid) - CLI: shows title as scan label when present - Web: parseInput mirrors Go parser, list shows title, detail pane renders title + description with double-click inline editing - Tests: 10 new cases (grammar, entity, API) — 71 total, all pass
This commit is contained in:
@@ -309,6 +309,25 @@ main {
|
||||
.glyph-decision { color: var(--note); }
|
||||
.glyph-link { color: var(--danger); }
|
||||
|
||||
.entity-title {
|
||||
font-family: var(--sans);
|
||||
font-size: 12px;
|
||||
font-weight: 500;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.entity-preview {
|
||||
font-family: var(--mono);
|
||||
font-size: 11px;
|
||||
color: var(--muted);
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
margin-left: 8px;
|
||||
}
|
||||
|
||||
.entity-body {
|
||||
flex: 1;
|
||||
font-family: var(--mono);
|
||||
@@ -385,6 +404,48 @@ main {
|
||||
color: var(--dim);
|
||||
}
|
||||
|
||||
.detail-desc {
|
||||
font-family: var(--sans);
|
||||
font-size: 11px;
|
||||
color: var(--muted);
|
||||
margin-bottom: 4px;
|
||||
cursor: text;
|
||||
padding: 2px 6px;
|
||||
margin-left: -6px;
|
||||
border-radius: var(--r2);
|
||||
transition: background var(--t-fast);
|
||||
}
|
||||
|
||||
.detail-desc:hover { background: var(--raised); }
|
||||
|
||||
.detail-title {
|
||||
font-family: var(--sans);
|
||||
font-size: 16px;
|
||||
font-weight: 500;
|
||||
margin-bottom: 12px;
|
||||
cursor: text;
|
||||
padding: 2px 6px;
|
||||
margin-left: -6px;
|
||||
border-radius: var(--r2);
|
||||
transition: background var(--t-fast);
|
||||
}
|
||||
|
||||
.detail-title:hover { background: var(--raised); }
|
||||
|
||||
.detail-field-edit {
|
||||
display: block;
|
||||
width: 100%;
|
||||
font-family: var(--sans);
|
||||
font-size: 14px;
|
||||
margin-bottom: 12px;
|
||||
padding: 4px 8px;
|
||||
background: var(--bg);
|
||||
color: var(--text);
|
||||
border: 1px solid var(--accent);
|
||||
border-radius: var(--r2);
|
||||
outline: none;
|
||||
}
|
||||
|
||||
.detail-body {
|
||||
font-family: var(--mono);
|
||||
font-size: 13px;
|
||||
|
||||
Reference in New Issue
Block a user