Commit Graph
16 Commits
Author SHA1 Message Date
Kang f0655b59c1 feat(ui): add a real text field widget and use it for the connections filter
Every "input" in the app is a label div: a `div` that takes focus, swallows key
events and prints the draft string. There is no caret, no selection, no pointer
positioning and no composition, so the moment anyone tries to edit rather than
append it reads as broken — which is exactly the complaint about the filter box.

`TextField` is a real GPUI widget instead. It is an `Entity` that owns its
buffer and focus, implements `EntityInputHandler` so the platform routes IME and
clipboard through it, and paints through a custom `Element` that shapes the line
once and reuses that shaping for hit-testing, the selection quads and the caret.
Owners learn about edits by subscribing to `TextFieldEvent::Changed`, which
carries the new content, rather than reading back through the entity.

It deliberately does not claim Enter, Escape, Tab or the arrows: those are
dialog and list gestures, so they stay unconsumed for the owner's own key
handler. That is what lets the saved-connections filter keep driving result
navigation while the field handles the text.

The editing rules live in `nyaterm_core::TextEdit` — caret motion across
multi-byte boundaries, what counts as a word (hosts and paths make `.`, `-`, `/`
and `@` stops), and which end of a selection shift moves — so they are testable
without a window.

Adopting it in the filter box retires the placeholder caret drawn by splicing a
`|` into the display string, and the seven arms this panel had bolted onto
`NyaTermApp`'s `EntityInputHandler`; the widget owns its own composition now.
2026-07-26 23:43:35 +08:00
Kang 5efce4e7cf feat(assets): vendor bundled icons from a pinned manifest
Icons were previously hand-added, so their provenance and licensing lived in
folklore and a mis-painted asset was invisible at runtime: GPUI's `svg()`
reduces a file to an alpha mask, and `img()` keeps its pixels, but nothing
complains when the two are swapped.

Assets are now described by `scripts/icons.manifest` and vendored by
`scripts/sync-icons.sh` from pinned upstream releases, keeping the tree
reproducible and reviewable. `icons/**` stays monochrome and `color/**` full
colour; `scripts/check-icon-references.sh` fails the build when a referenced
asset is missing or painted through the wrong element, and runs in CI.

The lookup tables move out of `formatting/` into a dedicated `features/icons`
module so a ~1000-line brand table is not rebuilt inside a render closure, and
saved connections gain `icon_auto_detect`, which fills in a blank icon from the
detected remote system without ever overwriting a deliberate choice.
2026-07-26 23:21:58 +08:00
Kang 3fea590ac9 perf(terminal): wake gpui for interactive frame results 2026-07-24 18:31:39 +08:00
Kang b9fed934f7 feat(connections): add multi-source session import 2026-07-20 10:26:03 +08:00
Kang ea31e47994 fix(ui): align shell and file explorer surfaces 2026-07-19 20:53:45 +08:00
Kang 9bb7828767 feat(security): import otp entries from qr images 2026-07-19 08:34:02 +08:00
Kang 7d779eb255 feat(sync): add GitHub Gist device flow 2026-07-19 00:53:30 +08:00
Kang 1fdea04d03 fix(appearance): render tiled wallpapers natively 2026-07-18 10:26:06 +08:00
Kang d3baad6417 feat(terminal): enhance performance tracking and update handling
- Introduced performance heartbeat logging for terminal rendering, capturing metrics such as full shell paints and layout cache hits/misses.
- Added support for quiet tick intervals to optimize runtime performance during idle states.
- Improved session handling by deferring surface repaints and synchronizing terminal surface notifications more efficiently.
- Updated various functions to return session IDs for better state management and reduced unnecessary updates.
- Enhanced the terminal's scroll handling to ensure smoother user interactions and maintain visual consistency across sessions.
2026-07-16 19:26:49 +08:00
Kang 4b3ed21f2d feat(terminal): complete native terminal pipeline 2026-07-15 13:27:06 +08:00
Kang d42778a66c refactor(gpui): split desktop presentation crates 2026-07-13 17:46:30 +08:00
Kang ff2b39e4bd feat(native): introduce nyaterm-app with SVG assets and workspace restructuring
- Created a new `nyaterm-app` crate, including a `Cargo.toml` file and an `assets.rs` module for managing bundled SVG assets.
- Updated the workspace configuration to include new members and exclude specific vendor directories.
- Added various SVG icons for application functionality, enhancing the visual elements of the user interface.
2026-07-12 20:47:43 +08:00
Kang 328ff4f7f7 feat(native): update dependencies and improve code formatting
- Added `alacritty_terminal` version 0.26.0 and `cursor-icon` version 1.2.0 to the project.
- Updated `signal-hook` to version 0.4.4 and `miow` to version 0.6.1.
- Refactored code for better readability by consolidating lines and improving formatting in various files, including `cloud_sync.rs`, `command_suggestion_suppression.rs`, and `terminal_input_tracker.rs`.
- Enhanced the `ConnectionStore` implementation for better error handling and clarity.
2026-07-12 20:28:19 +08:00
Kang 0844cce5e9 feat(session): native ZMODEM transfer interception and file-drop upload
Port the Tauri ZMODEM detector/transfer core into nyaterm-session, intercept
protocol bytes in the GPUI event pump, and start remote rz uploads from
terminal file drops on SSH/Telnet/Serial sessions.
2026-07-11 22:06:19 +08:00
Kang e4dab77410 refactor: refactor code structure for improved readability and maintainability 2026-07-10 16:11:20 +08:00
Kang 2573fead0e refactor: migrate UI framework to GPUI
- Replace existing UI implementation with GPUI-based architecture
- Reorganize window, layout, and component rendering logic
- Prepare foundation for native UI performance improvements
2026-07-06 09:09:41 +08:00