Examples
This page provides practical examples for integrating the Router OGA Swap/Bridge Widget in different frameworks and scenarios.
Basic Examples
Sidebar Layout
Perfect for sidebars or smaller spaces:
<iframe
src="https://app.routerprotocol.com/?widget=true&apiKey=YOUR_API_KEY&mode=dark"
width="400"
height="500"
frameborder="0"
allow="clipboard-read; clipboard-write"
></iframe>
Full-Width Layout
Full-width layout for dedicated swap pages:
<iframe
src="https://app.routerprotocol.com/?widget=true&apiKey=YOUR_API_KEY&mode=light"
width="100%"
height="700"
frameborder="0"
allow="clipboard-read; clipboard-write"
></iframe>
Modal/Overlay Layout
Modal or overlay implementation:
<iframe
src="https://app.routerprotocol.com/?widget=true&apiKey=YOUR_API_KEY&primaryColor=b82877&cardBorderRadius=16px&buttonBorderRadius=12px"
width="100%"
height="100%"
frameborder="0"
allow="clipboard-read; clipboard-write"
></iframe>
Framework Examples
React
Basic React Component
import { useState } from 'react';
function SwapWidget() {
const [apiKey] = useState('YOUR_API_KEY');
const [mode] = useState('dark');
const [primaryColor] = useState('b82877');
const widgetUrl = `https://app.routerprotocol.com/?widget=true&apiKey=${apiKey}&mode=${mode}&primaryColor=${primaryColor}`;
return (
<div className="widget-container">
<iframe
src={widgetUrl}
width="100%"
height="600"
frameBorder="0"
allow="clipboard-read; clipboard-write"
style={{ border: 'none', borderRadius: '12px' }}
title="Router OGA Swap Widget"
/>
</div>
);
}
export default SwapWidget;
React with Environment Variables
import { useState } from 'react';
function SwapWidget() {
const apiKey = process.env.REACT_APP_ROUTER_API_KEY;
const [mode] = useState('dark');
const [primaryColor] = useState('b82877');
const [integrator] = useState('your-app-name');
const params = new URLSearchParams({
widget: 'true',
apiKey,
mode,
primaryColor,
integrator,
});
return (
<iframe
src={`https://app.routerprotocol.com/?${params.toString()}`}
width="100%"
height="600"
frameBorder="0"
allow="clipboard-read; clipboard-write"
title="Router OGA Swap Widget"
/>
);
}
React with Dynamic Configuration
import { useState, useMemo } from 'react';
function SwapWidget({ config }) {
const [apiKey] = useState('YOUR_API_KEY');
const widgetUrl = useMemo(() => {
const params = new URLSearchParams({
widget: 'true',
apiKey,
mode: config.mode || 'dark',
});
if (config.primaryColor) {
params.append('primaryColor', config.primaryColor);
}
if (config.backgroundColor) {
params.append('backgroundColor', config.backgroundColor);
}
if (config.cardBorderRadius) {
params.append('cardBorderRadius', config.cardBorderRadius);
}
if (config.buttonBorderRadius) {
params.append('buttonBorderRadius', config.buttonBorderRadius);
}
if (config.integrator) {
params.append('integrator', config.integrator);
}
return `https://app.routerprotocol.com/?${params.toString()}`;
}, [apiKey, config]);
return (
<iframe
src={widgetUrl}
width="100%"
height="600"
frameBorder="0"
allow="clipboard-read; clipboard-write"
title="Router OGA Swap Widget"
/>
);
}
Vue.js
Basic Vue Component
<template>
<div class="widget-container">
<iframe
:src="widgetUrl"
width="100%"
height="600"
frameborder="0"
allow="clipboard-read; clipboard-write"
title="Router OGA Swap Widget"
/>
</div>
</template>
<script>
export default {
name: 'SwapWidget',
data() {
return {
apiKey: 'YOUR_API_KEY',
mode: 'dark',
primaryColor: 'b82877',
};
},
computed: {
widgetUrl() {
return `https://app.routerprotocol.com/?widget=true&apiKey=${this.apiKey}&mode=${this.mode}&primaryColor=${this.primaryColor}`;
},
},
};
</script>
Vanilla JavaScript
<!DOCTYPE html>
<html>
<head>
<title>Router OGA Widget</title>
<style>
.widget-container {
max-width: 600px;
margin: 0 auto;
border-radius: 12px;
overflow: hidden;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
}
.widget-container iframe {
border: none;
display: block;
width: 100%;
height: 600px;
}
</style>
</head>
<body>
<div class="widget-container">
<iframe
id="router-widget"
width="100%"
height="600"
frameborder="0"
allow="clipboard-read; clipboard-write"
title="Router OGA Swap Widget"
></iframe>
</div>
<script>
const apiKey = 'YOUR_API_KEY';
const mode = 'dark';
const primaryColor = 'b82877';
const widgetUrl = `https://app.routerprotocol.com/?widget=true&apiKey=${apiKey}&mode=${mode}&primaryColor=${primaryColor}`;
document.getElementById('router-widget').src = widgetUrl;
</script>
</body>
</html>
Advanced Examples
With Node Selection
<iframe
src="https://app.routerprotocol.com/?widget=true&apiKey=YOUR_API_KEY&mode=light&nodes=relay,deBridge,stargate"
width="100%"
height="700"
frameborder="0"
allow="clipboard-read; clipboard-write"
></iframe>
With Full Customization
<iframe
src="https://app.routerprotocol.com/?widget=true&apiKey=YOUR_API_KEY&mode=dark&primaryColor=b82877&backgroundColor=1a1a1a&textColorPrimary=ffffff&textColorSecondary=cccccc&cardBorderRadius=16px&buttonBorderRadius=12px&showHeader=true&integrator=my-app"
width="100%"
height="600"
frameborder="0"
allow="clipboard-read; clipboard-write"
></iframe>
Custom Theme Configuration
<iframe
src="https://app.routerprotocol.com/?widget=true&apiKey=YOUR_API_KEY&primaryColor=b82877&backgroundColor=1a1a1a&textColorPrimary=ffffff&textColorSecondary=cccccc&cardBorderRadius=16px&buttonBorderRadius=12px"
width="100%"
height="600"
frameborder="0"
allow="clipboard-read; clipboard-write"
></iframe>
Next Steps
- Review Configuration options
- Learn about Customization options
- Check the API Reference for backend integration