diff --git a/docs/src/lib/assets/transaction-preview.gif b/docs/src/lib/assets/transaction-preview.gif
new file mode 100644
index 000000000..938a9d1df
Binary files /dev/null and b/docs/src/lib/assets/transaction-preview.gif differ
diff --git a/docs/src/lib/assets/transaction-preview.png b/docs/src/lib/assets/transaction-preview.png
new file mode 100644
index 000000000..7c34e7ca3
Binary files /dev/null and b/docs/src/lib/assets/transaction-preview.png differ
diff --git a/docs/src/routes/docs/[...1]overview/[...1]introduction.md b/docs/src/routes/docs/[...1]overview/[...1]introduction.md
index 3ed81bdff..23f5ecfa1 100644
--- a/docs/src/routes/docs/[...1]overview/[...1]introduction.md
+++ b/docs/src/routes/docs/[...1]overview/[...1]introduction.md
@@ -53,10 +53,10 @@ Using a Blocknative API key with web3-onboard on the free plan will allow you to
This step is not required to use web3-onboard. You can skip to the **Quickstart** step below if you want to use web3-onboard without API services or if you already have a Blocknative account & API key.
**Setup your Account**
-Go to the Account Dashboard at https://explorer.blocknative.com/account and setup an account with an email address. You will receive an email to confirm your account.
+Go to the Account Dashboard at [https://explorer.blocknative.com/account](https://explorer.blocknative.com/account) and setup an account with an email address. You will receive an email to confirm your account.
**Create your API Key**
-On the Account Dashboard at https://explorer.blocknative.com/account, create an API key with your choice of name or use/rename the Default Key. Consider using different API keys for development, staging, and production releases.
+On the Account Dashboard at [https://explorer.blocknative.com/account](https://explorer.blocknative.com/account), create an API key with your choice of name or use/rename the Default Key. Consider using different API keys for development, staging, and production releases.
## Quickstart
@@ -176,9 +176,9 @@ Test out the current functionality of web3-onboard in a small browser demo:
## React Demo
-Checkout our live demo using React at https://reactdemo.blocknative.com/
+Checkout our live demo using React at [https://reactdemo.blocknative.com/](https://reactdemo.blocknative.com/)
-The demo is open source so you can see a sample implementation of web3-onboard: https://github.com/blocknative/react-demo
+The demo is open source so you can see a sample implementation of web3-onboard: [https://github.com/blocknative/react-demo](https://github.com/blocknative/react-demo)
## More Examples
diff --git a/docs/src/routes/docs/[...3]modules/transaction-preview.md b/docs/src/routes/docs/[...3]modules/transaction-preview.md
new file mode 100644
index 000000000..0bd876382
--- /dev/null
+++ b/docs/src/routes/docs/[...3]modules/transaction-preview.md
@@ -0,0 +1,261 @@
+
+
+
+# Transaction Preview
+
+A modular UI for previewing a single or set of unsigned Ethereum transactions.
+
+
+
+Full Simulation Platform API documentation can be found [here](https://docs.blocknative.com/transaction-preview-api)
+
+### Install
+
+
+
+
+```sh copy
+yarn add @web3-onboard/core @web3-onboard/injected @web3-onboard/transaction-preview
+```
+
+
+
+
+```sh copy
+npm i @web3-onboard/core @web3-onboard/injected @web3-onboard/transaction-preview
+```
+
+
+
+
+### Usage with Web3-Onboard Core package
+
+
+
+To use the Transaction Preview package with web3-onboard all a developer needs to do is initialize web3-onboard with their [Blocknative API key](https://onboard.blocknative.com/docs/overview/introduction#optional-use-an-api-key-to-fetch-real-time-transaction-data-balances-gas) and pass in the module as shown below.
+
+```typescript
+import Onboard from '@web3-onboard/core'
+import injectedModule from '@web3-onboard/injected'
+import transactionPreviewModule from '@web3-onboard/transaction-preview'
+
+const injected = injectedModule()
+const transactionPreview = transactionPreviewModule(
+ // Optional initialization object
+ // {
+ // Optional: Require balance change approval prior to sending transaction to wallet
+ // Defaults to true
+ // requireTransactionApproval?: false
+
+ // i18n?: i18nOptions - Internationalization options
+ // }
+)
+
+const onboard = Onboard({
+ transactionPreview,
+ apiKey: 'xxx387fb-bxx1-4xxc-a0x3-9d37e426xxxx'
+ wallets: [injected],
+ chains: [
+ {
+ id: '0x1',
+ token: 'ETH',
+ label: 'Ethereum',
+ rpcUrl: 'https://mainnet.infura.io/v3/17c1e1500e384acfb6a72c5d2e67742e'
+ }
+ ]
+ // ... other Onboard options
+})
+
+// Transaction code here using Ether.js or Web3.js or custom
+// The transaction will automatically be picked up and simulated with a UI displaying in the upper right corner
+```
+
+### Options & Types
+
+```typescript
+export type TransactionPreviewModule = (options: TransactionPreviewOptions) => TransactionPreviewAPI
+
+export type TransactionPreviewAPI = {
+ /**
+ * Pass this method a standard EIP1193 provider
+ * (such as an injected wallet from window.ethereum)
+ * and it will be patched to allow for transaction previewing
+ */
+ patchProvider: (provider: PatchedEIP1193Provider) => PatchedEIP1193Provider
+ /**
+ * Pass this method a standard EIP1193 provider
+ * (such as an injected wallet from window.ethereum)
+ * and it will be patched to allow for transaction previewing
+ */
+ init: (initializationOptions: TransactionPreviewInitOptions) => void
+}
+
+export type PatchedEIP1193Provider = EIP1193Provider & { simPatched: boolean }
+
+export interface ProviderReq {
+ method: string
+ params?: Array
+}
+
+export type RequestOptions = Pick
+
+export type TransactionPreviewInitOptions = {
+ /**
+ * Blocknative API key (https://explorer.blocknative.com/account)
+ */
+ apiKey: string
+ /**
+ * Your Blocknative SDK instance
+ * */
+ sdk: SDK
+ /**
+ * Optional dom query string to mount UI to
+ * */
+ containerElement: string
+}
+
+export type TransactionPreviewOptions = {
+ /**
+ * Optional requirement for user to accept transaction balance changes
+ * prior to sending the transaction to the wallet
+ * Defaults to true
+ * */
+ requireTransactionApproval?: boolean
+ /**
+ * An optional internationalization object that defines the display
+ * text for different locales. Can also be used to override the default text.
+ * To override the default text, pass in a object for the en locale
+ */
+ i18n?: i18nOptions
+}
+
+export type Locale = string
+export type i18nOptions = Record
+export type i18n = typeof en
+
+export type DeviceNotBrowser = {
+ type: null
+ os: null
+ browser: null
+}
+
+export type TransactionForSim = SimulationTransaction & {
+ data?: string
+}
+
+export interface SimulationTransaction {
+ from: string
+ to: string
+ value: number
+ gas: number
+ input: string
+ // Either Type 1 Gas (gasPrice) or Type 2 Gas (maxPriorityFeePerGas & maxFeePerGas)
+ // must be included in the payload
+ gasPrice?: number
+ maxPriorityFeePerGas?: number
+ maxFeePerGas?: number
+}
+
+export type MultiSimOutput = {
+ id?: string
+ contractCall: ContractCall[]
+ error?: any
+ gasUsed: number[]
+ internalTransactions: InternalTransaction[][]
+ netBalanceChanges: NetBalanceChange[][]
+ network: Network
+ simDetails: SimDetails
+ serverVersion: string
+ system: System
+ status: Status
+ simulatedBlockNumber: number
+ transactions: InternalTransaction[]
+}
+
+export interface ContractCall {
+ contractType?: string
+ contractAddress?: string
+ methodName: string
+ params: Record
+ contractName?: string
+ contractDecimals?: number
+ decimalValue?: string
+}
+
+export interface InternalTransaction {
+ type: string
+ from: string
+ to: string
+ input: string
+ gas: number
+ gasUsed: number
+ value: string
+ contractCall: ContractCall
+}
+
+export interface NetBalanceChange {
+ address: string
+ balanceChanges: BalanceChange[]
+}
+
+export interface BalanceChange {
+ delta: string
+ asset: Asset
+ breakdown: BreakDown[]
+}
+
+export interface Asset {
+ type: string
+ symbol: string
+ contractAddress: string
+}
+
+export interface BreakDown {
+ counterparty: string
+ amount: string
+}
+
+export interface InternalTransaction {
+ type: string
+ from: string
+ to: string
+ input: string
+ gas: number
+ gasUsed: number
+ value: string
+ contractCall: ContractCall
+}
+
+export type System = 'bitcoin' | 'ethereum'
+export type Network =
+ | 'main'
+ | 'testnet'
+ | 'ropsten'
+ | 'rinkeby'
+ | 'goerli'
+ | 'kovan'
+ | 'xdai'
+ | 'bsc-main'
+ | 'matic-main'
+ | 'fantom-main'
+ | 'matic-mumbai'
+ | 'local'
+
+export type Status =
+ | 'pending'
+ | 'confirmed'
+ | 'speedup'
+ | 'cancel'
+ | 'failed'
+ | 'dropped'
+ | 'simulated'
+
+export interface SimDetails {
+ blockNumber: number
+ e2eMs: number
+ performanceProfile: any
+}
+```