diff --git a/docs/developers/gas-and-fees/system-smart-contracts.md b/docs/developers/gas-and-fees/system-smart-contracts.md index 25a709d9d..415c681ce 100644 --- a/docs/developers/gas-and-fees/system-smart-contracts.md +++ b/docs/developers/gas-and-fees/system-smart-contracts.md @@ -10,4 +10,5 @@ For more details, please follow: - [The Staking Smart Contract](/validators/staking/staking-smart-contract) - [The Delegation Manager](/validators/delegation-manager) - [ESDT tokens](/tokens/fungible-tokens) - - [NFT tokens](/tokens/nft-tokens) + - [NFT, SFT and Meta ESDT tokens](/tokens/nft-tokens) + diff --git a/docs/tokens/intro.md b/docs/tokens/intro.md index a579a71a2..a44c0c2e3 100644 --- a/docs/tokens/intro.md +++ b/docs/tokens/intro.md @@ -35,3 +35,4 @@ ESDT tokens can be issued, owned and held by any account on the MultiversX netwo | [Fungible tokens](/tokens/fungible-tokens) | Fungible ESDT tokens | | [Semi-fungible tokens](/tokens/nft-tokens) | Semi-Fungible ESDT tokens | | [Non-fungible tokens](/tokens/nft-tokens) | Non-Fungible ESDT tokens | +| [Meta ESDT tokens](/tokens/nft-tokens) | Meta ESDT tokens | \ No newline at end of file diff --git a/docs/tokens/nft-tokens.mdx b/docs/tokens/nft-tokens.mdx index c97674ee6..0036d3a6f 100644 --- a/docs/tokens/nft-tokens.mdx +++ b/docs/tokens/nft-tokens.mdx @@ -13,7 +13,7 @@ import TableWrapper from "@site/src/components/TableWrapper"; ## **Introduction** -MultiversX NFTs(non-fungible tokens) are a breed of digital assets that are revolutionizing the world of art, collectibles, and more. These NFTs are unique, one-of-a-kind tokens that are built on blockchain technology, allowing for secure ownership and transfer of these assets. With MultiversX NFTs, every token is assigned a unique identification code(ticker) and metadata that distinguishes it from every other token, making each NFT truly one-of-a-kind. Read the full page for a comprehensive guide on how to brand, issue, transfer, assign roles and many other features, for both NFTs and SFTs. +MultiversX NFTs (non-fungible tokens) are a breed of digital assets that are revolutionizing the world of art, collectibles, and more. These NFTs are unique, one-of-a-kind tokens that are built on blockchain technology, allowing for secure ownership and transfer of these assets. With MultiversX NFTs, every token is assigned a unique identification code (ticker) and metadata that distinguishes it from every other token, making each NFT truly one-of-a-kind. Read the full page for a comprehensive guide on how to brand, issue, transfer, assign roles and many other features, for both NFTs and SFTs. [comment]: # (mx-context-auto) @@ -22,66 +22,69 @@ MultiversX NFTs(non-fungible tokens) are a breed of digital assets that are revo The MultiversX protocol introduces native NFT support by adding metadata and attributes on top of the already existing [Fungible tokens](/tokens/fungible-tokens). This way, one can issue a semi-fungible token or a non-fungible token which is quite similar to an ESDT, but has a few more attributes, as well as an assignable URI. -Once owning a quantity of a NFT/SFT, users will have their data store directly under their account, inside the trie. All the fields available inside a NFT/SFT token can be found [here](/tokens/nft-tokens#nftsft-fields). +Once owning a quantity of an NFT/SFT, users will have their data store directly under their account, inside the trie. All the fields available inside a NFT/SFT token can be found [here](/tokens/nft-tokens#nftsft-fields). -**The flow of issuing and transferring non-fungible or semi-fungible tokens is:** +### Differences between NFTs and SFTs -- register/issue the token -- set roles to the address that will create the NFT/SFTs -- create the NFT/SFT -- transfer quantity(es) +The main difference between NFTs and SFTs is that NFTs are non-fungible tokens, meaning each token is unique and cannot be divided. SFTs are semi-fungible tokens, meaning each token can exist in multiple quantities. +Depending on the use case, one might choose to issue an NFT or an SFT Collection. -[comment]: # (mx-context-auto) +- NFT - Unique art piece, concert tickets, PFPs etc. +- SFT - Potions in a game, discount vouchers, fractional real-estate ownership, etc. ### Meta ESDT -In addition to NFTs and SFTs, MultiversX introduced Meta ESDTs. -Meta ESDTs are a special case of semi-fungible-tokens. They can be seen as regular ESDT fungible tokens that also have properties. -In a particular example, LKMEX or XMEX are MetaESDTs and their properties help implement the release schedule. +Meta ESDTs are similar to SFTs with the main difference that they are fully fungible, meaning that they have decimals which need to be specified when issuing the token. +It is worth noting that Meta ESDTs information displayed by the Explorer and returned by the API and the ElasticSearch are similar to the one of SFTs. -[comment]: # (mx-context-auto) -## **Branding** +### Dynamic NFTs and SFTs -Anyone can create NFTs and SFTs tokens on MultiversX Network. There are also no limits in tokens names or tickers. For example, -one issues an `AliceToken` with the ticker `ALC`. Anyone else is free to create a new token with the same token name and -the same token ticker. The only difference will be the random sequence of the token identifier. So the "original" token -could have received the random sequence `1q2w3e` resulting in the `ALC-1q2w3e` identifier, while the second token could -have received the sequence `3e4r5t` resulting in `ALC-3e4r5t`. +Dynamic NFTs and SFTs were introduced to the MultiversX protocol after the [Spica Update](https://governance.multiversx.com/proposal/erd1qqqqqqqqqqqqqpgq4qvrwlr2e6ld50f3qfc94am38p8298kthg4s3f0vfn/1). +They allow for further flexibility by making all the fields inside the NFT/SFT token dynamic, meaning that they can be changed after the token is issued. -In order to differentiate between an original token and other tokens with the same name or ticker, we have introduced a -branding mechanism that allows tokens owners to provide a logo, a description, a website, as well as social link for their tokens. MultiversX products such as Explorer, Wallet and so on -will display tokens in accordance to their branding, if any. -A token owner can submit a branding request by opening a Pull Request on https://github.com/multiversx/mx-assets. +### Useful tools -[comment]: # (mx-context-auto) +- [Utils by MultiversX](https://utils.multiversx.com) - Great for data encoding and decoding. +- [xSpotlight](https://xspotlight.com/) - Marketplace aggregator and NFT showcaser. +- [Explorer](https://explorer.multiversx.com/) - Blockchain explorer on MultiversX. +- [Web Wallet](https://wallet.multiversx.com/) - Official MultiversX Web Wallet. +- [MultiversX API](https://api.multiversx.com/) - API for MultiversX. +- [SDK and Tools](https://docs.multiversx.com/sdk-and-tools/overview) - SDK and Tools for MultiversX. -### **Submitting a branding request** +## Defining an NFT or SFT Collection -Token owners can create a PR to the https://github.com/multiversx/mx-assets with the logo in .png and .svg format, as well as a .json file containing all the relevant information. +Before you are able to issue an NFT or an SFT you need to issue the Collection first. -Here’s a prefilled template for the .json file to get you started: +A Collection is defined by the following: -```json -{ - "website": "https://www.multiversxtoken.com", - "description": "MultiversX Token is a collection of 10.000 unique and randomly generated tokens.", - "social": { - "email": "mxt-token@multiversxtoken.com", - "blog": "https://www.multiversxtoken.com/MXT-token-blog", - "twitter": "https://twitter.com/MXT-token-twitter" - }, - "status": "active" -} -``` +### Collection Name -[comment]: # (mx-context-auto) +- Length between 3 and 20 characters +- Alphanumeric characters only + +### Collection Ticker -## **Issuance of Non-Fungible Tokens** +- Length between 3 and 10 characters +- Alphanumeric UPPERCASE only -One has to perform an issuance transaction in order to register a non-fungible token. -Non-Fungible Tokens are issued via a request to the Metachain, which is a transaction submitted by the Account which will manage the tokens. When issuing a token, one must provide a token name, a ticker and optionally additional properties. This transaction has the form: +### Collection Properties + +- `canUpgrade` (default: `true`) - Allows the owner to upgrade the collection, changing any properties of the collection. +- `canChangeOwner` (default: `false`) - Allows the owner to change the owner of the collection. +- `canTransfer` (default: `true`) - Allows the transfer of tokens of this collection. +- `canPause` (default: `false`) - Allows the owner to pause the collection. +- `canFreeze` (default: `false`) - Allows the owner to freeze an address from transferring tokens of this collection. +- `canWipe` (default: `false`) - Allows the owner to wipe the tokens of an address which has been frozen. +- `canTransferNFTCreateRole` (default: `false`) - Allows the owner to transfer the NFT create role. +- `canAddSpecialRoles` (default: `true`) - Allows the owner to add special roles to an address. + +## Issuing an NFT or SFT Collection + +### Issuing a Non-Fungible Tokens Collection + +One has to perform an issuance transaction, sent to the **System: ESDT Module** account (address below)-in order to register a non-fungible token collection. Non-Fungible Tokens are issued via a request to the Metachain, which is a transaction submitted by the Account which will manage the tokens. When issuing a collection, one must provide a collection name, a collection ticker and optionally additional properties. This transaction has the form: ```rust IssuanceTransaction { @@ -95,9 +98,7 @@ IssuanceTransaction { } ``` -_For more details about how arguments have to be encoded, check [here](/developers/sc-calls-format)._ - -Optionally, the properties can be set when issuing a token. Example: +Optionally, the properties can be set when issuing a Collection. Example: ```rust IssuanceTransaction { @@ -119,17 +120,15 @@ IssuanceTransaction { } ``` -_For more details about how arguments have to be encoded, check [here](/developers/sc-calls-format)._ - -The receiver address `erd1qqqqqqqqqqqqqqqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqzllls8a5w6u` is a built-in system smart contract (not a VM-executable contract), which only handles token issuance and other token management operations, and does not handle any transfers. -The contract will add a random string to the ticker thus creating the **token identifier**. The random string starts with “-” and has 6 more random characters. For example, a token identifier could look like _ALC-6258d2_. +:::tip +Once a NFT collection is created as non-dynamic, it cannot be converted to a dynamic NFT collection. +::: -[comment]: # (mx-context-auto) +_For more details about how arguments have to be encoded, check [here](/developers/sc-calls-format)._ -## **Issuance of Semi-Fungible Tokens** +### Issuing a Semi-Fungible Tokens Collection -One has to perform an issuance transaction in order to register a semi-fungible token. -Semi-Fungible Tokens are issued via a request to the Metachain, which is a transaction submitted by the Account which will manage the tokens. When issuing a semi-fungible token, one must provide a token name, a ticker and optionally additional properties. This transaction has the form: +One has to perform an issuance transaction, sent to the **System: ESDT Module** account (address below)-in order to register a semi-fungible token collection. Semi-Fungible Tokens are issued via a request to the Metachain, which is a transaction submitted by the Account which will manage the tokens. When issuing a semi-fungible token collection, one must provide a collection name, a collection ticker and optionally additional properties. This transaction has the form: ```rust IssuanceTransaction { @@ -143,8 +142,6 @@ IssuanceTransaction { } ``` -_For more details about how arguments have to be encoded, check [here](/developers/sc-calls-format)._ - Optionally, the properties can be set when issuing a token. Example: ```rust @@ -169,15 +166,9 @@ IssuanceTransaction { _For more details about how arguments have to be encoded, check [here](/developers/sc-calls-format)._ -The receiver address `erd1qqqqqqqqqqqqqqqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqzllls8a5w6u` is a built-in system smart contract (not a VM-executable contract), which only handles token issuance and other token management operations, and does not handle any transfers. -The contract will add a random string to the ticker thus creating the **token identifier**. The random string starts with “-” and has 6 more random characters. For example, a token identifier could look like _ALC-6258d2_. - -[comment]: # (mx-context-auto) +### Issuing a Meta ESDT Collection -## **Issuance of Meta-ESDT Tokens** - -One has to perform an issuance transaction in order to register a Meta-ESDT token. -Meta-ESDT Tokens are issued via a request to the Metachain, which is a transaction submitted by the Account which will manage the tokens. When issuing a semi-fungible token, one must provide a token name, a ticker and optionally additional properties. This transaction has the form: +One has to perform an issuance transaction, sent to the **System: ESDT Module** account (address below)-in order to register a meta ESDT collection. Meta ESDTs are issued via a request to the Metachain, which is a transaction submitted by the Account which will manage the tokens. When issuing a meta ESDT collection, one must provide a collection name, a collection ticker, the number of decimals and optionally additional properties. This transaction has the form: ```rust IssuanceTransaction { @@ -192,8 +183,6 @@ IssuanceTransaction { } ``` -_For more details about how arguments have to be encoded, check [here](/developers/sc-calls-format)._ - Optionally, the properties can be set when issuing a token. Example: ```rust @@ -219,14 +208,16 @@ IssuanceTransaction { _For more details about how arguments have to be encoded, check [here](/developers/sc-calls-format)._ -The receiver address `erd1qqqqqqqqqqqqqqqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqzllls8a5w6u` is a built-in system smart contract (not a VM-executable contract), which only handles token issuance and other token management operations, and does not handle any transfers. -The contract will add a random string to the ticker thus creating the **token identifier**. The random string starts with “-” and has 6 more random characters. For example, a token identifier could look like _ALC-6258d2_. -[comment]: # (mx-context-auto) +### Converting an SFT Collection to a Meta ESDT Collection + +This transaction is used to convert an SFT collection to a Meta ESDT collection. -### **Converting an SFT into Meta-ESDT** +:::tip +The decimals selected are for all the tokens of the collection. +::: -An already existing _semi-fungible token_ can be converted into a Meta-ESDT token if the owner sends the following transaction: +This transaction has the form: ```rust ConvertSftToMetaESDTTransaction { @@ -240,86 +231,72 @@ ConvertSftToMetaESDTTransaction { } ``` -_For more details about how arguments have to be encoded, check [here](/developers/sc-calls-format)._ - -[comment]: # (mx-context-auto) - -## **Parameters format** - -Token Name: - -- length between 3 and 50 characters -- alphanumeric characters only - -Token Ticker: - -- length between 3 and 10 characters -- alphanumeric UPPERCASE only - -[comment]: # (mx-context-auto) - -## **Issuance examples** - -For example, a user named Alice wants to issue an ESDT called "AliceTokens" with the ticker "ALC". The issuance transaction would be: +### Issuing a Dynamic NFT or SFT Collection +A NFT or SFT collection can be created as dynamic by sending the following transaction to the **System: ESDT Module** account (address below): ```rust -IssuanceTransaction { - Sender: erd1sg4u62lzvgkeu4grnlwn7h2s92rqf8a64z48pl9c7us37ajv9u8qj9w8xg +RegisterDynamicTransaction { + Sender: Receiver: erd1qqqqqqqqqqqqqqqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqzllls8a5w6u Value: 50000000000000000 # (0.05 EGLD) GasLimit: 60000000 - Data: "issueSemiFungible" + - "@416c696365546f6b656e73" + - "@414c43" + + Data: "registerDynamic" + + "@" + + + "@" + + + "@" + + # For META token type only + "@" + + # (number of decimals) } ``` -_For more details about how arguments have to be encoded, check [here](/developers/sc-calls-format)._ +### Making a SFT Collection dynamic -Once this transaction is processed by the Metachain, Alice becomes the designated **manager of AliceTokens**. She can add quantity later using `ESDTNFTCreate`. For more operations available to ESDT token managers, see [Token management](/tokens/fungible-tokens#token-management). +The ESDT manager can change token type to dynamic using a transaction like this - sent to the **System: ESDT Module** smart contract (address below): -In that smart contract result, the `data` field will contain a transfer syntax which is explained below. What is important to note is that the token identifier can be fetched from -here in order to use it for transfers. Alternatively, the token identifier can be fetched from the API (explained also in section [REST API - Get NFT data](/tokens/nft-tokens#get-nft-data-for-an-address) ). +```rust +ChangeToDynamicTransaction { + Sender: + Receiver: erd1qqqqqqqqqqqqqqqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqzllls8a5w6u + Value: 0 + GasLimit: 60000000 + Data: "changeToDynamic" + + "@" + +} +``` -[comment]: # (mx-context-auto) +_For more details about how arguments have to be encoded, check [here](/developers/sc-calls-format)._ -## **Roles** +## Collection Roles -In order to be able to perform actions over a token, one needs to have roles assigned. -The existing roles are: +Once the Collection is created, one can set the roles for the Collection. -For NFT: +### Shared Roles +These roles are shared between NFTs and SFTs. -- ESDTRoleNFTCreate : this role allows one to create a new NFT -- ESDTRoleNFTBurn : this role allows one to burn a specific NFT -- ESDTRoleNFTUpdateAttributes : this role allows one to change the attributes of a specific NFT -- ESDTRoleNFTAddURI : this role allows one add URIs for a specific NFT -- ESDTTransferRole : this role enables transfer only to specified addresses. The addresses with the transfer role can transfer anywhere. -- ESDTRoleNFTUpdate : this role allows one to update meta data attributes of a specific NFT -- ESDTRoleModifyRoyalties : this role allows one to modify royalities of a specific NFT -- ESDTRoleSetNewURI : this role allows one to set new uris of a specific NFT -- ESDTRoleModifyCreator : this role allows one to rewrite the creator of a specific token -- ESDTRoleNFTRecreate : this role allows one to recreate the whole NFT with new attributes +- `ESDTRoleNFTCreate` : this role allows one to create a new NFT or SFT +- `ESDTRoleNFTBurn` : this role allows one to burn a specific NFT or SFT, for SFTs it also allows one to burn a specific quantity of a SFT. +- `ESDTTransferRole` : this role enables transfer only to specified addresses. The addresses with the transfer role can transfer anywhere. +- `ESDTRoleNFTAddURI` : this role allows one add URIs for a specific NFT or SFT. +- `ESDTRoleNFTUpdateAttributes` : this role allows one to change the attributes of a specific NFT or SFT. -For SFT: +### Shared Dynamic Roles +These roles are shared between NFTs and SFTs of dynamic collections. -- ESDTRoleNFTCreate : this role allows one to create a new SFT -- ESDTRoleNFTBurn : this role allows one to burn quantity of a specific SFT -- ESDTRoleNFTAddQuantity : this role allows one to add quantity of a specific SFT -- ESDTTransferRole : this role enables transfer only to specified addresses. The addresses with the transfer role can transfer anywhere. -- ESDTRoleNFTUpdate : this role allows one to update meta data attributes of a specific SFT -- ESDTRoleModifyRoyalties : this role allows one to modify royalities of a specific SFT -- ESDTRoleSetNewURI : this role allows one to set new uris of a specific SFT -- ESDTRoleModifyCreator : this role allows one to rewrite the creator of a specific token -- ESDTRoleNFTRecreate : this role allows one to recreate the whole NFT with new attributes +- `ESDTRoleNFTUpdate` : this role allows one to update meta data attributes of a specific NFT or SFT +- `ESDTRoleModifyRoyalties` : this role allows one to modify royalties of a specific NFT or SFT +- `ESDTRoleSetNewURI` : this role allows one to set new uris of a specific NFT or SFT +- `ESDTRoleModifyCreator` : this role allows one to rewrite the creator of a specific NFT or SFT +- `ESDTRoleNFTRecreate` : this role allows one to recreate the whole NFT or SFT with new attributes -To see how roles can be assigned, please refer to [this](/tokens/nft-tokens#assigning-roles) section. +### SFT Specific Roles +These roles are specific to SFTs. -[comment]: # (mx-context-auto) +- `ESDTRoleNFTAddQuantity` : this role allows one to add quantity of a specific SFT -## **Assigning roles** +### Assigning Collection Roles -Roles can be assigned by sending a transaction to the Metachain from the ESDT manager. +Roles can be assigned by sending a transaction to the Metachain from the ESDT manager-sent to the **System: ESDT Module** smart contract (address below). Within a transaction of this kind, any number of roles can be assigned (minimum 1). @@ -340,17 +317,18 @@ RolesAssigningTransaction { _For more details about how arguments have to be encoded, check [here](/developers/sc-calls-format)._ -For example, `ESDTRoleNFTCreate` = `45534454526f6c654e4654437265617465` - -Unset transactions are very similar. You can find an example [here](/tokens/fungible-tokens#unset-special-role). +:::tip +To be able to issue an NFT or SFT, the user needs to have the `ESDTNFTCreate` role. +To be able to issue an SFT with more than 1 quantity, the user needs to have the `ESDTNFTAddQuantity` role. +::: -[comment]: # (mx-context-auto) +## Creating an NFT or SFT -## **NFT/SFT fields** +### Defining an NFT or SFT -Below you can find the fields involved when creating an NFT. +Below you can find the fields involved when creating an NFT or SFT. -**NFT Name** +**NFT or SFT Name** - The name of the NFT or SFT @@ -360,17 +338,17 @@ Below you can find the fields involved when creating an NFT. **Royalties** -- Allows the creator to receive royalties for any transaction involving their NFT +- Allows the creator to receive royalties for any transaction involving their NFT or SFT - Base format is a numeric value between 0 an 10000 (0 meaning 0% and 10000 meaning 100%) **Hash** - Arbitrary field that should contain the hash of the NFT metadata -- Optional filed, should be left `null` when building the transaction to create the NFT +- Optional field, should be left `null` when building the transaction to create the NFT or SFT **Attributes** -- Represents additional information about the NFT or SFT, like picture traits or tags for your NFT/collection +- Represents additional information about the NFT or SFT, like picture traits or tags for your NFT or SFT - The field should follow a `metadata:ipfsCID/fileName.json;tags:tag1,tag2,tag3` format - Below you can find a sample for the extra metadata format that should be stored on IPFS: @@ -402,8 +380,9 @@ Below you can find the fields involved when creating an NFT. - Mandatory field that represents the URL to a [supported](#supported-media-types) media file ending with the file extension as described in the [example](#example) below - Field should contain the `Uniform Resource Identifier` +- If you are using IPFS, we strongly recommend not using the gateway URL of the provider (Pinata Cloud, Infura, Cloudflare, etc.) but rather the default IPFS one (https://ipfs.io/ipfs/ [ipfsCID]). This ensures that the media remains available even if the provider goes offline, and other gateways can be used in the future. -Note: As a best practice, we recommend storing the files for media & extra metadata(from attributes field) within same folder on your storage provider, ideally IPFS. Also, in order to have a thumbnail generated for the uploaded file the size of the file should be less or equal to 64MB. +Note: As a best practice, we recommend storing the files for media & extra metadata (from attributes field) within same folder on your storage provider, ideally IPFS. Also, in order to have a thumbnail generated for the uploaded file the size of the file should be less or equal to 64MB. :::important Please note that each argument must be encoded in hexadecimal format with an even number of characters. @@ -438,14 +417,14 @@ Below you can find a table with the supported media types for NFTs available on ### **Example** -Below you can find a table representing an example of the fields for a non-fungible token that resembles a song. +Below you can find a table representing an example of the fields for a non-fungible token that represents a song. | Property | Plain value | Encoded value | |----------------|--------------------------------------------------------|----------------------------------------------------------------------------------------------------------| | **NFT Name** | Beautiful song | 42656175746966756c20736f6e67 | | **Quantity** | 1 | 01 | -| **Royalties** | 7500 _=75%_ | 1d4c | +| **Royalties** | 7500 _(75%)_ | 1d4c | | **Hash** | 00 | 00 | | **Attributes** | metadata:_ipfsCID/song.json_;tags:song,beautiful,music | 6d657461646174613a697066734349442f736f6e672e6a736f6e3b746167733a736f6e672c62656175746966756c2c6d75736963 | | **URI** | _URL_to_decentralized_storage/song.mp3_ | 55524c5f746f5f646563656e7472616c697a65645f73746f726167652f736f6e672e6d7033 | @@ -455,15 +434,15 @@ In this example we are creating a NFT representing a song. Hash is left null, we [comment]: # (mx-context-auto) -## **Creation of an NFT** +### NFT or SFT Creation Transaction -A single address can own the role of creating an NFT for an ESDT token. This role can be transferred by using the `ESDTNFTCreateRoleTransfer` function. +A single address can own the role of creating an NFT or SFT for an ESDT token. This role can be transferred by using the `ESDTNFTCreateRoleTransfer` function. -An NFT can be created on top of an existing ESDT by sending a transaction to self that contains the function call that triggers the creation. -Any number of URIs can be assigned (minimum 1) +An NFT or SFT can be created on top of an existing ESDT by sending a transaction to self that contains the function call that triggers the creation. +Any number of URIs can be assigned (minimum 1). ```rust -NFTCreationTransaction { +NFTOrSFTCreationTransaction { Sender:
Receiver: Value: 0 @@ -471,7 +450,7 @@ NFTCreationTransaction { Data: "ESDTNFTCreate" + "@" + + "@" + + - "@" + + + "@" + + "@" + + "@" + + "@" + + @@ -486,7 +465,7 @@ _For more details about how arguments have to be encoded, check [here](/develope Additional gas refers to: - Transaction payload cost: Data field length \* 1500 (GasPerDataByte = 1500) -- Storage cost: Size of NFT data \* 50000 (StorePerByte = 50000) +- Storage cost: Size of NFT or SFT data \* 50000 (StorePerByte = 50000) To see more about the required fields, please refer to [this](/tokens/nft-tokens#nftsft-fields) section. @@ -498,17 +477,84 @@ Most of the times you will be able to create the NFTs by issuing one single tran This assumes that the metadata file as well as the NFT media is already uploaded to IPFS. There are times, however, when uploading the metadata file before issuing the NFT is not possible (eg. when issued from a smart contract) -In these cases it is possible to update an NFT with the metadata file after it was issued by sending an additional transaction. You can find more information [here](/tokens/nft-tokens#change-nft-attributes) about how to update the attributes +In these cases it is possible to update an NFT with the metadata file after it was issued by sending an additional transaction. You can find more information [here](/tokens/nft-tokens#change-nft-attributes) about how to update the attributes. + +[comment]: # (mx-context-auto) + +## Transfers + + +Performing an ESDT NFT transfer is done by specifying the receiver's address inside the `Data` field, alongside other details. An ESDT NFT transfer transaction has the following form: + +### Transferring to a Wallet + +```rust +TransferTransaction { + Sender: + Receiver: + Value: 0 + GasLimit: 1000000 + length of Data field in bytes * 1500 + Data: "ESDTNFTTransfer" + + "@" + + + "@" + + + "@" + + + "@" + +} +``` + +_For more details about how arguments have to be encoded, check [here](/developers/sc-calls-format)._ + +:::tip +Here is an example of an NFT identifier: `ABC-1a9c7d-05dc` + +The collection identifier is `ABC-1a9c7d` and the NFT nonce is `05dc`. Note that the `05dc` is hexadecimal encoded, it represents decimal 1500. + +Also note that a MultiversX address is in bech32, so you will need to convert the address from bech32 to hexadecimal. This can be done with the `hex()` method of mx-sdk-js-core for address (all the methods for addresses can be found [here](https://github.com/multiversx/mx-sdk-js-core/blob/main/src/address.ts)) or manually with an external converter which you can find [here.](https://utils.multiversx.com/converters#addresses-bech32-to-hexadecimal) +::: [comment]: # (mx-context-auto) -## **Other management operations** +### Transferring to a Smart Contract + +To perform the transfer from your account to the smart contract, you have to use the following transaction format: + +```rust +TransferTransaction { + Sender: + Receiver: + Value: 0 + GasLimit: 1000000 + extra for smart contract call + Data: "ESDTNFTTransfer" + + "@" + + + "@" + + + "@" + + + "@" + + + "@" + + + "@" + + + "@" + + + <...> +} +``` + +_For more details about how arguments have to be encoded, check [here](/developers/sc-calls-format)._ + +[comment]: # (mx-context-auto) + +### Transferring multiple tokens + +Multiple semi-fungible and/or non-fungible tokens can be transferred in a single transaction to a single receiver. + +More details can be found [here](/tokens/fungible-tokens#multiple-tokens-transfer). + +[comment]: # (mx-context-auto) + +## Managing Managing non-fungible tokens (NFTs) and semi-fungible tokens (SFTs) presents a greater degree of complexity compared to the management of simple fungible tokens. These unique tokens require specialized transactions for proper identification, ownership, and transfer, making the process of managing them more intricate than that of fungible tokens. [comment]: # (mx-context-auto) -### **Transfer NFT Creation Role** +### Transferring NFT or SFT creation role :::tip This role can be transferred only if the `canTransferNFTCreateRole` property of the token is set to `true`. @@ -533,7 +579,7 @@ _For more details about how arguments have to be encoded, check [here](/develope [comment]: # (mx-context-auto) -### **Stop NFT creation** +### Stopping NFT or SFT creation The ESDT manager can stop the creation of an NFT for the given ESDT forever by removing the only `ESDTRoleNFTCreate` role available. This is done by performing a transaction like this: @@ -553,7 +599,7 @@ _For more details about how arguments have to be encoded, check [here](/develope [comment]: # (mx-context-auto) -### **Change NFT Attributes** +### Changing NFT or SFT attributes An user that has the `ESDTRoleNFTUpdateAttributes` role set for a given ESDT, can change the attributes of a given NFT/SFT. @@ -581,7 +627,7 @@ To see how you can assign this role in case it is not set, please refer to [this [comment]: # (mx-context-auto) -### **Add URIs to NFT** +### Adding URIs to NFT or SFT An user that has the `ESDTRoleNFTAddURI` role set for a given ESDT, can add uris to a given NFT/SFT. This is done by performing a transaction like this: @@ -607,7 +653,7 @@ To see how you can assign this role in case it is not set, please refer to [this [comment]: # (mx-context-auto) -### **Add quantity (SFT only)** +### Adding quantity to SFTs A user that has the `ESDTRoleNFTAddQuantity` role set for a given Semi-Fungible Token, can increase its quantity. This function will not work for NFTs, because in that case the quantity cannot be higher than 1. @@ -630,7 +676,7 @@ If successful, the balance of the address for the given SFT will be increased wi [comment]: # (mx-context-auto) -### **Burn quantity** +### Burning NFT or SFT A user that has the `ESDTRoleNFTBurn` role set for a given semi-fungible Token, can burn some (or all) of the quantity. @@ -653,9 +699,9 @@ If successful, the quantity from the argument will be decreased from the balance [comment]: # (mx-context-auto) -### **Freezing and Unfreezing a single NFT** +### Freezing and Unfreezing a single NFT or SFT -The manager of an ESDT token may freeze the NFT held by a specific Account. As a consequence, no NFT can be transferred to or from the frozen Account. Freezing and unfreezing a single NFT of an Account are operations designed to help token managers to comply with regulations. The transaction that freezes a single NFT of an Account has the form: +The manager of an NFT or SFT Collection may freeze the NFT or SFT held by a specific Account. As a consequence, no NFT or SFT can be transferred to or from the frozen Account. Freezing and unfreezing a single NFT or SFT of an Account are operations designed to help token managers to comply with regulations. The transaction that freezes a single NFT or SFT of an Account has the form: ```rust FreezeTransaction { @@ -665,7 +711,7 @@ FreezeTransaction { GasLimit: 60000000 Data: "freezeSingleNFT" + "@" + + - "@" + + "@" + "@" + } ``` @@ -682,7 +728,7 @@ UnfreezeTransaction { GasLimit: 60000000 Data: "unFreezeSingleNFT" + "@" + + - "@" + + + "@" + + "@" + } ``` @@ -691,9 +737,9 @@ _For more details about how arguments have to be encoded, check [here](/develope [comment]: # (mx-context-auto) -### **Wiping a single NFT** +### Wiping a single NFT or SFT -The manager of an ESDT token may wipe out a single NFT held by a frozen Account. This operation is similar to burning the quantity, but the Account must have been frozen beforehand, and it must be done by the token manager. Wiping the tokens of an Account is an operation designed to help token managers to comply with regulations. Such a transaction has the form: +The manager of an NFT or SFT Collection may wipe out a single NFT or SFT held by a frozen Account. This operation is similar to burning the quantity, but the Account must have been frozen beforehand, and it must be done by the token manager. Wiping the tokens of an Account is an operation designed to help token managers to comply with regulations. Such a transaction has the form: ```rust WipeTransaction { @@ -703,7 +749,7 @@ WipeTransaction { GasLimit: 60000000 Data: "wipeSingleNFT" + "@" + + - "@" + + + "@" + + "@" + } ``` @@ -712,9 +758,9 @@ _For more details about how arguments have to be encoded, check [here](/develope [comment]: # (mx-context-auto) -### **Modify Royalties** +### Modifying the royalties of a Dynamic Collection -The manager of an ESDT token may want to set new royalities. This operation will rewrite the royalities on the specified token ID. +The manager of an NFT or SFT Dynamic Collection may want to set new royalties. This operation will rewrite the royalties on the specified token ID. It requires `ESDTRoleNFTModifyRoyalties` role. This is done by performing a transaction like this: @@ -726,7 +772,7 @@ ModifyRoyalitiesTransaction { GasLimit: 60000000 Data: "ESDTModifyRoyalties" + "@" + + - "@" + + + "@" + + "@" + } ``` @@ -735,9 +781,9 @@ _For more details about how arguments have to be encoded, check [here](/develope [comment]: # (mx-context-auto) -### **Set new URIs** +### Setting new URIs for a Dynamic Collection -The manager of an ESDT token may want to set new URIs. This operation will rewrite the URIs on the specified token ID. +The manager of an NFT or SFT Dynamic Collection may want to set new URIs. This operation will rewrite the URIs on the specified token ID. It requires `ESDTRoleNFTSetNewURIs` role. This is done by performing a transaction like this: @@ -749,7 +795,7 @@ SetNewURIsTransaction { GasLimit: 60000000 Data: "ESDTSetNewURIs" + "@" + + - "@" + + + "@" + + "@" + + "@" + + ... @@ -760,9 +806,9 @@ _For more details about how arguments have to be encoded, check [here](/develope [comment]: # (mx-context-auto) -### **Modify Creator** +### Modifying the creator of a Dynamic Collection -The creator of a token can be changed. For this, the token has to be moved to the new creator account. The new creator +The creator of an NFT or SFT Collection can be changed. For this, the token has to be moved to the new creator account. The new creator account requires `ESDTRoleModifyCreator` role. Also, the token has to be of dynamic type in order for this to work. The creator can be modified using a transaction like this: @@ -783,9 +829,9 @@ _For more details about how arguments have to be encoded, check [here](/develope [comment]: # (mx-context-auto) -### **MetaData Update** +### Updating the metadata of a Dynamic NFT or SFT -The manager of an ESDT token may want to update token metadata. This operation will update token metadata on the specified token ID. +The manager of an NFT or SFT Collection may want to update the metadata of the NFT or SFT. This operation will update the metadata on the specified token ID. It requires `ESDTRoleNFTUpdate` role. If nothing is received for a given attribute, the old version of that attribute will be kept. This is done by performing a transaction like this: @@ -798,7 +844,7 @@ MetaDataUpdateTransaction { GasLimit: 60000000 Data: "ESDTMetaDataUpdate" + "@" + + - "@" + + + "@" + + "@" + + "@" + + "@" + + @@ -811,11 +857,9 @@ _For more details about how arguments have to be encoded, check [here](/develope [comment]: # (mx-context-auto) -### **MetaData Recreate** +### Recreating the Metadata of a Dynamic NFT or SFT -The whole NFT can be recreated with new attributes using a transaction like this: - -The manager of an ESDT token may want to recreate the whole token with new attributes. This operation will recreate token attributes on the specified token ID. +The manager of an NFT or SFT Dynamic Collection may want to recreate the whole NFT or SFT with new attributes. This operation will recreate the NFT or SFT attributes on the specified token ID. It requires `ESDTRoleNFTRecreate` role. If an argument is not being set, that field is set to zero. This is done by performing a transaction like this: @@ -828,7 +872,7 @@ MetaDataRecreateTransaction { GasLimit: 60000000 Data: "ESDTMetaDataRecreate" + "@" + + - "@" + + + "@" + + "@" + + "@" + + "@" + + @@ -841,25 +885,6 @@ _For more details about how arguments have to be encoded, check [here](/develope [comment]: # (mx-context-auto) -### **Make token dynamic** - -The ESDT manager can change token type to dynamic using a transaction like this: - -```rust -ChangeToDynamicTransaction { - Sender: - Receiver: erd1qqqqqqqqqqqqqqqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqzllls8a5w6u - Value: 0 - GasLimit: 60000000 - Data: "changeToDynamic" + - "@" + -} -``` - -The following token types cannot be changed to dynamic: `FungibleESDT`, `NonFungibleESDT`, `NonFungibleESDTv2` - -_For more details about how arguments have to be encoded, check [here](/developers/sc-calls-format)._ - [comment]: # (mx-context-auto) ### **Update token** @@ -889,134 +914,60 @@ _For more details about how arguments have to be encoded, check [here](/develope [comment]: # (mx-context-auto) -### **Register dynamic token** - -A token can be registered directly as dynamic. - -This can be done using a transaction like this: - -```rust -RegisterDynamicTransaction { - Sender: - Receiver: erd1qqqqqqqqqqqqqqqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqzllls8a5w6u - Value: 50000000000000000 # (0.05 EGLD) - GasLimit: 60000000 - Data: "registerDynamic" + - "@" + + - "@" + + - "@" + - # For META token type only - "@" + - # (number of decimals) -} -``` - -The following token types cannot be registered as dynamic: `FungibleESDT` - -[comment]: # (mx-context-auto) - -### **Register and set all roles to dynamic** -A token can be registered directly as dynamic together will all roles set for the specific type. - -This can be done using a transaction like this: - -```rust -RegisterAndSetAllRolesDynamicTransaction { - Sender: - Receiver: erd1qqqqqqqqqqqqqqqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqzllls8a5w6u - Value: 50000000000000000 # (0.05 EGLD) - GasLimit: 60000000 - Data: "registerAndSetAllRolesDynamic" + - "@" + + - "@" + + - "@" + + - # For META token type only - "@" + - # (number of decimals) -} -``` - -The following token types cannot be registered as dynamic: `FungibleESDT` - -[comment]: # (mx-context-auto) - -### **Transferring token management rights** +### Transferring token management rights The manager of an ESDT token can transfer the ownership if the ESDT was created as upgradable. Check the [ESDT - Upgrading (changing properties)](/tokens/fungible-tokens#upgrading-changing-properties) section for more details. [comment]: # (mx-context-auto) -### **Upgrading (changing properties)** +### Upgrading (changing properties) The manager of an ESDT token may individually change any of the properties of the token, or multiple properties at once, only if the ESDT was created as upgradable. Check the [ESDT - Transferring token management rights](/tokens/fungible-tokens#transferring-token-management-rights) section for more details. [comment]: # (mx-context-auto) -## **Transfers** -Performing an ESDT NFT transfer is done by specifying the receiver's address inside the `Data` field, alongside other details. An ESDT NFT transfer transaction has the following form: +## **Branding** -```rust -TransferTransaction { - Sender: - Receiver: - Value: 0 - GasLimit: 1000000 + length of Data field in bytes * 1500 - Data: "ESDTNFTTransfer" + - "@" + + - "@" + + - "@" + + - "@" + -} -``` +Anyone can create NFTs and SFTs tokens on MultiversX Network. There are also no limits in tokens names or tickers. For example, +one issues an `AliceToken` with the ticker `ALC`. Anyone else is free to create a new token with the same token name and +the same token ticker. The only difference will be the random sequence of the token identifier. So the "original" token +could have received the random sequence `1q2w3e` resulting in the `ALC-1q2w3e` identifier, while the second token could +have received the sequence `3e4r5t` resulting in `ALC-3e4r5t`. -_For more details about how arguments have to be encoded, check [here](/developers/sc-calls-format)._ +In order to differentiate between an original token and other tokens with the same name or ticker, we have introduced a +branding mechanism that allows tokens owners to provide a logo, a description, a website, as well as social link for their tokens. MultiversX products such as Explorer, Wallet and so on +will display tokens in accordance to their branding, if any. -:::tip -Here is an example of an NFT identifier: `ABC-1a9c7d-05dc` +A token owner can submit a branding request by opening a Pull Request on https://github.com/multiversx/mx-assets. -The collection identifier is `ABC-1a9c7d` and the NFT nonce is `05dc`. Note that the `05dc` is hexadecimal encoded, it represents decimal 1500. +[comment]: # (mx-context-auto) -Also note that a MultiversX address is in bech32, so you will need to convert the address from bech32 to hexadecimal. This can be done with the `hex()` method of mx-sdk-js-core for address (all the methods for addresses can be found [here](https://github.com/multiversx/mx-sdk-js-core/blob/main/src/address.ts)) or manually with an external converter which you can find [here.](https://utils.multiversx.com/converters#addresses-bech32-to-hexadecimal) -::: +### **Submitting a branding request** -[comment]: # (mx-context-auto) +Submitting a branding request can be done directly on GitHub by creating a PR to the https://github.com/multiversx/mx-assets repository or using the following website: https://assets.multiversx.com/. -## **Transfers to a Smart Contract** +The request requires the logo in .png and .svg format, as well as a .json file containing all the relevant information. -To perform the transfer from your account to the smart contract, you have to use the following transaction format: +Here’s a prefilled template for the .json file to get you started: -```rust -TransferTransaction { - Sender: - Receiver: - Value: 0 - GasLimit: 1000000 + extra for smart contract call - Data: "ESDTNFTTransfer" + - "@" + + - "@" + + - "@" + + - "@" + + - "@" + + - "@" + + - "@" + + - <...> +```json +{ + "website": "https://www.example.org", + "description": "MultiversX Token is a collection of 10.000 unique and randomly generated tokens.", + "social": { + "email": "mxt-token@multiversxtoken.com", + "blog": "https://www.multiversxtoken.com/MXT-token-blog", + "twitter": "https://twitter.com/MXT-token-twitter" + }, + "status": "active" } ``` -_For more details about how arguments have to be encoded, check [here](/developers/sc-calls-format)._ - [comment]: # (mx-context-auto) -## **Multiple tokens transfer** - -Multiple semi-fungible and/or non-fungible tokens can be transferred in a single transaction to a single receiver. - -More details can be found [here](/tokens/fungible-tokens#multiple-tokens-transfer). - -[comment]: # (mx-context-auto) ## **Example flow** @@ -1041,7 +992,7 @@ _For more details about how arguments have to be encoded, check [here](/develope **Step 2: Fetch the token identifier** For doing this, one has to check the previously sent transaction and see the Smart Contract Result of it. -It will look similar to `@ok@414c432d317132773365`. The `414c432d317132773365` represents the token identifier in hexadecimal encoding. +It will look similar to `@ok@414c432d317132773365`. The `414c432d317132773365` represents the token identifier in hexadecimal [encoding](https://utils.multiversx.com/). **Step 3: Set roles** @@ -1277,29 +1228,30 @@ https://gateway.multiversx.com/transaction/*txHash*?withResults=true -```rust +```json { - "data": { - "transaction": { - ... - "logs": { - "address": "...", - "events": [ - { - "address": "...", - "identifier": "ESDTNFTTransfer", - "topics": [ - "VFNGVC1jODY3ZzM=", // TSFT-c867g3 - "CEI=", // 2114 - "Ag==", // 2 - "givNK+JiLZ5VA5/dP11QKoYEn7qoqnD8uPchH3ZMLw4=" // erd1sg4u62lzvgkeu4grnlwn7h2s92rqf8a64z48pl9c7us37ajv9u8qj9w8xg - ], - "data": null - }, - } - } - "error": "", - "code": "successful" + "data": { + "transaction": { + "logs": { + "address": "...", + "events": [ + { + "address": "...", + "identifier": "ESDTNFTTransfer", + "topics": [ + "VFNGVC1jODY3ZzM=", // TSFT-c867g3 + "CEI=", // 2114 + "Ag==", // 2 + "givNK+JiLZ5VA5/dP11QKoYEn7qoqnD8uPchH3ZMLw4=" // erd1sg4u62lzvgkeu4grnlwn7h2s92rqf8a64z48pl9c7us37ajv9u8qj9w8xg + ], + "data": null + } + ] + } + } + }, + "error": "", + "code": "successful" } ``` diff --git a/yarn.lock b/yarn.lock index b82339bb3..9c014a64f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -75,6 +75,11 @@ "@algolia/requester-common" "4.24.0" "@algolia/transporter" "4.24.0" +"@algolia/client-common@5.5.2": + version "5.5.2" + resolved "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.5.2.tgz" + integrity sha512-LFkAilO+t06/SsFLTzdyh4FD8FGldCXD6Hf3O1ygcrOrxSNQvowy/Dtmqi68MbGP5/MKj24fFmFWhUGhSPh4wA== + "@algolia/client-personalization@4.24.0": version "4.24.0" resolved "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.24.0.tgz" @@ -84,6 +89,16 @@ "@algolia/requester-common" "4.24.0" "@algolia/transporter" "4.24.0" +"@algolia/client-search@>= 4.9.1 < 6": + version "5.5.2" + resolved "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.5.2.tgz" + integrity sha512-fJH+U6LzzI/LnGkD/Uy8VA8MbmF8ERRG5bXYiIsrcMC/QGyOW5G5y3XNhZlxUhqesrO7w+oTE7ZQ0YMXtW/5/Q== + dependencies: + "@algolia/client-common" "5.5.2" + "@algolia/requester-browser-xhr" "5.5.2" + "@algolia/requester-fetch" "5.5.2" + "@algolia/requester-node-http" "5.5.2" + "@algolia/client-search@4.24.0": version "4.24.0" resolved "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.24.0.tgz" @@ -134,11 +149,25 @@ dependencies: "@algolia/requester-common" "4.24.0" +"@algolia/requester-browser-xhr@5.5.2": + version "5.5.2" + resolved "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.5.2.tgz" + integrity sha512-fCsJL+97TswpDO5gu8CKf68ZS5yBSksaK8bszeU7BrjSYgu2vL/eFxpN4wxIBGIbDVJtcriWI0aTkT2ovrn/iQ== + dependencies: + "@algolia/client-common" "5.5.2" + "@algolia/requester-common@4.24.0": version "4.24.0" resolved "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.24.0.tgz" integrity sha512-k3CXJ2OVnvgE3HMwcojpvY6d9kgKMPRxs/kVohrwF5WMr2fnqojnycZkxPoEg+bXm8fi5BBfFmOqgYztRtHsQA== +"@algolia/requester-fetch@5.5.2": + version "5.5.2" + resolved "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.5.2.tgz" + integrity sha512-zKawgSZR7toQEERwP4wazvQ6eR7I8KE4nidQzdWL4/8sxxhwiNvn8x9FjCePDnzzHmeiQy9NnUlw4rmT8R0nYg== + dependencies: + "@algolia/client-common" "5.5.2" + "@algolia/requester-node-http@4.24.0": version "4.24.0" resolved "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.24.0.tgz" @@ -146,6 +175,13 @@ dependencies: "@algolia/requester-common" "4.24.0" +"@algolia/requester-node-http@5.5.2": + version "5.5.2" + resolved "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.5.2.tgz" + integrity sha512-rBVG8rgzUws2CB972RSgtn3/gRArvp5VDbnTODANj2V17qV/gm/CmV2Ax0IWpgWDh1xWxpEs8s5l4oc0m8QN9A== + dependencies: + "@algolia/client-common" "5.5.2" + "@algolia/transporter@4.24.0": version "4.24.0" resolved "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.24.0.tgz" @@ -190,7 +226,7 @@ resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.7.tgz" integrity sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw== -"@babel/core@^7.21.3", "@babel/core@^7.23.3", "@babel/core@^7.24.4": +"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.0.0-0 || ^8.0.0-0 <8.0.0", "@babel/core@^7.12.0", "@babel/core@^7.13.0", "@babel/core@^7.21.3", "@babel/core@^7.23.3", "@babel/core@^7.24.4", "@babel/core@^7.4.0 || ^8.0.0-0 <8.0.0": version "7.24.7" resolved "https://registry.npmjs.org/@babel/core/-/core-7.24.7.tgz" integrity sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g== @@ -1436,7 +1472,7 @@ utility-types "^3.10.0" webpack "^5.88.1" -"@docusaurus/plugin-content-docs@3.5.2": +"@docusaurus/plugin-content-docs@*", "@docusaurus/plugin-content-docs@3.5.2": version "3.5.2" resolved "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.5.2.tgz" integrity sha512-Bt+OXn/CPtVqM3Di44vHjE7rPCEsRCB/DMo2qoOuozB9f7+lsdrHvD0QCHdBs0uhz6deYJDppAr2VgqybKPlVQ== @@ -1668,7 +1704,7 @@ fs-extra "^11.1.1" tslib "^2.6.0" -"@docusaurus/types@3.5.2": +"@docusaurus/types@*", "@docusaurus/types@3.5.2": version "3.5.2" resolved "https://registry.npmjs.org/@docusaurus/types/-/types-3.5.2.tgz" integrity sha512-N6GntLXoLVUwkZw7zCxwy9QiuEXIcTVzA9AkmNw16oc0AP3SXLrMmDMMBIfgqwuKWa6Ox6epHol9kMtJqekACw== @@ -1740,7 +1776,7 @@ resolved "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.7.2.tgz" integrity sha512-Zs+YeHUC5fkt7Mg1l6XTniei3k4bwG/yo3iFUtZWd/pMx9g3fdvkSK9E0FOC+++phXOka78uJcYb8JaFkW52Xg== -"@fortawesome/fontawesome-svg-core@6.5.2": +"@fortawesome/fontawesome-svg-core@~1 || ~6", "@fortawesome/fontawesome-svg-core@6.5.2": version "6.5.2" resolved "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.5.2.tgz" integrity sha512-5CdaCBGl8Rh9ohNdxeeTMxIj8oc3KNBgIeLMvJosBMdslK/UnEB8rzyDRrbKdL1kDweqBPo4GT9wvnakHWucZw== @@ -1892,7 +1928,7 @@ unist-util-visit "^5.0.0" vfile "^6.0.0" -"@mdx-js/react@3.0.1", "@mdx-js/react@^3.0.0": +"@mdx-js/react@^3.0.0", "@mdx-js/react@3.0.1": version "3.0.1" resolved "https://registry.npmjs.org/@mdx-js/react/-/react-3.0.1.tgz" integrity sha512-9ZrPIU4MGf6et1m1ov3zKf+q9+deetI51zprKB1D/z3NOb+rUxxtEl3mCjW5wTGh6VhRdwPueh1oRzi6ezkA8A== @@ -1907,7 +1943,7 @@ "@nodelib/fs.stat" "2.0.5" run-parallel "^1.1.9" -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": +"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": version "2.0.5" resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== @@ -2111,7 +2147,7 @@ "@svgr/babel-plugin-transform-react-native-svg" "8.1.0" "@svgr/babel-plugin-transform-svg-component" "8.0.0" -"@svgr/core@8.1.0": +"@svgr/core@*", "@svgr/core@8.1.0": version "8.1.0" resolved "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz" integrity sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA== @@ -2456,7 +2492,7 @@ "@types/history" "^4.7.11" "@types/react" "*" -"@types/react@*": +"@types/react@*", "@types/react@>= 16.8.0 < 19.0.0", "@types/react@>=16", "@types/react@>=18": version "18.3.3" resolved "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz" integrity sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw== @@ -2551,7 +2587,7 @@ resolved "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz" integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== -"@webassemblyjs/ast@1.12.1", "@webassemblyjs/ast@^1.12.1": +"@webassemblyjs/ast@^1.12.1", "@webassemblyjs/ast@1.12.1": version "1.12.1" resolved "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz" integrity sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg== @@ -2652,7 +2688,7 @@ "@webassemblyjs/wasm-gen" "1.12.1" "@webassemblyjs/wasm-parser" "1.12.1" -"@webassemblyjs/wasm-parser@1.12.1", "@webassemblyjs/wasm-parser@^1.12.1": +"@webassemblyjs/wasm-parser@^1.12.1", "@webassemblyjs/wasm-parser@1.12.1": version "1.12.1" resolved "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz" integrity sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ== @@ -2707,7 +2743,7 @@ acorn-walk@^8.0.0: dependencies: acorn "^8.11.0" -acorn@^8.0.0, acorn@^8.0.4, acorn@^8.11.0, acorn@^8.7.1, acorn@^8.8.2: +"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8, acorn@^8.0.0, acorn@^8.0.4, acorn@^8.11.0, acorn@^8.7.1, acorn@^8.8.2: version "8.12.0" resolved "https://registry.npmjs.org/acorn/-/acorn-8.12.0.tgz" integrity sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw== @@ -2732,7 +2768,12 @@ ajv-formats@^2.1.1: dependencies: ajv "^8.0.0" -ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: +ajv-keywords@^3.4.1: + version "3.5.2" + resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + +ajv-keywords@^3.5.2: version "3.5.2" resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== @@ -2744,7 +2785,7 @@ ajv-keywords@^5.1.0: dependencies: fast-deep-equal "^3.1.3" -ajv@^6.12.2, ajv@^6.12.5: +ajv@^6.12.2, ajv@^6.12.5, ajv@^6.9.1: version "6.12.6" resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -2754,7 +2795,7 @@ ajv@^6.12.2, ajv@^6.12.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.0.0, ajv@^8.6.0, ajv@^8.9.0: +ajv@^8.0.0, ajv@^8.6.0, ajv@^8.8.2, ajv@^8.9.0, ajv@>=8: version "8.16.0" resolved "https://registry.npmjs.org/ajv/-/ajv-8.16.0.tgz" integrity sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw== @@ -2771,7 +2812,7 @@ algoliasearch-helper@^3.13.3: dependencies: "@algolia/events" "^4.0.1" -algoliasearch@^4.18.0, algoliasearch@^4.19.1: +algoliasearch@^4.18.0, algoliasearch@^4.19.1, "algoliasearch@>= 3.1 < 6", "algoliasearch@>= 4.9.1 < 6": version "4.24.0" resolved "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.24.0.tgz" integrity sha512-bf0QV/9jVejssFBmz2HQLxUadxk574t4iwjCKp5E7NBzwKkrDEhKPISIIjAU/p6K5qDx3qoeh4+26zWN1jmw3g== @@ -2910,7 +2951,7 @@ at-least-node@^1.0.0: resolved "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz" integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== -autoprefixer@10.4.19, autoprefixer@^10.4.14, autoprefixer@^10.4.19: +autoprefixer@^10.4.14, autoprefixer@^10.4.19, autoprefixer@10.4.19: version "10.4.19" resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz" integrity sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew== @@ -3074,7 +3115,7 @@ braces@^3.0.3, braces@~3.0.2: dependencies: fill-range "^7.1.1" -browserslist@^4.0.0, browserslist@^4.18.1, browserslist@^4.21.10, browserslist@^4.22.2, browserslist@^4.23.0: +browserslist@^4.0.0, browserslist@^4.18.1, browserslist@^4.21.10, browserslist@^4.22.2, browserslist@^4.23.0, "browserslist@>= 4.21.0": version "4.23.1" resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.23.1.tgz" integrity sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw== @@ -3313,7 +3354,7 @@ clone-deep@^4.0.1: kind-of "^6.0.2" shallow-clone "^3.0.0" -clsx@2.1.1, clsx@^2.0.0: +clsx@^2.0.0, clsx@2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz" integrity sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA== @@ -3337,16 +3378,16 @@ color-convert@^2.0.1: dependencies: color-name "~1.1.4" -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - color-name@~1.1.4: version "1.1.4" resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + colord@^2.9.3: version "2.9.3" resolved "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz" @@ -3367,11 +3408,6 @@ comma-separated-tokens@^2.0.0: resolved "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz" integrity sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg== -commander@7, commander@^7.2.0: - version "7.2.0" - resolved "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz" - integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== - commander@^10.0.0: version "10.0.1" resolved "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz" @@ -3392,11 +3428,21 @@ commander@^5.1.0: resolved "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz" integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== +commander@^7.2.0: + version "7.2.0" + resolved "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz" + integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== + commander@^8.3.0: version "8.3.0" resolved "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz" integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== +commander@7: + version "7.2.0" + resolved "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz" + integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== + common-path-prefix@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz" @@ -3741,11 +3787,18 @@ cytoscape-cose-bilkent@^4.1.0: dependencies: cose-base "^1.0.0" -cytoscape@^3.28.1: +cytoscape@^3.2.0, cytoscape@^3.28.1: version "3.29.2" resolved "https://registry.npmjs.org/cytoscape/-/cytoscape-3.29.2.tgz" integrity sha512-2G1ycU28Nh7OHT9rkXRLpCDP30MKH1dXJORZuBhtEhEW7pKwgPi77ImqlCWinouyE1PNepIOGZBOrE84DG7LyQ== +d3-array@^3.2.0, "d3-array@2 - 3", "d3-array@2.10.0 - 3", "d3-array@2.5.0 - 3", d3-array@3: + version "3.2.4" + resolved "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz" + integrity sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg== + dependencies: + internmap "1 - 2" + "d3-array@1 - 2": version "2.12.1" resolved "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz" @@ -3753,13 +3806,6 @@ cytoscape@^3.28.1: dependencies: internmap "^1.0.0" -"d3-array@2 - 3", "d3-array@2.10.0 - 3", "d3-array@2.5.0 - 3", d3-array@3, d3-array@^3.2.0: - version "3.2.4" - resolved "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz" - integrity sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg== - dependencies: - internmap "1 - 2" - d3-axis@3: version "3.0.0" resolved "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz" @@ -3869,16 +3915,16 @@ d3-hierarchy@3: dependencies: d3-color "1 - 3" +d3-path@^3.1.0, "d3-path@1 - 3", d3-path@3: + version "3.1.0" + resolved "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz" + integrity sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ== + d3-path@1: version "1.0.9" resolved "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz" integrity sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg== -"d3-path@1 - 3", d3-path@3, d3-path@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz" - integrity sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ== - d3-polygon@3: version "3.0.1" resolved "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz" @@ -3926,13 +3972,6 @@ d3-scale@4: resolved "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz" integrity sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ== -d3-shape@3: - version "3.2.0" - resolved "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz" - integrity sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA== - dependencies: - d3-path "^3.1.0" - d3-shape@^1.2.0: version "1.3.7" resolved "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz" @@ -3940,6 +3979,13 @@ d3-shape@^1.2.0: dependencies: d3-path "1" +d3-shape@3: + version "3.2.0" + resolved "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz" + integrity sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA== + dependencies: + d3-path "^3.1.0" + "d3-time-format@2 - 4", d3-time-format@4: version "4.1.0" resolved "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz" @@ -4062,20 +4108,27 @@ debounce@^1.2.1: resolved "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz" integrity sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug== -debug@2.6.9, debug@^2.6.0: +debug@^2.6.0: version "2.6.9" resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -debug@4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1: +debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@4: version "4.3.5" resolved "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz" integrity sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg== dependencies: ms "2.1.2" +debug@2.6.9: + version "2.6.9" + resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + decode-named-character-reference@^1.0.0: version "1.0.2" resolved "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz" @@ -4156,16 +4209,16 @@ delaunator@5: dependencies: robust-predicates "^3.0.2" -depd@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - depd@~1.1.2: version "1.1.2" resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== +depd@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + dequal@^2.0.0: version "2.0.3" resolved "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz" @@ -4782,7 +4835,7 @@ feed@^4.2.2: dependencies: xml-js "^1.6.11" -file-loader@^6.2.0: +file-loader@*, file-loader@^6.2.0: version "6.2.0" resolved "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz" integrity sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw== @@ -4931,7 +4984,17 @@ fs-extra@^11.1.1, fs-extra@^11.2.0: jsonfile "^6.0.1" universalify "^2.0.0" -fs-extra@^9.0.0, fs-extra@^9.0.1: +fs-extra@^9.0.0: + version "9.1.0" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@^9.0.1: version "9.1.0" resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz" integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== @@ -5023,7 +5086,14 @@ glob-parent@^5.1.2, glob-parent@~5.1.2: dependencies: is-glob "^4.0.1" -glob-parent@^6.0.1, glob-parent@^6.0.2: +glob-parent@^6.0.1: + version "6.0.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob-parent@^6.0.2: version "6.0.2" resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== @@ -5142,16 +5212,16 @@ got@^12.1.0: p-cancelable "^3.0.0" responselike "^3.0.0" -graceful-fs@4.2.10: - version "4.2.10" - resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== - graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: version "4.2.11" resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== +graceful-fs@4.2.10: + version "4.2.10" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + gray-matter@^4.0.3: version "4.0.3" resolved "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz" @@ -5270,7 +5340,7 @@ hast-util-from-parse5@^8.0.0: vfile-location "^5.0.0" web-namespaces "^2.0.0" -hast-util-is-element@3.0.0, hast-util-is-element@^3.0.0: +hast-util-is-element@^3.0.0, hast-util-is-element@3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz" integrity sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g== @@ -5513,6 +5583,16 @@ http-deceiver@^1.2.7: resolved "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz" integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw== +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz" + integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + http-errors@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" @@ -5524,16 +5604,6 @@ http-errors@2.0.0: statuses "2.0.1" toidentifier "1.0.1" -http-errors@~1.6.2: - version "1.6.3" - resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz" - integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" - http-parser-js@>=0.5.1: version "0.5.8" resolved "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz" @@ -5649,7 +5719,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: +inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3, inherits@2, inherits@2.0.4: version "2.0.4" resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -5659,16 +5729,16 @@ inherits@2.0.3: resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== -ini@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz" - integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== - ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: version "1.3.8" resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== +ini@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz" + integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== + inline-style-parser@0.1.1: version "0.1.1" resolved "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz" @@ -5688,16 +5758,16 @@ internal-slot@^1.0.7: hasown "^2.0.0" side-channel "^1.0.4" -"internmap@1 - 2": - version "2.0.3" - resolved "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz" - integrity sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg== - internmap@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz" integrity sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw== +"internmap@1 - 2": + version "2.0.3" + resolved "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz" + integrity sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg== + interpret@^1.0.0: version "1.4.0" resolved "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz" @@ -5710,16 +5780,16 @@ invariant@^2.2.4: dependencies: loose-envify "^1.0.0" -ipaddr.js@1.9.1: - version "1.9.1" - resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - ipaddr.js@^2.0.1: version "2.2.0" resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz" integrity sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA== +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + is-alphabetical@^2.0.0: version "2.0.1" resolved "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz" @@ -5999,11 +6069,6 @@ is-yarn-global@^0.4.0: resolved "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.4.1.tgz" integrity sha512-/kppl+R+LO5VmhYSEWARUFjodS25D68gvj8W7z0I7OWhUla5xWu8KL6CtB2V0R6yqhnRgbcaREMr4EEM6htLPQ== -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" - integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== - isarray@^2.0.5: version "2.0.5" resolved "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz" @@ -6014,6 +6079,11 @@ isarray@~1.0.0: resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" + integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== + isexe@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" @@ -7291,7 +7361,7 @@ micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: braces "^3.0.3" picomatch "^2.3.1" -mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": +"mime-db@>= 1.43.0 < 2": version "1.52.0" resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== @@ -7301,14 +7371,40 @@ mime-db@~1.33.0: resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz" integrity sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ== -mime-types@2.1.18, mime-types@~2.1.17: +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.27: + version "2.1.35" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime-types@^2.1.31: + version "2.1.35" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime-types@~2.1.17, mime-types@2.1.18: version "2.1.18" resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz" integrity sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ== dependencies: mime-db "~1.33.0" -mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.24, mime-types@~2.1.34: +mime-types@~2.1.24: + version "2.1.35" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime-types@~2.1.34: version "2.1.35" resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== @@ -7348,7 +7444,7 @@ minimalistic-assert@^1.0.0: resolved "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz" integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== -minimatch@3.1.2, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: +minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2, minimatch@3.1.2: version "3.1.2" resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== @@ -7775,6 +7871,13 @@ path-scurry@^1.11.1: lru-cache "^10.2.0" minipass "^5.0.0 || ^6.0.2 || ^7.0.0" +path-to-regexp@^1.7.0: + version "1.8.0" + resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz" + integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== + dependencies: + isarray "0.0.1" + path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz" @@ -7785,13 +7888,6 @@ path-to-regexp@2.2.1: resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz" integrity sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ== -path-to-regexp@^1.7.0: - version "1.8.0" - resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz" - integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== - dependencies: - isarray "0.0.1" - path-type@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" @@ -8156,7 +8252,7 @@ postcss-zindex@^6.0.2: resolved "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-6.0.2.tgz" integrity sha512-5BxW9l1evPB/4ZIc+2GobEBoKC+h8gPGCMi+jxsYvd2x0mjq7wazk6DrP71pStqxE9Foxh5TVnonbWpFZzXaYg== -postcss@8.4.39, postcss@^8.4.21, postcss@^8.4.23, postcss@^8.4.24, postcss@^8.4.26, postcss@^8.4.33, postcss@^8.4.38: +"postcss@^7.0.0 || ^8.0.1", postcss@^8.0.0, postcss@^8.0.9, postcss@^8.1.0, postcss@^8.2.14, postcss@^8.2.2, postcss@^8.4.21, postcss@^8.4.23, postcss@^8.4.24, postcss@^8.4.26, postcss@^8.4.31, postcss@^8.4.33, postcss@^8.4.38, postcss@>=8.0.9, postcss@8.4.39: version "8.4.39" resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.39.tgz" integrity sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw== @@ -8183,7 +8279,7 @@ pretty-time@^1.1.0: resolved "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz" integrity sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA== -prism-react-renderer@2.3.1, prism-react-renderer@^2.3.0: +prism-react-renderer@^2.3.0, prism-react-renderer@2.3.1: version "2.3.1" resolved "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-2.3.1.tgz" integrity sha512-Rdf+HzBLR7KYjzpJ1rSoxT9ioO85nZngQEoFIhL07XhtJHlCU3SOz0GJ6+qvMyQe0Se+BV3qpe6Yd/NmQF5Juw== @@ -8284,16 +8380,21 @@ randombytes@^2.1.0: dependencies: safe-buffer "^5.1.0" -range-parser@1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz" - integrity sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A== +range-parser@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -range-parser@^1.2.1, range-parser@~1.2.1: +range-parser@~1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== +range-parser@1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz" + integrity sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A== + raw-body@2.5.2: version "2.5.2" resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz" @@ -8344,7 +8445,7 @@ react-dev-utils@^12.0.1: strip-ansi "^6.0.1" text-table "^0.2.0" -react-dom@18.2.0: +react-dom@*, "react-dom@^0.14.0 || ^15.0.0 || ^16 || ^17 || ^18 || ^19", "react-dom@^16.6.0 || ^17.0.0 || ^18.0.0", react-dom@^18.0.0, "react-dom@>= 16.8.0 < 19.0.0", react-dom@18.2.0: version "18.2.0" resolved "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz" integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== @@ -8395,7 +8496,7 @@ react-loadable-ssr-addon-v5-slorber@^1.0.1: dependencies: "@babel/runtime" "^7.10.3" -"react-loadable@npm:@docusaurus/react-loadable@6.0.0": +react-loadable@*, "react-loadable@npm:@docusaurus/react-loadable@6.0.0": version "6.0.0" resolved "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-6.0.0.tgz" integrity sha512-YMMxTUQV/QFSnbgrP3tjDzLHRg7vsbMn8e9HAa8o/1iXoiomo48b7sk/kkmWEuWNDPJVlKSJRB6Y2fHqdJk+SQ== @@ -8448,7 +8549,7 @@ react-router-dom@^5.3.4: tiny-invariant "^1.0.2" tiny-warning "^1.0.0" -react-router@5.3.4, react-router@^5.3.4: +react-router@^5.3.4, react-router@>=5, react-router@5.3.4: version "5.3.4" resolved "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz" integrity sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA== @@ -8463,7 +8564,7 @@ react-router@5.3.4, react-router@^5.3.4: tiny-invariant "^1.0.2" tiny-warning "^1.0.0" -react@18.2.0: +react@*, "react@^0.14.0 || ^15.0.0 || ^16 || ^17 || ^18 || ^19", "react@^16.13.1 || ^17.0.0 || ^18.0.0", "react@^16.6.0 || ^17.0.0 || ^18.0.0", react@^18.0.0, react@^18.2.0, "react@>= 16.8.0 < 19.0.0", react@>=15, react@>=16, react@>=16.0.0, react@>=16.3, react@>=18, react@18.2.0: version "18.2.0" resolved "https://registry.npmjs.org/react/-/react-18.2.0.tgz" integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== @@ -8789,7 +8890,7 @@ robust-predicates@^3.0.2: resolved "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz" integrity sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg== -rollup@^2.43.1: +"rollup@^1.20.0 || ^2.0.0", rollup@^1.20.0||^2.0.0, rollup@^1.20.0||^2.0.0||^3.0.0||^4.0.0, rollup@^2.0.0||^3.0.0||^4.0.0, rollup@^2.43.1, rollup@^2.78.0||^3.0.0||^4.0.0: version "2.79.1" resolved "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz" integrity sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw== @@ -8840,15 +8941,20 @@ safe-array-concat@^1.1.2: has-symbols "^1.0.3" isarray "^2.0.5" -safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: +safe-buffer@^5.1.0, safe-buffer@>=5.1.0, safe-buffer@~5.2.0, safe-buffer@5.2.1: + version "5.2.1" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== +safe-buffer@5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== safe-regex-test@^1.0.3: version "1.0.3" @@ -8876,16 +8982,25 @@ scheduler@^0.23.0: dependencies: loose-envify "^1.1.0" -schema-utils@2.7.0: - version "2.7.0" - resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz" - integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A== +schema-utils@^3.0.0: + version "3.3.0" + resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz" + integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== dependencies: - "@types/json-schema" "^7.0.4" - ajv "^6.12.2" - ajv-keywords "^3.4.1" + "@types/json-schema" "^7.0.8" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + +schema-utils@^3.1.1: + version "3.3.0" + resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz" + integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== + dependencies: + "@types/json-schema" "^7.0.8" + ajv "^6.12.5" + ajv-keywords "^3.5.2" -schema-utils@^3.0.0, schema-utils@^3.1.1, schema-utils@^3.2.0: +schema-utils@^3.2.0: version "3.3.0" resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz" integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== @@ -8904,6 +9019,20 @@ schema-utils@^4.0.0, schema-utils@^4.0.1: ajv-formats "^2.1.1" ajv-keywords "^5.1.0" +schema-utils@2.7.0: + version "2.7.0" + resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz" + integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A== + dependencies: + "@types/json-schema" "^7.0.4" + ajv "^6.12.2" + ajv-keywords "^3.4.1" + +"search-insights@>= 1 < 3": + version "2.17.2" + resolved "https://registry.npmjs.org/search-insights/-/search-insights-2.17.2.tgz" + integrity sha512-zFNpOpUO+tY2D85KrxJ+aqwnIfdEGi06UH2+xEb+Bp9Mwznmauqc9djbnBibJO5mpfUPPa8st6Sx65+vbeO45g== + section-matter@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz" @@ -9176,7 +9305,7 @@ source-map-support@~0.5.20: buffer-from "^1.0.0" source-map "^0.6.0" -source-map@^0.6.0, source-map@~0.6.0: +source-map@^0.6.0: version "0.6.1" resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== @@ -9193,6 +9322,11 @@ source-map@^0.8.0-beta.0: dependencies: whatwg-url "^7.0.0" +source-map@~0.6.0: + version "0.6.1" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + sourcemap-codec@^1.4.8: version "1.4.8" resolved "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz" @@ -9236,21 +9370,35 @@ srcset@^4.0.0: resolved "https://registry.npmjs.org/srcset/-/srcset-4.0.0.tgz" integrity sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw== -statuses@2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== - "statuses@>= 1.4.0 < 2": version "1.5.0" resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + std-env@^3.0.1: version "3.7.0" resolved "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz" integrity sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg== +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + "string-width-cjs@npm:string-width@^4.2.0": version "4.2.3" resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" @@ -9260,7 +9408,16 @@ std-env@^3.0.1: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string-width@^4.1.0, string-width@^4.2.0: +string-width@^4.1.0: + version "4.2.3" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^4.2.0: version "4.2.3" resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -9324,20 +9481,6 @@ string.prototype.trimstart@^1.0.8: define-properties "^1.2.1" es-object-atoms "^1.0.0" -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - stringify-entities@^4.0.0: version "4.0.4" resolved "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz" @@ -9721,6 +9864,11 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" +"typescript@>= 2.7", typescript@>=4.9.5: + version "5.5.2" + resolved "https://registry.npmjs.org/typescript/-/typescript-5.5.2.tgz" + integrity sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew== + unbox-primitive@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz" @@ -9864,7 +10012,7 @@ universalify@^2.0.0: resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz" integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== -unpipe@1.0.0, unpipe@~1.0.0: +unpipe@~1.0.0, unpipe@1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== @@ -10109,7 +10257,7 @@ webpack-sources@^3.2.3: resolved "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz" integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== -webpack@^5.88.1: +"webpack@^4.0.0 || ^5.0.0", "webpack@^4.37.0 || ^5.0.0", webpack@^5.0.0, webpack@^5.1.0, webpack@^5.20.0, webpack@^5.88.1, "webpack@>= 4", "webpack@>=4.41.1 || 5.x", webpack@>=5, "webpack@3 || 4 || 5": version "5.92.1" resolved "https://registry.npmjs.org/webpack/-/webpack-5.92.1.tgz" integrity sha512-JECQ7IwJb+7fgUFBlrJzbyu3GEuNBcdqr1LD7IbSzwkSmIevTm8PF+wej3Oxuz/JFBUZ6O1o43zsPkwm1C4TmA== @@ -10149,7 +10297,7 @@ webpackbar@^5.0.2: pretty-time "^1.1.0" std-env "^3.0.1" -websocket-driver@>=0.5.1, websocket-driver@^0.7.4: +websocket-driver@^0.7.4, websocket-driver@>=0.5.1: version "0.7.4" resolved "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz" integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== @@ -10315,7 +10463,7 @@ workbox-navigation-preload@7.1.0: dependencies: workbox-core "7.1.0" -workbox-precaching@7.1.0, workbox-precaching@^7.0.0: +workbox-precaching@^7.0.0, workbox-precaching@7.1.0: version "7.1.0" resolved "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-7.1.0.tgz" integrity sha512-LyxzQts+UEpgtmfnolo0hHdNjoB7EoRWcF7EDslt+lQGd0lW4iTvvSe3v5JiIckQSB5KTW5xiCqjFviRKPj1zA== @@ -10370,7 +10518,7 @@ workbox-sw@7.1.0: resolved "https://registry.npmjs.org/workbox-sw/-/workbox-sw-7.1.0.tgz" integrity sha512-Hml/9+/njUXBglv3dtZ9WBKHI235AQJyLBV1G7EFmh4/mUdSQuXui80RtjDeVRrXnm/6QWgRUEHG3/YBVbxtsA== -workbox-window@7.1.0, workbox-window@^7.0.0: +workbox-window@^7.0.0, workbox-window@7.1.0: version "7.1.0" resolved "https://registry.npmjs.org/workbox-window/-/workbox-window-7.1.0.tgz" integrity sha512-ZHeROyqR+AS5UPzholQRDttLFqGMwP0Np8MKWAdyxsDETxq3qOAyXvqessc3GniohG6e0mAqSQyKOHmT8zPF7g==