From a2b7f2f8a62ef549b363360bbf127f5b943aebf5 Mon Sep 17 00:00:00 2001 From: fritzschoff Date: Wed, 25 May 2022 10:25:52 +0200 Subject: [PATCH 1/6] feat(transaction dialog): context that triggers a dialog whenever a tx hash is passed to the context --- .eslintrc | 9 +- .prettierrc | 24 +- package.json | 5 +- src/context/useTransactionDialogContext.tsx | 132 +++ .../useTransactoinDialogContext.stories.tsx | 44 + yarn.lock | 795 +++++++++++++++++- 6 files changed, 989 insertions(+), 20 deletions(-) create mode 100644 src/context/useTransactionDialogContext.tsx create mode 100644 src/context/useTransactoinDialogContext.stories.tsx diff --git a/.eslintrc b/.eslintrc index c7cf84c..99550e5 100644 --- a/.eslintrc +++ b/.eslintrc @@ -40,8 +40,8 @@ "rules": { "prettier/prettier": ["error", {}, { "usePrettierrc": true }], // https://github.com/lydell/eslint-plugin-simple-import-sort - "simple-import-sort/imports": "error", - "simple-import-sort/exports": "error", + "simple-import-sort/imports": "off", + "simple-import-sort/exports": "off", // https://eslint.org/docs/rules/ "no-var": "error", "no-console": "warn", @@ -68,7 +68,8 @@ "react/jsx-fragments": ["error", "syntax"], "react/jsx-boolean-value": ["error", "never"], "react/jsx-curly-brace-presence": ["error", "never"], - "react/jsx-sort-props": [ + /* Super annoying when importing an SVG from Figma, throws millions of errors */ + /* "react/jsx-sort-props": [ "error", { "callbacksLast": true, @@ -78,7 +79,7 @@ "noSortAlphabetically": false, "reservedFirst": true } - ], + ], */ // https://github.com/typescript-eslint/typescript-eslint "@typescript-eslint/explicit-module-boundary-types": "off", // https://github.com/jsx-eslint/eslint-plugin-jsx-a11y diff --git a/.prettierrc b/.prettierrc index 759808e..759dc64 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1,14 +1,14 @@ { - "semi": true, - "useTabs": false, - "tabWidth": 2, - "endOfLine": "auto", - "quoteProps": "as-needed", - "printWidth": 100, - "singleQuote": false, - "arrowParens": "always", - "trailingComma": "none", - "bracketSpacing": true, - "jsxSingleQuote": false, - "bracketSameLine": false + "semi": true, + "useTabs": false, + "tabWidth": 2, + "endOfLine": "auto", + "quoteProps": "as-needed", + "printWidth": 100, + "singleQuote": false, + "arrowParens": "always", + "trailingComma": "none", + "bracketSpacing": true, + "jsxSingleQuote": false, + "bracketSameLine": false } diff --git a/package.json b/package.json index d9bb2f3..738bc4f 100644 --- a/package.json +++ b/package.json @@ -22,10 +22,10 @@ "commit": "cz", "clean": "rimraf dist", "deploy-storybook": "yarn build-storybook && mkdir -p ./storybook-static/fonts && cp ./src/fonts/* ./storybook-static/fonts/ && gh-pages -d storybook-static", - "yalc-publish": "yarn build && yalc push --update", - "permission": "chmod u+r+x build.sh" + "yalc-publish": "yarn build && yalc push --update" }, "dependencies": { + "@synthetixio/transaction-notifier": "^2.70.1", "clsx": "^1.1.1", "lodash": "^4.17.21", "react-transition-group": "^4.4.2" @@ -67,6 +67,7 @@ "eslint-plugin-react": "^7.27.1", "eslint-plugin-react-hooks": "^4.3.0", "eslint-plugin-simple-import-sort": "^7.0.0", + "ethers": "^5.6.7", "gh-pages": "^3.2.3", "husky": "^7.0.4", "lint-staged": "^12.1.2", diff --git a/src/context/useTransactionDialogContext.tsx b/src/context/useTransactionDialogContext.tsx new file mode 100644 index 0000000..42494e0 --- /dev/null +++ b/src/context/useTransactionDialogContext.tsx @@ -0,0 +1,132 @@ +import { Dialog, Spinner } from "components"; +import { createContext, ReactNode, useContext, useEffect, useState } from "react"; +import { providers } from "ethers"; +import { TransactionNotifier } from "@synthetixio/transaction-notifier"; + +type TxState = "signing" | "mining" | "failed" | "confirmed" | "error"; + +interface TransactionDialogContextType { + setTxHash: React.Dispatch; + visible: boolean; + setContent: React.Dispatch>; + state: TxState; +} +const Svg = ({ txState }: Record<"txState", TxState>) => { + return ( + + + + + + + + + + + + + + + + + + + + ); +}; + +const TransactionDialogContext = createContext(null); + +export const useTransactionModalContext = () => { + return useContext(TransactionDialogContext) as TransactionDialogContextType; +}; +const TransactionDialogContextProvider: React.FC<{ + provider: providers.Web3Provider; + children: React.ReactNode; +}> = ({ children, provider }) => { + const txNotifier = new TransactionNotifier(provider); + const [visible, setVisible] = useState(false); + const [content, setContent] = useState(undefined); + const [state, setState] = useState("signing"); + const [txHash, setTxHash] = useState(undefined); + + useEffect(() => { + if (txHash) { + setVisible(true); + setState("signing"); + const emitter = txNotifier.hash(txHash); + emitter.on("txConfirmed", () => setState("confirmed")); + emitter.on("txError", () => setState("error")); + emitter.on("txFailed", () => setState("failed")); + emitter.on("txSent", () => setState("mining")); + } + }, [txHash]); + + return ( + + setVisible(false)} disableClose> +
+ +

Transaction Pending

+ + Follow the prompts of your wallet to authorize the transaction. + +
{content}
+ +
+
+ {children} +
+ ); +}; + +export default TransactionDialogContextProvider; diff --git a/src/context/useTransactoinDialogContext.stories.tsx b/src/context/useTransactoinDialogContext.stories.tsx new file mode 100644 index 0000000..5071773 --- /dev/null +++ b/src/context/useTransactoinDialogContext.stories.tsx @@ -0,0 +1,44 @@ +import { ComponentMeta, ComponentStory } from "@storybook/react"; + +import TransactionDialogContextProvider, { + useTransactionModalContext +} from "./useTransactionDialogContext"; + +import { providers } from "ethers"; + +export default { + title: "Transaction Dialog", + component: TransactionDialogContextProvider, + decorators: [(Story) => ] +} as ComponentMeta; + +const Template: ComponentStory = ({ children }) => { + return ( + + + + ); +}; + +const HelperComponent = () => { + const { visible, setTxHash, state, setContent } = useTransactionModalContext(); + return ( +
+
is Dialog active: {visible ? "yes" : "no"}
+
is Dialog active: {state?.toString()}
+ +
+ ); +}; + +export const Primary = Template.bind({}); + +Primary.args = { children:
rest of the app
}; diff --git a/yarn.lock b/yarn.lock index e860154..e430315 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1591,6 +1591,687 @@ minimatch "^3.0.4" strip-json-comments "^3.1.1" +"@ethersproject/abi@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.5.0.tgz#fb52820e22e50b854ff15ce1647cc508d6660613" + integrity sha512-loW7I4AohP5KycATvc0MgujU6JyCHPqHdeoo9z3Nr9xEiNioxa65ccdm1+fsoJhkuhdRtfcL8cfyGamz2AxZ5w== + dependencies: + "@ethersproject/address" "^5.5.0" + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/constants" "^5.5.0" + "@ethersproject/hash" "^5.5.0" + "@ethersproject/keccak256" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/strings" "^5.5.0" + +"@ethersproject/abi@5.6.2", "@ethersproject/abi@^5.5.0", "@ethersproject/abi@^5.6.0": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.6.2.tgz#f2956f2ac724cd720e581759d9e3840cd9744818" + integrity sha512-40Ixjhy+YzFtnvzIqFU13FW9hd1gMoLa3cJfSDnfnL4o8EnEG1qLiV8sNJo3sHYi9UYMfFeRuZ7kv5+vhzU7gQ== + dependencies: + "@ethersproject/address" "^5.6.0" + "@ethersproject/bignumber" "^5.6.0" + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/constants" "^5.6.0" + "@ethersproject/hash" "^5.6.0" + "@ethersproject/keccak256" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/strings" "^5.6.0" + +"@ethersproject/abstract-provider@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.5.1.tgz#2f1f6e8a3ab7d378d8ad0b5718460f85649710c5" + integrity sha512-m+MA/ful6eKbxpr99xUYeRvLkfnlqzrF8SZ46d/xFB1A7ZVknYc/sXJG0RcufF52Qn2jeFj1hhcoQ7IXjNKUqg== + dependencies: + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/networks" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/transactions" "^5.5.0" + "@ethersproject/web" "^5.5.0" + +"@ethersproject/abstract-provider@5.6.0", "@ethersproject/abstract-provider@^5.5.0", "@ethersproject/abstract-provider@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.6.0.tgz#0c4ac7054650dbd9c476cf5907f588bbb6ef3061" + integrity sha512-oPMFlKLN+g+y7a79cLK3WiLcjWFnZQtXWgnLAbHZcN3s7L4v90UHpTOrLk+m3yr0gt+/h9STTM6zrr7PM8uoRw== + dependencies: + "@ethersproject/bignumber" "^5.6.0" + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/networks" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/transactions" "^5.6.0" + "@ethersproject/web" "^5.6.0" + +"@ethersproject/abstract-signer@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.5.0.tgz#590ff6693370c60ae376bf1c7ada59eb2a8dd08d" + integrity sha512-lj//7r250MXVLKI7sVarXAbZXbv9P50lgmJQGr2/is82EwEb8r7HrxsmMqAjTsztMYy7ohrIhGMIml+Gx4D3mA== + dependencies: + "@ethersproject/abstract-provider" "^5.5.0" + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + +"@ethersproject/abstract-signer@5.6.1", "@ethersproject/abstract-signer@^5.5.0", "@ethersproject/abstract-signer@^5.6.0": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.6.1.tgz#54df786bdf1aabe20d0ed508ec05e0aa2d06674f" + integrity sha512-xhSLo6y0nGJS7NxfvOSzCaWKvWb1TLT7dQ0nnpHZrDnC67xfnWm9NXflTMFPUXXMtjr33CdV0kWDEmnbrQZ74Q== + dependencies: + "@ethersproject/abstract-provider" "^5.6.0" + "@ethersproject/bignumber" "^5.6.0" + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + +"@ethersproject/address@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.5.0.tgz#bcc6f576a553f21f3dd7ba17248f81b473c9c78f" + integrity sha512-l4Nj0eWlTUh6ro5IbPTgbpT4wRbdH5l8CQf7icF7sb/SI3Nhd9Y9HzhonTSTi6CefI0necIw7LJqQPopPLZyWw== + dependencies: + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/keccak256" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/rlp" "^5.5.0" + +"@ethersproject/address@5.6.0", "@ethersproject/address@^5.5.0", "@ethersproject/address@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.6.0.tgz#13c49836d73e7885fc148ad633afad729da25012" + integrity sha512-6nvhYXjbXsHPS+30sHZ+U4VMagFC/9zAk6Gd/h3S21YW4+yfb0WfRtaAIZ4kfM4rrVwqiy284LP0GtL5HXGLxQ== + dependencies: + "@ethersproject/bignumber" "^5.6.0" + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/keccak256" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/rlp" "^5.6.0" + +"@ethersproject/base64@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.5.0.tgz#881e8544e47ed976930836986e5eb8fab259c090" + integrity sha512-tdayUKhU1ljrlHzEWbStXazDpsx4eg1dBXUSI6+mHlYklOXoXF6lZvw8tnD6oVaWfnMxAgRSKROg3cVKtCcppA== + dependencies: + "@ethersproject/bytes" "^5.5.0" + +"@ethersproject/base64@5.6.0", "@ethersproject/base64@^5.5.0", "@ethersproject/base64@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.6.0.tgz#a12c4da2a6fb86d88563216b0282308fc15907c9" + integrity sha512-2Neq8wxJ9xHxCF9TUgmKeSh9BXJ6OAxWfeGWvbauPh8FuHEjamgHilllx8KkSd5ErxyHIX7Xv3Fkcud2kY9ezw== + dependencies: + "@ethersproject/bytes" "^5.6.0" + +"@ethersproject/basex@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.5.0.tgz#e40a53ae6d6b09ab4d977bd037010d4bed21b4d3" + integrity sha512-ZIodwhHpVJ0Y3hUCfUucmxKsWQA5TMnavp5j/UOuDdzZWzJlRmuOjcTMIGgHCYuZmHt36BfiSyQPSRskPxbfaQ== + dependencies: + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + +"@ethersproject/basex@5.6.0", "@ethersproject/basex@^5.5.0", "@ethersproject/basex@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.6.0.tgz#9ea7209bf0a1c3ddc2a90f180c3a7f0d7d2e8a69" + integrity sha512-qN4T+hQd/Md32MoJpc69rOwLYRUXwjTlhHDIeUkUmiN/JyWkkLLMoG0TqvSQKNqZOMgN5stbUYN6ILC+eD7MEQ== + dependencies: + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + +"@ethersproject/bignumber@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.5.0.tgz#875b143f04a216f4f8b96245bde942d42d279527" + integrity sha512-6Xytlwvy6Rn3U3gKEc1vP7nR92frHkv6wtVr95LFR3jREXiCPzdWxKQ1cx4JGQBXxcguAwjA8murlYN2TSiEbg== + dependencies: + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + bn.js "^4.11.9" + +"@ethersproject/bignumber@5.6.1", "@ethersproject/bignumber@^5.5.0", "@ethersproject/bignumber@^5.6.0": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.6.1.tgz#d5e0da518eb82ab8d08ca9db501888bbf5f0c8fb" + integrity sha512-UtMeZ3GaUuF9sx2u9nPZiPP3ULcAFmXyvynR7oHl/tPrM+vldZh7ocMsoa1PqKYGnQnqUZJoqxZnGN6J0qdipA== + dependencies: + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + bn.js "^4.11.9" + +"@ethersproject/bytes@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.5.0.tgz#cb11c526de657e7b45d2e0f0246fb3b9d29a601c" + integrity sha512-ABvc7BHWhZU9PNM/tANm/Qx4ostPGadAuQzWTr3doklZOhDlmcBqclrQe/ZXUIj3K8wC28oYeuRa+A37tX9kog== + dependencies: + "@ethersproject/logger" "^5.5.0" + +"@ethersproject/bytes@5.6.1", "@ethersproject/bytes@^5.5.0", "@ethersproject/bytes@^5.6.0": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.6.1.tgz#24f916e411f82a8a60412344bf4a813b917eefe7" + integrity sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g== + dependencies: + "@ethersproject/logger" "^5.6.0" + +"@ethersproject/constants@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.5.0.tgz#d2a2cd7d94bd1d58377d1d66c4f53c9be4d0a45e" + integrity sha512-2MsRRVChkvMWR+GyMGY4N1sAX9Mt3J9KykCsgUFd/1mwS0UH1qw+Bv9k1UJb3X3YJYFco9H20pjSlOIfCG5HYQ== + dependencies: + "@ethersproject/bignumber" "^5.5.0" + +"@ethersproject/constants@5.6.0", "@ethersproject/constants@^5.5.0", "@ethersproject/constants@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.6.0.tgz#55e3eb0918584d3acc0688e9958b0cedef297088" + integrity sha512-SrdaJx2bK0WQl23nSpV/b1aq293Lh0sUaZT/yYKPDKn4tlAbkH96SPJwIhwSwTsoQQZxuh1jnqsKwyymoiBdWA== + dependencies: + "@ethersproject/bignumber" "^5.6.0" + +"@ethersproject/contracts@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.5.0.tgz#b735260d4bd61283a670a82d5275e2a38892c197" + integrity sha512-2viY7NzyvJkh+Ug17v7g3/IJC8HqZBDcOjYARZLdzRxrfGlRgmYgl6xPRKVbEzy1dWKw/iv7chDcS83pg6cLxg== + dependencies: + "@ethersproject/abi" "^5.5.0" + "@ethersproject/abstract-provider" "^5.5.0" + "@ethersproject/abstract-signer" "^5.5.0" + "@ethersproject/address" "^5.5.0" + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/constants" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/transactions" "^5.5.0" + +"@ethersproject/contracts@5.6.1": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.6.1.tgz#c0eba3f8a2226456f92251a547344fd0593281d2" + integrity sha512-0fpBBDoPqJMsutE6sNjg6pvCJaIcl7tliMQTMRcoUWDACfjO68CpKOJBlsEhEhmzdnu/41KbrfAeg+sB3y35MQ== + dependencies: + "@ethersproject/abi" "^5.6.0" + "@ethersproject/abstract-provider" "^5.6.0" + "@ethersproject/abstract-signer" "^5.6.0" + "@ethersproject/address" "^5.6.0" + "@ethersproject/bignumber" "^5.6.0" + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/constants" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/transactions" "^5.6.0" + +"@ethersproject/hash@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.5.0.tgz#7cee76d08f88d1873574c849e0207dcb32380cc9" + integrity sha512-dnGVpK1WtBjmnp3mUT0PlU2MpapnwWI0PibldQEq1408tQBAbZpPidkWoVVuNMOl/lISO3+4hXZWCL3YV7qzfg== + dependencies: + "@ethersproject/abstract-signer" "^5.5.0" + "@ethersproject/address" "^5.5.0" + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/keccak256" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/strings" "^5.5.0" + +"@ethersproject/hash@5.6.0", "@ethersproject/hash@^5.5.0", "@ethersproject/hash@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.6.0.tgz#d24446a5263e02492f9808baa99b6e2b4c3429a2" + integrity sha512-fFd+k9gtczqlr0/BruWLAu7UAOas1uRRJvOR84uDf4lNZ+bTkGl366qvniUZHKtlqxBRU65MkOobkmvmpHU+jA== + dependencies: + "@ethersproject/abstract-signer" "^5.6.0" + "@ethersproject/address" "^5.6.0" + "@ethersproject/bignumber" "^5.6.0" + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/keccak256" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/strings" "^5.6.0" + +"@ethersproject/hdnode@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.5.0.tgz#4a04e28f41c546f7c978528ea1575206a200ddf6" + integrity sha512-mcSOo9zeUg1L0CoJH7zmxwUG5ggQHU1UrRf8jyTYy6HxdZV+r0PBoL1bxr+JHIPXRzS6u/UW4mEn43y0tmyF8Q== + dependencies: + "@ethersproject/abstract-signer" "^5.5.0" + "@ethersproject/basex" "^5.5.0" + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/pbkdf2" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/sha2" "^5.5.0" + "@ethersproject/signing-key" "^5.5.0" + "@ethersproject/strings" "^5.5.0" + "@ethersproject/transactions" "^5.5.0" + "@ethersproject/wordlists" "^5.5.0" + +"@ethersproject/hdnode@5.6.1", "@ethersproject/hdnode@^5.5.0", "@ethersproject/hdnode@^5.6.0": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.6.1.tgz#37fa1eb91f6e20ca39cc5fcb7acd3da263d85dab" + integrity sha512-6IuYDmbH5Bv/WH/A2cUd0FjNr4qTLAvyHAECiFZhNZp69pPvU7qIDwJ7CU7VAkwm4IVBzqdYy9mpMAGhQdwCDA== + dependencies: + "@ethersproject/abstract-signer" "^5.6.0" + "@ethersproject/basex" "^5.6.0" + "@ethersproject/bignumber" "^5.6.0" + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/pbkdf2" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/sha2" "^5.6.0" + "@ethersproject/signing-key" "^5.6.0" + "@ethersproject/strings" "^5.6.0" + "@ethersproject/transactions" "^5.6.0" + "@ethersproject/wordlists" "^5.6.0" + +"@ethersproject/json-wallets@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.5.0.tgz#dd522d4297e15bccc8e1427d247ec8376b60e325" + integrity sha512-9lA21XQnCdcS72xlBn1jfQdj2A1VUxZzOzi9UkNdnokNKke/9Ya2xA9aIK1SC3PQyBDLt4C+dfps7ULpkvKikQ== + dependencies: + "@ethersproject/abstract-signer" "^5.5.0" + "@ethersproject/address" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/hdnode" "^5.5.0" + "@ethersproject/keccak256" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/pbkdf2" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/random" "^5.5.0" + "@ethersproject/strings" "^5.5.0" + "@ethersproject/transactions" "^5.5.0" + aes-js "3.0.0" + scrypt-js "3.0.1" + +"@ethersproject/json-wallets@5.6.0", "@ethersproject/json-wallets@^5.5.0", "@ethersproject/json-wallets@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.6.0.tgz#4c2fc27f17e36c583e7a252fb938bc46f98891e5" + integrity sha512-fmh86jViB9r0ibWXTQipxpAGMiuxoqUf78oqJDlCAJXgnJF024hOOX7qVgqsjtbeoxmcLwpPsXNU0WEe/16qPQ== + dependencies: + "@ethersproject/abstract-signer" "^5.6.0" + "@ethersproject/address" "^5.6.0" + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/hdnode" "^5.6.0" + "@ethersproject/keccak256" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/pbkdf2" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/random" "^5.6.0" + "@ethersproject/strings" "^5.6.0" + "@ethersproject/transactions" "^5.6.0" + aes-js "3.0.0" + scrypt-js "3.0.1" + +"@ethersproject/keccak256@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.5.0.tgz#e4b1f9d7701da87c564ffe336f86dcee82983492" + integrity sha512-5VoFCTjo2rYbBe1l2f4mccaRFN/4VQEYFwwn04aJV2h7qf4ZvI2wFxUE1XOX+snbwCLRzIeikOqtAoPwMza9kg== + dependencies: + "@ethersproject/bytes" "^5.5.0" + js-sha3 "0.8.0" + +"@ethersproject/keccak256@5.6.0", "@ethersproject/keccak256@^5.5.0", "@ethersproject/keccak256@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.6.0.tgz#fea4bb47dbf8f131c2e1774a1cecbfeb9d606459" + integrity sha512-tk56BJ96mdj/ksi7HWZVWGjCq0WVl/QvfhFQNeL8fxhBlGoP+L80uDCiQcpJPd+2XxkivS3lwRm3E0CXTfol0w== + dependencies: + "@ethersproject/bytes" "^5.6.0" + js-sha3 "0.8.0" + +"@ethersproject/logger@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.5.0.tgz#0c2caebeff98e10aefa5aef27d7441c7fd18cf5d" + integrity sha512-rIY/6WPm7T8n3qS2vuHTUBPdXHl+rGxWxW5okDfo9J4Z0+gRRZT0msvUdIJkE4/HS29GUMziwGaaKO2bWONBrg== + +"@ethersproject/logger@5.6.0", "@ethersproject/logger@^5.5.0", "@ethersproject/logger@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.6.0.tgz#d7db1bfcc22fd2e4ab574cba0bb6ad779a9a3e7a" + integrity sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg== + +"@ethersproject/networks@5.5.2": + version "5.5.2" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.5.2.tgz#784c8b1283cd2a931114ab428dae1bd00c07630b" + integrity sha512-NEqPxbGBfy6O3x4ZTISb90SjEDkWYDUbEeIFhJly0F7sZjoQMnj5KYzMSkMkLKZ+1fGpx00EDpHQCy6PrDupkQ== + dependencies: + "@ethersproject/logger" "^5.5.0" + +"@ethersproject/networks@5.6.3", "@ethersproject/networks@^5.5.0", "@ethersproject/networks@^5.6.0": + version "5.6.3" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.6.3.tgz#3ee3ab08f315b433b50c99702eb32e0cf31f899f" + integrity sha512-QZxRH7cA5Ut9TbXwZFiCyuPchdWi87ZtVNHWZd0R6YFgYtes2jQ3+bsslJ0WdyDe0i6QumqtoYqvY3rrQFRZOQ== + dependencies: + "@ethersproject/logger" "^5.6.0" + +"@ethersproject/pbkdf2@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.5.0.tgz#e25032cdf02f31505d47afbf9c3e000d95c4a050" + integrity sha512-SaDvQFvXPnz1QGpzr6/HToLifftSXGoXrbpZ6BvoZhmx4bNLHrxDe8MZisuecyOziP1aVEwzC2Hasj+86TgWVg== + dependencies: + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/sha2" "^5.5.0" + +"@ethersproject/pbkdf2@5.6.0", "@ethersproject/pbkdf2@^5.5.0", "@ethersproject/pbkdf2@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.6.0.tgz#04fcc2d7c6bff88393f5b4237d906a192426685a" + integrity sha512-Wu1AxTgJo3T3H6MIu/eejLFok9TYoSdgwRr5oGY1LTLfmGesDoSx05pemsbrPT2gG4cQME+baTSCp5sEo2erZQ== + dependencies: + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/sha2" "^5.6.0" + +"@ethersproject/properties@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.5.0.tgz#61f00f2bb83376d2071baab02245f92070c59995" + integrity sha512-l3zRQg3JkD8EL3CPjNK5g7kMx4qSwiR60/uk5IVjd3oq1MZR5qUg40CNOoEJoX5wc3DyY5bt9EbMk86C7x0DNA== + dependencies: + "@ethersproject/logger" "^5.5.0" + +"@ethersproject/properties@5.6.0", "@ethersproject/properties@^5.5.0", "@ethersproject/properties@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.6.0.tgz#38904651713bc6bdd5bdd1b0a4287ecda920fa04" + integrity sha512-szoOkHskajKePTJSZ46uHUWWkbv7TzP2ypdEK6jGMqJaEt2sb0jCgfBo0gH0m2HBpRixMuJ6TBRaQCF7a9DoCg== + dependencies: + "@ethersproject/logger" "^5.6.0" + +"@ethersproject/providers@5.5.2": + version "5.5.2" + resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.5.2.tgz#131ccf52dc17afd0ab69ed444b8c0e3a27297d99" + integrity sha512-hkbx7x/MKcRjyrO4StKXCzCpWer6s97xnm34xkfPiarhtEUVAN4TBBpamM+z66WcTt7H5B53YwbRj1n7i8pZoQ== + dependencies: + "@ethersproject/abstract-provider" "^5.5.0" + "@ethersproject/abstract-signer" "^5.5.0" + "@ethersproject/address" "^5.5.0" + "@ethersproject/basex" "^5.5.0" + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/constants" "^5.5.0" + "@ethersproject/hash" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/networks" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/random" "^5.5.0" + "@ethersproject/rlp" "^5.5.0" + "@ethersproject/sha2" "^5.5.0" + "@ethersproject/strings" "^5.5.0" + "@ethersproject/transactions" "^5.5.0" + "@ethersproject/web" "^5.5.0" + bech32 "1.1.4" + ws "7.4.6" + +"@ethersproject/providers@5.6.7": + version "5.6.7" + resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.6.7.tgz#1f88ec94febb79a90e33f7e0100354878fb4dabe" + integrity sha512-QG7KLxfYk0FA0ycWATKMM8UzMOfOvchtkN89nNORlPqqhX5zatdamJ506dh5ECk+ybcnCkeVOdStlzrOMkkGOA== + dependencies: + "@ethersproject/abstract-provider" "^5.6.0" + "@ethersproject/abstract-signer" "^5.6.0" + "@ethersproject/address" "^5.6.0" + "@ethersproject/base64" "^5.6.0" + "@ethersproject/basex" "^5.6.0" + "@ethersproject/bignumber" "^5.6.0" + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/constants" "^5.6.0" + "@ethersproject/hash" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/networks" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/random" "^5.6.0" + "@ethersproject/rlp" "^5.6.0" + "@ethersproject/sha2" "^5.6.0" + "@ethersproject/strings" "^5.6.0" + "@ethersproject/transactions" "^5.6.0" + "@ethersproject/web" "^5.6.0" + bech32 "1.1.4" + ws "7.4.6" + +"@ethersproject/random@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.5.1.tgz#7cdf38ea93dc0b1ed1d8e480ccdaf3535c555415" + integrity sha512-YaU2dQ7DuhL5Au7KbcQLHxcRHfgyNgvFV4sQOo0HrtW3Zkrc9ctWNz8wXQ4uCSfSDsqX2vcjhroxU5RQRV0nqA== + dependencies: + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + +"@ethersproject/random@5.6.0", "@ethersproject/random@^5.5.0", "@ethersproject/random@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.6.0.tgz#1505d1ab6a250e0ee92f436850fa3314b2cb5ae6" + integrity sha512-si0PLcLjq+NG/XHSZz90asNf+YfKEqJGVdxoEkSukzbnBgC8rydbgbUgBbBGLeHN4kAJwUFEKsu3sCXT93YMsw== + dependencies: + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + +"@ethersproject/rlp@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.5.0.tgz#530f4f608f9ca9d4f89c24ab95db58ab56ab99a0" + integrity sha512-hLv8XaQ8PTI9g2RHoQGf/WSxBfTB/NudRacbzdxmst5VHAqd1sMibWG7SENzT5Dj3yZ3kJYx+WiRYEcQTAkcYA== + dependencies: + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + +"@ethersproject/rlp@5.6.0", "@ethersproject/rlp@^5.5.0", "@ethersproject/rlp@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.6.0.tgz#55a7be01c6f5e64d6e6e7edb6061aa120962a717" + integrity sha512-dz9WR1xpcTL+9DtOT/aDO+YyxSSdO8YIS0jyZwHHSlAmnxA6cKU3TrTd4Xc/bHayctxTgGLYNuVVoiXE4tTq1g== + dependencies: + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + +"@ethersproject/sha2@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.5.0.tgz#a40a054c61f98fd9eee99af2c3cc6ff57ec24db7" + integrity sha512-B5UBoglbCiHamRVPLA110J+2uqsifpZaTmid2/7W5rbtYVz6gus6/hSDieIU/6gaKIDcOj12WnOdiymEUHIAOA== + dependencies: + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + hash.js "1.1.7" + +"@ethersproject/sha2@5.6.0", "@ethersproject/sha2@^5.5.0", "@ethersproject/sha2@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.6.0.tgz#364c4c11cc753bda36f31f001628706ebadb64d9" + integrity sha512-1tNWCPFLu1n3JM9t4/kytz35DkuF9MxqkGGEHNauEbaARdm2fafnOyw1s0tIQDPKF/7bkP1u3dbrmjpn5CelyA== + dependencies: + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + hash.js "1.1.7" + +"@ethersproject/signing-key@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.5.0.tgz#2aa37169ce7e01e3e80f2c14325f624c29cedbe0" + integrity sha512-5VmseH7qjtNmDdZBswavhotYbWB0bOwKIlOTSlX14rKn5c11QmJwGt4GHeo7NrL/Ycl7uo9AHvEqs5xZgFBTng== + dependencies: + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + bn.js "^4.11.9" + elliptic "6.5.4" + hash.js "1.1.7" + +"@ethersproject/signing-key@5.6.1", "@ethersproject/signing-key@^5.5.0", "@ethersproject/signing-key@^5.6.0": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.6.1.tgz#31b0a531520616254eb0465b9443e49515c4d457" + integrity sha512-XvqQ20DH0D+bS3qlrrgh+axRMth5kD1xuvqUQUTeezxUTXBOeR6hWz2/C6FBEu39FRytyybIWrYf7YLSAKr1LQ== + dependencies: + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + bn.js "^4.11.9" + elliptic "6.5.4" + hash.js "1.1.7" + +"@ethersproject/solidity@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.5.0.tgz#2662eb3e5da471b85a20531e420054278362f93f" + integrity sha512-9NgZs9LhGMj6aCtHXhtmFQ4AN4sth5HuFXVvAQtzmm0jpSCNOTGtrHZJAeYTh7MBjRR8brylWZxBZR9zDStXbw== + dependencies: + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/keccak256" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/sha2" "^5.5.0" + "@ethersproject/strings" "^5.5.0" + +"@ethersproject/solidity@5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.6.0.tgz#64657362a596bf7f5630bdc921c07dd78df06dc3" + integrity sha512-YwF52vTNd50kjDzqKaoNNbC/r9kMDPq3YzDWmsjFTRBcIF1y4JCQJ8gB30wsTfHbaxgxelI5BfxQSxD/PbJOww== + dependencies: + "@ethersproject/bignumber" "^5.6.0" + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/keccak256" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/sha2" "^5.6.0" + "@ethersproject/strings" "^5.6.0" + +"@ethersproject/strings@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.5.0.tgz#e6784d00ec6c57710755699003bc747e98c5d549" + integrity sha512-9fy3TtF5LrX/wTrBaT8FGE6TDJyVjOvXynXJz5MT5azq+E6D92zuKNx7i29sWW2FjVOaWjAsiZ1ZWznuduTIIQ== + dependencies: + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/constants" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + +"@ethersproject/strings@5.6.0", "@ethersproject/strings@^5.5.0", "@ethersproject/strings@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.6.0.tgz#9891b26709153d996bf1303d39a7f4bc047878fd" + integrity sha512-uv10vTtLTZqrJuqBZR862ZQjTIa724wGPWQqZrofaPI/kUsf53TBG0I0D+hQ1qyNtllbNzaW+PDPHHUI6/65Mg== + dependencies: + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/constants" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + +"@ethersproject/transactions@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.5.0.tgz#7e9bf72e97bcdf69db34fe0d59e2f4203c7a2908" + integrity sha512-9RZYSKX26KfzEd/1eqvv8pLauCKzDTub0Ko4LfIgaERvRuwyaNV78mJs7cpIgZaDl6RJui4o49lHwwCM0526zA== + dependencies: + "@ethersproject/address" "^5.5.0" + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/constants" "^5.5.0" + "@ethersproject/keccak256" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/rlp" "^5.5.0" + "@ethersproject/signing-key" "^5.5.0" + +"@ethersproject/transactions@5.6.1", "@ethersproject/transactions@^5.5.0", "@ethersproject/transactions@^5.6.0": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.6.1.tgz#3091b888fe6b89bd6208ea1e9ee5e4ea91d730a3" + integrity sha512-oIAC7zBCDnjVlEn0KSG1udbqR7hP9FOurxIV/aG+erCdvdvi+QXEZRUtVP9+lu3WYUe8SMYhdAVwNJtD7dZMRw== + dependencies: + "@ethersproject/address" "^5.6.0" + "@ethersproject/bignumber" "^5.6.0" + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/constants" "^5.6.0" + "@ethersproject/keccak256" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/rlp" "^5.6.0" + "@ethersproject/signing-key" "^5.6.0" + +"@ethersproject/units@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.5.0.tgz#104d02db5b5dc42cc672cc4587bafb87a95ee45e" + integrity sha512-7+DpjiZk4v6wrikj+TCyWWa9dXLNU73tSTa7n0TSJDxkYbV3Yf1eRh9ToMLlZtuctNYu9RDNNy2USq3AdqSbag== + dependencies: + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/constants" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + +"@ethersproject/units@5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.6.0.tgz#e5cbb1906988f5740254a21b9ded6bd51e826d9c" + integrity sha512-tig9x0Qmh8qbo1w8/6tmtyrm/QQRviBh389EQ+d8fP4wDsBrJBf08oZfoiz1/uenKK9M78yAP4PoR7SsVoTjsw== + dependencies: + "@ethersproject/bignumber" "^5.6.0" + "@ethersproject/constants" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + +"@ethersproject/wallet@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.5.0.tgz#322a10527a440ece593980dca6182f17d54eae75" + integrity sha512-Mlu13hIctSYaZmUOo7r2PhNSd8eaMPVXe1wxrz4w4FCE4tDYBywDH+bAR1Xz2ADyXGwqYMwstzTrtUVIsKDO0Q== + dependencies: + "@ethersproject/abstract-provider" "^5.5.0" + "@ethersproject/abstract-signer" "^5.5.0" + "@ethersproject/address" "^5.5.0" + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/hash" "^5.5.0" + "@ethersproject/hdnode" "^5.5.0" + "@ethersproject/json-wallets" "^5.5.0" + "@ethersproject/keccak256" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/random" "^5.5.0" + "@ethersproject/signing-key" "^5.5.0" + "@ethersproject/transactions" "^5.5.0" + "@ethersproject/wordlists" "^5.5.0" + +"@ethersproject/wallet@5.6.1": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.6.1.tgz#5df4f75f848ed84ca30fd6ca75d2c66b19c5552b" + integrity sha512-oXWoOslEWtwZiViIMlGVjeKDQz/tI7JF9UkyzN9jaGj8z7sXt2SyFMb0Ev6vSAqjIzrCrNrJ/+MkAhtKnGOfZw== + dependencies: + "@ethersproject/abstract-provider" "^5.6.0" + "@ethersproject/abstract-signer" "^5.6.0" + "@ethersproject/address" "^5.6.0" + "@ethersproject/bignumber" "^5.6.0" + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/hash" "^5.6.0" + "@ethersproject/hdnode" "^5.6.0" + "@ethersproject/json-wallets" "^5.6.0" + "@ethersproject/keccak256" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/random" "^5.6.0" + "@ethersproject/signing-key" "^5.6.0" + "@ethersproject/transactions" "^5.6.0" + "@ethersproject/wordlists" "^5.6.0" + +"@ethersproject/web@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.5.1.tgz#cfcc4a074a6936c657878ac58917a61341681316" + integrity sha512-olvLvc1CB12sREc1ROPSHTdFCdvMh0J5GSJYiQg2D0hdD4QmJDy8QYDb1CvoqD/bF1c++aeKv2sR5uduuG9dQg== + dependencies: + "@ethersproject/base64" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/strings" "^5.5.0" + +"@ethersproject/web@5.6.0", "@ethersproject/web@^5.5.0", "@ethersproject/web@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.6.0.tgz#4bf8b3cbc17055027e1a5dd3c357e37474eaaeb8" + integrity sha512-G/XHj0hV1FxI2teHRfCGvfBUHFmU+YOSbCxlAMqJklxSa7QMiHFQfAxvwY2PFqgvdkxEKwRNr/eCjfAPEm2Ctg== + dependencies: + "@ethersproject/base64" "^5.6.0" + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/strings" "^5.6.0" + +"@ethersproject/wordlists@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.5.0.tgz#aac74963aa43e643638e5172353d931b347d584f" + integrity sha512-bL0UTReWDiaQJJYOC9sh/XcRu/9i2jMrzf8VLRmPKx58ckSlOJiohODkECCO50dtLZHcGU6MLXQ4OOrgBwP77Q== + dependencies: + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/hash" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/strings" "^5.5.0" + +"@ethersproject/wordlists@5.6.0", "@ethersproject/wordlists@^5.5.0", "@ethersproject/wordlists@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.6.0.tgz#79e62c5276e091d8575f6930ba01a29218ded032" + integrity sha512-q0bxNBfIX3fUuAo9OmjlEYxP40IB8ABgb7HjEZCL5IKubzV3j30CWi2rqQbjTS2HfoyQbfINoKcTVWP4ejwR7Q== + dependencies: + "@ethersproject/bytes" "^5.6.0" + "@ethersproject/hash" "^5.6.0" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/strings" "^5.6.0" + "@gar/promisify@^1.0.1", "@gar/promisify@^1.1.3": version "1.1.3" resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" @@ -3426,6 +4107,14 @@ "@svgr/plugin-svgo" "^5.5.0" loader-utils "^2.0.0" +"@synthetixio/transaction-notifier@^2.70.1": + version "2.70.1" + resolved "https://registry.yarnpkg.com/@synthetixio/transaction-notifier/-/transaction-notifier-2.70.1.tgz#9bb4653e88d7a6eb7d7dd63308043b15227b54aa" + integrity sha512-fxZZXsixHStUT02AKO2njknXRDNcp0nu/SsM5WlWPB2lgIVyeHrftkRqJ/3BlwIRd6h8pnYBAI6rG75zMaNPYA== + dependencies: + ethers "5.5.3" + lodash "4.17.19" + "@testing-library/dom@^8.0.0": version "8.13.0" resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-8.13.0.tgz#bc00bdd64c7d8b40841e27a70211399ad3af46f5" @@ -4455,6 +5144,11 @@ adjust-sourcemap-loader@^4.0.0: loader-utils "^2.0.0" regex-parser "^2.2.11" +aes-js@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" + integrity sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw== + agent-base@6, agent-base@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" @@ -5214,6 +5908,11 @@ batch@0.6.1: resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY= +bech32@1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" + integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== + before-after-hook@^2.2.0: version "2.2.2" resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.2.tgz#a6e8ca41028d90ee2c24222f201c90956091613e" @@ -7401,7 +8100,7 @@ electron-to-chromium@^1.4.84: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.88.tgz#ebe6a2573b563680c7a7bf3a51b9e465c9c501db" integrity sha512-oA7mzccefkvTNi9u7DXmT0LqvhnOiN2BhSrKerta7HeUC1cLoIwtbf2wL+Ah2ozh5KQd3/1njrGrwDBXx6d14Q== -elliptic@^6.5.3: +elliptic@6.5.4, elliptic@^6.5.3: version "6.5.4" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== @@ -7970,6 +8669,78 @@ etag@~1.8.1: resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= +ethers@5.5.3: + version "5.5.3" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.5.3.tgz#1e361516711c0c3244b6210e7e3ecabf0c75fca0" + integrity sha512-fTT4WT8/hTe/BLwRUtl7I5zlpF3XC3P/Xwqxc5AIP2HGlH15qpmjs0Ou78az93b1rLITzXLFxoNX63B8ZbUd7g== + dependencies: + "@ethersproject/abi" "5.5.0" + "@ethersproject/abstract-provider" "5.5.1" + "@ethersproject/abstract-signer" "5.5.0" + "@ethersproject/address" "5.5.0" + "@ethersproject/base64" "5.5.0" + "@ethersproject/basex" "5.5.0" + "@ethersproject/bignumber" "5.5.0" + "@ethersproject/bytes" "5.5.0" + "@ethersproject/constants" "5.5.0" + "@ethersproject/contracts" "5.5.0" + "@ethersproject/hash" "5.5.0" + "@ethersproject/hdnode" "5.5.0" + "@ethersproject/json-wallets" "5.5.0" + "@ethersproject/keccak256" "5.5.0" + "@ethersproject/logger" "5.5.0" + "@ethersproject/networks" "5.5.2" + "@ethersproject/pbkdf2" "5.5.0" + "@ethersproject/properties" "5.5.0" + "@ethersproject/providers" "5.5.2" + "@ethersproject/random" "5.5.1" + "@ethersproject/rlp" "5.5.0" + "@ethersproject/sha2" "5.5.0" + "@ethersproject/signing-key" "5.5.0" + "@ethersproject/solidity" "5.5.0" + "@ethersproject/strings" "5.5.0" + "@ethersproject/transactions" "5.5.0" + "@ethersproject/units" "5.5.0" + "@ethersproject/wallet" "5.5.0" + "@ethersproject/web" "5.5.1" + "@ethersproject/wordlists" "5.5.0" + +ethers@^5.6.7: + version "5.6.7" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.6.7.tgz#3e6257b2a0fdd5fc93e68e141cf2b9761900f374" + integrity sha512-Q8pmMraUENK0cY6cy6IvIe3e9xL/+4kBvxmUvLXg1O7Abob0c7XzWI76E29j5em/HxWMl5hYiSClmOMW3jJmdg== + dependencies: + "@ethersproject/abi" "5.6.2" + "@ethersproject/abstract-provider" "5.6.0" + "@ethersproject/abstract-signer" "5.6.1" + "@ethersproject/address" "5.6.0" + "@ethersproject/base64" "5.6.0" + "@ethersproject/basex" "5.6.0" + "@ethersproject/bignumber" "5.6.1" + "@ethersproject/bytes" "5.6.1" + "@ethersproject/constants" "5.6.0" + "@ethersproject/contracts" "5.6.1" + "@ethersproject/hash" "5.6.0" + "@ethersproject/hdnode" "5.6.1" + "@ethersproject/json-wallets" "5.6.0" + "@ethersproject/keccak256" "5.6.0" + "@ethersproject/logger" "5.6.0" + "@ethersproject/networks" "5.6.3" + "@ethersproject/pbkdf2" "5.6.0" + "@ethersproject/properties" "5.6.0" + "@ethersproject/providers" "5.6.7" + "@ethersproject/random" "5.6.0" + "@ethersproject/rlp" "5.6.0" + "@ethersproject/sha2" "5.6.0" + "@ethersproject/signing-key" "5.6.1" + "@ethersproject/solidity" "5.6.0" + "@ethersproject/strings" "5.6.0" + "@ethersproject/transactions" "5.6.1" + "@ethersproject/units" "5.6.0" + "@ethersproject/wallet" "5.6.1" + "@ethersproject/web" "5.6.0" + "@ethersproject/wordlists" "5.6.0" + eventemitter3@^4.0.0, eventemitter3@^4.0.4: version "4.0.7" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" @@ -9153,7 +9924,7 @@ hash-base@^3.0.0: readable-stream "^3.6.0" safe-buffer "^5.2.0" -hash.js@^1.0.0, hash.js@^1.0.3: +hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3: version "1.1.7" resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== @@ -10858,6 +11629,11 @@ jest@^27.4.3: import-local "^3.0.2" jest-cli "^27.5.1" +js-sha3@0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" + integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== + js-string-escape@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/js-string-escape/-/js-string-escape-1.0.1.tgz#e2625badbc0d67c7533e9edc1068c587ae4137ef" @@ -11440,6 +12216,11 @@ lodash.uniqby@^4.7.0: resolved "https://registry.yarnpkg.com/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz#d99c07a669e9e6d24e1362dfe266c67616af1302" integrity sha1-2ZwHpmnp5tJOE2Lf4mbGdhavEwI= +lodash@4.17.19: + version "4.17.19" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" + integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ== + lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4, lodash@^4.7.0: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" @@ -15185,6 +15966,11 @@ schema-utils@^4.0.0: ajv-formats "^2.1.1" ajv-keywords "^5.0.0" +scrypt-js@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" + integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== + select-hose@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" @@ -17745,6 +18531,11 @@ write-file-atomic@^4.0.0, write-file-atomic@^4.0.1: imurmurhash "^0.1.4" signal-exit "^3.0.7" +ws@7.4.6: + version "7.4.6" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" + integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== + ws@^7.4.6: version "7.5.7" resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.7.tgz#9e0ac77ee50af70d58326ecff7e85eb3fa375e67" From 8cd0ecb2dc9a9ba011314cbdf5baf1a50483a023 Mon Sep 17 00:00:00 2001 From: Peiman Date: Wed, 25 May 2022 14:40:32 +0430 Subject: [PATCH 2/6] fix: linting issues --- .eslintrc | 9 ++++----- src/context/useTransactionDialogContext.tsx | 20 +++++++++---------- .../useTransactoinDialogContext.stories.tsx | 3 +-- 3 files changed, 15 insertions(+), 17 deletions(-) diff --git a/.eslintrc b/.eslintrc index 99550e5..c7cf84c 100644 --- a/.eslintrc +++ b/.eslintrc @@ -40,8 +40,8 @@ "rules": { "prettier/prettier": ["error", {}, { "usePrettierrc": true }], // https://github.com/lydell/eslint-plugin-simple-import-sort - "simple-import-sort/imports": "off", - "simple-import-sort/exports": "off", + "simple-import-sort/imports": "error", + "simple-import-sort/exports": "error", // https://eslint.org/docs/rules/ "no-var": "error", "no-console": "warn", @@ -68,8 +68,7 @@ "react/jsx-fragments": ["error", "syntax"], "react/jsx-boolean-value": ["error", "never"], "react/jsx-curly-brace-presence": ["error", "never"], - /* Super annoying when importing an SVG from Figma, throws millions of errors */ - /* "react/jsx-sort-props": [ + "react/jsx-sort-props": [ "error", { "callbacksLast": true, @@ -79,7 +78,7 @@ "noSortAlphabetically": false, "reservedFirst": true } - ], */ + ], // https://github.com/typescript-eslint/typescript-eslint "@typescript-eslint/explicit-module-boundary-types": "off", // https://github.com/jsx-eslint/eslint-plugin-jsx-a11y diff --git a/src/context/useTransactionDialogContext.tsx b/src/context/useTransactionDialogContext.tsx index 42494e0..a8429ae 100644 --- a/src/context/useTransactionDialogContext.tsx +++ b/src/context/useTransactionDialogContext.tsx @@ -1,7 +1,7 @@ +import { TransactionNotifier } from "@synthetixio/transaction-notifier"; import { Dialog, Spinner } from "components"; -import { createContext, ReactNode, useContext, useEffect, useState } from "react"; import { providers } from "ethers"; -import { TransactionNotifier } from "@synthetixio/transaction-notifier"; +import { createContext, ReactNode, useContext, useEffect, useState } from "react"; type TxState = "signing" | "mining" | "failed" | "confirmed" | "error"; @@ -43,20 +43,20 @@ const Svg = ({ txState }: Record<"txState", TxState>) => { /> @@ -64,11 +64,11 @@ const Svg = ({ txState }: Record<"txState", TxState>) => { type="matrix" values="0 0 0 0 1 0 0 0 0 0.843137 0 0 0 0 0.360784 0 0 0 0.6 0" /> - + @@ -113,7 +113,7 @@ const TransactionDialogContextProvider: React.FC<{ setTxHash }} > - setVisible(false)} disableClose> + setVisible(false)}>

Transaction Pending

diff --git a/src/context/useTransactoinDialogContext.stories.tsx b/src/context/useTransactoinDialogContext.stories.tsx index 5071773..f638322 100644 --- a/src/context/useTransactoinDialogContext.stories.tsx +++ b/src/context/useTransactoinDialogContext.stories.tsx @@ -1,11 +1,10 @@ import { ComponentMeta, ComponentStory } from "@storybook/react"; +import { providers } from "ethers"; import TransactionDialogContextProvider, { useTransactionModalContext } from "./useTransactionDialogContext"; -import { providers } from "ethers"; - export default { title: "Transaction Dialog", component: TransactionDialogContextProvider, From 18b40c5de8d26595ee3c47dde4a4246b57e870ab Mon Sep 17 00:00:00 2001 From: Peiman Date: Wed, 25 May 2022 15:09:45 +0430 Subject: [PATCH 3/6] fix: improve card component --- src/components/Card/Card.tsx | 18 ++++++++++++++---- src/components/Dialog/Dialog.tsx | 5 +++-- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/components/Card/Card.tsx b/src/components/Card/Card.tsx index c3fbfeb..0a4f680 100644 --- a/src/components/Card/Card.tsx +++ b/src/components/Card/Card.tsx @@ -14,18 +14,22 @@ export type CardVariant = | "rainbow"; export interface CardProps extends HTMLAttributes { + rounded?: string; className?: string; - defaultClass?: string; + wrapperClassName?: string; children?: ReactNode; variant?: CardVariant; + showBorder?: boolean; } const CardRender: React.ForwardRefRenderFunction = ( { className = "", - defaultClass = "ui-rounded ui-my-2 ui-p-4 sm:ui-p-6", + wrapperClassName = "ui-my-2", children, variant = "default", + rounded = "ui-rounded", + showBorder = false, ...props }, ref @@ -33,7 +37,7 @@ const CardRender: React.ForwardRefRenderFunction = ( return (
= ( })} {...props} > - {children} +
+ {children} +
); }; diff --git a/src/components/Dialog/Dialog.tsx b/src/components/Dialog/Dialog.tsx index a650110..9167296 100644 --- a/src/components/Dialog/Dialog.tsx +++ b/src/components/Dialog/Dialog.tsx @@ -50,11 +50,12 @@ export const Dialog: React.FC = ({ > {!hideCloseIcon && ( Date: Wed, 25 May 2022 15:06:03 +0200 Subject: [PATCH 4/6] worked on CR --- .prettierrc | 2 +- .../Accordion/Accordion.stories.tsx | 10 +- src/components/Accordion/Accordion.tsx | 18 +- src/components/Badge/Badge.stories.tsx | 10 +- src/components/Badge/Badge.tsx | 40 ++-- src/components/Button/Button.stories.tsx | 12 +- src/components/Button/Button.tsx | 44 ++-- .../ButtonCard/ButtonCard.stories.tsx | 10 +- src/components/ButtonCard/ButtonCard.tsx | 32 +-- src/components/Card/Card.stories.tsx | 6 +- src/components/Card/Card.tsx | 54 ++--- src/components/Checkbox/Checkbox.stories.tsx | 8 +- src/components/Checkbox/Checkbox.tsx | 8 +- src/components/Dialog/Dialog.stories.tsx | 8 +- src/components/Dialog/Dialog.tsx | 20 +- .../ExternalLink/ExternalLink.stories.tsx | 10 +- src/components/ExternalLink/ExternalLink.tsx | 6 +- .../FieldAttributes/FieldAttributes.tsx | 10 +- .../IconButton/IconButton.stories.tsx | 8 +- src/components/IconButton/IconButton.tsx | 20 +- .../Icons/ArrowDropdownDownIcon.tsx | 2 +- src/components/Icons/ArrowLinkOffIcon.tsx | 2 +- src/components/Icons/CloseIcon.tsx | 4 +- src/components/Icons/TxState.tsx | 222 ++++++++++++++++++ src/components/Radio/Radio.stories.tsx | 10 +- src/components/Radio/Radio.tsx | 14 +- src/components/Select/Select.stories.tsx | 20 +- src/components/Select/Select.tsx | 46 ++-- src/components/Selector/Selector.stories.tsx | 8 +- src/components/Selector/Selector.tsx | 6 +- src/components/Spinner/Spinner.stories.tsx | 8 +- src/components/Spinner/Spinner.tsx | 16 +- src/components/Tab/Tab.tsx | 14 +- src/components/Tabs/Tabs.stories.tsx | 24 +- src/components/Tabs/Tabs.tsx | 8 +- .../TextField/TextField.stories.tsx | 12 +- src/components/TextField/TextField.tsx | 30 +-- src/components/index.ts | 48 ++-- src/context/useTransactionDialogContext.tsx | 162 ++++++------- .../useTransactoinDialogContext.stories.tsx | 35 ++- src/hooks/useOnClickOutside.ts | 10 +- 41 files changed, 631 insertions(+), 406 deletions(-) create mode 100644 src/components/Icons/TxState.tsx diff --git a/.prettierrc b/.prettierrc index 759dc64..358eee0 100644 --- a/.prettierrc +++ b/.prettierrc @@ -5,7 +5,7 @@ "endOfLine": "auto", "quoteProps": "as-needed", "printWidth": 100, - "singleQuote": false, + "singleQuote": true, "arrowParens": "always", "trailingComma": "none", "bracketSpacing": true, diff --git a/src/components/Accordion/Accordion.stories.tsx b/src/components/Accordion/Accordion.stories.tsx index bb0e05f..749d458 100644 --- a/src/components/Accordion/Accordion.stories.tsx +++ b/src/components/Accordion/Accordion.stories.tsx @@ -1,9 +1,9 @@ -import { ComponentMeta, ComponentStory } from "@storybook/react"; +import { ComponentMeta, ComponentStory } from '@storybook/react'; -import { Accordion } from "./Accordion"; +import { Accordion } from './Accordion'; export default { - title: "Accordion", + title: 'Accordion', component: Accordion, decorators: [(Story) => ] } as ComponentMeta; @@ -13,8 +13,8 @@ const Template: ComponentStory = (args) => = ({ return (
= ({ {!flat && ( diff --git a/src/components/Badge/Badge.stories.tsx b/src/components/Badge/Badge.stories.tsx index a1a0a7d..1d37c99 100644 --- a/src/components/Badge/Badge.stories.tsx +++ b/src/components/Badge/Badge.stories.tsx @@ -1,9 +1,9 @@ -import { ComponentMeta, ComponentStory } from "@storybook/react"; +import { ComponentMeta, ComponentStory } from '@storybook/react'; -import { Badge } from "./Badge"; +import { Badge } from './Badge'; export default { - title: "Badge", + title: 'Badge', component: Badge, decorators: [(Story) => ] } as ComponentMeta; @@ -13,6 +13,6 @@ const Template: ComponentStory = (args) => ; export const Primary = Template.bind({}); Primary.args = { - variant: "default", - children: "Badge" + variant: 'default', + children: 'Badge' }; diff --git a/src/components/Badge/Badge.tsx b/src/components/Badge/Badge.tsx index 3e98440..5634c00 100644 --- a/src/components/Badge/Badge.tsx +++ b/src/components/Badge/Badge.tsx @@ -1,15 +1,15 @@ -import clsx from "clsx"; -import { HTMLAttributes, ReactNode } from "react"; +import clsx from 'clsx'; +import { HTMLAttributes, ReactNode } from 'react'; export type BadgeVariant = - | "default" - | "success" - | "danger" - | "gray" - | "yellow" - | "indigo" - | "purple" - | "pink"; + | 'default' + | 'success' + | 'danger' + | 'gray' + | 'yellow' + | 'indigo' + | 'purple' + | 'pink'; export interface BadgeProps extends HTMLAttributes { variant?: BadgeVariant; @@ -19,20 +19,20 @@ export interface BadgeProps extends HTMLAttributes { } const badgeColors = { - default: "bg-blue-100 text-blue-800 text-xs dark:bg-blue-200 dark:text-blue-800", - danger: "bg-red-100 text-red-800 text-xs dark:bg-red-200 dark:text-red-900", - success: "bg-green-100 text-green-800 text-xs dark:bg-green-200 dark:text-green-900", - gray: "bg-gray-100 text-gray-800 text-xs dark:bg-gray-700 dark:text-gray-300", - yellow: "bg-yellow-100 text-yellow-800 text-xs dark:bg-yellow-200 dark:text-yellow-900", - indigo: "bg-indigo-100 text-indigo-800 text-xs dark:bg-indigo-200 dark:text-indigo-900", - purple: "bg-purple-100 text-purple-800 text-xs dark:bg-purple-200 dark:text-purple-900", - pink: "bg-pink-100 text-pink-800 text-xs dark:bg-pink-200 dark:text-pink-900" + default: 'bg-blue-100 text-blue-800 text-xs dark:bg-blue-200 dark:text-blue-800', + danger: 'bg-red-100 text-red-800 text-xs dark:bg-red-200 dark:text-red-900', + success: 'bg-green-100 text-green-800 text-xs dark:bg-green-200 dark:text-green-900', + gray: 'bg-gray-100 text-gray-800 text-xs dark:bg-gray-700 dark:text-gray-300', + yellow: 'bg-yellow-100 text-yellow-800 text-xs dark:bg-yellow-200 dark:text-yellow-900', + indigo: 'bg-indigo-100 text-indigo-800 text-xs dark:bg-indigo-200 dark:text-indigo-900', + purple: 'bg-purple-100 text-purple-800 text-xs dark:bg-purple-200 dark:text-purple-900', + pink: 'bg-pink-100 text-pink-800 text-xs dark:bg-pink-200 dark:text-pink-900' }; export const Badge: React.FC = ({ className, - defaultClass = "text-xs font-semibold px-2.5 py-0.5 rounded", - variant = "default", + defaultClass = 'text-xs font-semibold px-2.5 py-0.5 rounded', + variant = 'default', children, ...props }) => { diff --git a/src/components/Button/Button.stories.tsx b/src/components/Button/Button.stories.tsx index 0f9b479..cb85d60 100644 --- a/src/components/Button/Button.stories.tsx +++ b/src/components/Button/Button.stories.tsx @@ -1,9 +1,9 @@ -import { ComponentMeta, ComponentStory } from "@storybook/react"; +import { ComponentMeta, ComponentStory } from '@storybook/react'; -import { Button } from "./Button"; +import { Button } from './Button'; export default { - title: "Button", + title: 'Button', component: Button, decorators: [(Story) => ] } as ComponentMeta; @@ -15,7 +15,7 @@ export const Primary = Template.bind({}); Primary.args = { loading: false, disabled: false, - variant: "default", - children: "Button", - size: "lg" + variant: 'default', + children: 'Button', + size: 'lg' }; diff --git a/src/components/Button/Button.tsx b/src/components/Button/Button.tsx index 37c2571..30a3452 100644 --- a/src/components/Button/Button.tsx +++ b/src/components/Button/Button.tsx @@ -1,10 +1,10 @@ -import clsx from "clsx"; -import { Spinner } from "components/Spinner/Spinner"; -import { ButtonHTMLAttributes } from "react"; +import clsx from 'clsx'; +import { Spinner } from 'components/Spinner/Spinner'; +import { ButtonHTMLAttributes } from 'react'; -export type ButtonSize = "sm" | "md" | "lg"; +export type ButtonSize = 'sm' | 'md' | 'lg'; -export type ButtonVariant = "default" | "outline" | "secondary" | "purple" | "custom"; +export type ButtonVariant = 'default' | 'outline' | 'secondary' | 'purple' | 'custom'; export interface ButtonProps extends ButtonHTMLAttributes { size?: ButtonSize; @@ -15,9 +15,9 @@ export interface ButtonProps extends ButtonHTMLAttributes { } export const Button: React.FC = ({ - size = "md", + size = 'md', loading = false, - variant = "default", + variant = 'default', mobileSize = size, children, className, @@ -32,20 +32,20 @@ export const Button: React.FC = ({ disabled:ui-bg-opacity-65 ui-transition ui-ease-out ui-group disabled:ui-cursor-not-allowed`, { - "ui-text-disabled ui-border ui-border-disabled ui-bg-disabled-2": disabled, - "hover:ui-brightness-110": !disabled, - "ui-text-black ui-gradient-primary ui-border ui-border-gray-900": - variant === "default" && !disabled, - "ui-text-white ui-bg-navy": variant === "secondary" && !disabled, - "ui-text-white ui-bg-purple": variant === "purple" && !disabled, - "ui-gradient-primary ui-bg-clip-text ui-text-fill-transparent ui-button-outline": - variant === "outline" && !disabled, - "lg:ui-h-12 lg:ui-min-w-button-lg lg:ui-text-sm": size === "lg", - "lg:ui-h-10 lg:ui-min-w-button-md lg:ui-text-sm": size === "md", - "lg:ui-h-7 lg:ui-min-w-button-sm lg:ui-text-xs": size === "sm", - "ui-h-12 ui-min-w-button-lg ui-text-sm": mobileSize === "lg", - "ui-h-10 ui-min-w-button-md ui-text-sm": mobileSize === "md", - "ui-h-7 ui-min-w-button-sm ui-text-xs": mobileSize === "sm" + 'ui-text-disabled ui-border ui-border-disabled ui-bg-disabled-2': disabled, + 'hover:ui-brightness-110': !disabled, + 'ui-text-black ui-gradient-primary ui-border ui-border-gray-900': + variant === 'default' && !disabled, + 'ui-text-white ui-bg-navy': variant === 'secondary' && !disabled, + 'ui-text-white ui-bg-purple': variant === 'purple' && !disabled, + 'ui-gradient-primary ui-bg-clip-text ui-text-fill-transparent ui-button-outline': + variant === 'outline' && !disabled, + 'lg:ui-h-12 lg:ui-min-w-button-lg lg:ui-text-sm': size === 'lg', + 'lg:ui-h-10 lg:ui-min-w-button-md lg:ui-text-sm': size === 'md', + 'lg:ui-h-7 lg:ui-min-w-button-sm lg:ui-text-xs': size === 'sm', + 'ui-h-12 ui-min-w-button-lg ui-text-sm': mobileSize === 'lg', + 'ui-h-10 ui-min-w-button-md ui-text-sm': mobileSize === 'md', + 'ui-h-7 ui-min-w-button-sm ui-text-xs': mobileSize === 'sm' }, className )} @@ -55,7 +55,7 @@ export const Button: React.FC = ({
{loading && ( )} diff --git a/src/components/ButtonCard/ButtonCard.stories.tsx b/src/components/ButtonCard/ButtonCard.stories.tsx index cec1335..faf3308 100644 --- a/src/components/ButtonCard/ButtonCard.stories.tsx +++ b/src/components/ButtonCard/ButtonCard.stories.tsx @@ -1,9 +1,9 @@ -import { ComponentMeta, ComponentStory } from "@storybook/react"; +import { ComponentMeta, ComponentStory } from '@storybook/react'; -import { ButtonCard } from "./ButtonCard"; +import { ButtonCard } from './ButtonCard'; export default { - title: "ButtonCard", + title: 'ButtonCard', component: ButtonCard, decorators: [(Story) => ] } as ComponentMeta; @@ -13,6 +13,6 @@ const Template: ComponentStory = (args) => { className?: string; onClick?: () => void; - direction?: "left" | "right"; + direction?: 'left' | 'right'; headline: string; subline?: string; sublineFirst?: boolean; } export const ButtonCard: React.FC = ({ - direction = "right", + direction = 'right', headline, subline, onClick, @@ -23,7 +23,7 @@ export const ButtonCard: React.FC = ({
}, { - id: "tab2", - label: "tab2", + id: 'tab2', + label: 'tab2', content:
Tab 2
}, { - id: "tab3", - label: "disabled", + id: 'tab3', + label: 'disabled', content:
Tab 3
, disabled: true } ], - initial: "tab1", - contentClassName: "ui-p-4" + initial: 'tab1', + contentClassName: 'ui-p-4' }; diff --git a/src/components/Tabs/Tabs.tsx b/src/components/Tabs/Tabs.tsx index 0fd50f6..2ccb9f2 100644 --- a/src/components/Tabs/Tabs.tsx +++ b/src/components/Tabs/Tabs.tsx @@ -1,7 +1,7 @@ -import clsx from "clsx"; -import React, { useCallback, useMemo, useState } from "react"; +import clsx from 'clsx'; +import React, { useCallback, useMemo, useState } from 'react'; -import { Tab } from "../Tab/Tab"; +import { Tab } from '../Tab/Tab'; export interface ITabItem { id: string; @@ -57,7 +57,7 @@ export const Tabs: React.FC = ({ /> ))}
-
{content}
+
{content}
); }; diff --git a/src/components/TextField/TextField.stories.tsx b/src/components/TextField/TextField.stories.tsx index 4dc66ce..4f7f2d3 100644 --- a/src/components/TextField/TextField.stories.tsx +++ b/src/components/TextField/TextField.stories.tsx @@ -1,9 +1,9 @@ -import { ComponentMeta, ComponentStory } from "@storybook/react"; +import { ComponentMeta, ComponentStory } from '@storybook/react'; -import { TextField } from "./TextField"; +import { TextField } from './TextField'; export default { - title: "TextField", + title: 'TextField', component: TextField, decorators: [(Story) => ] } as ComponentMeta; @@ -13,8 +13,8 @@ const Template: ComponentStory = (args) => = ({ error, onLabelClick, wrapperClassName, - inputSize = "md", + inputSize = 'md', ...props }) => { const hasError = !!error; const classes = clsx( - "ui-order-2 ui-border ui-border-solid ui-border-gray-300 dark:ui-border-gray-600 ui-text-gray-900 dark:ui-placeholder-gray-400 dark:ui-text-white ui-outline-none ui-rounded ui-w-full ui-text-sm ui-transition disabled:ui-bg-disabled disabled:ui-text-disabled-2", + 'ui-order-2 ui-border ui-border-solid ui-border-gray-300 dark:ui-border-gray-600 ui-text-gray-900 dark:ui-placeholder-gray-400 dark:ui-text-white ui-outline-none ui-rounded ui-w-full ui-text-sm ui-transition disabled:ui-bg-disabled disabled:ui-text-disabled-2', { - "ui-p-3": multiline, - "ui-h-14 ui-px-6": !multiline && inputSize === "md", - "ui-h-10 ui-px-3": !multiline && inputSize === "sm", - "ui-cursor-not-allowed": props.disabled, - "focus:ui-border-primary focus:dark:ui-border-primary active:dark:ui-border-primary ui-bg-gray-50 dark:ui-bg-dark-blue": + 'ui-p-3': multiline, + 'ui-h-14 ui-px-6': !multiline && inputSize === 'md', + 'ui-h-10 ui-px-3': !multiline && inputSize === 'sm', + 'ui-cursor-not-allowed': props.disabled, + 'focus:ui-border-primary focus:dark:ui-border-primary active:dark:ui-border-primary ui-bg-gray-50 dark:ui-bg-dark-blue': !props.disabled, - "ui-border-black-200 dark:ui-border-black-400": !hasError, - "ui-border-red-400 dark:ui-border-red-400 focus:ui-border-red-400 ui-text-red-400 dark:ui-text-red-400": + 'ui-border-black-200 dark:ui-border-black-400': !hasError, + 'ui-border-red-400 dark:ui-border-red-400 focus:ui-border-red-400 ui-text-red-400 dark:ui-text-red-400': hasError }, className @@ -51,8 +51,8 @@ export const TextField: React.FC = ({ return ( ; + setTxHash: Dispatch; visible: boolean; - setContent: React.Dispatch>; + setContent: Dispatch>; state: TxState; + setVisible: Dispatch>; } -const Svg = ({ txState }: Record<"txState", TxState>) => { - return ( - - - - - - - - - - - - - - - - - - - - ); -}; const TransactionDialogContext = createContext(null); @@ -86,28 +31,70 @@ const TransactionDialogContextProvider: React.FC<{ provider: providers.Web3Provider; children: React.ReactNode; }> = ({ children, provider }) => { - const txNotifier = new TransactionNotifier(provider); const [visible, setVisible] = useState(false); const [content, setContent] = useState(undefined); - const [state, setState] = useState("signing"); + const [state, setState] = useState('signing'); const [txHash, setTxHash] = useState(undefined); useEffect(() => { if (txHash) { setVisible(true); - setState("signing"); - const emitter = txNotifier.hash(txHash); - emitter.on("txConfirmed", () => setState("confirmed")); - emitter.on("txError", () => setState("error")); - emitter.on("txFailed", () => setState("failed")); - emitter.on("txSent", () => setState("mining")); + setState('signing'); + const emitter = new TransactionNotifier(provider).hash(txHash); + emitter.on('txConfirmed', () => setState('confirmed')); + emitter.on('txError', () => setState('error')); + emitter.on('txFailed', () => setState('failed')); + emitter.on('txSent', () => setState('mining')); + } + }, [txHash, provider]); + + const renderText = () => { + switch (state) { + case 'confirmed': + return ( + <> +

Transaction Confirmed

+ + You can now proceed with the dApp. + + + ); + case 'error': + case 'failed': + return ( + <> +

Transaction Failed

+ + While processing your transaction an error occurred. + + + ); + case 'signing': + return ( + <> +

Transaction Signing

+ + Follow the prompts of your wallet provider to authorize the transaction. + + + ); + default: + return ( + <> +

Transaction Pending

+ + Waiting for transaction to be included into the next block. + + + ); } - }, [txHash]); + }; return ( setVisible(false)}>
- -

Transaction Pending

- - Follow the prompts of your wallet to authorize the transaction. - -
{content}
- + + {renderText()} + {content && ( +
{content}
+ )} + {state === 'mining' && }
{children} diff --git a/src/context/useTransactoinDialogContext.stories.tsx b/src/context/useTransactoinDialogContext.stories.tsx index f638322..45e5428 100644 --- a/src/context/useTransactoinDialogContext.stories.tsx +++ b/src/context/useTransactoinDialogContext.stories.tsx @@ -1,17 +1,18 @@ -import { ComponentMeta, ComponentStory } from "@storybook/react"; -import { providers } from "ethers"; +import { ComponentMeta, ComponentStory } from '@storybook/react'; +import { Button } from 'components'; +import { providers } from 'ethers'; import TransactionDialogContextProvider, { useTransactionModalContext -} from "./useTransactionDialogContext"; +} from './useTransactionDialogContext'; export default { - title: "Transaction Dialog", + title: 'Transaction Dialog', component: TransactionDialogContextProvider, decorators: [(Story) => ] } as ComponentMeta; -const Template: ComponentStory = ({ children }) => { +const Template: ComponentStory = () => { return ( = ({ chi }; const HelperComponent = () => { - const { visible, setTxHash, state, setContent } = useTransactionModalContext(); + const { visible, setTxHash, state, setVisible } = useTransactionModalContext(); + return ( -
-
is Dialog active: {visible ? "yes" : "no"}
+
+
is Dialog active: {visible ? 'yes' : 'no'}
is Dialog active: {state?.toString()}
- + + Toggle Dialog +
); }; export const Primary = Template.bind({}); -Primary.args = { children:
rest of the app
}; +Primary.args = { children:
rest of the app
}; diff --git a/src/hooks/useOnClickOutside.ts b/src/hooks/useOnClickOutside.ts index 1fa9305..128d2ba 100644 --- a/src/hooks/useOnClickOutside.ts +++ b/src/hooks/useOnClickOutside.ts @@ -1,4 +1,4 @@ -import { RefObject, useEffect } from "react"; +import { RefObject, useEffect } from 'react'; type Event = MouseEvent | TouchEvent; @@ -14,12 +14,12 @@ export const useOnClickOutside = ( handler(event); }; - document.addEventListener("mousedown", listener); - document.addEventListener("touchstart", listener); + document.addEventListener('mousedown', listener); + document.addEventListener('touchstart', listener); return () => { - document.removeEventListener("mousedown", listener); - document.removeEventListener("touchstart", listener); + document.removeEventListener('mousedown', listener); + document.removeEventListener('touchstart', listener); }; }, [ref, handler]); }; From 75b4eebe88ad8d1302da3cf2454f63065ef662ca Mon Sep 17 00:00:00 2001 From: fritzschoff Date: Wed, 25 May 2022 16:24:27 +0200 Subject: [PATCH 5/6] feat(transaction dialog): implemented signing svg --- src/components/Icons/TxState.tsx | 59 ++++++++++++++++ src/context/useTransactionDialogContext.tsx | 67 +++++++------------ .../useTransactoinDialogContext.stories.tsx | 9 ++- 3 files changed, 91 insertions(+), 44 deletions(-) diff --git a/src/components/Icons/TxState.tsx b/src/components/Icons/TxState.tsx index c91ee8e..bab6115 100644 --- a/src/components/Icons/TxState.tsx +++ b/src/components/Icons/TxState.tsx @@ -1,6 +1,65 @@ import { TxState } from 'context/useTransactionDialogContext'; export default function TxStateSvg({ txState }: Record<'txState', TxState>) { + if (txState === 'signing') { + return ( + + + + + + + + + + + + + + + + + + ); + } if (txState === 'error' || txState === 'failed') { return ( (null); export const useTransactionModalContext = () => { return useContext(TransactionDialogContext) as TransactionDialogContextType; }; + const TransactionDialogContextProvider: React.FC<{ provider: providers.Web3Provider; children: React.ReactNode; @@ -48,45 +49,26 @@ const TransactionDialogContextProvider: React.FC<{ } }, [txHash, provider]); - const renderText = () => { - switch (state) { - case 'confirmed': - return ( - <> -

Transaction Confirmed

- - You can now proceed with the dApp. - - - ); - case 'error': - case 'failed': - return ( - <> -

Transaction Failed

- - While processing your transaction an error occurred. - - - ); - case 'signing': - return ( - <> -

Transaction Signing

- - Follow the prompts of your wallet provider to authorize the transaction. - - - ); - default: - return ( - <> -

Transaction Pending

- - Waiting for transaction to be included into the next block. - - - ); + const stateText: Record> = { + confirmed: { + tile: 'Transaction Confirmed', + subline: 'You can now proceed with the dApp.' + }, + error: { + tile: 'Transaction Failed', + subline: 'While processing your transaction an error occurred.' + }, + failed: { + tile: 'Transaction Failed', + subline: 'While processing your transaction an error occurred.' + }, + signing: { + tile: 'Transaction Signing', + subline: 'Follow the prompts of your wallet provider and sign the transaction.' + }, + mining: { + tile: 'Transaction Pending', + subline: 'Waiting for transaction to be included into the next block.' } }; @@ -103,9 +85,12 @@ const TransactionDialogContextProvider: React.FC<{ setVisible(false)}>
- {renderText()} +

{stateText[state].tile}

+ + {stateText[state].subline} + {content && ( -
{content}
+
{content}
)} {state === 'mining' && }
diff --git a/src/context/useTransactoinDialogContext.stories.tsx b/src/context/useTransactoinDialogContext.stories.tsx index 45e5428..c59abeb 100644 --- a/src/context/useTransactoinDialogContext.stories.tsx +++ b/src/context/useTransactoinDialogContext.stories.tsx @@ -1,6 +1,7 @@ import { ComponentMeta, ComponentStory } from '@storybook/react'; import { Button } from 'components'; import { providers } from 'ethers'; +import { useEffect } from 'react'; import TransactionDialogContextProvider, { useTransactionModalContext @@ -23,15 +24,17 @@ const Template: ComponentStory = () => }; const HelperComponent = () => { - const { visible, setTxHash, state, setVisible } = useTransactionModalContext(); - + const { visible, setTxHash, state, setVisible, setContent } = useTransactionModalContext(); + useEffect(() => { + setContent(
GENERIC CONTENT
); + }, [setContent]); return (
is Dialog active: {visible ? 'yes' : 'no'}
is Dialog active: {state?.toString()}