Usage

Each w3-kit component has its own import path, keeping your bundle size small and your imports explicit.

Basic Example

App.tsx
import { ConnectWalletButton } from "w3-kit/connect-wallet"
import { TokenSwapWidget } from "w3-kit/token-swap"

function App() {
  return (
    <ConnectWalletButton
      onConnect={(address) => console.log(address)}
      variant="light"
    />
  )
}

Import Paths

Every component is available from its own subpath. This lets your bundler tree-shake unused components automatically.

// Individual imports
import { ConnectWalletButton } from "w3-kit/connect-wallet"
import { NetworkSwitcher } from "w3-kit/network-switcher"
import { WalletBalance } from "w3-kit/wallet-balance"
import { TokenSwapWidget } from "w3-kit/token-swap"
import { NFTCard } from "w3-kit/nft-card"
import { SmartContractScanner } from "w3-kit/smart-contract-scanner"

TypeScript

All components are fully typed. Props interfaces are exported alongside each component so you can use them in your own types.

types.ts
import type { ConnectWalletButtonProps } from "w3-kit/connect-wallet"
import type { NFTCardProps } from "w3-kit/nft-card"

// Extend component props in your own app
interface MyWalletButton extends ConnectWalletButtonProps {
  showBalance?: boolean
}

Composing Components

Components are designed to work together. Here is a common pattern that combines wallet connection, balance display, and a swap widget.

Dashboard.tsx
import { ConnectWalletButton } from "w3-kit/connect-wallet"
import { WalletBalance } from "w3-kit/wallet-balance"
import { TokenSwapWidget } from "w3-kit/token-swap"

function Dashboard() {
  return (
    <div className="flex flex-col gap-6">
      <div className="flex items-center justify-between">
        <WalletBalance variant="compact" />
        <ConnectWalletButton variant="light" />
      </div>
      <TokenSwapWidget onSwap={async (tx) => console.log(tx)} />
    </div>
  )
}