diff --git a/context/repo-map.md b/context/repo-map.md index 5fc8de1..87cfcb5 100644 --- a/context/repo-map.md +++ b/context/repo-map.md @@ -83,9 +83,9 @@ pub trait Effect: Debug { **GridLayout** (`view/layout.rs`): pure function of `Model + View`. `cell_key(r,c)`, `cell_value(r,c)`, `drill_records(r,c)`. **Records mode** auto-detects when `_Index` is on Row and `_Dim` is on Column. -**AppMode** (`ui/app.rs`): 15 variants (Normal, Editing, FormulaEdit, FormulaPanel, CategoryPanel, ViewPanel, TileSelect, CategoryAdd, ItemAdd, ExportPrompt, CommandMode, ImportWizard, Help, Quit). `SearchMode` is Normal + `search_mode: bool`, not its own variant. +**AppMode** (`ui/app.rs`): 16 variants (Normal, Editing, FormulaEdit, FormulaPanel, CategoryPanel, ViewPanel, TileSelect, CategoryAdd, ItemAdd, ExportPrompt, CommandMode, ImportWizard, Help, Quit, RecordsNormal, RecordsEditing). Text-entry variants carry a `MinibufferConfig`. `SearchMode` is Normal + `search_mode: bool`, not its own variant. `App` state is split into `ModelState` (workbook, file_path, dirty) and `ViewState` (mode, cursor/offsets, buffers, panels, search) — see improvise-x2c/ew0. -**Keymap** (`command/keymap.rs`): `Binding { Cmd | Prefix(Arc) | Sequence(Vec<…>) }`. Lookup fallback: `exact(key,mods) → Char(NONE) → AnyChar → Any → parent`. 14 mode keymaps built by `KeymapSet::default_keymaps()`; mode resolved via `ModeKey::from_app_mode()`. +**Keymap** (`command/keymap.rs`): `Binding { Cmd | Prefix(Arc) | Sequence(Vec<…>) }`. Lookup fallback: `exact(key,mods) → Char(NONE) → AnyChar → Any → parent`. 16 mode keymaps built by `KeymapSet::default_keymaps()`; mode resolved via `ModeKey::from_app_mode()`. --- @@ -158,53 +158,53 @@ model/symbol.rs 79 / 3t Symbol interning view/layout.rs 1140 / 24t GridLayout, drill, records mode view/types.rs 531 / 28t View config (axes, pages, hidden, collapsed, format) view/axis.rs 21 Axis enum -workbook.rs 259 / 11t Workbook: Model + cross-view ops +workbook.rs 266 / 11t Workbook: Model + cross-view ops format.rs 229 / 29t format_f64, parse_number_format (display only) ``` ### `improvise-formula` (`crates/improvise-formula/src/`) ``` -parser.rs 776 / 65t pest grammar + tokenizer → Formula AST +parser.rs 1080 / 65t pest grammar + tokenizer → Formula AST ast.rs 77 Expr, BinOp, AggFunc, Formula, Filter ``` ### `improvise-io` (`crates/improvise-io/src/`) ``` persistence/improv.pest 124 PEG grammar — single source of truth -persistence/mod.rs 2410 / 83t save/load/gzip/legacy-JSON, CSV export -import/wizard.rs 1117 / 38t ImportPipeline + ImportWizard +persistence/mod.rs 2402 / 83t save/load/gzip/legacy-JSON, CSV export +import/wizard.rs 1121 / 38t ImportPipeline + ImportWizard import/analyzer.rs 292 / 9t Field kind detection (Category/Measure/Time/Skip) import/csv_parser.rs 300 / 8t CSV parsing, multi-file merge ``` ### Command layer (`src/command/`) ``` -cmd/core.rs 297 / 2t Cmd trait, CmdContext, CmdRegistry, parse helpers -cmd/registry.rs 586 / 0t default_registry() — all registrations (no tests yet) -cmd/navigation.rs 475 / 10t Move, EnterAdvance, Page* +cmd/core.rs 319 / 2t Cmd trait, CmdContext, CmdRegistry, parse helpers +cmd/registry.rs 601 / 0t default_registry() — all registrations (no tests yet) +cmd/navigation.rs 501 / 10t Move, EnterAdvance, Page* cmd/cell.rs 198 / 6t ClearCell, YankCell, PasteCell, TransposeAxes, SaveCmd -cmd/commit.rs 330 / 7t CommitFormula, CommitCategoryAdd/ItemAdd, CommitExport -cmd/effect_cmds.rs 437 / 5t effect_cmd! macro, 25+ simple wrappers -cmd/grid.rs 409 / 7t ToggleGroup, ViewNavigate, DrillIntoCell, TogglePruneEmpty -cmd/mode.rs 308 / 8t EnterMode, Quit, EditOrDrill, EnterTileSelect +cmd/commit.rs 455 / 7t CommitFormula, CommitCategoryAdd/ItemAdd, CommitExport +cmd/effect_cmds.rs 466 / 5t effect_cmd! macro, 25+ simple wrappers +cmd/grid.rs 494 / 7t ToggleGroup, ViewNavigate, DrillIntoCell, TogglePruneEmpty +cmd/mode.rs 354 / 8t EnterMode, Quit, EditOrDrill, EnterTileSelect cmd/panel.rs 587 / 13t Panel toggle/cycle/cursor, formula/category/view panels cmd/search.rs 202 / 4t SearchNavigate, SearchOrCategoryAdd, ExitSearchMode cmd/text_buffer.rs 256 / 7t AppendChar, PopChar, CommandModeBackspace, ExecuteCommand cmd/tile.rs 160 / 5t MoveTileCursor, TileAxisOp -keymap.rs 1066 / 22t KeyPattern, Binding, Keymap, ModeKey, 14 mode keymaps +keymap.rs 1248 / 22t KeyPattern, Binding, Keymap, ModeKey, 16 mode keymaps parse.rs 236 / 19t Script/command-line parser (prefix syntax) ``` ### UI, draw, main (`src/ui/`, `src/draw.rs`, `src/main.rs`) ``` -ui/effect.rs 942 / 41t Effect trait, 50+ effect types -ui/app.rs 914 / 30t App state, AppMode (15), handle_key, autosave -ui/grid.rs 1036 / 13t GridWidget (ratatui), column widths -ui/help.rs 617 5-page help overlay (render only) +ui/effect.rs 1860 / 41t Effect trait, 50+ effect types +ui/app.rs 1475 / 30t App, ModelState, ViewState, AppMode (16), handle_key, autosave +ui/grid.rs 1063 / 13t GridWidget (ratatui), column widths +ui/help.rs 603 5-page help overlay (render only) ui/import_wizard_ui.rs 347 Import wizard rendering -ui/cat_tree.rs 165 / 6t Category tree flattener for panel -draw.rs 400 TUI event loop, frame composition -main.rs 391 CLI entry (clap): open, import, cmd, script +ui/cat_tree.rs 156 / 6t Category tree flattener for panel +draw.rs 422 TUI event loop, frame composition +main.rs 388 CLI entry (clap): open, import, cmd, script # other ui/*.rs are small panel renderers — skip unless changing layout/style ``` @@ -251,4 +251,4 @@ Full guidance lives in `context/design-principles.md` §6. Quick reminders: ## Key dependencies -ratatui 0.30, crossterm 0.28, clap 4.6 (derive), serde/serde_json, indexmap 2, anyhow, chrono 0.4, pest + pest_derive, flate2 (gzip), csv, enum_dispatch. Dev: proptest, tempfile, pest_meta. +ratatui 0.30, crossterm 0.29, clap 4.6 (derive), serde/serde_json, indexmap 2, anyhow, chrono 0.4, pest + pest_derive, flate2 (gzip), csv, enum_dispatch. Dev: proptest, tempfile, pest_meta.