When the user drags a text selection and the cursor reaches within 40px of the top or bottom edge of the terminal, the viewport auto-scrolls at a speed proportional to the distance from the edge (up to 8 px/frame). The selection head extends as the view scrolls, enabling cross-page selection without manually scrolling first. - Add start_autoscroll / stop_autoscroll helpers using setInterval (~60fps) - Detect edge proximity in handle_mousemove after updating selection head - Stop auto-scroll on mouseup or when cursor leaves edge zone - Switch view_mode to History/Live based on scroll position
BASE_PATH Demo
Minimal Leptos SSR project that reuses a few components from ui to validate SiteConfig::BASE_PATH.
The public app path is /rustui, while Leptos SSR routes are still declared as /, /check, and /deep/nested. The server strips /rustui before route matching, and the client router uses /rustui as its base.
cargo leptos watch
Then open:
http://127.0.0.1:3100/rustuihttp://127.0.0.1:3100/rustui/checkhttp://127.0.0.1:3100/rustui/deep/nested
Change app_config/src/lib.rs to test another base path.
Terminal Renderer Bench
The terminal benchmark script connects to an already-running dev server; it does not start or stop services.
Install the Node dependency once before running it:
npm install
npm run terminal:bench -- --url http://127.0.0.1:3100/rustui/terminal
If Playwright's browser download is slow, use an installed Chrome/Chromium instead:
npm run terminal:bench -- --url http://127.0.0.1:3100/rustui/terminal --browser-executable /usr/bin/google-chrome
Compare renderer modes with:
npm run terminal:bench -- --url http://127.0.0.1:3100/rustui/terminal --renderer canvas --browser-executable /usr/bin/google-chrome
It writes renderer-specific reports such as
target/terminal-bench/terminal-bench-webgl.json and
target/terminal-bench/terminal-bench-canvas.json, plus
target/terminal-bench/terminal-bench-latest.json for the most recent run.
Screenshots are also named by renderer and viewport.