diff --git a/.env b/.env index 895f1007c..b395c6cf2 100644 --- a/.env +++ b/.env @@ -1 +1 @@ -# CHAIN_ID = space-pussy \ No newline at end of file +CHAIN_ID = space-pussy diff --git a/README.md b/README.md index c7440948d..9d65b8ca6 100644 --- a/README.md +++ b/README.md @@ -25,10 +25,9 @@ example of [random citizen](https://cyb.ai/pgraph/bostrom1d8754xqa9245pctlfcyv8e # build ```sh -$ yarn install -$ yarn start +$ docker-compose up ``` -then pray that node.js will build something +then pray that docker will build on [localhost:3000](http://localhost:3000/) # join diff --git a/docker-compose.yml b/docker-compose.yml index 8b0768b85..4a827d4fa 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -6,17 +6,4 @@ services: target: build ports: - '3000:3000' - environment: - - NODE_OPTIONS=--max-old-space-size=8192 - - CHAIN_ID=bostrom - - RPC_URL=https://rpc.bostrom.cybernode.ai - - LCD_URL=https://lcd.bostrom.cybernode.ai - - WEBSOCKET_URL=wss://rpc.bostrom.cybernode.ai/websocket - - INDEX_HTTPS=https://index.bostrom.cybernode.ai/v1/graphql - - INDEX_WEBSOCKET=wss://index.bostrom.cybernode.ai/v1/graphql - - CYBER_GATEWAY=https://gateway.bostrom.cybernode.ai - - BASE_DENOM=boot - - DENOM_LIQUID=hydrogen - - BECH32_PREFIX=bostrom - command: npx serve -s build diff --git a/src/components/IconsNumber/IconsNumber.tsx b/src/components/IconsNumber/IconsNumber.tsx index 2794b3be6..794311c2d 100644 --- a/src/components/IconsNumber/IconsNumber.tsx +++ b/src/components/IconsNumber/IconsNumber.tsx @@ -3,8 +3,8 @@ import React from 'react'; import { formatNumber } from 'src/utils/utils'; import getPrefixNumber from 'src/utils/getPrefixNumber'; import cx from 'classnames'; -import hydrogen from '../../image/hydrogen.svg'; import Tooltip from '../tooltip/tooltip'; +import hydrogen from '../../image/hydrogen.svg'; import styles from './IconsNumber.module.scss'; enum TypesEnum { diff --git a/src/components/account/account.tsx b/src/components/account/account.tsx index d6214d903..4e7df40ac 100644 --- a/src/components/account/account.tsx +++ b/src/components/account/account.tsx @@ -6,10 +6,10 @@ import { routes } from 'src/routes'; import usePassportByAddress from 'src/features/passport/hooks/usePassportByAddress'; import cx from 'classnames'; import { BECH32_PREFIX_VALOPER } from 'src/constants/config'; +import useCurrentAddress from 'src/hooks/useCurrentAddress'; import { trimString } from '../../utils/utils'; import { AvataImgIpfs } from '../../containers/portal/components/avataIpfs'; import styles from './account.module.scss'; -import useCurrentAddress from 'src/hooks/useCurrentAddress'; import Tooltip from '../tooltip/tooltip'; function useGetValidatorInfo(address: string) { diff --git a/src/components/containerGradient/Display/Display.module.scss b/src/components/containerGradient/Display/Display.module.scss index 11a60f623..3f4f4d4fb 100644 --- a/src/components/containerGradient/Display/Display.module.scss +++ b/src/components/containerGradient/Display/Display.module.scss @@ -1,11 +1,10 @@ -@import '../saber/index.module.scss'; -@import './variables.module.scss'; -@import '../../../style/mixins.scss'; +@import '../saber/index.module'; +@import './variables.module'; +@import '../../../style/mixins'; .wrapper { // TODO: remove this z-index: 0; - display: flex; flex-direction: column; @@ -46,7 +45,6 @@ .inner { padding: $display-padding-top $display-padding-x; overflow: auto; - height: 100%; max-height: 100%; @@ -69,6 +67,4 @@ padding-bottom: unset; } } - - @include blueScroll; -} \ No newline at end of file +} diff --git a/src/constants/config.ts b/src/constants/config.ts index 0a387e524..26f47350a 100644 --- a/src/constants/config.ts +++ b/src/constants/config.ts @@ -12,7 +12,7 @@ function isWorker() { const LOCALSTORAGE_CHAIN_ID = !isWorker() && localStorage.getItem('chainId'); const DEFAULT_CHAIN_ID: Networks.BOSTROM | Networks.SPACE_PUSSY = - LOCALSTORAGE_CHAIN_ID || process.env.CHAIN_ID || Networks.BOSTROM; + LOCALSTORAGE_CHAIN_ID || process.env.CHAIN_ID || Networks.SPACE_PUSSY; export const CHAIN_ID = DEFAULT_CHAIN_ID; diff --git a/src/constants/defaultNetworks.ts b/src/constants/defaultNetworks.ts index 7283d8e7e..fba4dd344 100644 --- a/src/constants/defaultNetworks.ts +++ b/src/constants/defaultNetworks.ts @@ -1,7 +1,7 @@ import { NetworkConfig, Networks } from 'src/types/networks'; type NetworksList = { - [key in Networks.BOSTROM | Networks.SPACE_PUSSY]: NetworkConfig; + [key in Networks.SPACE_PUSSY | Networks.BOSTROM]: NetworkConfig; }; const defaultNetworks: NetworksList = { diff --git a/src/containers/Search/Filters/Filters.tsx b/src/containers/Search/Filters/Filters.tsx index 3d1392ca1..5f1448133 100644 --- a/src/containers/Search/Filters/Filters.tsx +++ b/src/containers/Search/Filters/Filters.tsx @@ -1,14 +1,15 @@ -import React, { useState } from 'react'; -import styles from './Filters.module.scss'; +import { useState } from 'react'; import ButtonsGroup from 'src/components/buttons/ButtonsGroup/ButtonsGroup'; -import { LinksTypeFilter, SortBy } from '../types'; -import { initialContentTypeFilterState } from '../constants'; import Links from 'src/components/search/Spark/Meta/Links/Links'; -import { Account, Tooltip } from 'src/components'; +import { Tooltip } from 'src/components'; import { AccountInput } from 'src/pages/teleport/components/Inputs'; -import useCurrentAddress from 'src/hooks/useCurrentAddress'; + import { AvataImgIpfs } from 'src/containers/portal/components/avataIpfs'; +import useCurrentAddress from 'src/hooks/useCurrentAddress'; import useCurrentPassport from 'src/features/passport/hooks/useCurrentPassport'; +import { initialContentTypeFilterState } from '../constants'; +import { LinksTypeFilter, SortBy } from '../types'; +import styles from './Filters.module.scss'; enum NeuronFilterType { me = 'me', diff --git a/src/containers/Validators/ActionBarContainer.tsx b/src/containers/Validators/ActionBarContainer.tsx index 77ae03297..cc2b53d6c 100644 --- a/src/containers/Validators/ActionBarContainer.tsx +++ b/src/containers/Validators/ActionBarContainer.tsx @@ -419,12 +419,12 @@ function ActionBarContainer({ > Investmint - yor free H to get A and V + yor free LP to get A and V )} {balanceToken[DENOM_LIQUID].liquid === 0 && balance.available !== 0 && - 'Choose hero to get H'} + 'Choose hero to get LP'} {validRewards && ( or diff --git a/src/containers/Validators/components/InfoBalance.jsx b/src/containers/Validators/components/InfoBalance.jsx index 7056c045f..6ea496afe 100644 --- a/src/containers/Validators/components/InfoBalance.jsx +++ b/src/containers/Validators/components/InfoBalance.jsx @@ -7,7 +7,7 @@ import { DENOM_LIQUID, BASE_DENOM } from 'src/constants/config'; function TootipContent() { return (
- you receive H form staked BOOT, you can use H for investmint A and V + you receive {DENOM_LIQUID} form staked {BASE_DENOM}, you can use {DENOM_LIQUID} for investmint A and V
); } diff --git a/src/containers/application/App.tsx b/src/containers/application/App.tsx index f8579e662..f28164bf7 100644 --- a/src/containers/application/App.tsx +++ b/src/containers/application/App.tsx @@ -17,6 +17,7 @@ import useSenseManager from 'src/features/sense/ui/useSenseManager'; // eslint-disable-next-line unused-imports/no-unused-imports, @typescript-eslint/no-unused-vars import { initCyblog } from 'src/utils/logging/bootstrap'; + import { setTimeHistoryRoute } from 'src/features/TimeHistory/redux/TimeHistory.redux'; import { PreviousPageProvider } from 'src/contexts/previousPage'; import { cybernetRoutes } from 'src/features/cybernet/ui/routes'; diff --git a/src/containers/application/Header/CurrentApp/utils/findSelectAppByUrl.ts b/src/containers/application/Header/CurrentApp/utils/findSelectAppByUrl.ts index d29770e49..aa7ff0cb1 100644 --- a/src/containers/application/Header/CurrentApp/utils/findSelectAppByUrl.ts +++ b/src/containers/application/Header/CurrentApp/utils/findSelectAppByUrl.ts @@ -12,6 +12,7 @@ const findSelectAppByUrl = ( let pathname = url; const isRobot = url.includes('@') || url.includes('neuron/'); const isOracle = url.includes('oracle'); + const isCyberver = url.includes('cyberver'); const itemsMenuObj = reduceRobotSubItems(passport, address); @@ -23,6 +24,10 @@ const findSelectAppByUrl = ( pathname = routes.oracle.path; } + if (isCyberver) { + pathname = '/cyberver'; + } + const value = findApp(itemsMenuObj, pathname); return value; diff --git a/src/containers/mint/index.tsx b/src/containers/mint/index.tsx index 202fab037..68564159c 100644 --- a/src/containers/mint/index.tsx +++ b/src/containers/mint/index.tsx @@ -98,7 +98,7 @@ function Mint() { )}
choose or {' '} - to mint, the amount of to invest, and the + to mint, the amount of to invest, and the timeframe

); diff --git a/src/containers/network/customNetwork.tsx b/src/containers/network/customNetwork.tsx new file mode 100644 index 000000000..e69de29bb diff --git a/src/containers/portal/gift/ActionBarPortalGift.tsx b/src/containers/portal/gift/ActionBarPortalGift.tsx index 56284e17e..826124d85 100644 --- a/src/containers/portal/gift/ActionBarPortalGift.tsx +++ b/src/containers/portal/gift/ActionBarPortalGift.tsx @@ -9,14 +9,15 @@ import { toAscii, toBase64 } from '@cosmjs/encoding'; import { useSigningClient } from 'src/contexts/signerClient'; import { getKeplr } from 'src/utils/keplrUtils'; import useWaitForTransaction from 'src/hooks/useWaitForTransaction'; -import { useDispatch, useSelector } from 'react-redux'; +import { useDispatch } from 'react-redux'; import { Citizenship } from 'src/types/citizenship'; -import { RootState } from 'src/redux/store'; import { useBackend } from 'src/contexts/backend/backend'; import { PATTERN_CYBER } from 'src/constants/patterns'; import Soft3MessageFactory from 'src/services/soft.js/api/msgs'; import BigNumber from 'bignumber.js'; import { Nullable } from 'src/types'; +import useCurrentAddress from 'src/hooks/useCurrentAddress'; +import { CHAIN_ID } from 'src/constants/config'; import { Dots, ButtonIcon, @@ -47,8 +48,6 @@ import { } from '../../../features/passport/passports.redux'; import { ClaimMsg } from './type'; import { TxHash } from '../hook/usePingTxs'; -import useCurrentAddress from 'src/hooks/useCurrentAddress'; -import { CHAIN_ID } from 'src/constants/config'; const gasPrice = GasPrice.fromString('0.001boot'); diff --git a/src/containers/sigma/hooks/utils.js b/src/containers/sigma/hooks/utils.js index d62ff7a4b..b58dd9c36 100644 --- a/src/containers/sigma/hooks/utils.js +++ b/src/containers/sigma/hooks/utils.js @@ -4,9 +4,15 @@ import BigNumber from 'bignumber.js'; import { useQuery } from '@tanstack/react-query'; import { getDelegatorDelegations } from 'src/utils/search/utils'; import { BECH32_PREFIX_VALOPER, BASE_DENOM } from 'src/constants/config'; -import { useStake as useVerseStake } from 'src/features/cybernet/ui/hooks/useCurrentAccountStake'; -import { CYBERVER_CONTRACTS } from 'src/features/cybernet/constants'; -import { useQueryClient } from 'src/contexts/queryClient'; +import { + useStake as useVerseStake, + useStake as useVerseStake, +} from 'src/features/cybernet/ui/hooks/useCurrentAccountStake'; +import { + CYBERVER_CONTRACTS, + CYBERVER_CONTRACTS, +} from 'src/features/cybernet/constants'; +import { useQueryClient, useQueryClient } from 'src/contexts/queryClient'; import { isPussyChain } from 'src/utils/chains/pussy'; import { fromBech32 } from '../../../utils/utils'; diff --git a/src/containers/sigma/index.tsx b/src/containers/sigma/index.tsx index 80b7d2fb4..7d8cb84da 100644 --- a/src/containers/sigma/index.tsx +++ b/src/containers/sigma/index.tsx @@ -7,14 +7,14 @@ import TokenChange from 'src/components/TokenChange/TokenChange'; import { routes } from 'src/routes'; import Display from 'src/components/containerGradient/Display/Display'; import { useAppSelector } from 'src/redux/hooks'; +import DisplayTitle from 'src/components/containerGradient/DisplayTitle/DisplayTitle'; +import useCurrentPassport from 'src/features/passport/hooks/useCurrentPassport'; +import useAdviserTexts from 'src/features/adviser/useAdviserTexts'; import { SigmaContext } from './SigmaContext'; import { CardPassport } from './components'; import ActionBarPortalGift from '../portal/gift/ActionBarPortalGift'; import STEP_INFO from '../portal/gift/utils'; -import DisplayTitle from 'src/components/containerGradient/DisplayTitle/DisplayTitle'; -import useCurrentPassport from 'src/features/passport/hooks/useCurrentPassport'; -import useAdviserTexts from 'src/features/adviser/useAdviserTexts'; const valueContext = { totalCap: 0, diff --git a/src/features/adviser/context.tsx b/src/features/adviser/context.tsx index c89fad728..24001eff2 100644 --- a/src/features/adviser/context.tsx +++ b/src/features/adviser/context.tsx @@ -99,8 +99,6 @@ function AdviserProvider({ children }: { children: React.ReactNode }) { const priorityItem = [...state].reverse().find((item) => item.isPriority); const lastItem = priorityItem || state[state.length - 1]; - // console.log(state); - const { content, color } = lastItem || {}; const value = useMemo(() => { diff --git a/src/features/cybernet/ui/Cybernet.tsx b/src/features/cybernet/ui/Cybernet.tsx index 985b900e1..125ccf01c 100644 --- a/src/features/cybernet/ui/Cybernet.tsx +++ b/src/features/cybernet/ui/Cybernet.tsx @@ -35,7 +35,7 @@ function Cybernet() {
- cybernet | cyb + cyberver | cyb diff --git a/src/features/cybernet/ui/RootSubnetsTable/RootSubnetsTable.tsx b/src/features/cybernet/ui/RootSubnetsTable/RootSubnetsTable.tsx new file mode 100644 index 000000000..10252a12b --- /dev/null +++ b/src/features/cybernet/ui/RootSubnetsTable/RootSubnetsTable.tsx @@ -0,0 +1,74 @@ +import React, { useMemo } from 'react'; +import { SubnetInfo } from '../../types'; +import { createColumnHelper } from '@tanstack/react-table'; +import Table from 'src/components/Table/Table'; +import { Link, useNavigate } from 'react-router-dom'; +import { routes } from 'src/routes'; +import { Account } from 'src/components'; + +type Props = { + data: SubnetInfo[]; +}; + +const columnHelper = createColumnHelper(); + +function RootSubnetsTable({ data }: Props) { + const navigate = useNavigate(); + + return ( +
+ navigate(`./subnets/${row}`)} + columns={useMemo( + () => [ + columnHelper.accessor('netuid', { + header: 'netuid', + cell: (info) => ( + {info.getValue()} + ), + }), + columnHelper.accessor('owner', { + header: 'owner', + cell: (info) => ( + + {/* // */} + + {/* {info.getValue().substr(0, 10) + '...'} */} + + ), + }), + // columnHelper.accessor('netuid', { + // header: 'link', + // cell: (info) => link, + // }), + + columnHelper.accessor('tempo', { + header: 'tempo', + cell: (info) => info.getValue(), + }), + columnHelper.accessor('metadata', { + header: 'metadata', + cell: (info) => ( + + {info.getValue().substr(0, 10) + '...'} + + ), + }), + columnHelper.accessor('max_allowed_validators', { + header: 'Max validators', + cell: (info) => info.getValue(), + }), + columnHelper.accessor('max_allowed_uids', { + header: 'Max operators', + cell: (info) => info.getValue(), + }), + ], + [] + )} + data={data} + /> + + ); +} + +export default RootSubnetsTable; diff --git a/src/features/cybernet/ui/cybernet.context.tsx b/src/features/cybernet/ui/cybernet.context.tsx index 7ca6ad70f..3063833cf 100644 --- a/src/features/cybernet/ui/cybernet.context.tsx +++ b/src/features/cybernet/ui/cybernet.context.tsx @@ -83,10 +83,10 @@ function CybernetProvider({ children }: { children: React.ReactNode }) { const c1 = useCybernetContractWithData(CYBERVER_CONTRACTS[0]); const c2 = useCybernetContractWithData(CYBERVER_CONTRACTS[1]); - const c3 = useCybernetContractWithData(CYBERVER_CONTRACTS_LEGACY[0]); - const c4 = useCybernetContractWithData(CYBERVER_CONTRACTS_LEGACY[1]); + // const c3 = useCybernetContractWithData(CYBERVER_CONTRACTS_LEGACY[0]); + // const c4 = useCybernetContractWithData(CYBERVER_CONTRACTS_LEGACY[1]); - const contracts = useMemo(() => [c1, c2, c3, c4], [c1, c2, c3, c4]); + const contracts = useMemo(() => [c1, c2], [c1, c2]); const currentContract = nameOrAddress && diff --git a/src/features/cybernet/ui/pages/Delegates/Delegates.tsx b/src/features/cybernet/ui/pages/Delegates/Delegates.tsx index 33ecc4591..97c09e940 100644 --- a/src/features/cybernet/ui/pages/Delegates/Delegates.tsx +++ b/src/features/cybernet/ui/pages/Delegates/Delegates.tsx @@ -1,9 +1,9 @@ -import DelegatesTable from './DelegatesTable/DelegatesTable'; import Display from 'src/components/containerGradient/Display/Display'; import DisplayTitle from 'src/components/containerGradient/DisplayTitle/DisplayTitle'; import useAdviserTexts from 'src/features/adviser/useAdviserTexts'; import useCybernetTexts from '../../useCybernetTexts'; import { useDelegates } from '../../hooks/useDelegate'; +import DelegatesTable from './DelegatesTable/DelegatesTable'; function Delegates() { const { loading, error } = useDelegates(); @@ -13,7 +13,7 @@ function Delegates() { useAdviserTexts({ isLoading: loading, loadingText: `loading ${getText('delegate', true)}`, - error, + error: error?.message, defaultText: `choose ${getText('delegate')} for learning`, }); diff --git a/src/features/cybernet/ui/pages/Delegates/DelegatesTable/DelegatesTable.tsx b/src/features/cybernet/ui/pages/Delegates/DelegatesTable/DelegatesTable.tsx index 024bd37cc..1eae42a12 100644 --- a/src/features/cybernet/ui/pages/Delegates/DelegatesTable/DelegatesTable.tsx +++ b/src/features/cybernet/ui/pages/Delegates/DelegatesTable/DelegatesTable.tsx @@ -1,22 +1,20 @@ /* eslint-disable react/no-unstable-nested-components */ -import React, { useMemo } from 'react'; -import { SubnetInfo } from '../../types'; +import { useMemo } from 'react'; import { createColumnHelper } from '@tanstack/react-table'; import Table from 'src/components/Table/Table'; -import { Link, useLocation, useNavigate } from 'react-router-dom'; +import { useLocation, useNavigate } from 'react-router-dom'; import { Delegator } from 'src/features/cybernet/types'; -import { Account, AmountDenom } from 'src/components'; -import useCurrentAddress from 'src/features/cybernet/_move/useCurrentAddress'; +import { Account } from 'src/components'; + +import useCurrentAddress from 'src/hooks/useCurrentAddress'; +import { tableIDs } from 'src/components/Table/tableIDs'; import useCybernetTexts from '../../../useCybernetTexts'; import { cybernetRoutes } from '../../../routes'; import { useCybernet } from '../../../cybernet.context'; import { useDelegates } from '../../../hooks/useDelegate'; import useCurrentAccountStake from '../../../hooks/useCurrentAccountStake'; import IconsNumber from '../../../../../../components/IconsNumber/IconsNumber'; -import SubnetPreview, { - SubnetPreviewGroup, -} from '../../../components/SubnetPreview/SubnetPreview'; -import { tableIDs } from 'src/components/Table/tableIDs'; +import { SubnetPreviewGroup } from '../../../components/SubnetPreview/SubnetPreview'; type Props = {}; diff --git a/src/features/cybernet/ui/pages/Main/ActionBar.tsx b/src/features/cybernet/ui/pages/Main/ActionBar.tsx new file mode 100644 index 000000000..9986d6983 --- /dev/null +++ b/src/features/cybernet/ui/pages/Main/ActionBar.tsx @@ -0,0 +1,19 @@ +import React from 'react'; + +import ActionBarCenter from 'src/components/actionBar'; + +function ActionBar() { + return ( + { + console.log('Create'); + }, + }} + > + ); +} + +export default ActionBar; diff --git a/src/features/cybernet/ui/pages/Main/Main.tsx b/src/features/cybernet/ui/pages/Main/Main.tsx index dde33e5eb..449e0392d 100644 --- a/src/features/cybernet/ui/pages/Main/Main.tsx +++ b/src/features/cybernet/ui/pages/Main/Main.tsx @@ -2,40 +2,23 @@ import Display from 'src/components/containerGradient/Display/Display'; import { LinkWindow } from 'src/components'; import DisplayTitle from 'src/components/containerGradient/DisplayTitle/DisplayTitle'; import { Link, Navigate, useParams } from 'react-router-dom'; -import useAdviserTexts from 'src/features/adviser/useAdviserTexts'; + +import useCurrentAddress from 'src/hooks/useCurrentAddress'; +import { Stars } from 'src/containers/portal/components'; import { cybernetRoutes } from '../../routes'; -import useCurrentAddress from 'src/features/cybernet/_move/useCurrentAddress'; import styles from './Main.module.scss'; import useCurrentAccountStake from '../../hooks/useCurrentAccountStake'; -import useDelegate from '../../hooks/useDelegate'; -import ContractsTable from './ContractsTable/ContractsTable'; import useCybernetTexts from '../../useCybernetTexts'; +import useDelegate from '../../hooks/useDelegate'; import { useCybernet } from '../../cybernet.context'; +import ContractsTable from './ContractsTable/ContractsTable'; import Banner from './Banner/Banner'; -import { Stars } from 'src/containers/portal/components'; function Main() { const address = useCurrentAddress(); const { getText } = useCybernetTexts(); - useAdviserTexts({ - defaultText: ( -
- Rewards are currently not being distributed because -
contract execution is exceeding the block gas limit -
- This issue{' '} - - will be resolved soon - -
- ), - }); - const { data } = useDelegate(address); const currentAddressIsDelegator = !!data; diff --git a/src/features/cybernet/ui/pages/Sigma/Sigma.tsx b/src/features/cybernet/ui/pages/Sigma/Sigma.tsx index f28d6d5e0..622580845 100644 --- a/src/features/cybernet/ui/pages/Sigma/Sigma.tsx +++ b/src/features/cybernet/ui/pages/Sigma/Sigma.tsx @@ -1,24 +1,24 @@ -import { Account, AmountDenom, MainContainer } from 'src/components'; -import Sigma from '../../../../../containers/sigma/index'; -import useCurrentAddress from 'src/features/cybernet/_move/useCurrentAddress'; +import { Account, AmountDenom } from 'src/components'; + +import useCurrentAddress from 'src/hooks/useCurrentAddress'; import Display from 'src/components/containerGradient/Display/Display'; -import { cybernetRoutes } from '../../routes'; -import { useStake } from '../../hooks/useCurrentAccountStake'; import DisplayTitle from 'src/components/containerGradient/DisplayTitle/DisplayTitle'; import { trimString } from 'src/utils/utils'; -import styles from './Sigma.module.scss'; import Loader2 from 'src/components/ui/Loader2'; import useAdviserTexts from 'src/features/adviser/useAdviserTexts'; import { Link } from 'react-router-dom'; import { useCallback, useEffect, useMemo, useState } from 'react'; import { routes } from 'src/routes'; -import { useCybernet } from '../../cybernet.context'; import { AccountInput } from 'src/pages/teleport/components/Inputs'; import IconsNumber from 'src/components/IconsNumber/IconsNumber'; import { CYBERVER_CONTRACTS, CYBERVER_CONTRACTS_LEGACY, } from 'src/features/cybernet/constants'; +import { useCybernet } from '../../cybernet.context'; +import styles from './Sigma.module.scss'; +import { useStake } from '../../hooks/useCurrentAccountStake'; +import { cybernetRoutes } from '../../routes'; function Item({ contractAddress, callback, address }) { const query = useStake({ diff --git a/src/features/cybernet/ui/pages/Subnet/WeightsTable/WeightsTable.tsx b/src/features/cybernet/ui/pages/Subnet/WeightsTable/WeightsTable.tsx new file mode 100644 index 000000000..fb8d4c901 --- /dev/null +++ b/src/features/cybernet/ui/pages/Subnet/WeightsTable/WeightsTable.tsx @@ -0,0 +1,42 @@ +import React, { useMemo } from 'react'; +import { SubnetInfo } from '../../types'; +import { createColumnHelper } from '@tanstack/react-table'; +import Table from 'src/components/Table/Table'; +import { Link, useNavigate } from 'react-router-dom'; +import { routes } from 'src/routes'; +import { Account } from 'src/components'; + +type Props = { + data: SubnetInfo[]; +}; + +const columnHelper = createColumnHelper(); + +function WeightsTable({ data }: Props) { + const navigate = useNavigate(); + + return ( +
+
navigate(`./subnets/${row}`)} + columns={ + // useMemo( + // () => + new Array(data[0].length).fill(null).map((_, i) => { + return columnHelper.accessor(String(i), { + header: String(i), + cell: (info) => info.getValue(), + }); + }) + + // })), + + // [] + } + data={data} + /> + + ); +} + +export default WeightsTable; diff --git a/src/features/cybernet/ui/pages/Subnet/subnet.context.tsx b/src/features/cybernet/ui/pages/Subnet/subnet.context.tsx index 75162f197..caebe2dca 100644 --- a/src/features/cybernet/ui/pages/Subnet/subnet.context.tsx +++ b/src/features/cybernet/ui/pages/Subnet/subnet.context.tsx @@ -1,6 +1,7 @@ import React, { useMemo } from 'react'; import { useParams } from 'react-router-dom'; -import useCurrentAddress from 'src/features/cybernet/_move/useCurrentAddress'; + +import useCurrentAddress from 'src/hooks/useCurrentAddress'; import { SubnetHyperParameters, SubnetInfo, diff --git a/src/features/cybernet/ui/pages/Subnet/tabs/SubnetNeurons/SubnetNeuronsTable/SubnetNeuronsTable.tsx b/src/features/cybernet/ui/pages/Subnet/tabs/SubnetNeurons/SubnetNeuronsTable/SubnetNeuronsTable.tsx index 70a7baab9..ddb345db6 100644 --- a/src/features/cybernet/ui/pages/Subnet/tabs/SubnetNeurons/SubnetNeuronsTable/SubnetNeuronsTable.tsx +++ b/src/features/cybernet/ui/pages/Subnet/tabs/SubnetNeurons/SubnetNeuronsTable/SubnetNeuronsTable.tsx @@ -1,29 +1,29 @@ /* eslint-disable react/no-unstable-nested-components */ import { Link } from 'react-router-dom'; import { Delegator, SubnetNeuron } from 'src/features/cybernet/types'; -import { cybernetRoutes } from '../../../../../routes'; import Table from 'src/components/Table/Table'; import { createColumnHelper } from '@tanstack/react-table'; import { routes } from 'src/routes'; import { Account, Tooltip } from 'src/components'; -import { useCurrentSubnet } from '../../../subnet.context'; -import useCurrentAddress from 'src/features/cybernet/_move/useCurrentAddress'; +import useCurrentAddress from 'src/hooks/useCurrentAddress'; import { useAppData } from 'src/contexts/appData'; -import GradeSetterInput from '../../../GradeSetterInput/GradeSetterInput'; -import { useEffect, useMemo } from 'react'; +import { useMemo } from 'react'; import useCybernetTexts from 'src/features/cybernet/ui/useCybernetTexts'; import { useCurrentContract, useCybernet, } from 'src/features/cybernet/ui/cybernet.context'; -import { getColor } from '../../Weights/WeightsTable/WeightsTable'; -import colorStyles from '../../Weights/WeightsTable/temp.module.scss'; import { checkIsMLVerse } from 'src/features/cybernet/ui/utils/verses'; import IconsNumber from 'src/components/IconsNumber/IconsNumber'; import AdviserHoverWrapper from 'src/features/adviser/AdviserHoverWrapper/AdviserHoverWrapper'; import { tableIDs } from 'src/components/Table/tableIDs'; import { useDelegates } from 'src/features/cybernet/ui/hooks/useDelegate'; import { SubnetPreviewGroup } from 'src/features/cybernet/ui/components/SubnetPreview/SubnetPreview'; +import colorStyles from '../../Weights/WeightsTable/temp.module.scss'; +import { getColor } from '../../Weights/WeightsTable/WeightsTable'; +import GradeSetterInput from '../../../GradeSetterInput/GradeSetterInput'; +import { useCurrentSubnet } from '../../../subnet.context'; +import { cybernetRoutes } from '../../../../../routes'; type Props = {}; @@ -250,10 +250,9 @@ function SubnetNeuronsTable({}: Props) { handleSave(hotkey, netuid, +block, address); }} - to={ - routes.oracle.ask.getLink(metadata.particle) + - `?neuron=${hotkey}&subnet=${netuid}` - } + to={`${routes.oracle.ask.getLink( + metadata.particle + )}?neuron=${hotkey}&subnet=${netuid}`} > subnet !== 0) : neurons.map((neuron) => neuron.uid); - const data = grades.all.data; + const { data } = grades.all; if (!columns?.length) { return null; @@ -111,7 +110,7 @@ function WeightsTable({}: Props) { return ; } - const hotkey = neurons[uid].hotkey; + const { hotkey } = neurons[uid]; return (
diff --git a/src/features/cybernet/ui/pages/Subnet/useCurrentSubnetGrades.tsx b/src/features/cybernet/ui/pages/Subnet/useCurrentSubnetGrades.tsx index eb76c6366..dc69214cb 100644 --- a/src/features/cybernet/ui/pages/Subnet/useCurrentSubnetGrades.tsx +++ b/src/features/cybernet/ui/pages/Subnet/useCurrentSubnetGrades.tsx @@ -1,13 +1,13 @@ import { useCallback, useEffect, useState, useMemo } from 'react'; +import { useAdviser } from 'src/features/adviser/context'; +import { isEqual } from 'lodash'; +import useCurrentAddress from 'src/hooks/useCurrentAddress'; import { formatGradeToWeight, formatWeightToGrade, } from '../../utils/formatWeight'; import useExecuteCybernetContract from '../../useExecuteCybernetContract'; -import { useAdviser } from 'src/features/adviser/context'; -import { isEqual } from 'lodash'; import { useAppData } from '../../../../../contexts/appData'; -import useCurrentAddress from 'src/features/cybernet/_move/useCurrentAddress'; import useCybernetContract from '../../useQueryCybernetContract.refactor'; import { SubnetNeuron, Weights } from '../../../types'; diff --git a/src/features/cybernet/ui/pages/Subnets/SubnetsTable/SubnetsTable.tsx b/src/features/cybernet/ui/pages/Subnets/SubnetsTable/SubnetsTable.tsx index c95f94a4a..4a1f28c42 100644 --- a/src/features/cybernet/ui/pages/Subnets/SubnetsTable/SubnetsTable.tsx +++ b/src/features/cybernet/ui/pages/Subnets/SubnetsTable/SubnetsTable.tsx @@ -1,6 +1,5 @@ /* eslint-disable react/no-unstable-nested-components */ import { useMemo } from 'react'; -import { SubnetInfo } from '../../../../types'; import { createColumnHelper } from '@tanstack/react-table'; import Table from 'src/components/Table/Table'; import { useNavigate } from 'react-router-dom'; @@ -8,17 +7,20 @@ import { routes } from 'src/routes'; import { Account, Cid, Tooltip } from 'src/components'; +import CIDResolver from 'src/components/CIDResolver/CIDResolver'; +import { trimString } from 'src/utils/utils'; +import useCurrentAddress from 'src/hooks/useCurrentAddress'; +import { tableIDs } from 'src/components/Table/tableIDs'; import useDelegate from '../../../hooks/useDelegate'; -import useCurrentAddress from 'src/features/cybernet/_move/useCurrentAddress'; + import GradeSetterInput from '../../Subnet/GradeSetterInput/GradeSetterInput'; import { useSubnet } from '../../Subnet/subnet.context'; -import { routes as subnetRoutes } from '../../../routes'; + import useCybernetTexts from '../../../useCybernetTexts'; +import { routes as subnetRoutes } from '../../../routes'; import { useCurrentContract, useCybernet } from '../../../cybernet.context'; import SubnetPreview from '../../../components/SubnetPreview/SubnetPreview'; -import CIDResolver from 'src/components/CIDResolver/CIDResolver'; -import { trimString } from 'src/utils/utils'; -import { tableIDs } from 'src/components/Table/tableIDs'; +import { SubnetInfo } from '../../../../types'; type Props = { data: SubnetInfo[]; diff --git a/src/features/cybernet/ui/useCybernetTexts.ts b/src/features/cybernet/ui/useCybernetTexts.ts index 97285fdd4..72cc1b071 100644 --- a/src/features/cybernet/ui/useCybernetTexts.ts +++ b/src/features/cybernet/ui/useCybernetTexts.ts @@ -5,7 +5,7 @@ import { useCallback } from 'react'; function useCybernetTexts() { const { selectedContract } = useCybernet(); - const type = selectedContract?.type; + const type = selectedContract?.metadata?.name === 'graph' ? 'graph' : 'ml'; const getText = useCallback( (key: Texts, isPlural?: boolean) => { diff --git a/src/features/cybernet/useContract.ts b/src/features/cybernet/useContract.ts new file mode 100644 index 000000000..aaa87cab3 --- /dev/null +++ b/src/features/cybernet/useContract.ts @@ -0,0 +1,63 @@ +import { useEffect, useRef, useState } from 'react'; +import { useQueryClient } from 'src/contexts/queryClient'; +import { equals } from 'ramda'; +import { + PassportContractQuery, + queryPassportContract, +} from 'src/soft.js/api/passport'; +import { queryContract2 } from './api'; + +type Props = { + query: PassportContractQuery; + skip?: boolean; +}; + +function useCybernetContract({ query, skip }: Props) { + const [data, setData] = useState(); + const [loading, setLoading] = useState(false); + const [error, setError] = useState(); + + const queryClient = useQueryClient(); + + const lastQuery = useRef(); + + async function queryContract(query: PassportContractQuery) { + if (!queryClient) { + return; + } + + try { + setLoading(true); + setData(undefined); + setError(undefined); + + const response = await queryContract2(query, queryClient); + setData(response); + } catch (error) { + console.error(error); + setError(error); + } + setLoading(false); + } + + useEffect(() => { + if (skip) { + return; + } + + if (equals(lastQuery.current, query)) { + return; + } + + lastQuery.current = query; + queryContract(query); + }, [query, skip]); + + return { + data, + loading, + error, + }; +} + +export default useCybernetContract; diff --git a/src/features/passport/hooks/useCurrentPassport.tsx b/src/features/passport/hooks/useCurrentPassport.tsx index a4ef3882b..e55f7ced1 100644 --- a/src/features/passport/hooks/useCurrentPassport.tsx +++ b/src/features/passport/hooks/useCurrentPassport.tsx @@ -1,6 +1,6 @@ import { useAppSelector } from 'src/redux/hooks'; -import useCurrentAddress from '../../../hooks/useCurrentAddress'; import { fromBech32 } from 'src/utils/utils'; +import useCurrentAddress from '../../../hooks/useCurrentAddress'; function useCurrentPassport() { const currentAddress = useCurrentAddress(); diff --git a/src/pages/Social/GitHub/GitHub.tsx b/src/pages/Social/GitHub/GitHub.tsx index 282dd5346..0d9a6b6bf 100644 --- a/src/pages/Social/GitHub/GitHub.tsx +++ b/src/pages/Social/GitHub/GitHub.tsx @@ -63,7 +63,7 @@ export function GitHub() { zIndex: 4, }} > - + githubapp - + github + node + + + github congress
diff --git a/src/pages/Social/Social.tsx b/src/pages/Social/Social.tsx index 8d8493c40..83ae4f982 100644 --- a/src/pages/Social/Social.tsx +++ b/src/pages/Social/Social.tsx @@ -41,16 +41,7 @@ function Social() {
👾
Hub links -
- - - info.cyb.ai@protonmail.com - + diff --git a/src/pages/Social/Telegram/Telegram.tsx b/src/pages/Social/Telegram/Telegram.tsx index 20437bfec..36bda2294 100644 --- a/src/pages/Social/Telegram/Telegram.tsx +++ b/src/pages/Social/Telegram/Telegram.tsx @@ -33,7 +33,7 @@ export function Telegram() { src={telegram} /> - t/eng + t/uncensored @@ -43,7 +43,7 @@ export function Telegram() { src={telegram} /> - t/ru + t/community @@ -89,7 +89,7 @@ export function Telegram() { } } > - +
- +
- behold the new{' '} - truth medium + {/*behold the new{' '}*/} + {/*truth medium*/} + cyberver ), description: ( <> - cyber is the + cyber is the protocol for unified, provable, collective learning ), }, }; -const QUERY_KEY = 'type'; +// const QUERY_KEY = 'type'; function OracleLanding() { - const [searchParams] = useSearchParams(); - const type = searchParams.get(QUERY_KEY); + // const [searchParams] = useSearchParams(); + // const type = searchParams.get(QUERY_KEY); const [titleType, setTitleType] = useState(TitleType.ai); const [isRenderGraph, setIsRenderGraph] = useState(false); const { viewportWidth } = useDevice(); - const navigate = useNavigate(); + // const navigate = useNavigate(); const ref = useRef(null); const dispatch = useAppDispatch(); diff --git a/src/pages/robot/_refactor/account/hooks/useGetBalance.js b/src/pages/robot/_refactor/account/hooks/useGetBalance.js index 0cf7e91e6..5bed17ad7 100644 --- a/src/pages/robot/_refactor/account/hooks/useGetBalance.js +++ b/src/pages/robot/_refactor/account/hooks/useGetBalance.js @@ -107,16 +107,30 @@ function useGetBalance(address, updateAddress) { addressActive ); if (rewardsPropsise.total && rewardsPropsise.total.length > 0) { - setBalance((item) => ({ - ...item, - rewards: Math.floor( - coinDecimals(parseFloat(rewardsPropsise.total[0].amount)) - ), - total: Math.floor( - item.total + + if (rewardsPropsise.total.length === 1 || rewardsPropsise.total[0].denom === BASE_DENOM) { + setBalance((item) => ({ + ...item, + rewards: Math.floor( coinDecimals(parseFloat(rewardsPropsise.total[0].amount)) - ), - })); + ), + total: Math.floor( + item.total + + coinDecimals(parseFloat(rewardsPropsise.total[0].amount)) + ), + })); + } + else { + setBalance((item) => ({ + ...item, + rewards: Math.floor( + coinDecimals(parseFloat(rewardsPropsise.total[1].amount)) + ), + total: Math.floor( + item.total + + coinDecimals(parseFloat(rewardsPropsise.total[1].amount)) + ), + })); + } } const dataValidatorAddress = fromBech32( addressActive, @@ -134,7 +148,7 @@ function useGetBalance(address, updateAddress) { ), total: Math.floor( item.total + - coinDecimals(parseFloat(commission.commission[0].amount)) + coinDecimals(parseFloat(commission.commission[0].amount)) ), })); } diff --git a/src/router.tsx b/src/router.tsx index f2f2cfe75..8f80c1f1e 100644 --- a/src/router.tsx +++ b/src/router.tsx @@ -50,12 +50,11 @@ import Robot from './pages/robot/Robot'; import SigmaWrapper from './containers/sigma/SigmaWrapper'; import Keys from './pages/Keys/Keys'; import Teleport from './pages/teleport/Teleport'; -import OracleLanding from './pages/oracle/landing/OracleLanding'; import Learn from './pages/oracle/Learn/Learn'; import ToOracleAsk from './pages/redirects/ToOracleAsk'; import Social from './pages/Social/Social'; import Brain from './pages/Brain/Brain'; -// import Cybernet from './features/cybernet/ui/Cybernet'; +import Cybernet from './features/cybernet/ui/Cybernet'; import Settings from './pages/Settings/Settings'; import FreestyleIde from './pages/robot/Soul/RuneEditor/FreestyleIde/FreestyleIde'; import Map from './pages/Portal/Map/Map'; @@ -116,7 +115,9 @@ function AppRouter() { }> - } /> + } /> + {/* + } /> */} } /> } /> @@ -217,7 +218,7 @@ function AppRouter() { } /> - {/* } /> */} + } /> } /> diff --git a/src/utils/appsMenu/appsMenu.ts b/src/utils/appsMenu/appsMenu.ts index 7a8e2fc96..09a70d40e 100644 --- a/src/utils/appsMenu/appsMenu.ts +++ b/src/utils/appsMenu/appsMenu.ts @@ -7,11 +7,11 @@ import senate from 'images/temple/senate.png'; import portal from 'images/space-pussy.svg'; import oracle from 'images/temple/oracle.png'; import warp from 'images/temple/warp.png'; -import congress from 'images/congress.png'; import { routes } from 'src/routes'; import { Networks } from 'src/types/networks'; -import { cybernetRoutes } from 'src/features/cybernet/ui/routes'; import { CHAIN_ID } from 'src/constants/config'; +import congress from 'images/congress.png'; +import { cybernetRoutes } from 'src/features/cybernet/ui/routes'; const getMenuItems = () => { const listItemMenu = [ @@ -32,8 +32,8 @@ const getMenuItems = () => { // subItems: myRobotLinks, }, { - name: 'Oracle', - to: '/', + name: 'Explorer', + to: '/oracle/stats', icon: oracle, subItems: [ { @@ -72,8 +72,9 @@ const getMenuItems = () => { }, { name: 'Nebula', to: '/nebula', subItems: [], icon: nebulaIcon }, { - name: 'Teleport', - to: '/teleport', + name: 'Swap', + to: '/teleport/swap', + subItems: [], icon: teleport, active: false, subItems: [ @@ -116,8 +117,18 @@ const getMenuItems = () => { }, ], }, + // { + // name: 'Pools', + // icon: warp, + // to: '/warp', + // subItems: [ + // { name: 'Add liquidity', to: '/warp/add-liquidity' }, + // { name: 'Create pool', to: '/warp/create-pool' }, + // { name: 'Sub liquidity', to: '/warp/sub-liquidity' }, + // ], + // }, { - name: 'Sphere', + name: 'Stake', icon: shpere, to: routes.sphere.path, subItems: [ @@ -128,7 +139,7 @@ const getMenuItems = () => { }, ], }, - { name: 'HFR', icon: hfr, to: '/hfr', subItems: [] }, + { name: 'Investmint', icon: hfr, to: '/hfr', subItems: [] }, // { name: 'Lifeforms', to: '/contracts', subItems: [] }, // { // name: 'Hub', @@ -139,7 +150,8 @@ const getMenuItems = () => { // { name: 'Add network', to: '/networks/add' }, // ], // }, - { name: 'Senate', icon: senate, to: '/senate', subItems: [] }, + // { name: 'Senate', icon: senate, to: '/senate', subItems: [] }, + { name: 'Governance', icon: senate, to: '/senate', subItems: [] }, CHAIN_ID === Networks.BOSTROM ? { @@ -236,7 +248,7 @@ const getMenuItems = () => { // }, ]; - if (CHAIN_ID === Networks.BOSTROM || CHAIN_ID === Networks.SPACE_PUSSY) { + if (CHAIN_ID === Networks.BOSTROM) { listItemMenu.splice(2, 0, { name: 'Portal', icon: portal, diff --git a/yarn.lock b/yarn.lock index d866dd2cf..5ff21460c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10302,6 +10302,11 @@ resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-9.0.7.tgz#b14cebc75455eeeb160d5fe23c2fcc0c64f724d8" integrity sha512-WUtIVRUZ9i5dYXefDEAI7sh9/O7jGvHg7Df/5O/gtH3Yabe5odI3UWopVR1qbPXQtvOxWu3mM4XxlYeZtMWF4g== +"@types/web-animations-js@^2.2.16": + version "2.2.16" + resolved "https://registry.yarnpkg.com/@types/web-animations-js/-/web-animations-js-2.2.16.tgz#fd84c49a7a2f148b588ba8b372496162b427742f" + integrity sha512-ATELeWMFwj8eQiH0KmvsCl1V2lu/qx/CjOBmv4ADSZS5u8r4reMyjCXtxG7khqyiwH3IOMNdrON/Ugn94OUcRA== + "@types/webpack@^5.28.1": version "5.28.1" resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-5.28.1.tgz#c369baeff31abe54b45f7f29997e1623604198d6" @@ -27840,6 +27845,14 @@ react-dom@16.8.6: prop-types "^15.6.2" scheduler "^0.13.6" +react-dom@>=18.2.0: + version "18.3.1" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.3.1.tgz#c2265d79511b57d479b3dd3fdfa51536494c5cb4" + integrity sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw== + dependencies: + loose-envify "^1.1.0" + scheduler "^0.23.2" + react-dom@^18.0.0: version "18.2.0" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" @@ -28234,6 +28247,13 @@ react@16.8.6: prop-types "^15.6.2" scheduler "^0.13.6" +react@>=18.2.0: + version "18.3.1" + resolved "https://registry.yarnpkg.com/react/-/react-18.3.1.tgz#49ab892009c53933625bd16b2533fc754cab2891" + integrity sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ== + dependencies: + loose-envify "^1.1.0" + react@^18.0.0: version "18.2.0" resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" @@ -29333,6 +29353,13 @@ scheduler@^0.23.0: dependencies: loose-envify "^1.1.0" +scheduler@^0.23.2: + version "0.23.2" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.2.tgz#414ba64a3b282892e944cf2108ecc078d115cdc3" + integrity sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ== + dependencies: + loose-envify "^1.1.0" + schema-utils@^3.0.0, schema-utils@^3.1.0, schema-utils@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.1.tgz#bc74c4b6b6995c1d88f76a8b77bea7219e0c8281" @@ -31976,6 +32003,22 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== +typeit-react@^2.7.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/typeit-react/-/typeit-react-2.7.1.tgz#30a4b947ddd70320285a414426d711b7db77202f" + integrity sha512-40MB1PeED6FOh3yY4ZWhSIppmzqdnwBh7iTOtjgrYntVqs0Bit94w5D+eLqMIWKvRY9NX2+2xSYk6j2QkcTjTQ== + dependencies: + react ">=18.2.0" + react-dom ">=18.2.0" + typeit "^8.8.3" + +typeit@^8.8.3: + version "8.8.3" + resolved "https://registry.yarnpkg.com/typeit/-/typeit-8.8.3.tgz#1933700fb92f0c9d1f53fc9c2d927bb83004052f" + integrity sha512-K7nChkj6iyylUi713VBDULUXXLF0pfB6nFPVhNnXTKO2An7NzVz5fjoAHk2FAC3TFLiSnU+QsqhDmap17oBELw== + dependencies: + "@types/web-animations-js" "^2.2.16" + typescript@^5.0.2: version "5.0.4" resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.0.4.tgz#b217fd20119bd61a94d4011274e0ab369058da3b"