feat(frontend): add SplitViewComparison optimistic updates - #904
feat(frontend): add SplitViewComparison optimistic updates#904kongwen686 wants to merge 765 commits into
Conversation
…thony-19/Stellar-Dex-Chat into add-Foundry-deployment-script
… short-lived entries
…m/emarc99/Stellar-Dex-Chat into fix/transfer_admin_validation_bug
…iling ttl extension
…-net#294, leojay-net#301 - fix(contract): emit event in set_operator for off-chain monitoring (leojay-net#390) - feat(frontend): add CSV export to ReceiptDrawer with accessible button (leojay-net#391) - feat(frontend): add Zod validation schemas for all API route inputs (leojay-net#294) - fix(frontend): deduplicate chat history entries on page reload (leojay-net#301) Changes: - Added event emission in set_operator function with EVENT_VERSION - Implemented CSV export functionality in ReceiptDrawer with proper escaping - Created apiSchemas.ts with Zod schemas for create-recipient, initiate-transfer, and verify-account - Updated all API routes to use Zod validation with structured error responses - Added deduplicateSessions method to ChatHistoryManager - Updated loadFromLocalStorage to deduplicate sessions on load - Updated createNewSession to deduplicate before saving - Added unit tests for deduplication logic - Fixed duplicate section in ChatHistorySidebar All tests passing, lint checks clean.
- Change error.errors to error.issues (correct Zod API) - Fix TransactionAmountDisplay import (named export) - Update CSV export to use correct TransactionHistoryEntry properties - Remove duplicate imports in ReceiptDrawer
…196-187 feat: add split-view comparison, advanced search, and markdown hardening
…y-consent-toggle feat(frontend): add telemetry consent toggle in user settings
…draft-messages feat(frontend): persist chat drafts with 500ms debounce
…r-rate-limit-utility-module test(lib): add unit tests for rateLimit utility
fix(contract): prevent ReceiptIndex from using persistent storage for…
…es-390-391-294-301 Fix: Combined Fixes for Issues leojay-net#390, leojay-net#391, leojay-net#294, leojay-net#301
- Replace Date.now()/Date.now()+1 ID generation with crypto.randomUUID() to eliminate message ID collisions when two messages are created in the same millisecond - Remove stale isLoading closure from cancelPendingRequest and sendMessage; read activeRequestControllerRef directly so cancellation works regardless of when React flushes the isLoading state update - Drop isLoading from sendMessage useCallback dependency array (was causing the hook to re-create on every loading toggle, contributing to stale refs) - Add regression tests: unique IDs under concurrent sends, cancel-before- state-flush, stale-closure AbortController reuse fix(frontend): add keyboard shortcuts to ReceiptDrawer.tsx (leojay-net#528) - Escape closes the drawer - Backspace / Delete clears transaction history (when handler provided) - Shortcuts are no-ops when the drawer is closed - Added role=dialog + aria-modal=true + descriptive aria-label - Surfaced shortcut hint in clear-history button title - Added ReceiptDrawer.test.tsx covering all shortcut paths and aria attrs docs: improve inline documentation for slippage threshold assertion (leojay-net#529) - Expanded check_slippage Rustdoc with Parameters, Algorithm step-by-step, Overflow safety, and Errors sections - Updated docs/slippage-threshold.md with Architectural notes explaining why cross-multiplication and the remainder guard are used test(contract): add Soroban invariant tests for pause (leojay-net#527) - test_pause_invariant_withdraw_blocked_while_paused - test_pause_invariant_request_withdrawal_blocked_while_paused - test_pause_invariant_total_deposited_unchanged_across_pause_unpause_cycle - test_pause_invariant_only_admin_can_pause - test_pause_invariant_paused_flag_persists_across_multiple_blocked_calls Closes leojay-net#530 Closes leojay-net#529 Closes leojay-net#528 Closes leojay-net#527
Repo Avatar
Feat/chat telemetry
…ontrast feat(frontend): add accessible contrast to transaction filter chips
…t#521 leojay-net#522 feat(frontend): add auto-scroll behavior to TransactionAmountDisplay (leojay-net#522) - Attach a containerRef to the wrapper div - useEffect scrolls the element into view (smooth, nearest) whenever displayText changes, keeping the latest amount visible without manual scrolling - Add two new unit tests: scroll on mount and scroll on displayText change feat(frontend): add accessible color contrast telemetry to chatTelemetry (leojay-net#521) - Add avatar_color_check to ChatEventName union - Expose chatTelemetry.avatarColorCheck() public method that emits the new event with the payload enriched by withAccessibleAvatarContrast (contrast ratio, compliant flag, accessible text color) - Add four unit tests covering compliant dark/light backgrounds, consent guard, and enriched payload shape fix(frontend): resolve race condition in CCIPBridgeModal (leojay-net#520) - Introduce transactionHashRef kept in sync with transactionHash state so pollTransferStatus always reads the latest hash without closing over a stale value - Pass an abort signal object into each poll invocation; cleanup sets signal.aborted = true so in-flight async calls cannot mutate state after the modal closes or the effect re-runs - Add two regression tests: no state update after modal closes mid-poll, and stale slow response does not overwrite a faster terminal response docs: improve inline documentation for timelock role check (leojay-net#519) - Add full JSDoc to queue_admin_action explaining the admin role check, timelock enforcement, arguments, return value, and error variants - Add full JSDoc to execute_admin_action covering the role check rationale, off-by-one boundary semantics, arguments, and error variants - Expand set_operator docs with a dedicated 'Role separation (timelock role check)' section explaining why admin/operator must stay separate, the two boundary checks (fix leojay-net#525), and all error variants Closes leojay-net#519 Closes leojay-net#520 Closes leojay-net#521 Closes leojay-net#522
…0-521-522 feat/fix/docs: resolve issues leojay-net#519 leojay-net#520 leojay-net#521 leojay-net#522
- Add integration test for MigrationCheckEvent emission in validate_withdrawal_quota - Test verifies event is emitted when storage_version < ESCROW_STORAGE_VERSION - Closes leojay-net#510
…ch-withdrawal feat(contract): implement migration check for validate_withdrawal_quota
- Add Cmd/Ctrl+N for new chat - Add Cmd/Ctrl+H for open history - Add Cmd/Ctrl+B for open bridge modal - Add Cmd/Ctrl+Shift+C for cancel request - Add comprehensive unit tests for all keyboard shortcuts - Ensure no regressions in existing functionality Closes leojay-net#561
…rd-shortcuts feat(frontend): add keyboard shortcuts to ChatInput.tsx
- Add smooth modal entrance/exit animations with backdrop blur - Implement step-by-step slide transitions between form steps - Add animated loading states, error messages, and success indicators - Include beneficiary dropdown and save prompt animations - Animate transfer timeline and status updates - Use AnimatePresence for proper animation lifecycle management Issue: leojay-net#556
…ortcuts Feat/556 add framer-motion animation
…-527-multi-issue fix(frontend): resolve race condition in useChat.ts (leojay-net#530)
…work-status-toast feat(frontend): add network status toast to AuditTable
- Add detailed Rustdoc comments for set_limit_max_cap, get_set_limit_max_cap, and SetLimitMaxCapEvent - Clarify that the global cap prevents future set_limit calls from exceeding the ceiling - Note that existing token limits are not retroactively reduced - Update FIAT_BRIDGE_README.md to include the new admin functions - Improve DataKey::SetLimitMaxCap documentation Closes leojay-net#552
…-limit-docs docs: improve inline documentation for maximum cap limit
|
Payment note for this bounty if the PR is accepted: I cannot currently receive Stripe payouts from mainland China. Preferred payout is PayPal: hooqee@126.com. Alternate contact: chaoqiang.tian@gmail.com. If blockchain payout is supported, EVM: 0x225b4bC64E051827c069312f82fA590Ec9632209, Stellar: GDYPL56JCCHD75ZB2I5Z4FT4WEWZFRD24LEC62XQ2MBL34653XKO65LA. If Alipay is supported: chaoqiang457963@126.com. |
|
CI note: I checked the failing jobs on this PR. Local validation for this change passes ( The GitHub Actions failures appear to be the same unrelated baseline failures seen on #903:
This PR only changes |
Summary
Closes #573
Validation
npm run test:unit -- src/components/__tests__/SplitViewComparison.test.tsxnpm run typechecknpx prettier --check src/components/SplitViewComparison.tsx src/components/__tests__/SplitViewComparison.test.tsx