import type { Meta, StoryObj } from "@storybook/react";
import type { Token } from "../bridge/index.js";
import { ethereum } from "../chains/chain-definitions/ethereum.js";
import type { Chain } from "../chains/types.js";
import type { ThirdwebClient } from "../client/client.js";
import { CustomThemeProvider } from "../react/core/design-system/CustomThemeProvider.js";
import type { Theme } from "../react/core/design-system/index.js";
import { TokenBalanceRow } from "../react/web/ui/Bridge/common/TokenBalanceRow.js";
import { ETH, UNI, USDC } from "./Bridge/fixtures.js";
import { storyClient } from "./utils.js";
// Props interface for the wrapper component
interface TokenBalanceRowWithThemeProps {
client: ThirdwebClient;
token: Token;
chain: Chain;
amount: string;
onClick: (token: Token) => void;
style?: React.CSSProperties;
theme: "light" | "dark" | Theme;
}
const dummyBalanceETH: string = "1.2345";
const dummyBalanceUSDC: string = "1234.56";
const dummyBalanceLowUNI: string = "0.0012";
// Wrapper component to provide theme context
const TokenBalanceRowWithTheme = (props: TokenBalanceRowWithThemeProps) => {
const { theme, ...tokenBalanceRowProps } = props;
return (
);
};
const meta = {
args: {
amount: dummyBalanceETH,
chain: ethereum,
client: storyClient,
onClick: (_token: Token) => {},
theme: "dark",
token: ETH,
},
argTypes: {
onClick: {
action: "clicked",
description: "Callback function when token row is clicked",
},
theme: {
control: "select",
description: "Theme for the component",
options: ["light", "dark"],
},
},
component: TokenBalanceRowWithTheme,
parameters: {
docs: {
description: {
component:
"A row component that displays token balance information including token icon, symbol, chain, balance amount and fiat value. Used in bridge interfaces for token selection.",
},
},
layout: "centered",
},
tags: ["autodocs"],
title: "Bridge/TokenBalanceRow",
} satisfies Meta;
type Story = StoryObj;
export const TokenList: Story = {
args: {
theme: "light",
},
parameters: {
backgrounds: { default: "light" },
},
render: (args) => (
),
};
export const DarkTokenList: Story = {
args: {
theme: "dark",
},
parameters: {
backgrounds: { default: "dark" },
},
render: (args) => (
),
};
export default meta;