- >;
+ theme: ConnectPlaygroundOptions["theme"];
+ onChange: (value: ConnectPlaygroundOptions["theme"]) => void;
}) {
const [search, setSearch] = useState("");
- const { connectOptions, setConnectOptions } = props;
+ const { theme, onChange } = props;
const themeObj =
- connectOptions.theme.type === "dark"
+ theme.type === "dark"
? darkTheme({
- colors: connectOptions.theme.darkColorOverrides,
+ colors: theme.darkColorOverrides,
})
: lightTheme({
- colors: connectOptions.theme.lightColorOverrides,
+ colors: theme.lightColorOverrides,
});
const colorSectionsToShow = colorSections
@@ -72,23 +70,19 @@ export function ColorFormGroup(props: {
className="size-10"
value={themeObj.colors[color.colorId]}
onChange={(value) => {
- setConnectOptions((v) => {
- const overridesKey =
- v.theme.type === "dark"
- ? "darkColorOverrides"
- : "lightColorOverrides";
+ const overridesKey =
+ theme.type === "dark"
+ ? "darkColorOverrides"
+ : "lightColorOverrides";
- return {
- ...v,
- theme: {
- ...v.theme,
- [overridesKey]: {
- ...v.theme[overridesKey],
- [color.colorId]: value,
- },
- },
- };
- });
+ const newTheme = {
+ ...theme,
+ [overridesKey]: {
+ ...theme[overridesKey],
+ [color.colorId]: value,
+ },
+ };
+ onChange(newTheme);
}}
/>
diff --git a/apps/playground-web/src/app/navLinks.ts b/apps/playground-web/src/app/navLinks.ts
index 268e57304f2..a1ce0f3f712 100644
--- a/apps/playground-web/src/app/navLinks.ts
+++ b/apps/playground-web/src/app/navLinks.ts
@@ -25,49 +25,53 @@ export const staticSidebarLinks: SidebarLink[] = [
],
},
{
- name: "Account Abstraction",
+ name: "In-App Wallet",
expanded: false,
links: [
{
- name: "Connect",
- href: "/connect/account-abstraction/connect",
+ name: "Any Auth",
+ href: "/connect/in-app-wallet",
},
{
- name: "Sponsor Gas",
- href: "/connect/account-abstraction/sponsor",
+ name: "Ecosystems",
+ href: "/connect/in-app-wallet/ecosystem",
},
{
- name: "Native AA (zkSync)",
- href: "/connect/account-abstraction/native-aa",
+ name: "Sponsor Gas",
+ href: "/connect/in-app-wallet/sponsor",
},
],
},
{
- name: "In-App Wallet",
+ name: "Account Abstraction",
expanded: false,
links: [
{
- name: "Any Auth",
- href: "/connect/in-app-wallet",
+ name: "Connect",
+ href: "/connect/account-abstraction/connect",
},
{
- name: "Ecosystems",
- href: "/connect/in-app-wallet/ecosystem",
+ name: "Sponsor Gas",
+ href: "/connect/account-abstraction/sponsor",
},
{
- name: "Sponsor Gas",
- href: "/connect/in-app-wallet/sponsor",
+ name: "Native AA (zkSync)",
+ href: "/connect/account-abstraction/native-aa",
},
],
},
{
- name: "Pay",
+ name: "Universal Bridge",
expanded: false,
links: [
{
- name: "Fund Wallet",
+ name: "UI Component",
href: "/connect/pay",
},
+ {
+ name: "Fund Wallet",
+ href: "/connect/pay/fund-wallet",
+ },
{
name: "Commerce",
href: "/connect/pay/commerce",
diff --git a/packages/thirdweb/src/react/web/ui/ConnectWallet/screens/Buy/TransactionModeScreen.tsx b/packages/thirdweb/src/react/web/ui/ConnectWallet/screens/Buy/TransactionModeScreen.tsx
index 5970ad46fbd..f49d0684539 100644
--- a/packages/thirdweb/src/react/web/ui/ConnectWallet/screens/Buy/TransactionModeScreen.tsx
+++ b/packages/thirdweb/src/react/web/ui/ConnectWallet/screens/Buy/TransactionModeScreen.tsx
@@ -6,7 +6,11 @@ import { formatNumber } from "../../../../../../utils/formatNumber.js";
import { toTokens } from "../../../../../../utils/units.js";
import type { Account } from "../../../../../../wallets/interfaces/wallet.js";
import { useCustomTheme } from "../../../../../core/design-system/CustomThemeProvider.js";
-import { fontSize, spacing } from "../../../../../core/design-system/index.js";
+import {
+ fontSize,
+ iconSize,
+ spacing,
+} from "../../../../../core/design-system/index.js";
import type { PayUIOptions } from "../../../../../core/hooks/connection/ConnectButtonProps.js";
import { useChainMetadata } from "../../../../../core/hooks/others/useChainQuery.js";
import { useWalletBalance } from "../../../../../core/hooks/others/useWalletBalance.js";
@@ -26,6 +30,7 @@ import { Button } from "../../../components/buttons.js";
import { Text } from "../../../components/text.js";
import { TokenSymbol } from "../../../components/token/TokenSymbol.js";
import { ConnectButton } from "../../ConnectButton.js";
+import { OutlineWalletIcon } from "../../icons/OutlineWalletIcon.js";
import { formatTokenBalance } from "../formatTokenBalance.js";
import {
type ERC20OrNativeToken,
@@ -95,6 +100,38 @@ export function TransactionModeScreen(props: {
return ;
}
+ if (!activeAccount) {
+ return (
+
+
+
+
+
+
+
+
+ Please connect a wallet to continue
+
+
+
+
+
+
+
+ );
+ }
+
if (transactionCostAndDataError || chainDataError) {
return (
(initialTokenAmount);
const deferredTokenAmount = useDebouncedValue(tokenAmount, 300);
+ useEffect(() => {
+ if (prefillBuy?.amount) {
+ setTokenAmount(prefillBuy.amount);
+ }
+ if (prefillBuy?.chain) {
+ setToChain(prefillBuy.chain);
+ }
+ if (prefillBuy?.token) {
+ setToToken(prefillBuy.token);
+ }
+ }, [prefillBuy?.amount, prefillBuy?.chain, prefillBuy?.token]);
+
// Destination chain and token selection -----------------------------------
const [toChain, setToChain] = useState(
// use prefill chain if available