/vue-dapp

Vue library for building Dapps

Primary LanguageTypeScriptMIT LicenseMIT

Vue Dapp Logo

Vue Dapp

Vue library for building Dapps

MIT License Telegram Website

Packages 📦

Name Description Version Size
@vue-dapp/core useVueDapp & VueDappProvider Version Size
@vue-dapp/nuxt Vue Dapp Nuxt module Version Size
@vue-dapp/modal VueDappModal for a wallet modal Version Size
@vue-dapp/walletconnect WalletConnect integration Version Size
@vue-dapp/coinbase Coinbase Wallet integration Version Size

Installation

Minimum

npm install pinia @vue-dapp/core

With the wallet modal

npm install pinia @vue-dapp/core @vue-dapp/modal

Maximum

npm install pinia @vue-dapp/core @vue-dapp/modal @vue-dapp/walletconnect @vue-dapp/coinbase

Example

<script lang="ts" setup>
import { BrowserWalletConnector, VueDappProvider, type ConnWallet } from '@vue-dapp/core'
import { VueDappModal } from '@vue-dapp/modal'
import '@vue-dapp/modal/dist/style.css'

const { status, isConnected, address, chainId, error, disconnect, addConnector } = useVueDapp()

const isModalOpen = ref(false)

function onClickConnectBtn() {
	if (isConnected.value) disconnect()
	else isModalOpen.value = true
}

if (process.client) { // only when using Nuxt 3
	addConnector(new BrowserWalletConnector())
}

function handleConnect(wallet: ConnWallet) {
	console.log('handleConnect', wallet)
}

function handleDisconnect() {
	console.log('handleDisconnect')
}
</script>

<template>
	<div>
		<VueDappProvider @connect="handleConnect" @disconnect="handleDisconnect">
			<button @click="onClickConnectBtn">{{ isConnected ? 'Disconnect' : 'Connect' }}</button>

			<div>status: {{ status }}</div>
			<div>isConnected: {{ isConnected }}</div>
			<div>error: {{ error }}</div>

			<div v-if="isConnected">
				<div>chainId: {{ chainId }}</div>
				<div>address: {{ address }}</div>
			</div>

			<VueDappModal v-model="isModalOpen" dark auto-connect />
		</VueDappProvider>
	</div>
</template>

Examples

Support 🙏

0x9D75F4EbcB8e7669E59dcc27CBadC698E0F77187

MIT license

Copyright (c) 2021-present, Johnson Chen (@chnejohnson)