Integrate via CDN / Script Tag
To get more options for configuring Elements on your dApp you can integrate it using JS and the script tag.
Usually when you include script tags in your HTML, it's in the document's head. But we recommend adding this script tag in the document's body.
Setup Script and Stylesheet
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Your Superb dApp</title>
</head>
<body>
<!-- Your dApp's markup -->
<div>
Your dApp Here
</div>
<!-- Add the leap-ui class to a parent -->
<div class="leap-ui" id="leap-elements-container"></div>
<!-- Add this stylesheet to load styles -->
<link
rel="stylesheet"
href="https://unpkg.com/@leapwallet/elements@latest/dist/umd/style.css"
/>
<!-- Add this script to load elements -->
<script
defer
src="https://unpkg.com/@leapwallet/elements@latest/dist/umd/main.js"
></script>
</body>
</html>Render Elements
The script creates a property called LeapElements on the window object.
Know when window.LeapElements is ready
Since elements served via a CDN is a 3MB JS file (gzipped + minified) it can take a while to load. Due to this the dApp may try to access window.LeapElements before the script has loaded.
To combat this issue, elements fires @leapwallet/elements:load event when it's ready to be used.
let isElementsReady = false
// 1. Check if window.LeapElements is defined
if (window.LeapElements !== undefined) {
isElementsReady = true
}
// 2. Add an event listener to get notified when Elements is ready to be used
window.addEventListener('@leapwallet/elements:load', () => {
isElementsReady = true
})
Calling the mountElements method
mountElements methodOnce Elements has loaded, you can call the LeapElements.mountElements method to render the component of your choice. Let's take a deeper look into the method
The mountElements method
Here's a minimal example of how to render the Fiat On-ramp component, with EUR as the source currency and NTRN as the destination token as defaults
const { mountElements, WalletType, BRIDGES } = window.LeapElements;
// to render the elements component, call the mountElements method
mountElements({
elementsRoot: "#leap-elements-container",
connectWallet: () => {},
connectedWalletType: WalletType.LEAP,
element: {
name: "fiat-on-ramp",
props: {
title: "Buy NTRN",
defaultValues: {
currency: "EUR",
destinationChainId: "neutron-1",
destinationAsset: "untrn"
}
}
}
});It accepts a single object with the following properties -
element-required
it's an object with the following two properties
nameIt can be one of these -
["multi-view","aggregated-swaps","ibc-swaps","fiat-on-ramp","ibc-transfer"]
elementsRootstringoptional - defaults to body
CSS selector for the DOM element where LeapElements will be mounted
connectWallet() => voidrequired
a callback to trigger the wallet connection flow of your dApp
connectedWalletTypeWalletType | undefinedrequired - if no wallet is connected, it should be undefined
the wallet that is currently connected to your dApp, it will be used by elements to get addresses, sign transactions, etc...
primaryChainIdstringrequired
The primary chain your dApp's user will connect to
skipClientIdstringoptional
specify a client ID to differentiate between various clients
RECOMMENDED to set
leapIntegratorIdstringoptional
specify an integrator ID - you can get this from [email protected]
RECOMMENDED to set
enableCachingbooleanoptional - defaults to true
enable data caching which gives a substantially faster experience to users
bridgesBRIDGES[]optional - defaults to all bridges
restrict bridges to the specified array - reference
swapVenues{ chain_id: string; name: string }[]optional - defaults to all swap venues
restrict swap venues to the specified array - reference
enableSmartSwapbooleanoptional - defaults to true
allow smart swaps - gives better rates, low fees and reliable routes - reference
walletConnectOptionsoptional
Wallet Connect (WC) options
capsuleConfigoptional
Social Login options
enableGoFast
boolean
Default - true
enables skip's go fast transfer protocol
Typescript Support
If you're using TS, you can install @leapwallet/elements-umd-types from NPM and import it in your project.
yarn add --save-dev @leapwallet/elements-umd-typesIt will define the LeapElements object on window with all relevant properties and enable auto-complete.
It will also expose all types you might need!
import { WalletType, TabsConfig } from '@leapwallet/elements-umd-types'Theme Customisations
You can refer to our theming documentation for more information about theme customisations.
Last updated