diff --git a/explorer-nextjs/app/components/CustomColumnHeading.tsx b/explorer-nextjs/app/components/CustomColumnHeading.tsx
index e767db34c1..2069b93931 100644
--- a/explorer-nextjs/app/components/CustomColumnHeading.tsx
+++ b/explorer-nextjs/app/components/CustomColumnHeading.tsx
@@ -1,13 +1,13 @@
-import * as React from 'react'
-import { Box, Typography } from '@mui/material'
-import { useTheme } from '@mui/material/styles'
-import { Tooltip } from '@nymproject/react/tooltip/Tooltip'
+import * as React from "react";
+import { Box, Typography } from "@mui/material";
+import { useTheme } from "@mui/material/styles";
+import { Tooltip } from "@nymproject/react";
export const CustomColumnHeading: FCWithChildren<{
- headingTitle: string
- tooltipInfo?: string
+ headingTitle: string;
+ tooltipInfo?: string;
}> = ({ headingTitle, tooltipInfo }) => {
- const theme = useTheme()
+ const theme = useTheme();
return (
@@ -26,5 +26,5 @@ export const CustomColumnHeading: FCWithChildren<{
{headingTitle}
- )
-}
+ );
+};
diff --git a/explorer-nextjs/app/components/Delegations/DelegateModal.tsx b/explorer-nextjs/app/components/Delegations/DelegateModal.tsx
index 5b453e8ad5..de5488a9ce 100644
--- a/explorer-nextjs/app/components/Delegations/DelegateModal.tsx
+++ b/explorer-nextjs/app/components/Delegations/DelegateModal.tsx
@@ -1,35 +1,35 @@
-'use client'
+"use client";
-import React, { useState } from 'react'
-import { Box, SxProps } from '@mui/material'
-import { IdentityKeyFormField } from '@nymproject/react/mixnodes/IdentityKeyFormField'
-import { CurrencyFormField } from '@nymproject/react/currency/CurrencyFormField'
-import { CurrencyDenom, DecCoin } from '@nymproject/types'
-import { useWalletContext } from '@/app/context/wallet'
-import { urls } from '@/app/utils'
-import { useDelegationsContext } from '@/app/context/delegations'
-import { validateAmount } from '@/app/utils/currency'
-import { SimpleModal } from './SimpleModal'
-import { ModalListItem } from './ModalListItem'
-import { DelegationModalProps } from './DelegationModal'
+import React, { useState } from "react";
+import { Box, SxProps } from "@mui/material";
+import { IdentityKeyFormField } from "@nymproject/react";
+import { CurrencyFormField } from "@nymproject/react";
+import { CurrencyDenom, DecCoin } from "@nymproject/types";
+import { useWalletContext } from "@/app/context/wallet";
+import { urls } from "@/app/utils";
+import { useDelegationsContext } from "@/app/context/delegations";
+import { validateAmount } from "@/app/utils/currency";
+import { SimpleModal } from "./SimpleModal";
+import { ModalListItem } from "./ModalListItem";
+import { DelegationModalProps } from "./DelegationModal";
-const MIN_AMOUNT_TO_DELEGATE = 10
+const MIN_AMOUNT_TO_DELEGATE = 10;
type Props = {
- mixId: number
- identityKey: string
- header?: string
- buttonText?: string
- rewardInterval?: string
- estimatedReward?: number
- profitMarginPercentage?: string | null
- nodeUptimePercentage?: number | null
- denom: CurrencyDenom
- sx?: SxProps
- backdropProps?: object
- onClose: () => void
- onOk?: (delegationModalProps: DelegationModalProps) => void
-}
+ mixId: number;
+ identityKey: string;
+ header?: string;
+ buttonText?: string;
+ rewardInterval?: string;
+ estimatedReward?: number;
+ profitMarginPercentage?: string | null;
+ nodeUptimePercentage?: number | null;
+ denom: CurrencyDenom;
+ sx?: SxProps;
+ backdropProps?: object;
+ onClose: () => void;
+ onOk?: (delegationModalProps: DelegationModalProps) => void;
+};
export const DelegateModal = ({
mixId,
@@ -40,106 +40,106 @@ export const DelegateModal = ({
sx,
}: Props) => {
const [amount, setAmount] = useState({
- amount: '10',
- denom: 'nym',
- })
- const [isValidated, setValidated] = useState(false)
- const [errorAmount, setErrorAmount] = useState()
+ amount: "10",
+ denom: "nym",
+ });
+ const [isValidated, setValidated] = useState(false);
+ const [errorAmount, setErrorAmount] = useState();
- const { address, balance } = useWalletContext()
- const { handleDelegate } = useDelegationsContext()
+ const { address, balance } = useWalletContext();
+ const { handleDelegate } = useDelegationsContext();
const validate = async () => {
- let newValidatedValue = true
- let errorAmountMessage
+ let newValidatedValue = true;
+ let errorAmountMessage;
- if (amount && !(await validateAmount(amount.amount, '0'))) {
- newValidatedValue = false
- errorAmountMessage = 'Please enter a valid amount'
+ if (amount && !(await validateAmount(amount.amount, "0"))) {
+ newValidatedValue = false;
+ errorAmountMessage = "Please enter a valid amount";
}
if (amount && +amount.amount < MIN_AMOUNT_TO_DELEGATE) {
- errorAmountMessage = `Min. delegation amount: ${MIN_AMOUNT_TO_DELEGATE} ${denom.toUpperCase()}`
- newValidatedValue = false
+ errorAmountMessage = `Min. delegation amount: ${MIN_AMOUNT_TO_DELEGATE} ${denom.toUpperCase()}`;
+ newValidatedValue = false;
}
if (!amount?.amount.length) {
- newValidatedValue = false
+ newValidatedValue = false;
}
if (amount && balance.data && +balance.data - +amount.amount <= 0) {
- errorAmountMessage = 'Not enough funds'
- newValidatedValue = false
+ errorAmountMessage = "Not enough funds";
+ newValidatedValue = false;
}
- setErrorAmount(errorAmountMessage)
- setValidated(newValidatedValue)
- }
+ setErrorAmount(errorAmountMessage);
+ setValidated(newValidatedValue);
+ };
const delegateToMixnode = async ({
delegationMixId,
delegationAmount,
}: {
- delegationMixId: number
- delegationAmount: string
+ delegationMixId: number;
+ delegationAmount: string;
}) => {
try {
- const tx = await handleDelegate(delegationMixId, delegationAmount)
- return tx
+ const tx = await handleDelegate(delegationMixId, delegationAmount);
+ return tx;
} catch (e) {
- console.error('Failed to delegate to mixnode', e)
- throw e
+ console.error("Failed to delegate to mixnode", e);
+ throw e;
}
- }
+ };
const handleConfirm = async () => {
if (mixId && amount && onOk) {
onOk({
- status: 'loading',
- })
+ status: "loading",
+ });
try {
if (!address) {
- throw new Error('Please connect your wallet')
+ throw new Error("Please connect your wallet");
}
const tx = await delegateToMixnode({
delegationMixId: mixId,
delegationAmount: amount.amount,
- })
+ });
if (!tx) {
- throw new Error('Failed to delegate')
+ throw new Error("Failed to delegate");
}
onOk({
- status: 'success',
- message: 'Delegation can take up to one hour to process',
+ status: "success",
+ message: "Delegation can take up to one hour to process",
transactions: [
{
- url: `${urls('MAINNET').blockExplorer}/transaction/${
+ url: `${urls("MAINNET").blockExplorer}/transaction/${
tx.transactionHash
}`,
hash: tx.transactionHash,
},
],
- })
+ });
} catch (e) {
- console.error('Failed to delegate', e)
+ console.error("Failed to delegate", e);
onOk({
- status: 'error',
+ status: "error",
message: (e as Error).message,
- })
+ });
}
}
- }
+ };
const handleAmountChanged = (newAmount: DecCoin) => {
- setAmount(newAmount)
- }
+ setAmount(newAmount);
+ };
React.useEffect(() => {
- validate()
- }, [amount, identityKey, mixId])
+ validate();
+ }, [amount, identityKey, mixId]);
return (
- )
-}
+ );
+};
diff --git a/explorer-nextjs/app/components/Delegations/DelegationModal.tsx b/explorer-nextjs/app/components/Delegations/DelegationModal.tsx
index 76c37a9e96..071b76a4e4 100644
--- a/explorer-nextjs/app/components/Delegations/DelegationModal.tsx
+++ b/explorer-nextjs/app/components/Delegations/DelegationModal.tsx
@@ -1,26 +1,26 @@
-import React from 'react'
-import { Typography, SxProps, Stack } from '@mui/material'
-import { Link } from '@nymproject/react/link/Link'
-import { LoadingModal } from './LoadingModal'
-import { ConfirmationModal } from './ConfirmationModal'
-import { ErrorModal } from './ErrorModal'
+import React from "react";
+import { Typography, SxProps, Stack } from "@mui/material";
+import { Link } from "@nymproject/react";
+import { LoadingModal } from "./LoadingModal";
+import { ConfirmationModal } from "./ConfirmationModal";
+import { ErrorModal } from "./ErrorModal";
export type DelegationModalProps = {
- status: 'loading' | 'success' | 'error' | 'info'
- message?: string
+ status: "loading" | "success" | "error" | "info";
+ message?: string;
transactions?: {
- url: string
- hash: string
- }[]
-}
+ url: string;
+ hash: string;
+ }[];
+};
export const DelegationModal: FCWithChildren<
DelegationModalProps & {
- open: boolean
- onClose: () => void
- sx?: SxProps
- backdropProps?: object
- children?: React.ReactNode
+ open: boolean;
+ onClose: () => void;
+ sx?: SxProps;
+ backdropProps?: object;
+ children?: React.ReactNode;
}
> = ({
status,
@@ -32,18 +32,18 @@ export const DelegationModal: FCWithChildren<
sx,
backdropProps,
}) => {
- if (status === 'loading')
- return
+ if (status === "loading")
+ return ;
- if (status === 'error') {
+ if (status === "error") {
return (
{children}
- )
+ );
}
- if (status === 'info') {
+ if (status === "info") {
return (
{message}
- )
+ );
}
return (
@@ -91,5 +91,5 @@ export const DelegationModal: FCWithChildren<
)}
- )
-}
+ );
+};
diff --git a/explorer-nextjs/app/components/DetailTable.tsx b/explorer-nextjs/app/components/DetailTable.tsx
index 73868b8ce9..e1389d1bdf 100644
--- a/explorer-nextjs/app/components/DetailTable.tsx
+++ b/explorer-nextjs/app/components/DetailTable.tsx
@@ -1,4 +1,4 @@
-import * as React from 'react'
+import * as React from "react";
import {
Link,
Paper,
@@ -9,49 +9,49 @@ import {
TableHead,
TableRow,
TableCellProps,
-} from '@mui/material'
-import { useTheme } from '@mui/material/styles'
-import { Tooltip } from '@nymproject/react/tooltip/Tooltip'
-import { CopyToClipboard } from '@nymproject/react/clipboard/CopyToClipboard'
-import { Box } from '@mui/system'
-import { unymToNym } from '@/app/utils/currency'
-import { GatewayEnrichedRowType } from './Gateways/Gateways'
-import { MixnodeRowType } from './MixNodes'
-import { StakeSaturationProgressBar } from './MixNodes/Economics/StakeSaturationProgressBar'
+} from "@mui/material";
+import { useTheme } from "@mui/material/styles";
+import { Tooltip } from "@nymproject/react";
+import { CopyToClipboard } from "@nymproject/react";
+import { Box } from "@mui/system";
+import { unymToNym } from "@/app/utils/currency";
+import { GatewayEnrichedRowType } from "./Gateways/Gateways";
+import { MixnodeRowType } from "./MixNodes";
+import { StakeSaturationProgressBar } from "./MixNodes/Economics/StakeSaturationProgressBar";
export type ColumnsType = {
- field: string
- title: string
- headerAlign?: TableCellProps['align']
- width?: string | number
- tooltipInfo?: string
-}
+ field: string;
+ title: string;
+ headerAlign?: TableCellProps["align"];
+ width?: string | number;
+ tooltipInfo?: string;
+};
export interface UniversalTableProps {
- tableName: string
- columnsData: ColumnsType[]
- rows: T[]
+ tableName: string;
+ columnsData: ColumnsType[];
+ rows: T[];
}
function formatCellValues(val: string | number, field: string) {
- if (field === 'identity_key' && typeof val === 'string') {
+ if (field === "identity_key" && typeof val === "string") {
return (
{val}
- )
+ );
}
- if (field === 'bond') {
- return unymToNym(val, 6)
+ if (field === "bond") {
+ return unymToNym(val, 6);
}
- if (field === 'owner') {
+ if (field === "owner") {
return (
{val}
- )
+ );
}
- if (field === 'stake_saturation') {
- return
+ if (field === "stake_saturation") {
+ return ;
}
- return val
+ return val;
}
export const DetailTable: FCWithChildren<{
- tableName: string
- columnsData: ColumnsType[]
- rows: MixnodeRowType[] | GatewayEnrichedRowType[]
+ tableName: string;
+ columnsData: ColumnsType[];
+ rows: MixnodeRowType[] | GatewayEnrichedRowType[];
}> = ({ tableName, columnsData, rows }: UniversalTableProps) => {
- const theme = useTheme()
+ const theme = useTheme();
return (
@@ -87,9 +87,9 @@ export const DetailTable: FCWithChildren<{
key={field}
sx={{ fontSize: 14, fontWeight: 600, width }}
>
-
+
{tooltipInfo && (
-
+
(
{columnsData?.map((data, index) => (
{formatCellValues(
eachRow[columnsData[index].field],
@@ -141,5 +141,5 @@ export const DetailTable: FCWithChildren<{
- )
-}
+ );
+};
diff --git a/explorer-nextjs/app/components/MixNodes/Economics/Table.tsx b/explorer-nextjs/app/components/MixNodes/Economics/Table.tsx
index a70a013a24..c98b92147f 100644
--- a/explorer-nextjs/app/components/MixNodes/Economics/Table.tsx
+++ b/explorer-nextjs/app/components/MixNodes/Economics/Table.tsx
@@ -1,4 +1,4 @@
-import * as React from 'react'
+import * as React from "react";
import {
Paper,
Table,
@@ -8,26 +8,26 @@ import {
TableHead,
TableRow,
Typography,
-} from '@mui/material'
-import { Box } from '@mui/system'
-import { useTheme } from '@mui/material/styles'
-import { Tooltip } from '@nymproject/react/tooltip/Tooltip'
-import { EconomicsRowsType, EconomicsInfoRowWithIndex } from './types'
-import { UniversalTableProps } from '@/app/components/DetailTable'
-import { textColour } from '@/app/utils'
+} from "@mui/material";
+import { Box } from "@mui/system";
+import { useTheme } from "@mui/material/styles";
+import { Tooltip } from "@nymproject/react";
+import { EconomicsRowsType, EconomicsInfoRowWithIndex } from "./types";
+import { UniversalTableProps } from "@/app/components/DetailTable";
+import { textColour } from "@/app/utils";
const formatCellValues = (value: EconomicsRowsType, field: string) => (
-
-
+
+
{value.value}
-)
+);
export const DelegatorsInfoTable: FCWithChildren<
UniversalTableProps
> = ({ tableName, columnsData, rows }) => {
- const theme = useTheme()
+ const theme = useTheme();
return (
@@ -39,7 +39,7 @@ export const DelegatorsInfoTable: FCWithChildren<
key={field}
sx={{ fontSize: 14, fontWeight: 600, width }}
>
-
+
{tooltipInfo && (
(
{columnsData?.map((_, index: number) => {
- const { field } = columnsData[index]
- const value: EconomicsRowsType = (eachRow as any)[field]
+ const { field } = columnsData[index];
+ const value: EconomicsRowsType = (eachRow as any)[field];
return (
{formatCellValues(value, columnsData[index].field)}
- )
+ );
})}
))}
- )
-}
+ );
+};
diff --git a/explorer-nextjs/app/components/Nav/DesktopNav.tsx b/explorer-nextjs/app/components/Nav/DesktopNav.tsx
index abc4c0901a..c8c872b9b4 100644
--- a/explorer-nextjs/app/components/Nav/DesktopNav.tsx
+++ b/explorer-nextjs/app/components/Nav/DesktopNav.tsx
@@ -1,91 +1,92 @@
-'use client'
+"use client";
-import * as React from 'react'
-import { ExpandLess, ExpandMore, Menu } from '@mui/icons-material'
-import { CSSObject, styled, Theme, useTheme } from '@mui/material/styles'
-import { Link as MuiLink } from '@mui/material'
-import Button from '@mui/material/Button'
-import Box from '@mui/material/Box'
-import ListItem from '@mui/material/ListItem'
-import MuiDrawer from '@mui/material/Drawer'
-import AppBar from '@mui/material/AppBar'
-import Toolbar from '@mui/material/Toolbar'
-import Typography from '@mui/material/Typography'
-import List from '@mui/material/List'
-import IconButton from '@mui/material/IconButton'
-import ListItemButton from '@mui/material/ListItemButton'
-import ListItemIcon from '@mui/material/ListItemIcon'
-import ListItemText from '@mui/material/ListItemText'
-import { NYM_WEBSITE } from '@/app/api/constants'
-import { useMainContext } from '@/app/context/main'
-import { MobileDrawerClose } from '@/app/icons/MobileDrawerClose'
-import { NavOptionType, originalNavOptions } from '@/app/context/nav'
-import { DarkLightSwitchDesktop } from '@/app/components/Switch'
-import { Footer } from '@/app/components/Footer'
-import { ConnectKeplrWallet } from '@/app/components/Wallet/ConnectKeplrWallet'
-import { usePathname, useRouter } from 'next/navigation'
+import * as React from "react";
+import { Menu } from "@mui/icons-material";
+import { CSSObject, styled, Theme, useTheme } from "@mui/material/styles";
+import { Link as MuiLink } from "@mui/material";
+import Button from "@mui/material/Button";
+import Box from "@mui/material/Box";
+import ListItem from "@mui/material/ListItem";
+import MuiDrawer from "@mui/material/Drawer";
+import AppBar from "@mui/material/AppBar";
+import Toolbar from "@mui/material/Toolbar";
+import Typography from "@mui/material/Typography";
+import List from "@mui/material/List";
+import IconButton from "@mui/material/IconButton";
+import ListItemButton from "@mui/material/ListItemButton";
+import ListItemIcon from "@mui/material/ListItemIcon";
+import ListItemText from "@mui/material/ListItemText";
+import { NYM_WEBSITE } from "@/app/api/constants";
+import { useMainContext } from "@/app/context/main";
+import { MobileDrawerClose } from "@/app/icons/MobileDrawerClose";
+import { NavOptionType, originalNavOptions } from "@/app/context/nav";
+import { DarkLightSwitchDesktop } from "@/app/components/Switch";
+import { Footer } from "@/app/components/Footer";
+import { ConnectKeplrWallet } from "@/app/components/Wallet/ConnectKeplrWallet";
+import { usePathname, useRouter } from "next/navigation";
+import { NymLogo } from "@nymproject/react";
-const drawerWidth = 255
-const bannerHeight = 80
+const drawerWidth = 255;
+const bannerHeight = 80;
const openedMixin = (theme: Theme): CSSObject => ({
width: drawerWidth,
- transition: theme.transitions.create('width', {
+ transition: theme.transitions.create("width", {
easing: theme.transitions.easing.sharp,
duration: theme.transitions.duration.enteringScreen,
}),
- overflowX: 'hidden',
-})
+ overflowX: "hidden",
+});
const closedMixin = (theme: Theme): CSSObject => ({
- transition: theme.transitions.create('width', {
+ transition: theme.transitions.create("width", {
easing: theme.transitions.easing.sharp,
duration: theme.transitions.duration.leavingScreen,
}),
- overflowX: 'hidden',
+ overflowX: "hidden",
width: `calc(${theme.spacing(7)} + 1px)`,
-})
+});
-const DrawerHeader = styled('div')(({ theme }) => ({
- display: 'flex',
- alignItems: 'center',
- justifyContent: 'flex-end',
+const DrawerHeader = styled("div")(({ theme }) => ({
+ display: "flex",
+ alignItems: "center",
+ justifyContent: "flex-end",
padding: theme.spacing(0, 1),
height: 64,
-}))
+}));
const Drawer = styled(MuiDrawer, {
- shouldForwardProp: (prop) => prop !== 'open',
+ shouldForwardProp: (prop) => prop !== "open",
})(({ theme, open }) => ({
width: drawerWidth,
flexShrink: 0,
- whiteSpace: 'nowrap',
- boxSizing: 'border-box',
+ whiteSpace: "nowrap",
+ boxSizing: "border-box",
...(open && {
...openedMixin(theme),
- '& .MuiDrawer-paper': openedMixin(theme),
+ "& .MuiDrawer-paper": openedMixin(theme),
}),
...(!open && {
...closedMixin(theme),
- '& .MuiDrawer-paper': closedMixin(theme),
+ "& .MuiDrawer-paper": closedMixin(theme),
}),
-}))
+}));
type ExpandableButtonType = {
- title: string
- url: string
- isActive?: boolean
- Icon?: React.ReactNode
- nested?: NavOptionType[]
- isChild?: boolean
- isMobile: boolean
- drawIsTempOpen: boolean
- drawIsFixed: boolean
- isExternalLink?: boolean
- openDrawer: () => void
- closeDrawer?: () => void
- fixDrawerClose?: () => void
-}
+ title: string;
+ url: string;
+ isActive?: boolean;
+ Icon?: React.ReactNode;
+ nested?: NavOptionType[];
+ isChild?: boolean;
+ isMobile: boolean;
+ drawIsTempOpen: boolean;
+ drawIsFixed: boolean;
+ isExternalLink?: boolean;
+ openDrawer: () => void;
+ closeDrawer?: () => void;
+ fixDrawerClose?: () => void;
+};
export const ExpandableButton: FCWithChildren = ({
title,
@@ -101,33 +102,33 @@ export const ExpandableButton: FCWithChildren = ({
closeDrawer,
fixDrawerClose,
}) => {
- const { palette } = useTheme()
- const pathname = usePathname()
- const router = useRouter()
+ const { palette } = useTheme();
+ const pathname = usePathname();
+ const router = useRouter();
const handleClick = () => {
- if (title === 'Network Components') {
- return undefined
+ if (title === "Network Components") {
+ return undefined;
}
if (isExternalLink) {
- window.open(url, '_blank')
+ window.open(url, "_blank");
- return undefined
+ return undefined;
}
if (!isExternalLink) {
- router.push(url, {})
+ router.push(url, {});
}
if (closeDrawer) {
- closeDrawer()
+ closeDrawer();
}
- }
+ };
const selectedStyle = {
background: palette.nym.networkExplorer.nav.selected.main,
borderRight: `3px solid ${palette.nym.highlight}`,
- }
+ };
return (
<>
@@ -135,12 +136,12 @@ export const ExpandableButton: FCWithChildren = ({
disablePadding
disableGutters
sx={{
- borderBottom: isChild ? 'none' : '1px solid rgba(255, 255, 255, 0.1)',
+ borderBottom: isChild ? "none" : "1px solid rgba(255, 255, 255, 0.1)",
...(pathname === url
? selectedStyle
: {
background: palette.nym.networkExplorer.nav.background,
- borderRight: 'none',
+ borderRight: "none",
}),
}}
>
@@ -151,10 +152,10 @@ export const ExpandableButton: FCWithChildren = ({
pb: 2,
background: isChild
? palette.nym.networkExplorer.nav.selected.nested
- : 'none',
+ : "none",
}}
>
- {Icon}
+ {Icon}
= ({
/>
))}
>
- )
-}
+ );
+};
export const Nav: FCWithChildren = ({ children }) => {
- const { environment } = useMainContext()
- const [drawerIsOpen, setDrawerToOpen] = React.useState(false)
- const [fixedOpen, setFixedOpen] = React.useState(false)
+ const { environment } = useMainContext();
+ const [drawerIsOpen, setDrawerToOpen] = React.useState(false);
+ const [fixedOpen, setFixedOpen] = React.useState(false);
// Set maintenance banner to false by default to don't display it
- const [openMaintenance, setOpenMaintenance] = React.useState(false)
- const theme = useTheme()
+ const [openMaintenance, setOpenMaintenance] = React.useState(false);
+ const theme = useTheme();
const explorerName = environment
? `${environment} Explorer`
- : 'Mainnet Explorer'
+ : "Mainnet Explorer";
const switchNetworkText =
- environment === 'mainnet' ? 'Switch to Testnet' : 'Switch to Mainnet'
+ environment === "mainnet" ? "Switch to Testnet" : "Switch to Mainnet";
const switchNetworkLink =
- environment === 'mainnet'
- ? 'https://sandbox-explorer.nymtech.net'
- : 'https://explorer.nymtech.net'
+ environment === "mainnet"
+ ? "https://sandbox-explorer.nymtech.net"
+ : "https://explorer.nymtech.net";
const fixDrawerOpen = () => {
- setFixedOpen(true)
- setDrawerToOpen(true)
- }
+ setFixedOpen(true);
+ setDrawerToOpen(true);
+ };
const fixDrawerClose = () => {
- setFixedOpen(false)
- setDrawerToOpen(false)
- }
+ setFixedOpen(false);
+ setDrawerToOpen(false);
+ };
const tempDrawerOpen = () => {
if (!fixedOpen) {
- setDrawerToOpen(true)
+ setDrawerToOpen(true);
}
- }
+ };
const tempDrawerClose = () => {
if (!fixedOpen) {
- setDrawerToOpen(false)
+ setDrawerToOpen(false);
}
- }
+ };
return (
-
+
{
- {/* */}
+
@@ -274,7 +275,7 @@ export const Nav: FCWithChildren = ({ children }) => {
href={switchNetworkLink}
sx={{
borderRadius: 2,
- textTransform: 'none',
+ textTransform: "none",
width: 150,
ml: 4,
fontSize: 14,
@@ -288,19 +289,19 @@ export const Nav: FCWithChildren = ({ children }) => {
@@ -324,10 +325,10 @@ export const Nav: FCWithChildren = ({ children }) => {
>
{
- )
-}
+ );
+};
diff --git a/explorer-nextjs/app/components/Nav/MobileNav.tsx b/explorer-nextjs/app/components/Nav/MobileNav.tsx
index a2e23e620e..606e390d12 100644
--- a/explorer-nextjs/app/components/Nav/MobileNav.tsx
+++ b/explorer-nextjs/app/components/Nav/MobileNav.tsx
@@ -1,7 +1,7 @@
-'use client'
+"use client";
-import * as React from 'react'
-import { useTheme } from '@mui/material/styles'
+import * as React from "react";
+import { useTheme } from "@mui/material/styles";
import {
AppBar,
Box,
@@ -12,34 +12,34 @@ import {
ListItemButton,
ListItemIcon,
Toolbar,
-} from '@mui/material'
-import { Menu } from '@mui/icons-material'
-import { MaintenanceBanner } from '@nymproject/react/banners/MaintenanceBanner'
-import { useIsMobile } from '@/app/hooks/useIsMobile'
-import { MobileDrawerClose } from '@/app/icons/MobileDrawerClose'
-import { Footer } from '../Footer'
-import { ExpandableButton } from './DesktopNav'
-import { ConnectKeplrWallet } from '../Wallet/ConnectKeplrWallet'
-import { NetworkTitle } from '../NetworkTitle'
-import { originalNavOptions } from '@/app/context/nav'
+} from "@mui/material";
+import { Menu } from "@mui/icons-material";
+import { MaintenanceBanner } from "@nymproject/react";
+import { useIsMobile } from "@/app/hooks/useIsMobile";
+import { MobileDrawerClose } from "@/app/icons/MobileDrawerClose";
+import { Footer } from "../Footer";
+import { ExpandableButton } from "./DesktopNav";
+import { ConnectKeplrWallet } from "../Wallet/ConnectKeplrWallet";
+import { NetworkTitle } from "../NetworkTitle";
+import { originalNavOptions } from "@/app/context/nav";
export const MobileNav: FCWithChildren = ({ children }) => {
- const theme = useTheme()
- const [drawerOpen, setDrawerOpen] = React.useState(false)
+ const theme = useTheme();
+ const [drawerOpen, setDrawerOpen] = React.useState(false);
// Set maintenance banner to false by default to don't display it
- const [openMaintenance, setOpenMaintenance] = React.useState(false)
- const isSmallMobile = useIsMobile(400)
+ const [openMaintenance, setOpenMaintenance] = React.useState(false);
+ const isSmallMobile = useIsMobile(400);
const toggleDrawer = () => {
- setDrawerOpen(!drawerOpen)
- }
+ setDrawerOpen(!drawerOpen);
+ };
const openDrawer = () => {
- setDrawerOpen(true)
- }
+ setDrawerOpen(true);
+ };
return (
-
+
{
/>
-
+
{!isSmallMobile && }
@@ -91,7 +91,7 @@ export const MobileNav: FCWithChildren = ({ children }) => {
sx={{
height: 64,
background: theme.palette.nym.networkExplorer.nav.background,
- borderBottom: '1px solid rgba(255, 255, 255, 0.1)',
+ borderBottom: "1px solid rgba(255, 255, 255, 0.1)",
}}
>
{
pt: 2,
pb: 2,
background: theme.palette.nym.networkExplorer.nav.background,
- display: 'flex',
- justifyContent: 'flex-start',
+ display: "flex",
+ justifyContent: "flex-start",
}}
>
@@ -127,10 +127,10 @@ export const MobileNav: FCWithChildren = ({ children }) => {
-
+
{children}
- )
-}
+ );
+};
diff --git a/explorer-nextjs/app/errors/ErrorBoundaryContent.tsx b/explorer-nextjs/app/errors/ErrorBoundaryContent.tsx
index 4dbf9eb16e..22c8f9e2ce 100644
--- a/explorer-nextjs/app/errors/ErrorBoundaryContent.tsx
+++ b/explorer-nextjs/app/errors/ErrorBoundaryContent.tsx
@@ -1,8 +1,8 @@
-import * as React from 'react'
-import { FallbackProps } from 'react-error-boundary'
-import { Alert, AlertTitle, Container } from '@mui/material'
-import { NymThemeProvider } from '@nymproject/mui-theme'
-import { NymLogo } from '@nymproject/react/logo/NymLogo'
+import * as React from "react";
+import { FallbackProps } from "react-error-boundary";
+import { Alert, AlertTitle, Container } from "@mui/material";
+import { NymThemeProvider } from "@nymproject/mui-theme";
+import { NymLogo } from "@nymproject/react";
export const ErrorBoundaryContent: FCWithChildren = ({
error,
@@ -15,7 +15,7 @@ export const ErrorBoundaryContent: FCWithChildren = ({
{error.name}
{error.message}
- {process.env.NODE_ENV === 'development' && (
+ {process.env.NODE_ENV === "development" && (
Stack trace
{error.stack}
@@ -23,4 +23,4 @@ export const ErrorBoundaryContent: FCWithChildren = ({
)}
-)
+);
diff --git a/explorer-nextjs/app/network-components/gateways/page.tsx b/explorer-nextjs/app/network-components/gateways/page.tsx
index d0306e73d0..f5c4649d9c 100644
--- a/explorer-nextjs/app/network-components/gateways/page.tsx
+++ b/explorer-nextjs/app/network-components/gateways/page.tsx
@@ -1,106 +1,106 @@
-'use client'
+"use client";
-import React, { useMemo } from 'react'
-import { Box, Card, Grid, Stack } from '@mui/material'
-import { useTheme } from '@mui/material/styles'
+import React, { useMemo } from "react";
+import { Box, Card, Grid, Stack } from "@mui/material";
+import { useTheme } from "@mui/material/styles";
import {
MRT_ColumnDef,
MaterialReactTable,
useMaterialReactTable,
-} from 'material-react-table'
-import { GridColDef, GridRenderCellParams } from '@mui/x-data-grid'
-import { CopyToClipboard } from '@nymproject/react/clipboard/CopyToClipboard'
-import { Tooltip as InfoTooltip } from '@nymproject/react/tooltip/Tooltip'
-import { diff, gte, rcompare } from 'semver'
-import { useMainContext } from '@/app/context/main'
-import { TableToolbar } from '@/app/components/TableToolbar'
-import { CustomColumnHeading } from '@/app/components/CustomColumnHeading'
-import { Title } from '@/app/components/Title'
-import { unymToNym } from '@/app/utils/currency'
-import { Tooltip } from '@/app/components/Tooltip'
-import { NYM_BIG_DIPPER } from '@/app/api/constants'
-import { splice } from '@/app/utils'
+} from "material-react-table";
+import { GridColDef, GridRenderCellParams } from "@mui/x-data-grid";
+import { CopyToClipboard } from "@nymproject/react";
+import { Tooltip as InfoTooltip } from "@nymproject/react";
+import { diff, gte, rcompare } from "semver";
+import { useMainContext } from "@/app/context/main";
+import { TableToolbar } from "@/app/components/TableToolbar";
+import { CustomColumnHeading } from "@/app/components/CustomColumnHeading";
+import { Title } from "@/app/components/Title";
+import { unymToNym } from "@/app/utils/currency";
+import { Tooltip } from "@/app/components/Tooltip";
+import { NYM_BIG_DIPPER } from "@/app/api/constants";
+import { splice } from "@/app/utils";
import {
VersionDisplaySelector,
VersionSelectOptions,
-} from '@/app/components/Gateways/VersionDisplaySelector'
-import StyledLink from '@/app/components/StyledLink'
+} from "@/app/components/Gateways/VersionDisplaySelector";
+import StyledLink from "@/app/components/StyledLink";
import {
GatewayRowType,
gatewayToGridRow,
-} from '@/app/components/Gateways/Gateways'
+} from "@/app/components/Gateways/Gateways";
const PageGateways = () => {
- const { gateways } = useMainContext()
+ const { gateways } = useMainContext();
const [versionFilter, setVersionFilter] =
- React.useState(VersionSelectOptions.all)
+ React.useState(VersionSelectOptions.all);
- const theme = useTheme()
+ const theme = useTheme();
const highestVersion = React.useMemo(() => {
if (gateways?.data) {
const versions = gateways.data.reduce(
(a: string[], b) => [...a, b.gateway.version],
[]
- )
- const [lastestVersion] = versions.sort(rcompare)
- return lastestVersion
+ );
+ const [lastestVersion] = versions.sort(rcompare);
+ return lastestVersion;
}
// fallback value
- return '2.0.0'
- }, [gateways])
+ return "2.0.0";
+ }, [gateways]);
const filterByLatestVersions = React.useMemo(() => {
const filtered = gateways?.data?.filter((gw) => {
- const versionDiff = diff(highestVersion, gw.gateway.version)
- return versionDiff === 'patch' || versionDiff === null
- })
- if (filtered) return filtered
- return []
- }, [gateways])
+ const versionDiff = diff(highestVersion, gw.gateway.version);
+ return versionDiff === "patch" || versionDiff === null;
+ });
+ if (filtered) return filtered;
+ return [];
+ }, [gateways]);
const filterByOlderVersions = React.useMemo(() => {
const filtered = gateways?.data?.filter((gw) => {
- const versionDiff = diff(highestVersion, gw.gateway.version)
- return versionDiff === 'major' || versionDiff === 'minor'
- })
- if (filtered) return filtered
- return []
- }, [gateways])
+ const versionDiff = diff(highestVersion, gw.gateway.version);
+ return versionDiff === "major" || versionDiff === "minor";
+ });
+ if (filtered) return filtered;
+ return [];
+ }, [gateways]);
const filteredByVersion = React.useMemo(() => {
switch (versionFilter) {
case VersionSelectOptions.latestVersion:
- return filterByLatestVersions
+ return filterByLatestVersions;
case VersionSelectOptions.olderVersions:
- return filterByOlderVersions
+ return filterByOlderVersions;
case VersionSelectOptions.all:
- return gateways?.data || []
+ return gateways?.data || [];
default:
- return []
+ return [];
}
- }, [versionFilter, gateways])
+ }, [versionFilter, gateways]);
const data = useMemo(() => {
- return gatewayToGridRow(filteredByVersion || [])
- }, [filteredByVersion])
+ return gatewayToGridRow(filteredByVersion || []);
+ }, [filteredByVersion]);
const columns = useMemo[]>(() => {
return [
{
- id: 'gateway-data',
- header: 'Gatewsay Data',
+ id: "gateway-data",
+ header: "Gatewsay Data",
columns: [
{
- id: 'identity_key',
- header: 'Identity Key',
- accessorKey: 'identity_key',
+ id: "identity_key",
+ header: "Identity Key",
+ accessorKey: "identity_key",
size: 250,
Cell: ({ row }) => {
return (
{
{splice(7, 29, row.original.identity_key)}
- )
+ );
},
},
{
- id: 'node_performance',
- header: 'Node Performance',
- accessorKey: 'node_performance',
+ id: "node_performance",
+ header: "Node Performance",
+ accessorKey: "node_performance",
size: 200,
Header: () => {
return (
@@ -137,7 +137,7 @@ const PageGateways = () => {
/>
- )
+ );
},
Cell: ({ row }) => {
return (
@@ -148,13 +148,13 @@ const PageGateways = () => {
>
{`${row.original.node_performance}%`}
- )
+ );
},
},
{
- id: 'version',
- header: 'Version',
- accessorKey: 'version',
+ id: "version",
+ header: "Version",
+ accessorKey: "version",
size: 150,
Cell: ({ row }) => {
return (
@@ -165,18 +165,18 @@ const PageGateways = () => {
>
{row.original.version}
- )
+ );
},
},
{
- id: 'location',
- header: 'Location',
- accessorKey: 'location',
+ id: "location",
+ header: "Location",
+ accessorKey: "location",
size: 150,
Cell: ({ row }) => {
return (
{
>
{row.original.location}
- )
+ );
},
},
{
- id: 'host',
- header: 'IP:Port',
- accessorKey: 'host',
+ id: "host",
+ header: "IP:Port",
+ accessorKey: "host",
size: 150,
Cell: ({ row }) => {
return (
@@ -211,13 +211,13 @@ const PageGateways = () => {
>
{row.original.host}
- )
+ );
},
},
{
- id: 'owner',
- header: 'Owner',
- accessorKey: 'owner',
+ id: "owner",
+ header: "Owner",
+ accessorKey: "owner",
size: 150,
Cell: ({ row }) => {
return (
@@ -229,18 +229,18 @@ const PageGateways = () => {
>
{splice(7, 29, row.original.owner)}
- )
+ );
},
},
],
},
- ]
- }, [])
+ ];
+ }, []);
const _columns: GridColDef[] = [
{
- field: 'node_performance',
- align: 'center',
+ field: "node_performance",
+ align: "center",
renderHeader: () => (
<>
{
),
width: 120,
disableColumnMenu: true,
- headerAlign: 'center',
- headerClassName: 'MuiDataGrid-header-override',
+ headerAlign: "center",
+ headerClassName: "MuiDataGrid-header-override",
renderCell: (params: GridRenderCellParams) => (
{
),
},
{
- field: 'version',
- align: 'center',
+ field: "version",
+ align: "center",
renderHeader: () => ,
width: 150,
disableColumnMenu: true,
- headerAlign: 'center',
- headerClassName: 'MuiDataGrid-header-override',
+ headerAlign: "center",
+ headerClassName: "MuiDataGrid-header-override",
renderCell: (params: GridRenderCellParams) => (
{
),
sortComparator: (a, b) => {
- if (gte(a, b)) return 1
- return -1
+ if (gte(a, b)) return 1;
+ return -1;
},
},
{
- field: 'location',
+ field: "location",
renderHeader: () => ,
width: 180,
disableColumnMenu: true,
- headerAlign: 'left',
- headerClassName: 'MuiDataGrid-header-override',
+ headerAlign: "left",
+ headerClassName: "MuiDataGrid-header-override",
renderCell: (params: GridRenderCellParams) => (
{params.value}
@@ -316,12 +316,12 @@ const PageGateways = () => {
),
},
{
- field: 'host',
+ field: "host",
renderHeader: () => ,
width: 180,
disableColumnMenu: true,
- headerAlign: 'left',
- headerClassName: 'MuiDataGrid-header-override',
+ headerAlign: "left",
+ headerClassName: "MuiDataGrid-header-override",
renderCell: (params: GridRenderCellParams) => (
{
),
},
{
- field: 'owner',
- headerName: 'Owner',
+ field: "owner",
+ headerName: "Owner",
renderHeader: () => ,
width: 180,
disableColumnMenu: true,
- headerAlign: 'left',
- headerClassName: 'MuiDataGrid-header-override',
+ headerAlign: "left",
+ headerClassName: "MuiDataGrid-header-override",
renderCell: (params: GridRenderCellParams) => (
{
),
},
{
- field: 'bond',
+ field: "bond",
width: 150,
disableColumnMenu: true,
- type: 'number',
+ type: "number",
renderHeader: () => ,
- headerClassName: 'MuiDataGrid-header-override',
- headerAlign: 'left',
+ headerClassName: "MuiDataGrid-header-override",
+ headerAlign: "left",
renderCell: (params: GridRenderCellParams) => (
{
),
},
- ]
+ ];
const table = useMaterialReactTable({
columns,
data,
- })
+ });
return (
<>
@@ -383,7 +383,7 @@ const PageGateways = () => {
{
>
- )
-}
+ );
+};
-export default PageGateways
+export default PageGateways;
diff --git a/explorer-nextjs/app/network-components/mixnodes/page.tsx b/explorer-nextjs/app/network-components/mixnodes/page.tsx
index 4021e4173f..c0dc759a7c 100644
--- a/explorer-nextjs/app/network-components/mixnodes/page.tsx
+++ b/explorer-nextjs/app/network-components/mixnodes/page.tsx
@@ -1,13 +1,13 @@
-'use client'
+"use client";
-import React, { useCallback, useMemo } from 'react'
-import { useRouter, useSearchParams } from 'next/navigation'
+import React, { useCallback, useMemo } from "react";
+import { useRouter, useSearchParams } from "next/navigation";
import {
MaterialReactTable,
useMaterialReactTable,
type MRT_ColumnDef,
-} from 'material-react-table'
-import { Grid, Card, Button, Box, Stack } from '@mui/material'
+} from "material-react-table";
+import { Grid, Card, Button, Box, Stack } from "@mui/material";
import {
CustomColumnHeading,
DelegateIconButton,
@@ -21,81 +21,81 @@ import {
Title,
Tooltip,
mixnodeToGridRow,
-} from '@/app/components'
-import { DelegationsProvider } from '@/app/context/delegations'
-import { useWalletContext } from '@/app/context/wallet'
-import { useGetMixNodeStatusColor, useIsMobile } from '@/app/hooks'
-import { useMainContext } from '@/app/context/main'
-import { CopyToClipboard } from '@nymproject/react/clipboard/CopyToClipboard'
-import { splice } from '@/app/utils'
-import { currencyToString } from '@/app/utils/currency'
-import { NYM_BIG_DIPPER } from '@/app/api/constants'
+} from "@/app/components";
+import { DelegationsProvider } from "@/app/context/delegations";
+import { useWalletContext } from "@/app/context/wallet";
+import { useGetMixNodeStatusColor, useIsMobile } from "@/app/hooks";
+import { useMainContext } from "@/app/context/main";
+import { CopyToClipboard } from "@nymproject/react";
+import { splice } from "@/app/utils";
+import { currencyToString } from "@/app/utils/currency";
+import { NYM_BIG_DIPPER } from "@/app/api/constants";
import {
MixnodeStatusWithAll,
toMixnodeStatus,
-} from '@/app/typeDefs/explorer-api'
+} from "@/app/typeDefs/explorer-api";
export default function MixnodesPage() {
- const isMobile = useIsMobile()
- const { isWalletConnected } = useWalletContext()
- const { mixnodes, fetchMixnodes } = useMainContext()
- const router = useRouter()
+ const isMobile = useIsMobile();
+ const { isWalletConnected } = useWalletContext();
+ const { mixnodes, fetchMixnodes } = useMainContext();
+ const router = useRouter();
const [itemSelectedForDelegation, setItemSelectedForDelegation] =
React.useState<{
- mixId: number
- identityKey: string
- }>()
+ mixId: number;
+ identityKey: string;
+ }>();
const [confirmationModalProps, setConfirmationModalProps] = React.useState<
DelegationModalProps | undefined
- >()
+ >();
- const search = useSearchParams()
- const status = search.get('status') as MixnodeStatusWithAll
+ const search = useSearchParams();
+ const status = search.get("status") as MixnodeStatusWithAll;
React.useEffect(() => {
// when the status changes, get the mixnodes
- fetchMixnodes(toMixnodeStatus(status))
- }, [status])
+ fetchMixnodes(toMixnodeStatus(status));
+ }, [status]);
const handleMixnodeStatusChanged = (newStatus?: MixnodeStatusWithAll) => {
router.push(
- newStatus && newStatus !== 'all'
+ newStatus && newStatus !== "all"
? `/network-components/mixnodes?status=${newStatus}`
- : '/network-components/mixnodes'
- )
- }
+ : "/network-components/mixnodes"
+ );
+ };
const handleOnDelegate = useCallback(
({ identityKey, mixId }: { identityKey: string; mixId: number }) => {
if (!isWalletConnected) {
setConfirmationModalProps({
- status: 'info',
- message: 'Please connect your wallet to delegate',
- })
+ status: "info",
+ message: "Please connect your wallet to delegate",
+ });
} else {
- setItemSelectedForDelegation({ identityKey, mixId })
+ setItemSelectedForDelegation({ identityKey, mixId });
}
},
[isWalletConnected]
- )
+ );
const handleNewDelegation = (delegationModalProps: DelegationModalProps) => {
- setItemSelectedForDelegation(undefined)
- setConfirmationModalProps(delegationModalProps)
- }
+ setItemSelectedForDelegation(undefined);
+ setConfirmationModalProps(delegationModalProps);
+ };
const columns = useMemo[]>(() => {
return [
{
- id: 'mixnode-data',
- header: 'Mixnode Data',
+ id: "mixnode-data",
+ header: "Mixnode Data",
columns: [
{
- id: 'delegate',
- accessorKey: 'delegate',
+ id: "delegate",
+ accessorKey: "delegate",
size: isMobile ? 50 : 150,
- header: '',
+ header: "",
grow: false,
Cell: ({ row }) => (
null,
},
{
- id: 'identity_key',
- header: 'Identity Key',
- accessorKey: 'identity_key',
+ id: "identity_key",
+ header: "Identity Key",
+ accessorKey: "identity_key",
size: 250,
Cell: ({ row }) => {
return (
- )
+ );
},
},
{
- id: 'bond',
- header: 'Stake',
- accessorKey: 'bond',
+ id: "bond",
+ header: "Stake",
+ accessorKey: "bond",
Cell: ({ row }) => (
- )
+ );
},
Cell: ({ row }) => (
(
(
(
(
,
Cell: ({ row }) => (
,
Cell: ({ row }) => (
@@ -287,9 +287,9 @@ export default function MixnodesPage() {
),
},
{
- id: 'host',
- accessorKey: 'host',
- header: 'Host',
+ id: "host",
+ accessorKey: "host",
+ header: "Host",
size: 130,
Header: () => ,
Cell: ({ row }) => (
@@ -303,12 +303,12 @@ export default function MixnodesPage() {
},
],
},
- ]
- }, [handleOnDelegate, isMobile])
+ ];
+ }, [handleOnDelegate, isMobile]);
const data = useMemo(() => {
- return mixnodeToGridRow(mixnodes?.data)
- }, [mixnodes?.data])
+ return mixnodeToGridRow(mixnodes?.data);
+ }, [mixnodes?.data]);
const table = useMaterialReactTable({
columns,
@@ -317,11 +317,11 @@ export default function MixnodesPage() {
state: {
isLoading: mixnodes?.isLoading,
},
- layoutMode: 'grid-no-grow',
+ layoutMode: "grid-no-grow",
initialState: {
- columnPinning: { left: ['delegate'] },
+ columnPinning: { left: ["delegate"] },
},
- })
+ });
return (
@@ -333,7 +333,7 @@ export default function MixnodesPage() {
router.push('/delegations')}
+ onClick={() => router.push("/delegations")}
>
Delegations
@@ -364,7 +364,7 @@ export default function MixnodesPage() {
{itemSelectedForDelegation && (
{
- setItemSelectedForDelegation(undefined)
+ setItemSelectedForDelegation(undefined);
}}
header="Delegate"
buttonText="Delegate stake"
@@ -382,19 +382,19 @@ export default function MixnodesPage() {
{...confirmationModalProps}
open={Boolean(confirmationModalProps)}
onClose={async () => {
- setConfirmationModalProps(undefined)
- if (confirmationModalProps.status === 'success') {
- router.push('/delegations')
+ setConfirmationModalProps(undefined);
+ if (confirmationModalProps.status === "success") {
+ router.push("/delegations");
}
}}
sx={{
width: {
- xs: '90%',
+ xs: "90%",
sm: 600,
},
}}
/>
)}
- )
+ );
}
diff --git a/explorer-nextjs/package.json b/explorer-nextjs/package.json
index 0711484577..bd9833b1f6 100644
--- a/explorer-nextjs/package.json
+++ b/explorer-nextjs/package.json
@@ -22,10 +22,10 @@
"@mui/x-data-grid": "7.1.1",
"@mui/x-date-pickers": "7.1.1",
"@nymproject/contract-clients": "1.2.4-rc.1",
- "@nymproject/mui-theme": "workspace:^",
- "@nymproject/nym-validator-client": "0.18.0",
+ "@nymproject/mui-theme": "workspace:^1.0.0",
+ "@nymproject/nym-validator-client": "^0.18.0",
"@nymproject/react": "workspace:^1.0.0",
- "@nymproject/types": "workspace:^",
+ "@nymproject/types": "workspace:^1.0.0",
"@storybook/react": "^6.5.15",
"@types/d3-scale": "^4.0.8",
"big.js": "^6.2.1",