diff --git a/package.json b/package.json
index 65a2fc1a..c07b3c7e 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "@launchpadlab/lp-components",
- "version": "9.1.0",
+ "version": "9.2.0",
"engines": {
"node": "^18.12"
},
@@ -71,8 +71,8 @@
"@storybook/manager-webpack5": "^6.5.14",
"@storybook/react": "^6.4.22",
"@testing-library/dom": "^9.3.1",
- "@testing-library/jest-dom": "^5.16.5",
- "@testing-library/react": "^12.1.5",
+ "@testing-library/jest-dom": "^6.1.3",
+ "@testing-library/react": "^14.0.0",
"@testing-library/user-event": "^14.4.3",
"babel-loader": "^9.1.0",
"bourbon": "^7.2.0",
@@ -87,8 +87,8 @@
"jest-environment-jsdom": "^29.6.2",
"lint-staged": "^14.0.1",
"prettier": "^3.0.0",
- "react": "^17.0.0",
- "react-dom": "^17.0.0",
+ "react": "^18.0.0",
+ "react-dom": "^18.0.0",
"redux": "^4.1.2",
"regenerator-runtime": "^0.14.0",
"sass": "^1.56.1",
@@ -98,7 +98,7 @@
"webpack": "^5.75.0"
},
"peerDependencies": {
- "react": "^16.14.0 || ^17.0.0"
+ "react": "^16.14.0 || ^17.0.0 || ^18.0.0"
},
"prettier": "@launchpadlab/prettier-config",
"lint-staged": {
diff --git a/test/forms/inputs/cloudinary-file-input/cloudinary-uploader.test.js b/test/forms/inputs/cloudinary-file-input/cloudinary-uploader.test.js
index 09289fb5..7cd8e4ce 100644
--- a/test/forms/inputs/cloudinary-file-input/cloudinary-uploader.test.js
+++ b/test/forms/inputs/cloudinary-file-input/cloudinary-uploader.test.js
@@ -1,5 +1,6 @@
import React from 'react'
-import { render } from '@testing-library/react'
+import { render, screen, waitFor, act } from '@testing-library/react'
+import userEvent from '@testing-library/user-event'
import cloudinaryUploader from '../../../../src/forms/inputs/cloudinary-file-input/cloudinary-uploader'
class MockResponse {
@@ -32,7 +33,7 @@ class MockResponse {
}
const mockApi = {
- post: jest.fn(function (url, body, options = {}) {
+ post: function (url, body, options = {}) {
const response = new MockResponse(url, options, body)
// Simulate server response
return new Promise((resolve, reject) => {
@@ -41,7 +42,7 @@ const mockApi = {
return resolve(response)
}, 10)
})
- }),
+ },
}
const props = {
@@ -57,6 +58,25 @@ const file = {
const fileData = 'mockData'
+const AsyncWrapper = ({
+ onSuccess = () => {},
+ fileData,
+ file,
+ uploadStatus,
+ upload,
+}) => (
+
+
{uploadStatus}
+
+
+)
+
describe('cloudinaryUploader', () => {
// eslint-disable-next-line no-undef
const initialEnv = process.env
@@ -82,7 +102,9 @@ describe('cloudinaryUploader', () => {
process.env.CLOUDINARY_CLOUD_NAME = 'foo'
jest.spyOn(console, 'error').mockImplementation(() => null) // avoid console bloat
const Wrapped = () => Hi
- const Wrapper = cloudinaryUploader({ apiAdapter: props.apiAdapter })(Wrapped)
+ const Wrapper = cloudinaryUploader({ apiAdapter: props.apiAdapter })(
+ Wrapped
+ )
expect(() => render()).toThrow()
jest.restoreAllMocks()
})
@@ -92,7 +114,9 @@ describe('cloudinaryUploader', () => {
process.env.CLOUDINARY_BUCKET = 'bar'
jest.spyOn(console, 'error').mockImplementation(() => null) // avoid console bloat
const Wrapped = () => Hi
- const Wrapper = cloudinaryUploader({ apiAdapter: props.apiAdapter })(Wrapped)
+ const Wrapper = cloudinaryUploader({ apiAdapter: props.apiAdapter })(
+ Wrapped
+ )
expect(() => render()).toThrow()
jest.restoreAllMocks()
})
@@ -115,232 +139,372 @@ describe('cloudinaryUploader', () => {
// eslint-disable-next-line no-undef
process.env.CLOUDINARY_BUCKET = 'bar'
const Wrapped = () => Hi
- const Wrapper = cloudinaryUploader({ apiAdapter: props.apiAdapter })(Wrapped)
+ const Wrapper = cloudinaryUploader({ apiAdapter: props.apiAdapter })(
+ Wrapped
+ )
expect(() => render()).not.toThrow()
})
test('can receive options as props', () => {
const Wrapped = () => Hi
const Wrapper = cloudinaryUploader()(Wrapped)
- expect(() => render(
- {}} />
- )).not.toThrow()
+ expect(() =>
+ render( {}} />)
+ ).not.toThrow()
})
test('adds upload props to component', () => {
const Wrapped = jest.fn(() => Hi
)
const Wrapper = cloudinaryUploader(props)(Wrapped)
render()
- expect(Wrapped).toHaveBeenCalledWith(expect.objectContaining({
- upload: expect.any(Function),
- uploadStatus: expect.any(String),
- }), {})
+ expect(Wrapped).toHaveBeenCalledWith(
+ expect.objectContaining({
+ upload: expect.any(Function),
+ uploadStatus: expect.any(String),
+ }),
+ {}
+ )
})
- test('sends the api request with the correct options', () => {
- const Wrapped = jest.fn(() => Hi
)
+ test('sends the api request with the correct options', async () => {
+ let response
+ const Wrapped = (props) => (
+ {
+ response = res
+ }}
+ fileData={fileData}
+ file={file}
+ {...props}
+ />
+ )
const Wrapper = cloudinaryUploader(props)(Wrapped)
+ const user = userEvent.setup()
render()
- const { upload } = Wrapped.mock.calls[0][0]
-
- return upload(fileData, file).then((response) => {
- const { uploadStatus } = Wrapped.mock.calls[2][0]
- expect(uploadStatus).toEqual('upload-success')
- const responseJson = JSON.parse(response.body)
- expect(responseJson.file).toEqual(fileData)
- expect(responseJson.folder).toEqual(props.bucket)
- expect(responseJson.public_id).toEqual('test')
- expect(responseJson.upload_preset).toEqual('default')
+ await user.click(screen.getByText('Upload'))
+ await waitFor(() => {
+ expect(screen.getByText('upload-success')).toBeInTheDocument()
})
+
+ const responseJson = JSON.parse(response.body)
+ expect(responseJson.file).toEqual(fileData)
+ expect(responseJson.folder).toEqual(props.bucket)
+ expect(responseJson.public_id).toEqual('test')
+ expect(responseJson.upload_preset).toEqual('default')
})
- test('sets `publicId`', () => {
- const Wrapped = jest.fn(() => Hi
)
+ test('sets `publicId`', async () => {
+ let response
+ const Wrapped = (props) => (
+ {
+ response = res
+ }}
+ fileData={fileData}
+ file={file}
+ {...props}
+ />
+ )
const Wrapper = cloudinaryUploader({
...props,
cloudinaryPublicId: 'custom-name',
})(Wrapped)
+ const user = userEvent.setup()
render()
- const { upload } = Wrapped.mock.calls[0][0]
-
- return upload(fileData, file).then((response) => {
- const responseJson = JSON.parse(response.body)
- expect(responseJson.public_id).toEqual('custom-name')
+ await user.click(screen.getByText('Upload'))
+ await waitFor(() => {
+ expect(screen.getByText('upload-success')).toBeInTheDocument()
})
+ const responseJson = JSON.parse(response.body)
+ expect(responseJson.public_id).toEqual('custom-name')
})
- test('allows custom `publicId` creator', () => {
- const Wrapped = jest.fn(() => Hi
)
+ test('allows custom `publicId` creator', async () => {
+ let response
+ const Wrapped = (props) => (
+ {
+ response = res
+ }}
+ fileData={fileData}
+ file={file}
+ {...props}
+ />
+ )
const createPublicId = (file) => 'foo-' + file.name
const Wrapper = cloudinaryUploader({ ...props, createPublicId })(Wrapped)
+ const user = userEvent.setup()
render()
- const { upload } = Wrapped.mock.calls[0][0]
-
- return upload(fileData, file).then((response) => {
- const responseJson = JSON.parse(response.body)
- expect(responseJson.public_id).toEqual('foo-test')
+ await user.click(screen.getByText('Upload'))
+ await waitFor(() => {
+ expect(screen.getByText('upload-success')).toBeInTheDocument()
})
+ const responseJson = JSON.parse(response.body)
+ expect(responseJson.public_id).toEqual('foo-test')
})
- test('overrides custom `publicId` creator with `cloudinaryPublicId`', () => {
- const Wrapped = jest.fn(() => Hi
)
+ test('overrides custom `publicId` creator with `cloudinaryPublicId`', async () => {
+ let response
+ const Wrapped = (props) => (
+ {
+ response = res
+ }}
+ fileData={fileData}
+ file={file}
+ {...props}
+ />
+ )
const createPublicId = (file) => 'foo-' + file.name
const Wrapper = cloudinaryUploader({
...props,
createPublicId,
cloudinaryPublicId: 'custom-name',
})(Wrapped)
+ const user = userEvent.setup()
render()
- const { upload } = Wrapped.mock.calls[0][0]
-
- return upload(fileData, file).then((response) => {
- const responseJson = JSON.parse(response.body)
- expect(responseJson.public_id).toEqual('custom-name')
+ await user.click(screen.getByText('Upload'))
+ await waitFor(() => {
+ expect(screen.getByText('upload-success')).toBeInTheDocument()
})
+ const responseJson = JSON.parse(response.body)
+ expect(responseJson.public_id).toEqual('custom-name')
})
- test('adds extension to `publicId` of raw files', () => {
+ test('adds extension to `publicId` of raw files', async () => {
const rawFile = { name: 'test.xls', type: 'application/xls' }
- const Wrapped = jest.fn(() => Hi
)
+ let response
+ const Wrapped = (props) => (
+ {
+ response = res
+ }}
+ fileData={fileData}
+ file={rawFile}
+ {...props}
+ />
+ )
const Wrapper = cloudinaryUploader({
...props,
cloudinaryPublicId: 'custom-name',
})(Wrapped)
+ const user = userEvent.setup()
render()
- const { upload } = Wrapped.mock.calls[0][0]
-
- return upload(fileData, rawFile).then((response) => {
- const responseJson = JSON.parse(response.body)
- expect(responseJson.public_id).toEqual('custom-name.xls')
+ await user.click(screen.getByText('Upload'))
+ await waitFor(() => {
+ expect(screen.getByText('upload-success')).toBeInTheDocument()
})
+ const responseJson = JSON.parse(response.body)
+ expect(responseJson.public_id).toEqual('custom-name.xls')
})
- test('does not set an empty `publicId`', () => {
+ test('does not set an empty `publicId`', async () => {
const rawFile = { name: 'test.xls', type: 'application/xls' }
- const Wrapped = jest.fn(() => Hi
)
+ let response
+ const Wrapped = (props) => (
+ {
+ response = res
+ }}
+ fileData={fileData}
+ file={rawFile}
+ {...props}
+ />
+ )
const Wrapper = cloudinaryUploader({
...props,
- createPublicId: () => ''
+ createPublicId: () => '',
})(Wrapped)
+ const user = userEvent.setup()
render()
- const { upload } = Wrapped.mock.calls[0][0]
-
- return upload(fileData, rawFile).then((response) => {
- const responseJson = JSON.parse(response.body)
- expect(responseJson.public_id).toBeUndefined()
+ await user.click(screen.getByText('Upload'))
+ await waitFor(() => {
+ expect(screen.getByText('upload-success')).toBeInTheDocument()
})
+ const responseJson = JSON.parse(response.body)
+ expect(responseJson.public_id).toBeUndefined()
})
- test('removes invalid characters from the default `publicId`', () => {
+ test('removes invalid characters from the default `publicId`', async () => {
const FORBIDDEN_PATTERN = /[\s?\\%<>]/gi
const illegallyNamedFile = {
name: 'Final \\ Master %20 Schedule? #S1&S2 <100%> & finished.pdf',
type: 'application/pdf',
}
- const Wrapped = jest.fn(() => Howdy
)
+ let response
+ const Wrapped = (props) => (
+ {
+ response = res
+ }}
+ fileData={fileData}
+ file={illegallyNamedFile}
+ {...props}
+ />
+ )
const Wrapper = cloudinaryUploader({ ...props })(Wrapped)
+ const user = userEvent.setup()
render()
- const { upload } = Wrapped.mock.calls[0][0]
-
-
- return upload(fileData, illegallyNamedFile).then((response) => {
- const responseJson = JSON.parse(response.body)
- expect(responseJson.public_id).not.toMatch(FORBIDDEN_PATTERN)
- expect(responseJson.public_id).toEqual('Final_Master_Schedule_S1_S2_100_finished')
+ await user.click(screen.getByText('Upload'))
+ await waitFor(() => {
+ expect(screen.getByText('upload-success')).toBeInTheDocument()
})
+ const responseJson = JSON.parse(response.body)
+ expect(responseJson.public_id).not.toMatch(FORBIDDEN_PATTERN)
+ expect(responseJson.public_id).toEqual(
+ 'Final_Master_Schedule_S1_S2_100_finished'
+ )
})
- test('removes html escaped characters from the default `publicId`', () => {
+ test('removes html escaped characters from the default `publicId`', async () => {
const illegallyNamedFile = {
name: 'SY%20S1%26S2.pdf',
type: 'application/pdf',
}
- const Wrapped = jest.fn(() => Howdy
)
+ let response
+ const Wrapped = (props) => (
+ {
+ response = res
+ }}
+ fileData={fileData}
+ file={illegallyNamedFile}
+ {...props}
+ />
+ )
const Wrapper = cloudinaryUploader({ ...props })(Wrapped)
+ const user = userEvent.setup()
render()
- const { upload } = Wrapped.mock.calls[0][0]
-
- return upload(fileData, illegallyNamedFile).then((response) => {
- const responseJson = JSON.parse(response.body)
- expect(responseJson.public_id).toEqual('SY_S1_S2')
+ await user.click(screen.getByText('Upload'))
+ await waitFor(() => {
+ expect(screen.getByText('upload-success')).toBeInTheDocument()
})
+ const responseJson = JSON.parse(response.body)
+ expect(responseJson.public_id).toEqual('SY_S1_S2')
})
- test('sanitizes the original `publicId` when decoding fails', () => {
+ test('sanitizes the original `publicId` when decoding fails', async () => {
const illegallyNamedFile = {
name: 'Final \\ Master %20 Schedule? #S1&S2 <100%> & finished.pdf',
type: 'application/pdf',
}
- // eslint-disable-next-line no-undef
- const spy = jest.spyOn(window, 'decodeURIComponent').mockImplementation(() => {
- throw Error('Oops!')
- })
- const Wrapped = jest.fn(() => Howdy
)
+ const spy = jest
+ .spyOn(window, 'decodeURIComponent') // eslint-disable-line no-undef
+ .mockImplementation(() => {
+ throw Error('Oops!')
+ })
+ let response
+ const Wrapped = (props) => (
+ {
+ response = res
+ }}
+ fileData={fileData}
+ file={illegallyNamedFile}
+ {...props}
+ />
+ )
const Wrapper = cloudinaryUploader({ ...props })(Wrapped)
+ const user = userEvent.setup()
render()
- const { upload } = Wrapped.mock.calls[0][0]
-
- return upload(fileData, illegallyNamedFile).then((response) => {
- const responseJson = JSON.parse(response.body)
- expect(responseJson.public_id).toEqual('Final_Master_20_Schedule_S1_S2_100_finished')
-
- spy.mockRestore()
+ await user.click(screen.getByText('Upload'))
+ await waitFor(() => {
+ expect(screen.getByText('upload-success')).toBeInTheDocument()
})
+ const responseJson = JSON.parse(response.body)
+ expect(responseJson.public_id).toEqual(
+ 'Final_Master_20_Schedule_S1_S2_100_finished'
+ )
+
+ spy.mockRestore()
})
- test('replaces spaces and removes superfluous underscores from the default `publicId`', () => {
+ test('replaces spaces and removes superfluous underscores from the default `publicId`', async () => {
const illegallyNamedFile = {
name: ' SY S1___S2.pdf',
type: 'application/pdf',
}
- const Wrapped = jest.fn(() => Howdy
)
+ let response
+ const Wrapped = (props) => (
+ {
+ response = res
+ }}
+ fileData={fileData}
+ file={illegallyNamedFile}
+ {...props}
+ />
+ )
const Wrapper = cloudinaryUploader({ ...props })(Wrapped)
+ const user = userEvent.setup()
render()
- const { upload } = Wrapped.mock.calls[0][0]
-
- return upload(fileData, illegallyNamedFile).then((response) => {
- const responseJson = JSON.parse(response.body)
- expect(responseJson.public_id).toEqual('SY_S1_S2')
+ await user.click(screen.getByText('Upload'))
+ await waitFor(() => {
+ expect(screen.getByText('upload-success')).toBeInTheDocument()
})
+ const responseJson = JSON.parse(response.body)
+ expect(responseJson.public_id).toEqual('SY_S1_S2')
})
- test('trims spaces from the start of the default `publicId`', () => {
+ test('trims spaces from the start of the default `publicId`', async () => {
const illegallyNamedFile = {
name: ' Example.pdf',
type: 'application/pdf',
}
- const Wrapped = jest.fn(() => Howdy
)
+ let response
+ const Wrapped = (props) => (
+ {
+ response = res
+ }}
+ fileData={fileData}
+ file={illegallyNamedFile}
+ {...props}
+ />
+ )
const Wrapper = cloudinaryUploader({ ...props })(Wrapped)
+ const user = userEvent.setup()
render()
- const { upload } = Wrapped.mock.calls[0][0]
-
- return upload(fileData, illegallyNamedFile).then((response) => {
- const responseJson = JSON.parse(response.body)
- expect(responseJson.public_id).toEqual('Example')
+ await user.click(screen.getByText('Upload'))
+ await waitFor(() => {
+ expect(screen.getByText('upload-success')).toBeInTheDocument()
})
+ const responseJson = JSON.parse(response.body)
+ expect(responseJson.public_id).toEqual('Example')
})
- test('defaults file name if not provided when creating the default `publicId`', () => {
+ test('defaults file name if not provided when creating the default `publicId`', async () => {
const fileWithNoName = { name: '', type: 'application/pdf' }
- const Wrapped = jest.fn(() => Howdy
)
+ let response
+ const Wrapped = (props) => (
+ {
+ response = res
+ }}
+ fileData={fileData}
+ file={fileWithNoName}
+ {...props}
+ />
+ )
const Wrapper = cloudinaryUploader({ ...props })(Wrapped)
+ const user = userEvent.setup()
render()
- const { upload } = Wrapped.mock.calls[0][0]
// eslint-disable-next-line no-undef
const spy = jest.spyOn(global.Date, 'now')
-
- return upload(fileData, fileWithNoName).then((response) => {
- const responseJson = JSON.parse(response.body)
- expect(responseJson.public_id).toContain('file_upload')
- expect(spy).toHaveBeenCalled()
-
- spy.mockRestore()
+ await user.click(screen.getByText('Upload'))
+ await waitFor(() => {
+ expect(screen.getByText('upload-success')).toBeInTheDocument()
})
+
+ const responseJson = JSON.parse(response.body)
+ expect(responseJson.public_id).toContain('file_upload')
+ expect(spy).toHaveBeenCalled()
+ spy.mockRestore()
})
- test('throws an error if request fails', () => {
+ test('throws an error if request fails', async () => {
const Wrapped = jest.fn(() => Hi
)
const Wrapper = cloudinaryUploader({ ...props, endpoint: '/failure' })(
Wrapped
@@ -350,21 +514,31 @@ describe('cloudinaryUploader', () => {
expect.assertions(1)
- return expect(upload(fileData, file)).rejects.toThrow()
+ await act(() => expect(upload(fileData, file)).rejects.toThrow())
})
- test('updates the `uploadStatus` prop if request fails', () => {
- const Wrapped = jest.fn(() => Hi
)
+ test('updates the `uploadStatus` prop if request fails', async () => {
+ const Wrapped = (props) => (
+ {
+ props.upload(...args).catch(() => {
+ // ignore thrown error
+ })
+ }}
+ />
+ )
const Wrapper = cloudinaryUploader({ ...props, endpoint: '/failure' })(
Wrapped
)
+ const user = userEvent.setup()
render()
- const { upload } = Wrapped.mock.calls[0][0]
+ await user.click(screen.getByText('Upload'))
- expect.assertions(1)
- return upload(fileData, file).catch(() => {
- const { uploadStatus } = Wrapped.mock.calls[2][0]
- expect(uploadStatus).toEqual('upload-failure')
+ await waitFor(() => {
+ expect(screen.getByText('upload-failure')).toBeInTheDocument()
})
})
-})
\ No newline at end of file
+})
diff --git a/test/forms/inputs/date-input.test.js b/test/forms/inputs/date-input.test.js
index e0e967e6..b531d05d 100644
--- a/test/forms/inputs/date-input.test.js
+++ b/test/forms/inputs/date-input.test.js
@@ -1,6 +1,6 @@
import React, { useState } from 'react'
import { DateInput } from '../../../src/'
-import { render, screen } from '@testing-library/react'
+import { render, screen, waitFor } from '@testing-library/react'
import userEvent from '@testing-library/user-event'
const name = 'name.of.field'
@@ -38,9 +38,14 @@ test('DateInput updates the value on change', async () => {
render()
const input = screen.getByRole('textbox', { name: 'Field' })
- await user.type(input, '02/02/2023{Enter}')
- expect(input).toHaveValue('02/02/2023')
+ await user.click(input)
+ await user.type(input, '02/02/2023')
+ await user.click(screen.getByRole('option', { selected: true }))
+ await waitFor(() => {
+ expect(screen.queryByLabelText('Next Month')).not.toBeInTheDocument()
+ expect(input).toHaveValue('02/02/2023')
+ })
})
test('DateInput sets the placeholder text correctly', () => {
diff --git a/test/forms/labels/input-error.test.js b/test/forms/labels/input-error.test.js
index 76d39bd4..f8883322 100644
--- a/test/forms/labels/input-error.test.js
+++ b/test/forms/labels/input-error.test.js
@@ -1,7 +1,6 @@
import React from 'react'
import { InputError } from '../../../src/'
import { render, screen } from '@testing-library/react'
-import userEvent from '@testing-library/user-event'
test('does not render when input is touched but not invalid', () => {
render()
diff --git a/yarn.lock b/yarn.lock
index fb684008..61b07067 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -7,10 +7,10 @@
resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf"
integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==
-"@adobe/css-tools@^4.0.1":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.2.0.tgz#e1a84fca468f4b337816fcb7f0964beb620ba855"
- integrity sha512-E09FiIft46CmH5Qnjb0wsW54/YQd69LsxeKUOWawmws1XWvyFGURnAChH0mlr7YPFR1ofwvUQfcL0J3lMxXqPA==
+"@adobe/css-tools@^4.3.0":
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.3.1.tgz#abfccb8ca78075a2b6187345c26243c1a0842f28"
+ integrity sha512-/62yikz7NLScCGAAST5SHdnjaDJQBDq0M2muyRTpf2VQhw6StBg2ALiu73zSJQ4fMVLA+0uBhBHAle7Wg+2kSg==
"@ampproject/remapping@^2.2.0":
version "2.2.1"
@@ -36,7 +36,7 @@
"@nicolo-ribaudo/chokidar-2" "2.1.8-no-fsevents.3"
chokidar "^3.4.0"
-"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.10", "@babel/code-frame@^7.22.5", "@babel/code-frame@^7.5.5", "@babel/code-frame@^7.8.3":
+"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.22.10", "@babel/code-frame@^7.22.5", "@babel/code-frame@^7.5.5", "@babel/code-frame@^7.8.3":
version "7.22.10"
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.10.tgz#1c20e612b768fefa75f6e90d6ecb86329247f0a3"
integrity sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA==
@@ -44,6 +44,14 @@
"@babel/highlight" "^7.22.10"
chalk "^2.4.2"
+"@babel/code-frame@^7.12.13":
+ version "7.22.13"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e"
+ integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==
+ dependencies:
+ "@babel/highlight" "^7.22.13"
+ chalk "^2.4.2"
+
"@babel/compat-data@^7.20.5", "@babel/compat-data@^7.22.5", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9":
version "7.22.9"
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.9.tgz#71cdb00a1ce3a329ce4cbec3a44f9fef35669730"
@@ -302,9 +310,9 @@
integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==
"@babel/helper-validator-identifier@^7.22.5":
- version "7.22.5"
- resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz#9544ef6a33999343c8740fa51350f30eeaaaf193"
- integrity sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==
+ version "7.22.15"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.15.tgz#601fa28e4cc06786c18912dca138cec73b882044"
+ integrity sha512-4E/F9IIEi8WR94324mbDUMo074YTheJmd7eZF5vITTeYchqAi6sYXRLHUVsmkdmY4QjfKTcB2jB7dVP3NaBElQ==
"@babel/helper-validator-option@^7.22.5":
version "7.22.5"
@@ -329,10 +337,10 @@
"@babel/traverse" "^7.22.10"
"@babel/types" "^7.22.10"
-"@babel/highlight@^7.22.10":
- version "7.22.10"
- resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.10.tgz#02a3f6d8c1cb4521b2fd0ab0da8f4739936137d7"
- integrity sha512-78aUtVcT7MUscr0K5mIEnkwxPE0MaxkR5RxRwuHaQ+JuU5AmTPhY+do2mdzVTnIJJpyBglql2pehuBIWHug+WQ==
+"@babel/highlight@^7.22.10", "@babel/highlight@^7.22.13":
+ version "7.22.13"
+ resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.13.tgz#9cda839e5d3be9ca9e8c26b6dd69e7548f0cbf16"
+ integrity sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==
dependencies:
"@babel/helper-validator-identifier" "^7.22.5"
chalk "^2.4.2"
@@ -1312,13 +1320,20 @@
resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310"
integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==
-"@babel/runtime@^7.0.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.17.8", "@babel/runtime@^7.20.7", "@babel/runtime@^7.21.0", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.0", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2":
+"@babel/runtime@^7.0.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.17.8", "@babel/runtime@^7.20.7", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.0", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2":
version "7.22.10"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.10.tgz#ae3e9631fd947cb7e3610d3e9d8fef5f76696682"
integrity sha512-21t/fkKLMZI4pqP2wlmsQAWnYW1PDyKyyUV4vCi+B25ydmdaYTKXPwCj0BzSUnZf4seIiYvSA3jcZ3gdsMFkLQ==
dependencies:
regenerator-runtime "^0.14.0"
+"@babel/runtime@^7.21.0":
+ version "7.22.15"
+ resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.15.tgz#38f46494ccf6cf020bd4eed7124b425e83e523b8"
+ integrity sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA==
+ dependencies:
+ regenerator-runtime "^0.14.0"
+
"@babel/template@^7.12.7", "@babel/template@^7.22.5", "@babel/template@^7.3.3":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.5.tgz#0c8c4d944509875849bd0344ff0050756eefc6ec"
@@ -1615,22 +1630,15 @@
slash "^3.0.0"
strip-ansi "^6.0.0"
-"@jest/environment@^29.6.3":
- version "29.6.3"
- resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.6.3.tgz#bb02535c729393a0345b8d2c5eef94d34f7b35a3"
- integrity sha512-u/u3cCztYCfgBiGHsamqP5x+XvucftOGPbf5RJQxfpeC1y4AL8pCjKvPDA3oCmdhZYPgk5AE0VOD/flweR69WA==
+"@jest/environment@^29.6.3", "@jest/environment@^29.7.0":
+ version "29.7.0"
+ resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.7.0.tgz#24d61f54ff1f786f3cd4073b4b94416383baf2a7"
+ integrity sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==
dependencies:
- "@jest/fake-timers" "^29.6.3"
+ "@jest/fake-timers" "^29.7.0"
"@jest/types" "^29.6.3"
"@types/node" "*"
- jest-mock "^29.6.3"
-
-"@jest/expect-utils@^29.5.0":
- version "29.5.0"
- resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.5.0.tgz#f74fad6b6e20f924582dc8ecbf2cb800fe43a036"
- integrity sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==
- dependencies:
- jest-get-type "^29.4.3"
+ jest-mock "^29.7.0"
"@jest/expect-utils@^29.6.3":
version "29.6.3"
@@ -1647,17 +1655,17 @@
expect "^29.6.3"
jest-snapshot "^29.6.3"
-"@jest/fake-timers@^29.6.3":
- version "29.6.3"
- resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.6.3.tgz#7e780b05b14ad59dca68bdc188f6cf085552a0e8"
- integrity sha512-pa1wmqvbj6eX0nMvOM2VDAWvJOI5A/Mk3l8O7n7EsAh71sMZblaKO9iT4GjIj0LwwK3CP/Jp1ypEV0x3m89RvA==
+"@jest/fake-timers@^29.6.3", "@jest/fake-timers@^29.7.0":
+ version "29.7.0"
+ resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.7.0.tgz#fd91bf1fffb16d7d0d24a426ab1a47a49881a565"
+ integrity sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==
dependencies:
"@jest/types" "^29.6.3"
"@sinonjs/fake-timers" "^10.0.2"
"@types/node" "*"
- jest-message-util "^29.6.3"
- jest-mock "^29.6.3"
- jest-util "^29.6.3"
+ jest-message-util "^29.7.0"
+ jest-mock "^29.7.0"
+ jest-util "^29.7.0"
"@jest/globals@^29.6.3":
version "29.6.3"
@@ -1699,13 +1707,6 @@
strip-ansi "^6.0.0"
v8-to-istanbul "^9.0.1"
-"@jest/schemas@^29.4.3":
- version "29.4.3"
- resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.4.3.tgz#39cf1b8469afc40b6f5a2baaa146e332c4151788"
- integrity sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==
- dependencies:
- "@sinclair/typebox" "^0.25.16"
-
"@jest/schemas@^29.6.3":
version "29.6.3"
resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03"
@@ -1763,18 +1764,6 @@
slash "^3.0.0"
write-file-atomic "^4.0.2"
-"@jest/types@^29.5.0":
- version "29.5.0"
- resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.5.0.tgz#f59ef9b031ced83047c67032700d8c807d6e1593"
- integrity sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==
- dependencies:
- "@jest/schemas" "^29.4.3"
- "@types/istanbul-lib-coverage" "^2.0.0"
- "@types/istanbul-reports" "^3.0.0"
- "@types/node" "*"
- "@types/yargs" "^17.0.8"
- chalk "^4.0.0"
-
"@jest/types@^29.6.3":
version "29.6.3"
resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59"
@@ -1999,11 +1988,6 @@
resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f"
integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==
-"@sinclair/typebox@^0.25.16":
- version "0.25.24"
- resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.25.24.tgz#8c7688559979f7079aacaf31aa881c3aa410b718"
- integrity sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==
-
"@sinclair/typebox@^0.27.8":
version "0.27.8"
resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e"
@@ -2841,21 +2825,7 @@
regenerator-runtime "^0.13.7"
resolve-from "^5.0.0"
-"@testing-library/dom@^8.0.0":
- version "8.20.0"
- resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-8.20.0.tgz#914aa862cef0f5e89b98cc48e3445c4c921010f6"
- integrity sha512-d9ULIT+a4EXLX3UU8FBjauG9NnsZHkHztXoIcTsOKoOw030fyjheN9svkTULjJxtYag9DZz5Jz5qkWZDPxTFwA==
- dependencies:
- "@babel/code-frame" "^7.10.4"
- "@babel/runtime" "^7.12.5"
- "@types/aria-query" "^5.0.1"
- aria-query "^5.0.0"
- chalk "^4.1.0"
- dom-accessibility-api "^0.5.9"
- lz-string "^1.4.4"
- pretty-format "^27.0.2"
-
-"@testing-library/dom@^9.3.1":
+"@testing-library/dom@^9.0.0", "@testing-library/dom@^9.3.1":
version "9.3.1"
resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-9.3.1.tgz#8094f560e9389fb973fe957af41bf766937a9ee9"
integrity sha512-0DGPd9AR3+iDTjGoMpxIkAsUihHZ3Ai6CneU6bRRrffXMgzCdlNk43jTrD2/5LT6CBb3MWTP8v510JzYtahD2w==
@@ -2869,14 +2839,13 @@
lz-string "^1.5.0"
pretty-format "^27.0.2"
-"@testing-library/jest-dom@^5.16.5":
- version "5.16.5"
- resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-5.16.5.tgz#3912846af19a29b2dbf32a6ae9c31ef52580074e"
- integrity sha512-N5ixQ2qKpi5OLYfwQmUb/5mSV9LneAcaUfp32pn4yCnpb8r/Yz0pXFPck21dIicKmi+ta5WRAknkZCfA8refMA==
+"@testing-library/jest-dom@^6.1.3":
+ version "6.1.3"
+ resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-6.1.3.tgz#443118c9e4043f96396f120de2c7122504a079c5"
+ integrity sha512-YzpjRHoCBWPzpPNtg6gnhasqtE/5O4qz8WCwDEaxtfnPO6gkaLrnuXusrGSPyhIGPezr1HM7ZH0CFaUTY9PJEQ==
dependencies:
- "@adobe/css-tools" "^4.0.1"
+ "@adobe/css-tools" "^4.3.0"
"@babel/runtime" "^7.9.2"
- "@types/testing-library__jest-dom" "^5.9.1"
aria-query "^5.0.0"
chalk "^3.0.0"
css.escape "^1.5.1"
@@ -2884,14 +2853,14 @@
lodash "^4.17.15"
redent "^3.0.0"
-"@testing-library/react@^12.1.5":
- version "12.1.5"
- resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-12.1.5.tgz#bb248f72f02a5ac9d949dea07279095fa577963b"
- integrity sha512-OfTXCJUFgjd/digLUuPxa0+/3ZxsQmE7ub9kcbW/wi96Bh3o/p5vrETcBGfP17NWPGqeYYl5LTRpwyGoMC4ysg==
+"@testing-library/react@^14.0.0":
+ version "14.0.0"
+ resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-14.0.0.tgz#59030392a6792450b9ab8e67aea5f3cc18d6347c"
+ integrity sha512-S04gSNJbYE30TlIMLTzv6QCTzt9AqIF5y6s6SzVFILNcNvbV/jU96GeiTPillGQo+Ny64M/5PV7klNYYgv5Dfg==
dependencies:
"@babel/runtime" "^7.12.5"
- "@testing-library/dom" "^8.0.0"
- "@types/react-dom" "<18.0.0"
+ "@testing-library/dom" "^9.0.0"
+ "@types/react-dom" "^18.0.0"
"@testing-library/user-event@^14.4.3":
version "14.4.3"
@@ -3043,14 +3012,6 @@
dependencies:
"@types/istanbul-lib-report" "*"
-"@types/jest@*":
- version "29.4.0"
- resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.4.0.tgz#a8444ad1704493e84dbf07bb05990b275b3b9206"
- integrity sha512-VaywcGQ9tPorCX/Jkkni7RWGFfI11whqzs8dvxF41P17Z+z872thvEvlIbznjPJ02kl1HMX3LmLOonsj2n7HeQ==
- dependencies:
- expect "^29.0.0"
- pretty-format "^29.0.0"
-
"@types/jsdom@^20.0.0":
version "20.0.1"
resolved "https://registry.yarnpkg.com/@types/jsdom/-/jsdom-20.0.1.tgz#07c14bc19bd2f918c1929541cdaacae894744808"
@@ -3101,9 +3062,9 @@
form-data "^3.0.0"
"@types/node@*":
- version "20.5.3"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-20.5.3.tgz#fa52c147f405d56b2f1dd8780d840aa87ddff629"
- integrity sha512-ITI7rbWczR8a/S6qjAW7DMqxqFMjjTo61qZVWJ1ubPvbIQsL5D/TvwjYEalM8Kthpe3hTzOGrF2TGbAu2uyqeA==
+ version "20.6.0"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-20.6.0.tgz#9d7daa855d33d4efec8aea88cd66db1c2f0ebe16"
+ integrity sha512-najjVq5KN2vsH2U/xyh2opaSEz6cZMR2SetLIlxlj08nOcmPOemJmUK2o4kUzfLqfrWE0PIrNeE16XhYDd3nqg==
"@types/node@^14.0.10 || ^16.0.0", "@types/node@^14.14.20 || ^16.0.0":
version "16.18.43"
@@ -3150,17 +3111,17 @@
resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb"
integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==
-"@types/react-dom@<18.0.0":
- version "17.0.19"
- resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.19.tgz#36feef3aa35d045cacd5ed60fe0eef5272f19492"
- integrity sha512-PiYG40pnQRdPHnlf7tZnp0aQ6q9tspYr72vD61saO6zFCybLfMqwUCN0va1/P+86DXn18ZWeW30Bk7xlC5eEAQ==
+"@types/react-dom@^18.0.0":
+ version "18.2.7"
+ resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.7.tgz#67222a08c0a6ae0a0da33c3532348277c70abb63"
+ integrity sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA==
dependencies:
- "@types/react" "^17"
+ "@types/react" "*"
-"@types/react@^17":
- version "17.0.53"
- resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.53.tgz#10d4d5999b8af3d6bc6a9369d7eb953da82442ab"
- integrity sha512-1yIpQR2zdYu1Z/dc1OxC+MA6GR240u3gcnP4l6mvj/PJiVaqHsQPmWttsvHsfnhfPbU2FuGmo0wSITPygjBmsw==
+"@types/react@*":
+ version "18.2.21"
+ resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.21.tgz#774c37fd01b522d0b91aed04811b58e4e0514ed9"
+ integrity sha512-neFKG/sBAwGxHgXiIxnbm3/AAVQ/cMRS93hvBpg8xYRbeQSPVABp9U2bRnPf0iI4+Ucdv3plSxKK+3CW2ENJxA==
dependencies:
"@types/prop-types" "*"
"@types/scheduler" "*"
@@ -3191,17 +3152,10 @@
resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.8.tgz#b94a4391c85666c7b73299fd3ad79d4faa435310"
integrity sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ==
-"@types/testing-library__jest-dom@^5.9.1":
- version "5.14.5"
- resolved "https://registry.yarnpkg.com/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.5.tgz#d113709c90b3c75fdb127ec338dad7d5f86c974f"
- integrity sha512-SBwbxYoyPIvxHbeHxTZX2Pe/74F/tX2/D3mMvzabdeJ25bBojfW0TyB8BHrbq/9zaaKICJZjLP+8r6AeZMFCuQ==
- dependencies:
- "@types/jest" "*"
-
"@types/tough-cookie@*":
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.2.tgz#6286b4c7228d58ab7866d19716f3696e03a09397"
- integrity sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.3.tgz#3d06b6769518450871fbc40770b7586334bdfd90"
+ integrity sha512-THo502dA5PzG/sfQH+42Lw3fvmYkceefOspdCwpHRul8ik2Jv1K8I5OZz1AT3/rs46kwgMCe9bSBmDLYkkOMGg==
"@types/uglify-js@*":
version "3.17.1"
@@ -5664,11 +5618,6 @@ detect-port@^1.3.0:
address "^1.0.1"
debug "4"
-diff-sequences@^29.4.3:
- version "29.4.3"
- resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.4.3.tgz#9314bc1fabe09267ffeca9cbafc457d8499a13f2"
- integrity sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==
-
diff-sequences@^29.6.3:
version "29.6.3"
resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921"
@@ -6505,17 +6454,6 @@ expand-brackets@^2.1.4:
snapdragon "^0.8.1"
to-regex "^3.0.1"
-expect@^29.0.0:
- version "29.5.0"
- resolved "https://registry.yarnpkg.com/expect/-/expect-29.5.0.tgz#68c0509156cb2a0adb8865d413b137eeaae682f7"
- integrity sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==
- dependencies:
- "@jest/expect-utils" "^29.5.0"
- jest-get-type "^29.4.3"
- jest-matcher-utils "^29.5.0"
- jest-message-util "^29.5.0"
- jest-util "^29.5.0"
-
expect@^29.6.3:
version "29.6.3"
resolved "https://registry.yarnpkg.com/expect/-/expect-29.6.3.tgz#e74b57c35a81fd93ece6b570e371309c53dc4f54"
@@ -8503,16 +8441,6 @@ jest-config@^29.6.3:
slash "^3.0.0"
strip-json-comments "^3.1.1"
-jest-diff@^29.5.0:
- version "29.5.0"
- resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.5.0.tgz#e0d83a58eb5451dcc1fa61b1c3ee4e8f5a290d63"
- integrity sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==
- dependencies:
- chalk "^4.0.0"
- diff-sequences "^29.4.3"
- jest-get-type "^29.4.3"
- pretty-format "^29.5.0"
-
jest-diff@^29.6.3:
version "29.6.3"
resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.6.3.tgz#365c6b037ea8e67d2f2af68bc018fc18d44311f0"
@@ -8542,17 +8470,17 @@ jest-each@^29.6.3:
pretty-format "^29.6.3"
jest-environment-jsdom@^29.6.2:
- version "29.6.3"
- resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-29.6.3.tgz#c9f394f5a89f399532c794d09bd3a746d9b3e0df"
- integrity sha512-nMJz/i27Moit9bv8Z323/13Melj4FEQH93yRu7GnilvBmPBMH4EGEkEfBTJXYuubyzhMO7w/VHzljIDV+Q/SeQ==
+ version "29.7.0"
+ resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-29.7.0.tgz#d206fa3551933c3fd519e5dfdb58a0f5139a837f"
+ integrity sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==
dependencies:
- "@jest/environment" "^29.6.3"
- "@jest/fake-timers" "^29.6.3"
+ "@jest/environment" "^29.7.0"
+ "@jest/fake-timers" "^29.7.0"
"@jest/types" "^29.6.3"
"@types/jsdom" "^20.0.0"
"@types/node" "*"
- jest-mock "^29.6.3"
- jest-util "^29.6.3"
+ jest-mock "^29.7.0"
+ jest-util "^29.7.0"
jsdom "^20.0.0"
jest-environment-node@^29.6.3:
@@ -8567,11 +8495,6 @@ jest-environment-node@^29.6.3:
jest-mock "^29.6.3"
jest-util "^29.6.3"
-jest-get-type@^29.4.3:
- version "29.4.3"
- resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.4.3.tgz#1ab7a5207c995161100b5187159ca82dd48b3dd5"
- integrity sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==
-
jest-get-type@^29.6.3:
version "29.6.3"
resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1"
@@ -8604,16 +8527,6 @@ jest-leak-detector@^29.6.3:
jest-get-type "^29.6.3"
pretty-format "^29.6.3"
-jest-matcher-utils@^29.5.0:
- version "29.5.0"
- resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz#d957af7f8c0692c5453666705621ad4abc2c59c5"
- integrity sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==
- dependencies:
- chalk "^4.0.0"
- jest-diff "^29.5.0"
- jest-get-type "^29.4.3"
- pretty-format "^29.5.0"
-
jest-matcher-utils@^29.6.3:
version "29.6.3"
resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.6.3.tgz#a7574092b635d96a38fa0a22d015fb596b9c2efc"
@@ -8624,25 +8537,10 @@ jest-matcher-utils@^29.6.3:
jest-get-type "^29.6.3"
pretty-format "^29.6.3"
-jest-message-util@^29.5.0:
- version "29.5.0"
- resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.5.0.tgz#1f776cac3aca332ab8dd2e3b41625435085c900e"
- integrity sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==
- dependencies:
- "@babel/code-frame" "^7.12.13"
- "@jest/types" "^29.5.0"
- "@types/stack-utils" "^2.0.0"
- chalk "^4.0.0"
- graceful-fs "^4.2.9"
- micromatch "^4.0.4"
- pretty-format "^29.5.0"
- slash "^3.0.0"
- stack-utils "^2.0.3"
-
-jest-message-util@^29.6.3:
- version "29.6.3"
- resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.6.3.tgz#bce16050d86801b165f20cfde34dc01d3cf85fbf"
- integrity sha512-FtzaEEHzjDpQp51HX4UMkPZjy46ati4T5pEMyM6Ik48ztu4T9LQplZ6OsimHx7EuM9dfEh5HJa6D3trEftu3dA==
+jest-message-util@^29.6.3, jest-message-util@^29.7.0:
+ version "29.7.0"
+ resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3"
+ integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==
dependencies:
"@babel/code-frame" "^7.12.13"
"@jest/types" "^29.6.3"
@@ -8650,18 +8548,18 @@ jest-message-util@^29.6.3:
chalk "^4.0.0"
graceful-fs "^4.2.9"
micromatch "^4.0.4"
- pretty-format "^29.6.3"
+ pretty-format "^29.7.0"
slash "^3.0.0"
stack-utils "^2.0.3"
-jest-mock@^29.6.3:
- version "29.6.3"
- resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.6.3.tgz#433f3fd528c8ec5a76860177484940628bdf5e0a"
- integrity sha512-Z7Gs/mOyTSR4yPsaZ72a/MtuK6RnC3JYqWONe48oLaoEcYwEDxqvbXz85G4SJrm2Z5Ar9zp6MiHF4AlFlRM4Pg==
+jest-mock@^29.6.3, jest-mock@^29.7.0:
+ version "29.7.0"
+ resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.7.0.tgz#4e836cf60e99c6fcfabe9f99d017f3fdd50a6347"
+ integrity sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==
dependencies:
"@jest/types" "^29.6.3"
"@types/node" "*"
- jest-util "^29.6.3"
+ jest-util "^29.7.0"
jest-pnp-resolver@^1.2.2:
version "1.2.3"
@@ -8777,22 +8675,10 @@ jest-snapshot@^29.6.3:
pretty-format "^29.6.3"
semver "^7.5.3"
-jest-util@^29.5.0:
- version "29.5.0"
- resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.5.0.tgz#24a4d3d92fc39ce90425311b23c27a6e0ef16b8f"
- integrity sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==
- dependencies:
- "@jest/types" "^29.5.0"
- "@types/node" "*"
- chalk "^4.0.0"
- ci-info "^3.2.0"
- graceful-fs "^4.2.9"
- picomatch "^2.2.3"
-
-jest-util@^29.6.3:
- version "29.6.3"
- resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.6.3.tgz#e15c3eac8716440d1ed076f09bc63ace1aebca63"
- integrity sha512-QUjna/xSy4B32fzcKTSz1w7YYzgiHrjjJjevdRf61HYk998R5vVMMNmrHESYZVDS5DSWs+1srPLPKxXPkeSDOA==
+jest-util@^29.6.3, jest-util@^29.7.0:
+ version "29.7.0"
+ resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc"
+ integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==
dependencies:
"@jest/types" "^29.6.3"
"@types/node" "*"
@@ -9272,7 +9158,7 @@ lru-cache@^6.0.0:
dependencies:
yallist "^4.0.0"
-lz-string@^1.4.4, lz-string@^1.5.0:
+lz-string@^1.5.0:
version "1.5.0"
resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941"
integrity sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==
@@ -11132,19 +11018,10 @@ pretty-format@^27.0.2:
ansi-styles "^5.0.0"
react-is "^17.0.1"
-pretty-format@^29.0.0, pretty-format@^29.5.0:
- version "29.5.0"
- resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.5.0.tgz#283134e74f70e2e3e7229336de0e4fce94ccde5a"
- integrity sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==
- dependencies:
- "@jest/schemas" "^29.4.3"
- ansi-styles "^5.0.0"
- react-is "^18.0.0"
-
-pretty-format@^29.6.3:
- version "29.6.3"
- resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.6.3.tgz#d432bb4f1ca6f9463410c3fb25a0ba88e594ace7"
- integrity sha512-ZsBgjVhFAj5KeK+nHfF1305/By3lechHQSMWCTl8iHSbfOm2TN5nHEtFc/+W7fAyUeCs2n5iow72gld4gW0xDw==
+pretty-format@^29.6.3, pretty-format@^29.7.0:
+ version "29.7.0"
+ resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812"
+ integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==
dependencies:
"@jest/schemas" "^29.6.3"
ansi-styles "^5.0.0"
@@ -11400,15 +11277,15 @@ react-color@^2.19.3:
tinycolor2 "^1.4.1"
react-datepicker@^4.8.0:
- version "4.16.0"
- resolved "https://registry.yarnpkg.com/react-datepicker/-/react-datepicker-4.16.0.tgz#b9dd389bb5611a1acc514bba1dd944be21dd877f"
- integrity sha512-hNQ0PAg/LQoVbDUO/RWAdm/RYmPhN3cz7LuQ3hqbs24OSp69QCiKOJRrQ4jk1gv1jNR5oYu8SjjgfDh8q6Q1yw==
+ version "4.17.0"
+ resolved "https://registry.yarnpkg.com/react-datepicker/-/react-datepicker-4.17.0.tgz#1b3eb5d1d60709e991e4c46b049e97911993193c"
+ integrity sha512-z50H44XbnkYlns7gVHzHK4jWAzLfvQehh5Lvindb09J97yVJKIbsmHs98D0f77tdZc3dSYM7oAqsFY55dBeOGQ==
dependencies:
"@popperjs/core" "^2.11.8"
classnames "^2.2.6"
date-fns "^2.30.0"
prop-types "^15.7.2"
- react-onclickoutside "^6.12.2"
+ react-onclickoutside "^6.13.0"
react-popper "^2.3.0"
react-docgen-typescript@^2.1.1:
@@ -11432,14 +11309,13 @@ react-docgen@^5.0.0:
node-dir "^0.1.10"
strip-indent "^3.0.0"
-react-dom@^17.0.0:
- version "17.0.2"
- resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23"
- integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==
+react-dom@^18.0.0:
+ version "18.2.0"
+ resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d"
+ integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==
dependencies:
loose-envify "^1.1.0"
- object-assign "^4.1.1"
- scheduler "^0.20.2"
+ scheduler "^0.23.0"
react-element-to-jsx-string@^14.3.4:
version "14.3.4"
@@ -11494,7 +11370,7 @@ react-modal@^3.14.4:
react-lifecycles-compat "^3.0.0"
warning "^4.0.3"
-react-onclickoutside@^6.12.2:
+react-onclickoutside@^6.13.0:
version "6.13.0"
resolved "https://registry.yarnpkg.com/react-onclickoutside/-/react-onclickoutside-6.13.0.tgz#e165ea4e5157f3da94f4376a3ab3e22a565f4ffc"
integrity sha512-ty8So6tcUpIb+ZE+1HAhbLROvAIJYyJe/1vRrrcmW+jLsaM+/powDRqxzo6hSh9CuRZGSL1Q8mvcF5WRD93a0A==
@@ -11551,13 +11427,12 @@ react-syntax-highlighter@^15.4.5:
prismjs "^1.27.0"
refractor "^3.6.0"
-react@^17.0.0:
- version "17.0.2"
- resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037"
- integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==
+react@^18.0.0:
+ version "18.2.0"
+ resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5"
+ integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==
dependencies:
loose-envify "^1.1.0"
- object-assign "^4.1.1"
reactcss@^1.2.0:
version "1.2.3"
@@ -12164,13 +12039,12 @@ saxes@^6.0.0:
dependencies:
xmlchars "^2.2.0"
-scheduler@^0.20.2:
- version "0.20.2"
- resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91"
- integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==
+scheduler@^0.23.0:
+ version "0.23.0"
+ resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe"
+ integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==
dependencies:
loose-envify "^1.1.0"
- object-assign "^4.1.1"
schema-utils@2.7.0:
version "2.7.0"
@@ -14106,7 +13980,12 @@ write-file-atomic@^4.0.2:
imurmurhash "^0.1.4"
signal-exit "^3.0.7"
-ws@^8.11.0, ws@^8.2.3:
+ws@^8.11.0:
+ version "8.14.1"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-8.14.1.tgz#4b9586b4f70f9e6534c7bb1d3dc0baa8b8cf01e0"
+ integrity sha512-4OOseMUq8AzRBI/7SLMUwO+FEDnguetSk7KMb1sHwvF2w2Wv5Hoj0nlifx8vtGsftE/jWHojPy8sMMzYLJ2G/A==
+
+ws@^8.2.3:
version "8.13.0"
resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0"
integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==