From 4e3a0c843d5ef280a5cbf9786cee994d9664afe6 Mon Sep 17 00:00:00 2001 From: Endogen Date: Wed, 1 Jan 2025 21:31:53 +0100 Subject: [PATCH 01/30] Add contract details --- src/smart-contracts/index.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/smart-contracts/index.md b/src/smart-contracts/index.md index 4caaa5c..2e02dfa 100644 --- a/src/smart-contracts/index.md +++ b/src/smart-contracts/index.md @@ -6,7 +6,13 @@ description: The Contracting engine enables contracts to be written in a subset # Contracting Engine The Contracting engine enables contracts to be written in a subset of Python designed for writing, testing, and deploying smart contracts with ease and efficiency. It makes blockchain development as intuitive and accessible as possible, leveraging the simplicity of Python to offer a seamless smart contract development experience.

-Contracting simplifies the process of creating, testing, and deploying smart contracts by providing a Pythonic interface to the Xian blockchain. Whether you're a beginner in blockchain technology or an experienced developer looking to streamline your smart contract development workflow, Contracting is designed to enhance your productivity and make blockchain development accessible to a wider audience. +## Contract Identification +Unlike other blockchains where contracts have addresses, Xian contracts are identified by their name. Contract names must: +- Start with 'con_' prefix (except system contracts like 'currency') +- Be lowercase +- Only contain letters, numbers and underscores after prefix +- Be max 64 characters +- Match pattern: `^con_[a-z][a-z0-9_]*$` ## Features From 4ba917df4a92cec5781053a0402734ee18ab83eb Mon Sep 17 00:00:00 2001 From: Endogen Date: Wed, 1 Jan 2025 21:47:59 +0100 Subject: [PATCH 02/30] Rework stamp details --- src/coin/economics.md | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/coin/economics.md b/src/coin/economics.md index bcb96c8..abe3bba 100644 --- a/src/coin/economics.md +++ b/src/coin/economics.md @@ -15,11 +15,17 @@ This distribution strategy ensures that the Xian project is supported by a diver ## **Transaction Fees (Stamps)** -In Xian, transaction fees, known as stamps, serve multiple purposes: incentivizing validators, rewarding smart contract developers, and ensuring the sustainability of the DAO. The distribution of transaction fees is as follows: +When a transaction is executed, the fees (also called "stamps") are distributed as follows: -* **Split Between Developers and Validators**: Transaction fees collected are split between the deployers/developers of the smart contracts where the transaction fees were incurred and the DAO. This model not only incentivizes the development of high-quality smart contracts on the Xian platform but also ensures continuous funding for the DAO's initiatives. -* **Burning Mechanism (1%)**: To introduce a deflationary mechanism into the economy, 1% of the transaction fees (stamps) are permanently burned. This burning reduces the total supply of coins over time, potentially increasing the value of the remaining coins as the usage of the Xian blockchain grows. +* 68% to the contract developer that wrote the executed contract +* 30% to validators (split evenly among active validators) +* 1% burned (reducing total supply) +* 1% to foundation wallet -## **Deflationary Pressure and Economic Sustainability** +These percentages can be adjusted through validator governance votes. -The decision to burn a fraction of the transaction fees introduces a deflationary pressure into the Xian economy. This approach is designed to balance the inflationary impact of the initial coin distribution and rewards distribution, ensuring the long-term economic sustainability of the platform. By carefully managing the coin supply and incentivizing the development and use of smart contracts, Xian aims to create a thriving economic ecosystem that supports developers, users, and validators alike. \ No newline at end of file +This incentivizes: +* High-quality contract development through developer rewards +* Network security through validator rewards +* Long-term value through deflationary burning +* Ecosystem development through foundation funding From 07ef053727535ffc3dece9306dde4ba2a7a29a0a Mon Sep 17 00:00:00 2001 From: Endogen Date: Wed, 1 Jan 2025 21:53:56 +0100 Subject: [PATCH 03/30] Update details about stamps --- src/coin/stamps.md | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/coin/stamps.md b/src/coin/stamps.md index 3ba2a30..dabba7c 100644 --- a/src/coin/stamps.md +++ b/src/coin/stamps.md @@ -1,17 +1,18 @@ -# Stamps Explained +# Stamps -In the Xian blockchain ecosystem, "stamps" serve as a fundamental concept, pivotal to understanding how computational work is quantified, limited, and incentivized within smart contracts. This mechanism not only promotes efficient code development but also ensures the network's sustainability by enforcing rate limiting. Here, we delve into the intricacies of stamps, their role in the Xian network, and how they are utilized to balance network load and incentivize the ecosystem's growth. +A `stamp` is a single unit of computational work in a smart contract. Key points: -## **What are Stamps?** - -A stamp represents a single unit of computational work required by a smart contract on the Xian network. When users wish to execute a smart contract, they must convert a portion of their Xian cryptocurrency into stamps. This conversion process is crucial for several reasons: - -* **Rate Limiting**: By requiring stamps for computational work, the Xian network effectively implements a rate-limiting mechanism. This ensures that the network can manage demand, prevent spam transactions, and allocate resources efficiently. -* **Network Incentivization**: Stamps provide a direct incentive for developers to optimize their smart contracts. Efficient contracts that require fewer stamps lower the cost for users and reduce the network's computational load. +- Stamps are paid for with Xian tokens +- Each transaction requires a stamps_supplied value +- Reading/writing state, computation, etc. consume stamps +- Unused stamps are refunded +- Read operations cost 3 stamps per byte +- Write operations cost 25 stamps per byte +- If stamps run out during execution, transaction reverts ## **Calculation of Work** -The computational cost of executing smart contract code on the Xian network is determined through an optimized tracing process. Each operation (opcode) in the Python Virtual Machine (VM) is assigned a specific stamp cost. As the smart contract code executes, the corresponding number of stamps is deducted based on the operations performed. This method ensures a fair and transparent way to quantify computational work. +The computational cost of executing smart contract code on the Xian network is determined through a tracing process. Each operation (opcode) in the Python Virtual Machine (VM) is assigned a specific stamp cost. As the smart contract code executes, the corresponding number of stamps is deducted based on the operations performed. This method ensures a fair and transparent way to quantify computational work. * **Execution and Deduction**: As a transaction executes, stamps are progressively deducted according to the computational steps taken. This deduction continues until the transaction completes or the allotted stamps are exhausted. * **Transaction Success or Failure**: If a transaction consumes all attached stamps before completion, it reverts to its initial state and is deemed unsuccessful. Conversely, if the transaction completes with stamps to spare, the remaining stamps are refunded to the sender, encouraging efficient code usage. @@ -27,4 +28,4 @@ The Xian network specifies distinct costs for reading from and writing to the bl The conversion rate between Xian coins and stamps is not fixed; instead, it's subject to change based on governance decisions. The DAO, representing the community's voice, has the authority to adjust the stamp pricing. This mechanism allows the network to adapt to changing conditions and ensures that stamp costs reflect the current value and demands on the network. -* **Governance and Stamp Pricing**: The ability of the DAO to vote on stamp pricing underscores the decentralized nature of the Xian network. It ensures that key economic parameters can be adjusted to maintain network health and user fairness. \ No newline at end of file +* **Governance and Stamp Pricing**: The ability of the DAO to vote on stamp pricing underscores the decentralized nature of the Xian network. It ensures that key economic parameters can be adjusted to maintain network health and user fairness. From 4f6d165cf4b2e0e62677065ff0972c130df61864 Mon Sep 17 00:00:00 2001 From: Endogen Date: Wed, 1 Jan 2025 22:16:35 +0100 Subject: [PATCH 04/30] Added storage section --- src/smart-contracts/concepts/storage.md | 58 +++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 src/smart-contracts/concepts/storage.md diff --git a/src/smart-contracts/concepts/storage.md b/src/smart-contracts/concepts/storage.md new file mode 100644 index 0000000..95fde65 --- /dev/null +++ b/src/smart-contracts/concepts/storage.md @@ -0,0 +1,58 @@ +## Storage Key Patterns + +Xian uses a key-value store for contract state. Keys follow specific patterns to maintain organization and prevent collisions between contracts. + +### Basic Pattern +All keys are prefixed with the contract name: +```python +# Basic pattern +. + +# Example with Variable +token_name = Variable() +# Stored as: con_token.token_name + +# Example with Hash +balances = Hash() +balances['alice'] = 100 +# Stored as: con_token.balances:alice +``` + +### Hash Storage +Hash keys support multiple dimensions separated by colons: +```python +# Single dimension +balances['alice'] = 100 +# Stored as: con_token.balances:alice + +# Multiple dimensions +allowances['alice', 'bob'] = 500 +# Stored as: con_token.balances:alice:bob + +# Max 16 dimensions allowed +complex_data['user', 'game', 'inventory', 'weapons'] = {...} +# Stored as: con_token.complex_data:user:game:inventory:weapons +``` + +### System Keys +Contracts have special system keys for code and metadata: +```python +# Contract source code +.__code__ + +# Compiled bytecode +.__compiled__ + +# Contract owner (if set) +.__owner__ + +# Contract submission time +.__submitted__ +``` + +### Limitations + +* Total key length must be under 1024 bytes +* Hash keys limited to 16 dimensions +* Keys cannot contain periods (.) or colons (:) as these are delimiters +* Variable/Hash names cannot start with double underscore (__) From 4cf26dc192f65284310c7d6fb20eb5f0c12a62fe Mon Sep 17 00:00:00 2001 From: Endogen Date: Wed, 1 Jan 2025 22:32:47 +0100 Subject: [PATCH 05/30] Shorten title --- src/smart-contracts/context.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/smart-contracts/context.md b/src/smart-contracts/context.md index 6a126fc..3822553 100644 --- a/src/smart-contracts/context.md +++ b/src/smart-contracts/context.md @@ -5,7 +5,7 @@ description: Execution Context in Contracting. # Context -## Execution Context in Contracting. +## Execution Context When you are running a contract, you often want to know who is running it. For example, if someone who isn't an account owner tries to spend their money, you need to have some way of identifying who that person is and prevent that from happening. This is where Context, or `ctx` inside of smart contracts, comes into play. From d2a23217b351a54d91ba5a73f3f5fa820851aa8c Mon Sep 17 00:00:00 2001 From: Endogen Date: Wed, 1 Jan 2025 22:35:25 +0100 Subject: [PATCH 06/30] Add storage to concepts --- .vitepress/config.mts | 1 + 1 file changed, 1 insertion(+) diff --git a/.vitepress/config.mts b/.vitepress/config.mts index 4b34b99..7342461 100644 --- a/.vitepress/config.mts +++ b/.vitepress/config.mts @@ -51,6 +51,7 @@ export default defineConfig({ collapsed: true, items: [ { text: 'Stamps', link: '/smart-contracts/concepts/stamps' }, + { text: 'Storage', link: '/smart-contracts/concepts/storage' }, { text: 'Valid Code', link: '/smart-contracts/concepts/valid-code' }, { text: 'Contract Submission', link: '/smart-contracts/concepts/contract-submission' }, { text: 'Model', link: '/smart-contracts/concepts/model' }, From a191d8f784522f5c3aaaade19eee1b58b151846d Mon Sep 17 00:00:00 2001 From: Endogen Date: Wed, 1 Jan 2025 23:03:06 +0100 Subject: [PATCH 07/30] Update README.md --- README.md | 40 +++++++++++++++++++++++++++++----------- 1 file changed, 29 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index ed3f0fb..233781d 100644 --- a/README.md +++ b/README.md @@ -1,21 +1,39 @@ -# Docs Readme +# Xian Documentation + +Documentation for the Xian blockchain platform. + +## Quick Start + +### Requirements +- Node.js >= 18 +- npm/yarn -## Quickstart ### Setup ```bash -git clone https://github.com/xian-network/vitepress.git -cd vitepress +git clone https://github.com/xian-network/docs.git +cd docs npm install ``` + ### Development ```bash npm run dev ``` +Server starts at `http://localhost:5173` -### Build -- Github actions automatically builds & publishes -- But if you must ... -```bash -npm run build -npm run preview -``` \ No newline at end of file +### Content Structure +``` +xian-docs/ +├── .vitepress/ # Contains config.mts for navigation/sections +└── src/ # Documentation source files +``` +**Note: New sections must be added to .vitepress/config.mts** + +### Building +Documentation is auto-built and deployed via GitHub Actions on push to main. + +For local builds: +``` +npm run build # Build static site +npm run preview # Preview built site +``` From 97c7c20bb0c1637718a7af072459bda25a97bb63 Mon Sep 17 00:00:00 2001 From: Endogen Date: Wed, 1 Jan 2025 23:05:26 +0100 Subject: [PATCH 08/30] Adjust README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 233781d..69e3312 100644 --- a/README.md +++ b/README.md @@ -9,14 +9,14 @@ Documentation for the Xian blockchain platform. - npm/yarn ### Setup -```bash +``` git clone https://github.com/xian-network/docs.git cd docs npm install ``` ### Development -```bash +``` npm run dev ``` Server starts at `http://localhost:5173` From 16d589d64532e6e73ab605124623e21d8c69a9af Mon Sep 17 00:00:00 2001 From: Endogen Date: Sun, 5 Jan 2025 13:09:25 +0100 Subject: [PATCH 09/30] Remove "quarter" since it's not correct --- src/coin/economics.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/coin/economics.md b/src/coin/economics.md index abe3bba..bffc380 100644 --- a/src/coin/economics.md +++ b/src/coin/economics.md @@ -9,7 +9,7 @@ The distribution of the initial coin supply was carefully structured to align wi * **Founding Private Sale (5%)**: A portion of the coins was sold in a founding private sale, allowing early supporters and strategic partners to participate in the project's growth from its inception. * **Public Sale (40%)**: The largest share of the coins were allocated for the public sale, democratizing access to the coins and ensuring a wide distribution among the community. * **Team Allocation (20%)**: A total of 20% of the coins were allocated to the team, with 15% released over 5 years to incentivize long-term commitment and 5% provided upfront as a reward for their early contributions to the project. -* **DAO (35%)**: A quarter of the total supply was reserved for the DAO, funding community-driven development, governance initiatives, and other projects beneficial to the Xian ecosystem. +* **DAO (35%)**: 35% of the total supply was allocated to the DAO, funding community-driven development, governance initiatives, and other projects beneficial to the Xian ecosystem. This distribution strategy ensures that the Xian project is supported by a diverse group of stakeholders, including the project team, its community, and investors, all of whom play a critical role in the platform's development and governance. From bd7ac5fc4950bf19e53ef70bc4e94ee20efafa19 Mon Sep 17 00:00:00 2001 From: Endogen Date: Mon, 6 Jan 2025 01:15:06 +0100 Subject: [PATCH 10/30] Better description of xian-py --- src/tools/xian-py.md | 281 +++---------------------------------------- 1 file changed, 16 insertions(+), 265 deletions(-) diff --git a/src/tools/xian-py.md b/src/tools/xian-py.md index ceebbfd..3a08898 100644 --- a/src/tools/xian-py.md +++ b/src/tools/xian-py.md @@ -5,11 +5,20 @@ description: xian-py is a Python library for interacting with the Xian network. # xian-py -xian-py is a Python library for interacting with the Xian network. +Python SDK for interacting with the Xian blockchain network. This library provides comprehensive tools for wallet management, transaction handling, and smart contract interactions. -:::tip Git repository -can be found [here](https://github.com/xian-network/xian-py) -::: +## Features + +* Basic and HD wallet creation and management using Ed25519 cryptography +* BIP39 mnemonic seed generation and recovery (24 words) +* BIP32/SLIP-0010 compliant hierarchical deterministic wallets +* Message signing and verification +* Two-way message encryption and decryption between sender/receiver +* Transaction creation, simulation, and broadcasting +* Smart contract deployment and interaction +* Token transfers and balance queries +* Asynchronous and synchronous transaction submission +* Read-only contract execution ## How to install @@ -17,264 +26,6 @@ can be found [here](https://github.com/xian-network/xian-py) pip install xian-py ``` -# Wallet - -## Create new wallet -```python -from xian_py.wallet import Wallet - -# Create wallet from scratch -wallet = Wallet() -``` - -## Create wallet from existing private key -```python -from xian_py.wallet import Wallet - -# Create wallet from existing private key -privkey = 'ed30796abc4ab47a97bfb37359f50a9c362c7b304a4b4ad1b3f5369ecb6f7fd8' -wallet = Wallet(privkey) -``` - -## Get private key and public key -```python -from xian_py.wallet import Wallet - -wallet = Wallet() - -# Public key -address = wallet.public_key -print(f'address: {address}') - -# Private key -privkey = wallet.private_key -print(f'private key: {privkey}') -``` - -## Sign message with private key -```python -from xian_py.wallet import Wallet - -wallet = Wallet() - -# Sign message with private key -message = 'I will sign this message' -signed = wallet.sign_msg(message) -print(f'Signed message: {signed}') -``` - -# Xian - -## Send XIAN tokens -```python -from xian_py.wallet import Wallet -from xian_py.xian import Xian - -wallet = Wallet('ed30796abc4ab47a97bfb37359f50a9c362c7b304a4b4ad1b3f5369ecb6f7fd8') -xian = Xian('http://:26657', wallet=wallet) - -send_xian = xian.send( - amount=7, - to_address='b6504cf056e264a4c1932d5de6893d110db5459ab4f742eb415d98ed989bb988' -) - -print(f'success: {send_xian["success"]}') -print(f'tx_hash: {send_xian["tx_hash"]}') -``` - -## Submit contract -```python -from xian_py.wallet import Wallet -from xian_py.xian import Xian - -wallet = Wallet('ed30796abc4ab47a97bfb37359f50a9c362c7b304a4b4ad1b3f5369ecb6f7fd8') -xian = Xian('http://:26657', wallet=wallet) - -# Contract code -code = ''' -I = importlib - -@export -def send(addresses: list, amount: float, contract: str): - token = I.import_module(contract) - - for address in addresses: - token.transfer_from(amount=amount, to=address, main_account=ctx.signer) -''' - -# Deploy contract to network -submit = xian.submit_contract('con_multisend', code) - -print(f'success: {submit["success"]}') -print(f'tx_hash: {submit["tx_hash"]}') -``` - -## Submit contract with constructor arguments -```python -from xian_py.wallet import Wallet -from xian_py.xian import Xian - -wallet = Wallet('ed30796abc4ab47a97bfb37359f50a9c362c7b304a4b4ad1b3f5369ecb6f7fd8') -xian = Xian('http://:26657', wallet=wallet) - -# Contract code -code = ''' -test = Variable() - -@construct -def init(test_var: str): - test.set(test_var) - -@export -def test(): - return test.get() -''' - -# Constructor arguments -arguments = { - 'test_var': '12345' -} - -# Deploy contract to network and pass arguments to it -submit = xian.submit_contract('con_multisend', code, args=arguments) - -print(f'success: {submit["success"]}') -print(f'tx_hash: {submit["tx_hash"]}') -``` - -## Approve contract and retrieve approved amount -```python -from xian_py.wallet import Wallet -from xian_py.xian import Xian - -wallet = Wallet('ed30796abc4ab47a97bfb37359f50a9c362c7b304a4b4ad1b3f5369ecb6f7fd8') -xian = Xian('http://:26657', wallet=wallet) - -# Get approved amount -approved = xian.get_approved_amount('con_multisend') -print(f'approved: {approved}') - -# Approve the default amount -approve = xian.approve('con_multisend') -print(f'approve success: {approve["success"]}') -print(f'approve tx_hash: {approve["tx_hash"]}') - -# Get approved amount again -approved = xian.get_approved_amount('con_multisend') -print(f'approved success: {approved["success"]}') -print(f'approved tx_hash: {approved["tx_hash"]}') -``` - -## Get XIAN token balance of an address -```python -from xian_py.wallet import Wallet -from xian_py.xian import Xian - -wallet = Wallet('ed30796abc4ab47a97bfb37359f50a9c362c7b304a4b4ad1b3f5369ecb6f7fd8') -xian = Xian('http://:26657', wallet=wallet) - -balance = xian.get_balance('b6504cf056e264a4c1932d5de6893d110db5459ab4f742eb415d98ed989bb988') -print(f'balance: {balance}') -``` - -## Get custom token balance for a contract - -Contracts can have token balances and in this example `con_token` is a token contract and we want to check the balance of that token in the contract `con_test_contract` - -```python -from xian_py.wallet import Wallet -from xian_py.xian import Xian - -wallet = Wallet('ed30796abc4ab47a97bfb37359f50a9c362c7b304a4b4ad1b3f5369ecb6f7fd8') -xian = Xian('http://:26657', wallet=wallet) - -balance = xian.get_balance('con_test_contract', contract='con_token') -print(f'balance: {balance}') -``` - -## Retrieve transaction by hash -```python -from xian_py.wallet import Wallet -from xian_py.xian import Xian - -wallet = Wallet('ed30796abc4ab47a97bfb37359f50a9c362c7b304a4b4ad1b3f5369ecb6f7fd8') -xian = Xian('http://:26657', wallet=wallet) - -# Provide tx hash to get tx result -tx = xian.get_tx('2C403B728E4AFFD656CAFAD38DD3E34C7CC8DA06464A7A5B1E8A426290F505A9') -print(f'transaction: {tx}') -``` - -## Retrieve data from a contract - -In this case we assume that there is a contract `con_testing` that has a variable called `test` - -```python -from xian_py.xian import Xian - -xian = Xian('http://:26657') -tx = xian.get_contract_data('con_testing', 'test') -print(f'data: {tx}') -``` - -# Transactions - -## Send a transaction - High level usage -```python -from xian_py.wallet import Wallet -from xian_py.xian import Xian - -wallet = Wallet('ed30796abc4ab47a97bfb37359f50a9c362c7b304a4b4ad1b3f5369ecb6f7fd8') -xian = Xian('http://:26657', wallet=wallet) - -send = xian.send_tx( - contract='currency', - function='transfer', - kwargs={ - 'to': 'burned', - 'amount': 1000, - } -) - -print(f'success: {send["success"]}') -print(f'tx_hash: {send["tx_hash"]}') -``` - -### Send a transaction - Low level usage - -There are different way to submit a transaction: -- `broadcast_tx_async` --> Only submit, no result will be returned -- `broadcast_tx_sync` --> Submit and return transaction validation result -- `broadcast_tx_commit` --> Submit and return result of transaction validation and processing - -Do NOT use `broadcast_tx_commit` in production! - -```python -from xian_py.wallet import Wallet -from xian_py.transactions import get_nonce, create_tx, broadcast_tx_sync - -node_url = "http://:26657" -wallet = Wallet('ed30796abc4ab47a97bfb37359f50a9c362c7b304a4b4ad1b3f5369ecb6f7fd8') - -next_nonce = get_nonce(node_url, wallet.public_key) -print(f'next nonce: {next_nonce}') - -tx = create_tx( - contract="currency", - function="transfer", - kwargs={ - "to": "burned", - "amount": 100, - }, - nonce=next_nonce, - stamps=100, - chain_id='some-chain-id', - private_key=wallet.private_key -) -print(f'tx: {tx}') - -# Return result of transaction validation -data = broadcast_tx_sync(node_url, tx) -print(f'success: {data["success"]}') -print(f'tx_hash: {data["tx_hash"]}') -``` +:::tip Git repository +can be found [here](https://github.com/xian-network/xian-py) +::: From 869a6d69e3d592a33b18730f9d593cbf853cd023 Mon Sep 17 00:00:00 2001 From: Endogen Date: Mon, 6 Jan 2025 01:30:21 +0100 Subject: [PATCH 11/30] Better description of xian-js --- src/tools/xian-js.md | 182 +++++-------------------------------------- 1 file changed, 21 insertions(+), 161 deletions(-) diff --git a/src/tools/xian-js.md b/src/tools/xian-js.md index f1cf10f..ed903be 100644 --- a/src/tools/xian-js.md +++ b/src/tools/xian-js.md @@ -1,173 +1,33 @@ --- title: xian-js -description: xian-js is a JavaScript / Typescript library for interacting with the Xian network. +description: xian-js is a JavaScript/TypeScript SDK for interacting with the Xian blockchain network. --- # xian-js -xian-js is a JavaScript / Typescript library for interacting with the Xian network.

-*Compatible with all frontend frameworks & nodejs.*
+JavaScript/TypeScript SDK for interacting with the Xian blockchain network. This library provides comprehensive tools for wallet management, transaction handling, and smart contract interactions. -:::tip Git repository -can be found [here](https://github.com/xian-network/xian-js) -::: -## Installation - -```sh -npm install xian-js -``` - -### Wallet Functions - -## Create a Xian Keypair - -```typescript -import Xian from "xian-js" - -// Create a new wallet -const new_wallet = Xian.Wallet.new_wallet() - -console.log(new_wallet) - ->> { - vk: "ea2cee33f9478d767d67afe345592ef36446ee04f8d588fa76942e6569a53298", - sk: "69a8db3fb7196debc2711fad1fa1935918d09f5d8900d84c3288ea5237611c03" - } -``` - - -## Create a new BIP39 / BIP 32 compatible wallet -- **BIP39** = 24 word mnemonic -- **BIP32** = derivation path - -```javascript -let new_wallet_bip39 = Xian.Wallet.new_wallet_bip39() - -console.log(new_wallet_bip39) ->> { - sk: 'a6b72cb3d1160c26f9f39a8f1d4a3c7c0da2ac59d193b66ac5f919ec77f28915', - vk: '53d016586ce35c5f6ea581cadf4693dd2850621dfad6a2261e8dd311c83e11d5', - derivationIndex: 0, - seed: '3626c59ee5bce833a8bf5024645eb10415b39c6f9fd0ff0fb1b00b8ca9fd6ff4b8a0ed7077296cdaff1b955f03318f244dfd3fead404d93f11a3f301c0e3e1c6', - mnemonic: 'evidence rifle behave normal duty mean junk chicken salute relief raw chunk region ocean guard swarm taste toy loop ozone spell crumble apart echo' - } - -``` - -## Create a wallet from sk (private key) - -```javascript -const sk = 'a6b72cb3d1160c26f9f39a8f1d4a3c7c0da2ac59d193b66ac5f919ec77f28915' - -const wallet = Xian.Wallet.create_wallet({sk}) - -console.log(wallet) - ->> { - sk: 'a6b72cb3d1160c26f9f39a8f1d4a3c7c0da2ac59d193b66ac5f919ec77f28915', - vk: '53d016586ce35c5f6ea581cadf4693dd2850621dfad6a2261e8dd311c83e11d5', - derivationIndex: 0, - seed: null, - mnemonic: null - } - -``` -## Restore a BIP39 / BIP 32 compatible wallet -- **BIP39** = 24 word mnemonic -- **BIP32** = derivation path +## Features -```javascript -const seed = '3626c59ee5bce833a8bf5024645eb10415b39c6f9fd0ff0fb1b00b8ca9fd6ff4b8a0ed7077296cdaff1b955f03318f244dfd3fead404d93f11a3f301c0e3e1c6' -const derivationIndex = 0; -let wallet = Xian.Wallet.new_wallet_bip39(seed, derivationIndex) +- Basic and HD wallet creation using BIP39/BIP32 standards +- Secure keystore functionality for encrypted key storage +- Transaction creation, simulation, and broadcasting +- Support for both synchronous and asynchronous transaction submission +- Smart contract deployment and interaction +- Comprehensive blockchain querying capabilities +- Network status monitoring and management +- Advanced data encoding utilities for blockchain-specific types +- Custom BigNumber handling for precise decimal operations +- Message signing and verification utilities +- Event emitting system for real-time updates +- TypeScript support with full type definitions -console.log(wallet) ->> { - sk: 'a6b72cb3d1160c26f9f39a8f1d4a3c7c0da2ac59d193b66ac5f919ec77f28915', - vk: '53d016586ce35c5f6ea581cadf4693dd2850621dfad6a2261e8dd311c83e11d5', - derivationIndex: 0, - seed: null, - mnemonic: null - } -``` - - -## Get a public key (vk) from a private key (sk) -Takes the sk as an argument and returns the vk -```javascript -let sk = "69a8db3fb7196debc2711fad1fa1935918d09f5d8900d84c3288ea5237611c03" -let vk = wallet.get_vk(sk) - -console.log(vk) ->> 'ea2cee33f9478d767d67afe345592ef36446ee04f8d588fa76942e6569a53298' -``` - -## Sign a message -Signs a string payload -```javascript -const stringBuffer = Buffer.from('message') -let messageBytes = new Uint8Array(stringBuffer); -let sk = "69a8db3fb7196debc2711fad1fa1935918d09f5d8900d84c3288ea5237611c03" - -let signedMessage = wallet.sign(sk, messageBytes) - -console.log(signedMessage) ->> '982c204fe88e620f3319558aa6b11f9d8be75b99b3199f434f5edf2834a9c52059ba4ea3d623ac1d550170e532e919c364aad1333f757f8f22e0355cb1dd8c09' -``` - -## Verify signature -verify a payload -```javascript -let validSignature = wallet.verify(vk, messageBytes, signedMessage) - -console.log(validSignature) ->> true -``` - -## Create a Xian Transaction -Public Testnet masternode host is `https://testnet.xian.org` - -Use `Xian.TransactionBuilder(network_info, tx_info)` to create a new Xian transaction. +## How to install -## Create network_info object -create an object that describes the masternode/network that you are going to send the transcation to. -```typescript - -let network_info: I_NetworkSettings = { - chain_id: "xian-testnet-2", - type: "testnet", // or "mainnet" - masternode_hosts: ["https://testnet.xian.org"] -}; -``` - -```typescript -// Sender and Receiver public keys -let senderVk = "ea2cee33f9478d767d67afe345592ef36446ee04f8d588fa76942e6569a53298" -let receiverVk = "bb0fab41b9118f0afdabf3721fa9a6caae3c93845ed409d3118841065ad1a197" - -// Kwargs are the arugments you will send the contract method. -// For example the "currency" contract's "transfer" method needs two arguments to create a transfter; the person reciving the XIAN and the amount to transfer. So we create a kwargs object like so. -let kwargs = { - to: receiverVk, - amount: 1000 -} - -let txInfo: I_TxInfo = { - senderVk, - contractName: "currency", - methodName: "transfer", - kwargs, - stampLimit: 50000, // Max stamps to be used. Could use less, won't use more. -} -``` - -## Create transaction -```javascript -let tx = new Xian.TransactionBuilder(networkInfo, txInfo) +```sh +npm install xian-js ``` -## Send transaction -```typescript -let senderSk = "69a8db3fb7196debc2711fad1fa1935918d09f5d8900d84c3288ea5237611c03" - -const res = await tx.send(senderSk) +:::tip Git repository +can be found [here](https://github.com/xian-network/xian-js) +::: From 130bd7dab5e0d0e80eb8895f16ada3fdc56d5f00 Mon Sep 17 00:00:00 2001 From: Endogen Date: Mon, 6 Jan 2025 01:30:51 +0100 Subject: [PATCH 12/30] Better description of xian-py --- src/tools/xian-py.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tools/xian-py.md b/src/tools/xian-py.md index 3a08898..d368fd3 100644 --- a/src/tools/xian-py.md +++ b/src/tools/xian-py.md @@ -1,6 +1,6 @@ --- title: xian-py -description: xian-py is a Python library for interacting with the Xian network. +description: xian-py is a Python SDK for interacting with the Xian blockchain network. --- # xian-py From 41e552a14106f05f6df412611acfd7569f908a91 Mon Sep 17 00:00:00 2001 From: Endogen Date: Mon, 6 Jan 2025 01:53:51 +0100 Subject: [PATCH 13/30] Added 'Standards' section and sub-sections --- .vitepress/config.mts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.vitepress/config.mts b/.vitepress/config.mts index 7342461..f9be859 100644 --- a/.vitepress/config.mts +++ b/.vitepress/config.mts @@ -57,6 +57,15 @@ export default defineConfig({ { text: 'Model', link: '/smart-contracts/concepts/model' }, ] }, + { + text: 'Standards', + collapsed: true, + items: [ + { text: 'XSC0001', link: '/smart-contracts/standards/xsc0001' }, + { text: 'XSC0002', link: '/smart-contracts/standards/xsc0002' }, + { text: 'XSC0003', link: '/smart-contracts/standards/xsc0003' }, + ] + }, { text: 'Testing', link: '/smart-contracts/testing' }, { text: 'Examples', From f897e28f83fc1935d02a23476311e8a81d8be986 Mon Sep 17 00:00:00 2001 From: Endogen Date: Mon, 6 Jan 2025 02:05:18 +0100 Subject: [PATCH 14/30] Create xsc0001.md --- src/smart-contracts/standards/xsc0001.md | 65 ++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 src/smart-contracts/standards/xsc0001.md diff --git a/src/smart-contracts/standards/xsc0001.md b/src/smart-contracts/standards/xsc0001.md new file mode 100644 index 0000000..e1a038b --- /dev/null +++ b/src/smart-contracts/standards/xsc0001.md @@ -0,0 +1,65 @@ +--- +title: XSC001 Standard Token +description: This is the currency contract used on Xian, it features a cryptographic permit system for approvals as well as a streaming functionality to support subscription type functionality. +--- + +# XSC0001 Token Contract + +The `XSC0001` token contract is a standardized smart contract developed for the Xian blockchain. This contract implements a basic token system with functionalities such as token transfer, approval mechanisms, and metadata management. It is designed to serve as a foundational component for building decentralized applications on the Xian network. + +## Contract Overview + +The `XSC0001` contract includes mechanisms for: + +- Initial token distribution +- Metadata management +- Token transfers +- Approval and transfer from approved accounts + +## Functions + +### `def seed()` + +This function is called upon contract creation and initializes the contract's state. It sets the initial token balance for the creator and establishes basic token metadata such as the token name, symbol, logo URL, website, and operator. + +**Parameters:** +- None + +### `def change_metadata(key: str, value: Any)` + +Allows the operator to update the metadata of the token. + +**Parameters:** +- `key`: The metadata key to update (e.g., 'token_name', 'token_symbol'). +- `value`: The new value for the specified key. + +### `def transfer(amount: float, to: str)` + +Enables token holders to transfer tokens to another account. + +**Parameters:** +- `amount`: The amount of tokens to be transferred. +- `to`: The recipient's address. + +### `def approve(amount: float, to: str)` + +Allows a token holder to approve another account to spend a specified amount of tokens on their behalf. + +**Parameters:** +- `amount`: The amount of tokens to be approved. +- `to`: The address of the account that is being approved to spend tokens. + +### `def transfer_from(amount: float, to: str, main_account: str)` + +Enables an approved account to transfer tokens on behalf of the token holder. + +**Parameters:** +- `amount`: The amount of tokens to transfer. +- `to`: The recipient's address. +- `main_account`: The address of the token holder who has approved the sender to spend tokens on their behalf. + +## Contact + +For further assistance or to report issues, please open an issue in the main repository or contact the project maintainers directly. + +Thank you for your interest in the `XSC001` token contract for the Xian blockchain. From d3d8f270130280e5cc36f22fc768193b17007490 Mon Sep 17 00:00:00 2001 From: Endogen Date: Mon, 6 Jan 2025 02:07:55 +0100 Subject: [PATCH 15/30] Create xsc0002.md --- src/smart-contracts/standards/xsc0002.md | 39 ++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 src/smart-contracts/standards/xsc0002.md diff --git a/src/smart-contracts/standards/xsc0002.md b/src/smart-contracts/standards/xsc0002.md new file mode 100644 index 0000000..9080c19 --- /dev/null +++ b/src/smart-contracts/standards/xsc0002.md @@ -0,0 +1,39 @@ +# XSC002 Permit + +- An adaptation of [EIP-2612](https://eips.ethereum.org/EIPS/eip-2612) for Xian. +- Allows for a user to grant a spender a certain amount of tokens to spend on their behalf, without having to submit a transaction to the network. +- Once permit is successfully called, the spender is granted an allowance, and can spend the users tokens as normal. + +### How it works : + +The user constructs a message to sign, and the contract verifies the signature. + +- The message follows consists of the following fields: + - `owner`: The address of the owner of the permit + - `spender`: The address of the spender + - `value`: The amount of tokens to spend + - `deadline`: The deadline for the permit + - `signature`: The signature of the message + - `contract`: The name of the contract to which the permit is granted + +- The user / frontend dapp will construct the message like so : + - `msg = f"{owner}:{spender}:{value}:{deadline}:{contract}" ` + - `signature = wallet.sign_msg(msg)` + +- The frontend dapp will then call `permit(owner, spender, value, deadline, signature)` on the contract +- `permit()` will : + - construct the message like so : + - `msg = f"{owner}:{spender}:{value}:{deadline}:{ctx.this}"` + - assert the deadline is greater than the current time. + - construct a `permit_hash` using SHA3 hash of `msg`. + - assert `permit_hash` is None, if not, revert + - store `permit_hash` in `permits[permit_hash]`, to prevent replays + - call `verify(msg, signature)` + - if valid: + - will add the `permit_hash` to `permits` + - add the allowance to the spender + +### How to test : +- Setup testing harness by following the instructions in the [contract dev environment](https://github.com/xian-network/contract-dev-environment) +- Clone this repo to `contracts` +- Run `pytest` in the root directory of the repo From 2c0adbd3d05bae873068c349aabae7578700d419 Mon Sep 17 00:00:00 2001 From: Endogen Date: Mon, 6 Jan 2025 02:10:41 +0100 Subject: [PATCH 16/30] Create xsc0003.md --- src/smart-contracts/standards/xsc0003.md | 155 +++++++++++++++++++++++ 1 file changed, 155 insertions(+) create mode 100644 src/smart-contracts/standards/xsc0003.md diff --git a/src/smart-contracts/standards/xsc0003.md b/src/smart-contracts/standards/xsc0003.md new file mode 100644 index 0000000..54587ca --- /dev/null +++ b/src/smart-contracts/standards/xsc0003.md @@ -0,0 +1,155 @@ +# XSC003 Streaming Payments + +- Inspired by protocols like [Superfluid](https://superfluid.finance/) which solve the problem of recurring payments using cryptocurrencies. +- Allows a user to create a stream of payments to a receiver, with a rate and a time window. +- Supports opening a payment stream using a `XSC002 permit`. +- Xian can recommend this feature as the base token standard, enabling subscriptions & recurring payments as standard on all tokens. + +## How it works : + +The provided methods facilitate the creation and management of payment streams within a smart contract. These streams allow for continuous, time-based payments between parties, defined by a rate and a specific time window. The functionality supports both direct transactions by the sender and transactions authorized through cryptographic permits. + +## User Stories : + +#### As a sender I want to be able to: + - open a stream to a receiver with a rate and a time window + - close a stream to a receiver, fulfilling outstanding claims to the receiver + - update a stream to a receiver. + - open multiple streams to a receiver + - open multiple streams to multiple receivers +#### As a receiver I want to be able to: + - claim funds due to me from a sender + - finalize a stream from a sender + - forfeit a stream from a sender + + +#### Note on time arguments (begins, closes, deadline, etc) : +All time arguments must be in the format of `%Y-%m-%d %H:%M:%S` +e.g `2023-01-01 10:00:00` + + +### Method: create_stream +`create_stream(receiver: str, rate: float, begins: str, closes: str)` + +#### Overview +The `create_stream` method facilitates the creation of a new payment stream from the sender to a receiver. This method allows for flexible scheduling of the stream, which can be set to start at any point in the past, present, or future. + +#### Functionality +This method performs the following operations to establish a new payment stream: +1. Sender Identification: + - The sender of the stream is automatically identified as the caller of the function (ctx.caller). +2. Stream Creation: + - The method calls `perform_create_stream`, an internal function that handles the logic for setting up the stream. This includes generating a unique stream ID and validating the parameters such as the start and end times, ensuring the rate is positive, and checking that the stream does not already exist. +3. Return Value: + - The unique stream ID is returned, providing a reference to the newly created stream. +This method simplifies the process of initiating a payment stream, making it accessible for users to set up scheduled payments to other parties within the smart contract environment. + +### Method : create_stream_from_permit +`create_stream_from_permit(sender: str, receiver: str, rate: float, begins: str, closes: str, deadline: str, signature: str)` + +#### Overview +The create_stream_from_permit method enables the creation of a payment stream based on a cryptographic permit, which includes a signature that must be verified before the stream can be established. This method allows for secure and verified transactions, ensuring that the stream is initiated based on pre-approved permissions. +#### Functionality +This method performs the following operations to establish a new payment stream using a cryptographic permit: +1. Checks the the deadline has not passed. +2. Permit Message Construction: + - Constructs a permit message using the sender, receiver, rate, and the specified time window (begins and closes). This message is then hashed to create a unique identifier for the permit. +3. Permit Verification: + - Uniqueness Check: Ensures that the permit has not been used before by checking the hashed permit message against a record of used permits. +4. Signature Verification: + - Validates the signature using cryptographic methods to ensure that it was indeed signed by the sender, confirming their intent to create the stream. +5. Permit Registration: + - Marks the permit as used in the system to prevent reuse, ensuring the integrity of the permit system. +6. Stream Creation: + - Calls perform_create_stream to handle the actual creation of the stream using the validated parameters. This internal function ensures that the stream is set up correctly with all necessary validations. +7. Return Value: + - Returns the unique stream ID generated during the stream creation process, providing a reference to the newly established stream. + +### Method : balance_stream + +`balance_stream(stream_id: str)` + +#### Overview + +The balance_stream method is designed to facilitate the transfer of funds between a sender and a receiver based on the terms of an active payment stream. This method can be invoked by either the sender or the receiver to calculate and transfer the amount due at the time of the call. + + +#### Functionality +This method ensures that payment streams are managed fairly and transparently, allowing parties to claim due funds based on the agreed-upon terms of the stream. + + +1. Existence and Status Check: It first verifies that the stream identified by stream_id exists and is currently active. If the stream does not exist or is not active, the method will raise an assertion error. +2. Time Check: It checks that the current time (now) is after the stream's start time (BEGIN_KEY). This ensures that no funds are transferred before the stream is supposed to begin. +3. Caller Validation: Only the sender or the receiver associated with the stream can call this method to balance the stream. This is enforced by checking if the caller (ctx.caller) is either the sender or the receiver. +4. Calculation of Amount Due: The method calculates the outstanding balance that can be claimed at the time of the call. This is done by determining the amount due from the start of the stream or the last claim, up to the current time or the end of the stream, whichever is earlier. +5. Claimable Amount: It then calculates the actual amount that can be claimed, which is the lesser of the outstanding balance or the sender's current balance. This prevents attempting to claim more than the sender has. +6. Transfer of Funds: The calculated claimable amount is then transferred from the sender's balance to the receiver's balance. This updates the balances of both parties. +7. Update Claimed Amount: The amount claimed is recorded in the stream's data under CLAIMED_KEY to keep track of the total amount that has been transferred over the life of the stream. +7. Return Statement: Finally, the method returns a message indicating the amount of tokens claimed from the stream, providing a clear confirmation of the transaction. + + +### Method : change_close_time + +`change_close_time(stream_id: str, new_close_time: str)` + +#### Overview +The change_close_time method allows the sender of a payment stream to adjust the closing time of an active stream. This functionality is crucial for extending or shortening the duration of a payment stream based on new agreements or circumstances. + +#### Functionality + +This method performs several operations to ensure the proper management of the stream's lifecycle: +1. Stream Existence and Status Check: + - It first checks that the stream identified by `stream_id` exists and is active. If the stream does not exist or is not active, an assertion error is raised. +2. Sender Authorization: + - The method ensures that only the sender of the stream can change its closing time. This is enforced by verifying that the caller (`ctx.caller`) is the sender recorded in the stream's data. +3. Adjusting Close Time: + - If the new closing time is before the stream's start time and the current time is also before the stream's start time, the closing time is set to the start time. This effectively invalidates the stream by making it non-operational from the start. + - If the new closing time is in the past or equal to the current time, the stream is closed immediately by setting the closing time to the current time (`now`). + - Otherwise, the closing time is updated to the new specified time. This allows for the extension or reduction of the stream's duration based on the new closing time. +4. Return Statement: + - The method returns a message indicating the new closing time of the stream, providing clear feedback on the operation performed. + +### Method : finalize_stream + +`finalize_stream(stream_id: str)` + +#### Overview +The finalize_stream method is designed to formally close a payment stream between a sender and a receiver. This method ensures that all due balances are settled and that the stream is properly closed without any pending obligations. +#### Functionality + +This method performs several critical checks and operations to ensure the stream is correctly finalized: +1. Stream Existence and Status Check: + - It verifies that the stream identified by `stream_id` exists and is currently active. If the stream does not exist or is not active, an assertion error is raised. +2. Caller Authorization: + - The method ensures that only the sender or the receiver associated with the stream can finalize it. This is enforced by checking if the caller (`ctx.caller`) is either the sender or the receiver. +3. Time Check: + - It checks that the current time (`now`) is after or exactly at the stream's closing time (`CLOSE_KEY`). This ensures that the stream is not finalized prematurely. +4. Balance Settlement: + - Before finalizing, the method calculates the outstanding balance using `calc_outstanding_balance`, which considers the stream's start time, closing time, rate, and already claimed amount. It asserts that the outstanding balance must be zero, indicating that all due payments have been settled and claimed. This prevents the finalization of streams that still have pending payments. +5. Stream Status Update: + - Once all checks are passed, the stream's status is updated to `STREAM_FINALIZED`, indicating that it is officially closed and cannot be reactivated. +6. Return Statement: + - The method returns a message confirming the finalization of the stream, providing clear feedback on the operation performed. + + +### Method : forfeit_stream + +`forfeit_stream(stream_id: str)` + +#### Overview +The forfeit_stream method allows a receiver to voluntarily forfeit an active payment stream. This action effectively terminates the stream, marking it as forfeited and relinquishing any claims the receiver might have had. +#### Functionality +This method performs several operations to ensure the stream is correctly forfeited: +1. Stream Existence and Status Check: + -It first verifies that the stream identified by `stream_id` exists and is currently active. If the stream does not exist or is not active, an assertion error is raised. +2. Receiver Authorization: + - The method ensures that only the receiver associated with the stream can forfeit it. This is enforced by checking if the caller (`ctx.caller`) is the receiver recorded in the stream's data. +3. Stream Status Update: + - The stream's status is updated to `STREAM_FORFEIT`, indicating that it has been voluntarily terminated by the receiver. Additionally, the closing time of the stream is set to the current time (`now`), marking the exact moment the stream was forfeited. +4. Return Statement: + - The method returns a message confirming that the stream has been forfeited, providing clear feedback on the operation performed. + +### How to test : +- Setup testing harness by following the instructions in the [contract dev environment](https://github.com/xian-network/contract-dev-environment) +- Clone this repo to `contracts` +- Run `pytest` in the root directory of the repo From d5786a12873fd58afa402646f6a032f1174266f9 Mon Sep 17 00:00:00 2001 From: Endogen Date: Thu, 9 Jan 2025 22:28:37 +0100 Subject: [PATCH 17/30] Fix typo --- src/introduction/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/introduction/index.md b/src/introduction/index.md index 4295b23..98b7bcc 100644 --- a/src/introduction/index.md +++ b/src/introduction/index.md @@ -31,5 +31,5 @@ Xian is a pioneering blockchain project that melds innovation with accessibility Telegram : https://t.me/xian_network
Discord : https://discord.gg/8W9ZMxUYuA
-Github : https://github.com/xian-network
+GitHub : https://github.com/xian-network
Forum : https://forum.xian.org From be98bc8d8bbb91492392718ff9a3092f9287a2af Mon Sep 17 00:00:00 2001 From: Endogen Date: Thu, 9 Jan 2025 22:35:12 +0100 Subject: [PATCH 18/30] Change title for contract naming rules --- src/smart-contracts/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/smart-contracts/index.md b/src/smart-contracts/index.md index 2e02dfa..416ae05 100644 --- a/src/smart-contracts/index.md +++ b/src/smart-contracts/index.md @@ -6,7 +6,7 @@ description: The Contracting engine enables contracts to be written in a subset # Contracting Engine The Contracting engine enables contracts to be written in a subset of Python designed for writing, testing, and deploying smart contracts with ease and efficiency. It makes blockchain development as intuitive and accessible as possible, leveraging the simplicity of Python to offer a seamless smart contract development experience.

-## Contract Identification +## Contract Naming Rules Unlike other blockchains where contracts have addresses, Xian contracts are identified by their name. Contract names must: - Start with 'con_' prefix (except system contracts like 'currency') - Be lowercase From 95bcaed7ed88ab57f9257b691fb3bdff602e3097 Mon Sep 17 00:00:00 2001 From: Endogen Date: Thu, 9 Jan 2025 22:41:25 +0100 Subject: [PATCH 19/30] Adjusted the cheat sheet a little --- .vitepress/config.mts | 2 +- ...contract-cheat-sheet.md => cheat-sheet.md} | 23 ++++++++++--------- 2 files changed, 13 insertions(+), 12 deletions(-) rename src/smart-contracts/{contract-cheat-sheet.md => cheat-sheet.md} (87%) diff --git a/.vitepress/config.mts b/.vitepress/config.mts index 902750b..4802aa3 100644 --- a/.vitepress/config.mts +++ b/.vitepress/config.mts @@ -32,7 +32,7 @@ export default defineConfig({ collapsed: true, items: [ { text: 'Contracting Engine', link: '/smart-contracts/' }, - { text: 'Cheat Sheet', link: '/smart-contracts/contract-cheat-sheet' }, + { text: 'Cheat Sheet', link: '/smart-contracts/cheat-sheet' }, { text: 'Context', link: '/smart-contracts/context' }, { text: 'Functions', link: '/smart-contracts/functions' }, { text: 'Events', link: '/smart-contracts/events' }, diff --git a/src/smart-contracts/contract-cheat-sheet.md b/src/smart-contracts/cheat-sheet.md similarity index 87% rename from src/smart-contracts/contract-cheat-sheet.md rename to src/smart-contracts/cheat-sheet.md index bf2a1f3..8187350 100644 --- a/src/smart-contracts/contract-cheat-sheet.md +++ b/src/smart-contracts/cheat-sheet.md @@ -7,7 +7,7 @@ description: Here is a reference contract showcasing many of the syntax and feat ## Reference Contract -Here is a reference contract showcasing many of the syntax and features of Contracting. +This reference contract demonstrates the key features and syntax of Contracting. ```python @@ -100,11 +100,11 @@ def interact_with_other_contract(contract: str, args: dict): c = importlib.import_module(contract) forced_interface = [ - # Func is a way to enforce the existence of a function with specific - # arguments + # Func is a way to enforce the existence + # of a function with specific arguments importlib.Func('do_something', args=('amount', 'to')), - # Var is a way to enforce the existence of a variable with a specific - # type + # Var is a way to enforce the existence + # of a variable with a specific type importlib.Var('balances', Hash) ] @@ -140,14 +140,15 @@ def get_foundation_owner(): # Return value from a previously retrieved Variable object return foundation_owner.get() -# The actual caller that called this function. Could be a contract or an account +# The actual caller that called this function. +# Could be a contract or an account @export def who_am_i(): return ctx.caller -# First signer in the call chain (the original signer). This is the account that -# initiated the transaction even if the transaction was forwarded by another -# contract +# First signer in the call chain (the original signer). +# This is the account that initiated the transaction even +# if the transaction was forwarded by another contract @export def get_top_level_signer(): return ctx.signer @@ -157,8 +158,8 @@ def get_top_level_signer(): def calculate(): some_value = 0 - # This will not work. The transaction will result in an error because - # it's not allowed to use exceptions in smart contracts. + # This will not work. The transaction will result in an error + # because it's not allowed to use exceptions in smart contracts. try: return 100 / some_value except: From a54f1a85b7f418a089614cf975ad5bc946322aa7 Mon Sep 17 00:00:00 2001 From: Endogen Date: Thu, 9 Jan 2025 22:44:01 +0100 Subject: [PATCH 20/30] Adjust so there is no need to scroll --- src/smart-contracts/context.md | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/smart-contracts/context.md b/src/smart-contracts/context.md index 3822553..3555bb1 100644 --- a/src/smart-contracts/context.md +++ b/src/smart-contracts/context.md @@ -56,21 +56,21 @@ def call_direct(): ::: ```txt - con_direct - ctx.signer +----------------+ - | calling | - 2fadab39 ---> | who_am_I( ) | - | | - +----------------+ - ctx.caller = 2fadab39 - - con_indirect con_direct - ctx.signer +---------------+ +----------------+ - | | | calling | - 2fadab39 ---> | | ---> | who_am_I( ) | - | | | | - +---------------+ +----------------+ - ctx.caller = con_indirect + con_direct +ctx.signer +----------------+ + | calling | +2fadab39 ---> | who_am_I( ) | + | | + +----------------+ + ctx.caller = 2fadab39 + + con_indirect con_direct +ctx.signer +---------------+ +----------------+ + | | | calling | +2fadab39 ---> | | ---> | who_am_I( ) | + | | | | + +---------------+ +----------------+ + ctx.caller = con_indirect ``` A good example of how to use this would be in a token contract. From bd0383b840d4fc922ae014f75fd16a894b760c7c Mon Sep 17 00:00:00 2001 From: Endogen Date: Thu, 9 Jan 2025 22:46:40 +0100 Subject: [PATCH 21/30] Changed construct function name from 'seed' to 'init' --- src/smart-contracts/functions.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/smart-contracts/functions.md b/src/smart-contracts/functions.md index e11f8e4..ffede92 100644 --- a/src/smart-contracts/functions.md +++ b/src/smart-contracts/functions.md @@ -49,7 +49,7 @@ If you want a smart contract to execute a piece of code once on submission, you owner = Variable() @construct -def seed(): +def init(): owner.set('bill') @export @@ -57,7 +57,7 @@ def get_owner(): return owner.get() ``` -The `seed` function will execute when the contract is submitted, but never again. Thus, the initial state is such that `owner` is set to `bill`. Because there are no other functions to change this variable in storage, this will stay static. +The `init` function will execute when the contract is submitted, but never again. Thus, the initial state is such that `owner` is set to `bill`. Because there are no other functions to change this variable in storage, this will stay static. ## Constructor Arguments Sometimes, you may write a smart contract that you want to redeploy, or want to define the construction when you submit it. You can do this by providing keyword arguments to the `@construct` function you make. @@ -67,7 +67,7 @@ owner = Variable() allowed = Variable() @construct -def seed(initial_owner, intial_allowed): +def init(initial_owner, intial_allowed): owner.set(initial_owner) allowed.set(intial_allowed) From 643f1eb89381be31059f1dc792a6a8ed987137d5 Mon Sep 17 00:00:00 2001 From: Endogen Date: Thu, 9 Jan 2025 23:10:30 +0100 Subject: [PATCH 22/30] Removed doubled storage page --- .vitepress/config.mts | 1 - src/smart-contracts/concepts/storage.md | 404 +++++++++++++++++++++--- src/smart-contracts/modules/storage.md | 388 ----------------------- 3 files changed, 367 insertions(+), 426 deletions(-) delete mode 100644 src/smart-contracts/modules/storage.md diff --git a/.vitepress/config.mts b/.vitepress/config.mts index 4802aa3..c9e5406 100644 --- a/.vitepress/config.mts +++ b/.vitepress/config.mts @@ -40,7 +40,6 @@ export default defineConfig({ { text: 'Crypto', link: '/smart-contracts/modules/crypto-stdlib' }, { text: 'Hashlib', link: '/smart-contracts/modules/hashlib-stdlib' }, { text: 'Random', link: '/smart-contracts/modules/random-stdlib' }, - { text: 'Storage', link: '/smart-contracts/modules/storage' }, { text: 'Datetime', link: '/smart-contracts/modules/datetime-stdlib' }, ] }, diff --git a/src/smart-contracts/concepts/storage.md b/src/smart-contracts/concepts/storage.md index 95fde65..50dfe10 100644 --- a/src/smart-contracts/concepts/storage.md +++ b/src/smart-contracts/concepts/storage.md @@ -1,58 +1,388 @@ -## Storage Key Patterns -Xian uses a key-value store for contract state. Keys follow specific patterns to maintain organization and prevent collisions between contracts. +# Storage +Contracting stores state in a key-value storage system where each smart contract has it's own data space that cannot be accessed by other smart contracts besides through the `@export` functions. + +When you submit a smart contract, keys are created to store the code and compiled bytecode of the contract. For example: -### Basic Pattern -All keys are prefixed with the contract name: ```python -# Basic pattern +owner = Variable() + +@construct +def seed(): + owner.set(ctx.caller) +``` + +When submitted will create the following in state space: + +| Key | Value | +|-------------------------|------------------------------------| +| `contract.__compiled__` | Python Bytecode | +| `contract.__code__` | Python Code | +| `contract.owner` | `ctx.caller` at submission time | + +Storage follows a simple pattern such that each variable or hash stored is prefaced by the contract name and a period delimiter. If the variable has additional keys, they are appended to the end seperated by colons. + +``` . +.:::... +``` -# Example with Variable -token_name = Variable() -# Stored as: con_token.token_name +## Encoding + +Data is encoded as JSON in the state space. This means that you can store simple Python objects such as dictionaries, arrays, tuples, and even Datetime and Timedelta types (explained later.) + +```python +player = Variable() +stats = { + 'name': 'Steve', + 'level': 100, + 'type': 'Mage', + 'health': 1000 +} +player.set(stats) + +steve = player.get() + +steve['health'] -= 100 +steve['health'] == 900 # True +``` + +```python +authorized_parties = Variable() +parties = ['steve', 'alex', 'bill', 'raghu', 'tejas'] +authorized_parties.set(parties) -# Example with Hash +# This will fail if the contract sender isn't in the authorized parties list. +assert ctx.caller in authorized_parties.get() +``` +## Storage Types + +There are two types of storage: Variable and Hash. Variable only has a single storage slot. Hash allows for a dynamic amount of dimensions to be added to them. Hashes are great for data types such as balances or mappings. + +```python +owner = Variable() balances = Hash() -balances['alice'] = 100 -# Stored as: con_token.balances:alice + +@export +def example(): + owner.set('hello') + a = owner.get() + + balances['bill'] = 100 + a = balances['something'] +``` + +## Variable API +```python +class Variable(Datum): + def __init__(self, contract, name, driver: ContractDriver=driver, t=None): + ... + + def set(self, value): + ... + + def get(self): + ... +``` +#### \_\_init\_\_(self, contract, name, driver, t) +The \_\_init\_\_ arguments are automatically filled in for you during compilation and runtime. You do not have to provide any of them. + +some_contract.py (Smart Contract) +```python +owner = Variable() +``` + +This translates into: +```python +owner = Variable(contract='some_contract', name='owner') ``` -### Hash Storage -Hash keys support multiple dimensions separated by colons: +Driver is pulled from the Runtime (`rt`) module when the contract is being executed. If you provide a type to `t`, the Variable object will make sure that whatever is being passed into `set` is the correct type. + +#### set(self, value) + +some_contract.py (Smart Contract) ```python -# Single dimension -balances['alice'] = 100 -# Stored as: con_token.balances:alice +owner = Variable() +owner.set('bill') +``` + +Executes on contract runtime and sets the value for this variable. The above code causes the following key/value pair to be written into the state. -# Multiple dimensions -allowances['alice', 'bob'] = 500 -# Stored as: con_token.balances:alice:bob +| Key | Value | +|-------------------|-------| +| some_contract.owner | bill | -# Max 16 dimensions allowed -complex_data['user', 'game', 'inventory', 'weapons'] = {...} -# Stored as: con_token.complex_data:user:game:inventory:weapons +__NOTE:__ You have to use the `set` method to alter data. If you use standard `=`, it will just cause the object to be set to whatever you pass. + +```python +owner = Variable() +owner +>> + +owner = 5 +owner +>> 5 ``` -### System Keys -Contracts have special system keys for code and metadata: +#### get(self) + +some_contract.py (Smart Contract) ```python -# Contract source code -.__code__ +owner = Variable() +owner.set('bill') -# Compiled bytecode -.__compiled__ +owner.get() == 'bill' # True +``` + +Returns the value that is stored at this Variable's state location. -# Contract owner (if set) -.__owner__ +__NOTE:__ The converse applies to the `get` function. Simply setting a variable to the Variable object will just copy the reference, not the underlying data. + +```python +owner = Variable() +owner.set('bill') +owner.get() +>> 'bill' -# Contract submission time -.__submitted__ +a = owner +a +>> ``` -### Limitations +## Hash API + +```python +class Hash(Datum): + def __init__(self, contract, name, driver: ContractDriver=driver, default_value=None): + ... + + def set(self, key, value): + ... + + def get(self, item): + ... + + def all(self, *args): + ... + + def clear(self, *args): + ... + + def __setitem__(self, key, value): + ... + + def __getitem__(self, key): + ... +``` + +#### \_\_init\_\_(self, contract, name, driver, default_value) + +Similar to Variable's \_\_init\_\_ except that a different keyword argument `default_value` allows you to set a value to return when the key does not exist. This is good for ledgers or applications where you need to have a base value. + +some_contract.py (Smart Contract) +```python +balances = Hash(default_value=0) +balances['bill'] = 1_000_000 + +balances['bill'] == 1_000_000 # True +balances['raghu'] == 0 # True +``` + +#### set(self, key, value) + +Equivalent to Variable's `get` but accepts an additional argument to specify the key. For example, the following code executed would result in the following state space. + +some_contract.py (Smart Contract) +```python +balances = Hash(default_value=0) +balances.set('bill', 1_000_000) +balances.set('raghu', 100) +balances.set('tejas', 777) +``` -* Total key length must be under 1024 bytes -* Hash keys limited to 16 dimensions -* Keys cannot contain periods (.) or colons (:) as these are delimiters -* Variable/Hash names cannot start with double underscore (__) +| Key | Value | +|-------------------------------|-----------| +| `some_contract.balances:bill` | 1,000,000 | +| `some_contract.balances:raghu`| 100 | +| `some_contract.balances:tejas`| 777 | + +#### Multihashes + +You can provide an arbitrary number of keys (up to 16) to `set` and it will react accordingly, writing data to the dimension of keys that you provided. For example: + +subaccounts.py (Smart Contract) +```python +balances = Hash(default_value=0) +balances.set('bill', 1_000_000) +balances.set(('bill', 'raghu'), 1_000) +balances.set(('raghu', 'bill'), 555) +balances.set(('bill', 'raghu', 'tejas'), 777) +``` + +This will create the following state space: + +| Key | Value | +|--------------------------------------|-----------| +| `subaccounts.balances:bill` | 1,000,000 | +| `subaccounts.balances:bill:raghu` | 1,000 | +| `subaccounts.balances:raghu:bill` | 555 | +| `subaccounts.balances:bill:raghu:tejas` | 777 | + +#### get(self, key) + +Inverse of `set`, where the value for a provided key is returned. If it is `None`, it will set it to the `default_value` provided on initialization. + +some_contract.py (Smart Contract) +```python +balances = Hash(default_value=0) +balances.set('bill', 1_000_000) +balances.set('raghu', 100) +balances.set('tejas', 777) + +balances.get('bill') == 1_000_000 # True +balances.get('raghu') == 100 # True +balances.get('tejas') == 777 # True +``` + +The same caveat applies here + +#### Multihashes +Just like `set`, you retrieve data stored in multihashes by providing the list of keys used to write data to that location. Just like `get` with a single key, the default value will be returned if no value at the storage location is found. + +subaccounts.py (Smart Contract) +```python +balances = Hash(default_value=0) +balances.set('bill', 1_000_000) +balances.set(('bill', 'raghu'), 1_000) +balances.set(('raghu', 'bill'), 555) +balances.set(('bill', 'raghu', 'tejas'), 777) + +balances.get('bill') == 1_000_000 # True +balances.get(('bill', 'raghu')) == 1_000 # True +balances.get(('raghu', 'bill')) == 555 # True +balances.get(('bill', 'raghu', 'tejas')) == 777 # True + +balances.get(('bill', 'raghu', 'tejas', 'steve')) == 0 # True +``` + +__NOTE:__ If storage returns a Python object or dictionary, modifications onto that dictionary will __not__ be synced to storage until you set the key to the altered value again. This is vitally important. +```python +owner = Hash(default_value=0) +owner.set('bill') = { + 'complex': 123, + 'object': 567 +} + +d = owner.get('bill') # Get the dictionary from storage +d['complex'] = 999 # Set a value on the retrieved dictionary +e = owner.get('bill') # Retrieve the same value for comparison + +d['complex'] == e['complex'] # False +``` + +```python +owner = Hash(default_value=0) +owner.set('bill') = { + 'complex': 123, + 'object': 567 +} + +d = owner.get('bill') # Get the dictionary from storage +d['complex'] = 999 # Set a value on the retrieved dictionary + +owner.set('bill', d) # Set storage location to the modified dictionary + +e = owner.get('bill') # Retrieve the same value for comparison + +d['complex'] == e['complex'] # True! +``` + + +#### \_\_setitem\_\_(self, key, value): +Equal functionality to `set`, but allows slice notation for convenience. __This is less verbose and the preferred method of setting storage on a Hash.__ + +subaccounts.py (Smart Contract) +```python +balances = Hash(default_value=0) +balances['bill'] = 1_000_000 +balances['bill', 'raghu'] = 1_000 +balances['raghu', 'bill'] = 555 +balances['bill', 'raghu', 'tejas'] = 777 +``` + +__NOTE:__ The problem that occurs with Variable's set does not occur with Hashes. +```python +owner = Hash(default_value=0) +owner['bill'] = 100 +owner['bill'] +>> 100 +``` + +#### \_\_getitem\_\_(self, key): +Equal functionality to `set`, but allows slice notation for convenience. __This is less verbose and the preferred method of setting storage on a Hash.__ + +subaccounts.py (Smart Contract) +```python +balances = Hash(default_value=0) +balances['bill'] = 1_000_000 +balances['bill', 'raghu'] = 1_000 +balances['raghu', 'bill'] = 555 +balances['bill', 'raghu', 'tejas'] = 777 + +balances['bill'] == 1_000_000 # True +balances['bill', 'raghu'] == 1_000 # True +balances['raghu', 'bill'] == 555 # True +balances['bill', 'raghu', 'tejas'] == 777 # True + +balances['bill', 'raghu', 'tejas', 'steve'] == 0 # True +``` + +#### all(self, \*args): + +Returns all of the values in a particular hash. For multihashes, it returns all values in that 'subset' of hashes. Assume the following state space: + +| Key | Value | +|----------------------------------|-----------| +| `subaccounts.balances:bill` | 1,000,000 | +| `subaccounts.balances:bill:raghu` | 1,000 | +| `subaccounts.balances:bill:tejas` | 555 | +| `subaccounts.balances:raghu` | 777 | +| `subaccounts.balances:raghu:bill` | 10,000 | +| `subaccounts.balances:raghu:tejas` | 100,000 | + + +```python +balances.all() +>> [1000000, 1000, 555, 777, 10000, 100000] + +balances.all('raghu') +>> [777, 10000, 100000] +``` + + +#### clear(self, \*args) + +Clears an entire hash or a section of a hash if the list of keys are provided. Assume the same state space: + +| Key | Value | +|------------------------------------|-----------| +| `subaccounts.balances:bill` | 1,000,000 | +| `subaccounts.balances:bill:raghu` | 1,000 | +| `subaccounts.balances:bill:tejas` | 555 | +| `subaccounts.balances:raghu` | 777 | +| `subaccounts.balances:raghu:bill` | 10,000 | +| `subaccounts.balances:raghu:tejas` | 100,000 | + + +```python +balances.clear('bill') +balances.all() # None of Raghu's accounts are affected +>> [777, 10000, 100000] +``` + +```python +balances.clear() +balances.all() # All entries have been deleted +>> [] +``` diff --git a/src/smart-contracts/modules/storage.md b/src/smart-contracts/modules/storage.md deleted file mode 100644 index 50dfe10..0000000 --- a/src/smart-contracts/modules/storage.md +++ /dev/null @@ -1,388 +0,0 @@ - -# Storage -Contracting stores state in a key-value storage system where each smart contract has it's own data space that cannot be accessed by other smart contracts besides through the `@export` functions. - -When you submit a smart contract, keys are created to store the code and compiled bytecode of the contract. For example: - -```python -owner = Variable() - -@construct -def seed(): - owner.set(ctx.caller) -``` - -When submitted will create the following in state space: - -| Key | Value | -|-------------------------|------------------------------------| -| `contract.__compiled__` | Python Bytecode | -| `contract.__code__` | Python Code | -| `contract.owner` | `ctx.caller` at submission time | - -Storage follows a simple pattern such that each variable or hash stored is prefaced by the contract name and a period delimiter. If the variable has additional keys, they are appended to the end seperated by colons. - -``` -. -.:::... -``` - -## Encoding - -Data is encoded as JSON in the state space. This means that you can store simple Python objects such as dictionaries, arrays, tuples, and even Datetime and Timedelta types (explained later.) - -```python -player = Variable() -stats = { - 'name': 'Steve', - 'level': 100, - 'type': 'Mage', - 'health': 1000 -} -player.set(stats) - -steve = player.get() - -steve['health'] -= 100 -steve['health'] == 900 # True -``` - -```python -authorized_parties = Variable() -parties = ['steve', 'alex', 'bill', 'raghu', 'tejas'] -authorized_parties.set(parties) - -# This will fail if the contract sender isn't in the authorized parties list. -assert ctx.caller in authorized_parties.get() -``` -## Storage Types - -There are two types of storage: Variable and Hash. Variable only has a single storage slot. Hash allows for a dynamic amount of dimensions to be added to them. Hashes are great for data types such as balances or mappings. - -```python -owner = Variable() -balances = Hash() - -@export -def example(): - owner.set('hello') - a = owner.get() - - balances['bill'] = 100 - a = balances['something'] -``` - -## Variable API -```python -class Variable(Datum): - def __init__(self, contract, name, driver: ContractDriver=driver, t=None): - ... - - def set(self, value): - ... - - def get(self): - ... -``` -#### \_\_init\_\_(self, contract, name, driver, t) -The \_\_init\_\_ arguments are automatically filled in for you during compilation and runtime. You do not have to provide any of them. - -some_contract.py (Smart Contract) -```python -owner = Variable() -``` - -This translates into: -```python -owner = Variable(contract='some_contract', name='owner') -``` - -Driver is pulled from the Runtime (`rt`) module when the contract is being executed. If you provide a type to `t`, the Variable object will make sure that whatever is being passed into `set` is the correct type. - -#### set(self, value) - -some_contract.py (Smart Contract) -```python -owner = Variable() -owner.set('bill') -``` - -Executes on contract runtime and sets the value for this variable. The above code causes the following key/value pair to be written into the state. - -| Key | Value | -|-------------------|-------| -| some_contract.owner | bill | - -__NOTE:__ You have to use the `set` method to alter data. If you use standard `=`, it will just cause the object to be set to whatever you pass. - -```python -owner = Variable() -owner ->> - -owner = 5 -owner ->> 5 -``` - -#### get(self) - -some_contract.py (Smart Contract) -```python -owner = Variable() -owner.set('bill') - -owner.get() == 'bill' # True -``` - -Returns the value that is stored at this Variable's state location. - -__NOTE:__ The converse applies to the `get` function. Simply setting a variable to the Variable object will just copy the reference, not the underlying data. - -```python -owner = Variable() -owner.set('bill') -owner.get() ->> 'bill' - -a = owner -a ->> -``` - -## Hash API - -```python -class Hash(Datum): - def __init__(self, contract, name, driver: ContractDriver=driver, default_value=None): - ... - - def set(self, key, value): - ... - - def get(self, item): - ... - - def all(self, *args): - ... - - def clear(self, *args): - ... - - def __setitem__(self, key, value): - ... - - def __getitem__(self, key): - ... -``` - -#### \_\_init\_\_(self, contract, name, driver, default_value) - -Similar to Variable's \_\_init\_\_ except that a different keyword argument `default_value` allows you to set a value to return when the key does not exist. This is good for ledgers or applications where you need to have a base value. - -some_contract.py (Smart Contract) -```python -balances = Hash(default_value=0) -balances['bill'] = 1_000_000 - -balances['bill'] == 1_000_000 # True -balances['raghu'] == 0 # True -``` - -#### set(self, key, value) - -Equivalent to Variable's `get` but accepts an additional argument to specify the key. For example, the following code executed would result in the following state space. - -some_contract.py (Smart Contract) -```python -balances = Hash(default_value=0) -balances.set('bill', 1_000_000) -balances.set('raghu', 100) -balances.set('tejas', 777) -``` - -| Key | Value | -|-------------------------------|-----------| -| `some_contract.balances:bill` | 1,000,000 | -| `some_contract.balances:raghu`| 100 | -| `some_contract.balances:tejas`| 777 | - -#### Multihashes - -You can provide an arbitrary number of keys (up to 16) to `set` and it will react accordingly, writing data to the dimension of keys that you provided. For example: - -subaccounts.py (Smart Contract) -```python -balances = Hash(default_value=0) -balances.set('bill', 1_000_000) -balances.set(('bill', 'raghu'), 1_000) -balances.set(('raghu', 'bill'), 555) -balances.set(('bill', 'raghu', 'tejas'), 777) -``` - -This will create the following state space: - -| Key | Value | -|--------------------------------------|-----------| -| `subaccounts.balances:bill` | 1,000,000 | -| `subaccounts.balances:bill:raghu` | 1,000 | -| `subaccounts.balances:raghu:bill` | 555 | -| `subaccounts.balances:bill:raghu:tejas` | 777 | - -#### get(self, key) - -Inverse of `set`, where the value for a provided key is returned. If it is `None`, it will set it to the `default_value` provided on initialization. - -some_contract.py (Smart Contract) -```python -balances = Hash(default_value=0) -balances.set('bill', 1_000_000) -balances.set('raghu', 100) -balances.set('tejas', 777) - -balances.get('bill') == 1_000_000 # True -balances.get('raghu') == 100 # True -balances.get('tejas') == 777 # True -``` - -The same caveat applies here - -#### Multihashes -Just like `set`, you retrieve data stored in multihashes by providing the list of keys used to write data to that location. Just like `get` with a single key, the default value will be returned if no value at the storage location is found. - -subaccounts.py (Smart Contract) -```python -balances = Hash(default_value=0) -balances.set('bill', 1_000_000) -balances.set(('bill', 'raghu'), 1_000) -balances.set(('raghu', 'bill'), 555) -balances.set(('bill', 'raghu', 'tejas'), 777) - -balances.get('bill') == 1_000_000 # True -balances.get(('bill', 'raghu')) == 1_000 # True -balances.get(('raghu', 'bill')) == 555 # True -balances.get(('bill', 'raghu', 'tejas')) == 777 # True - -balances.get(('bill', 'raghu', 'tejas', 'steve')) == 0 # True -``` - -__NOTE:__ If storage returns a Python object or dictionary, modifications onto that dictionary will __not__ be synced to storage until you set the key to the altered value again. This is vitally important. -```python -owner = Hash(default_value=0) -owner.set('bill') = { - 'complex': 123, - 'object': 567 -} - -d = owner.get('bill') # Get the dictionary from storage -d['complex'] = 999 # Set a value on the retrieved dictionary -e = owner.get('bill') # Retrieve the same value for comparison - -d['complex'] == e['complex'] # False -``` - -```python -owner = Hash(default_value=0) -owner.set('bill') = { - 'complex': 123, - 'object': 567 -} - -d = owner.get('bill') # Get the dictionary from storage -d['complex'] = 999 # Set a value on the retrieved dictionary - -owner.set('bill', d) # Set storage location to the modified dictionary - -e = owner.get('bill') # Retrieve the same value for comparison - -d['complex'] == e['complex'] # True! -``` - - -#### \_\_setitem\_\_(self, key, value): -Equal functionality to `set`, but allows slice notation for convenience. __This is less verbose and the preferred method of setting storage on a Hash.__ - -subaccounts.py (Smart Contract) -```python -balances = Hash(default_value=0) -balances['bill'] = 1_000_000 -balances['bill', 'raghu'] = 1_000 -balances['raghu', 'bill'] = 555 -balances['bill', 'raghu', 'tejas'] = 777 -``` - -__NOTE:__ The problem that occurs with Variable's set does not occur with Hashes. -```python -owner = Hash(default_value=0) -owner['bill'] = 100 -owner['bill'] ->> 100 -``` - -#### \_\_getitem\_\_(self, key): -Equal functionality to `set`, but allows slice notation for convenience. __This is less verbose and the preferred method of setting storage on a Hash.__ - -subaccounts.py (Smart Contract) -```python -balances = Hash(default_value=0) -balances['bill'] = 1_000_000 -balances['bill', 'raghu'] = 1_000 -balances['raghu', 'bill'] = 555 -balances['bill', 'raghu', 'tejas'] = 777 - -balances['bill'] == 1_000_000 # True -balances['bill', 'raghu'] == 1_000 # True -balances['raghu', 'bill'] == 555 # True -balances['bill', 'raghu', 'tejas'] == 777 # True - -balances['bill', 'raghu', 'tejas', 'steve'] == 0 # True -``` - -#### all(self, \*args): - -Returns all of the values in a particular hash. For multihashes, it returns all values in that 'subset' of hashes. Assume the following state space: - -| Key | Value | -|----------------------------------|-----------| -| `subaccounts.balances:bill` | 1,000,000 | -| `subaccounts.balances:bill:raghu` | 1,000 | -| `subaccounts.balances:bill:tejas` | 555 | -| `subaccounts.balances:raghu` | 777 | -| `subaccounts.balances:raghu:bill` | 10,000 | -| `subaccounts.balances:raghu:tejas` | 100,000 | - - -```python -balances.all() ->> [1000000, 1000, 555, 777, 10000, 100000] - -balances.all('raghu') ->> [777, 10000, 100000] -``` - - -#### clear(self, \*args) - -Clears an entire hash or a section of a hash if the list of keys are provided. Assume the same state space: - -| Key | Value | -|------------------------------------|-----------| -| `subaccounts.balances:bill` | 1,000,000 | -| `subaccounts.balances:bill:raghu` | 1,000 | -| `subaccounts.balances:bill:tejas` | 555 | -| `subaccounts.balances:raghu` | 777 | -| `subaccounts.balances:raghu:bill` | 10,000 | -| `subaccounts.balances:raghu:tejas` | 100,000 | - - -```python -balances.clear('bill') -balances.all() # None of Raghu's accounts are affected ->> [777, 10000, 100000] -``` - -```python -balances.clear() -balances.all() # All entries have been deleted ->> [] -``` From 95730085880e8565d693663713a9ee3f838466b7 Mon Sep 17 00:00:00 2001 From: Endogen Date: Thu, 9 Jan 2025 23:13:17 +0100 Subject: [PATCH 23/30] Renamed 'smart-contracts' to 'contracts' --- .vitepress/config.mts | 38 +++++++++--------- .../cheat-sheet.md | 0 .../concepts/contract-submission.md | 0 .../concepts/model.md | 0 .../concepts/stamps.md | 0 .../concepts/storage.md | 0 .../concepts/valid-code.md | 0 src/{smart-contracts => contracts}/context.md | 0 src/{smart-contracts => contracts}/events.md | 0 .../functions.md | 0 .../img/execute.png | Bin .../img/import.png | Bin src/{smart-contracts => contracts}/index.md | 0 .../modules/crypto-stdlib.md | 0 .../modules/datetime-stdlib.md | 0 .../modules/hashlib-stdlib.md | 0 .../modules/random-stdlib.md | 0 .../standards/xsc0001.md | 0 .../standards/xsc0002.md | 0 .../standards/xsc0003.md | 0 .../submitting-a-contract-browser-ide.png | Bin .../submitting-a-contract-tg.png | Bin .../submitting-a-contract.md | 0 src/{smart-contracts => contracts}/testing.md | 0 src/index.md | 4 +- 25 files changed, 21 insertions(+), 21 deletions(-) rename src/{smart-contracts => contracts}/cheat-sheet.md (100%) rename src/{smart-contracts => contracts}/concepts/contract-submission.md (100%) rename src/{smart-contracts => contracts}/concepts/model.md (100%) rename src/{smart-contracts => contracts}/concepts/stamps.md (100%) rename src/{smart-contracts => contracts}/concepts/storage.md (100%) rename src/{smart-contracts => contracts}/concepts/valid-code.md (100%) rename src/{smart-contracts => contracts}/context.md (100%) rename src/{smart-contracts => contracts}/events.md (100%) rename src/{smart-contracts => contracts}/functions.md (100%) rename src/{smart-contracts => contracts}/img/execute.png (100%) rename src/{smart-contracts => contracts}/img/import.png (100%) rename src/{smart-contracts => contracts}/index.md (100%) rename src/{smart-contracts => contracts}/modules/crypto-stdlib.md (100%) rename src/{smart-contracts => contracts}/modules/datetime-stdlib.md (100%) rename src/{smart-contracts => contracts}/modules/hashlib-stdlib.md (100%) rename src/{smart-contracts => contracts}/modules/random-stdlib.md (100%) rename src/{smart-contracts => contracts}/standards/xsc0001.md (100%) rename src/{smart-contracts => contracts}/standards/xsc0002.md (100%) rename src/{smart-contracts => contracts}/standards/xsc0003.md (100%) rename src/{smart-contracts => contracts}/submitting-a-contract-browser-ide.png (100%) rename src/{smart-contracts => contracts}/submitting-a-contract-tg.png (100%) rename src/{smart-contracts => contracts}/submitting-a-contract.md (100%) rename src/{smart-contracts => contracts}/testing.md (100%) diff --git a/.vitepress/config.mts b/.vitepress/config.mts index c9e5406..2e84cee 100644 --- a/.vitepress/config.mts +++ b/.vitepress/config.mts @@ -31,39 +31,39 @@ export default defineConfig({ text: 'Smart Contracts', collapsed: true, items: [ - { text: 'Contracting Engine', link: '/smart-contracts/' }, - { text: 'Cheat Sheet', link: '/smart-contracts/cheat-sheet' }, - { text: 'Context', link: '/smart-contracts/context' }, - { text: 'Functions', link: '/smart-contracts/functions' }, - { text: 'Events', link: '/smart-contracts/events' }, + { text: 'Contracting Engine', link: '/contracts/' }, + { text: 'Cheat Sheet', link: '/contracts/cheat-sheet' }, + { text: 'Context', link: '/contracts/context' }, + { text: 'Functions', link: '/contracts/functions' }, + { text: 'Events', link: '/contracts/events' }, { text: 'Modules', collapsed: true, items: [ - { text: 'Crypto', link: '/smart-contracts/modules/crypto-stdlib' }, - { text: 'Hashlib', link: '/smart-contracts/modules/hashlib-stdlib' }, - { text: 'Random', link: '/smart-contracts/modules/random-stdlib' }, - { text: 'Datetime', link: '/smart-contracts/modules/datetime-stdlib' }, + { text: 'Crypto', link: '/contracts/modules/crypto-stdlib' }, + { text: 'Hashlib', link: '/contracts/modules/hashlib-stdlib' }, + { text: 'Random', link: '/contracts/modules/random-stdlib' }, + { text: 'Datetime', link: '/contracts/modules/datetime-stdlib' }, ] }, { text: 'Concepts', collapsed: true, items: [ - { text: 'Stamps', link: '/smart-contracts/concepts/stamps' }, - { text: 'Storage', link: '/smart-contracts/concepts/storage' }, - { text: 'Valid Code', link: '/smart-contracts/concepts/valid-code' }, - { text: 'Contract Submission', link: '/smart-contracts/concepts/contract-submission' }, - { text: 'Model', link: '/smart-contracts/concepts/model' }, + { text: 'Stamps', link: '/contracts/concepts/stamps' }, + { text: 'Storage', link: '/contracts/concepts/storage' }, + { text: 'Valid Code', link: '/contracts/concepts/valid-code' }, + { text: 'Contract Submission', link: '/contracts/concepts/contract-submission' }, + { text: 'Model', link: '/contracts/concepts/model' }, ] }, { text: 'Standards', collapsed: true, items: [ - { text: 'XSC0001', link: '/smart-contracts/standards/xsc0001' }, - { text: 'XSC0002', link: '/smart-contracts/standards/xsc0002' }, - { text: 'XSC0003', link: '/smart-contracts/standards/xsc0003' }, + { text: 'XSC0001', link: '/contracts/standards/xsc0001' }, + { text: 'XSC0002', link: '/contracts/standards/xsc0002' }, + { text: 'XSC0003', link: '/contracts/standards/xsc0003' }, ] }, - { text: 'Testing', link: '/smart-contracts/testing' }, + { text: 'Testing', link: '/contracts/testing' }, { text: 'Examples', collapsed: true, @@ -73,7 +73,7 @@ export default defineConfig({ { text: 'Token XSC003', link: '/examples/currency' }, ] }, - { text: "Submitting a Contract", link: "/smart-contracts/submitting-a-contract" } + { text: "Submitting a Contract", link: "/contracts/submitting-a-contract" } ] }, { diff --git a/src/smart-contracts/cheat-sheet.md b/src/contracts/cheat-sheet.md similarity index 100% rename from src/smart-contracts/cheat-sheet.md rename to src/contracts/cheat-sheet.md diff --git a/src/smart-contracts/concepts/contract-submission.md b/src/contracts/concepts/contract-submission.md similarity index 100% rename from src/smart-contracts/concepts/contract-submission.md rename to src/contracts/concepts/contract-submission.md diff --git a/src/smart-contracts/concepts/model.md b/src/contracts/concepts/model.md similarity index 100% rename from src/smart-contracts/concepts/model.md rename to src/contracts/concepts/model.md diff --git a/src/smart-contracts/concepts/stamps.md b/src/contracts/concepts/stamps.md similarity index 100% rename from src/smart-contracts/concepts/stamps.md rename to src/contracts/concepts/stamps.md diff --git a/src/smart-contracts/concepts/storage.md b/src/contracts/concepts/storage.md similarity index 100% rename from src/smart-contracts/concepts/storage.md rename to src/contracts/concepts/storage.md diff --git a/src/smart-contracts/concepts/valid-code.md b/src/contracts/concepts/valid-code.md similarity index 100% rename from src/smart-contracts/concepts/valid-code.md rename to src/contracts/concepts/valid-code.md diff --git a/src/smart-contracts/context.md b/src/contracts/context.md similarity index 100% rename from src/smart-contracts/context.md rename to src/contracts/context.md diff --git a/src/smart-contracts/events.md b/src/contracts/events.md similarity index 100% rename from src/smart-contracts/events.md rename to src/contracts/events.md diff --git a/src/smart-contracts/functions.md b/src/contracts/functions.md similarity index 100% rename from src/smart-contracts/functions.md rename to src/contracts/functions.md diff --git a/src/smart-contracts/img/execute.png b/src/contracts/img/execute.png similarity index 100% rename from src/smart-contracts/img/execute.png rename to src/contracts/img/execute.png diff --git a/src/smart-contracts/img/import.png b/src/contracts/img/import.png similarity index 100% rename from src/smart-contracts/img/import.png rename to src/contracts/img/import.png diff --git a/src/smart-contracts/index.md b/src/contracts/index.md similarity index 100% rename from src/smart-contracts/index.md rename to src/contracts/index.md diff --git a/src/smart-contracts/modules/crypto-stdlib.md b/src/contracts/modules/crypto-stdlib.md similarity index 100% rename from src/smart-contracts/modules/crypto-stdlib.md rename to src/contracts/modules/crypto-stdlib.md diff --git a/src/smart-contracts/modules/datetime-stdlib.md b/src/contracts/modules/datetime-stdlib.md similarity index 100% rename from src/smart-contracts/modules/datetime-stdlib.md rename to src/contracts/modules/datetime-stdlib.md diff --git a/src/smart-contracts/modules/hashlib-stdlib.md b/src/contracts/modules/hashlib-stdlib.md similarity index 100% rename from src/smart-contracts/modules/hashlib-stdlib.md rename to src/contracts/modules/hashlib-stdlib.md diff --git a/src/smart-contracts/modules/random-stdlib.md b/src/contracts/modules/random-stdlib.md similarity index 100% rename from src/smart-contracts/modules/random-stdlib.md rename to src/contracts/modules/random-stdlib.md diff --git a/src/smart-contracts/standards/xsc0001.md b/src/contracts/standards/xsc0001.md similarity index 100% rename from src/smart-contracts/standards/xsc0001.md rename to src/contracts/standards/xsc0001.md diff --git a/src/smart-contracts/standards/xsc0002.md b/src/contracts/standards/xsc0002.md similarity index 100% rename from src/smart-contracts/standards/xsc0002.md rename to src/contracts/standards/xsc0002.md diff --git a/src/smart-contracts/standards/xsc0003.md b/src/contracts/standards/xsc0003.md similarity index 100% rename from src/smart-contracts/standards/xsc0003.md rename to src/contracts/standards/xsc0003.md diff --git a/src/smart-contracts/submitting-a-contract-browser-ide.png b/src/contracts/submitting-a-contract-browser-ide.png similarity index 100% rename from src/smart-contracts/submitting-a-contract-browser-ide.png rename to src/contracts/submitting-a-contract-browser-ide.png diff --git a/src/smart-contracts/submitting-a-contract-tg.png b/src/contracts/submitting-a-contract-tg.png similarity index 100% rename from src/smart-contracts/submitting-a-contract-tg.png rename to src/contracts/submitting-a-contract-tg.png diff --git a/src/smart-contracts/submitting-a-contract.md b/src/contracts/submitting-a-contract.md similarity index 100% rename from src/smart-contracts/submitting-a-contract.md rename to src/contracts/submitting-a-contract.md diff --git a/src/smart-contracts/testing.md b/src/contracts/testing.md similarity index 100% rename from src/smart-contracts/testing.md rename to src/contracts/testing.md diff --git a/src/index.md b/src/index.md index 8f3750a..41a4684 100644 --- a/src/index.md +++ b/src/index.md @@ -15,14 +15,14 @@ hero: link: /introduction/ - theme: alt text: Start Building - link: /smart-contracts/ + link: /contracts/ features: - icon: src: ./python-logo.png alt: Python title: Smart Contracts in Python details: Write your smart contracts in native Python. No transpiler necessary. - link: "/smart-contracts/" + link: "/contracts/" linkText: "Read more" - title: Generate revenue icon: From 5debf3ab798cea05444766a80c9669db0e7415cb Mon Sep 17 00:00:00 2001 From: Endogen Date: Thu, 9 Jan 2025 23:20:06 +0100 Subject: [PATCH 24/30] Remove example .md file --- src/api-examples.md | 49 --------------------------------------------- 1 file changed, 49 deletions(-) delete mode 100644 src/api-examples.md diff --git a/src/api-examples.md b/src/api-examples.md deleted file mode 100644 index 6bd8bb5..0000000 --- a/src/api-examples.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -outline: deep ---- - -# Runtime API Examples - -This page demonstrates usage of some of the runtime APIs provided by VitePress. - -The main `useData()` API can be used to access site, theme, and page data for the current page. It works in both `.md` and `.vue` files: - -```md - - -## Results - -### Theme Data -
{{ theme }}
- -### Page Data -
{{ page }}
- -### Page Frontmatter -
{{ frontmatter }}
-``` - - - -## Results - -### Theme Data -
{{ theme }}
- -### Page Data -
{{ page }}
- -### Page Frontmatter -
{{ frontmatter }}
- -## More - -Check out the documentation for the [full list of runtime APIs](https://vitepress.dev/reference/runtime-api#usedata). From 2d8a0d00bccd5c4b655a4b152386b21166f502d3 Mon Sep 17 00:00:00 2001 From: Endogen Date: Thu, 9 Jan 2025 23:20:25 +0100 Subject: [PATCH 25/30] Streamline with the xian-js entry --- src/contracts/submitting-a-contract.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/contracts/submitting-a-contract.md b/src/contracts/submitting-a-contract.md index 4f00554..ebf3b8b 100644 --- a/src/contracts/submitting-a-contract.md +++ b/src/contracts/submitting-a-contract.md @@ -2,7 +2,7 @@ ## Using Python :::tip Using the `xian-py` library -Installation info @ [xian-py](/tools/xian-py) +[xian-py](/tools/xian-py) ```python from xian_py.wallet import Wallet From 6ea79c5656e969a5bb20846e2eed49875302e051 Mon Sep 17 00:00:00 2001 From: Endogen Date: Thu, 9 Jan 2025 23:23:59 +0100 Subject: [PATCH 26/30] Fix markdown Remove '.' in title --- src/node/interfaces/graphql.md | 2 +- src/node/running-a-node.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/node/interfaces/graphql.md b/src/node/interfaces/graphql.md index d8e6fc7..6bfb436 100644 --- a/src/node/interfaces/graphql.md +++ b/src/node/interfaces/graphql.md @@ -77,7 +77,7 @@ query TransferEventQuery { } ``` -**Response : ** +**Response :** ```json { diff --git a/src/node/running-a-node.md b/src/node/running-a-node.md index 4ceb0f6..663ab3a 100644 --- a/src/node/running-a-node.md +++ b/src/node/running-a-node.md @@ -38,7 +38,7 @@ Blockchain Data Service (`BDS`) nodes improve developer experience by providing - **Architecture** : Intel / AMD x86 ::: -## Generate a wallet. +## Generate a wallet - Create a wallet using the browser wallet - Export the private key From 5e0a285c67229d1edfd8085e51c3cdb250c6eca8 Mon Sep 17 00:00:00 2001 From: Endogen Date: Thu, 9 Jan 2025 23:26:34 +0100 Subject: [PATCH 27/30] Remove example page --- src/markdown-examples.md | 93 ---------------------------------------- 1 file changed, 93 deletions(-) delete mode 100644 src/markdown-examples.md diff --git a/src/markdown-examples.md b/src/markdown-examples.md deleted file mode 100644 index 73a215f..0000000 --- a/src/markdown-examples.md +++ /dev/null @@ -1,93 +0,0 @@ -# Markdown Extension Examples - -This page demonstrates some of the built-in markdown extensions provided by VitePress. - -## Syntax Highlighting - -VitePress provides Syntax Highlighting powered by [Shiki](https://github.com/shikijs/shiki), with additional features like line-highlighting: - - - - -**Input** - -````md -```js{4} -export default { - data () { - return { - msg: 'Highlighted!' - } - } -} -``` -```` - -**Output** - -```js{4} -export default { - data () { - return { - msg: 'Highlighted!' - } - } -} -``` - -## Custom Containers - -**Input** - -```md -::: info -This is an info box. -::: - -::: tip -This is a tip. -::: - -::: warning -This is a warning. -::: - -::: danger -This is a dangerous warning. -::: - -::: details -This is a details block. -::: -``` - -**Output** - -::: info -This is an info box. -::: - -::: tip -This is a tip. -::: - -::: warning -This is a warning. -::: - -::: danger -This is a dangerous warning. -::: - -::: details -This is a details block. -::: - -## More - -Check out the documentation for the [full list of markdown extensions](https://vitepress.dev/guide/markdown). From 27df57b9cea085275dfe2aa54feb85f1fd2173cd Mon Sep 17 00:00:00 2001 From: Endogen Date: Thu, 9 Jan 2025 23:30:58 +0100 Subject: [PATCH 28/30] Show nicer draft status --- src/governance/staking-governance.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/governance/staking-governance.md b/src/governance/staking-governance.md index 5ab3ddf..282c5e3 100644 --- a/src/governance/staking-governance.md +++ b/src/governance/staking-governance.md @@ -1,4 +1,6 @@ -# !!! DRAFT !!! +::: warning +🚧 Under Construction - This page is in draft status +::: # Staking From c5dc3a5290db15e1e39c6b3eca3b1f300cf0e783 Mon Sep 17 00:00:00 2001 From: Endogen Date: Thu, 9 Jan 2025 23:45:58 +0100 Subject: [PATCH 29/30] Updated name to xian-docs Updated vitepress to newest version --- package-lock.json | 2208 ++++++++++++++++++++++++++++++++------------- package.json | 2 +- 2 files changed, 1565 insertions(+), 645 deletions(-) diff --git a/package-lock.json b/package-lock.json index c006216..6a20a0b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,40 +1,43 @@ { - "name": "xian-vitepress", + "name": "xian-docs", "lockfileVersion": 3, "requires": true, "packages": { "": { "dependencies": { "tsparticles": "^3.5.0", - "vitepress": "^1.2.3" + "vitepress": "^1.5.0" } }, "node_modules/@algolia/autocomplete-core": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.9.3.tgz", - "integrity": "sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==", + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.17.7.tgz", + "integrity": "sha512-BjiPOW6ks90UKl7TwMv7oNQMnzU+t/wk9mgIDi6b1tXpUek7MW0lbNOUHpvam9pe3lVCf4xPFT+lK7s+e+fs7Q==", + "license": "MIT", "dependencies": { - "@algolia/autocomplete-plugin-algolia-insights": "1.9.3", - "@algolia/autocomplete-shared": "1.9.3" + "@algolia/autocomplete-plugin-algolia-insights": "1.17.7", + "@algolia/autocomplete-shared": "1.17.7" } }, "node_modules/@algolia/autocomplete-plugin-algolia-insights": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.9.3.tgz", - "integrity": "sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==", + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.17.7.tgz", + "integrity": "sha512-Jca5Ude6yUOuyzjnz57og7Et3aXjbwCSDf/8onLHSQgw1qW3ALl9mrMWaXb5FmPVkV3EtkD2F/+NkT6VHyPu9A==", + "license": "MIT", "dependencies": { - "@algolia/autocomplete-shared": "1.9.3" + "@algolia/autocomplete-shared": "1.17.7" }, "peerDependencies": { "search-insights": ">= 1 < 3" } }, "node_modules/@algolia/autocomplete-preset-algolia": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.9.3.tgz", - "integrity": "sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==", + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.17.7.tgz", + "integrity": "sha512-ggOQ950+nwbWROq2MOCIL71RE0DdQZsceqrg32UqnhDz8FlO9rL8ONHNsI2R1MH0tkgVIDKI/D0sMiUchsFdWA==", + "license": "MIT", "dependencies": { - "@algolia/autocomplete-shared": "1.9.3" + "@algolia/autocomplete-shared": "1.17.7" }, "peerDependencies": { "@algolia/client-search": ">= 4.9.1 < 6", @@ -42,151 +45,221 @@ } }, "node_modules/@algolia/autocomplete-shared": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.9.3.tgz", - "integrity": "sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==", + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.17.7.tgz", + "integrity": "sha512-o/1Vurr42U/qskRSuhBH+VKxMvkkUVTLU6WZQr+L5lGZZLYWyhdzWjW0iGXY7EkwRTjBqvN2EsR81yCTGV/kmg==", + "license": "MIT", "peerDependencies": { "@algolia/client-search": ">= 4.9.1 < 6", "algoliasearch": ">= 4.9.1 < 6" } }, - "node_modules/@algolia/cache-browser-local-storage": { - "version": "4.23.3", - "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.23.3.tgz", - "integrity": "sha512-vRHXYCpPlTDE7i6UOy2xE03zHF2C8MEFjPN2v7fRbqVpcOvAUQK81x3Kc21xyb5aSIpYCjWCZbYZuz8Glyzyyg==", + "node_modules/@algolia/client-abtesting": { + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.19.0.tgz", + "integrity": "sha512-dMHwy2+nBL0SnIsC1iHvkBao64h4z+roGelOz11cxrDBrAdASxLxmfVMop8gmodQ2yZSacX0Rzevtxa+9SqxCw==", + "license": "MIT", "dependencies": { - "@algolia/cache-common": "4.23.3" + "@algolia/client-common": "5.19.0", + "@algolia/requester-browser-xhr": "5.19.0", + "@algolia/requester-fetch": "5.19.0", + "@algolia/requester-node-http": "5.19.0" + }, + "engines": { + "node": ">= 14.0.0" } }, - "node_modules/@algolia/cache-common": { - "version": "4.23.3", - "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.23.3.tgz", - "integrity": "sha512-h9XcNI6lxYStaw32pHpB1TMm0RuxphF+Ik4o7tcQiodEdpKK+wKufY6QXtba7t3k8eseirEMVB83uFFF3Nu54A==" - }, - "node_modules/@algolia/cache-in-memory": { - "version": "4.23.3", - "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.23.3.tgz", - "integrity": "sha512-yvpbuUXg/+0rbcagxNT7un0eo3czx2Uf0y4eiR4z4SD7SiptwYTpbuS0IHxcLHG3lq22ukx1T6Kjtk/rT+mqNg==", - "dependencies": { - "@algolia/cache-common": "4.23.3" + "node_modules/@algolia/client-analytics": { + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.19.0.tgz", + "integrity": "sha512-CDW4RwnCHzU10upPJqS6N6YwDpDHno7w6/qXT9KPbPbt8szIIzCHrva4O9KIfx1OhdsHzfGSI5hMAiOOYl4DEQ==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.19.0", + "@algolia/requester-browser-xhr": "5.19.0", + "@algolia/requester-fetch": "5.19.0", + "@algolia/requester-node-http": "5.19.0" + }, + "engines": { + "node": ">= 14.0.0" } }, - "node_modules/@algolia/client-account": { - "version": "4.23.3", - "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.23.3.tgz", - "integrity": "sha512-hpa6S5d7iQmretHHF40QGq6hz0anWEHGlULcTIT9tbUssWUriN9AUXIFQ8Ei4w9azD0hc1rUok9/DeQQobhQMA==", - "dependencies": { - "@algolia/client-common": "4.23.3", - "@algolia/client-search": "4.23.3", - "@algolia/transporter": "4.23.3" + "node_modules/@algolia/client-common": { + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.19.0.tgz", + "integrity": "sha512-2ERRbICHXvtj5kfFpY5r8qu9pJII/NAHsdgUXnUitQFwPdPL7wXiupcvZJC7DSntOnE8AE0lM7oDsPhrJfj5nQ==", + "license": "MIT", + "engines": { + "node": ">= 14.0.0" } }, - "node_modules/@algolia/client-analytics": { - "version": "4.23.3", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.23.3.tgz", - "integrity": "sha512-LBsEARGS9cj8VkTAVEZphjxTjMVCci+zIIiRhpFun9jGDUlS1XmhCW7CTrnaWeIuCQS/2iPyRqSy1nXPjcBLRA==", + "node_modules/@algolia/client-insights": { + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.19.0.tgz", + "integrity": "sha512-xPOiGjo6I9mfjdJO7Y+p035aWePcbsItizIp+qVyfkfZiGgD+TbNxM12g7QhFAHIkx/mlYaocxPY/TmwPzTe+A==", + "license": "MIT", "dependencies": { - "@algolia/client-common": "4.23.3", - "@algolia/client-search": "4.23.3", - "@algolia/requester-common": "4.23.3", - "@algolia/transporter": "4.23.3" + "@algolia/client-common": "5.19.0", + "@algolia/requester-browser-xhr": "5.19.0", + "@algolia/requester-fetch": "5.19.0", + "@algolia/requester-node-http": "5.19.0" + }, + "engines": { + "node": ">= 14.0.0" } }, - "node_modules/@algolia/client-common": { - "version": "4.23.3", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.23.3.tgz", - "integrity": "sha512-l6EiPxdAlg8CYhroqS5ybfIczsGUIAC47slLPOMDeKSVXYG1n0qGiz4RjAHLw2aD0xzh2EXZ7aRguPfz7UKDKw==", - "dependencies": { - "@algolia/requester-common": "4.23.3", - "@algolia/transporter": "4.23.3" + "node_modules/@algolia/client-personalization": { + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.19.0.tgz", + "integrity": "sha512-B9eoce/fk8NLboGje+pMr72pw+PV7c5Z01On477heTZ7jkxoZ4X92dobeGuEQop61cJ93Gaevd1of4mBr4hu2A==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.19.0", + "@algolia/requester-browser-xhr": "5.19.0", + "@algolia/requester-fetch": "5.19.0", + "@algolia/requester-node-http": "5.19.0" + }, + "engines": { + "node": ">= 14.0.0" } }, - "node_modules/@algolia/client-personalization": { - "version": "4.23.3", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.23.3.tgz", - "integrity": "sha512-3E3yF3Ocr1tB/xOZiuC3doHQBQ2zu2MPTYZ0d4lpfWads2WTKG7ZzmGnsHmm63RflvDeLK/UVx7j2b3QuwKQ2g==", + "node_modules/@algolia/client-query-suggestions": { + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.19.0.tgz", + "integrity": "sha512-6fcP8d4S8XRDtVogrDvmSM6g5g6DndLc0pEm1GCKe9/ZkAzCmM3ZmW1wFYYPxdjMeifWy1vVEDMJK7sbE4W7MA==", + "license": "MIT", "dependencies": { - "@algolia/client-common": "4.23.3", - "@algolia/requester-common": "4.23.3", - "@algolia/transporter": "4.23.3" + "@algolia/client-common": "5.19.0", + "@algolia/requester-browser-xhr": "5.19.0", + "@algolia/requester-fetch": "5.19.0", + "@algolia/requester-node-http": "5.19.0" + }, + "engines": { + "node": ">= 14.0.0" } }, "node_modules/@algolia/client-search": { - "version": "4.23.3", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.23.3.tgz", - "integrity": "sha512-P4VAKFHqU0wx9O+q29Q8YVuaowaZ5EM77rxfmGnkHUJggh28useXQdopokgwMeYw2XUht49WX5RcTQ40rZIabw==", - "dependencies": { - "@algolia/client-common": "4.23.3", - "@algolia/requester-common": "4.23.3", - "@algolia/transporter": "4.23.3" + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.19.0.tgz", + "integrity": "sha512-Ctg3xXD/1VtcwmkulR5+cKGOMj4r0wC49Y/KZdGQcqpydKn+e86F6l3tb3utLJQVq4lpEJud6kdRykFgcNsp8Q==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.19.0", + "@algolia/requester-browser-xhr": "5.19.0", + "@algolia/requester-fetch": "5.19.0", + "@algolia/requester-node-http": "5.19.0" + }, + "engines": { + "node": ">= 14.0.0" } }, - "node_modules/@algolia/logger-common": { - "version": "4.23.3", - "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.23.3.tgz", - "integrity": "sha512-y9kBtmJwiZ9ZZ+1Ek66P0M68mHQzKRxkW5kAAXYN/rdzgDN0d2COsViEFufxJ0pb45K4FRcfC7+33YB4BLrZ+g==" + "node_modules/@algolia/ingestion": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.19.0.tgz", + "integrity": "sha512-LO7w1MDV+ZLESwfPmXkp+KLeYeFrYEgtbCZG6buWjddhYraPQ9MuQWLhLLiaMlKxZ/sZvFTcZYuyI6Jx4WBhcg==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.19.0", + "@algolia/requester-browser-xhr": "5.19.0", + "@algolia/requester-fetch": "5.19.0", + "@algolia/requester-node-http": "5.19.0" + }, + "engines": { + "node": ">= 14.0.0" + } }, - "node_modules/@algolia/logger-console": { - "version": "4.23.3", - "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.23.3.tgz", - "integrity": "sha512-8xoiseoWDKuCVnWP8jHthgaeobDLolh00KJAdMe9XPrWPuf1by732jSpgy2BlsLTaT9m32pHI8CRfrOqQzHv3A==", + "node_modules/@algolia/monitoring": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.19.0.tgz", + "integrity": "sha512-Mg4uoS0aIKeTpu6iv6O0Hj81s8UHagi5TLm9k2mLIib4vmMtX7WgIAHAcFIaqIZp5D6s5EVy1BaDOoZ7buuJHA==", + "license": "MIT", "dependencies": { - "@algolia/logger-common": "4.23.3" + "@algolia/client-common": "5.19.0", + "@algolia/requester-browser-xhr": "5.19.0", + "@algolia/requester-fetch": "5.19.0", + "@algolia/requester-node-http": "5.19.0" + }, + "engines": { + "node": ">= 14.0.0" } }, "node_modules/@algolia/recommend": { - "version": "4.23.3", - "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-4.23.3.tgz", - "integrity": "sha512-9fK4nXZF0bFkdcLBRDexsnGzVmu4TSYZqxdpgBW2tEyfuSSY54D4qSRkLmNkrrz4YFvdh2GM1gA8vSsnZPR73w==", - "dependencies": { - "@algolia/cache-browser-local-storage": "4.23.3", - "@algolia/cache-common": "4.23.3", - "@algolia/cache-in-memory": "4.23.3", - "@algolia/client-common": "4.23.3", - "@algolia/client-search": "4.23.3", - "@algolia/logger-common": "4.23.3", - "@algolia/logger-console": "4.23.3", - "@algolia/requester-browser-xhr": "4.23.3", - "@algolia/requester-common": "4.23.3", - "@algolia/requester-node-http": "4.23.3", - "@algolia/transporter": "4.23.3" + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.19.0.tgz", + "integrity": "sha512-PbgrMTbUPlmwfJsxjFhal4XqZO2kpBNRjemLVTkUiti4w/+kzcYO4Hg5zaBgVqPwvFDNQ8JS4SS3TBBem88u+g==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.19.0", + "@algolia/requester-browser-xhr": "5.19.0", + "@algolia/requester-fetch": "5.19.0", + "@algolia/requester-node-http": "5.19.0" + }, + "engines": { + "node": ">= 14.0.0" } }, "node_modules/@algolia/requester-browser-xhr": { - "version": "4.23.3", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.23.3.tgz", - "integrity": "sha512-jDWGIQ96BhXbmONAQsasIpTYWslyjkiGu0Quydjlowe+ciqySpiDUrJHERIRfELE5+wFc7hc1Q5hqjGoV7yghw==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.19.0.tgz", + "integrity": "sha512-GfnhnQBT23mW/VMNs7m1qyEyZzhZz093aY2x8p0era96MMyNv8+FxGek5pjVX0b57tmSCZPf4EqNCpkGcGsmbw==", + "license": "MIT", "dependencies": { - "@algolia/requester-common": "4.23.3" + "@algolia/client-common": "5.19.0" + }, + "engines": { + "node": ">= 14.0.0" } }, - "node_modules/@algolia/requester-common": { - "version": "4.23.3", - "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.23.3.tgz", - "integrity": "sha512-xloIdr/bedtYEGcXCiF2muajyvRhwop4cMZo+K2qzNht0CMzlRkm8YsDdj5IaBhshqfgmBb3rTg4sL4/PpvLYw==" + "node_modules/@algolia/requester-fetch": { + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.19.0.tgz", + "integrity": "sha512-oyTt8ZJ4T4fYvW5avAnuEc6Laedcme9fAFryMD9ndUTIUe/P0kn3BuGcCLFjN3FDmdrETHSFkgPPf1hGy3sLCw==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.19.0" + }, + "engines": { + "node": ">= 14.0.0" + } }, "node_modules/@algolia/requester-node-http": { - "version": "4.23.3", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.23.3.tgz", - "integrity": "sha512-zgu++8Uj03IWDEJM3fuNl34s746JnZOWn1Uz5taV1dFyJhVM/kTNw9Ik7YJWiUNHJQXcaD8IXD1eCb0nq/aByA==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.19.0.tgz", + "integrity": "sha512-p6t8ue0XZNjcRiqNkb5QAM0qQRAKsCiebZ6n9JjWA+p8fWf8BvnhO55y2fO28g3GW0Imj7PrAuyBuxq8aDVQwQ==", + "license": "MIT", "dependencies": { - "@algolia/requester-common": "4.23.3" + "@algolia/client-common": "5.19.0" + }, + "engines": { + "node": ">= 14.0.0" } }, - "node_modules/@algolia/transporter": { - "version": "4.23.3", - "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.23.3.tgz", - "integrity": "sha512-Wjl5gttqnf/gQKJA+dafnD0Y6Yw97yvfY8R9h0dQltX1GXTgNs1zWgvtWW0tHl1EgMdhAyw189uWiZMnL3QebQ==", - "dependencies": { - "@algolia/cache-common": "4.23.3", - "@algolia/logger-common": "4.23.3", - "@algolia/requester-common": "4.23.3" + "node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.7.tgz", - "integrity": "sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.3.tgz", + "integrity": "sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.26.3" + }, "bin": { "parser": "bin/babel-parser.js" }, @@ -194,29 +267,45 @@ "node": ">=6.0.0" } }, + "node_modules/@babel/types": { + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.3.tgz", + "integrity": "sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@docsearch/css": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.6.0.tgz", - "integrity": "sha512-+sbxb71sWre+PwDK7X2T8+bhS6clcVMLwBPznX45Qu6opJcgRjAp7gYSDzVFp187J+feSj5dNBN1mJoi6ckkUQ==" + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.8.2.tgz", + "integrity": "sha512-y05ayQFyUmCXze79+56v/4HpycYF3uFqB78pLPrSV5ZKAlDuIAAJNhaRi8tTdRNXh05yxX/TyNnzD6LwSM89vQ==", + "license": "MIT" }, "node_modules/@docsearch/js": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@docsearch/js/-/js-3.6.0.tgz", - "integrity": "sha512-QujhqINEElrkIfKwyyyTfbsfMAYCkylInLYMRqHy7PHc8xTBQCow73tlo/Kc7oIwBrCLf0P3YhjlOeV4v8hevQ==", + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/@docsearch/js/-/js-3.8.2.tgz", + "integrity": "sha512-Q5wY66qHn0SwA7Taa0aDbHiJvaFJLOJyHmooQ7y8hlwwQLQ/5WwCcoX0g7ii04Qi2DJlHsd0XXzJ8Ypw9+9YmQ==", + "license": "MIT", "dependencies": { - "@docsearch/react": "3.6.0", + "@docsearch/react": "3.8.2", "preact": "^10.0.0" } }, "node_modules/@docsearch/react": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.6.0.tgz", - "integrity": "sha512-HUFut4ztcVNmqy9gp/wxNbC7pTOHhgVVkHVGCACTuLhUKUhKAF9KYHJtMiLUJxEqiFLQiuri1fWF8zqwM/cu1w==", - "dependencies": { - "@algolia/autocomplete-core": "1.9.3", - "@algolia/autocomplete-preset-algolia": "1.9.3", - "@docsearch/css": "3.6.0", - "algoliasearch": "^4.19.1" + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.8.2.tgz", + "integrity": "sha512-xCRrJQlTt8N9GU0DG4ptwHRkfnSnD/YpdeaXe02iKfqs97TkZJv60yE+1eq/tjPcVnTW8dP5qLP7itifFVV5eg==", + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-core": "1.17.7", + "@algolia/autocomplete-preset-algolia": "1.17.7", + "@docsearch/css": "3.8.2", + "algoliasearch": "^5.14.2" }, "peerDependencies": { "@types/react": ">= 16.8.0 < 19.0.0", @@ -246,6 +335,7 @@ "cpu": [ "ppc64" ], + "license": "MIT", "optional": true, "os": [ "aix" @@ -261,6 +351,7 @@ "cpu": [ "arm" ], + "license": "MIT", "optional": true, "os": [ "android" @@ -276,6 +367,7 @@ "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "android" @@ -291,6 +383,7 @@ "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "android" @@ -306,6 +399,7 @@ "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "darwin" @@ -321,6 +415,7 @@ "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "darwin" @@ -336,6 +431,7 @@ "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "freebsd" @@ -351,6 +447,7 @@ "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "freebsd" @@ -366,6 +463,7 @@ "cpu": [ "arm" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -381,6 +479,7 @@ "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -396,6 +495,7 @@ "cpu": [ "ia32" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -411,6 +511,7 @@ "cpu": [ "loong64" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -426,6 +527,7 @@ "cpu": [ "mips64el" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -441,6 +543,7 @@ "cpu": [ "ppc64" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -456,6 +559,7 @@ "cpu": [ "riscv64" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -471,6 +575,7 @@ "cpu": [ "s390x" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -486,6 +591,7 @@ "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -501,6 +607,7 @@ "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "netbsd" @@ -516,6 +623,7 @@ "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "openbsd" @@ -531,6 +639,7 @@ "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "sunos" @@ -546,6 +655,7 @@ "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "win32" @@ -561,6 +671,7 @@ "cpu": [ "ia32" ], + "license": "MIT", "optional": true, "os": [ "win32" @@ -576,6 +687,7 @@ "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "win32" @@ -584,220 +696,356 @@ "node": ">=12" } }, + "node_modules/@iconify-json/simple-icons": { + "version": "1.2.19", + "resolved": "https://registry.npmjs.org/@iconify-json/simple-icons/-/simple-icons-1.2.19.tgz", + "integrity": "sha512-5ntmhLBUEKiakX3quPPXft+WfXIVfDINzTm3djZzzewah9ACxsCVaxoa4QVxlW8PMoF8jndXOqyHYZGCxwxoZw==", + "license": "CC0-1.0", + "dependencies": { + "@iconify/types": "*" + } + }, + "node_modules/@iconify/types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz", + "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==", + "license": "MIT" + }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "license": "MIT" }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.0.tgz", - "integrity": "sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.30.1.tgz", + "integrity": "sha512-pSWY+EVt3rJ9fQ3IqlrEUtXh3cGqGtPDH1FQlNZehO2yYxCHEX1SPsz1M//NXwYfbTlcKr9WObLnJX9FsS9K1Q==", "cpu": [ "arm" ], + "license": "MIT", "optional": true, "os": [ "android" ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.0.tgz", - "integrity": "sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.30.1.tgz", + "integrity": "sha512-/NA2qXxE3D/BRjOJM8wQblmArQq1YoBVJjrjoTSBS09jgUisq7bqxNHJ8kjCHeV21W/9WDGwJEWSN0KQ2mtD/w==", "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "android" ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.0.tgz", - "integrity": "sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.30.1.tgz", + "integrity": "sha512-r7FQIXD7gB0WJ5mokTUgUWPl0eYIH0wnxqeSAhuIwvnnpjdVB8cRRClyKLQr7lgzjctkbp5KmswWszlwYln03Q==", "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "darwin" ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.0.tgz", - "integrity": "sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.30.1.tgz", + "integrity": "sha512-x78BavIwSH6sqfP2xeI1hd1GpHL8J4W2BXcVM/5KYKoAD3nNsfitQhvWSw+TFtQTLZ9OmlF+FEInEHyubut2OA==", "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "darwin" ] }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.30.1.tgz", + "integrity": "sha512-HYTlUAjbO1z8ywxsDFWADfTRfTIIy/oUlfIDmlHYmjUP2QRDTzBuWXc9O4CXM+bo9qfiCclmHk1x4ogBjOUpUQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.30.1.tgz", + "integrity": "sha512-1MEdGqogQLccphhX5myCJqeGNYTNcmTyaic9S7CG3JhwuIByJ7J05vGbZxsizQthP1xpVx7kd3o31eOogfEirw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.0.tgz", - "integrity": "sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.30.1.tgz", + "integrity": "sha512-PaMRNBSqCx7K3Wc9QZkFx5+CX27WFpAMxJNiYGAXfmMIKC7jstlr32UhTgK6T07OtqR+wYlWm9IxzennjnvdJg==", "cpu": [ "arm" ], + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.0.tgz", - "integrity": "sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.30.1.tgz", + "integrity": "sha512-B8Rcyj9AV7ZlEFqvB5BubG5iO6ANDsRKlhIxySXcF1axXYUyqwBok+XZPgIYGBgs7LDXfWfifxhw0Ik57T0Yug==", "cpu": [ "arm" ], + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.0.tgz", - "integrity": "sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.30.1.tgz", + "integrity": "sha512-hqVyueGxAj3cBKrAI4aFHLV+h0Lv5VgWZs9CUGqr1z0fZtlADVV1YPOij6AhcK5An33EXaxnDLmJdQikcn5NEw==", "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.0.tgz", - "integrity": "sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.30.1.tgz", + "integrity": "sha512-i4Ab2vnvS1AE1PyOIGp2kXni69gU2DAUVt6FSXeIqUCPIR3ZlheMW3oP2JkukDfu3PsexYRbOiJrY+yVNSk9oA==", "cpu": [ "arm64" ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.30.1.tgz", + "integrity": "sha512-fARcF5g296snX0oLGkVxPmysetwUk2zmHcca+e9ObOovBR++9ZPOhqFUM61UUZ2EYpXVPN1redgqVoBB34nTpQ==", + "cpu": [ + "loong64" + ], + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.0.tgz", - "integrity": "sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.30.1.tgz", + "integrity": "sha512-GLrZraoO3wVT4uFXh67ElpwQY0DIygxdv0BNW9Hkm3X34wu+BkqrDrkcsIapAY+N2ATEbvak0XQ9gxZtCIA5Rw==", "cpu": [ "ppc64" ], + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.0.tgz", - "integrity": "sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.30.1.tgz", + "integrity": "sha512-0WKLaAUUHKBtll0wvOmh6yh3S0wSU9+yas923JIChfxOaaBarmb/lBKPF0w/+jTVozFnOXJeRGZ8NvOxvk/jcw==", "cpu": [ "riscv64" ], + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.0.tgz", - "integrity": "sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.30.1.tgz", + "integrity": "sha512-GWFs97Ruxo5Bt+cvVTQkOJ6TIx0xJDD/bMAOXWJg8TCSTEK8RnFeOeiFTxKniTc4vMIaWvCplMAFBt9miGxgkA==", "cpu": [ "s390x" ], + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz", - "integrity": "sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.30.1.tgz", + "integrity": "sha512-UtgGb7QGgXDIO+tqqJ5oZRGHsDLO8SlpE4MhqpY9Llpzi5rJMvrK6ZGhsRCST2abZdBqIBeXW6WPD5fGK5SDwg==", "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.0.tgz", - "integrity": "sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.30.1.tgz", + "integrity": "sha512-V9U8Ey2UqmQsBT+xTOeMzPzwDzyXmnAoO4edZhL7INkwQcaW1Ckv3WJX3qrrp/VHaDkEWIBWhRwP47r8cdrOow==", "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.0.tgz", - "integrity": "sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.30.1.tgz", + "integrity": "sha512-WabtHWiPaFF47W3PkHnjbmWawnX/aE57K47ZDT1BXTS5GgrBUEpvOzq0FI0V/UYzQJgdb8XlhVNH8/fwV8xDjw==", "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.0.tgz", - "integrity": "sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.30.1.tgz", + "integrity": "sha512-pxHAU+Zv39hLUTdQQHUVHf4P+0C47y/ZloorHpzs2SXMRqeAWmGghzAhfOlzFHHwjvgokdFAhC4V+6kC1lRRfw==", "cpu": [ "ia32" ], + "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.0.tgz", - "integrity": "sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.30.1.tgz", + "integrity": "sha512-D6qjsXGcvhTjv0kI4fU8tUuBDF/Ueee4SVX79VfNDXZa64TfCW1Slkb6Z7O1p7vflqZjcmOVdZlqf8gvJxc6og==", "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@shikijs/core": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.6.4.tgz", - "integrity": "sha512-WTU9rzZae1p2v6LOxMf6LhtmZOkIHYYW160IuahUyJy7YXPPjyWZLR1ag+SgD22ZMxZtz1gfU6Tccc8t0Il/XA==" + "version": "1.26.1", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.26.1.tgz", + "integrity": "sha512-yeo7sG+WZQblKPclUOKRPwkv1PyoHYkJ4gP9DzhFJbTdueKR7wYTI1vfF/bFi1NTgc545yG/DzvVhZgueVOXMA==", + "license": "MIT", + "dependencies": { + "@shikijs/engine-javascript": "1.26.1", + "@shikijs/engine-oniguruma": "1.26.1", + "@shikijs/types": "1.26.1", + "@shikijs/vscode-textmate": "^10.0.1", + "@types/hast": "^3.0.4", + "hast-util-to-html": "^9.0.4" + } + }, + "node_modules/@shikijs/engine-javascript": { + "version": "1.26.1", + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-1.26.1.tgz", + "integrity": "sha512-CRhA0b8CaSLxS0E9A4Bzcb3LKBNpykfo9F85ozlNyArxjo2NkijtiwrJZ6eHa+NT5I9Kox2IXVdjUsP4dilsmw==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "1.26.1", + "@shikijs/vscode-textmate": "^10.0.1", + "oniguruma-to-es": "0.10.0" + } + }, + "node_modules/@shikijs/engine-oniguruma": { + "version": "1.26.1", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-1.26.1.tgz", + "integrity": "sha512-F5XuxN1HljLuvfXv7d+mlTkV7XukC1cawdtOo+7pKgPD83CAB1Sf8uHqP3PK0u7njFH0ZhoXE1r+0JzEgAQ+kg==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "1.26.1", + "@shikijs/vscode-textmate": "^10.0.1" + } + }, + "node_modules/@shikijs/langs": { + "version": "1.26.1", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-1.26.1.tgz", + "integrity": "sha512-oz/TQiIqZejEIZbGtn68hbJijAOTtYH4TMMSWkWYozwqdpKR3EXgILneQy26WItmJjp3xVspHdiUxUCws4gtuw==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "1.26.1" + } + }, + "node_modules/@shikijs/themes": { + "version": "1.26.1", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-1.26.1.tgz", + "integrity": "sha512-JDxVn+z+wgLCiUhBGx2OQrLCkKZQGzNH3nAxFir4PjUcYiyD8Jdms9izyxIogYmSwmoPTatFTdzyrRKbKlSfPA==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "1.26.1" + } }, "node_modules/@shikijs/transformers": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/@shikijs/transformers/-/transformers-1.6.4.tgz", - "integrity": "sha512-NqDt7gUg3ayVBnsipT/KoL1pqsVbsvT/2cB0pb5SG2q72qjAv9Lb5OP99pL//BMmI+sMTo+TeARntklyBu4mZQ==", + "version": "1.26.1", + "resolved": "https://registry.npmjs.org/@shikijs/transformers/-/transformers-1.26.1.tgz", + "integrity": "sha512-IRLJEP7YxkRMsHo367+7qDlpWjsUu6O79pdlUlkcbF1A5TrF1Ln0FBNrgHA/i9p+IKXiiKNATURa6WXh3iq7Uw==", + "license": "MIT", "dependencies": { - "shiki": "1.6.4" + "shiki": "1.26.1" } }, + "node_modules/@shikijs/types": { + "version": "1.26.1", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-1.26.1.tgz", + "integrity": "sha512-d4B00TKKAMaHuFYgRf3L0gwtvqpW4hVdVwKcZYbBfAAQXspgkbWqnFfuFl3MDH6gLbsubOcr+prcnsqah3ny7Q==", + "license": "MIT", + "dependencies": { + "@shikijs/vscode-textmate": "^10.0.1", + "@types/hast": "^3.0.4" + } + }, + "node_modules/@shikijs/vscode-textmate": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.1.tgz", + "integrity": "sha512-fTIQwLF+Qhuws31iw7Ncl1R3HUDtGwIipiJ9iU+UsDUwMhegFcQKQHd51nZjb7CArq0MvON8rbgCGQYWHUKAdg==", + "license": "MIT" + }, "node_modules/@tsparticles/basic": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@tsparticles/basic/-/basic-3.5.0.tgz", - "integrity": "sha512-oty33TxM2aHWrzcwWRic1bQ04KBCdpnvzv8JXEkx5Uyp70vgVegUbtKmwGki3shqKZIt3v2qE4I8NsK6onhLrA==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@tsparticles/basic/-/basic-3.7.1.tgz", + "integrity": "sha512-oJMJ3qzYUROYaOEsaFXkVynxT2OTWBXbQ9MNc1bJi/bVc1VOU44VN7X/KmiZjD+w1U+Qalk6BeVvDRwpFshblw==", "funding": [ { "type": "github", @@ -812,20 +1060,24 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], + "license": "MIT", "dependencies": { - "@tsparticles/engine": "^3.5.0", - "@tsparticles/move-base": "^3.5.0", - "@tsparticles/shape-circle": "^3.5.0", - "@tsparticles/updater-color": "^3.5.0", - "@tsparticles/updater-opacity": "^3.5.0", - "@tsparticles/updater-out-modes": "^3.5.0", - "@tsparticles/updater-size": "^3.5.0" + "@tsparticles/engine": "3.7.1", + "@tsparticles/move-base": "3.7.1", + "@tsparticles/plugin-hex-color": "3.7.1", + "@tsparticles/plugin-hsl-color": "3.7.1", + "@tsparticles/plugin-rgb-color": "3.7.1", + "@tsparticles/shape-circle": "3.7.1", + "@tsparticles/updater-color": "3.7.1", + "@tsparticles/updater-opacity": "3.7.1", + "@tsparticles/updater-out-modes": "3.7.1", + "@tsparticles/updater-size": "3.7.1" } }, "node_modules/@tsparticles/engine": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@tsparticles/engine/-/engine-3.5.0.tgz", - "integrity": "sha512-RCwrJ2SvSYdhXJ24oUCjSUKEZQ9lXwObOWMvfMC9vS6/bk+Qo0N7Xx8AfumqzP/LebB1YJdlCvuoJMauAon0Pg==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@tsparticles/engine/-/engine-3.7.1.tgz", + "integrity": "sha512-GYzBgq/oOE9YJdOL1++MoawWmYg4AvVct6CIrJGx84ZRb3U2owYmLsRGabYl0qX1CWWOvUG569043RJmyp/vQA==", "funding": [ { "type": "github", @@ -840,148 +1092,166 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "hasInstallScript": true + "hasInstallScript": true, + "license": "MIT" }, "node_modules/@tsparticles/interaction-external-attract": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-attract/-/interaction-external-attract-3.5.0.tgz", - "integrity": "sha512-BQYjoHtq7yaETSvPtzKt93OO9MZ1WuDZj7cFPG+iujNekXiwhLRQ89a+QMcsTrCLx70KLJ7SuTzQL5MT1/kb2Q==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-attract/-/interaction-external-attract-3.7.1.tgz", + "integrity": "sha512-cpnMsFJ7ZJNKccpQvskKvSs1ofknByHE6FGqbEb17ij7HqvbECQOCOVKHPFnYipHe14cXor/Cd+nVisRcTASoQ==", + "license": "MIT", "dependencies": { - "@tsparticles/engine": "^3.5.0" + "@tsparticles/engine": "3.7.1" } }, "node_modules/@tsparticles/interaction-external-bounce": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-bounce/-/interaction-external-bounce-3.5.0.tgz", - "integrity": "sha512-H/0//dn4zwKes8zWIjolfeokL0VAlj+EkK7LUhznPhPu+Gt+h6aJqPlwC2MdI5Rvcnps8dT7YoCBWBQ4tJH6zg==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-bounce/-/interaction-external-bounce-3.7.1.tgz", + "integrity": "sha512-npvU9Qt6WDonjezHqi+hWM44ga2Oh5yXdr8eSoJpvuHZrCP7rIdRSz5XseHouO1bMS9DbXk86sx4qwrhB5w58w==", + "license": "MIT", "dependencies": { - "@tsparticles/engine": "^3.5.0" + "@tsparticles/engine": "3.7.1" } }, "node_modules/@tsparticles/interaction-external-bubble": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-bubble/-/interaction-external-bubble-3.5.0.tgz", - "integrity": "sha512-xTS4PQDMC5j9qOAFTC1M9DfBTJl8P8M41ySGtZHnCvVqG0oLlLSw15msniamjXyaoA4tZvBPM6G+GmFdgE9w1A==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-bubble/-/interaction-external-bubble-3.7.1.tgz", + "integrity": "sha512-WdbYL46lMfuf2g5kfVB1hhhxRBtEXDvnwz8PJwLKurSThL/27bqsqysyXsMzXtLByXUneGhtJTj4D5I5RYdgjA==", + "license": "MIT", "dependencies": { - "@tsparticles/engine": "^3.5.0" + "@tsparticles/engine": "3.7.1" } }, "node_modules/@tsparticles/interaction-external-connect": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-connect/-/interaction-external-connect-3.5.0.tgz", - "integrity": "sha512-VSpyZ0P8Hu4nq6C917X3tnwEROfGjrm0ivWJmbBv/lFJ9euZ2VeezeITNZNtNvt/hS5vLI8npDetB/wtd994HQ==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-connect/-/interaction-external-connect-3.7.1.tgz", + "integrity": "sha512-hqx0ANIbjLIz/nxmk0LvqANBiNLLmVybbCA7N+xDHtEORvpKjNlKEvMz6Razocl6vRjoHZ/olSwcxIG84dh/cg==", + "license": "MIT", "dependencies": { - "@tsparticles/engine": "^3.5.0" + "@tsparticles/engine": "3.7.1" } }, "node_modules/@tsparticles/interaction-external-grab": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-grab/-/interaction-external-grab-3.5.0.tgz", - "integrity": "sha512-WOTWSGVerlfJZ9zwq8Eyutq1h0LAr1hI/Fs8j7s5qabZjxPzUBV8rhgghZ/nGrHEiB6j8SW4XMHkN6XR0VM9Ww==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-grab/-/interaction-external-grab-3.7.1.tgz", + "integrity": "sha512-JMYpFW+7YvkpK5MYlt4Ec3Gwb5ZxS7RLVL8IRUSd5yJOw25husPTYg+FQywxrt5WhKe+tPsCAYo+uGIbTTHi9w==", + "license": "MIT", "dependencies": { - "@tsparticles/engine": "^3.5.0" + "@tsparticles/engine": "3.7.1" } }, "node_modules/@tsparticles/interaction-external-pause": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-pause/-/interaction-external-pause-3.5.0.tgz", - "integrity": "sha512-Hnj1mBH5X3d3zwTP6R+tYn45uTq5XGLDINhEzl30EAjXK30LQe8/RgE91O4CsMSrlTmouG0OuHYGC3nyrn/dcw==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-pause/-/interaction-external-pause-3.7.1.tgz", + "integrity": "sha512-Kkp+7sCe24hawH0XvS1V6UCCuHfMvpLK7oseqSam9Gt4SyGrFvaqIXxkjXhRhn9MysJyKFPBV4/dtBM1HR9p6A==", + "license": "MIT", "dependencies": { - "@tsparticles/engine": "^3.5.0" + "@tsparticles/engine": "3.7.1" } }, "node_modules/@tsparticles/interaction-external-push": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-push/-/interaction-external-push-3.5.0.tgz", - "integrity": "sha512-8UNt5lYRhydDJCK7AznR3s1nJj3OCeLcDknARoq7hATdI+G151QAubD9NUUURCZ1GdXpftT5Bh0Bl1YtiZwOhg==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-push/-/interaction-external-push-3.7.1.tgz", + "integrity": "sha512-4VoaR5jvXgQdB7irtq4uSZYr5c+D6TBTVEnLVpBfJhUs6jhw6mgN5g7yp5izIYkK0AlcO431MHn8dvJacvRLDw==", + "license": "MIT", "dependencies": { - "@tsparticles/engine": "^3.5.0" + "@tsparticles/engine": "3.7.1" } }, "node_modules/@tsparticles/interaction-external-remove": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-remove/-/interaction-external-remove-3.5.0.tgz", - "integrity": "sha512-+qiVRnR8xywg++gn8fagwpuQVh0WWKxIMkY6l6lMw9UoXz8L6MUVgvWaT632EVmkrTgM43pZ1m0W3m9aBY9rZw==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-remove/-/interaction-external-remove-3.7.1.tgz", + "integrity": "sha512-FRBW7U7zD5MkO6/b7e8iSMk/UTtRLY2XiIVFZNsKri3Re3yPpvZzzd5tl2YlYGQlg1Xc+K8SJYMQQA3PtgQ/Tg==", + "license": "MIT", "dependencies": { - "@tsparticles/engine": "^3.5.0" + "@tsparticles/engine": "3.7.1" } }, "node_modules/@tsparticles/interaction-external-repulse": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-repulse/-/interaction-external-repulse-3.5.0.tgz", - "integrity": "sha512-lTF7iLqCCQ3AbQSDVTpE3TihoVvI322/5QTqQmwylrrmjbDxGu4Hym4BHK5GqDHOdodOnwU2DWjRF5cRx3aPPg==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-repulse/-/interaction-external-repulse-3.7.1.tgz", + "integrity": "sha512-mwM06dVmg2FEvHMQsPOfRBQWACbjf3qnelODkqI9DSVxQ0B8DESP4BYNXyraFGYv00YiPzRv5Xy/uejHdbsQUA==", + "license": "MIT", "dependencies": { - "@tsparticles/engine": "^3.5.0" + "@tsparticles/engine": "3.7.1" } }, "node_modules/@tsparticles/interaction-external-slow": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-slow/-/interaction-external-slow-3.5.0.tgz", - "integrity": "sha512-KYp1GWbXdnLunFvHJt2YMZMMITebAt0XkzisKoSe+rfvoCbcMGXI2XvDYb0UkGvd8sKTSnHcn7cGH8dhVXXYaQ==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-slow/-/interaction-external-slow-3.7.1.tgz", + "integrity": "sha512-CfCAs3kUQC3pLOj0dbzn5AolQyBHgjxORLdfnYBhepvFV1BXB+4ytChRfXBzjykBPI6U+rCnw5Fk/vVjAroSFA==", + "license": "MIT", "dependencies": { - "@tsparticles/engine": "^3.5.0" + "@tsparticles/engine": "3.7.1" } }, "node_modules/@tsparticles/interaction-external-trail": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-trail/-/interaction-external-trail-3.5.0.tgz", - "integrity": "sha512-nnWm7zzclqA5dCPlLlKDXUXJKRNs7Y3vX47jCFpV1djDpZQZ+5JT0G81qDtYyn/mSl/nNpQ0DlTMR3rRnE7mHg==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-trail/-/interaction-external-trail-3.7.1.tgz", + "integrity": "sha512-M7lNQUWP15m8YIDP/JZcZAXaVJLqdwpBs0Uv9F6dU6jsnNXwwHFVFZ+1icrnlbgl9k/Ehhodbdo5weE7GHhQhQ==", + "license": "MIT", "dependencies": { - "@tsparticles/engine": "^3.5.0" + "@tsparticles/engine": "3.7.1" } }, "node_modules/@tsparticles/interaction-particles-attract": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@tsparticles/interaction-particles-attract/-/interaction-particles-attract-3.5.0.tgz", - "integrity": "sha512-ICnT9+9ZxINh5ZijyxjFXOOMC/jNQgOXPe+5MxgK/WYXE8mRbRzsOdaxiS3zK5PSFlqtztn189anDbfqcHDutQ==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@tsparticles/interaction-particles-attract/-/interaction-particles-attract-3.7.1.tgz", + "integrity": "sha512-UABbBORKaiItAT8vR0t4ye2H3VE6/Ah4zcylBlnq0Jd5yDkyP4rnkwhicaY6y4Zlfwyx+0PWdAC4f/ziFAyObg==", + "license": "MIT", "dependencies": { - "@tsparticles/engine": "^3.5.0" + "@tsparticles/engine": "3.7.1" } }, "node_modules/@tsparticles/interaction-particles-collisions": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@tsparticles/interaction-particles-collisions/-/interaction-particles-collisions-3.5.0.tgz", - "integrity": "sha512-KrfyXy4l6nW2z0An2FE4z5R4rEiIONYPcDpkBhWqQK+pyLkHhtGYmqmP7Pb22IC9noFzjOCaR5CNVjWP7B+1vA==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@tsparticles/interaction-particles-collisions/-/interaction-particles-collisions-3.7.1.tgz", + "integrity": "sha512-0GY9++Gn2KXViyeifXWkH7a2UO5+uRwyS1rDeTN8eleyiq2j9zQf4xztZEIft8T0hTetq2rkWxQ92j2kev6NVA==", + "license": "MIT", "dependencies": { - "@tsparticles/engine": "^3.5.0" + "@tsparticles/engine": "3.7.1" } }, "node_modules/@tsparticles/interaction-particles-links": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@tsparticles/interaction-particles-links/-/interaction-particles-links-3.5.0.tgz", - "integrity": "sha512-ZdIixcGcRJMxCq4zxeRAzzbbuN5vVoy3pDDLaO3mnWnfJWywkYZToV0XvOUaHUT2AkUuKa9ZuQKx0LO3z1AO+w==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@tsparticles/interaction-particles-links/-/interaction-particles-links-3.7.1.tgz", + "integrity": "sha512-BxCXAAOBNmEvlyOQzwprryW8YdtMIop2v4kgSCff5MCtDwYWoQIfzaQlWbBAkD9ey6BoF8iMjhBUaY1MnDecTA==", + "license": "MIT", "dependencies": { - "@tsparticles/engine": "^3.5.0" + "@tsparticles/engine": "3.7.1" } }, "node_modules/@tsparticles/move-base": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@tsparticles/move-base/-/move-base-3.5.0.tgz", - "integrity": "sha512-9oDk7zTxyhUCstj3lHTNTiWAgqIBzWa2o1tVQFK63Qwq+/WxzJCSwZOocC9PAHGM1IP6nA4zYJSfjbMBTrUocA==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@tsparticles/move-base/-/move-base-3.7.1.tgz", + "integrity": "sha512-LPtMHwJHhzwfRIcSAk814fY9NcRiICwaEbapaJSYyP1DwscSXqOWoyAEWwzV9hMgAcPdsED6nGeg8RCXGm58lw==", + "license": "MIT", "dependencies": { - "@tsparticles/engine": "^3.5.0" + "@tsparticles/engine": "3.7.1" } }, "node_modules/@tsparticles/move-parallax": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@tsparticles/move-parallax/-/move-parallax-3.5.0.tgz", - "integrity": "sha512-1NC2OGsbdLc5T4uiRqq7i24b9FIhfaLnx4wVtOQjX48jWfy/ZKOdIEYLFKOPHnaMI0MjinJTNXLi9i6zVNCobg==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@tsparticles/move-parallax/-/move-parallax-3.7.1.tgz", + "integrity": "sha512-B40azo6EJyMdI+kmIxpqWDaObPwODTYLDCikzkZ73n5tS6OhFUlkz81Scfo+g1iGTdryKFygUKhVGcG1EFuA5g==", + "license": "MIT", "dependencies": { - "@tsparticles/engine": "^3.5.0" + "@tsparticles/engine": "3.7.1" } }, "node_modules/@tsparticles/plugin-absorbers": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@tsparticles/plugin-absorbers/-/plugin-absorbers-3.5.0.tgz", - "integrity": "sha512-ybSilBJRshMldHgKlK+fwap9DclPh6QJRT4SC1lSasTgYZd4XeS62Ww8v1BQB/bxeCZccZwB1IFggt9uB61Png==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@tsparticles/plugin-absorbers/-/plugin-absorbers-3.7.1.tgz", + "integrity": "sha512-3s+fILLV1tdKOq/bXwfoxFVbzkWwXpdWTC2C0QIP6BFwDSQqV5txluiLEf7SCf8C5etQ6dstEnOgVbdzK7+eWA==", + "license": "MIT", "dependencies": { - "@tsparticles/engine": "^3.5.0" + "@tsparticles/engine": "3.7.1" } }, "node_modules/@tsparticles/plugin-easing-quad": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@tsparticles/plugin-easing-quad/-/plugin-easing-quad-3.5.0.tgz", - "integrity": "sha512-Pd44hTiVlaaeQZwRlP+ih8jKmWuIQdkpPUJS0Qwzeck2nfK01IAflDJoxXxGF53vA8QOrz/K6VdVQJShD8yCsg==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@tsparticles/plugin-easing-quad/-/plugin-easing-quad-3.7.1.tgz", + "integrity": "sha512-nSwKCRe6C/noCi3dyZlm1GiQGask0aXdWDuS36b82iwzwQ01cBTXeXR25mLr4fsfMLFfYAZXyBxEMMpw3rkSiw==", "funding": [ { "type": "github", @@ -996,22 +1266,24 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], + "license": "MIT", "dependencies": { - "@tsparticles/engine": "^3.5.0" + "@tsparticles/engine": "3.7.1" } }, "node_modules/@tsparticles/plugin-emitters": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@tsparticles/plugin-emitters/-/plugin-emitters-3.5.0.tgz", - "integrity": "sha512-8Vg6wAPS75ibkukqtTM7yoC+8NnfXBl8xVUUbTaoeQCE0WDWwztboMf5L4pUgWe9WA52ZgFkWtT/mFH5wk5T9g==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@tsparticles/plugin-emitters/-/plugin-emitters-3.7.1.tgz", + "integrity": "sha512-WV5Uwxp/Ckqv5kZynTj6mj13jYbQCArNLFv8ks+zjdlteoyT5EhQl4rg+TalaySCb1zCd6Fu2Scp35l3JJgbnw==", + "license": "MIT", "dependencies": { - "@tsparticles/engine": "^3.5.0" + "@tsparticles/engine": "3.7.1" } }, "node_modules/@tsparticles/plugin-emitters-shape-circle": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@tsparticles/plugin-emitters-shape-circle/-/plugin-emitters-shape-circle-3.5.0.tgz", - "integrity": "sha512-lBHg+O23zISH5aBPpGuQHD6u4ZHk4/JkDcJ+y10Hfpl9ljnilkFvq3LAGYlJmAJi33W0MQep2JpAqFm4i0JNOw==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@tsparticles/plugin-emitters-shape-circle/-/plugin-emitters-shape-circle-3.7.1.tgz", + "integrity": "sha512-eBwktnGROkiyCvtrSwdPpoRbIjQgV/Odq//0dw8D+qUdnox6dNzzhJjz8L2LAA2kQZBqtdBqV2kcx3w5ZdqoEQ==", "funding": [ { "type": "github", @@ -1026,15 +1298,16 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], + "license": "MIT", "dependencies": { - "@tsparticles/engine": "^3.5.0", - "@tsparticles/plugin-emitters": "^3.5.0" + "@tsparticles/engine": "3.7.1", + "@tsparticles/plugin-emitters": "3.7.1" } }, "node_modules/@tsparticles/plugin-emitters-shape-square": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@tsparticles/plugin-emitters-shape-square/-/plugin-emitters-shape-square-3.5.0.tgz", - "integrity": "sha512-hxKQ+OlnpX81gwefG6KQrdtcePKctZ35A6Ej1iQ1rrF/SavtyqIctjG9dpemQ3Nh4peZFhxMS59fbGwhzFJO5A==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@tsparticles/plugin-emitters-shape-square/-/plugin-emitters-shape-square-3.7.1.tgz", + "integrity": "sha512-nvGBsRLrkiz6Q38TJRl8Y/eu9i1ChQ9oorQydLBok+iZ6MefuOj39iYsAOkD1w9yRVrFWKHG6CR1mmJUniz/HA==", "funding": [ { "type": "github", @@ -1049,79 +1322,157 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], + "license": "MIT", "dependencies": { - "@tsparticles/engine": "^3.5.0", - "@tsparticles/plugin-emitters": "^3.5.0" + "@tsparticles/engine": "3.7.1", + "@tsparticles/plugin-emitters": "3.7.1" + } + }, + "node_modules/@tsparticles/plugin-hex-color": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@tsparticles/plugin-hex-color/-/plugin-hex-color-3.7.1.tgz", + "integrity": "sha512-7xu3MV8EdNNejjYyEmrq5fCDdYAcqz/9VatLpnwtwR5Q5t2qI0tD4CrcGaFfC/rTAVJacfiJe02UV/hlj03KKA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "license": "MIT", + "dependencies": { + "@tsparticles/engine": "3.7.1" + } + }, + "node_modules/@tsparticles/plugin-hsl-color": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@tsparticles/plugin-hsl-color/-/plugin-hsl-color-3.7.1.tgz", + "integrity": "sha512-zzAI1CuoCMBJhgeYZ5Rq42nGbPg35ZzIs11eQegjsWG5Msm5QKSj60qPzERnoUcCc4HCKtIWP7rYMz6h3xpoEg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "license": "MIT", + "dependencies": { + "@tsparticles/engine": "3.7.1" + } + }, + "node_modules/@tsparticles/plugin-rgb-color": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@tsparticles/plugin-rgb-color/-/plugin-rgb-color-3.7.1.tgz", + "integrity": "sha512-taEraTpCYR6jpjflqBL95tN0zFU8JrAChXTt8mxVn7gddxoNMHI/LGymEPRCweLukwV6GQyAGOkeGEdWDPtYTA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "license": "MIT", + "dependencies": { + "@tsparticles/engine": "3.7.1" } }, "node_modules/@tsparticles/shape-circle": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@tsparticles/shape-circle/-/shape-circle-3.5.0.tgz", - "integrity": "sha512-59TmXkeeI6Jzv5vt/D3TkclglabaoEXQi2kbDjSCBK68SXRHzlQu29mSAL41Y5S0Ft5ZJKkAQHX1IqEnm8Hyjg==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@tsparticles/shape-circle/-/shape-circle-3.7.1.tgz", + "integrity": "sha512-kmOWaUuFwuTtcCFYjuyJbdA5qDqWdGsharLalYnIczkLu2c1I8jJo/OmGePKhWn62ocu7mqKMomfElkIcw2AsA==", + "license": "MIT", "dependencies": { - "@tsparticles/engine": "^3.5.0" + "@tsparticles/engine": "3.7.1" } }, "node_modules/@tsparticles/shape-emoji": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@tsparticles/shape-emoji/-/shape-emoji-3.5.0.tgz", - "integrity": "sha512-cxWHxQxnG5vLDltkoxdo7KS87uKPwQgf4SDWy/WCxW4Psm1TEeeSGYMJPVed+wWPspOKmLb7u8OaEexgE2pHHQ==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@tsparticles/shape-emoji/-/shape-emoji-3.7.1.tgz", + "integrity": "sha512-mX18c/xhYVljS/r5Xbowzclw+1YwhtWoQFOOfkmjjZppA+RjgcwSKLvH6E20PaH1yVTjBOfSF+3POKpwsULzTg==", + "license": "MIT", "dependencies": { - "@tsparticles/engine": "^3.5.0" + "@tsparticles/engine": "3.7.1" } }, "node_modules/@tsparticles/shape-image": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@tsparticles/shape-image/-/shape-image-3.5.0.tgz", - "integrity": "sha512-lWYg7DTv74dSOnXy+4dr7t1/OSuUmxDpIo12Lbxgx/QBN7A5I/HoqbKcs13TSA0RS1hcuMgtti07BcDTEYW3Dw==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@tsparticles/shape-image/-/shape-image-3.7.1.tgz", + "integrity": "sha512-eDzfkQhqLY6fb9QH2Vo9TGfdJBFFpYnojhxQxc7IdzIwOFMD3JK4B52RVl9oowR+rNE8dNp6P2L+eMAF4yld0g==", + "license": "MIT", "dependencies": { - "@tsparticles/engine": "^3.5.0" + "@tsparticles/engine": "3.7.1" } }, "node_modules/@tsparticles/shape-line": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@tsparticles/shape-line/-/shape-line-3.5.0.tgz", - "integrity": "sha512-Qc4jwFEi/VnwmGwQBO/kCJEfNYdKHpeXfrdcqmm9c1B4iYHHDoaXJp6asMTggEfeAWu7fyPaO/7MURiPEqg7Hg==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@tsparticles/shape-line/-/shape-line-3.7.1.tgz", + "integrity": "sha512-lMPYApUpg7avxmYPfHHr4dQepZSNn/g0Q1/g2+lnTi8ZtUBiCZ2WMVy9R3GOzyozbnzigLQ6AJRnOpsUZV7H4g==", + "license": "MIT", "dependencies": { - "@tsparticles/engine": "^3.5.0" + "@tsparticles/engine": "3.7.1" } }, "node_modules/@tsparticles/shape-polygon": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@tsparticles/shape-polygon/-/shape-polygon-3.5.0.tgz", - "integrity": "sha512-sqYL+YXpnq3nSWcOEGZaJ4Z7Cb7x8M0iORSLpPdNEIvwDKdPczYyQM95D8ep19Pv1CV5L0uRthV36wg7UpnJ9Q==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@tsparticles/shape-polygon/-/shape-polygon-3.7.1.tgz", + "integrity": "sha512-5FrRfpYC3qnvV2nXBLE4Q0v+SMNWJO8xgzh6MBFwfptvqH4EOrqc/58eS5x0jlf+evwf9LjPgeGkOTcwaHHcYQ==", + "license": "MIT", "dependencies": { - "@tsparticles/engine": "^3.5.0" + "@tsparticles/engine": "3.7.1" } }, "node_modules/@tsparticles/shape-square": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@tsparticles/shape-square/-/shape-square-3.5.0.tgz", - "integrity": "sha512-rPHpA4Pzm1W5DIIow+lQS+VS7D2thSBQQbV9eHxb933Wh0/QC3me3w4vovuq7hdtVANhsUVO04n44Gc/2TgHkw==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@tsparticles/shape-square/-/shape-square-3.7.1.tgz", + "integrity": "sha512-7VCqbRwinjBZ+Ryme27rOtl+jKrET8qDthqZLrAoj3WONBqyt+R9q6SXAJ9WodqEX68IBvcluqbFY5qDZm8iAQ==", + "license": "MIT", "dependencies": { - "@tsparticles/engine": "^3.5.0" + "@tsparticles/engine": "3.7.1" } }, "node_modules/@tsparticles/shape-star": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@tsparticles/shape-star/-/shape-star-3.5.0.tgz", - "integrity": "sha512-EDEJc4MYv3UbOeA3wrZjuJVtZ08PdCzzBij3T/7Tp3HUCf/p9XnfHBd/CPR5Mo6X0xpGfrein8UQN9CjGLHwUA==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@tsparticles/shape-star/-/shape-star-3.7.1.tgz", + "integrity": "sha512-3G4oipioyWKLEQYT11Sx3k6AObu3dbv/A5LRqGGTQm5IR6UACa+INwykZYI0a+MdJJMb83E0e4Fn3hlZbi0/8w==", + "license": "MIT", "dependencies": { - "@tsparticles/engine": "^3.5.0" + "@tsparticles/engine": "3.7.1" } }, "node_modules/@tsparticles/shape-text": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@tsparticles/shape-text/-/shape-text-3.5.0.tgz", - "integrity": "sha512-HRWC5X702r6Cy0QWnlWbG8BjVZ+TElDOYrwJj9hlpkjb/IVY3YExv9mU2E/nJJRPpejlkibhU6GJo7VoBNjm8Q==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@tsparticles/shape-text/-/shape-text-3.7.1.tgz", + "integrity": "sha512-aU1V9O8uQQBlL0jGFh9Q0b5vQ1Ji6Oo5ptyyj5yJ5uP/ZU00L0Vhk4DNyLXpaU0+H6OBoPpCqnvEsZBB9/HmCQ==", + "license": "MIT", "dependencies": { - "@tsparticles/engine": "^3.5.0" + "@tsparticles/engine": "3.7.1" } }, "node_modules/@tsparticles/slim": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@tsparticles/slim/-/slim-3.5.0.tgz", - "integrity": "sha512-CKx3VtzsY0fs/dQc41PYtL3edm1z2sBROTgvz3adwqMyTWkQGnjLQhsM777Ebb6Yjf5Jxu4TzWOBc2HO7Cstkg==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@tsparticles/slim/-/slim-3.7.1.tgz", + "integrity": "sha512-OtJEhud2KleX7OxiG2r/VYriHNIwTpFm3sPFy4EOJzAD0EW7KZoKXGpGn5gwGI1NWeB0jso92yNTrTC2ZTW0qw==", "funding": [ { "type": "github", @@ -1136,313 +1487,375 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "dependencies": { - "@tsparticles/basic": "^3.5.0", - "@tsparticles/engine": "^3.5.0", - "@tsparticles/interaction-external-attract": "^3.5.0", - "@tsparticles/interaction-external-bounce": "^3.5.0", - "@tsparticles/interaction-external-bubble": "^3.5.0", - "@tsparticles/interaction-external-connect": "^3.5.0", - "@tsparticles/interaction-external-grab": "^3.5.0", - "@tsparticles/interaction-external-pause": "^3.5.0", - "@tsparticles/interaction-external-push": "^3.5.0", - "@tsparticles/interaction-external-remove": "^3.5.0", - "@tsparticles/interaction-external-repulse": "^3.5.0", - "@tsparticles/interaction-external-slow": "^3.5.0", - "@tsparticles/interaction-particles-attract": "^3.5.0", - "@tsparticles/interaction-particles-collisions": "^3.5.0", - "@tsparticles/interaction-particles-links": "^3.5.0", - "@tsparticles/move-parallax": "^3.5.0", - "@tsparticles/plugin-easing-quad": "^3.5.0", - "@tsparticles/shape-emoji": "^3.5.0", - "@tsparticles/shape-image": "^3.5.0", - "@tsparticles/shape-line": "^3.5.0", - "@tsparticles/shape-polygon": "^3.5.0", - "@tsparticles/shape-square": "^3.5.0", - "@tsparticles/shape-star": "^3.5.0", - "@tsparticles/updater-life": "^3.5.0", - "@tsparticles/updater-rotate": "^3.5.0", - "@tsparticles/updater-stroke-color": "^3.5.0" + "license": "MIT", + "dependencies": { + "@tsparticles/basic": "3.7.1", + "@tsparticles/engine": "3.7.1", + "@tsparticles/interaction-external-attract": "3.7.1", + "@tsparticles/interaction-external-bounce": "3.7.1", + "@tsparticles/interaction-external-bubble": "3.7.1", + "@tsparticles/interaction-external-connect": "3.7.1", + "@tsparticles/interaction-external-grab": "3.7.1", + "@tsparticles/interaction-external-pause": "3.7.1", + "@tsparticles/interaction-external-push": "3.7.1", + "@tsparticles/interaction-external-remove": "3.7.1", + "@tsparticles/interaction-external-repulse": "3.7.1", + "@tsparticles/interaction-external-slow": "3.7.1", + "@tsparticles/interaction-particles-attract": "3.7.1", + "@tsparticles/interaction-particles-collisions": "3.7.1", + "@tsparticles/interaction-particles-links": "3.7.1", + "@tsparticles/move-parallax": "3.7.1", + "@tsparticles/plugin-easing-quad": "3.7.1", + "@tsparticles/shape-emoji": "3.7.1", + "@tsparticles/shape-image": "3.7.1", + "@tsparticles/shape-line": "3.7.1", + "@tsparticles/shape-polygon": "3.7.1", + "@tsparticles/shape-square": "3.7.1", + "@tsparticles/shape-star": "3.7.1", + "@tsparticles/updater-life": "3.7.1", + "@tsparticles/updater-rotate": "3.7.1", + "@tsparticles/updater-stroke-color": "3.7.1" } }, "node_modules/@tsparticles/updater-color": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@tsparticles/updater-color/-/updater-color-3.5.0.tgz", - "integrity": "sha512-TGGgiLixIg37sst2Fj9IV4XbdMwkT6PYanM7qEqyfmv4hJ/RHMQlCznEe6b7OhChQVBg5ov5EMl/BT4/fIWEYw==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@tsparticles/updater-color/-/updater-color-3.7.1.tgz", + "integrity": "sha512-QimV3yn17dcdJx7PpTwLtw9BhkQ0q8qFF035OdcZpnynBPAO/hg0zvSMpMGoeuDVFH02wWBy4h2/BYCv6wh6Sw==", + "license": "MIT", "dependencies": { - "@tsparticles/engine": "^3.5.0" + "@tsparticles/engine": "3.7.1" } }, "node_modules/@tsparticles/updater-destroy": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@tsparticles/updater-destroy/-/updater-destroy-3.5.0.tgz", - "integrity": "sha512-+xUnL9m2rkszo+TIhmjqCXqiV9Ujq4A1aBpEvl8bwjhYCTJgiWcudEWQzkGa1gf24EIG8vdvAzy2dI9rt3PdYw==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@tsparticles/updater-destroy/-/updater-destroy-3.7.1.tgz", + "integrity": "sha512-krXNoMDKyeyE/ZjQh3LVjrLYivFefQOQ9i+B7RpMe7x4h+iRgpB6npTCqidGQ82+hZ8G6xfQ9ToduebWwK4JGg==", + "license": "MIT", "dependencies": { - "@tsparticles/engine": "^3.5.0" + "@tsparticles/engine": "3.7.1" } }, "node_modules/@tsparticles/updater-life": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@tsparticles/updater-life/-/updater-life-3.5.0.tgz", - "integrity": "sha512-jlMEq16dwN+rZmW/UmLdqaCe4W0NFrVdmXkZV8QWYgu06a+Ucslz337nHYaP89/9rZWpNua/uq1JDjDzaVD5Jg==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@tsparticles/updater-life/-/updater-life-3.7.1.tgz", + "integrity": "sha512-NY5gUrgO5AsARNC0usP9PKahXf7JCxbP/H1vzTfA0SJw4veANfWTldOvhIlcm2CHVP5P1b827p0hWsBHECwz7A==", + "license": "MIT", "dependencies": { - "@tsparticles/engine": "^3.5.0" + "@tsparticles/engine": "3.7.1" } }, "node_modules/@tsparticles/updater-opacity": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@tsparticles/updater-opacity/-/updater-opacity-3.5.0.tgz", - "integrity": "sha512-T2YfqdIFV/f5VOg1JQsXu6/owdi9g9K2wrJlBfgteo+IboVp6Lcuo4PGAfilWVkWrTdp1Nz4mz39NrLHfOce2g==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@tsparticles/updater-opacity/-/updater-opacity-3.7.1.tgz", + "integrity": "sha512-YcyviCooTv7SAKw7sxd84CfJqZ7dYPSdYZzCpedV6TKIObRiwLqXlyLXQGJ3YltghKQSCSolmVy8woWBCDm1qA==", + "license": "MIT", "dependencies": { - "@tsparticles/engine": "^3.5.0" + "@tsparticles/engine": "3.7.1" } }, "node_modules/@tsparticles/updater-out-modes": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@tsparticles/updater-out-modes/-/updater-out-modes-3.5.0.tgz", - "integrity": "sha512-y6NZe2OSk5SrYdaLwUIQnHICsNEDIdPPJHQ2nAWSvAuPJphlSKjUknc7OaGiFwle6l0OkhWoZZe1rV1ktbw/lA==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@tsparticles/updater-out-modes/-/updater-out-modes-3.7.1.tgz", + "integrity": "sha512-Cb5sWquRtUYLSiFpmBjjYKRdpNV52diCo9+qMtK1oVlldDBhUwqO+1TQjdlaA2yl5DURlY9ZfOHXvY+IT7CHCw==", + "license": "MIT", "dependencies": { - "@tsparticles/engine": "^3.5.0" + "@tsparticles/engine": "3.7.1" } }, "node_modules/@tsparticles/updater-roll": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@tsparticles/updater-roll/-/updater-roll-3.5.0.tgz", - "integrity": "sha512-K3NfBGqVIu2zyJv72oNPlYLMDQKmUXTaCvnxUjzBEJJCYRdx7KhZPQVjAsfVYLHd7m7D7/+wKlkXmdYYAd67bg==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@tsparticles/updater-roll/-/updater-roll-3.7.1.tgz", + "integrity": "sha512-gHLRqpTGVGPJBEAIPUiYVembIn5bcaTXXxsUJEM/IN+GIOvj2uZZGZ4r2aFTA6WugqEbJsJdblDSvMfouyz7Ug==", + "license": "MIT", "dependencies": { - "@tsparticles/engine": "^3.5.0" + "@tsparticles/engine": "3.7.1" } }, "node_modules/@tsparticles/updater-rotate": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@tsparticles/updater-rotate/-/updater-rotate-3.5.0.tgz", - "integrity": "sha512-j4qPHQd1eUmDoGnIJOsVswHLqtTof1je+b2GTOLB3WIoKmlyUpzQYjVc7PNfLMuCEUubwpZCfcd/vC80VZeWkg==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@tsparticles/updater-rotate/-/updater-rotate-3.7.1.tgz", + "integrity": "sha512-toVHwl+h6SvtA8dyxSA2kMH2QdDA71vehuAa+HoRqf1y06h5kxyYiMKZFHCqDJ6lFfRPs47MjrC9dD2bDz14MQ==", + "license": "MIT", "dependencies": { - "@tsparticles/engine": "^3.5.0" + "@tsparticles/engine": "3.7.1" } }, "node_modules/@tsparticles/updater-size": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@tsparticles/updater-size/-/updater-size-3.5.0.tgz", - "integrity": "sha512-TnWlOChBsVZffT2uO0S4ALGSzxT6UAMIVlhGMGFgSeIlktKMqM+dxDGAPrYa1n8IS2dkVGisiXzsV0Ss6Ceu1A==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@tsparticles/updater-size/-/updater-size-3.7.1.tgz", + "integrity": "sha512-+Y0H0PnDJVIsJ+zHTyubYu1jtRFmVnY1dAv3VCjScIDw6bcpL/ol+HrtHTGIX0WbMyUfjCyALfAoaXi/Wm8VcQ==", + "license": "MIT", "dependencies": { - "@tsparticles/engine": "^3.5.0" + "@tsparticles/engine": "3.7.1" } }, "node_modules/@tsparticles/updater-stroke-color": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@tsparticles/updater-stroke-color/-/updater-stroke-color-3.5.0.tgz", - "integrity": "sha512-29X1zER+W9IBDv0nTD/jRXnu5rEU7uv7+W1N0B6leBipjAY24sg7Kub2SvXAaBKz6kHHWuCeccBOwIiiTpDqMA==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@tsparticles/updater-stroke-color/-/updater-stroke-color-3.7.1.tgz", + "integrity": "sha512-VHhQkCNuxjx/Hy7A+g0Yijb24T0+wQ3jNsF/yfrR9dEdZWSBiimZLvV1bilPdAeEtieAJTAZo2VNhcD1snF0iQ==", + "license": "MIT", "dependencies": { - "@tsparticles/engine": "^3.5.0" + "@tsparticles/engine": "3.7.1" } }, "node_modules/@tsparticles/updater-tilt": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@tsparticles/updater-tilt/-/updater-tilt-3.5.0.tgz", - "integrity": "sha512-ovK6jH4fAmTav1kCC5Z1FW/pPjKxtK+X+w9BZJEddpS5cyBEdWD4FgvNgLnmZYpK0xad/nb+xxqeDkpSu/O51Q==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@tsparticles/updater-tilt/-/updater-tilt-3.7.1.tgz", + "integrity": "sha512-pSOXoXPre1VPKC5nC5GW0L9jw63w1dVdsDdggEau7MP9xO7trko9L/KyayBX12Y4Ief1ca12Incxxr67hw7GGA==", + "license": "MIT", "dependencies": { - "@tsparticles/engine": "^3.5.0" + "@tsparticles/engine": "3.7.1" } }, "node_modules/@tsparticles/updater-twinkle": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@tsparticles/updater-twinkle/-/updater-twinkle-3.5.0.tgz", - "integrity": "sha512-6PbDS1YEP2eHX2fK0jKjHO7zPF5jDxaz4jc6qgjBZ2XCdlaxEd3UR27hDn6NHt39bAAv08ZypvnuRayebQTn1w==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@tsparticles/updater-twinkle/-/updater-twinkle-3.7.1.tgz", + "integrity": "sha512-maRTqPbeZcxBK6s1ry+ih71qSVaitfP1KTrAKR38v26GMwyO6z+zYV2bu9WTRt21FRFAoxlMLWxNu21GtQoXDA==", + "license": "MIT", "dependencies": { - "@tsparticles/engine": "^3.5.0" + "@tsparticles/engine": "3.7.1" } }, "node_modules/@tsparticles/updater-wobble": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@tsparticles/updater-wobble/-/updater-wobble-3.5.0.tgz", - "integrity": "sha512-fpN0XPvAf3dJ5UU++C+ETVDLurpnkzje02w865Ar4ubPBgGpMhowr6AbtFUe37Zl8rFUTYntBOSEoxqNYJAUgQ==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@tsparticles/updater-wobble/-/updater-wobble-3.7.1.tgz", + "integrity": "sha512-YIlNg4L0w4egQJhPLpgcvcfv9+X621+cQsrdN9sSmajxhhwtEQvQUvFUzGTcvpjVi+GcBNp0t4sCKEzoP8iaYw==", + "license": "MIT", "dependencies": { - "@tsparticles/engine": "^3.5.0" + "@tsparticles/engine": "3.7.1" } }, "node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "license": "MIT" + }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } }, "node_modules/@types/linkify-it": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz", - "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==" + "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==", + "license": "MIT" }, "node_modules/@types/markdown-it": { - "version": "14.1.1", - "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.1.tgz", - "integrity": "sha512-4NpsnpYl2Gt1ljyBGrKMxFYAYvpqbnnkgP/i/g+NLpjEUa3obn1XJCur9YbEXKDAkaXqsR1LbDnGEJ0MmKFxfg==", + "version": "14.1.2", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz", + "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==", + "license": "MIT", "dependencies": { "@types/linkify-it": "^5", "@types/mdurl": "^2" } }, + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, "node_modules/@types/mdurl": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz", - "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==" + "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==", + "license": "MIT" + }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "license": "MIT" }, "node_modules/@types/web-bluetooth": { "version": "0.0.20", "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz", - "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==" + "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==", + "license": "MIT" + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.1.tgz", + "integrity": "sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA==", + "license": "ISC" }, "node_modules/@vitejs/plugin-vue": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.0.5.tgz", - "integrity": "sha512-LOjm7XeIimLBZyzinBQ6OSm3UBCNVCpLkxGC0oWmm2YPzVZoxMsdvNVimLTBzpAnR9hl/yn1SHGuRfe6/Td9rQ==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.1.tgz", + "integrity": "sha512-cxh314tzaWwOLqVes2gnnCtvBDcM1UMdn+iFR+UjAn411dPT3tOmqrJjbMd7koZpMAmBM/GqeV4n9ge7JSiJJQ==", + "license": "MIT", "engines": { "node": "^18.0.0 || >=20.0.0" }, "peerDependencies": { - "vite": "^5.0.0", + "vite": "^5.0.0 || ^6.0.0", "vue": "^3.2.25" } }, "node_modules/@vue/compiler-core": { - "version": "3.4.28", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.28.tgz", - "integrity": "sha512-yJ6CFFu6qDYB4RrF9LJ1DU7Cq7rgODBrwHoiadvHSBGhMHcROl5AOp9WEPDba5J9OEptUdpSPVZb7q++MO/7vA==", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.13.tgz", + "integrity": "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==", + "license": "MIT", "dependencies": { - "@babel/parser": "^7.24.7", - "@vue/shared": "3.4.28", + "@babel/parser": "^7.25.3", + "@vue/shared": "3.5.13", "entities": "^4.5.0", "estree-walker": "^2.0.2", "source-map-js": "^1.2.0" } }, "node_modules/@vue/compiler-dom": { - "version": "3.4.28", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.28.tgz", - "integrity": "sha512-CgBwv48EMETKijnzKB8swa00aEkmXFDbEHOZqeUPKPDZE9DM51RlKA+9/9zPStioCP+v3SC+UjzQfARsFefhqw==", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz", + "integrity": "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==", + "license": "MIT", "dependencies": { - "@vue/compiler-core": "3.4.28", - "@vue/shared": "3.4.28" + "@vue/compiler-core": "3.5.13", + "@vue/shared": "3.5.13" } }, "node_modules/@vue/compiler-sfc": { - "version": "3.4.28", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.28.tgz", - "integrity": "sha512-k7FSOhEZdXorRSfIC1FCgwffewLuf1hJBP+WxZ7e9C2/bU+djS/C9tyZRfqVksMMvd2IiA5N3oNEbbUjlneWlA==", - "dependencies": { - "@babel/parser": "^7.24.7", - "@vue/compiler-core": "3.4.28", - "@vue/compiler-dom": "3.4.28", - "@vue/compiler-ssr": "3.4.28", - "@vue/shared": "3.4.28", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.13.tgz", + "integrity": "sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.25.3", + "@vue/compiler-core": "3.5.13", + "@vue/compiler-dom": "3.5.13", + "@vue/compiler-ssr": "3.5.13", + "@vue/shared": "3.5.13", "estree-walker": "^2.0.2", - "magic-string": "^0.30.10", - "postcss": "^8.4.38", + "magic-string": "^0.30.11", + "postcss": "^8.4.48", "source-map-js": "^1.2.0" } }, "node_modules/@vue/compiler-ssr": { - "version": "3.4.28", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.28.tgz", - "integrity": "sha512-AlnfXUKDg1xTPxO5ztVdN/L29ujJ97qG5bmqTa+y0D0kfbYxfZNJe/ej/wPi/WqMFv/MFy1RHzRrwQM+MykSHw==", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.13.tgz", + "integrity": "sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==", + "license": "MIT", "dependencies": { - "@vue/compiler-dom": "3.4.28", - "@vue/shared": "3.4.28" + "@vue/compiler-dom": "3.5.13", + "@vue/shared": "3.5.13" } }, "node_modules/@vue/devtools-api": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.2.1.tgz", - "integrity": "sha512-6oNCtyFOrNdqm6GUkFujsCgFlpbsHLnZqq7edeM/+cxAbMyCWvsaCsIMUaz7AiluKLccCGEM8fhOsjaKgBvb7g==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.7.0.tgz", + "integrity": "sha512-bHEv6kT85BHtyGgDhE07bAUMAy7zpv6nnR004nSTd0wWMrAOtcrYoXO5iyr20Hkf5jR8obQOfS3byW+I3l2CCA==", + "license": "MIT", "dependencies": { - "@vue/devtools-kit": "^7.2.1" + "@vue/devtools-kit": "^7.7.0" } }, "node_modules/@vue/devtools-kit": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.2.1.tgz", - "integrity": "sha512-Wak/fin1X0Q8LLIfCAHBrdaaB+R6IdpSXsDByPHbQ3BmkCP0/cIo/oEGp9i0U2+gEqD4L3V9RDjNf1S34DTzQQ==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.7.0.tgz", + "integrity": "sha512-5cvZ+6SA88zKC8XiuxUfqpdTwVjJbvYnQZY5NReh7qlSGPvVDjjzyEtW+gdzLXNSd8tStgOjAdMCpvDQamUXtA==", + "license": "MIT", "dependencies": { - "@vue/devtools-shared": "^7.2.1", + "@vue/devtools-shared": "^7.7.0", + "birpc": "^0.2.19", "hookable": "^5.5.3", "mitt": "^3.0.1", "perfect-debounce": "^1.0.0", - "speakingurl": "^14.0.1" - }, - "peerDependencies": { - "vue": "^3.0.0" + "speakingurl": "^14.0.1", + "superjson": "^2.2.1" } }, "node_modules/@vue/devtools-shared": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.2.1.tgz", - "integrity": "sha512-PCJF4UknJmOal68+X9XHyVeQ+idv0LFujkTOIW30+GaMJqwFVN9LkQKX4gLqn61KkGMdJTzQ1bt7EJag3TI6AA==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.7.0.tgz", + "integrity": "sha512-jtlQY26R5thQxW9YQTpXbI0HoK0Wf9Rd4ekidOkRvSy7ChfK0kIU6vvcBtjj87/EcpeOSK49fZAicaFNJcoTcQ==", + "license": "MIT", "dependencies": { - "rfdc": "^1.3.1" + "rfdc": "^1.4.1" } }, "node_modules/@vue/reactivity": { - "version": "3.4.28", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.28.tgz", - "integrity": "sha512-B5uvZK0ArgBMkjK8RA9l5XP+PuQ/x99oqrcHRc78wa0pWyDje5X/isGihuiuSr0nFZTA5guoy78sJ6J8XxZv1A==", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.13.tgz", + "integrity": "sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==", + "license": "MIT", "dependencies": { - "@vue/shared": "3.4.28" + "@vue/shared": "3.5.13" } }, "node_modules/@vue/runtime-core": { - "version": "3.4.28", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.28.tgz", - "integrity": "sha512-Corp5aAn5cm9h2cse6w5vRlnlfpy8hBRrsgCzHSoUohStlbqBXvI/uopPVkCivPCgY4fJZhXOufYYJ3DXzpN/w==", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.13.tgz", + "integrity": "sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==", + "license": "MIT", "dependencies": { - "@vue/reactivity": "3.4.28", - "@vue/shared": "3.4.28" + "@vue/reactivity": "3.5.13", + "@vue/shared": "3.5.13" } }, "node_modules/@vue/runtime-dom": { - "version": "3.4.28", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.28.tgz", - "integrity": "sha512-y9lDMMFf2Y5GpYdE8+IuavVl95D1GY1Zp8jU1vZhQ3Z4ga3f0Ym+XxRhcFtqaQAm9u82GwB7zDpBxafWDRq4pw==", - "dependencies": { - "@vue/reactivity": "3.4.28", - "@vue/runtime-core": "3.4.28", - "@vue/shared": "3.4.28", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.13.tgz", + "integrity": "sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.13", + "@vue/runtime-core": "3.5.13", + "@vue/shared": "3.5.13", "csstype": "^3.1.3" } }, "node_modules/@vue/server-renderer": { - "version": "3.4.28", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.28.tgz", - "integrity": "sha512-H/jZhGQTP29xQMsGU+3BoAH/O/4vbM4uQiPsXU4AZzF5NgZQ/xfEgah0dmOlvFp3/q0r6s8pIaEeOEPnAMb8hw==", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.13.tgz", + "integrity": "sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==", + "license": "MIT", "dependencies": { - "@vue/compiler-ssr": "3.4.28", - "@vue/shared": "3.4.28" + "@vue/compiler-ssr": "3.5.13", + "@vue/shared": "3.5.13" }, "peerDependencies": { - "vue": "3.4.28" + "vue": "3.5.13" } }, "node_modules/@vue/shared": { - "version": "3.4.28", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.28.tgz", - "integrity": "sha512-2b+Vuv5ichZQZPmRJfniHQkBSNigmRsRkr17bkYqBFy3J88T4lB7dRbAX/rx8qr9v0cr8Adg6yP872xhxGmh0w==" + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.13.tgz", + "integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==", + "license": "MIT" }, "node_modules/@vueuse/core": { - "version": "10.11.0", - "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-10.11.0.tgz", - "integrity": "sha512-x3sD4Mkm7PJ+pcq3HX8PLPBadXCAlSDR/waK87dz0gQE+qJnaaFhc/dZVfJz+IUYzTMVGum2QlR7ImiJQN4s6g==", + "version": "11.3.0", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-11.3.0.tgz", + "integrity": "sha512-7OC4Rl1f9G8IT6rUfi9JrKiXy4bfmHhZ5x2Ceojy0jnd3mHNEvV4JaRygH362ror6/NZ+Nl+n13LPzGiPN8cKA==", + "license": "MIT", "dependencies": { "@types/web-bluetooth": "^0.0.20", - "@vueuse/metadata": "10.11.0", - "@vueuse/shared": "10.11.0", - "vue-demi": ">=0.14.8" + "@vueuse/metadata": "11.3.0", + "@vueuse/shared": "11.3.0", + "vue-demi": ">=0.14.10" }, "funding": { "url": "https://github.com/sponsors/antfu" } }, "node_modules/@vueuse/core/node_modules/vue-demi": { - "version": "0.14.8", - "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.8.tgz", - "integrity": "sha512-Uuqnk9YE9SsWeReYqK2alDI5YzciATE0r2SkA6iMAtuXvNTMNACJLJEXNXaEy94ECuBe4Sk6RzRU80kjdbIo1Q==", + "version": "0.14.10", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", "hasInstallScript": true, + "license": "MIT", "bin": { "vue-demi-fix": "bin/vue-demi-fix.js", "vue-demi-switch": "bin/vue-demi-switch.js" @@ -1464,13 +1877,14 @@ } }, "node_modules/@vueuse/integrations": { - "version": "10.11.0", - "resolved": "https://registry.npmjs.org/@vueuse/integrations/-/integrations-10.11.0.tgz", - "integrity": "sha512-Pp6MtWEIr+NDOccWd8j59Kpjy5YDXogXI61Kb1JxvSfVBO8NzFQkmrKmSZz47i+ZqHnIzxaT38L358yDHTncZg==", - "dependencies": { - "@vueuse/core": "10.11.0", - "@vueuse/shared": "10.11.0", - "vue-demi": ">=0.14.8" + "version": "11.3.0", + "resolved": "https://registry.npmjs.org/@vueuse/integrations/-/integrations-11.3.0.tgz", + "integrity": "sha512-5fzRl0apQWrDezmobchoiGTkGw238VWESxZHazfhP3RM7pDSiyXy18QbfYkILoYNTd23HPAfQTJpkUc5QbkwTw==", + "license": "MIT", + "dependencies": { + "@vueuse/core": "11.3.0", + "@vueuse/shared": "11.3.0", + "vue-demi": ">=0.14.10" }, "funding": { "url": "https://github.com/sponsors/antfu" @@ -1478,16 +1892,16 @@ "peerDependencies": { "async-validator": "^4", "axios": "^1", - "change-case": "^4", - "drauu": "^0.3", + "change-case": "^5", + "drauu": "^0.4", "focus-trap": "^7", - "fuse.js": "^6", + "fuse.js": "^7", "idb-keyval": "^6", - "jwt-decode": "^3", + "jwt-decode": "^4", "nprogress": "^0.2", "qrcode": "^1.5", "sortablejs": "^1", - "universal-cookie": "^6" + "universal-cookie": "^7" }, "peerDependenciesMeta": { "async-validator": { @@ -1529,10 +1943,11 @@ } }, "node_modules/@vueuse/integrations/node_modules/vue-demi": { - "version": "0.14.8", - "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.8.tgz", - "integrity": "sha512-Uuqnk9YE9SsWeReYqK2alDI5YzciATE0r2SkA6iMAtuXvNTMNACJLJEXNXaEy94ECuBe4Sk6RzRU80kjdbIo1Q==", + "version": "0.14.10", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", "hasInstallScript": true, + "license": "MIT", "bin": { "vue-demi-fix": "bin/vue-demi-fix.js", "vue-demi-switch": "bin/vue-demi-switch.js" @@ -1554,29 +1969,32 @@ } }, "node_modules/@vueuse/metadata": { - "version": "10.11.0", - "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.11.0.tgz", - "integrity": "sha512-kQX7l6l8dVWNqlqyN3ePW3KmjCQO3ZMgXuBMddIu83CmucrsBfXlH+JoviYyRBws/yLTQO8g3Pbw+bdIoVm4oQ==", + "version": "11.3.0", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-11.3.0.tgz", + "integrity": "sha512-pwDnDspTqtTo2HwfLw4Rp6yywuuBdYnPYDq+mO38ZYKGebCUQC/nVj/PXSiK9HX5otxLz8Fn7ECPbjiRz2CC3g==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/antfu" } }, "node_modules/@vueuse/shared": { - "version": "10.11.0", - "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-10.11.0.tgz", - "integrity": "sha512-fyNoIXEq3PfX1L3NkNhtVQUSRtqYwJtJg+Bp9rIzculIZWHTkKSysujrOk2J+NrRulLTQH9+3gGSfYLWSEWU1A==", + "version": "11.3.0", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-11.3.0.tgz", + "integrity": "sha512-P8gSSWQeucH5821ek2mn/ciCk+MS/zoRKqdQIM3bHq6p7GXDAJLmnRRKmF5F65sAVJIfzQlwR3aDzwCn10s8hA==", + "license": "MIT", "dependencies": { - "vue-demi": ">=0.14.8" + "vue-demi": ">=0.14.10" }, "funding": { "url": "https://github.com/sponsors/antfu" } }, "node_modules/@vueuse/shared/node_modules/vue-demi": { - "version": "0.14.8", - "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.8.tgz", - "integrity": "sha512-Uuqnk9YE9SsWeReYqK2alDI5YzciATE0r2SkA6iMAtuXvNTMNACJLJEXNXaEy94ECuBe4Sk6RzRU80kjdbIo1Q==", + "version": "0.14.10", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", "hasInstallScript": true, + "license": "MIT", "bin": { "vue-demi-fix": "bin/vue-demi-fix.js", "vue-demi-switch": "bin/vue-demi-switch.js" @@ -1598,36 +2016,132 @@ } }, "node_modules/algoliasearch": { - "version": "4.23.3", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.23.3.tgz", - "integrity": "sha512-Le/3YgNvjW9zxIQMRhUHuhiUjAlKY/zsdZpfq4dlLqg6mEm0nL6yk+7f2hDOtLpxsgE4jSzDmvHL7nXdBp5feg==", - "dependencies": { - "@algolia/cache-browser-local-storage": "4.23.3", - "@algolia/cache-common": "4.23.3", - "@algolia/cache-in-memory": "4.23.3", - "@algolia/client-account": "4.23.3", - "@algolia/client-analytics": "4.23.3", - "@algolia/client-common": "4.23.3", - "@algolia/client-personalization": "4.23.3", - "@algolia/client-search": "4.23.3", - "@algolia/logger-common": "4.23.3", - "@algolia/logger-console": "4.23.3", - "@algolia/recommend": "4.23.3", - "@algolia/requester-browser-xhr": "4.23.3", - "@algolia/requester-common": "4.23.3", - "@algolia/requester-node-http": "4.23.3", - "@algolia/transporter": "4.23.3" + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.19.0.tgz", + "integrity": "sha512-zrLtGhC63z3sVLDDKGW+SlCRN9eJHFTgdEmoAOpsVh6wgGL1GgTTDou7tpCBjevzgIvi3AIyDAQO3Xjbg5eqZg==", + "license": "MIT", + "dependencies": { + "@algolia/client-abtesting": "5.19.0", + "@algolia/client-analytics": "5.19.0", + "@algolia/client-common": "5.19.0", + "@algolia/client-insights": "5.19.0", + "@algolia/client-personalization": "5.19.0", + "@algolia/client-query-suggestions": "5.19.0", + "@algolia/client-search": "5.19.0", + "@algolia/ingestion": "1.19.0", + "@algolia/monitoring": "1.19.0", + "@algolia/recommend": "5.19.0", + "@algolia/requester-browser-xhr": "5.19.0", + "@algolia/requester-fetch": "5.19.0", + "@algolia/requester-node-http": "5.19.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/birpc": { + "version": "0.2.19", + "resolved": "https://registry.npmjs.org/birpc/-/birpc-0.2.19.tgz", + "integrity": "sha512-5WeXXAvTmitV1RqJFppT5QtUiz2p1mRSYU000Jkft5ZUCLJIk4uQriYNO50HknxKwM6jd8utNc66K1qGIwwWBQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/copy-anything": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.5.tgz", + "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==", + "license": "MIT", + "dependencies": { + "is-what": "^4.1.8" + }, + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" } }, "node_modules/csstype": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/emoji-regex-xs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex-xs/-/emoji-regex-xs-1.0.0.tgz", + "integrity": "sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==", + "license": "MIT" }, "node_modules/entities": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", "engines": { "node": ">=0.12" }, @@ -1640,6 +2154,7 @@ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", "hasInstallScript": true, + "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, @@ -1675,12 +2190,14 @@ "node_modules/estree-walker": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" }, "node_modules/focus-trap": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.5.4.tgz", - "integrity": "sha512-N7kHdlgsO/v+iD/dMoJKtsSqs5Dz/dXZVebRgJw23LDk+jMi/974zyiOYDziY2JPp8xivq9BmUGwIJMiuSBi7w==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.6.2.tgz", + "integrity": "sha512-9FhUxK1hVju2+AiQIDJ5Dd//9R2n2RAfJ0qfhF4IHGHgcoEUTMpbTeG/zbEuwaiYXfuAH6XE0/aCyxDdRM+W5w==", + "license": "MIT", "dependencies": { "tabbable": "^6.2.0" } @@ -1690,6 +2207,7 @@ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -1698,17 +2216,77 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, + "node_modules/hast-util-to-html": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.4.tgz", + "integrity": "sha512-wxQzXtdbhiwGAUKrnQJXlOPmHnEehzphwkK7aluUPQ+lEc1xefC8pblMgpp2w5ldBTEfveRIrADcrhGIWrlTDA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-whitespace": "^3.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "stringify-entities": "^4.0.0", + "zwitch": "^2.0.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/hookable": { "version": "5.5.3", "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", - "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==" + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", + "license": "MIT" + }, + "node_modules/html-void-elements": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", + "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-what": { + "version": "4.1.16", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz", + "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==", + "license": "MIT", + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } }, "node_modules/magic-string": { - "version": "0.30.10", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz", - "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==", + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "license": "MIT", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" + "@jridgewell/sourcemap-codec": "^1.5.0" } }, "node_modules/mark.js": { @@ -1716,26 +2294,139 @@ "resolved": "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz", "integrity": "sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==" }, + "node_modules/mdast-util-to-hast": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz", + "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-types": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.1.tgz", + "integrity": "sha512-534m2WhVTddrcKVepwmVEVnUAmtrx9bfIjNoQHRqfnvdaHQiFytEhJoTgpWJvDEXCO5gLTQh3wYC1PgOJA4NSQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, "node_modules/minisearch": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/minisearch/-/minisearch-6.3.0.tgz", - "integrity": "sha512-ihFnidEeU8iXzcVHy74dhkxh/dn8Dc08ERl0xwoMMGqp4+LvRSCgicb+zGqWthVokQKvCSxITlh3P08OzdTYCQ==" + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/minisearch/-/minisearch-7.1.1.tgz", + "integrity": "sha512-b3YZEYCEH4EdCAtYP7OlDyx7FdPwNzuNwLQ34SfJpM9dlbBZzeXndGavTrC+VCiRWomL21SWfMc6SCKO/U2ZNw==", + "license": "MIT" }, "node_modules/mitt": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", - "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==" + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", + "license": "MIT" }, "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", "funding": [ { "type": "github", "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -1743,20 +2434,33 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/oniguruma-to-es": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-0.10.0.tgz", + "integrity": "sha512-zapyOUOCJxt+xhiNRPPMtfJkHGsZ98HHB9qJEkdT8BGytO/+kpe4m1Ngf0MzbzTmhacn11w9yGeDP6tzDhnCdg==", + "license": "MIT", + "dependencies": { + "emoji-regex-xs": "^1.0.0", + "regex": "^5.1.1", + "regex-recursion": "^5.1.1" + } + }, "node_modules/perfect-debounce": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", - "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==" + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", + "license": "MIT" }, "node_modules/picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" }, "node_modules/postcss": { - "version": "8.4.38", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", - "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", + "version": "8.4.49", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", + "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", "funding": [ { "type": "opencollective", @@ -1771,35 +2475,74 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.2.0" + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" }, "engines": { "node": "^10 || ^12 || >=14" } }, "node_modules/preact": { - "version": "10.22.0", - "resolved": "https://registry.npmjs.org/preact/-/preact-10.22.0.tgz", - "integrity": "sha512-RRurnSjJPj4rp5K6XoP45Ui33ncb7e4H7WiOHVpjbkvqvA3U+N8Z6Qbo0AE6leGYBV66n8EhEaFixvIu3SkxFw==", + "version": "10.25.4", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.25.4.tgz", + "integrity": "sha512-jLdZDb+Q+odkHJ+MpW/9U5cODzqnB+fy2EiHSZES7ldV5LK7yjlVzTp7R8Xy6W6y75kfK8iWYtFVH7lvjwrCMA==", + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/preact" } }, + "node_modules/property-information": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz", + "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/regex": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/regex/-/regex-5.1.1.tgz", + "integrity": "sha512-dN5I359AVGPnwzJm2jN1k0W9LPZ+ePvoOeVMMfqIMFz53sSwXkxaJoxr50ptnsC771lK95BnTrVSZxq0b9yCGw==", + "license": "MIT", + "dependencies": { + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-recursion": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-5.1.1.tgz", + "integrity": "sha512-ae7SBCbzVNrIjgSbh7wMznPcQel1DNlDtzensnFxpiNpXt1U2ju/bHugH422r+4LAVS1FpW1YCwilmnNsjum9w==", + "license": "MIT", + "dependencies": { + "regex": "^5.1.1", + "regex-utilities": "^2.3.0" + } + }, + "node_modules/regex-utilities": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz", + "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==", + "license": "MIT" + }, "node_modules/rfdc": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", - "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==" + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "license": "MIT" }, "node_modules/rollup": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.18.0.tgz", - "integrity": "sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.30.1.tgz", + "integrity": "sha512-mlJ4glW020fPuLi7DkM/lN97mYEZGWeqBnrljzN0gs7GLctqX3lNWxKQ7Gl712UAX+6fog/L3jh4gb7R6aVi3w==", + "license": "MIT", "dependencies": { - "@types/estree": "1.0.5" + "@types/estree": "1.0.6" }, "bin": { "rollup": "dist/bin/rollup" @@ -1809,64 +2552,125 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.18.0", - "@rollup/rollup-android-arm64": "4.18.0", - "@rollup/rollup-darwin-arm64": "4.18.0", - "@rollup/rollup-darwin-x64": "4.18.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.18.0", - "@rollup/rollup-linux-arm-musleabihf": "4.18.0", - "@rollup/rollup-linux-arm64-gnu": "4.18.0", - "@rollup/rollup-linux-arm64-musl": "4.18.0", - "@rollup/rollup-linux-powerpc64le-gnu": "4.18.0", - "@rollup/rollup-linux-riscv64-gnu": "4.18.0", - "@rollup/rollup-linux-s390x-gnu": "4.18.0", - "@rollup/rollup-linux-x64-gnu": "4.18.0", - "@rollup/rollup-linux-x64-musl": "4.18.0", - "@rollup/rollup-win32-arm64-msvc": "4.18.0", - "@rollup/rollup-win32-ia32-msvc": "4.18.0", - "@rollup/rollup-win32-x64-msvc": "4.18.0", + "@rollup/rollup-android-arm-eabi": "4.30.1", + "@rollup/rollup-android-arm64": "4.30.1", + "@rollup/rollup-darwin-arm64": "4.30.1", + "@rollup/rollup-darwin-x64": "4.30.1", + "@rollup/rollup-freebsd-arm64": "4.30.1", + "@rollup/rollup-freebsd-x64": "4.30.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.30.1", + "@rollup/rollup-linux-arm-musleabihf": "4.30.1", + "@rollup/rollup-linux-arm64-gnu": "4.30.1", + "@rollup/rollup-linux-arm64-musl": "4.30.1", + "@rollup/rollup-linux-loongarch64-gnu": "4.30.1", + "@rollup/rollup-linux-powerpc64le-gnu": "4.30.1", + "@rollup/rollup-linux-riscv64-gnu": "4.30.1", + "@rollup/rollup-linux-s390x-gnu": "4.30.1", + "@rollup/rollup-linux-x64-gnu": "4.30.1", + "@rollup/rollup-linux-x64-musl": "4.30.1", + "@rollup/rollup-win32-arm64-msvc": "4.30.1", + "@rollup/rollup-win32-ia32-msvc": "4.30.1", + "@rollup/rollup-win32-x64-msvc": "4.30.1", "fsevents": "~2.3.2" } }, "node_modules/search-insights": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.14.0.tgz", - "integrity": "sha512-OLN6MsPMCghDOqlCtsIsYgtsC0pnwVTyT9Mu6A3ewOj1DxvzZF6COrn2g86E/c05xbktB0XN04m/t1Z+n+fTGw==", + "version": "2.17.3", + "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.17.3.tgz", + "integrity": "sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ==", + "license": "MIT", "peer": true }, "node_modules/shiki": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.6.4.tgz", - "integrity": "sha512-X88chM7w8jnadoZtjPTi5ahCJx9pc9f8GfEkZAEYUTlcUZIEw2D/RY86HI/LkkE7Nj8TQWkiBfaFTJ3VJT6ESg==", + "version": "1.26.1", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.26.1.tgz", + "integrity": "sha512-Gqg6DSTk3wYqaZ5OaYtzjcdxcBvX5kCy24yvRJEgjT5U+WHlmqCThLuBUx0juyxQBi+6ug53IGeuQS07DWwpcw==", + "license": "MIT", "dependencies": { - "@shikijs/core": "1.6.4" + "@shikijs/core": "1.26.1", + "@shikijs/engine-javascript": "1.26.1", + "@shikijs/engine-oniguruma": "1.26.1", + "@shikijs/langs": "1.26.1", + "@shikijs/themes": "1.26.1", + "@shikijs/types": "1.26.1", + "@shikijs/vscode-textmate": "^10.0.1", + "@types/hast": "^3.0.4" } }, "node_modules/source-map-js": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", - "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/speakingurl": { "version": "14.0.1", "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz", "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "license": "MIT", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/superjson": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.2.tgz", + "integrity": "sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==", + "license": "MIT", + "dependencies": { + "copy-anything": "^3.0.2" + }, + "engines": { + "node": ">=16" + } + }, "node_modules/tabbable": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", - "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==" + "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==", + "license": "MIT" + }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, "node_modules/tsparticles": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/tsparticles/-/tsparticles-3.5.0.tgz", - "integrity": "sha512-WNZheIBVuDZvFO9wuRsGgoeDU8X01BJkdzIDcDXDjHY+JStufKH1uNXM1TFzGQp812czcHagXkxo8s5Kp7GTRQ==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/tsparticles/-/tsparticles-3.7.1.tgz", + "integrity": "sha512-NNkOYIo01eHpDuaJxDCGgcLEMZKEJTCN/XPVCLg7VxgEWN19rjXpDnDguISxadS8GSFPws7hpGgbeDDAm3MX+Q==", "funding": [ { "type": "github", @@ -1881,30 +2685,128 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], + "license": "MIT", + "dependencies": { + "@tsparticles/engine": "3.7.1", + "@tsparticles/interaction-external-trail": "3.7.1", + "@tsparticles/plugin-absorbers": "3.7.1", + "@tsparticles/plugin-emitters": "3.7.1", + "@tsparticles/plugin-emitters-shape-circle": "3.7.1", + "@tsparticles/plugin-emitters-shape-square": "3.7.1", + "@tsparticles/shape-text": "3.7.1", + "@tsparticles/slim": "3.7.1", + "@tsparticles/updater-destroy": "3.7.1", + "@tsparticles/updater-roll": "3.7.1", + "@tsparticles/updater-tilt": "3.7.1", + "@tsparticles/updater-twinkle": "3.7.1", + "@tsparticles/updater-wobble": "3.7.1" + } + }, + "node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "license": "MIT", "dependencies": { - "@tsparticles/engine": "^3.5.0", - "@tsparticles/interaction-external-trail": "^3.5.0", - "@tsparticles/plugin-absorbers": "^3.5.0", - "@tsparticles/plugin-emitters": "^3.5.0", - "@tsparticles/plugin-emitters-shape-circle": "^3.5.0", - "@tsparticles/plugin-emitters-shape-square": "^3.5.0", - "@tsparticles/shape-text": "^3.5.0", - "@tsparticles/slim": "^3.5.0", - "@tsparticles/updater-destroy": "^3.5.0", - "@tsparticles/updater-roll": "^3.5.0", - "@tsparticles/updater-tilt": "^3.5.0", - "@tsparticles/updater-twinkle": "^3.5.0", - "@tsparticles/updater-wobble": "^3.5.0" + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, "node_modules/vite": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.1.tgz", - "integrity": "sha512-XBmSKRLXLxiaPYamLv3/hnP/KXDai1NDexN0FpkTaZXTfycHvkRHoenpgl/fvuK/kPbB6xAgoyiryAhQNxYmAQ==", + "version": "5.4.11", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.11.tgz", + "integrity": "sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==", + "license": "MIT", "dependencies": { "esbuild": "^0.21.3", - "postcss": "^8.4.38", - "rollup": "^4.13.0" + "postcss": "^8.4.43", + "rollup": "^4.20.0" }, "bin": { "vite": "bin/vite.js" @@ -1923,6 +2825,7 @@ "less": "*", "lightningcss": "^1.21.0", "sass": "*", + "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.4.0" @@ -1940,6 +2843,9 @@ "sass": { "optional": true }, + "sass-embedded": { + "optional": true + }, "stylus": { "optional": true }, @@ -1952,26 +2858,29 @@ } }, "node_modules/vitepress": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/vitepress/-/vitepress-1.2.3.tgz", - "integrity": "sha512-GvEsrEeNLiDE1+fuwDAYJCYLNZDAna+EtnXlPajhv/MYeTjbNK6Bvyg6NoTdO1sbwuQJ0vuJR99bOlH53bo6lg==", - "dependencies": { - "@docsearch/css": "^3.6.0", - "@docsearch/js": "^3.6.0", - "@shikijs/core": "^1.6.2", - "@shikijs/transformers": "^1.6.2", - "@types/markdown-it": "^14.1.1", - "@vitejs/plugin-vue": "^5.0.5", - "@vue/devtools-api": "^7.2.1", - "@vue/shared": "^3.4.27", - "@vueuse/core": "^10.10.0", - "@vueuse/integrations": "^10.10.0", - "focus-trap": "^7.5.4", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/vitepress/-/vitepress-1.5.0.tgz", + "integrity": "sha512-q4Q/G2zjvynvizdB3/bupdYkCJe2umSAMv9Ju4d92E6/NXJ59z70xB0q5p/4lpRyAwflDsbwy1mLV9Q5+nlB+g==", + "license": "MIT", + "dependencies": { + "@docsearch/css": "^3.6.2", + "@docsearch/js": "^3.6.2", + "@iconify-json/simple-icons": "^1.2.10", + "@shikijs/core": "^1.22.2", + "@shikijs/transformers": "^1.22.2", + "@shikijs/types": "^1.22.2", + "@types/markdown-it": "^14.1.2", + "@vitejs/plugin-vue": "^5.1.4", + "@vue/devtools-api": "^7.5.4", + "@vue/shared": "^3.5.12", + "@vueuse/core": "^11.1.0", + "@vueuse/integrations": "^11.1.0", + "focus-trap": "^7.6.0", "mark.js": "8.11.1", - "minisearch": "^6.3.0", - "shiki": "^1.6.2", - "vite": "^5.2.12", - "vue": "^3.4.27" + "minisearch": "^7.1.0", + "shiki": "^1.22.2", + "vite": "^5.4.10", + "vue": "^3.5.12" }, "bin": { "vitepress": "bin/vitepress.js" @@ -1990,15 +2899,16 @@ } }, "node_modules/vue": { - "version": "3.4.28", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.28.tgz", - "integrity": "sha512-LLaTiridyV+6Xnl5PWdPvIX7+PTRoQeo7rVSJfvXJusI5grvB8gmR/fJgCxnWIQq4ztEVIc1faFJnqJWttWtiw==", - "dependencies": { - "@vue/compiler-dom": "3.4.28", - "@vue/compiler-sfc": "3.4.28", - "@vue/runtime-dom": "3.4.28", - "@vue/server-renderer": "3.4.28", - "@vue/shared": "3.4.28" + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.13.tgz", + "integrity": "sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.13", + "@vue/compiler-sfc": "3.5.13", + "@vue/runtime-dom": "3.5.13", + "@vue/server-renderer": "3.5.13", + "@vue/shared": "3.5.13" }, "peerDependencies": { "typescript": "*" @@ -2008,6 +2918,16 @@ "optional": true } } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } } } } diff --git a/package.json b/package.json index f125855..d48ec9a 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,6 @@ }, "dependencies": { "tsparticles": "^3.5.0", - "vitepress": "^1.2.3" + "vitepress": "^1.5.0" } } From b88eef2eac1d032f04b0675919565f304c8d7d9b Mon Sep 17 00:00:00 2001 From: Endogen Date: Fri, 10 Jan 2025 00:00:50 +0100 Subject: [PATCH 30/30] Shorten name since it's already in the examples folder --- .vitepress/config.mts | 2 +- src/examples/{uber-dice-example.md => uber-dice.md} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename src/examples/{uber-dice-example.md => uber-dice.md} (100%) diff --git a/.vitepress/config.mts b/.vitepress/config.mts index 2e84cee..0fa93ed 100644 --- a/.vitepress/config.mts +++ b/.vitepress/config.mts @@ -69,7 +69,7 @@ export default defineConfig({ collapsed: true, items: [ { text: 'Overview', link: '/examples/' }, - { text: 'Uber Dice', link: '/examples/uber-dice-example' }, + { text: 'Uber Dice', link: '/examples/uber-dice' }, { text: 'Token XSC003', link: '/examples/currency' }, ] }, diff --git a/src/examples/uber-dice-example.md b/src/examples/uber-dice.md similarity index 100% rename from src/examples/uber-dice-example.md rename to src/examples/uber-dice.md