ordning GUI widgets — temporary home (destined for facett)
These facett-* widget crates are being built here in the ordning repo temporarily, then moved into the facett repo once stable — and once the concurrent facett work settles (another agent is actively editing facett-core; building here avoids collision). They fill the facett GUI gaps identified in ../03-facett-gui-have-gap.md.
Design contract (so the move is trivial)
Each widget is written to the facett Facet contract — title(&self), ui(&mut self, ui), state_json(&self) — so it drops into a facett FacetDeck unchanged. It compiles egui-only by default; an optional facett cargo feature adds impl facett_core::Facet (off by default so the crate is robust against facett's churn). The state_json surface mirrors facett's headless-test + $FACETT_TRACE discipline: every visible count/selection/state is observable without a display. Widgets that need time never read the clock — the host supplies today — so they're deterministic and testable.
The move-to-facett checklist (per widget)
git mv crates/widgets/facett-<x>→facett/facett-<x>, add to facett's workspace.- Add
facett-corepath dep; enable thefacettfeature; wire theimpl Facet+ theme colors. - Add a headless
egui_kittesttest (facett's matrix) assertingstate_json. - Update facett's
.nornirdesign/guide docs; drop the temporary copy here.
Widgets
| Crate | Status | Tests | Fills gap | Doc |
| facett-kanban | ✅ builds | 3 | board: status columns, drag-to-transition, swimlanes, WIP limits | doc |
| facett-calendar | ✅ builds | 4 | Monday-first month grid + date picker; deadlines/frister/absence | doc |
| facett-timeline | ✅ builds | 3 | swimlane timeline (handover/queue/ärende-flow); absence spans | doc |
| facett-gantt | ✅ builds | 2 | dependency bars + progress + milestones + critical path | doc |
| facett-cfd | ✅ builds | 2 | cumulative flow diagram (stacked status areas) | doc |
| facett-search | ✅ builds | 5 | the query-language parser + search bar (used everywhere) | doc |
| facett-markdown | ✅ builds | 5 | markdown editor+preview, @mention/#tag extraction | doc |
| facett-toast | ✅ builds | 3 | timed notification overlay (host-driven time) | doc |
| facett-file | ✅ builds | 3 | attachment drop-zone + list (reports intents) | doc |
| facett-dashboard | planned | — | role-dashboard grid shell (needs host facets) | — |
9 widgets, 30 unit tests green — Tier 1 + Tier 2 + most of Tier 3 of ../03-facett-gui-have-gap.md is built. Remaining: facett-dashboard (a layout shell — better built once several facets compose in a real app), and extending facett-card::FieldValue (StoryPoints/Duration/Sla/Sekretess/typed Relation — belongs in facett-card, so done on the move). Then: promote the facett-search parser into ordning-core (shared by the command line + automation), and the move-to-facett pass.