diff --git a/apps/workshop/.storybook/preview.tsx b/apps/workshop/.storybook/preview.tsx
index 6bf56be0..320f9061 100644
--- a/apps/workshop/.storybook/preview.tsx
+++ b/apps/workshop/.storybook/preview.tsx
@@ -5,6 +5,7 @@ import { DARK_MODE_EVENT_NAME } from "storybook-dark-mode";
import { MantineProvider, useMantineColorScheme } from "@mantine/core";
// import application theme
+import WalletProvider from "./walletProvider";
import { theme } from "../../web/src/providers/theme";
const channel = addons.getChannel();
@@ -23,6 +24,7 @@ function ColorSchemeWrapper({ children }: { children: React.ReactNode }) {
}
export const decorators = [
+ (renderStory: any) => {renderStory()},
(renderStory: any) => (
{renderStory()}
),
diff --git a/apps/workshop/.storybook/walletProvider.tsx b/apps/workshop/.storybook/walletProvider.tsx
new file mode 100644
index 00000000..41d7ac81
--- /dev/null
+++ b/apps/workshop/.storybook/walletProvider.tsx
@@ -0,0 +1,84 @@
+import { useMantineColorScheme } from "@mantine/core";
+import {
+ RainbowKitProvider,
+ connectorsForWallets,
+ darkTheme,
+ getDefaultWallets,
+ lightTheme,
+} from "@rainbow-me/rainbowkit";
+import { ThemeOptions } from "@rainbow-me/rainbowkit/dist/themes/baseTheme";
+import "@rainbow-me/rainbowkit/styles.css";
+import {
+ argentWallet,
+ ledgerWallet,
+ trustWallet,
+} from "@rainbow-me/rainbowkit/wallets";
+import { configureChains, createConfig, WagmiConfig } from "wagmi";
+import { foundry, mainnet, sepolia } from "wagmi/chains";
+import { publicProvider } from "wagmi/providers/public";
+
+// only 1 chain is enabled, based on env var
+const { chains, publicClient, webSocketPublicClient } = configureChains(
+ [foundry, mainnet, sepolia],
+ [publicProvider()],
+);
+
+const projectId = "a6265c875f8a7513ac7c52362abf434b";
+const { wallets } = getDefaultWallets({
+ appName: "CartesiScan",
+ projectId,
+ chains,
+});
+
+const appInfo = {
+ appName: "CartesiScan",
+ learnMoreUrl: "https://cartesiscan.io",
+};
+
+const connectors = connectorsForWallets([
+ ...wallets,
+ {
+ groupName: "Other",
+ wallets: [
+ argentWallet({ chains, projectId }),
+ trustWallet({ chains, projectId }),
+ ledgerWallet({ chains, projectId }),
+ ],
+ },
+]);
+
+const wagmiConfig = createConfig({
+ autoConnect: true,
+ connectors,
+ publicClient,
+ webSocketPublicClient,
+});
+
+const WalletProvider = ({ children }: { children: React.ReactNode }) => {
+ const scheme = useMantineColorScheme();
+
+ // XXX: make this match the mantine theme
+ const themeOptions: ThemeOptions = {
+ accentColor: "rgb(12, 133, 153)",
+ borderRadius: "small",
+ };
+
+ const walletTheme =
+ scheme.colorScheme == "dark"
+ ? darkTheme(themeOptions)
+ : lightTheme(themeOptions);
+
+ return (
+
+
+ {children}
+
+
+ );
+};
+
+export default WalletProvider;
diff --git a/apps/workshop/package.json b/apps/workshop/package.json
index 004f2357..df5652e3 100644
--- a/apps/workshop/package.json
+++ b/apps/workshop/package.json
@@ -14,9 +14,11 @@
"@cartesi/rollups-explorer-ui": "*",
"@mantine/core": "^7.0.0",
"@mantine/hooks": "^7.0.0",
+ "@rainbow-me/rainbowkit": "^1",
"react": "^18.2.0",
"react-dom": "^18.2.0",
- "react-icons": "^4"
+ "react-icons": "^4",
+ "wagmi": "^1"
},
"devDependencies": {
"@cartesi/tsconfig": "*",
diff --git a/apps/workshop/src/stories/ConnectButton.stories.tsx b/apps/workshop/src/stories/ConnectButton.stories.tsx
new file mode 100644
index 00000000..e423c565
--- /dev/null
+++ b/apps/workshop/src/stories/ConnectButton.stories.tsx
@@ -0,0 +1,38 @@
+import type { Meta, StoryObj } from "@storybook/react";
+
+import { ConnectButton } from "@rainbow-me/rainbowkit";
+
+const meta: Meta = {
+ component: ConnectButton,
+};
+
+export default meta;
+type Story = StoryObj;
+
+export const Default: Story = {
+ args: {},
+};
+
+export const NoBalance: Story = {
+ args: {
+ showBalance: false,
+ },
+};
+
+export const IconChainStatus: Story = {
+ args: {
+ chainStatus: "icon",
+ },
+};
+
+export const NameChainStatus: Story = {
+ args: {
+ chainStatus: "name",
+ },
+};
+
+export const NoneChainStatus: Story = {
+ args: {
+ chainStatus: "none",
+ },
+};
diff --git a/yarn.lock b/yarn.lock
index 0bc057bc..a7f9c058 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2943,7 +2943,7 @@
dependencies:
"@babel/runtime" "^7.13.10"
-"@rainbow-me/rainbowkit@^1.0.11":
+"@rainbow-me/rainbowkit@^1", "@rainbow-me/rainbowkit@^1.0.11":
version "1.0.11"
resolved "https://registry.yarnpkg.com/@rainbow-me/rainbowkit/-/rainbowkit-1.0.11.tgz#5d03a8b1f8b8d7f8b3dee14dae378574ea3e6f8b"
integrity sha512-+cm6+WUPG9iPgkfJKbvlowcrSHu266Zk20LVRsYLcmb6v29gVMHcWQvyI4T6EVC9TxNjnyq/jIlen++uiUBmmQ==