+
+
{
/>
- Connect
+ Join
diff --git a/components/NetworkConfig.tsx b/components/NetworkResources.tsx
similarity index 89%
rename from components/NetworkConfig.tsx
rename to components/NetworkResources.tsx
index d3653499..73190496 100644
--- a/components/NetworkConfig.tsx
+++ b/components/NetworkResources.tsx
@@ -1,8 +1,14 @@
import React, { useState } from "react";
import Link from "next/link";
import { BlockCopyButton } from "./ui/block-copy-button";
-import { FlaskConical, WalletMinimal, Waypoints } from "lucide-react";
+import {
+ FlaskConical,
+ WalletMinimal,
+ Waypoints,
+ SendToBack,
+} from "lucide-react";
import WalletTable from "./WalletTable";
+import EvmToSubstrateConverter from "./EvmToSubstrateConverter";
const NETWORK_DATA = {
mainnet: [
@@ -72,7 +78,7 @@ const NETWORK_DATA = {
property: "Telemetry",
value: {
type: "link",
- url: "https://telemetry.polkadot.io/#list/0x3d22af97d919611e03bbcbda96f65988758865423e89b2d99547a6bb61452db3",
+ url: "https://telemetry.polkadot.io/#list/0x44f68476df71ebf765b630bf08dc1e0fedb2bf614a1aa0563b3f74f20e47b3e0",
text: "Telemetry",
},
},
@@ -277,11 +283,28 @@ const NetworkTabs = () => {
Wallets
+
+ {" "}
+ handleTabClick("evmToSubstrate")}
+ className={`inline-block p-4 rounded-t-lg ${
+ activeTab === "evmToSubstrate"
+ ? "text-blue-600 bg-gray-100 active dark:bg-gray-800 dark:text-blue-500"
+ : "hover:text-gray-600 hover:bg-gray-50 dark:hover:bg-gray-800 dark:hover:text-gray-300"
+ }`}
+ >
+
+ EVM-Substrate Transfers
+
+
{activeTab === "wallets" ? (
+ ) : activeTab === "evmToSubstrate" ? (
+
) : (
renderTable(NETWORK_DATA[activeTab])
)}
@@ -291,3 +314,5 @@ const NetworkTabs = () => {
};
export default NetworkTabs;
+
+ ;
diff --git a/components/YoutubeVideo.tsx b/components/YoutubeVideo.tsx
new file mode 100644
index 00000000..c2c14b7f
--- /dev/null
+++ b/components/YoutubeVideo.tsx
@@ -0,0 +1,9 @@
+import React from "react";
+import LiteYouTubeEmbed from "react-lite-youtube-embed";
+import "react-lite-youtube-embed/dist/LiteYouTubeEmbed.css";
+
+const YoutubeVideo = ({ id, title }) => {
+ return ;
+};
+
+export default YoutubeVideo;
diff --git a/components/ui/switch.tsx b/components/ui/switch.tsx
new file mode 100644
index 00000000..8230bc90
--- /dev/null
+++ b/components/ui/switch.tsx
@@ -0,0 +1,27 @@
+import * as React from "react";
+import * as SwitchPrimitives from "@radix-ui/react-switch";
+
+import { cn } from "../../lib/utils";
+
+const Switch = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+
+
+));
+Switch.displayName = SwitchPrimitives.Root.displayName;
+
+export { Switch };
diff --git a/next.config.mjs b/next.config.mjs
index 99752417..6d044490 100644
--- a/next.config.mjs
+++ b/next.config.mjs
@@ -9,7 +9,7 @@ const nextConfig = {
experimental: {
legacyBrowsers: false,
},
- trailingSlash: true,
+ trailingSlash: false,
async redirects() {
return [
{
diff --git a/package.json b/package.json
index 32db5061..4699f9e2 100644
--- a/package.json
+++ b/package.json
@@ -24,6 +24,7 @@
"@polkadot/util": "^12.6.2",
"@polkadot/util-crypto": "^12.6.2",
"@radix-ui/react-slot": "^1.0.2",
+ "@radix-ui/react-switch": "^1.0.3",
"@radix-ui/react-tooltip": "^1.0.7",
"@react-aria/ssr": "3.4.0",
"@sentry/nextjs": "^7.27.0",
@@ -52,6 +53,7 @@
"react-hook-form": "^7.51.1",
"react-hot-toast": "2.4.0",
"react-icons": "^4.12.0",
+ "react-lite-youtube-embed": "^2.4.0",
"react-use": "^17.4.0",
"react-use-measure": "^2.1.1",
"rehype-katex": "5.0.0",
diff --git a/pages/developers/_meta.json b/pages/developers/_meta.json
index dfe4f6a2..7a8ca2ca 100644
--- a/pages/developers/_meta.json
+++ b/pages/developers/_meta.json
@@ -6,21 +6,27 @@
"blueprints": "Blueprints",
"services": "Actively Validated Services (AVS)",
"usecases": "Use Cases",
+ "-- specification-developers": {
+ "type": "separator",
+ "title": "Specification Developers"
+ },
+ "gadget-tutorial": "Create a Gadget",
+ "-- solution-developers": {
+ "type": "separator",
+ "title": "Solution Developers"
+ },
+ "integrate": "Endpoints and Integration",
+ "deploy-using-hardhat": "Deploy Contracts with Hardhat",
+ "transaction-fees": "Calculating Transaction Fees",
+ "evm-substrate-transfers": "EVM-Substrate Transfers",
"-- technicals": {
"type": "separator",
"title": "Technicals"
},
+ "addresses": "Account Addresses",
"pallets": "Pallets",
"precompiles": "Precompiles",
- "-- guides": {
- "type": "separator",
- "title": "Resources & Guides"
- },
- "integrate": "Endpoints and Other Resources",
- "deploy-using-hardhat": "Deploy on Tangle with Hardhat",
"json-rpc-endpoints": "RPC Methods",
- "addresses": "Account Addresses",
- "transaction-fees": "Calculating Transaction Fees",
"-- contribute": {
"type": "separator",
"title": "Contribute"
diff --git a/pages/developers/addresses.mdx b/pages/developers/addresses.mdx
index 4a545e1b..0a7630b5 100644
--- a/pages/developers/addresses.mdx
+++ b/pages/developers/addresses.mdx
@@ -1,5 +1,6 @@
import EvmToSubstrateConverter from '../../components/EvmToSubstrateConverter'
import { Callout } from 'nextra/components'
+import Link from 'next/link'
# Account Addresses on Tangle
@@ -8,7 +9,6 @@ If you're interacting with a Frontier-enabled Substrate chain like Tangle Networ
To help you navigate between these formats, we've provided a handy conversion tool below. Simply enter your Ethereum address (H160), and the tool will generate the corresponding Substrate address (SS58) used on the Tangle Network chain.
- Please note that the conversion from an EVM address to a Substrate address using the provided tool is a one-way operation, and you cannot derive the original EVM address from a Substrate address.
## Address Formats in Frontier-enabled Substrate Chains
@@ -33,125 +33,3 @@ As a user, it's essential to understand the different address formats and their
For developers building on a Frontier-enabled Substrate chain, it's crucial to be aware of these address formats and their relationships. You may need to provide clear instructions and tools to help users manage their addresses, perform cross-address transfers, and interact with both the EVM and Substrate components seamlessly.
While the dual-address system may introduce some complexities, it also opens up a world of possibilities for interoperability and leveraging the strengths of both Ethereum and Substrate ecosystems.
-
-## Developer Resource
-
-### Cross-EVM/Substrate Token Transfers
-
-Handling cross-system token transfers between Substrate and EVM can be complex. Address mappings play a crucial role in facilitating these transfers.
-
-#### Scenarios
-
-1. **Alice** only has an account on Tangle EVM using the Metamask wallet.
-2. **Bob** has an account on Tangle using the Polkadot.js wallet, and another account on Tangle EVM using the Metamask wallet.
-3. **Charlie** only has an account on Tangle using the Polkadot.js wallet.
-
-Assigned values:
-
-- **Alice's account:** `0xa5fAA47a324754354CB0A305941C8cCc6b5de296`
-- **Bob's accounts:** `5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty` and `0x690B9A9E9aa1C9dB991C7721a92d351Db4FaC990`
-- **Charlie's account:** `5FLSigC9HGRKVhB9FiEo4Y3koPsNmBmLJbpXg2mp1hXcS59Y`
-
-### Address Mapping Explanation
-
-Address mappings between Substrate and EVM are one-way transformations that facilitate token transfers between the two systems.
-
-- **Substrate to EVM:** When a Substrate address is converted to an EVM address, the resulting EVM address can be used to receive tokens on the EVM side. The conversion involves extracting and hashing a part of the Substrate address, providing a unique EVM address corresponding to the original Substrate address.
-- **EVM to Substrate:** Once tokens are sent to the EVM address, the recipient can interact with the Substrate network by calling the `evm.withdraw` function. This allows the recipient to withdraw tokens from the EVM environment back to the Substrate environment.
-
-Key Points:
-
-- The conversion is a one-way mapping from Substrate to EVM.
-- The resulting EVM address is a hash of part of the Substrate address.
-- Tokens can be received on the EVM side using the EVM address.
-- The `evm.withdraw` function facilitates the transfer of tokens back to the Substrate side.
-
-### Convert Substrate Address to EVM
-
-To convert a Substrate address to an EVM address, the following script can be used:
-
-```typescript
-import { decodeAddress } from "https://esm.sh/@polkadot/util-crypto";
-import { u8aToHex } from "https://esm.sh/@polkadot/util";
-
-const input = Deno.args[0];
-if (!input) {
- console.error("usage: deno run substrateToEvm.ts ");
- Deno.exit(1);
-}
-const accountId = decodeAddress(input);
-const res = accountId.subarray(0, 20);
-const output = u8aToHex(res);
-console.log({ input, output });
-// run using:
-// $ deno run substrateToEvm.ts
-```
-
-The script takes a Substrate address as input, decodes it, and then extracts the first 20 bytes of the account ID. These 20 bytes are then converted into a hexadecimal string, resulting in an EVM-compatible address.
-
-#### Convert EVM Address to Substrate
-
-Here is an example using the Deno Runtime and @polkadot/util to convert an address from EVM to Substrate:
-
-```tsx
-import {
- blake2AsU8a,
- encodeAddress,
-} from "https://esm.sh/@polkadot/util-crypto";
-import {
- hexToU8a,
- stringToU8a,
- u8aConcat,
-} from "https://esm.sh/@polkadot/util";
-
-const input = Deno.args[0];
-if (!input) {
- console.error("usage: deno run evmToSubstrate.ts ");
- Deno.exit(1);
-}
-const addr = hexToU8a(input);
-const data = stringToU8a("evm:");
-const res = blake2AsU8a(u8aConcat(data, addr));
-const output = encodeAddress(res, 42);
-console.log({ input, output });
-// run using:
-// $ deno run evmToSubstrate.ts
-```
-
-**Note**
-The conversion from an EVM address to a Substrate address is a one-way operation. Due to the hashing process, it is not possible to reverse the process and obtain the original EVM address from the resulting Substrate address.
-
-#### Case 1: Sending from Substrate to EVM
-
-Bob wants to send 100 TNT to Alice, but he does not have the 100 TNT on his EVM account in Metamask. Therefore, he uses his Tangle account in the Polkadot.js wallet.
-
-1. Alice's address is `0xa5fAA47a324754354CB0A305941C8cCc6b5de296`.
-2. Bob converts Alice's address to a substrate address using the `evmToSubstrate` function:
-
-```tsx
-evmToSubstrate("0xa5fAA47a324754354CB0A305941C8cCc6b5de296");
-// => 5C9ysBsWKpw3D8MFaEauFgdtMPqboS64YNYHyu1rCynLyKMZ
-```
-
-3. Bob sends the 100 TNT to `5C9ysBsWKpw3D8MFaEauFgdtMPqboS64YNYHyu1rCynLyKMZ`.
-4. Alice receives the 100 TNT in her Metamask wallet.
-
-#### Case 2: Sending from EVM to Substrate
-
-Alice wants to send 50 TNT to Charlie. However, Charlie only has a Substrate account that he controls in his Polkadot.js wallet.
-
-1. Charlie's address is `5FLSigC9HGRKVhB9FiEo4Y3koPsNmBmLJbpXg2mp1hXcS59Y`.
-2. Alice converts Charlie's address to an EVM address using the `substrateToEvm` function.
-
-```tsx
-substrateToEvm("5FLSigC9HGRKVhB9FiEo4Y3koPsNmBmLJbpXg2mp1hXcS59Y");
-// => 0x90b5ab205c6974c9ea841be688864633dc9ca8a3
-```
-
-3. Alice uses her Metamask and sends 50 TNT to
- `0x90b5ab205c6974c9ea841be688864633dc9ca8a3`.
-4. Charlie's balance on Substrate remains the same!
- > Because: Charlie needs to withdraw the balance from his EVM account.
-5. Charlie goes to Polkadot.js and calls:
- `evm.withdraw("0x90b5ab205c6974c9ea841be688864633dc9ca8a3", 50 TNT)`.
-6. Charlie sees that he has now received 50 TNT in his account.
diff --git a/pages/developers/evm-substrate-transfers.mdx b/pages/developers/evm-substrate-transfers.mdx
new file mode 100644
index 00000000..867f183b
--- /dev/null
+++ b/pages/developers/evm-substrate-transfers.mdx
@@ -0,0 +1,129 @@
+import EvmToSubstrateConverter from "../../components/EvmToSubstrateConverter"
+import { Callout } from "nextra/components"
+
+## Developer Resource
+
+### Cross-EVM/Substrate Token Transfers
+
+Handling cross-system token transfers between Substrate and EVM can be complex. Address mappings play a crucial role in facilitating these transfers.
+While we provide
+
+#### Scenarios
+
+1. **Alice** only has an account on Tangle EVM using the Metamask wallet.
+2. **Bob** has an account on Tangle using the Polkadot.js wallet, and another account on Tangle EVM using the Metamask wallet.
+3. **Charlie** only has an account on Tangle using the Polkadot.js wallet.
+
+Assigned values:
+
+- **Alice's account:** `0xa5fAA47a324754354CB0A305941C8cCc6b5de296`
+- **Bob's accounts:** `5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty` and `0x690B9A9E9aa1C9dB991C7721a92d351Db4FaC990`
+- **Charlie's account:** `5FLSigC9HGRKVhB9FiEo4Y3koPsNmBmLJbpXg2mp1hXcS59Y`
+
+### Address Mapping Explanation
+
+Address mappings between Substrate and EVM are one-way transformations that facilitate token transfers between the two systems.
+
+- **Substrate to EVM:** When a Substrate address is converted to an EVM address, the resulting EVM address can be used to receive tokens on the EVM side. The conversion involves extracting and hashing a part of the Substrate address, providing a unique EVM address corresponding to the original Substrate address.
+- **EVM to Substrate:** Once tokens are sent to the EVM address, the recipient can interact with the Substrate network by calling the `evm.withdraw` function. This allows the recipient to withdraw tokens from the EVM environment back to the Substrate environment.
+
+Key Points:
+
+- The conversion is a one-way mapping from Substrate to EVM.
+- The resulting EVM address is a hash of part of the Substrate address.
+- Tokens can be received on the EVM side using the EVM address.
+- The `evm.withdraw` function facilitates the transfer of tokens back to the Substrate side.
+
+### Convert Substrate Address to EVM
+
+To convert a Substrate address to an EVM address, the following script can be used:
+
+```typescript
+import { decodeAddress } from "https://esm.sh/@polkadot/util-crypto";
+import { u8aToHex } from "https://esm.sh/@polkadot/util";
+
+const input = Deno.args[0];
+if (!input) {
+ console.error("usage: deno run substrateToEvm.ts ");
+ Deno.exit(1);
+}
+const accountId = decodeAddress(input);
+const res = accountId.subarray(0, 20);
+const output = u8aToHex(res);
+console.log({ input, output });
+// run using:
+// $ deno run substrateToEvm.ts
+```
+
+The script takes a Substrate address as input, decodes it, and then extracts the first 20 bytes of the account ID. These 20 bytes are then converted into a hexadecimal string, resulting in an EVM-compatible address.
+
+#### Convert EVM Address to Substrate
+
+Here is an example using the Deno Runtime and @polkadot/util to convert an address from EVM to Substrate:
+
+You can also use this convenient tool:
+
+
+
+```tsx
+import {
+ blake2AsU8a,
+ encodeAddress,
+} from "https://esm.sh/@polkadot/util-crypto";
+import {
+ hexToU8a,
+ stringToU8a,
+ u8aConcat,
+} from "https://esm.sh/@polkadot/util";
+
+const input = Deno.args[0];
+if (!input) {
+ console.error("usage: deno run evmToSubstrate.ts ");
+ Deno.exit(1);
+}
+const addr = hexToU8a(input);
+const data = stringToU8a("evm:");
+const res = blake2AsU8a(u8aConcat(data, addr));
+const output = encodeAddress(res, 42);
+console.log({ input, output });
+// run using:
+// $ deno run evmToSubstrate.ts
+```
+
+**Note**
+The conversion from an EVM address to a Substrate address is a one-way operation. Due to the hashing process, it is not possible to reverse the process and obtain the original EVM address from the resulting Substrate address.
+
+#### Case 1: Sending from Substrate to EVM
+
+Bob wants to send 100 TNT to Alice, but he does not have the 100 TNT on his EVM account in Metamask. Therefore, he uses his Tangle account in the Polkadot.js wallet.
+
+1. Alice's address is `0xa5fAA47a324754354CB0A305941C8cCc6b5de296`.
+2. Bob converts Alice's address to a substrate address using the `evmToSubstrate` function:
+
+```tsx
+evmToSubstrate("0xa5fAA47a324754354CB0A305941C8cCc6b5de296");
+// => 5C9ysBsWKpw3D8MFaEauFgdtMPqboS64YNYHyu1rCynLyKMZ
+```
+
+3. Bob sends the 100 TNT to `5C9ysBsWKpw3D8MFaEauFgdtMPqboS64YNYHyu1rCynLyKMZ`.
+4. Alice receives the 100 TNT in her Metamask wallet.
+
+#### Case 2: Sending from EVM to Substrate
+
+Alice wants to send 50 TNT to Charlie. However, Charlie only has a Substrate account that he controls in his Polkadot.js wallet.
+
+1. Charlie's address is `5FLSigC9HGRKVhB9FiEo4Y3koPsNmBmLJbpXg2mp1hXcS59Y`.
+2. Alice converts Charlie's address to an EVM address using the `substrateToEvm` function.
+
+```tsx
+substrateToEvm("5FLSigC9HGRKVhB9FiEo4Y3koPsNmBmLJbpXg2mp1hXcS59Y");
+// => 0x90b5ab205c6974c9ea841be688864633dc9ca8a3
+```
+
+3. Alice uses her Metamask and sends 50 TNT to
+ `0x90b5ab205c6974c9ea841be688864633dc9ca8a3`.
+4. Charlie's balance on Substrate remains the same!
+ > Because: Charlie needs to withdraw the balance from his EVM account.
+5. Charlie goes to Polkadot.js and calls:
+ `evm.withdraw("0x90b5ab205c6974c9ea841be688864633dc9ca8a3", 50 TNT)`.
+6. Charlie sees that he has now received 50 TNT in his account.
diff --git a/pages/developers/gadget-tutorial.mdx b/pages/developers/gadget-tutorial.mdx
new file mode 100644
index 00000000..c98df39f
--- /dev/null
+++ b/pages/developers/gadget-tutorial.mdx
@@ -0,0 +1,38 @@
+import React from 'react';
+import { render } from 'react-dom';
+import YoutubeVideo from '../../components/YoutubeVideo';
+import Link from "next/link";
+import { Callout } from "nextra/components";
+
+# Gadget Tutorial Series
+
+This series is an introduction to building a gadget, which works with tangle Network to help integrate Actively Validated Services.
+For an implementation example, see the Github repo.
+
+## Introduction to Gadgets
+
+
+In this introductory tutorial, we will dive into the concept of gadgets and protocols, guiding you through the process of building a sample or demo protocol. Gadgets are software components that interact with a blockchain to perform specific jobs, each corresponding to a protocol. We will explore how these protocols are executed based on the roles subscribed by the gadgets, cover the structure of protocols, and provide examples from our repository.
+
+## Asynchronous Protocol Structure
+
+
+This video explores the implementation details of protocol configuration and the functions required for the internal network. We discuss protocol-specific functions related to metadata, such as protocol name, role filter, and phase filter. Through a convenient macro, we demonstrate how to execute the protocol and recommend approaches for adding tests. We also delve into key generation and signing implementation, including additional parameters, the create next job function, and the protocol packet.
+
+## Keygen
+
+
+We explain the concept of protocol multiplexing and its implementation. Understanding how to differentiate messages between concurrent protocols is crucial, and we show how to efficiently multiplex using a function. The importance of the networking section in the config is highlighted, along with a crucial tip for obtaining the network.
+
+
+We discuss the asynchronous protocol's post-hook section, executed only if the preceding protocol is successful. We detail how to retrieve the result and save it in the local key store, generate a unique key using the SHA-256 function, set the key value, build a result for the blockchain, and submit the job result.
+
+## Signing
+
+
+We explore the generate protocol from function for signing, covering the boilerplate, signing protocol, and steps involved in signing a message. The process of signing a message using XOR sign and collecting signatures is demonstrated, providing practical insights into the signing process.
+
+## Distributed Key Generation
+
+
+We will dive into the intricacies of implementing Distributed Key Generation (DKG) signature verification within the Tangle Network, focusing on the pallet portion of a stub protocol. By the end of this video, you will be equipped with the knowing how to add your protocol to the Tangle Network and the gadget protocol.
diff --git a/pages/developers/integrate.mdx b/pages/developers/integrate.mdx
index e6000639..ad163556 100644
--- a/pages/developers/integrate.mdx
+++ b/pages/developers/integrate.mdx
@@ -1,4 +1,4 @@
-import NetworkTabs from '../../components/NetworkConfig.tsx'
+import NetworkTabs from '../../components/NetworkResources.tsx'
# Resources
diff --git a/pages/resources.mdx b/pages/resources.mdx
index 71da08fe..aba3f245 100644
--- a/pages/resources.mdx
+++ b/pages/resources.mdx
@@ -1,4 +1,4 @@
-import NetworkInfo from "../components/NetworkConfig"
+import NetworkInfo from "../components/NetworkResources"
import WalletTable from "../components/WalletTable"
# Resources and Tools
diff --git a/theme.config.tsx b/theme.config.tsx
index a3637c21..db7ac4b6 100644
--- a/theme.config.tsx
+++ b/theme.config.tsx
@@ -4,8 +4,8 @@ import { DocsThemeConfig, useConfig, useTheme } from "nextra-theme-docs";
import Footer from "./components/Footer";
import Navigation from "./components/Navigation";
import HeaderLogo from "./components/HeaderLogo";
-import { Discord, Github, Twitter } from "./components/Social";
import HelpDiscordBtn from "./components/HelpDiscordBtn";
+import { ThemeSwitch } from "nextra-theme-docs";
const SITE_ROOT = "https://docs.tangle.tools";
@@ -123,6 +123,7 @@ const theme: DocsThemeConfig = {
extraContent: (
<>
+
>
),
},
diff --git a/tsconfig.json b/tsconfig.json
index 2e015231..fdae51b8 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -15,7 +15,7 @@
"incremental": true,
"allowJs": false,
"paths": {
- "@/*": ["./src/*"]
+ "@/*": ["./*"]
},
"types": ["next"]
},
diff --git a/yarn.lock b/yarn.lock
index 2126a115..fe9b6268 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1839,6 +1839,20 @@
"@babel/runtime" "^7.13.10"
"@radix-ui/react-compose-refs" "1.0.1"
+"@radix-ui/react-switch@^1.0.3":
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-switch/-/react-switch-1.0.3.tgz#6119f16656a9eafb4424c600fdb36efa5ec5837e"
+ integrity sha512-mxm87F88HyHztsI7N+ZUmEoARGkC22YVW5CaC+Byc+HRpuvCrOBPTAnXgf+tZ/7i0Sg/eOePGdMhUKhPaQEqow==
+ dependencies:
+ "@babel/runtime" "^7.13.10"
+ "@radix-ui/primitive" "1.0.1"
+ "@radix-ui/react-compose-refs" "1.0.1"
+ "@radix-ui/react-context" "1.0.1"
+ "@radix-ui/react-primitive" "1.0.3"
+ "@radix-ui/react-use-controllable-state" "1.0.1"
+ "@radix-ui/react-use-previous" "1.0.1"
+ "@radix-ui/react-use-size" "1.0.1"
+
"@radix-ui/react-tooltip@^1.0.7":
version "1.0.7"
resolved "https://registry.yarnpkg.com/@radix-ui/react-tooltip/-/react-tooltip-1.0.7.tgz#8f55070f852e7e7450cc1d9210b793d2e5a7686e"
@@ -1888,6 +1902,13 @@
dependencies:
"@babel/runtime" "^7.13.10"
+"@radix-ui/react-use-previous@1.0.1":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-use-previous/-/react-use-previous-1.0.1.tgz#b595c087b07317a4f143696c6a01de43b0d0ec66"
+ integrity sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw==
+ dependencies:
+ "@babel/runtime" "^7.13.10"
+
"@radix-ui/react-use-rect@1.0.1":
version "1.0.1"
resolved "https://registry.yarnpkg.com/@radix-ui/react-use-rect/-/react-use-rect-1.0.1.tgz#fde50b3bb9fd08f4a1cd204572e5943c244fcec2"
@@ -7824,6 +7845,11 @@ react-is@^16.13.1, react-is@^16.7.0:
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
+react-lite-youtube-embed@^2.4.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/react-lite-youtube-embed/-/react-lite-youtube-embed-2.4.0.tgz#1f56a12be1061d50431444d52d836bd09a1283a2"
+ integrity sha512-Xo6cM1zPlROvvM97JkqQIoXstlQDaC4+DawmM7BB7Hh1cXrkBHEGq1iJlQxBTUWAUklmpcC7ph7qg7CztXtABQ==
+
react-universal-interface@^0.6.2:
version "0.6.2"
resolved "https://registry.yarnpkg.com/react-universal-interface/-/react-universal-interface-0.6.2.tgz#5e8d438a01729a4dbbcbeeceb0b86be146fe2b3b"