Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
201 commits
Select commit Hold shift + click to select a range
d18f57b
feat(wallet_badge): build descriptive placeholder UI elements for emp…
Great-O Aug 26, 2026
4347e13
feat: enforce transaction signature time limit bounds (#214)
MAN7A-afk Aug 26, 2026
e26fbf4
Merge branch 'Goldii-locks:main' into main
MAN7A-afk Aug 26, 2026
70d02ab
feat(wallet): integrate multi-sig transaction helper hooks in wallet_…
MAN7A-afk Aug 26, 2026
a36716c
feat(wallet): build TransactionSignerPanel component (#222)
MAN7A-afk Aug 26, 2026
ea2c2ec
feat: implement descriptive empty state UI for dashboard jobs list
vicajohn Aug 27, 2026
b288113
feat: implement responsive design for dashboard across mobile, tablet…
vicajohn Aug 27, 2026
bf4743b
feat: implement interactive states with hover, focus, and disabled st…
vicajohn Aug 27, 2026
bbab220
feat: implement dashboard accessibility compliance (ARIA, keyboard na…
vicajohn Aug 27, 2026
bf10b56
Merge branch 'main' into feat/wallet-badge-empty-placeholder
Great-O Aug 27, 2026
e8faf27
Merge branch 'main' into feat/wallet-badge-empty-placeholder
godamongstmen897 Aug 27, 2026
305b620
fix(lint): resolve ESLint errors in WalletSelectorModal and Transacti…
MAN7A-afk Aug 27, 2026
db0377e
Merge branch 'main' into feat/222-transaction-signer-panel
MAN7A-afk Aug 27, 2026
dd99afd
faet:implement CSS micro-animations on dashboard_list elements
Aug 27, 2026
6a29a1f
feat: add accessible DarkModeSwitcher with ARIA compliance (closes #310)
SamuelStave Aug 28, 2026
38422cf
feat: add DarkModeSwitcher with premium interactive states (closes #311)
SamuelStave Aug 28, 2026
d7efbe9
feat: add DarkModeSwitcher with empty state placeholder (closes #313)
SamuelStave Aug 28, 2026
92aae61
feat: add DarkModeSwitcher base component for Storybook (closes #318)
SamuelStave Aug 28, 2026
0db4ad5
test: add a11y tests for DarkModeSwitcher (closes #310)
SamuelStave Aug 28, 2026
2cc6b56
test: add interactive states tests for DarkModeSwitcher (closes #311)
SamuelStave Aug 28, 2026
a0c22a1
test: add empty state tests for DarkModeSwitcher (closes #313)
SamuelStave Aug 28, 2026
32be981
feat: add Storybook stories for DarkModeSwitcher (closes #318)
SamuelStave Aug 28, 2026
0f77e29
test: add storybook verification tests (closes #318)
SamuelStave Aug 28, 2026
da9b279
fix(ci): regenerate package-lock.json so npm ci succeeds
Great-O Aug 28, 2026
73596ce
feat: add dark_mode_switcher component with RTL unit tests
Max-Owolabi Aug 28, 2026
ded9e6c
feat: add notification_bell with a11y compliance and validation alerts
Max-Owolabi Aug 28, 2026
08940bd
feat(loading-skeleton): responsive sizing across mobile/tablet/desktop
otsimaofficial Aug 28, 2026
2800c07
feat(loading-skeleton): CSS micro-animations on mount and pulse stagger
otsimaofficial Aug 28, 2026
cbe6f32
feat(dashboard): descriptive empty-state view for the job list
otsimaofficial Aug 28, 2026
23ac677
feat(loading-skeleton): constrain height and preserve clickability on…
otsimaofficial Aug 28, 2026
3514da8
feat(ui): add interactive hover focus and disabled states to loading …
iamTissan Aug 29, 2026
1075c45
Dispute Raise ModaL
She-ge Aug 29, 2026
7044573
feat: enforce wallet disconnect timeout bounds
She-ge Aug 29, 2026
a9573a6
feat: add Storybook interface mocks for notification_bell [closes #328]
Max-Owolabi Aug 29, 2026
01d493b
test(network_sync_checker): add RTL assertions and repair suite load
kingeligma Aug 29, 2026
feedd64
feat(network_sync_checker): format console warnings and track probe l…
kingeligma Aug 29, 2026
b16371e
feat(notification_bell): add premium interactive states
kingeligma Aug 29, 2026
226bb7c
feat(notification_bell): design empty list display views
kingeligma Aug 29, 2026
5e5029b
feat: disconnect handler warnings/spinner and responsive dispute modal
Aug 29, 2026
dc62fe7
Write React Testing Library assertions for wallet disconnect handler …
madisonsc52-del Aug 29, 2026
96f7436
[#11] feat: add notification badge for milestones approaching auto-re…
She-ge Aug 29, 2026
dd45be4
fix(lint): remove unused imports/vars and refactor effect setState
Great-O Aug 30, 2026
8463f9b
feat: add wallet_disconnect_handler component tests and fix lint error
madisonsc52-del Aug 30, 2026
ed5fb65
fix: move useMemo after activeTransactionXdr declaration
madisonsc52-del Aug 30, 2026
eccb27a
fix(#259): wallet badge mobile viewport overlay/clickability
udeachudivine-spec Aug 30, 2026
8e6251d
fix(#241): structured console errors and transaction debug tracking i…
udeachudivine-spec Aug 30, 2026
37510f4
feat: add network mismatch warnings to TransactionSigner component (#…
godamongstmen897 Aug 27, 2026
5da3b92
test(signature_timeout_alert): attach rejection handlers before advan…
kingeligma Aug 30, 2026
a25c8a9
test(signature_timeout_alert): attach rejection handlers before advan…
kingeligma Aug 30, 2026
620d756
test(signature_timeout_alert): attach rejection handlers before advan…
kingeligma Aug 30, 2026
8c0bbe6
test(signature_timeout_alert): attach rejection handlers before advan…
kingeligma Aug 30, 2026
a4e0b9b
Implement secure persistent caching for active keys in wallet_disconn…
DavisVT Aug 30, 2026
b1fc04f
fix(ci): resolve freighter-api ESM interop, fake XDR fixtures, and un…
Aug 30, 2026
22149bf
test: add React Testing Library tests for LoadingSkeleton and ButtonS…
melanindebbie Aug 31, 2026
0eb54da
Implement design tokens mapping in notification_bell (#327)
DavisVT Aug 31, 2026
89c12bb
Add dispute_raise_modal with validation messages and alerts (#334)
DavisVT Aug 31, 2026
3d8e0b0
Merge branch 'main' into feat/micro-animations
godamongstmen897 Aug 31, 2026
bef7e35
Merge branch 'main' into feat/222-transaction-signer-panel
godamongstmen897 Aug 31, 2026
fa08698
Merge branch 'main' into feat/dashboard-empty-state-ui
godamongstmen897 Aug 31, 2026
1ac45f7
Merge branch 'main' into feat/dashboard-responsive-design
godamongstmen897 Aug 31, 2026
b35fa6a
Merge branch 'main' into feat/dashboard-interactive-states
godamongstmen897 Aug 31, 2026
a9d3317
Merge branch 'main' into feat/dashboard-accessibility-compliance
godamongstmen897 Aug 31, 2026
3ea42cc
Merge branch 'main' into feat/216-transaction-signer-network-mismatch
godamongstmen897 Aug 31, 2026
5467609
Merge branch 'main' into fix/dark-mode-a11y-310
godamongstmen897 Aug 31, 2026
cc3fa7c
Merge branch 'main' into feat/dark-mode-interactive-states-311
godamongstmen897 Aug 31, 2026
c3e9790
Merge branch 'main' into feat/dark-mode-empty-states-313
godamongstmen897 Aug 31, 2026
0023cd2
Merge branch 'main' into feat/dark-mode-storybook-318
godamongstmen897 Aug 31, 2026
ac6d85a
Merge branch 'main' into feat/dark-mode-switcher-tests
godamongstmen897 Aug 31, 2026
fa448bf
Merge branch 'main' into feat/notification-bell-validation-a11y
godamongstmen897 Aug 31, 2026
302ff12
Merge branch 'main' into feat/loading-skeleton-empty-state-276
godamongstmen897 Aug 31, 2026
27cf1db
Merge branch 'main' into feat/337-dispute-raise-modal-design-tokens
godamongstmen897 Aug 31, 2026
eaf3307
Merge branch 'main' into feat/338-dispute-raise-modal-stories
godamongstmen897 Aug 31, 2026
14f5293
Merge branch 'main' into feat/234-wallet-disconnect-timeout-bounds
godamongstmen897 Aug 31, 2026
df40fd0
Merge branch 'main' into feat/disconnect-warnings-and-dispute-modal-r…
godamongstmen897 Aug 31, 2026
8188cca
Merge branch 'main' into feat/11-milestone-deadline-badge
godamongstmen897 Aug 31, 2026
e9e099d
Merge branch 'main' into feature/237-wallet-disconnect-persistent-cac…
godamongstmen897 Aug 31, 2026
6c29b1b
Merge branch 'main' into test/282-loading-spinner-skeleton
godamongstmen897 Aug 31, 2026
b115e4e
Merge branch 'main' into feature/notification-bell-design-tokens
godamongstmen897 Aug 31, 2026
1aef19e
Merge branch 'main' into feature/dispute-raise-modal-validation
godamongstmen897 Aug 31, 2026
ee45031
Merge pull request #309 from ayaoba24/feat/216-transaction-signer-net…
godamongstmen897 Aug 31, 2026
b030941
Merge pull request #343 from SamuelStave/fix/dark-mode-a11y-310
godamongstmen897 Aug 31, 2026
dee3740
Merge pull request #345 from SamuelStave/feat/dark-mode-empty-states-313
godamongstmen897 Aug 31, 2026
b4c747f
Merge pull request #347 from Max-Owolabi/feat/dark-mode-switcher-tests
godamongstmen897 Aug 31, 2026
bed6da3
Merge pull request #348 from Max-Owolabi/feat/notification-bell-valid…
godamongstmen897 Aug 31, 2026
de40d73
Merge pull request #350 from otsimaofficial/feat/loading-skeleton-emp…
godamongstmen897 Aug 31, 2026
fef8dc4
Merge pull request #362 from jeremiahelishaa180-commits/feat/disconne…
godamongstmen897 Aug 31, 2026
fd7ffcd
Merge pull request #374 from DavisVT/feature/notification-bell-design…
godamongstmen897 Aug 31, 2026
20b3e8c
Merge branch 'main' into feat/micro-animations
godamongstmen897 Aug 31, 2026
6e49283
Merge branch 'main' into feat/dark-mode-interactive-states-311
godamongstmen897 Aug 31, 2026
0a8e90c
Merge branch 'main' into feat/dark-mode-storybook-318
godamongstmen897 Aug 31, 2026
389e65a
Merge branch 'main' into feat/337-dispute-raise-modal-design-tokens
godamongstmen897 Aug 31, 2026
5f24976
Merge branch 'main' into test/282-loading-spinner-skeleton
godamongstmen897 Aug 31, 2026
edf7c94
feat: Add gas estimation warning banners to network_sync_checker
Biokes Aug 31, 2026
6f30aa4
fix: relax interactive state tests to match actual component classes
SamuelStave Aug 31, 2026
b577cc5
fix: make Storybook null handling type-safe for type check
SamuelStave Aug 31, 2026
80d1206
test(dashboard): cover the micro-animations this PR adds
godamongstmen897 Aug 31, 2026
39c375b
Merge branch 'main' into Write-React-Testing-Library-assertions-for-w…
madisonsc52-del Aug 31, 2026
081fc81
Merge pull request #341 from mathstickz/feat/micro-animations
godamongstmen897 Aug 31, 2026
3829359
fix: remove false-positive opacity check (disabled:opacity-50 contain…
SamuelStave Aug 31, 2026
79709bf
Merge branch 'main' into feat/dark-mode-interactive-states-311
godamongstmen897 Aug 31, 2026
275bbc1
Merge branch 'main' into feat/dark-mode-storybook-318
godamongstmen897 Aug 31, 2026
e9d4594
Merge branch 'main' into feat/337-dispute-raise-modal-design-tokens
godamongstmen897 Aug 31, 2026
077e977
Merge branch 'main' into Write-React-Testing-Library-assertions-for-w…
godamongstmen897 Aug 31, 2026
cb13fdf
Merge branch 'main' into test/282-loading-spinner-skeleton
godamongstmen897 Aug 31, 2026
5e0b96f
Merge branch 'main' into feature/network-sync-gas-warning
godamongstmen897 Aug 31, 2026
d1b30b8
Merge pull request #344 from SamuelStave/feat/dark-mode-interactive-s…
godamongstmen897 Aug 31, 2026
5717cc3
fix: remove @storybook/test import (module not found)
SamuelStave Aug 31, 2026
ac8bdf6
Merge remote-tracking branch 'pr/377' into work-377
godamongstmen897 Aug 31, 2026
aecc8f8
fix: avoid JSX Story type error
SamuelStave Aug 31, 2026
bbbd845
fix: correct container mock for type check
SamuelStave Aug 31, 2026
0c45f1b
test(network-sync): use vitest globals and spies
godamongstmen897 Aug 31, 2026
c1d0526
Merge remote-tracking branch 'pr/377' into work-377
godamongstmen897 Aug 31, 2026
4541d17
Merge branch 'main' into feat/dark-mode-storybook-318
godamongstmen897 Aug 31, 2026
69f8b10
Merge branch 'main' into feat/337-dispute-raise-modal-design-tokens
godamongstmen897 Aug 31, 2026
e82bb02
Merge branch 'main' into Write-React-Testing-Library-assertions-for-w…
godamongstmen897 Aug 31, 2026
ae3a266
Merge branch 'main' into test/282-loading-spinner-skeleton
godamongstmen897 Aug 31, 2026
79bf438
Merge branch 'main' into feature/network-sync-gas-warning
godamongstmen897 Aug 31, 2026
605b648
Merge pull request #377 from Biokes/feature/network-sync-gas-warning
godamongstmen897 Aug 31, 2026
b725f38
fix: rewrite stories test to follow wallet-badge pattern (lasting sol…
SamuelStave Aug 31, 2026
ec9389f
feat(dashboard): add the EmptyStateCard this PR renders
godamongstmen897 Aug 31, 2026
1ac1f10
Merge branch 'main' into feat/dark-mode-storybook-318
godamongstmen897 Aug 31, 2026
774c868
Merge branch 'main' into feat/337-dispute-raise-modal-design-tokens
godamongstmen897 Aug 31, 2026
859886f
Merge branch 'main' into Write-React-Testing-Library-assertions-for-w…
godamongstmen897 Aug 31, 2026
f7b0afc
Merge branch 'main' into test/282-loading-spinner-skeleton
godamongstmen897 Aug 31, 2026
a18f3d0
Merge pull request #303 from vicajohn/feat/dashboard-empty-state-ui
godamongstmen897 Aug 31, 2026
98ff6d5
Merge pull request #346 from SamuelStave/feat/dark-mode-storybook-318
godamongstmen897 Aug 31, 2026
4c13459
Merge branch 'refs/heads/pr/364' into work-364
godamongstmen897 Aug 31, 2026
e26b7b8
Merge main into #364 and drop duplicated conflict residue
godamongstmen897 Aug 31, 2026
4ddb097
Merge pull request #364 from madisonsc52-del/Write-React-Testing-Libr…
godamongstmen897 Aug 31, 2026
5269ed2
Merge branch 'refs/heads/pr/355' into work-355
godamongstmen897 Aug 31, 2026
e7a3ebf
Merge main into #355 and render the surfaces its assertions target
godamongstmen897 Aug 31, 2026
944aa3d
Merge pull request #355 from She-ge/feat/337-dispute-raise-modal-desi…
godamongstmen897 Aug 31, 2026
2ed1c9d
Merge branch 'refs/heads/pr/372' into work-372
godamongstmen897 Aug 31, 2026
31f7a91
Merge main into #372 and retarget assertions at the design tokens
godamongstmen897 Aug 31, 2026
a80f530
Merge pull request #372 from melanindebbie/test/282-loading-spinner-s…
godamongstmen897 Aug 31, 2026
ea95181
Merge main into #349 and apply responsive sizing over the design tokens
godamongstmen897 Aug 31, 2026
97efdce
Merge pull request #349 from otsimaofficial/feat/loading-skeleton-res…
godamongstmen897 Aug 31, 2026
40304db
Merge main into #351 and apply the mount/stagger animations
godamongstmen897 Aug 31, 2026
356ed69
Merge pull request #351 from otsimaofficial/feat/loading-skeleton-ani…
godamongstmen897 Aug 31, 2026
29ad57c
Merge main into #352 and add the mobile height cap
godamongstmen897 Aug 31, 2026
204e882
Merge pull request #352 from otsimaofficial/feat/loading-skeleton-mob…
godamongstmen897 Aug 31, 2026
b72ea18
Merge main into #354 and add the interactive/disabled states
godamongstmen897 Aug 31, 2026
5b761d3
Merge pull request #354 from iamTissan/feat/loading-spinner-skeleton-…
godamongstmen897 Aug 31, 2026
4034f48
fix(#322): add responsive sizing to notification_bell
zipporahgeorge88-oss Aug 31, 2026
799df70
fix(#316): add mobile overlay wrapper for dark_mode_switcher
zipporahgeorge88-oss Aug 31, 2026
fa7676c
fix(#312): add responsive sizing to dark_mode_switcher
zipporahgeorge88-oss Aug 31, 2026
5964173
Merge main into #304, combining responsive padding with the row anima…
godamongstmen897 Aug 31, 2026
0986e9c
Merge pull request #304 from vicajohn/feat/dashboard-responsive-design
godamongstmen897 Aug 31, 2026
b0d138b
Merge main into #305, unioning the job row's interaction classes
godamongstmen897 Aug 31, 2026
f794522
Merge pull request #305 from vicajohn/feat/dashboard-interactive-states
godamongstmen897 Aug 31, 2026
24b0165
fix(#322): correct bell glyph encoding for responsive notification_bell
zipporahgeorge88-oss Aug 31, 2026
3f29e72
Merge pull request #380 from zipporahgeorge88-oss/fix/dark-switcher-m…
godamongstmen897 Aug 31, 2026
85df758
Merge main into #306 and retarget queries at the new ARIA semantics
godamongstmen897 Aug 31, 2026
474d18e
feat: add Storybook stories for LoadingSkeleton (closes #281)
esthertitilayo-dev Aug 31, 2026
4b50404
Merge pull request #306 from vicajohn/feat/dashboard-accessibility-co…
godamongstmen897 Aug 31, 2026
cea8fd6
Merge pull request #378 from zipporahgeorge88-oss/fix/notification-be…
godamongstmen897 Aug 31, 2026
19e97d1
Merge branch 'main' into fix/dark-switcher-responsive
godamongstmen897 Aug 31, 2026
5f2a333
Merge main into #357, keeping the loader wrapper around the timeout call
godamongstmen897 Aug 31, 2026
a2bddfd
Merge pull request #357 from She-ge/feat/234-wallet-disconnect-timeou…
godamongstmen897 Aug 31, 2026
96b0bfe
Merge main into #366
godamongstmen897 Aug 31, 2026
05a7a8e
Merge pull request #366 from She-ge/feat/11-milestone-deadline-badge
godamongstmen897 Aug 31, 2026
cf2870b
Merge main into #371 and make the active-key sanitizing reachable
godamongstmen897 Aug 31, 2026
7f1d527
Merge pull request #371 from DavisVT/feature/237-wallet-disconnect-pe…
godamongstmen897 Aug 31, 2026
d6fac62
Merge main into #370 and settle the logging levels across suites
godamongstmen897 Aug 31, 2026
08e9ec6
Merge pull request #370 from udeachudivine-spec/fix/issue-241-wallet-…
godamongstmen897 Aug 31, 2026
f212b53
chore: re-trigger CI for PR #379
zipporahgeorge88-oss Aug 31, 2026
5ca2e46
chore: update README for design tokens
zipporahgeorge88-oss Aug 31, 2026
176a7ea
Merge main into #375 and extend the existing modal for its contract
godamongstmen897 Aug 31, 2026
8812eb1
Merge pull request #375 from DavisVT/feature/dispute-raise-modal-vali…
godamongstmen897 Aug 31, 2026
d213d74
Merge branch 'main' into feat/wallet-badge-empty-placeholder
Great-O Aug 31, 2026
8e0773b
Merge branch 'main' into fix/dark-switcher-design-tokens
godamongstmen897 Aug 31, 2026
49fdc90
Merge branch 'main' into fix/dark-switcher-responsive
godamongstmen897 Aug 31, 2026
d5b375a
Merge pull request #379 from zipporahgeorge88-oss/fix/dark-switcher-d…
godamongstmen897 Aug 31, 2026
810c1f5
Merge pull request #381 from zipporahgeorge88-oss/fix/dark-switcher-r…
godamongstmen897 Aug 31, 2026
323976a
Merge branch 'main' into feat/loading-skeleton-stories
godamongstmen897 Aug 31, 2026
0247d0c
chore: retrigger CI
Great-O Aug 31, 2026
eb9b7a7
Merge pull request #382 from esthertitilayo-dev/feat/loading-skeleton…
godamongstmen897 Aug 31, 2026
2a1c591
#336 Handle mobile viewports navigation styling in dispute_raise_modal
josephinejose-alt Aug 31, 2026
3bb742f
Merge branch 'main' into feature/dispute-modal-mobile-overlay-wrappers
josephinejose-alt Aug 31, 2026
73455e4
Merge main into #356
godamongstmen897 Aug 31, 2026
c11e364
Merge pull request #356 from She-ge/feat/338-dispute-raise-modal-stories
godamongstmen897 Aug 31, 2026
37d15ec
Merge branch 'refs/heads/pr/289' into work-289
godamongstmen897 Aug 31, 2026
c9265cf
Merge main into #289 and fold its placeholder work into the shared badge
godamongstmen897 Aug 31, 2026
396c3e0
Merge branch 'pr289-fresh' into work-289
godamongstmen897 Aug 31, 2026
f596ee4
Restore main's package-lock.json on #289
godamongstmen897 Aug 31, 2026
a4c9334
Merge remote-tracking branch 'upstream/main' into fix/161-format-cons…
kingeligma Aug 31, 2026
cf9eb82
Merge pull request #289 from Great-O/feat/wallet-badge-empty-placeholder
godamongstmen897 Aug 31, 2026
2e943ab
Merge main into #358, keeping the shared refactors main already carries
godamongstmen897 Aug 31, 2026
93c458f
Merge pull request #358 from kingeligma/fix/162-write-react-testing-l…
godamongstmen897 Aug 31, 2026
6a21e1b
Merge remote-tracking branch 'upstream/main' into fix/321-premium-int…
kingeligma Aug 31, 2026
d96d83f
Merge main into #359
godamongstmen897 Aug 31, 2026
610617b
Merge remote-tracking branch 'upstream/main' into fix/323-design-empt…
kingeligma Aug 31, 2026
a5ffc82
Merge pull request #359 from kingeligma/fix/161-format-console-errors…
godamongstmen897 Aug 31, 2026
5d53468
Merge branch 'main' into fix/321-premium-interactive-states-for-notif…
godamongstmen897 Aug 31, 2026
3bb9ef3
Merge pull request #360 from kingeligma/fix/321-premium-interactive-s…
godamongstmen897 Aug 31, 2026
b9a790b
Merge branch 'main' into fix/323-design-empty-list-views-for-notifica…
godamongstmen897 Aug 31, 2026
d16c14c
Merge pull request #361 from kingeligma/fix/323-design-empty-list-vie…
godamongstmen897 Aug 31, 2026
eeecea1
Merge branch 'refs/heads/pr/383' into work-383
godamongstmen897 Aug 31, 2026
bcf10d7
Merge main into #383 and wire the overlay wrapper into the modal
godamongstmen897 Aug 31, 2026
3485ecf
Merge pull request #383 from josephinejose-alt/feature/dispute-modal-…
godamongstmen897 Aug 31, 2026
61ff89d
Merge main into #301 and derive the panel's parse state
godamongstmen897 Aug 31, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
{
"typescript.autoClosingTags": false
}
193 changes: 193 additions & 0 deletions GAS_ESTIMATION_WARNING_IMPLEMENTATION.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,193 @@
# Gas Estimation Warning Banner Implementation

## Overview

This document describes the implementation of gas estimation error warning banners in `network_sync_checker` module as requested in issue #160.

## Changes Made

### 1. Core Module Updates (`app/lib/network_sync_checker.ts`)

Added gas estimation warning support with the following new exports:

#### Types

- **`NetworkSyncSimulationResult`**: Interface for simulation results from Soroban RPC
- `fee`: Estimated fee in stroops (1 XLM = 10_000_000 stroops)
- `error`: Optional error string from simulation response
- `simulationError`: Raw simulation error object when RPC reports failure

- **`NetworkSyncGasWarningState`**: Warning state derived from simulation results
- `hasWarning`: Whether any warning condition is present
- `highFee`: Whether fee exceeds threshold
- `simulationError`: Whether simulation reported an error
- `warningMessage`: User-facing warning message (null if no warning)

#### Constants

- **`HIGH_FEE_THRESHOLD_STROOPS = 1_000_000`**: Fee ceiling (0.1 XLM) above which high-fee warnings are emitted

#### Functions

- **`checkSimulationFeeWarning(result: NetworkSyncSimulationResult): NetworkSyncGasWarningState`**
- Inspects simulation results for warnings
- Prioritizes simulation errors over high-fee warnings
- Returns comprehensive warning state

- **`warnOnSimulationFee(result: NetworkSyncSimulationResult, options?: { txId?: string }): NetworkSyncGasWarningState`**
- Logs warnings to console when detected
- Includes transaction ID in logs when provided
- Returns warning state for caller consumption

- **`warnOnNetworkSyncSimulation(result: NetworkSyncSimulationResult, showToast: SyncToastHandler): NetworkSyncGasWarningState`**
- Displays toast warnings to users during network sync operations
- Integrates with existing toast system
- Returns warning state

### 2. Warning Banner Component (`app/components/NetworkSyncGasWarningBanner.tsx`)

New client-side React component that:
- Accepts `simulation` prop (nullable `NetworkSyncSimulationResult`)
- Renders warning banner when simulation contains errors or high fees
- Uses consistent warning theme with other banner components
- Includes accessibility attributes (`role="alert"`)
- Supports custom className for styling flexibility

### 3. Test Coverage

#### Unit Tests (`__tests__/network_sync_checker_gas.test.ts`)

Comprehensive tests covering:
- Normal fee scenarios (no warning)
- High-fee detection and messaging
- Simulation error string handling
- Simulation error object handling
- Priority handling (simulation errors over high fees)
- Console logging functionality
- Toast notification integration

#### Component Tests (`__tests__/NetworkSyncGasWarningBanner.test.tsx`)

Component behavior tests covering:
- Null simulation handling
- Normal fee rendering (no banner)
- High-fee warning display
- Simulation error display
- Custom className application
- Theme class verification
- Accessibility attributes

## Usage Examples

### Basic Usage in Network Sync Operations

```typescript
import {
checkSimulationFeeWarning,
warnOnNetworkSyncSimulation,
type NetworkSyncSimulationResult,
} from "@/app/lib/network_sync_checker";
import { useToast } from "@/app/context/ToastContext";

function MyComponent() {
const { showToast } = useToast();

async function performNetworkSync() {
// Get simulation result from Soroban RPC
const simulation: NetworkSyncSimulationResult = {
fee: 1500000, // 0.15 XLM
error: null,
};

// Check and display warnings
const warningState = warnOnNetworkSyncSimulation(simulation, showToast);

if (warningState.hasWarning) {
console.log("Warning detected:", warningState.warningMessage);
// Handle warning appropriately
}
}
}
```

### Using the Banner Component

```tsx
import NetworkSyncGasWarningBanner from "@/app/components/NetworkSyncGasWarningBanner";
import type { NetworkSyncSimulationResult } from "@/app/lib/network_sync_checker";

function TransactionPage() {
const [simulation, setSimulation] = useState<NetworkSyncSimulationResult | null>(null);

// After getting simulation result from RPC
useEffect(() => {
async function simulate() {
const result = await sorobanRpc.simulateTransaction(tx);
setSimulation({
fee: result.minResourceFee,
error: result.error,
simulationError: result.simulationError,
});
}
simulate();
}, [tx]);

return (
<div>
<NetworkSyncGasWarningBanner simulation={simulation} />
{/* Rest of your component */}
</div>
);
}
```

### Programmatic Warning Checks

```typescript
import { checkSimulationFeeWarning } from "@/app/lib/network_sync_checker";

// Check without side effects
const simulation = { fee: 2000000 };
const state = checkSimulationFeeWarning(simulation);

if (state.highFee) {
console.warn("High fee detected:", state.warningMessage);
}

if (state.simulationError) {
console.error("Simulation failed:", state.warningMessage);
}
```

## Design Patterns

The implementation follows established patterns from existing wallet connectors:

1. **Consistent Interface**: Mirrors `FreighterSimulationResult` and `LedgerSimulationResult` interfaces
2. **Warning State Pattern**: Uses same structure as `checkSimulationFeeWarning` in other modules
3. **Banner Component Pattern**: Follows same design as `FreighterGasWarningBanner` and `LedgerGasWarningBanner`
4. **Theme Consistency**: Uses warning theme colors (`bg-warning/40`, `text-warning-soft`, etc.)

## Integration Points

The new functionality integrates with:

- **Toast System**: Via `SyncToastHandler` type from `ToastContext`
- **Stellar SDK**: Uses existing imports from `@stellar/stellar-sdk`
- **Warning Theme**: Follows Tailwind CSS warning color conventions
- **Test Infrastructure**: Uses Vitest and React Testing Library

## Files Modified

1. `app/lib/network_sync_checker.ts` - Added gas estimation warning functions
2. `app/components/NetworkSyncGasWarningBanner.tsx` - New banner component (created)
3. `__tests__/network_sync_checker_gas.test.ts` - Unit tests (created)
4. `__tests__/NetworkSyncGasWarningBanner.test.tsx` - Component tests (created)

## Compliance

- **TypeScript**: All code is fully typed with no `any` types
- **Accessibility**: Banner includes `role="alert"` for screen readers
- **Code Style**: Follows existing codebase conventions
- **Documentation**: JSDoc comments on all exported functions and types
- **Testing**: Comprehensive test coverage matching existing test patterns
89 changes: 89 additions & 0 deletions PR_INFO.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
# PR Title

feat: Add gas estimation warning banners to network_sync_checker

# PR Description

## Summary

This PR implements gas estimation error warning banners in the `network_sync_checker` module, enabling users to see simulation errors and high fee warnings during network sync operations.

## Changes

### Core Module (`app/lib/network_sync_checker.ts`)

Added comprehensive gas estimation warning support:
- **New Types**: `NetworkSyncSimulationResult` and `NetworkSyncGasWarningState` interfaces
- **New Constant**: `HIGH_FEE_THRESHOLD_STROOPS = 1_000_000` (0.1 XLM)
- **New Functions**:
- `checkSimulationFeeWarning()` - Inspects simulation results and returns warning state
- `warnOnSimulationFee()` - Logs warnings to console with optional transaction ID
- `warnOnNetworkSyncSimulation()` - Displays toast warnings to users

### Banner Component (`app/components/NetworkSyncGasWarningBanner.tsx`)

New React component that:
- Displays warnings when simulation results exceed fee thresholds or contain errors
- Follows existing banner component patterns (Freighter, Ledger, Albedo)
- Includes accessibility attributes (`role="alert"`)
- Uses consistent warning theme styling

### Test Coverage

- **Unit Tests** (`__tests__/network_sync_checker_gas.test.ts`): 10 test cases covering all warning scenarios
- **Component Tests** (`__tests__/NetworkSyncGasWarningBanner.test.tsx`): 7 test cases for banner rendering and behavior

## Implementation Details

The implementation mirrors the established pattern from `freighter_connector` and `ledger_usb_bridge`:
- Same interface structure for simulation results
- Same warning state derivation logic
- Same threshold value (1M stroops / 0.1 XLM)
- Consistent error message formatting

## Usage Example

```typescript
import {
warnOnNetworkSyncSimulation,
type NetworkSyncSimulationResult,
} from "@/app/lib/network_sync_checker";

// During network sync operations
const simulation: NetworkSyncSimulationResult = {
fee: 1500000,
error: null,
};

const warningState = warnOnNetworkSyncSimulation(simulation, showToast);

if (warningState.hasWarning) {
// Handle warning appropriately
}
```

## Testing

All tests follow the existing test patterns and conventions:
- Uses Vitest and React Testing Library
- Includes comprehensive edge case coverage
- Tests both success and error scenarios

## Documentation

Added comprehensive implementation documentation in `GAS_ESTIMATION_WARNING_IMPLEMENTATION.md` including:
- Overview of changes
- API documentation
- Usage examples
- Design patterns
- Integration points

## Files Changed

- Modified: `app/lib/network_sync_checker.ts`
- Added: `app/components/NetworkSyncGasWarningBanner.tsx`
- Added: `__tests__/network_sync_checker_gas.test.ts`
- Added: `__tests__/NetworkSyncGasWarningBanner.test.tsx`
- Added: `GAS_ESTIMATION_WARNING_IMPLEMENTATION.md` (documentation)

Closes #160
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,3 +38,6 @@ NEXT_PUBLIC_CONTRACT_ID=CDD5WKK3WT3QVKXMXTJNDIXE4T73FK6GGXDSD6UTJAH6YYZU52SQ4MUH

- `https://github.com/Goldii-locks/escrow-contract` — Soroban smart contract
- Update README with latest progress


Design tokens integration for dark mode switcher.
Loading
Loading