@@ -164,7 +184,7 @@ export default function ManagementMasterCommitteePage() {
variant='outlined'
colour='success'
className='px-4'
- onClick={() => openDialog(
)}
+ onClick={() => openDialog(
)}
>
Promote
@@ -172,7 +192,7 @@ export default function ManagementMasterCommitteePage() {
variant='outlined'
colour='warning'
className='px-4 ml-2'
- onClick={() => openDialog(
)}
+ onClick={() => openDialog(
)}
>
Demote
diff --git a/frontend/src/pages/management-master-committee-page/components/add-master-node-dialog/AddMasterNodeDialog.tsx b/frontend/src/pages/management-master-committee-page/components/add-master-node-dialog/AddMasterNodeDialog.tsx
index 9044359..b692aac 100644
--- a/frontend/src/pages/management-master-committee-page/components/add-master-node-dialog/AddMasterNodeDialog.tsx
+++ b/frontend/src/pages/management-master-committee-page/components/add-master-node-dialog/AddMasterNodeDialog.tsx
@@ -1,24 +1,24 @@
import { Form, Formik, FormikContextType } from 'formik';
-import { useContext, useRef } from 'react';
+import { useRef } from 'react';
import * as Yup from 'yup';
import { DialogButtons, DialogResultBase, DialogTitle } from '@/components/dialog/Dialog';
import { DialogFormField } from '@/components/form-field/FormField';
import InfoList from '@/components/info-list/InfoList';
-import { ServiceContext } from '@/contexts/ServiceContext';
import {
setMasterNodeDialogFailResult, setMasterNodeDialogSuccessResult
} from '@/pages/management-master-committee-page/utils/helper';
+import { AccountDetails, GrandMasterManager } from '@/services/grandmaster-manager';
import type { InfoListInfo } from '@/types/info';
interface AddMasterNodeDialogProps {
closeDialog: () => void;
+ accountDetails?: AccountDetails;
setDialogResult?: React.Dispatch
>;
}
export default function AddMasterNodeDialog(props: AddMasterNodeDialogProps) {
- const { closeDialog, setDialogResult } = props;
- const service = useContext(ServiceContext);
+ const { closeDialog, setDialogResult, accountDetails } = props;
const formikRef = useRef>(null);
@@ -32,13 +32,13 @@ export default function AddMasterNodeDialog(props: AddMasterNodeDialogProps) {
});
async function handleSubmit() {
- if (!setDialogResult || !service || !formikRef.current) {
+ if (!setDialogResult || !formikRef.current) {
return;
}
try {
+ const service = new GrandMasterManager();
await service.addNewMasterNode(formikRef.current.values.newAddress);
-
setMasterNodeDialogSuccessResult(setDialogResult);
formikRef.current?.resetForm();
@@ -60,7 +60,7 @@ export default function AddMasterNodeDialog(props: AddMasterNodeDialogProps) {
const masternodeInfo: InfoListInfo = {
data: [{
name: 'Grandmaster\'s remaining balance:',
- value: 'unknown'
+ value: accountDetails?.balance ?? 'unknown, login failed'
}]
};
diff --git a/frontend/src/pages/management-master-committee-page/components/no-login-dialog/NoLoginDialog.tsx b/frontend/src/pages/management-master-committee-page/components/no-login-dialog/NoLoginDialog.tsx
new file mode 100644
index 0000000..b515405
--- /dev/null
+++ b/frontend/src/pages/management-master-committee-page/components/no-login-dialog/NoLoginDialog.tsx
@@ -0,0 +1,33 @@
+import { Link } from 'react-router-dom';
+
+import Button from '@/components/button/Button';
+import { DialogTitle } from '@/components/dialog/Dialog';
+
+interface NoLoginDialogProps {
+ closeDialog: () => void;
+}
+
+export function NoLoginDialog({ closeDialog }: NoLoginDialogProps) {
+ return (
+ <>
+
+
+
+ Requires login before amending candidate
+
+
+ Please find instructions in
+
+ Login page
+
+
+
+
+
+
+
+ >
+ );
+}
\ No newline at end of file
diff --git a/frontend/src/pages/management-master-committee-page/components/promote-dialog/PromoteDialog.tsx b/frontend/src/pages/management-master-committee-page/components/promote-dialog/PromoteDialog.tsx
index d38b6e2..5d22148 100644
--- a/frontend/src/pages/management-master-committee-page/components/promote-dialog/PromoteDialog.tsx
+++ b/frontend/src/pages/management-master-committee-page/components/promote-dialog/PromoteDialog.tsx
@@ -1,24 +1,22 @@
import { Form, Formik, FormikContextType, useFormikContext } from 'formik';
-import { useContext, useRef } from 'react';
-import { useLoaderData } from 'react-router-dom';
+import { useRef } from 'react';
import * as Yup from 'yup';
import { DialogButtons, DialogResultBase, DialogTitle } from '@/components/dialog/Dialog';
import { DialogFormField } from '@/components/form-field/FormField';
import InfoList from '@/components/info-list/InfoList';
-import { ServiceContext } from '@/contexts/ServiceContext';
import {
setMasterNodeDialogFailResult, setMasterNodeDialogSuccessResult
} from '@/pages/management-master-committee-page/utils/helper';
+import { AccountDetails, GrandMasterManager } from '@/services/grandmaster-manager';
import { CandidateDetails } from '@/services/grandmaster-manager/statsServiceClient';
import { formatHash } from '@/utils/formatter';
-import type { ManagementLoaderData } from '@/types/loaderData';
-
interface PromoteDialogProps {
type: PromoteDialogType;
data: CandidateDetails;
closeDialog: () => void;
+ accountDetails?: AccountDetails;
setDialogResult?: React.Dispatch>;
}
@@ -29,12 +27,10 @@ interface FormValues {
type PromoteDialogType = 'promote' | 'demote';
export default function PromoteDialog(props: PromoteDialogProps) {
- const { setDialogResult, data, type } = props;
-
- const { minimumDelegation } = useLoaderData() as ManagementLoaderData;
+ const { setDialogResult, data, type, accountDetails } = props;
+ const minimumDelegation = accountDetails?.minimumDelegation ?? 'unknown, login failed';
const formikRef = useRef>(null);
- const service = useContext(ServiceContext);
const initialValues: FormValues = {
increaseDelegation: ''
@@ -48,11 +44,12 @@ export default function PromoteDialog(props: PromoteDialogProps) {
});
async function handleSubmit({ increaseDelegation }: FormValues) {
- if (!increaseDelegation || Number.isNaN(increaseDelegation) || !setDialogResult || !service || !formikRef.current) {
+ if (!increaseDelegation || Number.isNaN(increaseDelegation) || !setDialogResult || !formikRef.current) {
return;
}
try {
+ const service = new GrandMasterManager();
const delegation = getDelegation(increaseDelegation, type);
await service.changeVote(data.address, delegation);
@@ -86,9 +83,9 @@ interface UpdatedMasterNodeInfoProps {
}
function FormContent(props: PromoteDialogProps) {
- const { type, data, closeDialog } = props;
+ const { type, data, closeDialog, accountDetails } = props;
- const { minimumDelegation, grandmasterRemainingBalance } = useLoaderData() as ManagementLoaderData;
+ const minimumDelegation = accountDetails?.minimumDelegation ?? 'unknown, login failed';
const formik = useFormikContext();
@@ -124,7 +121,7 @@ function FormContent(props: PromoteDialogProps) {
const initInfo = {
data: [
- { name: 'Grandmaster\'s remaining balance:', value: `${grandmasterRemainingBalance} xdc` },
+ { name: 'Grandmaster\'s remaining balance:', value: `${minimumDelegation} xdc` },
{ name: `${formattedAddress}'s current delegation:`, value: `${delegation} hxdc` },
{ name: `${formattedAddress}'s minimum delegation:`, value: `${minimumDelegation} hxdc` },
]
diff --git a/frontend/src/pages/management-master-committee-page/components/remove-master-node-dialog/RemoveMasterNodeDialog.tsx b/frontend/src/pages/management-master-committee-page/components/remove-master-node-dialog/RemoveMasterNodeDialog.tsx
index bf48263..4a861d3 100644
--- a/frontend/src/pages/management-master-committee-page/components/remove-master-node-dialog/RemoveMasterNodeDialog.tsx
+++ b/frontend/src/pages/management-master-committee-page/components/remove-master-node-dialog/RemoveMasterNodeDialog.tsx
@@ -1,10 +1,10 @@
-import { useContext, useState } from 'react';
+import { useState } from 'react';
import { DialogButtons, DialogResultBase, DialogTitle } from '@/components/dialog/Dialog';
-import { ServiceContext } from '@/contexts/ServiceContext';
import {
setMasterNodeDialogFailResult, setMasterNodeDialogSuccessResult
} from '@/pages/management-master-committee-page/utils/helper';
+import { GrandMasterManager } from '@/services/grandmaster-manager';
import { formatHash } from '@/utils/formatter';
interface RemoveMasterNodeDialogProps {
@@ -18,16 +18,14 @@ export default function RemoveMasterNodeDialog(props: RemoveMasterNodeDialogProp
const [isSubmitting, setIsSubmitting] = useState(false);
- const service = useContext(ServiceContext);
-
async function handleSubmit() {
- if (!setDialogResult || !service) {
+ if (!setDialogResult) {
return;
}
try {
setIsSubmitting(true);
-
+ const service = new GrandMasterManager();
await service.removeMasterNode(address);
setMasterNodeDialogSuccessResult(setDialogResult);
diff --git a/frontend/src/services/grandmaster-manager/index.ts b/frontend/src/services/grandmaster-manager/index.ts
index 3062548..4c08b13 100644
--- a/frontend/src/services/grandmaster-manager/index.ts
+++ b/frontend/src/services/grandmaster-manager/index.ts
@@ -4,7 +4,7 @@ import Web3, { FMT_BYTES, FMT_NUMBER } from 'web3';
import { CONTRACT_ADDRESS, FIXED_CAP_VALUE } from '@/constants/config';
import { ErrorTypes, ManagerError } from '@/services/grandmaster-manager/errors';
import { CustomRpcMethodsPlugin } from '@/services/grandmaster-manager/extensions';
-import { weiToEther } from '@/utils/formatter';
+import { roundDownToSixDecimalPlaces, weiToEther } from '@/utils/formatter';
import { ABI } from './abi';
import { StatsServiceClient } from './statsServiceClient';
@@ -57,15 +57,15 @@ export class GrandMasterManager {
try {
const { rpcUrl, denom, chainId } = await this.statsServiceClient.getChainSettingInfo();
this.chainSetting = { rpcUrl, denom, chainId };
- const { accountAddress, balance, minimumDelegation} = await this.grandMasterAccountDetails();
+ const { accountAddress, balance, minimumDelegation } = await this.grandMasterAccountDetails();
return {
accountAddress,
- balance,
+ balance: roundDownToSixDecimalPlaces(balance),
rpcUrl, denom, networkId: chainId,
- minimumDelegation
+ minimumDelegation: roundDownToSixDecimalPlaces(minimumDelegation),
};
} catch (err: any) {
- console.log(err)
+ console.log(err);
if (err instanceof ManagerError) throw err;
throw new ManagerError(err.message, ErrorTypes.INTERNAL_ERROR);
}
@@ -155,71 +155,31 @@ export class GrandMasterManager {
});
}
- /**
- * A method to return subnet candidates and its status.
- * @returns The address and its current status and stake.
- * 'MASTERNODE' means it's one of the mining masternode
- * 'PROPOSED' means it just been proposed, but waiting for have enough vote in order to be the masternode.
- * 'SLASHED' means it's been taken out from the masternode list
- */
- async getCandidates() {
- try {
- return this.getCandidates_temporary()
- // return await this.statsServiceClient.getCandidates();
- } catch (error) {
- if (error instanceof ManagerError) throw error;
- throw new ManagerError("Unable to get list of candidates", ErrorTypes.INTERNAL_ERROR);
- }
- }
-
- // TODO: To be removed after API is done for the getCandidates method
- private async getCandidates_temporary() {
- const rpcBasedWeb3 = new Web3("https://devnetstats.apothem.network/subnet");
- rpcBasedWeb3.registerPlugin(new CustomRpcMethodsPlugin());
-
- const result = await rpcBasedWeb3!.xdcSubnet.getCandidates("latest");
- if (!result) {
- throw new ManagerError("Fail to get list of candidates from xdc subnet, empty value returned");
- }
- const { candidates, success } = result;
- if (!success) {
- throw new ManagerError("Fail to get list of candidates from xdc subnet");
- }
- return Object.entries(candidates).map(entry => {
- const [address, { capacity, status }] = entry;
- return {
- address,
- delegation: weiToEther(capacity),
- status
- };
- }).sort((a, b) => b.delegation - a.delegation);
- }
-
- private async getGrandmasterAddressAndMinimumDelegation(forceRefreshGrandMaster?: boolean): Promise<{ minimumDelegation: number, grandMasterAddress: string[]}> {
+ private async getGrandmasterAddressAndMinimumDelegation(forceRefreshGrandMaster?: boolean): Promise<{ minimumDelegation: number, grandMasterAddress: string[]; }> {
try {
if (!this.grandMasterInfo || forceRefreshGrandMaster) {
const grandMasterResult = await this.web3Contract.methods.getGrandMasters().call();
if (!grandMasterResult || !grandMasterResult.length) throw new ManagerError("No grand master found in the node", ErrorTypes.INTERNAL_ERROR);
let minimumDelegation = 0;
const minimumDelegationResult: number[] = await this.web3Contract.methods.minCandidateCap().call();
- if(!minimumDelegationResult || !minimumDelegationResult.length) {
- minimumDelegation = minimumDelegationResult[0]
- }
+ if (!minimumDelegationResult || !minimumDelegationResult.length) {
+ minimumDelegation = minimumDelegationResult[0];
+ }
this.grandMasterInfo = {
grandMasterAddress: grandMasterResult[0],
minimumDelegation
- }
+ };
}
return this.grandMasterInfo;
} catch (error) {
throw new ManagerError("Error while fetching grand master related data from the node", ErrorTypes.INTERNAL_ERROR);
- }
+ }
}
-
+
private async verifyGrandMaster(accountAddress: string, networkId: number) {
if (this.grandMasterInfo!.grandMasterAddress.indexOf(accountAddress)) {
throw new ManagerError("Not Grand Master", ErrorTypes.NOT_GRANDMASTER);
- } else if(networkId != this.chainSetting?.chainId) {
+ } else if (networkId != this.chainSetting?.chainId) {
throw new ManagerError("Not on the right networkId", ErrorTypes.NOT_ON_THE_RIGHT_NETWORK);
}
}
@@ -256,8 +216,48 @@ const handleTransactionError = (error: any) => {
};
const replaceXdcWith0x = (address: string) => {
- if(address.startsWith("xdc")) {
+ if (address.startsWith("xdc")) {
return address.replace("xdc", "0x");
}
return address;
-};
\ No newline at end of file
+};
+
+/**
+ * A method to return subnet candidates and its status.
+ * @returns The address and its current status and stake.
+ * 'MASTERNODE' means it's one of the mining masternode
+ * 'PROPOSED' means it just been proposed, but waiting for have enough vote in order to be the masternode.
+ * 'SLASHED' means it's been taken out from the masternode list
+ */
+export async function getCandidates() {
+ try {
+ return getCandidates_temporary();
+ // return await this.statsServiceClient.getCandidates();
+ } catch (error) {
+ if (error instanceof ManagerError) throw error;
+ throw new ManagerError("Unable to get list of candidates", ErrorTypes.INTERNAL_ERROR);
+ }
+}
+
+// TODO: To be removed after API is done for the getCandidates method
+async function getCandidates_temporary() {
+ const rpcBasedWeb3 = new Web3("https://devnetstats.apothem.network/subnet");
+ rpcBasedWeb3.registerPlugin(new CustomRpcMethodsPlugin());
+
+ const result = await rpcBasedWeb3!.xdcSubnet.getCandidates("latest");
+ if (!result) {
+ throw new ManagerError("Fail to get list of candidates from xdc subnet, empty value returned");
+ }
+ const { candidates, success } = result;
+ if (!success) {
+ throw new ManagerError("Fail to get list of candidates from xdc subnet");
+ }
+ return Object.entries(candidates).map(entry => {
+ const [address, { capacity, status }] = entry;
+ return {
+ address,
+ delegation: roundDownToSixDecimalPlaces(weiToEther(capacity)),
+ status
+ };
+ }).sort((a, b) => b.delegation - a.delegation);
+}
\ No newline at end of file
diff --git a/frontend/src/types/loaderData.d.ts b/frontend/src/types/loaderData.d.ts
index 4883a22..bff8d35 100644
--- a/frontend/src/types/loaderData.d.ts
+++ b/frontend/src/types/loaderData.d.ts
@@ -1,8 +1,3 @@
-export interface ManagementLoaderData {
- minimumDelegation: number;
- grandmasterRemainingBalance: number;
-}
-
export interface AppLoaderData {
name: string;
}
diff --git a/frontend/src/utils/formatter.ts b/frontend/src/utils/formatter.ts
index d7b562c..b0f7b73 100644
--- a/frontend/src/utils/formatter.ts
+++ b/frontend/src/utils/formatter.ts
@@ -56,4 +56,8 @@ export function weiToEther(wei: number) {
export function etherToWei(either: number) {
return either * 1e18;
+}
+
+export function roundDownToSixDecimalPlaces(number: number) {
+ return Math.floor(number * 1e6) / 1e6;
}
\ No newline at end of file
diff --git a/frontend/yarn.lock b/frontend/yarn.lock
index 967b5d7..6e585ad 100644
--- a/frontend/yarn.lock
+++ b/frontend/yarn.lock
@@ -2246,12 +2246,12 @@
prop-types "^15.7.2"
"@storybook/api@^7.0.12":
- version "7.3.0"
- resolved "https://registry.yarnpkg.com/@storybook/api/-/api-7.3.0.tgz#0c0dc737a03f2010b852a8e477e1bc564ceb7106"
- integrity sha512-ahFZ/2MnLN3Ge+oJ5YJBQNS5daVGmSArxfZWfY3q5R8XDec0WJs4pl+ejh3bNDwWlC2sgo7BEGEf1q5wifcAHg==
+ version "7.3.1"
+ resolved "https://registry.yarnpkg.com/@storybook/api/-/api-7.3.1.tgz#76d77500dd529e0acf219fbf597fa44b8820d9dd"
+ integrity sha512-QYXX9NWV+Ud1nWVX3Tfjkmxb1Vi1bRxmSXlfIo3HYqhPm4rOwDlpN6nso21Kz3QyON4Hm9XqgQA5qUIZU19bVg==
dependencies:
- "@storybook/client-logger" "7.3.0"
- "@storybook/manager-api" "7.3.0"
+ "@storybook/client-logger" "7.3.1"
+ "@storybook/manager-api" "7.3.1"
"@storybook/blocks@7.2.1":
version "7.2.1"
@@ -2341,13 +2341,13 @@
telejson "^7.0.3"
tiny-invariant "^1.3.1"
-"@storybook/channels@7.3.0":
- version "7.3.0"
- resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-7.3.0.tgz#c8c07e702ad7573314cd59c515e1d4ff234e0ba5"
- integrity sha512-j4b5u8VSt+3975zawh6FbPS+gjQfRkPCIGV+Cd6RUrwVZnwJfr+1FeTjweyMpQaQGChtiOqx/W91TH8q2yODog==
+"@storybook/channels@7.3.1":
+ version "7.3.1"
+ resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-7.3.1.tgz#a618b5a7c8444e42284fb56d7f2385e775355d0c"
+ integrity sha512-DHdUdwfnMOSmtYv55Ixysklo/ZeD3TiTEQvyBaxhnMR3G0j7nb+TxqyfAn4fb7bntOPRNVB1Vz3nZXkkjrPNgw==
dependencies:
- "@storybook/client-logger" "7.3.0"
- "@storybook/core-events" "7.3.0"
+ "@storybook/client-logger" "7.3.1"
+ "@storybook/core-events" "7.3.1"
"@storybook/global" "^5.0.0"
qs "^6.10.0"
telejson "^7.0.3"
@@ -2406,10 +2406,10 @@
dependencies:
"@storybook/global" "^5.0.0"
-"@storybook/client-logger@7.3.0":
- version "7.3.0"
- resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-7.3.0.tgz#5d03f4093e57e1aac4d31b3826b9258d603b264d"
- integrity sha512-93Nf4DOgg8HwEX/n+JKB/el5MNl8v4vNfDO+5cqoKqS5b3yETDG6spKOA6GciNYBJWIKMkEg/WNPFG2N9cvhTA==
+"@storybook/client-logger@7.3.1":
+ version "7.3.1"
+ resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-7.3.1.tgz#a8ea0f8579d33c7657a8eee12856300460e2bf89"
+ integrity sha512-VfKi8C5Z1hquaP6xtVn9ngKcnXZjHNV6+RAqLbUJyAoGeO8fFaMblYgbY+tF7Xyf3bZKMLBo4QqtegTh2QjdAA==
dependencies:
"@storybook/global" "^5.0.0"
@@ -2450,18 +2450,18 @@
util-deprecate "^1.0.2"
"@storybook/components@^7.0.12":
- version "7.3.0"
- resolved "https://registry.yarnpkg.com/@storybook/components/-/components-7.3.0.tgz#ca4725fdf80d38a873f366e6f7d9f622599cd0a5"
- integrity sha512-YHcPsH0T//ZZ3HhZDmf+UKt2R0b+kNT42LizYs5R61d47oIvsHrqPqdN7p+OuTrBpaFdVNSzO7XjpeRodqGRLQ==
+ version "7.3.1"
+ resolved "https://registry.yarnpkg.com/@storybook/components/-/components-7.3.1.tgz#1b480f8a69ba08981146edeaa2f22b97923c31e4"
+ integrity sha512-8dk3WutobHvjxweVzA9Vqrp564vWOTQaV38JSi84ME8wzOdl20Xne9LoeMnqPHXFhnVZdm/Gkosfv4tqkDy4aw==
dependencies:
"@radix-ui/react-select" "^1.2.2"
"@radix-ui/react-toolbar" "^1.0.4"
- "@storybook/client-logger" "7.3.0"
+ "@storybook/client-logger" "7.3.1"
"@storybook/csf" "^0.1.0"
"@storybook/global" "^5.0.0"
"@storybook/icons" "^1.1.6"
- "@storybook/theming" "7.3.0"
- "@storybook/types" "7.3.0"
+ "@storybook/theming" "7.3.1"
+ "@storybook/types" "7.3.1"
memoizerific "^1.11.3"
use-resize-observer "^9.1.0"
util-deprecate "^1.0.2"
@@ -2502,13 +2502,13 @@
resolve-from "^5.0.0"
ts-dedent "^2.0.0"
-"@storybook/core-common@7.3.0", "@storybook/core-common@^7.0.12":
- version "7.3.0"
- resolved "https://registry.yarnpkg.com/@storybook/core-common/-/core-common-7.3.0.tgz#596c14530f93aa55ae1913e09acdc747643113e8"
- integrity sha512-QCTuZXLq9z2AUEMmAAfSGHdXsAMWKnOou+d6adVknJINctW6T1B2L725SpRjYIXK1xpsQrSB+VT0wR4XCNRIMA==
+"@storybook/core-common@7.3.1", "@storybook/core-common@^7.0.12":
+ version "7.3.1"
+ resolved "https://registry.yarnpkg.com/@storybook/core-common/-/core-common-7.3.1.tgz#3b51c11ac50ca86bd5d1751ff37a7607f0176a79"
+ integrity sha512-jALwn9T6xjVQ/GBD2UVMi0XAhJDIsSNf3ghxatRQpa5dphG4nZccF6xwnUdsQqDGr8E4lHgDDzIKP/wqQ3fi1Q==
dependencies:
- "@storybook/node-logger" "7.3.0"
- "@storybook/types" "7.3.0"
+ "@storybook/node-logger" "7.3.1"
+ "@storybook/types" "7.3.1"
"@types/find-cache-dir" "^3.2.1"
"@types/node" "^16.0.0"
"@types/node-fetch" "^2.6.4"
@@ -2535,10 +2535,10 @@
resolved "https://registry.yarnpkg.com/@storybook/core-events/-/core-events-7.2.1.tgz#05121c9bac6ac3989acc05b49116107331e0c398"
integrity sha512-EUXYb3gyQ2EzpDAWkgfoDl1EPabj3OE6+zntsD/gwvzQU85BTocs10ksnRyS55bfrQpYbf+Z+gw2CZboyagLgg==
-"@storybook/core-events@7.3.0", "@storybook/core-events@^7.0.12":
- version "7.3.0"
- resolved "https://registry.yarnpkg.com/@storybook/core-events/-/core-events-7.3.0.tgz#e5ddfec39f676d20cb6e6c7b357335207cec4876"
- integrity sha512-Ke3gjjJDMbihAVzgLUfXoZ3FHLLP22/TSBtytayztC0zAzEGeg6j4UUWzEKYggKIGJNIJ16GQfaGlcVLxHhSKw==
+"@storybook/core-events@7.3.1", "@storybook/core-events@^7.0.12":
+ version "7.3.1"
+ resolved "https://registry.yarnpkg.com/@storybook/core-events/-/core-events-7.3.1.tgz#ebc6b1fc21a50b3d293678c00199d01a01a30b8b"
+ integrity sha512-7Pkgwmj/9B7Z3NNSn2swnviBrg9L1VeYSFw6JJKxtQskt8QoY8LxAsPzVMlHjqRmO6sO7lHo9FgpzIFxdmFaAA==
"@storybook/core-server@7.2.1":
version "7.2.1"
@@ -2612,17 +2612,17 @@
recast "^0.23.1"
ts-dedent "^2.0.0"
-"@storybook/csf-tools@7.3.0":
- version "7.3.0"
- resolved "https://registry.yarnpkg.com/@storybook/csf-tools/-/csf-tools-7.3.0.tgz#d043c1453d54d6b30461f1186624a5d8a3cc64c2"
- integrity sha512-gAmKg3JYQx9pyDgUS/I4VyH039Mv/kIuP2nUcBeK2V6pW+3sf9jrTVi4DjSB7q1Izqhnsa25jVdPbgRuWk1RFA==
+"@storybook/csf-tools@7.3.1":
+ version "7.3.1"
+ resolved "https://registry.yarnpkg.com/@storybook/csf-tools/-/csf-tools-7.3.1.tgz#0e80fd8c112dbddb814189a39873c6fb11206c36"
+ integrity sha512-8b2VD1RrcAuogoj5mpukX8n4DKF1WjQpWbki6UrZ70btpl0TQclUqAlQw8SQqCQwuljPYaMLrj9x4bpbnBah3Q==
dependencies:
"@babel/generator" "^7.22.9"
"@babel/parser" "^7.22.7"
"@babel/traverse" "^7.22.8"
"@babel/types" "^7.22.5"
"@storybook/csf" "^0.1.0"
- "@storybook/types" "7.3.0"
+ "@storybook/types" "7.3.1"
fs-extra "^11.1.0"
recast "^0.23.1"
ts-dedent "^2.0.0"
@@ -2700,19 +2700,19 @@
telejson "^7.0.3"
ts-dedent "^2.0.0"
-"@storybook/manager-api@7.3.0", "@storybook/manager-api@^7.0.12":
- version "7.3.0"
- resolved "https://registry.yarnpkg.com/@storybook/manager-api/-/manager-api-7.3.0.tgz#da6b7fb4fdf12b7f55f0e76cef5d3156dceeccde"
- integrity sha512-eM2O8n1LQCYJ11MVDvFuwFZkL6ZlcWt4NHvfkF6hXUmVQhVz40g5Dr7tGuPX4pDccUvSciB69GhJGvtX8jt5DQ==
+"@storybook/manager-api@7.3.1", "@storybook/manager-api@^7.0.12":
+ version "7.3.1"
+ resolved "https://registry.yarnpkg.com/@storybook/manager-api/-/manager-api-7.3.1.tgz#a755295c22322288897f3d4ee54336b93de8c281"
+ integrity sha512-jFH0EfWasdwHW8X5DUzTbH5mpdCZBHU7lIEUj6lVMBcBxbTniqBiG7mkwbW9VLocqEbBZimLCb/2RtTpK1Ue3Q==
dependencies:
- "@storybook/channels" "7.3.0"
- "@storybook/client-logger" "7.3.0"
- "@storybook/core-events" "7.3.0"
+ "@storybook/channels" "7.3.1"
+ "@storybook/client-logger" "7.3.1"
+ "@storybook/core-events" "7.3.1"
"@storybook/csf" "^0.1.0"
"@storybook/global" "^5.0.0"
- "@storybook/router" "7.3.0"
- "@storybook/theming" "7.3.0"
- "@storybook/types" "7.3.0"
+ "@storybook/router" "7.3.1"
+ "@storybook/theming" "7.3.1"
+ "@storybook/types" "7.3.1"
dequal "^2.0.2"
lodash "^4.17.21"
memoizerific "^1.11.3"
@@ -2736,10 +2736,10 @@
resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-7.2.1.tgz#a7ef6d207443199ee027363037e964c72a6e8461"
integrity sha512-Ywjqi8iAc26RYbZfmpzvzdKbaQZaD1T/IRNfVGReM/jTXnX0VSdsa6P/pfurbyHcQw//D3TSdqRHOMtbp0nIJg==
-"@storybook/node-logger@7.3.0", "@storybook/node-logger@^7.0.12":
- version "7.3.0"
- resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-7.3.0.tgz#bee9dcfcca77d54adf446c78944d636a2831625a"
- integrity sha512-y6No2mYWn0uPFY5DuwVBpsrjc7Q16gMLZDYFo8YSG68lbydLevmj3/lv7xAvqh002e9stE02weYt94Vl/SLLsQ==
+"@storybook/node-logger@7.3.1", "@storybook/node-logger@^7.0.12":
+ version "7.3.1"
+ resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-7.3.1.tgz#4e56c3ec43cb874c1d665f5c28ecc509e7292b04"
+ integrity sha512-UVjXJ3nRsGI+yyVFCDKFCjkzrQsUSAMORSlo5vOqypO3PjSahGQBgKjlKnZGXwvdGKB2FW56PbKnb/sPBI/kPg==
"@storybook/postinstall@7.2.1":
version "7.2.1"
@@ -2767,16 +2767,16 @@
util-deprecate "^1.0.2"
"@storybook/preview-api@^7.0.12":
- version "7.3.0"
- resolved "https://registry.yarnpkg.com/@storybook/preview-api/-/preview-api-7.3.0.tgz#0765889af7a0ada618b7a353544a7223dea526bf"
- integrity sha512-nGf7/Ra5HmecblohdQnwfVWP+Eb+g0hUldcPWkJOaC2jsCqUOagGG+zbdi7PtXHJOU0RZsuGphnwVMznPMqPcw==
+ version "7.3.1"
+ resolved "https://registry.yarnpkg.com/@storybook/preview-api/-/preview-api-7.3.1.tgz#0a976397310478597551e056ca5e508657329b3c"
+ integrity sha512-otFvUJBFxhg11O5XLiyqddTS1ge/tjIs4gA4Uli6M+a6PV+SdNuTE8OjpvvgjsFTFdhyciHKTimKSLAqvopcuw==
dependencies:
- "@storybook/channels" "7.3.0"
- "@storybook/client-logger" "7.3.0"
- "@storybook/core-events" "7.3.0"
+ "@storybook/channels" "7.3.1"
+ "@storybook/client-logger" "7.3.1"
+ "@storybook/core-events" "7.3.1"
"@storybook/csf" "^0.1.0"
"@storybook/global" "^5.0.0"
- "@storybook/types" "7.3.0"
+ "@storybook/types" "7.3.1"
"@types/qs" "^6.9.5"
dequal "^2.0.2"
lodash "^4.17.21"
@@ -2846,12 +2846,12 @@
memoizerific "^1.11.3"
qs "^6.10.0"
-"@storybook/router@7.3.0":
- version "7.3.0"
- resolved "https://registry.yarnpkg.com/@storybook/router/-/router-7.3.0.tgz#ec86f422918f6fc3cb6d2c065f37251aa9a10a10"
- integrity sha512-BLrVTXZzDLLMxpSVk/iR2IQwqwP8Oavc3usX9GojxagSPv1IS07jj52jA2BuXCqPK/5S0eE1pTgPYa42FHvy/w==
+"@storybook/router@7.3.1":
+ version "7.3.1"
+ resolved "https://registry.yarnpkg.com/@storybook/router/-/router-7.3.1.tgz#15637309e41c3a5c2da615f947c1bf339b4f3e49"
+ integrity sha512-KY+Mo0oF2xcRUDCXPJjAB5xy7d8Hi2dh8VqLahGa14ZHwhsZ/RxqE2bypwLXXkRpEiyOpfMbSsG73+1ml3fIUg==
dependencies:
- "@storybook/client-logger" "7.3.0"
+ "@storybook/client-logger" "7.3.1"
memoizerific "^1.11.3"
qs "^6.10.0"
@@ -2870,13 +2870,13 @@
read-pkg-up "^7.0.1"
"@storybook/telemetry@^7.1.0-alpha.32":
- version "7.3.0"
- resolved "https://registry.yarnpkg.com/@storybook/telemetry/-/telemetry-7.3.0.tgz#0b7ed56211196cc0e43d65506dd9489cc3bf9e6d"
- integrity sha512-N6lNDSZ8ux5a1NLils93rGTYx4YKj+VOqu0I0um+/DB2ozPvf3nfzRxgkkmw18MtenfnwI9wnUltI8QaMnigUQ==
+ version "7.3.1"
+ resolved "https://registry.yarnpkg.com/@storybook/telemetry/-/telemetry-7.3.1.tgz#a4f5dec79193c914763bb91bd834680e6defd224"
+ integrity sha512-yRM1ACOIuacwIy0V0NzEpm83b/qhE9urHIZq9b9Bnnv22865vbJCSt5yfiH+HHn0FColNDgSx6dY35cneFG/Xg==
dependencies:
- "@storybook/client-logger" "7.3.0"
- "@storybook/core-common" "7.3.0"
- "@storybook/csf-tools" "7.3.0"
+ "@storybook/client-logger" "7.3.1"
+ "@storybook/core-common" "7.3.1"
+ "@storybook/csf-tools" "7.3.1"
chalk "^4.1.0"
detect-package-manager "^2.0.1"
fetch-retry "^5.0.2"
@@ -2902,13 +2902,13 @@
"@storybook/global" "^5.0.0"
memoizerific "^1.11.3"
-"@storybook/theming@7.3.0", "@storybook/theming@^7.0.12":
- version "7.3.0"
- resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-7.3.0.tgz#2a015f4816f787de7dfd6649d50f05ef9805f8c1"
- integrity sha512-/Jcd/duEW28lvjTbocKWiB8DT3wLZeJeBg3XtknZbZ0SlPf4JR5Y3Atl4fT1HEeV30Ks9ZlE5xipVY2Z+fjS7Q==
+"@storybook/theming@7.3.1", "@storybook/theming@^7.0.12":
+ version "7.3.1"
+ resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-7.3.1.tgz#bc4361545a026986b771c93cafea8b6d84fce9b6"
+ integrity sha512-1CF6bT8o8pZcd/ptl1q4CiTGY4oLV19tE8Wnhd/TO934fdMp4fUx1FF4pFL6an98lxVeZT0JQ4uvkuaTvHJFRQ==
dependencies:
"@emotion/use-insertion-effect-with-fallbacks" "^1.0.0"
- "@storybook/client-logger" "7.3.0"
+ "@storybook/client-logger" "7.3.1"
"@storybook/global" "^5.0.0"
memoizerific "^1.11.3"
@@ -2922,12 +2922,12 @@
"@types/express" "^4.7.0"
file-system-cache "2.3.0"
-"@storybook/types@7.3.0", "@storybook/types@^7.0.12":
- version "7.3.0"
- resolved "https://registry.yarnpkg.com/@storybook/types/-/types-7.3.0.tgz#88e2141e31407b2dc864f9f364376c7b6e25a76b"
- integrity sha512-NpemDA3hwK+jVTfPc1u1wQwu7DXqpatEtmAQUzEerx5lwoMvj3lGSk30xrOCpNvvpZz2P97FDScVsmzGlXwncA==
+"@storybook/types@7.3.1", "@storybook/types@^7.0.12":
+ version "7.3.1"
+ resolved "https://registry.yarnpkg.com/@storybook/types/-/types-7.3.1.tgz#51548d0b6e12969c06de2712b48d153c7c499d1c"
+ integrity sha512-QR714i/Stus/RYqJ8chTCfWNt3RY6/64xRXxaMLqkx75OIq5+rtsmes9I5iUqM4FuupvE7YdlZ5xKvxLYLYgJQ==
dependencies:
- "@storybook/channels" "7.3.0"
+ "@storybook/channels" "7.3.1"
"@types/babel__core" "^7.0.0"
"@types/express" "^4.7.0"
file-system-cache "2.3.0"
@@ -3173,9 +3173,9 @@
integrity sha512-Mgq7eCtoTjT89FqNoTzzXg2XvCi5VMhRV6+I2aYanc6kQCBImeNaAYRs/DyoVqk1YEUJK5gN9VO7HRIdz4Wo3Q==
"@types/node@^16.0.0":
- version "16.18.40"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.40.tgz#968d64746d20cac747a18ca982c0f1fe518c031c"
- integrity sha512-+yno3ItTEwGxXiS/75Q/aHaa5srkpnJaH+kdkTVJ3DtJEwv92itpKbxU+FjPoh2m/5G9zmUQfrL4A4C13c+iGA==
+ version "16.18.41"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.41.tgz#61b14360fd3f7444b326ac3207c83005371e3f8a"
+ integrity sha512-YZJjn+Aaw0xihnpdImxI22jqGbp0DCgTFKRycygjGx/Y27NnWFJa5FJ7P+MRT3u07dogEeMVh70pWpbIQollTA==
"@types/normalize-package-data@^2.4.0":
version "2.4.1"
@@ -3990,9 +3990,9 @@ camelcase@^5.3.1:
integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
caniuse-lite@^1.0.30001517, caniuse-lite@^1.0.30001520:
- version "1.0.30001520"
- resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001520.tgz#62e2b7a1c7b35269594cf296a80bdf8cb9565006"
- integrity sha512-tahF5O9EiiTzwTUqAeFjIZbn4Dnqxzz7ktrgGlMYNLH43Ul26IgTMH/zvL3DG0lZxBYnlT04axvInszUsZULdA==
+ version "1.0.30001521"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001521.tgz#e9930cf499f7c1e80334b6c1fbca52e00d889e56"
+ integrity sha512-fnx1grfpEOvDGH+V17eccmNjucGUnCbP6KL+l5KqBIerp26WK/+RQ7CIDE37KGJjaPyqWXXlFUyKiWmvdNNKmQ==
chalk@^2.4.2:
version "2.4.2"
@@ -4585,9 +4585,9 @@ ejs@^3.1.8:
jake "^10.8.5"
electron-to-chromium@^1.4.477:
- version "1.4.492"
- resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.492.tgz#83fed8beb64ec60578069e15dddd17b13a77ca56"
- integrity sha512-36K9b/6skMVwAIEsC7GiQ8I8N3soCALVSHqWHzNDtGemAcI9Xu8hP02cywWM0A794rTHm0b0zHPeLJHtgFVamQ==
+ version "1.4.495"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.495.tgz#d72d2eddc05d07c538275a00f2619b113848bff6"
+ integrity sha512-mwknuemBZnoOCths4GtpU/SDuVMp3uQHKa2UNJT9/aVD6WVRjGpXOxRGX7lm6ILIenTdGXPSTCTDaWos5tEU8Q==
elliptic@6.5.4, elliptic@^6.5.3:
version "6.5.4"
@@ -5979,9 +5979,9 @@ istanbul-reports@^3.1.4:
istanbul-lib-report "^3.0.0"
jackspeak@^2.0.3:
- version "2.2.3"
- resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.2.3.tgz#ac63c57c18d254dc78a1f4ecd1cdeb4daeb6e616"
- integrity sha512-pF0kfjmg8DJLxDrizHoCZGUFz4P4czQ3HyfW4BU0ffebYkzAVlBywp5zaxW/TM+r0sGbmrQdi8EQQVTJFxnGsQ==
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.0.tgz#aa228a94de830f31d4e4f0184427ce91c4ff1493"
+ integrity sha512-uKmsITSsF4rUWQHzqaRUuyAir3fZfW3f202Ee34lz/gZCi970CPZwyQXLGNgWJvvZbvFyzeyGq0+4fcG/mBKZg==
dependencies:
"@isaacs/cliui" "^8.0.2"
optionalDependencies:
@@ -7686,9 +7686,9 @@ sass-loader@^13.2.2:
neo-async "^2.6.2"
sass@^1.63.6:
- version "1.65.1"
- resolved "https://registry.yarnpkg.com/sass/-/sass-1.65.1.tgz#8f283b0c26335a88246a448d22e1342ba2ea1432"
- integrity sha512-9DINwtHmA41SEd36eVPQ9BJKpn7eKDQmUHmpI0y5Zv2Rcorrh0zS+cFrt050hdNbmmCNKTW3hV5mWfuegNRsEA==
+ version "1.66.0"
+ resolved "https://registry.yarnpkg.com/sass/-/sass-1.66.0.tgz#74728eed49b0e490cd729c233e7f1c6ce356e638"
+ integrity sha512-C3U+RgpAAlTXULZkWwzfysgbbBBo8IZudNAOJAVBLslFbIaZv4MBPkTqhuvpK4lqgdoFiWhnOGMoV4L1FyOBag==
dependencies:
chokidar ">=3.0.0 <4.0.0"
immutable "^4.0.0"
@@ -7933,7 +7933,6 @@ stream-shift@^1.0.0:
integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==
"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.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==
@@ -7966,7 +7965,6 @@ string_decoder@~1.1.1:
safe-buffer "~5.1.0"
"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1:
- name strip-ansi-cjs
version "6.0.1"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
@@ -8871,7 +8869,6 @@ wordwrap@^1.0.0:
integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==
"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0:
- name wrap-ansi-cjs
version "7.0.0"
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==