{item.label}
{badgeText && (
diff --git a/apps/cowswap-frontend/src/modules/application/containers/TradeWidgetLinks/styled.ts b/apps/cowswap-frontend/src/modules/application/containers/TradeWidgetLinks/styled.ts
index 660e51fe25..1d91b92f9f 100644
--- a/apps/cowswap-frontend/src/modules/application/containers/TradeWidgetLinks/styled.ts
+++ b/apps/cowswap-frontend/src/modules/application/containers/TradeWidgetLinks/styled.ts
@@ -1,4 +1,3 @@
-import { transparentize } from 'polished'
import { NavLink } from 'react-router-dom'
import styled, { css } from 'styled-components/macro'
@@ -49,21 +48,31 @@ Badge.defaultProps = {
export const Link = styled(NavLink)`
display: flex;
align-items: center;
+ justify-content: center;
text-decoration: none;
- color: ${({ theme }) => transparentize(0.4, theme.text1)};
- gap: 3px;
+ color: var(${UI.COLOR_TEXT1});
+ gap: 4px;
font-weight: inherit;
line-height: 1;
- transition: color 0.15s ease-in-out;
+ transition: color 0.15s ease-in-out, fill 0.15s ease-in-out;
&:hover {
color: inherit;
+ text-decoration: none;
+
+ > svg > path {
+ fill: var(${UI.COLOR_TEXT1});
+ }
+ }
+
+ > svg > path {
+ fill: var(${UI.COLOR_TEXT1});
}
`
export const Wrapper = styled.div`
background: transparent;
- border-radius: 16px;
+ border-radius: var(${UI.BORDER_RADIUS_NORMAL});
padding: 0;
display: flex;
flex-flow: row wrap;
@@ -74,15 +83,19 @@ export const Wrapper = styled.div`
}
`
-export const MenuItem = styled.div<{ isActive?: boolean }>`
+export const MenuItem = styled.div<{ isActive?: boolean; isDropdownVisible: boolean }>`
display: flex;
align-items: center;
- font-size: 14px;
- font-weight: 500;
- border-radius: 16px;
- padding: 5px 10px;
+ font-size: ${({ theme }) => theme.isInjectedWidgetMode ? '16px' : '14px'};
+ font-weight: ${({ theme }) => theme.isInjectedWidgetMode ? '600' : '500'};
+ border-radius: var(${UI.BORDER_RADIUS_NORMAL});
+ padding: ${({ theme }) => theme.isInjectedWidgetMode ? '7px 0' : '5px 10px'};
background: transparent;
- transition: background 0.2 ease-in-out;
+ transition: background 0.2s ease-in-out;
+
+ &:hover {
+ background: var(${UI.COLOR_GREY});
+ }
${({ isActive }) =>
isActive &&
@@ -96,5 +109,26 @@ export const MenuItem = styled.div<{ isActive?: boolean }>`
${Link} > ${Badge} {
display: none;
}
+ `}
+
+ ${({ isDropdownVisible }) =>
+ isDropdownVisible &&
+ css`
+ padding: 7px 10px;
`}
`
+
+export const SelectMenu = styled.div`
+ display: flex;
+ flex-flow: column wrap;
+ width: 100%;
+ height: 100%;
+ position: absolute;
+ z-index: 100;
+ left: 0;
+ top: 0;
+ padding: 16px;
+ gap: ${({ theme }) => theme.isInjectedWidgetMode ? '16px' : '24px'};
+ background: var(${UI.COLOR_CONTAINER_BG_01});
+ border-radius: var(${UI.BORDER_RADIUS_NORMAL});
+`
diff --git a/apps/cowswap-frontend/src/modules/ordersTable/pure/OrdersTableContainer/index.tsx b/apps/cowswap-frontend/src/modules/ordersTable/pure/OrdersTableContainer/index.tsx
index dcde2ae431..6b0ff20bc3 100644
--- a/apps/cowswap-frontend/src/modules/ordersTable/pure/OrdersTableContainer/index.tsx
+++ b/apps/cowswap-frontend/src/modules/ordersTable/pure/OrdersTableContainer/index.tsx
@@ -2,6 +2,7 @@ import { ReactNode } from 'react'
import cowMeditatingV2 from '@cowprotocol/assets/cow-swap/meditating-cow-v2.svg'
import imageConnectWallet from '@cowprotocol/assets/cow-swap/wallet-plus.svg'
+import { isInjectedWidget } from '@cowprotocol/common-utils'
import { ExternalLink } from '@cowprotocol/ui'
import { Trans } from '@lingui/macro'
@@ -179,14 +180,18 @@ export function OrdersTableContainer({
Connect a wallet
-
-
- To use {orderType} orders, please connect your wallet
- to one of our supported networks.
-
-
+ {!isInjectedWidget() && (
+ <>
+
+
+ To use {orderType} orders, please connect your wallet
+ to one of our supported networks.
+
+
-
+
+ >
+ )}
)
}
diff --git a/apps/cowswap-frontend/src/modules/trade/containers/TradeWidget/index.tsx b/apps/cowswap-frontend/src/modules/trade/containers/TradeWidget/index.tsx
index bb5f1d3dcc..59bc94d6ae 100644
--- a/apps/cowswap-frontend/src/modules/trade/containers/TradeWidget/index.tsx
+++ b/apps/cowswap-frontend/src/modules/trade/containers/TradeWidget/index.tsx
@@ -1,10 +1,12 @@
import { ReactNode, useEffect } from 'react'
import { maxAmountSpend } from '@cowprotocol/common-utils'
+import { isInjectedWidget } from '@cowprotocol/common-utils'
import { useIsSafeWallet, useWalletDetails, useWalletInfo } from '@cowprotocol/wallet'
import { t } from '@lingui/macro'
+import { AccountElement } from 'legacy/components/Header/AccountElement'
import { PriceImpact } from 'legacy/hooks/usePriceImpact'
import { TradeWidgetLinks } from 'modules/application/containers/TradeWidgetLinks'
@@ -14,6 +16,7 @@ import { RecipientAddressUpdater } from 'modules/trade/updaters/RecipientAddress
import { TradeFormValidationUpdater } from 'modules/tradeFormValidation'
import { TradeQuoteUpdater } from 'modules/tradeQuote'
+import { useCategorizeRecentActivity } from 'common/hooks/useCategorizeRecentActivity'
import { useIsProviderNetworkUnsupported } from 'common/hooks/useIsProviderNetworkUnsupported'
import { useThrottleFn } from 'common/hooks/useThrottleFn'
import { CurrencyArrowSeparator } from 'common/pure/CurrencyArrowSeparator'
@@ -122,6 +125,10 @@ export function TradeWidget(props: TradeWidgetProps) {
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [])
+ const isInjectedWidgetMode = isInjectedWidget()
+
+ const { pendingActivity } = useCategorizeRecentActivity()
+
return (
@@ -138,7 +145,10 @@ export function TradeWidget(props: TradeWidgetProps) {
-
+
+ {isInjectedWidgetMode && (
+
+ )}
{!lockScreen && settingsWidget}
diff --git a/apps/cowswap-frontend/src/modules/trade/containers/TradeWidget/styled.tsx b/apps/cowswap-frontend/src/modules/trade/containers/TradeWidget/styled.tsx
index e8643f3388..5a09ff0406 100644
--- a/apps/cowswap-frontend/src/modules/trade/containers/TradeWidget/styled.tsx
+++ b/apps/cowswap-frontend/src/modules/trade/containers/TradeWidget/styled.tsx
@@ -16,16 +16,17 @@ export const ContainerBox = styled.div`
gap: 10px;
background: var(${UI.COLOR_CONTAINER_BG_01});
border: none;
- border-radius: 16px;
+ border-radius: var(${UI.BORDER_RADIUS_NORMAL});
box-shadow: ${({ theme }) => theme.boxShadow1};
padding: 10px;
+ position: relative;
`
export const Header = styled.div`
display: flex;
justify-content: space-between;
align-items: center;
- padding: 0;
+ padding: ${({ theme }) => (theme.isInjectedWidgetMode ? '0 7px' : '0 5px 0 0')};
margin: 0;
`
diff --git a/apps/cowswap-frontend/src/modules/wallet/containers/Web3Status/index.tsx b/apps/cowswap-frontend/src/modules/wallet/containers/Web3Status/index.tsx
index d922b8425a..ac5836bffe 100644
--- a/apps/cowswap-frontend/src/modules/wallet/containers/Web3Status/index.tsx
+++ b/apps/cowswap-frontend/src/modules/wallet/containers/Web3Status/index.tsx
@@ -10,7 +10,11 @@ import { AccountSelectorModal } from '../AccountSelectorModal'
import { useCloseFollowTxPopupIfNotPendingOrder } from '../FollowPendingTxPopup'
import { WalletModal } from '../WalletModal'
-export function Web3Status({ pendingActivities }: { pendingActivities: string[] }) {
+export interface Web3StatusProps {
+ pendingActivities: string[]
+ className?: string
+}
+export function Web3Status({ pendingActivities, className }: Web3StatusProps) {
const { connector } = useWeb3React()
const { account, active, chainId } = useWalletInfo()
const { ensName } = useWalletDetails()
@@ -28,7 +32,7 @@ export function Web3Status({ pendingActivities }: { pendingActivities: string[]
}
return (
-
+
`
${({ theme }) => theme.flexColumnNoWrap};
align-items: center;
justify-content: center;
- margin-right: 8px;
+
& > img,
span {
height: ${({ size }) => (size ? size + 'px' : '32px')};
diff --git a/apps/cowswap-frontend/src/modules/wallet/pure/Web3StatusInner/index.tsx b/apps/cowswap-frontend/src/modules/wallet/pure/Web3StatusInner/index.tsx
index 0a8a9affdc..2e352d7608 100644
--- a/apps/cowswap-frontend/src/modules/wallet/pure/Web3StatusInner/index.tsx
+++ b/apps/cowswap-frontend/src/modules/wallet/pure/Web3StatusInner/index.tsx
@@ -3,6 +3,8 @@ import { Loader, RowBetween } from '@cowprotocol/ui'
import { ConnectionType } from '@cowprotocol/wallet'
import { Trans } from '@lingui/macro'
+import ICON_WALLET from 'assets/icon/wallet.svg'
+import SVG from 'react-inlinesvg'
import { NetworkIcon, Text, Web3StatusConnect, Web3StatusConnected, Web3StatusError } from './styled'
@@ -64,6 +66,7 @@ export function Web3StatusInner(props: Web3StatusInnerProps) {
Connect wallet
+
)
}
diff --git a/apps/cowswap-frontend/src/modules/wallet/pure/Web3StatusInner/styled.ts b/apps/cowswap-frontend/src/modules/wallet/pure/Web3StatusInner/styled.ts
index 35738b87d3..a6435a5d71 100644
--- a/apps/cowswap-frontend/src/modules/wallet/pure/Web3StatusInner/styled.ts
+++ b/apps/cowswap-frontend/src/modules/wallet/pure/Web3StatusInner/styled.ts
@@ -20,29 +20,39 @@ export const Web3StatusError = styled(Web3StatusGeneric)`
`
export const Web3StatusConnect = styled(Web3StatusGeneric)<{ faded?: boolean }>`
- /* border: none; */
- /* color: ${({ theme }) => theme.primaryText1}; */
- /* font-weight: 500; */
+ > svg {
+ display: ${({ theme }) => (theme.isInjectedWidgetMode ? '' : 'none')};
+ }
- /* :hover,
- :focus {
- border: 1px solid ${({ theme }) => darken(0.05, theme.primary4)};
- color: ${({ theme }) => theme.primaryText1};
- } */
+ ${({ theme }) =>
+ theme.isInjectedWidgetMode &&
+ `
+ margin: 0;
+ padding: 6px 12px;
+ background: 0;
+ border: 0;
+ font-size: 14px;
+ font-weight: var(${UI.FONT_WEIGHT_MEDIUM});
+ color: var(${UI.COLOR_TEXT1})!important;
+ transition: all 0.2s ease-in-out;
+ gap: 6px;
+ opacity: 0.7;
+
+ &:hover {
+ background: var(${UI.COLOR_GREY});
+ }
- /* ${({ faded }) =>
- faded &&
- css`
- background-color: ${({ theme }) => theme.primary5};
- border: 1px solid ${({ theme }) => theme.primary5};
- color: ${({ theme }) => theme.primaryText1};
-
- :hover,
- :focus {
- border: 1px solid ${({ theme }) => darken(0.05, theme.primary4)};
- color: ${({ theme }) => darken(0.05, theme.primaryText1)};
+ > svg {
+ --size: var(${UI.ICON_SIZE_SMALL});
+ height: var(--size);
+ width: var(--size);
+ margin: 0;
}
- `} */
+
+ > svg > path {
+ fill: var(${UI.COLOR_TEXT1});
+ }
+ `}
`
export const Web3StatusConnected = styled(Web3StatusGeneric)<{ pending?: boolean; clickDisabled?: boolean }>`
@@ -69,8 +79,8 @@ export const Text = styled.p`
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
- margin: 0 0.5rem 0 0.25rem;
- font-size: 1rem;
+ margin: 0;
+ font-size: ${({ theme }) => (theme.isInjectedWidgetMode ? '15px' : '1rem')};
width: fit-content;
font-weight: 500;
`
@@ -84,8 +94,7 @@ export const NetworkIcon = styled(Activity)`
export const Wrapper = styled.div`
color: var(${UI.COLOR_TEXT1});
- height: 40px;
- width: 100%;
+ height: ${({ theme }) => (theme.isInjectedWidgetMode ? 'initial' : '40px')};
display: flex;
padding: 0;
margin: 0;
@@ -97,11 +106,12 @@ export const Wrapper = styled.div`
margin: 0 auto;
`};
- button {
+ > button {
height: auto;
border-radius: 21px;
padding: 6px 12px;
width: max-content;
+ gap: 6px;
}
${Web3StatusConnected} {
diff --git a/apps/cowswap-frontend/src/test-utils.tsx b/apps/cowswap-frontend/src/test-utils.tsx
index 5ae90fdf46..87695461f7 100644
--- a/apps/cowswap-frontend/src/test-utils.tsx
+++ b/apps/cowswap-frontend/src/test-utils.tsx
@@ -3,6 +3,7 @@ import { useHydrateAtoms } from 'jotai/utils'
import { createStore } from 'jotai/vanilla'
import { ReactElement, ReactNode, useMemo } from 'react'
+import { isInjectedWidget } from '@cowprotocol/common-utils'
import { initializeConnector, Web3ReactHooks, Web3ReactProvider } from '@web3-react/core'
import { Connector } from '@web3-react/types'
@@ -27,8 +28,9 @@ const MockedI18nProvider = ({ children }: any) => {chi
const MockThemeProvider = ({ children }: { children: React.ReactNode }) => {
const darkMode = useIsDarkMode()
+ const isInjectedWidgetMode = isInjectedWidget()
- const themeObject = useMemo(() => theme(darkMode), [darkMode])
+ const themeObject = useMemo(() => theme(darkMode, isInjectedWidgetMode), [darkMode, isInjectedWidgetMode])
return {children}
}
diff --git a/apps/widget-configurator-e2e/.eslintrc.json b/apps/widget-configurator-e2e/.eslintrc.json
new file mode 100644
index 0000000000..696cb8b121
--- /dev/null
+++ b/apps/widget-configurator-e2e/.eslintrc.json
@@ -0,0 +1,10 @@
+{
+ "extends": ["plugin:cypress/recommended", "../../.eslintrc.json"],
+ "ignorePatterns": ["!**/*"],
+ "overrides": [
+ {
+ "files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
+ "rules": {}
+ }
+ ]
+}
diff --git a/apps/widget-configurator-e2e/cypress.config.ts b/apps/widget-configurator-e2e/cypress.config.ts
new file mode 100644
index 0000000000..3e9f34e3f9
--- /dev/null
+++ b/apps/widget-configurator-e2e/cypress.config.ts
@@ -0,0 +1,8 @@
+import { defineConfig } from 'cypress'
+import { nxE2EPreset } from '@nx/cypress/plugins/cypress-preset'
+
+export default defineConfig({
+ e2e: nxE2EPreset(__dirname, {
+ bundler: 'vite',
+ }),
+})
diff --git a/apps/widget-configurator-e2e/project.json b/apps/widget-configurator-e2e/project.json
new file mode 100644
index 0000000000..104cd3108e
--- /dev/null
+++ b/apps/widget-configurator-e2e/project.json
@@ -0,0 +1,33 @@
+{
+ "name": "widget-configurator-e2e",
+ "$schema": "../../node_modules/nx/schemas/project-schema.json",
+ "sourceRoot": "apps/widget-configurator-e2e/src",
+ "projectType": "application",
+ "targets": {
+ "e2e": {
+ "executor": "@nx/cypress:cypress",
+ "options": {
+ "cypressConfig": "apps/widget-configurator-e2e/cypress.config.ts",
+ "devServerTarget": "widget-configurator:serve:development",
+ "testingType": "e2e"
+ },
+ "configurations": {
+ "production": {
+ "devServerTarget": "widget-configurator:serve:production"
+ },
+ "ci": {
+ "devServerTarget": "widget-configurator:serve-static"
+ }
+ }
+ },
+ "lint": {
+ "executor": "@nx/linter:eslint",
+ "outputs": ["{options.outputFile}"],
+ "options": {
+ "lintFilePatterns": ["apps/widget-configurator-e2e/**/*.{js,ts}"]
+ }
+ }
+ },
+ "tags": [],
+ "implicitDependencies": ["widget-configurator"]
+}
diff --git a/apps/widget-configurator-e2e/src/e2e/app.cy.ts b/apps/widget-configurator-e2e/src/e2e/app.cy.ts
new file mode 100644
index 0000000000..9ec65606d8
--- /dev/null
+++ b/apps/widget-configurator-e2e/src/e2e/app.cy.ts
@@ -0,0 +1,13 @@
+import { getGreeting } from '../support/app.po'
+
+describe('widget-configurator', () => {
+ beforeEach(() => cy.visit('/'))
+
+ it('should display welcome message', () => {
+ // Custom command example, see `../support/commands.ts` file
+ cy.login('my-email@something.com', 'myPassword')
+
+ // Function helper example, see `../support/app.po.ts` file
+ getGreeting().contains('Welcome widget-configurator')
+ })
+})
diff --git a/apps/widget-configurator-e2e/src/fixtures/example.json b/apps/widget-configurator-e2e/src/fixtures/example.json
new file mode 100644
index 0000000000..294cbed6ce
--- /dev/null
+++ b/apps/widget-configurator-e2e/src/fixtures/example.json
@@ -0,0 +1,4 @@
+{
+ "name": "Using fixtures to represent data",
+ "email": "hello@cypress.io"
+}
diff --git a/apps/widget-configurator-e2e/src/support/app.po.ts b/apps/widget-configurator-e2e/src/support/app.po.ts
new file mode 100644
index 0000000000..00f556e103
--- /dev/null
+++ b/apps/widget-configurator-e2e/src/support/app.po.ts
@@ -0,0 +1 @@
+export const getGreeting = () => cy.get('h1')
diff --git a/apps/widget-configurator-e2e/src/support/commands.ts b/apps/widget-configurator-e2e/src/support/commands.ts
new file mode 100644
index 0000000000..270f023ff5
--- /dev/null
+++ b/apps/widget-configurator-e2e/src/support/commands.ts
@@ -0,0 +1,33 @@
+// ***********************************************
+// This example commands.js shows you how to
+// create various custom commands and overwrite
+// existing commands.
+//
+// For more comprehensive examples of custom
+// commands please read more here:
+// https://on.cypress.io/custom-commands
+// ***********************************************
+
+// eslint-disable-next-line @typescript-eslint/no-namespace
+declare namespace Cypress {
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
+ interface Chainable {
+ login(email: string, password: string): void
+ }
+}
+//
+// -- This is a parent command --
+Cypress.Commands.add('login', (email, password) => {
+ console.log('Custom command example: Login', email, password)
+})
+//
+// -- This is a child command --
+// Cypress.Commands.add("drag", { prevSubject: 'element'}, (subject, options) => { ... })
+//
+//
+// -- This is a dual command --
+// Cypress.Commands.add("dismiss", { prevSubject: 'optional'}, (subject, options) => { ... })
+//
+//
+// -- This will overwrite an existing command --
+// Cypress.Commands.overwrite("visit", (originalFn, url, options) => { ... })
diff --git a/apps/widget-configurator-e2e/src/support/e2e.ts b/apps/widget-configurator-e2e/src/support/e2e.ts
new file mode 100644
index 0000000000..185d654ec6
--- /dev/null
+++ b/apps/widget-configurator-e2e/src/support/e2e.ts
@@ -0,0 +1,17 @@
+// ***********************************************************
+// This example support/index.js is processed and
+// loaded automatically before your test files.
+//
+// This is a great place to put global configuration and
+// behavior that modifies Cypress.
+//
+// You can change the location of this file or turn off
+// automatically serving support files with the
+// 'supportFile' configuration option.
+//
+// You can read more here:
+// https://on.cypress.io/configuration
+// ***********************************************************
+
+// Import commands.js using ES2015 syntax:
+import './commands'
diff --git a/apps/widget-configurator-e2e/tsconfig.json b/apps/widget-configurator-e2e/tsconfig.json
new file mode 100644
index 0000000000..cc509a730e
--- /dev/null
+++ b/apps/widget-configurator-e2e/tsconfig.json
@@ -0,0 +1,10 @@
+{
+ "extends": "../../tsconfig.base.json",
+ "compilerOptions": {
+ "sourceMap": false,
+ "outDir": "../../dist/out-tsc",
+ "allowJs": true,
+ "types": ["cypress", "node"]
+ },
+ "include": ["src/**/*.ts", "src/**/*.js", "cypress.config.ts"]
+}
diff --git a/apps/widget-configurator/.eslintrc.json b/apps/widget-configurator/.eslintrc.json
new file mode 100644
index 0000000000..a39ac5d057
--- /dev/null
+++ b/apps/widget-configurator/.eslintrc.json
@@ -0,0 +1,18 @@
+{
+ "extends": ["plugin:@nx/react", "../../.eslintrc.json"],
+ "ignorePatterns": ["!**/*"],
+ "overrides": [
+ {
+ "files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
+ "rules": {}
+ },
+ {
+ "files": ["*.ts", "*.tsx"],
+ "rules": {}
+ },
+ {
+ "files": ["*.js", "*.jsx"],
+ "rules": {}
+ }
+ ]
+}
diff --git a/apps/widget-configurator/index.html b/apps/widget-configurator/index.html
new file mode 100644
index 0000000000..f4a56a3f48
--- /dev/null
+++ b/apps/widget-configurator/index.html
@@ -0,0 +1,14 @@
+
+
+
+
+ CoW Swap: Widget configurator
+
+
+
+
+
+
+
+
+
diff --git a/apps/widget-configurator/project.json b/apps/widget-configurator/project.json
new file mode 100644
index 0000000000..33288c96b7
--- /dev/null
+++ b/apps/widget-configurator/project.json
@@ -0,0 +1,78 @@
+{
+ "name": "widget-configurator",
+ "$schema": "../../node_modules/nx/schemas/project-schema.json",
+ "sourceRoot": "apps/widget-configurator/src",
+ "projectType": "application",
+ "targets": {
+ "build": {
+ "executor": "@nx/vite:build",
+ "outputs": ["{options.outputPath}"],
+ "defaultConfiguration": "production",
+ "options": {
+ "outputPath": "dist/apps/widget-configurator"
+ },
+ "configurations": {
+ "development": {
+ "mode": "development"
+ },
+ "production": {
+ "mode": "production"
+ }
+ }
+ },
+ "serve": {
+ "executor": "@nx/vite:dev-server",
+ "defaultConfiguration": "development",
+ "options": {
+ "buildTarget": "widget-configurator:build"
+ },
+ "configurations": {
+ "development": {
+ "buildTarget": "widget-configurator:build:development",
+ "hmr": true
+ },
+ "production": {
+ "buildTarget": "widget-configurator:build:production",
+ "hmr": false
+ }
+ }
+ },
+ "preview": {
+ "executor": "@nx/vite:preview-server",
+ "defaultConfiguration": "development",
+ "options": {
+ "buildTarget": "widget-configurator:build"
+ },
+ "configurations": {
+ "development": {
+ "buildTarget": "widget-configurator:build:development"
+ },
+ "production": {
+ "buildTarget": "widget-configurator:build:production"
+ }
+ }
+ },
+ "test": {
+ "executor": "@nx/vite:test",
+ "outputs": ["coverage/apps/widget-configurator"],
+ "options": {
+ "passWithNoTests": true,
+ "reportsDirectory": "../../coverage/apps/widget-configurator"
+ }
+ },
+ "lint": {
+ "executor": "@nx/linter:eslint",
+ "outputs": ["{options.outputFile}"],
+ "options": {
+ "lintFilePatterns": ["apps/widget-configurator/**/*.{ts,tsx,js,jsx}"]
+ }
+ },
+ "serve-static": {
+ "executor": "@nx/web:file-server",
+ "options": {
+ "buildTarget": "widget-configurator:build"
+ }
+ }
+ },
+ "tags": []
+}
diff --git a/apps/widget-configurator/public/favicon.ico b/apps/widget-configurator/public/favicon.ico
new file mode 100644
index 0000000000..317ebcb233
Binary files /dev/null and b/apps/widget-configurator/public/favicon.ico differ
diff --git a/apps/widget-configurator/src/app/app.spec.tsx b/apps/widget-configurator/src/app/app.spec.tsx
new file mode 100644
index 0000000000..1ea8da5bb1
--- /dev/null
+++ b/apps/widget-configurator/src/app/app.spec.tsx
@@ -0,0 +1,15 @@
+import { render } from '@testing-library/react'
+
+import App from './app'
+
+describe('App', () => {
+ it('should render successfully', () => {
+ const { baseElement } = render()
+ expect(baseElement).toBeTruthy()
+ })
+
+ it('should have a greeting as the title', () => {
+ const { getByText } = render()
+ expect(getByText(/Welcome widget-configurator/gi)).toBeTruthy()
+ })
+})
diff --git a/apps/widget-configurator/src/app/app.tsx b/apps/widget-configurator/src/app/app.tsx
new file mode 100644
index 0000000000..d914123f7d
--- /dev/null
+++ b/apps/widget-configurator/src/app/app.tsx
@@ -0,0 +1,21 @@
+import Box from '@mui/material/Box'
+import { Configurator } from './configurator'
+import { Theme } from '@mui/material/styles';
+
+const WrapperStyled = (theme: Theme) => ({
+ display: 'flex',
+ flexDirection: 'column',
+ height: '100%',
+ width: '100%',
+ background: theme.palette.cow.background,
+})
+
+export function App() {
+ return (
+
+
+
+ )
+}
+
+export default App
diff --git a/apps/widget-configurator/src/app/configurator/embedDialog.tsx b/apps/widget-configurator/src/app/configurator/embedDialog.tsx
new file mode 100644
index 0000000000..2b5ef2a874
--- /dev/null
+++ b/apps/widget-configurator/src/app/configurator/embedDialog.tsx
@@ -0,0 +1,65 @@
+import * as React from 'react';
+import Button from '@mui/material/Button';
+import Dialog, { DialogProps } from '@mui/material/Dialog';
+import DialogActions from '@mui/material/DialogActions';
+import DialogContent from '@mui/material/DialogContent';
+import DialogContentText from '@mui/material/DialogContentText';
+import DialogTitle from '@mui/material/DialogTitle';
+
+export default function EmbedDialog() {
+ const [open, setOpen] = React.useState(false);
+ const [scroll, setScroll] = React.useState('paper');
+
+ const handleClickOpen = (scrollType: DialogProps['scroll']) => () => {
+ setOpen(true);
+ setScroll(scrollType);
+ };
+
+ const handleClose = () => {
+ setOpen(false);
+ };
+
+ const descriptionElementRef = React.useRef(null);
+ React.useEffect(() => {
+ if (open) {
+ const { current: descriptionElement } = descriptionElementRef;
+ if (descriptionElement !== null) {
+ descriptionElement.focus();
+ }
+ }
+ }, [open]);
+
+ return (
+
+
+ {/* */}
+
+
+ );
+}
\ No newline at end of file
diff --git a/apps/widget-configurator/src/app/configurator/index.tsx b/apps/widget-configurator/src/app/configurator/index.tsx
new file mode 100644
index 0000000000..76c5083a83
--- /dev/null
+++ b/apps/widget-configurator/src/app/configurator/index.tsx
@@ -0,0 +1,255 @@
+import * as React from 'react'
+import { ColorModeContext } from '../../main'
+// import { useTheme } from '@mui/material/styles'
+import Box from '@mui/material/Box'
+import { ContentStyled, DrawerStyled, WrapperStyled } from './styled'
+// import Button from '@mui/material/Button'
+import InputLabel from '@mui/material/InputLabel'
+import OutlinedInput from '@mui/material/OutlinedInput'
+import MenuItem from '@mui/material/MenuItem'
+import FormControl from '@mui/material/FormControl'
+import Select, { SelectChangeEvent } from '@mui/material/Select'
+import Typography from '@mui/material/Typography'
+import Drawer from '@mui/material/Drawer'
+import Link from '@mui/material/Link'
+import TextField from '@mui/material/TextField'
+import Autocomplete from '@mui/material/Autocomplete'
+import Divider from '@mui/material/Divider'
+import EmbedDialog from './embedDialog'
+import Checkbox from '@mui/material/Checkbox'
+import ListItemText from '@mui/material/ListItemText'
+// import SaveIcon from '@mui/icons-material/Save'
+import WalletIcon from '@mui/icons-material/Wallet'
+import LoadingButton from '@mui/lab/LoadingButton'
+
+enum TradeMode {
+ Swap = 1,
+ Limit = 2,
+ TWAP = 3,
+}
+
+const ThemeOptions = [
+ { label: 'Auto', value: 'auto' },
+ { label: 'Light', value: 'light' },
+ { label: 'Dark', value: 'dark' },
+]
+
+const TradeModeOptions = [
+ { label: 'Swap', value: TradeMode.Swap },
+ { label: 'Limit', value: TradeMode.Limit },
+ { label: 'TWAP', value: TradeMode.TWAP },
+]
+
+const NetworkOptions = [
+ { chainID: 1, label: 'Ethereum' },
+ { chainID: 100, label: 'Gnosis Chain' },
+]
+
+const TokenOptions = ['COW', 'USDC']
+
+export function Configurator({ title }: { title: string }) {
+ // const theme = useTheme()
+ const { mode, toggleColorMode, setAutoMode } = React.useContext(ColorModeContext)
+
+ const [isDrawerOpen, setIsDrawerOpen] = React.useState(true)
+
+ const handleThemeChange = (event: SelectChangeEvent) => {
+ const selectedTheme = event.target.value
+ if (selectedTheme === 'auto') {
+ setAutoMode()
+ } else {
+ toggleColorMode()
+ }
+
+ const url = new URL(iframeURL)
+ url.searchParams.set('theme', selectedTheme)
+ setIframeURL(url.toString())
+ }
+
+ const [tradeModes, setTradeModes] = React.useState([TradeMode.Swap, TradeMode.Limit, TradeMode.TWAP])
+ const handleTradeModeChange = (event: SelectChangeEvent) => {
+ setTradeModes(event.target.value as TradeMode[])
+ }
+
+ const [network, setNetwork] = React.useState<{ chainID: number; label: string } | null>(NetworkOptions[0])
+ const [sellToken, setSellToken] = React.useState(TokenOptions[0])
+ const [sellTokenAmount, setSellTokenAmount] = React.useState(100000)
+ const [buyToken, setBuyToken] = React.useState(TokenOptions[0])
+ const [buyTokenAmount, setBuyTokenAmount] = React.useState(100000)
+
+ const [iframeURL, setIframeURL] = React.useState('')
+
+ const constructIframeURL = React.useCallback(() => {
+ if (network) {
+ return `https://swap-dev-git-widget-ui-6-cowswap.vercel.app/#/${network.chainID}/widget/swap/${sellToken}/${buyToken}?sellAmount=${sellTokenAmount}&buyAmount=${buyTokenAmount}&theme=${mode}`
+ }
+ return ''
+ }, [sellToken, buyToken, sellTokenAmount, buyTokenAmount, mode, network])
+
+ React.useEffect(() => {
+ setIframeURL(constructIframeURL())
+ }, [constructIframeURL, network])
+
+ const handleWidgetRefreshClick = () => {
+ const newIframeURL = constructIframeURL()
+ setIframeURL(newIframeURL)
+ }
+
+ return (
+
+
+
+ {title}
+
+
+ Wallet
+
+ }
+ variant="contained"
+ onClick={handleWidgetRefreshClick}
+ >
+ Connect
+
+
+ General
+
+
+ Theme
+
+
+
+
+ Trade Modes
+ }
+ renderValue={(selected) =>
+ (selected as number[])
+ .map((value) => {
+ const option = TradeModeOptions.find((option) => option.value === value)
+ return option ? option.label : ''
+ })
+ .join(', ')
+ }
+ >
+ {TradeModeOptions.map((option) => (
+
+ ))}
+
+
+
+ {
+ setNetwork(newValue || NetworkOptions[0])
+ }}
+ getOptionLabel={(option) => option.label}
+ id="controllable-states-network"
+ options={NetworkOptions}
+ size="small"
+ renderInput={(params) => }
+ />
+
+ Token selection
+
+ {
+ setSellToken(newValue)
+ }}
+ inputValue={sellToken || ''}
+ onInputChange={(event, newInputValue) => {
+ setSellToken(newInputValue)
+ }}
+ id="controllable-states-selling-token"
+ options={TokenOptions}
+ size="small"
+ renderInput={(params) => }
+ />
+
+ setSellTokenAmount(Number(e.target.value))}
+ size="small"
+ />
+
+ {
+ setBuyToken(newValue)
+ }}
+ inputValue={buyToken || ''}
+ onInputChange={(event, newInputValue) => {
+ setBuyTokenAmount(Number(newInputValue))
+ }}
+ id="buy-token-autocomplete"
+ options={TokenOptions}
+ renderInput={(params) => }
+ />
+
+ setBuyTokenAmount(Number(e.target.value))}
+ size="small"
+ />
+
+
+
+ {/* } variant="contained" onClick={handleWidgetRefreshClick}>
+ Refresh Widget
+ */}
+
+ setIsDrawerOpen(false)}>
+ Hide drawer
+
+
+
+
+
+
+
+ URL: {iframeURL}
+
+
+
+
+ )
+}
diff --git a/apps/widget-configurator/src/app/configurator/styled.ts b/apps/widget-configurator/src/app/configurator/styled.ts
new file mode 100644
index 0000000000..87b7d9a9a4
--- /dev/null
+++ b/apps/widget-configurator/src/app/configurator/styled.ts
@@ -0,0 +1,37 @@
+import { Theme } from '@mui/material/styles';
+
+export const DrawerStyled = (theme: Theme) => ({
+ width: '29rem',
+ flexShrink: 0,
+ '& .MuiDrawer-paper': {
+ width: '29rem',
+ boxSizing: 'border-box',
+ display: 'flex',
+ flexFlow: 'column wrap',
+ gap: '1.6rem',
+ height: '100%',
+ border: 0,
+ background: theme.palette.background.paper,
+ boxShadow: 'rgba(5, 43, 101, 0.06) 0 1.2rem 1.2rem',
+ padding: '1.6rem',
+ },
+});
+
+export const ContentStyled = {
+ display: 'flex',
+ justifyContent: 'center',
+ alignItems: 'center',
+ flexFlow: 'column wrap',
+ height: '100%',
+ width: 'auto',
+ flex: '1 1 auto',
+
+ '& > iframe': {
+ border: 0,
+ margin: '0 auto',
+ borderRadius: '1.6rem',
+ overflow: 'hidden',
+ },
+}
+
+export const WrapperStyled = { display: 'flex', flexFlow: 'row wrap', height: '100vh', width: '100%' }
diff --git a/apps/widget-configurator/src/assets/.gitkeep b/apps/widget-configurator/src/assets/.gitkeep
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/apps/widget-configurator/src/main.tsx b/apps/widget-configurator/src/main.tsx
new file mode 100644
index 0000000000..178d0abb35
--- /dev/null
+++ b/apps/widget-configurator/src/main.tsx
@@ -0,0 +1,149 @@
+import * as React from 'react'
+import { StrictMode } from 'react'
+import { ThemeProvider, createTheme, PaletteOptions } from '@mui/material/styles'
+import { CssBaseline, GlobalStyles, PaletteMode } from '@mui/material'
+import * as ReactDOM from 'react-dom/client'
+import App from './app/app'
+import useMediaQuery from '@mui/material/useMediaQuery'
+
+export const ColorModeContext = React.createContext({
+ mode: 'light' as PaletteMode,
+ toggleColorMode: () => {},
+ setAutoMode: () => {}
+});
+
+const globalStyles = {
+ 'html, input, textarea, button': {
+ fontFamily: "'Inter', sans-serif",
+ fontDisplay: 'fallback',
+ },
+ '@supports (font-variation-settings: normal)': {
+ 'html, input, textarea, button': {
+ fontFamily: "'Inter var', sans-serif",
+ },
+ },
+ 'html, body, a, button': {
+ margin: 0,
+ padding: 0,
+ },
+ 'html, body, #root': {
+ height: '100%',
+ width: '100%',
+ },
+ html: {
+ width: '100%',
+ margin: 0,
+ fontSize: '62.5%',
+ textRendering: 'geometricPrecision',
+ WebkitFontSmoothing: 'antialiased',
+ MozOsxFontSmoothing: 'grayscale',
+ boxSizing: 'border-box',
+ overscrollBehaviorY: 'none',
+ scrollBehavior: 'smooth',
+ fontVariant: 'none',
+ fontFeatureSettings: "'ss01' on, 'ss02' on, 'cv01' on, 'cv03' on",
+ WebkitTapHighlightColor: 'rgba(0, 0, 0, 0)',
+ background: 'linear-gradient(45deg,#EAE9FF 14.64%,#CAE9FF 85.36%)',
+ backgroundAttachment: 'fixed',
+ },
+}
+
+export enum ThemeMode {
+ Auto = 1,
+ Light = 2,
+ Dark = 3,
+}
+
+function MainApp() {
+ const prefersDarkMode = useMediaQuery('(prefers-color-scheme: dark)');
+ const [mode, setMode] = React.useState(prefersDarkMode ? 'dark' : 'light');
+
+ const colorMode = React.useMemo(
+ () => ({
+ mode,
+ toggleColorMode: () => {
+ setMode(prevMode => prevMode === 'light' ? 'dark' : 'light');
+ },
+ setAutoMode: () => {
+ setMode(prefersDarkMode ? 'dark' : 'light');
+ },
+ }),
+ [mode, prefersDarkMode]
+ );
+
+ const theme = React.useMemo(() => {
+ const commonTypography = {
+ htmlFontSize: 10,
+ button: {
+ textTransform: 'none' as const,
+ },
+ }
+
+ const palette: PaletteOptions =
+ mode === 'dark'
+ ? {
+ mode: 'dark' as PaletteMode,
+ tonalOffset: 0.2,
+ primary: {
+ main: 'rgb(202, 233, 255)',
+ },
+ secondary: {
+ main: 'rgb(39, 120, 242)',
+ },
+ text: {
+ primary: '#CAE9FF',
+ secondary: '#809ab1',
+ disabled: 'rgba(202,233,255,0.6)',
+ },
+ background: {
+ paper: 'rgb(12, 38, 75)',
+ default: 'rgb(12, 38, 75)',
+ },
+ cow: {
+ background: 'radial-gradient(50% 500px at 50% -6%, rgba(0, 41, 102, 0.7) 0%, rgb(7, 24, 50) 50%, rgb(6, 22, 45) 100%), radial-gradient(circle at -70% 50%, rgba(0, 43, 102, 0.7) 0px, transparent 50%) fixed'
+ }
+ }
+ : {
+ mode: 'light' as PaletteMode,
+ tonalOffset: 0.5,
+ primary: {
+ main: 'rgb(5, 43, 101)',
+ },
+ secondary: {
+ main: 'rgb(39, 120, 242)',
+ },
+ text: {
+ primary: 'rgb(12, 38, 75)',
+ },
+ background: {
+ default: '#CAE9FF',
+ paper: '#ffffff',
+ },
+ cow: {
+ background: 'linear-gradient(45deg, rgb(234, 233, 255) 14.64%, rgb(202, 233, 255) 85.36%) fixed'
+ }
+ }
+
+ return createTheme({
+ palette,
+ typography: commonTypography,
+ })
+ }, [mode])
+
+ return (
+
+
+
+
+
+
+
+ )
+}
+
+const root = ReactDOM.createRoot(document.getElementById('root') as HTMLElement)
+root.render(
+
+
+
+)
diff --git a/apps/widget-configurator/src/mui-theme-custom.d.ts b/apps/widget-configurator/src/mui-theme-custom.d.ts
new file mode 100644
index 0000000000..068c2c20a7
--- /dev/null
+++ b/apps/widget-configurator/src/mui-theme-custom.d.ts
@@ -0,0 +1,15 @@
+import '@mui/material/styles';
+
+declare module '@mui/material/styles' {
+ interface Palette {
+ cow: {
+ background: string; // You can use Palette['primary'] if it shares the same shape
+ };
+ }
+
+ interface PaletteOptions {
+ cow?: {
+ background: string; // You can use PaletteOptions['primary'] if it shares the same shape
+ };
+ }
+}
\ No newline at end of file
diff --git a/apps/widget-configurator/tsconfig.app.json b/apps/widget-configurator/tsconfig.app.json
new file mode 100644
index 0000000000..d00ef52c40
--- /dev/null
+++ b/apps/widget-configurator/tsconfig.app.json
@@ -0,0 +1,19 @@
+{
+ "extends": "./tsconfig.json",
+ "compilerOptions": {
+ "outDir": "../../dist/out-tsc",
+ "types": ["node", "vite/client"]
+ },
+ "files": ["../../node_modules/@nx/react/typings/cssmodule.d.ts", "../../node_modules/@nx/react/typings/image.d.ts"],
+ "exclude": [
+ "src/**/*.spec.ts",
+ "src/**/*.test.ts",
+ "src/**/*.spec.tsx",
+ "src/**/*.test.tsx",
+ "src/**/*.spec.js",
+ "src/**/*.test.js",
+ "src/**/*.spec.jsx",
+ "src/**/*.test.jsx"
+ ],
+ "include": ["src/**/*.js", "src/**/*.jsx", "src/**/*.ts", "src/**/*.tsx"]
+}
diff --git a/apps/widget-configurator/tsconfig.json b/apps/widget-configurator/tsconfig.json
new file mode 100644
index 0000000000..fdfab6c30f
--- /dev/null
+++ b/apps/widget-configurator/tsconfig.json
@@ -0,0 +1,21 @@
+{
+ "compilerOptions": {
+ "jsx": "react-jsx",
+ "allowJs": false,
+ "esModuleInterop": false,
+ "allowSyntheticDefaultImports": true,
+ "strict": true,
+ "types": ["vite/client", "vitest"]
+ },
+ "files": [],
+ "include": [],
+ "references": [
+ {
+ "path": "./tsconfig.app.json"
+ },
+ {
+ "path": "./tsconfig.spec.json"
+ }
+ ],
+ "extends": "../../tsconfig.base.json"
+}
diff --git a/apps/widget-configurator/tsconfig.spec.json b/apps/widget-configurator/tsconfig.spec.json
new file mode 100644
index 0000000000..1a35a5d745
--- /dev/null
+++ b/apps/widget-configurator/tsconfig.spec.json
@@ -0,0 +1,20 @@
+{
+ "extends": "./tsconfig.json",
+ "compilerOptions": {
+ "outDir": "../../dist/out-tsc",
+ "types": ["vitest/globals", "vitest/importMeta", "vite/client", "node"]
+ },
+ "include": [
+ "vite.config.ts",
+ "src/**/*.test.ts",
+ "src/**/*.spec.ts",
+ "src/**/*.test.tsx",
+ "src/**/*.spec.tsx",
+ "src/**/*.test.js",
+ "src/**/*.spec.js",
+ "src/**/*.test.jsx",
+ "src/**/*.spec.jsx",
+ "src/**/*.d.ts"
+ ],
+ "files": ["../../node_modules/@nx/react/typings/cssmodule.d.ts", "../../node_modules/@nx/react/typings/image.d.ts"]
+}
diff --git a/apps/widget-configurator/vite.config.ts b/apps/widget-configurator/vite.config.ts
new file mode 100644
index 0000000000..87d032afe9
--- /dev/null
+++ b/apps/widget-configurator/vite.config.ts
@@ -0,0 +1,43 @@
+///
+import { defineConfig } from 'vite'
+import react from '@vitejs/plugin-react'
+import viteTsConfigPaths from 'vite-tsconfig-paths'
+
+export default defineConfig({
+ cacheDir: '../../node_modules/.vite/widget-configurator',
+
+ server: {
+ port: 4200,
+ host: 'localhost',
+ },
+
+ preview: {
+ port: 4300,
+ host: 'localhost',
+ },
+
+ plugins: [
+ react(),
+ viteTsConfigPaths({
+ root: '../../',
+ }),
+ ],
+
+ // Uncomment this if you are using workers.
+ // worker: {
+ // plugins: [
+ // viteTsConfigPaths({
+ // root: '../../',
+ // }),
+ // ],
+ // },
+
+ test: {
+ globals: true,
+ cache: {
+ dir: '../../node_modules/.vitest',
+ },
+ environment: 'jsdom',
+ include: ['src/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'],
+ },
+})
diff --git a/libs/common-utils/src/jotai/atomWithPartialUpdate.ts b/libs/common-utils/src/jotai/atomWithPartialUpdate.ts
index 6b3fab7bed..6a864b413c 100644
--- a/libs/common-utils/src/jotai/atomWithPartialUpdate.ts
+++ b/libs/common-utils/src/jotai/atomWithPartialUpdate.ts
@@ -1,14 +1,15 @@
-import { atom, PrimitiveAtom, WritableAtom } from 'jotai'
+import { atom, PrimitiveAtom, SetStateAction, WritableAtom } from 'jotai'
export function atomWithPartialUpdate(anyAtom: PrimitiveAtom): {
atom: typeof anyAtom
- updateAtom: WritableAtom], void>
+ updateAtom: WritableAtom>], void>
} {
- const updateAtom = atom(null, (get, set, nextState: Partial) => {
+ const updateAtom = atom(null, (get, set, nextState: SetStateAction>) => {
set(anyAtom, () => {
const prevState = get(anyAtom)
+ const update = typeof nextState === 'function' ? nextState(prevState) : nextState
- return { ...prevState, ...nextState }
+ return { ...prevState, ...update }
})
})
diff --git a/package.json b/package.json
index 1a35988f55..6089c1c334 100644
--- a/package.json
+++ b/package.json
@@ -10,6 +10,7 @@
},
"scripts": {
"start": "nx run cowswap-frontend:serve",
+ "start-widget": "nx run widget-configurator:serve",
"build": "cross-env NODE_OPTIONS=--max-old-space-size=32768 nx build cowswap-frontend",
"ipfs:build": "PUBLIC_URL=\".\" yarn build",
"ipfs:publish": "npx ipfs-deploy build -p pinata -O",
@@ -55,6 +56,8 @@
"@cowprotocol/cow-sdk": "^3.0.0-rc.0",
"@cowprotocol/ethflowcontract": "cowprotocol/ethflowcontract.git#v1.0.0-artifacts",
"@davatar/react": "1.8.1",
+ "@emotion/react": "^11.11.1",
+ "@emotion/styled": "^11.11.0",
"@ethersproject/bignumber": "^5.7.0",
"@ethersproject/experimental": "^5.7.0",
"@ethvault/iframe-provider": "^0.1.10",
@@ -67,6 +70,9 @@
"@lingui/react": "^4.3.0",
"@metamask/eth-sig-util": "^5.0.2",
"@metamask/jazzicon": "^2.0.0",
+ "@mui/icons-material": "^5.14.13",
+ "@mui/lab": "^5.0.0-alpha.148",
+ "@mui/material": "^5.14.13",
"@popperjs/core": "^2.4.4",
"@reach/dialog": "^0.18.0",
"@reach/menu-button": "^0.18.0",
@@ -249,7 +255,7 @@
"ts-mockito": "^2.6.1",
"ts-node": "^10.9.1",
"typescript": "~5.1.3",
- "vite": "~4.3.9",
+ "vite": "^4.4.11",
"vite-plugin-babel-macros": "^1.0.6",
"vite-plugin-dts": "~2.3.0",
"vite-plugin-node-polyfills": "^0.12.0",
diff --git a/yarn.lock b/yarn.lock
index ba044c2b34..1dcdb33270 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -264,6 +264,13 @@
dependencies:
"@babel/types" "^7.22.5"
+"@babel/helper-module-imports@^7.16.7":
+ version "7.22.15"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0"
+ integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==
+ dependencies:
+ "@babel/types" "^7.22.15"
+
"@babel/helper-module-transforms@^7.22.5", "@babel/helper-module-transforms@^7.22.9":
version "7.22.9"
resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz#92dfcb1fbbb2bc62529024f72d942a8c97142129"
@@ -331,6 +338,11 @@
resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f"
integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==
+"@babel/helper-validator-identifier@^7.22.20":
+ version "7.22.20"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0"
+ integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==
+
"@babel/helper-validator-identifier@^7.22.5":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz#9544ef6a33999343c8740fa51350f30eeaaaf193"
@@ -1220,6 +1232,13 @@
dependencies:
regenerator-runtime "^0.13.11"
+"@babel/runtime@^7.18.3", "@babel/runtime@^7.23.1", "@babel/runtime@^7.8.7":
+ version "7.23.1"
+ resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.1.tgz#72741dc4d413338a91dcb044a86f3c0bc402646d"
+ integrity sha512-hC2v6p8ZSI/W0HUzh3V8C5g+NwSKzKPtJwSpTjwl0o297GP9+ZLQSkdvHz46CM3LqyoXxq+5G9komY+eSqSO0g==
+ dependencies:
+ regenerator-runtime "^0.14.0"
+
"@babel/template@^7.22.5", "@babel/template@^7.3.3", "@babel/template@^7.4.4":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.5.tgz#0c8c4d944509875849bd0344ff0050756eefc6ec"
@@ -1254,6 +1273,15 @@
"@babel/helper-validator-identifier" "^7.22.5"
to-fast-properties "^2.0.0"
+"@babel/types@^7.22.15":
+ version "7.23.0"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.0.tgz#8c1f020c9df0e737e4e247c0619f58c68458aaeb"
+ integrity sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==
+ dependencies:
+ "@babel/helper-string-parser" "^7.22.5"
+ "@babel/helper-validator-identifier" "^7.22.20"
+ to-fast-properties "^2.0.0"
+
"@bcoe/v8-coverage@^0.2.3":
version "0.2.3"
resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
@@ -1649,6 +1677,23 @@
mersenne-twister "^1.1.0"
react-blockies "^1.4.1"
+"@emotion/babel-plugin@^11.11.0":
+ version "11.11.0"
+ resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz#c2d872b6a7767a9d176d007f5b31f7d504bb5d6c"
+ integrity sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==
+ dependencies:
+ "@babel/helper-module-imports" "^7.16.7"
+ "@babel/runtime" "^7.18.3"
+ "@emotion/hash" "^0.9.1"
+ "@emotion/memoize" "^0.8.1"
+ "@emotion/serialize" "^1.1.2"
+ babel-plugin-macros "^3.1.0"
+ convert-source-map "^1.5.0"
+ escape-string-regexp "^4.0.0"
+ find-root "^1.1.0"
+ source-map "^0.5.7"
+ stylis "4.2.0"
+
"@emotion/cache@^10.0.27":
version "10.0.29"
resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-10.0.29.tgz#87e7e64f412c060102d589fe7c6dc042e6f9d1e0"
@@ -1659,6 +1704,17 @@
"@emotion/utils" "0.11.3"
"@emotion/weak-memoize" "0.2.5"
+"@emotion/cache@^11.11.0":
+ version "11.11.0"
+ resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.11.0.tgz#809b33ee6b1cb1a625fef7a45bc568ccd9b8f3ff"
+ integrity sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==
+ dependencies:
+ "@emotion/memoize" "^0.8.1"
+ "@emotion/sheet" "^1.2.2"
+ "@emotion/utils" "^1.2.1"
+ "@emotion/weak-memoize" "^0.3.1"
+ stylis "4.2.0"
+
"@emotion/core@^10.0.0":
version "10.3.1"
resolved "https://registry.yarnpkg.com/@emotion/core/-/core-10.3.1.tgz#4021b6d8b33b3304d48b0bb478485e7d7421c69d"
@@ -1685,6 +1741,11 @@
resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.8.0.tgz#bbbff68978fefdbe68ccb533bc8cbe1d1afb5413"
integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==
+"@emotion/hash@^0.9.1":
+ version "0.9.1"
+ resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.1.tgz#4ffb0055f7ef676ebc3a5a91fb621393294e2f43"
+ integrity sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==
+
"@emotion/is-prop-valid@0.8.8", "@emotion/is-prop-valid@^0.8.1":
version "0.8.8"
resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz#db28b1c4368a259b60a97311d6a952d4fd01ac1a"
@@ -1692,7 +1753,7 @@
dependencies:
"@emotion/memoize" "0.7.4"
-"@emotion/is-prop-valid@^1.1.0":
+"@emotion/is-prop-valid@^1.1.0", "@emotion/is-prop-valid@^1.2.1":
version "1.2.1"
resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz#23116cf1ed18bfeac910ec6436561ecb1a3885cc"
integrity sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==
@@ -1714,6 +1775,20 @@
resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.1.tgz#c1ddb040429c6d21d38cc945fe75c818cfb68e17"
integrity sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==
+"@emotion/react@^11.11.1":
+ version "11.11.1"
+ resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.11.1.tgz#b2c36afac95b184f73b08da8c214fdf861fa4157"
+ integrity sha512-5mlW1DquU5HaxjLkfkGN1GA/fvVGdyHURRiX/0FHl2cfIfRxSOfmxEH5YS43edp0OldZrZ+dkBKbngxcNCdZvA==
+ dependencies:
+ "@babel/runtime" "^7.18.3"
+ "@emotion/babel-plugin" "^11.11.0"
+ "@emotion/cache" "^11.11.0"
+ "@emotion/serialize" "^1.1.2"
+ "@emotion/use-insertion-effect-with-fallbacks" "^1.0.1"
+ "@emotion/utils" "^1.2.1"
+ "@emotion/weak-memoize" "^0.3.1"
+ hoist-non-react-statics "^3.3.1"
+
"@emotion/serialize@^0.11.15", "@emotion/serialize@^0.11.16":
version "0.11.16"
resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-0.11.16.tgz#dee05f9e96ad2fb25a5206b6d759b2d1ed3379ad"
@@ -1725,11 +1800,27 @@
"@emotion/utils" "0.11.3"
csstype "^2.5.7"
+"@emotion/serialize@^1.1.2":
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.1.2.tgz#017a6e4c9b8a803bd576ff3d52a0ea6fa5a62b51"
+ integrity sha512-zR6a/fkFP4EAcCMQtLOhIgpprZOwNmCldtpaISpvz348+DP4Mz8ZoKaGGCQpbzepNIUWbq4w6hNZkwDyKoS+HA==
+ dependencies:
+ "@emotion/hash" "^0.9.1"
+ "@emotion/memoize" "^0.8.1"
+ "@emotion/unitless" "^0.8.1"
+ "@emotion/utils" "^1.2.1"
+ csstype "^3.0.2"
+
"@emotion/sheet@0.9.4":
version "0.9.4"
resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-0.9.4.tgz#894374bea39ec30f489bbfc3438192b9774d32e5"
integrity sha512-zM9PFmgVSqBw4zL101Q0HrBVTGmpAxFZH/pYx/cjJT5advXguvcgjHFTCaIO3enL/xr89vK2bh0Mfyj9aa0ANA==
+"@emotion/sheet@^1.2.2":
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.2.2.tgz#d58e788ee27267a14342303e1abb3d508b6d0fec"
+ integrity sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==
+
"@emotion/styled-base@^10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@emotion/styled-base/-/styled-base-10.3.0.tgz#9aa2c946100f78b47316e4bc6048321afa6d4e36"
@@ -1748,6 +1839,18 @@
"@emotion/styled-base" "^10.3.0"
babel-plugin-emotion "^10.0.27"
+"@emotion/styled@^11.11.0":
+ version "11.11.0"
+ resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-11.11.0.tgz#26b75e1b5a1b7a629d7c0a8b708fbf5a9cdce346"
+ integrity sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng==
+ dependencies:
+ "@babel/runtime" "^7.18.3"
+ "@emotion/babel-plugin" "^11.11.0"
+ "@emotion/is-prop-valid" "^1.2.1"
+ "@emotion/serialize" "^1.1.2"
+ "@emotion/use-insertion-effect-with-fallbacks" "^1.0.1"
+ "@emotion/utils" "^1.2.1"
+
"@emotion/stylis@0.8.5", "@emotion/stylis@^0.8.4":
version "0.8.5"
resolved "https://registry.yarnpkg.com/@emotion/stylis/-/stylis-0.8.5.tgz#deacb389bd6ee77d1e7fcaccce9e16c5c7e78e04"
@@ -1758,16 +1861,36 @@
resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed"
integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==
+"@emotion/unitless@^0.8.1":
+ version "0.8.1"
+ resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.8.1.tgz#182b5a4704ef8ad91bde93f7a860a88fd92c79a3"
+ integrity sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==
+
+"@emotion/use-insertion-effect-with-fallbacks@^1.0.1":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz#08de79f54eb3406f9daaf77c76e35313da963963"
+ integrity sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==
+
"@emotion/utils@0.11.3":
version "0.11.3"
resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-0.11.3.tgz#a759863867befa7e583400d322652a3f44820924"
integrity sha512-0o4l6pZC+hI88+bzuaX/6BgOvQVhbt2PfmxauVaYOGgbsAw14wdKyvMCZXnsnsHys94iadcF+RG/wZyx6+ZZBw==
+"@emotion/utils@^1.2.1":
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.2.1.tgz#bbab58465738d31ae4cb3dbb6fc00a5991f755e4"
+ integrity sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==
+
"@emotion/weak-memoize@0.2.5":
version "0.2.5"
resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46"
integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==
+"@emotion/weak-memoize@^0.3.1":
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz#d0fce5d07b0620caa282b5131c297bb60f9d87e6"
+ integrity sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==
+
"@esbuild/android-arm64@0.17.19":
version "0.17.19"
resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz#bafb75234a5d3d1b690e7c2956a599345e84a2fd"
@@ -2431,6 +2554,33 @@
dependencies:
eventemitter3 "^4.0.0"
+"@floating-ui/core@^1.4.2":
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.5.0.tgz#5c05c60d5ae2d05101c3021c1a2a350ddc027f8c"
+ integrity sha512-kK1h4m36DQ0UHGj5Ah4db7R0rHemTqqO0QLvUqi1/mUUp3LuAWbWxdxSIf/XsnH9VS6rRVPLJCncjRzUvyCLXg==
+ dependencies:
+ "@floating-ui/utils" "^0.1.3"
+
+"@floating-ui/dom@^1.5.1":
+ version "1.5.3"
+ resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.5.3.tgz#54e50efcb432c06c23cd33de2b575102005436fa"
+ integrity sha512-ClAbQnEqJAKCJOEbbLo5IUlZHkNszqhuxS4fHAVxRPXPya6Ysf2G8KypnYcOTpx6I8xcgF9bbHb6g/2KpbV8qA==
+ dependencies:
+ "@floating-ui/core" "^1.4.2"
+ "@floating-ui/utils" "^0.1.3"
+
+"@floating-ui/react-dom@^2.0.2":
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-2.0.2.tgz#fab244d64db08e6bed7be4b5fcce65315ef44d20"
+ integrity sha512-5qhlDvjaLmAst/rKb3VdlCinwTF4EYMiVxuuc/HVUjs46W0zgtbMmAZ1UTsDrRTxRmUEzl92mOtWbeeXL26lSQ==
+ dependencies:
+ "@floating-ui/dom" "^1.5.1"
+
+"@floating-ui/utils@^0.1.3":
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.1.6.tgz#22958c042e10b67463997bd6ea7115fe28cbcaf9"
+ integrity sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A==
+
"@fontsource/ibm-plex-mono@^4.5.1":
version "4.5.13"
resolved "https://registry.yarnpkg.com/@fontsource/ibm-plex-mono/-/ibm-plex-mono-4.5.13.tgz#f91559ab3b5074a8e2db75c0370b9640e80c99b2"
@@ -3391,6 +3541,123 @@
"@motionone/dom" "^10.16.2"
tslib "^2.3.1"
+"@mui/base@5.0.0-beta.19":
+ version "5.0.0-beta.19"
+ resolved "https://registry.yarnpkg.com/@mui/base/-/base-5.0.0-beta.19.tgz#c1776e91b6a377c1a6a0079b5d6fec6e07a3bf9c"
+ integrity sha512-maNBgAscddyPNzFZQUJDF/puxM27Li+NqSBsr/lAP8TLns2VvWS2SoL3OKFOIoRnAMKGY/Ic6Aot6gCYeQnssA==
+ dependencies:
+ "@babel/runtime" "^7.23.1"
+ "@floating-ui/react-dom" "^2.0.2"
+ "@mui/types" "^7.2.6"
+ "@mui/utils" "^5.14.13"
+ "@popperjs/core" "^2.11.8"
+ clsx "^2.0.0"
+ prop-types "^15.8.1"
+
+"@mui/core-downloads-tracker@^5.14.13":
+ version "5.14.13"
+ resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-5.14.13.tgz#4b87e28aec6e568613683517ce4b7a7f75fa681a"
+ integrity sha512-3ZUbzcH4yloLKlV6Y+S0Edn2wef9t+EGHSfEkwVCn8E0ULdshifEFgfEroKRegQifDIwcKS/ofccxuZ8njTAYg==
+
+"@mui/icons-material@^5.14.13":
+ version "5.14.13"
+ resolved "https://registry.yarnpkg.com/@mui/icons-material/-/icons-material-5.14.13.tgz#d5169f804cc97c86282e85b5b7fdb523fb04689d"
+ integrity sha512-fxKE1UrjI4xVxHe9IAGuVQZrc18dSBJg0P+Sqi2SZmcDUCShmgRq6Jq7l7GduvuMIkOSqAJdNgLtXmtmZkjtLg==
+ dependencies:
+ "@babel/runtime" "^7.23.1"
+
+"@mui/lab@^5.0.0-alpha.148":
+ version "5.0.0-alpha.148"
+ resolved "https://registry.yarnpkg.com/@mui/lab/-/lab-5.0.0-alpha.148.tgz#3cd05cabedc11e96022f77e365e1847c4e669dfb"
+ integrity sha512-FfgHSYO59tznwMkn6FAjuowU1KteTV2AQRD7NsZq82TpiRBpBFkDtcsap02uf+rRVdwgF/yokdYLtVJ96snDGA==
+ dependencies:
+ "@babel/runtime" "^7.23.1"
+ "@mui/base" "5.0.0-beta.19"
+ "@mui/system" "^5.14.13"
+ "@mui/types" "^7.2.6"
+ "@mui/utils" "^5.14.13"
+ "@mui/x-tree-view" "6.0.0-alpha.1"
+ clsx "^2.0.0"
+ prop-types "^15.8.1"
+
+"@mui/material@^5.14.13":
+ version "5.14.13"
+ resolved "https://registry.yarnpkg.com/@mui/material/-/material-5.14.13.tgz#d2df8270cafaa0cae595e843a01e8a9047a05e8e"
+ integrity sha512-iPEFwhoVG789UVsXX4gqd1eJUlcLW1oceqwJYQN8Z4MpcAKfL9Lv3fda65AwG7pQ5lf+d7IbHzm4m48SWZxI2g==
+ dependencies:
+ "@babel/runtime" "^7.23.1"
+ "@mui/base" "5.0.0-beta.19"
+ "@mui/core-downloads-tracker" "^5.14.13"
+ "@mui/system" "^5.14.13"
+ "@mui/types" "^7.2.6"
+ "@mui/utils" "^5.14.13"
+ "@types/react-transition-group" "^4.4.7"
+ clsx "^2.0.0"
+ csstype "^3.1.2"
+ prop-types "^15.8.1"
+ react-is "^18.2.0"
+ react-transition-group "^4.4.5"
+
+"@mui/private-theming@^5.14.13":
+ version "5.14.13"
+ resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-5.14.13.tgz#10cb55a6e2caaf568dfaae894969a933c037da80"
+ integrity sha512-5EFqk4tqiSwPguj4NW/6bUf4u1qoUWXy9lrKfNh9H6oAohM+Ijv/7qSxFjnxPGBctj469/Sc5aKAR35ILBKZLQ==
+ dependencies:
+ "@babel/runtime" "^7.23.1"
+ "@mui/utils" "^5.14.13"
+ prop-types "^15.8.1"
+
+"@mui/styled-engine@^5.14.13":
+ version "5.14.13"
+ resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-5.14.13.tgz#4ab4ef7d86ffe8709bdce4b8b2e3dba9090da199"
+ integrity sha512-1ff/egFQl26hiwcUtCMKAkp4Sgqpm3qIewmXq+GN27fb44lDIACquehMFBuadOjceOFmbIXbayzbA46ZyqFYzA==
+ dependencies:
+ "@babel/runtime" "^7.23.1"
+ "@emotion/cache" "^11.11.0"
+ csstype "^3.1.2"
+ prop-types "^15.8.1"
+
+"@mui/system@^5.14.13":
+ version "5.14.13"
+ resolved "https://registry.yarnpkg.com/@mui/system/-/system-5.14.13.tgz#6c7a3cb28e45e3b66eb162ee5b292a6cf80efb8e"
+ integrity sha512-+5+Dx50lG4csbx2sGjrKLozXQJeCpJ4dIBZolyFLkZ+XphD1keQWouLUvJkPQ3MSglLLKuD37pp52YjMncZMEQ==
+ dependencies:
+ "@babel/runtime" "^7.23.1"
+ "@mui/private-theming" "^5.14.13"
+ "@mui/styled-engine" "^5.14.13"
+ "@mui/types" "^7.2.6"
+ "@mui/utils" "^5.14.13"
+ clsx "^2.0.0"
+ csstype "^3.1.2"
+ prop-types "^15.8.1"
+
+"@mui/types@^7.2.6":
+ version "7.2.6"
+ resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.2.6.tgz#d72b9e9eb0032e107e76033932d65c3f731d2608"
+ integrity sha512-7sjLQrUmBwufm/M7jw/quNiPK/oor2+pGUQP2CULRcFCArYTq78oJ3D5esTaL0UMkXKJvDqXn6Ike69yAOBQng==
+
+"@mui/utils@^5.14.13", "@mui/utils@^5.14.3":
+ version "5.14.13"
+ resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.14.13.tgz#42c352b342da90b44a29a83d3dbda6ee1e56a0f8"
+ integrity sha512-2AFpyXWw7uDCIqRu7eU2i/EplZtks5LAMzQvIhC79sPV9IhOZU2qwOWVnPtdctRXiQJOAaXulg+A37pfhEueQw==
+ dependencies:
+ "@babel/runtime" "^7.23.1"
+ "@types/prop-types" "^15.7.7"
+ prop-types "^15.8.1"
+ react-is "^18.2.0"
+
+"@mui/x-tree-view@6.0.0-alpha.1":
+ version "6.0.0-alpha.1"
+ resolved "https://registry.yarnpkg.com/@mui/x-tree-view/-/x-tree-view-6.0.0-alpha.1.tgz#fe499f8c43c01d28aca95cfb17491746ffcc3080"
+ integrity sha512-JUG3HmBrmGEALbCFg1b+i7h726e1dWYZs4db3syO1j+Q++E3nbvE4Lehp5yGTFm+8esH0Tny50tuJaa4WX6VSA==
+ dependencies:
+ "@babel/runtime" "^7.22.6"
+ "@mui/utils" "^5.14.3"
+ "@types/react-transition-group" "^4.4.6"
+ clsx "^2.0.0"
+ prop-types "^15.8.1"
+ react-transition-group "^4.4.5"
+
"@multiformats/base-x@^4.0.1":
version "4.0.1"
resolved "https://registry.yarnpkg.com/@multiformats/base-x/-/base-x-4.0.1.tgz#95ff0fa58711789d53aefb2590a8b7a4e715d121"
@@ -3959,7 +4226,7 @@
resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.21.tgz#5de5a2385a35309427f6011992b544514d559aa1"
integrity sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==
-"@popperjs/core@^2.4.4":
+"@popperjs/core@^2.11.8", "@popperjs/core@^2.4.4":
version "2.11.8"
resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f"
integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==
@@ -6139,6 +6406,11 @@
resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf"
integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==
+"@types/prop-types@^15.7.7":
+ version "15.7.8"
+ resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.8.tgz#805eae6e8f41bd19e88917d2ea200dc992f405d3"
+ integrity sha512-kMpQpfZKSCBqltAJwskgePRaYRFukDkm1oItcAbC3gNELR20XIBcN9VRgg4+m8DKsTfkWeA4m4Imp4DDuWy7FQ==
+
"@types/q@^1.5.1":
version "1.5.5"
resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.5.tgz#75a2a8e7d8ab4b230414505d92335d1dcb53a6df"
@@ -6215,6 +6487,13 @@
"@types/history" "^4.7.11"
"@types/react" "*"
+"@types/react-transition-group@^4.4.6", "@types/react-transition-group@^4.4.7":
+ version "4.4.7"
+ resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.7.tgz#bf69f269d74aa78b99097673ca6dd6824a68ef1c"
+ integrity sha512-ICCyBl5mvyqYp8Qeq9B5G/fyBSRC0zx3XM3sCC6KkcMsNeAHqXBKkmat4GqdJET5jtYUpZXrxI5flve5qhi2Eg==
+ dependencies:
+ "@types/react" "*"
+
"@types/react-virtualized-auto-sizer@^1.0.1":
version "1.0.1"
resolved "https://registry.yarnpkg.com/@types/react-virtualized-auto-sizer/-/react-virtualized-auto-sizer-1.0.1.tgz#b3187dae1dfc4c15880c9cfc5b45f2719ea6ebd4"
@@ -9207,6 +9486,11 @@ clsx@^1.1.0:
resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12"
integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==
+clsx@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.0.0.tgz#12658f3fd98fafe62075595a5c30e43d18f3d00b"
+ integrity sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==
+
co@^4.6.0:
version "4.6.0"
resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
@@ -9969,7 +10253,7 @@ csstype@^2.5.7:
resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.21.tgz#2efb85b7cc55c80017c66a5ad7cbd931fda3a90e"
integrity sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==
-csstype@^3.0.2:
+csstype@^3.0.2, csstype@^3.1.2:
version "3.1.2"
resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b"
integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==
@@ -10705,6 +10989,14 @@ dom-converter@^0.2.0:
dependencies:
utila "~0.4"
+dom-helpers@^5.0.1:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902"
+ integrity sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==
+ dependencies:
+ "@babel/runtime" "^7.8.7"
+ csstype "^3.0.2"
+
dom-serializer@0:
version "0.2.2"
resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51"
@@ -11171,7 +11463,7 @@ es6-symbol@^3.1.1, es6-symbol@^3.1.3:
d "^1.0.1"
ext "^1.1.2"
-esbuild@^0.17.10, esbuild@^0.17.5:
+esbuild@^0.17.10:
version "0.17.19"
resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.17.19.tgz#087a727e98299f0462a3d0bcdd9cd7ff100bd955"
integrity sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==
@@ -13138,7 +13430,7 @@ hmac-drbg@^1.0.1:
minimalistic-assert "^1.0.0"
minimalistic-crypto-utils "^1.0.1"
-hoist-non-react-statics@^3.0.0, hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.2:
+hoist-non-react-statics@^3.0.0, hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.1, hoist-non-react-statics@^3.3.2:
version "3.3.2"
resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45"
integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==
@@ -18841,6 +19133,15 @@ postcss@^8.3.5, postcss@^8.4.21, postcss@^8.4.23, postcss@^8.4.26, postcss@^8.4.
picocolors "^1.0.0"
source-map-js "^1.0.2"
+postcss@^8.4.27:
+ version "8.4.31"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d"
+ integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==
+ dependencies:
+ nanoid "^3.3.6"
+ picocolors "^1.0.0"
+ source-map-js "^1.0.2"
+
preact@^10.5.9:
version "10.16.0"
resolved "https://registry.yarnpkg.com/preact/-/preact-10.16.0.tgz#68a06d70b191b8a313ea722d61e09c6b2a79a37e"
@@ -19659,6 +19960,16 @@ react-style-singleton@^2.1.0, react-style-singleton@^2.2.1:
invariant "^2.2.4"
tslib "^2.0.0"
+react-transition-group@^4.4.5:
+ version "4.4.5"
+ resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.5.tgz#e53d4e3f3344da8521489fbef8f2581d42becdd1"
+ integrity sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==
+ dependencies:
+ "@babel/runtime" "^7.5.5"
+ dom-helpers "^5.0.1"
+ loose-envify "^1.4.0"
+ prop-types "^15.6.2"
+
react-virtualized-auto-sizer@^1.0.2:
version "1.0.20"
resolved "https://registry.yarnpkg.com/react-virtualized-auto-sizer/-/react-virtualized-auto-sizer-1.0.20.tgz#d9a907253a7c221c52fa57dc775a6ef40c182645"
@@ -19859,6 +20170,11 @@ regenerator-runtime@^0.13.11, regenerator-runtime@^0.13.3, regenerator-runtime@^
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9"
integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==
+regenerator-runtime@^0.14.0:
+ version "0.14.0"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45"
+ integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==
+
regenerator-transform@^0.15.1:
version "0.15.1"
resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.1.tgz#f6c4e99fc1b4591f780db2586328e4d9a9d8dc56"
@@ -20264,13 +20580,20 @@ rollup@^2.43.1:
optionalDependencies:
fsevents "~2.3.2"
-rollup@^3.21.0, rollup@^3.25.2:
+rollup@^3.25.2:
version "3.27.0"
resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.27.0.tgz#15bd07e2e1cbfa9255bf6a3f04a432621c2f3550"
integrity sha512-aOltLCrYZ0FhJDm7fCqwTjIUEVjWjcydKBV/Zeid6Mn8BWgDCUBBWT5beM5ieForYNo/1ZHuGJdka26kvQ3Gzg==
optionalDependencies:
fsevents "~2.3.2"
+rollup@^3.27.1:
+ version "3.29.4"
+ resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.29.4.tgz#4d70c0f9834146df8705bfb69a9a19c9e1109981"
+ integrity sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==
+ optionalDependencies:
+ fsevents "~2.3.2"
+
rpc-websockets@^7.5.1:
version "7.5.1"
resolved "https://registry.yarnpkg.com/rpc-websockets/-/rpc-websockets-7.5.1.tgz#e0a05d525a97e7efc31a0617f093a13a2e10c401"
@@ -21363,6 +21686,11 @@ stylehacks@^5.1.1:
browserslist "^4.21.4"
postcss-selector-parser "^6.0.4"
+stylis@4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.2.0.tgz#79daee0208964c8fe695a42fcffcac633a211a51"
+ integrity sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==
+
sucrase@^3.32.0:
version "3.34.0"
resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.34.0.tgz#1e0e2d8fcf07f8b9c3569067d92fbd8690fb576f"
@@ -22780,14 +23108,14 @@ vite-tsconfig-paths@~4.2.0:
optionalDependencies:
fsevents "~2.3.2"
-vite@~4.3.9:
- version "4.3.9"
- resolved "https://registry.yarnpkg.com/vite/-/vite-4.3.9.tgz#db896200c0b1aa13b37cdc35c9e99ee2fdd5f96d"
- integrity sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==
+vite@^4.4.11:
+ version "4.4.11"
+ resolved "https://registry.yarnpkg.com/vite/-/vite-4.4.11.tgz#babdb055b08c69cfc4c468072a2e6c9ca62102b0"
+ integrity sha512-ksNZJlkcU9b0lBwAGZGGaZHCMqHsc8OpgtoYhsQ4/I2v5cnpmmmqe5pM4nv/4Hn6G/2GhTdj0DhZh2e+Er1q5A==
dependencies:
- esbuild "^0.17.5"
- postcss "^8.4.23"
- rollup "^3.21.0"
+ esbuild "^0.18.10"
+ postcss "^8.4.27"
+ rollup "^3.27.1"
optionalDependencies:
fsevents "~2.3.2"