diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 000000000..f022d0280 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,15 @@ +node_modules + +/build +/public/build +/server-build +.env + +/test-results/ +/playwright-report/ +/playwright/.cache/ +/tests/fixtures/email/*.json +/coverage +/prisma/migrations + +package-lock.json diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 000000000..c3b732bc9 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,8 @@ +{ + "arrowParens": "avoid", + "plugins": ["prettier-plugin-tailwindcss"], + "tailwindFunctions": ["tv"], + "semi": false, + "singleQuote": true, + "tabWidth": 2 +} diff --git a/README.md b/README.md index 73bee20d3..6092acee6 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ # Website -This website is built using [Docusaurus 2](https://docusaurus.io/), a modern static website generator. +This website is built using [Docusaurus 3](https://docusaurus.io/), a modern static website generator. ### Installation @@ -41,4 +41,3 @@ $ GIT_USER= yarn deploy ``` If you are using GitHub pages for hosting, this command is a convenient way to build the website and push to the `gh-pages` branch. - diff --git a/docs/learn/Start-on-Testnet.md b/docs/learn/Start-on-Testnet.md new file mode 100644 index 000000000..e09136d91 --- /dev/null +++ b/docs/learn/Start-on-Testnet.md @@ -0,0 +1,323 @@ +# Guided Tutorial: Hands on Testnet + +## A great way to start with Provenance Blockchain + +Blockchain isn’t magic. It’s really not. At the risk of enraging an entire community, isn’t it really just a linked list with cryptographic sprinkles? A graph of objects addressable by a cryptographic hash of the object pointing to other objects by _their_ cryptographic hashes? Sound familiar? [Have a look at the README.md in the very first git commit](https://github.com/git/git/tree/e83c5163316f89bfbde7d9ab23ca2e25604af290). It’s striking how, in 2005, the git README almost perfectly defines the same primitives used by blockchain tech: cryptographic hashes, consistency, state, trust, distribution, digital signatures. + +But I digress. My point is don’t be intimidated by blockchain fundamentals, there’s nothing new and magical here. + +With that out of the way, for today’s session we’ll avoid the hype and simply play around on a blockchain. And not just any blockchain, _the_ Provenance Blockchain. + +Let’s get started. + +# **The Set Up** + +We’ll be using a terminal shell, the provenanced command, and the Provenance Blockchain testnet network. Isn’t there GUIs, web applications, or mobile applications we could use instead? Sure. But the closer to the metal the better. + +Some things you’ll need on your machine to follow along: + +- A bash (or similar) shell \- I’m running all the commands using zsh. +- curl for interacting with the interwebs for things like [the Provenance Blockchain testnet gas faucet](https://explorer.test.provenance.io/faucet). +- jq for displaying pretty JSON data. + +# **Download** provenanced **Binary** + +Pre-built provenanced binaries are available at [the Provenance Blockchain GitHub repository releases section.](https://github.com/provenance-io/provenance/releases) Download the latest provenance-\*.zip for your machine architecture and unzip it to a location of your choosing on your local machine. For example, I’m using the [**provenance-darwin-amd64-v1.8.1.zip**](https://github.com/provenance-io/provenance/releases/download/v1.8.1/provenance-darwin-amd64-v1.8.1.zip) version on my M1 Mac: + +$ curl \-JLO get \ + +$ unzip provenance-darwin-amd64-v1.8.1.zip + +$ export PATH=$(pwd)/bin:$PATH + +The unzip will create a bin directory in the download location that contains the provenanced binary. Notice I added that to my path to make things easier. + +Now confirm we have the correct provenanced binary: + +$ provenanced version + +v1.8.1 + +So what exactly is provenanced? The Provenance Blockchain is wrapped into a single executable named provenanced. All interaction (whether creating a node, querying, or submitting transactions) with Provenance Blockchain can be accomplished using the provenanced command. It’s effectively both a server and a client and it has _a lot of features_: + +$ provenanced \--help + +# **Let’s Query Some Blockchain\!** + +Now that we have our provenanced binary downloaded and configured, let’s run a couple of queries against the Provenance Blockchain testnet network. There’s a _ton_ of queries we can run, have a look: + +$ provenanced q \--help + +Let’s start with the auth [module](https://docs.cosmos.network/v0.45/building-modules/intro.html#introduction-to-sdk-modules) and query accounts: + +$ provenanced q auth accounts \\ + +\--testnet \\ + +\--node=https://rpc.test.provenance.io:443 \\ + +\--output json | jq . + +So what did we just do? + +1. provenanced q auth accounts is the main command querying the auth module for accounts. +2. \--testnet tells provenanced we’re running against the testnet network +3. \--node=https://rpc.test.provenance.io:443 is the specific Provenance Blockchain testnet node we’re connecting to. This can be any available, distributed testnet node in the network if you know the node’s address. In this case, it’s a public query node provided by the Provenance Blockchain Foundation. +4. \--output json | jq . output the blockchain response as JSON and pipe it through jq to make it easier to read. + +And what did we see? + +``` +[{ + + "@type": "/cosmos.auth.v1beta1.BaseAccount", + + "address": "tp1q8n4v4m0hm8v0a7n697nwtpzhfsz3f4d40lnsu", + + "pub\_key": \{ + + "@type": "/cosmos.crypto.secp256k1.PubKey", + + "key": "Ao+nqnlIT4m86jXcZ46M7Lg+IHgfMVQCnKeUEu2UJgBo" + + \}, + + "account\_number": "730", + + "sequence": "1476605" + +}, + +... snip ... + +] +``` + +We saw several accounts\! Now would be a good time to talk accounts, keys, and wallets — they’re base primitives on blockchain. + +# **Accounts** + +On Provenance Blockchain, an [account](https://docs.cosmos.network/v0.41/basics/accounts.html) designates a pair of _public key_ PubKey and _private key_ PrivKey. The PubKey is used to generate an address that is used to identify users (among other entities) on the blockchain. Addresses are also associated with messages to identify the sender of the message. The PrivKey is used to generate [digital signatures](https://docs.cosmos.network/master/basics/query-lifecycle.html#signatures) to prove that an addressassociated with the PrivKey approved of a given message. + +# **Addresses** + +Addresses and PubKeys are both public information that identifies actors on the blockchain. The Account we queried for in the prior section stores user authentication information. + +Each account is identified using an address which is a sequence of bytes derived from a public key. + +Addresses and public keys are formatted using [Bech32](https://en.bitcoin.it/wiki/Bech32) and implemented as a string value. The Bech32 method is the only supported format to use when interacting with the blockchain. The Bech32 human-readable part (Bech32 prefix) is used to denote an address type. + +Provenance Blockchain testnet Bech32 addresses begin with **tp** whereas mainnet addresses begin with **pb**. + +💡 _A key pair and its corresponding Bech32 address that exist outside of Provenance Blockchain (say, in a wallet) is not a Provenance Blockchain account until HASH has been transferred to the Bech32 address._ + +# **Wallets** + +A wallet is a piece of software that holds the key pairs used to create Addresses which are represented as Accounts on blockchain. The wallet protects the private key portion of the key pair and uses the private key to digitally sign transactions that are broadcast to the blockchain. It is important to understand that a **Wallet** is NOT a blockchain primitive whereas an Account and Address are. Instead, the **Wallet** is just software, external to the blockchain, that manages the cryptographic keys used to generate Addresses that identify a blockchain Account. + +Let’s walk through using the provenanced command to manage a local wallet, that should help clarify the difference between keys, accounts, addresses, and wallets. + +Using provenanced we can generate a local key pair and store it in the default, local Provenance Blockchain [Keyring](https://docs.cosmos.network/master/basics/accounts.html#keyring): + +$ provenanced \--testnet keys add my_test_key + +\- name: my_test_key + +type: local + +address: tp1z9f9thvdcytme5pc5gctvpu2qsjq7sqc3xt2f8 + +pubkey: '\{"@type":"/cosmos.crypto.secp256k1.PubKey","key":"A7inUApSgRNEqAuXtjGnSPQMnvEBMJJ3m7GzjlztQHiG"\}' + +mnemonic: "" + +\*\*Important\*\* write this mnemonic phrase in a safe place. + +It is the only way to recover your account if you ever forget your password. + +orchard image sister retreat kit actor expect cement cash guard swift eight public blouse impact ten segment group usage shoot hour achieve sugar enhance + +So what did we just do? We asked provenanced to generate a random [BIP39 mnemonic phrase](https://en.bitcoinwiki.org/wiki/Mnemonic_phrase), generate a key pair from the phrase, store the private key in a local filesystem wallet, and generate a Provenance Blockchain testnet compliant [Bech32 address](https://en.bitcoin.it/wiki/Bech32). + +💡 _The provenanced \--testnet keys add my_test_key will create a random mnemonic phrase when it is run. Therefore, when you enter this command the address will not match tp1z9f9thvdcytme5pc5gctvpu2qsjq7sqc3xt2f8. Use the address displayed to you in the following steps._ If _the address displayed to you matches tp1z9f9thvdcytme5pc5gctvpu2qsjq7sqc3xt2f8 **BUY A LOTTERY TICKET IMMEDIATELY** because the odds are astronomical._ + +At this point, the generated address tp1z9f9thvdcytme5pc5gctvpu2qsjq7sqc3xt2f8 is **not** a Provenance Blockchain account, it exists only in our local wallet: + +$ provenanced \--testnet query auth account tp1z9f9thvdcytme5pc5gctvpu2qsjq7sqc3xt2f8 \\ + +\--testnet \\ + +\--node=https://rpc.test.provenance.io:443 + +Error: rpc error: code \= NotFound desc \= rpc error: code \= NotFound desc \= account tp1z9f9thvdcytme5pc5gctvpu2qsjq7sqc3xt2f8 not found: key not found + +However, once we use the [testnet Provenance Blockchain Faucet](https://explorer.test.provenance.io/faucet) to transfer HASH to our address, it becomes an account. The faucet is simply a service on testnet that transfers HASH from a pre-funded faucet account to another account. Let’s use curl to post our address to the faucet: + +$ curl '\' \\ + +\-X 'POST' \-H 'Content-Type: application/json' \\ + +\--data-binary '\{"address":"tp1z9f9thvdcytme5pc5gctvpu2qsjq7sqc3xt2f8"\}' + +Now, let’s try the provenanced account query again: + +$ provenanced \--testnet query auth account tp1z9f9thvdcytme5pc5gctvpu2qsjq7sqc3xt2f8 \\ + +\--testnet \\ + +\--node=https://rpc.test.provenance.io:443 + +'@type': /cosmos.auth.v1beta1.BaseAccount + +account_number: "15099" + +address: tp1z9f9thvdcytme5pc5gctvpu2qsjq7sqc3xt2f8 + +pub_key: null + +sequence: "0" + +We did it\! We created a key pair, stored the private key in a local wallet, generated a Provenance Blockchain address from the public key, and sent HASH to the address on blockchain thereby creating a Provenance Blockchain account — what a time to be alive\! + +We can even query our HASH balance from the chain: + +$ provenanced q bank balances tp1z9f9thvdcytme5pc5gctvpu2qsjq7sqc3xt2f8 \\ + +\--testnet \\ + +\--node=https://rpc.test.provenance.io:443 + +balances: + +\- amount: "100000000000" + +denom: nhash + +pagination: + +next_key: null + +total: "0" + +💡 For extra fun, [view our account address in the Provenance Blockchain Explorer](https://explorer.test.provenance.io/accounts/tp1z9f9thvdcytme5pc5gctvpu2qsjq7sqc3xt2f8) to see what our transactions look like on chain. + +# **A Note About Blockchain Authentication** + +The principal way of authenticating a user is done using [digital signatures](https://en.wikipedia.org/wiki/Digital_signature). Users sign transactions using their own private key. Signature verification is done with the associated public key. For on-chain signature verification purposes, the public key is stored in the Account object (alongside other data required for a proper transaction validation) as shown in the previous section. + +# **Creating and Submitting Transactions** + +Now that we’ve set up our local wallet and have an account on the Provenance Blockchain, let’s have some _real_ fun\! + +Well, first, let’s get some more of that sweet sweet HASH to make sure we have enough [gas to cover our transaction costs](https://docs.provenance.io/blockchain/basics/gas-and-fees) (we’ll discuss gas in a moment). Hit up the faucet a couple more times: + +curl '\' \\ + +\-X 'POST' \-H 'Content-Type: application/json' \\ + +\--data-binary '\{"address":"tp1z9f9thvdcytme5pc5gctvpu2qsjq7sqc3xt2f8"\}' + +Now that we’re gassed up, let’s be charitable and transfer some of our HASH to tp1qgjnuqnrqwhg2kfl0dk9rhkcga5lehns2hdycm, they seem cool: + +$ provenanced tx bank send tp1z9f9thvdcytme5pc5gctvpu2qsjq7sqc3xt2f8 tp1qgjnuqnrqwhg2kfl0dk9rhkcga5lehns2hdycm 1nhash \\ + +\--testnet \\ + +\--node=https://rpc.test.provenance.io:443 \\ + +\--chain-id=pio-testnet-1 \\ + +\--gas auto \\ + +\--gas-adjustment 1.2 \\ + +\--gas-prices 1905nhash \\ + +\--output json | jq . + +gas estimate: 358060 + +``` +{"body":{"messages":\[{"@type":"/cosmos.bank.v1beta1.MsgSend","from_address":"tp1z9f9thvdcytme5pc5gctvpu2qsjq7sqc3xt2f8","to_address":"tp1qgjnuqnrqwhg2kfl0dk9rhkcga5lehns2hdycm","amount":\[{"denom":"nhash","amount":"1"}\]}\],"memo":"","timeout_height":"0","extension_options":\[\],"non_critical_extension_options":\[\]},"auth_info":{"signer_infos":\[\],"fee":{"amount":\[{"denom":"nhash","amount":"682104300"}\],"gas_limit":"358060","payer":"","granter":""}},"signatures":\[\]} +``` + +confirm transaction before signing and broadcasting \[y/N\]: y + +``` +{ + +"height": "7557035", + +"txhash": "2392447592C4EB3EE02E913AC702F47238A78D15932BAB7DE7DDCFED3D6C70B5", + +"codespace": "", + +"code": 0, + +"data": "0A1E0A1C2F636F736D6F732E62616E6B2E763162657461312E4D736753656E64", + +... snip ... + +"info": "", + +"gas_wanted": "358060", + +"gas_used": "309422", + +"tx": null, + +"timestamp": "", + +... snip ... + +} +``` + +Wow, that’s a lot of information\! So what did we do? Let’s analyze the initial request: + +$ provenanced tx bank send tp1z9f9thvdcytme5pc5gctvpu2qsjq7sqc3xt2f8 tp1qgjnuqnrqwhg2kfl0dk9rhkcga5lehns2hdycm 1nhash \\ + +\--testnet \\ + +\--node=https://rpc.test.provenance.io:443 \\ + +\--chain-id=pio-testnet-1 \\ + +\--gas auto \\ + +\--gas-adjustment 1.2 \\ + +\--gas-prices 1905nhash \\ + +\--output json | jq . + +gas estimate: 358060 + +``` +{"body":{"messages":\[{"@type":"/cosmos.bank.v1beta1.MsgSend","from_address":"tp1z9f9thvdcytme5pc5gctvpu2qsjq7sqc3xt2f8","to_address":"tp1qgjnuqnrqwhg2kfl0dk9rhkcga5lehns2hdycm","amount":\[{"denom":"nhash","amount":"1"}\]}\],"memo":"","timeout_height":"0","extension_options":\[\],"non_critical_extension_options":\[\]},"auth_info":{"signer_infos":\[\],"fee":{"amount":\[{"denom":"nhash","amount":"682104300"}\],"gas_limit":"358060","payer":"","granter":""}},"signatures":\[\]} +``` + +confirm transaction before signing and broadcasting \[y/N\]: y + +1. provenance tx bank send \ \ \ says we want to submit a send message to the bank module. The send message requires the address we’re sending from (tp1z9f9thvdcytme5pc5gctvpu2qsjq7sqc3xt2f8) and the address we’re sending to (tp1qgjnuqnrqwhg2kfl0dk9rhkcga5lehns2hdycm). Additionally, we indicate the amount of coin we want to send (1nhash) \- in this case 1 nhash. + +💡 _What the heck is nhash? nhash is the smallet unit of HASH, a nano-HASH, where 1 HASH \= 1,000,000,000 nhash._ + +1. \--testnet and \--node are the same as before: we’re using testnet keys and submitting to a public Provenance Blockchain Foundation node. What’s new is chain-id that’s a flag to identify which chain on testnet we’re using. +2. \--gas auto asks provenanced to estimate the gas needed for the transaction with an adjustment and a price. Gas is a consumable that is used to power the Provenance Blockchain. Each execution of the blockchain requires enough gas to complete the requires reads, writes, and computation encompassed by the submitted transaction(s). In our case, simply transferring 1 nhash to another address required 358060 gas. Fees limit the growth of the state stored by every full node and allow for general purpose censorship of transactions of little economic value. Fees are best suited as an anti-spam mechanism where validators are disinterested in the use of the network and identities of users. Fees are determined by the gas limits and gas prices transactions provide, wherefees \= ceil(gasLimit \* gasPrices). Transactions incur gas costs for all state reads/writes, signature verification, as well as costs proportional to the transaction size (this is known as gas needed). Thus, the amount of nhash we paid out of our account for the transaction is 682,104,300nhash (0.68210431 HASH). + +💡 _Gas, gas, and more gas: notice that the transaction response includes gas_wanted and a gas_used values. When we submitted our transaction we indicated we were willing to pay 358,060 units of gas (—gas autoestimated this for us) at 1905nhash per unit (\--gas-prices 1905nhash). However, the actual cost of the transaction was 309,422 units of gas \- so we could have paid less\! Refer to the [Cosmos Introduction to Gas and Fees](https://docs.cosmos.network/master/basics/gas-fees.html) and the [Provenance Blockchain Gas and Fees documentation](https://docs.provenance.io/blockchain/basics/gas-and-fees)._ + +Once we confirmed the transaction, it was signed using the private key portion of our key pair associated to address tp1z9f9thvdcytme5pc5gctvpu2qsjq7sqc3xt2f8 (remember we stored our key in a local wallet) and broadcast to the blockchain. + +We can [see the transaction in the Provenance Blockchain Explorer](https://explorer.test.provenance.io/tx/2392447592C4EB3EE02E913AC702F47238A78D15932BAB7DE7DDCFED3D6C70B5) using the txHash returned in the response 2392447592C4EB3EE02E913AC702F47238A78D15932BAB7DE7DDCFED3D6C70B5. + +We made it\! + +# **What Now?** + +We’ve only scratched the surface of Provenance Blockchain’s capabilities with our simple query and transaction submission. It may seem, from the start of this article, that I was depreciative of blockchain. That’s not the case, Provenance Blockchain is a **transformative force in the financial services industry.** Now that you understand how to interact with the Provenance Blockchain testnet, here’s some important modules to play around with: + +- [**Marker module**](https://github.com/provenance-io/provenance/tree/main/x/marker/spec) to track fungible and non-fungible resources on chain with fractional ownership and rules governing supply and exchange. +- [**Metadata module**](https://github.com/provenance-io/provenance/tree/main/x/metadata/spec) provides an on-chain storage and assertion facility for side-chained data including assets-of-value and NFTs. +- [**Smart contracts**](https://github.com/provenance-io/how-to-provenance/tree/main/provenance-smart-contract-example) to build next generation financial services applications on chain. diff --git a/docs/learn/purpose-built.mdx b/docs/learn/purpose-built.mdx new file mode 100644 index 000000000..51c31dde7 --- /dev/null +++ b/docs/learn/purpose-built.mdx @@ -0,0 +1,79 @@ +# Purpose-Built for Financial Services + +## What it means to be purpose-built for financial services + +Section 1 + +## Supports the full lifecycle of tokenized real-world financial assets + +Provenance Blockchain originated in 2018, and is a decentralized public blockchain built in the Cosmos ecosystem, with Cosmos SDKs. The architecture of the blockchain was designed intentionally to meet the specific and unique requirements of the financial services industry. + +Specific capabilities are engineered directly into the protocol to enable digital assets and privacy, and each of these specific capabilities are underpinned by unique features, modules and APIs. + +### Issuance + +Asset issuers require the ability to ensure compliance with complex rules. At the protocol-layer, create a digital asset and enact a set of protocol-enforced governing rules, such as limiting asset transactions to accounts with certain attestations. + +- [Marker Module](https://developer.provenance.io/docs/sdk/marker/) +- [Sanction / Quarantine Module](https://developer.provenance.io/docs/sdk/quarantine/) +- [Name / Attribute Module](https://developer.provenance.io/docs/sdk/attribute/) + +\{[Learn more about Insurance](https://provenance.io/solutions/capabilities/markers/)\} + +### Confidentiality + +Many participants require their information, positions, and trades to remain confidential. Provenance Blockchain features a data asset management system that includes data access permissioning, secure storage, and controls. + +- [Metadata Module](https://developer.provenance.io/docs/sdk/metadata/) +- [Prov WASM](https://developer.provenance.io/docs/sdk/metadata/) +- [Encrypted Object Store](https://developer.provenance.io/docs/pb/p8e/overview/encrypted-object-store/) + +\{[Learn more about Confidentiality](https://provenance.io/solutions/capabilities/confidentiality/)\} + +### Identity + +Financial relationships and transactions require a known identity. Provenance Blockchain enables the ability to record, reference, and manage attributes critical to financial service decisioning, governance, and compliance directly in the protocol-layer. + +- Self Custody Accounts +- Group & Institution Level Controls +- Account Attestation +- Fine-grained Authorization + +\{[Learn more about Identity](https://provenance.io/solutions/capabilities/identity/)\} + +### Interoperability + +Move digital assets, as well as tools and services, in and out of Zones and the Mainnet, and in and out of the Provenance Blockchain Network. + +- [Inter Blockchain Communications](https://developer.provenance.io/docs/build/libraries/#ibc) +- [IBC Hooks](https://developer.provenance.io/docs/sdk/ibchooks/) +- [Prov WASM](https://developer.provenance.io/docs/sdk/z-smart-contracts/) +- Bank & Account APIs + +\{[Learn more about Interoperability](https://provenance.io/solutions/capabilities/interoperability/)\} + +### Settlement + +Asset owners seek instant, secure and frictionless transactions. Provenance Blockchain features deterministic finality and protocol-embedded capabilities that protect participants from the risk of default of their counterparties. + +- [Marker Module](https://developer.provenance.io/docs/sdk/marker/) +- [Hold Module](https://developer.provenance.io/docs/sdk/hold/) +- [Exchange Module](https://developer.provenance.io/docs/sdk/exchange/) + +\{[Learn more about Settlement](https://provenance.io/solutions/capabilities/markers/)\} + +### Zones + +Provenance Blockchain is a network of zones, with a decentralized public mainnet, and permissioned zones that are interoperable with the mainnet. Zones support use cases that desire or require permissioned infrastructure. + +- [Inter Blockchain Communications](https://developer.provenance.io/docs/build/libraries/#ibc) + +\{[Learn more about Zones](https://provenance.io/solutions/capabilities/zones/)\} + +Section 2 + +## If you wonder what purpose-built means, take a look below + +import ReactPlayer from 'react-player/youtube' + + diff --git a/docusaurus.config.js b/docusaurus.config.js index 07e99939d..c401bee1c 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -2,11 +2,11 @@ // Note: type annotations allow type checking and IDEs autocompletion // To enable syntax highlighting -import { themes as prismThemes } from 'prism-react-renderer'; +import { themes as prismThemes } from 'prism-react-renderer' // To enable LaTex -const math = require('remark-math'); -const katex = require('rehype-katex'); +const math = require('remark-math') +const katex = require('rehype-katex') /** @type {import('@docusaurus/types').Config} */ const config = { @@ -95,60 +95,6 @@ const config = { src: 'img/prov-logo-full-color.png', }, items: [ - { - type: 'dropdown', - position: 'left', - label: 'Quick Start', - items: [ - { - label: 'Start Here', - to: 'docs/quick-start/start-here', - }, - { - label: 'Get a Wallet & Hash', - to: 'docs/quick-start/wallet-and-hash', - }, - { - label: 'Run a Node', - to: 'docs/pb/blockchain/running-a-node/running-a-node-1/', - }, - { - label: 'Become a Validator', - to: 'docs/quick-start/become-a-validator', - }, - { - label: 'Tokenize an Asset', - to: 'docs/learn/asset-lifecycle/markers', - }, - { - label: 'Build a dApp', - to: 'docs/quick-start/build-a-dapp', - }, - { - label: 'Write a Smart Contract', - to: 'docs/quick-start/write-a-smart-contract', - }, - ], - }, - { - label: 'Guides', - type: 'dropdown', - position: 'left', - items: [ - { - label: 'Asset Lifecycle Guide', - to: 'docs/learn/asset-lifecycle/assets-overview', - }, - { - label: "dApp Builder's Guide", - to: 'docs/learn/dapps/dapps-overview', - }, - { - label: 'More Guides & Tutorials', - to: 'docs/learn/learn-about', - }, - ], - }, { label: 'Build', type: 'dropdown', @@ -162,74 +108,45 @@ const config = { label: 'Clients', to: 'docs/build/clients', }, - { label: 'Libraries and APIs', to: 'docs/build/libraries', }, { - label: 'Grants Program', - to: 'https://provenance.io/grants', + label: 'Smart Contract Catalog', + to: 'docs/discover/smart-contract-catalog', }, - ], - }, - { - label: 'Discover', - type: 'dropdown', - position: 'left', - items: [ { - label: 'Provenance Explorer', - to: 'docs/discover/explorer', + label: 'CONNECT dApps', + to: 'https://provenance.io/connect', }, { label: 'Wallets', - to: 'docs/discover/wallets', - }, - { - label: 'Hash', - to: 'docs/discover/hash', - }, - { - label: 'USDF', - to: 'docs/discover/usdf', - }, - { - label: 'Smart Contract Catalog', - to: 'docs/discover/smart-contract-catalog', + to: 'https://www.provenance.io/connect/?tag=wallets', }, { - label: 'dApps', - to: 'https://provenance.io/connect', + label: 'HASH', + to: 'https://www.provenance.io/ecosystem/HASH/', }, ], }, { - label: 'Connect', + label: 'Tutorials', type: 'dropdown', position: 'left', items: [ { - label: 'GitHub', - to: 'https://github.com/provenance-io/', - }, - { - label: 'Discord', - to: 'https://discord.gg/kNZC8nwCFP', + label: 'Asset Lifecycle Guide', + to: 'docs/learn/asset-lifecycle/assets-overview', }, - { - label: 'LinkedIn', - to: 'https://www.linkedin.com/company/provenance-blockchain/', + label: 'dApps Builder Guide', + to: 'docs/learn/dapps/dapps-overview', }, { - label: 'Twitter', - to: 'https://twitter.com/provenancefdn', - }, - { - label: 'Blog', - to: 'https://medium.com/provenanceblockchain', + label: 'More Tutorials and Guides', + to: 'docs/learn/learn-about', }, ], }, @@ -299,11 +216,11 @@ const config = { name: 'docusaurus-tailwindcss', configurePostCss(postcssOptions) { // Appends TailwindCSS and AutoPrefixer. - postcssOptions.plugins.push(require('tailwindcss')); - postcssOptions.plugins.push(require('autoprefixer')); - return postcssOptions; + postcssOptions.plugins.push(require('tailwindcss')) + postcssOptions.plugins.push(require('autoprefixer')) + return postcssOptions }, - }; + } }, [ '@docusaurus/plugin-client-redirects', @@ -325,6 +242,6 @@ const config = { }, ], ], -}; +} -module.exports = config; +module.exports = config diff --git a/package.json b/package.json index 3f4cfb498..97a5dc0c7 100644 --- a/package.json +++ b/package.json @@ -16,28 +16,31 @@ "typecheck": "tsc" }, "dependencies": { - "@docusaurus/core": "^3.3.2", - "@docusaurus/plugin-client-redirects": "^3.3.2", - "@docusaurus/preset-classic": "^3.3.2", + "@docusaurus/core": "^3.5.2", + "@docusaurus/plugin-client-redirects": "^3.5.2", + "@docusaurus/preset-classic": "^3.5.2", "@heroicons/react": "^2.0.18", "@mdx-js/react": "^3.0.0", + "@uidotdev/usehooks": "^2.4.1", "clsx": "^2.0.0", "hast-util-is-element": "^3.0.0", "prism-react-renderer": "^2.2.0", "react": "^18.2.0", "react-dom": "^18.2.0", - "react-player": "^2.13.0", + "react-player": "^2.16.0", "redocusaurus": "^2.0.0", "rehype-katex": "^7.0.0", "remark-math": "^6.0.0" }, "devDependencies": { - "@docusaurus/module-type-aliases": "^3.0.1", - "@docusaurus/tsconfig": "^3.0.1", + "@docusaurus/module-type-aliases": "^3.5.2", + "@docusaurus/tsconfig": "^3.5.2", "@types/react": "^18.2.29", "autoprefixer": "^10.4.16", "postcss": "^8.4.31", - "tailwindcss": "^3.3.5", + "prettier": "^3.3.3", + "prettier-plugin-tailwindcss": "^0.6.8", + "tailwindcss": "^3.4.14", "typescript": "^5.2.2" }, "browserslist": { diff --git a/src/components/Button.tsx b/src/components/Button.tsx new file mode 100644 index 000000000..574e2d7af --- /dev/null +++ b/src/components/Button.tsx @@ -0,0 +1,75 @@ +import React, { AnchorHTMLAttributes } from 'react' +import clsx from 'clsx' +import Link from '@docusaurus/Link' + +export type ButtonProps = { + children: React.ReactNode + className?: string + showArrow?: boolean + linkTo?: string + btnType?: 'primary' | 'light' | 'outline' | 'icon' + size?: 'small' | 'medium' | 'large' | 'full' + [key: string]: any +} + +/** Creates a button on the page */ +export default function Button({ + children, + className = '', + showArrow = false, + linkTo = '', + btnType = 'primary', + size = 'medium', + ...rest +}: ButtonProps) { + return ( + + + + ) +} diff --git a/src/components/Card.tsx b/src/components/Card.tsx new file mode 100644 index 000000000..2e7e4d231 --- /dev/null +++ b/src/components/Card.tsx @@ -0,0 +1,45 @@ +import clsx from 'clsx' +import Link from '@docusaurus/Link' + +type CardProps = { + icon?: any + title: string + link?: string + children?: React.ReactNode + smallSpacing?: boolean +} + +export default function Card({ + icon, + title, + link, + children, + smallSpacing = false, +}: CardProps) { + return ( +
+ {icon && ( + {title} + )} +

+ {link ? ( + + {title} + > + + ) : ( + title + )} +

+ {children &&

{children}

} +
+ ) +} diff --git a/src/components/Cards.tsx b/src/components/Cards.tsx new file mode 100644 index 000000000..8f63b1bcc --- /dev/null +++ b/src/components/Cards.tsx @@ -0,0 +1,18 @@ +import clsx from 'clsx' + +export default function Cards({ className = '', children, maxCols = 3 }) { + return ( +
+ {children} +
+ ) +} diff --git a/src/components/Homepage/HomepageCollaborate.tsx b/src/components/Homepage/HomepageCollaborate.tsx new file mode 100644 index 000000000..66d7079ae --- /dev/null +++ b/src/components/Homepage/HomepageCollaborate.tsx @@ -0,0 +1,55 @@ +import Link from '@docusaurus/Link' +import Card from '@site/src/components/Card' +import Cards from '@site/src/components/Cards' + +// @ts-ignore-next-line +import Discord from '@site/static/img/icons/discord.png' +// @ts-ignore-next-line +import Meet from '@site/static/img/icons/meet.png' + +const CollaborateList = [ + { + icon: Discord, + title: 'Discord', + children: + 'Forums for conversations with other ecosystem participants, developers, and validators. The Provenance Blockchain Foundation actively moderates and participates in the forums.', + link: 'https://discord.com/invite/kNZC8nwCFP', + }, + { + icon: Meet, + title: 'Bi-Weekly Community Call', + children: ( + <> + Every two-weeks ecosystem participants, developers, and validators come + together to hear release schedule updates, discuss development + questions, and learn from live use cases. Join us on{' '} + + Google Meets + + . + + ), + link: 'https://hackmd.io/Dh8y3WlrTQCo0BVO1gAd5Q', + }, +] + +export default function Collaborate(): JSX.Element { + return ( +
+

+ Collaborate +

+

+ Join the development community conversations already happening. +

+ + {CollaborateList.map((props, idx) => ( + + ))} + +
+ ) +} diff --git a/src/components/Homepage/HomepageConnect.tsx b/src/components/Homepage/HomepageConnect.tsx new file mode 100644 index 000000000..f9275526c --- /dev/null +++ b/src/components/Homepage/HomepageConnect.tsx @@ -0,0 +1,41 @@ +import Button from '@site/src/components/Button' + +// @ts-ignore-next-line +import ConnectUrl from '@site/static/img/connect.png' +// @ts-ignore-next-line +import ConnectLogos from '@site/static/img/connect-logos.png' + +const ConnectBtn = props => ( + +) + +export default function Connect() { + return ( +
+
+

+ Connect +

+

+ Leverage industry-leading service providers - they’re integrated and + ready for you. +

+ +
+ +
+ Connect Logos +
+ +
+ +
+
+ ) +} diff --git a/src/components/Homepage/HomepageEssentials.tsx b/src/components/Homepage/HomepageEssentials.tsx new file mode 100644 index 000000000..9171a5e50 --- /dev/null +++ b/src/components/Homepage/HomepageEssentials.tsx @@ -0,0 +1,35 @@ +import Card from '@site/src/components/Card' +import Cards from '@site/src/components/Cards' + +const EssentialsList = [ + { + title: 'Purpose Built for Financial Services', + children: + 'A guide to what makes Provenance Blockchain purpose-built for financial services, its core tenets, and what underpins those tenets.', + link: '/docs/learn/purpose-built', + }, + { + title: 'Guided Tutorial: Start on Testnet', + children: + 'Don’t be intimidated by blockchain fundamentals, there’s nothing new and magical here. We’ll walk you step-by-step through important basics: accounts, wallets and coin transfers.', + link: '/docs/learn/Start-on-Testnet', + }, +] + +export default function Essentials(): JSX.Element { + return ( +
+

+ Essentials +

+

+ Provenance Blockchain is where the financial services industry operates. +

+ + {EssentialsList.map((props, idx) => ( + + ))} + +
+ ) +} diff --git a/src/components/Homepage/HomepageGetStarted.tsx b/src/components/Homepage/HomepageGetStarted.tsx new file mode 100644 index 000000000..fa37c0bad --- /dev/null +++ b/src/components/Homepage/HomepageGetStarted.tsx @@ -0,0 +1,79 @@ +import Button from '@site/src/components/Button' +import Card from '@site/src/components/Card' +import Cards from '@site/src/components/Cards' + +// @ts-ignore-next-line +import DappIcon from '@site/static/img/icons/dapp.png' +// @ts-ignore-next-line +import NodeIcon from '@site/static/img/icons/node.png' +// @ts-ignore-next-line +import SmartContractIcon from '@site/static/img/icons/smart-contract.png' +// @ts-ignore-next-line +import TokenIcon from '@site/static/img/icons/token.png' +// @ts-ignore-next-line +import ValidatorIcon from '@site/static/img/icons/validator.png' +// @ts-ignore-next-line +import WalletIcon from '@site/static/img/icons/wallet.png' + +const GetStartedList = [ + { + icon: WalletIcon, + title: 'Get a wallet & HASH', + children: + 'Provenance Blockchain developers can start by first setting up an account holding HASH. HASH will be needed to pay fees associated with submitting a transaction to the blockchain.', + link: '/docs/quick-start/wallet-and-hash', + }, + { + icon: NodeIcon, + title: 'Set-up & run a node', + children: + 'Nodes on the Provenance Blockchain network are simply servers that can be configured for seeding, data archival, and validation.', + link: '/docs/pb/blockchain/running-a-node/running-a-node-1/', + }, + { + icon: ValidatorIcon, + title: 'Become a Validator', + children: + 'Validator nodes perform the critical function of proposing and validating transactions on the Provenance Blockchain.', + link: '/docs/quick-start/become-a-validator', + }, + { + icon: TokenIcon, + title: 'Tokenize an asset', + children: + 'Asset tokenization is the process of converting rights to an asset into a digital token, allowing the asset to be easily transferable, fractional, and tradable on various markets.', + link: '/docs/learn/asset-lifecycle/markers', + }, + { + icon: DappIcon, + title: 'Integrate a dApp', + children: + 'Connect and operate your decentralized application (dApp) on Provenance Blockchain.', + link: '/docs/quick-start/build-a-dapp', + }, + { + icon: SmartContractIcon, + title: 'Write a Smart Contract', + children: + 'Build and propose a new smart contract to Provenance Blockchain.', + link: '/docs/quick-start/write-a-smart-contract', + }, +] + +export default function GetStarted() { + return ( +
+

+ Get Started +

+ + {GetStartedList.map((props, idx) => ( + + ))} + + +
+ ) +} diff --git a/src/components/Homepage/HomepageHeader.tsx b/src/components/Homepage/HomepageHeader.tsx new file mode 100644 index 000000000..311386091 --- /dev/null +++ b/src/components/Homepage/HomepageHeader.tsx @@ -0,0 +1,22 @@ +import Button from '@site/src/components/Button' + +export default function HomepageHeader() { + return ( +
+
+

+ Build Here 🎯 +

+

+ Find the resources needed to rapidly build, test, and deploy + applications that make financial services operate better. +

+

+ +

+
+
+ ) +} diff --git a/src/components/Homepage/HomepageLearn.tsx b/src/components/Homepage/HomepageLearn.tsx new file mode 100644 index 000000000..2e6a13677 --- /dev/null +++ b/src/components/Homepage/HomepageLearn.tsx @@ -0,0 +1,85 @@ +import { useEffect, useState } from 'react' +import Card from '@site/src/components/LearnCard' +import Cards from '@site/src/components/Cards' +import PaginationClicker from '@site/src/components/PaginationClicker' +import useItemsPerPage from '@site/src/hooks/useItemsPerPage' + +const LearnList = [ + { + title: + 'Eliminate Counterparty Risks and Inefficiencies from Financial Transactions', + tag: 'Education', + description: + 'Introducing the Hold Module, a groundbreaking innovation from Provenance Blockchain.', + link: 'https://provenance.io/learn/posts/hold-module/', + }, + { + title: 'The Power Cosmos Group Module Enables for Financial Services', + tag: 'Education', + description: + 'The Cosmos SDK version 0.46.0 Group Module is powerful core functionality for financial use cases.', + link: 'https://provenance.io/learn/posts/Cosmos-SDK-Group-Module/', + }, + { + title: 'Provenance Blockchain Markers vs. ERC3643 Smart Contract Tokens', + tag: 'Education', + description: + 'Unlocking the power of Provenance Blockchain: Enhanced security token management', + link: 'https://provenance.io/learn/posts/Markers-vs-ERC3643/', + }, + { + title: 'Seamless Transactions Across Chains: Interoperability', + tag: 'Education', + description: + 'Interoperability refers to the ability of distinct blockchain networks to communicate, exchange data, and share resources seamlessly.', + link: 'https://provenance.io/learn/posts/Blockchain-Interoperability-Introduced/', + }, + { + title: 'Blockchains: Private vs. Public', + tag: 'Education', + description: + 'Understanding the Differences and Benefits between decentralized public and private blockchains.', + link: 'https://provenance.io/learn/posts/Private-vs-Public-Blockchain/', + }, + { + title: 'Five Reasons Why Provenance Blockchain was Built with Cosmos SDKs', + tag: 'Education', + description: + 'The Cosmos SDKs bring key foundational attributes necessary for an institutional-grade and enduring blockchain.', + link: 'https://provenance.io/learn/posts/Built-With-Cosmos-SDKs/', + }, +] + +export default function Learn() { + const [currentNumber, setCurrentNumber] = useState(1) + const itemsPerPage = useItemsPerPage() + const [paginatedList, setPaginatedList] = useState(LearnList) + + useEffect(() => { + const start = (currentNumber - 1) * itemsPerPage + const end = start + itemsPerPage + setPaginatedList(LearnList.slice(start, end)) + }, [currentNumber, itemsPerPage]) + + return ( +
+

+ Learn +

+

+ There’s a lot going on under the hood of Provenance Blockchain. +

+ + {paginatedList.map((props, idx) => ( + + ))} + + + +
+ ) +} diff --git a/src/components/Homepage/HomepageTutorials.tsx b/src/components/Homepage/HomepageTutorials.tsx new file mode 100644 index 000000000..968f05284 --- /dev/null +++ b/src/components/Homepage/HomepageTutorials.tsx @@ -0,0 +1,43 @@ +import Button from '@site/src/components/Button' +import Card from '@site/src/components/Card' +import Cards from '@site/src/components/Cards' + +const TutorialsList = [ + { + title: 'Set-up Your First Validator Node', + link: 'https://medium.com/provenanceblockchain/nitro-enclave-based-provenance-validator-882122714415', + }, + { + title: 'Build Your First dApp', + link: 'https://provenance.io/learn/posts/Build-Your-First-dApp/', + }, + { + title: 'Connect dApps to WalletConnect', + link: 'https://provenance.io/learn/posts/Creating-dApps-via-WalletConnect-JS/', + }, + { + title: 'ProvWasm Smart Contract', + link: 'https://github.com/provenance-io/provwasm/blob/main/docs/tutorial/01-overview.md', + }, +] + +export default function Tutorials() { + return ( +
+

+ Tutorials +

+

+ Need a little help getting started? We’ve got you covered. +

+ + {TutorialsList.map((props, idx) => ( + + ))} + + +
+ ) +} diff --git a/src/components/HomepageFeatures/index.tsx b/src/components/HomepageFeatures/index.tsx deleted file mode 100644 index e40d3aa6e..000000000 --- a/src/components/HomepageFeatures/index.tsx +++ /dev/null @@ -1,79 +0,0 @@ -import React from 'react'; -import clsx from 'clsx'; -import styles from './styles.module.css'; -import { - LightBulbIcon, - PuzzlePieceIcon, - UserGroupIcon, -} from '@heroicons/react/24/outline'; - -type FeatureItem = { - title: string; - Svg: React.ComponentType>; - description: JSX.Element; -}; - -const FeatureList: FeatureItem[] = [ - { - title: 'Mission', - Svg: PuzzlePieceIcon, - description: ( - <> - Provenance Blockchain is a public open source blockchain designed and - developed to deliver material business benefits to financial services - participants and developers through its ledger, registry and exchange - capabilities across multiple financial assets and markets. - - ), - }, - { - title: 'Ideation', - Svg: LightBulbIcon, - description: ( - <> - The leading public open-source blockchain for financial services, - leveraged by over 60 financial institutions and operating at scale today - with billions of dollars of digital financial assets transacted across - lending, payments and marketplaces. - - ), - }, - { - title: 'Community', - Svg: UserGroupIcon, - description: ( - <> - Join the Provenance Blockchain Community and be a part of the change - that is coming to financial services. - - ), - }, -]; - -function Feature({ title, Svg, description }: FeatureItem) { - return ( -
-
- -
-
-

{title}

-

{description}

-
-
- ); -} - -export default function HomepageFeatures(): JSX.Element { - return ( -
-
-
- {FeatureList.map((props, idx) => ( - - ))} -
-
-
- ); -} diff --git a/src/components/HomepageFeatures/styles.module.css b/src/components/HomepageFeatures/styles.module.css deleted file mode 100644 index b248eb2e5..000000000 --- a/src/components/HomepageFeatures/styles.module.css +++ /dev/null @@ -1,11 +0,0 @@ -.features { - display: flex; - align-items: center; - padding: 2rem 0; - width: 100%; -} - -.featureSvg { - height: 200px; - width: 200px; -} diff --git a/src/components/LearnCard.tsx b/src/components/LearnCard.tsx new file mode 100644 index 000000000..52dcdf3cf --- /dev/null +++ b/src/components/LearnCard.tsx @@ -0,0 +1,30 @@ +import Button from '@site/src/components/Button' + +type LearnCardProps = { + description: string + link?: string + tag: string + title: string +} + +export default function LearnCard({ + description, + link, + tag, + title, +}: LearnCardProps) { + return ( +
+
+ {tag} +

+ {title} +

+

{description}

+
+ +
+ ) +} diff --git a/src/components/PaginationClicker.tsx b/src/components/PaginationClicker.tsx new file mode 100644 index 000000000..fdcce4b61 --- /dev/null +++ b/src/components/PaginationClicker.tsx @@ -0,0 +1,96 @@ +import clsx from 'clsx' +import React from 'react' + +const Clicker = ({ + side = 'right', + onClick, +}: { + side?: 'left' | 'right' + onClick: () => void +}) => ( +
+ {side === 'left' ? '<' : '>'} +
+) + +export default function PaginationClicker({ + currentNumber, + setCurrentNumber, + totalItems, +}: { + currentNumber: number + totalItems: number + setCurrentNumber: React.Dispatch> +}) { + // Create an array of the numbers to display + let numArray: number[] = [] + // If less than 4, just show the number of total items + if (totalItems <= 4) { + for (let i = 1; i <= totalItems; i++) { + numArray.push(i) + } + } + // If greater than 4, only show 4 at a time + else if (currentNumber === 1) { + numArray = [currentNumber, 2, 3, 4] + } else if (currentNumber <= totalItems - 2) { + numArray = [ + currentNumber - 1, + currentNumber, + currentNumber + 1, + currentNumber + 2, + ] + } else if (currentNumber == totalItems - 1) { + numArray = [ + currentNumber - 2, + currentNumber - 1, + currentNumber, + currentNumber + 1, + ] + } else if (currentNumber == totalItems) { + numArray = [ + currentNumber - 3, + currentNumber - 2, + currentNumber - 1, + currentNumber, + ] + } + return ( +
+ + setCurrentNumber( + currentNumber === 1 ? currentNumber : currentNumber - 1, + ) + } + /> + {numArray.map(num => ( +
setCurrentNumber(num)} + > + {num} +
+ ))} + + setCurrentNumber( + currentNumber === totalItems ? totalItems : currentNumber + 1, + ) + } + /> +
+ ) +} diff --git a/src/css/custom.css b/src/css/custom.css index 17da36334..27291af89 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -4,13 +4,14 @@ * work well for content-centric websites. */ @import url("https://fonts.googleapis.com/css2?family=Montserrat:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap"); +@import url(../../static/font/MaisonNeue/maison-neue.css); @tailwind base; @tailwind components; @tailwind utilities; /* You can override the default Infima variables here. */ :root { - --ifm-font-family-base: "Montserrat"; + --ifm-font-family-base: "Maison Neue", sans-serif; --ifm-color-primary: #3463d9; --ifm-color-primary-dark: #2649a1; --ifm-color-primary-darker: #0f2d79; @@ -39,21 +40,21 @@ margin: 16px 0; } -.section-heading > .menu__list-item-collapsible > .menu__link--active { +.section-heading>.menu__list-item-collapsible>.menu__link--active { color: var(--ifm-menu-color); } -.section-heading > .menu__list-item-collapsible > .menu__link { +.section-heading>.menu__list-item-collapsible>.menu__link { opacity: 0.75; text-transform: uppercase; font-size: 0.75em; } -.section-heading > .menu__list-item-collapsible:hover { +.section-heading>.menu__list-item-collapsible:hover { background: none; } -.section-heading > .menu__list { +.section-heading>.menu__list { padding-left: 0; } @@ -68,11 +69,11 @@ height: 70px; } -.navbar__brand > .navbar__logo { +.navbar__brand>.navbar__logo { height: 50px; width: 150px; } -html[data-theme="dark"] .navbar__brand > .navbar__logo { +html[data-theme="dark"] .navbar__brand>.navbar__logo { filter: brightness(0) invert(1); -} +} \ No newline at end of file diff --git a/src/hooks/useItemsPerPage.ts b/src/hooks/useItemsPerPage.ts new file mode 100644 index 000000000..a0165a8b4 --- /dev/null +++ b/src/hooks/useItemsPerPage.ts @@ -0,0 +1,19 @@ +import { useMediaQuery } from '@uidotdev/usehooks' +import { useEffect, useState } from 'react' + +export default function useItemsPerPage() { + const [itemsPerPage, setItemsPerPage] = useState(1) + const isSmallDevice = useMediaQuery('only screen and (max-width : 767px)') + const isMediumDevice = useMediaQuery( + 'only screen and (min-width : 768px) and (max-width : 1023px)', + ) + const isLargeDevice = useMediaQuery('only screen and (min-width : 1024px)') + + useEffect(() => { + if (isSmallDevice) setItemsPerPage(1) + if (isMediumDevice) setItemsPerPage(2) + if (isLargeDevice) setItemsPerPage(3) + }, [isSmallDevice, isMediumDevice, isLargeDevice]) + + return itemsPerPage +} diff --git a/src/pages/index.module.css b/src/pages/index.module.css deleted file mode 100644 index 9f71a5da7..000000000 --- a/src/pages/index.module.css +++ /dev/null @@ -1,23 +0,0 @@ -/** - * CSS files with the .module.css suffix will be treated as CSS modules - * and scoped locally. - */ - -.heroBanner { - padding: 4rem 0; - text-align: center; - position: relative; - overflow: hidden; -} - -@media screen and (max-width: 996px) { - .heroBanner { - padding: 2rem; - } -} - -.buttons { - display: flex; - align-items: center; - justify-content: center; -} diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 808170791..6c9406a77 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -1,43 +1,33 @@ -import React from "react"; -import clsx from "clsx"; -import Link from "@docusaurus/Link"; -import useDocusaurusContext from "@docusaurus/useDocusaurusContext"; -import Layout from "@theme/Layout"; -import HomepageFeatures from "@site/src/components/HomepageFeatures"; - -import styles from "./index.module.css"; - -function HomepageHeader() { - const { siteConfig } = useDocusaurusContext(); - return ( -
-
-

{siteConfig.title}

-

{siteConfig.tagline}

-
- - Get Started - -
-
-
- ); -} +import React from 'react' +import { useIsClient } from '@uidotdev/usehooks' +import useDocusaurusContext from '@docusaurus/useDocusaurusContext' +import Layout from '@theme/Layout' +import HomepageEssentials from '@site/src/components/Homepage/HomepageEssentials' +import HomepageHeader from '@site/src/components/Homepage/HomepageHeader' +import HomepageGetStarted from '@site/src/components/Homepage/HomepageGetStarted' +import HomepageTutorials from '@site/src/components/Homepage/HomepageTutorials' +import HomepageConnect from '@site/src/components/Homepage/HomepageConnect' +import HomepageLearn from '@site/src/components/Homepage/HomepageLearn' +import HomepageCollaborate from '@site/src/components/Homepage/HomepageCollaborate' export default function Home(): JSX.Element { - const { siteConfig } = useDocusaurusContext(); + const { siteConfig } = useDocusaurusContext() + const isClient = useIsClient() + return ( -
- +
+ + + + + {isClient && } +
- ); + ) } diff --git a/static/font/MaisonNeue/MaisonNeueExtendedWEB-Bold.woff b/static/font/MaisonNeue/MaisonNeueExtendedWEB-Bold.woff new file mode 100644 index 000000000..cf56e934b Binary files /dev/null and b/static/font/MaisonNeue/MaisonNeueExtendedWEB-Bold.woff differ diff --git a/static/font/MaisonNeue/MaisonNeueExtendedWEB-Bold.woff2 b/static/font/MaisonNeue/MaisonNeueExtendedWEB-Bold.woff2 new file mode 100644 index 000000000..a640420de Binary files /dev/null and b/static/font/MaisonNeue/MaisonNeueExtendedWEB-Bold.woff2 differ diff --git a/static/font/MaisonNeue/MaisonNeueExtendedWEB-Demi.woff b/static/font/MaisonNeue/MaisonNeueExtendedWEB-Demi.woff new file mode 100644 index 000000000..cd7a33d78 Binary files /dev/null and b/static/font/MaisonNeue/MaisonNeueExtendedWEB-Demi.woff differ diff --git a/static/font/MaisonNeue/MaisonNeueExtendedWEB-Demi.woff2 b/static/font/MaisonNeue/MaisonNeueExtendedWEB-Demi.woff2 new file mode 100644 index 000000000..3042cde77 Binary files /dev/null and b/static/font/MaisonNeue/MaisonNeueExtendedWEB-Demi.woff2 differ diff --git a/static/font/MaisonNeue/MaisonNeueWEB-Bold.woff b/static/font/MaisonNeue/MaisonNeueWEB-Bold.woff new file mode 100644 index 000000000..b6bed9481 Binary files /dev/null and b/static/font/MaisonNeue/MaisonNeueWEB-Bold.woff differ diff --git a/static/font/MaisonNeue/MaisonNeueWEB-Bold.woff2 b/static/font/MaisonNeue/MaisonNeueWEB-Bold.woff2 new file mode 100644 index 000000000..d803b7f31 Binary files /dev/null and b/static/font/MaisonNeue/MaisonNeueWEB-Bold.woff2 differ diff --git a/static/font/MaisonNeue/MaisonNeueWEB-Book.woff b/static/font/MaisonNeue/MaisonNeueWEB-Book.woff new file mode 100644 index 000000000..581f28e7c Binary files /dev/null and b/static/font/MaisonNeue/MaisonNeueWEB-Book.woff differ diff --git a/static/font/MaisonNeue/MaisonNeueWEB-Book.woff2 b/static/font/MaisonNeue/MaisonNeueWEB-Book.woff2 new file mode 100644 index 000000000..5fa90bfbc Binary files /dev/null and b/static/font/MaisonNeue/MaisonNeueWEB-Book.woff2 differ diff --git a/static/font/MaisonNeue/MaisonNeueWEB-BookItalic.woff b/static/font/MaisonNeue/MaisonNeueWEB-BookItalic.woff new file mode 100644 index 000000000..d537f9cd8 Binary files /dev/null and b/static/font/MaisonNeue/MaisonNeueWEB-BookItalic.woff differ diff --git a/static/font/MaisonNeue/MaisonNeueWEB-BookItalic.woff2 b/static/font/MaisonNeue/MaisonNeueWEB-BookItalic.woff2 new file mode 100644 index 000000000..304f714da Binary files /dev/null and b/static/font/MaisonNeue/MaisonNeueWEB-BookItalic.woff2 differ diff --git a/static/font/MaisonNeue/MaisonNeueWEB-Demi.woff b/static/font/MaisonNeue/MaisonNeueWEB-Demi.woff new file mode 100644 index 000000000..d2439bb97 Binary files /dev/null and b/static/font/MaisonNeue/MaisonNeueWEB-Demi.woff differ diff --git a/static/font/MaisonNeue/MaisonNeueWEB-Demi.woff2 b/static/font/MaisonNeue/MaisonNeueWEB-Demi.woff2 new file mode 100644 index 000000000..147a0b219 Binary files /dev/null and b/static/font/MaisonNeue/MaisonNeueWEB-Demi.woff2 differ diff --git a/static/font/MaisonNeue/MaisonNeueWEB-Light.woff b/static/font/MaisonNeue/MaisonNeueWEB-Light.woff new file mode 100644 index 000000000..9f5662d85 Binary files /dev/null and b/static/font/MaisonNeue/MaisonNeueWEB-Light.woff differ diff --git a/static/font/MaisonNeue/MaisonNeueWEB-Light.woff2 b/static/font/MaisonNeue/MaisonNeueWEB-Light.woff2 new file mode 100644 index 000000000..dc0591885 Binary files /dev/null and b/static/font/MaisonNeue/MaisonNeueWEB-Light.woff2 differ diff --git a/static/font/MaisonNeue/Milieu Grotesque Additional Terms.pdf b/static/font/MaisonNeue/Milieu Grotesque Additional Terms.pdf new file mode 100644 index 000000000..a66315247 Binary files /dev/null and b/static/font/MaisonNeue/Milieu Grotesque Additional Terms.pdf differ diff --git a/static/font/MaisonNeue/Milieu Grotesque Webfont Licence.pdf b/static/font/MaisonNeue/Milieu Grotesque Webfont Licence.pdf new file mode 100644 index 000000000..b73706885 Binary files /dev/null and b/static/font/MaisonNeue/Milieu Grotesque Webfont Licence.pdf differ diff --git a/static/font/MaisonNeue/Milieu Grotesque Webfonts Tech Info.pdf b/static/font/MaisonNeue/Milieu Grotesque Webfonts Tech Info.pdf new file mode 100644 index 000000000..14d1721d5 Binary files /dev/null and b/static/font/MaisonNeue/Milieu Grotesque Webfonts Tech Info.pdf differ diff --git a/static/font/MaisonNeue/maison-neue.css b/static/font/MaisonNeue/maison-neue.css new file mode 100644 index 000000000..a2989502f --- /dev/null +++ b/static/font/MaisonNeue/maison-neue.css @@ -0,0 +1,53 @@ +@font-face { + font-family: 'MaisonNeue'; + src: url('./MaisonNeueWEB-Book.woff2') format('woff2'), + url('./MaisonNeueWEB-Book.woff') format('woff'); +} + +@font-face { + font-family: 'MaisonNeue'; + src: url('./MaisonNeueWEB-Bold.woff2') format('woff2'), + url('./MaisonNeueWEB-Bold.woff') format('woff'); + font-weight: bold; + font-style: normal; +} + +@font-face { + font-family: 'MaisonNeue'; + src: url('./MaisonNeueWEB-Demi.woff2') format('woff2'), + url('./MaisonNeueWEB-Demi.woff') format('woff'); + font-weight: semibold; + font-style: normal; +} + +@font-face { + font-family: 'MaisonNeue'; + src: url('./MaisonNeueWEB-BookItalic.woff2') format('woff2'), + url('./MaisonNeueWEB-BookItalic.woff') format('woff'); + font-weight: normal; + font-style: italic; +} + +@font-face { + font-family: 'MaisonNeue'; + src: url('./MaisonNeueWEB-Light.woff2') format('woff2'), + url('./MaisonNeueWEB-Light.woff') format('woff'); + font-weight: lighter; + font-style: normal; +} + +@font-face { + font-family: 'MaisonNeueExtended'; + src: url('./MaisonNeueExtendedWEB-Bold.woff2') format('woff2'), + url('./MaisonNeueExtendedWEB-Bold.woff') format('woff'); + font-weight: bold; + font-style: normal; +} + +@font-face { + font-family: 'MaisonNeueExtended'; + src: url('./MaisonNeueExtendedWEB-Demi.woff2') format('woff2'), + url('./MaisonNeueExtendedWEB-Demi.woff') format('woff'); + font-weight: semibold; + font-style: normal; +} diff --git a/static/font/htaccess b/static/font/htaccess new file mode 100644 index 000000000..949bc29e0 --- /dev/null +++ b/static/font/htaccess @@ -0,0 +1,4 @@ +SetEnvIf Referer example\.com localreferer + + Order deny,allow Deny from all Allow from env=localreferer + diff --git a/static/img/connect-logos.png b/static/img/connect-logos.png new file mode 100644 index 000000000..cf66f8803 Binary files /dev/null and b/static/img/connect-logos.png differ diff --git a/static/img/connect.png b/static/img/connect.png new file mode 100644 index 000000000..987997443 Binary files /dev/null and b/static/img/connect.png differ diff --git a/static/img/connect.svg b/static/img/connect.svg new file mode 100644 index 000000000..0bb4b9fe2 --- /dev/null +++ b/static/img/connect.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/static/img/header-flare.svg b/static/img/header-flare.svg new file mode 100644 index 000000000..f45978766 --- /dev/null +++ b/static/img/header-flare.svg @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/img/icons/dapp.png b/static/img/icons/dapp.png new file mode 100644 index 000000000..779a721ab Binary files /dev/null and b/static/img/icons/dapp.png differ diff --git a/static/img/icons/dapp.svg b/static/img/icons/dapp.svg new file mode 100644 index 000000000..a614460d3 --- /dev/null +++ b/static/img/icons/dapp.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/static/img/icons/discord.png b/static/img/icons/discord.png new file mode 100644 index 000000000..6c2070316 Binary files /dev/null and b/static/img/icons/discord.png differ diff --git a/static/img/icons/discord.svg b/static/img/icons/discord.svg new file mode 100644 index 000000000..718a3b125 --- /dev/null +++ b/static/img/icons/discord.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/icons/meet.png b/static/img/icons/meet.png new file mode 100644 index 000000000..fc8b01e55 Binary files /dev/null and b/static/img/icons/meet.png differ diff --git a/static/img/icons/meet.svg b/static/img/icons/meet.svg new file mode 100644 index 000000000..ed15af5b0 --- /dev/null +++ b/static/img/icons/meet.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/static/img/icons/node.png b/static/img/icons/node.png new file mode 100644 index 000000000..55ad590f7 Binary files /dev/null and b/static/img/icons/node.png differ diff --git a/static/img/icons/node.svg b/static/img/icons/node.svg new file mode 100644 index 000000000..1bd6c3687 --- /dev/null +++ b/static/img/icons/node.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/img/icons/smart-contract.png b/static/img/icons/smart-contract.png new file mode 100644 index 000000000..22ecf9ecd Binary files /dev/null and b/static/img/icons/smart-contract.png differ diff --git a/static/img/icons/smart-contract.svg b/static/img/icons/smart-contract.svg new file mode 100644 index 000000000..d7a33a8e4 --- /dev/null +++ b/static/img/icons/smart-contract.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/img/icons/token.png b/static/img/icons/token.png new file mode 100644 index 000000000..b2c7bca48 Binary files /dev/null and b/static/img/icons/token.png differ diff --git a/static/img/icons/token.svg b/static/img/icons/token.svg new file mode 100644 index 000000000..8e6f30a11 --- /dev/null +++ b/static/img/icons/token.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/img/icons/validator.png b/static/img/icons/validator.png new file mode 100644 index 000000000..5af29896d Binary files /dev/null and b/static/img/icons/validator.png differ diff --git a/static/img/icons/validator.svg b/static/img/icons/validator.svg new file mode 100644 index 000000000..e8f48dfcb --- /dev/null +++ b/static/img/icons/validator.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/img/icons/wallet.png b/static/img/icons/wallet.png new file mode 100644 index 000000000..e0725d7a7 Binary files /dev/null and b/static/img/icons/wallet.png differ diff --git a/static/img/icons/wallet.svg b/static/img/icons/wallet.svg new file mode 100644 index 000000000..4c2dc585a --- /dev/null +++ b/static/img/icons/wallet.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/img/mid-section-flare.png b/static/img/mid-section-flare.png new file mode 100644 index 000000000..be5ce66e0 Binary files /dev/null and b/static/img/mid-section-flare.png differ diff --git a/tailwind.config.js b/tailwind.config.js index 023e19d39..994d14878 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -1,3 +1,9 @@ +const defaultTheme = require('tailwindcss/defaultTheme') + +/* +colors: https://www.figma.com/file/JePDx60O9FB8JD06Irf7Gu/Provenance-Style-Guide?node-id=2%3A632&t=mEB8VgcTQaf1MjWP-0 +fonts: https://www.figma.com/file/JePDx60O9FB8JD06Irf7Gu/Provenance-Style-Guide?node-id=0%3A1&t=mEB8VgcTQaf1MjWP-0 +*/ /** @type {import('tailwindcss').Config} */ module.exports = { content: [ @@ -5,8 +11,193 @@ module.exports = { './docs/**/*.{md,mdx,js,jsx,ts,tsx}', ], corePlugins: { preflight: false }, + safelist: [ + { + pattern: /gap-.+|grid-cols-.+/, + variants: ['md', 'lg'], + }, + { + pattern: /bg-.+|text-.+/, + }, + { + pattern: /border-b-gray-.+|border-b-blue-.+|border-b-\d+/, + }, + { + pattern: /col-span-.+/, + variants: ['md', 'lg'], + }, + { + pattern: /pl-.+|pr-.+|pb-.+|pt-.+|mb-.+|mt-.+/, + variants: ['md'], + }, + ], theme: { - extend: {}, + container: { + padding: { + DEFAULT: '2rem', + md: '3rem', + lg: '4rem', + xl: '6rem', + }, + }, + colors: { + blue: { + 100: '#F2F5FD', + 200: '#DDE5F8', + 300: '#B2C5F0', + 400: '#7F9EE6', + 500: '#547DDE', + 600: '#2452BC', + 700: '#18367C', + 800: '#11275A', + 900: '#08132B', + }, + grey: { + 100: '#F8F9FA', + 200: '#F0F2F4', + 300: '#DEE2E8', + 400: '#B6BEC9', + 500: '#8C98A6', + 600: '#5F6E81', + 700: '#3D4B5C', + 800: '#273544', + 900: '#0A1828', + }, + gray: { + 100: '#F8F9FA', + 200: '#F0F2F4', + 300: '#DEE2E8', + 400: '#B6BEC9', + 500: '#8C98A6', + 600: '#5F6E81', + 700: '#3D4B5C', + 800: '#273544', + 900: '#0A1828', + }, + yellow: { + 100: '#FAFCE9', + 200: '#F6FADB', + 300: '#F2F7CA', + 400: '#E9F2A6', + 500: '#D7E85F', + 600: '#BCD11F', + 700: '#90A017', + 800: '#50590D', + 900: '#141603', + }, + pink: { + 100: '#F8EAF1', + 200: '#F1D5E3', + 300: '#E3ABC7', + 400: '#D581AB', + 500: '#C85B91', + 600: '#A83870', + 700: '#73264C', + 800: '#501B36', + 900: '#260D19', + }, + red: { + 100: '#FFF0F3', + 200: '#FFC7D3', + 300: '#FF8FA6', + 400: '#FF577A', + 500: '#FF2451', + 600: '#EB0031', + 700: '#990020', + 800: '#6B0016', + 900: '#33000B', + }, + neutral: { + 600: '#1A1B22', + }, + green: { + 100: '#EDF7F7', + 200: '#D8EEED', + 300: '#B2DCDA', + 400: '#8BCBC8', + 500: '#68BBB8', + 600: '#3F8D8A', + 700: '#387D7A', + 800: '#214A48', + 900: '#102322', + }, + white: '#FFFFFF', + black: '#000000', + transparent: 'transparent', + }, + fontSize: { + xs: ['0.75rem', '1.125rem'], //12px, 18px + sm: ['0.875rem', '1.25rem'], //14px, 20px + base: ['1rem', '1.5rem'], //16px, 24px + DEFAULT: ['1rem', '1.5rem'], //16px, 24px + lg: ['1.125rem', '1.6875rem'], // 18px, 27px + xl: ['1.375rem', '2.0625rem'], // 22px, 33px + '2xl': ['1.625rem', '2.4375rem'], //26px, 39px + '3xl': ['1.875rem', '2.4375rem'], //30px, 39px + '4xl': ['2.25rem', '2.9375rem'], //36px, 47px + '5xl': ['2.625rem', '3.4375rem'], //42px, 55px + '6xl': ['3.125rem', '4.0625rem'], //50px, 65px + '7xl': ['3.625rem', '4.75rem'], //58px, 76px + '8xl': ['4.25rem', '5.5625rem'], //68px, 89px + '9xl': ['4.75rem', '6.175rem'], //76px, 98.8px + '12xl': ['9rem', '11.6875rem'], //144px, 187px + }, + extend: { + backgroundImage: { + 'header-flare': "url('../../static/img/header-flare.svg')", + 'mid-section-flare': "url('../../static/img/mid-section-flare.png')", + }, + backgroundSize: { + 'size-step': '42px, 48px', + }, + boxShadow: { + standard: '0px 4px 8px rgba(0, 0, 0, 0.25)', + 'standard-bottom-only': '0px 4px 4px rgba(0, 0, 0, 0.25)', + }, + gridTemplateColumns: { + 'input-btn': '1fr 100px', + }, + gridTemplateRows: { + 'blog-card': '1fr auto 1fr', + }, + maxWidth: { + page: '1440px', + }, + translate: { + center: '-50%, -10%', + }, + fontFamily: { + MaisonNeue: ['MaisonNeue', ...defaultTheme.fontFamily.sans], + MaisonNeueExtended: [ + 'MaisonNeueExtended', + ...defaultTheme.fontFamily.sans, + ], + sans: [ + 'MaisonNeue', + 'MaisonNeueExtended', + ...defaultTheme.fontFamily.sans, + ], + }, + animation: { + 'slide-left': 'slide-left 0.25s linear', + 'slide-right': 'slide-right 0.25s linear', + 'slide-away-right': 'slide-away-right 0.25s linear', + }, + keyframes: { + 'slide-left': { + '0%': { left: '100%' }, + '100%': { left: '0%' }, + }, + 'slide-right': { + '0%': { left: '-100%' }, + '100%': { left: '0%' }, + }, + 'slide-away-right': { + '0%': { left: '0%' }, + '100%': { left: '100%' }, + }, + }, + }, }, plugins: [], -}; +} diff --git a/yarn.lock b/yarn.lock index 088467bd6..746956e01 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2176,10 +2176,10 @@ "@docsearch/css" "3.5.2" algoliasearch "^4.19.1" -"@docusaurus/core@3.3.2", "@docusaurus/core@^3.3.2": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-3.3.2.tgz#67b8cd5329b32f47515ecf12eb7aa306dfc69922" - integrity sha512-PzKMydKI3IU1LmeZQDi+ut5RSuilbXnA8QdowGeJEgU8EJjmx3rBHNT1LxQxOVqNEwpWi/csLwd9bn7rUjggPA== +"@docusaurus/core@3.5.2", "@docusaurus/core@^3.5.2": + version "3.5.2" + resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-3.5.2.tgz#3adedb90e7b6104592f1231043bd6bf91680c39c" + integrity sha512-4Z1WkhCSkX4KO0Fw5m/Vuc7Q3NxBG53NE5u59Rs96fWkMPZVSrzEPP16/Nk6cWb/shK7xXPndTmalJtw7twL/w== dependencies: "@babel/core" "^7.23.3" "@babel/generator" "^7.23.3" @@ -2191,12 +2191,12 @@ "@babel/runtime" "^7.22.6" "@babel/runtime-corejs3" "^7.22.6" "@babel/traverse" "^7.22.8" - "@docusaurus/cssnano-preset" "3.3.2" - "@docusaurus/logger" "3.3.2" - "@docusaurus/mdx-loader" "3.3.2" - "@docusaurus/utils" "3.3.2" - "@docusaurus/utils-common" "3.3.2" - "@docusaurus/utils-validation" "3.3.2" + "@docusaurus/cssnano-preset" "3.5.2" + "@docusaurus/logger" "3.5.2" + "@docusaurus/mdx-loader" "3.5.2" + "@docusaurus/utils" "3.5.2" + "@docusaurus/utils-common" "3.5.2" + "@docusaurus/utils-validation" "3.5.2" autoprefixer "^10.4.14" babel-loader "^9.1.3" babel-plugin-dynamic-import-node "^2.3.3" @@ -2250,32 +2250,32 @@ webpack-merge "^5.9.0" webpackbar "^5.0.2" -"@docusaurus/cssnano-preset@3.3.2": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@docusaurus/cssnano-preset/-/cssnano-preset-3.3.2.tgz#fb971b3e89fe6821721782124b430b2795faeb38" - integrity sha512-+5+epLk/Rp4vFML4zmyTATNc3Is+buMAL6dNjrMWahdJCJlMWMPd/8YfU+2PA57t8mlSbhLJ7vAZVy54cd1vRQ== +"@docusaurus/cssnano-preset@3.5.2": + version "3.5.2" + resolved "https://registry.yarnpkg.com/@docusaurus/cssnano-preset/-/cssnano-preset-3.5.2.tgz#6c1f2b2f9656f978c4694c84ab24592b04dcfab3" + integrity sha512-D3KiQXOMA8+O0tqORBrTOEQyQxNIfPm9jEaJoALjjSjc2M/ZAWcUfPQEnwr2JB2TadHw2gqWgpZckQmrVWkytA== dependencies: cssnano-preset-advanced "^6.1.2" postcss "^8.4.38" postcss-sort-media-queries "^5.2.0" tslib "^2.6.0" -"@docusaurus/logger@3.3.2": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@docusaurus/logger/-/logger-3.3.2.tgz#f43f7e08d4f5403be6a7196659490053e248325f" - integrity sha512-Ldu38GJ4P8g4guN7d7pyCOJ7qQugG7RVyaxrK8OnxuTlaImvQw33aDRwaX2eNmX8YK6v+//Z502F4sOZbHHCHQ== +"@docusaurus/logger@3.5.2": + version "3.5.2" + resolved "https://registry.yarnpkg.com/@docusaurus/logger/-/logger-3.5.2.tgz#1150339ad56844b30734115c19c580f3b25cf5ed" + integrity sha512-LHC540SGkeLfyT3RHK3gAMK6aS5TRqOD4R72BEU/DE2M/TY8WwEUAMY576UUc/oNJXv8pGhBmQB6N9p3pt8LQw== dependencies: chalk "^4.1.2" tslib "^2.6.0" -"@docusaurus/mdx-loader@3.3.2": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-3.3.2.tgz#424e3ffac8bcdeba27d8c0eb84a04736702fc187" - integrity sha512-AFRxj/aOk3/mfYDPxE3wTbrjeayVRvNSZP7mgMuUlrb2UlPRbSVAFX1k2RbgAJrnTSwMgb92m2BhJgYRfptN3g== +"@docusaurus/mdx-loader@3.5.2": + version "3.5.2" + resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-3.5.2.tgz#99781641372c5037bcbe09bb8ade93a0e0ada57d" + integrity sha512-ku3xO9vZdwpiMIVd8BzWV0DCqGEbCP5zs1iHfKX50vw6jX8vQo0ylYo1YJMZyz6e+JFJ17HYHT5FzVidz2IflA== dependencies: - "@docusaurus/logger" "3.3.2" - "@docusaurus/utils" "3.3.2" - "@docusaurus/utils-validation" "3.3.2" + "@docusaurus/logger" "3.5.2" + "@docusaurus/utils" "3.5.2" + "@docusaurus/utils-validation" "3.5.2" "@mdx-js/mdx" "^3.0.0" "@slorber/remark-comment" "^1.0.0" escape-html "^1.0.3" @@ -2298,12 +2298,12 @@ vfile "^6.0.1" webpack "^5.88.1" -"@docusaurus/module-type-aliases@3.3.2": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@docusaurus/module-type-aliases/-/module-type-aliases-3.3.2.tgz#02534449d08d080fd52dc9e046932bb600c38b01" - integrity sha512-b/XB0TBJah5yKb4LYuJT4buFvL0MGAb0+vJDrJtlYMguRtsEBkf2nWl5xP7h4Dlw6ol0hsHrCYzJ50kNIOEclw== +"@docusaurus/module-type-aliases@3.5.2", "@docusaurus/module-type-aliases@^3.5.2": + version "3.5.2" + resolved "https://registry.yarnpkg.com/@docusaurus/module-type-aliases/-/module-type-aliases-3.5.2.tgz#4e8f9c0703e23b2e07ebfce96598ec83e4dd2a9e" + integrity sha512-Z+Xu3+2rvKef/YKTMxZHsEXp1y92ac0ngjDiExRdqGTmEKtCUpkbNYH8v5eXo5Ls+dnW88n6WTa+Q54kLOkwPg== dependencies: - "@docusaurus/types" "3.3.2" + "@docusaurus/types" "3.5.2" "@types/history" "^4.7.11" "@types/react" "*" "@types/react-router-config" "*" @@ -2311,48 +2311,35 @@ react-helmet-async "*" react-loadable "npm:@docusaurus/react-loadable@6.0.0" -"@docusaurus/module-type-aliases@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@docusaurus/module-type-aliases/-/module-type-aliases-3.0.1.tgz#d45990fe377d7ffaa68841cf89401188a5d65293" - integrity sha512-DEHpeqUDsLynl3AhQQiO7AbC7/z/lBra34jTcdYuvp9eGm01pfH1wTVq8YqWZq6Jyx0BgcVl/VJqtE9StRd9Ag== - dependencies: - "@docusaurus/react-loadable" "5.5.2" - "@docusaurus/types" "3.0.1" - "@types/history" "^4.7.11" - "@types/react" "*" - "@types/react-router-config" "*" - "@types/react-router-dom" "*" - react-helmet-async "*" - react-loadable "npm:@docusaurus/react-loadable@5.5.2" - -"@docusaurus/plugin-client-redirects@^3.3.2": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-client-redirects/-/plugin-client-redirects-3.3.2.tgz#286b02acc6bcdfd85739e96480ef7c67a7d0eddd" - integrity sha512-W8ueb5PaQ06oanatL+CzE3GjqeRBTzv3MSFqEQlBa8BqLyOomc1uHsWgieE3glHsckU4mUZ6sHnOfesAtYnnew== - dependencies: - "@docusaurus/core" "3.3.2" - "@docusaurus/logger" "3.3.2" - "@docusaurus/utils" "3.3.2" - "@docusaurus/utils-common" "3.3.2" - "@docusaurus/utils-validation" "3.3.2" +"@docusaurus/plugin-client-redirects@^3.5.2": + version "3.5.2" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-client-redirects/-/plugin-client-redirects-3.5.2.tgz#ace1549e30cfca42dbc625f92920ea66a3cd7b1d" + integrity sha512-GMU0ZNoVG1DEsZlBbwLPdh0iwibrVZiRfmdppvX17SnByCVP74mb/Nne7Ss7ALgxQLtM4IHbXi8ij90VVjAJ+Q== + dependencies: + "@docusaurus/core" "3.5.2" + "@docusaurus/logger" "3.5.2" + "@docusaurus/utils" "3.5.2" + "@docusaurus/utils-common" "3.5.2" + "@docusaurus/utils-validation" "3.5.2" eta "^2.2.0" fs-extra "^11.1.1" lodash "^4.17.21" tslib "^2.6.0" -"@docusaurus/plugin-content-blog@3.3.2": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.3.2.tgz#6496714b071447687ead1472e5756bfb1ae065d0" - integrity sha512-fJU+dmqp231LnwDJv+BHVWft8pcUS2xVPZdeYH6/ibH1s2wQ/sLcmUrGWyIv/Gq9Ptj8XWjRPMghlxghuPPoxg== - dependencies: - "@docusaurus/core" "3.3.2" - "@docusaurus/logger" "3.3.2" - "@docusaurus/mdx-loader" "3.3.2" - "@docusaurus/types" "3.3.2" - "@docusaurus/utils" "3.3.2" - "@docusaurus/utils-common" "3.3.2" - "@docusaurus/utils-validation" "3.3.2" - cheerio "^1.0.0-rc.12" +"@docusaurus/plugin-content-blog@3.5.2": + version "3.5.2" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.5.2.tgz#649c07c34da7603645f152bcebdf75285baed16b" + integrity sha512-R7ghWnMvjSf+aeNDH0K4fjyQnt5L0KzUEnUhmf1e3jZrv3wogeytZNN6n7X8yHcMsuZHPOrctQhXWnmxu+IRRg== + dependencies: + "@docusaurus/core" "3.5.2" + "@docusaurus/logger" "3.5.2" + "@docusaurus/mdx-loader" "3.5.2" + "@docusaurus/theme-common" "3.5.2" + "@docusaurus/types" "3.5.2" + "@docusaurus/utils" "3.5.2" + "@docusaurus/utils-common" "3.5.2" + "@docusaurus/utils-validation" "3.5.2" + cheerio "1.0.0-rc.12" feed "^4.2.2" fs-extra "^11.1.1" lodash "^4.17.21" @@ -2363,19 +2350,20 @@ utility-types "^3.10.0" webpack "^5.88.1" -"@docusaurus/plugin-content-docs@3.3.2": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.3.2.tgz#dadfbb94acfb0b74fae12db51f425c4379e30087" - integrity sha512-Dm1ri2VlGATTN3VGk1ZRqdRXWa1UlFubjaEL6JaxaK7IIFqN/Esjpl+Xw10R33loHcRww/H76VdEeYayaL76eg== - dependencies: - "@docusaurus/core" "3.3.2" - "@docusaurus/logger" "3.3.2" - "@docusaurus/mdx-loader" "3.3.2" - "@docusaurus/module-type-aliases" "3.3.2" - "@docusaurus/types" "3.3.2" - "@docusaurus/utils" "3.3.2" - "@docusaurus/utils-common" "3.3.2" - "@docusaurus/utils-validation" "3.3.2" +"@docusaurus/plugin-content-docs@3.5.2": + version "3.5.2" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.5.2.tgz#adcf6c0bd9a9818eb192ab831e0069ee62d31505" + integrity sha512-Bt+OXn/CPtVqM3Di44vHjE7rPCEsRCB/DMo2qoOuozB9f7+lsdrHvD0QCHdBs0uhz6deYJDppAr2VgqybKPlVQ== + dependencies: + "@docusaurus/core" "3.5.2" + "@docusaurus/logger" "3.5.2" + "@docusaurus/mdx-loader" "3.5.2" + "@docusaurus/module-type-aliases" "3.5.2" + "@docusaurus/theme-common" "3.5.2" + "@docusaurus/types" "3.5.2" + "@docusaurus/utils" "3.5.2" + "@docusaurus/utils-common" "3.5.2" + "@docusaurus/utils-validation" "3.5.2" "@types/react-router-config" "^5.0.7" combine-promises "^1.1.0" fs-extra "^11.1.1" @@ -2385,126 +2373,118 @@ utility-types "^3.10.0" webpack "^5.88.1" -"@docusaurus/plugin-content-pages@3.3.2": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.3.2.tgz#04fc18d1925618c1102b111b85e6376442c1b7a9" - integrity sha512-EKc9fQn5H2+OcGER8x1aR+7URtAGWySUgULfqE/M14+rIisdrBstuEZ4lUPDRrSIexOVClML82h2fDS+GSb8Ew== - dependencies: - "@docusaurus/core" "3.3.2" - "@docusaurus/mdx-loader" "3.3.2" - "@docusaurus/types" "3.3.2" - "@docusaurus/utils" "3.3.2" - "@docusaurus/utils-validation" "3.3.2" +"@docusaurus/plugin-content-pages@3.5.2": + version "3.5.2" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.5.2.tgz#2b59e43f5bc5b5176ff01835de706f1c65c2e68b" + integrity sha512-WzhHjNpoQAUz/ueO10cnundRz+VUtkjFhhaQ9jApyv1a46FPURO4cef89pyNIOMny1fjDz/NUN2z6Yi+5WUrCw== + dependencies: + "@docusaurus/core" "3.5.2" + "@docusaurus/mdx-loader" "3.5.2" + "@docusaurus/types" "3.5.2" + "@docusaurus/utils" "3.5.2" + "@docusaurus/utils-validation" "3.5.2" fs-extra "^11.1.1" tslib "^2.6.0" webpack "^5.88.1" -"@docusaurus/plugin-debug@3.3.2": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-debug/-/plugin-debug-3.3.2.tgz#bb25fac2cb705eff7857b435219faef907ba949e" - integrity sha512-oBIBmwtaB+YS0XlmZ3gCO+cMbsGvIYuAKkAopoCh0arVjtlyPbejzPrHuCoRHB9G7abjNZw7zoONOR8+8LM5+Q== +"@docusaurus/plugin-debug@3.5.2": + version "3.5.2" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-debug/-/plugin-debug-3.5.2.tgz#c25ca6a59e62a17c797b367173fe80c06fdf2f65" + integrity sha512-kBK6GlN0itCkrmHuCS6aX1wmoWc5wpd5KJlqQ1FyrF0cLDnvsYSnh7+ftdwzt7G6lGBho8lrVwkkL9/iQvaSOA== dependencies: - "@docusaurus/core" "3.3.2" - "@docusaurus/types" "3.3.2" - "@docusaurus/utils" "3.3.2" + "@docusaurus/core" "3.5.2" + "@docusaurus/types" "3.5.2" + "@docusaurus/utils" "3.5.2" fs-extra "^11.1.1" react-json-view-lite "^1.2.0" tslib "^2.6.0" -"@docusaurus/plugin-google-analytics@3.3.2": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.3.2.tgz#6e51ee8593c79172ed2b2ac4d33e300f04bfbc87" - integrity sha512-jXhrEIhYPSClMBK6/IA8qf1/FBoxqGXZvg7EuBax9HaK9+kL3L0TJIlatd8jQJOMtds8mKw806TOCc3rtEad1A== +"@docusaurus/plugin-google-analytics@3.5.2": + version "3.5.2" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.5.2.tgz#1143e78d1461d3c74a2746f036d25b18d4a2608d" + integrity sha512-rjEkJH/tJ8OXRE9bwhV2mb/WP93V441rD6XnM6MIluu7rk8qg38iSxS43ga2V2Q/2ib53PcqbDEJDG/yWQRJhQ== dependencies: - "@docusaurus/core" "3.3.2" - "@docusaurus/types" "3.3.2" - "@docusaurus/utils-validation" "3.3.2" + "@docusaurus/core" "3.5.2" + "@docusaurus/types" "3.5.2" + "@docusaurus/utils-validation" "3.5.2" tslib "^2.6.0" -"@docusaurus/plugin-google-gtag@3.3.2": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.3.2.tgz#f8126dfe1dfa6e722157d7301430da40b97354ba" - integrity sha512-vcrKOHGbIDjVnNMrfbNpRQR1x6Jvcrb48kVzpBAOsKbj9rXZm/idjVAXRaewwobHdOrJkfWS/UJoxzK8wyLRBQ== +"@docusaurus/plugin-google-gtag@3.5.2": + version "3.5.2" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.5.2.tgz#60b5a9e1888c4fa16933f7c5cb5f2f2c31caad3a" + integrity sha512-lm8XL3xLkTPHFKKjLjEEAHUrW0SZBSHBE1I+i/tmYMBsjCcUB5UJ52geS5PSiOCFVR74tbPGcPHEV/gaaxFeSA== dependencies: - "@docusaurus/core" "3.3.2" - "@docusaurus/types" "3.3.2" - "@docusaurus/utils-validation" "3.3.2" + "@docusaurus/core" "3.5.2" + "@docusaurus/types" "3.5.2" + "@docusaurus/utils-validation" "3.5.2" "@types/gtag.js" "^0.0.12" tslib "^2.6.0" -"@docusaurus/plugin-google-tag-manager@3.3.2": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.3.2.tgz#7ce4cf4da6ef177d63bd83beafc4a45428ff01e2" - integrity sha512-ldkR58Fdeks0vC+HQ+L+bGFSJsotQsipXD+iKXQFvkOfmPIV6QbHRd7IIcm5b6UtwOiK33PylNS++gjyLUmaGw== +"@docusaurus/plugin-google-tag-manager@3.5.2": + version "3.5.2" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.5.2.tgz#7a37334d2e7f00914d61ad05bc09391c4db3bfda" + integrity sha512-QkpX68PMOMu10Mvgvr5CfZAzZQFx8WLlOiUQ/Qmmcl6mjGK6H21WLT5x7xDmcpCoKA/3CegsqIqBR+nA137lQg== dependencies: - "@docusaurus/core" "3.3.2" - "@docusaurus/types" "3.3.2" - "@docusaurus/utils-validation" "3.3.2" + "@docusaurus/core" "3.5.2" + "@docusaurus/types" "3.5.2" + "@docusaurus/utils-validation" "3.5.2" tslib "^2.6.0" -"@docusaurus/plugin-sitemap@3.3.2": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.3.2.tgz#f64fba6f03ebc14fdf55434aa2219bf80f752a13" - integrity sha512-/ZI1+bwZBhAgC30inBsHe3qY9LOZS+79fRGkNdTcGHRMcdAp6Vw2pCd1gzlxd/xU+HXsNP6cLmTOrggmRp3Ujg== - dependencies: - "@docusaurus/core" "3.3.2" - "@docusaurus/logger" "3.3.2" - "@docusaurus/types" "3.3.2" - "@docusaurus/utils" "3.3.2" - "@docusaurus/utils-common" "3.3.2" - "@docusaurus/utils-validation" "3.3.2" +"@docusaurus/plugin-sitemap@3.5.2": + version "3.5.2" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.5.2.tgz#9c940b27f3461c54d65295cf4c52cb20538bd360" + integrity sha512-DnlqYyRAdQ4NHY28TfHuVk414ft2uruP4QWCH//jzpHjqvKyXjj2fmDtI8RPUBh9K8iZKFMHRnLtzJKySPWvFA== + dependencies: + "@docusaurus/core" "3.5.2" + "@docusaurus/logger" "3.5.2" + "@docusaurus/types" "3.5.2" + "@docusaurus/utils" "3.5.2" + "@docusaurus/utils-common" "3.5.2" + "@docusaurus/utils-validation" "3.5.2" fs-extra "^11.1.1" sitemap "^7.1.1" tslib "^2.6.0" -"@docusaurus/preset-classic@^3.3.2": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@docusaurus/preset-classic/-/preset-classic-3.3.2.tgz#1c89b5f35f9e727a1c91bc03eb25a5b42b7d67a6" - integrity sha512-1SDS7YIUN1Pg3BmD6TOTjhB7RSBHJRpgIRKx9TpxqyDrJ92sqtZhomDc6UYoMMLQNF2wHFZZVGFjxJhw2VpL+Q== - dependencies: - "@docusaurus/core" "3.3.2" - "@docusaurus/plugin-content-blog" "3.3.2" - "@docusaurus/plugin-content-docs" "3.3.2" - "@docusaurus/plugin-content-pages" "3.3.2" - "@docusaurus/plugin-debug" "3.3.2" - "@docusaurus/plugin-google-analytics" "3.3.2" - "@docusaurus/plugin-google-gtag" "3.3.2" - "@docusaurus/plugin-google-tag-manager" "3.3.2" - "@docusaurus/plugin-sitemap" "3.3.2" - "@docusaurus/theme-classic" "3.3.2" - "@docusaurus/theme-common" "3.3.2" - "@docusaurus/theme-search-algolia" "3.3.2" - "@docusaurus/types" "3.3.2" - -"@docusaurus/react-loadable@5.5.2": - version "5.5.2" - resolved "https://registry.yarnpkg.com/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz#81aae0db81ecafbdaee3651f12804580868fa6ce" - integrity sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ== - dependencies: - "@types/react" "*" - prop-types "^15.6.2" - -"@docusaurus/theme-classic@3.3.2": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-classic/-/theme-classic-3.3.2.tgz#44489580e034a6f5b877ec8bfd1203e226b4a4ab" - integrity sha512-gepHFcsluIkPb4Im9ukkiO4lXrai671wzS3cKQkY9BXQgdVwsdPf/KS0Vs4Xlb0F10fTz+T3gNjkxNEgSN9M0A== - dependencies: - "@docusaurus/core" "3.3.2" - "@docusaurus/mdx-loader" "3.3.2" - "@docusaurus/module-type-aliases" "3.3.2" - "@docusaurus/plugin-content-blog" "3.3.2" - "@docusaurus/plugin-content-docs" "3.3.2" - "@docusaurus/plugin-content-pages" "3.3.2" - "@docusaurus/theme-common" "3.3.2" - "@docusaurus/theme-translations" "3.3.2" - "@docusaurus/types" "3.3.2" - "@docusaurus/utils" "3.3.2" - "@docusaurus/utils-common" "3.3.2" - "@docusaurus/utils-validation" "3.3.2" +"@docusaurus/preset-classic@^3.5.2": + version "3.5.2" + resolved "https://registry.yarnpkg.com/@docusaurus/preset-classic/-/preset-classic-3.5.2.tgz#977f78510bbc556aa0539149eef960bb7ab52bd9" + integrity sha512-3ihfXQ95aOHiLB5uCu+9PRy2gZCeSZoDcqpnDvf3B+sTrMvMTr8qRUzBvWkoIqc82yG5prCboRjk1SVILKx6sg== + dependencies: + "@docusaurus/core" "3.5.2" + "@docusaurus/plugin-content-blog" "3.5.2" + "@docusaurus/plugin-content-docs" "3.5.2" + "@docusaurus/plugin-content-pages" "3.5.2" + "@docusaurus/plugin-debug" "3.5.2" + "@docusaurus/plugin-google-analytics" "3.5.2" + "@docusaurus/plugin-google-gtag" "3.5.2" + "@docusaurus/plugin-google-tag-manager" "3.5.2" + "@docusaurus/plugin-sitemap" "3.5.2" + "@docusaurus/theme-classic" "3.5.2" + "@docusaurus/theme-common" "3.5.2" + "@docusaurus/theme-search-algolia" "3.5.2" + "@docusaurus/types" "3.5.2" + +"@docusaurus/theme-classic@3.5.2": + version "3.5.2" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-classic/-/theme-classic-3.5.2.tgz#602ddb63d987ab1f939e3760c67bc1880f01c000" + integrity sha512-XRpinSix3NBv95Rk7xeMF9k4safMkwnpSgThn0UNQNumKvmcIYjfkwfh2BhwYh/BxMXQHJ/PdmNh22TQFpIaYg== + dependencies: + "@docusaurus/core" "3.5.2" + "@docusaurus/mdx-loader" "3.5.2" + "@docusaurus/module-type-aliases" "3.5.2" + "@docusaurus/plugin-content-blog" "3.5.2" + "@docusaurus/plugin-content-docs" "3.5.2" + "@docusaurus/plugin-content-pages" "3.5.2" + "@docusaurus/theme-common" "3.5.2" + "@docusaurus/theme-translations" "3.5.2" + "@docusaurus/types" "3.5.2" + "@docusaurus/utils" "3.5.2" + "@docusaurus/utils-common" "3.5.2" + "@docusaurus/utils-validation" "3.5.2" "@mdx-js/react" "^3.0.0" clsx "^2.0.0" copy-text-to-clipboard "^3.2.0" - infima "0.2.0-alpha.43" + infima "0.2.0-alpha.44" lodash "^4.17.21" nprogress "^0.2.0" postcss "^8.4.26" @@ -2515,18 +2495,15 @@ tslib "^2.6.0" utility-types "^3.10.0" -"@docusaurus/theme-common@3.3.2": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-common/-/theme-common-3.3.2.tgz#26f8a6d26ea6c297350887f614c6dac73c2ede4a" - integrity sha512-kXqSaL/sQqo4uAMQ4fHnvRZrH45Xz2OdJ3ABXDS7YVGPSDTBC8cLebFrRR4YF9EowUHto1UC/EIklJZQMG/usA== - dependencies: - "@docusaurus/mdx-loader" "3.3.2" - "@docusaurus/module-type-aliases" "3.3.2" - "@docusaurus/plugin-content-blog" "3.3.2" - "@docusaurus/plugin-content-docs" "3.3.2" - "@docusaurus/plugin-content-pages" "3.3.2" - "@docusaurus/utils" "3.3.2" - "@docusaurus/utils-common" "3.3.2" +"@docusaurus/theme-common@3.5.2": + version "3.5.2" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-common/-/theme-common-3.5.2.tgz#b507ab869a1fba0be9c3c9d74f2f3d74c3ac78b2" + integrity sha512-QXqlm9S6x9Ibwjs7I2yEDgsCocp708DrCrgHgKwg2n2AY0YQ6IjU0gAK35lHRLOvAoJUfCKpQAwUykB0R7+Eew== + dependencies: + "@docusaurus/mdx-loader" "3.5.2" + "@docusaurus/module-type-aliases" "3.5.2" + "@docusaurus/utils" "3.5.2" + "@docusaurus/utils-common" "3.5.2" "@types/history" "^4.7.11" "@types/react" "*" "@types/react-router-config" "*" @@ -2536,19 +2513,19 @@ tslib "^2.6.0" utility-types "^3.10.0" -"@docusaurus/theme-search-algolia@3.3.2": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.3.2.tgz#fe669e756697a2ca79784052e26c43a07ea7e449" - integrity sha512-qLkfCl29VNBnF1MWiL9IyOQaHxUvicZp69hISyq/xMsNvFKHFOaOfk9xezYod2Q9xx3xxUh9t/QPigIei2tX4w== +"@docusaurus/theme-search-algolia@3.5.2": + version "3.5.2" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.5.2.tgz#466c83ca7e8017d95ae6889ccddc5ef8bf6b61c6" + integrity sha512-qW53kp3VzMnEqZGjakaV90sst3iN1o32PH+nawv1uepROO8aEGxptcq2R5rsv7aBShSRbZwIobdvSYKsZ5pqvA== dependencies: "@docsearch/react" "^3.5.2" - "@docusaurus/core" "3.3.2" - "@docusaurus/logger" "3.3.2" - "@docusaurus/plugin-content-docs" "3.3.2" - "@docusaurus/theme-common" "3.3.2" - "@docusaurus/theme-translations" "3.3.2" - "@docusaurus/utils" "3.3.2" - "@docusaurus/utils-validation" "3.3.2" + "@docusaurus/core" "3.5.2" + "@docusaurus/logger" "3.5.2" + "@docusaurus/plugin-content-docs" "3.5.2" + "@docusaurus/theme-common" "3.5.2" + "@docusaurus/theme-translations" "3.5.2" + "@docusaurus/utils" "3.5.2" + "@docusaurus/utils-validation" "3.5.2" algoliasearch "^4.18.0" algoliasearch-helper "^3.13.3" clsx "^2.0.0" @@ -2558,37 +2535,23 @@ tslib "^2.6.0" utility-types "^3.10.0" -"@docusaurus/theme-translations@3.3.2": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-translations/-/theme-translations-3.3.2.tgz#39ad011573ce963f1eda98ded925971ca57c5a52" - integrity sha512-bPuiUG7Z8sNpGuTdGnmKl/oIPeTwKr0AXLGu9KaP6+UFfRZiyWbWE87ti97RrevB2ffojEdvchNujparR3jEZQ== +"@docusaurus/theme-translations@3.5.2": + version "3.5.2" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-translations/-/theme-translations-3.5.2.tgz#38f9ebf2a5d860397022206a05fef66c08863c89" + integrity sha512-GPZLcu4aT1EmqSTmbdpVrDENGR2yObFEX8ssEFYTCiAIVc0EihNSdOIBTazUvgNqwvnoU1A8vIs1xyzc3LITTw== dependencies: fs-extra "^11.1.1" tslib "^2.6.0" -"@docusaurus/tsconfig@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@docusaurus/tsconfig/-/tsconfig-3.0.1.tgz#170f230c34ff12e55995bd7e9f1f21db33035d8f" - integrity sha512-hT2HCdNE3pWTzXV/7cSsowfmaOxXVOTFOXmkqaYjBWjaxjJ3FO0nHbdJ8rF6Da7PvWmIPbUekdP5gep1XCJ7Vg== - -"@docusaurus/types@3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@docusaurus/types/-/types-3.0.1.tgz#4fe306aa10ef7c97dbc07588864f6676a40f3b6f" - integrity sha512-plyX2iU1tcUsF46uQ01pAd4JhexR7n0iiQ5MSnBFX6M6NSJgDYdru/i1/YNPKOnQHBoXGLHv0dNT6OAlDWNjrg== - dependencies: - "@types/history" "^4.7.11" - "@types/react" "*" - commander "^5.1.0" - joi "^17.9.2" - react-helmet-async "^1.3.0" - utility-types "^3.10.0" - webpack "^5.88.1" - webpack-merge "^5.9.0" +"@docusaurus/tsconfig@^3.5.2": + version "3.5.2" + resolved "https://registry.yarnpkg.com/@docusaurus/tsconfig/-/tsconfig-3.5.2.tgz#98878103ba217bff355cd8944926d9ca06e6e153" + integrity sha512-rQ7toURCFnWAIn8ubcquDs0ewhPwviMzxh6WpRjBW7sJVCXb6yzwUaY3HMNa0VXCFw+qkIbFywrMTf+Pb4uHWQ== -"@docusaurus/types@3.3.2": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@docusaurus/types/-/types-3.3.2.tgz#0e17689512b22209a98f22ee80ac56899e94d390" - integrity sha512-5p201S7AZhliRxTU7uMKtSsoC8mgPA9bs9b5NQg1IRdRxJfflursXNVsgc3PcMqiUTul/v1s3k3rXXFlRE890w== +"@docusaurus/types@3.5.2": + version "3.5.2" + resolved "https://registry.yarnpkg.com/@docusaurus/types/-/types-3.5.2.tgz#058019dbeffbee2d412c3f72569e412a727f9608" + integrity sha512-N6GntLXoLVUwkZw7zCxwy9QiuEXIcTVzA9AkmNw16oc0AP3SXLrMmDMMBIfgqwuKWa6Ox6epHol9kMtJqekACw== dependencies: "@mdx-js/mdx" "^3.0.0" "@types/history" "^4.7.11" @@ -2600,32 +2563,34 @@ webpack "^5.88.1" webpack-merge "^5.9.0" -"@docusaurus/utils-common@3.3.2": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@docusaurus/utils-common/-/utils-common-3.3.2.tgz#d17868a55a25186bfdb35de317a3878e867f2005" - integrity sha512-QWFTLEkPYsejJsLStgtmetMFIA3pM8EPexcZ4WZ7b++gO5jGVH7zsipREnCHzk6+eDgeaXfkR6UPaTt86bp8Og== +"@docusaurus/utils-common@3.5.2": + version "3.5.2" + resolved "https://registry.yarnpkg.com/@docusaurus/utils-common/-/utils-common-3.5.2.tgz#4d7f5e962fbca3e2239d80457aa0e4bd3d8f7e0a" + integrity sha512-i0AZjHiRgJU6d7faQngIhuHKNrszpL/SHQPgF1zH4H+Ij6E9NBYGy6pkcGWToIv7IVPbs+pQLh1P3whn0gWXVg== dependencies: tslib "^2.6.0" -"@docusaurus/utils-validation@3.3.2": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@docusaurus/utils-validation/-/utils-validation-3.3.2.tgz#7109888d9c9b23eec787b41341809438f54c2aec" - integrity sha512-itDgFs5+cbW9REuC7NdXals4V6++KifgVMzoGOOOSIifBQw+8ULhy86u5e1lnptVL0sv8oAjq2alO7I40GR7pA== +"@docusaurus/utils-validation@3.5.2": + version "3.5.2" + resolved "https://registry.yarnpkg.com/@docusaurus/utils-validation/-/utils-validation-3.5.2.tgz#1b2b2f02082781cc8ce713d4c85e88d6d2fc4eb3" + integrity sha512-m+Foq7augzXqB6HufdS139PFxDC5d5q2QKZy8q0qYYvGdI6nnlNsGH4cIGsgBnV7smz+mopl3g4asbSDvMV0jA== dependencies: - "@docusaurus/logger" "3.3.2" - "@docusaurus/utils" "3.3.2" - "@docusaurus/utils-common" "3.3.2" + "@docusaurus/logger" "3.5.2" + "@docusaurus/utils" "3.5.2" + "@docusaurus/utils-common" "3.5.2" + fs-extra "^11.2.0" joi "^17.9.2" js-yaml "^4.1.0" + lodash "^4.17.21" tslib "^2.6.0" -"@docusaurus/utils@3.3.2": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-3.3.2.tgz#2571baccb5b7ed53d50b670094139a31a53558df" - integrity sha512-f4YMnBVymtkSxONv4Y8js3Gez9IgHX+Lcg6YRMOjVbq8sgCcdYK1lf6SObAuz5qB/mxiSK7tW0M9aaiIaUSUJg== +"@docusaurus/utils@3.5.2": + version "3.5.2" + resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-3.5.2.tgz#17763130215f18d7269025903588ef7fb373e2cb" + integrity sha512-33QvcNFh+Gv+C2dP9Y9xWEzMgf3JzrpL2nW9PopidiohS1nDcyknKRx2DWaFvyVTTYIkkABVSr073VTj/NITNA== dependencies: - "@docusaurus/logger" "3.3.2" - "@docusaurus/utils-common" "3.3.2" + "@docusaurus/logger" "3.5.2" + "@docusaurus/utils-common" "3.5.2" "@svgr/webpack" "^8.1.0" escape-string-regexp "^4.0.0" file-loader "^6.2.0" @@ -2642,6 +2607,7 @@ shelljs "^0.8.5" tslib "^2.6.0" url-loader "^4.1.1" + utility-types "^3.10.0" webpack "^5.88.1" "@emotion/is-prop-valid@^1.2.1": @@ -3402,6 +3368,11 @@ dependencies: "@types/yargs-parser" "*" +"@uidotdev/usehooks@^2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@uidotdev/usehooks/-/usehooks-2.4.1.tgz#4b733eaeae09a7be143c6c9ca158b56cc1ea75bf" + integrity sha512-1I+RwWyS+kdv3Mv0Vmc+p0dPYH0DTRAo04HLyXReYBL9AeseDWUJyi4THuksBJcu9F0Pih69Ak150VDnqbVnXg== + "@ungap/structured-clone@^1.0.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" @@ -4081,15 +4052,10 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001449, caniuse-lite@^1.0.30001538, caniuse-lite@^1.0.30001541, caniuse-lite@^1.0.30001565: - version "1.0.30001568" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001568.tgz" - integrity sha512-vSUkH84HontZJ88MiNrOau1EBrCqEQYgkC5gIySiDlpsm8sGVrhU7Kx4V6h0tnqaHzIHZv08HlJIwPbL4XL9+A== - -caniuse-lite@^1.0.30001587, caniuse-lite@^1.0.30001599: - version "1.0.30001618" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001618.tgz#fad74fa006aef0f01e8e5c0a5540c74d8d36ec6f" - integrity sha512-p407+D1tIkDvsEAPS22lJxLQQaG8OTBEqo0KhzfABGk0TU4juBNDSfH0hyAp/HRyx+M8L17z/ltyhxh27FTfQg== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001449, caniuse-lite@^1.0.30001538, caniuse-lite@^1.0.30001541, caniuse-lite@^1.0.30001565, caniuse-lite@^1.0.30001587, caniuse-lite@^1.0.30001599: + version "1.0.30001674" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001674.tgz" + integrity sha512-jOsKlZVRnzfhLojb+Ykb+gyUSp9Xb57So+fAiFlLzzTKpqg8xxSav0e40c8/4F/v9N8QSvrRRaLeVzQbLqomYw== ccount@^2.0.0: version "2.0.1" @@ -4155,7 +4121,7 @@ cheerio-select@^2.1.0: domhandler "^5.0.3" domutils "^3.0.1" -cheerio@^1.0.0-rc.12: +cheerio@1.0.0-rc.12: version "1.0.0-rc.12" resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.12.tgz#788bf7466506b1c6bf5fae51d24a2c4d62e47683" integrity sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q== @@ -5507,6 +5473,15 @@ fs-extra@^11.1.1: jsonfile "^6.0.1" universalify "^2.0.0" +fs-extra@^11.2.0: + version "11.2.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.2.0.tgz#e70e17dfad64232287d01929399e0ea7c86b0e5b" + integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + fs-extra@^9.0.0: version "9.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" @@ -6183,10 +6158,10 @@ indent-string@^4.0.0: resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== -infima@0.2.0-alpha.43: - version "0.2.0-alpha.43" - resolved "https://registry.yarnpkg.com/infima/-/infima-0.2.0-alpha.43.tgz#f7aa1d7b30b6c08afef441c726bac6150228cbe0" - integrity sha512-2uw57LvUqW0rK/SWYnd/2rRfxNA5DDNOh33jxF7fy46VWoNhGxiUQyVZHbBMjQ33mQem0cjdDVwgWVAmlRfgyQ== +infima@0.2.0-alpha.44: + version "0.2.0-alpha.44" + resolved "https://registry.yarnpkg.com/infima/-/infima-0.2.0-alpha.44.tgz#9cd9446e473b44d49763f48efabe31f32440861d" + integrity sha512-tuRkUSO/lB3rEhLJk25atwAjgLuzq070+pOW8XcvpHky/YbENnRRdPd85IBkyeTgttmOy5ah+yHYsK1HhUd4lQ== inflight@^1.0.4: version "1.0.6" @@ -6476,11 +6451,16 @@ jest-worker@^29.4.3: merge-stream "^2.0.0" supports-color "^8.0.0" -jiti@^1.18.2, jiti@^1.19.1, jiti@^1.20.0: +jiti@^1.18.2, jiti@^1.20.0: version "1.21.0" resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.0.tgz#7c97f8fe045724e136a397f7340475244156105d" integrity sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q== +jiti@^1.21.0: + version "1.21.6" + resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.6.tgz#6c7f7398dd4b3142767f9a168af2f317a428d268" + integrity sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w== + joi@^17.9.2: version "17.11.0" resolved "https://registry.yarnpkg.com/joi/-/joi-17.11.0.tgz#aa9da753578ec7720e6f0ca2c7046996ed04fc1a" @@ -8466,6 +8446,16 @@ postcss@^8.4.24, postcss@^8.4.38: picocolors "^1.0.0" source-map-js "^1.2.0" +prettier-plugin-tailwindcss@^0.6.8: + version "0.6.8" + resolved "https://registry.yarnpkg.com/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.6.8.tgz#8a178e1679e3f941cc9de396f109c6cffea676d8" + integrity sha512-dGu3kdm7SXPkiW4nzeWKCl3uoImdd5CTZEJGxyypEPL37Wj0HT2pLqjrvSei1nTeuQfO4PUfjeW5cTUNRLZ4sA== + +prettier@^3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.3.3.tgz#30c54fe0be0d8d12e6ae61dbb10109ea00d53105" + integrity sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew== + pretty-error@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6" @@ -8694,14 +8684,6 @@ react-loadable-ssr-addon-v5-slorber@^1.0.1: dependencies: "@babel/runtime" "^7.10.3" -"react-loadable@npm:@docusaurus/react-loadable@5.5.2": - version "5.5.2" - resolved "https://registry.yarnpkg.com/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz#81aae0db81ecafbdaee3651f12804580868fa6ce" - integrity sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ== - dependencies: - "@types/react" "*" - prop-types "^15.6.2" - "react-loadable@npm:@docusaurus/react-loadable@6.0.0": version "6.0.0" resolved "https://registry.yarnpkg.com/@docusaurus/react-loadable/-/react-loadable-6.0.0.tgz#de6c7f73c96542bd70786b8e522d535d69069dc4" @@ -8709,10 +8691,10 @@ react-loadable-ssr-addon-v5-slorber@^1.0.1: dependencies: "@types/react" "*" -react-player@^2.13.0: - version "2.13.0" - resolved "https://registry.yarnpkg.com/react-player/-/react-player-2.13.0.tgz#b6fb252bf70574608ac711f6c83d7057c8fb0c14" - integrity sha512-gkY7ZdbVFztlKFFhCPcnDrFQm+L399b8fhWsKatZ+b2wpKJwfUHBXQFMRxqYQGT0ic1/wQ7D7EZEWy7ZBqk2pw== +react-player@^2.16.0: + version "2.16.0" + resolved "https://registry.yarnpkg.com/react-player/-/react-player-2.16.0.tgz#89070700b03f5a5ded9f0b3165d4717390796481" + integrity sha512-mAIPHfioD7yxO0GNYVFD1303QFtI3lyyQZLY229UEAp/a10cSW+hPcakg0Keq8uWJxT2OiT/4Gt+Lc9bD6bJmQ== dependencies: deepmerge "^4.0.0" load-script "^1.0.0" @@ -9811,10 +9793,10 @@ swagger2openapi@^7.0.6: yaml "^1.10.0" yargs "^17.0.1" -tailwindcss@^3.3.5: - version "3.3.5" - resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.3.5.tgz#22a59e2fbe0ecb6660809d9cc5f3976b077be3b8" - integrity sha512-5SEZU4J7pxZgSkv7FP1zY8i2TIAOooNZ1e/OGtxIEv6GltpoiXUqWvLy89+a10qYTB1N5Ifkuw9lqQkN9sscvA== +tailwindcss@^3.4.14: + version "3.4.14" + resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.14.tgz#6dd23a7f54ec197b19159e91e3bb1e55e7aa73ac" + integrity sha512-IcSvOcTRcUtQQ7ILQL5quRDg7Xs93PdJEk1ZLbhhvJc7uj/OAhYOnruEiwnGgBvUtaUAJ8/mhSw1o8L2jCiENA== dependencies: "@alloc/quick-lru" "^5.2.0" arg "^5.0.2" @@ -9824,7 +9806,7 @@ tailwindcss@^3.3.5: fast-glob "^3.3.0" glob-parent "^6.0.2" is-glob "^4.0.3" - jiti "^1.19.1" + jiti "^1.21.0" lilconfig "^2.1.0" micromatch "^4.0.5" normalize-path "^3.0.0"