diff --git a/frontend-v2/.editorconfig b/frontend-v2/.editorconfig new file mode 100644 index 0000000..cddc074 --- /dev/null +++ b/frontend-v2/.editorconfig @@ -0,0 +1,11 @@ +# EditorConfig: http://editorconfig.org + +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true diff --git a/frontend-v2/.eslintrc.json b/frontend-v2/.eslintrc.json new file mode 100644 index 0000000..4d765f2 --- /dev/null +++ b/frontend-v2/.eslintrc.json @@ -0,0 +1,3 @@ +{ + "extends": ["next/core-web-vitals", "prettier"] +} diff --git a/frontend-v2/.gitignore b/frontend-v2/.gitignore new file mode 100644 index 0000000..c1d3d67 --- /dev/null +++ b/frontend-v2/.gitignore @@ -0,0 +1,38 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.pnpm-debug.log* + +# local env files +.env*.local + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts + +.idea/* diff --git a/frontend-v2/README.md b/frontend-v2/README.md new file mode 100644 index 0000000..c8ec10c --- /dev/null +++ b/frontend-v2/README.md @@ -0,0 +1,49 @@ +# Blockroma Frontend + +![Blockroma](https://tp-misc.b-cdn.net/blockroma-v0.1.png) + +## Getting Started + +Blockroma is a blockchain explorer. It is built with the modern web stack - TypeScript, KOA, React, SASS, Apollo GraphQL, TypeORM, and PostgreSQL. It is open-sourced under [GPL license](#license). + +![blockroma-v0.1-demo](https://tp-misc.b-cdn.net/blockroma-v0.1-2.gif) + +> The project is still in development with an unstable version 0.1.0. As a result, there might be breaking changes before 1.0.0. + +### Download the project + +```bash +git clone git@github.com:blockedenhq/blockroma-frontend.git +``` + +### Run the project + +```bash +cd blockroma-frontend + +yarn install +``` + +#### Development mode + +To run your project in development mode, run: + +```bash +yarn dev +``` + +#### NPM scripts + +- `npm run test`: test the whole project and generate a test coverage +- `npm run ava ./path/to/test-file.js`: run a specific test file +- `npm run build`: build source code from `src` to `dist` +- `npm run lint`: run the linter +- `npm run kill`: kill the node server occupying the port 5000. + +## License + +Special thanks to the blockscout project. We are not fans of Elixir but we used its JS and style files, and thus comply with its GPL license. + +## Star and Fork the Project + +If you like the project or want to support its future development, please give it a star ⭐️ and fork it! diff --git a/frontend-v2/next-i18next.config.js b/frontend-v2/next-i18next.config.js new file mode 100644 index 0000000..dd9364b --- /dev/null +++ b/frontend-v2/next-i18next.config.js @@ -0,0 +1,8 @@ +module.exports = { + debug: false, + i18n: { + defaultLocale: "en", + locales: ["en"], + }, + supportedLngs: ["en"], +}; diff --git a/frontend-v2/next.config.js b/frontend-v2/next.config.js new file mode 100644 index 0000000..5ad5c19 --- /dev/null +++ b/frontend-v2/next.config.js @@ -0,0 +1,21 @@ +const { i18n } = require("./next-i18next.config"); + +/** @type {import('next').NextConfig} */ +const nextConfig = { + output: "export", + distDir: "build", + + reactStrictMode: true, + swcMinify: true, + // i18n, + images: { + remotePatterns: [ + { + protocol: "https", + hostname: "**", + }, + ], + }, +}; + +module.exports = nextConfig; diff --git a/frontend-v2/package.json b/frontend-v2/package.json new file mode 100644 index 0000000..c9c96fa --- /dev/null +++ b/frontend-v2/package.json @@ -0,0 +1,50 @@ +{ + "name": "dash-v2", + "version": "0.1.0", + "private": true, + "scripts": { + "dev": "next dev", + "build": "next build", + "start": "next start", + "test": "yarn lint && yarn format", + "lint": "next lint", + "format": "pretty-quick --staged ./", + "schema:generate": "apollo client:codegen ./src/nft --no-addTypename --target=typescript --localSchemaFile=src/aptos-indexer.graphql" + }, + "dependencies": { + "@apollo/client": "^3.7.1", + "@fortawesome/fontawesome-free": "^6.2.1", + "@types/node": "18.11.9", + "@types/react": "18.0.25", + "@types/react-dom": "18.0.9", + "date-fns": "^2.29.3", + "eslint": "8.28.0", + "eslint-config-next": "^14.1.4", + "graphql": "^16.6.0", + "highlight.js": "^11.7.0", + "i18next": "^22.0.6", + "isomorphic-unfetch": "^3.1.0", + "next": "^14.1.4", + "next-i18next": "^13.0.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-i18next": "^12.0.0", + "react-outside-click-handler": "^1.3.0", + "react-redux": "^8.0.5", + "redux": "^4.2.0", + "redux-thunk": "^2.4.2", + "styletron-engine-atomic": "^1.5.0", + "styletron-react": "5.2.7", + "typescript": "4.9.3" + }, + "devDependencies": { + "@tarekraafat/autocomplete.js": "^10.2.7", + "@types/react-outside-click-handler": "^1.3.1", + "@types/styletron-react": "^5.0.3", + "bootstrap": "^4.6.1", + "eslint-config-prettier": "^8.5.0", + "prettier": "^2.8.0", + "pretty-quick": "^3.1.3", + "sass": "^1.56.1" + } +} diff --git a/frontend-v2/pages/_app.tsx b/frontend-v2/pages/_app.tsx new file mode 100644 index 0000000..af74585 --- /dev/null +++ b/frontend-v2/pages/_app.tsx @@ -0,0 +1,26 @@ +import { Provider as StyletronProvider } from "styletron-react"; +import "../styles/globals.css"; +import type { AppProps } from "next/app"; +import { styletron } from "../src/styletron"; +import "../src/stylesheets/app.scss"; +import { Provider as ReduxProvider } from "react-redux"; +import { configureStore } from "../src/common/configure-store"; +import { appWithTranslation } from "next-i18next"; +import { ApolloProvider } from "@apollo/client"; +import { apolloClient } from "@/shared/common/apollo-client"; +import nextI18NextConfig from "../next-i18next.config.js"; + +export default appWithTranslation(function App({ + Component, + pageProps, +}: AppProps) { + return ( + + + + + + + + ); +}, nextI18NextConfig); diff --git a/frontend-v2/pages/_document.js b/frontend-v2/pages/_document.js new file mode 100644 index 0000000..debd1a9 --- /dev/null +++ b/frontend-v2/pages/_document.js @@ -0,0 +1,74 @@ +import Document, { Html, Head, Main, NextScript } from "next/document"; +import { Provider as StyletronProvider } from "styletron-react"; +import { styletron } from "../src/styletron"; + +const beConfig = { + tagline: "tagline", + previewImageUrl: "https://tianpan.co/favicon.png", + title: `title`, + description: "title", + twitter: "@stargately", +}; + +class MyDocument extends Document { + static async getInitialProps(context) { + const renderPage = () => + context.renderPage({ + enhanceApp: (App) => (props) => ( + + + + ), + }); + + const initialProps = await Document.getInitialProps({ + ...context, + renderPage, + }); + const stylesheets = styletron.getStylesheets() || []; + return { ...initialProps, stylesheets }; + } + + render() { + return ( + + + + + + + + + + + + + + + {this.props.stylesheets.map((sheet, i) => ( + Asset 7 diff --git a/frontend-v2/public/locales/en/common.json b/frontend-v2/public/locales/en/common.json new file mode 100644 index 0000000..c138c0a --- /dev/null +++ b/frontend-v2/public/locales/en/common.json @@ -0,0 +1,76 @@ +{ + "bk.block": "Block", + "bk.block_details": "Block Details", + "bk.block_height": "Block Height", + "bk.block_height.tip": "The block height of a particular block is defined as the number of blocks preceding it in the blockchain.", + "bk.copy_address": "Copy address", + "bk.copy_hash": "Copy hash", + "bk.copy_parent_hash": "Copy Parent Hash", + "bk.difficulty": "Difficulty", + "bk.difficulty.tip": "Block difficulty for miner, used to calibrate block generation time.", + "bk.empty_txs": "There are no transactions for this block.", + "bk.gas_limit": "Gas Limit", + "bk.gas_limit.tip": "Total gas limit provided by all transactions in the block.", + "bk.gas_used": "Gas Used", + "bk.gas_used.tip": "The total gas amount used in the block and its percentage of gas filled in the block.", + "bk.hash": "Hash", + "bk.hash.tip": "The hash of the block from which this block was generated.", + "bk.once": "Nonce", + "bk.parent_hash": "Parent Hash", + "bk.parent_hash.tip": "The hash of the block from which this block was generated.", + "bk.size": "Size", + "bk.size.tip": "Size of the block in bytes.", + "bk.timestamp": "Timestamp", + "bk.timestamp.tip": "Date & time at which block was produced.", + "bk.total_difficulty": "Total Difficulty", + "bk.total_difficulty.tip": "Total difficulty of the chain until this block.", + "bk.txs": "Transactions", + "bk.txs.tip": "The number of transactions in the block.", + "bk.validator": "Validator", + "bk.validator.tip": "A block producer who successfully included the block onto the blockchain.", + "info.err": "Something went wrong, click to reload.", + "meta.description": "Blockroma is a tool for inspecting and analyzing EVM based blockchains. Blockchain explorer for Ethereum Networks.", + "meta.title": "Blockroma", + "nav.blocks": "Blocks", + "nav.search": "Search by address, token symbol name, transaction hash, or block number", + "nav.txs": "Transactions", + "not_found.bar": "Not Found", + "not_found.info": "We cannot find the page for you...", + "not_found.title": "Oops!", + "page.noscript": "We’re sorry, some parts of the website don’t work properly without JavaScript enabled.", + "tx.block": "Block", + "tx.block.tip": "Block number containing the transaction.", + "tx.copy_tx_hash": "Copy Transaction Hash", + "tx.fee": "Transaction Fee", + "tx.fee.tip": "Total transaction fee.", + "tx.from": "From", + "tx.from.tip": "Address (external or contract) sending the transaction.", + "tx.gas_limit": "Gas Limit", + "tx.gas_limit.tip": "Maximum gas amount approved for the transaction.", + "tx.gas_price": "Gas Price", + "tx.gas_price.tip": "Price per unit of gas specified by the sender. Higher gas prices can prioritize transaction inclusion during times of high usage.", + "tx.gas_used": "Gas Used by Transaction", + "tx.gas_used.tip": "Actual gas amount used by the transaction.", + "tx.max_fee_per_gas": "Max Fee per Gas", + "tx.max_fee_per_gas.tip": "Maximum total amount per unit of gas a user is willing to pay for a transaction, including base fee and priority fee.", + "tx.nonce": "Nonce", + "tx.nonce.tip": "Transaction number from the sending address. Each transaction sent from an address increments the nonce by 1.", + "tx.pos": "Position", + "tx.raw_input": "Raw Input", + "tx.raw_input.tip": "Binary data included with the transaction. See input / logs below for additional info.", + "tx.result": "Result", + "tx.result.tip": "Current transaction state - Success, Failed (Error), or Pending (In Process)", + "tx.status": "Status", + "tx.status.tip": "The status of the transaction - Confirmed or Unconfirmed.", + "tx.timestamp": "Timestamp", + "tx.timestamp.tip": "Date & time of transaction inclusion, including length of time for confirmation.", + "tx.to": "To", + "tx.to.tip": "Address (external or contract) receiving the transaction.", + "tx.tx_details": "Transaction Details", + "tx.tx_hash": "Transaction Hash", + "tx.tx_hash.tip": "Unique character string (TxID) assigned to every verified transaction.", + "tx.tx_type": "Transaction Type", + "tx.tx_type.tip": "Transaction type, introduced in EIP-2718.", + "tx.value": "Value", + "tx.value.tip": "Value sent in the native token (and USD) if applicable." +} diff --git a/frontend-v2/public/webfonts/fa-brands-400.ttf b/frontend-v2/public/webfonts/fa-brands-400.ttf new file mode 100644 index 0000000..430a02e Binary files /dev/null and b/frontend-v2/public/webfonts/fa-brands-400.ttf differ diff --git a/frontend-v2/public/webfonts/fa-brands-400.woff2 b/frontend-v2/public/webfonts/fa-brands-400.woff2 new file mode 100644 index 0000000..4d904aa Binary files /dev/null and b/frontend-v2/public/webfonts/fa-brands-400.woff2 differ diff --git a/frontend-v2/public/webfonts/fa-regular-400.ttf b/frontend-v2/public/webfonts/fa-regular-400.ttf new file mode 100644 index 0000000..23e3feb Binary files /dev/null and b/frontend-v2/public/webfonts/fa-regular-400.ttf differ diff --git a/frontend-v2/public/webfonts/fa-regular-400.woff2 b/frontend-v2/public/webfonts/fa-regular-400.woff2 new file mode 100644 index 0000000..80e3b12 Binary files /dev/null and b/frontend-v2/public/webfonts/fa-regular-400.woff2 differ diff --git a/frontend-v2/public/webfonts/fa-solid-900.ttf b/frontend-v2/public/webfonts/fa-solid-900.ttf new file mode 100644 index 0000000..da90824 Binary files /dev/null and b/frontend-v2/public/webfonts/fa-solid-900.ttf differ diff --git a/frontend-v2/public/webfonts/fa-solid-900.woff2 b/frontend-v2/public/webfonts/fa-solid-900.woff2 new file mode 100644 index 0000000..360ba11 Binary files /dev/null and b/frontend-v2/public/webfonts/fa-solid-900.woff2 differ diff --git a/frontend-v2/public/webfonts/fa-v4compatibility.ttf b/frontend-v2/public/webfonts/fa-v4compatibility.ttf new file mode 100644 index 0000000..e9545ed Binary files /dev/null and b/frontend-v2/public/webfonts/fa-v4compatibility.ttf differ diff --git a/frontend-v2/public/webfonts/fa-v4compatibility.woff2 b/frontend-v2/public/webfonts/fa-v4compatibility.woff2 new file mode 100644 index 0000000..db5b0b9 Binary files /dev/null and b/frontend-v2/public/webfonts/fa-v4compatibility.woff2 differ diff --git a/frontend-v2/src/address-details-container/address-details-container.tsx b/frontend-v2/src/address-details-container/address-details-container.tsx new file mode 100644 index 0000000..41b8245 --- /dev/null +++ b/frontend-v2/src/address-details-container/address-details-container.tsx @@ -0,0 +1,387 @@ +import React, { useState } from "react"; +import { normalizeTokenValue } from "@/shared/common/normalize-token-value"; +import { AddressTransactionsContainer } from "@/shared/address-details-container/address-transactions-container"; +import { useChainConfig } from "@/shared/common/use-chain-config"; +import { assetURL } from "@/shared/common/asset-url"; +import { useGetAddr } from "./hooks/use-get-addr"; +import { QrModal } from "./components/qr-modal"; +import { CopyAddress } from "../explorer-components/copy-address"; +import { useRouter } from "next/router"; +import { useTranslation } from "next-i18next"; + +export interface Addr { + fetchedCoinBalance?: string | null; + fetchedCoinBalanceBlockNumber?: number | null; + nonce?: number | null; + hash?: any; + hashQr?: string | null; + numTxs?: number | null; + gasUsed?: number | null; +} + +export const AddressDetailsContainer: React.FC = () => { + const { t } = useTranslation("common"); + const chainConfig = useChainConfig(); + const router = useRouter(); + const params = router.query; + const { addressHash: rawAddressHash } = params; + const addressHash = String(rawAddressHash).toLowerCase(); + const [qrModalOpen, setQrModalOpen] = useState(false); + + const { data, loading, error, refetch } = useGetAddr({ + hash: addressHash, + first: 0, + after: 0, + }); + if (loading) { + return <>; + } + if (error && error.graphQLErrors[0]?.extensions?.code !== "NOT_FOUND") { + // TODO(dora): + return ; + } + const addr: Addr = data?.address ?? {}; + + return ( +
+

+

+

+
+
+
+
+
+

+
Address Details
+ + + setQrModalOpen(true)} + > + + + + + + + +

+

+ {addressHash} +

+
+
+ + {" "} + + Balance +
+
+ {normalizeTokenValue(addr.fetchedCoinBalance)}{" "} + {chainConfig.symbol} + {/* + + // TODO(dora) coin balance + + + + ( + + $0.854734 USD + + ) + + */} +
+
+
+
+ + {" "} + + Tokens +
+
+
+
+ + 0 tokens + +
+
+
+ + + + +
+
+
+
+
+
+
+
+
+ + {" "} + + {t("nav.txs")} +
+
+ + {addr.numTxs ?? 0} {t("nav.txs")} + +
+
+
+
+ + {" "} + + Transfers +
+
+ + 0 Transfers + +
+
+
+
+ + {" "} + + Nonce +
+ +
+ {addr.nonce ?? 0} +
+
+
+
+ + {" "} + + Gas Used +
+
+ + {addr.gasUsed ?? 0} + +
+
+
+
+ + {" "} + + Last Balance Update +
+
+ + {addr.fetchedCoinBalanceBlockNumber ?? 0} + +
+
+
+
+ + {" "} + + Blocks Validated +
+
+ +
+
+
+
+
+
+
+ + setQrModalOpen(false)} + /> + +
+
+
+ + +
+
+ ); +}; diff --git a/frontend-v2/src/address-details-container/address-transactions-container.tsx b/frontend-v2/src/address-details-container/address-transactions-container.tsx new file mode 100644 index 0000000..f33574b --- /dev/null +++ b/frontend-v2/src/address-details-container/address-transactions-container.tsx @@ -0,0 +1,136 @@ +import React from "react"; +import { AdrTransactionItem } from "@/shared/explorer-components/adr-transaction.item"; +import { useGetAddr } from "@/shared/address-details-container/hooks/use-get-addr"; + +import { assetURL } from "@/shared/common/asset-url"; +import { useTranslation } from "next-i18next"; + +type Props = { + addressHash: string; +}; + +export const AddressTransactionsContainer: React.FC = ({ + addressHash, +}) => { + const { t } = useTranslation("common"); + const { data, loading, error, refetch } = useGetAddr({ + hash: addressHash, + first: 100, + after: 0, + }); + if (loading) { + // TODO(dora): + return <>; + } + + const txs = data?.address?.transactions?.edges?.map((e) => e?.node); + + return ( +
+
+ +
+
+
+ + Connection Lost, click to load newer transactions + +
+
+
+

{t("nav.txs")}

+
+ + + {error && + error.graphQLErrors[0]?.extensions?.code !== "NOT_FOUND" && ( + + )} + + {(!txs || !txs.length) && ( +
+
+ There are no transactions for this address. +
+
+ )} + + {!!txs && ( +
+ {txs.map((tx) => ( + + ))} +
+ )} + + {/* + TODO(dora): download csv + +
+
+ Download{" "} + + CSV + + + + +
+
+ + */} +
+
+
+ ); +}; diff --git a/frontend-v2/src/address-details-container/components/qr-modal.tsx b/frontend-v2/src/address-details-container/components/qr-modal.tsx new file mode 100644 index 0000000..45db02a --- /dev/null +++ b/frontend-v2/src/address-details-container/components/qr-modal.tsx @@ -0,0 +1,86 @@ +import * as React from "react"; +import { useEffect } from "react"; +import OutsideClickHandler from "react-outside-click-handler"; +import { assetURL } from "@/shared/common/asset-url"; + +type Props = { + addressHash: string; + open: boolean; + onClose: () => void; + hashQr?: string | null; +}; + +export function QrModal({ + addressHash, + open, + onClose, + hashQr, +}: Props): JSX.Element { + useEffect(() => { + const cl = window.document.getElementsByTagName("body")[0].classList; + if (open) { + cl.add("modal-open"); + } else { + cl.remove("modal-open"); + } + + window.addEventListener("keyup", (event) => { + if (event.key === "Escape") { + onClose(); + } + }); + }, [open]); + return ( + + ); +} diff --git a/frontend-v2/src/address-details-container/data/queries.ts b/frontend-v2/src/address-details-container/data/queries.ts new file mode 100644 index 0000000..c9644ff --- /dev/null +++ b/frontend-v2/src/address-details-container/data/queries.ts @@ -0,0 +1,49 @@ +import { gql } from "@apollo/client"; + +export const queryAddressByHash = gql` + query QueryAddressByHash($hash: Buffer!, $first: Float, $after: String) { + address(hash: $hash) { + fetchedCoinBalance + fetchedCoinBalanceBlockNumber + nonce + hash + gasUsed + hashQr + numTxs + + transactions(first: $first, after: $after) { + pageInfo { + hasNextPage + startCursor + + hasPreviousPage + endCursor + } + edges { + node { + id + timestamp + hash + blockNumber + value + gasUsed + cumulativeGasUsed + error + fromAddressHash + toAddressHash + status + gas + gasPrice + index + input + nonce + r + s + v + } + cursor + } + } + } + } +`; diff --git a/frontend-v2/src/address-details-container/hooks/use-get-addr.ts b/frontend-v2/src/address-details-container/hooks/use-get-addr.ts new file mode 100644 index 0000000..569956e --- /dev/null +++ b/frontend-v2/src/address-details-container/hooks/use-get-addr.ts @@ -0,0 +1,26 @@ +import { useQuery } from "@apollo/client"; +import { queryAddressByHash } from "@/shared/address-details-container/data/queries"; +import { QueryAddressByHash } from "@/shared/address-details-container/data/__generated__/QueryAddressByHash"; + +export const useGetAddr = ({ + hash, + first, + after, +}: { + hash?: string; + first: number; + after: number; +}) => { + const { loading, data, error, refetch } = useQuery( + queryAddressByHash, + { + ssr: false, + variables: { + hash, + first, + after: String(after), + }, + }, + ); + return { loading, data, error, refetch }; +}; diff --git a/frontend-v2/src/blks-table-container/blks-table-container.tsx b/frontend-v2/src/blks-table-container/blks-table-container.tsx new file mode 100644 index 0000000..b22397d --- /dev/null +++ b/frontend-v2/src/blks-table-container/blks-table-container.tsx @@ -0,0 +1,124 @@ +import React, { useState } from "react"; +import { useQueryBlocks } from "@/shared/blks-table-container/hooks/use-query-blocks"; +import { BlkList } from "@/shared/explorer-components/blk-list"; +import { Pagination } from "@/shared/explorer-components/pagination"; + +import { paginationProcessTotalNumPage } from "@/shared/common/functions/paginations"; +import { useTranslation } from "next-i18next"; +import { useRouter } from "next/router"; + +export const BlksTableContainer: React.FC = () => { + const { t } = useTranslation("common"); + return ( +
+

+

+

+
+ :{" "} + {" "} + + + {" "} + - {" "} + + + + + +
+
+
+
+
+ + Connection Lost, click to load newer blocks + +
+
+

+ {t("nav.blocks")} +

+ + +
+
+
+
+ ); +}; + +const TableWithPagination = () => { + const router = useRouter(); + const search = router.query; + const initialPage = Number(search.page) || 1; + const [curPage, setCurPage] = useState(initialPage); + const pageSize = 20; + const { t } = useTranslation("common"); + + const setCurPageWithSideEffect = (p: number) => { + setCurPage(p); + router.push({ search: `?page=${p}` }); + }; + const { loading, data, error, refetch } = useQueryBlocks( + { first: pageSize, after: (curPage - 1) * pageSize }, + {}, + ); + if (loading) { + // TODO(dora) + return <>; + } + + const blks = data?.blocks?.edges?.map((e) => e?.node); + + const numPage = paginationProcessTotalNumPage(data?.blocks); + + return ( + <> + {error && ( + + )} + + {blks && blks?.length > 0 ? ( + <> +
+ +
+ +
+ +
+ + ) : ( + <> +
+ There are no blocks. +
+ + )} + + ); +}; diff --git a/frontend-v2/src/blks-table-container/data/queries.ts b/frontend-v2/src/blks-table-container/data/queries.ts new file mode 100644 index 0000000..719fdc5 --- /dev/null +++ b/frontend-v2/src/blks-table-container/data/queries.ts @@ -0,0 +1,31 @@ +import { gql } from "@apollo/client"; + +export const queryBlocks = gql` + query QueryBlocks($first: Float, $after: String) { + blocks(first: $first, after: $after) { + edges { + node { + consensus + difficulty + gasLimit + gasUsed + hash + miner + nonce + number + parentHash + size + timestamp + totalDifficulty + numTxs + } + } + pageInfo { + hasNextPage + endCursor + startCursor + hasPreviousPage + } + } + } +`; diff --git a/frontend-v2/src/blks-table-container/hooks/use-query-blocks.ts b/frontend-v2/src/blks-table-container/hooks/use-query-blocks.ts new file mode 100644 index 0000000..87baeaa --- /dev/null +++ b/frontend-v2/src/blks-table-container/hooks/use-query-blocks.ts @@ -0,0 +1,29 @@ +import { queryBlocks } from "@/shared/blks-table-container/data/queries"; +import { useQuery } from "@apollo/client"; +import { QueryBlocks } from "@/shared/blks-table-container/data/__generated__/QueryBlocks"; + +export const useQueryBlocks = ( + { + first, + after, + }: { + first: number; + after: number; + }, + { pollInterval = undefined }: { pollInterval?: number }, +) => { + const { loading, data, error, refetch } = useQuery(queryBlocks, { + ssr: false, + variables: { + first, + after: String(after), + }, + pollInterval, + ...(pollInterval + ? { + fetchPolicy: "no-cache", + } + : {}), + }); + return { loading, data, error, refetch }; +}; diff --git a/frontend-v2/src/block-details-container/block-details-container.tsx b/frontend-v2/src/block-details-container/block-details-container.tsx new file mode 100644 index 0000000..e829382 --- /dev/null +++ b/frontend-v2/src/block-details-container/block-details-container.tsx @@ -0,0 +1,520 @@ +import * as React from "react"; +import { useQueryBlock } from "@/shared/block-details-container/hooks/use-query-block"; +import { CopyToClipboard } from "@/shared/explorer-components/copy-to-clipboard"; +import { TickingTs } from "@/shared/explorer-components/ticking-ts"; +import format from "date-fns/format"; + +import { assetURL } from "@/shared/common/asset-url"; +import { BlockTransactions } from "./block-transactions"; +import { useTranslation } from "next-i18next"; +import Link from "next/link"; +import { getGasUsedPercent } from "../common/get-gas-used-percent"; +import { useRouter } from "next/router"; + +export function BlockDetailsContainer(): JSX.Element { + const { t } = useTranslation("common"); + const params = useRouter(); + const blockNumber = parseInt((params.query.blockNumber as string) || "0", 10); + const { data, loading, error } = useQueryBlock(blockNumber); + if (loading) { + // TODO(dora) + return <>; + } + if (error) { + // TODO(dora) + return <>; + } + if (!data || !data.block) { + // TODO(dora) + return <>; + } + const { + difficulty, + gasLimit, + gasUsed, + hash, + miner, + nonce, + parentHash, + size, + timestamp, + totalDifficulty, + numTxs, + } = data.block; + const gasUsedPercent = getGasUsedPercent(gasUsed, gasLimit); + return ( +
+

+

+

+
+
+ :{" "} + {" "} + + + {" "} + - {" "} + + + + + +
+
+
+
+
+
+

+ {t("bk.block_details")} +

+ +
+
+
+ + {" "} + + {t("bk.block_height")} +
+
+ {blockNumber} +
+
+
+
+ + {" "} + + {t("bk.timestamp")} +
+
+ |{" "} + {format(new Date(timestamp), "MMM-d-y hh:mm:ss a x")} UTC +
+
+
+
+ + {" "} + + {t("bk.txs")} +
+
+ + {numTxs} {t("nav.txs")} + +
+
+
+
+ + {" "} + + {t("bk.validator")}{" "} +
+
+ + + {miner} + + + +
+
+
+
+ + {" "} + + {t("bk.size")} +
+
+ {Number(size).toLocaleString()} bytes +
+
+
+
+ + {" "} + + {t("bk.hash")} +
+
+ {hash} + + +
+
+ +
+
+ + {" "} + + {t("bk.parent_hash")} +
+
+ {blockNumber > 0 ? ( + + {parentHash} + + ) : ( + parentHash + )} + + +
+
+ +
+
+ + {" "} + + {t("bk.difficulty")} +
+
+ {Number(difficulty).toLocaleString()} +
+
+
+
+ + {" "} + + {t("bk.total_difficulty")} +
+
+ {Number(totalDifficulty).toLocaleString()} +
+
+
+
+ + {" "} + + {t("bk.gas_used")} +
+
+ {Number(gasUsed).toLocaleString()} | {gasUsedPercent}% +
+
+
+
+ + {" "} + + {t("bk.gas_limit")} +
+
+ {Number(gasLimit).toLocaleString()} +
+
+
+
+ + {" "} + + {t("bk.once")} +
+
{nonce}
+
+ {/* + TODO(dora): baseFeePerGas + +
+
+ + + + Base Fee per Gas +
+
{0} Gwei
+
+ + TODO(dora): Burnt Fees +
+
+ + + + Burnt Fees +
+
+ 0 BMO +
+
+ + // TODO(dora): Priority Fee / Tip +
+
+ + + + Priority Fee / Tip +
+
0 BMO
+
+ + // TODO(dora): block reward +
+
+
+ + + + BMO Mania Reward +
+
0.5 BMO
+
+
+
+ + + + Validator Reward +
+
1.0175886759375 BMO
+
+
+
+ + + + Emission Reward +
+
0.5 BMO
+
+ */} +
+
+
+
+
+ +
+
+ ); +} diff --git a/frontend-v2/src/block-details-container/block-transactions-list-container.tsx b/frontend-v2/src/block-details-container/block-transactions-list-container.tsx new file mode 100644 index 0000000..0ec5daa --- /dev/null +++ b/frontend-v2/src/block-details-container/block-transactions-list-container.tsx @@ -0,0 +1,61 @@ +import React from "react"; +import { useGetTxs } from "@/shared/block-details-container/hooks/use-get-txs"; +import { TxsList } from "@/shared/explorer-components/txs-list"; + +import { useTranslation } from "next-i18next"; + +type Props = { + blockNumber: number; +}; + +export const BlockTransactionsListContainer: React.FC = ({ + blockNumber, +}) => { + const { t } = useTranslation("common"); + const { loading, error, data, refetch } = useGetTxs( + { + blockNumber, + first: 1000, + after: 0, + }, + {}, + ); + if (loading) { + // TODO(dora) + return <>; + } + + const txs = data?.transactions?.edges?.map((e) => e?.node); + + return ( +
+ {error && ( + + )} + + {!txs?.length && ( +
+
+ {t("bk.empty_txs")} +
+
+ )} + + {!!txs?.length && } +
+ ); +}; diff --git a/frontend-v2/src/block-details-container/block-transactions.tsx b/frontend-v2/src/block-details-container/block-transactions.tsx new file mode 100644 index 0000000..772f542 --- /dev/null +++ b/frontend-v2/src/block-details-container/block-transactions.tsx @@ -0,0 +1,29 @@ +import * as React from "react"; +import { BlockTransactionsListContainer } from "@/shared/block-details-container/block-transactions-list-container"; + +import { useTranslation } from "next-i18next"; +import Link from "next/link"; + +export function BlockTransactions({ + blockNumber, +}: { + blockNumber: number; +}): JSX.Element { + const { t } = useTranslation("common"); + return ( +
+
+
+ + {t("nav.txs")} + +
+ + +
+
+ ); +} diff --git a/frontend-v2/src/block-details-container/data/quries.ts b/frontend-v2/src/block-details-container/data/quries.ts new file mode 100644 index 0000000..bc238a4 --- /dev/null +++ b/frontend-v2/src/block-details-container/data/quries.ts @@ -0,0 +1,57 @@ +import { gql } from "@apollo/client"; + +export const queryBlock = gql` + query QueryBlock($blockNumber: Int!) { + block(number: $blockNumber) { + consensus + difficulty + gasLimit + gasUsed + hash + miner + nonce + number + parentHash + size + timestamp + totalDifficulty + numTxs + } + } +`; + +export const getTxs = gql` + query GetTxs($blockNumber: Int, $first: Float, $after: String) { + transactions(blockNumber: $blockNumber, first: $first, after: $after) { + pageInfo { + hasNextPage + endCursor + startCursor + hasPreviousPage + } + edges { + node { + id + timestamp + hash + blockNumber + value + gasUsed + cumulativeGasUsed + error + fromAddressHash + toAddressHash + status + gas + gasPrice + index + input + nonce + r + s + v + } + } + } + } +`; diff --git a/frontend-v2/src/block-details-container/hooks/use-get-txs.ts b/frontend-v2/src/block-details-container/hooks/use-get-txs.ts new file mode 100644 index 0000000..aafaa3f --- /dev/null +++ b/frontend-v2/src/block-details-container/hooks/use-get-txs.ts @@ -0,0 +1,27 @@ +import { getTxs } from "@/shared/block-details-container/data/quries"; +import { useQuery } from "@apollo/client"; +import { GetTxs } from "@/shared/block-details-container/data/__generated__/GetTxs"; + +export const useGetTxs = ( + filters: { + blockNumber?: number; + first: number; + after: number; + }, + { pollInterval }: { pollInterval?: number }, +) => { + const { loading, data, error, refetch } = useQuery(getTxs, { + ssr: false, + variables: { + ...filters, + after: String(filters.after), + }, + pollInterval, + ...(pollInterval + ? { + fetchPolicy: "no-cache", + } + : {}), + }); + return { loading, data, error, refetch }; +}; diff --git a/frontend-v2/src/block-details-container/hooks/use-query-block.ts b/frontend-v2/src/block-details-container/hooks/use-query-block.ts new file mode 100644 index 0000000..46a492f --- /dev/null +++ b/frontend-v2/src/block-details-container/hooks/use-query-block.ts @@ -0,0 +1,11 @@ +import { useQuery } from "@apollo/client"; +import { queryBlock } from "@/shared/block-details-container/data/quries"; +import { QueryBlock } from "../data/__generated__/QueryBlock"; + +export const useQueryBlock = (blockNumber: number) => { + const { loading, data, error, refetch } = useQuery(queryBlock, { + ssr: false, + variables: { blockNumber }, + }); + return { loading, data, error, refetch }; +}; diff --git a/frontend-v2/src/blockscout-web-js-lib/add_chain_to_mm.js b/frontend-v2/src/blockscout-web-js-lib/add_chain_to_mm.js new file mode 100644 index 0000000..37f541d --- /dev/null +++ b/frontend-v2/src/blockscout-web-js-lib/add_chain_to_mm.js @@ -0,0 +1,31 @@ +module.exports = async function addChainToMM(mmCfg) { + try { + const chainID = await window.ethereum.request({ method: "eth_chainId" }); + const chainIDFromEnvVar = mmCfg.chainId; + const chainIDHex = + chainIDFromEnvVar && `0x${chainIDFromEnvVar.toString(16)}`; + const blockscoutURL = `${window.location.protocol}//${window.location.host}${mmCfg.networkPath}`; + if (chainID !== chainIDHex) { + await window.ethereum.request({ + method: "wallet_addEthereumChain", + params: [ + { + chainId: chainIDHex, + chainName: mmCfg.chainName, + nativeCurrency: { + name: mmCfg.symbol, + symbol: mmCfg.symbol, + decimals: mmCfg.decimals, + }, + rpcUrls: mmCfg.rpcUrls, + blockExplorerUrls: [blockscoutURL], + }, + ], + }); + } + return true; + } catch (error) { + console.error(`failed to add chain to metamask: ${error}`); + return false; + } +}; diff --git a/frontend-v2/src/common/apollo-client.ts b/frontend-v2/src/common/apollo-client.ts new file mode 100644 index 0000000..a3b1bfb --- /dev/null +++ b/frontend-v2/src/common/apollo-client.ts @@ -0,0 +1,14 @@ +import { ApolloClient, InMemoryCache, HttpLink } from "@apollo/client"; +import fetch from "isomorphic-unfetch"; + +const apiGatewayUrl = "https://blockroma.com/ethw/mainnet/api-gateway/"; + +export const apolloClient = new ApolloClient({ + ssrMode: false, + link: new HttpLink({ + uri: apiGatewayUrl, + fetch, + credentials: "same-origin", + }), + cache: new InMemoryCache().restore({}), +}); diff --git a/frontend-v2/src/common/asset-url.ts b/frontend-v2/src/common/asset-url.ts new file mode 100644 index 0000000..596a6c2 --- /dev/null +++ b/frontend-v2/src/common/asset-url.ts @@ -0,0 +1,6 @@ +export const assetURL = (path: string): string => { + if (path[0] !== "/") { + return `/${path}`; + } + return path; +}; diff --git a/frontend-v2/src/common/common-margin.tsx b/frontend-v2/src/common/common-margin.tsx new file mode 100644 index 0000000..c8fa017 --- /dev/null +++ b/frontend-v2/src/common/common-margin.tsx @@ -0,0 +1,5 @@ +import { styled } from "styletron-react"; + +export const CommonMargin = styled("div", () => ({ + margin: "8px", +})); diff --git a/frontend-v2/src/common/configure-store.ts b/frontend-v2/src/common/configure-store.ts new file mode 100644 index 0000000..10ff72a --- /dev/null +++ b/frontend-v2/src/common/configure-store.ts @@ -0,0 +1,38 @@ +import { applyMiddleware, compose, createStore, Reducer, Store } from "redux"; +import thunk from "redux-thunk"; +import { combineReducers } from "redux"; + +export function noopReducer( + state: Record = {}, + _: Record, +): Record { + return state; +} + +export const rootReducer = combineReducers({ + base: noopReducer, +}); + +export function configureStore( + initialState: { base: Record }, + reducer: Reducer = rootReducer, +): Store<{ base: Record }> { + const middleware = []; + if (typeof window !== "undefined") { + middleware.push(thunk); + } + + const enhancers = [applyMiddleware(...middleware)]; + + if ( + typeof window !== "undefined" && + window && + // @ts-ignore + window.__REDUX_DEVTOOLS_EXTENSION__ + ) { + // @ts-ignore + enhancers.push(window.__REDUX_DEVTOOLS_EXTENSION__()); + } + + return createStore(reducer, initialState, compose(...enhancers)); +} diff --git a/frontend-v2/src/common/flex.tsx b/frontend-v2/src/common/flex.tsx new file mode 100644 index 0000000..8f9c4b5 --- /dev/null +++ b/frontend-v2/src/common/flex.tsx @@ -0,0 +1,55 @@ +import { styled } from "styletron-react"; +import React, { ReactNode } from "react"; + +type Element = ReactNode; + +type PropTypes = { + children?: Array | Element; + column?: boolean; + center?: boolean; + nowrap?: boolean; + alignItems?: string; + width?: string; + backgroundColor?: string; + justifyContent?: string; + height?: string; + media?: { [key: string]: { [key: string]: string } }; + alignContent?: string; +} & React.CSSProperties; + +const AUTO = "auto"; + +export function Flex({ + children, + column = false, + center, + nowrap, + alignItems, + width = AUTO, + height = AUTO, + media = {}, + alignContent = AUTO, + backgroundColor = AUTO, + justifyContent, + ...otherProps +}: PropTypes): JSX.Element { + // @ts-ignore + const StyledDiv = styled("div", { + display: "flex", + "-webkit-box-flex": 1, + flexDirection: column ? "column" : "row", + justifyContent: justifyContent || (center ? "center" : "space-between"), + "-webkit-justify-content": center ? "center" : "space-between", + boxSizing: "border-box", + flexWrap: nowrap ? "nowrap" : "wrap", + alignContent: alignContent || (center ? "center" : "space-between"), + alignItems: alignItems || "center", + width, + height, + ...media, + backgroundColor, + ...otherProps, + }); + + return {children}; +} diff --git a/frontend-v2/src/common/footer.tsx b/frontend-v2/src/common/footer.tsx new file mode 100644 index 0000000..06ad277 --- /dev/null +++ b/frontend-v2/src/common/footer.tsx @@ -0,0 +1,148 @@ +import React, { useEffect, useState } from "react"; +import { assetURL } from "@/shared/common/asset-url"; +import { useChainConfig } from "@/shared/common/use-chain-config"; +import { chainSwitchOpts } from "@/shared/home/components/multi-chain-dropdown"; +import { getGithubTmplUrl } from "@/shared/common/github-tmpl-url"; +import { TOP_BAR_HEIGHT } from "./top-bar"; +import { useTranslation } from "next-i18next"; + +const addChainToMM = require("../blockscout-web-js-lib/add_chain_to_mm"); + +export const FOOTER_HEIGHT = 0; + +export const FOOTER_ABOVE = { + minHeight: `calc(100vh - ${FOOTER_HEIGHT + TOP_BAR_HEIGHT}px)`, +}; + +export function Footer(): JSX.Element { + const { t } = useTranslation("common"); + const [mmAdded, setMmAdded] = useState(false); + const chainConfig = useChainConfig(); + const [githubTmplUrl, setGithubTmplUrl] = useState(""); + useEffect(() => { + setGithubTmplUrl(getGithubTmplUrl({ symbol: chainConfig.symbol })); + }, [chainConfig.symbol]); + return ( + + ); +} diff --git a/frontend-v2/src/common/functions/paginations.ts b/frontend-v2/src/common/functions/paginations.ts new file mode 100644 index 0000000..1d243fe --- /dev/null +++ b/frontend-v2/src/common/functions/paginations.ts @@ -0,0 +1,23 @@ +export interface PageInfo { + hasNextPage: boolean | null; + endCursor: string | null; + startCursor: string | null; + hasPreviousPage: boolean | null; +} + +export interface WithPageInfo { + pageInfo: PageInfo | null; +} + +export function paginationProcessTotalNumPage( + withPageInfo: WithPageInfo | undefined | null, +): number { + if (!withPageInfo) { + return 1; + } + const { pageInfo } = withPageInfo; + const totalRecord = + parseInt(pageInfo?.endCursor || "20", 10) + + parseInt(pageInfo?.startCursor || "20", 10); + return Math.round(totalRecord / 20) - 1; +} diff --git a/frontend-v2/src/common/get-gas-used-percent.ts b/frontend-v2/src/common/get-gas-used-percent.ts new file mode 100644 index 0000000..410fc99 --- /dev/null +++ b/frontend-v2/src/common/get-gas-used-percent.ts @@ -0,0 +1,10 @@ +export function getGasUsedPercent( + gasUsed: string | null | undefined, + gasLimit: string | null | undefined, +): string { + const result = + (parseFloat(gasUsed ?? "0") / parseFloat(gasLimit ?? "0")) * 100; + + // Check if result is NaN, return "0.0" if true, otherwise return the toFixed(1) value. + return Number.isNaN(result) ? "0.0" : result.toFixed(1); +} diff --git a/frontend-v2/src/common/github-tmpl-url.ts b/frontend-v2/src/common/github-tmpl-url.ts new file mode 100644 index 0000000..3853f71 --- /dev/null +++ b/frontend-v2/src/common/github-tmpl-url.ts @@ -0,0 +1,72 @@ +function newGithubIssueUrl(options: Record = {}) { + let repoUrl; + if (options.repoUrl) { + repoUrl = options.repoUrl; + } else if (options.user && options.repo) { + repoUrl = `https://github.com/${options.user}/${options.repo}`; + } else { + throw new Error( + "You need to specify either the `repoUrl` option or both the `user` and `repo` options", + ); + } + + const url = new URL(`${repoUrl}/issues/new`); + + const types = [ + "body", + "title", + "labels", + "template", + "milestone", + "assignee", + "projects", + ]; + + for (const type of types) { + let value = options[type]; + if (value === undefined) { + // eslint-disable-next-line no-continue + continue; + } + + if (type === "labels" || type === "projects") { + if (!Array.isArray(value)) { + throw new TypeError(`The \`${type}\` option should be an array`); + } + + value = value.join(","); + } + + url.searchParams.set(type, value); + } + + return url.toString(); +} + +export const getGithubTmplUrl = ({ symbol }: { symbol: string }) => { + const ua = window?.navigator?.userAgent; + return newGithubIssueUrl({ + user: "stargately", + repo: "blockroma", + title: `${symbol}: `, + body: `*Describe your issue here.* + +### Environment +* Blockroma Version: ${new Date().toISOString()} + +* User Agent: \`${ua}\` + +### Steps to reproduce + +*Tell us how to reproduce this issue. If possible, push up a branch to your fork with a regression test we can run to reproduce locally.* + +### Expected Behaviour + +*Tell us what should happen.* + +### Actual Behaviour + +*Tell us what happens instead.* + `, + }); +}; diff --git a/frontend-v2/src/common/gtag.tsx b/frontend-v2/src/common/gtag.tsx new file mode 100644 index 0000000..600ac93 --- /dev/null +++ b/frontend-v2/src/common/gtag.tsx @@ -0,0 +1,22 @@ +import Script from "next/script"; +import React from "react"; + +export const Gtag: React.FC = () => { + return ( + <> + + + ); +}; diff --git a/frontend-v2/src/common/icon.tsx b/frontend-v2/src/common/icon.tsx new file mode 100644 index 0000000..af0520d --- /dev/null +++ b/frontend-v2/src/common/icon.tsx @@ -0,0 +1,32 @@ +import { styled } from "styletron-react"; +import React from "react"; + +const LEN = "32px"; + +type PropTypes = { + url: string; + + width?: string; + height?: string; + margin?: string; +}; + +export function Icon({ + width = LEN, + height = LEN, + url, + margin = "0", +}: PropTypes): JSX.Element { + const StyledDiv = styled("div", { + backgroundRepeat: "no-repeat", + backgroundPosition: "center", + backgroundSize: "contain", + backgroundImage: `url("${url}")`, + boxSizing: "border-box", + width, + height, + margin, + }); + + return ; +} diff --git a/frontend-v2/src/common/icons/cross.svg.tsx b/frontend-v2/src/common/icons/cross.svg.tsx new file mode 100644 index 0000000..a9db756 --- /dev/null +++ b/frontend-v2/src/common/icons/cross.svg.tsx @@ -0,0 +1,37 @@ +import React from "react"; + +function Cross(): JSX.Element { + return ( + + + + + + + + + + ); +} + +export { Cross }; diff --git a/frontend-v2/src/common/icons/hamburger.svg.tsx b/frontend-v2/src/common/icons/hamburger.svg.tsx new file mode 100644 index 0000000..4b721b4 --- /dev/null +++ b/frontend-v2/src/common/icons/hamburger.svg.tsx @@ -0,0 +1,22 @@ +import React from "react"; + +function Hamburger(): JSX.Element { + return ( + + + + ); +} + +export { Hamburger }; diff --git a/frontend-v2/src/common/normalize-token-value.ts b/frontend-v2/src/common/normalize-token-value.ts new file mode 100644 index 0000000..a960049 --- /dev/null +++ b/frontend-v2/src/common/normalize-token-value.ts @@ -0,0 +1,6 @@ +export function normalizeTokenValue(val?: string | null): string { + if (!val) { + return "0"; + } + return (parseFloat(val) / 1000000000000000000).toString(); +} diff --git a/frontend-v2/src/common/shorten-hash.ts b/frontend-v2/src/common/shorten-hash.ts new file mode 100644 index 0000000..9401eb9 --- /dev/null +++ b/frontend-v2/src/common/shorten-hash.ts @@ -0,0 +1,7 @@ +export function shortenHash(addr: string): string { + try { + return `${addr.slice(0, 8)}-${addr.slice(addr.length - 6, addr.length)}`; + } catch (err) { + return ""; + } +} diff --git a/frontend-v2/src/common/styled.tsx b/frontend-v2/src/common/styled.tsx new file mode 100644 index 0000000..552909d --- /dev/null +++ b/frontend-v2/src/common/styled.tsx @@ -0,0 +1,48 @@ +/* tslint:disable:no-any */ +import React, { PropsWithChildren } from "react"; +import { + createStyled, + StyletronComponent, + StyletronWrapper, +} from "styletron-react"; +import { driver, getInitialStyle, StyleObject } from "styletron-standard"; +import { Theme } from "./theme-types"; + +const wrapper: StyletronWrapper = (StyledComponent) => + function withThemeHOC(props: PropsWithChildren): JSX.Element { + return ( + <>{($theme: any) => } + ); + }; + +export interface StyledFn { + < + C extends keyof JSX.IntrinsicElements | React.ComponentType, + P extends Record, + >( + component: C, + style: (props: P & { $theme: Theme }) => StyleObject, + ): StyletronComponent< + Pick< + React.ComponentProps, + Exclude, { className: string }> + > & + P + >; + + >( + component: C, + style: StyleObject, + ): StyletronComponent< + Pick< + React.ComponentProps, + Exclude, { className: string }> + > + >; +} + +export const styled: StyledFn = createStyled({ + wrapper, + getInitialStyle, + driver, +}); diff --git a/frontend-v2/src/common/styles/style-animation.tsx b/frontend-v2/src/common/styles/style-animation.tsx new file mode 100644 index 0000000..59017b0 --- /dev/null +++ b/frontend-v2/src/common/styles/style-animation.tsx @@ -0,0 +1 @@ +export const transition = "all 0.2s ease"; diff --git a/frontend-v2/src/common/styles/style-font.tsx b/frontend-v2/src/common/styles/style-font.tsx new file mode 100644 index 0000000..1ab6b6f --- /dev/null +++ b/frontend-v2/src/common/styles/style-font.tsx @@ -0,0 +1,31 @@ +export const fontFamily = + "Inter,Helvetica Neue,sans-serif,Microsoft YaHei !important"; + +export const fonts = { + body: { + fontFamily, + }, + h1: { + fontSize: "3rem", + color: "#152935", + textTransform: "capitalize", + fontWeight: 700, + margin: "-1.15rem 0 0 -3px", + padding: 0, + transition: "250ms cubic-bezier(0.5, 0, 0.1, 1)", + }, + textBox: { + fontFamily, + fontSize: "18px !important", + fontWeight: 300, + }, + inputLabel: { + fontFamily, + fontSize: "14px", + fontWeight: 700, + }, + inputError: { + fontFamily, + fontSize: "12px !important", + }, +}; diff --git a/frontend-v2/src/common/styles/style-media.tsx b/frontend-v2/src/common/styles/style-media.tsx new file mode 100644 index 0000000..34f9899 --- /dev/null +++ b/frontend-v2/src/common/styles/style-media.tsx @@ -0,0 +1,14 @@ +export const PALM_WIDTH = 575; + +export const media = { + palm: `@media only screen and (max-width: ${PALM_WIDTH}px)`, + lap: `@media only screen and (min-width: ${PALM_WIDTH}px) and (max-width: 768px)`, + desk: "@media only screen and (min-width: 769px) and (max-width: 1280px)", + deskWide: "@media only screen and (min-width: 1281px)", +}; + +export const fullOnPalm = { + [media.palm]: { + width: "100%", + }, +}; diff --git a/frontend-v2/src/common/styles/style-padding.tsx b/frontend-v2/src/common/styles/style-padding.tsx new file mode 100644 index 0000000..4cfedcd --- /dev/null +++ b/frontend-v2/src/common/styles/style-padding.tsx @@ -0,0 +1,46 @@ +import { styled, StyleObject } from "styletron-react"; +import React, { CSSProperties } from "react"; + +import { Flex } from "../flex"; +import { media } from "./style-media"; + +export const wideContentPadding = { + paddingLeft: "16px", + paddingRight: "16px", +}; + +export const contentPadding = { + width: "100%", + [media.palm]: wideContentPadding, + paddingLeft: "6.6vw", + paddingRight: "6.6vw", + [media.deskWide]: { + paddingLeft: "16vw", + paddingRight: "16vw", + }, +}; + +export const maxContentWidth = { maxWidth: "1320px", width: "100%" }; + +export const topBottomContentPadding = { + paddingTop: "12px", + paddingBottom: "12px", +}; + +const Pd = styled("div", contentPadding); + +export function ContentPadding({ + children, + style, +}: { + children?: JSX.Element | null | Array; + style?: StyleObject; +}): JSX.Element { + return ( + + +
{children}
+
+
+ ); +} diff --git a/frontend-v2/src/common/theme-types.ts b/frontend-v2/src/common/theme-types.ts new file mode 100644 index 0000000..a51c3d6 --- /dev/null +++ b/frontend-v2/src/common/theme-types.ts @@ -0,0 +1,37 @@ +type Font = { + fontSize: string | number; + lineHeight: string | number; + fontFamily?: string; + letterSpacing?: string | number; +}; + +export type Theme = { + colors: { + primary: string; + secondary: string; + + black: string; + black10: string; + black20: string; + black40: string; + black60: string; + black80: string; + black95: string; + + text01: string; + textReverse: string; + + white: string; + + error: string; // Error + success: string; // Success + warning: string; // Warning + information: string; // Information + + nav01: string; // Global top bar + nav02: string; // CTA footer + nav03: string; // Global footer + }; + sizing: Array; + fonts: Array; +}; diff --git a/frontend-v2/src/common/top-bar.tsx b/frontend-v2/src/common/top-bar.tsx new file mode 100644 index 0000000..4dcbcbb --- /dev/null +++ b/frontend-v2/src/common/top-bar.tsx @@ -0,0 +1,237 @@ +import React, { useEffect, useState } from "react"; +import { styled } from "./styled"; +import { contentPadding, maxContentWidth } from "./styles/style-padding"; +import { media, PALM_WIDTH } from "./styles/style-media"; +import { transition } from "./styles/style-animation"; +import OutsideClickHandler from "react-outside-click-handler"; +import { CommonMargin } from "./common-margin"; +import { Hamburger } from "./icons/hamburger.svg"; +import { Cross } from "./icons/cross.svg"; +import { Icon } from "./icon"; +import Link from "next/link"; + +export const TOP_BAR_HEIGHT = 52; + +const Flex = styled("div", () => ({ + flexDirection: "row", + display: "flex", + boxSizing: "border-box", +})); + +const Menu = styled("div", { + display: "flex!important", + [media.palm]: { + display: "none!important", + }, +}); + +const BarPlaceholder = styled("div", ({ $theme }) => { + const height = TOP_BAR_HEIGHT / 2; + return { + display: "block", + padding: `${height}px ${height}px ${height}px ${height}px`, + backgroundColor: $theme.colors.nav01, + }; +}); + +const LogoWrapper = styled("a", { + height: `${TOP_BAR_HEIGHT}px`, + display: "flex", + alignItems: "center", +}); + +function Logo(): JSX.Element { + return ( + + + + ); +} + +const MaxWidth = styled("div", () => ({ + display: "flex", + flexDirection: "row", + ...maxContentWidth, + justifyContent: "space-between", + alignItems: "center", +})); + +const A = styled(Link, ({ $theme }) => ({ + marginLeft: "14px", + textDecoration: "none", + ":hover": { + color: $theme.colors.primary, + }, + transition, + color: $theme.colors.text01, + [media.palm]: { + boxSizing: "border-box", + width: "100%", + padding: "16px 0 16px 0", + borderBottom: "1px #EDEDED solid", + }, +})); + +// @ts-ignore +const Dropdown = styled("div", ({ $theme }) => ({ + backgroundColor: $theme.colors.nav01, + display: "flex", + flexDirection: "column", + ...contentPadding, + position: "fixed", + top: TOP_BAR_HEIGHT, + "z-index": "1", + width: "100vw", + height: "100vh", + alignItems: "flex-end!important", + boxSizing: "border-box", +})); + +function HamburgerBtn({ + displayMobileMenu, + children, + onClick, +}: { + displayMobileMenu: boolean; + children: Array | JSX.Element; + onClick: () => void; +}): JSX.Element { + const Styled = styled("div", ({ $theme }) => ({ + ":hover": { + color: $theme.colors.primary, + }, + display: "none!important", + [media.palm]: { + display: "flex!important", + ...(displayMobileMenu ? { display: "none!important" } : {}), + }, + cursor: "pointer", + justifyContent: "center", + })); + return {children}; +} + +function CrossBtn({ + displayMobileMenu, + children, +}: { + displayMobileMenu: boolean; + children: Array | JSX.Element; +}): JSX.Element { + const Styled = styled("div", ({ $theme }) => ({ + ":hover": { + color: $theme.colors.primary, + }, + display: "none!important", + [media.palm]: { + display: "none!important", + ...(displayMobileMenu ? { display: "flex!important" } : {}), + }, + cursor: "pointer", + justifyContent: "center", + padding: "5px", + })); + return {children}; +} + +const BrandText = styled("a", ({ $theme }) => ({ + textDecoration: "none", + ":hover": { + color: $theme.colors.primary, + }, + fontWeight: 700, + transition, + color: $theme.colors.text01, + marginLeft: 0, +})); + +const Bar = styled("nav", ({ $theme }) => ({ + display: "flex", + flexDirection: "row", + justifyContent: "center", + alignItems: "center", + lineHeight: `${TOP_BAR_HEIGHT}px`, + height: `${TOP_BAR_HEIGHT}px`, + backgroundColor: $theme.colors.nav01, + color: $theme.colors.text01, + borderBottom: "1px solid rgb(238, 236, 236)", + position: "fixed", + top: "0px", + left: "0px", + "z-index": "70", + ...contentPadding, + boxSizing: "border-box", +})); + +export const TopBar = (): JSX.Element => { + const routePrefix = "/"; + + const [displayMobileMenu, setDisplayMobileMenu] = useState(false); + useEffect(() => { + window.addEventListener("resize", () => { + if ( + document.documentElement && + document.documentElement.clientWidth > PALM_WIDTH + ) { + setDisplayMobileMenu(false); + } + }); + }, []); + + const hideMobileMenu = (): void => { + setDisplayMobileMenu(false); + }; + + const renderMenu = (): JSX.Element => ( + <> + + Home + + + About Us + + + ); + + const renderMobileMenu = (): JSX.Element | null => { + if (!displayMobileMenu) { + return null; + } + + return ( + + {renderMenu()} + + ); + }; + + return ( +
+ + + + + + OneFx + + + {renderMenu()} + + { + setDisplayMobileMenu(true); + }} + > + + + + + + + + + {renderMobileMenu()} +
+ ); +}; diff --git a/frontend-v2/src/common/use-chain-config.ts b/frontend-v2/src/common/use-chain-config.ts new file mode 100644 index 0000000..4201606 --- /dev/null +++ b/frontend-v2/src/common/use-chain-config.ts @@ -0,0 +1,21 @@ +import { useSelector } from "react-redux"; + +export type ChainConfig = { + chainId: number; + chainName: string; + symbol: string; + rpcUrls: string[]; + decimals: number; + networkPath: string; +}; + +export function useChainConfig(): ChainConfig { + return { + chainId: 7778, + chainName: "Blockroma", + symbol: "BLO", + rpcUrls: ["https://example.com"], + decimals: 18, + networkPath: "", + }; +} diff --git a/frontend-v2/src/explorer-components/adr-transaction.item.tsx b/frontend-v2/src/explorer-components/adr-transaction.item.tsx new file mode 100644 index 0000000..819eccb --- /dev/null +++ b/frontend-v2/src/explorer-components/adr-transaction.item.tsx @@ -0,0 +1,161 @@ +import React from "react"; +import { shortenHash } from "@/shared/common/shorten-hash"; +import { normalizeTokenValue } from "@/shared/common/normalize-token-value"; +import { TickingTs } from "@/shared/explorer-components/ticking-ts"; +import { useChainConfig } from "@/shared/common/use-chain-config"; +import { assetURL } from "@/shared/common/asset-url"; +import Link from "next/link"; +import { Status } from "@/shared/__generated__/globalTypes"; + +type AdrTx = { + id: string; + timestamp: any | null; + hash: any | null; + blockNumber: number | null; + value: string | null; + gasUsed: string | null; + cumulativeGasUsed: string | null; + error: string | null; + fromAddressHash: any | null; + toAddressHash: any | null; + status: Status | null; + gas: string | null; + gasPrice: string | null; + index: number | null; + input: any | null; + nonce: number | null; + r: string | null; + s: string | null; + v: string | null; +}; + +type Props = { + tx?: AdrTx | null; + selfAddressHash: string; +}; + +export const AdrTransactionItem: React.FC = ({ + tx, + selfAddressHash, +}) => { + const chainConfig = useChainConfig(); + if (!tx) { + return <>; + } + + return ( +
+
+ {/* Color Block */} +
+
+ + Transaction + +
+ + Success + +
+ {/* Content */} +
+
+ + {tx.hash} + +
Transfer
+
+ + {" "} + →{" "} + + + + + {normalizeTokenValue(tx.value)} {chainConfig.symbol} + + + {tx.gasUsed} TX Fee + + + {/* Transfer */} +
+ {/* Block info */} +
+ + + Block #{tx.blockNumber} + + + + + {tx.toAddressHash === selfAddressHash ? ( + + IN + + ) : ( + + OUT + + )} + +
+
+
+ ); +}; + +function MaybeClickableAddress({ + hash, + self, +}: { + hash: string; + self: string; +}): JSX.Element { + const addr = ( + + {hash} + {shortenHash(hash)} + + ); + if (hash !== self) { + return ( + + {addr} + + ); + } + + return addr; +} diff --git a/frontend-v2/src/explorer-components/blk-block-item.tsx b/frontend-v2/src/explorer-components/blk-block-item.tsx new file mode 100644 index 0000000..c112632 --- /dev/null +++ b/frontend-v2/src/explorer-components/blk-block-item.tsx @@ -0,0 +1,126 @@ +import React from "react"; +import { shortenHash } from "@/shared/common/shorten-hash"; +import { assetURL } from "@/shared/common/asset-url"; +import { TickingTs } from "./ticking-ts"; + +export type Blk = { + consensus: boolean | null; + difficulty: string | null; + gasLimit: string | null; + gasUsed: string | null; + hash: any | null; + miner: any | null; + nonce: any | null; + number: number | null; + parentHash: any | null; + size: number | null; + numTxs: number | null; + timestamp: any | null; + totalDifficulty: string | null; +}; + +type Props = { + blk: Blk; +}; + +export const BlkBlockItem: React.FC = ({ blk }) => { + const gasUsedPercent = ( + (parseFloat(blk.gasUsed ?? "0") / parseFloat(blk.gasLimit ?? "0")) * + 100 + ).toFixed(1); + + return ( +
+
+
+ + #{blk.number} + + + Block + +
+
+
+ {/* transactions */} + {blk.numTxs} transactions + {/* size */} + + {" "} + {Number(blk.size).toLocaleString()} bytes{" "} + + {/* age */} + +
+
+ {/* validator */} + Validator{" "} + + + + {shortenHash(blk.miner)} + + + +
+ + {/* + TODO(dora): block reward + +
+ Reward + 2 BMO +
+ */} +
+
+ {/* Priority Fee TODO(dora) */} + {/* 0 BMO Priority Fees */} + {/* Burnt Fees */} + {/* 0 BMO Burnt Fees */} + {/* Gas Limit */} + + {" "} + {parseFloat(blk.gasLimit || "0").toLocaleString()} Gas Limit{" "} + + {/* Gas Used */} +
+ {blk.gasUsed} ({gasUsedPercent}%) Gas Used +
+ {/* Progress bar */} +
+
+
+
+
+
+ ); +}; diff --git a/frontend-v2/src/explorer-components/blk-list.tsx b/frontend-v2/src/explorer-components/blk-list.tsx new file mode 100644 index 0000000..98ce8cc --- /dev/null +++ b/frontend-v2/src/explorer-components/blk-list.tsx @@ -0,0 +1,20 @@ +import React from "react"; +import { Blk, BlkBlockItem } from "@/shared/explorer-components/blk-block-item"; + +type Props = { + blks?: Array | null | undefined; +}; + +export const BlkList: React.FC = ({ blks }) => { + if (!blks) { + return <>; + } + + return ( +
+
+ {blks.map((blk) => blk && )} +
+
+ ); +}; diff --git a/frontend-v2/src/explorer-components/copy-address.tsx b/frontend-v2/src/explorer-components/copy-address.tsx new file mode 100644 index 0000000..1e244d5 --- /dev/null +++ b/frontend-v2/src/explorer-components/copy-address.tsx @@ -0,0 +1,43 @@ +import React, { createRef, useEffect, useState } from "react"; + +export function CopyAddress({ addressHash }: { addressHash: string }) { + const [copied, setCopied] = useState(false); + const text = copied ? "Copied!" : "Copy From Address"; + const ref = createRef(); + useEffect(() => { + ref.current?.addEventListener("mouseleave", () => { + setCopied(false); + }); + ref.current?.addEventListener("touchcancel", () => { + setCopied(false); + }); + }, [ref]); + return ( + { + navigator.clipboard.writeText(addressHash); + setCopied(true); + }} + > + + + + + ); +} diff --git a/frontend-v2/src/explorer-components/copy-to-clipboard.tsx b/frontend-v2/src/explorer-components/copy-to-clipboard.tsx new file mode 100644 index 0000000..cdd4aa9 --- /dev/null +++ b/frontend-v2/src/explorer-components/copy-to-clipboard.tsx @@ -0,0 +1,51 @@ +import * as React from "react"; +import { createRef, useEffect, useState } from "react"; + +type Props = { + value: string; + reason: string; +}; + +export function CopyToClipboard({ value, reason }: Props): JSX.Element { + const [copied, setCopied] = useState(false); + const text = copied ? "Copied!" : reason; + const ref = createRef(); + useEffect(() => { + ref.current?.addEventListener("mouseleave", () => { + setCopied(false); + }); + ref.current?.addEventListener("touchcancel", () => { + setCopied(false); + }); + }, [ref]); + + return ( + { + setCopied(true); + + navigator.clipboard.writeText(value); + }} + > + + + + + ); +} diff --git a/frontend-v2/src/explorer-components/data-input.tsx b/frontend-v2/src/explorer-components/data-input.tsx new file mode 100644 index 0000000..7cad469 --- /dev/null +++ b/frontend-v2/src/explorer-components/data-input.tsx @@ -0,0 +1,103 @@ +import React, { useEffect, useState } from "react"; +import OutsideClickHandler from "react-outside-click-handler"; +import { CopyToClipboard } from "./copy-to-clipboard"; + +export const DataInput: React.FC<{ input: string }> = ({ input }) => { + const [showMenu, setShowMenu] = useState(false); + const [showUtf8, setShowUtf8] = useState(false); + useEffect(() => { + setShowMenu(false); + }, [showUtf8]); + useEffect(() => { + if (showUtf8) { + setCopy(hexToUtf8(input)); + } else { + setCopy(input); + } + }, [showUtf8]); + + const [copy, setCopy] = useState(input); + + return ( + <> + + +
+
+
+            {input}
+          
+
+
+ +
+
+
+            {hexToUtf8(input.replace(/^0x/, ""))}
+          
+
+
+ + ); +}; + +function hexToUtf8(hex: string): string { + const result = []; + for (let i = 0; i < hex.length; i += 2) { + result.push(String.fromCharCode(parseInt(hex.substr(i, 2), 16))); + } + return result.join(""); +} diff --git a/frontend-v2/src/explorer-components/pagination.tsx b/frontend-v2/src/explorer-components/pagination.tsx new file mode 100644 index 0000000..6242f42 --- /dev/null +++ b/frontend-v2/src/explorer-components/pagination.tsx @@ -0,0 +1,125 @@ +import React, { FormEventHandler } from "react"; + +type Props = { + position: "top" | "bottom"; + numPages: number; + curPage: number; + setCurPage: (curPage: number) => void; +}; + +export const Pagination: React.FC = ({ + curPage, + numPages, + setCurPage, + position, +}) => { + const prev = curPage - 1; + const next = curPage + 1; + + const onSubmit: FormEventHandler = (event) => { + event.preventDefault(); + // @ts-ignore + const val = String(event?.target[0].value).trim(); + setCurPage(parseInt(val, 10) || 1); + }; + + return ( +
+ +
    +
  • Go to
  • +
  • +
    + + +
    +
  • +
+
+ ); +}; diff --git a/frontend-v2/src/explorer-components/ticking-ts.tsx b/frontend-v2/src/explorer-components/ticking-ts.tsx new file mode 100644 index 0000000..c8a7a39 --- /dev/null +++ b/frontend-v2/src/explorer-components/ticking-ts.tsx @@ -0,0 +1,32 @@ +import { formatDistanceToNowStrict } from "date-fns"; +import React, { useState } from "react"; + +export function TickingTs({ + timestamp, + className, + inTile, +}: { + timestamp: string; + className?: string; + inTile?: boolean; +}): JSX.Element { + const fromNow = formatDistanceToNowStrict(new Date(timestamp), { + addSuffix: true, + }); + const [val, setVal] = useState(fromNow); + setInterval(() => { + const newNow = formatDistanceToNowStrict(new Date(timestamp), { + addSuffix: true, + }); + setVal(newNow); + }, 1000); + return ( + + {val} + + ); +} diff --git a/frontend-v2/src/explorer-components/tx-contract-call-item.tsx b/frontend-v2/src/explorer-components/tx-contract-call-item.tsx new file mode 100644 index 0000000..9949511 --- /dev/null +++ b/frontend-v2/src/explorer-components/tx-contract-call-item.tsx @@ -0,0 +1,102 @@ +import React from "react"; +import { assetURL } from "@/shared/common/asset-url"; +import Link from "next/link"; + +export const TxContractCallItem: React.FC = () => { + const blockNumber = 123; + return ( +
+
+ {/* Color Block */} +
+
+ + Contract Call + +
+ + Success + +
+ {/* Content */} +
+ +
+ + 0x9fdc11e3189b0903c93efe9c0afaa01c2e1fcacb03e47db1de544ba409e0226a + +
0x344639b4
+
+
+ + + + + 0x0cdDE70d140DD0928b21520162C3031Caa0cEb5a + + + 0x0cdde7–0ceb5a + + + {" "} + →{" "} + + + + 0x981C44040CB6150a2b8A7F63FB182760505bf666 + + + 0x981c44–5bf666 + + + + + + 0 BMO + + 0.003077109375 TX Fee + + + {/* Transfer */} +
+ {/* Block info */} +
+ + Block #26559654 + + + 38 seconds ago + +
+
+
+ ); +}; diff --git a/frontend-v2/src/explorer-components/tx-status.tsx b/frontend-v2/src/explorer-components/tx-status.tsx new file mode 100644 index 0000000..fa8dd7e --- /dev/null +++ b/frontend-v2/src/explorer-components/tx-status.tsx @@ -0,0 +1,29 @@ +import * as React from "react"; + +type Prosp = { + status: "ERROR" | "OK" | null | undefined; +}; + +export function TxStatus({ status }: Prosp): JSX.Element { + if (status === "OK") { + return ( + + {" "} + Success + + ); + } + + return ( + + {" "} + Error + + ); +} diff --git a/frontend-v2/src/explorer-components/tx-token-transfer-item.tsx b/frontend-v2/src/explorer-components/tx-token-transfer-item.tsx new file mode 100644 index 0000000..18ed370 --- /dev/null +++ b/frontend-v2/src/explorer-components/tx-token-transfer-item.tsx @@ -0,0 +1,273 @@ +import React from "react"; +import { assetURL } from "@/shared/common/asset-url"; +import Link from "next/link"; + +export const TxTokenTransferItem: React.FC = () => { + const blockNumber = 123; + return ( +
+
+ {/* Color Block */} +
+
+ + Token Transfer + +
+ + Success + +
+ {/* Content */} +
+ + + + + + + + 0x621C2a125ec4A6D8A7C7A655A18a2868d35eb43C + + + 0x621c2a–5eb43c + + + {" "} + →{" "} + + + + + ArianeeStore + + + ArianeeS..re + + (0xd789a6–fb5859) + + + + + + 0 BMO + 0.003637884 TX Fee + + {/* Transfer */} +
+
+ + + + + 0xd789a6–fb5859 + + + {" "} + →{" "} + + + + 0x7d20a8–151c51 + + + + + + 0.02105596608669953 + + ARIA + + +
+
+
+ + + + + 0xd789a6–fb5859 + + + {" "} + →{" "} + + + + 0x3ae236–eed4ae + + + + + + 0.08422386434679812 + + ARIA + + +
+
+ + + + + 0xd789a6–fb5859 + + + {" "} + →{" "} + + + + 0xa79b29–e3add8 + + + + + + 0.04211193217339906 + + ARIA + + +
+
+
+ +
+ {/* Block info */} +
+ + + Block #{blockNumber} + + + + 38 seconds ago + +
+
+
+ ); +}; diff --git a/frontend-v2/src/explorer-components/tx-transaction-item.tsx b/frontend-v2/src/explorer-components/tx-transaction-item.tsx new file mode 100644 index 0000000..522c480 --- /dev/null +++ b/frontend-v2/src/explorer-components/tx-transaction-item.tsx @@ -0,0 +1,134 @@ +import React from "react"; +import { shortenHash } from "@/shared/common/shorten-hash"; +import { normalizeTokenValue } from "@/shared/common/normalize-token-value"; +import { TickingTs } from "@/shared/explorer-components/ticking-ts"; +import { useChainConfig } from "@/shared/common/use-chain-config"; +import { assetURL } from "@/shared/common/asset-url"; +import Link from "next/link"; + +export type Tx = { + id: string; + timestamp: any | null; + hash: any | null; + blockNumber: number | null; + value: string | null; + gasUsed: string | null; + cumulativeGasUsed: string | null; + error: string | null; + fromAddressHash: any | null; + toAddressHash: any | null; + status: any; + gas: string | null; + gasPrice: string | null; + index: number | null; + input: any | null; + nonce: number | null; + r: string | null; + s: string | null; + v: string | null; +}; + +type Props = { + tx?: Tx | undefined | null; +}; + +export const TxTransactionItem: React.FC = ({ tx }) => { + const chainConfig = useChainConfig(); + if (!tx) { + return <>; + } + return ( +
+
+ {/* Color Block */} +
+
+ + Transaction + +
+ + Success + +
+ {/* Content */} +
+ +
+ + {tx.hash} + +
Transfer
+
+
+ + + + + {tx.fromAddressHash} + + + {shortenHash(tx.fromAddressHash)} + + + {" "} + →{" "} + + + + {tx.toAddressHash} + + + {shortenHash(tx.toAddressHash)} + + + + + + + {normalizeTokenValue(tx.value)} {chainConfig.symbol} + + + {tx.gasPrice} TX Fee + + + {/* Transfer */} +
+ {/* Block info */} +
+ + + Block #{tx.blockNumber} + + + +
+
+
+ ); +}; diff --git a/frontend-v2/src/explorer-components/txs-list.tsx b/frontend-v2/src/explorer-components/txs-list.tsx new file mode 100644 index 0000000..bafcaf4 --- /dev/null +++ b/frontend-v2/src/explorer-components/txs-list.tsx @@ -0,0 +1,73 @@ +import React from "react"; +import { + Tx, + TxTransactionItem, +} from "@/shared/explorer-components/tx-transaction-item"; + +type Props = { + txs?: Array | null | undefined; +}; + +export function TxsList({ txs }: Props): JSX.Element { + if (!txs) { + return <>; + } + return ( + <> + {/* + // TODO(dora): pagination + + + */} + +
+ {txs.map((tx) => tx && )} +
+ + ); +} diff --git a/frontend-v2/src/home/components/ad-container.tsx b/frontend-v2/src/home/components/ad-container.tsx new file mode 100644 index 0000000..3cbced2 --- /dev/null +++ b/frontend-v2/src/home/components/ad-container.tsx @@ -0,0 +1,16 @@ +import * as React from "react"; + +export function AdContainer(): JSX.Element { + // TODO(dora): ads? + // @ts-ignore + if (true) { + return <>; + } + + // @ts-ignore + return ( +
+
+
+ ); +} diff --git a/frontend-v2/src/home/components/blk-tile.tsx b/frontend-v2/src/home/components/blk-tile.tsx new file mode 100644 index 0000000..04bb38e --- /dev/null +++ b/frontend-v2/src/home/components/blk-tile.tsx @@ -0,0 +1,87 @@ +import * as React from "react"; +import { shortenHash } from "@/shared/common/shorten-hash"; +import { TickingTs } from "@/shared/explorer-components/ticking-ts"; + +import { assetURL } from "@/shared/common/asset-url"; +import { useTranslation } from "next-i18next"; +import Link from "next/link"; + +export type Blk = { + consensus: boolean | null; + difficulty: string | null; + gasLimit: string | null; + gasUsed: string | null; + hash: any | null; + miner: any | null; + nonce: any | null; + number: number | null; + parentHash: any | null; + size: number | null; + timestamp: any | null; + numTxs: number | null; + totalDifficulty: string | null; +}; + +type Props = { + blk: Blk | null | undefined; +}; + +export function BlkTile({ blk }: Props): JSX.Element { + const { t } = useTranslation("common"); + if (!blk) { + return <>; + } + return ( +
+
+ + {blk.number} + +
+
+ + {blk.numTxs} {t("nav.txs")} + + +
+
+ Validator{" "} + + + + {/* + TODO(dora) validator name + */} + {shortenHash(blk.miner)} + + + +
+ {/* + TODO(dora) reward + +
Reward 2 BMO
+ + + */} +
+
+
+ ); +} diff --git a/frontend-v2/src/home/components/dark-mode-toggle.tsx b/frontend-v2/src/home/components/dark-mode-toggle.tsx new file mode 100644 index 0000000..b7e30f4 --- /dev/null +++ b/frontend-v2/src/home/components/dark-mode-toggle.tsx @@ -0,0 +1,34 @@ +import React from "react"; +import { useDispatch, useSelector } from "react-redux"; + +export const DarkModeToggle: React.FC = () => { + const { themeCode } = useSelector( + (state: { base: { themeCode: "dark" | "light" } }) => ({ + themeCode: state.base.themeCode, + }), + ); + const dispatch = useDispatch(); + + const onClick = () => { + dispatch({ + type: "SET_THEME", + payload: themeCode === "dark" ? "light" : "dark", + }); + }; + + return ( + + ); +}; diff --git a/frontend-v2/src/home/components/dashboard-banner.tsx b/frontend-v2/src/home/components/dashboard-banner.tsx new file mode 100644 index 0000000..b4d3ae4 --- /dev/null +++ b/frontend-v2/src/home/components/dashboard-banner.tsx @@ -0,0 +1,159 @@ +import React from "react"; + +export const DashboardBanner: React.FC = () => { + return ( +
+
+
+
+
+ + +
+
+
+ + Gas tracker + +
+ +
+
+
39.0 Gwei
+ + + +
+
+
+
+
+
+ + Daily Transactions + + + 87,580 + + + + +
+
+
+
+
+
+ + Average block time + + + 5 seconds + +
+
+ + Total transactions + +
+ + 53,185,348 + +
+
+
+ + Total blocks + + + 26,556,683 + +
+
+ + Wallet addresses + + + 19,438,885 + +
+
+
+
+
+
+ ); +}; diff --git a/frontend-v2/src/home/components/multi-chain-dropdown.tsx b/frontend-v2/src/home/components/multi-chain-dropdown.tsx new file mode 100644 index 0000000..182376b --- /dev/null +++ b/frontend-v2/src/home/components/multi-chain-dropdown.tsx @@ -0,0 +1,78 @@ +import React, { useState } from "react"; +import OutsideClickHandler from "react-outside-click-handler"; + +type Props = { + chainName: string; +}; + +export const chainSwitchOpts = { + mainnets: [ + ["/eth/mainnet/", "Ethereum"], + ["/ethw/mainnet/", "ETHW-mainnet"], + ], + testnets: [["/bmo/testnet/", "BoomMo Chain"]], +}; + +export function MultiChainDropdown({ chainName }: Props) { + const [showDropdown, setShowDropdown] = useState(false); + + return ( +
  • + + + setShowDropdown(false)}> +
    + Mainnets + + {chainSwitchOpts.mainnets.map((it) => ( + + {it[1]} + + ))} + + Testnets + {chainSwitchOpts.testnets.map((it) => ( + + {it[1]} + + ))} +
    +
    +
  • + ); +} diff --git a/frontend-v2/src/home/components/raw-modals.tsx b/frontend-v2/src/home/components/raw-modals.tsx new file mode 100644 index 0000000..315aa98 --- /dev/null +++ b/frontend-v2/src/home/components/raw-modals.tsx @@ -0,0 +1,354 @@ +import * as React from "react"; + +export function RawModals(): JSX.Element { + return ( + <> + + + + + + ); +} diff --git a/frontend-v2/src/home/components/raw-nav-alert.tsx b/frontend-v2/src/home/components/raw-nav-alert.tsx new file mode 100644 index 0000000..1576d4b --- /dev/null +++ b/frontend-v2/src/home/components/raw-nav-alert.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +export function RawNavAlert(): JSX.Element { + return ( +
    + BMO is joining the BMO ecosystem, and token holders can now swap BMO for + STAKE on the BMO chain! More info and instructions{" "} + here +
    + ); +} diff --git a/frontend-v2/src/home/components/raw-nav.tsx b/frontend-v2/src/home/components/raw-nav.tsx new file mode 100644 index 0000000..6d6f81a --- /dev/null +++ b/frontend-v2/src/home/components/raw-nav.tsx @@ -0,0 +1,438 @@ +import React, { FormEventHandler, useEffect, useRef, useState } from "react"; +import { assetURL } from "@/shared/common/asset-url"; +import OutsideClickHandler from "react-outside-click-handler"; +import { useChainConfig } from "@/shared/common/use-chain-config"; +import { CommonMargin } from "@/shared/common/common-margin"; + +import { MultiChainDropdown } from "@/shared/home/components/multi-chain-dropdown"; +import { useRouter } from "next/router"; +import { DarkModeToggle } from "./dark-mode-toggle"; +import { useTranslation } from "next-i18next"; +import Link from "next/link"; + +function DesktopSearch({ searchVal }: { searchVal: string }): JSX.Element { + const { t } = useTranslation("common"); + const desktopTextInput = useRef(null); + const [focusedField, setFocusedField] = useState(false); + const [dangerField, setDangerField] = useState(false); + useEffect(() => { + desktopTextInput?.current?.addEventListener("focus", () => { + setFocusedField(true); + setDangerField(false); + }); + desktopTextInput?.current?.addEventListener("blur", () => { + setFocusedField(false); + setDangerField(false); + }); + document.addEventListener("keyup", (event) => { + if (event.key === "/") { + desktopTextInput?.current?.focus(); + } + }); + if (desktopTextInput.current) { + desktopTextInput.current.value = searchVal; + } + }, [desktopTextInput, searchVal]); + + const onSubmit: FormEventHandler = (event) => { + setDangerField(false); + event.preventDefault(); + // @ts-ignore + const val = String(event?.target[0].value).trim(); + if (val.length === 66) { + window.location.replace(assetURL(`tx/${val}`)); + } else if (val.length === 42) { + window.location.replace(assetURL(`address/${val}`)); + } else if (parseInt(val, 10) > 0) { + window.location.replace(assetURL(`block/${val}`)); + } else { + setDangerField(true); + } + }; + + let fieldLabel = focusedField ? " focused-field" : ""; + if (dangerField) { + fieldLabel = " danger-field"; + } + + return ( +
    +
    +
    + +
    +
    + +
    +
    +
    + / +
    +
    +
    + +
    + ); +} + +function MobileSearch({ searchVal }: { searchVal: string }): JSX.Element { + const { t } = useTranslation(); + const textInput = useRef(null); + const [focusedField, setFocusedField] = useState(false); + const [dangerField, setDangerField] = useState(false); + useEffect(() => { + textInput?.current?.addEventListener("focus", () => { + setFocusedField(true); + setDangerField(false); + }); + textInput?.current?.addEventListener("blur", () => { + setFocusedField(false); + setDangerField(false); + }); + if (textInput.current) { + textInput.current.value = searchVal; + } + }, [textInput, searchVal]); + + const onSubmit: FormEventHandler = (event) => { + setDangerField(false); + event.preventDefault(); + // @ts-ignore + const val = event?.target[0].value; + if (val.length === 66) { + window.location.replace(assetURL(`tx/${val}`)); + } else if (val.length === 42) { + window.location.replace(assetURL(`address/${val}`)); + } else if (parseInt(val, 10) > 0) { + window.location.replace(assetURL(`block/${val}`)); + } else { + setDangerField(true); + } + }; + + let fieldLabel = focusedField ? " focused-field" : ""; + if (dangerField) { + fieldLabel = " danger-field"; + } + + return ( +
    +
    +
    + +
    +
    + +
    +
    +
    + / +
    +
    +
    + +
    + ); +} + +export const RawNav: React.FC = () => { + const { t } = useTranslation(); + const [barClapsed, setBarClapsed] = useState(true); + const chainConfig = useChainConfig(); + const router = useRouter(); + const { blockNumber, addressHash, txHash } = router.query; + const searchVal = blockNumber ?? addressHash ?? txHash ?? ""; + + return ( + setBarClapsed(true)}> + + + ); +}; diff --git a/frontend-v2/src/home/home-blocks-container.tsx b/frontend-v2/src/home/home-blocks-container.tsx new file mode 100644 index 0000000..cd1e6fd --- /dev/null +++ b/frontend-v2/src/home/home-blocks-container.tsx @@ -0,0 +1,51 @@ +import React from "react"; +import { useQueryBlocks } from "@/shared/blks-table-container/hooks/use-query-blocks"; +import { BlkTile } from "@/shared/home/components/blk-tile"; +import { assetURL } from "@/shared/common/asset-url"; +import { useTranslation } from "next-i18next"; +import Link from "next/link"; + +export const HomeBlocksContainer: React.FC = () => { + const { t } = useTranslation("common"); + const { data, loading, error, refetch } = useQueryBlocks( + { first: 4, after: 0 }, + { pollInterval: 5000 }, + ); + + if (loading) { + // TODO(dora) + return <>; + } + + const blks = data?.blocks?.edges?.map((e) => e?.node); + + return ( +
    +
    + + View All Blocks + +

    {t("nav.blocks")}

    + + {error && ( + + )} + +
    + {!!blks?.length && + blks.map((blk) => )} +
    +
    +
    + ); +}; diff --git a/frontend-v2/src/home/home-transactions-container.tsx b/frontend-v2/src/home/home-transactions-container.tsx new file mode 100644 index 0000000..9b60f3f --- /dev/null +++ b/frontend-v2/src/home/home-transactions-container.tsx @@ -0,0 +1,84 @@ +import * as React from "react"; +import { useGetTxs } from "@/shared/block-details-container/hooks/use-get-txs"; +import { TxTransactionItem } from "@/shared/explorer-components/tx-transaction-item"; + +import { assetURL } from "@/shared/common/asset-url"; +import { useTranslation } from "next-i18next"; +import Link from "next/link"; + +// TODO(dora): more tx coming in +// @ts-ignore +function MoreTxComingIn(): JSX.Element { + return ( + + ); +} + +export function HomeTransactionsContainer(): JSX.Element { + const { t } = useTranslation("common"); + const { data, refetch, loading, error } = useGetTxs( + { first: 20, after: 0 }, + { pollInterval: 5000 }, + ); + + if (loading) { + // TODO(dora) + return <>; + } + + const txs = data?.transactions?.edges?.map((e) => e?.node); + + return ( +
    +
    + + View All Transactions + +

    {t("nav.txs")}

    + {/* + TODO(dora): more tx coming in + + */} + + {error && ( + + )} + + {!txs?.length && ( +
    +
    + There are no transactions for this chain. +
    +
    + )} + + + {!!txs?.length && + txs.map((tx) => )} + +
    +
    + ); +} diff --git a/frontend-v2/src/home/home.tsx b/frontend-v2/src/home/home.tsx new file mode 100644 index 0000000..9faa12d --- /dev/null +++ b/frontend-v2/src/home/home.tsx @@ -0,0 +1,49 @@ +import React from "react"; +import { connect } from "react-redux"; +import { AdContainer } from "@/shared/home/components/ad-container"; +import { HomeTransactionsContainer } from "@/shared/home/home-transactions-container"; +import { HomeBlocksContainer } from "@/shared/home/home-blocks-container"; +import { RawModals } from "./components/raw-modals"; + +export const Home = connect( + (state: { base: { themeCode: "dark" | "light" } }) => ({ + themeCode: state.base.themeCode, + }), +)((): JSX.Element => { + return ( +
    +
    + {/* + TODO(dora): skip for now + + */} +
    +

    +

    + {/* + TODO(dora): skip for now + + */} +

    + + + + + +
    +
    +
    + + + +
    +
    + +
    + + ); +}); diff --git a/frontend-v2/src/home/index.ts b/frontend-v2/src/home/index.ts new file mode 100644 index 0000000..fce0a93 --- /dev/null +++ b/frontend-v2/src/home/index.ts @@ -0,0 +1 @@ +export { Home } from "./home"; diff --git a/frontend-v2/src/stylesheets/_code.scss b/frontend-v2/src/stylesheets/_code.scss new file mode 100644 index 0000000..4a9b049 --- /dev/null +++ b/frontend-v2/src/stylesheets/_code.scss @@ -0,0 +1,46 @@ +@use "sass:math"; + +pre { + white-space: pre-wrap; +} + +.pre-wrap code { + white-space: pre-wrap; +} + +.pre-decompiled code { + white-space: pre-wrap; + counter-increment: line; +} + +.pre-decompiled code::before { + content: counter(line); + display: inline-block; + width: 3em; + border-right: 1px solid #ddd; + padding: 0 0.5em; + margin-right: 0.5em; + color: #888; + -webkit-user-select: none; +} + +.pre-scrollable-shorty { + max-height: math.div($pre-scrollable-max-height, 7); +} + +.tile pre { + margin-bottom: 0; +} + +.contract-code-container { + @include media-breakpoint-down(md) { + flex-direction: column; + } + + & .buttons { + @include media-breakpoint-down(md) { + width: 100%; + margin-bottom: 10px; + } + } +} diff --git a/frontend-v2/src/stylesheets/_elements.scss b/frontend-v2/src/stylesheets/_elements.scss new file mode 100644 index 0000000..d755151 --- /dev/null +++ b/frontend-v2/src/stylesheets/_elements.scss @@ -0,0 +1,29 @@ +hr { + border-bottom: none; + border-left: none; + border-right: none; + border-top: 1px solid #f5f6fa; + margin: 30px 0; +} + +svg { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + display: inline-block; + font-style: normal; + font-variant: normal; + text-rendering: auto; + line-height: 1; +} + +dl { + margin-bottom: 12px; + + &:last-child { + margin-bottom: 0; + } + + dd { + margin: 0; + } +} diff --git a/frontend-v2/src/stylesheets/_helpers.scss b/frontend-v2/src/stylesheets/_helpers.scss new file mode 100644 index 0000000..55620f0 --- /dev/null +++ b/frontend-v2/src/stylesheets/_helpers.scss @@ -0,0 +1,54 @@ +.pr-0-md { + padding-right: 0 !important; + + @include media-breakpoint-down(md) { + padding-right: 15px !important; + } +} + +.pl-0-md { + padding-left: 0 !important; + + @include media-breakpoint-down(md) { + padding-left: 15px !important; + } +} + +.card-mr-50-md { + margin-right: $common-container-margin; + + @include media-breakpoint-down(md) { + margin-right: 0; + } +} + +.clearfix:after { + clear: both; + content: " "; /* Older browser do not support empty content */ + display: block; + height: 0; + visibility: hidden; +} + +.hidden { + display: none !important; +} + +.word-break-all { + word-break: break-all; +} + +.centered-container { + display: flex; + align-items: center; +} + +.pre-wrap { + white-space: pre-wrap; +} + +.mb-2-desktop { + @include media-breakpoint-up(sm) { + margin-bottom: 0.5rem !important; + } +} diff --git a/frontend-v2/src/stylesheets/_images-preload.scss b/frontend-v2/src/stylesheets/_images-preload.scss new file mode 100644 index 0000000..1042741 --- /dev/null +++ b/frontend-v2/src/stylesheets/_images-preload.scss @@ -0,0 +1,20 @@ +body:after { + position: absolute; + width: 0; + height: 0; + overflow: hidden; + z-index: -1; + content: url(/images/network-selector-icons/callisto-mainnet.svg) + url(/images/network-selector-icons/ethereum-mainnet.svg) + url(/images/network-selector-icons/ethereum-classic.svg) + url(/images/network-selector-icons/goerli-testnet.svg) + url(/images/network-selector-icons/kovan-testnet.svg) + url(/images/network-selector-icons/poa-core.svg) + url(/images/network-selector-icons/poa-sokol.svg) + url(/images/network-selector-icons/rinkeby-testnet.svg) + url(/images/network-selector-icons/rsk-mainnet.svg) + url(/images/network-selector-icons/ropsten-testnet.svg) + url(/images/network-selector-icons/xdai-chain.svg) + url(/images/network-selector-icons/lukso-l14-testnet.svg) + url(/images/network-selector-icons/circle-xusdt.svg); +} diff --git a/frontend-v2/src/stylesheets/_layout.scss b/frontend-v2/src/stylesheets/_layout.scss new file mode 100644 index 0000000..a32b61a --- /dev/null +++ b/frontend-v2/src/stylesheets/_layout.scss @@ -0,0 +1,16 @@ +@import "../../node_modules/@tarekraafat/autocomplete.js/dist/css/autoComplete.01"; + +.layout-container { + display: flex; + flex-direction: column; + min-height: 100vh; + + main { + flex-grow: 1; + background-color: #fbfafc; + } +} + +.logs-hash { + line-height: 24px !important; +} diff --git a/frontend-v2/src/stylesheets/_mixins.scss b/frontend-v2/src/stylesheets/_mixins.scss new file mode 100644 index 0000000..1e61c70 --- /dev/null +++ b/frontend-v2/src/stylesheets/_mixins.scss @@ -0,0 +1,253 @@ +@mixin textfield-placeholder($color: #a3a9b5) { + &::-webkit-input-placeholder { + color: $color; + } + &::-moz-placeholder { + color: $color; + } + &:-ms-input-placeholder { + color: $color; + } + &:-moz-placeholder { + color: $color; + } +} + +@mixin gradient-container() { + background-color: $primary; + background-image: linear-gradient( + to right, + $dashboard-banner-gradient-start, + $dashboard-banner-gradient-end + ); + box-shadow: 0 5px 40px -5px rgba(#000, 0.25); + margin-top: -3rem; +} + +@mixin stats-item($border-color: #fff, $text-color: #fff, $value-color: #fff) { + &-item { + display: flex; + flex-direction: column; + justify-content: center; + padding-left: calc(1rem + 4px); + padding-right: 1rem; + position: relative; + + &::before { + background-color: $border-color; + border-radius: 2px; + content: ""; + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 4px; + } + } + + &-label { + color: $text-color; + display: block; + white-space: nowrap; + } + + &-label-item { + margin-right: 20px; + + &:last-child { + margin-right: 0; + } + } + + &-value { + color: $value-color; + display: block; + font-size: 1.5rem; + font-weight: 200; + white-space: nowrap; + + @media (max-width: $breakpoint-lg) { + font-size: 1.25rem; + } + } +} + +@mixin btn-full($bg-color: $primary, $text-color: #fff) { + -webkit-appearance: none !important; + align-items: center; + background-color: $bg-color; + border-radius: 2px; + border: 1px solid $bg-color; + color: $text-color; + cursor: pointer; + display: flex; + font-size: 12px; + font-weight: 600; + height: 36px; + justify-content: center; + outline: none; + padding: 0 15px; + text-decoration: none; + transition: $transition-cont; + white-space: nowrap; + width: fit-content; + + &:hover { + background-color: darken($bg-color, 10%); + border-color: darken($bg-color, 10%); + color: $text-color; + text-decoration: none; + } + + svg { + margin-right: 12px; + } + + path { + fill: $text-color; + } + + &.full-width { + width: 100%; + } + + &[disabled] { + &, + &:hover { + background-color: $bg-color; + border-color: $bg-color; + cursor: default; + opacity: 0.5; + } + } + + &.m-b-0-7 { + margin-bottom: 0.7rem; + } +} + +@mixin btn-line($bg-color: #fff, $text-color: $secondary, $font-size: 12px) { + -webkit-appearance: none !important; + align-items: center; + background-color: $bg-color; + border-radius: 2px; + border: 1px solid $text-color; + color: $text-color; + cursor: pointer; + display: flex; + font-size: $font-size; + font-weight: 600; + height: 36px; + justify-content: center; + outline: none; + padding: 0 15px; + text-decoration: none; + transition: $transition-cont; + white-space: nowrap; + width: fit-content; + font-weight: 400; + + &:hover { + background-color: $text-color; + color: $bg-color; + text-decoration: none; + + path { + fill: $bg-color; + } + } + + svg { + margin-right: 12px; + } + + path { + transition: $transition-cont; + fill: $text-color; + } + + &.full-width { + width: 100%; + } + + &[disabled] { + &, + &:hover { + background-color: $bg-color !important; + border-color: $primary !important; + color: $primary !important; + cursor: default; + opacity: 0.5; + } + } +} + +@mixin square-icon-button($color, $dimensions) { + align-items: center; + border: 1px solid $color; + border-radius: 2px; + cursor: pointer; + display: flex; + height: $dimensions; + justify-content: center; + transition: $transition-cont; + width: $dimensions; + + svg { + display: block; + height: 100%; + width: 100%; + } + + path { + fill: $color; + transition: $transition-cont; + } + + &:hover { + background-color: $color; + + path { + fill: #fff; + } + } +} + +@mixin square-icon-button-inline($color, $dimensions) { + border: 1px solid $color; + border-radius: 2px; + cursor: pointer; + display: inline; + height: $dimensions; + transition: $transition-cont; + width: $dimensions; + + path { + fill: $color; + transition: $transition-cont; + } + + svg { + vertical-align: text-bottom; + margin-bottom: -1.1px; + } + + &:hover { + background-color: $color; + + path { + fill: #fff; + } + } +} + +@mixin image-2x($image, $width: 100%, $height: 100%) { + @media (min--moz-device-pixel-ratio: 1.3), + (-o-min-device-pixel-ratio: 2.6/2), + (-webkit-min-device-pixel-ratio: 1.3), + (min-device-pixel-ratio: 1.3), + (min-resolution: 1.3dppx) { + background-image: url($image); + background-size: $width $height; + } +} diff --git a/frontend-v2/src/stylesheets/_typography.scss b/frontend-v2/src/stylesheets/_typography.scss new file mode 100644 index 0000000..590c4a2 --- /dev/null +++ b/frontend-v2/src/stylesheets/_typography.scss @@ -0,0 +1,130 @@ +$common-link-color: $primary !default; +$blue: #4b89fb !default; +$success: #34c0ad !default; + +body { + font-family: $font-family; + font-size: 12px; +} + +h1 { + font-size: 26px; + font-weight: 200; +} + +h2 { + font-size: 18px; + font-weight: 200; +} + +h3 { + font-size: 14px; + font-weight: 600; + line-height: 36px; +} + +h4 { + color: $gray-600; + font-size: 16px; + font-weight: 300; + line-height: 24px; + margin-top: 4px; + + &.underline { + text-decoration: underline; + } +} + +h5 { + font-size: 14px; +} + +p { + font-size: 16px; + + @media screen and (max-width: 768px) { + font-size: 16px; + } +} + +a { + color: $common-link-color; + text-decoration: none; + + &:hover, + &:focus { + color: darken($common-link-color, 20%); + text-decoration: underline; + } + + .bg-primary &:hover, + .bg-primary &:focus { + color: $white; + } +} + +label, +textarea.form-control { + font-size: 13px; +} + +.monospace { + font-family: $font-family-monospace; +} + +.contract-address { + display: inline-block; + text-decoration: underline; + text-decoration-style: dashed; + &:hover { + text-decoration-style: none; + } +} + +.text { + &-transaction { + color: $blue; + } + + &-contract-call { + color: $green; + } + + &-contract-creation { + color: $pink; + } + + &-token { + color: $orange; + } + + &-internal-transaction { + color: $teal; + } + + &-faded { + opacity: 0.7; + } +} + +[data-transaction-status="Success"], +[data-internal-transaction-type="Reward"] { + color: $success; +} + +[data-internal-transaction-type="Call"] { + color: $blue; +} + +[data-internal-transaction-type="Delegate Call"] { + color: $purple; +} + +[data-internal-transaction-type="Create"] { + color: $pink; +} + +[data-transaction-status^="Error"], +[data-internal-transaction-type="Suicide"] { + color: $danger; +} diff --git a/frontend-v2/src/stylesheets/app.scss b/frontend-v2/src/stylesheets/app.scss new file mode 100644 index 0000000..8549fea --- /dev/null +++ b/frontend-v2/src/stylesheets/app.scss @@ -0,0 +1,135 @@ +@import "./components/route_prefix"; +@import "./mixins"; + +/* Phoenix flash messages */ +.alert:empty { + display: none; +} + +/* This file is for your main application css. */ + +// Font Awesome +$fa-font-path: $route-prefix + "/webfonts"; +@import "../../node_modules/@fortawesome/fontawesome-free/scss/fontawesome"; +@import "../../node_modules/@fortawesome/fontawesome-free/scss/brands"; +@import "../../node_modules/@fortawesome/fontawesome-free/scss/regular"; +@import "../../node_modules/@fortawesome/fontawesome-free/scss/solid"; + +// Bootstrap Core CSS +@import "../../node_modules/bootstrap/scss/functions"; +@import "../../node_modules/bootstrap/scss/variables"; +@import "../../node_modules/bootstrap/scss/mixins"; + +@import "theme/variables"; + +@import "../../node_modules/bootstrap/scss/root"; +@import "../../node_modules/bootstrap/scss/reboot"; +@import "../../node_modules/bootstrap/scss/grid"; +@import "../../node_modules/bootstrap/scss/code"; +@import "../../node_modules/bootstrap/scss/close"; +@import "../../node_modules/bootstrap/scss/buttons"; +@import "../../node_modules/bootstrap/scss/forms"; +@import "../../node_modules/bootstrap/scss/input-group"; +@import "../../node_modules/bootstrap/scss/utilities/spacing"; +@import "../../node_modules/bootstrap/scss/utilities/sizing"; +@import "../../node_modules/bootstrap/scss/utilities/display"; +@import "../../node_modules/bootstrap/scss/utilities/flex"; +@import "../../node_modules/bootstrap/scss/utilities/float"; +@import "../../node_modules/bootstrap/scss/utilities/text"; +@import "../../node_modules/bootstrap/scss/utilities/background"; +@import "../../node_modules/bootstrap/scss/utilities/position"; +@import "../../node_modules/bootstrap/scss/utilities/borders"; +@import "../../node_modules/bootstrap/scss/progress"; + +// Bootstrap Components +@import "../../node_modules/bootstrap/scss/alert"; +@import "../../node_modules/bootstrap/scss/badge"; +@import "../../node_modules/bootstrap/scss/card"; +@import "../../node_modules/bootstrap/scss/dropdown"; +@import "../../node_modules/bootstrap/scss/forms"; +@import "../../node_modules/bootstrap/scss/nav"; +@import "../../node_modules/bootstrap/scss/navbar"; +@import "../../node_modules/bootstrap/scss/pagination"; +@import "../../node_modules/bootstrap/scss/tables"; +@import "../../node_modules/bootstrap/scss/transitions"; + +// Code highlight +@import "../../node_modules/highlight.js/styles/default"; + +//Custom theme +@import "theme/fonts"; + +// Custom SCSS +@import "layout"; +@import "typography"; +@import "code"; +@import "helpers"; +@import "elements"; +//@import "forms"; +@import "components/panels"; +@import "components/nav_tabs"; +@import "components/dot"; +@import "components/pagination_container"; +@import "components/address_link"; +@import "components/footer"; +@import "components/filter"; +@import "components/button"; +@import "components/table"; +@import "components/navbar"; +@import "components/alerts"; +@import "components/animations"; +@import "components/card"; +@import "components/tile"; +@import "components/dashboard-banner"; +@import "components/icon-link"; +@import "components/badge"; +@import "components/description-list"; +@import "components/nounderline-link"; +@import "components/token-balance-dropdown"; +@import "components/address-overview"; +@import "components/token_tile_view_more"; +@import "components/dropdown"; +@import "components/loading-spinner"; +@import "components/transaction-input"; +@import "components/coin-balance-tile"; +@import "components/highlight"; +@import "components/btn_full"; +@import "components/btn_line"; +@import "components/check"; +@import "components/stakes_variables"; +@import "components/stakes_table"; +@import "components/form"; +@import "components/btn_add_to_mm"; +@import "components/btn_copy"; +@import "components/btn_qr"; +@import "components/btn_wallet"; +@import "components/btn_contract"; +@import "components/btn_address_card"; +@import "components/btn_dropdown_line"; +@import "components/transaction"; +@import "components/api"; +@import "components/verify_other_explorers"; +@import "components/errors"; +@import "components/log-search"; +@import "components/radio"; +@import "components/modal_variables"; +@import "components/new_smart_contract"; +@import "components/radio_big"; +@import "components/btn_no_border"; +@import "components/custom_tooltips"; +@import "components/_erc721_token_image_container"; +@import "components/_inventory_token_instance_image_container"; +@import "components/_external_link"; +@import "components/_label"; +@import "components/_token"; +@import "components/_dropzone"; +@import "components/_search"; +@import "components/_ad"; +// Font Awesome +@import "components/_fontawesome_icon"; + +@import "theme/dark-theme"; + +@import "theme/custom_contracts/dark-forest-theme"; +@import "theme/custom_contracts/circles-theme"; +@import "../../node_modules/bootstrap/scss/modal"; diff --git a/frontend-v2/src/stylesheets/components/_ad.scss b/frontend-v2/src/stylesheets/components/_ad.scss new file mode 100644 index 0000000..a98e712 --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_ad.scss @@ -0,0 +1,9 @@ +.ad-container { + display: table; + margin: 0 auto; + height: 96px; +} + +a.ad-url { + color: $tile-body-a-color; +} diff --git a/frontend-v2/src/stylesheets/components/_address-overview.scss b/frontend-v2/src/stylesheets/components/_address-overview.scss new file mode 100644 index 0000000..67854ff --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_address-overview.scss @@ -0,0 +1,83 @@ +.address-detail-hash-title { + color: #333; + font-size: 14px; + font-weight: bold; + line-height: 1.2; + text-align: left; + word-break: break-all; +} + +.overview-title-buttons { + display: flex; +} + +.overview-title-item { + display: block; + flex-grow: 0; + flex-shrink: 0; + height: fit-content; + margin-right: 8px; + + &:last-child { + margin-right: 0; + } +} + +.address-overview { + .card-section { + margin-bottom: $common-container-margin; + + &:first-child { + .card { + margin-right: $common-container-margin; + + @include media-breakpoint-down(md) { + margin-right: 0; + } + } + } + } + + .card { + margin-bottom: 0; + height: 100%; + } +} + +.balance-card-title { + margin-bottom: 0.5rem; +} + +.address-detail-item { + margin-right: 1em; + padding-bottom: 0.5em; +} + +.address-balance-text { + font-size: 12px; + font-weight: bold; + line-height: 1.2; + margin: 0 0 12px; + + &:last-child { + margin-bottom: 0; + } +} + +.address-current-balance { + line-height: 1.2; + margin: 0 0 12px; + font-weight: 400; + + small { + font-size: 11px; + } + + &:last-child { + margin-bottom: 0; + } +} + +.logs-decoded { + line-height: 25px !important; +} diff --git a/frontend-v2/src/stylesheets/components/_address_link.scss b/frontend-v2/src/stylesheets/components/_address_link.scss new file mode 100644 index 0000000..709c4cc --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_address_link.scss @@ -0,0 +1,23 @@ +.address-link { + &__font { + font-family: $font-family-monospace; + } + + &__type { + padding: 0 3px; + } + + &__seperator { + margin: 0 2px; + } + + &__copy-button { + background-color: $gray-100; + appearance: none; + border-color: transparent transparent transparent $border-color; + + i { + color: $gray-500 !important; + } + } +} diff --git a/frontend-v2/src/stylesheets/components/_alerts.scss b/frontend-v2/src/stylesheets/components/_alerts.scss new file mode 100644 index 0000000..4bbfc09 --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_alerts.scss @@ -0,0 +1,9 @@ +$alert-danger-background-color: #fff3f7 !default; +$alert-danger-border-color: #fff3f7 !default; +$alert-danger-color: #ff7986 !default; + +.alert-danger { + background-color: $alert-danger-background-color; + border-color: $alert-danger-border-color; + color: $alert-danger-color; +} diff --git a/frontend-v2/src/stylesheets/components/_animations.scss b/frontend-v2/src/stylesheets/components/_animations.scss new file mode 100644 index 0000000..895d030 --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_animations.scss @@ -0,0 +1,94 @@ +@keyframes fade-in { + 0% { + transform: scale(0.97); + opacity: 0; + } + + 50% { + transform: scale(1); + } + + 100% { + transform: scale(1); + opacity: 1; + } +} + +@keyframes fade-up-blocks-chain { + 0% { + flex-basis: 0%; + width: 0%; + opacity: 0; + overflow-x: hidden; + } + + 50% { + opacity: 0; + } + + 100% { + flex-basis: 25%; + width: 25%; + opacity: 1; + overflow-x: auto; + } +} + +@keyframes fade-up { + 0% { + height: 0; + opacity: 0; + } + + 25% { + opacity: 0; + transform: translateY(10px) scale(0.97); + } + + 100% { + height: 100%; + opacity: 1; + transform: translateY(0) scale(1); + } +} + +@keyframes shrink-out { + 0% { + transform: scale(1); + opacity: 1; + } + + 100% { + opacity: 0; + transform: scale(0.75); + } +} + +.fade-in { + animation: fade-in 0.6s ease-out 0.4s backwards; +} + +.fade-up-blocks-chain { + will-change: transform, opacity, width; + white-space: nowrap; + animation: fade-up-blocks-chain 0.3s cubic-bezier(0.455, 0.03, 0.515, 0.955); + + @include media-breakpoint-down(md) { + animation: fade-up 0.6s cubic-bezier(0.455, 0.03, 0.515, 0.955); + } +} + +.fade-up { + will-change: transform, opacity, height; + animation: fade-up 0.6s cubic-bezier(0.455, 0.03, 0.515, 0.955); + + @media (max-width: $breakpoint-md) { + max-height: 300px; + animation: fade-up--mobile 0.6s cubic-bezier(0.455, 0.03, 0.515, 0.955); + } +} + +.shrink-out { + transform-origin: bottom center; + animation: shrink-out 0.3s cubic-bezier(0.55, 0.055, 0.675, 0.19) forwards; +} diff --git a/frontend-v2/src/stylesheets/components/_api.scss b/frontend-v2/src/stylesheets/components/_api.scss new file mode 100644 index 0000000..afdee95 --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_api.scss @@ -0,0 +1,254 @@ +@use "sass:math"; + +$api-text-monospace-color: $secondary !default; +$api-text-monospace-background: rgba($api-text-monospace-color, 0.1) !default; +$api-anchors-list-background-color: #f6f7f9 !default; +$api-doc-list-item-title-color: #333 !default; +$api-doc-list-item-view-more-color: $api-doc-list-item-title-color !default; + +.api-text-monospace { + color: $api-text-monospace-color; + font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", + "Courier New", monospace; +} + +.api-text-monospace-background { + background-color: $api-text-monospace-background; + border-radius: 2px; + font-weight: 300; + padding: 5px 6px; +} + +.api-anchors-list { + background-color: $api-anchors-list-background-color; + column-gap: 40px; + display: grid; + grid-auto-flow: column; + grid-template-columns: 1fr 1fr 1fr; + grid-template-rows: 1fr 1fr 1fr; + padding: 30px; + row-gap: 25px; + + @include media-breakpoint-down(md) { + grid-template-columns: 1fr 1fr; + grid-template-rows: 1fr 1fr 1fr 1fr; + } + + @include media-breakpoint-down(sm) { + grid-auto-flow: row; + grid-template-columns: 1fr; + grid-template-rows: none; + } +} + +.api-anchors-list-item { + display: grid; + grid-template-columns: 0.75fr minmax(0, 1.25fr); + + &:hover { + text-decoration: none; + } +} + +.api-anchors-list-item-title { + align-self: center; + color: #333; + font-size: 14px; + font-weight: 300; + line-height: 1.2; + margin: 0; +} + +.api-anchors-list-item-value { + align-self: center; + font-size: 12px; + line-height: 1.2; + white-space: nowrap; +} + +.api-text-title { + font-size: 12px; + line-height: 1.2; + margin-left: 20px; +} +.api-doc-list-item { + border-bottom: 1px solid $base-border-color; + padding: $card-vertical-padding $card-horizontal-padding; + + &:last-child { + border-bottom: none; + } +} + +.api-doc-list-item-contents { + display: flex; + justify-content: space-between; + + @include media-breakpoint-down(sm) { + flex-direction: column; + } +} + +.api-doc-list-item-title { + color: $api-doc-list-item-title-color; + font-size: 15px; + font-weight: 400; + line-height: 1.2; + margin: 0 0 15px; +} + +.api-doc-list-item-query { + display: inline-block; + font-size: 12px; + line-height: 1.2; + margin-bottom: 20px; + word-break: break-all; + word-wrap: break-word; + + > strong { + font-weight: 700; + } +} + +.api-doc-list-item-text { + color: #aaa; + font-size: 14px; + font-weight: normal; + line-height: 1.5; + margin: 0; +} + +.api-doc-list-item-description { + width: 100%; +} + +.api-doc-list-item-controls { + display: flex; + flex-direction: column; + flex-grow: 1; + margin-left: 50px; + + @include media-breakpoint-down(sm) { + flex-direction: row; + justify-content: space-between; + margin-left: 0; + padding-top: 25px; + } +} + +.api-doc-list-item-controls-badges { + display: flex; + justify-content: flex-end; + + .api-badge { + margin-right: 8px; + + &:last-child { + margin-right: 0; + } + } +} + +.api-doc-list-item-controls-view-more { + align-self: flex-end; + color: $api-doc-list-item-view-more-color; + cursor: pointer; + font-size: 14px; + margin-top: auto; + white-space: nowrap; + + .fa { + margin-left: 5px; + } +} + +[aria-expanded="false"] { + .api-doc-list-item-controls-view-more-open { + display: block; + } + .api-doc-list-item-controls-view-more-close { + display: none; + } +} + +[aria-expanded="true"] { + .api-doc-list-item-controls-view-more-open { + display: none; + } + .api-doc-list-item-controls-view-more-close { + display: block; + } +} + +.api-doc-parameters-container { + border-top: 1px solid $base-border-color; + margin-top: 20px; + padding-top: $card-vertical-padding; +} + +.api-doc-parameters-list { + border-bottom: 1px solid $base-border-color; + margin-bottom: $card-vertical-padding; + padding-bottom: math.div($card-vertical-padding, 2); +} + +.api-doc-parameters-list-title { + color: #333; + font-size: 16px; + font-weight: 500; + line-height: 1.2; + margin: 0 0 15px; + white-space: nowrap; +} + +.api-doc-parameters-list-item { + margin-bottom: 15px; + + &:last-child { + margin-bottom: 0; + } + + @include media-breakpoint-down(sm) { + margin-bottom: 30px; + + [class*="col-"] { + margin-bottom: 8px; + + &:last-child { + margin-bottom: 0; + } + } + } +} + +.api-doc-parameters-list-item-title { + color: #333; + font-size: 14px; + font-weight: 500; + line-height: 1.2; + margin: 0 0 8px; +} + +.api-doc-parameters-list-item-subtitle { + color: #aaa; + font-size: 13px; + font-weight: 400; + line-height: 1.2; + margin: 0; +} + +.api-doc-parameters-list-item-description { + color: #333; + font-size: 14px; + font-weight: 400; + line-height: 1.2; + margin: 0 0 8px; + + &:last-child { + margin-bottom: 0; + } + + strong { + font-weight: 700; + } +} diff --git a/frontend-v2/src/stylesheets/components/_badge.scss b/frontend-v2/src/stylesheets/components/_badge.scss new file mode 100644 index 0000000..5d7c9d3 --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_badge.scss @@ -0,0 +1,45 @@ +$badge-success-color: #15bba6 !default; +$badge-success-background-color: rgba($badge-success-color, 0.1) !default; +$badge-danger-color: #ed9966 !default; +$badge-danger-background-color: rgba($badge-danger-color, 0.1) !default; +$badge-neutral-color: $secondary !default; +$badge-neutral-background-color: rgba($secondary, 0.1) !default; + +.badge { + color: $white; + + &.tile-badge { + font-size: 10px; + font-weight: bold; + height: 20px; + line-height: 20px; + margin: 0; + padding: 0 11px; + width: auto; + } + + &.api-badge { + font-size: 12px; + font-weight: 700; + height: 24px; + line-height: 26px; + margin: 0; + padding: 0 8px; + width: auto; + } + + &.badge-success { + background-color: $badge-success-background-color; + color: $badge-success-color; + } + + &.badge-danger { + background-color: $badge-danger-background-color; + color: $badge-danger-color; + } + + &.badge-neutral { + background-color: $badge-neutral-background-color; + color: $badge-neutral-color; + } +} diff --git a/frontend-v2/src/stylesheets/components/_btn_add_to_mm.scss b/frontend-v2/src/stylesheets/components/_btn_add_to_mm.scss new file mode 100644 index 0000000..023c58f --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_btn_add_to_mm.scss @@ -0,0 +1,30 @@ +@import "./route_prefix"; + +.btn-add-to-mm { + background-image: url($route-prefix + "/images/icons/metamask-fox.svg"); + background-position: center; + background-size: 22px 22px; + margin-bottom: 1px; + width: 22px; + height: 22px; + background-repeat: no-repeat; + display: inline-block; + vertical-align: middle; + cursor: pointer; +} + +.btn-add-chain-to-mm { + background-image: url($route-prefix + "/images/icons/metamask-fox.svg"); + background-position: center; + background-size: 20px 20px; + background-repeat: no-repeat; + background-position-x: 30px; + background-position-y: center; + padding-left: 40px; + outline: none; + + &.in-footer { + background-position-x: 0px; + padding-left: 25px; + } +} diff --git a/frontend-v2/src/stylesheets/components/_btn_address_card.scss b/frontend-v2/src/stylesheets/components/_btn_address_card.scss new file mode 100644 index 0000000..ac9fb0f --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_btn_address_card.scss @@ -0,0 +1,14 @@ +$btn-address-card-icon-color: $primary !default; +$btn-address-card-icon-dimensions: 31px !default; + +.btn-address-card-icon { + @include square-icon-button( + $btn-address-card-icon-color, + $btn-address-card-icon-dimensions + ); + + svg { + height: 10px; + width: 20px; + } +} diff --git a/frontend-v2/src/stylesheets/components/_btn_contract.scss b/frontend-v2/src/stylesheets/components/_btn_contract.scss new file mode 100644 index 0000000..fdc3d0d --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_btn_contract.scss @@ -0,0 +1,19 @@ +$btn-contract-color: $primary !default; +$btn-contract-dimensions: 31px !default; + +.btn-contract-icon { + @include square-icon-button($btn-contract-color, $btn-contract-dimensions); + display: block; + + @media not all and (min-resolution: 0.001dpcm) { + @supports (-webkit-appearance: none) { + svg { + &.safari_only { + height: 32px; + width: 32px; + margin: 6.5px; + } + } + } + } +} diff --git a/frontend-v2/src/stylesheets/components/_btn_copy.scss b/frontend-v2/src/stylesheets/components/_btn_copy.scss new file mode 100644 index 0000000..83073b4 --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_btn_copy.scss @@ -0,0 +1,64 @@ +$btn-copy-color: $primary !default; +$btn-copy-dimensions: 31px !default; +$btn-copy-small-dimensions: 22px !default; + +.btn-copy-icon { + @include square-icon-button-inline($btn-copy-color, $btn-copy-dimensions); + &.btn-copy-icon-no-borders { + &:hover { + background-color: transparent; + path { + fill: $btn-copy-color; + } + } + border: none; + } + svg { + width: $btn-copy-dimensions; + height: $btn-copy-dimensions; + } + &.btn-copy-icon-small { + &.btn-copy-icon-custom { + position: absolute; + } + @include square-icon-button-inline( + $btn-copy-color, + $btn-copy-small-dimensions + ); + &.btn-copy-icon-no-borders { + &:hover { + background-color: transparent; + path { + fill: $btn-copy-color; + } + } + border: none; + } + svg { + width: $btn-copy-small-dimensions; + height: $btn-copy-small-dimensions; + } + } +} + +.btn-copy-mobile-container { + @include media-breakpoint-up(md) { + display: flex; + } +} + +.btn-copy-mobile { + @include media-breakpoint-up(md) { + margin-left: 0.5rem; + } +} + +.btn-copy-tx-raw-input-container { + position: relative; + width: 19px; +} + +.btn-copy-tx-raw-input { + position: absolute; + bottom: 0; +} diff --git a/frontend-v2/src/stylesheets/components/_btn_dropdown_line.scss b/frontend-v2/src/stylesheets/components/_btn_dropdown_line.scss new file mode 100644 index 0000000..bf4851c --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_btn_dropdown_line.scss @@ -0,0 +1,21 @@ +$btn-dropdown-line-bg: #fff !default; +$btn-dropdown-line-color: #e2e5ec !default; +$btn-dropdown-line-color-hover: #f5f6fa !default; +$btn-dropdown-line-font: #333; + +.btn-dropdown-line { + @include btn-line($btn-dropdown-line-bg, $btn-dropdown-line-color, 14px); + border-color: $btn-dropdown-line-color; + color: $btn-dropdown-line-font; + outline: none !important; + margin-right: 20px; + &.no-rm { + margin-right: 0; + } + + &:hover { + background-color: $btn-dropdown-line-color-hover; + border-color: $btn-dropdown-line-color; + color: $btn-dropdown-line-font; + } +} diff --git a/frontend-v2/src/stylesheets/components/_btn_full.scss b/frontend-v2/src/stylesheets/components/_btn_full.scss new file mode 100644 index 0000000..97964ad --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_btn_full.scss @@ -0,0 +1,6 @@ +$btn-full-primary-bg: $primary !default; +$btn-full-primary-color: #fff !default; + +.btn-full-primary { + @include btn-full($btn-full-primary-bg, $btn-full-primary-color); +} diff --git a/frontend-v2/src/stylesheets/components/_btn_line.scss b/frontend-v2/src/stylesheets/components/_btn_line.scss new file mode 100644 index 0000000..b62b345 --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_btn_line.scss @@ -0,0 +1,6 @@ +$btn-line-bg: #fff !default; +$btn-line-color: $secondary !default; + +.btn-line { + @include btn-line($btn-line-bg, $btn-line-color); +} diff --git a/frontend-v2/src/stylesheets/components/_btn_no_border.scss b/frontend-v2/src/stylesheets/components/_btn_no_border.scss new file mode 100644 index 0000000..a74bb45 --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_btn_no_border.scss @@ -0,0 +1,30 @@ +$btn-no-border-bg: #fff !default; +$btn-no-border-color: $primary !default; + +.btn-no-border { + @include btn-line($btn-no-border-bg, $btn-no-border-color); + + border-color: $btn-no-border-bg; + + &:hover { + border-color: $btn-no-border-color; + } +} + +.btn-no-border-link-to-tems { + background-color: rgba($primary, 0.1) !important; + border-color: #00000000 !important; + align-items: center; + border-radius: 2px; + display: flex; + font-size: 12px; + position: relative; + user-select: none; + text-align: center; + white-space: nowrap; + color: $primary !important; + + &:hover { + border-color: #f5f6fa; + } +} diff --git a/frontend-v2/src/stylesheets/components/_btn_qr.scss b/frontend-v2/src/stylesheets/components/_btn_qr.scss new file mode 100644 index 0000000..0f8fbc5 --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_btn_qr.scss @@ -0,0 +1,6 @@ +$btn-qr-color: $primary !default; +$btn-qr-dimensions: 31px !default; + +.btn-qr-icon { + @include square-icon-button($btn-qr-color, $btn-qr-dimensions); +} diff --git a/frontend-v2/src/stylesheets/components/_btn_swap.scss b/frontend-v2/src/stylesheets/components/_btn_swap.scss new file mode 100644 index 0000000..daeb373 --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_btn_swap.scss @@ -0,0 +1,32 @@ +.btn-swap { + background-size: 20px 21px; + width: 20px; + height: 21px; + background-repeat: no-repeat; + display: inline-block; + margin-bottom: 3px; + vertical-align: middle; + cursor: pointer; + + &.honeypot { + background-image: url(/images/icons/swap/honeyswap.png); + } + &.sushi { + background-image: url(/images/icons/swap/sushi.svg); + } + &.swapr { + background-image: url(/images/icons/swap/swapr.svg); + } + &.curve { + background-image: url(/images/icons/swap/curve.svg); + } + &.component { + background-image: url(/images/icons/swap/component.png); + } + &.cowswap { + background-image: url(/images/icons/swap/cowswap.png); + } + &.oneinch { + background-image: url(/images/icons/swap/1inch.svg); + } +} diff --git a/frontend-v2/src/stylesheets/components/_btn_wallet.scss b/frontend-v2/src/stylesheets/components/_btn_wallet.scss new file mode 100644 index 0000000..e0d7c43 --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_btn_wallet.scss @@ -0,0 +1,10 @@ +$btn-wallet-color: $btn-line-color !default; +$btn-wallet-dimensions: 31px !default; + +.btn-wallet-icon { + @include square-icon-button($btn-wallet-color, $btn-wallet-dimensions); + color: $btn-wallet-color; + &:hover { + color: #fff; + } +} diff --git a/frontend-v2/src/stylesheets/components/_button.scss b/frontend-v2/src/stylesheets/components/_button.scss new file mode 100644 index 0000000..5dd8d5e --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_button.scss @@ -0,0 +1,105 @@ +$button-primary-color: $primary !default; +$button-secondary-color: $secondary !default; + +.button, +.btn { + border-radius: 2px; + border: none; + cursor: pointer; + display: inline-block; + line-height: 1.2; + padding: 10px 16px; + text-align: center; + text-decoration: none; + transition: $transition-cont; + white-space: nowrap; + + &-primary { + background-color: $button-primary-color; + border: 1px solid $button-primary-color; + color: #fff; + + &:hover, + &:focus { + background-color: darken($button-primary-color, 10%); + border-color: darken($button-primary-color, 10%); + color: #fff; + outline: none !important; + text-decoration: none; + } + + &:disabled { + background-color: $gray-300; + color: $gray-800; + text-decoration: none; + } + } + + &-secondary { + background-color: #fff; + border: 1px solid $button-secondary-color; + color: $button-secondary-color; + font-weight: 400; + + &:hover, + &:focus { + background-color: darken($button-secondary-color, 10%); + border-color: darken($button-secondary-color, 10%); + color: #fff; + outline: none !important; + text-decoration: none; + } + } + + &-xs { + font-size: 11px; + padding: 6px 9px 6px !important; + } + + &-sm { + font-size: 12px; + padding: 10px 20px 10px; + } + + &-md { + font-size: 1.5rem; + padding: 15px 30px 15px; + } + + &-lg { + font-size: 1.5rem; + padding: 20px 60px 20px; + } + + &-danger { + background-color: #dc3545 !important; + border: 1px solid #dc3545 !important; + } + + // Block button + // ------------------------- + + &-block { + display: block; + width: 100%; + } + + &-disabled, + &:disabled { + background-color: $gray-300; + color: $gray-500; + text-decoration: none; + } +} + +// Vertically space out multiple block buttons +.button-block + .button-block { + margin-top: 5px; +} + +.spinner { + background-image: url("/images/spinner.svg"); + background-position: right; + background-repeat: no-repeat; + background-size: 30px; +} diff --git a/frontend-v2/src/stylesheets/components/_card.scss b/frontend-v2/src/stylesheets/components/_card.scss new file mode 100644 index 0000000..6227cf1 --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_card.scss @@ -0,0 +1,329 @@ +$card-background-color: #fff !default; +$card-tab-active: $primary !default; +$card-default-border-radius: 10px !default; +$card-horizontal-padding: 30px; +$card-vertical-padding: 30px; +$card-background-1: $primary !default; +$card-background-1-text-color: #fff !default; +$card-tab-icon-color: #20b760 !default; +$card-tab-icon-color-active: #fff !default; + +.card { + background-color: $card-background-color; + border-radius: $card-default-border-radius; + border: none; + box-shadow: 0 0 30px 0 rgba(202, 199, 226, 0.5); + margin-bottom: $common-container-margin; + + .block-details-row { + flex-direction: row; + @include media-breakpoint-down(sm) { + flex-direction: column; + } + + .block-detail-el { + & + .block-detail-el { + @include media-breakpoint-down(sm) { + margin-top: 6px; + } + } + } + } +} + +.card-background-1 { + background-color: $card-background-1; + color: $card-background-1-text-color; + a:not(.dropdown-item), + a:not(.dropdown-item):hover { + color: $card-background-1-text-color; + } +} + +.card-header { + background: transparent; + border-bottom: 1px solid $base-border-color; + padding: $card-vertical-padding $card-horizontal-padding; + + &-tabs { + margin: (-$card-spacer-y) (-$card-spacer-x); + } +} + +.card-title { + font-size: 18px; + font-weight: normal; + line-height: 1.2rem; + margin-bottom: 2rem; + + &.lg-card-title { + @media (max-width: 374px) { + font-size: 13px; + } + } + + &.margin-bottom-md { + margin-bottom: 25px; + } + + &.margin-bottom-sm { + margin-bottom: 15px; + } + + &.margin-bottom-xs { + margin-bottom: 10px; + } + + &.margin-bottom-0 { + margin-bottom: 0; + } + + .card-title-container & { + line-height: 1.2; + margin: 0; + + @include media-breakpoint-down(sm) { + margin-bottom: 25px; + } + } +} + +.card-subtitle { + color: #333; + font-size: 12px; + font-weight: normal; + line-height: 1.2; + margin: 0 0 30px; + + &.margin-bottom-0 { + margin-bottom: 0; + } +} + +.card-title-container { + align-items: center; + display: flex; + justify-content: space-between; + padding: 25px $card-horizontal-padding; + + @include media-breakpoint-down(sm) { + flex-direction: column; + } +} + +.card-title-paging { + padding: 0px $card-horizontal-padding; + display: flex; + justify-content: flex-end; + min-height: 54px; +} + +.card-footer-paging { + padding: 0px $card-horizontal-padding; + padding-bottom: 25px; + display: flex; + justify-content: flex-end; + min-height: 80px; +} + +.card-title-controls { + align-items: center; + display: flex; + justify-content: flex-end; + + @include media-breakpoint-down(sm) { + flex-direction: column; + } + + .card-title-control { + margin-right: 20px; + + &:last-child { + margin-right: 0; + } + + @include media-breakpoint-down(sm) { + margin-bottom: 20px; + margin-right: 0; + + &:last-child { + margin-bottom: 0; + } + } + } +} + +.card-body { + padding: $card-horizontal-padding; +} + +.card-body-flex-column-space-between { + display: flex; + flex-direction: column; + justify-content: space-between; +} + +.card-server-response-body { + max-height: 400px; + overflow-y: auto; +} + +.card-chain-blocks { + min-height: 233px; + max-height: auto; + [class*="col-"]:last-child { + .tile { + margin-bottom: 0; + } + } +} + +.card-chain-transactions { + min-height: 664px; + max-height: auto; + + .tile { + margin-bottom: 0; + } +} + +.card-tabs { + align-items: center; + border-top-left-radius: $card-default-border-radius; + border-top-right-radius: $card-default-border-radius; + border-bottom: 1px solid $base-border-color; + display: flex; + justify-content: flex-start; + overflow: hidden; + + @include media-breakpoint-down(md) { + flex-direction: column; + } +} + +.card-tab { + align-items: center; + background-color: $card-background-color; + color: #333; + cursor: pointer; + display: flex; + font-size: 14px; + font-weight: normal; + height: 70px; + padding: 0 25px; + text-align: center; + transition: $transition-cont; + + &:hover { + background-color: rgba($card-tab-active, 0.15); + color: $card-tab-active; + text-decoration: none; + } + + @include media-breakpoint-down(md) { + display: none; + width: 100%; + } + + .fa-check-circle { + color: $card-tab-icon-color; + margin-left: 6px; + } + + &.active { + background-color: $card-tab-active; + color: #fff; + cursor: default; + text-decoration: none; + + .fa-check-circle { + color: $card-tab-icon-color-active; + } + + @include media-breakpoint-down(md) { + cursor: pointer; + display: flex; + order: -1; + + &::after { + border-bottom: 0; + border-left: 0.3em solid transparent; + border-right: 0.3em solid transparent; + border-top: 0.3em solid; + content: ""; + display: inline-block; + height: 0; + margin-left: 10px; + width: 0; + } + + &.noCaret::after { + display: none; + } + } + } +} + +.mob-transaction { + @include media-breakpoint-down(sm) { + margin-left: 15px !important; + } +} + +.implementation-container { + margin-top: 10px; +} + +.implementation-title { + float: left; + margin-right: 5px; +} + +.implementation-value { + line-height: 30px; +} + +.connect-container { + display: flex; + line-height: 36px; +} + +.write-contract-btn { + padding: 6px 8px !important; + height: 31px !important; + font-size: 11px; +} + +.contract-plus-btn-container { + height: 31px !important; + &:hover i { + color: #fff !important; + } +} + +.contract-plus-btn { + color: $primary; + font-size: 15px; +} + +.custom-power-input { + height: 20px; + width: 50px !important; + margin-top: -10px !important; +} + +.list-title-description { + @media (min-width: 992px) { + display: inline-block; + } +} + +.list-top-pagination-container-wrapper { + @media (min-width: 992px) { + float: right; + } +} + +.function-output { + margin-left: -1rem; +} diff --git a/frontend-v2/src/stylesheets/components/_check.scss b/frontend-v2/src/stylesheets/components/_check.scss new file mode 100644 index 0000000..c7f7b1f --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_check.scss @@ -0,0 +1,48 @@ +$check-color: $primary !default; +$check-dimensions: 14px !default; + +.check { + align-items: center; + display: flex; + position: relative; + + input[type="checkbox"] { + height: 100%; + opacity: 0; + position: absolute; + width: 100%; + z-index: 5; + + &:checked + .check-icon::before { + background-color: $check-color; + content: ""; + height: 6px; + left: 50%; + position: absolute; + top: 50%; + transform: translateX(-50%) translateY(-50%); + width: 6px; + } + } + + .check-icon { + top: -1px; + border: 1px solid $base-border-color; + flex-grow: 0; + flex-shrink: 0; + height: $check-dimensions; + margin: 0 10px 0 0; + position: relative; + width: $check-dimensions; + z-index: 1; + } + + .check-text { + font-size: 14px; + font-weight: normal; + line-height: 1.2; + position: relative; + white-space: nowrap; + z-index: 1; + } +} diff --git a/frontend-v2/src/stylesheets/components/_check_tooltip.scss b/frontend-v2/src/stylesheets/components/_check_tooltip.scss new file mode 100644 index 0000000..64e416d --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_check_tooltip.scss @@ -0,0 +1,27 @@ +$check-tooltip-background: #f5f6fa !default; +$check-tooltip-background-active: $primary !default; +$check-tooltip-check: #a3a9b5 !default; +$check-tooltip-check-active: #fff !default; + +.check-tooltip { + display: block; + height: 16px; + width: 16px; + cursor: pointer; + + .check-tooltip-circle { + fill: $check-tooltip-background; + } + .check-tooltip-check { + fill: $check-tooltip-check; + } + + &:hover { + .check-tooltip-circle { + fill: $check-tooltip-background-active; + } + .check-tooltip-check { + fill: $check-tooltip-check-active; + } + } +} diff --git a/frontend-v2/src/stylesheets/components/_coin-balance-tile.scss b/frontend-v2/src/stylesheets/components/_coin-balance-tile.scss new file mode 100644 index 0000000..d8d782b --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_coin-balance-tile.scss @@ -0,0 +1,9 @@ +.tile.tile-type-coin-balance { + [data-balance-change-sign="Positive"] { + color: $green; + } + + [data-balance-change-sign="Negative"] { + color: $red; + } +} diff --git a/frontend-v2/src/stylesheets/components/_custom_tooltips.scss b/frontend-v2/src/stylesheets/components/_custom_tooltips.scss new file mode 100644 index 0000000..f50289d --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_custom_tooltips.scss @@ -0,0 +1,112 @@ +/* Custom Validator Tooltip at Block Details Page */ +$tooltip-background-color: $btn-line-color !default; + +.tooltip-validator-details { + left: -100px !important; +} + +/* Custom Validator Tooltip at Block Details Page end*/ + +/* Inversed color Bootstrap Tooltip */ + +.tooltip-inversed-color { + .tooltip-inner { + background-color: #fff !important; + color: #333 !important; + } +} + +.tooltip-inversed-color.bs-tooltip-top .arrow::before, +.tooltip-inversed-color.bs-tooltip-auto[x-placement^="top"] .arrow::before { + border-top-color: #fff !important; +} + +.tooltip-inversed-color.bs-tooltip-right .arrow::before, +.tooltip-inversed-color.bs-tooltip-auto[x-placement^="right"] .arrow::before { + border-right-color: #fff !important; +} + +.tooltip-inversed-color.bs-tooltip-bottom .arrow::before, +.tooltip-inversed-color.bs-tooltip-auto[x-placement^="bottom"] .arrow::before { + border-bottom-color: #fff !important; +} + +.tooltip-inversed-color.bs-tooltip-left .arrow::before, +.tooltip-inversed-color.bs-tooltip-auto[x-placement^="left"] .arrow::before { + border-left-color: #fff !important; +} + +/* Inversed color Bootstrap Tooltip end*/ + +/* Pale color Bootstrap Tooltip */ + +.tooltip-pale-color { + .tooltip-inner { + background-color: rgba(#fff, 0.5) !important; + color: #333 !important; + } +} + +.tooltip-pale-color.bs-tooltip-top .arrow::before, +.tooltip-pale-color.bs-tooltip-auto[x-placement^="top"] .arrow::before { + border-top-color: rgba($primary, 0.5) !important; +} + +.tooltip-pale-color.bs-tooltip-right .arrow::before, +.tooltip-pale-color.bs-tooltip-auto[x-placement^="right"] .arrow::before { + border-right-color: rgba($primary, 0.5) !important; +} + +.tooltip-pale-color.bs-tooltip-bottom .arrow::before, +.tooltip-pale-color.bs-tooltip-auto[x-placement^="bottom"] .arrow::before { + border-bottom-color: rgba($primary, 0.5) !important; +} + +.tooltip-pale-color.bs-tooltip-left .arrow::before, +.tooltip-pale-color.bs-tooltip-auto[x-placement^="left"] .arrow::before { + border-left-color: rgba($primary, 0.5) !important; +} + +/* Pale color Bootstrap Tooltip end*/ + +.tooltip-market-cap { + .tooltip-inner { + @media (min-width: 576px) { + max-width: 250px !important; + } + @media (min-width: 768px) { + max-width: 350px !important; + } + width: 350px !important; + } +} + +.tooltip-gas-usage { + .tooltip-inner { + @media (min-width: 576px) { + max-width: 150px !important; + } + @media (min-width: 768px) { + max-width: 150px !important; + } + width: 150px !important; + } +} + +.custom-tooltip-header { + font-size: 1.2em; + margin-bottom: 10px; +} + +.custom-tooltip-total-transactions { + margin-top: 6px; + @media (min-width: 992px) { + margin-top: 9px; + } +} + +.custom-tooltip-description { + .left { + text-align: left; + } +} diff --git a/frontend-v2/src/stylesheets/components/_dashboard-banner.scss b/frontend-v2/src/stylesheets/components/_dashboard-banner.scss new file mode 100644 index 0000000..0e8b065 --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_dashboard-banner.scss @@ -0,0 +1,269 @@ +$dashboard-banner-gradient-start: $primary !default; +$dashboard-banner-gradient-end: lighten( + $dashboard-banner-gradient-start, + 5% +) !default; +$dashboard-banner-network-plain-container-background-color: lighten( + $dashboard-banner-gradient-end, + 5% +) !default; +$dashboard-line-color-price: lighten( + $dashboard-banner-gradient-end, + 5% +) !default; +$dashboard-line-color-market: $secondary !default; +$dashboard-line-color-transactions: $warning !default; +$dashboard-stats-item-label-color: #fff !default; +$dashboard-stats-item-value-color: rgba(#fff, 0.8) !default; +$dashboard-banner-chart-legend-label-color: #fff !default; +$dashboard-banner-chart-legend-value-color: $dashboard-stats-item-value-color !default; +$dashboard-stats-item-border-color: $primary !default; +$dashboard-banner-network-plain-container-height: 205px; +$dashboard-banner-chart-axis-font-color: $dashboard-stats-item-value-color !default; +$dashboard-banner-chart-axis-font-color-alt: #333; + +.dashboard-banner-container { + @include gradient-container(); + margin-bottom: 3rem; + overflow: hidden; + padding: 0; + position: relative; + height: 264px; + @include media-breakpoint-down(sm) { + height: auto; + } + @include media-breakpoint-down(md) { + height: auto; + } +} + +.dashboard-banner { + display: flex; + justify-content: space-between; + position: relative; + z-index: 9; + + @include media-breakpoint-between(lg, xl) { + height: 249px; + } + + @include media-breakpoint-down(sm) { + flex-direction: column; + } +} + +.dashboard-banner-network-graph { + flex-grow: 1; + padding: 15px 0 0 0; + + @include media-breakpoint-down(md) { + display: flex; + flex-direction: column; + padding-top: 20px; + } +} + +.dashboard-banner-chart { + flex-grow: 1; + margin: 15px 0 20px 0; + max-width: 350px; + position: relative; + min-height: 100px; + height: calc(100% - 86px); + + @include media-breakpoint-down(md) { + flex-grow: 0; + margin-top: 20px; + margin-bottom: auto; + max-width: 100%; + } + + > canvas { + max-height: 100%; + max-width: 100%; + width: 100%; + } +} + +.dashboard-banner-chart-legend { + display: grid; + grid-template-columns: repeat(var(--numChartData), 0.9fr); + padding-bottom: 12px; + padding-left: 20px; + + .dashboard-banner-chart-legend-item { + padding-bottom: 3px; + padding-left: 12px; + padding-top: 3px; + position: relative; + padding-right: 12px; + + @include media-breakpoint-down(md) { + display: flex; + flex-direction: row; + } + + @media (max-width: 599px) { + padding-top: 0; + padding-bottom: 0; + flex-direction: column; + } + + &::before { + border-radius: 2px; + content: ""; + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 4px; + } + + &:nth-child(1)::before { + background-color: $dashboard-line-color-price; + } + + &:nth-child(2)::before { + background-color: $dashboard-line-color-market; + } + + &:nth-child(3)::before { + background-color: $dashboard-line-color-transactions; + } + } + + .dashboard-banner-chart-legend-label { + color: $dashboard-banner-chart-legend-label-color; + display: block; + font-size: 12px; + font-weight: 600; + line-height: 1.2; + margin: 0 0 5px; + + @media (max-width: 374px) { + position: relative; + top: -2px; + } + + @include media-breakpoint-down(md) { + margin: 0 5px 0 0; + } + } + + .dashboard-banner-chart-legend-value { + color: $dashboard-banner-chart-legend-value-color; + display: block; + font-size: 12px; + font-weight: normal; + line-height: 1.2; + + &.inline { + display: inline-block; + } + } + + .dashboard-banner-chart-legend-value-container { + white-space: nowrap; + } + + .gas-price-icon { + position: relative; + top: -2px; + path { + fill: $dashboard-line-color-price; + } + } +} + +.dashboard-banner-network-plain-container { + align-items: center; + align-self: flex-end; + background-color: $dashboard-banner-network-plain-container-background-color; + border-top-left-radius: 10px; + display: flex; + height: $dashboard-banner-network-plain-container-height; + justify-content: center; + margin: 45px 0 -15px 30px; + max-width: 100%; + padding: 30px 0 30px 60px; + width: 750px; + position: relative; + + @include media-breakpoint-down(lg) { + margin-top: 15px; + width: 550px; + } + + @include media-breakpoint-down(md) { + border-top-right-radius: 10px; + height: auto; + justify-content: flex-start; + margin-left: 0; + max-width: 100%; + padding: 20px 0 20px 20px; + width: 250px; + box-shadow: 0 0 35px 0 rgba(0, 0, 0, 0.2); + } + + @include media-breakpoint-down(sm) { + width: 100%; + } + + &::after { + background-color: $dashboard-banner-network-plain-container-background-color; + bottom: 0; + content: ""; + display: block; + height: $dashboard-banner-network-plain-container-height; + left: 0; + position: absolute; + width: 9999px; + z-index: -1; + box-shadow: 0 0 35px 0 rgba(0, 0, 0, 0.2); + border-top-left-radius: 10px; + + @include media-breakpoint-down(md) { + display: none; + } + } +} + +.dashboard-banner-network-stats { + column-gap: 25px; + display: grid; + grid-template-columns: 1fr 1fr 1fr 1fr; + + @include media-breakpoint-down(lg) { + grid-template-columns: 1fr 1fr; + row-gap: 20px; + } + + @include media-breakpoint-down(md) { + grid-template-columns: 1fr; + row-gap: 20px; + } + + @include media-breakpoint-down(sm) { + column-gap: 10px; + grid-template-columns: 1fr 1fr; + } + + @include stats-item( + $dashboard-stats-item-border-color, + $dashboard-stats-item-label-color, + $dashboard-stats-item-value-color + ); + + .dashboard-banner-network-stats-item { + @media (max-width: 374px) { + padding-left: calc(0.6rem + 4px); + padding-right: 0.5rem; + } + } + + .dashboard-banner-network-stats-value { + @media (max-width: 374px) { + font-size: 0.9rem; + } + } +} diff --git a/frontend-v2/src/stylesheets/components/_description-list.scss b/frontend-v2/src/stylesheets/components/_description-list.scss new file mode 100644 index 0000000..1441b37 --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_description-list.scss @@ -0,0 +1,3 @@ +dt { + font-weight: normal; +} diff --git a/frontend-v2/src/stylesheets/components/_dot.scss b/frontend-v2/src/stylesheets/components/_dot.scss new file mode 100644 index 0000000..d9fa046 --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_dot.scss @@ -0,0 +1,23 @@ +.transaction { + &__dot { + display: inline-block; + height: 10px; + width: 10px; + border-radius: 50%; + margin-left: 5px; + vertical-align: baseline; + + &--pending { + background-color: $gray-500; + } + &--success { + background-color: $success; + } + &--failed { + background-color: $danger; + } + &--out_of_gas { + background-color: $warning; + } + } +} diff --git a/frontend-v2/src/stylesheets/components/_dropdown.scss b/frontend-v2/src/stylesheets/components/_dropdown.scss new file mode 100644 index 0000000..3a789d9 --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_dropdown.scss @@ -0,0 +1,112 @@ +$dropdown-menu-item-color: #333 !default; +$dropdown-menu-item-hover-color: $secondary !default; +$dropdown-menu-item-hover-background: rgba($secondary, 0.1) !default; + +// These styles extend the default Bootstrap styles +.dropdown-menu { + border-bottom: 1px solid #e2e5ec; + border-left: 1px solid #e2e5ec; + border-radius: 0 0 2px 2px !important; + border-right: 1px solid #e2e5ec; + border-top: none; + box-shadow: $box-shadow; + padding: 0; + width: 100%; + + &.right { + left: auto; + right: 0; + } + + .nav-item & { + border-top-left-radius: 0 !important; + border-top-right-radius: 0 !important; + top: 45px; + + .dropdown-item:first-child { + border-top-left-radius: 0; + border-top-right-radius: 0; + } + } + + &.exponention-dropdown { + width: 100px; + min-width: 100px; + } +} + +.dropdown-item { + color: $dropdown-menu-item-color; + font-size: 12px; + padding: 10px 20px; + transition: $transition-cont; + white-space: initial; + + & { + &.active, + &:hover, + &:focus { + background-color: $dropdown-menu-item-hover-background; + color: $dropdown-menu-item-hover-color; + + .external-link-icon { + path { + fill: $header-icon-color-hover; + } + } + } + } + + &:first-child { + border-top-left-radius: 0; + border-top-right-radius: 0; + } + + &:last-child { + border-bottom-left-radius: 2px; + border-bottom-right-radius: 2px; + } + + &.header { + &, + &:hover, + &:active { + padding-left: 10px; + background-color: #fff !important; + cursor: default; + color: #333; + font-weight: 700; + } + } + + &.division { + border-top: 1px solid $base-border-color; + } +} + +.navbar .dropdown-menu { + border: none; +} + +.dropdown-search-icon { + color: $gray-300; + left: 8px; + pointer-events: none; + top: 5px; +} + +.dropdown-search-field { + padding-left: 2rem; +} + +.dropdown-toggle::after { + margin-left: 0.71em; + font-size: 12px !important; +} + +.token-balance-dropdown { + transform: none !important; + top: 20px !important; + left: unset !important; + width: 300px !important; +} diff --git a/frontend-v2/src/stylesheets/components/_dropzone.scss b/frontend-v2/src/stylesheets/components/_dropzone.scss new file mode 100644 index 0000000..f635c49 --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_dropzone.scss @@ -0,0 +1,541 @@ +/* + * The MIT License + * Copyright (c) 2012 Matias Meno + */ + +@-webkit-keyframes passing-through { + 0% { + opacity: 0; + -webkit-transform: translateY(40px); + -moz-transform: translateY(40px); + -ms-transform: translateY(40px); + -o-transform: translateY(40px); + transform: translateY(40px); + } + 30%, + 70% { + opacity: 1; + -webkit-transform: translateY(0px); + -moz-transform: translateY(0px); + -ms-transform: translateY(0px); + -o-transform: translateY(0px); + transform: translateY(0px); + } + 100% { + opacity: 0; + -webkit-transform: translateY(-40px); + -moz-transform: translateY(-40px); + -ms-transform: translateY(-40px); + -o-transform: translateY(-40px); + transform: translateY(-40px); + } +} + +@-moz-keyframes passing-through { + 0% { + opacity: 0; + -webkit-transform: translateY(40px); + -moz-transform: translateY(40px); + -ms-transform: translateY(40px); + -o-transform: translateY(40px); + transform: translateY(40px); + } + 30%, + 70% { + opacity: 1; + -webkit-transform: translateY(0px); + -moz-transform: translateY(0px); + -ms-transform: translateY(0px); + -o-transform: translateY(0px); + transform: translateY(0px); + } + 100% { + opacity: 0; + -webkit-transform: translateY(-40px); + -moz-transform: translateY(-40px); + -ms-transform: translateY(-40px); + -o-transform: translateY(-40px); + transform: translateY(-40px); + } +} + +@keyframes passing-through { + 0% { + opacity: 0; + -webkit-transform: translateY(40px); + -moz-transform: translateY(40px); + -ms-transform: translateY(40px); + -o-transform: translateY(40px); + transform: translateY(40px); + } + 30%, + 70% { + opacity: 1; + -webkit-transform: translateY(0px); + -moz-transform: translateY(0px); + -ms-transform: translateY(0px); + -o-transform: translateY(0px); + transform: translateY(0px); + } + 100% { + opacity: 0; + -webkit-transform: translateY(-40px); + -moz-transform: translateY(-40px); + -ms-transform: translateY(-40px); + -o-transform: translateY(-40px); + transform: translateY(-40px); + } +} + +@-webkit-keyframes slide-in { + 0% { + opacity: 0; + -webkit-transform: translateY(40px); + -moz-transform: translateY(40px); + -ms-transform: translateY(40px); + -o-transform: translateY(40px); + transform: translateY(40px); + } + 30% { + opacity: 1; + -webkit-transform: translateY(0px); + -moz-transform: translateY(0px); + -ms-transform: translateY(0px); + -o-transform: translateY(0px); + transform: translateY(0px); + } +} + +@-moz-keyframes slide-in { + 0% { + opacity: 0; + -webkit-transform: translateY(40px); + -moz-transform: translateY(40px); + -ms-transform: translateY(40px); + -o-transform: translateY(40px); + transform: translateY(40px); + } + 30% { + opacity: 1; + -webkit-transform: translateY(0px); + -moz-transform: translateY(0px); + -ms-transform: translateY(0px); + -o-transform: translateY(0px); + transform: translateY(0px); + } +} + +@keyframes slide-in { + 0% { + opacity: 0; + -webkit-transform: translateY(40px); + -moz-transform: translateY(40px); + -ms-transform: translateY(40px); + -o-transform: translateY(40px); + transform: translateY(40px); + } + 30% { + opacity: 1; + -webkit-transform: translateY(0px); + -moz-transform: translateY(0px); + -ms-transform: translateY(0px); + -o-transform: translateY(0px); + transform: translateY(0px); + } +} + +@-webkit-keyframes pulse { + 0% { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -ms-transform: scale(1); + -o-transform: scale(1); + transform: scale(1); + } + 10% { + -webkit-transform: scale(1.1); + -moz-transform: scale(1.1); + -ms-transform: scale(1.1); + -o-transform: scale(1.1); + transform: scale(1.1); + } + 20% { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -ms-transform: scale(1); + -o-transform: scale(1); + transform: scale(1); + } +} + +@-moz-keyframes pulse { + 0% { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -ms-transform: scale(1); + -o-transform: scale(1); + transform: scale(1); + } + 10% { + -webkit-transform: scale(1.1); + -moz-transform: scale(1.1); + -ms-transform: scale(1.1); + -o-transform: scale(1.1); + transform: scale(1.1); + } + 20% { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -ms-transform: scale(1); + -o-transform: scale(1); + transform: scale(1); + } +} + +@keyframes pulse { + 0% { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -ms-transform: scale(1); + -o-transform: scale(1); + transform: scale(1); + } + 10% { + -webkit-transform: scale(1.1); + -moz-transform: scale(1.1); + -ms-transform: scale(1.1); + -o-transform: scale(1.1); + transform: scale(1.1); + } + 20% { + -webkit-transform: scale(1); + -moz-transform: scale(1); + -ms-transform: scale(1); + -o-transform: scale(1); + transform: scale(1); + } +} + +.dropzone-1, +.dropzone-1 * { + box-sizing: border-box; +} + +.dropzone-1 { + min-height: 150px; + border: 2px solid rgba(0, 0, 0, 0.3); + background: white; + padding: 20px 20px; +} + +.dropzone-1.dz-clickable { + cursor: pointer; +} + +.dropzone-1.dz-clickable * { + cursor: default; +} + +.dropzone-1.dz-clickable .dz-message, +.dropzone-1.dz-clickable .dz-message * { + cursor: pointer; +} + +.dropzone-1.dz-started .dz-message { + display: none; +} + +.dropzone-1.dz-drag-hover { + border-style: solid; +} + +.dropzone-1.dz-drag-hover .dz-message { + opacity: 0.5; +} + +.dropzone-1 .dz-message { + text-align: center; + margin: 2em auto; +} + +.dropzone-1 .dz-message .dz-button { + background: none; + color: inherit; + border: none; + padding: 0; + font: inherit; + cursor: pointer; + outline: inherit; +} + +.dropzone-1 .dz-preview { + position: relative; + display: inline-block; + vertical-align: top; + margin: 16px; + min-height: 100px; +} + +.dropzone-1 .dz-preview:hover { + z-index: 1000; +} + +.dropzone-1 .dz-preview:hover .dz-details { + opacity: 1; +} + +.dropzone-1 .dz-preview.dz-file-preview .dz-image { + border-radius: 20px; + background: #999; + background: linear-gradient(to bottom, #eee, #ddd); +} + +.dropzone-1 .dz-preview.dz-file-preview .dz-details { + opacity: 1; +} + +.dropzone-1 .dz-preview.dz-image-preview { + background: white; +} + +.dropzone-1 .dz-preview.dz-image-preview .dz-details { + -webkit-transition: opacity 0.2s linear; + -moz-transition: opacity 0.2s linear; + -ms-transition: opacity 0.2s linear; + -o-transition: opacity 0.2s linear; + transition: opacity 0.2s linear; +} + +.dropzone-1 .dz-preview .dz-remove { + font-size: 14px; + text-align: center; + display: block; + cursor: pointer; + border: none; +} + +.dropzone-1 .dz-preview .dz-remove:hover { + text-decoration: underline; +} + +.dropzone-1 .dz-preview:hover .dz-details { + opacity: 1; +} + +.dropzone-1 .dz-preview .dz-details { + z-index: 20; + position: absolute; + top: 0; + left: 0; + opacity: 0; + font-size: 13px; + min-width: 100%; + max-width: 100%; + padding: 2em 1em; + text-align: center; + color: rgba(0, 0, 0, 0.9); + line-height: 150%; +} + +.dropzone-1 .dz-preview .dz-details .dz-size { + margin-bottom: 1em; + font-size: 16px; +} + +.dropzone-1 .dz-preview .dz-details .dz-filename { + white-space: nowrap; +} + +.dropzone-1 .dz-preview .dz-details .dz-filename:hover span { + border: 1px solid rgba(200, 200, 200, 0.8); + background-color: rgba(255, 255, 255, 0.8); +} + +.dropzone-1 .dz-preview .dz-details .dz-filename:not(:hover) { + overflow: hidden; + text-overflow: ellipsis; +} + +.dropzone-1 .dz-preview .dz-details .dz-filename:not(:hover) span { + border: 1px solid transparent; +} + +.dropzone-1 .dz-preview .dz-details .dz-filename span, +.dropzone-1 .dz-preview .dz-details .dz-size span { + background-color: rgba(255, 255, 255, 0.4); + padding: 0 0.4em; + border-radius: 3px; +} + +.dropzone-1 .dz-preview:hover .dz-image img { + -webkit-transform: scale(1.05, 1.05); + -moz-transform: scale(1.05, 1.05); + -ms-transform: scale(1.05, 1.05); + -o-transform: scale(1.05, 1.05); + transform: scale(1.05, 1.05); + -webkit-filter: blur(8px); + filter: blur(8px); +} + +.dropzone-1 .dz-preview .dz-image { + border-radius: 20px; + overflow: hidden; + width: 120px; + height: 120px; + position: relative; + display: block; + z-index: 10; +} + +.dropzone-1 .dz-preview .dz-image img { + display: block; +} + +.dropzone-1 .dz-preview.dz-success .dz-success-mark { + -webkit-animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1); + -moz-animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1); + -ms-animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1); + -o-animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1); + animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1); +} + +.dropzone-1 .dz-preview.dz-error .dz-error-mark { + opacity: 1; + -webkit-animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1); + -moz-animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1); + -ms-animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1); + -o-animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1); + animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1); +} + +.dropzone-1 .dz-preview .dz-success-mark, +.dropzone-1 .dz-preview .dz-error-mark { + pointer-events: none; + opacity: 0; + z-index: 500; + position: absolute; + display: block; + top: 50%; + left: 50%; + margin-left: -27px; + margin-top: -27px; +} + +.dropzone-1 .dz-preview .dz-success-mark svg, +.dropzone-1 .dz-preview .dz-error-mark svg { + display: block; + width: 54px; + height: 54px; +} + +.dropzone-1 .dz-preview.dz-processing .dz-progress { + opacity: 1; + -webkit-transition: all 0.2s linear; + -moz-transition: all 0.2s linear; + -ms-transition: all 0.2s linear; + -o-transition: all 0.2s linear; + transition: all 0.2s linear; +} + +.dropzone-1 .dz-preview.dz-complete .dz-progress { + opacity: 0; + -webkit-transition: opacity 0.4s ease-in; + -moz-transition: opacity 0.4s ease-in; + -ms-transition: opacity 0.4s ease-in; + -o-transition: opacity 0.4s ease-in; + transition: opacity 0.4s ease-in; +} + +.dropzone-1 .dz-preview:not(.dz-processing) .dz-progress { + -webkit-animation: pulse 6s ease infinite; + -moz-animation: pulse 6s ease infinite; + -ms-animation: pulse 6s ease infinite; + -o-animation: pulse 6s ease infinite; + animation: pulse 6s ease infinite; +} + +.dropzone-1 .dz-preview .dz-progress { + opacity: 1; + z-index: 1000; + pointer-events: none; + position: absolute; + height: 16px; + left: 50%; + top: 50%; + margin-top: -8px; + width: 80px; + margin-left: -40px; + background: rgba(255, 255, 255, 0.9); + -webkit-transform: scale(1); + border-radius: 8px; + overflow: hidden; +} + +.dropzone-1 .dz-preview .dz-progress .dz-upload { + background: #333; + background: linear-gradient(to bottom, #666, #444); + position: absolute; + top: 0; + left: 0; + bottom: 0; + width: 0; + -webkit-transition: width 300ms ease-in-out; + -moz-transition: width 300ms ease-in-out; + -ms-transition: width 300ms ease-in-out; + -o-transition: width 300ms ease-in-out; + transition: width 300ms ease-in-out; +} + +.dropzone-1 .dz-preview.dz-error .dz-error-message { + display: block; +} + +.dropzone-1 .dz-preview.dz-error:hover .dz-error-message { + opacity: 1; + pointer-events: auto; +} + +.dropzone-1 .dz-preview .dz-error-message { + pointer-events: none; + z-index: 1000; + position: absolute; + display: block; + display: none; + opacity: 0; + -webkit-transition: opacity 0.3s ease; + -moz-transition: opacity 0.3s ease; + -ms-transition: opacity 0.3s ease; + -o-transition: opacity 0.3s ease; + transition: opacity 0.3s ease; + border-radius: 8px; + font-size: 13px; + top: 130px; + left: -10px; + width: 140px; + background: #be2626; + background: linear-gradient(to bottom, #be2626, #a92222); + padding: 0.5em 1.2em; + color: white; +} + +.dropzone-1 .dz-preview .dz-error-message:after { + content: ""; + position: absolute; + top: -6px; + left: 64px; + width: 0; + height: 0; + border-left: 6px solid transparent; + border-right: 6px solid transparent; + border-bottom: 6px solid #be2626; +} + +// custom styles +.dropzone-1 { + border-color: $primary !important; + border-style: dashed !important; + align-items: center; + justify-content: center; + display: flex; + background: rgba($primary, 0.1) !important; +} diff --git a/frontend-v2/src/stylesheets/components/_erc721_token_image_container.scss b/frontend-v2/src/stylesheets/components/_erc721_token_image_container.scss new file mode 100644 index 0000000..e57c359 --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_erc721_token_image_container.scss @@ -0,0 +1,11 @@ +/* ERC721 media block */ +.erc721-media { + display: flex; + justify-content: center; + max-height: 200px; +} + +.erc721-media img { + height: 150px; +} +/* ERC721 media block end */ diff --git a/frontend-v2/src/stylesheets/components/_errors.scss b/frontend-v2/src/stylesheets/components/_errors.scss new file mode 100644 index 0000000..e7815fe --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_errors.scss @@ -0,0 +1,137 @@ +$error-tablet-breakpoint: 768px; + +// Block Not Found + +.block-not-found { + display: flex; + flex-direction: column; + padding-bottom: 50px; + @media (min-width: $error-tablet-breakpoint) { + flex-direction: row; + align-items: center; + justify-content: center; + padding-top: 52px; + } +} + +.block-not-found-img { + margin-bottom: 40px; + text-align: center; + @media (min-width: $error-tablet-breakpoint) { + margin-bottom: 0; + text-align: left; + } + img { + max-width: 100%; + height: auto; + } +} + +.block-not-found-content { + text-align: center; + @media (min-width: $error-tablet-breakpoint) { + text-align: left; + padding-left: 52px; + max-width: 396px; + } +} + +.error-title { + margin-bottom: 20px !important; +} + +.error-descr { + display: block; + font-size: 14px; + color: #a3a9b5; + line-height: 1.714; + margin-bottom: 22px; + word-wrap: break-word; +} + +.error-btn { + background: transparent; + display: inline-flex !important; +} + +// TX Not Found +.tx-nf { + display: flex; + align-items: center; + justify-content: center; + flex-direction: column; + padding-bottom: 50px; + @media (min-width: $error-tablet-breakpoint) { + flex-direction: row; + padding-top: 52px; + } +} + +.tx-nf-content { + margin-top: 52px; + max-width: 700px; + @media (min-width: $error-tablet-breakpoint) { + margin-left: 90px; + margin-top: 0; + } +} + +.tx-nf-blocks { + margin-bottom: 40px; + margin-top: 40px; +} + +.tx-nf-block { + background-color: #fff; + box-shadow: 0px 0px 30px 0px rgba(202, 199, 226, 0.5); + padding: 17px 40px 17px 20px; + position: relative; + border-radius: 6px; + @media (min-width: $error-tablet-breakpoint) { + width: calc(50% - 20px); + } +} + +.tx-nf-block { + .error-descr { + margin-bottom: 0; + } + & + .tx-nf-block { + margin-top: 30px; + @media (min-width: $error-tablet-breakpoint) { + margin-top: 0; + } + } +} + +.tx-nf-blocks-row { + display: flex; + justify-content: space-between; + flex-direction: column; + @media (min-width: $error-tablet-breakpoint) { + flex-direction: row; + } + & + .tx-nf-blocks-row { + margin-top: 30px; + @media (min-width: $error-tablet-breakpoint) { + margin-top: 40px; + } + } +} + +.tx-nf-number { + display: inline-block; + position: absolute; + top: -15px; + left: -15px; + width: 30px; + height: 30px; + border-radius: 15px; + background-color: $secondary; + box-shadow: 0px 3px 5px 0px rgba($secondary, 0.25); + color: #fff; + font-weight: 700; + font-size: 14px; + text-align: center; + line-height: 32px; +} diff --git a/frontend-v2/src/stylesheets/components/_external_link.scss b/frontend-v2/src/stylesheets/components/_external_link.scss new file mode 100644 index 0000000..9a0a4a0 --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_external_link.scss @@ -0,0 +1,20 @@ +.external-link-icon { + float: right; + margin-top: -1px; + + & { + &.active, + &:hover, + &:focus { + path { + fill: $header-icon-color-hover; + } + } + } +} + +.external-token-icon { + path { + fill: $header-icon-color-hover; + } +} diff --git a/frontend-v2/src/stylesheets/components/_filter.scss b/frontend-v2/src/stylesheets/components/_filter.scss new file mode 100644 index 0000000..0d99d48 --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_filter.scss @@ -0,0 +1,4 @@ +.filter { + min-width: 100%; + transform: translate3d(0, 34px, 0px) !important; +} diff --git a/frontend-v2/src/stylesheets/components/_fontawesome_icon.scss b/frontend-v2/src/stylesheets/components/_fontawesome_icon.scss new file mode 100644 index 0000000..2276a6e --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_fontawesome_icon.scss @@ -0,0 +1,58 @@ +@import "./route_prefix"; +$url-base: $route-prefix + "/images/icons/fontawesome/"; + +.fontawesome-icon { + background-color: $footer-text-color; + + &.github { + -webkit-mask: url($url-base + "github.svg") no-repeat center; + mask: url($url-base + "github.svg") no-repeat center; + height: 22px; + width: 22px; + mask-size: 22px !important; + -webkit-mask-size: 22px !important; + } + &.twitter { + -webkit-mask: url($url-base + "twitter.svg") no-repeat center; + mask: url($url-base + "twitter.svg") no-repeat center; + height: 22px; + width: 22px; + mask-size: 22px !important; + -webkit-mask-size: 22px !important; + } + &.telegram { + -webkit-mask: url($url-base + "telegram.svg") no-repeat center; + mask: url($url-base + "telegram.svg") no-repeat center; + height: 22px; + width: 22px; + mask-size: 22px !important; + -webkit-mask-size: 22px !important; + } + &.bar-chart { + -webkit-mask: url($url-base + "bar-chart.svg") no-repeat center; + mask: url($url-base + "bar-chart.svg") no-repeat center; + height: 22px; + width: 22px; + mask-size: 22px !important; + -webkit-mask-size: 22px !important; + } + &.info-circle { + -webkit-mask: url($url-base + "info-circle.svg") no-repeat center; + mask: url($url-base + "info-circle.svg") no-repeat center; + height: 12px; + width: 12px; + mask-size: 12px !important; + -webkit-mask-size: 12px !important; + } + &.tag { + -webkit-mask: url($url-base + "tag.svg") no-repeat center; + mask: url($url-base + "tag.svg") no-repeat center; + height: 12px; + width: 12px; + mask-size: 12px !important; + -webkit-mask-size: 12px !important; + display: inline-block; + background-color: #212121; + margin-bottom: -2px; + } +} diff --git a/frontend-v2/src/stylesheets/components/_footer.scss b/frontend-v2/src/stylesheets/components/_footer.scss new file mode 100644 index 0000000..c9250bb --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_footer.scss @@ -0,0 +1,121 @@ +$footer-background-color: $secondary !default; +$footer-title-color: #fff !default; +$footer-text-color: rgba(#fff, 0.7) !default; +$footer-link-color: $footer-text-color !default; +$footer-item-disc-color: $primary !default; +$footer-social-icon-color: $footer-text-color !default; +$footer-logo-height: 28px !default; +$footer-logo-width: auto !default; + +.footer { + background: $footer-background-color; + color: $footer-text-color; + font-size: 12px; + line-height: 1.67; + margin: 0; + padding: 40px 0; + position: relative; + + @media (max-width: $breakpoint-md) { + width: 100%; + } +} + +.footer-logo-row { + margin-bottom: 30px; +} + +.footer-logo { + max-height: $footer-logo-height; + width: $footer-logo-width; +} + +.footer-info-text { + margin: 0 0 25px; + padding: 0 20px 0 0; +} + +.footer-social-icons { + align-items: center; + display: flex; + margin: 0 0 25px; +} + +.footer-social-icon { + color: $footer-social-icon-color; + font-size: 22px; + margin-right: 15px; + text-decoration: none; + transition: $transition-cont; + + &:hover { + color: #fff; + } + + &:focus { + color: darken($footer-text-color, 5); + } + + &:last-child { + margin-right: 0; + } +} + +.footer-link { + color: $footer-link-color; + + &:hover { + color: $footer-link-color; + text-decoration: underline; + } +} + +.footer-list { + padding-top: 0; + + h3 { + color: $footer-title-color; + font-size: 14px; + font-weight: 300; + line-height: 1.4; + margin: 0 0 15px; + } + + ul { + list-style-type: none; + margin: 0 0 25px; + padding: 0; + + li { + align-items: center; + display: flex; + line-height: 2.5; + padding: 0; + + a { + transition: $transition-cont; + &:hover { + text-decoration: none; + color: #fff; + } + &:focus { + color: darken($footer-text-color, 5); + } + } + + &::before { + background-color: $footer-item-disc-color; + border-radius: 50%; + content: ""; + display: block; + height: 6px; + margin: 0 10px 0 0; + width: 6px; + } + } + } +} + +.footer-brand { + text-decoration: none !important; +} diff --git a/frontend-v2/src/stylesheets/components/_form.scss b/frontend-v2/src/stylesheets/components/_form.scss new file mode 100644 index 0000000..9bfdee9 --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_form.scss @@ -0,0 +1,152 @@ +$form-control-border-color: #e2e5ec !default; +$form-control-border-color-active: $primary !default; + +.form-control { + border-color: $form-control-border-color; + border-radius: 0; + font-size: 14px; + + &.border-rounded { + border-radius: 4px; + } + + &:focus { + border-color: $form-control-border-color-active; + box-shadow: none; + } + + &.n-b-r { + border-right: none; + } +} + +.form-p { + color: #a3a9b5; + font-size: 12px; + font-weight: normal; + line-height: 1.8; + + .i-tooltip { + display: inline; + margin-left: 3px; + } + + .link-dotted { + border-bottom-width: 1px; + border-bottom-style: dotted; + cursor: pointer; + text-decoration: none; + } + + .text-dark { + color: #333; + } + + &.m-b-0 { + margin-bottom: 0; + } + + &.m-b-0-7 { + margin-bottom: 0.7rem; + } +} + +.input-group-prepend.last { + .input-group-text { + background: none; + border-color: $form-control-border-color; + border-left: none; + color: #a3a9b5; + font-size: 14px; + transition: $input-transition; + } +} + +.form-control:focus ~ .input-group-prepend.last { + .input-group-text { + border-color: $form-control-border-color-active; + } +} + +.input-group.input-status-error { + input { + border-color: #ff7884 !important; + border-radius: 2px 2px 0 0; + } + + .input-group-prepend { + margin-right: 0; + } + + .input-group-prepend.last { + .input-group-text { + border-color: #ff7884; + border-radius: 0 2px 0 0; + } + } + + .input-group-message { + width: 100%; + padding: 10px; + color: white; + background: #ff7884; + border-radius: 0 0 2px 2px; + + .link-helptip { + border-bottom-width: 1px; + border-bottom-style: dotted; + color: inherit; + cursor: help; + text-decoration: none; + } + } +} + +.form-buttons { + [class*="btn-"] { + margin-bottom: 20px; + + &:last-child { + margin-bottom: 0; + } + } +} + +.tokens-list-search-input-outer-container { + display: flex; + @include media-breakpoint-down(md) { + display: block; + } +} + +.tokens-list-search-input-container { + float: right; + margin-left: auto; + position: relative; + @include media-breakpoint-down(md) { + width: 100%; + margin-bottom: 20px; + } +} + +.tokens-list-search-input-container.tokens:before { + bottom: 5px; +} + +.search-input { + background: url("data:image/svg+xml,%3Csvg%20viewBox%3D%220%200%2016%2017%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2217%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%237DD79F%22%20fill-rule%3D%22evenodd%22%20d%3D%22M15.713%2015.727a.982.982%200%200%201-1.388%200l-2.289-2.29C10.773%2014.403%209.213%2015%207.5%2015A7.5%207.5%200%201%201%2015%207.5c0%201.719-.602%203.284-1.575%204.55l2.288%202.288a.983.983%200%200%201%200%201.389zM7.5%202a5.5%205.5%200%201%200%200%2011%205.5%205.5%200%201%200%200-11z%22%2F%3E%0A%3C%2Fsvg%3E") + no-repeat 20px 20px; + background-position: left; + background-position-x: 10px; + padding-left: 35px; +} + +.tokens-list-search-input { + height: 40px; + width: 300px; + @include media-breakpoint-down(md) { + width: 100%; + } + padding: 10px 10px 10px 35px; + outline: none; +} diff --git a/frontend-v2/src/stylesheets/components/_highlight.scss b/frontend-v2/src/stylesheets/components/_highlight.scss new file mode 100644 index 0000000..26caa3f --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_highlight.scss @@ -0,0 +1,17 @@ +//replace the default background color from highlightjs +.hljs { + background: $gray-100; +} + +.line-numbers { + [data-line-number] { + &:before { + content: attr(data-line-number); + display: inline-block; + border-right: 1px solid $gray-400; + padding: 0 0.5em; + margin-right: 0.5em; + color: $gray-600; + } + } +} diff --git a/frontend-v2/src/stylesheets/components/_i_tooltip.scss b/frontend-v2/src/stylesheets/components/_i_tooltip.scss new file mode 100644 index 0000000..285c422 --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_i_tooltip.scss @@ -0,0 +1,27 @@ +$i-tooltip-background: #a3a9b5 !default; +$i-tooltip-info: #fff !default; +$i-tooltip-background-active: $primary !default; + +.i-tooltip { + display: block; + height: 16px; + width: 16px; + + .i-tooltip-circle { + fill: $i-tooltip-background; + } + + .i-tooltip-info { + fill: $i-tooltip-info; + } + + &:hover { + .i-tooltip-circle { + fill: $i-tooltip-background-active; + } + } + + &.ds-inline { + display: inline; + } +} diff --git a/frontend-v2/src/stylesheets/components/_i_tooltip_2.scss b/frontend-v2/src/stylesheets/components/_i_tooltip_2.scss new file mode 100644 index 0000000..c22d7a8 --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_i_tooltip_2.scss @@ -0,0 +1,50 @@ +.i-tooltip-2 { + color: $i-tooltip-background; + + &:hover { + color: $i-tooltip-background-active; + } +} + +.color-inherit { + color: inherit; +} + +// make it work with non jQuery based tooltip + +.i-tooltip-2 { + position: relative; + color: $i-tooltip-background; +} + +.i-tooltip-2:hover::after { + position: absolute; + top: -5px; + left: 50%; + display: inline-block; + min-width: 120px; + padding: 5px; + margin: 0 auto; + color: #fff; + text-align: center; + content: attr(title); + background: #000; + border-radius: 3px; + transform: translate(-50%, -100%); +} + +.i-tooltip-2:hover::before { + position: absolute; + top: -5px; + left: 50%; + width: 0; + height: 0; + margin-left: -5px; + pointer-events: none; + content: " "; + border: solid transparent; + border-color: rgba(0, 0, 0, 0); + border-width: 5px; + border-top-color: #000; + transform: translate(0, 0); +} diff --git a/frontend-v2/src/stylesheets/components/_icon-link.scss b/frontend-v2/src/stylesheets/components/_icon-link.scss new file mode 100644 index 0000000..2666b0d --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_icon-link.scss @@ -0,0 +1,36 @@ +.icon-links { + display: flex; + flex-direction: row; + align-items: center; +} + +.icon-link { + align-items: center; + background-color: $gray-200; + border-radius: 50%; + border: none; + color: $text-muted; + cursor: pointer; + display: inline-flex; + height: 2rem; + justify-content: center; + margin: 0 0.25rem; + transition: all 0.1s ease; + width: 2rem; + + &:hover { + background-color: darken($primary, 20%); + color: $white; + text-decoration: none; + } + + &.icon-link-primary { + color: $footer-text-color; + background-color: rgba($white, 0.25); + + &:hover { + background-color: $white; + color: $primary; + } + } +} diff --git a/frontend-v2/src/stylesheets/components/_inventory_token_instance_image_container.scss b/frontend-v2/src/stylesheets/components/_inventory_token_instance_image_container.scss new file mode 100644 index 0000000..d489cc9 --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_inventory_token_instance_image_container.scss @@ -0,0 +1,11 @@ +/* ERC721 media block */ +.inventory-erc721-media { + display: flex; + justify-content: center; + max-height: 50px; +} + +.inventory-erc721-media img { + height: 50px; +} +/* ERC721 media block end */ diff --git a/frontend-v2/src/stylesheets/components/_label.scss b/frontend-v2/src/stylesheets/components/_label.scss new file mode 100644 index 0000000..d9acd6f --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_label.scss @@ -0,0 +1,98 @@ +.bs-label { + display: inline-block; + padding: 0 5px; + background: #f5f6fa; + color: #77838f; + border-radius: 5px; + &.large { + font-size: 14px; + } + font-size: 12px; + padding: 5px; + line-height: normal; + + &.right { + margin-left: auto; + float: right; + } + &.omni { + background: #6ca1e2; + color: #fff; + } + &.destination-eth { + background: #253358; + color: #fff; + } + &.destination-bsc { + background: #e7b941; + color: #fff; + } + &.destination-rinkeby { + background: #153550; + color: #fff; + } + &.bridged { + background: #70aee3; + color: #fff; + } + &.validator { + background: $primary; + color: #fff; + } + &.secondary { + background: $secondary; + color: #fff; + } + &.method { + color: #1e2022; + } + &.from-dropdown { + margin-top: -3px; + } + &.success { + background: rgba(40, 167, 69, 0.2); + color: rgb(40, 167, 69); + } +} + +.confirmations-label { + position: relative; + padding-left: 1.15rem; + border-top-right-radius: 0.25rem; + border-bottom-right-radius: 0.25rem; + border-top-left-radius: 0; + border-bottom-left-radius: 0; + padding-right: 10px; +} + +.confirmations-label:after { + position: absolute; + left: 0; + top: 0; + content: ""; + border-top: 0.9rem solid transparent; + border-bottom: 0.9rem solid transparent; + border-left: 0.9rem solid #fff; +} + +.index-label { + position: relative; + padding-right: 0.3rem; + border-top-left-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + background: #f5f6fa; + color: #77838f; + padding: 0.2rem 0.5rem; +} + +.index-label:after { + position: absolute; + left: 100%; + top: 0; + content: ""; + border-top: 0.8rem solid transparent; + border-bottom: 0.8rem solid transparent; + border-left: 0.8rem solid rgba(245, 246, 250, 1); +} diff --git a/frontend-v2/src/stylesheets/components/_loading-spinner.scss b/frontend-v2/src/stylesheets/components/_loading-spinner.scss new file mode 100644 index 0000000..b335ac7 --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_loading-spinner.scss @@ -0,0 +1,87 @@ +// ATTRIBUTION +// +// Author: Tobias Ahlin (tobiasahlin) +// +// SpinKit - Simple loading spinners animated with CSS. +// https://github.com/tobiasahlin/SpinKit + +.loading-spinner { + margin: auto 1rem; + width: 40px; + height: 40px; + position: relative; +} + +.loading-spinner-block-1, +.loading-spinner-block-2 { + background-color: currentColor; + width: 12px; + height: 12px; + position: absolute; + top: 0; + left: 0; + border-radius: $border-radius; + + animation: loading-spinner 1.8s infinite ease-in-out; +} + +.loading-spinner-block-2 { + animation-delay: -0.9s; +} + +@keyframes loading-spinner { + 25% { + transform: translateX(22px) rotate(-90deg) scale(0.5); + } + 50% { + transform: translateX(22px) translateY(22px) rotate(-179deg); + } + 50.1% { + transform: translateX(22px) translateY(22px) rotate(-180deg); + } + 75% { + transform: translateX(0px) translateY(22px) rotate(-270deg) scale(0.5); + } + 100% { + transform: rotate(-360deg); + } +} + +.loading-spinner-small { + display: inline-block; + position: relative; + top: -0.125em; + margin: auto 0.5em auto 0; + width: 1em; + height: 1em; + + .loading-spinner-block-1, + .loading-spinner-block-2 { + width: 0.5em; + height: 0.5em; + + animation: loading-spinner-small 1.8s infinite ease-in-out; + } + + .loading-spinner-block-2 { + animation-delay: -0.9s; + } +} + +@keyframes loading-spinner-small { + 25% { + transform: translateX(10px) rotate(-90deg) scale(0.5); + } + 50% { + transform: translateX(10px) translateY(10px) rotate(-179deg); + } + 50.1% { + transform: translateX(10px) translateY(10px) rotate(-180deg); + } + 75% { + transform: translateX(0px) translateY(10px) rotate(-270deg) scale(0.5); + } + 100% { + transform: rotate(-360deg); + } +} diff --git a/frontend-v2/src/stylesheets/components/_log-search.scss b/frontend-v2/src/stylesheets/components/_log-search.scss new file mode 100644 index 0000000..9a74979 --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_log-search.scss @@ -0,0 +1,72 @@ +.logs-topbar { + padding-bottom: 30px; + @media (min-width: 600px) { + display: flex; + justify-content: space-between; + } + .pagination-container.position-top { + padding-top: 0 !important; + } +} + +.logs-search { + display: flex; + position: relative; + flex: 2; + @media (max-width: 599px) { + margin-bottom: 30px; + width: 100%; + } +} + +.logs-search-input, +.logs-search-btn, +.logs-search-btn-cancel { + height: 24px; + background-color: #f5f6fa; + border: 1px solid #f5f6fa; + color: #333; + border-radius: 2px; + outline: none; + font-family: Nunito, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", + "Segoe UI Emoji", "Segoe UI Symbol"; + font-size: 12px; + font-weight: 600; + -webkit-appearance: none; +} + +.logs-search-input { + padding-left: 6px; + display: inline-flex; + flex-grow: 2; + min-width: 160px; + font-weight: 300 !important; + &::placeholder { + color: #a3a9b5; + font-weight: 300 !important; + } +} + +.logs-search-btn { + margin-left: 6px; + color: #a3a9b5; + transition: 0.1s ease-in; + cursor: pointer; + &:hover { + background-color: $primary; + color: #fff; + border-color: $primary; + } +} + +.logs-search-btn-cancel { + color: #a3a9b5; + cursor: pointer; + transition: 0.1s ease-in; + position: absolute; + top: 0; + right: 56px; + &:hover { + color: #333; + } +} diff --git a/frontend-v2/src/stylesheets/components/_me_tooltip.scss b/frontend-v2/src/stylesheets/components/_me_tooltip.scss new file mode 100644 index 0000000..1b5f4e6 --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_me_tooltip.scss @@ -0,0 +1,25 @@ +$me-tooltip-background: #f5f6fa !default; +$me-tooltip-background-active: $primary !default; +$me-tooltip-text: #a3a9b5 !default; +$me-tooltip-text-active: #fff !default; + +.me-tooltip { + display: block; + height: 16px; + width: 24px; + border-radius: 8px; + background-color: $me-tooltip-background; + color: $me-tooltip-text; + cursor: pointer; + font-size: 10px; + line-height: 16px; + font-weight: bold; + text-align: center; + position: relative; + top: 2px; + + &:hover { + background-color: $me-tooltip-background-active; + color: $me-tooltip-text-active; + } +} diff --git a/frontend-v2/src/stylesheets/components/_modal.scss b/frontend-v2/src/stylesheets/components/_modal.scss new file mode 100644 index 0000000..2ca7572 --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_modal.scss @@ -0,0 +1,110 @@ +.modal-backdrop { + background-color: $modal-overlay-color; + + &.show { + opacity: 1; + } +} + +.modal-header { + border-bottom: none; + padding: #{$modal-vertical-padding} #{$modal-horizontal-padding}; +} + +.modal-header-group { + display: inline-flex; + margin: 0 auto; +} + +.close.close-modal { + left: auto; + opacity: 1; + position: absolute; + right: -35px; + top: -35px; + outline: none !important; + + path { + fill: #f6f7f9; + } +} + +.close { + outline: none !important; +} + +.modal-body { + padding: 0 #{$modal-horizontal-padding} #{$modal-vertical-padding}; +} + +.modal-title { + color: #333; + font-size: 18px; + font-weight: normal; + text-align: left; + white-space: normal; + word-break: break-word; + + .centered { + margin: 0 auto; + } +} + +.modal-content { + border-radius: $modal-border-radius; + position: relative; + .btn-primary { + box-shadow: none !important; + background-color: $btn-line-color; + border: 1px solid $btn-line-color; + &:hover { + background-color: $btn-line-color; + border-color: $btn-line-color; + } + &:focus, + &:active { + background-color: darken($btn-line-color, 10%) !important; + border-color: darken($btn-line-color, 10%) !important; + } + } +} + +.modal-fullwidth-xs { + @include media-breakpoint-down(xs) { + padding-right: 0 !important; + + .modal-dialog { + max-width: initial; + min-width: initial; + margin: 0.5rem 0; + } + + .modal-content { + border-radius: 0; + + > div { + border-radius: 0; + } + } + + .close.close-modal { + right: 10px; + top: 5px; + + path { + fill: #a3a9b5; + } + } + + .modal-bottom-disclaimer { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + } + } +} + +@media (min-width: 576px) { + .modal-dialog { + max-width: 530px !important; + } +} diff --git a/frontend-v2/src/stylesheets/components/_modal_status.scss b/frontend-v2/src/stylesheets/components/_modal_status.scss new file mode 100644 index 0000000..a3c4b46 --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_modal_status.scss @@ -0,0 +1,103 @@ +$modal-status-graph-error: #ff0d51 !default; +$modal-status-graph-warning: #ff8502 !default; +$modal-status-graph-success: $primary !default; +$modal-status-graph-question: #329ae9 !default; + +.modal-status { + max-width: 100%; + width: 300px; + + @include media-breakpoint-down(sm) { + margin-left: auto; + margin-right: auto; + } +} + +.modal-status-graph { + align-items: center; + border-top-left-radius: 8px; + border-top-right-radius: 8px; + display: flex; + height: 135px; + justify-content: center; + + &-error { + background-color: $modal-status-graph-error; + } + + &-warning { + background-color: $modal-status-graph-warning; + } + + &-success { + background-color: $modal-status-graph-success; + } + + &-question { + background-color: $modal-status-graph-question; + } + + svg { + margin-top: 15px; + } +} + +.modal-status-body { + align-items: center; + display: flex; + flex-direction: column; + justify-content: center; + padding: #{$modal-vertical-padding} #{$modal-horizontal-padding}; +} + +.modal-status-title { + color: #333; + font-size: 18px; + font-weight: normal; + line-height: 1.2; + margin: 0 0 15px; + text-align: center; +} + +.modal-status-text { + color: #a3a9b5; + font-size: 12px; + font-weight: normal; + line-height: 1.5; + margin: 0 0 25px; + text-align: center; + + &.m-b-0 { + margin-bottom: 0; + } + + .link-helptip { + border-bottom-width: 1px; + border-bottom-style: dotted; + color: inherit; + cursor: help; + text-decoration: none; + } +} + +.modal-status-button-wrapper { + display: flex; + justify-content: space-between; + width: 100%; + + .btn-line { + flex-grow: 1; + margin-right: 20px; + border-color: $primary; + color: $primary; + + &:hover { + background-color: $primary; + color: $additional-font; + } + + &:last-child { + margin-right: 0; + } + } +} diff --git a/frontend-v2/src/stylesheets/components/_modal_variables.scss b/frontend-v2/src/stylesheets/components/_modal_variables.scss new file mode 100644 index 0000000..ab5ada5 --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_modal_variables.scss @@ -0,0 +1,5 @@ +$modal-overlay-color: rgba($primary, 0.9) !default; +$modal-horizontal-padding: 30px !default; +$modal-vertical-padding: 25px !default; +$modal-border-radius: 10px !default; +$modal-gray-background: #f6f7f9 !default; diff --git a/frontend-v2/src/stylesheets/components/_nav_tabs.scss b/frontend-v2/src/stylesheets/components/_nav_tabs.scss new file mode 100644 index 0000000..af0071a --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_nav_tabs.scss @@ -0,0 +1,39 @@ +.nav-tabs { + .nav-link { + border-top-left-radius: 0; + border-top-right-radius: 0; + color: $text-muted; + font-size: 14px; + padding: 1.25rem 2.5rem; + + &:hover { + color: $primary; + } + + &.active { + background-color: $primary; + border-color: $primary; + color: $white; + } + + &:hover { + border-color: transparent; + } + } +} + +.nav-tabs .nav-item.show .nav-link { + background-color: darken($primary, 10%); + border-color: darken($primary, 10%); + color: $white; +} + +.api-doc-tab { + padding-bottom: 5px; + color: $primary !important; + background-color: transparent !important; +} + +.api-doc-tab.active { + border-bottom: 1px solid $primary; +} diff --git a/frontend-v2/src/stylesheets/components/_navbar.scss b/frontend-v2/src/stylesheets/components/_navbar.scss new file mode 100644 index 0000000..1834559 --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_navbar.scss @@ -0,0 +1,302 @@ +// Default variables +$header-background-color: #fff !default; +$header-links-color: #828ba0 !default; +$header-links-color-active: #333 !default; +$header-icon-color: $header-links-color !default; +$header-icon-color-hover: $secondary !default; +$header-icon-border-color-hover: $secondary !default; +$header-toggler-icon: "data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='#{transparentize($primary, 0.5)}' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E" !default; +$header-textfield-text-color: $header-links-color !default; +$header-textfield-background-color: #f5f6fa !default; +$header-textfield-magnifier-color: $header-links-color !default; +$header-link-horizontal-padding: 0.71rem; +$navbar-logo-height: 28px !default; +$navbar-logo-width: auto !default; + +.navbar.navbar-primary { + background-color: $header-background-color; + position: relative; + z-index: 100; + + .nav-item { + font-size: 14px; + } + + .navbar-nav { + .nav-link { + outline: none; + align-items: center; + color: $header-links-color; + display: flex; + font-size: 14px; + position: relative; + transition: $transition-cont; + + &:before { + background-color: $header-icon-border-color-hover; + border-radius: 0 0 4px 4px; + content: ""; + display: block; + height: 0.25rem; + left: 50%; + opacity: 0; + position: absolute; + top: -10px; + transform: translateX(-50%); + transition: $transition-cont; + width: calc( + 100% - #{$header-link-horizontal-padding} - #{$header-link-horizontal-padding} + ); + } + + &.active, + &:hover { + @include media-breakpoint-up(lg) { + &:before { + opacity: 1; + } + } + } + + &.active, + &:hover, + &.active-icon { + color: $header-links-color-active; + .nav-link-icon { + path { + fill: $header-icon-color-hover; + } + } + } + + .nav-link-icon { + align-items: center; + display: flex; + margin-right: 0.71em; + position: relative; + top: -1px; + + path { + fill: $header-icon-color; + transition: $transition-cont; + } + } + } + + .nav-item-networks { + margin-left: auto; + .nav-link:before { + display: none; + } + } + } + + .navbar-toggler { + outline: none; + color: $primary; + padding-right: 0px; + + .navbar-toggler-icon { + background-image: url($header-toggler-icon); + } + } + .search-form { + display: flex; + + @include media-breakpoint-up(xl) { + height: 57px; + margin-bottom: -8px; + margin-top: -8px; + } + } + + .form-inline { + height: 100%; + } + + .input-group { + height: 100%; + position: relative; + } + + .form-control { + background: $header-textfield-background-color; + border-color: $header-textfield-background-color; + color: $header-textfield-text-color; + font-size: 14px; + height: 100%; + padding-left: 38px; + padding-right: 8px; + position: relative; + width: 100%; + z-index: 1; + + &[placeholder] { + text-overflow: ellipsis !important; + } + &::-webkit-input-placeholder { + /* Chrome/Opera/Safari */ + text-overflow: ellipsis !important; + } + &::-moz-placeholder { + /* Firefox 19+ */ + text-overflow: ellipsis !important; + } + &:-ms-input-placeholder { + /* IE 10+ */ + text-overflow: ellipsis !important; + } + &:-moz-placeholder { + /* Firefox 18- */ + text-overflow: ellipsis !important; + } + + &:focus { + box-shadow: none; + } + + @include media-breakpoint-up(xl) { + width: 290px; + } + @media (min-width: 1366px) { + width: 380px; + } + @media (min-width: 1540px) { + width: 550px; + } + } + .input-group-append { + height: 38px; + position: absolute; + top: 50%; + transform: translateY(-50%); + width: 38px; + z-index: 5; + + &.left { + left: 0px; + } + + &.right { + right: 8px; + width: 25px; + height: 25px; + } + + &.desktop-only { + @include media-breakpoint-down(md) { + display: none; + } + } + + * { + fill: $header-textfield-magnifier-color; + } + } + .input-group-text { + align-items: center; + background: none; + border-color: transparent; + display: flex; + height: 100%; + justify-content: center; + padding: 0; + width: 100%; + + &.border { + border-color: $secondary !important; + border-radius: 5px; + color: $secondary; + background-color: $header-textfield-background-color; + } + } +} + +.navbar-collapse.collapsing, +.navbar-collapse.collapse.show { + display: flex; + flex-direction: column; + + .search-form { + align-items: center; + order: -1; + width: 100%; + + form { + flex-grow: 1; + } + } + .input-group { + width: 100%; + } + .navbar-nav { + white-space: nowrap; + } +} + +.navbar-brand { + margin-left: 0; + flex-shrink: 1; + display: inline-flex; + .navbar-logo { + max-width: 100%; + } +} + +.navbar-logo { + height: $navbar-logo-height; + width: $navbar-logo-width; +} + +.logo-text { + color: #333; + font-size: 1rem; + font-weight: 700; + margin-left: 5px; + line-height: 28px; + + &.in-footer { + color: #fff; + } + + &.no-logo { + margin-left: 0px; + } +} + +@include media-breakpoint-up(md) { + .navbar-expand-lg .navbar-nav .nav-link { + padding-left: $header-link-horizontal-padding; + padding-right: $header-link-horizontal-padding; + } +} + +.add-border { + border: 1px solid transparentize($white, 0.3); +} + +.navbar-collapse { + justify-content: flex-end; + align-items: flex-start; + flex-shrink: 0; + @media (min-width: 992px) { + align-items: center; + } +} + +.navbar-container, +.navbar-primary { + @media (min-width: 992px) { + padding-right: 0; + } +} + +.nav-item-networks { + .topnav-nav-link { + transition: none !important; + } +} + +.visually-hidden { + display: block; +} diff --git a/frontend-v2/src/stylesheets/components/_network-selector.scss b/frontend-v2/src/stylesheets/components/_network-selector.scss new file mode 100644 index 0000000..097a717 --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_network-selector.scss @@ -0,0 +1,375 @@ +$network-selector-overlay-background: $modal-overlay-color !default; +$network-selector-close-color: $primary !default; +$network-selector-horizontal-padding: 28px; +$network-selector-horizontal-mobile-padding: 14px; +$btn-network-selector-load-more-background: #fff !default; +$btn-network-selector-load-more-color: $primary !default; +$network-selector-search-input-color: #a3a9b5 !default; +$network-selector-tab-active-border-color: $primary !default; +$network-selector-item-icon-dimensions: 30px !default; + +.network-selector-visible { + bottom: 0; + left: 0; + position: fixed; + right: 0; + top: 0; +} + +.network-selector-overlay { + background-color: rgba($network-selector-overlay-background, 0.9); + bottom: 0; + display: none; + left: 0; + position: fixed; + right: 0; + top: 0; + z-index: 123; +} + +.network-selector-overlay-close { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; +} + +.network-selector-wrapper { + display: flex; + height: 100%; + width: 100%; +} + +.network-selector { + background-color: #fff; + display: flex; + flex-direction: column; + flex-grow: 1; + flex-shrink: 1; + margin-left: auto; + max-width: 398px; + min-width: 0; + padding-top: 28px; + position: relative; + transition: right 0.25s ease-out; + z-index: 2; +} + +.network-selector-close { + flex-shrink: 0; + padding: 0 $network-selector-horizontal-padding; + margin: 0 0 8px; + + svg { + cursor: pointer; + display: block; + margin-left: auto; + } + + path { + fill: $network-selector-close-color; + } +} + +.network-selector-text-container { + flex-shrink: 0; + margin: 0 0 15px; + padding: 0 $network-selector-horizontal-padding; +} + +.network-selector-title { + color: #333; + font-size: 18px; + font-weight: normal; + line-height: 1.2; + margin: 0 0 10px; + padding: 0; +} + +.network-selector-text { + color: #a3a9b5; + font-size: 12px; + font-weight: normal; + line-height: 1.67; + margin: 0; + padding: 0; +} + +.network-selector-search-container { + align-items: center; + background-color: #f5f6fa; + display: flex; + flex-shrink: 0; + height: 62px; + margin: 0; + padding: 0 $network-selector-horizontal-padding; + + path { + flex-grow: 0; + flex-shrink: 0; + fill: $network-selector-search-input-color; + } +} + +.network-selector-search-input { + background-color: transparent; + border-color: transparent; + color: #333; + flex-grow: 1; + font-size: 14px; + font-weight: 600; + height: 100%; + outline: none; + padding: 0 20px 0 10px; + + &[placeholder] { + color: $network-selector-search-input-color !important; + } + &::-webkit-input-placeholder { + /* Chrome/Opera/Safari */ + color: $network-selector-search-input-color !important; + } + &::-moz-placeholder { + /* Firefox 19+ */ + color: $network-selector-search-input-color !important; + } + &:-ms-input-placeholder { + /* IE 10+ */ + color: $network-selector-search-input-color !important; + } + &:-moz-placeholder { + /* Firefox 18- */ + color: $network-selector-search-input-color !important; + } +} + +.network-selector-tabs-container { + border-bottom: 1px solid $base-border-color; + display: flex; + flex-shrink: 0; + margin: 0 $network-selector-horizontal-mobile-padding; + @media (min-width: 375px) { + margin: 0 $network-selector-horizontal-padding; + } +} + +.network-selector-tab { + color: #a3a9b5; + cursor: pointer; + flex-shrink: 1; + font-size: 14px; + font-weight: 600; + line-height: 1.2; + min-width: 0; + padding: 20px 18px 15px; + position: relative; + text-align: center; + user-select: none; + white-space: nowrap; + + &:hover { + color: #333; + } + + &.active { + color: #333; + cursor: default; + + &::after { + background-color: $network-selector-tab-active-border-color; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + bottom: 0; + content: ""; + height: 4px; + left: 0; + position: absolute; + right: 0; + } + } +} + +.network-selector-tab-content { + display: none; + + &.active { + display: block; + } +} + +.network-selector-item { + border-bottom: 1px solid $base-border-color; + display: flex; + position: relative; + + .radio { + cursor: pointer; + margin: 0 15px 0 0; + + input[type="radio"] { + cursor: pointer; + } + } + + .radio-icon { + margin: 0; + } + + &:last-child { + border-bottom: none; + } +} + +.network-selector-item-url { + align-items: center; + cursor: pointer; + display: flex; + flex-grow: 1; + margin: 0; + padding: 20px 0; + + &:hover { + .network-selector-item-type { + color: #333; + } + } +} + +.network-selector-item-icon { + background-color: #dfdfdf; + background-position: 50% 50%; + background-repeat: no-repeat; + background-size: contain; + border-radius: 50%; + flex-grow: 0; + flex-shrink: 0; + height: $network-selector-item-icon-dimensions; + margin: 0 15px 0 0; + width: $network-selector-item-icon-dimensions; + + &-callisto-mainnet { + background-image: url(/images/network-selector-icons/callisto-mainnet.svg); + } + &-ethereum-mainnet { + background-image: url(/images/network-selector-icons/ethereum-mainnet.svg); + } + &-ethereum-classic { + background-image: url(/images/network-selector-icons/ethereum-classic.svg); + } + &-goerli-testnet { + background-image: url(/images/network-selector-icons/goerli-testnet.svg); + } + &-kovan-testnet { + background-image: url(/images/network-selector-icons/kovan-testnet.svg); + } + &-poa-core { + background-image: url(/images/network-selector-icons/poa-core.svg); + } + &-poa-sokol { + background-image: url(/images/network-selector-icons/poa-sokol.svg); + } + &-rinkeby-testnet { + background-image: url(/images/network-selector-icons/rinkeby-testnet.svg); + } + &-rsk-mainnet { + background-image: url(/images/network-selector-icons/rsk-mainnet.svg); + } + &-ropsten-testnet { + background-image: url(/images/network-selector-icons/ropsten-testnet.svg); + } + &-xdai-chain { + background-image: url(/images/network-selector-icons/xdai-chain.svg); + } + &-lukso-l14-testnet { + background-image: url(/images/network-selector-icons/lukso-l14-testnet.svg); + } + &-xusdt-chain { + background-image: url(/images/network-selector-icons/circle-xusdt.svg); + } +} + +.network-selector-item-title { + color: #333; + flex-grow: 1; + font-size: 14px; + font-weight: normal; + line-height: 1.2; + overflow: hidden; + text-align: left; + text-overflow: ellipsis; + user-select: none; + white-space: nowrap; +} + +.network-selector-item-type { + color: #a3a9b5; + flex-shrink: 0; + font-size: 14px; + font-weight: normal; + line-height: 1.2; + padding-left: 10px; + text-align: right; + user-select: none; + white-space: nowrap; +} + +.network-selector-item-content { + align-items: center; + display: flex; + flex-grow: 1; +} + +.network-selector-networks-container { + flex-grow: 1; + flex-shrink: 1; + min-height: 100px; + overflow: auto; + padding: 0 $network-selector-horizontal-mobile-padding; + @media (min-width: 375px) { + padding: 0 $network-selector-horizontal-padding; + } +} + +.network-selector-item-favorite { + align-items: center; + cursor: pointer; + display: flex; + flex-grow: 1; + flex-shrink: 0; + margin: 0; + max-width: 36px; + padding-left: 20px; + position: relative; + + input[type="checkbox"] { + cursor: pointer; + height: 100%; + opacity: 0; + position: absolute; + width: 100%; + z-index: 5; + + &:checked + svg { + position: relative; + z-index: 1; + + path { + fill: #ffb20d; + } + } + } + + &:hover { + path { + fill: rgba(#ffb20d, 0.4); + } + } +} + +.network-selector-tab-content-empty { + font-size: 16px; + font-weight: 600; + padding: 40px; + text-align: center; +} diff --git a/frontend-v2/src/stylesheets/components/_new_smart_contract.scss b/frontend-v2/src/stylesheets/components/_new_smart_contract.scss new file mode 100644 index 0000000..f18901c --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_new_smart_contract.scss @@ -0,0 +1,213 @@ +$new-smart-contract-container-tooltips-background-color: #fbfafc !default; +$new-smart-contract-tooltips-width: 300px; +$smart-contract-form-group-tooltip-color: #adb5bd !default; +$new-smart-contract-center-column-margin-right: 30px; + +.new-smart-contract-container { + background-color: #fff; + background-image: linear-gradient( + to bottom right, + #{$new-smart-contract-container-tooltips-background-color} 100%, + #{$new-smart-contract-container-tooltips-background-color} 100% + ); + background-position: 100% 0; + background-repeat: repeat-y; + background-size: #{$new-smart-contract-tooltips-width} 1px; + box-shadow: 0 0 25px 0 rgba(0, 0, 0, 0.15); + margin-bottom: 3rem; + padding: 50px 0 50px 22px; + + @include media-breakpoint-down(md) { + background-image: none; + padding-right: 22px; + } +} + +.smart-contract-title { + color: #333; + font-size: 18px; + font-weight: normal; + line-height: 1.2; + margin: 0 0 70px 0; + padding: 0; + text-align: left; + + @include media-breakpoint-down(md) { + margin-bottom: 30px; + } + + &.margin-bottom-md { + margin-bottom: 50px; + + @include media-breakpoint-down(md) { + margin-bottom: 15px; + } + } +} + +.smart-contract-form-group { + margin-bottom: 30px; + + @include media-breakpoint-down(md) { + margin-bottom: 20px; + } +} + +.form-radios-group { + display: flex; + justify-content: flex-start; + + &.vertical { + display: block; + } + + .radio-big { + margin-right: 20px; + margin-bottom: 1rem; + + &:last-child { + margin-right: 0; + } + } +} + +.smart-contract-form-group-inner-wrapper { + display: flex; + justify-content: space-between; + + @include media-breakpoint-down(md) { + flex-direction: column; + } + + > label { + color: #333; + flex-grow: 0; + font-size: 14px; + font-weight: normal; + line-height: 1.7; + margin: 0; + padding-right: 15px; + text-align: left; + width: 200px; + + @include media-breakpoint-down(md) { + margin-bottom: 10px; + padding-right: 0; + width: auto; + } + } + + .center-column { + flex-grow: 1; + margin-right: $new-smart-contract-center-column-margin-right; + + @include media-breakpoint-down(md) { + margin: 0; + } + } + + textarea.form-control { + min-height: 98px; + } + + .form-error { + display: block; + font-size: 13px; + line-height: 1.2; + padding-top: 10px; + } + + .smart-contract-form-group-tooltip { + color: $smart-contract-form-group-tooltip-color; + flex-grow: 0; + flex-shrink: 0; + font-size: 12px; + font-weight: normal; + line-height: 1.5; + padding: 0 30px; + text-align: left; + width: #{$new-smart-contract-tooltips-width}; + + @include media-breakpoint-down(md) { + padding: 10px 0 0 0; + width: auto; + } + + &:empty { + @include media-breakpoint-down(md) { + display: none; + } + } + + a { + color: $smart-contract-form-group-tooltip-color; + text-decoration: underline; + + &:hover { + text-decoration: none; + } + } + } +} + +.tooltip-quote { + background: rgba(0, 0, 0, 0.08); + border-radius: 2px; + padding: 0 5px; +} + +.add-contract-libraries-wrapper { + border-bottom: 1px solid $base-border-color; + margin-right: $new-smart-contract-center-column-margin-right + + $new-smart-contract-tooltips-width; + padding-bottom: 30px; + + @include media-breakpoint-down(md) { + margin-right: 0; + } +} + +.smart-contract-form-buttons { + align-items: center; + border-top: 1px solid $base-border-color; + display: flex; + margin-right: $new-smart-contract-center-column-margin-right + + $new-smart-contract-tooltips-width; + margin-top: -1px; + padding-top: 30px; + position: relative; + + @include media-breakpoint-down(md) { + margin-right: 0; + } + + [class*="btn-"] { + position: relative; + z-index: 1; + } + + .position-absolute { + &, + &:hover { + opacity: 1; + z-index: 12; + } + } + .w-118 { + width: 117.828px; + } +} + +.smart-contract-libraries-wrapper { + display: none; + padding-bottom: 30px; + padding-top: 30px; +} + +.contract-library-form-group { + display: none; + + &.active { + display: block; + } +} diff --git a/frontend-v2/src/stylesheets/components/_nounderline-link.scss b/frontend-v2/src/stylesheets/components/_nounderline-link.scss new file mode 100644 index 0000000..8f66e99 --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_nounderline-link.scss @@ -0,0 +1,3 @@ +a.nounderline { + text-decoration: none; +} diff --git a/frontend-v2/src/stylesheets/components/_pagination_container.scss b/frontend-v2/src/stylesheets/components/_pagination_container.scss new file mode 100644 index 0000000..9f453c8 --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_pagination_container.scss @@ -0,0 +1,214 @@ +$pagination-page-link-background: #f5f6fa !default; +$pagination-page-link-color: #a3a9b5 !default; +$pagination-page-link-background-active: $primary !default; +$pagination-page-link-color-active: #fff !default; + +@mixin pagination-container-base($background-color, $text-color) { + background-color: $background-color; + border: 1px solid $background-color; + color: $text-color; + + path { + fill: $text-color; + } +} + +.pagination-container { + display: flex; + justify-content: space-between; + + &[disabled] { + display: none; + } + + @include media-breakpoint-down(sm) { + flex-direction: column; + } + + &.position-bottom { + padding-top: 30px; + } + + &.position-top { + padding-bottom: 30px; + } + + .pagination-limit { + align-items: center; + color: #033333; + display: flex; + font-size: 12px; + font-weight: 600; + line-height: 1.2; + + @include media-breakpoint-down(sm) { + margin-bottom: 15px; + } + + select { + margin: 0 10px; + } + } + + .pagination { + margin: 0 0 0 auto; + padding: 0; + + @include media-breakpoint-down(sm) { + justify-content: space-between; + margin: 0; + } + + .page-item { + margin: 0 5px 0 0; + + &:last-child { + margin-right: 0; + } + + &.active .page-link { + @include pagination-container-base( + $pagination-page-link-background-active, + $pagination-page-link-color-active + ); + cursor: default; + pointer-events: none; + + &:hover { + @include pagination-container-base( + $pagination-page-link-background-active, + $pagination-page-link-color-active + ); + } + } + } + + .page-link { + @include pagination-container-base( + $pagination-page-link-background, + $pagination-page-link-color + ); + align-items: center; + border-radius: 2px; + display: flex; + font-size: 12px; + font-weight: 600; + height: 24px; + margin: 0; + padding: 0 8px; + position: relative; + user-select: none; + text-align: center; + white-space: nowrap; + cursor: pointer; + + &:not(.no-hover):hover { + @include pagination-container-base( + $pagination-page-link-background-active, + $pagination-page-link-color-active + ); + } + + &[href=""] { + pointer-events: none; + } + + &.no-hover { + cursor: default; + } + + &[disabled] { + @include pagination-container-base( + $pagination-page-link-background, + $pagination-page-link-color + ); + cursor: not-allowed; + opacity: 0.4; + outline: none; + pointer-events: none; + } + } + + .page-link-light-hover { + &:not(.no-hover):hover { + @include pagination-container-base( + $pagination-page-link-background-active, + $pagination-page-link-color-active + ); + background-color: rgba($pagination-page-link-background-active, 0.5); + border-color: rgba($pagination-page-link-background-active, 0.5); + } + } + } +} + +.tb { + background-color: #00000000 !important; + border: none !important; +} + +.ml10 { + margin-left: 10px; +} + +.mlm17 { + @include media-breakpoint-down(sm) { + margin-left: -17px; + } +} + +.mrm18 { + @include media-breakpoint-down(sm) { + margin-right: -18px; + } +} + +.go-to { + @include media-breakpoint-down(sm) { + margin-top: 10px !important; + justify-content: end !important; + } +} + +.limit { + color: $pagination-page-link-color; + font-size: 12px; + font-weight: 600; + height: 24px; + margin-top: -25px; + text-align: right; + @include media-breakpoint-down(sm) { + display: none; + } +} + +.align-end { + align-self: end; +} + +.page-number { + background-color: $pagination-page-link-background; + border-width: 1px; + border-style: solid; + border-radius: 2px; + border-color: $pagination-page-link-color; + color: $pagination-page-link-color; +} + +.page-number:focus { + border: 1px solid $pagination-page-link-color; +} + +.fml5 { + margin-left: 5px !important; +} + +.top-pagination-outer-container { + display: flex; +} + +.logs-topbar .pagination-container { + @media (min-width: 600px) { + margin-left: 80px; + } +} diff --git a/frontend-v2/src/stylesheets/components/_panels.scss b/frontend-v2/src/stylesheets/components/_panels.scss new file mode 100644 index 0000000..3d1a76b --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_panels.scss @@ -0,0 +1,14 @@ +.panels { + &__container { + padding: 20px; + } +} + +.pagination { + text-align: right; + margin: 10px; +} + +.monospace { + font-family: $font-family-monospace; +} diff --git a/frontend-v2/src/stylesheets/components/_qr-code.scss b/frontend-v2/src/stylesheets/components/_qr-code.scss new file mode 100644 index 0000000..5ef2394 --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_qr-code.scss @@ -0,0 +1,6 @@ +.qr-code { + display: block; + margin-right: auto; + margin-left: auto; + width: 100%; +} diff --git a/frontend-v2/src/stylesheets/components/_radio.scss b/frontend-v2/src/stylesheets/components/_radio.scss new file mode 100644 index 0000000..ebcc2ac --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_radio.scss @@ -0,0 +1,49 @@ +$radio-color: $primary !default; +$radio-dimensions: 20px !default; + +.radio { + align-items: center; + display: flex; + position: relative; + + input[type="radio"] { + height: 100%; + opacity: 0; + position: absolute; + width: 100%; + z-index: 5; + + &:checked + .radio-icon::before { + background-color: $radio-color; + border-radius: 50%; + content: ""; + height: 12px; + left: 50%; + position: absolute; + top: 50%; + transform: translateX(-50%) translateY(-50%); + width: 12px; + } + } + + .radio-icon { + border: 1px solid $base-border-color; + border-radius: 50%; + flex-grow: 0; + flex-shrink: 0; + height: $radio-dimensions; + margin: 0 10px 0 0; + position: relative; + width: $radio-dimensions; + z-index: 1; + } + + .radio-text { + font-size: 14px; + font-weight: normal; + line-height: 1.2; + position: relative; + white-space: nowrap; + z-index: 1; + } +} diff --git a/frontend-v2/src/stylesheets/components/_radio_big.scss b/frontend-v2/src/stylesheets/components/_radio_big.scss new file mode 100644 index 0000000..4460003 --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_radio_big.scss @@ -0,0 +1,55 @@ +$radio-big-color: $primary !default; +$radio-big-dimensions: 30px !default; + +.radio-big { + align-items: center; + display: flex; + position: relative; + + input[type="radio"] { + height: 100%; + opacity: 0; + position: absolute; + width: 100%; + z-index: 5; + + &:checked + .radio-icon::before { + background-color: $radio-big-color; + border-radius: 50%; + content: ""; + height: 12px; + left: 50%; + position: absolute; + top: 50%; + transform: translateX(-50%) translateY(-50%); + width: 12px; + } + + &:checked + .radio-icon { + border-color: $radio-big-color; + } + } + + .radio-icon { + border: 1px solid $base-border-color; + border-radius: 50%; + flex-grow: 0; + flex-shrink: 0; + height: $radio-big-dimensions; + margin: 0 10px 0 0; + position: relative; + width: $radio-big-dimensions; + z-index: 1; + } + + .radio-text { + color: #333; + font-size: 14px; + font-weight: normal; + line-height: 1.2; + margin: 0; + position: relative; + white-space: nowrap; + z-index: 1; + } +} diff --git a/frontend-v2/src/stylesheets/components/_search.scss b/frontend-v2/src/stylesheets/components/_search.scss new file mode 100644 index 0000000..dd98bbf --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_search.scss @@ -0,0 +1,76 @@ +.mobile-search-show { + @media screen and (max-width: 992px) { + width: 100%; + } + @media screen and (min-width: 992px) { + display: none !important; + } +} + +.mobile-search-hide { + @media screen and (max-width: 992px) { + display: none !important; + } +} + +.search-control { + @media screen and (min-width: 992px) { + height: 57px !important; + } + @media screen and (max-width: 992px) { + height: 33px !important; + } + &.focused-field { + border: 1px solid $secondary !important; + } + &.danger-field { + border: 1px solid $danger !important; + } +} + +.autoComplete_wrapper { + width: 100% !important; +} + +.main-search-autocomplete { + width: 100% !important; + padding: 0 !important; + border: none !important; + border-radius: 0 !important; + background-color: #f5f6fa !important; + @media screen and (max-width: 992px) { + height: auto !important; + } +} + +.main-search-autocomplete, +.main-search-autocomplete-mobile { + font-size: 14px !important; + color: #828ba0 !important; +} + +.autocomplete-category { + display: flex; + align-items: center; + font-size: 13px; + font-weight: 100; + text-transform: uppercase; + color: rgb(33, 33, 33); + margin-left: auto; +} + +.autoComplete_highlight { + background-color: #feff54 !important; + color: #212121 !important; +} + +ul[id^="autoComplete_list_"] { + margin-left: -39px !important; + border-radius: 0px !important; + padding: 5px !important; +} + +li[id^="autoComplete_result_"] { + font-size: 12px !important; + border-radius: 0 !important; +} diff --git a/frontend-v2/src/stylesheets/components/_stakes_table.scss b/frontend-v2/src/stylesheets/components/_stakes_table.scss new file mode 100644 index 0000000..77edd57 --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_stakes_table.scss @@ -0,0 +1,222 @@ +$stakes-table-th-background: #f5f6fa !default; +$stakes-table-cell-separation: 25px !default; +$stakes-link-color: $primary !default; + +.stakes-table-container { + max-width: 100%; + overflow-x: auto; + width: 100%; +} + +.addresses-table-container { + margin-left: -30px; + margin-right: -30px; + .stakes-table-container { + table { + width: 100%; + th:first-child { + padding-left: 25px; + } + td:first-child { + padding-left: 25px; + } + } + } + .color-lighten { + color: #828ba0; + } +} + +// Loader +.table-content-loader { + display: inline-block; + height: 24px; + width: 100%; + border-radius: 4px; + background-color: #f5f6fa; + overflow: hidden; + position: relative; + &:before { + width: inherit; + height: inherit; + content: ""; + position: absolute; + background: linear-gradient(to right, #f5f6fa 2%, #eee 18%, #f5f6fa 33%); + animation-duration: 1.7s; + animation-fill-mode: forwards; + animation-iteration-count: infinite; + animation-timing-function: linear; + animation-name: placeholderAnimate; + background-size: 1300px; + } +} + +@keyframes placeholderAnimate { + 0% { + background-position: -650px 0; + } + 100% { + background-position: 650px 0; + } +} + +.table-content-pseudo { + td { + &:last-child { + padding-right: 24px !important; + } + } +} + +.stakes-table { + min-width: fit-content; + width: 100%; +} + +.stakes-table-head { + display: flex; + width: 100%; + min-width: 930px; + padding: 0 15px; + background-color: $stakes-table-th-background; + color: #a3a9b5; + font-size: 14px; + font-weight: bold; + line-height: 1.2; + text-align: left; +} + +.stakes-table-body { + padding: 0 15px; + min-width: 930px; + min-height: 311px; + + .refresh-informer { + text-align: right; + padding-top: 15px; + padding-right: 15px; + display: none; + + a { + color: $primary; + text-decoration: underline; + + &:hover { + text-decoration: none; + } + } + } +} + +.stakes-table-th { + background-color: $stakes-table-th-background; + color: #a3a9b5; + font-size: 14px; + font-weight: bold; + line-height: 1.2; + text-align: left; + + &:first-child { + min-width: 15px; + } +} + +.stakes-table-th-content { + align-items: center; + display: flex; + justify-content: flex-start; + padding: 21px $stakes-table-cell-separation 21px 0; + position: relative; + z-index: 0; + + .i-tooltip { + position: relative; + top: -2px; + } +} + +.stakes-th-text { + margin-right: 10px; + white-space: nowrap; + text-align: center; +} + +.stakes-td { + border-bottom: 1px solid #f5f6fa; + font-size: 14px; + font-weight: normal; + height: 60px; + line-height: 1.5; + padding-right: $stakes-table-cell-separation; + text-align: left; + vertical-align: middle; + white-space: nowrap; + + &:last-child { + padding-right: 0; + } + + .stakes-tr-banned & { + background-color: $stakes-banned-background; + color: $stakes-banned-color; + } + + .stakes-td-banned-info { + display: block; + float: left; + padding-right: 30px; + } +} + +.stakes-cell { + display: flex; + align-items: center; +} + +.stakes-td-order { + min-width: 50px; + padding-left: 30px; + text-align: left; +} + +.stakes-td-link-style { + color: $stakes-link-color; + cursor: pointer; + + .stakes-tr-banned & { + color: $stakes-banned-color; + } +} + +.stakes-tr-banned td:last-child { + text-align: right; + padding-right: 30px; +} + +.stakes-table { + .check-tooltip { + &:hover { + .check-tooltip-circle { + fill: $secondary; + } + } + } + .stakes-tr-banned { + .check-tooltip { + .check-tooltip-circle { + fill: rgba($stakes-banned-color, 0.15); + } + .check-tooltip-check { + fill: $stakes-banned-color; + } + &:hover { + .check-tooltip-circle { + fill: $stakes-banned-color; + } + .check-tooltip-check { + fill: #fff; + } + } + } + } +} diff --git a/frontend-v2/src/stylesheets/components/_stakes_variables.scss b/frontend-v2/src/stylesheets/components/_stakes_variables.scss new file mode 100644 index 0000000..53d5bdc --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_stakes_variables.scss @@ -0,0 +1,2 @@ +$stakes-banned-background: #fff3f7 !default; +$stakes-banned-color: #ff7986 !default; diff --git a/frontend-v2/src/stylesheets/components/_table.scss b/frontend-v2/src/stylesheets/components/_table.scss new file mode 100644 index 0000000..7026697 --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_table.scss @@ -0,0 +1,30 @@ +.table-font { + thead th, + td, + th { + border-top: none; + border-bottom: none; + } + + i { + color: $gray-500; + } + + img { + width: 12px; + } +} + +.table-horizontal { + th { + width: 35%; + } +} + +.address-cell { + width: 150px; +} + +.token-icon { + padding-right: 5px; +} diff --git a/frontend-v2/src/stylesheets/components/_tile.scss b/frontend-v2/src/stylesheets/components/_tile.scss new file mode 100644 index 0000000..5e4c34a --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_tile.scss @@ -0,0 +1,608 @@ +$tile-type-block-color: $primary !default; +$tile-type-uncle-color: $cyan !default; +$tile-type-reorg-color: $purple !default; +$tile-type-emission-reward-color: $lilac !default; +$tile-type-transaction-color: $blue !default; +$tile-type-contract-call-color: $green !default; +$tile-type-contract-creation-color: $dark-purple !default; +$tile-type-token-transfer-color: $orange !default; +$tile-type-unique-token-color: $orange !default; +$tile-type-unique-token-image-color: $orange !default; +$tile-type-internal-transaction-color: $teal !default; +$tile-type-api-documentation-color: $primary !default; +$tile-type-progress-bar-color: $primary !default; +$tile-status-error-reason: #ff7986 !default; +$tile-status-awaiting-internal-transactions: $warning !default; +$tile-padding: 1rem; +$tile-title-color: #333 !default; +$tile-body-a-color: #5959d8 !default; + +@mixin generate-tile-block($prefix, $color, $label-color: false) { + &#{ $prefix } { + border-left: 4px solid $color; + + .tile-transaction-type-block { + a { + @if ($label-color) { + color: $label-color; + } @else { + color: $color; + } + } + } + + .tile-label { + @if ($label-color) { + color: $label-color; + } @else { + color: $color; + } + } + + .tile-status-label { + color: inherit; + } + + .tile-transaction-type-block { + background-color: rgba($color, 0.1); + border-bottom: 1px solid $color; + border-right: 1px solid $color; + border-top: 1px solid $color; + color: $color; + } + } +} + +/*********************************************************************/ + +.tile-label { + font-size: 12px; + font-weight: 700; + line-height: 1.2; + margin: 0 0 2px; + text-align: center; + + &:last-child { + margin-bottom: 0; + } + + &.font-weight-400 { + font-weight: 400; + } +} + +.tile-transaction-type-block { + align-items: center; + bottom: -17px; + justify-content: center; + margin-left: -1px; + margin-top: -34px; + padding: 0 5px; + position: relative; + + @include media-breakpoint-down(sm) { + align-items: flex-start; + background: none !important; + border: none !important; + bottom: auto; + flex-direction: column !important; + margin: 0 0 10px; + padding-left: 1rem; + top: auto; + + .tile-status-label { + margin-left: 0 !important; + } + } +} + +.tile-status-label { + font-size: 12px; + font-weight: 400; + line-height: 1.2; + text-align: center; + padding: 0 5px; +} + +.tile-transaction-type-block { + .tile-status-label { + padding: 0; + } +} + +.tile-bottom { + @media (max-width: 767px) { + justify-content: flex-start !important; + } +} + +.tile-bottom-contents { + background-color: #f6f7f9; + font-size: 12px; + line-height: 1.2; + padding: 0.8rem 1rem; +} + +.tile-transactions { + color: #a3a9b5; + font-size: 12px; + font-weight: 400; + line-height: 1.2; + margin-bottom: 10px; + text-align: left; +} + +.tile-badge { + line-height: 1.25rem; + margin-bottom: 0.1rem; + padding: 0; + text-align: center; + width: 2.5rem; +} + +.tile-muted { + background-color: $gray-100; + border-left: 1px solid $border-color; + box-shadow: none; +} + +.tile-function-response { + span.function-response-item { + display: block; + margin-left: 1rem; + + &:not(:last-of-type)::after { + content: ","; + } + } + + p { + margin: 0; + } +} + +.tile-image { + max-height: 140px; + max-width: 140px; +} + +.tile { + span[data-address-hash] { + color: $tile-body-a-color; + } + + a[data-test="token_link"] { + color: $tile-body-a-color; + } + + .tile-body { + a { + color: $tile-body-a-color; + &:hover { + span { + text-decoration: underline; + } + } + } + } + + .tile-title { + color: $tile-title-color; + font-size: 12px; + + &-hash { + font-weight: 300; + } + + &-lg { + color: $body-color; + font-size: 16px; + } + } + border-radius: 4px; + border: 1px solid $border-color; + color: $text-muted; + flex-grow: 1; + font-size: 12px; + line-height: 1.4rem; + padding: $tile-padding; + + @include generate-tile-block( + ".tile-type-block", + $tile-type-block-color, + darken($tile-type-block-color, 20%) + ); + @include generate-tile-block(".tile-type-uncle", $tile-type-uncle-color); + @include generate-tile-block(".tile-type-reorg", $tile-type-reorg-color); + @include generate-tile-block( + ".tile-type-emission-reward", + $tile-type-emission-reward-color + ); + @include generate-tile-block( + ".tile-type-transaction", + $tile-type-transaction-color + ); + @include generate-tile-block( + ".tile-type-contract-call", + $tile-type-contract-call-color + ); + @include generate-tile-block( + ".tile-type-contract-creation", + $tile-type-contract-creation-color + ); + @include generate-tile-block( + ".tile-type-token-transfer", + $tile-type-token-transfer-color + ); + @include generate-tile-block( + ".tile-type-unique-token", + $tile-type-unique-token-color + ); + @include generate-tile-block( + ".tile-type-unique-token-image", + $tile-type-unique-token-image-color + ); + @include generate-tile-block( + ".tile-type-internal-transaction", + $tile-type-internal-transaction-color + ); + @include generate-tile-block( + ".tile-type-api-documentation", + $tile-type-api-documentation-color + ); + @include generate-tile-block( + '[class*="status--error"]', + $tile-status-error-reason + ); + @include generate-tile-block( + ".tile-status--awaiting-internal-transactions", + $tile-status-awaiting-internal-transactions + ); + + &.n-p { + padding: 0; + } + + & + & { + margin-top: 1rem; + } + + @include media-breakpoint-down(md) { + margin-bottom: 1rem; + + [data-selector="place-holder"] & { + min-height: 105px; + } + } + + &.tile-type-block { + max-width: 100%; + .tile-title { + font-weight: 700; + line-height: 1.2; + margin-bottom: 12px; + padding: 1rem 1rem 0 1rem; + } + } + + &.tile-type-contract-creation { + .tile-text-highlight { + text-decoration: underline; + text-decoration-style: dashed; + } + } + + &.tile-type-token { + border: 1px solid $border-color; + } + + &.tile-type-token-transfer { + &-short-name { + max-width: 45%; + overflow: hidden; + text-overflow: ellipsis; + vertical-align: middle; + } + } + + &.tile-type-unique-token-image { + padding: 0; + + & .tile-content { + padding: 45px 0; + } + } + + &.tile-type-api-documentation { + background-color: transparent; + cursor: pointer; + padding: 15px; + text-align: left; + width: 100%; + } + + /* Progress bar */ + .progress { + background-color: #f5f6fa; + border-radius: 2px; + height: 4px; + margin-top: 8px; + width: 120px; + + .progress-bar { + background-color: $tile-type-progress-bar-color; + border-radius: 2px; + } + } +} + +.card-chain-blocks { + .card-body { + .col-lg-3 { + @include media-breakpoint-down(lg) { + padding-left: 6px; + padding-right: 6px; + } + } + .tile-type-block { + overflow: hidden; + } + .row { + @include media-breakpoint-down(lg) { + margin-left: -6px; + margin-right: -6px; + } + } + } +} + +// Loader +.tile-type-loading { + background-color: #fff; + padding-top: 30px; + padding-bottom: 28px; +} + +.tile-loader { + display: inline-block; + height: 20px; + width: 100%; + border-radius: 4px; + background-color: #f5f6fa; + overflow: hidden; + position: relative; + &:before { + width: inherit; + height: inherit; + content: ""; + position: absolute; + background: linear-gradient(to right, #f5f6fa 2%, #eee 18%, #f5f6fa 33%); + animation-duration: 1.7s; + animation-fill-mode: forwards; + animation-iteration-count: infinite; + animation-timing-function: linear; + animation-name: tilePlaceholderAnimate; + background-size: 1300px; + } +} + +.tile-label-loader { + height: 14px; + width: 80px; +} + +.tile-address-loader { + & + .tile-address-loader { + margin-top: 6px; + } +} + +@keyframes tilePlaceholderAnimate { + 0% { + background-position: -650px 0; + } + 100% { + background-position: 650px 0; + } +} + +// Loading Animation + +@keyframes playBlockLoadingAnimation { + 0%, + 90% { + opacity: 1; + } + 100% { + opacity: 0; + } +} + +[data-selector="chain-block-list"] { + .col-lg-3:first-child { + .tile-type-block-animation { + animation: playBlockLoadingAnimation 2.1s linear forwards; + } + } +} + +.fade-up-blocks-chain { + .tile-type-block { + position: relative; + } + .tile-type-block-animation { + opacity: 0; + position: absolute; + top: -1px; + left: -4px; + width: calc(100% + 5px); + height: calc(100% + 2px); + background-color: #f6f7f9; + border-radius: 4px; + overflow: hidden; + transition: 0.24s ease-out; + border-top: 1px solid #dee2e6; + border-right: 1px solid #dee2e6; + border-bottom: 1px solid #dee2e6; + pointer-events: none; + .tile-type-line-up { + position: absolute; + bottom: -1px; + left: 0; + height: calc(100% + 2px); + width: 4px; + background-color: $tile-type-block-color; + transform: scaleY(0); + transform-origin: center bottom; + animation: blockLoaderLine 2s linear forwards; + z-index: 2; + } + &:after { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + width: 1px; + background-color: #dee2e6; + } + } +} + +.cube-animation-title { + font-size: 12px; + color: #a3a9b5; + position: absolute; + bottom: 10px; + left: 50%; + transform: translateX(-50%); +} + +.fade-up-blocks-chain:first-child { + .tile-type-block-animation { + opacity: 1; + } +} + +@keyframes blockLoaderLine { + 0% { + transform: scaleY(0); + } + 100% { + transform: scaleY(1); + } +} + +$cube-bezier: cubic-bezier(0.25, 0.8, 0.25, 1); +$cube-quantity: 5; + +.cube-animation-wrapper { + width: 560px; + height: 290px; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%) scale(0.26); + svg { + width: 50px; + margin-top: -29px; + + .side { + fill: $tile-type-block-color; + opacity: 1; + + &:nth-of-type(2) { + fill: lighten($tile-type-block-color, 30); + opacity: 0.5; + } + + &:nth-of-type(3) { + fill: lighten($tile-type-block-color, 80); + opacity: 0.5; + } + } + } + + @while $cube-quantity > 0 { + .cube-animation-row:nth-of-type(#{$cube-quantity}) { + left: 25px * $cube-quantity; + top: 15px * $cube-quantity; + } + .cube-animation-column:nth-of-type(#{$cube-quantity}) { + position: relative; + top: 14px * $cube-quantity; + left: 25px * $cube-quantity; + } + .cube-animation-column:nth-of-type(#{$cube-quantity}) svg { + transform: translate3d(0, 0, 0); + animation: shrink-expand 2.8s $cube-bezier forwards; + animation-delay: -0.16s * $cube-quantity; + } + + $cube-quantity: $cube-quantity - 1; + } +} + +.cube-animation-center { + position: absolute; + top: 6%; + left: 20%; +} + +.cube-animation-row { + display: flex; + flex-direction: row-reverse; + position: absolute; +} + +.cube-animation-column { + display: flex; + flex-direction: column-reverse; +} + +@keyframes shrink-expand { + 0% { + transform: scale(0); + } + 50% { + transform: scale(1); + } + 100% { + transform: scale(0); + } +} + +.dark-block-loader { + width: auto; + height: 15px; + background-color: #e2e5ec; + margin-bottom: 5px; + border-radius: 4px; +} + +.dark-theme-applied .dark-block-loader { + background-color: #313355; +} + +.title-with-label { + display: inline-block; + vertical-align: middle; + margin-top: 3px; + @include media-breakpoint-down(sm) { + display: inline; + } +} + +.view-original-token-container { + margin-top: 10px; + margin-bottom: 10px; + font-size: 12px; +} + +.token-address-mobile { + @include media-breakpoint-down(sm) { + display: inline-block; + word-break: break-all; + line-height: 20px; + } +} diff --git a/frontend-v2/src/stylesheets/components/_token-balance-dropdown.scss b/frontend-v2/src/stylesheets/components/_token-balance-dropdown.scss new file mode 100644 index 0000000..b1a5975 --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_token-balance-dropdown.scss @@ -0,0 +1,108 @@ +.token-balance-dropdown { + min-width: 10rem; + margin-top: 1rem; + background-color: #fff; + + &.dropdown-menu { + border-radius: 4px !important; + box-shadow: 0 0.5rem 1rem rgba(202, 199, 226, 0.3) !important; + border: 1px solid #e2e5ec !important; + } + + .dropdown-items { + overflow-y: auto; + max-height: 18.5rem; + + .dropdown-item { + &:hover { + color: $secondary; + } + .row:nth-child(2) { + p { + font-size: 12px; + opacity: 0.65; + } + } + } + } + + .dropdown-header { + padding: 1.1rem 20px 0.9rem 20px; + font-size: 14px; + font-weight: 400; + } + + .dropdown-search-field { + height: 50px; + border: 1px solid #f5f6fa; + background-color: #f5f6fa; + outline: none !important; + font-size: 14px; + color: #828ba0; + font-weight: 300; + padding-left: 52px; + &::placeholder { + color: rgba(#828ba0, 0.5); + } + } + + .dropdown-search-icon { + left: 20px; + top: 50%; + margin-top: -8.5px; + path { + fill: #828ba0; + } + } + + &:after { + bottom: 100%; + right: 14%; + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; + } + + &:before { + display: none; + } +} + +.usd-total { + flex-grow: 1; + flex-basis: 10%; + padding-right: 0; + padding-left: 5px; +} + +.usd-rate { + flex-grow: 1; + flex-basis: 10%; + padding-right: 0; +} + +.el-1 { + flex-grow: 1; + flex-basis: 10%; +} + +.wh-sp { + white-space: initial; +} + +.token-wallet-icon { + margin-right: 5px; + margin-top: 0.5px !important; + flex-grow: 0; +} + +.ml-5px { + margin-left: 5px; +} + +.dropdown-row { + padding-left: 5px; + padding-right: 5px; +} diff --git a/frontend-v2/src/stylesheets/components/_token.scss b/frontend-v2/src/stylesheets/components/_token.scss new file mode 100644 index 0000000..b55e271 --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_token.scss @@ -0,0 +1,10 @@ +.stakes-td { + &.token-total-supply { + max-width: 150px; + white-space: normal; + } + &.token-name { + max-width: 270px; + white-space: normal; + } +} diff --git a/frontend-v2/src/stylesheets/components/_token_tile_view_more.scss b/frontend-v2/src/stylesheets/components/_token_tile_view_more.scss new file mode 100644 index 0000000..41cfc89 --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_token_tile_view_more.scss @@ -0,0 +1,47 @@ +.token-tile-view-more { + align-items: center; + display: flex; + justify-content: space-between; + line-height: 1.2; + padding-top: 10px; + text-align: center; + + a { + text-decoration: none; + } + + &:before, + &:after { + border-bottom: 1px solid $border-color; + border-top: 1px solid $border-color; + content: ""; + height: 4px; + flex-grow: 1; + + @include media-breakpoint-down(md) { + } + + @include media-breakpoint-down(sm) { + } + } + + &:before { + margin-right: 10px; + + @include media-breakpoint-down(md) { + } + + @include media-breakpoint-down(sm) { + } + } + + &:after { + margin-left: 10px; + + @include media-breakpoint-down(md) { + } + + @include media-breakpoint-down(sm) { + } + } +} diff --git a/frontend-v2/src/stylesheets/components/_tooltip.scss b/frontend-v2/src/stylesheets/components/_tooltip.scss new file mode 100644 index 0000000..99f5a4f --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_tooltip.scss @@ -0,0 +1,33 @@ +$tooltip-background-color: $btn-line-color !default; +$tooltip-color: #fff !default; + +.tooltip { + max-width: 250px; + min-width: 100px; + + .tooltip-inner { + background-color: $tooltip-background-color; + border-radius: 5px; + color: $tooltip-color; + padding: 15px; + font-size: 12px; + } + + .arrow::before { + border-top-color: $tooltip-background-color; + border-bottom-color: $tooltip-background-color; + } +} + +.bs-tooltip-top { + top: -10px !important; +} +.bs-tooltip-bottom { + top: 10px !important; +} +.bs-tooltip-left { + left: -10px !important; +} +.bs-tooltip-right { + left: 10px !important; +} diff --git a/frontend-v2/src/stylesheets/components/_transaction-input.scss b/frontend-v2/src/stylesheets/components/_transaction-input.scss new file mode 100644 index 0000000..9f10579 --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_transaction-input.scss @@ -0,0 +1,14 @@ +.transaction-input-text { + white-space: pre; + color: black; + + pre { + code { + color: black; + } + } +} + +.transaction-input-table { + overflow-x: scroll; +} diff --git a/frontend-v2/src/stylesheets/components/_transaction.scss b/frontend-v2/src/stylesheets/components/_transaction.scss new file mode 100644 index 0000000..0998db8 --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_transaction.scss @@ -0,0 +1,70 @@ +.transaction-bottom-panel { + display: flex; + flex-direction: column; + @media (min-width: 768px) { + flex-direction: row; + justify-content: space-between; + align-items: flex-end; + } +} + +.download-all-transactions { + text-align: center; + color: #a3a9b5; + font-size: 13px; + margin-top: 10px; + @media (min-width: 768px) { + margin-top: 30px; + } + .download-all-transactions-link { + display: inline-flex; + align-items: center; + text-decoration: none; + svg { + position: relative; + margin-left: 2px; + top: -3px; + left: 3px; + path { + fill: $primary; + } + } + &:hover { + text-decoration: underline; + } + } +} + +.block-detail-number { + width: 25%; + @include media-breakpoint-down(sm) { + width: 60%; + } +} + +.text-nowrap-small-screen { + @include media-breakpoint-up(sm) { + white-space: nowrap !important; + } +} + +.address-mobile { + @include media-breakpoint-down(sm) { + width: 80px; + } +} + +.transfers-list-mobile-container { + @include media-breakpoint-down(sm) { + margin-top: 0.5rem; + } +} + +.fs-14 { + font-size: 14px; +} +.transaction-gas-used { + @media (min-width: 1200px) { + white-space: nowrap; + } +} diff --git a/frontend-v2/src/stylesheets/components/_verify_other_explorers.scss b/frontend-v2/src/stylesheets/components/_verify_other_explorers.scss new file mode 100644 index 0000000..5c26cb2 --- /dev/null +++ b/frontend-v2/src/stylesheets/components/_verify_other_explorers.scss @@ -0,0 +1,217 @@ +.verify-other-explorers { + display: flex; + margin-top: 26px; + flex-direction: column; + flex-wrap: wrap; + @media (min-width: 768px) { + flex-direction: row; + align-items: center; + justify-content: space-between; + } + @media (min-width: 1200px) { + flex-wrap: nowrap; + } + h2 { + color: #a3a9b5; + font-size: 12px; + font-weight: 400; + line-height: 1.25; + display: inline-flex; + margin-bottom: 12px; + width: 100%; + @media (min-width: 768px) { + margin-right: 10px; + } + @media (min-width: 1200px) { + margin-bottom: 0; + width: auto; + } + } +} + +.verify-other-explorers-row { + display: flex; + flex-direction: column; + flex-grow: 2; + @media (min-width: 768px) { + flex-direction: row; + position: relative; + padding-right: 44px; + } +} + +.verify-other-explorers-elem { + display: inline-flex; + border: 1px solid #e2e5ec; + border-radius: 2px; + flex-grow: 2; + @media (min-width: 768px) { + margin-top: 0; + max-width: 188px; + } + @media (min-width: 1200px) { + min-width: 145px; + } + & + .verify-other-explorers-elem { + margin-top: 10px; + @media (min-width: 768px) { + margin-top: 0; + margin-left: 10px; + } + } + + .exp-logo { + min-width: 34px; + border-right: 1px solid #e2e5ec; + background-repeat: no-repeat; + background-position: center; + &.etherscan { + @include image-2x("/images/icons/etherscan@2x.png", 15px, 16px); + background-image: url("/images/icons/etherscan.png"); + background-size: 15px 16px; + } + &.blockchair { + @include image-2x("/images/icons/blockchair@2x.png", 10px, 16px); + background-image: url("/images/icons/blockchair.png"); + background-size: 10px 16px; + } + &.etherchain { + @include image-2x("/images/icons/etherchain@2x.png", 16px, 16px); + background-image: url("/images/icons/etherchain.png"); + background-size: 16px 16px; + } + } + + .exp-content { + padding: 6px 9px 5px 9px; + h3, + div { + font-size: 10px; + line-height: 1; + } + h3 { + color: #333; + font-weight: 400; + margin-bottom: 0; + margin-bottom: 1px; + } + div { + color: #49a2ee; + display: block; + line-height: 1; + text-overflow: ellipsis; + overflow: hidden; + width: 170px; + white-space: nowrap; + @media (min-width: 576px) { + width: 398px; + } + @media (min-width: 768px) { + width: 130px; + } + @media (min-width: 992px) { + width: 90px; + } + @media (min-width: 1200px) { + width: 93px; + } + } + } +} + +.verify-other-explorers-more { + min-width: 34px; + height: 34px; + display: inline-flex; + align-items: center; + justify-content: center; + border: 1px solid $btn-line-color; + border-radius: 2px; + margin-top: 10px; + transition: 0.1s ease-in; + position: relative; + @media (min-width: 768px) { + margin-left: 10px; + margin-top: 0; + position: absolute; + top: 0; + right: 0; + } + svg path { + fill: $btn-line-color; + } + &:hover { + background-color: $btn-line-color; + svg path { + fill: #fff; + } + } + span { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + } +} + +.verify-other-explorers-dialog { + max-width: 330px; +} + +.verify-other-explorers-table { + display: table; +} + +.verify-other-explorers-modal-row { + display: table-row; + height: 29px; + &:first-child { + .verify-other-explorers-cell.left { + .exp-logo { + @include image-2x("/images/icons/etherscan@2x.png", 15px, 16px); + background-image: url("/images/icons/etherscan.png"); + background-repeat: no-repeat; + padding-left: 25px; + background-size: 15px 16px; + } + } + } + &:nth-child(2) { + .verify-other-explorers-cell.left { + .exp-logo { + @include image-2x("/images/icons/blockchair@2x.png", 10px, 16px); + background-image: url("/images/icons/blockchair.png"); + background-repeat: no-repeat; + padding-left: 25px; + background-size: 10px 16px; + background-position: left 3px center; + } + } + } + &:nth-child(3) { + .verify-other-explorers-cell.left { + .exp-logo { + @include image-2x("/images/icons/etherchain@2x.png", 16px, 16px); + background-image: url("/images/icons/etherchain.png"); + background-repeat: no-repeat; + padding-left: 25px; + background-size: 16px 16px; + } + } + } +} + +.verify-other-explorers-cell { + display: table-cell; + &.left { + min-width: 120px; + } +} + +.link { + background-image: url("/images/icons/link.svg"); + background-repeat: no-repeat; + padding-left: 15px; + background-size: 12px 12px; +} diff --git a/frontend-v2/src/stylesheets/components/datepicker.scss b/frontend-v2/src/stylesheets/components/datepicker.scss new file mode 100644 index 0000000..df7b09e --- /dev/null +++ b/frontend-v2/src/stylesheets/components/datepicker.scss @@ -0,0 +1 @@ +@import "../../../../node_modules/pikaday/scss/pikaday"; diff --git a/frontend-v2/src/stylesheets/components/route_prefix.scss b/frontend-v2/src/stylesheets/components/route_prefix.scss new file mode 100644 index 0000000..b7c88db --- /dev/null +++ b/frontend-v2/src/stylesheets/components/route_prefix.scss @@ -0,0 +1,2 @@ +// DO NOT EDIT; use routePrefix in config/ +$route-prefix: ""; diff --git a/frontend-v2/src/stylesheets/components/stakes/_copy_icon.scss b/frontend-v2/src/stylesheets/components/stakes/_copy_icon.scss new file mode 100644 index 0000000..73a882b --- /dev/null +++ b/frontend-v2/src/stylesheets/components/stakes/_copy_icon.scss @@ -0,0 +1,17 @@ +$copy-icon-color: $primary !default; + +.copy-icon { + cursor: pointer; + height: 18px; + width: 18px; + + svg { + display: block; + height: 100%; + width: 100%; + } + + path { + fill: $copy-icon-color; + } +} diff --git a/frontend-v2/src/stylesheets/components/stakes/_modal_become_candidate.scss b/frontend-v2/src/stylesheets/components/stakes/_modal_become_candidate.scss new file mode 100644 index 0000000..283f9eb --- /dev/null +++ b/frontend-v2/src/stylesheets/components/stakes/_modal_become_candidate.scss @@ -0,0 +1,9 @@ +.modal-become-candidate { + max-width: 400px; + width: 100%; + + @include media-breakpoint-down(sm) { + margin-left: auto; + margin-right: auto; + } +} diff --git a/frontend-v2/src/stylesheets/components/stakes/_modal_bottom_disclaimer.scss b/frontend-v2/src/stylesheets/components/stakes/_modal_bottom_disclaimer.scss new file mode 100644 index 0000000..c1e7e91 --- /dev/null +++ b/frontend-v2/src/stylesheets/components/stakes/_modal_bottom_disclaimer.scss @@ -0,0 +1,33 @@ +.modal-bottom-disclaimer { + background-color: $modal-gray-background; + border-bottom-left-radius: $modal-border-radius; + border-bottom-right-radius: $modal-border-radius; + color: #a3a9b5; + display: flex; + font-size: 12px; + font-weight: normal; + line-height: 1.67; + padding: #{$modal-vertical-padding} #{$modal-horizontal-padding}; + text-align: left; + + &.b-b-r-0 { + border-bottom-right-radius: 0; + } + + &.b-b-l-0 { + border-bottom-left-radius: 0; + } + + .modal-bottom-disclaimer-graphic { + flex-shrink: 0; + padding-right: 15px; + + svg { + fill: #333; + } + } + + .modal-bottom-disclaimer-text { + flex-grow: 1; + } +} diff --git a/frontend-v2/src/stylesheets/components/stakes/_modal_claim_reward.scss b/frontend-v2/src/stylesheets/components/stakes/_modal_claim_reward.scss new file mode 100644 index 0000000..1da212e --- /dev/null +++ b/frontend-v2/src/stylesheets/components/stakes/_modal_claim_reward.scss @@ -0,0 +1,36 @@ +.modal-claim-reward { + max-width: 400px; + width: 100%; + + @include media-breakpoint-down(sm) { + margin-left: auto; + margin-right: auto; + } +} + +.modal-claim-reward { + label { + margin-bottom: 0; + } + + p { + margin-bottom: 0.3rem; + width: 100%; + + &.m-b-0 { + margin-bottom: 0; + } + } + + textarea { + background: #fff !important; + height: 38px; + } + + .amounts { + display: grid; + grid-template-rows: 1fr; + grid-template-columns: 1fr 80px; + grid-gap: 2vw; + } +} diff --git a/frontend-v2/src/stylesheets/components/stakes/_modal_delegators_info.scss b/frontend-v2/src/stylesheets/components/stakes/_modal_delegators_info.scss new file mode 100644 index 0000000..0d6ab69 --- /dev/null +++ b/frontend-v2/src/stylesheets/components/stakes/_modal_delegators_info.scss @@ -0,0 +1,9 @@ +.modal-delegators-info { + max-width: map-get($container-max-widths, "lg"); + min-width: map-get($container-max-widths, "lg"); + width: 100%; + + .modal-body { + padding: 0 0 25px; + } +} diff --git a/frontend-v2/src/stylesheets/components/stakes/_modal_stake.scss b/frontend-v2/src/stylesheets/components/stakes/_modal_stake.scss new file mode 100644 index 0000000..3e4a86b --- /dev/null +++ b/frontend-v2/src/stylesheets/components/stakes/_modal_stake.scss @@ -0,0 +1,140 @@ +.modal-stake { + max-width: 100%; + width: 560px; + + @include media-breakpoint-down(sm) { + margin-left: auto; + margin-right: auto; + } + + @include media-breakpoint-down(xs) { + width: 100%; + } +} + +.modal-stake-move { + max-width: 740px; + min-width: 740px; + width: 100%; + + @include media-breakpoint-down(sm) { + margin-left: auto; + margin-right: auto; + } +} + +.modal-stake-three-cols { + display: grid; + grid-template-rows: [row1-start] auto [row2-start] auto [row3-start] auto [row3-end]; + grid-template-columns: [col1-start] auto [col2-start] auto [col3-start] auto [col3-end]; + + > div { + grid-column: col2-start; + } + + .modal-stake-left { + grid-column: col1-start; + grid-row: row1-start / row3-end; + } + + .modal-stake-right { + grid-column: col3-start; + grid-row: row1-start / row3-end; + } + + @include media-breakpoint-down(xs) { + grid-template-columns: [col1-start] auto [col1-end]; + grid-template-rows: auto; + + > div { + grid-column: col1-start; + } + + .modal-stake-left { + width: 100%; + grid-column: col1-start; + grid-row: 3; + } + + .modal-stake-right { + grid-column: col1-start; + grid-row: 4; + } + + .stakes-progress { + width: auto; + padding-top: 15px; + padding-bottom: 15px; + + .stakes-progress-graph { + float: left; + width: 130px; + margin-right: 15px; + } + + .stakes-progress-info-title { + float: left; + margin-right: 15px; + } + + .stakes-progress-info { + margin-bottom: 15px; + } + } + } +} + +.modal-stake-two-cols { + display: grid; + grid-template-rows: [row1-start] auto [row2-start] auto [row3-start] auto [row3-end]; + grid-template-columns: [col1-start] auto [col2-start] 190px [col2-end]; + + > div { + grid-column: col1-start; + } + + .modal-stake-right { + grid-column: col2-start; + grid-row: row1-start / row3-end; + } + + @include media-breakpoint-down(xs) { + grid-template-columns: [col1-start] auto [col1-end]; + grid-template-rows: auto; + + .modal-stake-right { + grid-column: col1-start; + grid-row: 3; + } + + .stakes-progress { + width: auto; + padding-top: 15px; + padding-bottom: 15px; + + .stakes-progress-graph { + float: left; + width: 130px; + margin-right: 15px; + } + + .stakes-progress-info-title { + float: left; + margin-right: 15px; + } + + .stakes-progress-info { + margin-bottom: 15px; + } + } + } +} + +.modal-stake-left { + flex-shrink: 0; + height: 100%; + padding: $modal-vertical-padding $modal-horizontal-padding; + width: 190px; + height: 100%; + border-right: 1px solid $base-border-color; +} diff --git a/frontend-v2/src/stylesheets/components/stakes/_modal_validator_info.scss b/frontend-v2/src/stylesheets/components/stakes/_modal_validator_info.scss new file mode 100644 index 0000000..b47381c --- /dev/null +++ b/frontend-v2/src/stylesheets/components/stakes/_modal_validator_info.scss @@ -0,0 +1,72 @@ +.modal-validator-info { + max-width: 660px; + width: 100%; + + @include media-breakpoint-down(sm) { + margin-left: auto; + margin-right: auto; + } + + .modal-title { + margin-bottom: 10px; + } + + #pool_name { + width: 100%; + margin-bottom: 10px; + } + + #pool_description { + width: 100%; + } +} + +.modal-validator-info-content { + background-color: $modal-gray-background; + border-bottom-left-radius: $modal-border-radius; + border-bottom-right-radius: $modal-border-radius; + color: #a3a9b5; + column-gap: 60px; + display: grid; + font-size: 12px; + font-weight: normal; + grid-template-columns: 1fr 1fr 1fr; + line-height: 1.67; + padding: #{$modal-vertical-padding} #{$modal-horizontal-padding}; + row-gap: 30px; + + @include media-breakpoint-down(sm) { + grid-template-columns: 1fr 1fr; + } +} + +.modal-validator-info-item { + &-title { + color: #a3a9b5; + font-size: 12px; + font-weight: normal; + line-height: 1.2; + margin-bottom: 15px; + padding: 0; + text-align: left; + } + + &-value { + color: #333; + font-size: 14px; + font-weight: normal; + line-height: 1.2; + margin: 0; + padding: 0; + } +} + +.modal-validator-alert { + padding: 10px 30px; + background-color: #fff3f7; + color: #ff7986; + border-top: 1px solid #fee6ef; + border-bottom: 1px solid #fee6ef; + line-height: 1.5; + font-size: 14px; +} diff --git a/frontend-v2/src/stylesheets/components/stakes/_progress_from_to.scss b/frontend-v2/src/stylesheets/components/stakes/_progress_from_to.scss new file mode 100644 index 0000000..32fdaad --- /dev/null +++ b/frontend-v2/src/stylesheets/components/stakes/_progress_from_to.scss @@ -0,0 +1,53 @@ +$progress-from-to-background: #f5f6fa !default; +$progress-from-to-progress-background: $primary !default; + +.progress-from-to { + min-width: 120px; + max-width: 100%; + + .stakes-table & { + width: 120px; + } +} + +.progress-from-to-values { + display: flex; + justify-content: space-between; + margin-bottom: 10px; +} + +.progress-from-to-value { + color: #333; + font-size: 12px; + font-weight: normal; + line-height: 1.2; + + .stakes-tr-banned & { + color: $stakes-banned-color; + } +} + +.progress-from-to-background { + background-color: $progress-from-to-background; + border-radius: 2px; + height: 4px; + overflow: hidden; + position: relative; + + .stakes-tr-banned & { + background-color: darken($stakes-banned-background, 5%); + } +} + +.progress-from-to-progress { + background-color: $progress-from-to-progress-background; + height: 100%; + left: 0; + max-width: 100%; + position: absolute; + top: 0; + + .stakes-tr-banned & { + background-color: $stakes-banned-color; + } +} diff --git a/frontend-v2/src/stylesheets/components/stakes/_stakes-btn-close-alert.scss b/frontend-v2/src/stylesheets/components/stakes/_stakes-btn-close-alert.scss new file mode 100644 index 0000000..899e6f0 --- /dev/null +++ b/frontend-v2/src/stylesheets/components/stakes/_stakes-btn-close-alert.scss @@ -0,0 +1,14 @@ +$stakes-btn-close-alert-color: $primary !default; + +.stakes-btn-close-alert { + position: absolute; + left: 0.5em; + top: 1em; + border-style: none; + background: transparent; + outline: none !important; + + path { + fill: $stakes-btn-close-alert-color; + } +} diff --git a/frontend-v2/src/stylesheets/components/stakes/_stakes.scss b/frontend-v2/src/stylesheets/components/stakes/_stakes.scss new file mode 100644 index 0000000..5021caf --- /dev/null +++ b/frontend-v2/src/stylesheets/components/stakes/_stakes.scss @@ -0,0 +1,213 @@ +$stakes-dashboard-copy-icon-color: $copy-icon-color !default; +$stakes-address-color: $primary !default; +$stakes-control-color: $primary !default; +$stakes-stats-item-color: #fff !default; +$stakes-stats-item-border-color: #fff !default; + +.stakes-top { + @include gradient-container(); + + margin-bottom: 3rem; + padding: 50px 0; +} + +.stakes-top-stats { + display: flex; + justify-content: space-between; + align-items: center; + + @include stats-item( + $stakes-stats-item-border-color, + $stakes-stats-item-color + ); + + @include media-breakpoint-down(md) { + column-gap: 30px; + display: grid; + grid-template-columns: 1fr 1fr; + row-gap: 30px; + } + + .stakes-top-stats-item { + @include media-breakpoint-down(md) { + &:nth-child(1), + &:nth-child(2), + &:nth-child(3) { + grid-column-start: 1; + } + &:nth-child(4) { + grid-column-start: 2; + grid-row-start: 1; + } + } + + @include media-breakpoint-down(sm) { + grid-column-start: auto !important; + grid-row-start: auto !important; + } + } + + @include media-breakpoint-down(sm) { + grid-template-columns: 1fr 1fr; + } + + .copy-icon { + min-width: 18px; + margin-left: 20px; + path { + fill: $stakes-dashboard-copy-icon-color; + } + } +} + +.stakes-top-stats-value { + align-items: center; + display: flex; + + div:nth-child(1) { + overflow: hidden; + text-overflow: ellipsis; + max-width: 100%; + } +} + +.stakes-top-stats-label { + overflow: hidden; + text-overflow: ellipsis; + max-width: 100%; +} + +.stakes-top-stats-login { + &, + &:hover { + color: $secondary; + text-decoration: none; + cursor: pointer; + margin-right: 8px; + } +} + +.stakes-address-container { + display: flex; + justify-content: flex-start; + + .stakes-address { + margin-right: 10px; + + .stakes-tr-banned & { + color: $stakes-banned-color; + } + + a { + text-decoration: none; + color: $stakes-address-color; + } + } + + .stakes-address-active { + color: $stakes-address-color; + cursor: pointer; + } + + .check-tooltip { + position: relative; + top: -1px; + } +} + +.stakes-controls { + align-items: center; + display: flex; + justify-content: flex-end; + padding-right: 30px; + float: left; +} + +.stakes-control { + cursor: pointer; + display: flex; + justify-content: flex-start; + color: $stakes-control-color; + font-size: 14px; + font-weight: normal; + line-height: 1.2; + margin-right: 25px; + text-align: left; + + &:last-child { + margin-right: 0; + } +} + +.stakes-control-icon { + path { + fill: $stakes-control-color; + } +} + +.stakes-top-stats-item { + min-width: 180px; + + &.stakes-top-stats-item-address { + min-width: 260px; + width: 100%; + } + + @include media-breakpoint-down(sm) { + min-width: auto; + &.stakes-top-stats-item-address { + grid-column-end: span 2 !important; + } + } +} + +.stakes-top-buttons { + min-width: 180px; + align-items: center; + display: flex; + justify-content: center; + flex-direction: column; + + .btn-add-full { + margin-bottom: 10px; + } + + .btn-external-link:hover { + color: #fff; + } + + &.right { + @include media-breakpoint-up(sm) { + margin-left: 10px; + } + } + + @include media-breakpoint-down(md) { + grid-column-start: 2; + grid-row-start: 2; + justify-self: left; + } + + @include media-breakpoint-down(sm) { + min-width: auto; + grid-column-end: span 2; + grid-column-start: auto !important; + grid-row-start: auto !important; + justify-self: center; + } +} + +.staking-pg-container { + padding: 0 30px 30px; + &.at-bottom { + padding-top: 30px; + } +} + +.stake-stats-container { + @include media-breakpoint-up(lg) { + margin-bottom: -30px; + } + margin-top: 10px; + font-size: 12px; +} diff --git a/frontend-v2/src/stylesheets/components/stakes/_stakes_btn_remove_pool.scss b/frontend-v2/src/stylesheets/components/stakes/_stakes_btn_remove_pool.scss new file mode 100644 index 0000000..3f95220 --- /dev/null +++ b/frontend-v2/src/stylesheets/components/stakes/_stakes_btn_remove_pool.scss @@ -0,0 +1,21 @@ +$stakes-btn-remove-pool-color: $primary !default; + +.stakes-btn-remove-pool { + align-items: center; + color: $stakes-btn-remove-pool-color; + cursor: pointer; + display: flex; + font-size: 12px; + font-weight: 600; + height: 36px; + justify-content: center; + text-align: center; + + svg { + margin-right: 10px; + } + + path { + fill: $stakes-btn-remove-pool-color; + } +} diff --git a/frontend-v2/src/stylesheets/components/stakes/_stakes_empty_content.scss b/frontend-v2/src/stylesheets/components/stakes/_stakes_empty_content.scss new file mode 100644 index 0000000..981529d --- /dev/null +++ b/frontend-v2/src/stylesheets/components/stakes/_stakes_empty_content.scss @@ -0,0 +1,35 @@ +.stakes-empty-content { + display: flex; + justify-content: center; + padding: 100px 15px 20px; +} + +.stakes-empty-content-pic { + flex-shrink: 0; + margin: 0 50px 0 0; +} + +.stakes-empty-content-pic-svg-path { + fill: $primary; +} + +.stakes-empty-content-info { + max-width: 400px; +} + +.stakes-empty-content-title { + font-size: 18px; + font-weight: normal; + line-height: 1.2; + margin: 0 0 15px; + text-align: left; +} + +.stakes-empty-content-text { + color: #a3a9b5; + font-size: 14px; + font-weight: normal; + line-height: 1.71; + margin: 0 0 25px; + text-align: left; +} diff --git a/frontend-v2/src/stylesheets/components/stakes/_stakes_progress.scss b/frontend-v2/src/stylesheets/components/stakes/_stakes_progress.scss new file mode 100644 index 0000000..9861421 --- /dev/null +++ b/frontend-v2/src/stylesheets/components/stakes/_stakes_progress.scss @@ -0,0 +1,85 @@ +$stakes-progress-graph-color: $primary !default; + +.stakes-progress { + .modal-stake-right & { + border-left: 1px solid $base-border-color; + flex-shrink: 0; + height: 100%; + padding: $modal-vertical-padding $modal-horizontal-padding; + width: 190px; + } +} + +.stakes-progress-info { + margin-bottom: 25px; + + &:last-child { + margin-bottom: 0; + } +} + +.stakes-progress-info-title { + color: #a3a9b5; + font-size: 12px; + font-weight: normal; + line-height: 1.2; + margin: 0 0 12px; + text-align: left; +} + +.stakes-progress-info-value { + color: #333; + font-size: 14px; + font-weight: normal; + line-height: 1.2; + margin: 0; + text-align: left; + + &.link-color { + color: $primary; + } +} + +.stakes-progress-info-link { + color: $primary; + cursor: pointer; +} + +.stakes-progress-graph { + margin: 0 0 20px; + position: relative; +} + +.stakes-progress-graph-canvas { + position: relative; + z-index: 1; +} + +.stakes-progress-graph-thing-for-getting-color { + color: $stakes-progress-graph-color; +} + +.stakes-progress-data { + left: 50%; + position: absolute; + top: 50%; + transform: translateX(-50%) translateY(-50%); + z-index: 12; +} + +.stakes-progress-data-total { + color: #a3a9b5; + font-size: 12px; + font-weight: normal; + line-height: 1.2; + text-align: center; +} + +.stakes-progress-data-progress { + color: #333; + font-size: 24px; + font-weight: bold; + line-height: 1.2; + margin: 0 0 8px; + text-align: center; +} diff --git a/frontend-v2/src/stylesheets/export-csv.scss b/frontend-v2/src/stylesheets/export-csv.scss new file mode 100644 index 0000000..a8e1993 --- /dev/null +++ b/frontend-v2/src/stylesheets/export-csv.scss @@ -0,0 +1,12 @@ +@import "components/datepicker"; + +.js-datepicker { + width: 150px !important; + display: inline-block !important; + margin-left: 10px; + margin-right: 10px; +} + +.dates-container { + margin-bottom: 20px; +} diff --git a/frontend-v2/src/stylesheets/export-vars-to-js.module.scss b/frontend-v2/src/stylesheets/export-vars-to-js.module.scss new file mode 100644 index 0000000..01fa524 --- /dev/null +++ b/frontend-v2/src/stylesheets/export-vars-to-js.module.scss @@ -0,0 +1,31 @@ +@import "./mixins"; + +// Bootstrap Core CSS +@import "../../node_modules/bootstrap/scss/functions"; +@import "../../node_modules/bootstrap/scss/variables"; +@import "../../node_modules/bootstrap/scss/mixins"; + +@import "theme/variables"; + +@import "../../node_modules/bootstrap/scss/utilities/background"; +@import "../../node_modules/bootstrap/scss/utilities/position"; +@import "../../node_modules/bootstrap/scss/utilities/borders"; +@import "../../node_modules/bootstrap/scss/progress"; + +@import "components/navbar"; +@import "components/alerts"; +@import "components/stakes_variables"; +@import "components/stakes_table"; +@import "components/dashboard-banner"; + +@import "theme/dark-theme"; + +@import "theme/custom_contracts/dark-forest-theme"; +@import "theme/custom_contracts/circles-theme"; + +:export { + dashboardBannerChartAxisFontColor: $dashboard-banner-chart-axis-font-color; + dashboardLineColorMarket: $dashboard-line-color-market; + dashboardLineColorPrice: $dashboard-line-color-price; + dashboardLineColorTransactions: $dashboard-line-color-transactions; +} diff --git a/frontend-v2/src/stylesheets/main-page.scss b/frontend-v2/src/stylesheets/main-page.scss new file mode 100644 index 0000000..f5180d9 --- /dev/null +++ b/frontend-v2/src/stylesheets/main-page.scss @@ -0,0 +1,76 @@ +@import "./mixins"; + +/* Phoenix flash messages */ +.alert:empty { + display: none; +} + +/* This file is for your main application css. */ + +// Bootstrap Core CSS +@import "../../node_modules/bootstrap/scss/functions"; +@import "../../node_modules/bootstrap/scss/variables"; +@import "../../node_modules/bootstrap/scss/mixins"; + +@import "theme/variables"; + +@import "../../node_modules/bootstrap/scss/root"; +@import "../../node_modules/bootstrap/scss/reboot"; +@import "../../node_modules/bootstrap/scss/grid"; +@import "../../node_modules/bootstrap/scss/buttons"; +@import "../../node_modules/bootstrap/scss/forms"; +@import "../../node_modules/bootstrap/scss/input-group"; +@import "../../node_modules/bootstrap/scss/utilities/spacing"; +@import "../../node_modules/bootstrap/scss/utilities/sizing"; +@import "../../node_modules/bootstrap/scss/utilities/display"; +@import "../../node_modules/bootstrap/scss/utilities/flex"; +@import "../../node_modules/bootstrap/scss/utilities/float"; +@import "../../node_modules/bootstrap/scss/utilities/text"; +@import "../../node_modules/bootstrap/scss/utilities/borders"; + +// Bootstrap Components +@import "../../node_modules/bootstrap/scss/alert"; +@import "../../node_modules/bootstrap/scss/badge"; +@import "../../node_modules/bootstrap/scss/card"; +@import "../../node_modules/bootstrap/scss/dropdown"; +@import "../../node_modules/bootstrap/scss/forms"; +@import "../../node_modules/bootstrap/scss/nav"; +@import "../../node_modules/bootstrap/scss/navbar"; +@import "../../node_modules/bootstrap/scss/transitions"; + +//Custom theme +@import "theme/fonts"; + +// Custom SCSS +@import "layout"; +@import "typography"; +@import "helpers"; +@import "elements"; +@import "components/nav_tabs"; +@import "components/address_link"; +@import "components/footer"; +@import "components/button"; +@import "components/navbar"; +@import "components/alerts"; +@import "components/animations"; +@import "components/card"; +@import "components/tile"; +@import "components/dashboard-banner"; +@import "components/badge"; +@import "components/nounderline-link"; +@import "components/dropdown"; +@import "components/btn_full"; +@import "components/btn_line"; +@import "components/stakes_variables"; +@import "components/btn_add_to_mm"; +@import "components/errors"; +@import "components/btn_no_border"; +@import "components/custom_tooltips"; +@import "components/label"; +@import "components/ad"; +@import "components/_search"; +@import "components/token_tile_view_more"; +// Font Awesome +@import "components/_fontawesome_icon"; + +@import "theme/dark-theme"; diff --git a/frontend-v2/src/stylesheets/non-critical.scss b/frontend-v2/src/stylesheets/non-critical.scss new file mode 100644 index 0000000..c9a7759 --- /dev/null +++ b/frontend-v2/src/stylesheets/non-critical.scss @@ -0,0 +1,20 @@ +// Bootstrap Core CSS +@import "../../node_modules/bootstrap/scss/functions"; +@import "../../node_modules/bootstrap/scss/variables"; +@import "../../node_modules/bootstrap/scss/mixins"; + +@import "theme/variables-non-critical"; + +@import "../../node_modules/bootstrap/scss/modal"; +@import "../../node_modules/bootstrap/scss/tooltip"; + +@import "components/i_tooltip"; +@import "components/i_tooltip_2"; +@import "components/check_tooltip"; +@import "components/me_tooltip"; +@import "components/tooltip"; + +@import "components/qr-code"; +@import "components/modal_variables"; +@import "components/modal"; +@import "components/modal_status"; diff --git a/frontend-v2/src/stylesheets/stakes.scss b/frontend-v2/src/stylesheets/stakes.scss new file mode 100644 index 0000000..2ddab06 --- /dev/null +++ b/frontend-v2/src/stylesheets/stakes.scss @@ -0,0 +1,23 @@ +@import "./mixins"; + +// Bootstrap Core CSS +@import "../../node_modules/bootstrap/scss/functions"; +@import "../../node_modules/bootstrap/scss/mixins"; + +@import "theme/variables"; + +@import "components/stakes_variables"; +@import "components/stakes/copy_icon"; +@import "components/stakes/stakes"; +@import "components/stakes/progress_from_to"; +@import "components/stakes/stakes_empty_content"; +@import "components/stakes/stakes_btn_remove_pool"; +@import "components/modal_variables"; +@import "components/stakes/stakes_progress"; +@import "components/stakes/modal_stake"; +@import "components/stakes/modal_become_candidate"; +@import "components/stakes/modal_claim_reward"; +@import "components/stakes/modal_validator_info"; +@import "components/stakes/modal_delegators_info"; +@import "components/stakes/modal_bottom_disclaimer"; +@import "components/stakes/stakes-btn-close-alert"; diff --git a/frontend-v2/src/stylesheets/theme/_base_variables.scss b/frontend-v2/src/stylesheets/theme/_base_variables.scss new file mode 100644 index 0000000..48de54b --- /dev/null +++ b/frontend-v2/src/stylesheets/theme/_base_variables.scss @@ -0,0 +1,1008 @@ +// Variables +// +// Variables should follow the `$component-state-property-size` formula for +// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs. + +@use "sass:math"; + +$dashboard-line-color-price: #8286a9 !default; +$base-border-color: #e2e5ec !default; +$common-container-margin: 50px !default; + +// stylelint-disable +$white: #fff !default; +$gray-100: #f8f9fa !default; +$gray-200: #e9ecef !default; +$gray-300: #dee2e6 !default; +$gray-400: #ced4da !default; +$gray-500: #828ba0 !default; +$gray-600: #cdcdcc !default; +$gray-700: #495057 !default; +$gray-800: #343a40 !default; +$gray-900: #212529 !default; +$black: #000 !default; + +$grays: () !default; +$grays: map-merge( + ( + "100": $gray-100, + "200": $gray-200, + "300": $gray-300, + "400": $gray-400, + "500": $gray-500, + "600": $gray-600, + "700": $gray-700, + "800": $gray-800, + "900": $gray-900, + ), + $grays +); + +$blue: #4786ff !default; +$indigo: #5b389f !default; +$purple: #997fdc !default; +$pink: #e83e8c !default; +$lilac: #b38dc9 !default; +$red: #c74d39 !default; +$orange: #ef9a60 !default; +$yellow: #ffc107 !default; +$green: #20b760 !default; +$teal: #009097 !default; +$cyan: #90e1d8 !default; +$dark-purple: #923dc3; + +$colors: () !default; +$colors: map-merge( + ( + "blue": $blue, + "indigo": $indigo, + "purple": $purple, + "pink": $pink, + "red": $red, + "orange": $orange, + "yellow": $yellow, + "green": $green, + "teal": $teal, + "cyan": $cyan, + "white": $white, + "gray": $gray-600, + "gray-dark": $gray-800, + ), + $colors +); + +$primary: $indigo !default; +$dark-primary: #9b62ff !default; +$dark-primary-alternate: #9b62ff !default; +$secondary: #7dd79f !default; +$dark-secondary: #87e1a9 !default; +$tertiary: $purple !default; +$success: $green !default; +$info: $cyan !default; +$warning: $yellow !default; +$danger: $red !default; +$light: $gray-400 !default; +$dark: $gray-800 !default; + +$theme-colors: () !default; +$theme-colors: map-merge( + ( + "primary": $primary, + "secondary": $secondary, + "success": $success, + "info": $info, + "warning": $warning, + "danger": $danger, + "light": $light, + "dark": $dark, + ), + $theme-colors +); +// stylelint-enable + +// Set a specific jump point for requesting color jumps +$theme-color-interval: 8% !default; + +// The yiq lightness value that determines when the lightness of color changes from "dark" to "light". Acceptable values are between 0 and 255. +$yiq-contrasted-threshold: 150 !default; + +// Customize the light and dark text colors for use in our YIQ color contrast function. +$yiq-text-dark: $gray-900 !default; +$yiq-text-light: $white !default; + +// Options +// +// Quickly modify global styling by enabling or disabling optional features. + +$enable-caret: true !default; +$enable-rounded: true !default; +$enable-shadows: false !default; +$enable-gradients: false !default; +$enable-transitions: true !default; +$enable-hover-media-query: false !default; // Deprecated, no longer affects any compiled CSS +$enable-grid-classes: true !default; +$enable-print-styles: true !default; + +// Spacing +// +// Control the default styling of most Bootstrap elements by modifying these +// variables. Mostly focused on spacing. +// You can add more entries to the $spacers map, should you need more variation. + +// stylelint-disable +$spacer: 1rem !default; +$spacers: () !default; +$spacers: map-merge( + ( + 0: 0, + 1: ( + $spacer * 0.25, + ), + 2: ( + $spacer * 0.5, + ), + 3: $spacer, + 4: ( + $spacer * 1.5, + ), + 5: ( + $spacer * 3, + ), + ), + $spacers +); + +// This variable affects the `.h-*` and `.w-*` classes. +$sizes: () !default; +$sizes: map-merge( + ( + 25: 25%, + 50: 50%, + 75: 75%, + 100: 100%, + auto: auto, + ), + $sizes +); +// stylelint-enable + +// Body +// +// Settings for the `` element. + +$body-bg: $white !default; +$body-color: $gray-900 !default; + +// Links +// +// Style anchor elements. + +$link-color: theme-color("primary") !default; +$link-decoration: none !default; +$link-hover-color: darken(map-get($theme-colors, primary), 15%) !default; +$link-hover-decoration: underline !default; + +// Paragraphs +// +// Style p element. + +$paragraph-margin-bottom: 1rem !default; + +// Grid breakpoints +// +// Define the minimum dimensions at which your layout will change, +// adapting to different screen sizes, for use in media queries. + +$grid-breakpoints: ( + xs: 0, + sm: 576px, + md: 768px, + lg: 992px, + xl: 1200px, +) !default; + +@include _assert-ascending($grid-breakpoints, "$grid-breakpoints"); +@include _assert-starts-at-zero($grid-breakpoints); + +// Grid containers +// +// Define the maximum width of `.container` for different screen sizes. + +$container-max-widths: ( + sm: 540px, + md: 720px, + lg: 960px, + xl: 1140px, +) !default; + +@include _assert-ascending($container-max-widths, "$container-max-widths"); + +@media (min-width: 1200px) { + .container { + max-width: 1300px !important; + } +} + +// Grid columns +// +// Set the number of columns and specify the width of the gutters. + +$grid-columns: 12 !default; +$grid-gutter-width: 30px !default; + +// Components +// +// Define common padding and border radius sizes and more. + +$line-height-lg: 1.5 !default; +$line-height-sm: 1.5 !default; + +$border-width: 1px !default; +$border-color: $gray-300 !default; + +$border-radius: 0.1rem !default; +$border-radius-lg: 0.3rem !default; +$border-radius-sm: 0.2rem !default; + +$box-shadow-sm: 0 0.125rem 0.25rem rgba($black, 0.075) !default; +$box-shadow: 0 0.5rem 1rem rgba($black, 0.15) !default; +$box-shadow-lg: 0 1rem 3rem rgba($black, 0.175) !default; + +$component-active-color: $white !default; +$component-active-bg: theme-color("primary") !default; + +$caret-width: 0.3em !default; + +$transition-base: all 0.2s ease-in-out !default; +$transition-fade: opacity 0.15s linear !default; +$transition-collapse: height 0.35s ease !default; +$transition-cont: all 0.4s ease-in-out !default; + +// Fonts +// +// Font, line-height, and color for body text, headings, and more. + +// stylelint-disable value-keyword-case +$font-family: Nunito, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", + "Segoe UI Emoji", "Segoe UI Symbol" !default; +$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, + "Liberation Mono", "Courier New", monospace !default; +$font-family-base: $font-family !default; +// stylelint-enable value-keyword-case + +$font-size-base: 1rem !default; // Assumes the browser default, typically `16px` +$font-size-lg: ($font-size-base * 1.25) !default; +$font-size-sm: ($font-size-base * 0.875) !default; + +$font-weight-light: 300 !default; +$font-weight-normal: 400 !default; +$font-weight-bold: 700 !default; + +$font-weight-base: $font-weight-normal !default; +$line-height-base: 1.5 !default; + +$h1-font-size: $font-size-base * 2.5 !default; +$h2-font-size: $font-size-base * 2 !default; +$h3-font-size: $font-size-base * 1.75 !default; +$h4-font-size: $font-size-base * 1.5 !default; +$h5-font-size: $font-size-base * 1.25 !default; +$h6-font-size: $font-size-base !default; + +$headings-margin-bottom: math.div($spacer, 2) !default; +$headings-font-family: inherit !default; +$headings-font-weight: 500 !default; +$headings-line-height: 1.2 !default; +$headings-color: inherit !default; + +$display1-size: 6rem !default; +$display2-size: 5.5rem !default; +$display3-size: 4.5rem !default; +$display4-size: 3.5rem !default; + +$display1-weight: 300 !default; +$display2-weight: 300 !default; +$display3-weight: 300 !default; +$display4-weight: 300 !default; +$display-line-height: $headings-line-height !default; + +$lead-font-size: ($font-size-base * 1.25) !default; +$lead-font-weight: 300 !default; + +$small-font-size: 80% !default; + +$text-muted: $gray-500 !default; + +$blockquote-small-color: $gray-600 !default; +$blockquote-font-size: ($font-size-base * 1.25) !default; + +$hr-border-color: rgba($black, 0.1) !default; +$hr-border-width: $border-width !default; + +$mark-padding: 0.2em !default; + +$dt-font-weight: $font-weight-bold !default; + +$kbd-box-shadow: inset 0 -0.1rem 0 rgba($black, 0.25) !default; +$nested-kbd-font-weight: $font-weight-bold !default; + +$list-inline-padding: 0.5rem !default; + +$mark-bg: #fcf8e3 !default; + +$hr-margin-y: $spacer !default; + +// Tables +// +// Customizes the `.table` component with basic values, each used across all table variations. + +$table-cell-padding: 0.75rem !default; +$table-cell-padding-sm: 0.3rem !default; + +$table-bg: transparent !default; +$table-accent-bg: rgba($black, 0.05) !default; +$table-hover-bg: rgba($black, 0.075) !default; +$table-active-bg: $table-hover-bg !default; + +$table-border-width: $border-width !default; +$table-border-color: $gray-300 !default; + +$table-head-bg: $gray-200 !default; +$table-head-color: $gray-700 !default; + +$table-dark-bg: $gray-900 !default; +$table-dark-accent-bg: rgba($white, 0.05) !default; +$table-dark-hover-bg: rgba($white, 0.075) !default; +$table-dark-border-color: lighten($gray-900, 7.5%) !default; +$table-dark-color: $body-bg !default; + +$table-striped-order: odd !default; + +$table-caption-color: $text-muted !default; + +// Buttons + Forms +// +// Shared variables that are reassigned to `$input-` and `$btn-` specific variables. + +$input-btn-padding-y: 0.375rem !default; +$input-btn-padding-x: 0.75rem !default; +$input-btn-line-height: $line-height-base !default; + +$input-btn-focus-width: 1px !default; +$input-btn-focus-color: rgba($component-active-bg, 0.25) !default; +$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color !default; + +$input-btn-padding-y-sm: 0.25rem !default; +$input-btn-padding-x-sm: 0.5rem !default; +$input-btn-line-height-sm: $line-height-sm !default; + +$input-btn-padding-y-lg: 0.5rem !default; +$input-btn-padding-x-lg: 1rem !default; +$input-btn-line-height-lg: $line-height-lg !default; + +$input-btn-border-width: $border-width !default; + +// Buttons +// +// For each of Bootstrap's buttons, define text, background, and border color. + +$btn-padding-y: $input-btn-padding-y !default; +$btn-padding-x: $input-btn-padding-x !default; +$btn-line-height: $input-btn-line-height !default; + +$btn-padding-y-sm: $input-btn-padding-y-sm !default; +$btn-padding-x-sm: $input-btn-padding-x-sm !default; +$btn-line-height-sm: $input-btn-line-height-sm !default; + +$btn-padding-y-lg: $input-btn-padding-y-lg !default; +$btn-padding-x-lg: $input-btn-padding-x-lg !default; +$btn-line-height-lg: $input-btn-line-height-lg !default; + +$btn-border-width: $input-btn-border-width !default; + +$btn-font-weight: $font-weight-normal !default; +$btn-box-shadow: + inset 0 1px 0 rgba($white, 0.15), + 0 1px 1px rgba($black, 0.075) !default; +$btn-focus-width: $input-btn-focus-width !default; +$btn-focus-box-shadow: $input-btn-focus-box-shadow !default; +$btn-disabled-opacity: 0.65 !default; +$btn-active-box-shadow: inset 0 3px 5px rgba($black, 0.125) !default; + +$btn-link-disabled-color: $gray-600 !default; + +$btn-block-spacing-y: 0.5rem !default; + +// Allows for customizing button radius independently from global border radius +$btn-border-radius: $border-radius !default; +$btn-border-radius-lg: $border-radius-lg !default; +$btn-border-radius-sm: $border-radius-sm !default; + +$btn-transition: + color 0.15s ease-in-out, + background-color 0.15s ease-in-out, + border-color 0.15s ease-in-out, + box-shadow 0.15s ease-in-out !default; + +// Forms + +$label-margin-bottom: 0.5rem !default; + +$input-padding-y: $input-btn-padding-y !default; +$input-padding-x: $input-btn-padding-x !default; +$input-line-height: $input-btn-line-height !default; + +$input-padding-y-sm: $input-btn-padding-y-sm !default; +$input-padding-x-sm: $input-btn-padding-x-sm !default; +$input-line-height-sm: $input-btn-line-height-sm !default; + +$input-padding-y-lg: $input-btn-padding-y-lg !default; +$input-padding-x-lg: $input-btn-padding-x-lg !default; +$input-line-height-lg: $input-btn-line-height-lg !default; + +$input-bg: $white !default; +$input-disabled-bg: $gray-200 !default; + +$input-color: $gray-700 !default; +$input-border-color: $gray-400 !default; +$input-border-width: $input-btn-border-width !default; +$input-box-shadow: inset 0 1px 1px rgba($black, 0.075) !default; + +$input-border-radius: $border-radius !default; +$input-border-radius-lg: $border-radius-lg !default; +$input-border-radius-sm: $border-radius-sm !default; + +$input-focus-bg: $input-bg !default; +$input-focus-border-color: lighten($component-active-bg, 25%) !default; +$input-focus-color: $input-color !default; +$input-focus-width: $input-btn-focus-width !default; +$input-focus-box-shadow: $input-btn-focus-box-shadow !default; + +$input-placeholder-color: $gray-600 !default; +$input-plaintext-color: $body-color !default; + +$input-height-border: $input-border-width * 2 !default; + +$input-height-inner: ($font-size-base * $input-btn-line-height) + + ($input-btn-padding-y * 2) !default; +$input-height: calc(#{$input-height-inner} + #{$input-height-border}) !default; + +$input-height-inner-sm: ($font-size-sm * $input-btn-line-height-sm) + + ($input-btn-padding-y-sm * 2) !default; +$input-height-sm: calc( + #{$input-height-inner-sm} + #{$input-height-border} +) !default; + +$input-height-inner-lg: ($font-size-lg * $input-btn-line-height-lg) + + ($input-btn-padding-y-lg * 2) !default; +$input-height-lg: calc( + #{$input-height-inner-lg} + #{$input-height-border} +) !default; + +$input-transition: + border-color 0.15s ease-in-out, + box-shadow 0.15s ease-in-out !default; + +$form-text-margin-top: 0.25rem !default; + +$form-check-input-gutter: 1.25rem !default; +$form-check-input-margin-y: 0.3rem !default; +$form-check-input-margin-x: 0.25rem !default; + +$form-check-inline-margin-x: 0.75rem !default; +$form-check-inline-input-margin-x: 0.3125rem !default; + +$form-group-margin-bottom: 1rem !default; + +$input-group-addon-color: $input-color !default; +$input-group-addon-bg: $gray-200 !default; +$input-group-addon-border-color: $input-border-color !default; + +$custom-control-gutter: 1.5rem !default; +$custom-control-spacer-x: 1rem !default; + +$custom-control-indicator-size: 1rem !default; +$custom-control-indicator-bg: $gray-300 !default; +$custom-control-indicator-bg-size: 50% 50% !default; +$custom-control-indicator-box-shadow: inset 0 0.25rem 0.25rem rgba($black, 0.1) !default; + +$custom-control-indicator-disabled-bg: $gray-200 !default; +$custom-control-label-disabled-color: $gray-600 !default; + +$custom-control-indicator-checked-color: $component-active-color !default; +$custom-control-indicator-checked-bg: $component-active-bg !default; +$custom-control-indicator-checked-disabled-bg: rgba( + theme-color("primary"), + 0.5 +) !default; +$custom-control-indicator-checked-box-shadow: none !default; + +$custom-control-indicator-focus-box-shadow: + 0 0 0 1px $body-bg, + $input-btn-focus-box-shadow !default; + +$custom-control-indicator-active-color: $component-active-color !default; +$custom-control-indicator-active-bg: lighten( + $component-active-bg, + 35% +) !default; +$custom-control-indicator-active-box-shadow: none !default; + +$custom-checkbox-indicator-border-radius: $border-radius !default; +$custom-checkbox-indicator-icon-checked: str-replace( + url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='#{$custom-control-indicator-checked-color}' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E"), + "#", + "%23" +) !default; + +$custom-checkbox-indicator-indeterminate-bg: $component-active-bg !default; +$custom-checkbox-indicator-indeterminate-color: $custom-control-indicator-checked-color !default; +$custom-checkbox-indicator-icon-indeterminate: str-replace( + url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='#{$custom-checkbox-indicator-indeterminate-color}' d='M0 2h4'/%3E%3C/svg%3E"), + "#", + "%23" +) !default; +$custom-checkbox-indicator-indeterminate-box-shadow: none !default; + +$custom-radio-indicator-border-radius: 50% !default; +$custom-radio-indicator-icon-checked: str-replace( + url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='#{$custom-control-indicator-checked-color}'/%3E%3C/svg%3E"), + "#", + "%23" +) !default; + +$custom-select-padding-y: 0.375rem !default; +$custom-select-padding-x: 0.75rem !default; +$custom-select-height: $input-height !default; +$custom-select-indicator-padding: 1rem !default; // Extra padding to account for the presence of the background-image based indicator +$custom-select-line-height: $input-btn-line-height !default; +$custom-select-color: $input-color !default; +$custom-select-disabled-color: $gray-600 !default; +$custom-select-bg: $input-bg !default; +$custom-select-disabled-bg: $gray-200 !default; +$custom-select-bg-size: 8px 10px !default; // In pixels because image dimensions +$custom-select-indicator-color: $gray-800 !default; +$custom-select-indicator: str-replace( + url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='#{$custom-select-indicator-color}' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E"), + "#", + "%23" +) !default; +$custom-select-border-width: $input-btn-border-width !default; +$custom-select-border-color: $input-border-color !default; +$custom-select-border-radius: $border-radius !default; + +$custom-select-focus-border-color: $input-focus-border-color !default; +$custom-select-focus-box-shadow: + inset 0 1px 2px rgba($black, 0.075), + 0 0 5px rgba($custom-select-focus-border-color, 0.5) !default; + +$custom-select-font-size-sm: 75% !default; +$custom-select-height-sm: $input-height-sm !default; + +$custom-select-font-size-lg: 125% !default; +$custom-select-height-lg: $input-height-lg !default; + +$custom-range-track-width: 100% !default; +$custom-range-track-height: 0.5rem !default; +$custom-range-track-cursor: pointer !default; +$custom-range-track-bg: $gray-300 !default; +$custom-range-track-border-radius: 1rem !default; +$custom-range-track-box-shadow: inset 0 0.25rem 0.25rem rgba($black, 0.1) !default; + +$custom-range-thumb-width: 1rem !default; +$custom-range-thumb-height: $custom-range-thumb-width !default; +$custom-range-thumb-bg: $component-active-bg !default; +$custom-range-thumb-border: 0 !default; +$custom-range-thumb-border-radius: 1rem !default; +$custom-range-thumb-box-shadow: 0 0.1rem 0.25rem rgba($black, 0.1) !default; +$custom-range-thumb-focus-box-shadow: + 0 0 0 1px $body-bg, + $input-btn-focus-box-shadow !default; +$custom-range-thumb-active-bg: lighten($component-active-bg, 35%) !default; + +$custom-file-height: $input-height !default; +$custom-file-focus-border-color: $input-focus-border-color !default; +$custom-file-focus-box-shadow: $input-btn-focus-box-shadow !default; + +$custom-file-padding-y: $input-btn-padding-y !default; +$custom-file-padding-x: $input-btn-padding-x !default; +$custom-file-line-height: $input-btn-line-height !default; +$custom-file-color: $input-color !default; +$custom-file-bg: $input-bg !default; +$custom-file-border-width: $input-btn-border-width !default; +$custom-file-border-color: $input-border-color !default; +$custom-file-border-radius: $input-border-radius !default; +$custom-file-box-shadow: $input-box-shadow !default; +$custom-file-button-color: $custom-file-color !default; +$custom-file-button-bg: $input-group-addon-bg !default; +$custom-file-text: ( + en: "Browse", +) !default; + +// Form validation +$form-feedback-margin-top: $form-text-margin-top !default; +$form-feedback-font-size: $small-font-size !default; +$form-feedback-valid-color: theme-color("success") !default; +$form-feedback-invalid-color: theme-color("danger") !default; + +// Dropdowns +// +// Dropdown menu container and contents. + +$dropdown-min-width: 10rem !default; +$dropdown-padding-y: 0.5rem !default; +$dropdown-spacer: 0.125rem !default; +$dropdown-bg: $white !default; +$dropdown-border-color: rgba($black, 0.15) !default; +$dropdown-border-radius: $border-radius !default; +$dropdown-border-width: $border-width !default; +$dropdown-divider-bg: $gray-200 !default; +$dropdown-box-shadow: 0 0.5rem 1rem rgba($black, 0.175) !default; + +$dropdown-link-color: $gray-900 !default; +$dropdown-link-hover-color: darken($gray-900, 5%) !default; +$dropdown-link-hover-bg: $primary !default; + +$dropdown-link-active-color: $component-active-color !default; +$dropdown-link-active-bg: $component-active-bg !default; + +$dropdown-link-disabled-color: $gray-600 !default; + +$dropdown-item-padding-y: 0.25rem !default; +$dropdown-item-padding-x: 1.5rem !default; + +$dropdown-header-color: $gray-600 !default; + +// Z-index master list +// +// Warning: Avoid customizing these values. They're used for a bird's eye view +// of components dependent on the z-axis and are designed to all work together. + +$zindex-dropdown: 1000 !default; +$zindex-sticky: 1020 !default; +$zindex-fixed: 1030 !default; +$zindex-modal-backdrop: 1040 !default; +$zindex-modal: 1050 !default; +$zindex-popover: 1060 !default; +$zindex-tooltip: 1070 !default; + +// Navs + +$nav-link-padding-y: 0.5rem !default; +$nav-link-padding-x: 1rem !default; +$nav-link-disabled-color: $gray-600 !default; + +$nav-tabs-border-color: $gray-300 !default; +$nav-tabs-border-width: $border-width !default; +$nav-tabs-border-radius: $border-radius !default; +$nav-tabs-link-hover-border-color: $gray-200 $gray-200 $nav-tabs-border-color !default; +$nav-tabs-link-active-color: $gray-700 !default; +$nav-tabs-link-active-bg: $body-bg !default; +$nav-tabs-link-active-border-color: $gray-300 $gray-300 $nav-tabs-link-active-bg !default; + +$nav-pills-border-radius: $border-radius !default; +$nav-pills-link-active-color: $component-active-color !default; +$nav-pills-link-active-bg: $component-active-bg !default; + +$nav-divider-color: $gray-200 !default; +$nav-divider-margin-y: math.div($spacer, 2) !default; + +// Navbar + +$navbar-padding-y: math.div($spacer, 2) !default; +$navbar-padding-x: $spacer !default; + +$navbar-nav-link-padding-x: 0.5rem !default; + +$navbar-brand-font-size: $font-size-lg !default; +// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link +$nav-link-height: ( + $font-size-base * $line-height-base + $nav-link-padding-y * 2 +) !default; +$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default; +$navbar-brand-padding-y: math.div( + $nav-link-height - $navbar-brand-height, + 2 +) !default; + +$navbar-toggler-padding-y: 0.25rem !default; +$navbar-toggler-padding-x: 0.75rem !default; +$navbar-toggler-font-size: $font-size-lg !default; +$navbar-toggler-border-radius: $btn-border-radius !default; + +$navbar-dark-color: rgba($white, 0.5) !default; +$navbar-dark-hover-color: rgba($white, 0.75) !default; +$navbar-dark-active-color: $white !default; +$navbar-dark-disabled-color: rgba($white, 0.25) !default; +$navbar-dark-toggler-icon-bg: str-replace( + url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='#{$navbar-dark-color}' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E"), + "#", + "%23" +) !default; +$navbar-dark-toggler-border-color: rgba($white, 0.1) !default; + +$navbar-light-color: $gray-200 !default; +$navbar-light-hover-color: rgba($black, 0.7) !default; +$navbar-light-active-color: rgba($black, 0.9) !default; +$navbar-light-disabled-color: rgba($black, 0.3) !default; +$navbar-light-toggler-icon-bg: str-replace( + url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='#{$navbar-light-color}' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E"), + "#", + "%23" +) !default; +$navbar-light-toggler-border-color: rgba($black, 0.1) !default; + +// Pagination + +$pagination-padding-y: 0.5rem !default; +$pagination-padding-x: 0.75rem !default; +$pagination-padding-y-sm: 0.25rem !default; +$pagination-padding-x-sm: 0.5rem !default; +$pagination-padding-y-lg: 0.75rem !default; +$pagination-padding-x-lg: 1.5rem !default; +$pagination-line-height: 1.25 !default; + +$pagination-color: $link-color !default; +$pagination-bg: $white !default; +$pagination-border-width: $border-width !default; +$pagination-border-color: $gray-300 !default; + +$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default; +$pagination-focus-outline: 0 !default; + +$pagination-hover-color: $link-hover-color !default; +$pagination-hover-bg: $gray-200 !default; +$pagination-hover-border-color: $gray-300 !default; + +$pagination-active-color: $component-active-color !default; +$pagination-active-bg: $component-active-bg !default; +$pagination-active-border-color: $pagination-active-bg !default; + +$pagination-disabled-color: $gray-600 !default; +$pagination-disabled-bg: $white !default; +$pagination-disabled-border-color: $gray-300 !default; + +// Jumbotron + +$jumbotron-padding: 2rem !default; +$jumbotron-bg: $gray-200 !default; + +// Cards + +$card-spacer-y: 0.75rem !default; +$card-spacer-x: 1.25rem !default; +$card-border-width: $border-width !default; +$card-border-radius: $border-radius !default; +$card-border-color: rgba($black, 0.125) !default; +$card-inner-border-radius: calc( + #{$card-border-radius} - #{$card-border-width} +) !default; +$card-cap-bg: rgba($black, 0.03) !default; +$card-bg: $white !default; + +$card-img-overlay-padding: 1.25rem !default; + +$card-group-margin: math.div($grid-gutter-width, 2) !default; +$card-deck-margin: $card-group-margin !default; + +$card-columns-count: 3 !default; +$card-columns-gap: 1.25rem !default; +$card-columns-margin: $card-spacer-y !default; + +// Tooltips + +$tooltip-font-size: ($font-size-sm * 0.875) !default; +$tooltip-max-width: 70ch !default; +$tooltip-color: $white !default; +$tooltip-bg: $secondary !default; +$tooltip-border-radius: $border-radius !default; +$tooltip-opacity: 1 !default; +$tooltip-padding-y: 0.3rem !default; +$tooltip-padding-x: 0.6rem !default; +$tooltip-margin: 0 !default; + +$tooltip-arrow-width: 0.8rem !default; +$tooltip-arrow-height: 0.4rem !default; +$tooltip-arrow-color: $secondary !default; + +// Popovers + +$popover-font-size: $font-size-sm !default; +$popover-bg: $white !default; +$popover-max-width: 276px !default; +$popover-border-width: $border-width !default; +$popover-border-color: rgba($black, 0.2) !default; +$popover-border-radius: $border-radius-lg !default; +$popover-box-shadow: 0 0.25rem 0.5rem rgba($black, 0.2) !default; + +$popover-header-bg: darken($popover-bg, 3%) !default; +$popover-header-color: $headings-color !default; +$popover-header-padding-y: 0.5rem !default; +$popover-header-padding-x: 0.75rem !default; + +$popover-body-color: $body-color !default; +$popover-body-padding-y: $popover-header-padding-y !default; +$popover-body-padding-x: $popover-header-padding-x !default; + +$popover-arrow-width: 1rem !default; +$popover-arrow-height: 0.5rem !default; +$popover-arrow-color: $popover-bg !default; + +$popover-arrow-outer-color: fade-in($popover-border-color, 0.05) !default; + +// Badges + +$badge-font-size: 75% !default; +$badge-font-weight: $font-weight-bold !default; +$badge-padding-y: 0.25em !default; +$badge-padding-x: 0.4em !default; +$badge-border-radius: $border-radius !default; + +$badge-pill-padding-x: 0.6em !default; +// Use a higher than normal value to ensure completely rounded edges when +// customizing padding or font-size on labels. +$badge-pill-border-radius: 10rem !default; + +// Modals + +// Padding applied to the modal body +$modal-inner-padding: 1rem !default; + +$modal-dialog-margin: 0.5rem !default; +$modal-dialog-margin-y-sm-up: 1.75rem !default; + +$modal-title-line-height: $line-height-base !default; + +$modal-content-bg: $white !default; +$modal-content-border-color: rgba($black, 0.2) !default; +$modal-content-border-width: $border-width !default; +$modal-content-border-radius: $border-radius-lg !default; +$modal-content-box-shadow-xs: 0 0.25rem 0.5rem rgba($black, 0.5) !default; +$modal-content-box-shadow-sm-up: 0 0.5rem 1rem rgba($black, 0.5) !default; + +$modal-backdrop-bg: $black !default; +$modal-backdrop-opacity: 0.5 !default; +$modal-header-border-color: $gray-200 !default; +$modal-footer-border-color: $modal-header-border-color !default; +$modal-header-border-width: $modal-content-border-width !default; +$modal-footer-border-width: $modal-header-border-width !default; +$modal-header-padding: 1rem !default; + +$modal-lg: 800px !default; +$modal-md: 500px !default; +$modal-sm: 300px !default; + +$modal-transition: transform 0.3s ease-out !default; + +// Alerts +// +// Define alert colors, border radius, and padding. + +$alert-padding-y: 0.75rem !default; +$alert-padding-x: 1.25rem !default; +$alert-margin-bottom: 1rem !default; +$alert-border-radius: $border-radius !default; +$alert-link-font-weight: $font-weight-bold !default; +$alert-border-width: $border-width !default; + +$alert-bg-level: -10 !default; +$alert-border-level: -9 !default; +$alert-color-level: 6 !default; + +// Progress bars + +$progress-height: 1rem !default; +$progress-font-size: ($font-size-base * 0.75) !default; +$progress-bg: $gray-200 !default; +$progress-border-radius: $border-radius !default; +$progress-box-shadow: inset 0 0.1rem 0.1rem rgba($black, 0.1) !default; +$progress-bar-color: $white !default; +$progress-bar-bg: $primary !default; +$progress-bar-animation-timing: 1s linear infinite !default; +$progress-bar-transition: width 0.6s ease !default; + +// List group + +$list-group-bg: $white !default; +$list-group-border-color: rgba($black, 0.125) !default; +$list-group-border-width: $border-width !default; +$list-group-border-radius: $border-radius !default; + +$list-group-item-padding-y: 0.75rem !default; +$list-group-item-padding-x: 1.25rem !default; + +$list-group-hover-bg: $gray-100 !default; +$list-group-active-color: $component-active-color !default; +$list-group-active-bg: $component-active-bg !default; +$list-group-active-border-color: $list-group-active-bg !default; + +$list-group-disabled-color: $gray-600 !default; +$list-group-disabled-bg: $list-group-bg !default; + +$list-group-action-color: $gray-700 !default; +$list-group-action-hover-color: $list-group-action-color !default; + +$list-group-action-active-color: $body-color !default; +$list-group-action-active-bg: $gray-200 !default; + +// Image thumbnails + +$thumbnail-padding: 0.25rem !default; +$thumbnail-bg: $body-bg !default; +$thumbnail-border-width: $border-width !default; +$thumbnail-border-color: $gray-300 !default; +$thumbnail-border-radius: $border-radius !default; +$thumbnail-box-shadow: 0 1px 2px rgba($black, 0.075) !default; + +// Figures + +$figure-caption-font-size: 90% !default; +$figure-caption-color: $gray-600 !default; + +// Breadcrumbs + +$breadcrumb-padding-y: 0.75rem !default; +$breadcrumb-padding-x: 1rem !default; +$breadcrumb-item-padding: 0.5rem !default; + +$breadcrumb-margin-bottom: 1rem !default; + +$breadcrumb-bg: $gray-200 !default; +$breadcrumb-divider-color: $gray-600 !default; +$breadcrumb-active-color: $gray-600 !default; +$breadcrumb-divider: quote("/") !default; + +$breadcrumb-border-radius: $border-radius !default; + +// Carousel + +$carousel-control-color: $white !default; +$carousel-control-width: 15% !default; +$carousel-control-opacity: 0.5 !default; + +$carousel-indicator-width: 30px !default; +$carousel-indicator-height: 3px !default; +$carousel-indicator-spacer: 3px !default; +$carousel-indicator-active-bg: $white !default; + +$carousel-caption-width: 70% !default; +$carousel-caption-color: $white !default; + +$carousel-control-icon-width: 20px !default; + +$carousel-control-prev-icon-bg: str-replace( + url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E"), + "#", + "%23" +) !default; +$carousel-control-next-icon-bg: str-replace( + url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E"), + "#", + "%23" +) !default; + +$carousel-transition: transform 0.6s ease !default; // Define transform transition first if using multiple transitions (e.g., `transform 2s ease, opacity .5s ease-out`) + +// Close + +$close-font-size: $font-size-base * 1.5 !default; +$close-font-weight: $font-weight-bold !default; +$close-color: $black !default; +$close-text-shadow: 0 1px 0 $white !default; + +// Code + +$code-font-size: 87.5% !default; +$code-color: $pink !default; + +$kbd-padding-y: 0.2rem !default; +$kbd-padding-x: 0.4rem !default; +$kbd-font-size: $code-font-size !default; +$kbd-color: $white !default; +$kbd-bg: $gray-900 !default; + +$pre-color: $gray-900 !default; +$pre-scrollable-max-height: 340px !default; + +// Printing +$print-page-size: a3 !default; +$print-body-min-width: map-get($grid-breakpoints, "lg") !default; diff --git a/frontend-v2/src/stylesheets/theme/_callisto_variables.scss b/frontend-v2/src/stylesheets/theme/_callisto_variables.scss new file mode 100644 index 0000000..60bfc0a --- /dev/null +++ b/frontend-v2/src/stylesheets/theme/_callisto_variables.scss @@ -0,0 +1,3 @@ +$primary: #34c88a; +$secondary: #163f59; +$tertiary: #466d85; diff --git a/frontend-v2/src/stylesheets/theme/_dai_variables-non-critical.scss b/frontend-v2/src/stylesheets/theme/_dai_variables-non-critical.scss new file mode 100644 index 0000000..148abf8 --- /dev/null +++ b/frontend-v2/src/stylesheets/theme/_dai_variables-non-critical.scss @@ -0,0 +1,7 @@ +// general +$primary: #17314f; +$secondary: #15bba6; +$tertiary: #93d7ff; +$additional-font: #fff; + +$btn-line-color: $secondary; // button border and font color && hover bg color diff --git a/frontend-v2/src/stylesheets/theme/_dai_variables.scss b/frontend-v2/src/stylesheets/theme/_dai_variables.scss new file mode 100644 index 0000000..c7da120 --- /dev/null +++ b/frontend-v2/src/stylesheets/theme/_dai_variables.scss @@ -0,0 +1,160 @@ +// general +$primary: #17314f; +$secondary: #15bba6; +$tertiary: #93d7ff; +$additional-font: #fff; + +// footer +$footer-background-color: $primary; +$footer-title-color: #fff; +$footer-text-color: #96bde8; +$footer-item-disc-color: $secondary; +.footer-logo { + filter: brightness(0) invert(1); +} + +// dashboard +$dashboard-line-color-price: $tertiary; // price left border + +$dashboard-line-color-market: $secondary; + +$dashboard-banner-chart-legend-label-color: $footer-text-color; +$dashboard-stats-item-label-color: $footer-text-color; +$dashboard-banner-chart-legend-value-color: #fff; // chart labels +$dashboard-stats-item-value-color: #fff; // stat values + +$dashboard-stats-item-border-color: $secondary; // stat border + +$dashboard-banner-gradient-start: $primary; // gradient begin + +$dashboard-banner-gradient-end: lighten($primary, 5); // gradient end + +$dashboard-banner-network-plain-container-background-color: #20446e; // stats bg + +// navigation +.navbar { + box-shadow: 0px 0px 30px 0px rgba(21, 53, 80, 0.12); +} // header shadow + +// form +$form-control-border-color-active: $secondary; + +// buttons +$btn-line-bg: #fff; // button bg +$btn-line-color: $secondary; // button border and font color && hover bg color +$btn-copy-color: $secondary; // btn copy +$btn-qr-color: $secondary; // btn qr-code +$btn-address-card-icon-color: $secondary; // btn address color +$btn-contract-color: $secondary; + +//links & tile +$tile-body-a-color: $secondary; +$tile-type-block-color: $secondary; +$tile-type-progress-bar-color: $secondary; +.tile a:hover, +a.tile-title { + color: $secondary !important; +} +.card-body { + a:not(.dropdown-item):not(.button):not([data-test="address_hash_link"]):not( + .alert-link + ):not([data-test="token_link"]):not(#dropdown-tokens):not(.btn-line):not( + .page-link + ) { + color: $secondary; + + &:hover { + color: $secondary; + } + } +} + +// card +$card-background-1: $secondary; +$card-tab-active: $secondary; + +.layout-container { + .dashboard-banner-container { + background-image: linear-gradient( + to bottom, + $dashboard-banner-gradient-start, + $dashboard-banner-gradient-end + ); + } +} + +// Badges +$badge-neutral-color: #20446e; +$badge-neutral-background-color: rgba(#20446e, 0.1); +$api-text-monospace-color: #20446e; + +// Staking +$stakes-btn-remove-pool-color: $secondary; +$stakes-dashboard-copy-icon-color: $secondary; +$btn-full-primary-bg: $secondary; +$stakes-address-color: $secondary; +$stakes-control-color: $secondary; +$stakes-link-color: $secondary; +$progress-from-to-progress-background: $secondary; +$stakes-stats-item-border-color: rgba(#fff, 0.5); +$check-color: $secondary; +$modal-status-graph-success: $secondary; +$stakes-progress-graph-color: $secondary; + +// Dark theme +$dark-primary: #15bba6; +$dark-secondary: #93d7ff; +$dark-primary-alternate: #15bba6; +$dark-tertiary: #5a77ff; + +.dark-theme-applied .tile .tile-body a, +.dark-theme-applied .tile a:hover, +.dark-theme-applied .tile span[data-address-hash], +.dark-theme-applied .tile a[data-test="token_link"] { + color: $dark-tertiary !important; +} + +.dark-theme-applied .btn-line { + background-color: transparent !important; + border-color: $dark-tertiary !important; + color: $dark-tertiary !important; + + &[disabled] { + &, + &:hover { + background-color: transparent !important; + border-color: $dark-tertiary !important; + color: $dark-tertiary !important; + } + } +} + +.dark-theme-applied .btn-line:hover { + color: $additional-font !important; +} + +.dark-theme-applied .card-body { + a:not(.dropdown-item):not(.button):not([data-test="address_hash_link"]):not( + .alert-link + ):not([data-test="token_link"]):not(#dropdown-tokens):not(.btn-line):not( + .page-link + ) { + color: $dark-tertiary; + + &:hover { + color: $dark-tertiary; + } + } +} + +.dark-theme-applied .dashboard-banner-chart-legend { + .dashboard-banner-chart-legend-item { + &:nth-child(1)::before { + background-color: $dashboard-line-color-price; + } + + &:nth-child(2)::before { + background-color: $dashboard-line-color-market; + } + } +} diff --git a/frontend-v2/src/stylesheets/theme/_dark-theme.scss b/frontend-v2/src/stylesheets/theme/_dark-theme.scss new file mode 100644 index 0000000..13ea1af --- /dev/null +++ b/frontend-v2/src/stylesheets/theme/_dark-theme.scss @@ -0,0 +1,1274 @@ +$body-dark: #111827; // body background +$dark-bg: rgba(0, 0, 0, 0.3); // hero shade + +$dark-light-bg: #1d2942; // pills bg shade, banner + +$dark-light: #28395c; // tile light top share + +$labels-dark: #fff; // header nav, labels +$dark-stakes-banned-background: #28395c; + +// Switcher +.dark-mode-changer { + display: inline-flex; + align-items: center; + justify-content: center; + width: 36px; + height: 36px; + background: transparent; + border: none; + cursor: pointer; + margin-right: 5px; + outline: none !important; + box-shadow: none !important; + transition: 0.2s ease-in; + &:hover { + opacity: 0.8; + } + svg path { + fill: #828ba0; + } + &--dark { + svg path { + fill: $dark-primary; + } + } +} + +.dark-theme-applied body { + color: #fff; + background-color: $body-dark; + + // navbar + .navbar.navbar-primary { + background-color: $dark-light-bg; + .input-group-text { + &.border { + background-color: $dark-light-bg; + } + } + } + .navbar.navbar-primary .navbar-nav .nav-link { + color: $labels-dark; + .nav-link-icon { + svg path { + fill: $labels-dark; + } + } + &.active, + &:hover { + .nav-link-icon { + svg path { + fill: $dark-primary; + } + } + &:before { + background-color: $dark-primary; + } + } + } + .navbar.navbar-primary .form-control { + background-color: $dark-bg; + border-color: $dark-bg; + color: #fff; + &::placeholder { + color: $labels-dark; + } + } + .navbar.navbar-primary .navbar-toggler .navbar-toggler-icon { + filter: invert(1); + } + + // footer + .footer { + background: $dark-light-bg; + color: $labels-dark; + } + .footer-social-icon, + .footer-link { + color: $labels-dark; + } + .footer-social-icon:hover, + .footer-link:hover { + color: #fff; + } + .footer-list ul li::before { + background-color: $dark-secondary; + } + + // hero stats + + .layout-container .dashboard-banner-container { + background-image: none; + background-color: $dark-bg; + } + .dashboard-banner-network-plain-container, + .dashboard-banner-network-plain-container::after { + background-color: $dark-light-bg; + } + .dashboard-banner-network-stats-label, + .dashboard-banner-chart-legend .dashboard-banner-chart-legend-label { + color: $labels-dark; + } + .dashboard-banner-chart-legend + .dashboard-banner-chart-legend-item:nth-child(1)::before { + background-color: $dark-primary; + } + .dashboard-banner-network-stats-item::before { + background-color: $dark-secondary; + } + .dashboard-banner-chart-legend + .dashboard-banner-chart-legend-item:nth-child(2)::before { + background-color: $dark-secondary; + } + + // main container, layout, cards + .layout-container main { + background-color: $body-dark; + } + + .card { + background-color: $dark-light-bg; + box-shadow: 0 0 30px 0 rgba(23, 24, 41, 0.5); + } + + .card-header { + border-bottom-color: darken($labels-dark, 30); + } + + .address-detail-hash-title { + color: #fff; + } + + .card-tabs { + border-bottom-color: darken($labels-dark, 30); + } + + .card-tab { + background-color: transparent; + &:hover:not(.active) { + background-color: rgba($dark-primary, 0.15); + color: $dark-primary; + } + &.active { + background-color: $dark-primary-alternate; + color: #fff; + } + } + + .card-background-1 { + background-color: $dark-primary-alternate; + } + + // Components + a { + color: $dark-primary; + } + + .tile { + border-top-color: $dark-light; + border-bottom-color: $dark-light; + border-right-color: $dark-light; + background-color: $dark-light; + color: $labels-dark; + &:not([class^="tile tile-type"]) { + border-left-color: $dark-light; + } + &.tile-type-coin-balance { + border-left-color: $dark-light; + } + .tile-title { + color: #fff; + } + .tile-transaction-type-block { + background-color: transparent; + } + } + .tile-bottom-contents { + background-color: $dark-bg; + } + a.tile-title { + color: #fff !important; + } + .tile.tile-type-block .tile-transaction-type-block a { + color: #fff; + } + .fade-up-blocks-chain .tile-type-block-animation { + background-color: $dark-light; + border-top-color: $dark-light; + border-right-color: $dark-light; + border-bottom-color: $dark-light; + } + .fade-up-blocks-chain .tile-type-block-animation:after { + background-color: $dark-light; + } + .cube-animation-title { + color: $labels-dark; + } + .tile .tile-body a, + .tile a:hover, + .tile span[data-address-hash], + .tile a[data-test="token_link"] { + color: $dark-primary; + } + .fade-up-blocks-chain .tile-type-block-animation .tile-type-line-up { + background-color: $dark-primary; + } + .tile.tile-type-block { + border-left-color: $dark-primary; + } + .tile.tile-type-block .tile-status-label { + color: $dark-primary; + } + .tile.tile-type-block .tile-transaction-type-block { + border-right-color: $dark-primary; + border-top-color: $dark-primary; + border-bottom-color: $dark-primary; + } + .tile .progress { + background-color: rgba(#fff, 0.2); + } + .tile .progress .progress-bar { + background-color: $dark-primary; + } + .tile .tile-title-lg:not([data-balance-change-sign]) { + color: $dark-primary; + } + + // btns + + .btn-line { + background-color: transparent; + border-color: $dark-primary; + color: $dark-primary; + &:hover { + border-color: $dark-primary; + background-color: $dark-primary; + color: #fff; + } + } + + .btn-copy-icon, + .btn-qr-icon, + .btn-address-card-icon .btn-contract-icon { + border-color: $dark-primary; + path { + fill: $dark-primary; + } + &:hover { + background-color: $dark-primary; + path { + fill: #fff; + } + } + } + + // pagination + .pagination-container .pagination .page-link { + color: $labels-dark; + border-color: $dark-light; + background-color: $dark-light; + &:not(.no-hover):hover { + color: #fff; + background-color: $dark-primary; + path { + fill: #fff; + } + } + &[disabled] { + color: $labels-dark; + border-color: $dark-light; + background-color: $dark-light; + } + } + + // dropdown + .dropdown-menu { + background-color: $dark-light; + border-left-color: $dark-light; + border-right-color: $dark-light; + border-bottom-color: $dark-light; + } + + .dropdown-item { + color: #fff; + &:hover { + background-color: rgba(#fff, 0.1); + } + } + .dropdown-item.active { + background-color: $dark-primary; + } + .btn-dropdown-line { + background-color: $dark-light; + border-color: $dark-light; + color: $labels-dark; + } + + // table + .stakes-table-head, + .stakes-table-th { + background-color: $dark-light; + color: $labels-dark; + } + + .stakes-table-body { + .refresh-informer { + a { + color: inherit; + } + } + } + + .stakes-td { + border-bottom-color: darken($labels-dark, 30); + } + + .stakes-tr-banned { + .stakes-td { + background-color: $dark-stakes-banned-background; + border-top: 1px solid $stakes-banned-color; + border-bottom-color: $stakes-banned-color; + + .stakes-td-link-style { + color: $stakes-banned-color; + } + } + } + + .modal-validator-alert { + background-color: $dark-stakes-banned-background; + border-top: 1px solid $stakes-banned-color; + border-bottom-color: $stakes-banned-color; + } + + .table th, + .table td { + border-top-color: darken($labels-dark, 30); + } + hr { + border-top-color: darken($labels-dark, 30); + } + + .i-tooltip { + .i-tooltip-circle { + fill: $labels-dark; + } + + .i-tooltip-info { + fill: $dark-light-bg; + } + + &:hover { + .i-tooltip-circle { + fill: $dark-primary; + } + + .i-tooltip-info { + fill: #fff; + } + } + } + + // api's + .api-anchors-list { + background-color: $dark-light; + } + .api-doc-list-item { + border-bottom-color: darken($labels-dark, 30); + } + .card-subtitle, + .api-anchors-list-item-title, + .api-doc-list-item-title { + color: #fff; + } + .api-text-monospace { + color: $dark-primary; + } + .api-text-monospace-background { + background-color: rgba($dark-primary, 0.15); + } + .badge.badge-neutral { + background-color: rgba($dark-primary, 0.15); + color: $dark-primary; + } + + // download csv button + .download-all-transactions .download-all-transactions-link svg path { + fill: $dark-primary; + } + + //tooltips + .tooltip .arrow:before { + border-top-color: $dark-primary; + border-bottom-color: $dark-primary; + } + .tooltip > .tooltip-inner { + background-color: $dark-primary; + } + + .tooltip-pale-color.bs-tooltip-top .arrow::before, + .tooltip-pale-color.bs-tooltip-auto[x-placement^="top"] .arrow::before { + border-top-color: rgba(#fff, 0.5) !important; + } + + .tooltip-pale-color.bs-tooltip-right .arrow::before, + .tooltip-pale-color.bs-tooltip-auto[x-placement^="right"] .arrow::before { + border-right-color: rgba(#fff, 0.5) !important; + } + + .tooltip-pale-color.bs-tooltip-bottom .arrow::before, + .tooltip-pale-color.bs-tooltip-auto[x-placement^="bottom"] .arrow::before { + border-bottom-color: rgba(#fff, 0.5) !important; + } + + .tooltip-pale-color.bs-tooltip-left .arrow::before, + .tooltip-pale-color.bs-tooltip-auto[x-placement^="left"] .arrow::before { + border-left-color: rgba(#fff, 0.5) !important; + } + + //network select + .network-selector-overlay { + background-color: rgba($dark-bg, 0.9); + } + .network-selector { + background-color: $dark-light-bg; + } + .network-selector-title { + color: #fff; + } + .network-selector-text { + color: $labels-dark; + } + .network-selector-close path { + fill: #fff; + } + .network-selector-search-container { + background-color: $dark-light; + } + .network-selector-search-container path { + fill: $labels-dark; + } + .network-selector-search-input { + color: #fff !important; + &::placeholder { + color: $labels-dark; + } + } + .network-selector-tab { + color: $labels-dark; + &:hover, + &.active { + color: #fff; + } + &.active { + &:after { + background-color: $dark-primary; + } + } + } + .network-selector-item, + .network-selector-tabs-container { + border-bottom-color: darken($labels-dark, 30); + } + .network-selector-item-title { + color: #fff; + } + .network-selector-item-type { + color: $labels-dark; + } + .radio .radio-icon { + border-color: $labels-dark; + } + .network-selector-item-url:hover .network-selector-item-type { + color: #fff; + } + + //coin dropdown + .token-balance-dropdown.dropdown-menu { + border-color: $dark-light !important; + box-shadow: 0 0 30px 0 rgba(23, 24, 41, 0.5) !important; + } + .token-balance-dropdown .dropdown-search-icon path { + fill: $labels-dark; + } + .token-balance-dropdown .dropdown-search-field { + background-color: $dark-light; + border-color: $dark-light; + color: #fff; + &::placeholder { + color: $labels-dark; + } + } + .token-balance-dropdown[aria-labelledby="dropdown-tokens"] + .dropdown-items + .dropdown-item:hover { + color: #fff !important; + } + .dropdown-header { + color: $labels-dark; + } + .border-bottom { + border-bottom-color: darken($labels-dark, 30) !important; + } + + // coin balance history chart + .chartjs-render-monitor[data-chart="coinBalanceHistoryChart"] { + filter: brightness(0) invert(1) !important; + } + + // logs search + .logs-search-input, + .logs-search-btn, + .logs-search-btn-cancel { + background-color: $dark-light; + border-color: $dark-light; + color: #fff; + } + + .logs-search-btn { + color: $labels-dark; + } + + .logs-search-btn { + &:hover { + background-color: $dark-primary; + color: #fff; + } + } + + .logs-search-input { + &::placeholder { + color: $labels-dark; + } + } + + // code + pre { + color: #fff; + } + + // info allert + .alert-info { + color: $labels-dark; + background-color: $dark-light; + border-color: $dark-light; + } + + // dark text + .text-dark { + color: #fff !important; + } + + // Contract Verification + .new-smart-contract-container { + background-color: $dark-light-bg; + background-image: linear-gradient( + to bottom right, + $dark-light 100%, + $dark-light 100% + ); + @media (max-width: 991.98px) { + background-image: none; + } + } + .smart-contract-form-group-inner-wrapper .smart-contract-form-group-tooltip { + color: $labels-dark; + } + .smart-contract-title { + color: #fff; + } + .smart-contract-form-group-inner-wrapper > label { + color: $labels-dark; + } + .smart-contract-form-buttons { + border-top-color: darken($labels-dark, 30); + .btn-no-border { + background-color: $dark-light; + border-color: $dark-light; + color: #fff; + &:hover { + background-color: $dark-primary; + color: #fff; + } + } + } + .add-contract-libraries-wrapper { + border-top-color: darken($labels-dark, 30); + } + + .token-tile-view-more:before, + .token-tile-view-more:after { + border-top-color: darken($labels-dark, 30); + border-bottom-color: darken($labels-dark, 30); + } + + // Form Controlls + .form-control { + background-color: $dark-light; + border-color: $dark-light; + color: #fff; + transition: border-color 0.15s ease-in-out; + + &[readonly] { + background-color: $dark-light !important; + } + + &::placeholder { + color: $labels-dark; + } + &:focus { + background-color: $dark-light; + border-color: $dark-primary; + color: #fff; + } + + &:-webkit-autofill, + &:-webkit-autofill:hover, + &:-webkit-autofill:focus { + caret-color: #fff; + -webkit-text-fill-color: #fff; + -webkit-box-shadow: 0 0 0px 1000px $dark-light inset; + } + } + + .input-group:not(.input-status-error) + .form-control:focus + ~ .input-group-prepend.last { + .input-group-text { + border-color: $dark-primary; + } + } + + .input-group-prepend.last { + .input-group-text { + background: $dark-light; + border-color: $dark-light; + color: $labels-dark; + } + } + + .radio-big .radio-icon { + border-color: $labels-dark; + } + .radio-big input[type="radio"]:checked + .radio-icon { + border-color: $dark-primary; + } + .radio-big input[type="radio"]:checked + .radio-icon::before { + background: $dark-primary; + } + .radio-big .radio-text { + color: #fff; + } + + .check input[type="checkbox"]:checked + .check-icon::before { + background: $dark-primary; + } + + // Content loading placeholders + .tile-loader, + .table-content-loader { + background-color: $dark-bg !important; + &:before { + background: linear-gradient( + to right, + $dark-bg 2%, + lighten($dark-bg, 3) 18%, + $dark-bg 33% + ); + } + } + + // Verify other explorers + .verify-other-explorers-elem { + border-color: darken($labels-dark, 30); + .exp-logo { + border-right-color: darken($labels-dark, 30); + } + .exp-content { + h3 { + color: #fff; + } + div { + color: $labels-dark; + } + } + } + .verify-other-explorers-more { + border-color: $dark-primary; + svg path { + fill: $dark-primary; + } + &:hover { + background-color: $dark-primary; + svg path { + fill: #fff; + } + } + } + .verify-other-explorers-elem { + &:hover { + text-decoration: none; + color: #fff; + .exp-content { + h3, + div { + color: #fff; + } + } + } + } + + #explorersModal { + .modal-title { + color: #fff; + } + + .text-muted { + color: $labels-dark; + } + + .modal-footer { + border-top-color: darken($labels-dark, 30); + } + + .modal-content { + background-color: $dark-light-bg; + + .btn-primary { + background-color: $dark-primary; + border-color: $dark-primary; + &:hover { + background-color: $dark-primary; + border-color: $dark-primary; + } + } + } + + .verify-other-explorers-cell { + .exp-logo { + color: #fff; + } + } + + .close { + color: #fff; + } + } + + #qrModal { + .close { + color: #fff; + } + } + + // API docs dropdown content + .api-doc-parameters-list-item-description, + .api-doc-parameters-list-item-title, + .api-doc-parameters-list-title, + .api-doc-list-item-controls-view-more { + color: #fff; + } + + .api-doc-parameters-list { + border-bottom-color: darken($labels-dark, 30); + } + .api-doc-parameters-container { + border-top-color: darken($labels-dark, 30); + } + .api-doc-tab { + color: $dark-primary !important; + &.active { + border-bottom-color: $dark-primary; + } + } + + // Common Buttons + .btn-secondary, + .button-secondary { + background-color: transparent; + border-color: $dark-primary; + color: $dark-primary; + &:hover { + background-color: $dark-primary; + border-color: $dark-primary; + color: #fff; + } + } + + // Decoded data + .table.thead-light.table-bordered { + color: #fff !important; + } + .table-bordered, + .table-bordered td, + .table-bordered th { + border-color: darken($labels-dark, 30); + } + .dark-theme-applied .table td, + .dark-theme-applied .table th, + .dark-theme-applied hr { + border-top-color: darken($labels-dark, 30); + } + .btn-copy-ico svg path { + fill: #fff; + } + + // pre + .pre-scrollable.line-numbers, + .hljs { + background: $dark-light; + color: #fff; + } + + .hljs-comment { + color: $labels-dark; + } + + .hljs-title, + .hljs-section { + color: #ff2294; + } + + .hljs-type, + .hljs-string, + .hljs-number, + .hljs-selector-id, + .hljs-selector-class, + .hljs-quote, + .hljs-template-tag, + .hljs-deletion { + color: #ff2294; + } + + .hljs-literal, + .hljs-built_in, + .hljs-bullet, + .hljs-code, + .hljs-addition { + color: #20dd94; + } + + .line-numbers [data-line-number]:before { + color: #3f436b !important; + border-right-color: #3f436b !important; + } + + // 'text dark' label + .text-dark { + color: #fff; + } + + // validator info + #validatorModal { + .modal-title { + color: #fff; + } + + .text-muted { + color: $labels-dark; + } + + .modal-footer { + border-top-color: darken($labels-dark, 30); + } + + .modal-content { + background-color: $dark-light-bg; + + .btn-primary { + background-color: $dark-primary; + border-color: $dark-primary; + &:hover { + background-color: $dark-primary; + border-color: $dark-primary; + } + } + } + + .close { + color: #fff; + } + } + + .modal-status { + .modal-status-title { + color: #fff; + } + + .modal-status-button-wrapper .btn-line { + border-color: $dark-primary-alternate; + color: $dark-primary-alternate; + + &:hover { + background-color: $dark-primary-alternate; + color: $additional-font; + } + } + } + + .modal-dialog { + .modal-title { + color: #fff; + } + .modal-content { + background-color: $dark-light-bg; + } + + .modal-bottom-disclaimer { + background-color: $dark-light; + + color: $labels-dark; + } + + .modal-bottom-disclaimer-graphic svg { + fill: #fff; + } + + .modal-header { + .modal-validator-info-item-title { + color: $labels-dark; + } + + .modal-validator-info-item-value { + color: #fff; + } + } + + .modal-validator-info-content { + background-color: $dark-light; + + .modal-validator-info-item-value { + color: #fff; + } + } + } + + //stakes + .modal-stake-right { + .stakes-progress { + border-left-color: darken($labels-dark, 30); + } + } + + .modal-stake-left { + border-right-color: darken($labels-dark, 30); + } + + .stakes-progress-data-progress, + .stakes-progress-info-value { + color: #fff; + } + + .stakes-empty-content-text { + color: $labels-dark; + } + + .stakes-empty-content-pic-svg-path { + fill: $dark-primary; + } + + .stakes-address-container .stakes-address-active { + color: $dark-primary; + } + + .stakes-td-link-style { + color: $dark-primary; + } + + .stakes-control-icon path { + fill: $dark-primary; + } + + .progress-from-to-value { + color: #fff; + } + + .progress-from-to-background { + background-color: $dark-bg; + } + + .check-tooltip { + .check-tooltip-circle { + fill: $labels-dark; + } + + .check-tooltip-check { + fill: $dark-light-bg; + } + + &:hover { + .check-tooltip-circle { + fill: $dark-primary; + } + } + } + + .me-tooltip { + background-color: $labels-dark; + color: $dark-light-bg; + + &:hover { + background-color: $dark-primary; + } + } + + // alerts + .alert-link { + color: $labels-dark; + } + + .alert-danger { + background-color: $dark-light; + border-color: $dark-light; + .alert-link { + color: $alert-danger-color; + } + } + + .tile .alert { + background: rgba(#000, 0.1); + } + + // primary buttons + .btn-full-primary, + .button-primary { + background: $dark-primary; + border-color: $dark-primary; + color: #fff; + &:hover { + background: darken($dark-primary, 6); + border-color: darken($dark-primary, 6); + color: #fff; + } + + &[disabled] { + &, + &:hover { + background-color: $dark-primary; + border-color: $dark-primary; + } + } + } + + .logo-text { + color: #fff; + } + + .bs-label.omni { + background: #6ca1e2; + } + + .bs-label.validator, + .bs-label.destination-eth { + background-color: $labels-dark; + } + + .dropdown-item { + .external-link-icon { + path { + fill: #fff; + } + } + + & { + &.active, + &:hover, + &:focus { + .external-link-icon { + path { + fill: #fff; + } + } + } + } + } + + .tooltip-inversed-color { + .tooltip-inner { + background-color: $btn-line-color !important; + color: #fff !important; + } + } + + .tooltip-inversed-color.bs-tooltip-top .arrow::before, + .tooltip-inversed-color.bs-tooltip-auto[x-placement^="top"] .arrow::before { + border-top-color: $btn-line-color !important; + } + + .tooltip-inversed-color.bs-tooltip-right .arrow::before, + .tooltip-inversed-color.bs-tooltip-auto[x-placement^="right"] .arrow::before { + border-right-color: $btn-line-color !important; + } + + .tooltip-inversed-color.bs-tooltip-bottom .arrow::before, + .tooltip-inversed-color.bs-tooltip-auto[x-placement^="bottom"] + .arrow::before { + border-bottom-color: $btn-line-color !important; + } + + .tooltip-inversed-color.bs-tooltip-left .arrow::before, + .tooltip-inversed-color.bs-tooltip-auto[x-placement^="left"] .arrow::before { + border-left-color: $btn-line-color !important; + } + + .stakes-top { + background-color: $dark-bg; + background-image: none; + } + + .contract-plus-btn { + color: $dark-primary; + } + .custom-power-input { + border-color: $dark-primary; + } + .stakes-btn-close-alert { + path { + fill: #fff; + } + } + .main-search-autocomplete { + background-color: $dark-bg !important; + color: #fff !important; + } + .autocomplete-category { + color: #fff !important; + } + ul[id^="autoComplete_list_"] { + background-color: $dark-light-bg !important; + } + li[id^="autoComplete_result_"] { + background-color: $dark-light-bg !important; + color: #fff !important; + + &:hover { + background-color: $dark-primary !important; + } + &[aria-selected="true"] { + background-color: $dark-primary !important; + } + } +} + +.navbar-dark .navbar-toggler { + color: rgba(255, 255, 255, 0.5); + border: none; +} + +.dark-theme-applied .dropdown-item { + background-color: $dark-light !important; + color: #fff !important; +} + +.dark-theme-applied .dropdown-item.active:not(.header), +.dark-theme-applied .dropdown-item:not(.header):hover, +.dark-theme-applied .dropdown-item:not(.header):focus { + background-image: none; + width: 100%; + background-color: #3f426c !important; +} + +@media (max-width: 991.98px) { + .dark-theme-applied .navbar.navbar-primary .navbar-nav .nav-link:hover, + .dark-theme-applied .navbar.navbar-primary .navbar-nav .nav-link.activeLink, + .dark-theme-applied .navbar.navbar-primary .navbar-nav .nav-link:focus { + background-image: none; + width: 100%; + background-color: #35335d !important; + color: white; + border: none; + } + .dark-theme-applied .dropdown-item:hover:before { + content: "|"; + height: 50px; + width: 50%; + opacity: 1; + background: none; + right: 17%; + color: $dark-primary; + position: relative; + } + .dark-theme-applied + .navbar.navbar-primary + .navbar-nav + .nav-link:hover:before { + content: "|"; + height: 50px; + width: 50%; + opacity: 1; + background: none; + left: 24%; + top: 14%; + color: $dark-primary; + } +} +.dark-theme-applied .confirmations-label:after { + border-left: 0.9rem solid $dark-light-bg; +} + +.dark-theme-applied .i-tooltip-2:hover { + color: $labels-dark; +} + +.dark-theme-applied .btn-no-border-link-to-tems { + border-color: $dark-primary !important; + color: $dark-primary !important; +} + +.dark-theme-applied .bs-label { + display: inline-block; + padding: 0 5px; + background: #77838f; + color: #f5f6fa; + border-radius: 5px; + &.large { + font-size: 14px; + } + font-size: 12px; + padding: 5px; + line-height: normal; + + &.right { + margin-left: auto; + float: right; + } + &.omni { + background: #6ca1e2; + color: #fff; + } + &.destination-eth { + background: #253358; + color: #fff; + } + &.destination-bsc { + background: #e7b941; + color: #fff; + } + &.destination-rinkeby { + background: #153550; + color: #fff; + } + &.bridged { + background: #70aee3; + color: #fff; + } + &.validator { + background: $primary; + color: #fff; + } + &.secondary { + background: $secondary; + color: #fff; + } + &.method { + color: #1e2022; + } + &.from-dropdown { + margin-top: -3px; + } + &.success { + background: rgba(40, 167, 69, 0.2); + color: rgb(40, 167, 69); + } +} diff --git a/frontend-v2/src/stylesheets/theme/_ellaism_variables.scss b/frontend-v2/src/stylesheets/theme/_ellaism_variables.scss new file mode 100644 index 0000000..a9bed3d --- /dev/null +++ b/frontend-v2/src/stylesheets/theme/_ellaism_variables.scss @@ -0,0 +1,3 @@ +$primary: #4a4a4a; +$secondary: #01c85c; +$tertiary: #466d85; diff --git a/frontend-v2/src/stylesheets/theme/_ether1_variables-non-critical.scss b/frontend-v2/src/stylesheets/theme/_ether1_variables-non-critical.scss new file mode 100644 index 0000000..533d74f --- /dev/null +++ b/frontend-v2/src/stylesheets/theme/_ether1_variables-non-critical.scss @@ -0,0 +1,7 @@ +// general +$primary: #840032; +$secondary: #343434; +$tertiary: #7f7f7f; +$additional-font: #ff95db; + +$btn-line-color: #4b021e; // button border and font color && hover bg color diff --git a/frontend-v2/src/stylesheets/theme/_ether1_variables.scss b/frontend-v2/src/stylesheets/theme/_ether1_variables.scss new file mode 100644 index 0000000..a92376b --- /dev/null +++ b/frontend-v2/src/stylesheets/theme/_ether1_variables.scss @@ -0,0 +1,55 @@ +// general +$primary: #840032; +$secondary: #343434; +$tertiary: #7f7f7f; +$additional-font: #ff95db; + +// footer +$footer-background-color: $primary; +$footer-title-color: #fff; +$footer-text-color: #fff; +$footer-item-disc-color: $secondary; + +// dashboard +$dashboard-line-color-price: $tertiary; // price left border + +$dashboard-banner-chart-legend-value-color: $additional-font; // chart labels + +$dashboard-stats-item-value-color: $additional-font; // stat values + +$dashboard-stats-item-border-color: $secondary; // stat border + +$dashboard-banner-gradient-start: $primary; // gradient begin + +$dashboard-banner-gradient-end: lighten($primary, 5); // gradient end + +$dashboard-banner-network-plain-container-background-color: #4b021e; // stats bg + +// navigation +.navbar { + box-shadow: 0px 0px 30px 0px rgba(75, 2, 30, 0.12); +} // header shadow +$header-icon-border-color-hover: $tertiary; // top border on hover +$header-icon-color-hover: $tertiary; // nav icon on hover +.dropdown-item:hover, +.dropdown-item:focus { + background-color: $tertiary !important; +} // dropdown item on hover + +// buttons +$btn-line-bg: #fff; // button bg +$btn-line-color: #4b021e; // button border and font color && hover bg color +$btn-copy-color: #4b021e; // btn copy +$btn-qr-color: #4b021e; // btn qr-code +$btn-contract-color: #4b021e; +//links & tile +.tile a { + color: $tertiary !important; +} // links color for badges +.tile-type-block { + border-left: 4px solid #4b021e; +} // tab active bg + +// card +$card-background-1: $tertiary; +$card-tab-active: $tertiary; diff --git a/frontend-v2/src/stylesheets/theme/_ethercore_variables-non-critical.scss b/frontend-v2/src/stylesheets/theme/_ethercore_variables-non-critical.scss new file mode 100644 index 0000000..0584460 --- /dev/null +++ b/frontend-v2/src/stylesheets/theme/_ethercore_variables-non-critical.scss @@ -0,0 +1,7 @@ +// general +$primary: #3a6ea7; +$secondary: #558ac3; +$tertiary: #3a6ea7; +$additional-font: #bdbdff; + +$btn-line-color: $tertiary; // button border and font color && hover bg color diff --git a/frontend-v2/src/stylesheets/theme/_ethercore_variables.scss b/frontend-v2/src/stylesheets/theme/_ethercore_variables.scss new file mode 100644 index 0000000..1c711aa --- /dev/null +++ b/frontend-v2/src/stylesheets/theme/_ethercore_variables.scss @@ -0,0 +1,86 @@ +// general +$primary: #3a6ea7; +$secondary: #558ac3; +$tertiary: #3a6ea7; +$additional-font: #bdbdff; + +// footer +$footer-background-color: $primary; +$footer-title-color: #fff; +$footer-text-color: $additional-font; +$footer-item-disc-color: $tertiary; +$footer-social-icon-color: #3a6ea7; + +// dashboard +$dashboard-line-color-price: $secondary; +$dashboard-line-color-market: $tertiary; +$dashboard-banner-gradient-start: #7ba4d1; +$dashboard-banner-gradient-end: #3a6ea7; + +$dashboard-banner-chart-legend-label-color: $additional-font; +$dashboard-stats-item-label-color: $additional-font; +$dashboard-banner-chart-legend-value-color: #fff; // chart labels +$dashboard-stats-item-value-color: #fff; // stat values + +$dashboard-stats-item-border-color: $secondary; // stat border +$dashboard-banner-network-plain-container-background-color: #2e5884; // stats bg + +// navigation +$header-icon-border-color-hover: $tertiary; // top border on hover +$header-icon-color-hover: $tertiary; // nav icon on hover + +// buttons +$btn-line-bg: #fff; // button bg +$btn-line-color: $tertiary; // button border and font color && hover bg color +$btn-copy-color: $tertiary; // btn copy +$btn-qr-color: $tertiary; // btn qr-code +$btn-address-card-icon-color: $tertiary; // btn address color +$btn-contract-color: $tertiary; + +//links & tile +$tile-body-a-color: $tertiary; +$tile-type-block-color: $tertiary; +$tile-type-progress-bar-color: $tertiary; +a.tile-title { + color: $tertiary !important; +} + +// card +$card-background-1: $tertiary; +$card-tab-active: $tertiary; + +// ETC theme's idiosyncrasies +.layout-container { + .navbar { + box-shadow: 0 0 30px 0 rgba(21, 53, 80, 0.12); + } + + .dropdown-item:hover, + .dropdown-item.active, + .dropdown-item:focus { + background-color: rgba($tertiary, 0.1) !important; + color: $tertiary !important; + } + + .dashboard-banner-container { + background-image: linear-gradient( + to bottom, + $dashboard-banner-gradient-start, + $dashboard-banner-gradient-end + ); + } + + .footer-logo { + filter: brightness(0) invert(1); + } +} + +// Badges +$badge-neutral-color: $tertiary; +$badge-neutral-background-color: rgba($tertiary, 0.1); +$api-text-monospace-color: $tertiary; + +// Dark theme +$dark-primary: #8588ff; +$dark-secondary: #4ad7a7; +$dark-primary-alternate: #5b5ed8; diff --git a/frontend-v2/src/stylesheets/theme/_ethereum_classic_variables-non-critical.scss b/frontend-v2/src/stylesheets/theme/_ethereum_classic_variables-non-critical.scss new file mode 100644 index 0000000..4107ec0 --- /dev/null +++ b/frontend-v2/src/stylesheets/theme/_ethereum_classic_variables-non-critical.scss @@ -0,0 +1,7 @@ +// general +$primary: #1c1c3d; +$secondary: #4ad7a7; +$tertiary: #5959d8; +$additional-font: #bdbdff; + +$btn-line-color: $tertiary; // button border and font color && hover bg color diff --git a/frontend-v2/src/stylesheets/theme/_ethereum_classic_variables.scss b/frontend-v2/src/stylesheets/theme/_ethereum_classic_variables.scss new file mode 100644 index 0000000..6c4d314 --- /dev/null +++ b/frontend-v2/src/stylesheets/theme/_ethereum_classic_variables.scss @@ -0,0 +1,86 @@ +// general +$primary: #1c1c3d; +$secondary: #4ad7a7; +$tertiary: #5959d8; +$additional-font: #bdbdff; + +// footer +$footer-background-color: $primary; +$footer-title-color: #fff; +$footer-text-color: $additional-font; +$footer-item-disc-color: $tertiary; +$footer-social-icon-color: #5959d8; + +// dashboard +$dashboard-line-color-price: $secondary; +$dashboard-line-color-market: $tertiary; +$dashboard-banner-gradient-start: #1b1b39; +$dashboard-banner-gradient-end: #27275f; + +$dashboard-banner-chart-legend-label-color: $additional-font; +$dashboard-stats-item-label-color: $additional-font; +$dashboard-banner-chart-legend-value-color: #fff; // chart labels +$dashboard-stats-item-value-color: #fff; // stat values + +$dashboard-stats-item-border-color: $secondary; // stat border +$dashboard-banner-network-plain-container-background-color: #2d2d69; // stats bg + +// navigation +$header-icon-border-color-hover: $tertiary; // top border on hover +$header-icon-color-hover: $tertiary; // nav icon on hover + +// buttons +$btn-line-bg: #fff; // button bg +$btn-line-color: $tertiary; // button border and font color && hover bg color +$btn-copy-color: $tertiary; // btn copy +$btn-qr-color: $tertiary; // btn qr-code +$btn-address-card-icon-color: $tertiary; // btn address color +$btn-contract-color: $tertiary; + +//links & tile +$tile-body-a-color: $tertiary; +$tile-type-block-color: $tertiary; +$tile-type-progress-bar-color: $tertiary; +a.tile-title { + color: $tertiary !important; +} + +// card +$card-background-1: $tertiary; +$card-tab-active: $tertiary; + +// ETC theme's idiosyncrasies +.layout-container { + .navbar { + box-shadow: 0 0 30px 0 rgba(21, 53, 80, 0.12); + } + + .dropdown-item:hover, + .dropdown-item.active, + .dropdown-item:focus { + background-color: rgba($tertiary, 0.1) !important; + color: $tertiary !important; + } + + .dashboard-banner-container { + background-image: linear-gradient( + to bottom, + $dashboard-banner-gradient-start, + $dashboard-banner-gradient-end + ); + } + + .footer-logo { + filter: brightness(0) invert(1); + } +} + +// Badges +$badge-neutral-color: $tertiary; +$badge-neutral-background-color: rgba($tertiary, 0.1); +$api-text-monospace-color: $tertiary; + +// Dark theme +$dark-primary: #8588ff; +$dark-secondary: #4ad7a7; +$dark-primary-alternate: #5b5ed8; diff --git a/frontend-v2/src/stylesheets/theme/_ethereum_variables-non-critical.scss b/frontend-v2/src/stylesheets/theme/_ethereum_variables-non-critical.scss new file mode 100644 index 0000000..8414539 --- /dev/null +++ b/frontend-v2/src/stylesheets/theme/_ethereum_variables-non-critical.scss @@ -0,0 +1,7 @@ +// general +$primary: #153550; +$secondary: #49a2ee; +$tertiary: #4ad7a7; +$additional-font: #89cae6; + +$btn-line-color: $secondary; // button border and font color && hover bg color diff --git a/frontend-v2/src/stylesheets/theme/_ethereum_variables.scss b/frontend-v2/src/stylesheets/theme/_ethereum_variables.scss new file mode 100644 index 0000000..9c8bca7 --- /dev/null +++ b/frontend-v2/src/stylesheets/theme/_ethereum_variables.scss @@ -0,0 +1,81 @@ +// general +$primary: #153550; +$secondary: #49a2ee; +$tertiary: #4ad7a7; +$additional-font: #89cae6; + +// footer +$footer-background-color: $primary; +$footer-title-color: #fff; +$footer-text-color: #89cae6; +$footer-item-disc-color: $secondary; +.footer-social-icons .footer-social-icon { + color: $secondary; +} + +// dashboard +$dashboard-line-color-price: $tertiary; // price left border + +$dashboard-banner-chart-legend-label-color: #89cae6; +$dashboard-stats-item-label-color: #89cae6; +$dashboard-banner-chart-legend-value-color: #fff; // chart labels +$dashboard-stats-item-value-color: #fff; // stat values + +$dashboard-stats-item-border-color: $secondary; // stat border + +$dashboard-banner-gradient-start: $primary; // gradient begin + +$dashboard-banner-gradient-end: lighten($primary, 5); // gradient end + +$dashboard-banner-network-plain-container-background-color: #1c476c; // stats bg + +// navigation +.navbar { + box-shadow: 0px 0px 30px 0px rgba(21, 53, 80, 0.12); +} // header shadow + +// buttons +$btn-line-bg: #fff; // button bg +$btn-line-color: $secondary; // button border and font color && hover bg color +$btn-copy-color: $secondary; // btn copy +$btn-qr-color: $secondary; // btn qr-code +$btn-address-card-icon-color: $secondary; // btn address color +$btn-contract-color: $secondary; + +//links & tile +$tile-body-a-color: $secondary; +$tile-type-block-color: $secondary; +$tile-type-progress-bar-color: $secondary; +a.tile-title { + color: $secondary !important; +} + +// card +$card-background-1: $secondary; +$card-tab-active: $secondary; + +.layout-container { + .dashboard-banner-container { + background-image: linear-gradient( + to bottom, + $dashboard-banner-gradient-start, + $dashboard-banner-gradient-end + ); + } +} + +// Dark theme +$dark-primary: #49a2ee; +$dark-secondary: #4ad7a7; +$dark-primary-alternate: #49a2ee; + +.dark-theme-applied { + .dashboard-banner-chart-legend + .dashboard-banner-chart-legend-item:nth-child(1)::before { + background-color: $dark-primary !important; + } + .dashboard-banner-chart-legend + .dashboard-banner-chart-legend-item:nth-child(2)::before { + background-color: $dark-secondary !important; + } +} diff --git a/frontend-v2/src/stylesheets/theme/_expanse_variables.scss b/frontend-v2/src/stylesheets/theme/_expanse_variables.scss new file mode 100644 index 0000000..e1f0a7f --- /dev/null +++ b/frontend-v2/src/stylesheets/theme/_expanse_variables.scss @@ -0,0 +1,3 @@ +$primary: #1f4c55; +$secondary: #e08e64; +$tertiary: #333333; diff --git a/frontend-v2/src/stylesheets/theme/_fonts.scss b/frontend-v2/src/stylesheets/theme/_fonts.scss new file mode 100644 index 0000000..619472c --- /dev/null +++ b/frontend-v2/src/stylesheets/theme/_fonts.scss @@ -0,0 +1,2 @@ +@import url("https://fonts.googleapis.com/css?family=Nunito:200,300,400,600,700"); +@import url("https://fonts.googleapis.com/css?family=Roboto"); diff --git a/frontend-v2/src/stylesheets/theme/_gochain_variables.scss b/frontend-v2/src/stylesheets/theme/_gochain_variables.scss new file mode 100644 index 0000000..ebca5cc --- /dev/null +++ b/frontend-v2/src/stylesheets/theme/_gochain_variables.scss @@ -0,0 +1,3 @@ +$primary: #586a8f; +$secondary: #00bcd4; +$tertiary: #6f87b2; diff --git a/frontend-v2/src/stylesheets/theme/_goerli_variables-non-critical.scss b/frontend-v2/src/stylesheets/theme/_goerli_variables-non-critical.scss new file mode 100644 index 0000000..27b8a1a --- /dev/null +++ b/frontend-v2/src/stylesheets/theme/_goerli_variables-non-critical.scss @@ -0,0 +1,8 @@ +// general +$primary: #2b2b2b; +$secondary: #eac247; +$tertiary: #929292; +$additional-font: #ffffff; +$sub-accent-color: #a46f30; + +$btn-line-color: $sub-accent-color; // button border and font color && hover bg color diff --git a/frontend-v2/src/stylesheets/theme/_goerli_variables.scss b/frontend-v2/src/stylesheets/theme/_goerli_variables.scss new file mode 100644 index 0000000..abc588f --- /dev/null +++ b/frontend-v2/src/stylesheets/theme/_goerli_variables.scss @@ -0,0 +1,92 @@ +// general +$primary: #2b2b2b; +$secondary: #eac247; +$tertiary: #929292; +$additional-font: #ffffff; +$sub-accent-color: #a46f30; + +// footer +$footer-background-color: $primary; +$footer-title-color: #fff; +$footer-text-color: #7e7e7e; +$footer-item-disc-color: $secondary; +.footer-logo { + filter: brightness(0) invert(1); +} + +// dashboard +$dashboard-line-color-price: $secondary; + +$dashboard-line-color-market: $tertiary; + +$dashboard-banner-chart-legend-label-color: $tertiary; +$dashboard-stats-item-label-color: $tertiary; +$dashboard-banner-chart-legend-value-color: #fff; // chart labels +$dashboard-stats-item-value-color: #fff; // stat values + +$dashboard-stats-item-border-color: $secondary; // stat border + +$dashboard-banner-gradient-start: $primary; // gradient begin + +$dashboard-banner-gradient-end: lighten($primary, 5); // gradient end + +$dashboard-banner-network-plain-container-background-color: #424242; // stats bg + +// navigation +.navbar { + box-shadow: 0px 0px 30px 0px rgba(21, 53, 80, 0.12); +} // header shadow +$dropdown-menu-item-hover-color: $sub-accent-color !default; +$dropdown-menu-item-hover-background: rgba($sub-accent-color, 0.1) !default; +$header-icon-color-hover: $sub-accent-color; +$header-icon-border-color-hover: $sub-accent-color; + +// buttons +$btn-line-bg: #fff; // button bg +$btn-line-color: $sub-accent-color; // button border and font color && hover bg color +$btn-copy-color: $sub-accent-color; // btn copy +$btn-qr-color: $sub-accent-color; // btn qr-code +$btn-address-card-icon-color: $sub-accent-color; // btn address color +$btn-contract-color: $sub-accent-color; + +//links & tile +$tile-body-a-color: $sub-accent-color; +$tile-type-block-color: $sub-accent-color; +$tile-type-progress-bar-color: $sub-accent-color; +a.tile-title { + color: $sub-accent-color !important; +} + +// card +$card-background-1: $sub-accent-color; +$card-tab-active: $sub-accent-color; + +// dropdown +.dropdown-item { + &:hover, + &:active, + &.active { + background-color: rgba($sub-accent-color, 0.1) !important; + color: $sub-accent-color !important; + } +} + +.layout-container { + .dashboard-banner-container { + background-image: linear-gradient( + to bottom, + $dashboard-banner-gradient-start, + $dashboard-banner-gradient-end + ); + } +} + +// Badges +$badge-neutral-color: $sub-accent-color; +$badge-neutral-background-color: rgba($sub-accent-color, 0.1); +$api-text-monospace-color: $sub-accent-color; + +// Dark theme +$dark-primary: #e1995a; +$dark-secondary: #aeaeae; +$dark-primary-alternate: #e1995a; diff --git a/frontend-v2/src/stylesheets/theme/_kovan_variables-non-critical.scss b/frontend-v2/src/stylesheets/theme/_kovan_variables-non-critical.scss new file mode 100644 index 0000000..e341904 --- /dev/null +++ b/frontend-v2/src/stylesheets/theme/_kovan_variables-non-critical.scss @@ -0,0 +1,7 @@ +// general +$primary: #101f25; +$secondary: #35e3d8; +$tertiary: #1f857f; +$additional-font: #99fff9; + +$btn-line-color: $tertiary; // button border and font color && hover bg color diff --git a/frontend-v2/src/stylesheets/theme/_kovan_variables.scss b/frontend-v2/src/stylesheets/theme/_kovan_variables.scss new file mode 100644 index 0000000..fb9ef70 --- /dev/null +++ b/frontend-v2/src/stylesheets/theme/_kovan_variables.scss @@ -0,0 +1,89 @@ +// general +$primary: #101f25; +$secondary: #35e3d8; +$tertiary: #1f857f; +$additional-font: #99fff9; + +// footer +$footer-background-color: $primary; +$footer-title-color: #fff; +$footer-text-color: $additional-font; +$footer-item-disc-color: $additional-font; +.footer-logo { + filter: brightness(0) invert(1); +} + +// dashboard +$dashboard-line-color-price: $tertiary; // price left border + +$dashboard-banner-chart-legend-label-color: $additional-font; +$dashboard-stats-item-label-color: $additional-font; +$dashboard-banner-chart-legend-value-color: #fff; // chart labels +$dashboard-stats-item-value-color: #fff; // stat values + +$dashboard-stats-item-border-color: $secondary; // stat border + +$dashboard-banner-gradient-start: $primary; // gradient begin + +$dashboard-banner-gradient-end: lighten($primary, 5); // gradient end + +$dashboard-banner-network-plain-container-background-color: #1a323b; // stats bg + +// navigation +.navbar { + box-shadow: 0px 0px 30px 0px rgba(21, 53, 80, 0.12); +} // header shadow +$header-icon-border-color-hover: $tertiary; +$header-icon-color-hover: $tertiary; + +// buttons +$btn-line-bg: #fff; // button bg +$btn-line-color: $tertiary; // button border and font color && hover bg color +$btn-copy-color: $tertiary; // btn copy +$btn-qr-color: $tertiary; // btn qr-code +$btn-address-card-icon-color: $tertiary; // btn address color +$btn-contract-color: $tertiary; + +//links & tile +$tile-body-a-color: $tertiary; +$tile-type-block-color: $tertiary; +$tile-type-progress-bar-color: $tertiary; +a.tile-title { + color: $tertiary !important; +} + +// card +$card-background-1: $tertiary; +$card-tab-active: $tertiary; + +// dropdown +.dropdown-item { + &:hover, + &:active, + &.active { + background-color: rgba($tertiary, 0.1) !important; + color: $tertiary !important; + } +} + +.layout-container { + .dashboard-banner-container { + background-image: linear-gradient( + to bottom, + $dashboard-banner-gradient-start, + $dashboard-banner-gradient-end + ); + } +} + +// Badges +$badge-success-color: #15bba6; +$badge-success-background-color: rgba(#15bba6, 0.1); +$badge-neutral-color: $tertiary; +$badge-neutral-background-color: rgba($tertiary, 0.1); +$api-text-monospace-color: $tertiary; + +// Dark theme +$dark-primary: #42e2d7; +$dark-secondary: #1f857f; +$dark-primary-alternate: #1f857f; diff --git a/frontend-v2/src/stylesheets/theme/_lukso_variables-non-critical.scss b/frontend-v2/src/stylesheets/theme/_lukso_variables-non-critical.scss new file mode 100644 index 0000000..7b3b5d5 --- /dev/null +++ b/frontend-v2/src/stylesheets/theme/_lukso_variables-non-critical.scss @@ -0,0 +1,7 @@ +// general +$primary: #1d3154; +$secondary: #fdcec4; +$tertiary: #a96c55; +$additional-font: #a1ded1; + +$btn-line-color: $primary; // button border and font color && hover bg color diff --git a/frontend-v2/src/stylesheets/theme/_lukso_variables.scss b/frontend-v2/src/stylesheets/theme/_lukso_variables.scss new file mode 100644 index 0000000..3acba7b --- /dev/null +++ b/frontend-v2/src/stylesheets/theme/_lukso_variables.scss @@ -0,0 +1,176 @@ +// general +$primary: #1d3154; +$secondary: #fdcec4; +$tertiary: #a96c55; +$additional-font: #a1ded1; + +$tile-body-a-color: $tertiary; +$tile-type-block-color: $tertiary; +$tile-type-progress-bar-color: $tertiary; +a.tile-title { + color: $tertiary !important; +} + +// footer +$footer-background-color: $primary; +$footer-title-color: #fff; +$footer-text-color: $secondary; +$footer-item-disc-color: $secondary; +$footer-social-icon-color: $secondary; + +.footer-logo { + filter: brightness(0) invert(1); +} + +// dashboard +$dashboard-line-color-price: $tertiary; // price left border + +$dashboard-banner-chart-legend-label-color: $primary; +$dashboard-stats-item-label-color: $primary; +$dashboard-banner-chart-legend-value-color: $primary; // chart labels +$dashboard-stats-item-value-color: $primary; // stat values + +$dashboard-stats-item-border-color: $primary; // stat border +$dashboard-banner-gradient-start: $secondary; // gradient begin +$dashboard-banner-gradient-end: $secondary; // gradient end +$dashboard-banner-network-plain-container-background-color: $secondary; // stats bg + +// navigation +$header-icon-border-color-hover: $primary; // top border on hover +$header-icon-color-hover: $primary; // nav icon on hover +$dropdown-menu-item-hover-color: $primary !default; +$dropdown-menu-item-hover-background: rgba($primary, 0.1) !default; + +// buttons +$btn-line-bg: #fff; // button bg +$btn-line-color: $primary; // button border and font color && hover bg color +$btn-copy-color: $primary; // btn copy +$btn-qr-color: $primary; // btn qr-code +$btn-address-card-icon-color: $primary; // btn address color + +// card +$card-background-1: $primary; +$card-tab-active: $primary; + +$dashboard-banner-network-stats-static-image: "/images/lukso_dashboard_image.png"; + +// Custom home +$dashboard-banner-network-plain-container-height: 150px; + +.layout-container { + .dashboard-banner-container { + height: auto !important; + } + .dashboard-banner-container::after { + display: none; + } + + .dashboard-banner-network-graph { + display: none; + } + + .dashboard-banner-network-plain-container { + background-color: transparent; + height: $dashboard-banner-network-plain-container-height; + margin: 0; + padding: 0; + width: 100%; + box-shadow: none; + + @include media-breakpoint-down(lg) { + height: auto; + min-height: $dashboard-banner-network-plain-container-height; + padding-bottom: 0; + padding-top: 25px; + } + + .dashboard-banner-network-stats { + align-items: center; + display: flex; + height: 100%; + justify-content: flex-start; + width: 100%; + + @include media-breakpoint-down(lg) { + flex-wrap: wrap; + justify-content: space-between; + } + + &::after { + background-color: transparent; + background-image: url($dashboard-banner-network-stats-static-image); + background-position: 50% 50%; + background-repeat: no-repeat; + background-size: contain; + bottom: auto; + content: ""; + display: block; + flex-grow: 0; + flex-shrink: 0; + height: $dashboard-banner-network-plain-container-height; + margin: 0 0 0 auto; + order: 150; + width: 301px; + box-shadow: none; + + @include media-breakpoint-down(lg) { + display: none; + } + } + + .dashboard-banner-network-stats-item { + margin-right: 60px; + + @include media-breakpoint-down(lg) { + flex-grow: 1; + flex-shrink: 1; + margin-right: 0; + margin-bottom: 25px; + } + + @include media-breakpoint-down(sm) { + min-width: 50%; + } + + &.dashboard-banner-network-stats-item-1 { + order: 1; + } + &.dashboard-banner-network-stats-item-2 { + order: 2; + } + &.dashboard-banner-network-stats-item-3 { + order: 4; + margin-right: 0; + } + &.dashboard-banner-network-stats-item-4 { + order: 3; + } + } + } + &:after { + box-shadow: none; + } + } +} + +// Badges +$badge-neutral-color: $tertiary; +$badge-neutral-background-color: rgba($tertiary, 0.1); +$api-text-monospace-color: $tertiary; + +// Dark theme +$dark-primary: #fdcec4; +$dark-secondary: #a96c55; +$dark-primary-alternate: #a96c55; + +.dark-theme-applied { + .dashboard-banner-network-stats-value { + color: $dark-primary !important; + } + .layout-container .dashboard-banner-container { + background-color: #282945 !important; + } + .dashboard-banner-network-plain-container::after { + box-shadow: none !important; + } +} diff --git a/frontend-v2/src/stylesheets/theme/_musicoin_variables.scss b/frontend-v2/src/stylesheets/theme/_musicoin_variables.scss new file mode 100644 index 0000000..65013a7 --- /dev/null +++ b/frontend-v2/src/stylesheets/theme/_musicoin_variables.scss @@ -0,0 +1,3 @@ +$primary: #171717; +$secondary: #ff9000; +$tertiary: #727272; diff --git a/frontend-v2/src/stylesheets/theme/_neutral_variables-non-critical.scss b/frontend-v2/src/stylesheets/theme/_neutral_variables-non-critical.scss new file mode 100644 index 0000000..82825da --- /dev/null +++ b/frontend-v2/src/stylesheets/theme/_neutral_variables-non-critical.scss @@ -0,0 +1,7 @@ +// general +$primary: #5c34a2; +$secondary: #87e1a9; +$tertiary: #bf9cff; +$additional-font: #fff; + +$btn-line-color: $primary; // button border and font color && hover bg color diff --git a/frontend-v2/src/stylesheets/theme/_neutral_variables.scss b/frontend-v2/src/stylesheets/theme/_neutral_variables.scss new file mode 100644 index 0000000..bc622f2 --- /dev/null +++ b/frontend-v2/src/stylesheets/theme/_neutral_variables.scss @@ -0,0 +1,82 @@ +// general +$primary: #5c34a2; +$secondary: #87e1a9; +$tertiary: #bf9cff; +$additional-font: #fff; + +// footer +$footer-background-color: #3c226a; +$footer-title-color: #fff; +$footer-text-color: #bda6e7; +$footer-item-disc-color: $secondary; + +// dashboard +$dashboard-line-color-price: $tertiary; // price left border + +$dashboard-banner-chart-legend-label-color: #dcc8ff; +$dashboard-stats-item-label-color: $dashboard-banner-chart-legend-label-color; +$dashboard-banner-chart-legend-value-color: #fff; // chart labels +$dashboard-stats-item-value-color: #fff; // stat values + +$dashboard-stats-item-border-color: $secondary; // stat border + +$dashboard-banner-gradient-start: $primary; // gradient begin + +$dashboard-banner-gradient-end: lighten($primary, 5); // gradient end + +$dashboard-banner-network-plain-container-background-color: #8258cd; // stats bg + +// navigation +.navbar { + box-shadow: 0px 0px 30px 0px rgba(21, 53, 80, 0.12); +} // header shadow +$dropdown-menu-item-hover-color: $primary !default; +$dropdown-menu-item-hover-background: rgba($primary, 0.1) !default; +$header-icon-color-hover: $primary; +$header-icon-border-color-hover: $primary; + +// buttons +$btn-line-bg: #fff; // button bg +$btn-line-color: $primary; // button border and font color && hover bg color +$btn-copy-color: $primary; // btn copy +$btn-qr-color: $primary; // btn qr-code +$btn-address-card-icon-color: $primary; // btn address color + +//links & tile +$tile-body-a-color: $primary; +$tile-type-block-color: $primary; +$tile-type-progress-bar-color: $primary; +a.tile-title { + color: $primary !important; +} + +// card +$card-background-1: $primary; +$card-tab-active: $primary; + +.layout-container { + .dashboard-banner-container { + background-image: linear-gradient( + to bottom, + $dashboard-banner-gradient-start, + $dashboard-banner-gradient-end + ); + } +} + +// Badges +$badge-neutral-color: $primary; +$badge-neutral-background-color: rgba($primary, 0.1); +$api-text-monospace-color: $primary; + +// Tokens dropdown +.token-balance-dropdown[aria-labelledby="dropdown-tokens"] { + .dropdown-items .dropdown-item:hover { + color: $primary !important; + } +} + +// Dark theme +$dark-primary: #9b62ff; +$dark-secondary: #87e1a9; +$dark-primary-alternate: #7e50d0; diff --git a/frontend-v2/src/stylesheets/theme/_pirl_variables.scss b/frontend-v2/src/stylesheets/theme/_pirl_variables.scss new file mode 100644 index 0000000..8f57f79 --- /dev/null +++ b/frontend-v2/src/stylesheets/theme/_pirl_variables.scss @@ -0,0 +1,8 @@ +$primary: #343434; +$secondary: #a2d729; +$tertiary: #7f7f7f; + +$footer-background-color: $primary; +$footer-title-color: #fff; +$footer-text-color: #fff; +$footer-item-disc-color: $secondary; diff --git a/frontend-v2/src/stylesheets/theme/_poa_variables-non-critical.scss b/frontend-v2/src/stylesheets/theme/_poa_variables-non-critical.scss new file mode 100644 index 0000000..82825da --- /dev/null +++ b/frontend-v2/src/stylesheets/theme/_poa_variables-non-critical.scss @@ -0,0 +1,7 @@ +// general +$primary: #5c34a2; +$secondary: #87e1a9; +$tertiary: #bf9cff; +$additional-font: #fff; + +$btn-line-color: $primary; // button border and font color && hover bg color diff --git a/frontend-v2/src/stylesheets/theme/_poa_variables.scss b/frontend-v2/src/stylesheets/theme/_poa_variables.scss new file mode 100644 index 0000000..5c6bd1a --- /dev/null +++ b/frontend-v2/src/stylesheets/theme/_poa_variables.scss @@ -0,0 +1,86 @@ +// general +$primary: #5c34a2; +$secondary: #87e1a9; +$tertiary: #bf9cff; +$additional-font: #fff; + +// footer +$footer-background-color: #3c226a; +$footer-title-color: #fff; +$footer-text-color: #bda6e7; +$footer-item-disc-color: $secondary; +.footer-logo { + filter: brightness(0) invert(1); +} + +// dashboard +$dashboard-line-color-price: $tertiary; // price left border + +$dashboard-banner-chart-legend-label-color: #dcc8ff; +$dashboard-stats-item-label-color: $dashboard-banner-chart-legend-label-color; +$dashboard-banner-chart-legend-value-color: #fff; // chart labels +$dashboard-stats-item-value-color: #fff; // stat values + +$dashboard-stats-item-border-color: $secondary; // stat border + +$dashboard-banner-gradient-start: $primary; // gradient begin + +$dashboard-banner-gradient-end: lighten($primary, 5); // gradient end + +$dashboard-banner-network-plain-container-background-color: #8258cd; // stats bg + +// navigation +.navbar { + box-shadow: 0px 0px 30px 0px rgba(21, 53, 80, 0.12); +} // header shadow +$dropdown-menu-item-hover-color: $primary !default; +$dropdown-menu-item-hover-background: rgba($primary, 0.1) !default; +$header-icon-color-hover: $primary; +$header-icon-border-color-hover: $primary; + +// buttons +$btn-line-bg: #fff; // button bg +$btn-line-color: $primary; // button border and font color && hover bg color +$btn-copy-color: $primary; // btn copy +$btn-qr-color: $primary; // btn qr-code +$btn-address-card-icon-color: $primary; // btn address color +$btn-contract-color: $primary; + +//links & tile +$tile-body-a-color: $primary; +$tile-type-block-color: $primary; +$tile-type-progress-bar-color: $primary; +a.tile-title { + color: $primary !important; +} + +// card +$card-background-1: $primary; +$card-tab-active: $primary; + +.layout-container { + .dashboard-banner-container { + background-image: linear-gradient( + to bottom, + $dashboard-banner-gradient-start, + $dashboard-banner-gradient-end + ); + } +} + +// Badges +$badge-neutral-color: $primary; +$badge-neutral-background-color: rgba($primary, 0.1); +$api-text-monospace-color: $primary; + +// Tokens dropdown +.token-balance-dropdown[aria-labelledby="dropdown-tokens"] { + .dropdown-items .dropdown-item:hover { + color: $primary !important; + } +} + +// Dark theme +$dark-primary: #9b62ff; +$dark-secondary: #87e1a9; +$dark-primary-alternate: #7e50d0; diff --git a/frontend-v2/src/stylesheets/theme/_rinkeby_variables-non-critical.scss b/frontend-v2/src/stylesheets/theme/_rinkeby_variables-non-critical.scss new file mode 100644 index 0000000..80a5212 --- /dev/null +++ b/frontend-v2/src/stylesheets/theme/_rinkeby_variables-non-critical.scss @@ -0,0 +1,7 @@ +// general +$primary: #153550; +$secondary: #38a9f5; +$tertiary: #76f1ff; +$additional-font: #89cae6; + +$btn-line-color: $secondary; // button border and font color && hover bg color diff --git a/frontend-v2/src/stylesheets/theme/_rinkeby_variables.scss b/frontend-v2/src/stylesheets/theme/_rinkeby_variables.scss new file mode 100644 index 0000000..8ffc618 --- /dev/null +++ b/frontend-v2/src/stylesheets/theme/_rinkeby_variables.scss @@ -0,0 +1,73 @@ +// general +$primary: #153550; +$secondary: #38a9f5; +$tertiary: #76f1ff; +$additional-font: #89cae6; + +// footer +$footer-background-color: $primary; +$footer-title-color: #fff; +$footer-text-color: #89cae6; +$footer-item-disc-color: $secondary; +.footer-logo { + filter: brightness(0) invert(1); +} +.footer-social-icons .footer-social-icon { + color: $secondary; +} + +// dashboard +$dashboard-line-color-price: $tertiary; // price left border + +$dashboard-banner-chart-legend-label-color: #89cae6; +$dashboard-stats-item-label-color: #89cae6; +$dashboard-banner-chart-legend-value-color: #fff; // chart labels +$dashboard-stats-item-value-color: #fff; // stat values + +$dashboard-stats-item-border-color: $tertiary; // stat border + +$dashboard-banner-gradient-start: $primary; // gradient begin + +$dashboard-banner-gradient-end: lighten($primary, 5); // gradient end + +$dashboard-banner-network-plain-container-background-color: #1c476c; // stats bg + +// navigation +.navbar { + box-shadow: 0px 0px 30px 0px rgba(21, 53, 80, 0.12); +} // header shadow + +// buttons +$btn-line-bg: #fff; // button bg +$btn-line-color: $secondary; // button border and font color && hover bg color +$btn-copy-color: $secondary; // btn copy +$btn-qr-color: $secondary; // btn qr-code +$btn-address-card-icon-color: $secondary; // btn address color +$btn-contract-color: $secondary; + +//links & tile +$tile-body-a-color: $secondary; +$tile-type-block-color: $secondary; +$tile-type-progress-bar-color: $secondary; +a.tile-title { + color: $secondary !important; +} + +// card +$card-background-1: $secondary; +$card-tab-active: $secondary; + +.layout-container { + .dashboard-banner-container { + background-image: linear-gradient( + to bottom, + $dashboard-banner-gradient-start, + $dashboard-banner-gradient-end + ); + } +} + +// Dark theme +$dark-primary: #38a9f5; +$dark-secondary: #76f1ff; +$dark-primary-alternate: #38a9f5; diff --git a/frontend-v2/src/stylesheets/theme/_ropsten_variables-non-critical.scss b/frontend-v2/src/stylesheets/theme/_ropsten_variables-non-critical.scss new file mode 100644 index 0000000..80a5212 --- /dev/null +++ b/frontend-v2/src/stylesheets/theme/_ropsten_variables-non-critical.scss @@ -0,0 +1,7 @@ +// general +$primary: #153550; +$secondary: #38a9f5; +$tertiary: #76f1ff; +$additional-font: #89cae6; + +$btn-line-color: $secondary; // button border and font color && hover bg color diff --git a/frontend-v2/src/stylesheets/theme/_ropsten_variables.scss b/frontend-v2/src/stylesheets/theme/_ropsten_variables.scss new file mode 100644 index 0000000..8ffc618 --- /dev/null +++ b/frontend-v2/src/stylesheets/theme/_ropsten_variables.scss @@ -0,0 +1,73 @@ +// general +$primary: #153550; +$secondary: #38a9f5; +$tertiary: #76f1ff; +$additional-font: #89cae6; + +// footer +$footer-background-color: $primary; +$footer-title-color: #fff; +$footer-text-color: #89cae6; +$footer-item-disc-color: $secondary; +.footer-logo { + filter: brightness(0) invert(1); +} +.footer-social-icons .footer-social-icon { + color: $secondary; +} + +// dashboard +$dashboard-line-color-price: $tertiary; // price left border + +$dashboard-banner-chart-legend-label-color: #89cae6; +$dashboard-stats-item-label-color: #89cae6; +$dashboard-banner-chart-legend-value-color: #fff; // chart labels +$dashboard-stats-item-value-color: #fff; // stat values + +$dashboard-stats-item-border-color: $tertiary; // stat border + +$dashboard-banner-gradient-start: $primary; // gradient begin + +$dashboard-banner-gradient-end: lighten($primary, 5); // gradient end + +$dashboard-banner-network-plain-container-background-color: #1c476c; // stats bg + +// navigation +.navbar { + box-shadow: 0px 0px 30px 0px rgba(21, 53, 80, 0.12); +} // header shadow + +// buttons +$btn-line-bg: #fff; // button bg +$btn-line-color: $secondary; // button border and font color && hover bg color +$btn-copy-color: $secondary; // btn copy +$btn-qr-color: $secondary; // btn qr-code +$btn-address-card-icon-color: $secondary; // btn address color +$btn-contract-color: $secondary; + +//links & tile +$tile-body-a-color: $secondary; +$tile-type-block-color: $secondary; +$tile-type-progress-bar-color: $secondary; +a.tile-title { + color: $secondary !important; +} + +// card +$card-background-1: $secondary; +$card-tab-active: $secondary; + +.layout-container { + .dashboard-banner-container { + background-image: linear-gradient( + to bottom, + $dashboard-banner-gradient-start, + $dashboard-banner-gradient-end + ); + } +} + +// Dark theme +$dark-primary: #38a9f5; +$dark-secondary: #76f1ff; +$dark-primary-alternate: #38a9f5; diff --git a/frontend-v2/src/stylesheets/theme/_rsk_variables-non-critical.scss b/frontend-v2/src/stylesheets/theme/_rsk_variables-non-critical.scss new file mode 100644 index 0000000..9591135 --- /dev/null +++ b/frontend-v2/src/stylesheets/theme/_rsk_variables-non-critical.scss @@ -0,0 +1,7 @@ +// general +$primary: #101f25; +$secondary: #27ac8d; +$tertiary: #e39a54; +$additional-font: #a1ded1; + +$btn-line-color: $secondary; // button border and font color && hover bg color diff --git a/frontend-v2/src/stylesheets/theme/_rsk_variables.scss b/frontend-v2/src/stylesheets/theme/_rsk_variables.scss new file mode 100644 index 0000000..4a28378 --- /dev/null +++ b/frontend-v2/src/stylesheets/theme/_rsk_variables.scss @@ -0,0 +1,75 @@ +// general +$primary: #101f25; +$secondary: #27ac8d; +$tertiary: #e39a54; +$additional-font: #a1ded1; + +$tile-body-a-color: $secondary; +$tile-type-block-color: $secondary; +$tile-type-progress-bar-color: $secondary; +a.tile-title { + color: $secondary !important; +} + +// footer +$footer-background-color: $primary; +$footer-title-color: #fff; +$footer-text-color: $additional-font; +$footer-item-disc-color: $secondary; +$footer-social-icon-color: $secondary; + +// dashboard +$dashboard-line-color-price: $tertiary; // price left border + +$dashboard-banner-chart-legend-label-color: $additional-font; +$dashboard-stats-item-label-color: $additional-font; +$dashboard-banner-chart-legend-value-color: #fff; // chart labels +$dashboard-stats-item-value-color: #fff; // stat values + +$dashboard-stats-item-border-color: $secondary; // stat border +$dashboard-banner-gradient-start: $primary; // gradient begin +$dashboard-banner-gradient-end: #193039; // gradient end +$dashboard-banner-network-plain-container-background-color: #1a323b; // stats bg + +// navigation +$header-icon-border-color-hover: $secondary; // top border on hover +$header-icon-color-hover: $secondary; // nav icon on hover + +// buttons +$btn-line-bg: #fff; // button bg +$btn-line-color: $secondary; // button border and font color && hover bg color +$btn-copy-color: $secondary; // btn copy +$btn-qr-color: $secondary; // btn qr-code +$btn-address-card-icon-color: $secondary; // btn address color +$btn-contract-color: $secondary; +// card +$card-background-1: $secondary; +$card-tab-active: $secondary; + +// ETC theme's idiosyncrasies +.layout-container { + .navbar { + box-shadow: 0 0 30px 0 rgba(21, 53, 80, 0.12); + } + + .dashboard-banner-container { + background-image: linear-gradient( + to bottom, + $dashboard-banner-gradient-start, + $dashboard-banner-gradient-end + ); + } + + .footer-logo { + filter: brightness(0) invert(1); + } +} + +// Badges +$badge-neutral-color: #1a323b; +$badge-neutral-background-color: rgba(#1a323b, 0.1); + +// Dark theme +$dark-primary: #38c5a4; +$dark-secondary: #e39a54; +$dark-primary-alternate: #30ab8d; diff --git a/frontend-v2/src/stylesheets/theme/_social_variables.scss b/frontend-v2/src/stylesheets/theme/_social_variables.scss new file mode 100644 index 0000000..3d878dc --- /dev/null +++ b/frontend-v2/src/stylesheets/theme/_social_variables.scss @@ -0,0 +1,8 @@ +$primary: #a375ff; +$secondary: #00f0bd; +$tertiary: #53a9ff; + +$footer-background-color: $primary; +$footer-title-color: #fff; +$footer-text-color: #fff; +$footer-item-disc-color: $secondary; diff --git a/frontend-v2/src/stylesheets/theme/_sokol_variables-non-critical.scss b/frontend-v2/src/stylesheets/theme/_sokol_variables-non-critical.scss new file mode 100644 index 0000000..0bc421d --- /dev/null +++ b/frontend-v2/src/stylesheets/theme/_sokol_variables-non-critical.scss @@ -0,0 +1,8 @@ +// general +$primary: #093731; +$secondary: #40bfb2; +$tertiary: #25c9ff; +$additional-font: #93e8dd; +$sub-accent-color: #1c9f90; + +$btn-line-color: $sub-accent-color; // button border and font color && hover bg color diff --git a/frontend-v2/src/stylesheets/theme/_sokol_variables.scss b/frontend-v2/src/stylesheets/theme/_sokol_variables.scss new file mode 100644 index 0000000..6c33e8b --- /dev/null +++ b/frontend-v2/src/stylesheets/theme/_sokol_variables.scss @@ -0,0 +1,86 @@ +// general +$primary: #093731; +$secondary: #40bfb2; +$tertiary: #25c9ff; +$additional-font: #93e8dd; +$sub-accent-color: #1c9f90; + +// footer +$footer-background-color: $primary; +$footer-title-color: #fff; +$footer-text-color: $additional-font; +$footer-item-disc-color: $additional-font; +.footer-logo { + filter: brightness(0) invert(1); +} + +// dashboard +$dashboard-line-color-price: $tertiary; // price left border + +$dashboard-line-color-price: $secondary; + +$dashboard-line-color-market: $tertiary; + +$dashboard-banner-chart-legend-label-color: $additional-font; +$dashboard-stats-item-label-color: $additional-font; +$dashboard-banner-chart-legend-value-color: #fff; // chart labels +$dashboard-stats-item-value-color: #fff; // stat values + +$dashboard-stats-item-border-color: $secondary; // stat border + +$dashboard-banner-gradient-start: $primary; // gradient begin + +$dashboard-banner-gradient-end: lighten($primary, 5); // gradient end + +$dashboard-banner-network-plain-container-background-color: #0e534a; // stats bg + +// navigation +.navbar { + box-shadow: 0px 0px 30px 0px rgba(21, 53, 80, 0.12); +} // header shadow +$dropdown-menu-item-hover-color: $sub-accent-color !default; +$dropdown-menu-item-hover-background: rgba($sub-accent-color, 0.1) !default; +$header-icon-color-hover: $sub-accent-color; +$header-icon-border-color-hover: $sub-accent-color; + +// Logo Size +$footer-logo-height: 20px; +$navbar-logo-height: 20px; + +// buttons +$btn-line-bg: #fff; // button bg +$btn-line-color: $sub-accent-color; // button border and font color && hover bg color +$btn-copy-color: $sub-accent-color; // btn copy +$btn-qr-color: $sub-accent-color; // btn qr-code +$btn-address-card-icon-color: $sub-accent-color; // btn address color +$btn-contract-color: $sub-accent-color; +//links & tile +$tile-body-a-color: $sub-accent-color; +$tile-type-block-color: $sub-accent-color; +$tile-type-progress-bar-color: $sub-accent-color; +a.tile-title { + color: $sub-accent-color !important; +} + +// card +$card-background-1: $sub-accent-color; +$card-tab-active: $sub-accent-color; + +.layout-container { + .dashboard-banner-container { + background-image: linear-gradient( + to bottom, + $dashboard-banner-gradient-start, + $dashboard-banner-gradient-end + ); + } +} + +// Badges +$badge-neutral-color: $tertiary; +$badge-neutral-background-color: rgba($tertiary, 0.1); + +// Dark theme +$dark-primary: #40bfb2; +$dark-secondary: #25c9ff; +$dark-primary-alternate: #1c9f90; diff --git a/frontend-v2/src/stylesheets/theme/_tobalaba_variables.scss b/frontend-v2/src/stylesheets/theme/_tobalaba_variables.scss new file mode 100644 index 0000000..aa7fe70 --- /dev/null +++ b/frontend-v2/src/stylesheets/theme/_tobalaba_variables.scss @@ -0,0 +1,8 @@ +$primary: #633d99; +$secondary: #6cc04a; +$tertiary: #a566ff; + +$footer-background-color: $primary; +$footer-title-color: #fff; +$footer-text-color: #fff; +$footer-item-disc-color: $secondary; diff --git a/frontend-v2/src/stylesheets/theme/_tomochain_variables.scss b/frontend-v2/src/stylesheets/theme/_tomochain_variables.scss new file mode 100644 index 0000000..d3c3a16 --- /dev/null +++ b/frontend-v2/src/stylesheets/theme/_tomochain_variables.scss @@ -0,0 +1,4 @@ +$primary: #211841; +$secondary: #f16950; +$tertiary: #8b84bc; +$btn-contract-color: $primary; diff --git a/frontend-v2/src/stylesheets/theme/_variables-non-critical.scss b/frontend-v2/src/stylesheets/theme/_variables-non-critical.scss new file mode 100644 index 0000000..8ff5054 --- /dev/null +++ b/frontend-v2/src/stylesheets/theme/_variables-non-critical.scss @@ -0,0 +1,23 @@ +@import "base_variables"; +@import "neutral_variables-non-critical"; +// @import "xusdt_variables-non-critical"; +// @import "dai_variables-non-critical"; +// @import "ethereum_classic_variables-non-critical"; +// @import "ethereum_variables-non-critical"; +// @import "ether1_variables-non-critical"; +// @import "expanse_variables-non-critical"; +// @import "gochain_variables-non-critical"; +// @import "goerli_variables-non-critical"; +// @import "kovan_variables-non-critical"; +// @import "lukso_variables-non-critical"; +// @import "musicoin_variables-non-critical"; +// @import "pirl_variables-non-critical"; +// @import "poa_variables-non-critical"; +// @import "rinkeby_variables-non-critical"; +// @import "ropsten_variables-non-critical"; +// @import "social_variables-non-critical"; +// @import "sokol_variables-non-critical"; +// @import "tobalaba_variables-non-critical"; +// @import "tomochain_variables-non-critical"; +// @import "rsk_variables-non-critical"; +// @import "ethercore_variables-non-critical"; diff --git a/frontend-v2/src/stylesheets/theme/_variables.scss b/frontend-v2/src/stylesheets/theme/_variables.scss new file mode 100644 index 0000000..c42c7a2 --- /dev/null +++ b/frontend-v2/src/stylesheets/theme/_variables.scss @@ -0,0 +1,32 @@ +@import "base_variables"; +@import "neutral_variables"; +// @import "xusdt_variables"; +// @import "dai_variables"; +// @import "ethereum_classic_variables"; +@import "ethereum_variables"; +// @import "ether1_variables"; +// @import "expanse_variables"; +// @import "gochain_variables"; +// @import "goerli_variables"; +// @import "kovan_variables"; +// @import "lukso_variables"; +// @import "musicoin_variables"; +// @import "pirl_variables"; +// @import "poa_variables"; +// @import "rinkeby_variables"; +// @import "ropsten_variables"; +// @import "social_variables"; +// @import "sokol_variables"; +// @import "tobalaba_variables"; +// @import "tomochain_variables"; +// @import "rsk_variables"; +// @import "ethercore_variables"; + +// responsive breakpoints +$breakpoint-xs: 320px; +$breakpoint-sm: 480px; +$breakpoint-md: 768px; +$breakpoint-lg: 992px; +$breakpoint-xl: 1024px; +$breakpoint-xxl: 1280px; +$breakpoint-xxxl: 1366px; diff --git a/frontend-v2/src/stylesheets/theme/_wanchain_variables.scss b/frontend-v2/src/stylesheets/theme/_wanchain_variables.scss new file mode 100644 index 0000000..f46a8da --- /dev/null +++ b/frontend-v2/src/stylesheets/theme/_wanchain_variables.scss @@ -0,0 +1,3 @@ +$primary: #3680f8; +$secondary: #2ccfc5; +$tertiary: #7289af; diff --git a/frontend-v2/src/stylesheets/theme/_xusdt_variables-non-critical.scss b/frontend-v2/src/stylesheets/theme/_xusdt_variables-non-critical.scss new file mode 100644 index 0000000..c0c9d6e --- /dev/null +++ b/frontend-v2/src/stylesheets/theme/_xusdt_variables-non-critical.scss @@ -0,0 +1,7 @@ +// general +$primary: #2b9f7a; +$secondary: #20745a; +$tertiary: #fff; +$additional-font: #fff; + +$btn-line-color: $secondary; // button border and font color && hover bg color diff --git a/frontend-v2/src/stylesheets/theme/_xusdt_variables.scss b/frontend-v2/src/stylesheets/theme/_xusdt_variables.scss new file mode 100644 index 0000000..cd4ffc5 --- /dev/null +++ b/frontend-v2/src/stylesheets/theme/_xusdt_variables.scss @@ -0,0 +1,107 @@ +// general +$primary: #2b9f7a; +$secondary: #20745a; +$tertiary: #fff; +$additional-font: #fff; + +$tile-body-a-color: $primary; +$tile-type-block-color: $primary; +$tile-type-progress-bar-color: $primary; +a.tile-title { + color: $primary !important; +} + +// footer +$footer-background-color: #282d31; +$footer-title-color: #fff; +$footer-text-color: $additional-font; +$footer-item-disc-color: $secondary; +$footer-social-icon-color: $secondary; + +// dashboard +$dashboard-line-color-price: #fff; // price left border + +$dashboard-banner-chart-legend-label-color: #fff; +$dashboard-stats-item-label-color: $dashboard-banner-chart-legend-label-color; +$dashboard-banner-chart-legend-value-color: #fff; // chart labels +$dashboard-stats-item-value-color: #fff; // stat values + +$dashboard-stats-item-border-color: $secondary; // stat border + +$dashboard-banner-gradient-start: $primary; // gradient begin + +$dashboard-banner-gradient-end: #289371; // gradient end + +$dashboard-banner-network-plain-container-background-color: #2ea780; // stats bg + +// navigation +.navbar { + box-shadow: 0px 0px 30px 0px rgba(21, 53, 80, 0.12); +} // header shadow +$dropdown-menu-item-hover-color: $primary !default; +$dropdown-menu-item-hover-background: rgba($primary, 0.1) !default; +$header-icon-color-hover: $primary; +$header-icon-border-color-hover: $primary; + +// buttons +$btn-line-bg: #fff; // button bg +$btn-line-color: $primary; // button border and font color && hover bg color +$btn-copy-color: $primary; // btn copy +$btn-qr-color: $primary; // btn qr-code +$btn-address-card-icon-color: $primary; // btn address color + +//links & tile +$tile-body-a-color: $primary; +$tile-type-block-color: $primary; +$tile-type-progress-bar-color: $primary; +a.tile-title { + color: $primary !important; +} + +// card +$card-background-1: $primary; +$card-tab-active: $primary; + +.layout-container { + .dashboard-banner-container { + background-image: linear-gradient( + to bottom, + $dashboard-banner-gradient-start, + $dashboard-banner-gradient-end + ); + } +} + +// Badges +$badge-neutral-color: $primary; +$badge-neutral-background-color: rgba($primary, 0.1); +$api-text-monospace-color: $primary; + +// Tokens dropdown +.token-balance-dropdown[aria-labelledby="dropdown-tokens"] { + .dropdown-items .dropdown-item:hover { + color: $primary !important; + } +} + +// Dark theme +$dark-primary: #2b9f7a; +$dark-secondary: #20745a; +$dark-primary-alternate: #2b9f7a; + +.dark-theme-applied + .dashboard-banner-chart-legend + .dashboard-banner-chart-legend-item:nth-child(1)::before { + background-color: white !important; +} + +.dark-theme-applied + .dashboard-banner-chart-legend + .dashboard-banner-chart-legend-item:nth-child(2)::before { + background-color: $primary !important; +} + +.dark-theme-applied .tile .tile-body a, +.dark-theme-applied .tile span[data-address-hash] { + color: #2b9f7a; +} diff --git a/frontend-v2/src/stylesheets/theme/custom_contracts/_circles-theme.scss b/frontend-v2/src/stylesheets/theme/custom_contracts/_circles-theme.scss new file mode 100644 index 0000000..8946a1e --- /dev/null +++ b/frontend-v2/src/stylesheets/theme/custom_contracts/_circles-theme.scss @@ -0,0 +1,702 @@ +$c-primary: #7d2244; +$c-secondary: #62004a; +$c-tertiary: #ff8f4b; +$c-quarternary: #d79fc9; + +$border: #e3e5eb; +$text: #333; +$text2: #a4a9b4; + +$c-dark-color: #313355; +$c-dark-color-secondary: #3f426c; +$c-dark-text-color: #8a8dba; + +.circles-theme-applied { + .navbar.navbar-primary { + .navbar-nav { + .nav-link { + &:before { + background-color: $c-secondary; + } + + &.active, + &:hover, + &.active-icon { + color: $header-links-color-active; + .nav-link-icon { + path { + fill: $c-secondary; + } + } + } + } + } + } + + // footer + .footer { + background: $c-secondary; + color: $c-quarternary; + background-image: url(/images/custom-themes/circles/footer_logo.svg) !important; + background-position: bottom 0px right 30px; + background-repeat: no-repeat; + } + .footer-social-icon { + color: $c-tertiary !important; + } + .footer-link { + color: $c-quarternary; + } + .footer-social-icon:hover, + .footer-link:hover { + color: #fff; + } + .footer-list ul li::before { + background-color: $c-tertiary; + } + + // main container, layout, cards + + .card-title { + @media screen and (max-width: 768px) { + margin-top: 20px; + } + } + + .card-header { + border-bottom-color: darken($text2, 30); + } + + .card-tabs { + border-bottom-color: #fff; + } + + .card-tab { + color: $text; + background-color: transparent; + &:hover:not(.active) { + background-color: rgba($c-primary, 0.15); + color: $c-primary; + } + &.active { + background-color: $c-primary; + color: #fff !important; + } + } + + .check_dark_forest_icon { + margin-left: 10px; + } + + .card-tab .check_dark_forest_icon { + svg path { + fill: $c-primary; + } + } + + .card-tab.active .check_dark_forest_icon { + svg path { + fill: $c-secondary; + } + } + + .card-background-1 { + background-color: $c-tertiary; + background-image: url(/images/custom-themes/circles/balance.svg); + background-repeat: no-repeat; + -webkit-background-size: cover; + -moz-background-size: cover; + -o-background-size: cover; + background-size: cover; + } + + // Components + a { + color: $c-primary; + } + + a.tile-title { + color: $c-primary !important; + } + + .tile { + border-top-color: $border; + border-bottom-color: $border; + border-right-color: $border; + color: $text2; + &:not([class^="tile tile-type"]) { + border-left-color: $border; + } + &.tile-type-coin-balance { + border-left-color: $border; + } + .tile-transaction-type-block { + background-color: transparent; + } + } + .tile-bottom-contents { + background-color: $c-primary; + } + .fade-up-blocks-chain .tile-type-block-animation { + background-color: $c-primary; + border-top-color: $c-primary; + border-right-color: $c-primary; + border-bottom-color: $c-primary; + } + .fade-up-blocks-chain .tile-type-block-animation:after { + background-color: $c-primary; + } + .cube-animation-title { + color: $text2; + } + .tile .tile-body a, + .tile span[data-address-hash] { + color: $c-primary; + } + .fade-up-blocks-chain .tile-type-block-animation .tile-type-line-up { + background-color: $c-primary; + } + .tile.tile-type-block { + border-left-color: $c-primary; + } + .tile.tile-type-block .tile-status-label { + color: $c-primary; + } + .tile.tile-type-block .tile-transaction-type-block { + border-right-color: $c-primary; + border-top-color: $c-primary; + border-bottom-color: $c-primary; + } + .tile .progress { + background-color: rgba(#fff, 0.2); + } + .tile .progress .progress-bar { + background-color: $c-primary; + } + + // btns + + .btn-line { + background-color: transparent; + border-color: $c-primary; + color: $c-primary; + &:hover { + border-color: $c-primary; + background-color: $c-primary; + color: #fff; + } + } + + .btn-copy-icon { + content: url(/images/custom-themes/circles/copy-circles.svg); + } + + .btn-qr-icon { + content: url(/images/custom-themes/circles/qr-circles.svg); + } + + .btn-copy-icon, + .btn-qr-icon, + .btn-address-card-icon .btn-contract-icon { + border: none; + border-color: $c-primary; + &:hover { + background-color: rgba(125, 34, 68, 0.4); + } + } + + // pagination + .pagination-container .pagination .page-link { + padding: 15px; + background-color: #fff; + &:not(.no-hover):hover { + color: #fff; + border: 1px solid #fff; + background-color: $c-primary; + path { + fill: #fff; + } + } + &[disabled] { + color: $text2; + border-color: $border; + background-color: #fff; + } + .no-hover { + background-color: #fff; + border-color: $border; + color: $text2 !important; + } + } + + // dropdown + .dropdown-item.active { + background-color: $c-secondary; + } + .btn-dropdown-line { + border-color: $border; + border-radius: 2px; + height: 32px; + } + + // download csv button + .download-all-transactions .download-all-transactions-link svg path { + fill: $c-primary; + } + + //tooltips + .tooltip .arrow:before { + border-top-color: $c-primary; + border-bottom-color: $c-primary; + } + .tooltip > .tooltip-inner { + background-color: $c-primary; + } + + //network select + .network-selector-overlay { + background-color: rgba($c-primary, 0.9); + } + .network-selector { + background-color: $c-primary; + } + .network-selector-text { + color: $text2; + } + .network-selector-close path { + fill: #fff; + } + .network-selector-search-container { + background-color: $c-primary; + } + .network-selector-search-container path { + fill: $text2; + } + .network-selector-search-input { + color: #fff !important; + &::placeholder { + color: $text2; + } + } + .network-selector-tab { + color: $text2; + &:hover, + &.active { + color: #fff; + } + &.active { + &:after { + background-color: $c-primary; + } + } + } + .network-selector-item, + .network-selector-tabs-container { + border-bottom-color: darken($text2, 30); + } + .network-selector-item-title { + color: #fff; + } + .network-selector-item-type { + color: $text2; + } + .radio .radio-icon { + border-color: $text2; + } + .network-selector-item-url:hover .network-selector-item-type { + color: #fff; + } + + //coin dropdown + .token-balance-dropdown[aria-labelledby="dropdown-tokens"] + .dropdown-items + .dropdown-item:hover { + color: #fff !important; + } + + // logs search + .logs-search-input, + .logs-search-btn, + .logs-search-btn-cancel { + background-color: #fff; + border-color: $border; + height: 32px; + } + + .logs-search-btn { + border: none; + background-color: $c-primary; + color: #fff; + + &:hover { + background-color: $c-primary; + color: #fff; + } + } + + .logs-search-input { + &::placeholder { + color: $text2; + } + } + + // info allert + .alert-info { + color: #fff; + background-color: $c-primary; + border-color: $border; + } + + // Content loading placeholders + .tile-loader, + .table-content-loader { + background-color: rgba(125, 34, 68, 0.4) !important; + &:before { + background: linear-gradient( + to right, + rgba(125, 34, 68, 0.2) 2%, + lighten(rgba(125, 34, 68, 0.4), 3) 18%, + rgba(125, 34, 68, 0.6) 33% + ); + } + } + + // Common Buttons + .btn-secondary, + .button-secondary { + background-color: transparent; + border-color: $c-primary; + color: $c-primary; + &:hover { + background-color: $c-primary; + border-color: $c-primary; + color: #fff; + } + } + + .btn-no-border:hover { + background-color: $c-primary; + } + + .overview-title-buttons { + margin-top: -76px; + @media (min-width: 768px) { + margin-top: -66px; + } + } + + .overview-title-buttons.token { + @media (max-width: 768px) { + margin-top: 0px; + } + } + + #qrModal { + .modal-content { + .btn-primary { + background-color: $c-primary; + border-color: $c-primary; + &:focus, + &:hover { + background-color: $c-primary; + border-color: $c-primary; + } + } + } + } + + // alerts + .alert-link { + color: $text2; + } + + .alert-danger { + background-color: $c-primary; + border-color: $c-primary; + .alert-link { + color: #fff; + } + } + + .tile .alert { + background: rgba(#000, 0.1); + } + + // primary buttons + .btn-full-primary, + .button-primary { + background: $c-primary; + border-color: $c-primary; + color: #fff; + &:hover { + background: darken($c-primary, 6); + border-color: darken($c-primary, 6); + color: #fff; + } + } + + .logo-text { + color: #fff; + } + + .dropdown-item { + .external-link-icon { + path { + fill: #fff; + } + } + + & { + &.active, + &:hover, + &:focus { + .external-link-icon { + path { + fill: #fff; + } + } + } + } + } + + .tooltip-inversed-color { + .tooltip-inner { + background-color: $btn-line-color !important; + color: #fff !important; + } + } + + .tooltip-inversed-color.bs-tooltip-top .arrow::before, + .tooltip-inversed-color.bs-tooltip-auto[x-placement^="top"] .arrow::before { + border-top-color: $btn-line-color !important; + } + + .tooltip-inversed-color.bs-tooltip-right .arrow::before, + .tooltip-inversed-color.bs-tooltip-auto[x-placement^="right"] .arrow::before { + border-right-color: $btn-line-color !important; + } + + .tooltip-inversed-color.bs-tooltip-bottom .arrow::before, + .tooltip-inversed-color.bs-tooltip-auto[x-placement^="bottom"] + .arrow::before { + border-bottom-color: $btn-line-color !important; + } + + .tooltip-inversed-color.bs-tooltip-left .arrow::before, + .tooltip-inversed-color.bs-tooltip-auto[x-placement^="left"] .arrow::before { + border-left-color: $btn-line-color !important; + } + + .active-dot-icon { + circle { + fill: $c-primary; + } + } + + .tile.tile-type-coin-balance [data-balance-change-sign="Negative"] { + color: #e87293; + } + + .tile.tile-type-coin-balance [data-balance-change-sign="Positive"] { + color: $c-primary; + } + + ::-webkit-scrollbar { + width: 12px; + } + + ::-webkit-scrollbar-track { + -webkit-box-shadow: inset 0 0 6px $c-primary; + } + + ::-webkit-scrollbar-thumb { + background: $c-primary; + } + + .custom-balance-icon { + background-image: url(/images/custom-themes/circles/balance.svg); + margin-right: 0px; + margin-left: auto; + max-width: 100%; + } + + .custom-dapp-header-container { + display: flex; + margin-bottom: 30px; + @media screen and (max-width: 768px) { + display: inline; + } + } + + .custom-dapp-header-description-container { + display: contents; + } + + .custom-address-icon { + content: url(/images/custom-themes/circles/logo.svg); + + @media screen and (max-width: 768px) { + margin-bottom: 20px; + } + } + + .custom-address-details { + margin-top: 8px; + @media (min-width: 576px) { + margin-left: 0; + } + @media (min-width: 768px) { + margin-left: 20px; + } + @media (min-width: 992px) { + margin-left: 20px; + } + @media (min-width: 1200px) { + margin-left: 20px; + } + color: $text2; + } + + .application-icon-link { + margin-left: auto; + } + + .application-icon { + content: url(/images/custom-themes/circles/logo.svg); + &:hover { + background-color: rgba(125, 34, 68, 0.4); + } + @media screen and (max-width: 768px) { + float: right; + } + } + + .csv-icon { + visibility: hidden; + } + + .card-body { + a:not(.dropdown-item):not(.button):not([data-test="address_hash_link"]):not( + .alert-link + ):not([data-test="token_link"]):not(#dropdown-tokens):not(.btn-line):not( + .page-link + ) { + color: $c-primary; + + &:hover { + color: $c-primary; + } + } + } + + .form-control:focus { + border-color: $c-primary; + } +} + +.circles-theme-applied .dropdown-item { + background-color: #fff !important; + color: $c-secondary !important; +} + +.circles-theme-applied .dropdown-item.active:not(.header), +.circles-theme-applied .dropdown-item:not(.header):hover, +.circles-theme-applied .dropdown-item:not(.header):focus { + background-image: none; + width: 100%; + background-color: $c-secondary !important; + color: #fff !important; +} + +.circles-theme-applied .dropdown-item.active.header, +.circles-theme-applied .dropdown-item.header:hover, +.circles-theme-applied .dropdown-item.header:focus { + background-color: $c-secondary !important; + color: #fff !important; +} + +.circles-theme-applied.modal-open .modal { + background-color: rgba(125, 34, 68, 0.4) !important; +} + +.circles-theme-applied.dark-theme-applied { + .card-tab { + color: #fff; + } + + .card-tabs { + border-bottom-color: #3f426c; + } + + .pagination-container .pagination .page-link { + color: $c-dark-text-color !important; + background-color: $c-dark-color; + &[disabled] { + border-color: $c-dark-color; + } + .no-hover { + border-color: $border; + } + } + + .tile { + border-top-color: $c-dark-color; + border-bottom-color: $c-dark-color; + border-right-color: $c-dark-color; + &:not([class^="tile tile-type"]) { + border-left-color: $c-dark-color; + } + &.tile-type-coin-balance { + border-left-color: $c-dark-color; + } + } + + .alert-info { + color: $c-dark-text-color; + border-color: $c-dark-color; + } + + .btn-dropdown-line { + border-color: $c-dark-color; + } + + .dropdown-item { + background-color: $c-dark-color !important; + color: #fff !important; + } + + .dropdown-item.active:not(.header), + .dropdown-item:not(.header):hover, + .dropdown-item:not(.header):focus { + background-image: none; + width: 100%; + background-color: $c-dark-color-secondary !important; + color: #fff !important; + } + + .dropdown-item.active.header, + .dropdown-item.header:hover, + .dropdown-item.header:focus { + background-color: $c-dark-color-secondary !important; + color: #fff !important; + } + + .navbar.navbar-primary { + .navbar-nav { + .nav-link { + &.active, + &:hover, + &.active-icon { + color: $c-dark-text-color; + } + } + } + } + + .logs-search-input, + .logs-search-btn, + .logs-search-btn-cancel { + background-color: $c-dark-color; + border-color: $c-dark-color; + } +} diff --git a/frontend-v2/src/stylesheets/theme/custom_contracts/_dark-forest-theme.scss b/frontend-v2/src/stylesheets/theme/custom_contracts/_dark-forest-theme.scss new file mode 100644 index 0000000..9b6bb55 --- /dev/null +++ b/frontend-v2/src/stylesheets/theme/custom_contracts/_dark-forest-theme.scss @@ -0,0 +1,1094 @@ +$body-dark: #080808; // body background +$dark-bg: #111111; // hero shade +$dark-light-bg: $dark-bg; // pills bg shade +$dark-light: $dark-light-bg; // tile light top share +$labels-dark: #888888; // header nav, labels + +$dark-primary: #75f94d; +$dark-secondary: $dark-primary; +$dark-primary-alternate: $dark-primary; + +.dark-forest-theme-applied { + color: #ffffff; + background-color: $body-dark; + + .dark-mode-changer--dark svg path { + fill: $dark-primary; + } + + // navbar + .navbar.navbar-primary { + background-color: $dark-light-bg !important; + } + .navbar-brand .navbar-logo { + filter: brightness(0) invert(1); + } + .navbar.navbar-primary .navbar-nav .nav-link { + color: $labels-dark; + .nav-link-icon { + svg path { + fill: $labels-dark; + } + } + &.active, + &:hover { + .nav-link-icon { + svg path { + fill: $dark-primary; + } + } + @media (min-width: 992px) { + &:before { + background-color: $dark-primary; + } + } + } + } + .navbar.navbar-primary .form-control { + background-color: $dark-light-bg !important; + border-color: $dark-light-bg !important; + color: #fff; + &::placeholder { + color: $labels-dark; + } + } + .navbar.navbar-primary .navbar-toggler .navbar-toggler-icon { + filter: invert(1); + } + + // footer + .footer { + background: $dark-light-bg; + color: $labels-dark; + } + .footer-social-icon { + color: $dark-primary !important; + } + .footer-link { + color: $labels-dark; + } + .footer-social-icon:hover, + .footer-link:hover { + color: #fff; + } + .footer-list ul li::before { + background-color: $dark-secondary; + border-radius: 0px; + height: 2px; + width: 10px; + } + + // hero stats + + .layout-container .dashboard-banner-container { + background-image: none; + background-color: $dark-bg; + } + .dashboard-banner-network-plain-container, + .dashboard-banner-network-plain-container::after { + background-color: $dark-light-bg; + } + .dashboard-banner-network-stats-label, + .dashboard-banner-chart-legend .dashboard-banner-chart-legend-label { + color: $labels-dark; + } + .dashboard-banner-chart-legend + .dashboard-banner-chart-legend-item:nth-child(1)::before { + background-color: $dark-primary; + } + .dashboard-banner-network-stats-item::before { + background-color: $dark-secondary; + } + .dashboard-banner-chart-legend + .dashboard-banner-chart-legend-item:nth-child(2)::before { + background-color: $dark-secondary; + } + + // main container, layout, cards + .layout-container main { + background-color: $body-dark; + } + + .card { + border-radius: 0px; + background-color: $dark-light-bg; + box-shadow: 0 0 30px 0 rgba(23, 24, 41, 0.5); + } + + .card-title { + @media screen and (max-width: 768px) { + margin-top: 20px; + } + } + + .card-header { + border-bottom-color: darken($labels-dark, 30); + } + + .address-detail-hash-title { + color: #fff; + } + + .card-tabs { + border-radius: 0px; + border-bottom-color: $dark-light-bg; + } + + .card-tab { + background-color: transparent; + color: #fff; + border-radius: 0px; + &:hover:not(.active) { + background-color: rgba($dark-primary, 0.15); + color: $dark-primary; + } + &.active { + background-color: $dark-primary-alternate; + color: $body-dark; + } + } + + .check_dark_forest_icon { + margin-left: 10px; + } + + .card-tab .check_dark_forest_icon { + svg path { + fill: $dark-primary; + } + } + + .card-tab.active .check_dark_forest_icon { + svg path { + fill: $body-dark; + } + } + + .card-background-1 { + background-color: $dark-light-bg; + } + + // Components + a { + color: $dark-primary-alternate; + } + + a.tile-title { + color: $dark-primary-alternate !important; + } + .card-body { + a:not(.dropdown-item):not(.button):not([data-test="address_hash_link"]):not( + .alert-link + ):not([data-test="token_link"]):not(#dropdown-tokens) { + color: $dark-primary-alternate; + + &:hover { + color: $dark-primary-alternate; + } + } + } + + .tile { + border-top-color: $labels-dark; + border-bottom-color: $labels-dark; + border-right-color: $labels-dark; + border-radius: 0px; + background-color: $dark-light-bg; + color: $labels-dark; + &:not([class^="tile tile-type"]) { + border-left-color: $labels-dark; + } + &.tile-type-coin-balance { + border-left-color: $labels-dark; + } + .tile-title { + color: #fff; + } + .tile-transaction-type-block { + background-color: transparent; + } + } + .tile-bottom-contents { + background-color: $dark-bg; + } + a.tile-title { + color: #fff !important; + } + .tile.tile-type-block .tile-transaction-type-block a { + color: #fff; + } + .fade-up-blocks-chain .tile-type-block-animation { + background-color: $dark-light; + border-top-color: $dark-light; + border-right-color: $dark-light; + border-bottom-color: $dark-light; + } + .fade-up-blocks-chain .tile-type-block-animation:after { + background-color: $dark-light; + } + .cube-animation-title { + color: $labels-dark; + } + .tile .tile-body a, + .tile span[data-address-hash] { + color: $dark-primary; + } + .fade-up-blocks-chain .tile-type-block-animation .tile-type-line-up { + background-color: $dark-primary; + } + .tile.tile-type-block { + border-left-color: $dark-primary; + } + .tile.tile-type-block .tile-status-label { + color: $dark-primary; + } + .tile.tile-type-block .tile-transaction-type-block { + border-right-color: $dark-primary; + border-top-color: $dark-primary; + border-bottom-color: $dark-primary; + } + .tile .progress { + background-color: rgba(#fff, 0.2); + } + .tile .progress .progress-bar { + background-color: $dark-primary; + } + .tile .tile-title-lg:not([data-balance-change-sign]) { + color: #fff; + } + + // btns + + .btn-line { + background-color: transparent; + border-color: $dark-primary; + color: $dark-primary; + &:hover { + border-color: $dark-primary; + background-color: $dark-primary; + color: #fff; + } + } + + .btn-copy-icon { + content: url(/images/custom-themes/dark-forest/copy-df.svg); + } + + .btn-qr-icon { + content: url(/images/custom-themes/dark-forest/qr-df.svg); + } + + .btn-copy-icon, + .btn-qr-icon, + .btn-address-card-icon { + border-radius: 0; + border: none; + border-color: $dark-primary; + &:hover { + background-color: rgba(117, 249, 77, 0.4); + } + } + + .btn-contract-icon { + border-radius: 0; + border-color: $dark-primary; + &:hover { + background-color: rgba(117, 249, 77, 0.4); + } + svg { + path { + fill: $dark-primary; + } + } + } + + // pagination + .pagination-container .pagination .page-link { + color: #fff !important; + border-color: #fff; + background-color: $dark-light-bg; + border-radius: 0px; + padding: 15px; + &:not(.no-hover):hover { + color: #fff; + border: 1px solid #fff; + background-color: $dark-primary; + path { + fill: #fff; + } + } + &[disabled] { + color: $labels-dark; + border-color: $labels-dark; + background-color: $dark-light-bg; + } + } + + // dropdown + .dropdown-menu { + background-color: $dark-light; + border-left-color: $dark-light; + border-right-color: $dark-light; + border-bottom-color: $dark-light; + } + + .dropdown-item { + color: #fff; + &:hover { + background-color: rgba(#fff, 0.1); + } + } + .dropdown-item.active { + background-color: $dark-primary; + } + .btn-dropdown-line { + background-color: $dark-light; + border-color: #fff; + color: #fff; + height: 32px; + } + + // table + .stakes-table-th { + background-color: $dark-light; + color: $labels-dark; + } + .stakes-td { + border-bottom-color: darken($labels-dark, 30); + } + .main-search-autocomplete { + background-color: $dark-light !important; + color: #fff !important; + } + .table th, + .table td { + border-top-color: darken($labels-dark, 30); + } + hr { + border-top-color: darken($labels-dark, 30); + } + + // api's + .api-anchors-list { + background-color: $dark-light; + } + .api-doc-list-item { + border-bottom-color: darken($labels-dark, 30); + } + .card-subtitle, + .api-anchors-list-item-title, + .api-doc-list-item-title { + color: #fff; + } + .api-text-monospace { + color: $dark-primary; + } + .api-text-monospace-background { + background-color: rgba($dark-primary, 0.15); + } + .badge { + border-radius: 0px; + } + .badge.badge-neutral { + background-color: rgba($dark-primary, 0.15); + color: $dark-primary; + } + .badge.badge-danger { + background-color: #fd906b; + color: $body-dark; + } + .badge.badge-success { + background-color: $dark-primary; + color: $body-dark; + } + + // download csv button + .download-all-transactions .download-all-transactions-link svg path { + fill: $dark-primary; + } + + //tooltips + .tooltip .arrow:before { + border-top-color: $dark-primary; + border-bottom-color: $dark-primary; + } + .tooltip > .tooltip-inner { + border-radius: 0px; + background-color: $dark-primary; + } + + //network select + .network-selector-overlay { + background-color: rgba($dark-bg, 0.9); + } + .network-selector { + background-color: $dark-light-bg; + } + .network-selector-title { + color: #fff; + } + .network-selector-text { + color: $labels-dark; + } + .network-selector-close path { + fill: #fff; + } + .network-selector-search-container { + background-color: $dark-light; + } + .network-selector-search-container path { + fill: $labels-dark; + } + .network-selector-search-input { + color: #fff !important; + &::placeholder { + color: $labels-dark; + } + } + .network-selector-tab { + color: $labels-dark; + &:hover, + &.active { + color: #fff; + } + &.active { + &:after { + background-color: $dark-primary; + } + } + } + .network-selector-item, + .network-selector-tabs-container { + border-bottom-color: darken($labels-dark, 30); + } + .network-selector-item-title { + color: #fff; + } + .network-selector-item-type { + color: $labels-dark; + } + .radio .radio-icon { + border-color: $labels-dark; + } + .network-selector-item-url:hover .network-selector-item-type { + color: #fff; + } + + //coin dropdown + .token-balance-dropdown.dropdown-menu { + border-color: $dark-light !important; + box-shadow: 0 0 30px 0 rgba(23, 24, 41, 0.5) !important; + } + .token-balance-dropdown .dropdown-search-icon path { + fill: $labels-dark; + } + .token-balance-dropdown .dropdown-search-field { + background-color: $dark-light; + border-color: $dark-light; + color: #fff; + &::placeholder { + color: $labels-dark; + } + } + .token-balance-dropdown[aria-labelledby="dropdown-tokens"] + .dropdown-items + .dropdown-item:hover { + color: #fff !important; + } + .dropdown-header { + color: $labels-dark; + } + .border-bottom { + border-bottom-color: darken($labels-dark, 30) !important; + } + + // coin balance history chart + .chartjs-render-monitor[data-chart="coinBalanceHistoryChart"] { + filter: brightness(0) invert(1) !important; + } + + // logs search + .logs-search-input, + .logs-search-btn, + .logs-search-btn-cancel { + background-color: $dark-light; + border-color: $dark-light; + color: #fff; + height: 32px; + border-radius: 0px; + border-color: #fff; + } + + .logs-search-btn { + border: none; + background-color: $dark-primary; + color: $body-dark; + + &:hover { + background-color: $dark-primary; + color: $body-dark; + } + } + + .logs-search-input { + &::placeholder { + color: $labels-dark; + } + } + + // code + pre { + color: #fff; + } + + // info allert + .alert-info { + color: $labels-dark; + background-color: $dark-light; + border-color: $dark-light; + } + + // dark text + .text-dark { + color: #fff !important; + } + + // Contract Verification + .new-smart-contract-container { + background-color: $dark-light-bg; + background-image: linear-gradient( + to bottom right, + $dark-light 100%, + $dark-light 100% + ); + @media (max-width: 991.98px) { + background-image: none; + } + } + .smart-contract-form-group-inner-wrapper .smart-contract-form-group-tooltip { + color: $labels-dark; + } + .smart-contract-title { + color: #fff; + } + .smart-contract-form-group-inner-wrapper > label { + color: $labels-dark; + } + .smart-contract-form-buttons { + border-top-color: darken($labels-dark, 30); + .btn-no-border { + background-color: $dark-light; + border-color: $dark-light; + color: #fff; + &:hover { + background-color: $dark-primary; + color: #fff; + } + } + } + .add-contract-libraries-wrapper { + border-top-color: darken($labels-dark, 30); + } + + .token-tile-view-more:before, + .token-tile-view-more:after { + border-top-color: darken($labels-dark, 30); + border-bottom-color: darken($labels-dark, 30); + } + + // Form Controlls + .form-control { + background-color: $dark-light; + border-color: #fff; + color: #fff; + &::placeholder { + color: $labels-dark; + } + &:focus { + background-color: $dark-light; + border-color: $dark-primary; + color: #fff; + } + } + .radio-big .radio-icon { + border-color: $labels-dark; + } + .radio-big input[type="radio"]:checked + .radio-icon { + border-color: $dark-primary; + } + .radio-big input[type="radio"]:checked + .radio-icon::before { + background: $dark-primary; + } + .radio-big .radio-text { + color: #fff; + } + + // Content loading placeholders + .tile-loader, + .table-content-loader { + background-color: rgba(117, 249, 77, 0.4) !important; + &:before { + background: linear-gradient( + to right, + rgba(117, 249, 77, 0.4) 2%, + lighten(rgba(117, 249, 77, 0.4), 3) 18%, + rgba(117, 249, 77, 0.4) 33% + ); + } + } + + // Verify other explorers + .verify-other-explorers-elem { + border-color: darken($labels-dark, 30); + .exp-logo { + border-right-color: darken($labels-dark, 30); + } + .exp-content { + h3 { + color: #fff; + } + div { + color: $labels-dark; + } + } + } + .verify-other-explorers-more { + border-color: $dark-primary; + svg path { + fill: $dark-primary; + } + &:hover { + background-color: $dark-primary; + svg path { + fill: #fff; + } + } + } + .verify-other-explorers-elem { + &:hover { + text-decoration: none; + color: #fff; + .exp-content { + h3, + div { + color: #fff; + } + } + } + } + + #explorersModal { + .modal-title { + color: #fff; + } + + .text-muted { + color: $labels-dark; + } + + .modal-footer { + border-top-color: darken($labels-dark, 30); + } + + .modal-content { + background-color: $dark-light-bg; + + .btn-primary { + background-color: $dark-primary; + border-color: $dark-primary; + &:hover { + background-color: $dark-primary; + border-color: $dark-primary; + } + } + } + + .verify-other-explorers-cell { + .exp-logo { + color: #fff; + } + } + + .close { + color: #fff; + } + } + + // API docs dropdown content + .api-doc-parameters-list-item-description, + .api-doc-parameters-list-item-title, + .api-doc-parameters-list-title, + .api-doc-list-item-controls-view-more { + color: #fff; + } + + .api-doc-parameters-list { + border-bottom-color: darken($labels-dark, 30); + } + .api-doc-parameters-container { + border-top-color: darken($labels-dark, 30); + } + .api-doc-tab { + color: $dark-primary !important; + &.active { + border-bottom-color: $dark-primary; + } + } + + // Common Buttons + .btn-secondary, + .button-secondary { + background-color: transparent; + border-color: $dark-primary; + color: $dark-primary; + &:hover { + background-color: $dark-primary; + border-color: $dark-primary; + color: #fff; + } + } + + // Decoded data + .table.thead-light.table-bordered { + color: #fff !important; + } + .table-bordered, + .table-bordered td, + .table-bordered th { + border-color: darken($labels-dark, 30); + } + .dark-forest-theme-applied .table td, + .dark-forest-theme-applied .table th, + .dark-forest-theme-applied hr { + border-top-color: darken($labels-dark, 30); + } + .btn-copy-ico svg path { + fill: #fff; + } + + // pre + .pre-scrollable.line-numbers, + .hljs { + background: $dark-light; + color: #fff; + } + + .hljs-comment { + color: $labels-dark; + } + + .hljs-title, + .hljs-section { + color: #ff2294; + } + + .hljs-type, + .hljs-string, + .hljs-number, + .hljs-selector-id, + .hljs-selector-class, + .hljs-quote, + .hljs-template-tag, + .hljs-deletion { + color: #ff2294; + } + + .hljs-literal, + .hljs-built_in, + .hljs-bullet, + .hljs-code, + .hljs-addition { + color: #20dd94; + } + + .line-numbers [data-line-number]:before { + color: #3f436b !important; + border-right-color: #3f436b !important; + } + + // 'text dark' label + .text-dark { + color: #fff; + } + + // validator info + #validatorModal { + .modal-title { + color: #fff; + } + + .text-muted { + color: $labels-dark; + } + + .modal-footer { + border-top-color: darken($labels-dark, 30); + } + + .modal-content { + background-color: $dark-light-bg; + + .btn-primary { + background-color: $dark-primary; + border-color: $dark-primary; + &:hover { + background-color: $dark-primary; + border-color: $dark-primary; + } + } + } + + .close { + color: #fff; + } + } + + #qrModal { + .modal-content { + border-radius: 0px; + + .btn-primary { + border-radius: 0px; + background-color: $dark-primary; + border-color: $dark-primary; + &:hover { + background-color: $dark-primary; + border-color: $dark-primary; + } + } + } + } + + // alerts + .alert-link { + color: $labels-dark; + } + + .alert-danger { + background-color: $dark-light; + border-color: $dark-light; + .alert-link { + color: $alert-danger-color; + } + } + + .tile .alert { + background: rgba(#000, 0.1); + } + + // primary buttons + .button { + border-radius: 0px; + } + + .btn-full-primary, + .button-primary { + background: $dark-primary; + border-color: $dark-primary; + color: #fff; + &:hover { + background: darken($dark-primary, 6); + border-color: darken($dark-primary, 6); + color: #fff; + } + } + + .logo-text { + color: #fff; + } + + .bs-label.omni { + background-color: $labels-dark; + } + + .dropdown-item { + .external-link-icon { + path { + fill: #fff; + } + } + + & { + &.active, + &:hover, + &:focus { + .external-link-icon { + path { + fill: #fff; + } + } + } + } + } + + .tooltip-inversed-color { + .tooltip-inner { + background-color: $btn-line-color !important; + color: #fff !important; + } + } + + .tooltip-inversed-color.bs-tooltip-top .arrow::before, + .tooltip-inversed-color.bs-tooltip-auto[x-placement^="top"] .arrow::before { + border-top-color: $btn-line-color !important; + } + + .tooltip-inversed-color.bs-tooltip-right .arrow::before, + .tooltip-inversed-color.bs-tooltip-auto[x-placement^="right"] .arrow::before { + border-right-color: $btn-line-color !important; + } + + .tooltip-inversed-color.bs-tooltip-bottom .arrow::before, + .tooltip-inversed-color.bs-tooltip-auto[x-placement^="bottom"] + .arrow::before { + border-bottom-color: $btn-line-color !important; + } + + .tooltip-inversed-color.bs-tooltip-left .arrow::before, + .tooltip-inversed-color.bs-tooltip-auto[x-placement^="left"] .arrow::before { + border-left-color: $btn-line-color !important; + } + + .active-dot-icon { + circle { + fill: $dark-primary; + } + } + + .tile.tile-type-coin-balance [data-balance-change-sign="Negative"] { + color: #e87293; + } + + .tile.tile-type-coin-balance [data-balance-change-sign="Positive"] { + color: $dark-primary; + } + + ::-webkit-scrollbar { + width: 12px; + } + + ::-webkit-scrollbar-track { + -webkit-box-shadow: inset 0 0 6px $dark-bg; + border-radius: 0px; + } + + ::-webkit-scrollbar-thumb { + border-radius: 0px; + background: $dark-primary; + } + + .custom-balance-icon { + content: url(/images/custom-themes/dark-forest/pic_balance.svg); + margin-right: 0px; + margin-left: auto; + max-width: 70%; + } + + .custom-dapp-header-container { + display: flex; + margin-bottom: 30px; + @media screen and (max-width: 768px) { + display: inline; + } + } + + .custom-dapp-header-description-container { + display: contents; + } + + .custom-address-icon { + content: url(/images/custom-themes/dark-forest/dark_forest_logo.svg); + + @media screen and (max-width: 768px) { + margin-bottom: 20px; + } + } + + .custom-address-details { + margin-top: 8px; + @media (min-width: 576px) { + margin-left: 0; + } + @media (min-width: 768px) { + margin-left: 20px; + } + @media (min-width: 992px) { + margin-left: 20px; + } + @media (min-width: 1200px) { + margin-left: 20px; + } + color: $labels-dark; + } + + .application-icon-link { + margin-left: auto; + } + + .application-icon { + content: url(/images/custom-themes/dark-forest/planet.svg); + &:hover { + background-color: rgba(117, 249, 77, 0.4); + } + @media screen and (max-width: 768px) { + float: right; + } + } + + .csv-icon { + visibility: hidden; + } +} + +.navbar-dark .navbar-toggler { + color: rgba(255, 255, 255, 0.5); + border: none; +} + +.dark-forest-theme-applied .dropdown-item { + background-color: $dark-light !important; + color: #fff !important; +} + +.dark-forest-theme-applied .dropdown-item.active:not(.header), +.dark-forest-theme-applied .dropdown-item:not(.header):hover, +.dark-forest-theme-applied .dropdown-item:not(.header):focus { + background-image: none; + width: 100%; + background-color: rgba(117, 249, 77, 0.4) !important; +} + +.dark-forest-theme-applied .dropdown-item.active.header, +.dark-forest-theme-applied .dropdown-item.header:hover, +.dark-forest-theme-applied .dropdown-item.header:focus { + background-color: $dark-light !important; +} + +.dark-forest-theme-applied.modal-open .modal { + background-color: $dark-bg !important; +} + +@media (max-width: 991.98px) { + .dark-forest-theme-applied .navbar.navbar-primary .navbar-nav .nav-link:hover, + .dark-forest-theme-applied + .navbar.navbar-primary + .navbar-nav + .nav-link.activeLink, + .dark-forest-theme-applied + .navbar.navbar-primary + .navbar-nav + .nav-link:focus { + background-color: $dark-light-bg !important; + } + .dark-forest-theme-applied .dropdown-item:hover:before { + content: none; + color: $dark-primary !important; + } + .dark-forest-theme-applied + .navbar.navbar-primary + .navbar-nav + .nav-link:hover:before { + content: none; + color: $dark-primary !important; + } +} diff --git a/frontend-v2/src/styletron.ts b/frontend-v2/src/styletron.ts new file mode 100644 index 0000000..2207be0 --- /dev/null +++ b/frontend-v2/src/styletron.ts @@ -0,0 +1,12 @@ +import { Client, Server } from "styletron-engine-atomic"; + +const getHydrateClass = () => + document.getElementsByClassName("_styletron_hydrate_"); + +export const styletron = + typeof window === "undefined" + ? new Server() + : new Client({ + // @ts-ignore + hydrate: getHydrateClass(), + }); diff --git a/frontend-v2/src/token-container/data/query.ts b/frontend-v2/src/token-container/data/query.ts new file mode 100644 index 0000000..850370a --- /dev/null +++ b/frontend-v2/src/token-container/data/query.ts @@ -0,0 +1,38 @@ +import { gql } from "@apollo/client"; + +export const queryTokens = gql` + query Tokens( + $after: String + $first: Float + $before: String + $last: Float + $symbol: String + ) { + tokens( + after: $after + first: $first + before: $before + last: $last + symbol: $symbol + ) { + edges { + cursor + node { + name + symbol + totalSupply + decimals + type + contractAddress + skipMetadata + } + } + pageInfo { + startCursor + endCursor + hasNextPage + hasPreviousPage + } + } + } +`; diff --git a/frontend-v2/src/token-container/hooks/use-query-tokens.ts b/frontend-v2/src/token-container/hooks/use-query-tokens.ts new file mode 100644 index 0000000..c911f89 --- /dev/null +++ b/frontend-v2/src/token-container/hooks/use-query-tokens.ts @@ -0,0 +1,32 @@ +import { useQuery } from "@apollo/client"; +import { queryTokens } from "@/shared/token-container/data/query"; +import { Tokens } from "@/shared/token-container/data/__generated__/Tokens"; + +const pageSize = 50; + +export const useQueryTokens = (querySymbol: string) => { + const { data, loading, fetchMore } = useQuery(queryTokens, { + ssr: false, + variables: { + after: "0", + first: pageSize, + symbol: querySymbol, + }, + }); + return { + tokensFetchMore: async (cursor?: string | null, symbol?: string) => { + if (!cursor) { + return; + } + await fetchMore({ + variables: { + after: cursor, + first: pageSize, + symbol, + }, + }); + }, + tokensData: data, + tokensLoading: loading, + }; +}; diff --git a/frontend-v2/src/token-container/selectors/select-tokens.ts b/frontend-v2/src/token-container/selectors/select-tokens.ts new file mode 100644 index 0000000..4f18bef --- /dev/null +++ b/frontend-v2/src/token-container/selectors/select-tokens.ts @@ -0,0 +1,9 @@ +import { Tokens } from "@/shared/token-container/data/__generated__/Tokens"; + +export const selectTokens = (tks?: Tokens) => { + return { + tokens: tks?.tokens?.edges?.map((ed) => ed?.node), + currentCursor: tks?.tokens?.edges?.at(0)?.cursor, + hasNextPage: tks?.tokens?.pageInfo?.hasNextPage, + }; +}; diff --git a/frontend-v2/src/token-container/tokens-container.tsx b/frontend-v2/src/token-container/tokens-container.tsx new file mode 100644 index 0000000..479d501 --- /dev/null +++ b/frontend-v2/src/token-container/tokens-container.tsx @@ -0,0 +1,279 @@ +import React, { useState } from "react"; +import { useQueryTokens } from "@/shared/token-container/hooks/use-query-tokens"; +import { selectTokens } from "@/shared/token-container/selectors/select-tokens"; +import { shortenHash } from "@/shared/common/shorten-hash"; +import { useRouter } from "next/router"; +import { assetURL } from "@/shared/common/asset-url"; +import Link from "next/link"; + +export const TokensContainer = () => { + const router = useRouter(); + const searchParams = router.query; + const querySymbol = searchParams["symbol"]; + + const [symbol, setSymbol] = useState(String(querySymbol ?? "").toUpperCase()); + + const updateSymbol = (s: string) => { + // Create a new URLSearchParams object + const p = new URLSearchParams(location.search); + // Set the new query value + p.set("symbol", s); + // Update the URL with the new query string + router.push({ search: p.toString() }); + setSymbol(s); + }; + + const { tokensData, tokensFetchMore } = useQueryTokens(symbol); + const { tokens, currentCursor, hasNextPage } = selectTokens(tokensData); + + const handleKeyUp = async (event: any) => { + if (event.key === "Enter") { + const uppercase = String(event.target.value).toUpperCase(); + updateSymbol(uppercase); + await tokensFetchMore("0", uppercase); + } + }; + + return ( +
    +

    +

    +
    + +
    +
    +

    Tokens

    + +
    +
    + + + + + + + + {/* */} + + {/* */} + + + + {tokens?.map((t) => ( + + + + + + + + + + {/* */} + + {/* */} + + ))} + +
    +
     
    +
    +
     
    +
    +
    Token
    +
    +
    Address
    +
    */} + {/*
    */} + {/* Circulating Market Cap */} + {/*
    */} + {/*
    +
    + Total Supply +
    +
    */} + {/*
    */} + {/* Holders Count */} + {/*
    */} + {/*
    + + + + {t?.name} ({t?.symbol}) + + + + + + + {t?.name} + + + {t?.name} + + + {" "} + ({shortenHash(t?.contractAddress)}) + + + + + */} + {/* */} + {/* N/A */} + {/* */} + {/* + + {Number(t?.totalSupply).toLocaleString()} + {" "} + {t?.symbol} + */} + {/* */} + {/* ?? */} + {/* */} + {/*
    +
    +
    + +
    +
      +
    • + + Page {currentCursor} + +
    • + + {hasNextPage && ( +
    • + { + return tokensFetchMore( + tokensData?.tokens?.pageInfo?.endCursor, + symbol, + ); + }} + data-next-page-button="" + > + + + + +
    • + )} +
    +
    +
    +
    +
    +
    + ); +}; diff --git a/frontend-v2/src/tx-details-container/data/query-tx.ts b/frontend-v2/src/tx-details-container/data/query-tx.ts new file mode 100644 index 0000000..376d4a6 --- /dev/null +++ b/frontend-v2/src/tx-details-container/data/query-tx.ts @@ -0,0 +1,30 @@ +import { gql } from "@apollo/client"; + +export const queryTx = gql` + query QueryTx($hash: Buffer!) { + transaction(hash: $hash) { + id + timestamp + hash + blockNumber + value + gasUsed + cumulativeGasUsed + error + fromAddressHash + toAddressHash + status + gas + gasPrice + index + input + nonce + r + s + v + revertReason + maxPriorityFeePerGas + maxFeePerGas + } + } +`; diff --git a/frontend-v2/src/tx-details-container/hooks/use-query-tx.ts b/frontend-v2/src/tx-details-container/hooks/use-query-tx.ts new file mode 100644 index 0000000..1ff2130 --- /dev/null +++ b/frontend-v2/src/tx-details-container/hooks/use-query-tx.ts @@ -0,0 +1,18 @@ +import { useQuery } from "@apollo/client"; +import { queryTx } from "@/shared/tx-details-container/data/query-tx"; +import { QueryTx } from "../data/__generated__/QueryTx"; + +export const useQueryTx = ({ hash }: { hash: string }) => { + const { data, loading, error, refetch } = useQuery(queryTx, { + ssr: false, + variables: { + hash, + }, + }); + return { + data, + loading, + error, + refetch, + }; +}; diff --git a/frontend-v2/src/tx-details-container/tx-details-container.tsx b/frontend-v2/src/tx-details-container/tx-details-container.tsx new file mode 100644 index 0000000..09657ee --- /dev/null +++ b/frontend-v2/src/tx-details-container/tx-details-container.tsx @@ -0,0 +1,520 @@ +import * as React from "react"; +import { useQueryTx } from "@/shared/tx-details-container/hooks/use-query-tx"; +import { TxStatus } from "@/shared/explorer-components/tx-status"; +import { normalizeTokenValue } from "@/shared/common/normalize-token-value"; +import { getGasUsedPercent } from "@/shared/common/get-gas-used-percent"; +import { CopyToClipboard } from "@/shared/explorer-components/copy-to-clipboard"; +import { TickingTs } from "@/shared/explorer-components/ticking-ts"; +import format from "date-fns/format"; +import { useChainConfig } from "@/shared/common/use-chain-config"; + +import { assetURL } from "@/shared/common/asset-url"; +import { DataInput } from "../explorer-components/data-input"; +import { useTranslation } from "next-i18next"; +import Link from "next/link"; +import { useRouter } from "next/router"; + +export function TxDetailsContainer(): JSX.Element { + const { t } = useTranslation("common"); + const router = useRouter(); + const params = router.query; + const chainConfig = useChainConfig(); + function divDecimals(num?: string | null): string { + if (!num) { + return "0"; + } + return (Number(num) / 10 ** chainConfig.decimals) + .toFixed(20) + .replace(/\.?0*$/, ""); + } + const { data, loading, error, refetch } = useQueryTx({ + hash: params.txHash as string, + }); + if (loading) { + // TODO(dora): + return <>; + } + if (error && error.graphQLErrors[0]?.extensions?.code === "NOT_FOUND") { + // TODO(dora): + return ( + <> + Transaction not found + + + ); + } + + const tx = data?.transaction; + let txFee = "0"; + try { + txFee = (Number(tx?.gasUsed ?? 0) * Number(tx?.gasPrice ?? 0)).toString(); + } catch (err) { + console.error(`failed to calc txFee: ${err}`); + } + + return ( +
    +

    +

    +

    +
    +
    +
    +
    +
    +

    +
    + {t("tx.tx_details")} +
    +

    + +
    +
    + + {" "} + + {t("tx.tx_hash")} +
    +
    + + {tx?.hash}{" "} + + + +
    +
    +
    +
    + + {" "} + + {t("tx.result")} +
    +
    + +
    +
    +
    +
    + + {" "} + + {t("tx.status")} +
    +
    + + +
    + Confirmed +
    +
    + + {/* + + //TODO(dora) confirmed by how many blocks? + + Confirmed by{" "} + 594{" "} + blocks + + */} +
    +
    +
    +
    +
    + + {" "} + + {t("tx.block")} +
    +
    + + {tx?.blockNumber} + +
    +
    +
    +
    + + {" "} + + {t("tx.timestamp")} +
    +
    + {" "} + + + {" | "} + {format( + new Date(tx?.timestamp), + "MMM-d-y hh:mm:ss a x", + )}{" "} + UTC + +
    +
    +
    +
    + + {" "} + + {t("tx.from")} +
    +
    + + {tx?.fromAddressHash} + + + +
    +
    +
    +
    + + {" "} + + {t("tx.to")} +
    +
    + + {tx?.toAddressHash} + + + +
    +
    +
    +
    + + {" "} + + {t("tx.value")} +
    +
    + {" "} + {normalizeTokenValue(tx?.value)} {chainConfig.symbol} + {/* + TODO(dora): coin balance price + + ( + + $0.252982 USD + + ) + */} +
    +
    +
    +
    + + {" "} + + {t("tx.fee")} +
    +
    + {txFee} Gwei + {/* + TODO(dora): + ( + + $0.000042 USD + + ) + + */} +
    +
    +
    +
    + + {" "} + + {t("tx.gas_price")} +
    +
    + {" "} + {divDecimals(tx?.gasPrice)} {chainConfig.symbol}{" "} +
    +
    +
    +
    + + {" "} + + {t("tx.tx_type")} +
    +
    0
    +
    +
    +
    +
    + + {" "} + + {t("tx.gas_limit")} +
    +
    + {" "} + {Number(tx?.gas).toLocaleString()}{" "} +
    +
    +
    +
    + + {" "} + + {t("tx.max_fee_per_gas")} +
    +
    + {" "} + {divDecimals(tx?.maxFeePerGas)} {chainConfig.symbol} +
    +
    + +
    +
    + + {" "} + + Max Priority Fee per Gas +
    +
    + {" "} + {divDecimals(tx?.maxPriorityFeePerGas)}{" "} + {chainConfig.symbol} +
    +
    + +
    +
    + + {" "} + + {t("tx.gas_used")} +
    +
    + {" "} + {tx?.gasUsed} | {getGasUsedPercent(tx?.gasUsed, tx?.gas)}% +
    +
    +
    +
    + + {" "} + + {t("tx.nonce")} + + {t("tx.pos")} + +
    +
    + {" "} + {tx?.nonce} + {tx?.index}{" "} +
    +
    + +
    +
    + + {" "} + + {t("tx.raw_input")} +
    +
    + +
    +
    +
    +
    +
    +
    +
    + + {/* TODO(dora): more tx info */} +
    +
    + ); +} diff --git a/frontend-v2/src/txs-table-container/txs-table-container.tsx b/frontend-v2/src/txs-table-container/txs-table-container.tsx new file mode 100644 index 0000000..ae10f3b --- /dev/null +++ b/frontend-v2/src/txs-table-container/txs-table-container.tsx @@ -0,0 +1,138 @@ +import React, { useState } from "react"; +import { useGetTxs } from "@/shared/block-details-container/hooks/use-get-txs"; +import { TxsList } from "@/shared/explorer-components/txs-list"; +import { Pagination } from "@/shared/explorer-components/pagination"; + +import { paginationProcessTotalNumPage } from "@/shared/common/functions/paginations"; +import { useTranslation } from "next-i18next"; +import { useRouter } from "next/router"; + +export const TxsTableContainer: React.FC = () => { + const { t } = useTranslation("common"); + return ( +
    +

    +

    +

    +
    +
    +

    + Validated Transactions +

    + +
    +
    + + Connection Lost, click to load newer transactions + +
    +
    + + +
    +
    +
    +
    + ); +}; + +const TableWithPagination = () => { + const router = useRouter(); + const search = router.query; + const initialPage = Number(search.page) || 1; + const [curPage, setCurPage] = useState(initialPage); + const pageSize = 20; + + const { t } = useTranslation("common"); + + const setCurPageWithSideEffect = async (p: number) => { + setCurPage(p); + await router.push({ search: `?page=${p}` }); + }; + const { data, loading, error, refetch } = useGetTxs( + { first: pageSize, after: (curPage - 1) * pageSize }, + {}, + ); + if (loading) { + // TODO(dora) + return <>; + } + + const txs = data?.transactions?.edges?.map((e) => e?.node); + + const numPage = paginationProcessTotalNumPage(data?.transactions); + + return ( + <> + {error && ( + + )} + + {!txs?.length && ( +
    +
    + + There are no transactions. + +
    +
    + )} + + {txs && txs?.length > 0 ? ( + <> + + +
    + +
    + + + + ) : ( + <> +
    +
    + + There are no transactions. + +
    +
    + + )} + + ); +}; diff --git a/frontend-v2/styles/Home.module.css b/frontend-v2/styles/Home.module.css new file mode 100644 index 0000000..e69de29 diff --git a/frontend-v2/styles/globals.css b/frontend-v2/styles/globals.css new file mode 100644 index 0000000..e69de29 diff --git a/frontend-v2/tsconfig.json b/frontend-v2/tsconfig.json new file mode 100644 index 0000000..2092dff --- /dev/null +++ b/frontend-v2/tsconfig.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "incremental": true, + "paths": { + "@/shared/*": ["./src/*"], + }, + }, + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], + "exclude": ["node_modules"], +} diff --git a/frontend-v2/yarn.lock b/frontend-v2/yarn.lock new file mode 100644 index 0000000..c71e2ea --- /dev/null +++ b/frontend-v2/yarn.lock @@ -0,0 +1,3353 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@apollo/client@^3.7.1": + version "3.7.1" + resolved "https://registry.yarnpkg.com/@apollo/client/-/client-3.7.1.tgz#86ce47c18a0714e229231148b0306562550c2248" + integrity sha512-xu5M/l7p9gT9Fx7nF3AQivp0XukjB7TM7tOd5wifIpI8RskYveL4I+rpTijzWrnqCPZabkbzJKH7WEAKdctt9w== + dependencies: + "@graphql-typed-document-node/core" "^3.1.1" + "@wry/context" "^0.7.0" + "@wry/equality" "^0.5.0" + "@wry/trie" "^0.3.0" + graphql-tag "^2.12.6" + hoist-non-react-statics "^3.3.2" + optimism "^0.16.1" + prop-types "^15.7.2" + response-iterator "^0.2.6" + symbol-observable "^4.0.0" + ts-invariant "^0.10.3" + tslib "^2.3.0" + zen-observable-ts "^1.2.5" + +"@babel/runtime@^7.12.1", "@babel/runtime@^7.14.5", "@babel/runtime@^7.17.2", "@babel/runtime@^7.18.9", "@babel/runtime@^7.9.2": + version "7.20.1" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.1.tgz#1148bb33ab252b165a06698fde7576092a78b4a9" + integrity sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg== + dependencies: + regenerator-runtime "^0.13.10" + +"@babel/runtime@^7.23.2": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.1.tgz#431f9a794d173b53720e69a6464abc6f0e2a5c57" + integrity sha512-+BIznRzyqBf+2wCTxcKE3wDjfGeCoVE61KSHGpkzqrLi8qxqFwBeUFyId2cxkTmm55fzDGnm0+yCxaxygrLUnQ== + dependencies: + regenerator-runtime "^0.14.0" + +"@eslint/eslintrc@^1.3.3": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.3.tgz#2b044ab39fdfa75b4688184f9e573ce3c5b0ff95" + integrity sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.4.0" + globals "^13.15.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@fortawesome/fontawesome-free@^6.2.1": + version "6.2.1" + resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-6.2.1.tgz#344baf6ff9eaad7a73cff067d8c56bfc11ae5304" + integrity sha512-viouXhegu/TjkvYQoiRZK3aax69dGXxgEjpvZW81wIJdxm5Fnvp3VVIP4VHKqX4SvFw6qpmkILkD4RJWAdrt7A== + +"@graphql-typed-document-node/core@^3.1.1": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@graphql-typed-document-node/core/-/core-3.1.1.tgz#076d78ce99822258cf813ecc1e7fa460fa74d052" + integrity sha512-NQ17ii0rK1b34VZonlmT2QMJFI70m0TRwbknO/ihlbatXyaktDhN/98vBiUU6kNBPljqGqyIrl2T4nY2RpFANg== + +"@humanwhocodes/config-array@^0.11.6": + version "0.11.7" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.7.tgz#38aec044c6c828f6ed51d5d7ae3d9b9faf6dbb0f" + integrity sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw== + dependencies: + "@humanwhocodes/object-schema" "^1.2.1" + debug "^4.1.1" + minimatch "^3.0.5" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/object-schema@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== + +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== + dependencies: + string-width "^5.1.2" + string-width-cjs "npm:string-width@^4.2.0" + strip-ansi "^7.0.1" + strip-ansi-cjs "npm:strip-ansi@^6.0.1" + wrap-ansi "^8.1.0" + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" + +"@next/env@14.1.4": + version "14.1.4" + resolved "https://registry.yarnpkg.com/@next/env/-/env-14.1.4.tgz#432e80651733fbd67230bf262aee28be65252674" + integrity sha512-e7X7bbn3Z6DWnDi75UWn+REgAbLEqxI8Tq2pkFOFAMpWAWApz/YCUhtWMWn410h8Q2fYiYL7Yg5OlxMOCfFjJQ== + +"@next/eslint-plugin-next@14.1.4": + version "14.1.4" + resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-14.1.4.tgz#d7372b5ffede0e466af8af2ff534386418827fc8" + integrity sha512-n4zYNLSyCo0Ln5b7qxqQeQ34OZKXwgbdcx6kmkQbywr+0k6M3Vinft0T72R6CDAcDrne2IAgSud4uWCzFgc5HA== + dependencies: + glob "10.3.10" + +"@next/swc-darwin-arm64@14.1.4": + version "14.1.4" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.1.4.tgz#a3bca0dc4393ac4cf3169bbf24df63441de66bb7" + integrity sha512-ubmUkbmW65nIAOmoxT1IROZdmmJMmdYvXIe8211send9ZYJu+SqxSnJM4TrPj9wmL6g9Atvj0S/2cFmMSS99jg== + +"@next/swc-darwin-x64@14.1.4": + version "14.1.4" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-14.1.4.tgz#ba3683d4e2d30099f3f2864dd7349a4d9f440140" + integrity sha512-b0Xo1ELj3u7IkZWAKcJPJEhBop117U78l70nfoQGo4xUSvv0PJSTaV4U9xQBLvZlnjsYkc8RwQN1HoH/oQmLlQ== + +"@next/swc-linux-arm64-gnu@14.1.4": + version "14.1.4" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.1.4.tgz#3519969293f16379954b7e196deb0c1eecbb2f8b" + integrity sha512-457G0hcLrdYA/u1O2XkRMsDKId5VKe3uKPvrKVOyuARa6nXrdhJOOYU9hkKKyQTMru1B8qEP78IAhf/1XnVqKA== + +"@next/swc-linux-arm64-musl@14.1.4": + version "14.1.4" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.1.4.tgz#4bb3196bd402b3f84cf5373ff1021f547264d62f" + integrity sha512-l/kMG+z6MB+fKA9KdtyprkTQ1ihlJcBh66cf0HvqGP+rXBbOXX0dpJatjZbHeunvEHoBBS69GYQG5ry78JMy3g== + +"@next/swc-linux-x64-gnu@14.1.4": + version "14.1.4" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.1.4.tgz#1b3372c98c83dcdab946cdb4ee06e068b8139ba3" + integrity sha512-BapIFZ3ZRnvQ1uWbmqEGJuPT9cgLwvKtxhK/L2t4QYO7l+/DxXuIGjvp1x8rvfa/x1FFSsipERZK70pewbtJtw== + +"@next/swc-linux-x64-musl@14.1.4": + version "14.1.4" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.1.4.tgz#8459088bdc872648ff78f121db596f2533df5808" + integrity sha512-mqVxTwk4XuBl49qn2A5UmzFImoL1iLm0KQQwtdRJRKl21ylQwwGCxJtIYo2rbfkZHoSKlh/YgztY0qH3wG1xIg== + +"@next/swc-win32-arm64-msvc@14.1.4": + version "14.1.4" + resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.1.4.tgz#84280a08c00cc3be24ddd3a12f4617b108e6dea6" + integrity sha512-xzxF4ErcumXjO2Pvg/wVGrtr9QQJLk3IyQX1ddAC/fi6/5jZCZ9xpuL9Tzc4KPWMFq8GGWFVDMshZOdHGdkvag== + +"@next/swc-win32-ia32-msvc@14.1.4": + version "14.1.4" + resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.1.4.tgz#23ff7f4bd0a27177428669ef6fa5c3923c738031" + integrity sha512-WZiz8OdbkpRw6/IU/lredZWKKZopUMhcI2F+XiMAcPja0uZYdMTZQRoQ0WZcvinn9xZAidimE7tN9W5v9Yyfyw== + +"@next/swc-win32-x64-msvc@14.1.4": + version "14.1.4" + resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.1.4.tgz#bccf5beccfde66d6c66fa4e2509118c796385eda" + integrity sha512-4Rto21sPfw555sZ/XNLqfxDUNeLhNYGO2dlPqsnuCg8N8a2a9u1ltqBOPQ4vj1Gf7eJC0W2hHG2eYUHuiXgY2w== + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@pkgjs/parseargs@^0.11.0": + version "0.11.0" + resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" + integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== + +"@pkgr/utils@^2.3.1": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@pkgr/utils/-/utils-2.3.1.tgz#0a9b06ffddee364d6642b3cd562ca76f55b34a03" + integrity sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw== + dependencies: + cross-spawn "^7.0.3" + is-glob "^4.0.3" + open "^8.4.0" + picocolors "^1.0.0" + tiny-glob "^0.2.9" + tslib "^2.4.0" + +"@rtsao/csstype@2.6.5-forked.0": + version "2.6.5-forked.0" + resolved "https://registry.yarnpkg.com/@rtsao/csstype/-/csstype-2.6.5-forked.0.tgz#b5b4e2a07ad83a91874ebf5fabdb73dc8c1632f6" + integrity sha512-0HwnY8uPWcCloTgdbbaJG3MbDUfNf6yKWZfCKxFv9yj2Sbp4mSKaIjC7Cr/5L4hMxvrrk85CU3wlAg7EtBBJ1Q== + +"@rushstack/eslint-patch@^1.3.3": + version "1.8.0" + resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.8.0.tgz#c5545e6a5d2bd5c26b4021c357177a28698c950e" + integrity sha512-0HejFckBN2W+ucM6cUOlwsByTKt9/+0tWhqUffNIcHqCXkthY/mZ7AuYPK/2IIaGWhdl0h+tICDO0ssLMd6XMQ== + +"@swc/helpers@0.5.2": + version "0.5.2" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.2.tgz#85ea0c76450b61ad7d10a37050289eded783c27d" + integrity sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw== + dependencies: + tslib "^2.4.0" + +"@tarekraafat/autocomplete.js@^10.2.7": + version "10.2.7" + resolved "https://registry.yarnpkg.com/@tarekraafat/autocomplete.js/-/autocomplete.js-10.2.7.tgz#dca809890cec322379a2b430632d46a14f9f2f91" + integrity sha512-iE+dnXI8/LrTaSORrnNdSyXg/bFCbCpz/R5GUdB3ioW+9PVEhglxNcSDQNeCXtrbRG0kOBFUd4unEiwcmqyn8A== + +"@types/hoist-non-react-statics@^3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f" + integrity sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA== + dependencies: + "@types/react" "*" + hoist-non-react-statics "^3.3.0" + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== + +"@types/minimatch@^3.0.3": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" + integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== + +"@types/node@18.11.9": + version "18.11.9" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.9.tgz#02d013de7058cea16d36168ef2fc653464cfbad4" + integrity sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg== + +"@types/prop-types@*": + version "15.7.5" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" + integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== + +"@types/react-dom@18.0.9": + version "18.0.9" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.0.9.tgz#ffee5e4bfc2a2f8774b15496474f8e7fe8d0b504" + integrity sha512-qnVvHxASt/H7i+XG1U1xMiY5t+IHcPGUK7TDMDzom08xa7e86eCeKOiLZezwCKVxJn6NEiiy2ekgX8aQssjIKg== + dependencies: + "@types/react" "*" + +"@types/react-outside-click-handler@^1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@types/react-outside-click-handler/-/react-outside-click-handler-1.3.1.tgz#e4772ba550e1a548468203194d2615d8f06acdf9" + integrity sha512-0BNan5zIIDyO5k9LFSG+60ZxQ/0wf+LTF9BJx3oOUdOaJlZk6RCe52jRB75mlvLLJx2YLa61+NidOwBfptWMKw== + dependencies: + "@types/react" "*" + +"@types/react@*", "@types/react@18.0.25": + version "18.0.25" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.25.tgz#8b1dcd7e56fe7315535a4af25435e0bb55c8ae44" + integrity sha512-xD6c0KDT4m7n9uD4ZHi02lzskaiqcBxf4zi+tXZY98a04wvc0hi/TcCPC2FOESZi51Nd7tlUeOJY8RofL799/g== + dependencies: + "@types/prop-types" "*" + "@types/scheduler" "*" + csstype "^3.0.2" + +"@types/scheduler@*": + version "0.16.2" + resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" + integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== + +"@types/styletron-react@^5.0.3": + version "5.0.3" + resolved "https://registry.yarnpkg.com/@types/styletron-react/-/styletron-react-5.0.3.tgz#54d6e9acefb692355b35132b9f5276cc5cac00f6" + integrity sha512-mNM8WrFrCYWXNxudjdMMeHZmGdXLfVF/fQmj1Qnz7E99niL2d7IcQubbx731FX3YEVGoF9Au1J6uBkPoEzqypw== + dependencies: + "@types/react" "*" + "@types/styletron-standard" "*" + +"@types/styletron-standard@*": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@types/styletron-standard/-/styletron-standard-2.0.2.tgz#1e4f1977555e0b4612af0f5f420e8c777640b124" + integrity sha512-ZpPB8k2Yhskq/oggg2wjWeP/bBxRDfwIzRrHbdksVOQXfHOLf4rRqs2tlWLK/NRJvWU3E3MlXeNcoVSZjuAPiQ== + dependencies: + csstype "^3.0.2" + +"@types/use-sync-external-store@^0.0.3": + version "0.0.3" + resolved "https://registry.yarnpkg.com/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz#b6725d5f4af24ace33b36fafd295136e75509f43" + integrity sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA== + +"@typescript-eslint/parser@^5.4.2 || ^6.0.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.21.0.tgz#af8fcf66feee2edc86bc5d1cf45e33b0630bf35b" + integrity sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ== + dependencies: + "@typescript-eslint/scope-manager" "6.21.0" + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/typescript-estree" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz#ea8a9bfc8f1504a6ac5d59a6df308d3a0630a2b1" + integrity sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg== + dependencies: + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" + +"@typescript-eslint/types@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.21.0.tgz#205724c5123a8fef7ecd195075fa6e85bac3436d" + integrity sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg== + +"@typescript-eslint/typescript-estree@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz#c47ae7901db3b8bddc3ecd73daff2d0895688c46" + integrity sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ== + dependencies: + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + minimatch "9.0.3" + semver "^7.5.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/visitor-keys@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz#87a99d077aa507e20e238b11d56cc26ade45fe47" + integrity sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A== + dependencies: + "@typescript-eslint/types" "6.21.0" + eslint-visitor-keys "^3.4.1" + +"@wry/context@^0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@wry/context/-/context-0.7.0.tgz#be88e22c0ddf62aeb0ae9f95c3d90932c619a5c8" + integrity sha512-LcDAiYWRtwAoSOArfk7cuYvFXytxfVrdX7yxoUmK7pPITLk5jYh2F8knCwS7LjgYL8u1eidPlKKV6Ikqq0ODqQ== + dependencies: + tslib "^2.3.0" + +"@wry/equality@^0.5.0": + version "0.5.3" + resolved "https://registry.yarnpkg.com/@wry/equality/-/equality-0.5.3.tgz#fafebc69561aa2d40340da89fa7dc4b1f6fb7831" + integrity sha512-avR+UXdSrsF2v8vIqIgmeTY0UR91UT+IyablCyKe/uk22uOJ8fusKZnH9JH9e1/EtLeNJBtagNmL3eJdnOV53g== + dependencies: + tslib "^2.3.0" + +"@wry/trie@^0.3.0": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@wry/trie/-/trie-0.3.2.tgz#a06f235dc184bd26396ba456711f69f8c35097e6" + integrity sha512-yRTyhWSls2OY/pYLfwff867r8ekooZ4UI+/gxot5Wj8EFwSf2rG+n+Mo/6LoLQm1TKA4GRj2+LCpbfS937dClQ== + dependencies: + tslib "^2.3.0" + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn@^8.8.0: + version "8.8.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.1.tgz#0a3f9cbecc4ec3bea6f0a80b66ae8dd2da250b73" + integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA== + +airbnb-prop-types@^2.15.0: + version "2.16.0" + resolved "https://registry.yarnpkg.com/airbnb-prop-types/-/airbnb-prop-types-2.16.0.tgz#b96274cefa1abb14f623f804173ee97c13971dc2" + integrity sha512-7WHOFolP/6cS96PhKNrslCLMYAI8yB1Pp6u6XmxozQOiZbsI5ycglZr5cHhBFfuRcQQjzCMith5ZPZdYiJCxUg== + dependencies: + array.prototype.find "^2.1.1" + function.prototype.name "^1.1.2" + is-regex "^1.1.0" + object-is "^1.1.2" + object.assign "^4.1.0" + object.entries "^1.1.2" + prop-types "^15.7.2" + prop-types-exact "^1.2.0" + react-is "^16.13.1" + +ajv@^6.10.0, ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-regex@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" + integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^6.1.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + +anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +aria-query@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e" + integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A== + dependencies: + dequal "^2.0.3" + +array-buffer-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" + integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== + dependencies: + call-bind "^1.0.5" + is-array-buffer "^3.0.4" + +array-differ@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b" + integrity sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg== + +array-includes@^3.1.5, array-includes@^3.1.6: + version "3.1.6" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f" + integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + get-intrinsic "^1.1.3" + is-string "^1.0.7" + +array-includes@^3.1.7: + version "3.1.8" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.8.tgz#5e370cbe172fdd5dd6530c1d4aadda25281ba97d" + integrity sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.4" + is-string "^1.0.7" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array.prototype.find@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/array.prototype.find/-/array.prototype.find-2.2.1.tgz#769b8182a0b535c3d76ac025abab98ba1e12467b" + integrity sha512-I2ri5Z9uMpMvnsNrHre9l3PaX+z9D0/z6F7Yt2u15q7wt0I62g5kX6xUKR1SJiefgG+u2/gJUmM8B47XRvQR6w== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" + +array.prototype.findlast@^1.2.4: + version "1.2.5" + resolved "https://registry.yarnpkg.com/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz#3e4fbcb30a15a7f5bf64cf2faae22d139c2e4904" + integrity sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-shim-unscopables "^1.0.2" + +array.prototype.findlastindex@^1.2.3: + version "1.2.5" + resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz#8c35a755c72908719453f87145ca011e39334d0d" + integrity sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-shim-unscopables "^1.0.2" + +array.prototype.flat@^1.3.1, array.prototype.flat@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18" + integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + +array.prototype.flatmap@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" + integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + +array.prototype.toreversed@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz#b989a6bf35c4c5051e1dc0325151bf8088954eba" + integrity sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + +array.prototype.tosorted@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz#c8c89348337e51b8a3c48a9227f9ce93ceedcba8" + integrity sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg== + dependencies: + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.1.0" + es-shim-unscopables "^1.0.2" + +arraybuffer.prototype.slice@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6" + integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A== + dependencies: + array-buffer-byte-length "^1.0.1" + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.2.1" + get-intrinsic "^1.2.3" + is-array-buffer "^3.0.4" + is-shared-array-buffer "^1.0.2" + +arrify@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" + integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== + +ast-types-flow@^0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.8.tgz#0a85e1c92695769ac13a428bb653e7538bea27d6" + integrity sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ== + +available-typed-arrays@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" + integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== + dependencies: + possible-typed-array-names "^1.0.0" + +axe-core@=4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.7.0.tgz#34ba5a48a8b564f67e103f0aa5768d76e15bbbbf" + integrity sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ== + +axobject-query@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-3.2.1.tgz#39c378a6e3b06ca679f29138151e45b2b32da62a" + integrity sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg== + dependencies: + dequal "^2.0.3" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +bootstrap@^4.6.1: + version "4.6.2" + resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-4.6.2.tgz#8e0cd61611728a5bf65a3a2b8d6ff6c77d5d7479" + integrity sha512-51Bbp/Uxr9aTuy6ca/8FbFloBUJZLHwnhTcnjIeRn2suQWsWzcuJhGjKDB5eppVte/8oCdOL3VuwxvZDUggwGQ== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.2, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +busboy@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" + integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== + dependencies: + streamsearch "^1.1.0" + +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" + integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + set-function-length "^1.2.1" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +caniuse-lite@^1.0.30001579: + version "1.0.30001600" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001600.tgz#93a3ee17a35aa6a9f0c6ef1b2ab49507d1ab9079" + integrity sha512-+2S9/2JFhYmYaDpZvo0lKkfvuKIglrx68MwOBqMGHhQsNkLjB5xtc/TGoEPs+MxjSyN/72qer2g97nzR641mOQ== + +chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^4.0.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +"chokidar@>=3.0.0 <4.0.0": + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +client-only@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/client-only/-/client-only-0.0.1.tgz#38bba5d403c41ab150bff64a95c85013cf73bca1" + integrity sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA== + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +"consolidated-events@^1.1.1 || ^2.0.0": + version "2.0.2" + resolved "https://registry.yarnpkg.com/consolidated-events/-/consolidated-events-2.0.2.tgz#da8d8f8c2b232831413d9e190dc11669c79f4a91" + integrity sha512-2/uRVMdRypf5z/TW/ncD/66l75P5hH2vM/GR8Jf8HLc2xnfJtmina6F6du8+v4Z2vTrMo7jC+W1tmEEuuELgkQ== + +core-js@^3: + version "3.26.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.26.1.tgz#7a9816dabd9ee846c1c0fe0e8fcad68f3709134e" + integrity sha512-21491RRQVzUn0GGM9Z1Jrpr6PNPxPi+Za8OM9q4tksTSnlbXXGKK1nXNg/QvwFYettXvSX6zWKCtHHfjN4puyA== + +cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +css-in-js-utils@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/css-in-js-utils/-/css-in-js-utils-2.0.1.tgz#3b472b398787291b47cfe3e44fecfdd9e914ba99" + integrity sha512-PJF0SpJT+WdbVVt0AOYp9C8GnuruRlL/UFW7932nLWmFLQTaWEzTBQEx7/hn4BuV+WON75iAViSUJLiU3PKbpA== + dependencies: + hyphenate-style-name "^1.0.2" + isobject "^3.0.1" + +csstype@^3.0.0, csstype@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.1.tgz#841b532c45c758ee546a11d5bd7b7b473c8c30b9" + integrity sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw== + +damerau-levenshtein@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" + integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== + +data-view-buffer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.1.tgz#8ea6326efec17a2e42620696e671d7d5a8bc66b2" + integrity sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +data-view-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz#90721ca95ff280677eb793749fce1011347669e2" + integrity sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +data-view-byte-offset@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz#5e0bbfb4828ed2d1b9b400cd8a7d119bca0ff18a" + integrity sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +date-fns@^2.29.3: + version "2.29.3" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.29.3.tgz#27402d2fc67eb442b511b70bbdf98e6411cd68a8" + integrity sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA== + +debug@^3.2.7: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +define-data-property@^1.0.1, define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + gopd "^1.0.1" + +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + +define-properties@^1.1.3, define-properties@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" + integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== + dependencies: + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +define-properties@^1.2.0, define-properties@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== + dependencies: + define-data-property "^1.0.1" + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +dequal@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" + integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +document.contains@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/document.contains/-/document.contains-1.0.2.tgz#4260abad67a6ae9e135c1be83d68da0db169d5f0" + integrity sha512-YcvYFs15mX8m3AO1QNQy3BlIpSMfNRj3Ujk2BEJxsZG+HZf7/hZ6jr7mDpXrF8q+ff95Vef5yjhiZxm8CGJr6Q== + dependencies: + define-properties "^1.1.3" + +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + +end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +enhanced-resolve@^5.10.0: + version "5.12.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz#300e1c90228f5b570c4d35babf263f6da7155634" + integrity sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" + +es-abstract@^1.19.0, es-abstract@^1.20.4: + version "1.20.4" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.4.tgz#1d103f9f8d78d4cf0713edcd6d0ed1a46eed5861" + integrity sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA== + dependencies: + call-bind "^1.0.2" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + function.prototype.name "^1.1.5" + get-intrinsic "^1.1.3" + get-symbol-description "^1.0.0" + has "^1.0.3" + has-property-descriptors "^1.0.0" + has-symbols "^1.0.3" + internal-slot "^1.0.3" + is-callable "^1.2.7" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-weakref "^1.0.2" + object-inspect "^1.12.2" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.4.3" + safe-regex-test "^1.0.0" + string.prototype.trimend "^1.0.5" + string.prototype.trimstart "^1.0.5" + unbox-primitive "^1.0.2" + +es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.1, es-abstract@^1.23.2: + version "1.23.2" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.2.tgz#693312f3940f967b8dd3eebacb590b01712622e0" + integrity sha512-60s3Xv2T2p1ICykc7c+DNDPLDMm9t4QxCOUU0K9JxiLjM3C1zB9YVdN7tjxrFd4+AkZ8CdX1ovUga4P2+1e+/w== + dependencies: + array-buffer-byte-length "^1.0.1" + arraybuffer.prototype.slice "^1.0.3" + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + data-view-buffer "^1.0.1" + data-view-byte-length "^1.0.1" + data-view-byte-offset "^1.0.0" + es-define-property "^1.0.0" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-set-tostringtag "^2.0.3" + es-to-primitive "^1.2.1" + function.prototype.name "^1.1.6" + get-intrinsic "^1.2.4" + get-symbol-description "^1.0.2" + globalthis "^1.0.3" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + has-proto "^1.0.3" + has-symbols "^1.0.3" + hasown "^2.0.2" + internal-slot "^1.0.7" + is-array-buffer "^3.0.4" + is-callable "^1.2.7" + is-data-view "^1.0.1" + is-negative-zero "^2.0.3" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.3" + is-string "^1.0.7" + is-typed-array "^1.1.13" + is-weakref "^1.0.2" + object-inspect "^1.13.1" + object-keys "^1.1.1" + object.assign "^4.1.5" + regexp.prototype.flags "^1.5.2" + safe-array-concat "^1.1.2" + safe-regex-test "^1.0.3" + string.prototype.trim "^1.2.9" + string.prototype.trimend "^1.0.8" + string.prototype.trimstart "^1.0.7" + typed-array-buffer "^1.0.2" + typed-array-byte-length "^1.0.1" + typed-array-byte-offset "^1.0.2" + typed-array-length "^1.0.5" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.15" + +es-define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" + integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== + dependencies: + get-intrinsic "^1.2.4" + +es-errors@^1.1.0, es-errors@^1.2.1, es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +es-iterator-helpers@^1.0.15, es-iterator-helpers@^1.0.17: + version "1.0.18" + resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.18.tgz#4d3424f46b24df38d064af6fbbc89274e29ea69d" + integrity sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.0" + es-errors "^1.3.0" + es-set-tostringtag "^2.0.3" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + globalthis "^1.0.3" + has-property-descriptors "^1.0.2" + has-proto "^1.0.3" + has-symbols "^1.0.3" + internal-slot "^1.0.7" + iterator.prototype "^1.1.2" + safe-array-concat "^1.1.2" + +es-object-atoms@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.0.0.tgz#ddb55cd47ac2e240701260bc2a8e31ecb643d941" + integrity sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw== + dependencies: + es-errors "^1.3.0" + +es-set-tostringtag@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777" + integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ== + dependencies: + get-intrinsic "^1.2.4" + has-tostringtag "^1.0.2" + hasown "^2.0.1" + +es-shim-unscopables@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" + integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== + dependencies: + has "^1.0.3" + +es-shim-unscopables@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" + integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== + dependencies: + hasown "^2.0.0" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-config-next@^14.1.4: + version "14.1.4" + resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-14.1.4.tgz#22f2ba4c0993e991249d863656a64c204bae542c" + integrity sha512-cihIahbhYAWwXJwZkAaRPpUi5t9aOi/HdfWXOjZeUOqNWXHD8X22kd1KG58Dc3MVaRx3HoR/oMGk2ltcrqDn8g== + dependencies: + "@next/eslint-plugin-next" "14.1.4" + "@rushstack/eslint-patch" "^1.3.3" + "@typescript-eslint/parser" "^5.4.2 || ^6.0.0" + eslint-import-resolver-node "^0.3.6" + eslint-import-resolver-typescript "^3.5.2" + eslint-plugin-import "^2.28.1" + eslint-plugin-jsx-a11y "^6.7.1" + eslint-plugin-react "^7.33.2" + eslint-plugin-react-hooks "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705" + +eslint-config-prettier@^8.5.0: + version "8.5.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz#5a81680ec934beca02c7b1a61cf8ca34b66feab1" + integrity sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q== + +eslint-import-resolver-node@^0.3.6: + version "0.3.6" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd" + integrity sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw== + dependencies: + debug "^3.2.7" + resolve "^1.20.0" + +eslint-import-resolver-node@^0.3.9: + version "0.3.9" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" + integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== + dependencies: + debug "^3.2.7" + is-core-module "^2.13.0" + resolve "^1.22.4" + +eslint-import-resolver-typescript@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.2.tgz#9431acded7d898fd94591a08ea9eec3514c7de91" + integrity sha512-zX4ebnnyXiykjhcBvKIf5TNvt8K7yX6bllTRZ14MiurKPjDpCAZujlszTdB8pcNXhZcOf+god4s9SjQa5GnytQ== + dependencies: + debug "^4.3.4" + enhanced-resolve "^5.10.0" + get-tsconfig "^4.2.0" + globby "^13.1.2" + is-core-module "^2.10.0" + is-glob "^4.0.3" + synckit "^0.8.4" + +eslint-module-utils@^2.8.0: + version "2.8.1" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz#52f2404300c3bd33deece9d7372fb337cc1d7c34" + integrity sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q== + dependencies: + debug "^3.2.7" + +eslint-plugin-import@^2.28.1: + version "2.29.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz#d45b37b5ef5901d639c15270d74d46d161150643" + integrity sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw== + dependencies: + array-includes "^3.1.7" + array.prototype.findlastindex "^1.2.3" + array.prototype.flat "^1.3.2" + array.prototype.flatmap "^1.3.2" + debug "^3.2.7" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.9" + eslint-module-utils "^2.8.0" + hasown "^2.0.0" + is-core-module "^2.13.1" + is-glob "^4.0.3" + minimatch "^3.1.2" + object.fromentries "^2.0.7" + object.groupby "^1.0.1" + object.values "^1.1.7" + semver "^6.3.1" + tsconfig-paths "^3.15.0" + +eslint-plugin-jsx-a11y@^6.7.1: + version "6.8.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz#2fa9c701d44fcd722b7c771ec322432857fcbad2" + integrity sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA== + dependencies: + "@babel/runtime" "^7.23.2" + aria-query "^5.3.0" + array-includes "^3.1.7" + array.prototype.flatmap "^1.3.2" + ast-types-flow "^0.0.8" + axe-core "=4.7.0" + axobject-query "^3.2.1" + damerau-levenshtein "^1.0.8" + emoji-regex "^9.2.2" + es-iterator-helpers "^1.0.15" + hasown "^2.0.0" + jsx-ast-utils "^3.3.5" + language-tags "^1.0.9" + minimatch "^3.1.2" + object.entries "^1.1.7" + object.fromentries "^2.0.7" + +"eslint-plugin-react-hooks@^4.5.0 || 5.0.0-canary-7118f5dd7-20230705": + version "4.6.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" + integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== + +eslint-plugin-react@^7.33.2: + version "7.34.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.34.1.tgz#6806b70c97796f5bbfb235a5d3379ece5f4da997" + integrity sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw== + dependencies: + array-includes "^3.1.7" + array.prototype.findlast "^1.2.4" + array.prototype.flatmap "^1.3.2" + array.prototype.toreversed "^1.1.2" + array.prototype.tosorted "^1.1.3" + doctrine "^2.1.0" + es-iterator-helpers "^1.0.17" + estraverse "^5.3.0" + jsx-ast-utils "^2.4.1 || ^3.0.0" + minimatch "^3.1.2" + object.entries "^1.1.7" + object.fromentries "^2.0.7" + object.hasown "^1.1.3" + object.values "^1.1.7" + prop-types "^15.8.1" + resolve "^2.0.0-next.5" + semver "^6.3.1" + string.prototype.matchall "^4.0.10" + +eslint-scope@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" + integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== + dependencies: + eslint-visitor-keys "^2.0.0" + +eslint-visitor-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + +eslint-visitor-keys@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" + integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== + +eslint-visitor-keys@^3.4.1: + version "3.4.3" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== + +eslint@8.28.0: + version "8.28.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.28.0.tgz#81a680732634677cc890134bcdd9fdfea8e63d6e" + integrity sha512-S27Di+EVyMxcHiwDrFzk8dJYAaD+/5SoWKxL1ri/71CRHsnJnRDPNt2Kzj24+MT9FDupf4aqqyqPrvI8MvQ4VQ== + dependencies: + "@eslint/eslintrc" "^1.3.3" + "@humanwhocodes/config-array" "^0.11.6" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.1.1" + eslint-utils "^3.0.0" + eslint-visitor-keys "^3.3.0" + espree "^9.4.0" + esquery "^1.4.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.15.0" + grapheme-splitter "^1.0.4" + ignore "^5.2.0" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-sdsl "^4.1.4" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.1" + regexpp "^3.2.0" + strip-ansi "^6.0.1" + strip-json-comments "^3.1.0" + text-table "^0.2.0" + +espree@^9.4.0: + version "9.4.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.4.1.tgz#51d6092615567a2c2cff7833445e37c28c0065bd" + integrity sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg== + dependencies: + acorn "^8.8.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.3.0" + +esquery@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +execa@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" + integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-glob@^3.2.11, fast-glob@^3.2.9: + version "3.2.12" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" + integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fastq@^1.6.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" + integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== + dependencies: + reusify "^1.0.4" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + +flatted@^3.1.0: + version "3.2.7" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" + integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== + +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + +foreground-child@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" + integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== + dependencies: + cross-spawn "^7.0.0" + signal-exit "^4.0.1" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +function.prototype.name@^1.1.2, function.prototype.name@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" + integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.0" + functions-have-names "^1.2.2" + +function.prototype.name@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" + integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + functions-have-names "^1.2.3" + +functions-have-names@^1.2.2, functions-have-names@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385" + integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.3" + +get-intrinsic@^1.2.1, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" + integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + +get-stream@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + +get-symbol-description@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5" + integrity sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg== + dependencies: + call-bind "^1.0.5" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + +get-tsconfig@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.2.0.tgz#ff368dd7104dab47bf923404eb93838245c66543" + integrity sha512-X8u8fREiYOE6S8hLbq99PeykTDoLVnxvF4DjWKJmz9xy2nNRdUcV8ZN9tniJFeKyTU3qnC9lL8n4Chd6LmVKHg== + +glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob@10.3.10: + version "10.3.10" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b" + integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== + dependencies: + foreground-child "^3.1.0" + jackspeak "^2.3.5" + minimatch "^9.0.1" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + path-scurry "^1.10.1" + +glob@^7.1.3: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^13.15.0: + version "13.18.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.18.0.tgz#fb224daeeb2bb7d254cd2c640f003528b8d0c1dc" + integrity sha512-/mR4KI8Ps2spmoc0Ulu9L7agOF0du1CZNQ3dke8yItYlyKNmGrkONemBbd6V8UTc1Wgcqn21t3WYB7dbRmh6/A== + dependencies: + type-fest "^0.20.2" + +globalthis@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" + integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== + dependencies: + define-properties "^1.1.3" + +globalyzer@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/globalyzer/-/globalyzer-0.1.0.tgz#cb76da79555669a1519d5a8edf093afaa0bf1465" + integrity sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q== + +globby@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +globby@^13.1.2: + version "13.1.2" + resolved "https://registry.yarnpkg.com/globby/-/globby-13.1.2.tgz#29047105582427ab6eca4f905200667b056da515" + integrity sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ== + dependencies: + dir-glob "^3.0.1" + fast-glob "^3.2.11" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^4.0.0" + +globrex@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/globrex/-/globrex-0.1.2.tgz#dd5d9ec826232730cd6793a5e33a9302985e6098" + integrity sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg== + +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + +graceful-fs@^4.2.11: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +graceful-fs@^4.2.4: + version "4.2.10" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + +grapheme-splitter@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" + integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== + +graphql-tag@^2.12.6: + version "2.12.6" + resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.12.6.tgz#d441a569c1d2537ef10ca3d1633b48725329b5f1" + integrity sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg== + dependencies: + tslib "^2.1.0" + +graphql@^16.6.0: + version "16.6.0" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.6.0.tgz#c2dcffa4649db149f6282af726c8c83f1c7c5fdb" + integrity sha512-KPIBPDlW7NxrbT/eh4qPXz5FiFdL5UbaA0XUNz2Rp3Z3hqBSkbj0GVjwFDztsWVauZUWsbKHgMg++sk8UX0bkw== + +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" + integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + dependencies: + get-intrinsic "^1.1.1" + +has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== + dependencies: + es-define-property "^1.0.0" + +has-proto@^1.0.1, has-proto@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" + integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== + +has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + +has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== + dependencies: + has-symbols "^1.0.3" + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + dependencies: + function-bind "^1.1.2" + +highlight.js@^11.7.0: + version "11.7.0" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-11.7.0.tgz#3ff0165bc843f8c9bce1fd89e2fda9143d24b11e" + integrity sha512-1rRqesRFhMO/PRF+G86evnyJkCgaZFOI+Z6kdj15TA18funfoqJXvgPCLSf0SWq3SRfg1j3HlDs8o4s3EGq1oQ== + +hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" + integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== + dependencies: + react-is "^16.7.0" + +html-parse-stringify@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz#dfc1017347ce9f77c8141a507f233040c59c55d2" + integrity sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg== + dependencies: + void-elements "3.1.0" + +human-signals@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" + integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== + +hyphenate-style-name@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz#691879af8e220aea5750e8827db4ef62a54e361d" + integrity sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ== + +i18next-fs-backend@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/i18next-fs-backend/-/i18next-fs-backend-2.0.1.tgz#5e33f28565257617682d622f6ce2c672d3f0ccc5" + integrity sha512-fzeiFOXqsMiFAFUnNyC4buERI11vTAuf7JIDWqaiPgBK3R+XJQMSY1LyoXaWspBEFaAkXH/0uMbOv7nttBFztg== + +i18next@^22.0.6: + version "22.0.6" + resolved "https://registry.yarnpkg.com/i18next/-/i18next-22.0.6.tgz#d7029912f8aa74ff295c0d9afd1b7dea45859b49" + integrity sha512-RlreNGoPIdDP4QG+qSA9PxZKGwlzmcozbI9ObI6+OyUa/Rp0EjZZA9ubyBjw887zVNZsC+7FI3sXX8oiTzAfig== + dependencies: + "@babel/runtime" "^7.17.2" + +ignore@^5.1.4, ignore@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" + integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== + +immutable@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.1.0.tgz#f795787f0db780183307b9eb2091fcac1f6fafef" + integrity sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ== + +import-fresh@^3.0.0, import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inline-style-prefixer@^5.1.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/inline-style-prefixer/-/inline-style-prefixer-5.1.2.tgz#e5a5a3515e25600e016b71e39138971228486c33" + integrity sha512-PYUF+94gDfhy+LsQxM0g3d6Hge4l1pAqOSOiZuHWzMvQEGsbRQ/ck2WioLqrY2ZkHyPgVUXxn+hrkF7D6QUGbA== + dependencies: + css-in-js-utils "^2.0.0" + +internal-slot@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" + integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== + dependencies: + get-intrinsic "^1.1.0" + has "^1.0.3" + side-channel "^1.0.4" + +internal-slot@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" + integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== + dependencies: + es-errors "^1.3.0" + hasown "^2.0.0" + side-channel "^1.0.4" + +is-array-buffer@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" + integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + +is-async-function@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.0.0.tgz#8e4418efd3e5d3a6ebb0164c05ef5afb69aa9646" + integrity sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA== + dependencies: + has-tostringtag "^1.0.0" + +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-core-module@^2.10.0, is-core-module@^2.9.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" + integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== + dependencies: + has "^1.0.3" + +is-core-module@^2.13.0, is-core-module@^2.13.1: + version "2.13.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" + integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== + dependencies: + hasown "^2.0.0" + +is-data-view@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.1.tgz#4b4d3a511b70f3dc26d42c03ca9ca515d847759f" + integrity sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w== + dependencies: + is-typed-array "^1.1.13" + +is-date-object@^1.0.1, is-date-object@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + +is-docker@^2.0.0, is-docker@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-finalizationregistry@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz#c8749b65f17c133313e661b1289b95ad3dbd62e6" + integrity sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw== + dependencies: + call-bind "^1.0.2" + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-generator-function@^1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" + integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== + dependencies: + has-tostringtag "^1.0.0" + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-map@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" + integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== + +is-negative-zero@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== + +is-negative-zero@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" + integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== + +is-number-object@^1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== + dependencies: + has-tostringtag "^1.0.0" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + +is-regex@^1.1.0, is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-set@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" + integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== + +is-shared-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" + integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== + dependencies: + call-bind "^1.0.2" + +is-shared-array-buffer@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz#1237f1cba059cdb62431d378dcc37d9680181688" + integrity sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg== + dependencies: + call-bind "^1.0.7" + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + +is-typed-array@^1.1.13: + version "1.1.13" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" + integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== + dependencies: + which-typed-array "^1.1.14" + +is-weakmap@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd" + integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== + +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + +is-weakset@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.3.tgz#e801519df8c0c43e12ff2834eead84ec9e624007" + integrity sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ== + dependencies: + call-bind "^1.0.7" + get-intrinsic "^1.2.4" + +is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== + +isomorphic-unfetch@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/isomorphic-unfetch/-/isomorphic-unfetch-3.1.0.tgz#87341d5f4f7b63843d468438128cb087b7c3e98f" + integrity sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q== + dependencies: + node-fetch "^2.6.1" + unfetch "^4.2.0" + +iterator.prototype@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.2.tgz#5e29c8924f01916cb9335f1ff80619dcff22b0c0" + integrity sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w== + dependencies: + define-properties "^1.2.1" + get-intrinsic "^1.2.1" + has-symbols "^1.0.3" + reflect.getprototypeof "^1.0.4" + set-function-name "^2.0.1" + +jackspeak@^2.3.5: + version "2.3.6" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" + integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" + +js-sdsl@^4.1.4: + version "4.2.0" + resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.2.0.tgz#278e98b7bea589b8baaf048c20aeb19eb7ad09d0" + integrity sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ== + +"js-tokens@^3.0.0 || ^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json5@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" + integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== + dependencies: + minimist "^1.2.0" + +"jsx-ast-utils@^2.4.1 || ^3.0.0": + version "3.3.3" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz#76b3e6e6cece5c69d49a5792c3d01bd1a0cdc7ea" + integrity sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw== + dependencies: + array-includes "^3.1.5" + object.assign "^4.1.3" + +jsx-ast-utils@^3.3.5: + version "3.3.5" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz#4766bd05a8e2a11af222becd19e15575e52a853a" + integrity sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ== + dependencies: + array-includes "^3.1.6" + array.prototype.flat "^1.3.1" + object.assign "^4.1.4" + object.values "^1.1.6" + +language-subtag-registry@^0.3.20: + version "0.3.22" + resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d" + integrity sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w== + +language-tags@^1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.9.tgz#1ffdcd0ec0fafb4b1be7f8b11f306ad0f9c08777" + integrity sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA== + dependencies: + language-subtag-registry "^0.3.20" + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +loose-envify@^1.1.0, loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +"lru-cache@^9.1.1 || ^10.0.0": + version "10.2.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" + integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +minimatch@9.0.3, minimatch@^9.0.1: + version "9.0.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" + integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.2.0, minimist@^1.2.6: + version "1.2.7" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" + integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== + +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0": + version "7.0.4" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" + integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== + +mri@^1.1.5: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b" + integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +multimatch@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-4.0.0.tgz#8c3c0f6e3e8449ada0af3dd29efb491a375191b3" + integrity sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ== + dependencies: + "@types/minimatch" "^3.0.3" + array-differ "^3.0.0" + array-union "^2.1.0" + arrify "^2.0.1" + minimatch "^3.0.4" + +nanoid@^3.3.6: + version "3.3.7" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" + integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +next-i18next@^13.0.0: + version "13.0.0" + resolved "https://registry.yarnpkg.com/next-i18next/-/next-i18next-13.0.0.tgz#3a0253d0df27cb305fd5bedab0da46785dd5aa21" + integrity sha512-XiODAmMdueAIETQKIRPvYEZ5ghLOlzHb6PI4/WzwYkKdC/5q6UROzwIRw7aj3VWRB3xwnuuzEVI9NAjMfXyrkQ== + dependencies: + "@babel/runtime" "^7.18.9" + "@types/hoist-non-react-statics" "^3.3.1" + core-js "^3" + hoist-non-react-statics "^3.3.2" + i18next-fs-backend "^2.0.0" + +next@^14.1.4: + version "14.1.4" + resolved "https://registry.yarnpkg.com/next/-/next-14.1.4.tgz#203310f7310578563fd5c961f0db4729ce7a502d" + integrity sha512-1WTaXeSrUwlz/XcnhGTY7+8eiaFvdet5z9u3V2jb+Ek1vFo0VhHKSAIJvDWfQpttWjnyw14kBeq28TPq7bTeEQ== + dependencies: + "@next/env" "14.1.4" + "@swc/helpers" "0.5.2" + busboy "1.6.0" + caniuse-lite "^1.0.30001579" + graceful-fs "^4.2.11" + postcss "8.4.31" + styled-jsx "5.1.1" + optionalDependencies: + "@next/swc-darwin-arm64" "14.1.4" + "@next/swc-darwin-x64" "14.1.4" + "@next/swc-linux-arm64-gnu" "14.1.4" + "@next/swc-linux-arm64-musl" "14.1.4" + "@next/swc-linux-x64-gnu" "14.1.4" + "@next/swc-linux-x64-musl" "14.1.4" + "@next/swc-win32-arm64-msvc" "14.1.4" + "@next/swc-win32-ia32-msvc" "14.1.4" + "@next/swc-win32-x64-msvc" "14.1.4" + +node-fetch@^2.6.1: + version "2.6.7" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + dependencies: + whatwg-url "^5.0.0" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +npm-run-path@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-inspect@^1.12.2, object-inspect@^1.9.0: + version "1.12.2" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" + integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== + +object-inspect@^1.13.1: + version "1.13.1" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== + +object-is@^1.1.2: + version "1.1.5" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" + integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.0, object.assign@^4.1.3, object.assign@^4.1.4: + version "4.1.4" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" + integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + has-symbols "^1.0.3" + object-keys "^1.1.1" + +object.assign@^4.1.5: + version "4.1.5" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" + integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== + dependencies: + call-bind "^1.0.5" + define-properties "^1.2.1" + has-symbols "^1.0.3" + object-keys "^1.1.1" + +object.entries@^1.1.2: + version "1.1.6" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.6.tgz#9737d0e5b8291edd340a3e3264bb8a3b00d5fa23" + integrity sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +object.entries@^1.1.7: + version "1.1.8" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.8.tgz#bffe6f282e01f4d17807204a24f8edd823599c41" + integrity sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +object.fromentries@^2.0.7: + version "2.0.8" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65" + integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + +object.groupby@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.3.tgz#9b125c36238129f6f7b61954a1e7176148d5002e" + integrity sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + +object.hasown@^1.1.3: + version "1.1.4" + resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.4.tgz#e270ae377e4c120cdcb7656ce66884a6218283dc" + integrity sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg== + dependencies: + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + +object.values@^1.1.0, object.values@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" + integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +object.values@^1.1.7: + version "1.2.0" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.0.tgz#65405a9d92cee68ac2d303002e0b8470a4d9ab1b" + integrity sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^5.1.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +open@^8.4.0: + version "8.4.0" + resolved "https://registry.yarnpkg.com/open/-/open-8.4.0.tgz#345321ae18f8138f82565a910fdc6b39e8c244f8" + integrity sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q== + dependencies: + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" + +optimism@^0.16.1: + version "0.16.2" + resolved "https://registry.yarnpkg.com/optimism/-/optimism-0.16.2.tgz#519b0c78b3b30954baed0defe5143de7776bf081" + integrity sha512-zWNbgWj+3vLEjZNIh/okkY2EUfX+vB9TJopzIZwT1xxaMqC5hRLLraePod4c5n4He08xuXNH+zhKFFCu390wiQ== + dependencies: + "@wry/context" "^0.7.0" + "@wry/trie" "^0.3.0" + +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-scurry@^1.10.1: + version "1.10.1" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698" + integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ== + dependencies: + lru-cache "^9.1.1 || ^10.0.0" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +possible-typed-array-names@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" + integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== + +postcss@8.4.31: + version "8.4.31" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d" + integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ== + dependencies: + nanoid "^3.3.6" + picocolors "^1.0.0" + source-map-js "^1.0.2" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prettier@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.0.tgz#c7df58393c9ba77d6fba3921ae01faf994fb9dc9" + integrity sha512-9Lmg8hTFZKG0Asr/kW9Bp8tJjRVluO8EJQVfY2T7FMw9T5jy4I/Uvx0Rca/XWf50QQ1/SS48+6IJWnrb+2yemA== + +pretty-quick@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/pretty-quick/-/pretty-quick-3.1.3.tgz#15281108c0ddf446675157ca40240099157b638e" + integrity sha512-kOCi2FJabvuh1as9enxYmrnBC6tVMoVOenMaBqRfsvBHB0cbpYHjdQEpSglpASDFEXVwplpcGR4CLEaisYAFcA== + dependencies: + chalk "^3.0.0" + execa "^4.0.0" + find-up "^4.1.0" + ignore "^5.1.4" + mri "^1.1.5" + multimatch "^4.0.0" + +prop-types-exact@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/prop-types-exact/-/prop-types-exact-1.2.0.tgz#825d6be46094663848237e3925a98c6e944e9869" + integrity sha512-K+Tk3Kd9V0odiXFP9fwDHUYRyvK3Nun3GVyPapSIs5OBkITAm15W0CPFD/YKTkMUAbc0b9CUwRQp2ybiBIq+eA== + dependencies: + has "^1.0.3" + object.assign "^4.1.0" + reflect.ownkeys "^0.2.0" + +prop-types@^15.6.0, prop-types@^15.7.2, prop-types@^15.8.1: + version "15.8.1" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.13.1" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +react-dom@^18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" + integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== + dependencies: + loose-envify "^1.1.0" + scheduler "^0.23.0" + +react-i18next@^12.0.0: + version "12.0.0" + resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-12.0.0.tgz#634015a2c035779c5736ae4c2e5c34c1659753b1" + integrity sha512-/O7N6aIEAl1FaWZBNvhdIo9itvF/MO/nRKr9pYqRc9LhuC1u21SlfwpiYQqvaeNSEW3g3qUXLREOWMt+gxrWbg== + dependencies: + "@babel/runtime" "^7.14.5" + html-parse-stringify "^3.0.1" + +react-is@^16.13.1, react-is@^16.7.0: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +react-is@^18.0.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== + +react-outside-click-handler@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/react-outside-click-handler/-/react-outside-click-handler-1.3.0.tgz#3831d541ac059deecd38ec5423f81e80ad60e115" + integrity sha512-Te/7zFU0oHpAnctl//pP3hEAeobfeHMyygHB8MnjP6sX5OR8KHT1G3jmLsV3U9RnIYo+Yn+peJYWu+D5tUS8qQ== + dependencies: + airbnb-prop-types "^2.15.0" + consolidated-events "^1.1.1 || ^2.0.0" + document.contains "^1.0.1" + object.values "^1.1.0" + prop-types "^15.7.2" + +react-redux@^8.0.5: + version "8.0.5" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-8.0.5.tgz#e5fb8331993a019b8aaf2e167a93d10af469c7bd" + integrity sha512-Q2f6fCKxPFpkXt1qNRZdEDLlScsDWyrgSj0mliK59qU6W5gvBiKkdMEG2lJzhd1rCctf0hb6EtePPLZ2e0m1uw== + dependencies: + "@babel/runtime" "^7.12.1" + "@types/hoist-non-react-statics" "^3.3.1" + "@types/use-sync-external-store" "^0.0.3" + hoist-non-react-statics "^3.3.2" + react-is "^18.0.0" + use-sync-external-store "^1.0.0" + +react@^18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" + integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== + dependencies: + loose-envify "^1.1.0" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +redux-thunk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.4.2.tgz#b9d05d11994b99f7a91ea223e8b04cf0afa5ef3b" + integrity sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q== + +redux@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/redux/-/redux-4.2.0.tgz#46f10d6e29b6666df758780437651eeb2b969f13" + integrity sha512-oSBmcKKIuIR4ME29/AeNUnl5L+hvBq7OaJWzaptTQJAntaPvxIJqfnjbaEiCzzaIz+XmVILfqAM3Ob0aXLPfjA== + dependencies: + "@babel/runtime" "^7.9.2" + +reflect.getprototypeof@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz#3ab04c32a8390b770712b7a8633972702d278859" + integrity sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.1" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + globalthis "^1.0.3" + which-builtin-type "^1.1.3" + +reflect.ownkeys@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/reflect.ownkeys/-/reflect.ownkeys-0.2.0.tgz#749aceec7f3fdf8b63f927a04809e90c5c0b3460" + integrity sha512-qOLsBKHCpSOFKK1NUOCGC5VyeufB6lEsFe92AL2bhIJsacZS1qdoOZSbPk3MYKuT2cFlRDnulKXuuElIrMjGUg== + +regenerator-runtime@^0.13.10: + version "0.13.11" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" + integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== + +regenerator-runtime@^0.14.0: + version "0.14.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" + integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== + +regexp.prototype.flags@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" + integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + functions-have-names "^1.2.2" + +regexp.prototype.flags@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334" + integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw== + dependencies: + call-bind "^1.0.6" + define-properties "^1.2.1" + es-errors "^1.3.0" + set-function-name "^2.0.1" + +regexpp@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve@^1.20.0: + version "1.22.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== + dependencies: + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +resolve@^1.22.4: + version "1.22.8" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +resolve@^2.0.0-next.5: + version "2.0.0-next.5" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.5.tgz#6b0ec3107e671e52b68cd068ef327173b90dc03c" + integrity sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +response-iterator@^0.2.6: + version "0.2.6" + resolved "https://registry.yarnpkg.com/response-iterator/-/response-iterator-0.2.6.tgz#249005fb14d2e4eeb478a3f735a28fd8b4c9f3da" + integrity sha512-pVzEEzrsg23Sh053rmDUvLSkGXluZio0qu8VT6ukrYuvtjVfCbDZH9d6PGXb8HZfzdNZt8feXv/jvUzlhRgLnw== + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +safe-array-concat@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.2.tgz#81d77ee0c4e8b863635227c721278dd524c20edb" + integrity sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q== + dependencies: + call-bind "^1.0.7" + get-intrinsic "^1.2.4" + has-symbols "^1.0.3" + isarray "^2.0.5" + +safe-regex-test@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" + integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + is-regex "^1.1.4" + +safe-regex-test@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377" + integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-regex "^1.1.4" + +sass@^1.56.1: + version "1.56.1" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.56.1.tgz#94d3910cd468fd075fa87f5bb17437a0b617d8a7" + integrity sha512-VpEyKpyBPCxE7qGDtOcdJ6fFbcpOM+Emu7uZLxVrkX8KVU/Dp5UF7WLvzqRuUhB6mqqQt1xffLoG+AndxTZrCQ== + dependencies: + chokidar ">=3.0.0 <4.0.0" + immutable "^4.0.0" + source-map-js ">=0.6.2 <2.0.0" + +scheduler@^0.23.0: + version "0.23.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" + integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== + dependencies: + loose-envify "^1.1.0" + +semver@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.5.4: + version "7.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" + integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== + dependencies: + lru-cache "^6.0.0" + +set-function-length@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + +set-function-name@^2.0.1, set-function-name@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" + integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.2" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +side-channel@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" + integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + object-inspect "^1.13.1" + +signal-exit@^3.0.2: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +signal-exit@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slash@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" + integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== + +"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== + +streamsearch@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" + integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== + +"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0: + name string-width-cjs + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^5.0.1, string-width@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + +string.prototype.matchall@^4.0.10: + version "4.0.11" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz#1092a72c59268d2abaad76582dccc687c0297e0a" + integrity sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + has-symbols "^1.0.3" + internal-slot "^1.0.7" + regexp.prototype.flags "^1.5.2" + set-function-name "^2.0.2" + side-channel "^1.0.6" + +string.prototype.trim@^1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz#b6fa326d72d2c78b6df02f7759c73f8f6274faa4" + integrity sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.0" + es-object-atoms "^1.0.0" + +string.prototype.trimend@^1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" + integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +string.prototype.trimend@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz#3651b8513719e8a9f48de7f2f77640b26652b229" + integrity sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +string.prototype.trimstart@^1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" + integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +string.prototype.trimstart@^1.0.7: + version "1.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" + integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^7.0.1: + version "7.1.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== + dependencies: + ansi-regex "^6.0.1" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +styled-jsx@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-5.1.1.tgz#839a1c3aaacc4e735fed0781b8619ea5d0009d1f" + integrity sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw== + dependencies: + client-only "0.0.1" + +styletron-engine-atomic@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/styletron-engine-atomic/-/styletron-engine-atomic-1.5.0.tgz#b2514d78498d0a8256bd170d0bda30fdfe9018f1" + integrity sha512-5rR6cbWqeKlrFUtIyw7aBe3Zn5XDCmxLJ6q7MAYwBCk6pbdBfj5MtoedH6KBygwjTNp7uddE536YrLvLP0N8/w== + dependencies: + inline-style-prefixer "^5.1.0" + styletron-standard "^3.1.0" + +styletron-react@5.2.7: + version "5.2.7" + resolved "https://registry.yarnpkg.com/styletron-react/-/styletron-react-5.2.7.tgz#7aa283a0b06787024f96289480c60bafed5048cf" + integrity sha512-PUUf7MAv9aaO8oT0B4ryPreeLi3BT1kQ7WIDNhkkpLkvCzk+pOvmtaZJJZRIxWPimj8756rLZqpF7/2ssF9KhQ== + dependencies: + prop-types "^15.6.0" + styletron-standard "^3.0.4" + +styletron-standard@^3.0.4, styletron-standard@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/styletron-standard/-/styletron-standard-3.1.0.tgz#d50a923939df79696f329ea8edbda22ca73c28ff" + integrity sha512-Cr2q0IFsag6OaIeD/LBNRuCxNTPa/WtTbKP1X3o50mDudN8FGwmD5h1sMJ/Bu5+mO/2NfrNAv9V9zUXn6lXXMA== + dependencies: + "@rtsao/csstype" "2.6.5-forked.0" + csstype "^3.0.0" + inline-style-prefixer "^5.1.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +symbol-observable@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-4.0.0.tgz#5b425f192279e87f2f9b937ac8540d1984b39205" + integrity sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ== + +synckit@^0.8.4: + version "0.8.4" + resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.8.4.tgz#0e6b392b73fafdafcde56692e3352500261d64ec" + integrity sha512-Dn2ZkzMdSX827QbowGbU/4yjWuvNaCoScLLoMo/yKbu+P4GBR6cRGKZH27k6a9bRzdqcyd1DE96pQtQ6uNkmyw== + dependencies: + "@pkgr/utils" "^2.3.1" + tslib "^2.4.0" + +tapable@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" + integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +tiny-glob@^0.2.9: + version "0.2.9" + resolved "https://registry.yarnpkg.com/tiny-glob/-/tiny-glob-0.2.9.tgz#2212d441ac17928033b110f8b3640683129d31e2" + integrity sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg== + dependencies: + globalyzer "0.1.0" + globrex "^0.1.2" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +ts-api-utils@^1.0.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.3.0.tgz#4b490e27129f1e8e686b45cc4ab63714dc60eea1" + integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ== + +ts-invariant@^0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/ts-invariant/-/ts-invariant-0.10.3.tgz#3e048ff96e91459ffca01304dbc7f61c1f642f6c" + integrity sha512-uivwYcQaxAucv1CzRp2n/QdYPo4ILf9VXgH19zEIjFx2EJufV16P0JtJVpYHy89DItG6Kwj2oIUjrcK5au+4tQ== + dependencies: + tslib "^2.1.0" + +tsconfig-paths@^3.15.0: + version "3.15.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" + integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tslib@^2.1.0, tslib@^2.3.0, tslib@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e" + integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA== + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +typed-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3" + integrity sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + is-typed-array "^1.1.13" + +typed-array-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz#d92972d3cff99a3fa2e765a28fcdc0f1d89dec67" + integrity sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw== + dependencies: + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + +typed-array-byte-offset@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz#f9ec1acb9259f395093e4567eb3c28a580d02063" + integrity sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + +typed-array-length@^1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.6.tgz#57155207c76e64a3457482dfdc1c9d1d3c4c73a3" + integrity sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g== + dependencies: + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + possible-typed-array-names "^1.0.0" + +typescript@4.9.3: + version "4.9.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.3.tgz#3aea307c1746b8c384435d8ac36b8a2e580d85db" + integrity sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA== + +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== + dependencies: + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" + which-boxed-primitive "^1.0.2" + +unfetch@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/unfetch/-/unfetch-4.2.0.tgz#7e21b0ef7d363d8d9af0fb929a5555f6ef97a3be" + integrity sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA== + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +use-sync-external-store@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" + integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== + +void-elements@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-3.1.0.tgz#614f7fbf8d801f0bb5f0661f5b2f5785750e4f09" + integrity sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w== + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which-builtin-type@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.1.3.tgz#b1b8443707cc58b6e9bf98d32110ff0c2cbd029b" + integrity sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw== + dependencies: + function.prototype.name "^1.1.5" + has-tostringtag "^1.0.0" + is-async-function "^2.0.0" + is-date-object "^1.0.5" + is-finalizationregistry "^1.0.2" + is-generator-function "^1.0.10" + is-regex "^1.1.4" + is-weakref "^1.0.2" + isarray "^2.0.5" + which-boxed-primitive "^1.0.2" + which-collection "^1.0.1" + which-typed-array "^1.1.9" + +which-collection@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" + integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== + dependencies: + is-map "^2.0.3" + is-set "^2.0.3" + is-weakmap "^2.0.2" + is-weakset "^2.0.3" + +which-typed-array@^1.1.14, which-typed-array@^1.1.15, which-typed-array@^1.1.9: + version "1.1.15" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.15.tgz#264859e9b11a649b388bfaaf4f767df1f779b38d" + integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.2" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +word-wrap@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +zen-observable-ts@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/zen-observable-ts/-/zen-observable-ts-1.2.5.tgz#6c6d9ea3d3a842812c6e9519209365a122ba8b58" + integrity sha512-QZWQekv6iB72Naeake9hS1KxHlotfRpe+WGNbNx5/ta+R3DNjVO2bswf63gXlWDcs+EMd7XY8HfVQyP1X6T4Zg== + dependencies: + zen-observable "0.8.15" + +zen-observable@0.8.15: + version "0.8.15" + resolved "https://registry.yarnpkg.com/zen-observable/-/zen-observable-0.8.15.tgz#96415c512d8e3ffd920afd3889604e30b9eaac15" + integrity sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ== diff --git a/src/shared/token-transfer-container/token-transfer-container.tsx b/src/shared/token-transfer-container/token-transfer-container.tsx index 7aebcd1..ae5d6da 100644 --- a/src/shared/token-transfer-container/token-transfer-container.tsx +++ b/src/shared/token-transfer-container/token-transfer-container.tsx @@ -94,10 +94,7 @@ export const TokenTransferContainer: React.FC = ({ {tf.transactionHash} - + {tf.fromAddress} @@ -105,10 +102,7 @@ export const TokenTransferContainer: React.FC = ({ {" "} →{" "} - + {tf.toAddress} diff --git a/src/shared/tx-details-container/tx-details-container.tsx b/src/shared/tx-details-container/tx-details-container.tsx index a3f8ec0..4942819 100644 --- a/src/shared/tx-details-container/tx-details-container.tsx +++ b/src/shared/tx-details-container/tx-details-container.tsx @@ -203,7 +203,7 @@ export function TxDetailsContainer(): JSX.Element { {" | "} {format( new Date(tx?.timestamp), - "MMM-d-y hh:mm:ss a x" + "MMM-d-y hh:mm:ss a x", )}{" "} UTC @@ -251,9 +251,11 @@ export function TxDetailsContainer(): JSX.Element { {t("tx.to")}
    - - {tx?.toAddressHash} - +
    +                        
    +                          {tx?.toAddressHash}
    +                        
    +