diff --git a/.codecov.yml b/.codecov.yml
new file mode 100644
index 0000000000..a125444121
--- /dev/null
+++ b/.codecov.yml
@@ -0,0 +1,21 @@
+coverage:
+ precision: 2
+ round: down
+ range: '50...85' # Will lift this number as coverage increases
+
+ status:
+ project:
+ default:
+ # basic
+ target: auto
+ threshold: 1%
+ base: auto
+ patch:
+ default:
+ # basic
+ target: 80%
+ threshold: 1%
+ base: auto
+
+ignore:
+ - 'packages/sdk/.*' # Waiting for sdk tests
diff --git a/.github/workflows/jest.yml b/.github/workflows/jest.yml
new file mode 100644
index 0000000000..9cb5ac80b3
--- /dev/null
+++ b/.github/workflows/jest.yml
@@ -0,0 +1,42 @@
+name: 'Jest'
+on:
+ push:
+ branches:
+ - master
+ pull_request:
+
+jobs:
+ sentry_release:
+ name: Jest tests
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v3
+ with:
+ fetch-depth: 0
+
+ - name: Setup Node.js environment
+ uses: actions/setup-node@v3
+ with:
+ node-version: 16.x
+
+ - uses: pnpm/action-setup@v2
+ name: Install pnpm
+ id: pnpm-install
+ with:
+ version: 8
+ run_install: false
+
+ - name: Install dependencies
+ run: pnpm i
+
+ - name: Run tests
+ run: cd packages/app && pnpm run test:jest
+ env:
+ NEXT_PUBLIC_WALLETCONNECT_V2_ID: ${{ secrets.NEXT_PUBLIC_WALLETCONNECT_V2_ID }}
+
+ - name: Upload coverage to codecov.io
+ uses: codecov/codecov-action@v3
+ env:
+ CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
diff --git a/.github/workflows/sentry.yml b/.github/workflows/sentry.yml
index f7cfd19ff1..87a2f06cba 100644
--- a/.github/workflows/sentry.yml
+++ b/.github/workflows/sentry.yml
@@ -29,6 +29,8 @@ jobs:
- name: Build code
run: pnpm i && cd packages/app && pnpm build
+ env:
+ NEXT_PUBLIC_WALLETCONNECT_V2_ID: ${{ secrets.NEXT_PUBLIC_WALLETCONNECT_V2_ID }}
- name: Create Sentry release
uses: getsentry/action-release@v1
diff --git a/package.json b/package.json
index ea3df1643d..c60fa0e5ac 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "kwenta",
- "version": "7.3.3",
+ "version": "7.3.4",
"description": "Kwenta",
"main": "index.js",
"scripts": {
@@ -32,9 +32,9 @@
]
},
"devDependencies": {
- "@typescript-eslint/eslint-plugin": "5.60.1",
- "@typescript-eslint/parser": "5.60.1",
- "eslint": "8.43.0",
+ "@typescript-eslint/eslint-plugin": "5.61.0",
+ "@typescript-eslint/parser": "5.61.0",
+ "eslint": "8.44.0",
"eslint-config-prettier": "8.8.0",
"eslint-config-react-app": "7.0.1",
"eslint-plugin-cypress": "2.13.3",
diff --git a/packages/app/__tests__/pages/market.test.tsx b/packages/app/__tests__/pages/market.test.tsx
deleted file mode 100644
index 805bd15dd2..0000000000
--- a/packages/app/__tests__/pages/market.test.tsx
+++ /dev/null
@@ -1,57 +0,0 @@
-import { render } from '@testing-library/react'
-
-import Market from 'pages/market'
-
-import { TEST_ADDR } from '../../testing/unit/constants'
-import mockConnector from '../../testing/unit/mocks/mockConnector'
-import MockProviders from '../../testing/unit/mocks/MockProviders'
-import { mockGrapqhlRequest, mockReactQuery } from '../../testing/unit/mocks/mockQueries'
-
-describe('Futures market page - cross margin', () => {
- beforeAll(() => {
- // TODO: remove this when we return to writing tests
- jest.spyOn(console, 'error').mockImplementation(() => {})
- mockReactQuery()
- })
- test('Displays cross margin not available when unsupported network', async () => {
- mockGrapqhlRequest({ crossMarginAccounts: [] })
- mockConnector({ network: { id: 1, name: 'ethereum' } })
-
- const { findAllByTestId } = render(
-
-
-
- )
-
- const components = await findAllByTestId('cross-margin-unsupported-network')
- // Mobile and Desktop both get rendered
- expect(components.length).toEqual(2)
- })
- test('Displays cross margin onboard prompt when no cross margin account', async () => {
- mockGrapqhlRequest({ crossMarginAccounts: [] })
- mockConnector()
-
- const { findAllByTestId } = render(
-
-
-
- )
-
- const components = await findAllByTestId('cross-margin-create-account')
- // Mobile and Desktop both get rendered
- expect(components.length).toEqual(2)
- })
- test('Trade panel input is disabled when wallet not connected', async () => {
- mockGrapqhlRequest({ crossMarginAccounts: [{ id: TEST_ADDR }] })
- mockConnector()
-
- const { findByTestId } = render(
-
-
-
- )
-
- const component = await findByTestId('set-order-size-amount-susd-desktop')
- expect(component.hasAttribute('disabled'))
- })
-})
diff --git a/packages/app/jest.config.js b/packages/app/jest.config.js
index 9fb8226eaa..8236e81b7e 100644
--- a/packages/app/jest.config.js
+++ b/packages/app/jest.config.js
@@ -1,25 +1,30 @@
-const nextJest = require('next/jest');
+const nextJest = require('next/jest')
-const createJestConfig = nextJest({ dir: './' });
+const createJestConfig = nextJest({ dir: './' })
const customJestConfig = {
- roots: [''],
- modulePaths: [''],
- moduleDirectories: ['node_modules'],
+ roots: ['', 'src'],
+ modulePaths: ['', 'src'],
+ moduleDirectories: ['node_modules', 'src'],
+ moduleNameMapper: {
+ '@kwenta/sdk/(.+)$': '/../sdk/dist/$1',
+ '@kwenta/sdk': '/../sdk/dist/index.js',
+ },
globalSetup: './testing/unit/setup/global.js',
setupFilesAfterEnv: ['./testing/unit/setup/setup.js'],
testEnvironment: 'jest-environment-jsdom',
transform: {
'^.+\\.(svg)$': `jest-transformer-svg`,
},
-};
+}
const getCustomConfig = async () => {
// Delete next js module name mapper transform and use above svg
// transformer to avoid errors with svg and styled components
- const config = await createJestConfig(customJestConfig)();
- delete config['moduleNameMapper']['^.+\\.(svg)$'];
- return config;
-};
+ const config = await createJestConfig(customJestConfig)()
+ delete config['moduleNameMapper']['^.+\\.(svg)$']
+ config.transformIgnorePatterns = []
+ return config
+}
-module.exports = getCustomConfig();
+module.exports = getCustomConfig()
diff --git a/packages/app/package.json b/packages/app/package.json
index 881e58f5f8..2382c454ff 100644
--- a/packages/app/package.json
+++ b/packages/app/package.json
@@ -1,6 +1,6 @@
{
"name": "@kwenta/app",
- "version": "7.3.3",
+ "version": "7.3.4",
"scripts": {
"dev": "next",
"build": "next build",
@@ -8,7 +8,7 @@
"export": "next export",
"check-types": "tsc --noEmit",
"jest-preview": "jest-preview",
- "test:unit": "jest --coverage --detectOpenHandles",
+ "test:jest": "jest --coverage --detectOpenHandles",
"test:e2e": "start-server-and-test 'pnpm build && pnpm start' http-get://localhost:3000 'synpress run'",
"test:e2e:only:tests": "synpress run",
"test:e2e:open:testrunner": "synpress open",
@@ -43,7 +43,7 @@
"cors": "^2.8.5",
"crypto-browserify": "^3.12.0",
"date-fns": "2.21.3",
- "date-fns-tz": "1.3.7",
+ "date-fns-tz": "2.0.0",
"echarts": "5.4.2",
"eslint-config-next": "^13.4.6",
"ethcall": "4.7.2",
@@ -82,10 +82,9 @@
"zrender": "^5.4.3"
},
"devDependencies": {
- "@microsoft/eslint-formatter-sarif": "2.1.7",
"@next/eslint-plugin-next": "13.4.7",
"@storybook/addon-actions": "7.0.24",
- "@storybook/addon-essentials": "7.0.24",
+ "@storybook/addon-essentials": "7.0.25",
"@storybook/addon-links": "7.0.24",
"@storybook/nextjs": "7.0.24",
"@storybook/react": "7.0.24",
diff --git a/packages/app/src/__tests__/pages/market.test.tsx b/packages/app/src/__tests__/pages/market.test.tsx
new file mode 100644
index 0000000000..6cfeb239a9
--- /dev/null
+++ b/packages/app/src/__tests__/pages/market.test.tsx
@@ -0,0 +1,196 @@
+import { FuturesMarket } from '@kwenta/sdk/dist/types'
+import { wei } from '@synthetixio/wei'
+import { fireEvent, render, waitFor } from '@testing-library/react'
+import { ReactNode } from 'react'
+
+import { fetchMarkets } from 'state/futures/actions'
+
+import { mockResizeObserver } from '../../../testing/unit/mocks/app'
+import { PRELOADED_STATE } from '../../../testing/unit/mocks/data/app'
+import {
+ mockSmartMarginAccount,
+ preloadedStateWithSmartMarginAccount,
+ SDK_MARKETS,
+} from '../../../testing/unit/mocks/data/futures'
+import { mockUseWindowSize } from '../../../testing/unit/mocks/hooks'
+import mockConnector from '../../../testing/unit/mocks/mockConnector'
+import MockProviders from '../../../testing/unit/mocks/MockProviders'
+import { mockReactQuery } from '../../../testing/unit/mocks/queries'
+import Market from '../../pages/market'
+import { selectTradePreview } from '../../state/futures/selectors'
+import sdk from '../../state/sdk'
+import { setupStore } from '../../state/store'
+
+jest.mock('../../state/sdk')
+
+jest.mock('../../queries/futures/useGetFuturesTrades', () => {
+ return jest.fn(() => ({
+ data: [],
+ isLoading: false,
+ fetchNextPage: () => {},
+ }))
+})
+
+jest.mock('../../components/Media', () => ({
+ ...jest.requireActual('../../components/Media'),
+ DesktopOnlyView: ({ children }: { children: ReactNode }) => {children}
,
+ MobileOnlyView: ({ children }: { children: ReactNode }) => {children}
,
+}))
+
+describe('Futures market page - smart margin', () => {
+ beforeAll(() => {
+ jest.setTimeout(60000)
+ mockUseWindowSize()
+ mockReactQuery()
+ mockResizeObserver()
+ mockConnector()
+ })
+
+ test('Calculates correct fees from trade preview', async () => {
+ const { findByTestId, findByText } = render(
+
+
+
+ )
+
+ const marginInput = await findByTestId('set-order-margin-susd-desktop')
+ fireEvent.change(marginInput, { target: { value: '100' } })
+
+ const sizeInput = await findByTestId('set-order-size-amount-susd-desktop')
+ fireEvent.change(sizeInput, { target: { value: '1000' } })
+
+ const fees = await findByText('$1.69')
+ expect(fees).toBeTruthy()
+ })
+
+ test('Submits LONG order with correct desired fill price', async () => {
+ const store = setupStore(preloadedStateWithSmartMarginAccount())
+ const { findByTestId, findByText } = render(
+
+
+
+ )
+
+ const marginInput = await findByTestId('set-order-margin-susd-desktop')
+ fireEvent.change(marginInput, { target: { value: '100' } })
+
+ const sizeInput = await findByTestId('set-order-size-amount-susd-desktop')
+ fireEvent.change(sizeInput, { target: { value: '1000' } })
+
+ const fees = await findByText('$1.69')
+ expect(fees).toBeTruthy()
+
+ const submitButton = await findByTestId('trade-panel-submit-button')
+ fireEvent.click(submitButton)
+
+ const confirmButton = await findByTestId('trade-confirm-order-button')
+ fireEvent.click(confirmButton)
+
+ // Preview generated fill price displayed in confirmation view
+ const fillPrice = await findByText('$1,847.76')
+ expect(fillPrice).toBeTruthy()
+
+ // Desired fill price is higher than fill price by 1%
+ // (as a long order the price is worse to account for slippage in delayed order)
+ expect(selectTradePreview(store.getState())?.desiredFillPrice.toString()).toBe(
+ '1866.234411491951332934'
+ )
+ })
+
+ test('Submits SHORT order with correct desired fill price', async () => {
+ const store = setupStore(preloadedStateWithSmartMarginAccount())
+ const { findByTestId, findByText } = render(
+
+
+
+ )
+
+ const shortToggle = await findByTestId('position-side-short-button')
+ fireEvent.click(shortToggle)
+
+ const marginInput = await findByTestId('set-order-margin-susd-desktop')
+ fireEvent.change(marginInput, { target: { value: '100' } })
+
+ const sizeInput = await findByTestId('set-order-size-amount-susd-desktop')
+ fireEvent.change(sizeInput, { target: { value: '1000' } })
+
+ const fees = await findByText('$1.69')
+ expect(fees).toBeTruthy()
+
+ const submitButton = await findByTestId('trade-panel-submit-button')
+ fireEvent.click(submitButton)
+
+ const confirmButton = await findByTestId('trade-confirm-order-button')
+ fireEvent.click(confirmButton)
+
+ // Preview generated fill price displayed in confirmation view
+ const fillPrice = await findByText('$1,847.76')
+ expect(fillPrice).toBeTruthy()
+
+ // Desired fill price is lower than fill price by 1%
+ // (as a short order the price is worse to account for slippage in delayed order)
+ expect(selectTradePreview(store.getState())?.desiredFillPrice.toString()).toBe(
+ '1829.279274630724573866'
+ )
+ })
+
+ test('Displays error when trade exceeds max OI', async () => {
+ // Update the mock to return some different data
+ sdk.futures.getMarkets = () =>
+ Promise.resolve([{ ...SDK_MARKETS[1], marketLimitUsd: wei(100000) } as FuturesMarket])
+
+ const store = setupStore(
+ preloadedStateWithSmartMarginAccount(mockSmartMarginAccount('1000000'))
+ )
+ const { findByTestId, findByText } = render(
+
+
+
+ )
+
+ const marginInput = await findByTestId('set-order-margin-susd-desktop')
+ fireEvent.change(marginInput, { target: { value: '100000' } })
+
+ const sizeInput = await findByTestId('set-order-size-amount-susd-desktop')
+ fireEvent.change(sizeInput, { target: { value: '1000000' } })
+
+ // OI limit warning displayed
+ const fillPrice = await findByText('Open interest limit exceeded')
+ expect(fillPrice).toBeTruthy()
+ })
+
+ test('Trade panel is disabled when market is closed', async () => {
+ sdk.futures.getMarkets = () => Promise.resolve([...SDK_MARKETS] as FuturesMarket[])
+ const store = setupStore(preloadedStateWithSmartMarginAccount())
+ const { findByTestId, findByText } = render(
+
+
+
+ )
+
+ const marginInput = await findByTestId('set-order-margin-susd-desktop')
+ fireEvent.change(marginInput, { target: { value: '100' } })
+
+ const sizeInput = await findByTestId('set-order-size-amount-susd-desktop')
+ fireEvent.change(sizeInput, { target: { value: '1000' } })
+
+ const fees = await findByText('$1.69')
+ expect(fees).toBeTruthy()
+
+ const submitButton = await findByTestId('trade-panel-submit-button')
+ expect(submitButton).toBeEnabled()
+
+ sdk.futures.getMarkets = () =>
+ Promise.resolve([{ ...SDK_MARKETS[1], isSuspended: true } as FuturesMarket])
+
+ waitFor(() => store.dispatch(fetchMarkets()))
+
+ const message = await findByText('Market suspended')
+ expect(message).toBeTruthy()
+
+ expect(submitButton).toBeDisabled()
+ })
+})
diff --git a/packages/app/src/components/InfoBox.tsx b/packages/app/src/components/InfoBox.tsx
index 20b76cd9ef..7d081cad0c 100644
--- a/packages/app/src/components/InfoBox.tsx
+++ b/packages/app/src/components/InfoBox.tsx
@@ -9,9 +9,10 @@ import { NO_VALUE } from 'constants/placeholder'
type InfoBoxRowProps = {
children?: React.ReactNode
title: string
- value: React.ReactNode
keyNode?: React.ReactNode
- valueNode?: React.ReactNode
+ textValue?: string
+ textValueIcon?: React.ReactNode
+ nodeValue?: React.ReactNode
spaceBeneath?: boolean
compactBox?: boolean
color?: BodyProps['color']
@@ -27,8 +28,10 @@ type InfoBoxRowProps = {
export const InfoBoxRow: FC = memo(
({
title,
- value,
keyNode,
+ textValueIcon,
+ textValue,
+ nodeValue,
compactBox,
disabled,
dataTestId,
@@ -38,7 +41,6 @@ export const InfoBoxRow: FC = memo(
onToggleExpand,
children,
color,
- valueNode,
spaceBeneath,
boldValue,
}) => (
@@ -53,16 +55,20 @@ export const InfoBoxRow: FC = memo(
{title}: {keyNode} {expandable ? expanded ? : : null}
-
- {disabled ? NO_VALUE : value}
- {valueNode}
-
+ {nodeValue ? (
+ nodeValue
+ ) : (
+
+ {disabled ? NO_VALUE : textValue}
+ {textValueIcon}
+
+ )}
)}
{spaceBeneath &&
}
diff --git a/packages/app/src/components/Input/NumericInput.test.tsx b/packages/app/src/components/Input/__tests__/NumericInput.test.tsx
similarity index 59%
rename from packages/app/src/components/Input/NumericInput.test.tsx
rename to packages/app/src/components/Input/__tests__/NumericInput.test.tsx
index 477e8e6e75..7008143a5e 100644
--- a/packages/app/src/components/Input/NumericInput.test.tsx
+++ b/packages/app/src/components/Input/__tests__/NumericInput.test.tsx
@@ -1,9 +1,9 @@
-import { render } from '@testing-library/react'
-import userEvent from '@testing-library/user-event'
+import { fireEvent, render } from '@testing-library/react'
+import { ThemeProvider } from 'styled-components'
-import ContextProvider from '../../../testing/unit/mocks/MockProviders'
+import { themes } from 'styles/theme'
-import NumericInput from './NumericInput'
+import NumericInput from '../NumericInput'
const wait = (ms: number) => {
return new Promise((resolve) => setTimeout(resolve, ms))
@@ -14,31 +14,31 @@ describe('NumericInput', () => {
const onChangeMock = jest.fn()
const result = render(
-
+
-
+
)
await wait(1000)
const input = result.getByPlaceholderText('MyNumericInput')
expect(input).toBeInTheDocument()
- expect(input).toHaveValue(null)
- userEvent.type(input, '1')
+ expect(input).toHaveValue('')
+ fireEvent.change(input, { target: { value: '1' } })
expect(onChangeMock).toBeCalledWith(expect.any(Object), '1')
})
test('ignores non number', async () => {
const onChangeMock = jest.fn()
const result = render(
-
+
-
+
)
await wait(1000)
const input = result.getByPlaceholderText('MyNumericInput')
expect(input).toBeInTheDocument()
- expect(input).toHaveValue(null)
- userEvent.type(input, 'abc')
- expect(onChangeMock).not.toBeCalled()
+ expect(input).toHaveValue('')
+ fireEvent.change(input, { target: { value: 'abc' } })
+ expect(onChangeMock).toBeCalledWith(expect.any(Object), '')
})
})
diff --git a/packages/app/src/components/TVChart/DataFeed.ts b/packages/app/src/components/TVChart/DataFeed.ts
index 72c33a0d64..5c6c1217f8 100644
--- a/packages/app/src/components/TVChart/DataFeed.ts
+++ b/packages/app/src/components/TVChart/DataFeed.ts
@@ -12,7 +12,7 @@ import {
} from 'charting_library/charting_library'
import { requestCandlesticks } from 'queries/rates/useCandlesticksQuery'
-import { sdk } from 'state/config'
+import sdk from 'state/sdk'
import { ChartBar } from './types'
import { resolutionToSeconds } from './utils'
diff --git a/packages/app/src/components/TVChart/TVChart.tsx b/packages/app/src/components/TVChart/TVChart.tsx
index dfdc5d6d94..0cebc6bdec 100644
--- a/packages/app/src/components/TVChart/TVChart.tsx
+++ b/packages/app/src/components/TVChart/TVChart.tsx
@@ -15,9 +15,9 @@ import { ThemeContext } from 'styled-components'
import Connector from 'containers/Connector'
import { chain } from 'containers/Connector/config'
import { ChartBody } from 'sections/exchange/TradeCard/Charts/common/styles'
-import { sdk } from 'state/config'
import { useAppSelector } from 'state/hooks'
import { selectCurrentTheme } from 'state/preferences/selectors'
+import sdk from 'state/sdk'
import darkTheme from 'styles/theme/colors/dark'
import { DEFAULT_RESOLUTION } from './constants'
diff --git a/packages/app/src/components/Text/Body.tsx b/packages/app/src/components/Text/Body.tsx
index 70d68aaf83..fd04b8733a 100644
--- a/packages/app/src/components/Text/Body.tsx
+++ b/packages/app/src/components/Text/Body.tsx
@@ -5,6 +5,7 @@ export type BodyProps = React.HTMLAttributes & {
size?: 'xsmall' | 'small' | 'medium' | 'large'
weight?: 'regular' | 'bold' | 'black'
color?: 'primary' | 'secondary' | 'tertiary' | 'positive' | 'negative' | 'preview'
+ type?: 'p' | 'span'
className?: string
fontSize?: number
mono?: boolean
@@ -18,23 +19,36 @@ const Body: React.FC = memo(
size = 'medium',
weight = 'regular',
color = 'primary',
+ type = 'p',
fontSize,
mono,
capitalized,
inline,
...props
- }) => (
-
- )
+ }) =>
+ type === 'p' ? (
+
+ ) : (
+
+ )
)
const sizeMap = { xsmall: 10, small: 12, medium: 13, large: 15 } as const
@@ -43,7 +57,7 @@ const getFontFamily = (weight: NonNullable, mono?: boolean)
return mono ? (weight !== 'regular' ? 'monoBold' : 'mono') : weight
}
-const StyledBody = styled.p<{
+type StyledBodyProps = {
$size: NonNullable
$weight: NonNullable
$color: NonNullable
@@ -51,7 +65,9 @@ const StyledBody = styled.p<{
$mono?: boolean
$capitalized?: boolean
$inline?: boolean
-}>`
+}
+
+const BODY_STYLE = css`
line-height: 1.2;
margin: 0;
@@ -70,4 +86,12 @@ const StyledBody = styled.p<{
`}
`
+const StyledBody = styled.p`
+ ${BODY_STYLE}
+`
+
+const StyledBodySpan = styled.span`
+ ${BODY_STYLE}
+`
+
export default Body
diff --git a/packages/app/src/components/Text/NumericValue.tsx b/packages/app/src/components/Text/NumericValue.tsx
index a08663ebff..f43999d50d 100644
--- a/packages/app/src/components/Text/NumericValue.tsx
+++ b/packages/app/src/components/Text/NumericValue.tsx
@@ -15,7 +15,7 @@ type NumericValueProps = BodyProps & {
}
const NumericValue: FC = memo(
- ({ value, preview, colored, options, suffix, color, ...props }) => {
+ ({ value, preview, colored, options, suffix, color, type = 'p', ...props }) => {
const numberColor = useMemo(() => {
if (color) {
return color
@@ -33,7 +33,7 @@ const NumericValue: FC = memo(
}, [color, preview, colored, value])
return (
-
+
{props.children ?? formatNumber(value, options)}
{suffix}
diff --git a/packages/app/src/containers/Connector/Connector.tsx b/packages/app/src/containers/Connector/Connector.tsx
index 76fd9ff33d..b521a8742d 100644
--- a/packages/app/src/containers/Connector/Connector.tsx
+++ b/packages/app/src/containers/Connector/Connector.tsx
@@ -4,8 +4,8 @@ import { createContainer } from 'unstated-next'
import { useAccount, useNetwork, useSigner, useProvider } from 'wagmi'
import { SUPPORTED_NETWORKS } from 'constants/network'
-import { sdk } from 'state/config'
import { useAppDispatch } from 'state/hooks'
+import sdk from 'state/sdk'
import { setSigner } from 'state/wallet/actions'
import { setNetwork } from 'state/wallet/reducer'
diff --git a/packages/app/src/containers/Connector/config.ts b/packages/app/src/containers/Connector/config.ts
index a8aea848fa..59e65ee4dd 100644
--- a/packages/app/src/containers/Connector/config.ts
+++ b/packages/app/src/containers/Connector/config.ts
@@ -6,7 +6,6 @@ import {
ledgerWallet,
metaMaskWallet,
rainbowWallet,
- trustWallet,
walletConnectWallet,
} from '@rainbow-me/rainbowkit/wallets'
import { configureChains, createClient } from 'wagmi'
@@ -25,10 +24,11 @@ import { jsonRpcProvider } from 'wagmi/providers/jsonRpc'
import { publicProvider } from 'wagmi/providers/public'
import BinanceIcon from 'assets/png/rainbowkit/binance.png'
-import Frame from 'components/Rainbowkit/Frame'
-import Safe from 'components/Rainbowkit/Gnosis'
-import Tally from 'components/Rainbowkit/Tally'
-import { BLAST_NETWORK_LOOKUP, STALL_TIMEOUT } from 'constants/network'
+
+import Frame from '../../components/Rainbowkit/Frame'
+import Safe from '../../components/Rainbowkit/Gnosis'
+import Tally from '../../components/Rainbowkit/Tally'
+import { BLAST_NETWORK_LOOKUP, STALL_TIMEOUT } from '../../constants/network'
const bscWithIcon: Chain = {
...bsc,
@@ -84,7 +84,6 @@ const connectors = connectorsForWallets([
wallets: [
ledgerWallet({ projectId, chains }),
braveWallet({ chains, shimDisconnect: true }),
- trustWallet({ projectId, chains }),
Tally({ chains, shimDisconnect: true }),
Frame({ chains, shimDisconnect: true }),
injectedWallet({ chains, shimDisconnect: true }),
diff --git a/packages/app/src/contexts/RelayerContext.tsx b/packages/app/src/contexts/RelayerContext.tsx
index 77fb30bee5..f571b0bc72 100644
--- a/packages/app/src/contexts/RelayerContext.tsx
+++ b/packages/app/src/contexts/RelayerContext.tsx
@@ -7,7 +7,7 @@ import {
NotificationError,
} from 'components/TransactionNotification'
import { blockExplorer } from 'containers/Connector/Connector'
-import { sdk } from 'state/config'
+import sdk from 'state/sdk'
export const monitorTransaction = ({
txHash,
@@ -27,12 +27,12 @@ export const monitorTransaction = ({
}
const emitter = sdk.transactions.hash(txHash)
emitter.on('txSent', () => {
- toast(NotificationPending, { ...toastProps, toastId: txHash })
+ toast(, { ...toastProps, toastId: txHash })
})
emitter.on('txConfirmed', ({ transactionHash }) => {
toast.update(transactionHash, {
...toastProps,
- render: NotificationSuccess,
+ render: ,
autoClose: 10000,
})
if (onTxConfirmed != null) {
diff --git a/packages/app/src/sections/dashboard/Overview.tsx b/packages/app/src/sections/dashboard/Overview.tsx
index 4d8991891f..38a024710a 100644
--- a/packages/app/src/sections/dashboard/Overview.tsx
+++ b/packages/app/src/sections/dashboard/Overview.tsx
@@ -15,7 +15,6 @@ import * as Text from 'components/Text'
import Connector from 'containers/Connector'
import { FuturesAccountTypes } from 'queries/futures/types'
import { selectBalances } from 'state/balances/selectors'
-import { sdk } from 'state/config'
import { fetchTokenList } from 'state/exchange/actions'
import { setFuturesAccountType } from 'state/futures/reducer'
import {
@@ -24,6 +23,7 @@ import {
selectFuturesType,
} from 'state/futures/selectors'
import { useAppDispatch, useAppSelector, useFetchAction } from 'state/hooks'
+import sdk from 'state/sdk'
import { selectSynthsMap } from 'state/wallet/selectors'
import logError from 'utils/logError'
diff --git a/packages/app/src/sections/exchange/MobileSwap/SwapInfoBox.tsx b/packages/app/src/sections/exchange/MobileSwap/SwapInfoBox.tsx
index bfd6df9b29..cc5b628125 100644
--- a/packages/app/src/sections/exchange/MobileSwap/SwapInfoBox.tsx
+++ b/packages/app/src/sections/exchange/MobileSwap/SwapInfoBox.tsx
@@ -26,7 +26,7 @@ const PriceImpactRow = () => {
return (
)
}
@@ -38,7 +38,7 @@ const FeeCostRow = () => {
return (
)
}
@@ -53,8 +53,7 @@ const FeeRow = () => {
return (
{formatPercent(baseFeeRate ?? ZERO_WEI)}
{exchangeFeeRate != null && baseFeeRate != null ? (
@@ -106,7 +105,7 @@ const GasPriceRow = () => {
? t('common.summary.gas-prices.max-fee')
: t('common.summary.gas-prices.gas-price')
}
- value={gasPriceItem}
+ textValue={gasPriceItem}
/>
)
}
diff --git a/packages/app/src/sections/futures/ClosePositionModal/ClosePositionModal.tsx b/packages/app/src/sections/futures/ClosePositionModal/ClosePositionModal.tsx
index e4c9d8ceaf..06398e7556 100644
--- a/packages/app/src/sections/futures/ClosePositionModal/ClosePositionModal.tsx
+++ b/packages/app/src/sections/futures/ClosePositionModal/ClosePositionModal.tsx
@@ -192,19 +192,19 @@ export default function ClosePositionModal() {
{previewTrade.leverage.toString(2)}x
)
}
title={t('futures.market.trade.edit-position.leverage-change')}
- value={position?.position ? position?.position?.leverage.toString(2) + 'x' : '-'}
+ textValue={position?.position ? position?.position?.leverage.toString(2) + 'x' : '-'}
/>
{previewTrade?.size
@@ -214,25 +214,25 @@ export default function ClosePositionModal() {
)
}
title={t('futures.market.trade.edit-position.position-size')}
- value={formatNumber(position?.position?.size || 0, { suggestDecimals: true })}
+ textValue={formatNumber(position?.position?.size || 0, { suggestDecimals: true })}
/>
{formatDollars(previewTrade?.liqPrice)}
)
}
title={t('futures.market.trade.edit-position.liquidation')}
- value={formatDollars(position?.position?.liquidationPrice || 0)}
+ textValue={formatDollars(position?.position?.liquidationPrice || 0)}
/>
{previewTrade?.exceedsPriceProtection && (
diff --git a/packages/app/src/sections/futures/EditPositionModal/EditPositionMarginModal.tsx b/packages/app/src/sections/futures/EditPositionModal/EditPositionMarginModal.tsx
index 4b434b88ec..43d5fa2621 100644
--- a/packages/app/src/sections/futures/EditPositionModal/EditPositionMarginModal.tsx
+++ b/packages/app/src/sections/futures/EditPositionModal/EditPositionMarginModal.tsx
@@ -15,7 +15,6 @@ import PreviewArrow from 'components/PreviewArrow'
import SegmentedControl from 'components/SegmentedControl'
import Spacer from 'components/Spacer'
import { Body } from 'components/Text'
-import { previewErrorI18n } from 'queries/futures/constants'
import { setShowPositionModal } from 'state/app/reducer'
import { selectShowPositionModal, selectTransaction } from 'state/app/selectors'
import {
@@ -157,19 +156,19 @@ export default function EditPositionMarginModal() {
{preview.leverage.toString(2)}x
)
}
title={t('futures.market.trade.edit-position.leverage-change')}
- value={position?.position?.leverage.toString(2) + 'x'}
+ textValue={position?.position?.leverage.toString(2) + 'x'}
/>
{position?.remainingMargin
@@ -179,10 +178,10 @@ export default function EditPositionMarginModal() {
)
}
title={t('futures.market.trade.edit-position.margin-change')}
- value={formatDollars(position?.remainingMargin || 0)}
+ textValue={formatDollars(position?.remainingMargin || 0)}
/>
{preview ? formatDollars(preview.liqPrice) : '-'}
@@ -190,7 +189,7 @@ export default function EditPositionMarginModal() {
)
}
title={t('futures.market.trade.edit-position.liquidation')}
- value={formatDollars(position?.position?.liquidationPrice || 0)}
+ textValue={formatDollars(position?.position?.liquidationPrice || 0)}
/>
diff --git a/packages/app/src/sections/futures/EditPositionModal/EditPositionSizeModal.tsx b/packages/app/src/sections/futures/EditPositionModal/EditPositionSizeModal.tsx
index dfb604ee96..8f63da57ce 100644
--- a/packages/app/src/sections/futures/EditPositionModal/EditPositionSizeModal.tsx
+++ b/packages/app/src/sections/futures/EditPositionModal/EditPositionSizeModal.tsx
@@ -182,19 +182,19 @@ export default function EditPositionSizeModal() {
{resultingLeverage.toString(2)}x
)
}
title={t('futures.market.trade.edit-position.leverage-change')}
- value={position?.position ? position?.position?.leverage.toString(2) + 'x' : '-'}
+ textValue={position?.position ? position?.position?.leverage.toString(2) + 'x' : '-'}
/>
{position?.remainingMargin
@@ -204,10 +204,10 @@ export default function EditPositionSizeModal() {
)
}
title={t('futures.market.trade.edit-position.position-size')}
- value={formatNumber(position?.position?.size || 0, { suggestDecimals: true })}
+ textValue={formatNumber(position?.position?.size || 0, { suggestDecimals: true })}
/>
{preview ? formatDollars(preview.liqPrice, { suggestDecimals: true }) : '-'}
@@ -215,18 +215,18 @@ export default function EditPositionSizeModal() {
)
}
title={t('futures.market.trade.edit-position.liquidation')}
- value={formatDollars(position?.position?.liquidationPrice || 0, {
+ textValue={formatDollars(position?.position?.liquidationPrice || 0, {
suggestDecimals: true,
})}
/>
{preview?.exceedsPriceProtection && (
diff --git a/packages/app/src/sections/futures/EditPositionModal/EditStopLossAndTakeProfitModal.tsx b/packages/app/src/sections/futures/EditPositionModal/EditStopLossAndTakeProfitModal.tsx
index 37cb860638..4b034e45d3 100644
--- a/packages/app/src/sections/futures/EditPositionModal/EditStopLossAndTakeProfitModal.tsx
+++ b/packages/app/src/sections/futures/EditPositionModal/EditStopLossAndTakeProfitModal.tsx
@@ -12,6 +12,7 @@ import { InfoBoxRow } from 'components/InfoBox'
import { FlexDivRowCentered } from 'components/layout/flex'
import SelectorButtons from 'components/SelectorButtons'
import Spacer from 'components/Spacer'
+import { Body } from 'components/Text'
import { NO_VALUE } from 'constants/placeholder'
import { setShowPositionModal } from 'state/app/reducer'
import { selectAckedOrdersWarning, selectTransaction } from 'state/app/selectors'
@@ -213,9 +214,9 @@ export default function EditStopLossAndTakeProfitModal() {
- {market?.marketName}
+ {market?.marketName}
{' '}
diff --git a/packages/app/src/sections/futures/FeeInfoBox/FeesRow.tsx b/packages/app/src/sections/futures/FeeInfoBox/FeesRow.tsx
index a1fa0d238a..34b009f5bd 100644
--- a/packages/app/src/sections/futures/FeeInfoBox/FeesRow.tsx
+++ b/packages/app/src/sections/futures/FeeInfoBox/FeesRow.tsx
@@ -31,7 +31,7 @@ const ExecutionFeeRow = memo(({ executionFee }: { executionFee: Wei }) => {
return (
}
isSubItem
/>
@@ -50,7 +50,7 @@ export const KeeperDepositRow = memo(
}
isSubItem
/>
@@ -111,7 +111,7 @@ const FeesRow = memo(
return (
{
@@ -90,7 +89,7 @@ const LiquidationRow = memo(() => {
{
return (
{
return (
{formatDollars(previewTradeData?.availableMargin)}
@@ -43,8 +43,8 @@ const BuyingPowerRow = memo(() => {
return (
{formatDollars(previewTradeData?.buyingPower)}
@@ -65,8 +65,8 @@ const MarginUsageRow = memo(() => {
return (
{formatPercent(previewTradeData?.marginUsage)}
diff --git a/packages/app/src/sections/futures/PositionType.tsx b/packages/app/src/sections/futures/PositionType.tsx
index bcf6ea81d2..a83e185d3b 100644
--- a/packages/app/src/sections/futures/PositionType.tsx
+++ b/packages/app/src/sections/futures/PositionType.tsx
@@ -1,7 +1,7 @@
import { PositionSide } from '@kwenta/sdk/types'
import styled, { css } from 'styled-components'
-import { Body } from 'components/Text'
+import Body from 'components/Text/Body'
type PositionProps = {
side: PositionSide
@@ -16,12 +16,13 @@ const PositionType: React.FC = ({ side = PositionSide.LONG, mobil
)
}
-const StyledText = styled(Body).attrs({ weight: 'bold', capitalized: true })<{
+const StyledText = styled(Body).attrs({ weight: 'bold', capitalized: true, type: 'span' })<{
side: PositionSide
}>`
padding: 3px 5px;
border-radius: 4px;
+
${(props) =>
props.side === PositionSide.LONG
? css`
diff --git a/packages/app/src/sections/futures/Trade/ManagePosition.tsx b/packages/app/src/sections/futures/Trade/ManagePosition.tsx
index 7d4215a556..594d9286bb 100644
--- a/packages/app/src/sections/futures/Trade/ManagePosition.tsx
+++ b/packages/app/src/sections/futures/Trade/ManagePosition.tsx
@@ -187,7 +187,7 @@ const ManagePosition: React.FC = () => {
)}
-
+
{formatCurrency(
getDisplayAsset(marketAsset) || '',
nativeSizeDelta.abs() ?? ZERO_WEI,
@@ -54,12 +53,12 @@ export default function TradeConfirmationSummary({
{leverage.toString(2)}X}
+ textValue={leverage.toString(2) + 'X'}
/>
{OrderNameByType[orderType]}}
+ textValue={OrderNameByType[orderType]}
/>
diff --git a/packages/app/src/sections/futures/TradeCrossMargin/CrossMarginInfoBox.tsx b/packages/app/src/sections/futures/TradeCrossMargin/CrossMarginInfoBox.tsx
index 434041fa6e..fe4d3eafb1 100644
--- a/packages/app/src/sections/futures/TradeCrossMargin/CrossMarginInfoBox.tsx
+++ b/packages/app/src/sections/futures/TradeCrossMargin/CrossMarginInfoBox.tsx
@@ -28,8 +28,8 @@ function MarginInfoBox() {
<>
{keeperEthBal.gt(0) && (
}
/>
-
-
+
+
{openModal === 'futures_withdraw_keeper_balance' && (
diff --git a/packages/app/src/sections/futures/UserInfo/UserInfo.tsx b/packages/app/src/sections/futures/UserInfo/UserInfo.tsx
index 309bead9af..98eb1b9290 100644
--- a/packages/app/src/sections/futures/UserInfo/UserInfo.tsx
+++ b/packages/app/src/sections/futures/UserInfo/UserInfo.tsx
@@ -232,6 +232,7 @@ const TabButtonsContainer = styled.div`
display: grid;
grid-gap: 15px;
grid-template-columns: repeat(2, 1fr);
+ height: 40px;
button {
font-size: 13px;
diff --git a/packages/app/src/state/__mocks__/sdk.ts b/packages/app/src/state/__mocks__/sdk.ts
new file mode 100644
index 0000000000..c5a0ea1196
--- /dev/null
+++ b/packages/app/src/state/__mocks__/sdk.ts
@@ -0,0 +1,47 @@
+import { wei } from '@synthetixio/wei'
+
+import { MOCK_TRADE_PREVIEW, SDK_MARKETS } from '../../../testing/unit/mocks/data/futures'
+
+export const mockSetProvider = () => Promise.resolve('10')
+export const mockSetSigner = () => Promise.resolve()
+export const mockSubmitCrossMarginOrder = jest.fn(() => ({ test: 'THE TX' }))
+
+const mockFuturesService = {
+ getCrossMarginAccounts: () => ['0x7bCe4eF9d95129011528E502357C7772'],
+ getPreviousDayPrices: () => [],
+ getCrossMarginTradePreview: () => {
+ return { ...MOCK_TRADE_PREVIEW }
+ },
+ getFuturesPositions: () => [],
+ getTradesForMarkets: () => [],
+ getAllTrades: () => [],
+ getConditionalOrders: () => [],
+ getIsolatedMarginTransfers: () => [],
+ getDelayedOrders: () => [],
+ getCrossMarginTransfers: () => [],
+ getCrossMarginBalanceInfo: () => ({
+ freeMargin: wei('1000'),
+ keeperEthBal: wei('0.1'),
+ walletEthBal: wei('1'),
+ allowance: wei('1000'),
+ }),
+ getMarkets: () => {
+ return [...SDK_MARKETS]
+ },
+ submitCrossMarginOrder: mockSubmitCrossMarginOrder,
+}
+
+const mockSdk = {
+ context: {},
+ exchange: {},
+ futures: { ...mockFuturesService },
+ prices: {},
+ synths: {},
+ transactions: {},
+ kwentaToken: {},
+ system: {},
+ setProvider: mockSetProvider,
+ setSigner: mockSetSigner,
+}
+
+export default mockSdk
diff --git a/packages/app/src/state/app/hooks.ts b/packages/app/src/state/app/hooks.ts
index a60e1867d6..cc7fb8814d 100644
--- a/packages/app/src/state/app/hooks.ts
+++ b/packages/app/src/state/app/hooks.ts
@@ -1,12 +1,12 @@
import { useEffect } from 'react'
import { fetchBalances } from 'state/balances/actions'
-import { sdk } from 'state/config'
import { fetchEarnTokenPrices } from 'state/earn/actions'
import { selectMarkets } from 'state/futures/selectors'
import { useAppDispatch, useAppSelector, usePollAction } from 'state/hooks'
import { fetchPreviousDayPrices, updatePrices } from 'state/prices/actions'
import { setConnectionError } from 'state/prices/reducer'
+import sdk from 'state/sdk'
import { selectNetwork, selectWallet } from 'state/wallet/selectors'
import { serializePrices } from 'utils/futures'
diff --git a/packages/app/src/state/exchange/selectors.ts b/packages/app/src/state/exchange/selectors.ts
index 245e314564..02030478fa 100644
--- a/packages/app/src/state/exchange/selectors.ts
+++ b/packages/app/src/state/exchange/selectors.ts
@@ -4,8 +4,8 @@ import { createSelector } from '@reduxjs/toolkit'
import { wei } from '@synthetixio/wei'
import { selectTotalUSDBalanceWei } from 'state/balances/selectors'
-import { sdk } from 'state/config'
import { selectPrices } from 'state/prices/selectors'
+import sdk from 'state/sdk'
import type { RootState } from 'state/store'
import { FetchStatus } from 'state/types'
import { selectIsWalletConnected } from 'state/wallet/selectors'
diff --git a/packages/app/src/state/futures/actions.ts b/packages/app/src/state/futures/actions.ts
index 126979ea96..36555bed8b 100644
--- a/packages/app/src/state/futures/actions.ts
+++ b/packages/app/src/state/futures/actions.ts
@@ -154,6 +154,7 @@ export const fetchMarkets = createAsyncThunk<
>('futures/fetchMarkets', async (_, { getState, extra: { sdk } }) => {
const supportedNetwork = selectFuturesSupportedNetwork(getState())
const networkId = selectNetwork(getState())
+
if (!supportedNetwork) return
try {
const markets = await sdk.futures.getMarkets()
diff --git a/packages/app/src/state/futures/selectors.ts b/packages/app/src/state/futures/selectors.ts
index 589fe9aa63..e353ed2f6f 100644
--- a/packages/app/src/state/futures/selectors.ts
+++ b/packages/app/src/state/futures/selectors.ts
@@ -79,8 +79,10 @@ export const selectLeverageInput = createSelector(
(futures, type) => futures[accountType(type)].leverageInput
)
-export const selectCrossMarginMarginDelta = (state: RootState) =>
- wei(state.futures.crossMargin.marginDelta || 0)
+export const selectCrossMarginMarginDelta = createSelector(
+ (state: RootState) => state.futures,
+ (futures) => wei(futures.crossMargin.marginDelta || 0)
+)
export const selectMarginDeltaInputValue = (state: RootState) =>
state.futures.crossMargin.marginDelta
diff --git a/packages/app/src/state/config.ts b/packages/app/src/state/sdk.ts
similarity index 55%
rename from packages/app/src/state/config.ts
rename to packages/app/src/state/sdk.ts
index 3691b25cf8..e2cbe9f93c 100644
--- a/packages/app/src/state/config.ts
+++ b/packages/app/src/state/sdk.ts
@@ -3,4 +3,6 @@ import KwentaSDK from '@kwenta/sdk'
import { wagmiClient } from 'containers/Connector/config'
import logError from 'utils/logError'
-export const sdk = new KwentaSDK({ networkId: 10, provider: wagmiClient.provider, logError })
+const sdk = new KwentaSDK({ networkId: 10, provider: wagmiClient.provider, logError })
+
+export default sdk
diff --git a/packages/app/src/state/store.ts b/packages/app/src/state/store.ts
index fb4148ecdc..436e181372 100644
--- a/packages/app/src/state/store.ts
+++ b/packages/app/src/state/store.ts
@@ -1,5 +1,5 @@
import KwentaSDK from '@kwenta/sdk'
-import { combineReducers, configureStore } from '@reduxjs/toolkit'
+import { combineReducers, configureStore, PreloadedState } from '@reduxjs/toolkit'
import type { AnyAction, ThunkAction } from '@reduxjs/toolkit'
import logger from 'redux-logger'
import {
@@ -17,7 +17,6 @@ import storage from 'redux-persist/lib/storage'
import appReducer from './app/reducer'
import balancesReducer from './balances/reducer'
-import { sdk } from './config'
import earnReducer from './earn/reducer'
import exchangeReducer from './exchange/reducer'
import futuresReducer from './futures/reducer'
@@ -25,6 +24,7 @@ import homeReducer from './home/reducer'
import migrations from './migrations'
import preferencesReducer from './preferences/reducer'
import pricesReducer from './prices/reducer'
+import sdk from './sdk'
import stakingReducer from './staking/reducer'
import statsReducer from './stats/reducer'
import walletReducer from './wallet/reducer'
@@ -55,21 +55,26 @@ const combinedReducers = combineReducers({
const persistedReducer = persistReducer(persistConfig, combinedReducers)
-const store = configureStore({
- reducer: persistedReducer,
- middleware: (getDefaultMiddleware) => {
- const baseMiddleware = getDefaultMiddleware({
- serializableCheck: {
- ignoredActions: [FLUSH, REHYDRATE, PAUSE, PERSIST, PURGE, REGISTER],
- },
- thunk: { extraArgument: { sdk } },
- })
- return LOG_REDUX ? baseMiddleware.concat(logger) : baseMiddleware
- },
-})
+export const setupStore = (preloadedState?: PreloadedState) =>
+ configureStore({
+ reducer: persistedReducer,
+ middleware: (getDefaultMiddleware) => {
+ const baseMiddleware = getDefaultMiddleware({
+ serializableCheck: {
+ ignoredActions: [FLUSH, REHYDRATE, PAUSE, PERSIST, PURGE, REGISTER],
+ },
+ thunk: { extraArgument: { sdk } },
+ })
+ return LOG_REDUX ? baseMiddleware.concat(logger) : baseMiddleware
+ },
+ preloadedState,
+ })
+
+const store = setupStore()
export type RootState = ReturnType
export type AppDispatch = typeof store.dispatch
+export type AppStore = typeof store
export type ThunkConfig = {
dispatch: AppDispatch
state: RootState
diff --git a/packages/app/stories/AccountStats.stories.tsx b/packages/app/stories/AccountStats.stories.tsx
index 1d092e4151..6321c3b110 100644
--- a/packages/app/stories/AccountStats.stories.tsx
+++ b/packages/app/stories/AccountStats.stories.tsx
@@ -9,9 +9,9 @@ export const Default = () => {
return (
-
-
-
+
+
+
)
diff --git a/packages/app/stories/FeeInfoBox.stories.tsx b/packages/app/stories/FeeInfoBox.stories.tsx
index 91d498f055..dbd14335ec 100644
--- a/packages/app/stories/FeeInfoBox.stories.tsx
+++ b/packages/app/stories/FeeInfoBox.stories.tsx
@@ -17,11 +17,11 @@ export default {
export const Default = () => {
return (
-
-
-
-
-
+
+
+
+
+
)
}
@@ -33,17 +33,17 @@ export const ExpandedRow = () => {
-
-
-
-
+
+
+
+
-
+
)
}
diff --git a/packages/app/stories/InfoBox.stories.tsx b/packages/app/stories/InfoBox.stories.tsx
index e6ffa85097..eb2ae012d5 100644
--- a/packages/app/stories/InfoBox.stories.tsx
+++ b/packages/app/stories/InfoBox.stories.tsx
@@ -16,8 +16,8 @@ export default {
export const Default = () => {
return (
-
-
+
+
)
}
@@ -25,9 +25,9 @@ export const Default = () => {
export const Spaced = () => {
return (
-
-
-
+
+
+
)
}
diff --git a/packages/app/testing/lint.js b/packages/app/testing/lint.js
deleted file mode 100644
index 5b5ecf96c9..0000000000
--- a/packages/app/testing/lint.js
+++ /dev/null
@@ -1,40 +0,0 @@
-/* eslint-disable */
-const fs = require('fs')
-
-const CLIEngine = require('eslint').CLIEngine
-
-const argv = process.argv.slice(2)
-const cli = new CLIEngine({
- fix: false,
- extensions: argv[2].split(','),
- useEslintrc: true,
-})
-
-console.log('Starting to lint..')
-
-// Lint all files
-const report = cli.executeOnFiles(argv[0])
-
-// get the default formatter
-const consoleFormatter = cli.getFormatter()
-
-console.log('Lint finished')
-
-// output to console
-console.log(consoleFormatter(report.results))
-
-// Output to sarif format
-const otherFormatter = cli.getFormatter('@microsoft/eslint-formatter-sarif/sarif.js')
-
-console.log('Saving sarif report..')
-
-fs.writeFile('lint-results.sarif', otherFormatter(report.results), 'utf8', () => {
- console.log('Sarif report saved')
- if (report.errorCount > 0) {
- console.log('Errors found, exiting..')
- process.exit(1)
- } else {
- console.log('No errors found')
- process.exit(0)
- }
-})
diff --git a/packages/app/testing/unit/mocks/MockProviders.tsx b/packages/app/testing/unit/mocks/MockProviders.tsx
index af21914e80..7a0a3ecdce 100644
--- a/packages/app/testing/unit/mocks/MockProviders.tsx
+++ b/packages/app/testing/unit/mocks/MockProviders.tsx
@@ -1,29 +1,17 @@
+import type { PreloadedState } from '@reduxjs/toolkit'
+import i18n from 'i18n'
import mockRouter from 'next-router-mock'
import { ReactNode } from 'react'
+import { I18nextProvider } from 'react-i18next'
import { QueryClient, QueryClientProvider } from 'react-query'
+import { Provider as ReduxProvider } from 'react-redux'
import { ThemeProvider } from 'styled-components'
import { WagmiConfig } from 'wagmi'
-import Connector from 'containers/Connector'
import { wagmiClient } from 'containers/Connector/config'
+import { AppStore, RootState, setupStore } from 'state/store'
import { themes } from 'styles/theme'
-jest.mock('@rainbow-me/rainbowkit', () => ({
- wallet: {
- metaMask: () => {},
- rainbow: () => {},
- coinbase: () => {},
- walletConnect: () => {},
- ledger: () => {},
- brave: () => {},
- trust: () => {},
- },
- connectorsForWallets: () => {},
- useConnectModal: () => ({
- openConnectModal: () => {},
- }),
-}))
-
jest.mock('next/router', () => require('next-router-mock'))
// This is needed for mocking 'next/link':
jest.mock('next/dist/client/router', () => require('next-router-mock'))
@@ -33,13 +21,7 @@ jest.mock('next/dist/client/router', () => require('next-router-mock'))
jest.mock('axios', () => ({
get: Promise.resolve(),
post: Promise.resolve(),
-}))
-
-jest.mock('queries/futures/subgraph', () => ({
- __esModule: true,
- getFuturesTrades: () => Promise.resolve([]),
- getFuturesAggregateStats: () => Promise.resolve([]),
- getFuturesPositions: () => Promise.resolve([]),
+ create: jest.fn(),
}))
const queryClient = new QueryClient({
@@ -53,20 +35,29 @@ const queryClient = new QueryClient({
type Props = {
children: ReactNode
route?: string
+ store?: AppStore
+ preloadedState?: Partial>
}
process.env.GIT_HASH_ID = '12345'
-const MockProviders = ({ children, route }: Props) => {
+const MockProviders = ({
+ children,
+ route,
+ preloadedState,
+ store = setupStore(preloadedState),
+}: Props) => {
mockRouter.setCurrentUrl(route || '/')
return (
-
-
- {children}
-
-
+
+
+
+ {children}
+
+
+
)
}
diff --git a/packages/app/testing/unit/mocks/app.ts b/packages/app/testing/unit/mocks/app.ts
new file mode 100644
index 0000000000..e4767b8902
--- /dev/null
+++ b/packages/app/testing/unit/mocks/app.ts
@@ -0,0 +1,9 @@
+export const mockResizeObserver = () => {
+ // @ts-ignore
+ delete window.ResizeObserver
+ window.ResizeObserver = jest.fn().mockImplementation(() => ({
+ observe: jest.fn(),
+ unobserve: jest.fn(),
+ disconnect: jest.fn(),
+ }))
+}
diff --git a/packages/app/testing/unit/constants.ts b/packages/app/testing/unit/mocks/data/app.ts
similarity index 86%
rename from packages/app/testing/unit/constants.ts
rename to packages/app/testing/unit/mocks/data/app.ts
index 90f74476b6..8cc9163dd3 100644
--- a/packages/app/testing/unit/constants.ts
+++ b/packages/app/testing/unit/mocks/data/app.ts
@@ -1,5 +1,9 @@
+import { NetworkId } from '@kwenta/sdk/dist/types'
import { Wallet } from 'ethers'
+import { PRICES_INITIAL_STATE } from 'state/prices/reducer'
+import { PricesInfoMap } from 'state/prices/types'
+
export const TEST_ADDR = '0x1c099210997E5C5689189A256C6145ca743B2610'
export const TEST_PK = 'b826c22c04853f6ba05575275494a3a5c9eff298c36cb58d11370f83c87574e4'
@@ -136,3 +140,12 @@ export const CHAINS = [
testnet: true,
},
]
+
+export const PRELOADED_STATE = {
+ wallet: { networkId: 10 as NetworkId, walletAddress: TEST_ADDR },
+ prices: {
+ ...PRICES_INITIAL_STATE,
+ onChainPrices: { sETH: { price: '1810.50', change: 'up' } } as PricesInfoMap,
+ offChainPrices: { sETH: { price: '1810.50', change: 'up' } } as PricesInfoMap,
+ },
+}
diff --git a/packages/app/testing/unit/mocks/data/futures.ts b/packages/app/testing/unit/mocks/data/futures.ts
new file mode 100644
index 0000000000..e8d66bfc8b
--- /dev/null
+++ b/packages/app/testing/unit/mocks/data/futures.ts
@@ -0,0 +1,200 @@
+import {
+ FuturesMarketAsset,
+ FuturesMarketKey,
+ NetworkId,
+ SynthSuspensionReason,
+} from '@kwenta/sdk/dist/types'
+import { wei } from '@synthetixio/wei'
+
+import { FUTURES_INITIAL_STATE } from 'state/futures/reducer'
+
+import { PRELOADED_STATE, TEST_ADDR } from './app'
+
+export const mockSmartMarginAccount = (freeMargin: string = '1000') => ({
+ account: '0xe1ba3B0A962FbC525a9f9503AEE3310940Bb2a6F',
+ positionHistory: [],
+ trades: [],
+ marginTransfers: [],
+ idleTransfers: [],
+ balanceInfo: {
+ freeMargin: freeMargin,
+ keeperEthBal: '0.05',
+ allowance: freeMargin,
+ walletEthBal: '1',
+ },
+ delayedOrders: [],
+ conditionalOrders: [],
+})
+
+export const SDK_MARKETS = [
+ {
+ market: '0x0940B0A96C5e1ba33AEE331a9f950Bb2a6F2Fb25',
+ marketKey: 'sBNBPERP' as FuturesMarketKey,
+ marketName: 'BNB/sUSD',
+ asset: 'BNB' as FuturesMarketAsset,
+ assetHex: '0x424e420000000000000000000000000000000000000000000000000000000000',
+ currentFundingRate: wei('0.000006647524972557'),
+ currentFundingVelocity: wei('0.000007031227025059'),
+ feeRates: {
+ makerFee: wei('0.300000000000000000'),
+ takerFee: wei('0.300000000000000000'),
+ makerFeeDelayedOrder: wei('0.300000000000000000'),
+ takerFeeDelayedOrder: wei('0.300000000000000000'),
+ makerFeeOffchainDelayedOrder: wei('0.000200000000000000'),
+ takerFeeOffchainDelayedOrder: wei('0.000800000000000000'),
+ },
+ openInterest: {
+ shortPct: 0.4783525165655898,
+ longPct: 0.5216474834344103,
+ shortUSD: wei('925695.596442819678463907'),
+ longUSD: wei('1009478.912701613579629876'),
+ long: wei('4066.418411201914495882'),
+ short: wei('3728.919513999078804517'),
+ },
+ marketDebt: wei('861660.108202170990537641'),
+ marketSkew: wei('337.498897202835691365'),
+ contractMaxLeverage: wei('27.500000000000000000'),
+ appMaxLeverage: wei('25.000000000000000000'),
+ marketSize: wei('7795.337925200993300399'),
+ marketLimitUsd: wei('4964953.483000000000000000'),
+ marketLimitNative: wei('20000.000000000000000000'),
+ minInitialMargin: wei('40.000000000000000000'),
+ keeperDeposit: wei('1.490641175532237679'),
+ isSuspended: false,
+ marketClosureReason: 'market-closure' as SynthSuspensionReason,
+ settings: {
+ maxMarketValue: wei('20000.000000000000000000'),
+ skewScale: wei('750000.000000000000000000'),
+ delayedOrderConfirmWindow: 120,
+ offchainDelayedOrderMinAge: 4,
+ offchainDelayedOrderMaxAge: 60,
+ minDelayTimeDelta: 60,
+ maxDelayTimeDelta: 6000,
+ },
+ },
+
+ {
+ market: '0x2B3bb4c683BFc5239B029131EEf3B1d214478d93',
+ marketKey: 'sETHPERP',
+ marketName: 'ETH/sUSD' as FuturesMarketKey,
+ asset: 'sETH' as FuturesMarketAsset,
+ assetHex: '0x7345544800000000000000000000000000000000000000000000000000000000',
+ currentFundingRate: wei('-0.000025743917111574'),
+ currentFundingVelocity: wei('-0.000000709004693224'),
+ feeRates: {
+ makerFee: wei('0.300000000000000000'),
+ takerFee: wei('0.300000000000000000'),
+ makerFeeDelayedOrder: wei('0.300000000000000000'),
+ takerFeeDelayedOrder: wei('0.300000000000000000'),
+ makerFeeOffchainDelayedOrder: wei('0.000200000000000000'),
+ takerFeeOffchainDelayedOrder: wei('0.000600000000000000'),
+ },
+ openInterest: {
+ shortPct: 0.5015705899969076,
+ longPct: 0.4984294100030924,
+ shortUSD: wei('13142288.928936562683740571'),
+ longUSD: wei('13059982.876947410778757960'),
+ long: wei('7200.123095223081871052'),
+ short: wei('7245.499395589429634136'),
+ },
+ marketDebt: wei('9564940.585953458555968058'),
+ marketSkew: wei('-45.376300366347763084'),
+ contractMaxLeverage: wei('55.000000000000000000'),
+ appMaxLeverage: wei('50.000000000000000000'),
+ marketSize: wei('14445.622490812511505188'),
+ marketLimitUsd: wei('36277110.000000000000000000'),
+ marketLimitNative: wei('20000.000000000000000000'),
+ minInitialMargin: wei('40.000000000000000000'),
+ keeperDeposit: wei('1.490641175532237679'),
+ isSuspended: false,
+ marketClosureReason: 'market-closure' as SynthSuspensionReason,
+ settings: {
+ maxMarketValue: wei('20000.000000000000000000'),
+ skewScale: wei('1000000.000000000000000000'),
+ delayedOrderConfirmWindow: 120,
+ offchainDelayedOrderMinAge: 4,
+ offchainDelayedOrderMaxAge: 60,
+ minDelayTimeDelta: 60,
+ maxDelayTimeDelta: 6000,
+ },
+ },
+ {
+ market: '0x59b007E9ea8F89b069c43F8f45834d30853e3699',
+ marketKey: 'sBTCPERP' as FuturesMarketKey,
+ marketName: 'BTC/sUSD',
+ asset: 'sBTC' as FuturesMarketAsset,
+ assetHex: '0x7342544300000000000000000000000000000000000000000000000000000000',
+ currentFundingRate: wei('0.000048566384344668'),
+ currentFundingVelocity: wei('-0.000000151964222070'),
+ feeRates: {
+ makerFee: wei('0.300000000000000000'),
+ takerFee: wei('0.300000000000000000'),
+ makerFeeDelayedOrder: wei('0.300000000000000000'),
+ takerFeeDelayedOrder: wei('0.300000000000000000'),
+ makerFeeOffchainDelayedOrder: wei('0.000200000000000000'),
+ takerFeeOffchainDelayedOrder: wei('0.000600000000000000'),
+ },
+ openInterest: {
+ shortPct: 0.5002984445053714,
+ longPct: 0.4997015554946286,
+ shortUSD: wei('23569324.160750116734578584'),
+ longUSD: wei('23541204.403959554931944732'),
+ long: wei('814.213770734233251071'),
+ short: wei('815.186341755481507078'),
+ },
+ marketDebt: wei('8746498.919374243549025556'),
+ marketSkew: wei('-0.972571021248256007'),
+ contractMaxLeverage: wei('55.000000000000000000'),
+ appMaxLeverage: wei('50.000000000000000000'),
+ marketSize: wei('1629.400112489714758149'),
+ marketLimitUsd: wei('57825611.037580000000000000'),
+ marketLimitNative: wei('2000.000000000000000000'),
+ minInitialMargin: wei('40.000000000000000000'),
+ keeperDeposit: wei('1.490641175532237679'),
+ isSuspended: false,
+ marketClosureReason: 'market-closure' as SynthSuspensionReason,
+ settings: {
+ maxMarketValue: wei('2000.000000000000000000'),
+ skewScale: wei('100000.000000000000000000'),
+ delayedOrderConfirmWindow: 120,
+ offchainDelayedOrderMinAge: 4,
+ offchainDelayedOrderMaxAge: 60,
+ minDelayTimeDelta: 60,
+ maxDelayTimeDelta: 6000,
+ },
+ },
+]
+
+export const MOCK_TRADE_PREVIEW = {
+ fee: wei('0.199964245556097993'),
+ liqPrice: wei('1684.972418555525651097'),
+ margin: wei('99.800035754443902007'),
+ price: wei('1847.756843061337953400'),
+ size: '0.541100000000000000',
+ sizeDelta: '0.541100000000000000',
+ side: 'long',
+ leverage: '10.018245186209463524',
+ notionalValue: '999.821227780489966584',
+ status: 0,
+ showStatus: false,
+ statusMessage: 'Success',
+ priceImpact: '0.000000270556392273',
+ exceedsPriceProtection: false,
+}
+
+export const preloadedStateWithSmartMarginAccount = (mockAccount = mockSmartMarginAccount()) => {
+ return {
+ ...PRELOADED_STATE,
+ futures: {
+ ...FUTURES_INITIAL_STATE,
+ crossMargin: {
+ ...FUTURES_INITIAL_STATE.crossMargin,
+ accounts: {
+ [10 as NetworkId]: {
+ [TEST_ADDR]: mockAccount,
+ },
+ },
+ },
+ },
+ }
+}
diff --git a/packages/app/testing/unit/mocks/hooks.ts b/packages/app/testing/unit/mocks/hooks.ts
new file mode 100644
index 0000000000..8fea6bc2ba
--- /dev/null
+++ b/packages/app/testing/unit/mocks/hooks.ts
@@ -0,0 +1,24 @@
+import { Breakpoint, BREAKPOINTS } from '../../../src/styles/media'
+
+export const mockUseWindowSize = (
+ mockedWidth: number = 1000,
+ deviceType: 'mobile' | 'tablet' | 'desktop' = 'desktop'
+) => {
+ const lessThanWidth = (breakpoint: Breakpoint) => {
+ const bpSize = BREAKPOINTS[breakpoint]
+ return mockedWidth < bpSize
+ }
+
+ const greaterThanWidth = (breakpoint: Breakpoint) => {
+ const bpSize = BREAKPOINTS[breakpoint]
+ return mockedWidth > bpSize
+ }
+
+ jest.mock('hooks/useWindowSize', () => {
+ return {
+ lessThanWidth: jest.fn(() => greaterThanWidth),
+ greaterThanWidth: jest.fn(() => lessThanWidth),
+ deviceType: deviceType,
+ }
+ })
+}
diff --git a/packages/app/testing/unit/mocks/mockConnector.ts b/packages/app/testing/unit/mocks/mockConnector.ts
index 8b25fcfaf0..43e9ac9fb6 100644
--- a/packages/app/testing/unit/mocks/mockConnector.ts
+++ b/packages/app/testing/unit/mocks/mockConnector.ts
@@ -1,10 +1,37 @@
+import { BigNumber } from '@ethersproject/bignumber'
+import { weiFromEth } from '@kwenta/sdk/utils'
+
import Connector from 'containers/Connector/Connector'
-import { DEFAULT_NETWORK, MOCK_SIGNER, TEST_ADDR } from '../constants'
+import { DEFAULT_NETWORK, MOCK_SIGNER, TEST_ADDR } from './data/app'
+
+export type MockEthProvider = Record
+
+const DEFAULT_PROVIDER = {
+ network: DEFAULT_NETWORK,
+ blockNumber: 5000,
+ getNetwork: () => DEFAULT_NETWORK,
+ waitForTransaction: () => {},
+ getBlockNumber: () => 5000,
+ getGasPrice: () => BigNumber.from('2000000000'),
+ getBalance: () => BigNumber.from(weiFromEth('10')),
+ estimateGas: () => BigNumber.from('100000'),
+ sendTransaction: () => {},
+ getLogs: () => [],
+ getEtherPrice: () => 1000,
+ getTransactionCount: () => 1,
+ getAvatar: () => '',
+ lookupAddress: () => 'name',
+}
-import { mockProvider } from './mockEthersProvider'
+export const mockProvider = (overrides: MockEthProvider = {}) => {
+ return {
+ ...DEFAULT_PROVIDER,
+ ...overrides,
+ }
+}
-const DEFAULT_CONNECTOR = {
+export const DEFAULT_CONNECTOR = {
activeChain: {
id: DEFAULT_NETWORK.id,
name: DEFAULT_NETWORK.name,
@@ -24,9 +51,8 @@ const DEFAULT_CONNECTOR = {
synthsMap: {},
tokensMap: {},
staticMainnetProvider: null,
- defaultSynthetixjs: null,
- l2Synthetixjs: null,
l2SynthsMap: {},
+ providerReady: true,
}
const mockConnector = (overrides?: Record) => {
diff --git a/packages/app/testing/unit/mocks/mockEthersProvider.ts b/packages/app/testing/unit/mocks/mockEthersProvider.ts
deleted file mode 100644
index 4dde3e264f..0000000000
--- a/packages/app/testing/unit/mocks/mockEthersProvider.ts
+++ /dev/null
@@ -1,30 +0,0 @@
-import { BigNumber } from '@ethersproject/bignumber'
-import { weiFromEth } from '@kwenta/sdk/utils'
-
-import { DEFAULT_NETWORK } from '../constants'
-
-export type MockEthProvider = Record
-
-const DEFAULT_PROVIDER = {
- network: DEFAULT_NETWORK,
- blockNumber: 5000,
- getNetwork: () => DEFAULT_NETWORK,
- waitForTransaction: () => {},
- getBlockNumber: () => 5000,
- getGasPrice: () => BigNumber.from('2000000000'),
- getBalance: () => BigNumber.from(weiFromEth('10')),
- estimateGas: () => BigNumber.from('100000'),
- sendTransaction: () => {},
- getLogs: () => [],
- getEtherPrice: () => 1000,
- getTransactionCount: () => 1,
- getAvatar: () => '',
- lookupAddress: () => 'name',
-}
-
-export const mockProvider = (overrides: MockEthProvider = {}) => {
- return {
- ...DEFAULT_PROVIDER,
- ...overrides,
- }
-}
diff --git a/packages/app/testing/unit/mocks/mockQueries.ts b/packages/app/testing/unit/mocks/queries.ts
similarity index 100%
rename from packages/app/testing/unit/mocks/mockQueries.ts
rename to packages/app/testing/unit/mocks/queries.ts
diff --git a/packages/app/testing/unit/setup/global.js b/packages/app/testing/unit/setup/global.js
index 10af2f936d..cadfa9903e 100644
--- a/packages/app/testing/unit/setup/global.js
+++ b/packages/app/testing/unit/setup/global.js
@@ -1,3 +1,3 @@
module.exports = async () => {
- process.env.TZ = 'UTC';
-};
+ process.env.TZ = 'UTC'
+}
diff --git a/packages/app/testing/unit/setup/setup.js b/packages/app/testing/unit/setup/setup.js
index a1b1ef96b1..4193784ce0 100644
--- a/packages/app/testing/unit/setup/setup.js
+++ b/packages/app/testing/unit/setup/setup.js
@@ -2,5 +2,20 @@ import '@testing-library/jest-dom'
import { TextEncoder, TextDecoder } from 'util'
global.TextEncoder = TextEncoder
global.TextDecoder = TextDecoder
-jest.mock('src/components/Slider/ValueLabel')
jest.setTimeout(30000)
+
+jest.mock('@rainbow-me/rainbowkit', () => ({
+ wallet: {
+ metaMask: () => {},
+ rainbow: () => {},
+ coinbase: () => {},
+ walletConnect: () => {},
+ ledger: () => {},
+ brave: () => {},
+ trust: () => {},
+ },
+ connectorsForWallets: () => {},
+ useConnectModal: () => ({
+ openConnectModal: () => {},
+ }),
+}))
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 08cc926b47..ab1ccdd83a 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -9,47 +9,47 @@ importers:
.:
devDependencies:
'@typescript-eslint/eslint-plugin':
- specifier: 5.60.1
- version: 5.60.1(@typescript-eslint/parser@5.60.1)(eslint@8.43.0)(typescript@5.1.6)
+ specifier: 5.61.0
+ version: 5.61.0(@typescript-eslint/parser@5.61.0)(eslint@8.44.0)(typescript@5.1.6)
'@typescript-eslint/parser':
- specifier: 5.60.1
- version: 5.60.1(eslint@8.43.0)(typescript@5.1.6)
+ specifier: 5.61.0
+ version: 5.61.0(eslint@8.44.0)(typescript@5.1.6)
eslint:
- specifier: 8.43.0
- version: 8.43.0
+ specifier: 8.44.0
+ version: 8.44.0
eslint-config-prettier:
specifier: 8.8.0
- version: 8.8.0(eslint@8.43.0)
+ version: 8.8.0(eslint@8.44.0)
eslint-config-react-app:
specifier: 7.0.1
- version: 7.0.1(@babel/plugin-syntax-flow@7.22.5)(@babel/plugin-transform-react-jsx@7.22.5)(eslint@8.43.0)(typescript@5.1.6)
+ version: 7.0.1(@babel/plugin-syntax-flow@7.22.5)(@babel/plugin-transform-react-jsx@7.22.5)(eslint@8.44.0)(typescript@5.1.6)
eslint-plugin-cypress:
specifier: 2.13.3
- version: 2.13.3(eslint@8.43.0)
+ version: 2.13.3(eslint@8.44.0)
eslint-plugin-flowtype:
specifier: 8.0.3
- version: 8.0.3(@babel/plugin-syntax-flow@7.22.5)(@babel/plugin-transform-react-jsx@7.22.5)(eslint@8.43.0)
+ version: 8.0.3(@babel/plugin-syntax-flow@7.22.5)(@babel/plugin-transform-react-jsx@7.22.5)(eslint@8.44.0)
eslint-plugin-import:
specifier: 2.27.5
- version: 2.27.5(@typescript-eslint/parser@5.60.1)(eslint-import-resolver-typescript@3.5.5)(eslint@8.43.0)
+ version: 2.27.5(@typescript-eslint/parser@5.61.0)(eslint-import-resolver-typescript@3.5.5)(eslint@8.44.0)
eslint-plugin-jsx-a11y:
specifier: 6.7.1
- version: 6.7.1(eslint@8.43.0)
+ version: 6.7.1(eslint@8.44.0)
eslint-plugin-prettier:
specifier: 4.2.1
- version: 4.2.1(eslint-config-prettier@8.8.0)(eslint@8.43.0)(prettier@2.8.8)
+ version: 4.2.1(eslint-config-prettier@8.8.0)(eslint@8.44.0)(prettier@2.8.8)
eslint-plugin-react:
specifier: 7.32.2
- version: 7.32.2(eslint@8.43.0)
+ version: 7.32.2(eslint@8.44.0)
eslint-plugin-react-hooks:
specifier: 4.6.0
- version: 4.6.0(eslint@8.43.0)
+ version: 4.6.0(eslint@8.44.0)
eslint-plugin-testing-library:
specifier: 5.11.0
- version: 5.11.0(eslint@8.43.0)(typescript@5.1.6)
+ version: 5.11.0(eslint@8.44.0)(typescript@5.1.6)
eslint-plugin-ui-testing:
specifier: 2.0.1
- version: 2.0.1(eslint@8.43.0)(typescript@5.1.6)
+ version: 2.0.1(eslint@8.44.0)(typescript@5.1.6)
husky:
specifier: 8.0.3
version: 8.0.3
@@ -135,14 +135,14 @@ importers:
specifier: 2.21.3
version: 2.21.3
date-fns-tz:
- specifier: 1.3.7
- version: 1.3.7(date-fns@2.21.3)
+ specifier: 2.0.0
+ version: 2.0.0(date-fns@2.21.3)
echarts:
specifier: 5.4.2
version: 5.4.2
eslint-config-next:
specifier: ^13.4.6
- version: 13.4.7(eslint@8.43.0)(typescript@5.1.6)
+ version: 13.4.7(eslint@8.44.0)(typescript@5.1.6)
ethcall:
specifier: 4.7.2
version: 4.7.2
@@ -246,9 +246,6 @@ importers:
specifier: ^5.4.3
version: 5.4.3
devDependencies:
- '@microsoft/eslint-formatter-sarif':
- specifier: 2.1.7
- version: 2.1.7
'@next/eslint-plugin-next':
specifier: 13.4.7
version: 13.4.7
@@ -256,8 +253,8 @@ importers:
specifier: 7.0.24
version: 7.0.24(react-dom@18.2.0)(react@18.2.0)
'@storybook/addon-essentials':
- specifier: 7.0.24
- version: 7.0.24(react-dom@18.2.0)(react@18.2.0)
+ specifier: 7.0.25
+ version: 7.0.25(react-dom@18.2.0)(react@18.2.0)
'@storybook/addon-links':
specifier: 7.0.24
version: 7.0.24(react-dom@18.2.0)(react@18.2.0)
@@ -347,7 +344,7 @@ importers:
version: 6.8.1(webpack@5.88.0)
eslint-config-turbo:
specifier: 1.10.6
- version: 1.10.6(eslint@8.43.0)
+ version: 1.10.6(eslint@8.44.0)
html-to-image:
specifier: 1.11.11
version: 1.11.11
@@ -463,6 +460,10 @@ importers:
packages:
+ /@aashutoshrathi/word-wrap@1.2.6:
+ resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==}
+ engines: {node: '>=0.10.0'}
+
/@adobe/css-tools@4.2.0:
resolution: {integrity: sha512-E09FiIft46CmH5Qnjb0wsW54/YQd69LsxeKUOWawmws1XWvyFGURnAChH0mlr7YPFR1ofwvUQfcL0J3lMxXqPA==}
dev: true
@@ -544,7 +545,7 @@ packages:
transitivePeerDependencies:
- supports-color
- /@babel/eslint-parser@7.22.5(@babel/core@7.22.5)(eslint@8.43.0):
+ /@babel/eslint-parser@7.22.5(@babel/core@7.22.5)(eslint@8.44.0):
resolution: {integrity: sha512-C69RWYNYtrgIRE5CmTd77ZiLDXqgBipahJc/jHP3sLcAGj6AJzxNIuKNpVnICqbyK7X3pFUfEvL++rvtbQpZkQ==}
engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0}
peerDependencies:
@@ -553,7 +554,7 @@ packages:
dependencies:
'@babel/core': 7.22.5
'@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1
- eslint: 8.43.0
+ eslint: 8.44.0
eslint-visitor-keys: 2.1.0
semver: 6.3.0
dev: true
@@ -3441,26 +3442,26 @@ packages:
dev: true
optional: true
- /@eslint-community/eslint-utils@4.4.0(eslint@8.43.0):
+ /@eslint-community/eslint-utils@4.4.0(eslint@8.44.0):
resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
dependencies:
- eslint: 8.43.0
+ eslint: 8.44.0
eslint-visitor-keys: 3.4.1
/@eslint-community/regexpp@4.5.1:
resolution: {integrity: sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==}
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
- /@eslint/eslintrc@2.0.3:
- resolution: {integrity: sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==}
+ /@eslint/eslintrc@2.1.0:
+ resolution: {integrity: sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dependencies:
ajv: 6.12.6
debug: 4.3.4(supports-color@5.5.0)
- espree: 9.5.2
+ espree: 9.6.0
globals: 13.20.0
ignore: 5.2.4
import-fresh: 3.3.0
@@ -3470,8 +3471,8 @@ packages:
transitivePeerDependencies:
- supports-color
- /@eslint/js@8.43.0:
- resolution: {integrity: sha512-s2UHCoiXfxMvmfzqoN+vrQ84ahUSYde9qNO1MdxmoEhyHWsfmwOpFlwYV+ePJEVc7gFnATGUi376WowX1N7tFg==}
+ /@eslint/js@8.44.0:
+ resolution: {integrity: sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
/@eth-optimism/contracts@0.5.37(ethers@5.7.2):
@@ -4434,17 +4435,6 @@ packages:
- supports-color
dev: false
- /@microsoft/eslint-formatter-sarif@2.1.7:
- resolution: {integrity: sha512-gDNc2elHjX0eqk34HxxRxEwEL49SrvXImOoK1bZHq7IDYfuY1xY/CUx8/gOWgvwf6Qv2Yy3HirzjIvKXKH82vQ==}
- dependencies:
- eslint: 8.43.0
- jschardet: 3.0.0
- lodash: 4.17.21
- utf8: 3.0.0
- transitivePeerDependencies:
- - supports-color
- dev: true
-
/@motionone/animation@10.15.1:
resolution: {integrity: sha512-mZcJxLjHor+bhcPuIFErMDNyrdb2vJur8lSfMCsuCB4UyV8ILZLvK+t+pg56erv8ud9xQGK/1OGPt10agPrCyQ==}
dependencies:
@@ -5272,8 +5262,8 @@ packages:
uuid: 9.0.0
dev: true
- /@storybook/addon-backgrounds@7.0.24(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-vThKkrSj+J7matGowxIJ4eV+kAF8iUHGQjlaW0J7vhzmVkNnxBvNn/DGOWWQLAJPCTmLVelLaBZEWcMNoKJiVA==}
+ /@storybook/addon-actions@7.0.25(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-UgqNz7Sqr8v2KyIZlQKcysULIExCLRwmHc+O+QJqeKhz/MD89hFTsH612XaIJMwBqfcdKvxLBL6euaUbziUzlQ==}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -5283,22 +5273,53 @@ packages:
react-dom:
optional: true
dependencies:
- '@storybook/client-logger': 7.0.24
- '@storybook/components': 7.0.24(react-dom@18.2.0)(react@18.2.0)
- '@storybook/core-events': 7.0.24
+ '@storybook/client-logger': 7.0.25
+ '@storybook/components': 7.0.25(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/core-events': 7.0.25
'@storybook/global': 5.0.0
- '@storybook/manager-api': 7.0.24(react-dom@18.2.0)(react@18.2.0)
- '@storybook/preview-api': 7.0.24
- '@storybook/theming': 7.0.24(react-dom@18.2.0)(react@18.2.0)
- '@storybook/types': 7.0.24
+ '@storybook/manager-api': 7.0.25(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/preview-api': 7.0.25
+ '@storybook/theming': 7.0.25(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/types': 7.0.25
+ dequal: 2.0.3
+ lodash: 4.17.21
+ polished: 4.2.2
+ prop-types: 15.8.1
+ react: 18.2.0
+ react-dom: 18.2.0(react@18.2.0)
+ react-inspector: 6.0.2(react@18.2.0)
+ telejson: 7.1.0
+ ts-dedent: 2.2.0
+ uuid: 9.0.0
+ dev: true
+
+ /@storybook/addon-backgrounds@7.0.25(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-KfZntItpQwDicj/cef6cXXcfhosdmE7oOl3yxra9O8aO21k9fR9Tuux6WFAg3PSpV4fENqkUnVryLmqq+kYoJw==}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
+ react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+ peerDependenciesMeta:
+ react:
+ optional: true
+ react-dom:
+ optional: true
+ dependencies:
+ '@storybook/client-logger': 7.0.25
+ '@storybook/components': 7.0.25(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/core-events': 7.0.25
+ '@storybook/global': 5.0.0
+ '@storybook/manager-api': 7.0.25(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/preview-api': 7.0.25
+ '@storybook/theming': 7.0.25(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/types': 7.0.25
memoizerific: 1.11.3
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
ts-dedent: 2.2.0
dev: true
- /@storybook/addon-controls@7.0.24(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-x05Ng4wyBRkrupgSkBHKZSGPyUbvIDGiBseA/AjA/BNAMUMWy3t8ll9f7tlKzyDPaUeBSv8peP21r/Ry26Eqhw==}
+ /@storybook/addon-controls@7.0.25(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-bldiCQWDz9e+xseWdjcRW0/1CR2cA3H5dHk7L8KoEJiVzBAARNcLJgNOnCIxuwAlNJqlRCCxo9PfVRfBtyU75g==}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -5308,15 +5329,15 @@ packages:
react-dom:
optional: true
dependencies:
- '@storybook/blocks': 7.0.24(react-dom@18.2.0)(react@18.2.0)
- '@storybook/client-logger': 7.0.24
- '@storybook/components': 7.0.24(react-dom@18.2.0)(react@18.2.0)
- '@storybook/core-common': 7.0.24
- '@storybook/manager-api': 7.0.24(react-dom@18.2.0)(react@18.2.0)
- '@storybook/node-logger': 7.0.24
- '@storybook/preview-api': 7.0.24
- '@storybook/theming': 7.0.24(react-dom@18.2.0)(react@18.2.0)
- '@storybook/types': 7.0.24
+ '@storybook/blocks': 7.0.25(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/client-logger': 7.0.25
+ '@storybook/components': 7.0.25(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/core-common': 7.0.25
+ '@storybook/manager-api': 7.0.25(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/node-logger': 7.0.25
+ '@storybook/preview-api': 7.0.25
+ '@storybook/theming': 7.0.25(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/types': 7.0.25
lodash: 4.17.21
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
@@ -5326,8 +5347,8 @@ packages:
- supports-color
dev: true
- /@storybook/addon-docs@7.0.24(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-O5S+E6+8c/EHEQc5WcrNQ8dOVg9Q2ONIOYxlbSAcfMUA/d+tRR9xXTZog7nv1tj4U0G29+Vr4pKgsGh3Ya5qcw==}
+ /@storybook/addon-docs@7.0.25(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-fCLjk9AzNDIB9DsmU4YIhlPtqQQ0e4EEC/XrA2DXIkjBgMtEwM2DEj3My/FKz1plZ/V6qZFTa5MkMbF0H/cuAA==}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -5336,19 +5357,19 @@ packages:
'@babel/plugin-transform-react-jsx': 7.22.5(@babel/core@7.22.5)
'@jest/transform': 29.5.0
'@mdx-js/react': 2.3.0(react@18.2.0)
- '@storybook/blocks': 7.0.24(react-dom@18.2.0)(react@18.2.0)
- '@storybook/client-logger': 7.0.24
- '@storybook/components': 7.0.24(react-dom@18.2.0)(react@18.2.0)
- '@storybook/csf-plugin': 7.0.24
- '@storybook/csf-tools': 7.0.24
+ '@storybook/blocks': 7.0.25(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/client-logger': 7.0.25
+ '@storybook/components': 7.0.25(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/csf-plugin': 7.0.25
+ '@storybook/csf-tools': 7.0.25
'@storybook/global': 5.0.0
'@storybook/mdx2-csf': 1.1.0
- '@storybook/node-logger': 7.0.24
- '@storybook/postinstall': 7.0.24
- '@storybook/preview-api': 7.0.24
- '@storybook/react-dom-shim': 7.0.24(react-dom@18.2.0)(react@18.2.0)
- '@storybook/theming': 7.0.24(react-dom@18.2.0)(react@18.2.0)
- '@storybook/types': 7.0.24
+ '@storybook/node-logger': 7.0.25
+ '@storybook/postinstall': 7.0.25
+ '@storybook/preview-api': 7.0.25
+ '@storybook/react-dom-shim': 7.0.25(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/theming': 7.0.25(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/types': 7.0.25
fs-extra: 11.1.1
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
@@ -5360,25 +5381,25 @@ packages:
- supports-color
dev: true
- /@storybook/addon-essentials@7.0.24(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-OL27TNQYUJv/FprFCU7Q9RQYrgGdM+4SH+XmsQCcuQuGa67s6/eRKyERwOdy4Pli3Payo76+Vz1DAeJZJ0F8oA==}
+ /@storybook/addon-essentials@7.0.25(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-PQGTiCqMMUJGK9Cschy1R7SrNivwZtDfwaVA2lGPDtWEaFqhCkfhtB8cUyGtZWu+i8ryQwZ5MlhpyTQpm1vMPQ==}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
dependencies:
- '@storybook/addon-actions': 7.0.24(react-dom@18.2.0)(react@18.2.0)
- '@storybook/addon-backgrounds': 7.0.24(react-dom@18.2.0)(react@18.2.0)
- '@storybook/addon-controls': 7.0.24(react-dom@18.2.0)(react@18.2.0)
- '@storybook/addon-docs': 7.0.24(react-dom@18.2.0)(react@18.2.0)
- '@storybook/addon-highlight': 7.0.24
- '@storybook/addon-measure': 7.0.24(react-dom@18.2.0)(react@18.2.0)
- '@storybook/addon-outline': 7.0.24(react-dom@18.2.0)(react@18.2.0)
- '@storybook/addon-toolbars': 7.0.24(react-dom@18.2.0)(react@18.2.0)
- '@storybook/addon-viewport': 7.0.24(react-dom@18.2.0)(react@18.2.0)
- '@storybook/core-common': 7.0.24
- '@storybook/manager-api': 7.0.24(react-dom@18.2.0)(react@18.2.0)
- '@storybook/node-logger': 7.0.24
- '@storybook/preview-api': 7.0.24
+ '@storybook/addon-actions': 7.0.25(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/addon-backgrounds': 7.0.25(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/addon-controls': 7.0.25(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/addon-docs': 7.0.25(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/addon-highlight': 7.0.25
+ '@storybook/addon-measure': 7.0.25(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/addon-outline': 7.0.25(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/addon-toolbars': 7.0.25(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/addon-viewport': 7.0.25(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/core-common': 7.0.25
+ '@storybook/manager-api': 7.0.25(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/node-logger': 7.0.25
+ '@storybook/preview-api': 7.0.25
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
ts-dedent: 2.2.0
@@ -5387,12 +5408,12 @@ packages:
- supports-color
dev: true
- /@storybook/addon-highlight@7.0.24:
- resolution: {integrity: sha512-IoCJHiX5Ai+7S08isxt7BH4baNF2RsjuGUA/iMoJtto/rMc5u0xftVeIjh6oVqV3tjckowXpezI3oStnrLWuRw==}
+ /@storybook/addon-highlight@7.0.25:
+ resolution: {integrity: sha512-m93DWSWRXkiSTTSATNhOLV2dTGPO5ACT81VeE7ffRzOqFcWsOR2d1RivKNQs2zRlPzjZQEz3UTFuaqjyTfr45Q==}
dependencies:
- '@storybook/core-events': 7.0.24
+ '@storybook/core-events': 7.0.25
'@storybook/global': 5.0.0
- '@storybook/preview-api': 7.0.24
+ '@storybook/preview-api': 7.0.25
dev: true
/@storybook/addon-links@7.0.24(react-dom@18.2.0)(react@18.2.0):
@@ -5420,8 +5441,8 @@ packages:
ts-dedent: 2.2.0
dev: true
- /@storybook/addon-measure@7.0.24(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-4VNs4rjdz+YFiJCz9DfCmBJwFuoa3pLhcEsAAdT3B+Hrkae+hvLtnQWIvAMsOlSWdl4tiuEWssDf4cjCEne87w==}
+ /@storybook/addon-measure@7.0.25(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-2pa9P0sRqieh9v8d5eJslB2vBwAuRFVedEcK4WYhwT6fK2ALZFdVBB78/K1NX9/Vmhhq+yT+vKA1veam06QDtg==}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -5431,19 +5452,19 @@ packages:
react-dom:
optional: true
dependencies:
- '@storybook/client-logger': 7.0.24
- '@storybook/components': 7.0.24(react-dom@18.2.0)(react@18.2.0)
- '@storybook/core-events': 7.0.24
+ '@storybook/client-logger': 7.0.25
+ '@storybook/components': 7.0.25(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/core-events': 7.0.25
'@storybook/global': 5.0.0
- '@storybook/manager-api': 7.0.24(react-dom@18.2.0)(react@18.2.0)
- '@storybook/preview-api': 7.0.24
- '@storybook/types': 7.0.24
+ '@storybook/manager-api': 7.0.25(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/preview-api': 7.0.25
+ '@storybook/types': 7.0.25
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
dev: true
- /@storybook/addon-outline@7.0.24(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-YwSfs8bsmh7mEF+rlmL7zBsebWA5e/Rsf09vVqt6/k3fpopgBrq44zQlMwo1dCWV/0YhhXQF21OGzeJ1dSb8fA==}
+ /@storybook/addon-outline@7.0.25(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-f8DN7RQO6vgamqfJ96C8lG3btrKbwbIfyFjJMTrmnZhi2miMXpTAJnGZQSaNwdtPDvpf1Rxsx0bHRRUn6ko56g==}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -5453,20 +5474,20 @@ packages:
react-dom:
optional: true
dependencies:
- '@storybook/client-logger': 7.0.24
- '@storybook/components': 7.0.24(react-dom@18.2.0)(react@18.2.0)
- '@storybook/core-events': 7.0.24
+ '@storybook/client-logger': 7.0.25
+ '@storybook/components': 7.0.25(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/core-events': 7.0.25
'@storybook/global': 5.0.0
- '@storybook/manager-api': 7.0.24(react-dom@18.2.0)(react@18.2.0)
- '@storybook/preview-api': 7.0.24
- '@storybook/types': 7.0.24
+ '@storybook/manager-api': 7.0.25(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/preview-api': 7.0.25
+ '@storybook/types': 7.0.25
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
ts-dedent: 2.2.0
dev: true
- /@storybook/addon-toolbars@7.0.24(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-+nDVahs2kAojzF6RbChowJmN0z7cyD/5BGMEhBemhBWSuMVnQLLEgtQi/kOY5fUxq3z1BkqcE4LV98u5CIKgKg==}
+ /@storybook/addon-toolbars@7.0.25(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-Vy5FOIJKfJlTuD96XJTB8smA2+R5u+VtSwE+nHtiU66hwXtwj2YeZibL1acALlxDerYYwJw23k02R+DoGdxpIA==}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -5476,17 +5497,17 @@ packages:
react-dom:
optional: true
dependencies:
- '@storybook/client-logger': 7.0.24
- '@storybook/components': 7.0.24(react-dom@18.2.0)(react@18.2.0)
- '@storybook/manager-api': 7.0.24(react-dom@18.2.0)(react@18.2.0)
- '@storybook/preview-api': 7.0.24
- '@storybook/theming': 7.0.24(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/client-logger': 7.0.25
+ '@storybook/components': 7.0.25(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/manager-api': 7.0.25(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/preview-api': 7.0.25
+ '@storybook/theming': 7.0.25(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
dev: true
- /@storybook/addon-viewport@7.0.24(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-bc3TR+feemGxVP1QQT6OsFSldHjLToJNuQAGd5EEBsDFhcMTsmitiGVoxIylqIhfioL9zauLIsk5eLZ/TYxuXQ==}
+ /@storybook/addon-viewport@7.0.25(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-MOc03NGA2emcGMbEaCFsacgKTowzUNGxcHBlmXtKv0h1T9GvQKUMzXbiwOkY/DExcqcYdU+5Ch5XrxmW9Ld2VQ==}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -5496,13 +5517,13 @@ packages:
react-dom:
optional: true
dependencies:
- '@storybook/client-logger': 7.0.24
- '@storybook/components': 7.0.24(react-dom@18.2.0)(react@18.2.0)
- '@storybook/core-events': 7.0.24
+ '@storybook/client-logger': 7.0.25
+ '@storybook/components': 7.0.25(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/core-events': 7.0.25
'@storybook/global': 5.0.0
- '@storybook/manager-api': 7.0.24(react-dom@18.2.0)(react@18.2.0)
- '@storybook/preview-api': 7.0.24
- '@storybook/theming': 7.0.24(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/manager-api': 7.0.25(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/preview-api': 7.0.25
+ '@storybook/theming': 7.0.25(react-dom@18.2.0)(react@18.2.0)
memoizerific: 1.11.3
prop-types: 15.8.1
react: 18.2.0
@@ -5539,23 +5560,23 @@ packages:
react-dom: 18.2.0(react@18.2.0)
dev: true
- /@storybook/blocks@7.0.24(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-76pe4QC3WZBVxBt/RomGubW5xzbh4uF7LVn1Vonfujf4GaHgIDzu7KtLIjgM3NmDJCsp3PNfbgA1EKzWrPQz2A==}
+ /@storybook/blocks@7.0.25(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-R0On6JMPPqtLI7yXzKWC3wFbbW2MmHZBlY4bMNH/PYoyY2u7mSCM+49Qwsulja8I/bG8mAraueVWTNbyEunQyg==}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
dependencies:
- '@storybook/channels': 7.0.24
- '@storybook/client-logger': 7.0.24
- '@storybook/components': 7.0.24(react-dom@18.2.0)(react@18.2.0)
- '@storybook/core-events': 7.0.24
+ '@storybook/channels': 7.0.25
+ '@storybook/client-logger': 7.0.25
+ '@storybook/components': 7.0.25(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/core-events': 7.0.25
'@storybook/csf': 0.1.1
- '@storybook/docs-tools': 7.0.24
+ '@storybook/docs-tools': 7.0.25
'@storybook/global': 5.0.0
- '@storybook/manager-api': 7.0.24(react-dom@18.2.0)(react@18.2.0)
- '@storybook/preview-api': 7.0.24
- '@storybook/theming': 7.0.24(react-dom@18.2.0)(react@18.2.0)
- '@storybook/types': 7.0.24
+ '@storybook/manager-api': 7.0.25(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/preview-api': 7.0.25
+ '@storybook/theming': 7.0.25(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/types': 7.0.25
'@types/lodash': 4.14.195
color-convert: 2.0.1
dequal: 2.0.3
@@ -5675,6 +5696,17 @@ packages:
telejson: 7.1.0
dev: true
+ /@storybook/channel-postmessage@7.0.25:
+ resolution: {integrity: sha512-h4AHsgaGNcTJD8gzHAOAA6L9oxg4fVOw0LVO1L6Jd0CJ0jDV1jc3UPqh+i3bkTOB/4xjaT5xSr1h+eCUAA+N+w==}
+ dependencies:
+ '@storybook/channels': 7.0.25
+ '@storybook/client-logger': 7.0.25
+ '@storybook/core-events': 7.0.25
+ '@storybook/global': 5.0.0
+ qs: 6.11.2
+ telejson: 7.1.0
+ dev: true
+
/@storybook/channel-websocket@7.0.24:
resolution: {integrity: sha512-GKSlWx5FgMQM0TKRCSGNTxLh0YU7xmg7m6FH8b/mvhH0Uido487qcJap2Ma/WOLe8aRiZo9jJpfcbUsKBWhuMg==}
dependencies:
@@ -5688,6 +5720,10 @@ packages:
resolution: {integrity: sha512-NZVLwMhtzy6cZrNRjshFvMAD9mQTmJDNwhohodSkM/YFCDVFhmxQk9tgizVGh9MwY3CYGJ1SI96RUejGosb49Q==}
dev: true
+ /@storybook/channels@7.0.25:
+ resolution: {integrity: sha512-FLuXysj0uHBQNHpfiggtyaV0EFCMVWgEQjJLeBysqB/+sBCtpjrD7kUKrgJFF+N/IEhJq/dlWt7jOpxT2bffQA==}
+ dev: true
+
/@storybook/cli@7.0.24:
resolution: {integrity: sha512-TmHPJrcqUMAGpPKqw0PHI82m+Tyh6J8LgWjyZENpOGJlQH6SJ5caA/ho9R3pqVuMRRcnGgWt0xq1YJtDlYBN9g==}
hasBin: true
@@ -5750,6 +5786,12 @@ packages:
'@storybook/global': 5.0.0
dev: true
+ /@storybook/client-logger@7.0.25:
+ resolution: {integrity: sha512-jPUH38qA+FFiEkeA6vzo2Uq2tbgJolII2nKcKw6K6KMSv+/lJNElQ4extEvXHjmPe7TqPIZVDlh8QMh5DlZO5Q==}
+ dependencies:
+ '@storybook/global': 5.0.0
+ dev: true
+
/@storybook/codemod@7.0.24:
resolution: {integrity: sha512-PukV4GRPIISuVxpMMlTilwlGXdZ7E+JZWHNVb1tTwntmxMNcby8UxyWSHjbOpA2fxXGeUCjgCpcfTymJ+hxoYw==}
dependencies:
@@ -5788,6 +5830,24 @@ packages:
util-deprecate: 1.0.2
dev: true
+ /@storybook/components@7.0.25(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-eY6R8P7HRisamVed/HwsgLerhDvL3UKdg9KsgBMoGLc7//lC2Zf9qYnDSMWutCdXJh0Te+gJS/i4Jv63YP3mDQ==}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
+ react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+ dependencies:
+ '@storybook/client-logger': 7.0.25
+ '@storybook/csf': 0.1.1
+ '@storybook/global': 5.0.0
+ '@storybook/theming': 7.0.25(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/types': 7.0.25
+ memoizerific: 1.11.3
+ react: 18.2.0
+ react-dom: 18.2.0(react@18.2.0)
+ use-resize-observer: 9.1.0(react-dom@18.2.0)(react@18.2.0)
+ util-deprecate: 1.0.2
+ dev: true
+
/@storybook/core-client@7.0.24:
resolution: {integrity: sha512-uToMHbi5EnOk+8Z941j0hrRE1h9u/QWqCmqS2FBIWrBOeREwy0AAib1/hqihzhO7OzekY5mtLTANiCpIpLHAHQ==}
dependencies:
@@ -5824,10 +5884,43 @@ packages:
- supports-color
dev: true
+ /@storybook/core-common@7.0.25:
+ resolution: {integrity: sha512-ohnYWhsDgOC23CMFeRlR4OM/Y5l7qq0wQiM3KtCYqFUnRwNkHZJ+rj7s6wkKKGUDy4pebvApeW7HFm/sLWaJgw==}
+ dependencies:
+ '@storybook/node-logger': 7.0.25
+ '@storybook/types': 7.0.25
+ '@types/node': 16.18.36
+ '@types/node-fetch': 2.6.4
+ '@types/pretty-hrtime': 1.0.1
+ chalk: 4.1.2
+ esbuild: 0.17.19
+ esbuild-register: 3.4.2(esbuild@0.17.19)
+ file-system-cache: 2.3.0
+ find-up: 5.0.0
+ fs-extra: 11.1.1
+ glob: 8.1.0
+ glob-promise: 6.0.3(glob@8.1.0)
+ handlebars: 4.7.7
+ lazy-universal-dotenv: 4.0.0
+ node-fetch: 2.6.11
+ picomatch: 2.3.1
+ pkg-dir: 5.0.0
+ pretty-hrtime: 1.0.3
+ resolve-from: 5.0.0
+ ts-dedent: 2.2.0
+ transitivePeerDependencies:
+ - encoding
+ - supports-color
+ dev: true
+
/@storybook/core-events@7.0.24:
resolution: {integrity: sha512-xkf/rihCkhqMeh5EA8lVp90/mzbb2gcg6I3oeFWw2hognVcTnPXg6llhWdU4Spqd0cals7GEFmQugIILCmH8GA==}
dev: true
+ /@storybook/core-events@7.0.25:
+ resolution: {integrity: sha512-abM0M+H19eZu0dRK+/2PB0W9b7xXFhiPddXpFCjIfJQFGPIwGBWVAFot1bKR5Mu4IB9OftkJYMRtYEEBrNep3A==}
+ dev: true
+
/@storybook/core-server@7.0.24:
resolution: {integrity: sha512-FJgdbtLgppFMd/RedF728I+v45TRG7s5/3RJfwgRgbq4ZEhKFzZN66MwWFeq3i5Q8ETHVwAxyVvC/JrRqAJxoA==}
dependencies:
@@ -5892,10 +5985,10 @@ packages:
- supports-color
dev: true
- /@storybook/csf-plugin@7.0.24:
- resolution: {integrity: sha512-+oIZCIhrRFbvplXUwJn671ZM0kgNqZ59jM9RmehJGgu5N5h1JSbBcz1edXgStNsMk9e2NJopuOKrzZGTGyi0XA==}
+ /@storybook/csf-plugin@7.0.25:
+ resolution: {integrity: sha512-ncy6X4jsnQj7O0huDpYIRXJwkqMYcomfNQhhohLfoUNi0YIozVqYis3H6JxPGUtErJUPxJZmxnvUf4ox2jdITA==}
dependencies:
- '@storybook/csf-tools': 7.0.24
+ '@storybook/csf-tools': 7.0.25
unplugin: 0.10.2
transitivePeerDependencies:
- supports-color
@@ -5917,6 +6010,22 @@ packages:
- supports-color
dev: true
+ /@storybook/csf-tools@7.0.25:
+ resolution: {integrity: sha512-ybxHmnQDEoqZZnc1DtsFuRmQG6va3eSo/eZeH6ixzTmuA5QWVx1UE7lA97c1wgbipa17+Jo1hJaMkoMPeKc7ew==}
+ dependencies:
+ '@babel/generator': 7.21.9
+ '@babel/parser': 7.21.9
+ '@babel/traverse': 7.21.5
+ '@babel/types': 7.21.5
+ '@storybook/csf': 0.1.1
+ '@storybook/types': 7.0.25
+ fs-extra: 11.1.1
+ recast: 0.23.2
+ ts-dedent: 2.2.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
/@storybook/csf@0.1.1:
resolution: {integrity: sha512-4hE3AlNVxR60Wc5KSC68ASYzUobjPqtSKyhV6G+ge0FIXU55N5nTY7dXGRZHQGDBPq+XqchMkIdlkHPRs8nTHg==}
dependencies:
@@ -5942,6 +6051,21 @@ packages:
- supports-color
dev: true
+ /@storybook/docs-tools@7.0.25:
+ resolution: {integrity: sha512-8JCQ+pFSbXNOdiCcQsfEW1A9u1CuwI/bgP0/xbw5Odl7H4ZQHwdJKOSH3qP5fBnSGIU9j2Leiaka8Kn49e7DOg==}
+ dependencies:
+ '@babel/core': 7.22.5
+ '@storybook/core-common': 7.0.25
+ '@storybook/preview-api': 7.0.25
+ '@storybook/types': 7.0.25
+ '@types/doctrine': 0.0.3
+ doctrine: 3.0.0
+ lodash: 4.17.21
+ transitivePeerDependencies:
+ - encoding
+ - supports-color
+ dev: true
+
/@storybook/global@5.0.0:
resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==}
dev: true
@@ -5971,6 +6095,31 @@ packages:
ts-dedent: 2.2.0
dev: true
+ /@storybook/manager-api@7.0.25(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-ZuimeFd9jUlYip1TLa+Q+CoU7xfHk7ZrCeuPSWG3QGodgt0L1gSwRbQnoS8ZN895Y3i0WQX32nnRWwwSWGrjgA==}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
+ react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+ dependencies:
+ '@storybook/channels': 7.0.25
+ '@storybook/client-logger': 7.0.25
+ '@storybook/core-events': 7.0.25
+ '@storybook/csf': 0.1.1
+ '@storybook/global': 5.0.0
+ '@storybook/router': 7.0.25(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/theming': 7.0.25(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/types': 7.0.25
+ dequal: 2.0.3
+ lodash: 4.17.21
+ memoizerific: 1.11.3
+ react: 18.2.0
+ react-dom: 18.2.0(react@18.2.0)
+ semver: 7.5.2
+ store2: 2.14.2
+ telejson: 7.1.0
+ ts-dedent: 2.2.0
+ dev: true
+
/@storybook/manager@7.0.24:
resolution: {integrity: sha512-LsQd2cFJViwoPJ7K0A/XBWrBBhJv7F0J6+aa7qHszNmIZHVbMXyZfiX7JS3RHVs4I2kLuNpSk4X+iDG0QAafEQ==}
dev: true
@@ -6075,8 +6224,17 @@ packages:
pretty-hrtime: 1.0.3
dev: true
- /@storybook/postinstall@7.0.24:
- resolution: {integrity: sha512-UYMXyEU4nVIKyrlUdIs3NHQmILzrN+EkEDbmeQC2WMMPw+t4GY2cDVmpx90JYYZcn7gY+cNDgQ55iiqbvlamLQ==}
+ /@storybook/node-logger@7.0.25:
+ resolution: {integrity: sha512-ZzglyuEuYgged6xHhupQ3a4N2icvQq+4GL5UXNlMWgSMwthO7yeJERJHavvjjFIukQIF8d5plTy27/LCueIX3g==}
+ dependencies:
+ '@types/npmlog': 4.1.4
+ chalk: 4.1.2
+ npmlog: 5.0.1
+ pretty-hrtime: 1.0.3
+ dev: true
+
+ /@storybook/postinstall@7.0.25:
+ resolution: {integrity: sha512-y4PM5x6C5oGKNd7TnCpomFHlPKTorPl/rGTGR5aJsuj6qeY2rmKvvBb+q2XBEgePjgEli39j9CGCmAdS2B0yWQ==}
dev: true
/@storybook/preset-react-webpack@7.0.24(@babel/core@7.22.5)(esbuild@0.17.19)(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.6):
@@ -6148,6 +6306,26 @@ packages:
util-deprecate: 1.0.2
dev: true
+ /@storybook/preview-api@7.0.25:
+ resolution: {integrity: sha512-/KiCKMOFGSc9LaQxuNDEeWqqn/GRROCWeg4wyhm4bsxhd/DsQfTmLaB/rW0+GZpMMZoOfSITkSYETNCPzNhO9g==}
+ dependencies:
+ '@storybook/channel-postmessage': 7.0.25
+ '@storybook/channels': 7.0.25
+ '@storybook/client-logger': 7.0.25
+ '@storybook/core-events': 7.0.25
+ '@storybook/csf': 0.1.1
+ '@storybook/global': 5.0.0
+ '@storybook/types': 7.0.25
+ '@types/qs': 6.9.7
+ dequal: 2.0.3
+ lodash: 4.17.21
+ memoizerific: 1.11.3
+ qs: 6.11.2
+ synchronous-promise: 2.0.17
+ ts-dedent: 2.2.0
+ util-deprecate: 1.0.2
+ dev: true
+
/@storybook/preview@7.0.24:
resolution: {integrity: sha512-rej4Wz8Qy4gVuyvg4cpQGkR4wJc3b+0Uv6EYylbmpdj2585cOhFtRBykagDVZteVU4xaLMT7YHIZRnoLmJKIgw==}
dev: true
@@ -6181,6 +6359,16 @@ packages:
react-dom: 18.2.0(react@18.2.0)
dev: true
+ /@storybook/react-dom-shim@7.0.25(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-kSwGNqchGVOGP77zFdghN+td6aDgo4VRButnqao6hHnDAGtppMky8AET3jkEgeT8wU01R9TOk5QmEs5JaDHTfA==}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
+ react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+ dependencies:
+ react: 18.2.0
+ react-dom: 18.2.0(react@18.2.0)
+ dev: true
+
/@storybook/react@7.0.24(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.6):
resolution: {integrity: sha512-JAgSs8ANysBl3+cOAjFSVG3bA2V/wP6jyu7oK0jSATRQhHRjRS/tHFMA82j0j98G2sr3JXQUxNt55Qq3k2mUcg==}
engines: {node: '>=16.0.0'}
@@ -6234,6 +6422,19 @@ packages:
react-dom: 18.2.0(react@18.2.0)
dev: true
+ /@storybook/router@7.0.25(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-RcTe407o9m2KvDv+vKG3Qd2zdkswGSa6rIGKvvF/N1wEjB9pyu+HBW5PjAwlXWwPeWpfaz2du/KmXk+dxEFfug==}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
+ react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+ dependencies:
+ '@storybook/client-logger': 7.0.25
+ memoizerific: 1.11.3
+ qs: 6.11.2
+ react: 18.2.0
+ react-dom: 18.2.0(react@18.2.0)
+ dev: true
+
/@storybook/store@7.0.24:
resolution: {integrity: sha512-T6BOXpiIAiGpQcfe0Hyu3d+8Gd0sUaVTSDXJLadfr7tqC6qmMpOuyApFu1qRfgJqh4aykUb75ESCvYWoEjwm+A==}
dependencies:
@@ -6272,6 +6473,20 @@ packages:
react-dom: 18.2.0(react@18.2.0)
dev: true
+ /@storybook/theming@7.0.25(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-OaLtP4jjN6NGvdZpfQq3FO2IE/uZDxcXJdEXCf8azzAyhwvFU5kMA8huCE1KvOGJfAR5lPfDMQDKMXTlkV7frg==}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
+ react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+ dependencies:
+ '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.2.0)
+ '@storybook/client-logger': 7.0.25
+ '@storybook/global': 5.0.0
+ memoizerific: 1.11.3
+ react: 18.2.0
+ react-dom: 18.2.0(react@18.2.0)
+ dev: true
+
/@storybook/types@7.0.24:
resolution: {integrity: sha512-SZh/XBHP1TT5bmEk0W52nT0v6fUnYwmZVls3da5noutdgOAiwL7TANtl41XrNjG+UDr8x0OE3PVVJi+LhwUaNA==}
dependencies:
@@ -6281,6 +6496,15 @@ packages:
file-system-cache: 2.3.0
dev: true
+ /@storybook/types@7.0.25:
+ resolution: {integrity: sha512-18Mn8IRbgsR+QXRa25wbNRJiKapKvODVx6rbBIH9Kim30gbTCgukYKJQlus27IODMMzMr86LiXKgnGpFv6NQ5w==}
+ dependencies:
+ '@storybook/channels': 7.0.25
+ '@types/babel__core': 7.20.1
+ '@types/express': 4.17.17
+ file-system-cache: 2.3.0
+ dev: true
+
/@svgr/babel-plugin-add-jsx-attribute@5.4.0:
resolution: {integrity: sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==}
engines: {node: '>=10'}
@@ -7471,8 +7695,8 @@ packages:
dev: true
optional: true
- /@typescript-eslint/eslint-plugin@5.60.1(@typescript-eslint/parser@5.60.1)(eslint@8.43.0)(typescript@5.1.6):
- resolution: {integrity: sha512-KSWsVvsJsLJv3c4e73y/Bzt7OpqMCADUO846bHcuWYSYM19bldbAeDv7dYyV0jwkbMfJ2XdlzwjhXtuD7OY6bw==}
+ /@typescript-eslint/eslint-plugin@5.61.0(@typescript-eslint/parser@5.61.0)(eslint@8.44.0)(typescript@5.1.6):
+ resolution: {integrity: sha512-A5l/eUAug103qtkwccSCxn8ZRwT+7RXWkFECdA4Cvl1dOlDUgTpAOfSEElZn2uSUxhdDpnCdetrf0jvU4qrL+g==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
'@typescript-eslint/parser': ^5.0.0
@@ -7483,13 +7707,13 @@ packages:
optional: true
dependencies:
'@eslint-community/regexpp': 4.5.1
- '@typescript-eslint/parser': 5.60.1(eslint@8.43.0)(typescript@5.1.6)
- '@typescript-eslint/scope-manager': 5.60.1
- '@typescript-eslint/type-utils': 5.60.1(eslint@8.43.0)(typescript@5.1.6)
- '@typescript-eslint/utils': 5.60.1(eslint@8.43.0)(typescript@5.1.6)
+ '@typescript-eslint/parser': 5.61.0(eslint@8.44.0)(typescript@5.1.6)
+ '@typescript-eslint/scope-manager': 5.61.0
+ '@typescript-eslint/type-utils': 5.61.0(eslint@8.44.0)(typescript@5.1.6)
+ '@typescript-eslint/utils': 5.61.0(eslint@8.44.0)(typescript@5.1.6)
debug: 4.3.4(supports-color@5.5.0)
- eslint: 8.43.0
- grapheme-splitter: 1.0.4
+ eslint: 8.44.0
+ graphemer: 1.4.0
ignore: 5.2.4
natural-compare-lite: 1.4.0
semver: 7.5.2
@@ -7499,21 +7723,21 @@ packages:
- supports-color
dev: true
- /@typescript-eslint/experimental-utils@5.60.0(eslint@8.43.0)(typescript@5.1.6):
+ /@typescript-eslint/experimental-utils@5.60.0(eslint@8.44.0)(typescript@5.1.6):
resolution: {integrity: sha512-ovid3u7CNBrr0Ct35LUPkNYH4e+z4Kc6dPfSG99oMmH9SfoEoefq09uSnJI4mUb/UM7a/peVM03G+MzLxrD16g==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
dependencies:
- '@typescript-eslint/utils': 5.60.0(eslint@8.43.0)(typescript@5.1.6)
- eslint: 8.43.0
+ '@typescript-eslint/utils': 5.60.0(eslint@8.44.0)(typescript@5.1.6)
+ eslint: 8.44.0
transitivePeerDependencies:
- supports-color
- typescript
dev: true
- /@typescript-eslint/parser@5.60.1(eslint@8.43.0)(typescript@5.1.6):
- resolution: {integrity: sha512-pHWlc3alg2oSMGwsU/Is8hbm3XFbcrb6P5wIxcQW9NsYBfnrubl/GhVVD/Jm/t8HXhA2WncoIRfBtnCgRGV96Q==}
+ /@typescript-eslint/parser@5.61.0(eslint@8.44.0)(typescript@5.1.6):
+ resolution: {integrity: sha512-yGr4Sgyh8uO6fSi9hw3jAFXNBHbCtKKFMdX2IkT3ZqpKmtAq3lHS4ixB/COFuAIJpwl9/AqF7j72ZDWYKmIfvg==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
@@ -7522,11 +7746,11 @@ packages:
typescript:
optional: true
dependencies:
- '@typescript-eslint/scope-manager': 5.60.1
- '@typescript-eslint/types': 5.60.1
- '@typescript-eslint/typescript-estree': 5.60.1(typescript@5.1.6)
+ '@typescript-eslint/scope-manager': 5.61.0
+ '@typescript-eslint/types': 5.61.0
+ '@typescript-eslint/typescript-estree': 5.61.0(typescript@5.1.6)
debug: 4.3.4(supports-color@5.5.0)
- eslint: 8.43.0
+ eslint: 8.44.0
typescript: 5.1.6
transitivePeerDependencies:
- supports-color
@@ -7545,9 +7769,17 @@ packages:
dependencies:
'@typescript-eslint/types': 5.60.1
'@typescript-eslint/visitor-keys': 5.60.1
+ dev: true
+
+ /@typescript-eslint/scope-manager@5.61.0:
+ resolution: {integrity: sha512-W8VoMjoSg7f7nqAROEmTt6LoBpn81AegP7uKhhW5KzYlehs8VV0ZW0fIDVbcZRcaP3aPSW+JZFua+ysQN+m/Nw==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ dependencies:
+ '@typescript-eslint/types': 5.61.0
+ '@typescript-eslint/visitor-keys': 5.61.0
- /@typescript-eslint/type-utils@5.60.1(eslint@8.43.0)(typescript@5.1.6):
- resolution: {integrity: sha512-vN6UztYqIu05nu7JqwQGzQKUJctzs3/Hg7E2Yx8rz9J+4LgtIDFWjjl1gm3pycH0P3mHAcEUBd23LVgfrsTR8A==}
+ /@typescript-eslint/type-utils@5.61.0(eslint@8.44.0)(typescript@5.1.6):
+ resolution: {integrity: sha512-kk8u//r+oVK2Aj3ph/26XdH0pbAkC2RiSjUYhKD+PExemG4XSjpGFeyZ/QM8lBOa7O8aGOU+/yEbMJgQv/DnCg==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: '*'
@@ -7556,10 +7788,10 @@ packages:
typescript:
optional: true
dependencies:
- '@typescript-eslint/typescript-estree': 5.60.1(typescript@5.1.6)
- '@typescript-eslint/utils': 5.60.1(eslint@8.43.0)(typescript@5.1.6)
+ '@typescript-eslint/typescript-estree': 5.61.0(typescript@5.1.6)
+ '@typescript-eslint/utils': 5.61.0(eslint@8.44.0)(typescript@5.1.6)
debug: 4.3.4(supports-color@5.5.0)
- eslint: 8.43.0
+ eslint: 8.44.0
tsutils: 3.21.0(typescript@5.1.6)
typescript: 5.1.6
transitivePeerDependencies:
@@ -7574,6 +7806,11 @@ packages:
/@typescript-eslint/types@5.60.1:
resolution: {integrity: sha512-zDcDx5fccU8BA0IDZc71bAtYIcG9PowaOwaD8rjYbqwK7dpe/UMQl3inJ4UtUK42nOCT41jTSCwg76E62JpMcg==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ dev: true
+
+ /@typescript-eslint/types@5.61.0:
+ resolution: {integrity: sha512-ldyueo58KjngXpzloHUog/h9REmHl59G1b3a5Sng1GfBo14BkS3ZbMEb3693gnP1k//97lh7bKsp6/V/0v1veQ==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
/@typescript-eslint/typescript-estree@5.60.0(typescript@5.1.6):
resolution: {integrity: sha512-R43thAuwarC99SnvrBmh26tc7F6sPa2B3evkXp/8q954kYL6Ro56AwASYWtEEi+4j09GbiNAHqYwNNZuNlARGQ==}
@@ -7615,20 +7852,41 @@ packages:
typescript: 5.1.6
transitivePeerDependencies:
- supports-color
+ dev: true
+
+ /@typescript-eslint/typescript-estree@5.61.0(typescript@5.1.6):
+ resolution: {integrity: sha512-Fud90PxONnnLZ36oR5ClJBLTLfU4pIWBmnvGwTbEa2cXIqj70AEDEmOmpkFComjBZ/037ueKrOdHuYmSFVD7Rw==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ dependencies:
+ '@typescript-eslint/types': 5.61.0
+ '@typescript-eslint/visitor-keys': 5.61.0
+ debug: 4.3.4(supports-color@5.5.0)
+ globby: 11.1.0
+ is-glob: 4.0.3
+ semver: 7.5.2
+ tsutils: 3.21.0(typescript@5.1.6)
+ typescript: 5.1.6
+ transitivePeerDependencies:
+ - supports-color
- /@typescript-eslint/utils@5.60.0(eslint@8.43.0)(typescript@5.1.6):
+ /@typescript-eslint/utils@5.60.0(eslint@8.44.0)(typescript@5.1.6):
resolution: {integrity: sha512-ba51uMqDtfLQ5+xHtwlO84vkdjrqNzOnqrnwbMHMRY8Tqeme8C2Q8Fc7LajfGR+e3/4LoYiWXUM6BpIIbHJ4hQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
dependencies:
- '@eslint-community/eslint-utils': 4.4.0(eslint@8.43.0)
+ '@eslint-community/eslint-utils': 4.4.0(eslint@8.44.0)
'@types/json-schema': 7.0.12
'@types/semver': 7.5.0
'@typescript-eslint/scope-manager': 5.60.0
'@typescript-eslint/types': 5.60.0
'@typescript-eslint/typescript-estree': 5.60.0(typescript@5.1.6)
- eslint: 8.43.0
+ eslint: 8.44.0
eslint-scope: 5.1.1
semver: 7.5.2
transitivePeerDependencies:
@@ -7636,19 +7894,39 @@ packages:
- typescript
dev: true
- /@typescript-eslint/utils@5.60.1(eslint@8.43.0)(typescript@5.1.6):
+ /@typescript-eslint/utils@5.60.1(eslint@8.44.0)(typescript@5.1.6):
resolution: {integrity: sha512-tiJ7FFdFQOWssFa3gqb94Ilexyw0JVxj6vBzaSpfN/8IhoKkDuSAenUKvsSHw2A/TMpJb26izIszTXaqygkvpQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
dependencies:
- '@eslint-community/eslint-utils': 4.4.0(eslint@8.43.0)
+ '@eslint-community/eslint-utils': 4.4.0(eslint@8.44.0)
'@types/json-schema': 7.0.12
'@types/semver': 7.5.0
'@typescript-eslint/scope-manager': 5.60.1
'@typescript-eslint/types': 5.60.1
'@typescript-eslint/typescript-estree': 5.60.1(typescript@5.1.6)
- eslint: 8.43.0
+ eslint: 8.44.0
+ eslint-scope: 5.1.1
+ semver: 7.5.2
+ transitivePeerDependencies:
+ - supports-color
+ - typescript
+ dev: true
+
+ /@typescript-eslint/utils@5.61.0(eslint@8.44.0)(typescript@5.1.6):
+ resolution: {integrity: sha512-mV6O+6VgQmVE6+xzlA91xifndPW9ElFW8vbSF0xCT/czPXVhwDewKila1jOyRwa9AE19zKnrr7Cg5S3pJVrTWQ==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
+ dependencies:
+ '@eslint-community/eslint-utils': 4.4.0(eslint@8.44.0)
+ '@types/json-schema': 7.0.12
+ '@types/semver': 7.5.0
+ '@typescript-eslint/scope-manager': 5.61.0
+ '@typescript-eslint/types': 5.61.0
+ '@typescript-eslint/typescript-estree': 5.61.0(typescript@5.1.6)
+ eslint: 8.44.0
eslint-scope: 5.1.1
semver: 7.5.2
transitivePeerDependencies:
@@ -7670,6 +7948,14 @@ packages:
dependencies:
'@typescript-eslint/types': 5.60.1
eslint-visitor-keys: 3.4.1
+ dev: true
+
+ /@typescript-eslint/visitor-keys@5.61.0:
+ resolution: {integrity: sha512-50XQ5VdbWrX06mQXhy93WywSFZZGsv3EOjq+lqp6WC2t+j3mb6A9xYVdrRxafvK88vg9k9u+CT4l6D8PEatjKg==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ dependencies:
+ '@typescript-eslint/types': 5.61.0
+ eslint-visitor-keys: 3.4.1
/@vanilla-extract/css@1.9.1:
resolution: {integrity: sha512-pu2SFiff5jRhPwvGoj8cM5l/qIyLvigOmy22ss5DGjwV5pJYezRjDLxWumi2luIwioMWvh9EozCjyfH8nq+7fQ==}
@@ -10660,8 +10946,8 @@ packages:
whatwg-url: 12.0.1
dev: false
- /date-fns-tz@1.3.7(date-fns@2.21.3):
- resolution: {integrity: sha512-1t1b8zyJo+UI8aR+g3iqr5fkUHWpd58VBx8J/ZSQ+w7YrGlw80Ag4sA86qkfCXRBLmMc4I2US+aPMd4uKvwj5g==}
+ /date-fns-tz@2.0.0(date-fns@2.21.3):
+ resolution: {integrity: sha512-OAtcLdB9vxSXTWHdT8b398ARImVwQMyjfYGkKD2zaGpHseG2UPHbHjXELReErZFxWdSLph3c2zOaaTyHfOhERQ==}
peerDependencies:
date-fns: '>=2.0.0'
dependencies:
@@ -11567,7 +11853,7 @@ packages:
optionalDependencies:
source-map: 0.6.1
- /eslint-config-next@13.4.7(eslint@8.43.0)(typescript@5.1.6):
+ /eslint-config-next@13.4.7(eslint@8.44.0)(typescript@5.1.6):
resolution: {integrity: sha512-+IRAyD0+J1MZaTi9RQMPUfr6Q+GCZ1wOkK6XM52Vokh7VI4R6YFGOFzdkEFHl4ZyIX4FKa5vcwUP2WscSFNjNQ==}
peerDependencies:
eslint: ^7.23.0 || ^8.0.0
@@ -11578,30 +11864,30 @@ packages:
dependencies:
'@next/eslint-plugin-next': 13.4.7
'@rushstack/eslint-patch': 1.3.2
- '@typescript-eslint/parser': 5.60.1(eslint@8.43.0)(typescript@5.1.6)
- eslint: 8.43.0
+ '@typescript-eslint/parser': 5.61.0(eslint@8.44.0)(typescript@5.1.6)
+ eslint: 8.44.0
eslint-import-resolver-node: 0.3.7
- eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@5.60.1)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.27.5)(eslint@8.43.0)
- eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.60.1)(eslint-import-resolver-typescript@3.5.5)(eslint@8.43.0)
- eslint-plugin-jsx-a11y: 6.7.1(eslint@8.43.0)
- eslint-plugin-react: 7.32.2(eslint@8.43.0)
- eslint-plugin-react-hooks: 4.6.0(eslint@8.43.0)
+ eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@5.61.0)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.27.5)(eslint@8.44.0)
+ eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.61.0)(eslint-import-resolver-typescript@3.5.5)(eslint@8.44.0)
+ eslint-plugin-jsx-a11y: 6.7.1(eslint@8.44.0)
+ eslint-plugin-react: 7.32.2(eslint@8.44.0)
+ eslint-plugin-react-hooks: 4.6.0(eslint@8.44.0)
typescript: 5.1.6
transitivePeerDependencies:
- eslint-import-resolver-webpack
- supports-color
dev: false
- /eslint-config-prettier@8.8.0(eslint@8.43.0):
+ /eslint-config-prettier@8.8.0(eslint@8.44.0):
resolution: {integrity: sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==}
hasBin: true
peerDependencies:
eslint: '>=7.0.0'
dependencies:
- eslint: 8.43.0
+ eslint: 8.44.0
dev: true
- /eslint-config-react-app@7.0.1(@babel/plugin-syntax-flow@7.22.5)(@babel/plugin-transform-react-jsx@7.22.5)(eslint@8.43.0)(typescript@5.1.6):
+ /eslint-config-react-app@7.0.1(@babel/plugin-syntax-flow@7.22.5)(@babel/plugin-transform-react-jsx@7.22.5)(eslint@8.44.0)(typescript@5.1.6):
resolution: {integrity: sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==}
engines: {node: '>=14.0.0'}
peerDependencies:
@@ -11612,20 +11898,20 @@ packages:
optional: true
dependencies:
'@babel/core': 7.22.5
- '@babel/eslint-parser': 7.22.5(@babel/core@7.22.5)(eslint@8.43.0)
+ '@babel/eslint-parser': 7.22.5(@babel/core@7.22.5)(eslint@8.44.0)
'@rushstack/eslint-patch': 1.3.2
- '@typescript-eslint/eslint-plugin': 5.60.1(@typescript-eslint/parser@5.60.1)(eslint@8.43.0)(typescript@5.1.6)
- '@typescript-eslint/parser': 5.60.1(eslint@8.43.0)(typescript@5.1.6)
+ '@typescript-eslint/eslint-plugin': 5.61.0(@typescript-eslint/parser@5.61.0)(eslint@8.44.0)(typescript@5.1.6)
+ '@typescript-eslint/parser': 5.61.0(eslint@8.44.0)(typescript@5.1.6)
babel-preset-react-app: 10.0.1
confusing-browser-globals: 1.0.11
- eslint: 8.43.0
- eslint-plugin-flowtype: 8.0.3(@babel/plugin-syntax-flow@7.22.5)(@babel/plugin-transform-react-jsx@7.22.5)(eslint@8.43.0)
- eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.60.1)(eslint-import-resolver-typescript@3.5.5)(eslint@8.43.0)
- eslint-plugin-jest: 25.7.0(@typescript-eslint/eslint-plugin@5.60.1)(eslint@8.43.0)(typescript@5.1.6)
- eslint-plugin-jsx-a11y: 6.7.1(eslint@8.43.0)
- eslint-plugin-react: 7.32.2(eslint@8.43.0)
- eslint-plugin-react-hooks: 4.6.0(eslint@8.43.0)
- eslint-plugin-testing-library: 5.11.0(eslint@8.43.0)(typescript@5.1.6)
+ eslint: 8.44.0
+ eslint-plugin-flowtype: 8.0.3(@babel/plugin-syntax-flow@7.22.5)(@babel/plugin-transform-react-jsx@7.22.5)(eslint@8.44.0)
+ eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.61.0)(eslint-import-resolver-typescript@3.5.5)(eslint@8.44.0)
+ eslint-plugin-jest: 25.7.0(@typescript-eslint/eslint-plugin@5.61.0)(eslint@8.44.0)(typescript@5.1.6)
+ eslint-plugin-jsx-a11y: 6.7.1(eslint@8.44.0)
+ eslint-plugin-react: 7.32.2(eslint@8.44.0)
+ eslint-plugin-react-hooks: 4.6.0(eslint@8.44.0)
+ eslint-plugin-testing-library: 5.11.0(eslint@8.44.0)(typescript@5.1.6)
typescript: 5.1.6
transitivePeerDependencies:
- '@babel/plugin-syntax-flow'
@@ -11636,13 +11922,13 @@ packages:
- supports-color
dev: true
- /eslint-config-turbo@1.10.6(eslint@8.43.0):
+ /eslint-config-turbo@1.10.6(eslint@8.44.0):
resolution: {integrity: sha512-iZ63etePRUdEIDY5MxdUhU2ekV9TDbVdHg0BK00QqVFgQTXUYuJ7rsQj/wUKTsw3jwhbLfaY6H5sknAgYyWZ2g==}
peerDependencies:
eslint: '>6.6.0'
dependencies:
- eslint: 8.43.0
- eslint-plugin-turbo: 1.10.6(eslint@8.43.0)
+ eslint: 8.44.0
+ eslint-plugin-turbo: 1.10.6(eslint@8.44.0)
dev: true
/eslint-import-resolver-node@0.3.7:
@@ -11654,7 +11940,7 @@ packages:
transitivePeerDependencies:
- supports-color
- /eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@5.60.1)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.27.5)(eslint@8.43.0):
+ /eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@5.61.0)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.27.5)(eslint@8.44.0):
resolution: {integrity: sha512-TdJqPHs2lW5J9Zpe17DZNQuDnox4xo2o+0tE7Pggain9Rbc19ik8kFtXdxZ250FVx2kF4vlt2RSf4qlUpG7bhw==}
engines: {node: ^14.18.0 || >=16.0.0}
peerDependencies:
@@ -11663,9 +11949,9 @@ packages:
dependencies:
debug: 4.3.4(supports-color@5.5.0)
enhanced-resolve: 5.15.0
- eslint: 8.43.0
- eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.60.1)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.43.0)
- eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.60.1)(eslint-import-resolver-typescript@3.5.5)(eslint@8.43.0)
+ eslint: 8.44.0
+ eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.61.0)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.44.0)
+ eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.61.0)(eslint-import-resolver-typescript@3.5.5)(eslint@8.44.0)
get-tsconfig: 4.6.0
globby: 13.2.0
is-core-module: 2.12.1
@@ -11677,7 +11963,7 @@ packages:
- eslint-import-resolver-webpack
- supports-color
- /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.60.1)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.43.0):
+ /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.61.0)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.44.0):
resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==}
engines: {node: '>=4'}
peerDependencies:
@@ -11698,24 +11984,24 @@ packages:
eslint-import-resolver-webpack:
optional: true
dependencies:
- '@typescript-eslint/parser': 5.60.1(eslint@8.43.0)(typescript@5.1.6)
+ '@typescript-eslint/parser': 5.61.0(eslint@8.44.0)(typescript@5.1.6)
debug: 3.2.7(supports-color@8.1.1)
- eslint: 8.43.0
+ eslint: 8.44.0
eslint-import-resolver-node: 0.3.7
- eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@5.60.1)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.27.5)(eslint@8.43.0)
+ eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@5.61.0)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.27.5)(eslint@8.44.0)
transitivePeerDependencies:
- supports-color
- /eslint-plugin-cypress@2.13.3(eslint@8.43.0):
+ /eslint-plugin-cypress@2.13.3(eslint@8.44.0):
resolution: {integrity: sha512-nAPjZE5WopCsgJwl3vHm5iafpV+ZRO76Z9hMyRygWhmg5ODXDPd+9MaPl7kdJ2azj+sO87H3P1PRnggIrz848g==}
peerDependencies:
eslint: '>= 3.2.1'
dependencies:
- eslint: 8.43.0
+ eslint: 8.44.0
globals: 11.12.0
dev: true
- /eslint-plugin-flowtype@8.0.3(@babel/plugin-syntax-flow@7.22.5)(@babel/plugin-transform-react-jsx@7.22.5)(eslint@8.43.0):
+ /eslint-plugin-flowtype@8.0.3(@babel/plugin-syntax-flow@7.22.5)(@babel/plugin-transform-react-jsx@7.22.5)(eslint@8.44.0):
resolution: {integrity: sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==}
engines: {node: '>=12.0.0'}
peerDependencies:
@@ -11725,12 +12011,12 @@ packages:
dependencies:
'@babel/plugin-syntax-flow': 7.22.5(@babel/core@7.22.5)
'@babel/plugin-transform-react-jsx': 7.22.5(@babel/core@7.22.5)
- eslint: 8.43.0
+ eslint: 8.44.0
lodash: 4.17.21
string-natural-compare: 3.0.1
dev: true
- /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.60.1)(eslint-import-resolver-typescript@3.5.5)(eslint@8.43.0):
+ /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.61.0)(eslint-import-resolver-typescript@3.5.5)(eslint@8.44.0):
resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==}
engines: {node: '>=4'}
peerDependencies:
@@ -11740,15 +12026,15 @@ packages:
'@typescript-eslint/parser':
optional: true
dependencies:
- '@typescript-eslint/parser': 5.60.1(eslint@8.43.0)(typescript@5.1.6)
+ '@typescript-eslint/parser': 5.61.0(eslint@8.44.0)(typescript@5.1.6)
array-includes: 3.1.6
array.prototype.flat: 1.3.1
array.prototype.flatmap: 1.3.1
debug: 3.2.7(supports-color@8.1.1)
doctrine: 2.1.0
- eslint: 8.43.0
+ eslint: 8.44.0
eslint-import-resolver-node: 0.3.7
- eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.60.1)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.43.0)
+ eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.61.0)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.44.0)
has: 1.0.3
is-core-module: 2.12.1
is-glob: 4.0.3
@@ -11762,7 +12048,7 @@ packages:
- eslint-import-resolver-webpack
- supports-color
- /eslint-plugin-jest@25.7.0(@typescript-eslint/eslint-plugin@5.60.1)(eslint@8.43.0)(typescript@5.1.6):
+ /eslint-plugin-jest@25.7.0(@typescript-eslint/eslint-plugin@5.61.0)(eslint@8.44.0)(typescript@5.1.6):
resolution: {integrity: sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==}
engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
peerDependencies:
@@ -11775,15 +12061,15 @@ packages:
jest:
optional: true
dependencies:
- '@typescript-eslint/eslint-plugin': 5.60.1(@typescript-eslint/parser@5.60.1)(eslint@8.43.0)(typescript@5.1.6)
- '@typescript-eslint/experimental-utils': 5.60.0(eslint@8.43.0)(typescript@5.1.6)
- eslint: 8.43.0
+ '@typescript-eslint/eslint-plugin': 5.61.0(@typescript-eslint/parser@5.61.0)(eslint@8.44.0)(typescript@5.1.6)
+ '@typescript-eslint/experimental-utils': 5.60.0(eslint@8.44.0)(typescript@5.1.6)
+ eslint: 8.44.0
transitivePeerDependencies:
- supports-color
- typescript
dev: true
- /eslint-plugin-jsx-a11y@6.7.1(eslint@8.43.0):
+ /eslint-plugin-jsx-a11y@6.7.1(eslint@8.44.0):
resolution: {integrity: sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==}
engines: {node: '>=4.0'}
peerDependencies:
@@ -11798,7 +12084,7 @@ packages:
axobject-query: 3.2.1
damerau-levenshtein: 1.0.8
emoji-regex: 9.2.2
- eslint: 8.43.0
+ eslint: 8.44.0
has: 1.0.3
jsx-ast-utils: 3.3.3
language-tags: 1.0.5
@@ -11807,7 +12093,7 @@ packages:
object.fromentries: 2.0.6
semver: 6.3.0
- /eslint-plugin-prettier@4.2.1(eslint-config-prettier@8.8.0)(eslint@8.43.0)(prettier@2.8.8):
+ /eslint-plugin-prettier@4.2.1(eslint-config-prettier@8.8.0)(eslint@8.44.0)(prettier@2.8.8):
resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==}
engines: {node: '>=12.0.0'}
peerDependencies:
@@ -11818,21 +12104,21 @@ packages:
eslint-config-prettier:
optional: true
dependencies:
- eslint: 8.43.0
- eslint-config-prettier: 8.8.0(eslint@8.43.0)
+ eslint: 8.44.0
+ eslint-config-prettier: 8.8.0(eslint@8.44.0)
prettier: 2.8.8
prettier-linter-helpers: 1.0.0
dev: true
- /eslint-plugin-react-hooks@4.6.0(eslint@8.43.0):
+ /eslint-plugin-react-hooks@4.6.0(eslint@8.44.0):
resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==}
engines: {node: '>=10'}
peerDependencies:
eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0
dependencies:
- eslint: 8.43.0
+ eslint: 8.44.0
- /eslint-plugin-react@7.32.2(eslint@8.43.0):
+ /eslint-plugin-react@7.32.2(eslint@8.44.0):
resolution: {integrity: sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==}
engines: {node: '>=4'}
peerDependencies:
@@ -11842,7 +12128,7 @@ packages:
array.prototype.flatmap: 1.3.1
array.prototype.tosorted: 1.1.1
doctrine: 2.1.0
- eslint: 8.43.0
+ eslint: 8.44.0
estraverse: 5.3.0
jsx-ast-utils: 3.3.3
minimatch: 3.1.2
@@ -11855,36 +12141,36 @@ packages:
semver: 6.3.0
string.prototype.matchall: 4.0.8
- /eslint-plugin-testing-library@5.11.0(eslint@8.43.0)(typescript@5.1.6):
+ /eslint-plugin-testing-library@5.11.0(eslint@8.44.0)(typescript@5.1.6):
resolution: {integrity: sha512-ELY7Gefo+61OfXKlQeXNIDVVLPcvKTeiQOoMZG9TeuWa7Ln4dUNRv8JdRWBQI9Mbb427XGlVB1aa1QPZxBJM8Q==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'}
peerDependencies:
eslint: ^7.5.0 || ^8.0.0
dependencies:
- '@typescript-eslint/utils': 5.60.1(eslint@8.43.0)(typescript@5.1.6)
- eslint: 8.43.0
+ '@typescript-eslint/utils': 5.60.1(eslint@8.44.0)(typescript@5.1.6)
+ eslint: 8.44.0
transitivePeerDependencies:
- supports-color
- typescript
dev: true
- /eslint-plugin-turbo@1.10.6(eslint@8.43.0):
+ /eslint-plugin-turbo@1.10.6(eslint@8.44.0):
resolution: {integrity: sha512-jlzfxYaK8hcz1DTk8Glxxi1r0kgdy85191a4CbFOTiiBulmKHMLJgzhsyE9Ong796MA62n91KFpc20BiKjlHwg==}
peerDependencies:
eslint: '>6.6.0'
dependencies:
dotenv: 16.0.3
- eslint: 8.43.0
+ eslint: 8.44.0
dev: true
- /eslint-plugin-ui-testing@2.0.1(eslint@8.43.0)(typescript@5.1.6):
+ /eslint-plugin-ui-testing@2.0.1(eslint@8.44.0)(typescript@5.1.6):
resolution: {integrity: sha512-GpvE0u03GSytsJ/K49C2dJlvDKQSfh+PX4lAEjBIc5RxUWEpGf9/jY3JTFd7F0gQ9ElGfYskJceVKyz7knbFFw==}
engines: {node: ^10.12.0 || >=12.0.0, npm: '>=6'}
peerDependencies:
eslint: '>= 7'
dependencies:
- '@typescript-eslint/experimental-utils': 5.60.0(eslint@8.43.0)(typescript@5.1.6)
- eslint: 8.43.0
+ '@typescript-eslint/experimental-utils': 5.60.0(eslint@8.44.0)(typescript@5.1.6)
+ eslint: 8.44.0
transitivePeerDependencies:
- supports-color
- typescript
@@ -11914,15 +12200,15 @@ packages:
resolution: {integrity: sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- /eslint@8.43.0:
- resolution: {integrity: sha512-aaCpf2JqqKesMFGgmRPessmVKjcGXqdlAYLLC3THM8t5nBRZRQ+st5WM/hoJXkdioEXLLbXgclUpM0TXo5HX5Q==}
+ /eslint@8.44.0:
+ resolution: {integrity: sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
hasBin: true
dependencies:
- '@eslint-community/eslint-utils': 4.4.0(eslint@8.43.0)
+ '@eslint-community/eslint-utils': 4.4.0(eslint@8.44.0)
'@eslint-community/regexpp': 4.5.1
- '@eslint/eslintrc': 2.0.3
- '@eslint/js': 8.43.0
+ '@eslint/eslintrc': 2.1.0
+ '@eslint/js': 8.44.0
'@humanwhocodes/config-array': 0.11.10
'@humanwhocodes/module-importer': 1.0.1
'@nodelib/fs.walk': 1.2.8
@@ -11934,7 +12220,7 @@ packages:
escape-string-regexp: 4.0.0
eslint-scope: 7.2.0
eslint-visitor-keys: 3.4.1
- espree: 9.5.2
+ espree: 9.6.0
esquery: 1.5.0
esutils: 2.0.3
fast-deep-equal: 3.1.3
@@ -11954,15 +12240,15 @@ packages:
lodash.merge: 4.6.2
minimatch: 3.1.2
natural-compare: 1.4.0
- optionator: 0.9.1
+ optionator: 0.9.3
strip-ansi: 6.0.1
strip-json-comments: 3.1.1
text-table: 0.2.0
transitivePeerDependencies:
- supports-color
- /espree@9.5.2:
- resolution: {integrity: sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==}
+ /espree@9.6.0:
+ resolution: {integrity: sha512-1FH/IiruXZ84tpUlm0aCUEwMl2Ho5ilqVh0VvQXw+byAz/4SAciyHLlfmL5WYqsvD38oymdUwBss0LtK8m4s/A==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dependencies:
acorn: 8.9.0
@@ -13320,10 +13606,6 @@ packages:
/graceful-fs@4.2.11:
resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
- /grapheme-splitter@1.0.4:
- resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==}
- dev: true
-
/graphemer@1.4.0:
resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
@@ -15055,11 +15337,6 @@ packages:
resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==}
dev: true
- /jschardet@3.0.0:
- resolution: {integrity: sha512-lJH6tJ77V8Nzd5QWRkFYCLc13a3vADkh3r/Fi8HupZGWk2OVVDfnZP8V/VgQgZ+lzW0kG2UGb5hFgt3V3ndotQ==}
- engines: {node: '>=0.1.90'}
- dev: true
-
/jscodeshift@0.14.0(@babel/preset-env@7.21.5):
resolution: {integrity: sha512-7eCC1knD7bLUPuSCwXsMZUH51O8jIcoVyKtI6P0XM0IVzlGjckPy3FIwQlorzbN0Sg79oK+RlohN32Mqf/lrYA==}
hasBin: true
@@ -16604,16 +16881,16 @@ packages:
type-check: 0.3.2
word-wrap: 1.2.3
- /optionator@0.9.1:
- resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==}
+ /optionator@0.9.3:
+ resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==}
engines: {node: '>= 0.8.0'}
dependencies:
+ '@aashutoshrathi/word-wrap': 1.2.6
deep-is: 0.1.4
fast-levenshtein: 2.0.6
levn: 0.4.1
prelude-ls: 1.2.1
type-check: 0.4.0
- word-wrap: 1.2.3
/ora@5.4.1:
resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==}