<div align="center">

[![license](https://img.shields.io/badge/license-MIT-green)](/LICENSE.md)
[![npm latest package](https://img.shields.io/npm/v/@kanalabs/kana-widget-v2/latest.svg)](https://www.npmjs.com/package/@lifi/widget)
[![npm downloads](https://img.shields.io/npm/dm/@kanalabs/kana-widget-v2.svg)](https://www.npmjs.com/package/@lifi/widget)
[![Follow on Twitter](https://img.shields.io/twitter/follow/kanalabs.svg?style=social&label=Follow+kanalabs)](https://twitter.com/kanalabs)
</div>
<h1 align="center">Kana Widget</h1>

## Installation

**Kana Widget** is available as a [npm package](https://www.npmjs.com/package/@kanalabs/kana-widget-v2).

**npm:**

```sh
npm install @kanalabs/kana-widget-v2
```

**yarn:**

```sh
yarn add @kanalabs/kana-widget-v2
```

**pnpm:**

```sh
pnpm add @kanalabs/kana-widget-v2
```

## Getting Started with Kana Widget

Here is an example of a basic app using Kana Widget:

```
import { KanaWidget, WidgetConfig } from "@kanalabs/kana-widget-v2";
export const WidgetPage = () => {
  const widgetConfig: WidgetConfig = {
  // Required: The unique SDK key provided by the developer. This key is essential for the widget to function properly.
  // If you haven't received a key yet, please contact the development team to obtain one.
  sdkKey: "Your dApp/company SDK key",

  };
  return (
    <KanaWidget config={widgetConfig} />
  );
};
```
## Configure Widget
This is the example with all the available configurations:

```
import { KanaWidget, AptosDexsFilter, BridgeOption, Chain, WidgetConfig } from "@kanalabs/kana-widget-v2";

const widgetConfig: WidgetConfig = {
  // Required: The unique SDK key provided by the development team. This key is essential for the widget to function properly.
  // If you haven't received a key yet, please contact the development team to obtain one.
  sdkKey: "Your dApp/company SDK key",

  //Optional: The name of your dApp or company using this widget.
  integrator:"Your dApp/company name",

  //Optional: Configures the blockchain chains that will be used as source and target for transactions.
  chains: {
    sourceChain: [Chain.Aptos, Chain.Solana, Chain.Ethereum],
    targetChain: [Chain.Aptos, Chain.Solana, Chain.Ethereum],
  },

  //Optional: Configuration for decentralized exchanges (DEXs) to be used within the widget, 
  // categorized by blockchain.
  dexs: {
    aptos: [AptosDexsFilter.Pontem], // List of DEXs to be used on the Aptos blockchain.
  },

  //Optional: Configuration for bridges that are supported by the widget for cross-chain transactions.
  bridges: [BridgeOption.CCTP, BridgeOption.Wormhole], // List of bridge options.

  //Optional: Determines whether a guided tour or walkthrough is available for users of the widget. 
  // Set to 'false' to disable the tour.
  tour: false, 
  
  // Optional: Configure custom blockchain network providers if you wish to use your own instead of default settings.
  Provider: {
    aptosProvider: `https://aptos-mainnet.nodereal.io/v1/${NODEREAL_KEY}/v1`,
    solanaProvider: `https://greatest-frequent-owl.solana-mainnet.quiknode.pro/${SOLANA_QUICKNODE_KEY}`,
    polygonProvider: `https://polygon-mainnet.nodereal.io/v1/${NODEREAL_KEY}`,
    binanceProvider: `https://bsc-mainnet.nodereal.io/v1/${NODEREAL_KEY}`,
    ethereumProvider: `https://eth-mainnet.nodereal.io/v1/${NODEREAL_KEY}`,
    arbitrumProvider: `https://open-platform.nodereal.io/${NODEREAL_KEY}/arbitrum-nitro/`,
    avalancheProvider: `https://open-platform.nodereal.io/${NODEREAL_KEY}/avalanche-c/ext/bc/C/rpc`,
    zkSyncProvider: `https://open-platform.nodereal.io/${NODEREAL_KEY}/zksync`,
    suiProvider: "https://sui-mainnet-rpc.nodereal.io", 
  },
};

export const WidgetPage = () => {
  return <KanaWidget config={widgetConfig} />;
};
```

## Troubleshooting

If you are facing any issue like 

```
BREAKING CHANGE: webpack<5 used to include polyfills for node.js core modules by default.
```

Please add custom webpack settings to **config-overrides.js**. For further details regarding custom webpack settings refer [here](https://www.alchemy.com/blog/how-to-polyfill-node-core-modules-in-webpack-5).


## Documentation

[Kana Widget Documentation](https://docs.kanalabs.io/integrate-kana-widget/kana-widget)

 