diff --git a/.depcheckrc.yml b/.depcheckrc.yml index 04887ebd118a..99dc4a817afb 100644 --- a/.depcheckrc.yml +++ b/.depcheckrc.yml @@ -11,14 +11,9 @@ ignores: - 'react-compiler-runtime' - '@fortawesome/fontawesome-free' - 'punycode' - # peer deps of @mui/material v5, consumed internally by MUI (not imported directly) + # peer deps of @mui/material v5; no direct imports in app source (MUI resolves them) - '@emotion/react' - '@emotion/styled' - # v5 pre-installed ahead of migration from @material-ui/core (v4 path); - # imports switch to @mui/material in the migration branch - - '@mui/material' - # future use for Snaps date pickers; v7 supports React 17 + MUI v5 - - '@mui/x-date-pickers' # # dev deps @@ -116,8 +111,6 @@ ignores: - '@metamask/institutional-wallet-snap' - '@metamask/gator-permissions-snap' - '@metamask/permissions-kernel-snap' - # perps poc - - '@metamask/perps-controller' # files depcheck should not parse ignorePatterns: diff --git a/.yarnrc.yml b/.yarnrc.yml index 4a07dddc19b7..e46f728b1242 100644 --- a/.yarnrc.yml +++ b/.yarnrc.yml @@ -45,7 +45,6 @@ npmAuditIgnoreAdvisories: # Material UI dependencies are planned for removal - '@material-ui/core (deprecation)' - '@material-ui/styles (deprecation)' - - '@material-ui/pickers (deprecation)' # Dependencies brought in by @truffle/decoder that are deprecated: - 'cids (deprecation)' # via @ensdomains/content-hash diff --git a/lavamoat/browserify/beta/policy.json b/lavamoat/browserify/beta/policy.json index dba6bcd9a3e3..233ac442e7e3 100644 --- a/lavamoat/browserify/beta/policy.json +++ b/lavamoat/browserify/beta/policy.json @@ -10,9 +10,77 @@ "SuppressedError": true } }, - "@date-io/luxon": { + "@emotion/react>@emotion/cache": { + "globals": { + "document": true + }, "packages": { - "luxon": true + "@emotion/react>@emotion/cache>@emotion/memoize": true, + "@emotion/react>@emotion/cache>@emotion/sheet": true, + "@emotion/react>@emotion/weak-memoize": true, + "@emotion/react>@emotion/cache>stylis": true + } + }, + "@emotion/styled>@emotion/is-prop-valid": { + "packages": { + "@emotion/react>@emotion/cache>@emotion/memoize": true + } + }, + "@emotion/react": { + "globals": { + "HTMLElement": true, + "document": true + }, + "packages": { + "@babel/runtime": true, + "@emotion/react>@emotion/cache": true, + "@emotion/react>@emotion/serialize": true, + "@emotion/react>@emotion/use-insertion-effect-with-fallbacks": true, + "@emotion/react>@emotion/utils": true, + "@emotion/react>@emotion/weak-memoize": true, + "react-redux>hoist-non-react-statics": true, + "react": true + } + }, + "@emotion/react>@emotion/serialize": { + "packages": { + "@emotion/react>@emotion/serialize>@emotion/hash": true, + "@emotion/react>@emotion/cache>@emotion/memoize": true, + "@emotion/react>@emotion/serialize>@emotion/unitless": true + } + }, + "@emotion/react>@emotion/cache>@emotion/sheet": { + "globals": { + "document.createElement": true, + "document.createTextNode": true, + "document.styleSheets": true + } + }, + "@emotion/styled": { + "globals": { + "document": true + }, + "packages": { + "@babel/runtime": true, + "@emotion/styled>@emotion/is-prop-valid": true, + "@emotion/react": true, + "@emotion/react>@emotion/serialize": true, + "@emotion/react>@emotion/use-insertion-effect-with-fallbacks": true, + "@emotion/react>@emotion/utils": true, + "react": true + } + }, + "@emotion/react>@emotion/use-insertion-effect-with-fallbacks": { + "globals": { + "document": true + }, + "packages": { + "react": true + } + }, + "@emotion/react>@emotion/utils": { + "globals": { + "document": true } }, "@ensdomains/content-hash": { @@ -701,7 +769,6 @@ "getSelection": true, "performance.now": true, "removeEventListener": true, - "requestAnimationFrame": true, "setInterval": true, "setTimeout": true }, @@ -719,24 +786,6 @@ "react-transition-group": true } }, - "@material-ui/pickers": { - "globals": { - "addEventListener": true, - "innerHeight": true, - "orientation": true, - "removeEventListener": true, - "screen": true - }, - "packages": { - "@babel/runtime": true, - "@material-ui/core": true, - "@material-ui/pickers>clsx": true, - "prop-types": true, - "react": true, - "react-transition-group": true, - "@material-ui/pickers>rifm": true - } - }, "@material-ui/core>@material-ui/styles": { "globals": { "console.error": true, @@ -2672,6 +2721,158 @@ "semver": true } }, + "@mui/material": { + "globals": { + "DocumentFragment": true, + "IntersectionObserver": true, + "MutationObserver": true, + "ResizeObserver": true, + "addEventListener": true, + "cancelAnimationFrame": true, + "clearInterval": true, + "clearTimeout": true, + "console.error": true, + "console.warn": true, + "document.body": true, + "getSelection": true, + "navigator": true, + "performance.now": true, + "removeEventListener": true, + "requestAnimationFrame": true, + "setInterval": true, + "setTimeout": true + }, + "packages": { + "@babel/runtime": true, + "@mui/material>@mui/system": true, + "@mui/material>@mui/utils": true, + "@popperjs/core": true, + "clsx": true, + "prop-types": true, + "react": true, + "react-dom": true, + "@mui/material>react-is": true, + "react-transition-group": true + } + }, + "@mui/material>@mui/system>@mui/private-theming": { + "globals": { + "console.error": true + }, + "packages": { + "@babel/runtime": true, + "@mui/material>@mui/utils": true, + "prop-types": true, + "react": true + } + }, + "@mui/material>@mui/system>@mui/styled-engine": { + "globals": { + "console.error": true, + "document": true + }, + "packages": { + "@babel/runtime": true, + "@emotion/react>@emotion/cache": true, + "@emotion/react": true, + "@emotion/react>@emotion/serialize": true, + "@emotion/styled": true, + "prop-types": true, + "react": true + } + }, + "@mui/material>@mui/system": { + "globals": { + "clearTimeout": true, + "console.error": true, + "console.warn": true, + "document": true, + "getComputedStyle": true, + "localStorage.getItem": true, + "localStorage.setItem": true, + "matchMedia": true, + "setTimeout": true + }, + "packages": { + "@babel/runtime": true, + "@mui/material>@mui/system>@mui/private-theming": true, + "@mui/material>@mui/system>@mui/styled-engine": true, + "@mui/material>@mui/utils": true, + "clsx": true, + "prop-types": true, + "react": true + } + }, + "@mui/material>@mui/utils": { + "globals": { + "clearTimeout": true, + "console.error": true, + "document": true, + "innerWidth": true, + "setTimeout": true + }, + "packages": { + "@babel/runtime": true, + "clsx": true, + "prop-types": true, + "react": true, + "@mui/material>@mui/utils>react-is": true + } + }, + "@mui/x-date-pickers>@mui/utils": { + "globals": { + "URL": true, + "clearTimeout": true, + "console.error": true, + "console.warn": true, + "document": true, + "navigator.userAgent.includes": true, + "setTimeout": true + }, + "packages": { + "@babel/runtime": true, + "clsx": true, + "prop-types": true, + "react": true, + "@mui/x-date-pickers>@mui/utils>react-is": true + } + }, + "@mui/x-date-pickers": { + "globals": { + "HTMLElement": true, + "Intl": true, + "Range": true, + "addEventListener": true, + "clearTimeout": true, + "console.error": true, + "console.warn": true, + "document": true, + "innerHeight": true, + "navigator": true, + "orientation": true, + "removeEventListener": true, + "screen": true, + "setTimeout": true + }, + "packages": { + "@babel/runtime": true, + "@mui/material": true, + "@mui/material>@mui/system": true, + "@mui/x-date-pickers>@mui/utils": true, + "@mui/x-date-pickers>@mui/x-internals": true, + "clsx": true, + "luxon": true, + "prop-types": true, + "react": true, + "react-transition-group": true + } + }, + "@mui/x-date-pickers>@mui/x-internals": { + "globals": { + "console.error": true, + "console.warn": true + } + }, "@ngraveio/bc-ur": { "packages": { "@ngraveio/bc-ur>@keystonehq/alias-sampling": true, @@ -6131,17 +6332,6 @@ "browserify>buffer": true } }, - "@material-ui/pickers>rifm": { - "globals": { - "console.error": true, - "document.addEventListener": true, - "document.removeEventListener": true - }, - "packages": { - "@babel/runtime": true, - "react": true - } - }, "ethereumjs-util>create-hash>ripemd160": { "packages": { "browserify>buffer": true, @@ -6389,6 +6579,11 @@ "react-markdown>style-to-object>inline-style-parser": true } }, + "@emotion/react>@emotion/cache>stylis": { + "globals": { + "define": true + } + }, "@metamask/snaps-controllers>tar-stream": { "packages": { "@metamask/snaps-controllers>tar-stream>b4a": true, diff --git a/lavamoat/browserify/experimental/policy.json b/lavamoat/browserify/experimental/policy.json index dba6bcd9a3e3..233ac442e7e3 100644 --- a/lavamoat/browserify/experimental/policy.json +++ b/lavamoat/browserify/experimental/policy.json @@ -10,9 +10,77 @@ "SuppressedError": true } }, - "@date-io/luxon": { + "@emotion/react>@emotion/cache": { + "globals": { + "document": true + }, "packages": { - "luxon": true + "@emotion/react>@emotion/cache>@emotion/memoize": true, + "@emotion/react>@emotion/cache>@emotion/sheet": true, + "@emotion/react>@emotion/weak-memoize": true, + "@emotion/react>@emotion/cache>stylis": true + } + }, + "@emotion/styled>@emotion/is-prop-valid": { + "packages": { + "@emotion/react>@emotion/cache>@emotion/memoize": true + } + }, + "@emotion/react": { + "globals": { + "HTMLElement": true, + "document": true + }, + "packages": { + "@babel/runtime": true, + "@emotion/react>@emotion/cache": true, + "@emotion/react>@emotion/serialize": true, + "@emotion/react>@emotion/use-insertion-effect-with-fallbacks": true, + "@emotion/react>@emotion/utils": true, + "@emotion/react>@emotion/weak-memoize": true, + "react-redux>hoist-non-react-statics": true, + "react": true + } + }, + "@emotion/react>@emotion/serialize": { + "packages": { + "@emotion/react>@emotion/serialize>@emotion/hash": true, + "@emotion/react>@emotion/cache>@emotion/memoize": true, + "@emotion/react>@emotion/serialize>@emotion/unitless": true + } + }, + "@emotion/react>@emotion/cache>@emotion/sheet": { + "globals": { + "document.createElement": true, + "document.createTextNode": true, + "document.styleSheets": true + } + }, + "@emotion/styled": { + "globals": { + "document": true + }, + "packages": { + "@babel/runtime": true, + "@emotion/styled>@emotion/is-prop-valid": true, + "@emotion/react": true, + "@emotion/react>@emotion/serialize": true, + "@emotion/react>@emotion/use-insertion-effect-with-fallbacks": true, + "@emotion/react>@emotion/utils": true, + "react": true + } + }, + "@emotion/react>@emotion/use-insertion-effect-with-fallbacks": { + "globals": { + "document": true + }, + "packages": { + "react": true + } + }, + "@emotion/react>@emotion/utils": { + "globals": { + "document": true } }, "@ensdomains/content-hash": { @@ -701,7 +769,6 @@ "getSelection": true, "performance.now": true, "removeEventListener": true, - "requestAnimationFrame": true, "setInterval": true, "setTimeout": true }, @@ -719,24 +786,6 @@ "react-transition-group": true } }, - "@material-ui/pickers": { - "globals": { - "addEventListener": true, - "innerHeight": true, - "orientation": true, - "removeEventListener": true, - "screen": true - }, - "packages": { - "@babel/runtime": true, - "@material-ui/core": true, - "@material-ui/pickers>clsx": true, - "prop-types": true, - "react": true, - "react-transition-group": true, - "@material-ui/pickers>rifm": true - } - }, "@material-ui/core>@material-ui/styles": { "globals": { "console.error": true, @@ -2672,6 +2721,158 @@ "semver": true } }, + "@mui/material": { + "globals": { + "DocumentFragment": true, + "IntersectionObserver": true, + "MutationObserver": true, + "ResizeObserver": true, + "addEventListener": true, + "cancelAnimationFrame": true, + "clearInterval": true, + "clearTimeout": true, + "console.error": true, + "console.warn": true, + "document.body": true, + "getSelection": true, + "navigator": true, + "performance.now": true, + "removeEventListener": true, + "requestAnimationFrame": true, + "setInterval": true, + "setTimeout": true + }, + "packages": { + "@babel/runtime": true, + "@mui/material>@mui/system": true, + "@mui/material>@mui/utils": true, + "@popperjs/core": true, + "clsx": true, + "prop-types": true, + "react": true, + "react-dom": true, + "@mui/material>react-is": true, + "react-transition-group": true + } + }, + "@mui/material>@mui/system>@mui/private-theming": { + "globals": { + "console.error": true + }, + "packages": { + "@babel/runtime": true, + "@mui/material>@mui/utils": true, + "prop-types": true, + "react": true + } + }, + "@mui/material>@mui/system>@mui/styled-engine": { + "globals": { + "console.error": true, + "document": true + }, + "packages": { + "@babel/runtime": true, + "@emotion/react>@emotion/cache": true, + "@emotion/react": true, + "@emotion/react>@emotion/serialize": true, + "@emotion/styled": true, + "prop-types": true, + "react": true + } + }, + "@mui/material>@mui/system": { + "globals": { + "clearTimeout": true, + "console.error": true, + "console.warn": true, + "document": true, + "getComputedStyle": true, + "localStorage.getItem": true, + "localStorage.setItem": true, + "matchMedia": true, + "setTimeout": true + }, + "packages": { + "@babel/runtime": true, + "@mui/material>@mui/system>@mui/private-theming": true, + "@mui/material>@mui/system>@mui/styled-engine": true, + "@mui/material>@mui/utils": true, + "clsx": true, + "prop-types": true, + "react": true + } + }, + "@mui/material>@mui/utils": { + "globals": { + "clearTimeout": true, + "console.error": true, + "document": true, + "innerWidth": true, + "setTimeout": true + }, + "packages": { + "@babel/runtime": true, + "clsx": true, + "prop-types": true, + "react": true, + "@mui/material>@mui/utils>react-is": true + } + }, + "@mui/x-date-pickers>@mui/utils": { + "globals": { + "URL": true, + "clearTimeout": true, + "console.error": true, + "console.warn": true, + "document": true, + "navigator.userAgent.includes": true, + "setTimeout": true + }, + "packages": { + "@babel/runtime": true, + "clsx": true, + "prop-types": true, + "react": true, + "@mui/x-date-pickers>@mui/utils>react-is": true + } + }, + "@mui/x-date-pickers": { + "globals": { + "HTMLElement": true, + "Intl": true, + "Range": true, + "addEventListener": true, + "clearTimeout": true, + "console.error": true, + "console.warn": true, + "document": true, + "innerHeight": true, + "navigator": true, + "orientation": true, + "removeEventListener": true, + "screen": true, + "setTimeout": true + }, + "packages": { + "@babel/runtime": true, + "@mui/material": true, + "@mui/material>@mui/system": true, + "@mui/x-date-pickers>@mui/utils": true, + "@mui/x-date-pickers>@mui/x-internals": true, + "clsx": true, + "luxon": true, + "prop-types": true, + "react": true, + "react-transition-group": true + } + }, + "@mui/x-date-pickers>@mui/x-internals": { + "globals": { + "console.error": true, + "console.warn": true + } + }, "@ngraveio/bc-ur": { "packages": { "@ngraveio/bc-ur>@keystonehq/alias-sampling": true, @@ -6131,17 +6332,6 @@ "browserify>buffer": true } }, - "@material-ui/pickers>rifm": { - "globals": { - "console.error": true, - "document.addEventListener": true, - "document.removeEventListener": true - }, - "packages": { - "@babel/runtime": true, - "react": true - } - }, "ethereumjs-util>create-hash>ripemd160": { "packages": { "browserify>buffer": true, @@ -6389,6 +6579,11 @@ "react-markdown>style-to-object>inline-style-parser": true } }, + "@emotion/react>@emotion/cache>stylis": { + "globals": { + "define": true + } + }, "@metamask/snaps-controllers>tar-stream": { "packages": { "@metamask/snaps-controllers>tar-stream>b4a": true, diff --git a/lavamoat/browserify/flask/policy.json b/lavamoat/browserify/flask/policy.json index dba6bcd9a3e3..233ac442e7e3 100644 --- a/lavamoat/browserify/flask/policy.json +++ b/lavamoat/browserify/flask/policy.json @@ -10,9 +10,77 @@ "SuppressedError": true } }, - "@date-io/luxon": { + "@emotion/react>@emotion/cache": { + "globals": { + "document": true + }, "packages": { - "luxon": true + "@emotion/react>@emotion/cache>@emotion/memoize": true, + "@emotion/react>@emotion/cache>@emotion/sheet": true, + "@emotion/react>@emotion/weak-memoize": true, + "@emotion/react>@emotion/cache>stylis": true + } + }, + "@emotion/styled>@emotion/is-prop-valid": { + "packages": { + "@emotion/react>@emotion/cache>@emotion/memoize": true + } + }, + "@emotion/react": { + "globals": { + "HTMLElement": true, + "document": true + }, + "packages": { + "@babel/runtime": true, + "@emotion/react>@emotion/cache": true, + "@emotion/react>@emotion/serialize": true, + "@emotion/react>@emotion/use-insertion-effect-with-fallbacks": true, + "@emotion/react>@emotion/utils": true, + "@emotion/react>@emotion/weak-memoize": true, + "react-redux>hoist-non-react-statics": true, + "react": true + } + }, + "@emotion/react>@emotion/serialize": { + "packages": { + "@emotion/react>@emotion/serialize>@emotion/hash": true, + "@emotion/react>@emotion/cache>@emotion/memoize": true, + "@emotion/react>@emotion/serialize>@emotion/unitless": true + } + }, + "@emotion/react>@emotion/cache>@emotion/sheet": { + "globals": { + "document.createElement": true, + "document.createTextNode": true, + "document.styleSheets": true + } + }, + "@emotion/styled": { + "globals": { + "document": true + }, + "packages": { + "@babel/runtime": true, + "@emotion/styled>@emotion/is-prop-valid": true, + "@emotion/react": true, + "@emotion/react>@emotion/serialize": true, + "@emotion/react>@emotion/use-insertion-effect-with-fallbacks": true, + "@emotion/react>@emotion/utils": true, + "react": true + } + }, + "@emotion/react>@emotion/use-insertion-effect-with-fallbacks": { + "globals": { + "document": true + }, + "packages": { + "react": true + } + }, + "@emotion/react>@emotion/utils": { + "globals": { + "document": true } }, "@ensdomains/content-hash": { @@ -701,7 +769,6 @@ "getSelection": true, "performance.now": true, "removeEventListener": true, - "requestAnimationFrame": true, "setInterval": true, "setTimeout": true }, @@ -719,24 +786,6 @@ "react-transition-group": true } }, - "@material-ui/pickers": { - "globals": { - "addEventListener": true, - "innerHeight": true, - "orientation": true, - "removeEventListener": true, - "screen": true - }, - "packages": { - "@babel/runtime": true, - "@material-ui/core": true, - "@material-ui/pickers>clsx": true, - "prop-types": true, - "react": true, - "react-transition-group": true, - "@material-ui/pickers>rifm": true - } - }, "@material-ui/core>@material-ui/styles": { "globals": { "console.error": true, @@ -2672,6 +2721,158 @@ "semver": true } }, + "@mui/material": { + "globals": { + "DocumentFragment": true, + "IntersectionObserver": true, + "MutationObserver": true, + "ResizeObserver": true, + "addEventListener": true, + "cancelAnimationFrame": true, + "clearInterval": true, + "clearTimeout": true, + "console.error": true, + "console.warn": true, + "document.body": true, + "getSelection": true, + "navigator": true, + "performance.now": true, + "removeEventListener": true, + "requestAnimationFrame": true, + "setInterval": true, + "setTimeout": true + }, + "packages": { + "@babel/runtime": true, + "@mui/material>@mui/system": true, + "@mui/material>@mui/utils": true, + "@popperjs/core": true, + "clsx": true, + "prop-types": true, + "react": true, + "react-dom": true, + "@mui/material>react-is": true, + "react-transition-group": true + } + }, + "@mui/material>@mui/system>@mui/private-theming": { + "globals": { + "console.error": true + }, + "packages": { + "@babel/runtime": true, + "@mui/material>@mui/utils": true, + "prop-types": true, + "react": true + } + }, + "@mui/material>@mui/system>@mui/styled-engine": { + "globals": { + "console.error": true, + "document": true + }, + "packages": { + "@babel/runtime": true, + "@emotion/react>@emotion/cache": true, + "@emotion/react": true, + "@emotion/react>@emotion/serialize": true, + "@emotion/styled": true, + "prop-types": true, + "react": true + } + }, + "@mui/material>@mui/system": { + "globals": { + "clearTimeout": true, + "console.error": true, + "console.warn": true, + "document": true, + "getComputedStyle": true, + "localStorage.getItem": true, + "localStorage.setItem": true, + "matchMedia": true, + "setTimeout": true + }, + "packages": { + "@babel/runtime": true, + "@mui/material>@mui/system>@mui/private-theming": true, + "@mui/material>@mui/system>@mui/styled-engine": true, + "@mui/material>@mui/utils": true, + "clsx": true, + "prop-types": true, + "react": true + } + }, + "@mui/material>@mui/utils": { + "globals": { + "clearTimeout": true, + "console.error": true, + "document": true, + "innerWidth": true, + "setTimeout": true + }, + "packages": { + "@babel/runtime": true, + "clsx": true, + "prop-types": true, + "react": true, + "@mui/material>@mui/utils>react-is": true + } + }, + "@mui/x-date-pickers>@mui/utils": { + "globals": { + "URL": true, + "clearTimeout": true, + "console.error": true, + "console.warn": true, + "document": true, + "navigator.userAgent.includes": true, + "setTimeout": true + }, + "packages": { + "@babel/runtime": true, + "clsx": true, + "prop-types": true, + "react": true, + "@mui/x-date-pickers>@mui/utils>react-is": true + } + }, + "@mui/x-date-pickers": { + "globals": { + "HTMLElement": true, + "Intl": true, + "Range": true, + "addEventListener": true, + "clearTimeout": true, + "console.error": true, + "console.warn": true, + "document": true, + "innerHeight": true, + "navigator": true, + "orientation": true, + "removeEventListener": true, + "screen": true, + "setTimeout": true + }, + "packages": { + "@babel/runtime": true, + "@mui/material": true, + "@mui/material>@mui/system": true, + "@mui/x-date-pickers>@mui/utils": true, + "@mui/x-date-pickers>@mui/x-internals": true, + "clsx": true, + "luxon": true, + "prop-types": true, + "react": true, + "react-transition-group": true + } + }, + "@mui/x-date-pickers>@mui/x-internals": { + "globals": { + "console.error": true, + "console.warn": true + } + }, "@ngraveio/bc-ur": { "packages": { "@ngraveio/bc-ur>@keystonehq/alias-sampling": true, @@ -6131,17 +6332,6 @@ "browserify>buffer": true } }, - "@material-ui/pickers>rifm": { - "globals": { - "console.error": true, - "document.addEventListener": true, - "document.removeEventListener": true - }, - "packages": { - "@babel/runtime": true, - "react": true - } - }, "ethereumjs-util>create-hash>ripemd160": { "packages": { "browserify>buffer": true, @@ -6389,6 +6579,11 @@ "react-markdown>style-to-object>inline-style-parser": true } }, + "@emotion/react>@emotion/cache>stylis": { + "globals": { + "define": true + } + }, "@metamask/snaps-controllers>tar-stream": { "packages": { "@metamask/snaps-controllers>tar-stream>b4a": true, diff --git a/lavamoat/browserify/main/policy.json b/lavamoat/browserify/main/policy.json index dba6bcd9a3e3..233ac442e7e3 100644 --- a/lavamoat/browserify/main/policy.json +++ b/lavamoat/browserify/main/policy.json @@ -10,9 +10,77 @@ "SuppressedError": true } }, - "@date-io/luxon": { + "@emotion/react>@emotion/cache": { + "globals": { + "document": true + }, "packages": { - "luxon": true + "@emotion/react>@emotion/cache>@emotion/memoize": true, + "@emotion/react>@emotion/cache>@emotion/sheet": true, + "@emotion/react>@emotion/weak-memoize": true, + "@emotion/react>@emotion/cache>stylis": true + } + }, + "@emotion/styled>@emotion/is-prop-valid": { + "packages": { + "@emotion/react>@emotion/cache>@emotion/memoize": true + } + }, + "@emotion/react": { + "globals": { + "HTMLElement": true, + "document": true + }, + "packages": { + "@babel/runtime": true, + "@emotion/react>@emotion/cache": true, + "@emotion/react>@emotion/serialize": true, + "@emotion/react>@emotion/use-insertion-effect-with-fallbacks": true, + "@emotion/react>@emotion/utils": true, + "@emotion/react>@emotion/weak-memoize": true, + "react-redux>hoist-non-react-statics": true, + "react": true + } + }, + "@emotion/react>@emotion/serialize": { + "packages": { + "@emotion/react>@emotion/serialize>@emotion/hash": true, + "@emotion/react>@emotion/cache>@emotion/memoize": true, + "@emotion/react>@emotion/serialize>@emotion/unitless": true + } + }, + "@emotion/react>@emotion/cache>@emotion/sheet": { + "globals": { + "document.createElement": true, + "document.createTextNode": true, + "document.styleSheets": true + } + }, + "@emotion/styled": { + "globals": { + "document": true + }, + "packages": { + "@babel/runtime": true, + "@emotion/styled>@emotion/is-prop-valid": true, + "@emotion/react": true, + "@emotion/react>@emotion/serialize": true, + "@emotion/react>@emotion/use-insertion-effect-with-fallbacks": true, + "@emotion/react>@emotion/utils": true, + "react": true + } + }, + "@emotion/react>@emotion/use-insertion-effect-with-fallbacks": { + "globals": { + "document": true + }, + "packages": { + "react": true + } + }, + "@emotion/react>@emotion/utils": { + "globals": { + "document": true } }, "@ensdomains/content-hash": { @@ -701,7 +769,6 @@ "getSelection": true, "performance.now": true, "removeEventListener": true, - "requestAnimationFrame": true, "setInterval": true, "setTimeout": true }, @@ -719,24 +786,6 @@ "react-transition-group": true } }, - "@material-ui/pickers": { - "globals": { - "addEventListener": true, - "innerHeight": true, - "orientation": true, - "removeEventListener": true, - "screen": true - }, - "packages": { - "@babel/runtime": true, - "@material-ui/core": true, - "@material-ui/pickers>clsx": true, - "prop-types": true, - "react": true, - "react-transition-group": true, - "@material-ui/pickers>rifm": true - } - }, "@material-ui/core>@material-ui/styles": { "globals": { "console.error": true, @@ -2672,6 +2721,158 @@ "semver": true } }, + "@mui/material": { + "globals": { + "DocumentFragment": true, + "IntersectionObserver": true, + "MutationObserver": true, + "ResizeObserver": true, + "addEventListener": true, + "cancelAnimationFrame": true, + "clearInterval": true, + "clearTimeout": true, + "console.error": true, + "console.warn": true, + "document.body": true, + "getSelection": true, + "navigator": true, + "performance.now": true, + "removeEventListener": true, + "requestAnimationFrame": true, + "setInterval": true, + "setTimeout": true + }, + "packages": { + "@babel/runtime": true, + "@mui/material>@mui/system": true, + "@mui/material>@mui/utils": true, + "@popperjs/core": true, + "clsx": true, + "prop-types": true, + "react": true, + "react-dom": true, + "@mui/material>react-is": true, + "react-transition-group": true + } + }, + "@mui/material>@mui/system>@mui/private-theming": { + "globals": { + "console.error": true + }, + "packages": { + "@babel/runtime": true, + "@mui/material>@mui/utils": true, + "prop-types": true, + "react": true + } + }, + "@mui/material>@mui/system>@mui/styled-engine": { + "globals": { + "console.error": true, + "document": true + }, + "packages": { + "@babel/runtime": true, + "@emotion/react>@emotion/cache": true, + "@emotion/react": true, + "@emotion/react>@emotion/serialize": true, + "@emotion/styled": true, + "prop-types": true, + "react": true + } + }, + "@mui/material>@mui/system": { + "globals": { + "clearTimeout": true, + "console.error": true, + "console.warn": true, + "document": true, + "getComputedStyle": true, + "localStorage.getItem": true, + "localStorage.setItem": true, + "matchMedia": true, + "setTimeout": true + }, + "packages": { + "@babel/runtime": true, + "@mui/material>@mui/system>@mui/private-theming": true, + "@mui/material>@mui/system>@mui/styled-engine": true, + "@mui/material>@mui/utils": true, + "clsx": true, + "prop-types": true, + "react": true + } + }, + "@mui/material>@mui/utils": { + "globals": { + "clearTimeout": true, + "console.error": true, + "document": true, + "innerWidth": true, + "setTimeout": true + }, + "packages": { + "@babel/runtime": true, + "clsx": true, + "prop-types": true, + "react": true, + "@mui/material>@mui/utils>react-is": true + } + }, + "@mui/x-date-pickers>@mui/utils": { + "globals": { + "URL": true, + "clearTimeout": true, + "console.error": true, + "console.warn": true, + "document": true, + "navigator.userAgent.includes": true, + "setTimeout": true + }, + "packages": { + "@babel/runtime": true, + "clsx": true, + "prop-types": true, + "react": true, + "@mui/x-date-pickers>@mui/utils>react-is": true + } + }, + "@mui/x-date-pickers": { + "globals": { + "HTMLElement": true, + "Intl": true, + "Range": true, + "addEventListener": true, + "clearTimeout": true, + "console.error": true, + "console.warn": true, + "document": true, + "innerHeight": true, + "navigator": true, + "orientation": true, + "removeEventListener": true, + "screen": true, + "setTimeout": true + }, + "packages": { + "@babel/runtime": true, + "@mui/material": true, + "@mui/material>@mui/system": true, + "@mui/x-date-pickers>@mui/utils": true, + "@mui/x-date-pickers>@mui/x-internals": true, + "clsx": true, + "luxon": true, + "prop-types": true, + "react": true, + "react-transition-group": true + } + }, + "@mui/x-date-pickers>@mui/x-internals": { + "globals": { + "console.error": true, + "console.warn": true + } + }, "@ngraveio/bc-ur": { "packages": { "@ngraveio/bc-ur>@keystonehq/alias-sampling": true, @@ -6131,17 +6332,6 @@ "browserify>buffer": true } }, - "@material-ui/pickers>rifm": { - "globals": { - "console.error": true, - "document.addEventListener": true, - "document.removeEventListener": true - }, - "packages": { - "@babel/runtime": true, - "react": true - } - }, "ethereumjs-util>create-hash>ripemd160": { "packages": { "browserify>buffer": true, @@ -6389,6 +6579,11 @@ "react-markdown>style-to-object>inline-style-parser": true } }, + "@emotion/react>@emotion/cache>stylis": { + "globals": { + "define": true + } + }, "@metamask/snaps-controllers>tar-stream": { "packages": { "@metamask/snaps-controllers>tar-stream>b4a": true, diff --git a/lavamoat/webpack/mv2/beta/policy.json b/lavamoat/webpack/mv2/beta/policy.json index 49c5d7b67ce9..e0d76b6252fa 100644 --- a/lavamoat/webpack/mv2/beta/policy.json +++ b/lavamoat/webpack/mv2/beta/policy.json @@ -10,9 +10,67 @@ "SuppressedError": true } }, - "@date-io/luxon": { + "@emotion/react>@emotion/cache": { + "globals": { + "document.head": true, + "document.querySelectorAll": true + }, "packages": { - "luxon": true + "@emotion/react>@emotion/cache>@emotion/memoize": true, + "@emotion/react>@emotion/cache>@emotion/sheet": true, + "@emotion/react>@emotion/weak-memoize": true, + "@emotion/react>@emotion/cache>stylis": true + } + }, + "@emotion/styled>@emotion/is-prop-valid": { + "packages": { + "@emotion/react>@emotion/cache>@emotion/memoize": true + } + }, + "@emotion/react": { + "globals": { + "HTMLElement": true, + "document.querySelector": true + }, + "packages": { + "@babel/runtime": true, + "@emotion/react>@emotion/cache": true, + "@emotion/react>@emotion/serialize": true, + "@emotion/react>@emotion/use-insertion-effect-with-fallbacks": true, + "@emotion/react>@emotion/utils": true, + "@emotion/react>@emotion/weak-memoize": true, + "react-redux>hoist-non-react-statics": true, + "react": true + } + }, + "@emotion/react>@emotion/serialize": { + "packages": { + "@emotion/react>@emotion/serialize>@emotion/hash": true, + "@emotion/react>@emotion/cache>@emotion/memoize": true, + "@emotion/react>@emotion/serialize>@emotion/unitless": true + } + }, + "@emotion/react>@emotion/cache>@emotion/sheet": { + "globals": { + "document.createElement": true, + "document.createTextNode": true, + "document.styleSheets": true + } + }, + "@emotion/styled": { + "packages": { + "@babel/runtime": true, + "@emotion/styled>@emotion/is-prop-valid": true, + "@emotion/react": true, + "@emotion/react>@emotion/serialize": true, + "@emotion/react>@emotion/use-insertion-effect-with-fallbacks": true, + "@emotion/react>@emotion/utils": true, + "react": true + } + }, + "@emotion/react>@emotion/use-insertion-effect-with-fallbacks": { + "packages": { + "react": true } }, "@ensdomains/content-hash": { @@ -645,7 +703,6 @@ "getSelection": true, "performance.now": true, "removeEventListener": true, - "requestAnimationFrame": true, "setInterval": true, "setTimeout": true }, @@ -663,24 +720,6 @@ "react-transition-group": true } }, - "@material-ui/pickers": { - "globals": { - "addEventListener": true, - "innerHeight": true, - "orientation": true, - "removeEventListener": true, - "screen": true - }, - "packages": { - "@babel/runtime": true, - "@material-ui/core": true, - "@material-ui/pickers>clsx": true, - "prop-types": true, - "react": true, - "react-transition-group": true, - "@material-ui/pickers>rifm": true - } - }, "@material-ui/core>@material-ui/styles": { "globals": { "console.error": true, @@ -2414,6 +2453,156 @@ "semver": true } }, + "@mui/material": { + "globals": { + "DocumentFragment": true, + "IntersectionObserver": true, + "MutationObserver": true, + "ResizeObserver": true, + "addEventListener": true, + "cancelAnimationFrame": true, + "clearInterval": true, + "clearTimeout": true, + "console.error": true, + "console.warn": true, + "document.body": true, + "getSelection": true, + "navigator": true, + "performance.now": true, + "removeEventListener": true, + "requestAnimationFrame": true, + "setInterval": true, + "setTimeout": true + }, + "meta": { + "webpack-optimization": [ + "Dependency '@mui/material>@mui/system' reexports from '@emotion/react' and webpack collapsed that to a direct import." + ] + }, + "packages": { + "@babel/runtime": true, + "@emotion/react": true, + "@mui/material>@mui/system": true, + "@mui/material>@mui/utils": true, + "@popperjs/core": true, + "clsx": true, + "prop-types": true, + "react": true, + "react-dom": true, + "@mui/material>react-is": true, + "react-transition-group": true + } + }, + "@mui/material>@mui/system>@mui/private-theming": { + "globals": { + "console.error": true + }, + "packages": { + "@babel/runtime": true, + "@mui/material>@mui/utils": true, + "prop-types": true, + "react": true + } + }, + "@mui/material>@mui/system>@mui/styled-engine": { + "globals": { + "console.error": true, + "document": true + }, + "packages": { + "@emotion/react>@emotion/cache": true, + "@emotion/react": true, + "@emotion/react>@emotion/serialize": true, + "@emotion/styled": true, + "prop-types": true, + "react": true + } + }, + "@mui/material>@mui/system": { + "globals": { + "console.error": true, + "console.warn": true, + "document.createElement": true, + "document.querySelector": true, + "matchMedia": true + }, + "meta": { + "webpack-optimization": [ + "Dependency '@mui/material>@mui/system>@mui/styled-engine' reexports from '@emotion/react' and webpack collapsed that to a direct import." + ] + }, + "packages": { + "@babel/runtime": true, + "@emotion/react": true, + "@mui/material>@mui/system>@mui/private-theming": true, + "@mui/material>@mui/system>@mui/styled-engine": true, + "@mui/material>@mui/utils": true, + "prop-types": true, + "react": true + } + }, + "@mui/material>@mui/utils": { + "globals": { + "clearTimeout": true, + "console.error": true, + "document": true, + "innerWidth": true, + "setTimeout": true + }, + "packages": { + "@babel/runtime": true, + "clsx": true, + "react": true, + "@mui/material>@mui/utils>react-is": true + } + }, + "@mui/x-date-pickers>@mui/utils": { + "globals": { + "URL": true, + "console.error": true, + "document": true + }, + "packages": { + "clsx": true, + "prop-types": true, + "react": true + } + }, + "@mui/x-date-pickers": { + "globals": { + "HTMLElement": true, + "Intl": true, + "Range": true, + "addEventListener": true, + "clearTimeout": true, + "console.error": true, + "console.warn": true, + "document": true, + "innerHeight": true, + "navigator": true, + "orientation": true, + "removeEventListener": true, + "screen": true, + "setTimeout": true + }, + "meta": { + "webpack-optimization": [ + "Dependency '@mui/material' reexports from '@mui/material>@mui/system' and webpack collapsed that to a direct import." + ] + }, + "packages": { + "@babel/runtime": true, + "@mui/material": true, + "@mui/material>@mui/system": true, + "@mui/x-date-pickers>@mui/utils": true, + "@mui/x-date-pickers>@mui/x-internals": true, + "clsx": true, + "luxon": true, + "prop-types": true, + "react": true, + "react-transition-group": true + } + }, "@ngraveio/bc-ur": { "globals": { "Buffer.alloc": true, @@ -5987,17 +6176,6 @@ "buffer": true } }, - "@material-ui/pickers>rifm": { - "globals": { - "console.error": true, - "document.addEventListener": true, - "document.removeEventListener": true - }, - "packages": { - "@babel/runtime": true, - "react": true - } - }, "ethereumjs-util>create-hash>ripemd160": { "packages": { "buffer": true, diff --git a/lavamoat/webpack/mv2/experimental/policy.json b/lavamoat/webpack/mv2/experimental/policy.json index 49c5d7b67ce9..e0d76b6252fa 100644 --- a/lavamoat/webpack/mv2/experimental/policy.json +++ b/lavamoat/webpack/mv2/experimental/policy.json @@ -10,9 +10,67 @@ "SuppressedError": true } }, - "@date-io/luxon": { + "@emotion/react>@emotion/cache": { + "globals": { + "document.head": true, + "document.querySelectorAll": true + }, "packages": { - "luxon": true + "@emotion/react>@emotion/cache>@emotion/memoize": true, + "@emotion/react>@emotion/cache>@emotion/sheet": true, + "@emotion/react>@emotion/weak-memoize": true, + "@emotion/react>@emotion/cache>stylis": true + } + }, + "@emotion/styled>@emotion/is-prop-valid": { + "packages": { + "@emotion/react>@emotion/cache>@emotion/memoize": true + } + }, + "@emotion/react": { + "globals": { + "HTMLElement": true, + "document.querySelector": true + }, + "packages": { + "@babel/runtime": true, + "@emotion/react>@emotion/cache": true, + "@emotion/react>@emotion/serialize": true, + "@emotion/react>@emotion/use-insertion-effect-with-fallbacks": true, + "@emotion/react>@emotion/utils": true, + "@emotion/react>@emotion/weak-memoize": true, + "react-redux>hoist-non-react-statics": true, + "react": true + } + }, + "@emotion/react>@emotion/serialize": { + "packages": { + "@emotion/react>@emotion/serialize>@emotion/hash": true, + "@emotion/react>@emotion/cache>@emotion/memoize": true, + "@emotion/react>@emotion/serialize>@emotion/unitless": true + } + }, + "@emotion/react>@emotion/cache>@emotion/sheet": { + "globals": { + "document.createElement": true, + "document.createTextNode": true, + "document.styleSheets": true + } + }, + "@emotion/styled": { + "packages": { + "@babel/runtime": true, + "@emotion/styled>@emotion/is-prop-valid": true, + "@emotion/react": true, + "@emotion/react>@emotion/serialize": true, + "@emotion/react>@emotion/use-insertion-effect-with-fallbacks": true, + "@emotion/react>@emotion/utils": true, + "react": true + } + }, + "@emotion/react>@emotion/use-insertion-effect-with-fallbacks": { + "packages": { + "react": true } }, "@ensdomains/content-hash": { @@ -645,7 +703,6 @@ "getSelection": true, "performance.now": true, "removeEventListener": true, - "requestAnimationFrame": true, "setInterval": true, "setTimeout": true }, @@ -663,24 +720,6 @@ "react-transition-group": true } }, - "@material-ui/pickers": { - "globals": { - "addEventListener": true, - "innerHeight": true, - "orientation": true, - "removeEventListener": true, - "screen": true - }, - "packages": { - "@babel/runtime": true, - "@material-ui/core": true, - "@material-ui/pickers>clsx": true, - "prop-types": true, - "react": true, - "react-transition-group": true, - "@material-ui/pickers>rifm": true - } - }, "@material-ui/core>@material-ui/styles": { "globals": { "console.error": true, @@ -2414,6 +2453,156 @@ "semver": true } }, + "@mui/material": { + "globals": { + "DocumentFragment": true, + "IntersectionObserver": true, + "MutationObserver": true, + "ResizeObserver": true, + "addEventListener": true, + "cancelAnimationFrame": true, + "clearInterval": true, + "clearTimeout": true, + "console.error": true, + "console.warn": true, + "document.body": true, + "getSelection": true, + "navigator": true, + "performance.now": true, + "removeEventListener": true, + "requestAnimationFrame": true, + "setInterval": true, + "setTimeout": true + }, + "meta": { + "webpack-optimization": [ + "Dependency '@mui/material>@mui/system' reexports from '@emotion/react' and webpack collapsed that to a direct import." + ] + }, + "packages": { + "@babel/runtime": true, + "@emotion/react": true, + "@mui/material>@mui/system": true, + "@mui/material>@mui/utils": true, + "@popperjs/core": true, + "clsx": true, + "prop-types": true, + "react": true, + "react-dom": true, + "@mui/material>react-is": true, + "react-transition-group": true + } + }, + "@mui/material>@mui/system>@mui/private-theming": { + "globals": { + "console.error": true + }, + "packages": { + "@babel/runtime": true, + "@mui/material>@mui/utils": true, + "prop-types": true, + "react": true + } + }, + "@mui/material>@mui/system>@mui/styled-engine": { + "globals": { + "console.error": true, + "document": true + }, + "packages": { + "@emotion/react>@emotion/cache": true, + "@emotion/react": true, + "@emotion/react>@emotion/serialize": true, + "@emotion/styled": true, + "prop-types": true, + "react": true + } + }, + "@mui/material>@mui/system": { + "globals": { + "console.error": true, + "console.warn": true, + "document.createElement": true, + "document.querySelector": true, + "matchMedia": true + }, + "meta": { + "webpack-optimization": [ + "Dependency '@mui/material>@mui/system>@mui/styled-engine' reexports from '@emotion/react' and webpack collapsed that to a direct import." + ] + }, + "packages": { + "@babel/runtime": true, + "@emotion/react": true, + "@mui/material>@mui/system>@mui/private-theming": true, + "@mui/material>@mui/system>@mui/styled-engine": true, + "@mui/material>@mui/utils": true, + "prop-types": true, + "react": true + } + }, + "@mui/material>@mui/utils": { + "globals": { + "clearTimeout": true, + "console.error": true, + "document": true, + "innerWidth": true, + "setTimeout": true + }, + "packages": { + "@babel/runtime": true, + "clsx": true, + "react": true, + "@mui/material>@mui/utils>react-is": true + } + }, + "@mui/x-date-pickers>@mui/utils": { + "globals": { + "URL": true, + "console.error": true, + "document": true + }, + "packages": { + "clsx": true, + "prop-types": true, + "react": true + } + }, + "@mui/x-date-pickers": { + "globals": { + "HTMLElement": true, + "Intl": true, + "Range": true, + "addEventListener": true, + "clearTimeout": true, + "console.error": true, + "console.warn": true, + "document": true, + "innerHeight": true, + "navigator": true, + "orientation": true, + "removeEventListener": true, + "screen": true, + "setTimeout": true + }, + "meta": { + "webpack-optimization": [ + "Dependency '@mui/material' reexports from '@mui/material>@mui/system' and webpack collapsed that to a direct import." + ] + }, + "packages": { + "@babel/runtime": true, + "@mui/material": true, + "@mui/material>@mui/system": true, + "@mui/x-date-pickers>@mui/utils": true, + "@mui/x-date-pickers>@mui/x-internals": true, + "clsx": true, + "luxon": true, + "prop-types": true, + "react": true, + "react-transition-group": true + } + }, "@ngraveio/bc-ur": { "globals": { "Buffer.alloc": true, @@ -5987,17 +6176,6 @@ "buffer": true } }, - "@material-ui/pickers>rifm": { - "globals": { - "console.error": true, - "document.addEventListener": true, - "document.removeEventListener": true - }, - "packages": { - "@babel/runtime": true, - "react": true - } - }, "ethereumjs-util>create-hash>ripemd160": { "packages": { "buffer": true, diff --git a/lavamoat/webpack/mv2/flask/policy.json b/lavamoat/webpack/mv2/flask/policy.json index 49c5d7b67ce9..e0d76b6252fa 100644 --- a/lavamoat/webpack/mv2/flask/policy.json +++ b/lavamoat/webpack/mv2/flask/policy.json @@ -10,9 +10,67 @@ "SuppressedError": true } }, - "@date-io/luxon": { + "@emotion/react>@emotion/cache": { + "globals": { + "document.head": true, + "document.querySelectorAll": true + }, "packages": { - "luxon": true + "@emotion/react>@emotion/cache>@emotion/memoize": true, + "@emotion/react>@emotion/cache>@emotion/sheet": true, + "@emotion/react>@emotion/weak-memoize": true, + "@emotion/react>@emotion/cache>stylis": true + } + }, + "@emotion/styled>@emotion/is-prop-valid": { + "packages": { + "@emotion/react>@emotion/cache>@emotion/memoize": true + } + }, + "@emotion/react": { + "globals": { + "HTMLElement": true, + "document.querySelector": true + }, + "packages": { + "@babel/runtime": true, + "@emotion/react>@emotion/cache": true, + "@emotion/react>@emotion/serialize": true, + "@emotion/react>@emotion/use-insertion-effect-with-fallbacks": true, + "@emotion/react>@emotion/utils": true, + "@emotion/react>@emotion/weak-memoize": true, + "react-redux>hoist-non-react-statics": true, + "react": true + } + }, + "@emotion/react>@emotion/serialize": { + "packages": { + "@emotion/react>@emotion/serialize>@emotion/hash": true, + "@emotion/react>@emotion/cache>@emotion/memoize": true, + "@emotion/react>@emotion/serialize>@emotion/unitless": true + } + }, + "@emotion/react>@emotion/cache>@emotion/sheet": { + "globals": { + "document.createElement": true, + "document.createTextNode": true, + "document.styleSheets": true + } + }, + "@emotion/styled": { + "packages": { + "@babel/runtime": true, + "@emotion/styled>@emotion/is-prop-valid": true, + "@emotion/react": true, + "@emotion/react>@emotion/serialize": true, + "@emotion/react>@emotion/use-insertion-effect-with-fallbacks": true, + "@emotion/react>@emotion/utils": true, + "react": true + } + }, + "@emotion/react>@emotion/use-insertion-effect-with-fallbacks": { + "packages": { + "react": true } }, "@ensdomains/content-hash": { @@ -645,7 +703,6 @@ "getSelection": true, "performance.now": true, "removeEventListener": true, - "requestAnimationFrame": true, "setInterval": true, "setTimeout": true }, @@ -663,24 +720,6 @@ "react-transition-group": true } }, - "@material-ui/pickers": { - "globals": { - "addEventListener": true, - "innerHeight": true, - "orientation": true, - "removeEventListener": true, - "screen": true - }, - "packages": { - "@babel/runtime": true, - "@material-ui/core": true, - "@material-ui/pickers>clsx": true, - "prop-types": true, - "react": true, - "react-transition-group": true, - "@material-ui/pickers>rifm": true - } - }, "@material-ui/core>@material-ui/styles": { "globals": { "console.error": true, @@ -2414,6 +2453,156 @@ "semver": true } }, + "@mui/material": { + "globals": { + "DocumentFragment": true, + "IntersectionObserver": true, + "MutationObserver": true, + "ResizeObserver": true, + "addEventListener": true, + "cancelAnimationFrame": true, + "clearInterval": true, + "clearTimeout": true, + "console.error": true, + "console.warn": true, + "document.body": true, + "getSelection": true, + "navigator": true, + "performance.now": true, + "removeEventListener": true, + "requestAnimationFrame": true, + "setInterval": true, + "setTimeout": true + }, + "meta": { + "webpack-optimization": [ + "Dependency '@mui/material>@mui/system' reexports from '@emotion/react' and webpack collapsed that to a direct import." + ] + }, + "packages": { + "@babel/runtime": true, + "@emotion/react": true, + "@mui/material>@mui/system": true, + "@mui/material>@mui/utils": true, + "@popperjs/core": true, + "clsx": true, + "prop-types": true, + "react": true, + "react-dom": true, + "@mui/material>react-is": true, + "react-transition-group": true + } + }, + "@mui/material>@mui/system>@mui/private-theming": { + "globals": { + "console.error": true + }, + "packages": { + "@babel/runtime": true, + "@mui/material>@mui/utils": true, + "prop-types": true, + "react": true + } + }, + "@mui/material>@mui/system>@mui/styled-engine": { + "globals": { + "console.error": true, + "document": true + }, + "packages": { + "@emotion/react>@emotion/cache": true, + "@emotion/react": true, + "@emotion/react>@emotion/serialize": true, + "@emotion/styled": true, + "prop-types": true, + "react": true + } + }, + "@mui/material>@mui/system": { + "globals": { + "console.error": true, + "console.warn": true, + "document.createElement": true, + "document.querySelector": true, + "matchMedia": true + }, + "meta": { + "webpack-optimization": [ + "Dependency '@mui/material>@mui/system>@mui/styled-engine' reexports from '@emotion/react' and webpack collapsed that to a direct import." + ] + }, + "packages": { + "@babel/runtime": true, + "@emotion/react": true, + "@mui/material>@mui/system>@mui/private-theming": true, + "@mui/material>@mui/system>@mui/styled-engine": true, + "@mui/material>@mui/utils": true, + "prop-types": true, + "react": true + } + }, + "@mui/material>@mui/utils": { + "globals": { + "clearTimeout": true, + "console.error": true, + "document": true, + "innerWidth": true, + "setTimeout": true + }, + "packages": { + "@babel/runtime": true, + "clsx": true, + "react": true, + "@mui/material>@mui/utils>react-is": true + } + }, + "@mui/x-date-pickers>@mui/utils": { + "globals": { + "URL": true, + "console.error": true, + "document": true + }, + "packages": { + "clsx": true, + "prop-types": true, + "react": true + } + }, + "@mui/x-date-pickers": { + "globals": { + "HTMLElement": true, + "Intl": true, + "Range": true, + "addEventListener": true, + "clearTimeout": true, + "console.error": true, + "console.warn": true, + "document": true, + "innerHeight": true, + "navigator": true, + "orientation": true, + "removeEventListener": true, + "screen": true, + "setTimeout": true + }, + "meta": { + "webpack-optimization": [ + "Dependency '@mui/material' reexports from '@mui/material>@mui/system' and webpack collapsed that to a direct import." + ] + }, + "packages": { + "@babel/runtime": true, + "@mui/material": true, + "@mui/material>@mui/system": true, + "@mui/x-date-pickers>@mui/utils": true, + "@mui/x-date-pickers>@mui/x-internals": true, + "clsx": true, + "luxon": true, + "prop-types": true, + "react": true, + "react-transition-group": true + } + }, "@ngraveio/bc-ur": { "globals": { "Buffer.alloc": true, @@ -5987,17 +6176,6 @@ "buffer": true } }, - "@material-ui/pickers>rifm": { - "globals": { - "console.error": true, - "document.addEventListener": true, - "document.removeEventListener": true - }, - "packages": { - "@babel/runtime": true, - "react": true - } - }, "ethereumjs-util>create-hash>ripemd160": { "packages": { "buffer": true, diff --git a/lavamoat/webpack/mv2/main/policy.json b/lavamoat/webpack/mv2/main/policy.json index 49c5d7b67ce9..e0d76b6252fa 100644 --- a/lavamoat/webpack/mv2/main/policy.json +++ b/lavamoat/webpack/mv2/main/policy.json @@ -10,9 +10,67 @@ "SuppressedError": true } }, - "@date-io/luxon": { + "@emotion/react>@emotion/cache": { + "globals": { + "document.head": true, + "document.querySelectorAll": true + }, "packages": { - "luxon": true + "@emotion/react>@emotion/cache>@emotion/memoize": true, + "@emotion/react>@emotion/cache>@emotion/sheet": true, + "@emotion/react>@emotion/weak-memoize": true, + "@emotion/react>@emotion/cache>stylis": true + } + }, + "@emotion/styled>@emotion/is-prop-valid": { + "packages": { + "@emotion/react>@emotion/cache>@emotion/memoize": true + } + }, + "@emotion/react": { + "globals": { + "HTMLElement": true, + "document.querySelector": true + }, + "packages": { + "@babel/runtime": true, + "@emotion/react>@emotion/cache": true, + "@emotion/react>@emotion/serialize": true, + "@emotion/react>@emotion/use-insertion-effect-with-fallbacks": true, + "@emotion/react>@emotion/utils": true, + "@emotion/react>@emotion/weak-memoize": true, + "react-redux>hoist-non-react-statics": true, + "react": true + } + }, + "@emotion/react>@emotion/serialize": { + "packages": { + "@emotion/react>@emotion/serialize>@emotion/hash": true, + "@emotion/react>@emotion/cache>@emotion/memoize": true, + "@emotion/react>@emotion/serialize>@emotion/unitless": true + } + }, + "@emotion/react>@emotion/cache>@emotion/sheet": { + "globals": { + "document.createElement": true, + "document.createTextNode": true, + "document.styleSheets": true + } + }, + "@emotion/styled": { + "packages": { + "@babel/runtime": true, + "@emotion/styled>@emotion/is-prop-valid": true, + "@emotion/react": true, + "@emotion/react>@emotion/serialize": true, + "@emotion/react>@emotion/use-insertion-effect-with-fallbacks": true, + "@emotion/react>@emotion/utils": true, + "react": true + } + }, + "@emotion/react>@emotion/use-insertion-effect-with-fallbacks": { + "packages": { + "react": true } }, "@ensdomains/content-hash": { @@ -645,7 +703,6 @@ "getSelection": true, "performance.now": true, "removeEventListener": true, - "requestAnimationFrame": true, "setInterval": true, "setTimeout": true }, @@ -663,24 +720,6 @@ "react-transition-group": true } }, - "@material-ui/pickers": { - "globals": { - "addEventListener": true, - "innerHeight": true, - "orientation": true, - "removeEventListener": true, - "screen": true - }, - "packages": { - "@babel/runtime": true, - "@material-ui/core": true, - "@material-ui/pickers>clsx": true, - "prop-types": true, - "react": true, - "react-transition-group": true, - "@material-ui/pickers>rifm": true - } - }, "@material-ui/core>@material-ui/styles": { "globals": { "console.error": true, @@ -2414,6 +2453,156 @@ "semver": true } }, + "@mui/material": { + "globals": { + "DocumentFragment": true, + "IntersectionObserver": true, + "MutationObserver": true, + "ResizeObserver": true, + "addEventListener": true, + "cancelAnimationFrame": true, + "clearInterval": true, + "clearTimeout": true, + "console.error": true, + "console.warn": true, + "document.body": true, + "getSelection": true, + "navigator": true, + "performance.now": true, + "removeEventListener": true, + "requestAnimationFrame": true, + "setInterval": true, + "setTimeout": true + }, + "meta": { + "webpack-optimization": [ + "Dependency '@mui/material>@mui/system' reexports from '@emotion/react' and webpack collapsed that to a direct import." + ] + }, + "packages": { + "@babel/runtime": true, + "@emotion/react": true, + "@mui/material>@mui/system": true, + "@mui/material>@mui/utils": true, + "@popperjs/core": true, + "clsx": true, + "prop-types": true, + "react": true, + "react-dom": true, + "@mui/material>react-is": true, + "react-transition-group": true + } + }, + "@mui/material>@mui/system>@mui/private-theming": { + "globals": { + "console.error": true + }, + "packages": { + "@babel/runtime": true, + "@mui/material>@mui/utils": true, + "prop-types": true, + "react": true + } + }, + "@mui/material>@mui/system>@mui/styled-engine": { + "globals": { + "console.error": true, + "document": true + }, + "packages": { + "@emotion/react>@emotion/cache": true, + "@emotion/react": true, + "@emotion/react>@emotion/serialize": true, + "@emotion/styled": true, + "prop-types": true, + "react": true + } + }, + "@mui/material>@mui/system": { + "globals": { + "console.error": true, + "console.warn": true, + "document.createElement": true, + "document.querySelector": true, + "matchMedia": true + }, + "meta": { + "webpack-optimization": [ + "Dependency '@mui/material>@mui/system>@mui/styled-engine' reexports from '@emotion/react' and webpack collapsed that to a direct import." + ] + }, + "packages": { + "@babel/runtime": true, + "@emotion/react": true, + "@mui/material>@mui/system>@mui/private-theming": true, + "@mui/material>@mui/system>@mui/styled-engine": true, + "@mui/material>@mui/utils": true, + "prop-types": true, + "react": true + } + }, + "@mui/material>@mui/utils": { + "globals": { + "clearTimeout": true, + "console.error": true, + "document": true, + "innerWidth": true, + "setTimeout": true + }, + "packages": { + "@babel/runtime": true, + "clsx": true, + "react": true, + "@mui/material>@mui/utils>react-is": true + } + }, + "@mui/x-date-pickers>@mui/utils": { + "globals": { + "URL": true, + "console.error": true, + "document": true + }, + "packages": { + "clsx": true, + "prop-types": true, + "react": true + } + }, + "@mui/x-date-pickers": { + "globals": { + "HTMLElement": true, + "Intl": true, + "Range": true, + "addEventListener": true, + "clearTimeout": true, + "console.error": true, + "console.warn": true, + "document": true, + "innerHeight": true, + "navigator": true, + "orientation": true, + "removeEventListener": true, + "screen": true, + "setTimeout": true + }, + "meta": { + "webpack-optimization": [ + "Dependency '@mui/material' reexports from '@mui/material>@mui/system' and webpack collapsed that to a direct import." + ] + }, + "packages": { + "@babel/runtime": true, + "@mui/material": true, + "@mui/material>@mui/system": true, + "@mui/x-date-pickers>@mui/utils": true, + "@mui/x-date-pickers>@mui/x-internals": true, + "clsx": true, + "luxon": true, + "prop-types": true, + "react": true, + "react-transition-group": true + } + }, "@ngraveio/bc-ur": { "globals": { "Buffer.alloc": true, @@ -5987,17 +6176,6 @@ "buffer": true } }, - "@material-ui/pickers>rifm": { - "globals": { - "console.error": true, - "document.addEventListener": true, - "document.removeEventListener": true - }, - "packages": { - "@babel/runtime": true, - "react": true - } - }, "ethereumjs-util>create-hash>ripemd160": { "packages": { "buffer": true, diff --git a/lavamoat/webpack/mv3/beta/policy.json b/lavamoat/webpack/mv3/beta/policy.json index d837b146be57..2f66d48ceec3 100644 --- a/lavamoat/webpack/mv3/beta/policy.json +++ b/lavamoat/webpack/mv3/beta/policy.json @@ -10,9 +10,67 @@ "SuppressedError": true } }, - "@date-io/luxon": { + "@emotion/react>@emotion/cache": { + "globals": { + "document.head": true, + "document.querySelectorAll": true + }, "packages": { - "luxon": true + "@emotion/react>@emotion/cache>@emotion/memoize": true, + "@emotion/react>@emotion/cache>@emotion/sheet": true, + "@emotion/react>@emotion/weak-memoize": true, + "@emotion/react>@emotion/cache>stylis": true + } + }, + "@emotion/styled>@emotion/is-prop-valid": { + "packages": { + "@emotion/react>@emotion/cache>@emotion/memoize": true + } + }, + "@emotion/react": { + "globals": { + "HTMLElement": true, + "document.querySelector": true + }, + "packages": { + "@babel/runtime": true, + "@emotion/react>@emotion/cache": true, + "@emotion/react>@emotion/serialize": true, + "@emotion/react>@emotion/use-insertion-effect-with-fallbacks": true, + "@emotion/react>@emotion/utils": true, + "@emotion/react>@emotion/weak-memoize": true, + "react-redux>hoist-non-react-statics": true, + "react": true + } + }, + "@emotion/react>@emotion/serialize": { + "packages": { + "@emotion/react>@emotion/serialize>@emotion/hash": true, + "@emotion/react>@emotion/cache>@emotion/memoize": true, + "@emotion/react>@emotion/serialize>@emotion/unitless": true + } + }, + "@emotion/react>@emotion/cache>@emotion/sheet": { + "globals": { + "document.createElement": true, + "document.createTextNode": true, + "document.styleSheets": true + } + }, + "@emotion/styled": { + "packages": { + "@babel/runtime": true, + "@emotion/styled>@emotion/is-prop-valid": true, + "@emotion/react": true, + "@emotion/react>@emotion/serialize": true, + "@emotion/react>@emotion/use-insertion-effect-with-fallbacks": true, + "@emotion/react>@emotion/utils": true, + "react": true + } + }, + "@emotion/react>@emotion/use-insertion-effect-with-fallbacks": { + "packages": { + "react": true } }, "@ethereumjs/tx>@ethereumjs/common": { @@ -562,7 +620,6 @@ "getSelection": true, "performance.now": true, "removeEventListener": true, - "requestAnimationFrame": true, "setInterval": true, "setTimeout": true }, @@ -580,24 +637,6 @@ "react-transition-group": true } }, - "@material-ui/pickers": { - "globals": { - "addEventListener": true, - "innerHeight": true, - "orientation": true, - "removeEventListener": true, - "screen": true - }, - "packages": { - "@babel/runtime": true, - "@material-ui/core": true, - "@material-ui/pickers>clsx": true, - "prop-types": true, - "react": true, - "react-transition-group": true, - "@material-ui/pickers>rifm": true - } - }, "@material-ui/core>@material-ui/styles": { "globals": { "console.error": true, @@ -1420,6 +1459,156 @@ "semver": true } }, + "@mui/material": { + "globals": { + "DocumentFragment": true, + "IntersectionObserver": true, + "MutationObserver": true, + "ResizeObserver": true, + "addEventListener": true, + "cancelAnimationFrame": true, + "clearInterval": true, + "clearTimeout": true, + "console.error": true, + "console.warn": true, + "document.body": true, + "getSelection": true, + "navigator": true, + "performance.now": true, + "removeEventListener": true, + "requestAnimationFrame": true, + "setInterval": true, + "setTimeout": true + }, + "meta": { + "webpack-optimization": [ + "Dependency '@mui/material>@mui/system' reexports from '@emotion/react' and webpack collapsed that to a direct import." + ] + }, + "packages": { + "@babel/runtime": true, + "@emotion/react": true, + "@mui/material>@mui/system": true, + "@mui/material>@mui/utils": true, + "@popperjs/core": true, + "clsx": true, + "prop-types": true, + "react": true, + "react-dom": true, + "@mui/material>react-is": true, + "react-transition-group": true + } + }, + "@mui/material>@mui/system>@mui/private-theming": { + "globals": { + "console.error": true + }, + "packages": { + "@babel/runtime": true, + "@mui/material>@mui/utils": true, + "prop-types": true, + "react": true + } + }, + "@mui/material>@mui/system>@mui/styled-engine": { + "globals": { + "console.error": true, + "document": true + }, + "packages": { + "@emotion/react>@emotion/cache": true, + "@emotion/react": true, + "@emotion/react>@emotion/serialize": true, + "@emotion/styled": true, + "prop-types": true, + "react": true + } + }, + "@mui/material>@mui/system": { + "globals": { + "console.error": true, + "console.warn": true, + "document.createElement": true, + "document.querySelector": true, + "matchMedia": true + }, + "meta": { + "webpack-optimization": [ + "Dependency '@mui/material>@mui/system>@mui/styled-engine' reexports from '@emotion/react' and webpack collapsed that to a direct import." + ] + }, + "packages": { + "@babel/runtime": true, + "@emotion/react": true, + "@mui/material>@mui/system>@mui/private-theming": true, + "@mui/material>@mui/system>@mui/styled-engine": true, + "@mui/material>@mui/utils": true, + "prop-types": true, + "react": true + } + }, + "@mui/material>@mui/utils": { + "globals": { + "clearTimeout": true, + "console.error": true, + "document": true, + "innerWidth": true, + "setTimeout": true + }, + "packages": { + "@babel/runtime": true, + "clsx": true, + "react": true, + "@mui/material>@mui/utils>react-is": true + } + }, + "@mui/x-date-pickers>@mui/utils": { + "globals": { + "URL": true, + "console.error": true, + "document": true + }, + "packages": { + "clsx": true, + "prop-types": true, + "react": true + } + }, + "@mui/x-date-pickers": { + "globals": { + "HTMLElement": true, + "Intl": true, + "Range": true, + "addEventListener": true, + "clearTimeout": true, + "console.error": true, + "console.warn": true, + "document": true, + "innerHeight": true, + "navigator": true, + "orientation": true, + "removeEventListener": true, + "screen": true, + "setTimeout": true + }, + "meta": { + "webpack-optimization": [ + "Dependency '@mui/material' reexports from '@mui/material>@mui/system' and webpack collapsed that to a direct import." + ] + }, + "packages": { + "@babel/runtime": true, + "@mui/material": true, + "@mui/material>@mui/system": true, + "@mui/x-date-pickers>@mui/utils": true, + "@mui/x-date-pickers>@mui/x-internals": true, + "clsx": true, + "luxon": true, + "prop-types": true, + "react": true, + "react-transition-group": true + } + }, "@ngraveio/bc-ur": { "globals": { "Buffer.alloc": true, @@ -4400,17 +4589,6 @@ "buffer": true } }, - "@material-ui/pickers>rifm": { - "globals": { - "console.error": true, - "document.addEventListener": true, - "document.removeEventListener": true - }, - "packages": { - "@babel/runtime": true, - "react": true - } - }, "ethereumjs-util>create-hash>ripemd160": { "packages": { "buffer": true, diff --git a/lavamoat/webpack/mv3/experimental/policy.json b/lavamoat/webpack/mv3/experimental/policy.json index d837b146be57..2f66d48ceec3 100644 --- a/lavamoat/webpack/mv3/experimental/policy.json +++ b/lavamoat/webpack/mv3/experimental/policy.json @@ -10,9 +10,67 @@ "SuppressedError": true } }, - "@date-io/luxon": { + "@emotion/react>@emotion/cache": { + "globals": { + "document.head": true, + "document.querySelectorAll": true + }, "packages": { - "luxon": true + "@emotion/react>@emotion/cache>@emotion/memoize": true, + "@emotion/react>@emotion/cache>@emotion/sheet": true, + "@emotion/react>@emotion/weak-memoize": true, + "@emotion/react>@emotion/cache>stylis": true + } + }, + "@emotion/styled>@emotion/is-prop-valid": { + "packages": { + "@emotion/react>@emotion/cache>@emotion/memoize": true + } + }, + "@emotion/react": { + "globals": { + "HTMLElement": true, + "document.querySelector": true + }, + "packages": { + "@babel/runtime": true, + "@emotion/react>@emotion/cache": true, + "@emotion/react>@emotion/serialize": true, + "@emotion/react>@emotion/use-insertion-effect-with-fallbacks": true, + "@emotion/react>@emotion/utils": true, + "@emotion/react>@emotion/weak-memoize": true, + "react-redux>hoist-non-react-statics": true, + "react": true + } + }, + "@emotion/react>@emotion/serialize": { + "packages": { + "@emotion/react>@emotion/serialize>@emotion/hash": true, + "@emotion/react>@emotion/cache>@emotion/memoize": true, + "@emotion/react>@emotion/serialize>@emotion/unitless": true + } + }, + "@emotion/react>@emotion/cache>@emotion/sheet": { + "globals": { + "document.createElement": true, + "document.createTextNode": true, + "document.styleSheets": true + } + }, + "@emotion/styled": { + "packages": { + "@babel/runtime": true, + "@emotion/styled>@emotion/is-prop-valid": true, + "@emotion/react": true, + "@emotion/react>@emotion/serialize": true, + "@emotion/react>@emotion/use-insertion-effect-with-fallbacks": true, + "@emotion/react>@emotion/utils": true, + "react": true + } + }, + "@emotion/react>@emotion/use-insertion-effect-with-fallbacks": { + "packages": { + "react": true } }, "@ethereumjs/tx>@ethereumjs/common": { @@ -562,7 +620,6 @@ "getSelection": true, "performance.now": true, "removeEventListener": true, - "requestAnimationFrame": true, "setInterval": true, "setTimeout": true }, @@ -580,24 +637,6 @@ "react-transition-group": true } }, - "@material-ui/pickers": { - "globals": { - "addEventListener": true, - "innerHeight": true, - "orientation": true, - "removeEventListener": true, - "screen": true - }, - "packages": { - "@babel/runtime": true, - "@material-ui/core": true, - "@material-ui/pickers>clsx": true, - "prop-types": true, - "react": true, - "react-transition-group": true, - "@material-ui/pickers>rifm": true - } - }, "@material-ui/core>@material-ui/styles": { "globals": { "console.error": true, @@ -1420,6 +1459,156 @@ "semver": true } }, + "@mui/material": { + "globals": { + "DocumentFragment": true, + "IntersectionObserver": true, + "MutationObserver": true, + "ResizeObserver": true, + "addEventListener": true, + "cancelAnimationFrame": true, + "clearInterval": true, + "clearTimeout": true, + "console.error": true, + "console.warn": true, + "document.body": true, + "getSelection": true, + "navigator": true, + "performance.now": true, + "removeEventListener": true, + "requestAnimationFrame": true, + "setInterval": true, + "setTimeout": true + }, + "meta": { + "webpack-optimization": [ + "Dependency '@mui/material>@mui/system' reexports from '@emotion/react' and webpack collapsed that to a direct import." + ] + }, + "packages": { + "@babel/runtime": true, + "@emotion/react": true, + "@mui/material>@mui/system": true, + "@mui/material>@mui/utils": true, + "@popperjs/core": true, + "clsx": true, + "prop-types": true, + "react": true, + "react-dom": true, + "@mui/material>react-is": true, + "react-transition-group": true + } + }, + "@mui/material>@mui/system>@mui/private-theming": { + "globals": { + "console.error": true + }, + "packages": { + "@babel/runtime": true, + "@mui/material>@mui/utils": true, + "prop-types": true, + "react": true + } + }, + "@mui/material>@mui/system>@mui/styled-engine": { + "globals": { + "console.error": true, + "document": true + }, + "packages": { + "@emotion/react>@emotion/cache": true, + "@emotion/react": true, + "@emotion/react>@emotion/serialize": true, + "@emotion/styled": true, + "prop-types": true, + "react": true + } + }, + "@mui/material>@mui/system": { + "globals": { + "console.error": true, + "console.warn": true, + "document.createElement": true, + "document.querySelector": true, + "matchMedia": true + }, + "meta": { + "webpack-optimization": [ + "Dependency '@mui/material>@mui/system>@mui/styled-engine' reexports from '@emotion/react' and webpack collapsed that to a direct import." + ] + }, + "packages": { + "@babel/runtime": true, + "@emotion/react": true, + "@mui/material>@mui/system>@mui/private-theming": true, + "@mui/material>@mui/system>@mui/styled-engine": true, + "@mui/material>@mui/utils": true, + "prop-types": true, + "react": true + } + }, + "@mui/material>@mui/utils": { + "globals": { + "clearTimeout": true, + "console.error": true, + "document": true, + "innerWidth": true, + "setTimeout": true + }, + "packages": { + "@babel/runtime": true, + "clsx": true, + "react": true, + "@mui/material>@mui/utils>react-is": true + } + }, + "@mui/x-date-pickers>@mui/utils": { + "globals": { + "URL": true, + "console.error": true, + "document": true + }, + "packages": { + "clsx": true, + "prop-types": true, + "react": true + } + }, + "@mui/x-date-pickers": { + "globals": { + "HTMLElement": true, + "Intl": true, + "Range": true, + "addEventListener": true, + "clearTimeout": true, + "console.error": true, + "console.warn": true, + "document": true, + "innerHeight": true, + "navigator": true, + "orientation": true, + "removeEventListener": true, + "screen": true, + "setTimeout": true + }, + "meta": { + "webpack-optimization": [ + "Dependency '@mui/material' reexports from '@mui/material>@mui/system' and webpack collapsed that to a direct import." + ] + }, + "packages": { + "@babel/runtime": true, + "@mui/material": true, + "@mui/material>@mui/system": true, + "@mui/x-date-pickers>@mui/utils": true, + "@mui/x-date-pickers>@mui/x-internals": true, + "clsx": true, + "luxon": true, + "prop-types": true, + "react": true, + "react-transition-group": true + } + }, "@ngraveio/bc-ur": { "globals": { "Buffer.alloc": true, @@ -4400,17 +4589,6 @@ "buffer": true } }, - "@material-ui/pickers>rifm": { - "globals": { - "console.error": true, - "document.addEventListener": true, - "document.removeEventListener": true - }, - "packages": { - "@babel/runtime": true, - "react": true - } - }, "ethereumjs-util>create-hash>ripemd160": { "packages": { "buffer": true, diff --git a/lavamoat/webpack/mv3/flask/policy.json b/lavamoat/webpack/mv3/flask/policy.json index d837b146be57..2f66d48ceec3 100644 --- a/lavamoat/webpack/mv3/flask/policy.json +++ b/lavamoat/webpack/mv3/flask/policy.json @@ -10,9 +10,67 @@ "SuppressedError": true } }, - "@date-io/luxon": { + "@emotion/react>@emotion/cache": { + "globals": { + "document.head": true, + "document.querySelectorAll": true + }, "packages": { - "luxon": true + "@emotion/react>@emotion/cache>@emotion/memoize": true, + "@emotion/react>@emotion/cache>@emotion/sheet": true, + "@emotion/react>@emotion/weak-memoize": true, + "@emotion/react>@emotion/cache>stylis": true + } + }, + "@emotion/styled>@emotion/is-prop-valid": { + "packages": { + "@emotion/react>@emotion/cache>@emotion/memoize": true + } + }, + "@emotion/react": { + "globals": { + "HTMLElement": true, + "document.querySelector": true + }, + "packages": { + "@babel/runtime": true, + "@emotion/react>@emotion/cache": true, + "@emotion/react>@emotion/serialize": true, + "@emotion/react>@emotion/use-insertion-effect-with-fallbacks": true, + "@emotion/react>@emotion/utils": true, + "@emotion/react>@emotion/weak-memoize": true, + "react-redux>hoist-non-react-statics": true, + "react": true + } + }, + "@emotion/react>@emotion/serialize": { + "packages": { + "@emotion/react>@emotion/serialize>@emotion/hash": true, + "@emotion/react>@emotion/cache>@emotion/memoize": true, + "@emotion/react>@emotion/serialize>@emotion/unitless": true + } + }, + "@emotion/react>@emotion/cache>@emotion/sheet": { + "globals": { + "document.createElement": true, + "document.createTextNode": true, + "document.styleSheets": true + } + }, + "@emotion/styled": { + "packages": { + "@babel/runtime": true, + "@emotion/styled>@emotion/is-prop-valid": true, + "@emotion/react": true, + "@emotion/react>@emotion/serialize": true, + "@emotion/react>@emotion/use-insertion-effect-with-fallbacks": true, + "@emotion/react>@emotion/utils": true, + "react": true + } + }, + "@emotion/react>@emotion/use-insertion-effect-with-fallbacks": { + "packages": { + "react": true } }, "@ethereumjs/tx>@ethereumjs/common": { @@ -562,7 +620,6 @@ "getSelection": true, "performance.now": true, "removeEventListener": true, - "requestAnimationFrame": true, "setInterval": true, "setTimeout": true }, @@ -580,24 +637,6 @@ "react-transition-group": true } }, - "@material-ui/pickers": { - "globals": { - "addEventListener": true, - "innerHeight": true, - "orientation": true, - "removeEventListener": true, - "screen": true - }, - "packages": { - "@babel/runtime": true, - "@material-ui/core": true, - "@material-ui/pickers>clsx": true, - "prop-types": true, - "react": true, - "react-transition-group": true, - "@material-ui/pickers>rifm": true - } - }, "@material-ui/core>@material-ui/styles": { "globals": { "console.error": true, @@ -1420,6 +1459,156 @@ "semver": true } }, + "@mui/material": { + "globals": { + "DocumentFragment": true, + "IntersectionObserver": true, + "MutationObserver": true, + "ResizeObserver": true, + "addEventListener": true, + "cancelAnimationFrame": true, + "clearInterval": true, + "clearTimeout": true, + "console.error": true, + "console.warn": true, + "document.body": true, + "getSelection": true, + "navigator": true, + "performance.now": true, + "removeEventListener": true, + "requestAnimationFrame": true, + "setInterval": true, + "setTimeout": true + }, + "meta": { + "webpack-optimization": [ + "Dependency '@mui/material>@mui/system' reexports from '@emotion/react' and webpack collapsed that to a direct import." + ] + }, + "packages": { + "@babel/runtime": true, + "@emotion/react": true, + "@mui/material>@mui/system": true, + "@mui/material>@mui/utils": true, + "@popperjs/core": true, + "clsx": true, + "prop-types": true, + "react": true, + "react-dom": true, + "@mui/material>react-is": true, + "react-transition-group": true + } + }, + "@mui/material>@mui/system>@mui/private-theming": { + "globals": { + "console.error": true + }, + "packages": { + "@babel/runtime": true, + "@mui/material>@mui/utils": true, + "prop-types": true, + "react": true + } + }, + "@mui/material>@mui/system>@mui/styled-engine": { + "globals": { + "console.error": true, + "document": true + }, + "packages": { + "@emotion/react>@emotion/cache": true, + "@emotion/react": true, + "@emotion/react>@emotion/serialize": true, + "@emotion/styled": true, + "prop-types": true, + "react": true + } + }, + "@mui/material>@mui/system": { + "globals": { + "console.error": true, + "console.warn": true, + "document.createElement": true, + "document.querySelector": true, + "matchMedia": true + }, + "meta": { + "webpack-optimization": [ + "Dependency '@mui/material>@mui/system>@mui/styled-engine' reexports from '@emotion/react' and webpack collapsed that to a direct import." + ] + }, + "packages": { + "@babel/runtime": true, + "@emotion/react": true, + "@mui/material>@mui/system>@mui/private-theming": true, + "@mui/material>@mui/system>@mui/styled-engine": true, + "@mui/material>@mui/utils": true, + "prop-types": true, + "react": true + } + }, + "@mui/material>@mui/utils": { + "globals": { + "clearTimeout": true, + "console.error": true, + "document": true, + "innerWidth": true, + "setTimeout": true + }, + "packages": { + "@babel/runtime": true, + "clsx": true, + "react": true, + "@mui/material>@mui/utils>react-is": true + } + }, + "@mui/x-date-pickers>@mui/utils": { + "globals": { + "URL": true, + "console.error": true, + "document": true + }, + "packages": { + "clsx": true, + "prop-types": true, + "react": true + } + }, + "@mui/x-date-pickers": { + "globals": { + "HTMLElement": true, + "Intl": true, + "Range": true, + "addEventListener": true, + "clearTimeout": true, + "console.error": true, + "console.warn": true, + "document": true, + "innerHeight": true, + "navigator": true, + "orientation": true, + "removeEventListener": true, + "screen": true, + "setTimeout": true + }, + "meta": { + "webpack-optimization": [ + "Dependency '@mui/material' reexports from '@mui/material>@mui/system' and webpack collapsed that to a direct import." + ] + }, + "packages": { + "@babel/runtime": true, + "@mui/material": true, + "@mui/material>@mui/system": true, + "@mui/x-date-pickers>@mui/utils": true, + "@mui/x-date-pickers>@mui/x-internals": true, + "clsx": true, + "luxon": true, + "prop-types": true, + "react": true, + "react-transition-group": true + } + }, "@ngraveio/bc-ur": { "globals": { "Buffer.alloc": true, @@ -4400,17 +4589,6 @@ "buffer": true } }, - "@material-ui/pickers>rifm": { - "globals": { - "console.error": true, - "document.addEventListener": true, - "document.removeEventListener": true - }, - "packages": { - "@babel/runtime": true, - "react": true - } - }, "ethereumjs-util>create-hash>ripemd160": { "packages": { "buffer": true, diff --git a/lavamoat/webpack/mv3/main/policy.json b/lavamoat/webpack/mv3/main/policy.json index d837b146be57..2f66d48ceec3 100644 --- a/lavamoat/webpack/mv3/main/policy.json +++ b/lavamoat/webpack/mv3/main/policy.json @@ -10,9 +10,67 @@ "SuppressedError": true } }, - "@date-io/luxon": { + "@emotion/react>@emotion/cache": { + "globals": { + "document.head": true, + "document.querySelectorAll": true + }, "packages": { - "luxon": true + "@emotion/react>@emotion/cache>@emotion/memoize": true, + "@emotion/react>@emotion/cache>@emotion/sheet": true, + "@emotion/react>@emotion/weak-memoize": true, + "@emotion/react>@emotion/cache>stylis": true + } + }, + "@emotion/styled>@emotion/is-prop-valid": { + "packages": { + "@emotion/react>@emotion/cache>@emotion/memoize": true + } + }, + "@emotion/react": { + "globals": { + "HTMLElement": true, + "document.querySelector": true + }, + "packages": { + "@babel/runtime": true, + "@emotion/react>@emotion/cache": true, + "@emotion/react>@emotion/serialize": true, + "@emotion/react>@emotion/use-insertion-effect-with-fallbacks": true, + "@emotion/react>@emotion/utils": true, + "@emotion/react>@emotion/weak-memoize": true, + "react-redux>hoist-non-react-statics": true, + "react": true + } + }, + "@emotion/react>@emotion/serialize": { + "packages": { + "@emotion/react>@emotion/serialize>@emotion/hash": true, + "@emotion/react>@emotion/cache>@emotion/memoize": true, + "@emotion/react>@emotion/serialize>@emotion/unitless": true + } + }, + "@emotion/react>@emotion/cache>@emotion/sheet": { + "globals": { + "document.createElement": true, + "document.createTextNode": true, + "document.styleSheets": true + } + }, + "@emotion/styled": { + "packages": { + "@babel/runtime": true, + "@emotion/styled>@emotion/is-prop-valid": true, + "@emotion/react": true, + "@emotion/react>@emotion/serialize": true, + "@emotion/react>@emotion/use-insertion-effect-with-fallbacks": true, + "@emotion/react>@emotion/utils": true, + "react": true + } + }, + "@emotion/react>@emotion/use-insertion-effect-with-fallbacks": { + "packages": { + "react": true } }, "@ethereumjs/tx>@ethereumjs/common": { @@ -562,7 +620,6 @@ "getSelection": true, "performance.now": true, "removeEventListener": true, - "requestAnimationFrame": true, "setInterval": true, "setTimeout": true }, @@ -580,24 +637,6 @@ "react-transition-group": true } }, - "@material-ui/pickers": { - "globals": { - "addEventListener": true, - "innerHeight": true, - "orientation": true, - "removeEventListener": true, - "screen": true - }, - "packages": { - "@babel/runtime": true, - "@material-ui/core": true, - "@material-ui/pickers>clsx": true, - "prop-types": true, - "react": true, - "react-transition-group": true, - "@material-ui/pickers>rifm": true - } - }, "@material-ui/core>@material-ui/styles": { "globals": { "console.error": true, @@ -1420,6 +1459,156 @@ "semver": true } }, + "@mui/material": { + "globals": { + "DocumentFragment": true, + "IntersectionObserver": true, + "MutationObserver": true, + "ResizeObserver": true, + "addEventListener": true, + "cancelAnimationFrame": true, + "clearInterval": true, + "clearTimeout": true, + "console.error": true, + "console.warn": true, + "document.body": true, + "getSelection": true, + "navigator": true, + "performance.now": true, + "removeEventListener": true, + "requestAnimationFrame": true, + "setInterval": true, + "setTimeout": true + }, + "meta": { + "webpack-optimization": [ + "Dependency '@mui/material>@mui/system' reexports from '@emotion/react' and webpack collapsed that to a direct import." + ] + }, + "packages": { + "@babel/runtime": true, + "@emotion/react": true, + "@mui/material>@mui/system": true, + "@mui/material>@mui/utils": true, + "@popperjs/core": true, + "clsx": true, + "prop-types": true, + "react": true, + "react-dom": true, + "@mui/material>react-is": true, + "react-transition-group": true + } + }, + "@mui/material>@mui/system>@mui/private-theming": { + "globals": { + "console.error": true + }, + "packages": { + "@babel/runtime": true, + "@mui/material>@mui/utils": true, + "prop-types": true, + "react": true + } + }, + "@mui/material>@mui/system>@mui/styled-engine": { + "globals": { + "console.error": true, + "document": true + }, + "packages": { + "@emotion/react>@emotion/cache": true, + "@emotion/react": true, + "@emotion/react>@emotion/serialize": true, + "@emotion/styled": true, + "prop-types": true, + "react": true + } + }, + "@mui/material>@mui/system": { + "globals": { + "console.error": true, + "console.warn": true, + "document.createElement": true, + "document.querySelector": true, + "matchMedia": true + }, + "meta": { + "webpack-optimization": [ + "Dependency '@mui/material>@mui/system>@mui/styled-engine' reexports from '@emotion/react' and webpack collapsed that to a direct import." + ] + }, + "packages": { + "@babel/runtime": true, + "@emotion/react": true, + "@mui/material>@mui/system>@mui/private-theming": true, + "@mui/material>@mui/system>@mui/styled-engine": true, + "@mui/material>@mui/utils": true, + "prop-types": true, + "react": true + } + }, + "@mui/material>@mui/utils": { + "globals": { + "clearTimeout": true, + "console.error": true, + "document": true, + "innerWidth": true, + "setTimeout": true + }, + "packages": { + "@babel/runtime": true, + "clsx": true, + "react": true, + "@mui/material>@mui/utils>react-is": true + } + }, + "@mui/x-date-pickers>@mui/utils": { + "globals": { + "URL": true, + "console.error": true, + "document": true + }, + "packages": { + "clsx": true, + "prop-types": true, + "react": true + } + }, + "@mui/x-date-pickers": { + "globals": { + "HTMLElement": true, + "Intl": true, + "Range": true, + "addEventListener": true, + "clearTimeout": true, + "console.error": true, + "console.warn": true, + "document": true, + "innerHeight": true, + "navigator": true, + "orientation": true, + "removeEventListener": true, + "screen": true, + "setTimeout": true + }, + "meta": { + "webpack-optimization": [ + "Dependency '@mui/material' reexports from '@mui/material>@mui/system' and webpack collapsed that to a direct import." + ] + }, + "packages": { + "@babel/runtime": true, + "@mui/material": true, + "@mui/material>@mui/system": true, + "@mui/x-date-pickers>@mui/utils": true, + "@mui/x-date-pickers>@mui/x-internals": true, + "clsx": true, + "luxon": true, + "prop-types": true, + "react": true, + "react-transition-group": true + } + }, "@ngraveio/bc-ur": { "globals": { "Buffer.alloc": true, @@ -4400,17 +4589,6 @@ "buffer": true } }, - "@material-ui/pickers>rifm": { - "globals": { - "console.error": true, - "document.addEventListener": true, - "document.removeEventListener": true - }, - "packages": { - "@babel/runtime": true, - "react": true - } - }, "ethereumjs-util>create-hash>ripemd160": { "packages": { "buffer": true, diff --git a/package.json b/package.json index aaf030806179..adf0dc71ff0e 100644 --- a/package.json +++ b/package.json @@ -300,7 +300,6 @@ "dependencies": { "@babel/runtime": "patch:@babel/runtime@npm%3A7.29.2#~/.yarn/patches/@babel-runtime-npm-7.29.2-b49cad1c67.patch", "@blockaid/ppom_release": "^1.5.3", - "@date-io/luxon": "^1.3.13", "@emotion/react": "^11.14.0", "@emotion/styled": "^11.14.1", "@ensdomains/content-hash": "^2.5.7", @@ -322,7 +321,6 @@ "@ledgerhq/hw-transport": "^6.31.0", "@ledgerhq/hw-transport-webhid": "^6.31.0", "@material-ui/core": "^4.12.4", - "@material-ui/pickers": "^3.3.11", "@metamask/7715-permission-types": "^0.6.0", "@metamask/abi-utils": "^3.0.0", "@metamask/account-api": "^1.0.4", diff --git a/test/e2e/page-objects/pages/dialog/snap-interactive-dialog.ts b/test/e2e/page-objects/pages/dialog/snap-interactive-dialog.ts index 0b0dc1fa265f..548b5526ac06 100644 --- a/test/e2e/page-objects/pages/dialog/snap-interactive-dialog.ts +++ b/test/e2e/page-objects/pages/dialog/snap-interactive-dialog.ts @@ -14,14 +14,11 @@ const selectors = { rendererPanel: '.snap-ui-renderer__panel', exampleCheckbox: '.mm-checkbox__input', exampleDateTimePicker: '.snap-ui-renderer__date-time-picker--datetime', - exampleDatePicker: '.snap-ui-renderer__date-time-picker--date', + exampleDatePickerContainer: '.snap-ui-renderer__date-time-picker--date', exampleTimePicker: '.snap-ui-renderer__date-time-picker--time', - datePickerCalendarContainer: '.MuiPickersSlideTransition-transitionContainer', - datePickerPreviousMonthButton: '.MuiPickersCalendarHeader-iconButton', - datePickerDayButton: '.MuiPickersDay-day', - timePickerHourButton: '.MuiPickersClockNumber-clockNumber', - dateTimePickerOkButton: - '.MuiPickersModal-withAdditionalAction > button:nth-child(3)', + dateTimePickerInput: '.snap-ui-renderer__date-time-picker--datetime input', + datePickerInput: '.snap-ui-renderer__date-time-picker--date input', + timePickerInput: '.snap-ui-renderer__date-time-picker--time input', } satisfies Record>; class SnapInteractiveDialog { @@ -74,153 +71,86 @@ class SnapInteractiveDialog { } /** - * Open, select a date and time and submit the values in the date-time picker of the Snap Interactive Dialog. + * Types digits into a MUI v6 picker input. The input is readonly so + * driver.fill() cannot be used — click to focus, then sendKeys() directly. * - * @param day - The day of the month to select. - * @param hour - The hour to select. - * @param minute - The minute to select. - * @returns The ISO string representation of the selected date and time. + * @param containerSelector - Selector for the picker container (for scrolling). + * @param inputSelector - Selector for the readonly `` element. + * @param digits - Zero-padded digit string (e.g. "0415" not "415"). */ - async selectInDateTimePicker(day: number, hour: number, minute: number) { - const dateTimePicker = await this.driver.findElement( - selectors.exampleDateTimePicker, - ); - await this.driver.scrollToElement(dateTimePicker); - await this.driver.clickElement(selectors.exampleDateTimePicker); - - await this.#selectDateInPicker(day); - await this.#selectTimeInPicker(hour, minute); - await this.driver.clickElement(selectors.dateTimePickerOkButton); - - return ( - DateTime.now() - // We select the previous month in the picker to ensure consistent tests. - // Since we use `disableFuture` in the picker, if we select a day that is - // greater than today when running the test at the beginning of the month, - // the date won't be selectable. - .minus({ months: 1 }) - .set({ - day, - hour, - minute, - second: 0, - millisecond: 0, - }) - .toISO() - ); + async #typeIntoPickerInput( + containerSelector: string, + inputSelector: string, + digits: string, + ) { + const container = await this.driver.findElement(containerSelector); + await this.driver.scrollToElement(container); + await this.driver.clickElement(inputSelector); + const inputEl = await this.driver.findElement(inputSelector); + await inputEl.sendKeys(digits); } /** - * Open, select a time and submit the values in the time picker of the Snap Interactive Dialog. + * Fills the DateTimePicker with a date/time in the previous month. + * A previous-month date is used so the value stays within the + * `disableFuture` constraint. * - * @param hour - The hour to select. - * @param minute - The minute to select. - * @returns The ISO string representation of the selected time. + * @param day - Day of the month to select. + * @param hour - Hour to select (0–23). + * @param minute - Minute to select (0–59). + * @returns ISO string of the selected date-time. */ - async selectInTimePicker(hour: number, minute: number) { - const timePicker = await this.driver.findElement( - selectors.exampleTimePicker, + async selectInDateTimePicker(day: number, hour: number, minute: number) { + const prevMonthDate = DateTime.now().minus({ months: 1 }); + const digits = + String(prevMonthDate.month).padStart(2, '0') + + String(day).padStart(2, '0') + + String(prevMonthDate.year) + + String(hour).padStart(2, '0') + + String(minute).padStart(2, '0'); + + await this.#typeIntoPickerInput( + selectors.exampleDateTimePicker, + selectors.dateTimePickerInput, + digits, ); - await this.driver.scrollToElement(timePicker); - await this.driver.clickElement(selectors.exampleTimePicker); - await this.#selectTimeInPicker(hour, minute); - - await this.driver.clickElement(selectors.dateTimePickerOkButton); - - return DateTime.now() - .set({ - hour, - minute, - second: 0, - millisecond: 0, - }) + return prevMonthDate + .set({ day, hour, minute, second: 0, millisecond: 0 }) .toISO(); } - /** - * Open, select a date and submit the value in the date picker of the Snap Interactive Dialog. - * - * @param day - The day of the month to select. - * @returns The ISO string representation of the selected date. - */ - async selectInDatePicker(day: number) { - const datePicker = await this.driver.findElement( - selectors.exampleDatePicker, - ); - await this.driver.scrollToElement(datePicker); - await this.driver.clickElement(selectors.exampleDatePicker); - - await this.#selectDateInPicker(day); - - await this.driver.clickElement(selectors.dateTimePickerOkButton); - - return ( - DateTime.now() - // We select the previous month in the picker to ensure consistent tests. - // Since we use `disableFuture` in the picker, if we select a day that is - // greater than today when running the test at the beginning of the month, - // the date won't be selectable. - .minus({ months: 1 }) - .set({ - day, - hour: 0, - minute: 0, - second: 0, - millisecond: 0, - }) - .toISO() - ); - } + async selectInTimePicker(hour: number, minute: number) { + const digits = + String(hour).padStart(2, '0') + String(minute).padStart(2, '0'); - /** - * Select a date in the calendar of a `DateTimePicker` component. - * - * @param day - The day of the month to select. - */ - async #selectDateInPicker(day: number) { - await this.driver.clickElement(selectors.datePickerPreviousMonthButton); - await this.driver.waitForElementToStopMoving( - selectors.datePickerCalendarContainer, + await this.#typeIntoPickerInput( + selectors.exampleTimePicker, + selectors.timePickerInput, + digits, ); - await this.driver.clickElement({ - xpath: `//button[span[p[contains(text(), "${day}")]]]`, - }); + return DateTime.now() + .set({ hour, minute, second: 0, millisecond: 0 }) + .toISO(); } - /** - * Select a time in the clock of a `DateTimePicker` component. - * - * @param hours - The hour to select. - * @param minutes - The minute to select. - */ - async #selectTimeInPicker(hours: number, minutes: number) { - console.log(`Selecting time in picker: ${hours}:${minutes}`); - - // We need to use actions here because the hour and minute selection is made - // by dragging the clock hand, or clicking the mask behind the numbers. - await this.driver.clickPoint( - { - text: `${hours}`, - tag: 'span', - css: selectors.timePickerHourButton, - }, - 1, - 1, + async selectInDatePicker(day: number) { + const prevMonthDate = DateTime.now().minus({ months: 1 }); + const digits = + String(prevMonthDate.month).padStart(2, '0') + + String(day).padStart(2, '0') + + String(prevMonthDate.year); + + await this.#typeIntoPickerInput( + selectors.exampleDatePickerContainer, + selectors.datePickerInput, + digits, ); - // We need to use actions here because the hour and minute selection is made - // by dragging the clock hand, or clicking the mask behind the numbers. - await this.driver.clickPoint( - { - text: `${minutes}`, - tag: 'span', - css: selectors.timePickerHourButton, - }, - 1, - 1, - ); + return prevMonthDate + .set({ day, hour: 0, minute: 0, second: 0, millisecond: 0 }) + .toISO(); } async selectDropDownOption(exampleDropName: string, option: string) { diff --git a/ui/components/app/snaps/snap-ui-date-time-picker/snap-ui-date-time-picker.test.tsx b/ui/components/app/snaps/snap-ui-date-time-picker/snap-ui-date-time-picker.test.tsx new file mode 100644 index 000000000000..ad8f84c1d48e --- /dev/null +++ b/ui/components/app/snaps/snap-ui-date-time-picker/snap-ui-date-time-picker.test.tsx @@ -0,0 +1,508 @@ +import React from 'react'; +import { render, screen, act } from '@testing-library/react'; +import { DateTime } from 'luxon'; +import { DateTimePicker } from '@mui/x-date-pickers/DateTimePicker'; +import { DatePicker } from '@mui/x-date-pickers/DatePicker'; +import { TimePicker } from '@mui/x-date-pickers/TimePicker'; +import { useSnapInterfaceContext } from '../../../../contexts/snaps'; +import { SnapUIDateTimePicker } from './snap-ui-date-time-picker'; + +jest.mock('../../../../contexts/snaps', () => ({ + useSnapInterfaceContext: jest.fn(), +})); + +jest.mock('@mui/x-date-pickers/DateTimePicker', () => ({ + DateTimePicker: jest.fn(), +})); + +jest.mock('@mui/x-date-pickers/DatePicker', () => ({ + DatePicker: jest.fn(), +})); + +jest.mock('@mui/x-date-pickers/TimePicker', () => ({ + TimePicker: jest.fn(), +})); + +const mockDateTimePicker = DateTimePicker as jest.Mock; +const mockDatePicker = DatePicker as jest.Mock; +const mockTimePicker = TimePicker as jest.Mock; +const mockUseSnapInterfaceContext = useSnapInterfaceContext as jest.Mock; + +const MOCK_DATETIME = DateTime.fromISO('2024-01-15T10:30:45.123Z'); + +describe('SnapUIDateTimePicker', () => { + const mockHandleInputChange = jest.fn(); + const mockGetValue = jest.fn(); + + beforeEach(() => { + jest.clearAllMocks(); + mockGetValue.mockReturnValue(undefined); + mockUseSnapInterfaceContext.mockReturnValue({ + handleInputChange: mockHandleInputChange, + getValue: mockGetValue, + }); + + mockDateTimePicker.mockImplementation( + ({ className, disabled, disablePast, disableFuture }) => ( +
+ ), + ); + + mockDatePicker.mockImplementation( + ({ className, disabled, disablePast, disableFuture }) => ( +
+ ), + ); + + mockTimePicker.mockImplementation(({ className, disabled }) => ( +
+ )); + }); + + describe('rendering', () => { + it('renders a datetime picker for type "datetime"', () => { + const { container } = render( + , + ); + + expect(screen.getByTestId('mock-datetime-picker')).toBeInTheDocument(); + expect( + container.querySelector('.snap-ui-renderer__date-time-picker'), + ).toBeInTheDocument(); + expect(screen.queryByTestId('mock-date-picker')).not.toBeInTheDocument(); + expect(screen.queryByTestId('mock-time-picker')).not.toBeInTheDocument(); + }); + + it('renders a date picker for type "date"', () => { + render(); + + expect(screen.getByTestId('mock-date-picker')).toBeInTheDocument(); + expect( + screen.queryByTestId('mock-datetime-picker'), + ).not.toBeInTheDocument(); + expect(screen.queryByTestId('mock-time-picker')).not.toBeInTheDocument(); + }); + + it('renders a time picker for type "time"', () => { + render(); + + expect(screen.getByTestId('mock-time-picker')).toBeInTheDocument(); + expect( + screen.queryByTestId('mock-datetime-picker'), + ).not.toBeInTheDocument(); + expect(screen.queryByTestId('mock-date-picker')).not.toBeInTheDocument(); + }); + + it('renders a label when provided', () => { + render( + , + ); + + expect(screen.getByText('Pick a date')).toBeInTheDocument(); + }); + + it('does not render a label when not provided', () => { + const { container } = render( + , + ); + + expect(container.querySelector('label')).not.toBeInTheDocument(); + }); + + it('renders an error message when provided', () => { + render( + , + ); + + expect(screen.getByText('Invalid date')).toBeInTheDocument(); + }); + + it('does not render an error when not provided', () => { + render(); + + expect(screen.queryByText('Invalid date')).not.toBeInTheDocument(); + }); + + it('applies the snap-ui-renderer__field class when a label is provided', () => { + const { container } = render( + , + ); + + expect( + container.querySelector('.snap-ui-renderer__field'), + ).toBeInTheDocument(); + }); + + it('does not apply the snap-ui-renderer__field class without a label', () => { + const { container } = render( + , + ); + + expect( + container.querySelector('.snap-ui-renderer__field'), + ).not.toBeInTheDocument(); + }); + + it('passes the disabled prop to the datetime picker', () => { + render(); + + expect( + screen + .getByTestId('mock-datetime-picker') + .getAttribute('data-disabled'), + ).toBe('true'); + }); + + it('passes the disabled prop to the date picker', () => { + render(); + + expect( + screen.getByTestId('mock-date-picker').getAttribute('data-disabled'), + ).toBe('true'); + }); + + it('passes the disabled prop to the time picker', () => { + render(); + + expect( + screen.getByTestId('mock-time-picker').getAttribute('data-disabled'), + ).toBe('true'); + }); + + it('passes the disablePast prop to the datetime picker', () => { + render(); + + expect( + screen + .getByTestId('mock-datetime-picker') + .getAttribute('data-disable-past'), + ).toBe('true'); + }); + + it('passes the disableFuture prop to the date picker', () => { + render(); + + expect( + screen + .getByTestId('mock-date-picker') + .getAttribute('data-disable-future'), + ).toBe('true'); + }); + + it('passes the correct class to the datetime picker', () => { + render(); + + expect(screen.getByTestId('mock-datetime-picker').className).toContain( + 'snap-ui-renderer__date-time-picker--datetime', + ); + }); + + it('passes the correct class to the date picker', () => { + render(); + + expect(screen.getByTestId('mock-date-picker').className).toContain( + 'snap-ui-renderer__date-time-picker--date', + ); + }); + + it('passes the correct class to the time picker', () => { + render(); + + expect(screen.getByTestId('mock-time-picker').className).toContain( + 'snap-ui-renderer__date-time-picker--time', + ); + }); + + it('passes the placeholder to the datetime picker', () => { + let capturedSlotProps: Record = {}; + mockDateTimePicker.mockImplementation(({ slotProps }) => { + capturedSlotProps = slotProps ?? {}; + return
; + }); + + render( + , + ); + + expect( + (capturedSlotProps.textField as Record)?.placeholder, + ).toBe('Pick a date and time'); + }); + + it('passes the placeholder to the date picker', () => { + let capturedSlotProps: Record = {}; + mockDatePicker.mockImplementation(({ slotProps }) => { + capturedSlotProps = slotProps ?? {}; + return
; + }); + + render( + , + ); + + expect( + (capturedSlotProps.textField as Record)?.placeholder, + ).toBe('Pick a date'); + }); + + it('passes the placeholder to the time picker', () => { + let capturedSlotProps: Record = {}; + mockTimePicker.mockImplementation(({ slotProps }) => { + capturedSlotProps = slotProps ?? {}; + return
; + }); + + render( + , + ); + + expect( + (capturedSlotProps.textField as Record)?.placeholder, + ).toBe('Pick a time'); + }); + + it('passes empty string as the default placeholder to suppress the MUI format hint', () => { + let capturedSlotProps: Record = {}; + mockDateTimePicker.mockImplementation(({ slotProps }) => { + capturedSlotProps = slotProps ?? {}; + return
; + }); + + render(); + + expect( + (capturedSlotProps.textField as Record)?.placeholder, + ).toBe(''); + }); + }); + + describe('initial value', () => { + it('initializes with the ISO value from context', () => { + const iso = '2024-01-15T10:30:00.000Z'; + mockGetValue.mockReturnValue(iso); + + let receivedValue: DateTime | null | undefined; + mockDateTimePicker.mockImplementation(({ value }) => { + receivedValue = value; + return
; + }); + + render(); + + expect(mockGetValue).toHaveBeenCalledWith('test', undefined); + expect(receivedValue?.toISO()).toBe(DateTime.fromISO(iso).toISO()); + }); + + it('initializes with null when no value is in context', () => { + mockGetValue.mockReturnValue(undefined); + + let receivedValue: DateTime | null | undefined; + mockDateTimePicker.mockImplementation(({ value }) => { + receivedValue = value; + return
; + }); + + render(); + + expect(receivedValue).toBeNull(); + }); + + it('passes the form parameter to getValue', () => { + render( + , + ); + + expect(mockGetValue).toHaveBeenCalledWith('test', 'my-form'); + }); + + it('updates internal value when initialValue changes', () => { + mockGetValue.mockReturnValue('2024-01-15T00:00:00.000Z'); + + const receivedValues: (DateTime | null)[] = []; + mockDateTimePicker.mockImplementation(({ value }) => { + receivedValues.push(value); + return
; + }); + + const { rerender } = render( + , + ); + + const newIso = '2024-06-20T12:00:00.000Z'; + mockGetValue.mockReturnValue(newIso); + + act(() => { + rerender(); + }); + + const lastValue = receivedValues[receivedValues.length - 1]; + expect(lastValue?.toISO()).toBe(DateTime.fromISO(newIso).toISO()); + }); + }); + + describe('handleChange', () => { + it('calls handleInputChange with the ISO string for datetime type', () => { + let capturedOnChange: (date: DateTime | null) => void = jest.fn(); + mockDateTimePicker.mockImplementation(({ onChange }) => { + capturedOnChange = onChange; + return
; + }); + + render(); + + act(() => { + capturedOnChange(MOCK_DATETIME); + }); + + expect(mockHandleInputChange).toHaveBeenCalledWith( + 'test', + MOCK_DATETIME.toISO(), + undefined, + ); + }); + + it('normalizes date type to midnight when calling handleInputChange', () => { + let capturedOnChange: (date: DateTime | null) => void = jest.fn(); + mockDatePicker.mockImplementation(({ onChange }) => { + capturedOnChange = onChange; + return
; + }); + + render(); + + act(() => { + capturedOnChange(MOCK_DATETIME); + }); + + const expectedDate = MOCK_DATETIME.set({ + hour: 0, + minute: 0, + second: 0, + millisecond: 0, + }); + expect(mockHandleInputChange).toHaveBeenCalledWith( + 'test', + expectedDate.toISO(), + undefined, + ); + }); + + it('normalizes time type by clearing seconds and milliseconds', () => { + let capturedOnChange: (date: DateTime | null) => void = jest.fn(); + mockTimePicker.mockImplementation(({ onChange }) => { + capturedOnChange = onChange; + return
; + }); + + render(); + + act(() => { + capturedOnChange(MOCK_DATETIME); + }); + + const expectedDate = MOCK_DATETIME.set({ second: 0, millisecond: 0 }); + expect(mockHandleInputChange).toHaveBeenCalledWith( + 'test', + expectedDate.toISO(), + undefined, + ); + }); + + it('calls handleInputChange with null when the date is cleared', () => { + let capturedOnChange: (date: DateTime | null) => void = jest.fn(); + mockDateTimePicker.mockImplementation(({ onChange }) => { + capturedOnChange = onChange; + return
; + }); + + render(); + + act(() => { + capturedOnChange(null); + }); + + expect(mockHandleInputChange).toHaveBeenCalledWith( + 'test', + null, + undefined, + ); + }); + + it('includes the form parameter in handleInputChange calls', () => { + let capturedOnChange: (date: DateTime | null) => void = jest.fn(); + mockDateTimePicker.mockImplementation(({ onChange }) => { + capturedOnChange = onChange; + return
; + }); + + render( + , + ); + + act(() => { + capturedOnChange(MOCK_DATETIME); + }); + + expect(mockHandleInputChange).toHaveBeenCalledWith( + 'test', + MOCK_DATETIME.toISO(), + 'my-form', + ); + }); + + it('updates the internal value after a change', () => { + let capturedOnChange: (date: DateTime | null) => void = jest.fn(); + const receivedValues: (DateTime | null)[] = []; + mockDateTimePicker.mockImplementation(({ onChange, value }) => { + capturedOnChange = onChange; + receivedValues.push(value); + return
; + }); + + render(); + + act(() => { + capturedOnChange(MOCK_DATETIME); + }); + + const lastValue = receivedValues[receivedValues.length - 1]; + expect(lastValue?.toISO()).toBe(MOCK_DATETIME.toISO()); + }); + }); +}); diff --git a/ui/components/app/snaps/snap-ui-date-time-picker/snap-ui-date-time-picker.tsx b/ui/components/app/snaps/snap-ui-date-time-picker/snap-ui-date-time-picker.tsx index 10470998cd46..6afe93346414 100644 --- a/ui/components/app/snaps/snap-ui-date-time-picker/snap-ui-date-time-picker.tsx +++ b/ui/components/app/snaps/snap-ui-date-time-picker/snap-ui-date-time-picker.tsx @@ -1,9 +1,12 @@ import React, { FunctionComponent, useEffect } from 'react'; -import { DatePicker, DateTimePicker, TimePicker } from '@material-ui/pickers'; +import { DatePicker } from '@mui/x-date-pickers/DatePicker'; +import { DateTimePicker } from '@mui/x-date-pickers/DateTimePicker'; +import { TimePicker } from '@mui/x-date-pickers/TimePicker'; +import { renderTimeViewClock } from '@mui/x-date-pickers/timeViewRenderers'; +import type { PickersActionBarAction } from '@mui/x-date-pickers/PickersActionBar'; import { Box } from '@metamask/design-system-react'; import classnames from 'clsx'; import { DateTime } from 'luxon'; -import { makeStyles } from '@material-ui/core/styles'; import { HelpText, HelpTextSeverity, Label } from '../../../component-library'; import { useSnapInterfaceContext } from '../../../../contexts/snaps'; import { useI18nContext } from '../../../../hooks/useI18nContext'; @@ -24,13 +27,20 @@ export type SnapUIDateTimePickerProps = { }; /** - * Styles for the SnapUIDateTimePicker component. + * Buttons rendered in the picker action bar (order: clear → cancel → accept). */ -const useStyle = makeStyles({ - root: { - width: '100%', - }, - input: { +const PICKER_ACTION_BAR_ACTIONS: PickersActionBarAction[] = [ + 'clear', + 'cancel', + 'accept', +]; + +/** + * Shared sx styles for the date/time picker input field. + */ +const pickerInputSx = { + width: '100%', + '& .MuiInputBase-root': { fontFamily: 'var(--font-family-default)', backgroundColor: 'var(--color-background-default)', border: '1px solid var(--color-border-muted)', @@ -42,11 +52,11 @@ const useStyle = makeStyles({ alignItems: 'center', borderRadius: '8px', fontSize: 'var(--typography-s-body-md-font-size)', - '& > input': { - padding: '0 16px', - }, }, -}); + '& .MuiInputBase-root input': { + padding: '0 16px', + }, +}; /** * Normalizes the date based on the picker type. @@ -101,8 +111,14 @@ export const SnapUIDateTimePicker: FunctionComponent< disablePast = false, disableFuture = false, }) => { - const t = useI18nContext(); const { handleInputChange, getValue } = useSnapInterfaceContext(); + const t = useI18nContext(); + + const pickerLocaleText = { + clearButtonLabel: t('clear'), + cancelButtonLabel: t('cancel'), + okButtonLabel: t('ok').toUpperCase(), + }; const initialValue = getValue(name, form) as string; @@ -110,8 +126,6 @@ export const SnapUIDateTimePicker: FunctionComponent< initialValue ? DateTime.fromISO(initialValue) : null, ); - const classes = useStyle(); - useEffect(() => { if (initialValue !== undefined && initialValue !== null) { setValue(DateTime.fromISO(initialValue)); @@ -136,61 +150,80 @@ export const SnapUIDateTimePicker: FunctionComponent< {label && } {type === 'datetime' && ( )} {type === 'date' && ( )} {type === 'time' && ( )} {error && ( diff --git a/ui/components/app/snaps/snap-ui-renderer/components/__snapshots__/date-time-picker.test.ts.snap b/ui/components/app/snaps/snap-ui-renderer/components/__snapshots__/date-time-picker.test.ts.snap index 3795d6ac07f2..5ea2330cf107 100644 --- a/ui/components/app/snaps/snap-ui-renderer/components/__snapshots__/date-time-picker.test.ts.snap +++ b/ui/components/app/snaps/snap-ui-renderer/components/__snapshots__/date-time-picker.test.ts.snap @@ -22,21 +22,24 @@ exports[`SnapUIDateTimePicker can show an error 1`] = ` Select date and time
-

-
@@ -113,21 +119,24 @@ exports[`SnapUIDateTimePicker renders a date time picker 1`] = ` class="snap-ui-renderer__date-time-picker" >
-
@@ -156,21 +165,24 @@ exports[`SnapUIDateTimePicker renders a time picker 1`] = ` class="snap-ui-renderer__date-time-picker" >
-
@@ -205,21 +217,24 @@ exports[`SnapUIDateTimePicker renders inside a field 1`] = ` Select date and time
-
diff --git a/ui/components/app/snaps/snap-ui-renderer/snap-ui-renderer.js b/ui/components/app/snaps/snap-ui-renderer/snap-ui-renderer.js index f33ca3eb0fdf..ad3e493db52e 100644 --- a/ui/components/app/snaps/snap-ui-renderer/snap-ui-renderer.js +++ b/ui/components/app/snaps/snap-ui-renderer/snap-ui-renderer.js @@ -4,9 +4,9 @@ import { useSelector } from 'react-redux'; import { Container } from '@metamask/snaps-sdk/jsx'; import { isEqual } from 'lodash'; -import { MuiPickersUtilsProvider } from '@material-ui/pickers'; -import LuxonUtils from '@date-io/luxon'; -import { ThemeProvider } from '@material-ui/core/styles'; +import { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider'; +import { AdapterLuxon } from '@mui/x-date-pickers/AdapterLuxon'; +import { ThemeProvider } from '@mui/material/styles'; import MetaMaskTemplateRenderer from '../../metamask-template-renderer/metamask-template-renderer'; import { getInterface } from '../../../../selectors'; import { Box } from '../../../component-library'; @@ -147,7 +147,7 @@ const SnapUIRendererComponent = ({ initialState={initialState} > - + {PERF_DEBUG && } - + ); diff --git a/ui/components/app/snaps/snap-ui-renderer/utils.ts b/ui/components/app/snaps/snap-ui-renderer/utils.ts index 95fbf6fc6957..4a60891ffc58 100644 --- a/ui/components/app/snaps/snap-ui-renderer/utils.ts +++ b/ui/components/app/snaps/snap-ui-renderer/utils.ts @@ -5,8 +5,7 @@ import { sha256 } from '@noble/hashes/sha256'; import { NonEmptyArray, bytesToHex, remove0x } from '@metamask/utils'; import { unescape as unescapeEntities } from 'he'; import { ChangeEvent as ReactChangeEvent } from 'react'; -import { createTheme, ThemeOptions } from '@material-ui/core/styles'; -import { MuiPickersOverrides } from '@material-ui/pickers/typings/overrides'; +import { createTheme, ThemeOptions } from '@mui/material/styles'; import { BackgroundColor, BorderRadius, @@ -197,125 +196,150 @@ export const mapSnapBorderRadiusToExtensionBorderRadius = ( * The MUI theme overrides for the date/time pickers to match MetaMask design system. */ export const muiPickerTheme = createTheme({ - overrides: { - MuiPickersModal: { - dialogRoot: { - '& *': { - fontFamily: 'var(--font-family-default)', + components: { + MuiDialog: { + styleOverrides: { + paper: { + '& *': { + fontFamily: 'var(--font-family-default)', + }, + backgroundColor: 'var(--color-background-default)', + color: 'var(--color-text-default)', + borderRadius: '8px', }, - backgroundColor: 'var(--color-background-default)', - color: 'var(--color-text-default)', - borderRadius: '8px', }, - withAdditionalAction: { - '& > button': { - color: 'var(--color-primary-default)', - fontWeight: 'var(--typography-s-body-md-medium-font-weight)', - fontSize: 'var(--typography-s-body-md-medium-font-size)', - lineHeight: 'var(--typography-s-body-md-medium-line-height)', - letterSpacing: 'var(--typography-s-body-md-medium-letter-spacing)', - textTransform: 'none', - '&:hover': { - textDecoration: 'underline', - textDecorationThickness: '2px', - textUnderlineOffset: '4px', - backgroundColor: 'transparent', + }, + MuiDialogActions: { + styleOverrides: { + root: { + '& > button': { + color: 'var(--color-primary-default)', + fontWeight: 'var(--typography-s-body-md-medium-font-weight)', + fontSize: 'var(--typography-s-body-md-medium-font-size)', + lineHeight: 'var(--typography-s-body-md-medium-line-height)', + letterSpacing: 'var(--typography-s-body-md-medium-letter-spacing)', + textTransform: 'none', + '&:hover': { + textDecoration: 'underline', + textDecorationThickness: '2px', + textUnderlineOffset: '4px', + backgroundColor: 'transparent', + }, }, }, }, - dialogAction: { - color: 'var(--color-primary-default)', - }, }, MuiPickersToolbar: { - toolbar: { - backgroundColor: 'var(--color-background-alternative)', + styleOverrides: { + root: { + backgroundColor: 'var(--color-background-alternative)', + }, }, }, MuiPickersToolbarButton: { - toolbarBtn: { - color: 'var(--color-text-alternative)', + styleOverrides: { + root: { + color: 'var(--color-text-alternative)', + '&.Mui-selected': { + color: 'var(--color-text-default)', + }, + }, }, }, MuiPickersToolbarText: { - toolbarTxt: { - color: 'var(--color-text-alternative)', - }, - toolbarBtnSelected: { - color: 'var(--color-text-default)', + styleOverrides: { + root: { + color: 'var(--color-text-alternative)', + '&.Mui-selected': { + color: 'var(--color-text-default)', + }, + }, }, }, - MuiPickersCalendarHeader: { - iconButton: { - '&:hover': { - backgroundColor: 'var(--color-background-alternative-hover)', + MuiPickersArrowSwitcher: { + styleOverrides: { + button: { + color: 'var(--color-icon-alternative)', + backgroundColor: 'var(--color-background-alternative)', + '&:hover': { + backgroundColor: 'var(--color-background-alternative-hover)', + }, }, - color: 'var(--color-icon-alternative)', - backgroundColor: 'var(--color-background-alternative)', }, - dayLabel: { - color: 'var(--color-text-alternative)', + }, + MuiDayCalendar: { + styleOverrides: { + weekDayLabel: { + color: 'var(--color-text-alternative)', + }, }, }, MuiPickersDay: { - day: { - color: 'var(--color-text-default)', - }, - current: { - color: 'var(--color-primary-default)', - }, - dayDisabled: { - color: 'var(--color-text-muted)', - }, - daySelected: { - '&:hover': { - backgroundColor: 'var(--color-primary-default-hover)', + styleOverrides: { + root: { + color: 'var(--color-text-default)', + '&.Mui-selected': { + '&:hover': { + backgroundColor: 'var(--color-primary-default-hover)', + }, + backgroundColor: 'var(--color-primary-default)', + color: 'var(--color-primary-inverse)', + }, + '&.MuiPickersDay-today': { + color: 'var(--color-primary-default)', + }, + '&.Mui-disabled': { + color: 'var(--color-text-muted)', + }, }, - backgroundColor: 'var(--color-primary-default)', - color: 'var(--color-primary-inverse)', }, }, - MuiPickersClock: { - clock: { - backgroundColor: 'var(--color-background-alternative)', - }, - pin: { - color: 'var(--color-primary-default)', - backgroundColor: 'var(--color-primary-default)', + MuiClock: { + styleOverrides: { + clock: { + backgroundColor: 'var(--color-background-alternative)', + }, + pin: { + color: 'var(--color-primary-default)', + backgroundColor: 'var(--color-primary-default)', + }, }, }, - MuiPickersClockPointer: { - pointer: { - backgroundColor: 'var(--color-primary-default)', - }, - thumb: { - borderColor: 'var(--color-primary-default)', - backgroundColor: 'var(--color-primary-inverse)', - }, - noPoint: { - backgroundColor: 'var(--color-primary-default)', + MuiClockPointer: { + styleOverrides: { + root: { + backgroundColor: 'var(--color-primary-default)', + }, + thumb: { + borderColor: 'var(--color-primary-default)', + backgroundColor: 'var(--color-primary-inverse)', + }, }, }, - MuiPickersClockNumber: { - clockNumber: { - color: 'var(--color-text-default)', - }, - clockNumberSelected: { - color: 'var(--color-primary-inverse)', + MuiClockNumber: { + styleOverrides: { + root: { + color: 'var(--color-text-default)', + '&.Mui-selected': { + color: 'var(--color-primary-inverse)', + }, + }, }, }, MuiPickersYear: { - root: { - '&:focus': { - color: 'var(--color-primary-default)', + styleOverrides: { + yearButton: { + '&:focus': { + color: 'var(--color-primary-default)', + }, + '&.Mui-selected': { + color: 'var(--color-primary-default)', + }, + '&.Mui-disabled': { + color: 'var(--color-text-muted)', + }, }, }, - yearSelected: { - color: 'var(--color-primary-default)', - }, - yearDisabled: { - color: 'var(--color-text-muted)', - }, }, - } as MuiPickersOverrides, + }, } as ThemeOptions); diff --git a/yarn.lock b/yarn.lock index 9ab499d1f692..4125e6f44a39 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1714,24 +1714,6 @@ __metadata: languageName: node linkType: hard -"@date-io/core@npm:1.x, @date-io/core@npm:^1.3.13": - version: 1.3.13 - resolution: "@date-io/core@npm:1.3.13" - checksum: 10/5a9e9d1de20f0346a3c7d2d5946190caef4bfb0b64d82ba1f4c566657a9192667c94ebe7f438d11d4286d9c190974daad4fb2159294225cd8af4d9a140239879 - languageName: node - linkType: hard - -"@date-io/luxon@npm:^1.3.13": - version: 1.3.13 - resolution: "@date-io/luxon@npm:1.3.13" - dependencies: - "@date-io/core": "npm:^1.3.13" - peerDependencies: - luxon: ^1.21.3 - checksum: 10/6583ddf55d76aab1a9bdc7ef10ae30f67300d2617ae3969ac95def7bde87f2a680c5ceaf1b57308974f9b2cd83352903905c9cbbc5b66df1facfed4640f1e228 - languageName: node - linkType: hard - "@dependents/detective-less@npm:^5.0.0": version: 5.0.0 resolution: "@dependents/detective-less@npm:5.0.0" @@ -5418,26 +5400,6 @@ __metadata: languageName: node linkType: hard -"@material-ui/pickers@npm:^3.3.11": - version: 3.3.11 - resolution: "@material-ui/pickers@npm:3.3.11" - dependencies: - "@babel/runtime": "npm:^7.6.0" - "@date-io/core": "npm:1.x" - "@types/styled-jsx": "npm:^2.2.8" - clsx: "npm:^1.0.2" - react-transition-group: "npm:^4.0.0" - rifm: "npm:^0.7.0" - peerDependencies: - "@date-io/core": ^1.3.6 - "@material-ui/core": ^4.0.0 - prop-types: ^15.6.0 - react: ^16.8.0 || ^17.0.0 - react-dom: ^16.8.0 || ^17.0.0 - checksum: 10/f3c4429ec5be97903473a8d7d4171aa92356887c3c58357fd7404e7a74b002a5aa529818ad946049aebb8a1c2a652ee459f4e5be57bec9872778ca810bc8205f - languageName: node - linkType: hard - "@material-ui/styles@npm:^4.11.5": version: 4.11.5 resolution: "@material-ui/styles@npm:4.11.5" @@ -16998,15 +16960,6 @@ __metadata: languageName: node linkType: hard -"@types/styled-jsx@npm:^2.2.8": - version: 2.2.9 - resolution: "@types/styled-jsx@npm:2.2.9" - dependencies: - "@types/react": "npm:*" - checksum: 10/0e7e9bce8435116168b2470c7599b3b6ad5775c678d5dc06b64b0bc4fe369c59603c794a7298e2ca4e209aa0135f98df89793a3a0778251c1907b34198c55e9e - languageName: node - linkType: hard - "@types/tedious@npm:^4.0.14": version: 4.0.14 resolution: "@types/tedious@npm:4.0.14" @@ -21915,7 +21868,7 @@ __metadata: languageName: node linkType: hard -"clsx@npm:^1.0.2, clsx@npm:^1.0.4": +"clsx@npm:^1.0.4": version: 1.2.1 resolution: "clsx@npm:1.2.1" checksum: 10/5ded6f61f15f1fa0350e691ccec43a28b12fb8e64c8e94715f2a937bc3722d4c3ed41d6e945c971fc4dcc2a7213a43323beaf2e1c28654af63ba70c9968a8643 @@ -34077,7 +34030,6 @@ __metadata: "@babel/register": "npm:^7.25.9" "@babel/runtime": "patch:@babel/runtime@npm%3A7.29.2#~/.yarn/patches/@babel-runtime-npm-7.29.2-b49cad1c67.patch" "@blockaid/ppom_release": "npm:^1.5.3" - "@date-io/luxon": "npm:^1.3.13" "@emotion/react": "npm:^11.14.0" "@emotion/styled": "npm:^11.14.1" "@ensdomains/content-hash": "npm:^2.5.7" @@ -34105,7 +34057,6 @@ __metadata: "@ledgerhq/hw-transport-webhid": "npm:^6.31.0" "@lydell/node-pty": "npm:^1.1.0" "@material-ui/core": "npm:^4.12.4" - "@material-ui/pickers": "npm:^3.3.11" "@metamask/7715-permission-types": "npm:^0.6.0" "@metamask/abi-utils": "npm:^3.0.0" "@metamask/account-api": "npm:^1.0.4" @@ -39206,7 +39157,7 @@ __metadata: languageName: node linkType: hard -"react-transition-group@npm:^4.0.0, react-transition-group@npm:^4.4.0, react-transition-group@npm:^4.4.5": +"react-transition-group@npm:^4.4.0, react-transition-group@npm:^4.4.5": version: 4.4.5 resolution: "react-transition-group@npm:4.4.5" dependencies: @@ -40337,17 +40288,6 @@ __metadata: languageName: node linkType: hard -"rifm@npm:^0.7.0": - version: 0.7.0 - resolution: "rifm@npm:0.7.0" - dependencies: - "@babel/runtime": "npm:^7.3.1" - peerDependencies: - react: ">=16.8" - checksum: 10/09dee6d18f1446e06b55576cc8b984b636f1351fe7af7b85bc1958fb5f1679128ce536308fd229a6e98bee77751afccd204015bd5c9e8adcc42a712e98c60aa6 - languageName: node - linkType: hard - "rimraf@npm:2.6.3, rimraf@npm:~2.6.2": version: 2.6.3 resolution: "rimraf@npm:2.6.3"