* fix(connections): show destination IP as host for raw-IP targets
When metadata.host is empty (a raw-IP CONNECT with no domain), the
connection "Host" column fell back to remoteDestination (the outbounds
relay/exit address) joined with the destination port, which misleadingly
showed the relay as the connections destination.
Fall back to metadata.destinationIP instead, in both the list column
(getConnectionHost) and the detail panel.
Closes#6669
* fix(connections): preserve fallback for empty destination IP
---------
Co-authored-by: wonfen <eiwonfen@gmail.com>
* fix: update CORS configuration to use key-value pairs for allowed origins
* fix: refactor CORS configuration to use AllowOriginItem interface for better type safety
* feat(proxy): implement sticky virtual list and group tools
- Add new StickyVirtualList component for better performance with sticky headers
- Create ProxyGroupTools component for filtering, sorting and testing proxy groups
- Enhance proxy groups with improved scrolling and group toggle functionality
- Integrate search box with click event handling
- Remove redundant ProxyHead component usage
* style: remove unused import and update TypeScript types
* refactor: convert function component to forwardRef component to fix biome lint error
* feat(proxy): extract proxy chain UI to separate component
* refactor: remove custom throttle implementation and simplify dependencies
* feat(proxy): improve proxy groups UI and scrolling behavior
- Add initialOffset prop to StickyVirtualList for better scroll position restoration
- Refactor ProxyGroups component to separate chain and normal modes
- Implement scroll position persistence for both chain and normal modes
- Add sticky shadow effect for expanded proxy groups
- Remove unnecessary ScrollTopButton component
- Optimize scroll event handling with throttling
- Improve code organization with custom hooks and component separation
* docs(proxy-groups): Add TODO comment for initial render position issue
* feat(proxy): improve scroll position handling and UI display
* refactor(proxy): simplify scroll handling logic and remove unused code
* fix(sticky-virtual-list): remove duplicate styles and add padding
* refactor(proxy): rename scroll offset variables and functions for clarity
* refactor: remove unnecessary refs and simplify onClick handlers
* fix(proxy-groups): handle initial scroll position state
* feat(zed): add biome formatter configuration
* refactor(proxy): remove unused headState import and type annotations
* style(proxy): improve type imports and conditional rendering
* .
* feat(proxy): add ProxyHead component to render in global mode
* chore: ignore .zed directory
* docs: update changelog
Recover from controller read/switch failures on the mode card instead of
showing a bare "communication error":
- fall back to the tolerant get_clash_mode command (then runtime config)
when the live /configs mode is unavailable,
- optimistically reflect the clicked mode and write it through to the
getClashConfig cache so a failed refetch can't flash back the old value,
- surface patch failures via showNotice on both the home card and the
proxies page (patchClashMode can now reject), and
- revalidate getClashMode/getRuntimeConfig on refresh-clash-config so a
once-empty fallback can recover.