diff --git a/web/package.json b/web/package.json
index 796156e..eb55986 100644
--- a/web/package.json
+++ b/web/package.json
@@ -9,8 +9,7 @@
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
"check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
"test": "vitest",
- "lint": "echo TODO",
- "lint:temp": "prettier --check . && eslint .",
+ "lint": "prettier --check . && eslint .",
"format": "prettier --write ."
},
"devDependencies": {
@@ -44,7 +43,7 @@
},
"type": "module",
"dependencies": {
- "@floating-ui/dom": "1.6.5",
+ "@floating-ui/dom": "^1.6.5",
"date-fns": "^3.6.0",
"highlight.js": "11.9.0",
"mipd": "^0.0.7",
diff --git a/web/src/app.postcss b/web/src/app.postcss
index 8ef7d35..b9fb4b6 100644
--- a/web/src/app.postcss
+++ b/web/src/app.postcss
@@ -1,3 +1,5 @@
+@import url('https://fonts.googleapis.com/css2?family=Inter:wght@100;200;300;400;500;600;700;800;900&family=Roboto:wght@100&display=swap');
+
@tailwind base;
@tailwind components;
@tailwind utilities;
diff --git a/web/src/lib/components/Account.svelte b/web/src/lib/components/Account.svelte
new file mode 100644
index 0000000..0260067
--- /dev/null
+++ b/web/src/lib/components/Account.svelte
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+ Hello
+ {#await address}
+ 0x....
+ {:then result}
+ {result[0]}
+ {:catch error}
+ - {JSON.stringify(error)}
+ {/await}
+
+
+
+
+
diff --git a/web/src/lib/components/ConnectView.svelte b/web/src/lib/components/ConnectView.svelte
deleted file mode 100644
index 0d61cf7..0000000
--- a/web/src/lib/components/ConnectView.svelte
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
diff --git a/web/src/lib/components/DrawerManager.svelte b/web/src/lib/components/DrawerManager.svelte
new file mode 100644
index 0000000..e9d842d
--- /dev/null
+++ b/web/src/lib/components/DrawerManager.svelte
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+ {$drawerStore.meta.title || '(missing title)'}
+
+
+
+
+
+
+
+ {#if $drawerStore.id === 'SendTokens'}
+
+ {:else if $drawerStore.id === 'SubmitQuota'}
+
+ {:else}
+
+ {/if}
+
+
diff --git a/web/src/lib/components/Facepile.svelte b/web/src/lib/components/Facepile.svelte
new file mode 100644
index 0000000..c3d264d
--- /dev/null
+++ b/web/src/lib/components/Facepile.svelte
@@ -0,0 +1,27 @@
+
+
+
+ {#each list as item}
+
+ {/each}
+
diff --git a/web/src/lib/components/Header.svelte b/web/src/lib/components/Header.svelte
new file mode 100644
index 0000000..48d8145
--- /dev/null
+++ b/web/src/lib/components/Header.svelte
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+ Gopher Demo
+
+
+
+
+
+
+ GitHub
+
+
+
diff --git a/web/src/lib/components/Portfolio.svelte b/web/src/lib/components/Portfolio.svelte
new file mode 100644
index 0000000..5db05d2
--- /dev/null
+++ b/web/src/lib/components/Portfolio.svelte
@@ -0,0 +1,107 @@
+
+
+
+
+
+
+
Balance
+
+ {#await total}
+
+ {:then result}
+ ${result.toFixed(2)}
+ {:catch error}
+ - {JSON.stringify(error)}
+ {/await}
+
+
+
+
+
+
+
Portfolio
+
+
+
+
+
+ ASSET |
+ BALANCE |
+ DISTRIBUTION |
+
+
+
+ {#await promise}
+
+ {#each { length: 3 } as _}
+
+ |
+ |
+ |
+
+ {/each}
+ {:then data}
+ {#each data.tokens as token, i}
+ handleListClick(i)}
+ >
+
+
+
+
+
+ |
+
+ {fromWei(token.total, token.decimals)}
+ {token.symbol}
+ |
+
+
+ |
+
+ {/each}
+ {:catch error}
+ {error.message}
+ {/await}
+
+
+
+
+
diff --git a/web/src/lib/components/RequestSendModal.svelte b/web/src/lib/components/RequestSendModal.svelte
deleted file mode 100644
index d67370a..0000000
--- a/web/src/lib/components/RequestSendModal.svelte
+++ /dev/null
@@ -1,131 +0,0 @@
-
-
-{#if $modalStore[0]}
-
-{/if}
diff --git a/web/src/lib/components/ResponseSendModal.svelte b/web/src/lib/components/ResponseSendModal.svelte
deleted file mode 100644
index f16f34e..0000000
--- a/web/src/lib/components/ResponseSendModal.svelte
+++ /dev/null
@@ -1,177 +0,0 @@
-
-
-{#if $modalStore[0]}
-
-{/if}
diff --git a/web/src/lib/components/SendTokensDrawer.svelte b/web/src/lib/components/SendTokensDrawer.svelte
new file mode 100644
index 0000000..16b5962
--- /dev/null
+++ b/web/src/lib/components/SendTokensDrawer.svelte
@@ -0,0 +1,240 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {#each $drawerStore.meta.tokens.values() as token}
+
+
+ {token.name}
+
+ {/each}
+
+
+
+
+
+
+
+
+
+
+
+ Destination network
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ set custom threshold
+
+
+
+
+
+ WHITELIST A NETWORK
+
+
+ {#each balances as balance}
+
+
+
+
+ {$drawerStore.meta.networks.get(balance.chainId).name}
+
+ {fromWei(balance.balance, tokenInfo.decimals)}
+
+
+ {/each}
+
+
+
+
+
+
+
+
+
+
diff --git a/web/src/lib/components/SubmitTokensDrawer.svelte b/web/src/lib/components/SubmitTokensDrawer.svelte
new file mode 100644
index 0000000..71ccaff
--- /dev/null
+++ b/web/src/lib/components/SubmitTokensDrawer.svelte
@@ -0,0 +1,180 @@
+
+
+
+
+
+
+ {#await quota}
+ -
+
+
+ {:then response}
+ {#each response.data as data, index}
+ {@const network = $drawerStore.meta.networks.get(data.sourceChain)}
+ {@const balance = $drawerStore.meta.balances
+ .get(token.symbol)
+ .find(({ chainId }) => chainId === data.sourceChain)}
+ -
+
+
+
+
+ {fromWei(data.amount, token.decimals)}
+ {token.name} on {network.name}
+
+
+ Balance: {fromWei(balance.balance, token.decimals)}
+ {token.name}
+
+
+ Fee: {data.fee.amountUSD} USD
+
+
+
+
+ {#if !successful[index]}
+
+
+ Estimated Time {formatDuration(data.duration)}
+
+ {:else}
+
+ {/if}
+
+
+ {/each}
+ {:catch error}
+ {error.message}
+ {/await}
+
+
+
+
+
+
diff --git a/web/src/lib/components/TokenList.svelte b/web/src/lib/components/TokenList.svelte
deleted file mode 100644
index b4e107d..0000000
--- a/web/src/lib/components/TokenList.svelte
+++ /dev/null
@@ -1,85 +0,0 @@
-
-
-{#await promise}
- ...waiting
-{:then data}
-
-
-
-
-
- |
- Token |
- |
- Balance |
-
-
-
- {#each data.tokens as token, i}
- handleListClick(i)}>
- |
- {token.name} |
- |
- {fromWei(token.total, token.decimals)} |
-
- {/each}
-
-
-
-{:catch error}
- {error.message}
-{/await}
diff --git a/web/src/lib/components/Web3Modal.svelte b/web/src/lib/components/Web3Modal.svelte
deleted file mode 100644
index f5530cf..0000000
--- a/web/src/lib/components/Web3Modal.svelte
+++ /dev/null
@@ -1,51 +0,0 @@
-
-
-{#if $modalStore[0]}
-
-{/if}
diff --git a/web/src/lib/hacks.ts b/web/src/lib/hacks.ts
index e105a48..b69e59e 100644
--- a/web/src/lib/hacks.ts
+++ b/web/src/lib/hacks.ts
@@ -29,13 +29,13 @@ function getProvider() {
return storeProvider.provider;
}
-export async function hacks_getGopherData(): Promise