1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
//! Key/value table rendering for right-pane **Metadata** and **Writing** JSON (from zahirscan).
//! Layout, padding, and scrollbar live in [`crate::render::scrollable_content`]; this crate parses
//! JSON into sections and draws only the visible window (ratatui’s `Table` has no native scroll).
//!
//! ## Stable API (rest of the app)
//!
//! Prefer the crate-root re-exports below. Call sites today: [`draw_right_pane`](crate::render::panes::draw_right_pane) / fullscreen.
//!
//! - [`draw_tables`] — per-frame draw with scroll offset.
//! - [`content_height`] — total line count for scrollbar math (must match draw).
//! - [`parse_json_sections`] — only if you need `Section` values outside draw (tests, tooling).
//!
//! Submodules (`walk`, `csv`, `schema`, …) stay `pub` for a shallow module tree and tests; treat
//! them as implementation details unless you are extending parsing.
//!
//! ## Hot path vs cache
//!
//! **Per frame, no parsed-section cache:** [`content_height`] and [`draw_tables`] each call
//! [`parse_json_sections`], so large JSON can be parsed twice in one paint when the right pane
//! shows metadata/writing. (Scroll width iteration may call [`content_height`] multiple times in
//! the same frame.) Row **virtualization** applies only inside [`draw_tables`]: Contents tables
//! build ratatui rows for the visible slice, not for the full entry list.
//!
//! Multi-blob JSON (`"\n\n"`-separated objects) uses Rayon in [`parse_json_sections`] when blob
//! count ≥ [`PARALLEL.json_sections_blobs`](crate::config::PARALLEL).
//!
//! Longer module map: see `README.md` in this directory.
pub use *;
pub use *;