From 9bdf50f3a6e35bc2a095e48838587e7dce7ef988 Mon Sep 17 00:00:00 2001 From: Mariah Jacobs <114685994+mjac0bs@users.noreply.github.com> Date: Thu, 15 Feb 2024 12:05:57 -0700 Subject: [PATCH 01/37] upcoming: [M3-7753] - Tag custom analytics events for account switching (#10190) * Tag switch account and session expiry dialog buttons with custom events * Added changeset: Tag custom analytics events for account switching * Rename event function, category because it might have been misleading --- ...r-10190-upcoming-features-1707847452121.md | 5 +++ .../src/features/Account/AccountLanding.tsx | 8 ++++- .../features/Account/SwitchAccountDrawer.tsx | 6 +++- .../SwitchAccountSessionDialog.tsx | 19 ++++++++++-- .../features/TopMenu/UserMenu/UserMenu.tsx | 6 +++- packages/manager/src/utilities/analytics.ts | 31 +++++++++++++++++++ 6 files changed, 69 insertions(+), 6 deletions(-) create mode 100644 packages/manager/.changeset/pr-10190-upcoming-features-1707847452121.md diff --git a/packages/manager/.changeset/pr-10190-upcoming-features-1707847452121.md b/packages/manager/.changeset/pr-10190-upcoming-features-1707847452121.md new file mode 100644 index 00000000000..ab62abd7f6f --- /dev/null +++ b/packages/manager/.changeset/pr-10190-upcoming-features-1707847452121.md @@ -0,0 +1,5 @@ +--- +"@linode/manager": Upcoming Features +--- + +Tag custom analytics events for account switching ([#10190](https://github.com/linode/manager/pull/10190)) diff --git a/packages/manager/src/features/Account/AccountLanding.tsx b/packages/manager/src/features/Account/AccountLanding.tsx index 56f49f06fcf..22f26737899 100644 --- a/packages/manager/src/features/Account/AccountLanding.tsx +++ b/packages/manager/src/features/Account/AccountLanding.tsx @@ -16,6 +16,7 @@ import { useParentTokenManagement } from 'src/features/Account/SwitchAccounts/us import { useFlags } from 'src/hooks/useFlags'; import { useAccount } from 'src/queries/account'; import { useGrants, useProfile } from 'src/queries/profile'; +import { sendSwitchAccountEvent } from 'src/utilities/analytics'; import AccountLogins from './AccountLogins'; import { SwitchAccountButton } from './SwitchAccountButton'; @@ -152,7 +153,12 @@ const AccountLanding = () => { } landingHeaderProps.disabledCreateButton = readOnlyAccountAccess; landingHeaderProps.extraActions = canSwitchBetweenParentOrProxyAccount ? ( - + { + sendSwitchAccountEvent('Account Landing'); + handleAccountSwitch(); + }} + /> ) : undefined; } diff --git a/packages/manager/src/features/Account/SwitchAccountDrawer.tsx b/packages/manager/src/features/Account/SwitchAccountDrawer.tsx index 33ad7f6eeea..3391402a690 100644 --- a/packages/manager/src/features/Account/SwitchAccountDrawer.tsx +++ b/packages/manager/src/features/Account/SwitchAccountDrawer.tsx @@ -13,6 +13,7 @@ import { updateCurrentTokenBasedOnUserType, } from 'src/features/Account/utils'; import { useCurrentToken } from 'src/hooks/useAuthentication'; +import { sendSwitchToParentAccountEvent } from 'src/utilities/analytics'; import { getStorage } from 'src/utilities/storage'; import { ChildAccountList } from './SwitchAccounts/ChildAccountList'; @@ -187,8 +188,11 @@ export const SwitchAccountDrawer = (props: Props) => { <> {' or '} { + sendSwitchToParentAccountEvent(); + handleSwitchToParentAccount(); + }} aria-label="parent-account-link" - onClick={handleSwitchToParentAccount} > switch back to your account diff --git a/packages/manager/src/features/Account/SwitchAccounts/SwitchAccountSessionDialog.tsx b/packages/manager/src/features/Account/SwitchAccounts/SwitchAccountSessionDialog.tsx index c4c4dfdaaa4..baca7927f68 100644 --- a/packages/manager/src/features/Account/SwitchAccounts/SwitchAccountSessionDialog.tsx +++ b/packages/manager/src/features/Account/SwitchAccounts/SwitchAccountSessionDialog.tsx @@ -4,6 +4,7 @@ import { useHistory } from 'react-router-dom'; import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel'; import { ConfirmationDialog } from 'src/components/ConfirmationDialog/ConfirmationDialog'; import { Typography } from 'src/components/Typography'; +import { sendSwitchAccountSessionExpiryEvent } from 'src/utilities/analytics'; export const SwitchAccountSessionDialog = React.memo( ({ isOpen, onClose }: { isOpen: boolean; onClose: () => void }) => { @@ -13,18 +14,30 @@ export const SwitchAccountSessionDialog = React.memo( history.push('/logout'), + onClick: () => { + sendSwitchAccountSessionExpiryEvent('Log In'); + history.push('/logout'); + }, + }} + secondaryButtonProps={{ + label: 'Close', + onClick: () => { + sendSwitchAccountSessionExpiryEvent('Close'); + onClose(); + }, }} - secondaryButtonProps={{ label: 'Close', onClick: onClose }} /> ); return ( { + sendSwitchAccountSessionExpiryEvent('Close'); + onClose(); + }} actions={actions} data-testid="switch-account-session-dialog" maxWidth="xs" - onClose={onClose} open={isOpen} title="Session expired" > diff --git a/packages/manager/src/features/TopMenu/UserMenu/UserMenu.tsx b/packages/manager/src/features/TopMenu/UserMenu/UserMenu.tsx index 30908821028..57c561f5242 100644 --- a/packages/manager/src/features/TopMenu/UserMenu/UserMenu.tsx +++ b/packages/manager/src/features/TopMenu/UserMenu/UserMenu.tsx @@ -23,6 +23,7 @@ import { useParentTokenManagement } from 'src/features/Account/SwitchAccounts/us import { useFlags } from 'src/hooks/useFlags'; import { useAccount } from 'src/queries/account'; import { useGrants, useProfile } from 'src/queries/profile'; +import { sendSwitchAccountEvent } from 'src/utilities/analytics'; import { getStorage } from 'src/utilities/storage'; interface MenuLink { @@ -272,8 +273,11 @@ export const UserMenu = React.memo(() => { {canSwitchBetweenParentOrProxyAccount && ( { + sendSwitchAccountEvent('User Menu'); + handleAccountSwitch(); + }} buttonType="outlined" - onClick={handleAccountSwitch} /> )} diff --git a/packages/manager/src/utilities/analytics.ts b/packages/manager/src/utilities/analytics.ts index cb1b0bebd4b..46dd075e53f 100644 --- a/packages/manager/src/utilities/analytics.ts +++ b/packages/manager/src/utilities/analytics.ts @@ -435,6 +435,37 @@ export const sendLinodeConfigurationDocsEvent = (label: string) => { }); }; +// AccountLanding.tsx +// UserMenu.tsx +export const sendSwitchAccountEvent = ( + label: 'Account Landing' | 'User Menu' +) => { + sendEvent({ + action: 'Click:button', + category: 'Switch Accounts Flow', + label, + }); +}; + +// SwitchAccountDrawer.tsx +export const sendSwitchToParentAccountEvent = () => { + sendEvent({ + action: 'Click:link button', + category: 'Switch Accounts Flow - To Parent Account', + }); +}; + +// SwitchAccountSessionDialog.tsx +export const sendSwitchAccountSessionExpiryEvent = ( + label: 'Close' | 'Log In' +) => { + sendEvent({ + action: 'Click:button', + category: 'Switch Accounts Flow - Session Expiration', + label, + }); +}; + // LinodeDetailHeader.tsx export const sendEditBreadcrumbEvent = () => { sendEvent({ From a099b8ef2b0c626894fd6414a098f7ef6d158ecc Mon Sep 17 00:00:00 2001 From: Banks Nussman <115251059+bnussman-akamai@users.noreply.github.com> Date: Thu, 15 Feb 2024 17:59:16 -0500 Subject: [PATCH 02/37] refactor: [M3-7585] - Upgrade to React 18 (#10169) * update react packages and regenerate lockfile * fix errors * update luxon and fix breaking changes * update luxon and fix breaking changes * remove `chartjs-adapter-luxon` * Added changeset: Update Luxon * use exact versions * fix all non-luxon errors * remove `jest-axe` * fixing unit tests * clean up action menu testing * fix tests * fix more tests * fix eslint errors * remove unneeded yarn resolution * Revert "remove unneeded yarn resolution" This reverts commit 2f76b847d2fc869badaa96cd5885fc0e86d66d37. * fix unit test flake * try to get cypress to install * readd resolution * fix cypress version * fix image tests * attempt to fix all cypress tests * remove `.only`s * Revert "attempt to fix all cypress tests" This reverts commit 12da589bede765e9954e3ffaf28fedf7c07dc600. * actually fix e2e tests failures * Added changeset: Update to React 18 * update hook --------- Co-authored-by: Banks Nussman --- package.json | 4 +- .../pr-10169-tech-stories-1707760967410.md | 5 + packages/manager/cypress/support/ui/select.ts | 3 + packages/manager/package.json | 19 +- .../AccessPanel/UserSSHKeyPanel.test.tsx | 2 +- .../AccountActivationError.tsx | 2 +- .../ActionsPanel/ActionsPanel.test.tsx | 8 +- .../src/components/AreaChart/AreaChart.tsx | 6 +- .../components/Autocomplete/Autocomplete.tsx | 1 + .../DebouncedSearchTextfield.test.tsx | 19 +- .../EditableText/EditableText.test.tsx | 4 +- .../EnhancedNumberInput.test.tsx | 2 - .../EnhancedSelect/__mocks__/Select.tsx | 1 - packages/manager/src/components/Link.test.tsx | 4 +- .../PaymentMethodRow.test.tsx | 22 +- .../components/PrimaryNav/SideMenu.test.tsx | 1 - .../SingleTextFieldForm.test.tsx | 8 +- .../src/components/TagCell/TagCell.tsx | 2 +- .../components/TagsPanel/TagsPanel.test.tsx | 5 +- .../TextTooltip/TextTooltip.test.tsx | 6 +- .../Uploaders/ImageUploader/ImageUploader.tsx | 7 +- .../VerticalLinearStepper.test.tsx | 17 +- .../src/containers/images.container.tsx | 13 +- packages/manager/src/dev-tools/dev-tools.tsx | 10 +- .../src/features/Account/AutoBackups.test.tsx | 56 - .../features/Account/CloseAccountDialog.tsx | 2 +- .../Account/SwitchAccountButton.test.tsx | 4 +- .../useParentTokenManagement.test.tsx | 2 +- .../src/features/Backups/AutoEnroll.test.tsx | 4 +- .../BillingSummary/BillingSummary.test.tsx | 4 +- .../PaymentBits/CreditCardDialog.tsx | 45 +- .../PaymentDrawer/PaymentDrawer.test.tsx | 8 +- .../PaymentDrawer/PaymentDrawer.tsx | 4 +- .../PaymentInfoPanel/PayPalErrorBoundary.tsx | 1 + .../CancelLanding/CancelLanding.test.tsx | 1 - .../DatabaseBackups/DatabaseBackups.test.tsx | 22 +- .../Domains/DomainActionMenu.test.tsx | 16 +- .../Rules/FirewallRuleActionMenu.test.tsx | 18 +- .../Rules/FirewallRuleDrawer.test.tsx | 11 +- .../CreateFirewallDrawer.test.tsx | 8 +- .../src/features/Help/StatusBanners.test.tsx | 4 +- .../ClusterList/ClusterActionMenu.test.tsx | 19 +- .../src/features/Linodes/AccessTable.test.tsx | 2 +- .../LinodeSelect/LinodeSelect.test.tsx | 12 +- .../ApiAwarenessModal.test.tsx | 4 +- .../Linodes/LinodesCreate/LinodeCreate.tsx | 2 +- .../LinodesCreate/LinodeCreateContainer.tsx | 6 +- .../LinodeBackup/CaptureSnapshot.test.tsx | 4 +- .../LinodeIPAddressRow.test.tsx | 4 +- .../LinodeSettingsLabelPanel.test.tsx | 2 +- .../Linodes/LinodesDetail/LinodesDetail.tsx | 13 +- .../LinodesLanding/LinodeActionMenu.test.tsx | 115 +- .../LinodeRow/LinodeRow.test.tsx | 4 +- .../AddRouteDrawer.test.tsx | 4 +- .../EditRouteDrawer.test.tsx | 4 +- .../LoadBalancerConfiguration.test.tsx | 24 +- .../ConfigurationAccordion.test.tsx | 8 +- .../ConfigurationAccordionHeader.test.tsx | 4 +- .../EditRoutes/EditRouteDrawer.test.tsx | 8 +- .../EditRoutes/RouteAccordionHeader.test.tsx | 4 +- .../LoadBalancerCreate/Routes.test.tsx | 6 +- .../ServiceTargets.test.tsx | 2 +- .../CreateCertificateDrawer.test.tsx | 12 +- .../EditCertificateDrawer.test.tsx | 16 +- .../Routes/EditRouteDrawer.tsx | 4 +- .../ServiceTargets/EndpointTable.test.tsx | 3 +- .../LongviewLanding/LongviewPlans.test.tsx | 7 +- .../Monitors/MonitorActionMenu.test.tsx | 44 +- .../SSHAccess/SSHAccessActionMenu.test.tsx | 28 +- .../NodeBalancers/NodeBalancerSelect.test.tsx | 12 +- .../NotificationSection.tsx | 12 +- .../AccessKeyLanding/HostNamesDrawer.test.tsx | 4 +- .../BucketLanding/BucketLanding.test.tsx | 80 +- .../BucketLanding/CreateBucketDrawer.test.tsx | 4 +- .../BucketLanding/OveragePricing.test.tsx | 4 +- .../EnableObjectStorageModal.test.tsx | 1 - .../APITokens/CreateAPITokenDrawer.test.tsx | 8 +- .../APITokens/EditAPITokenDrawer.test.tsx | 6 +- .../APITokens/RevokeTokenDialog.test.tsx | 6 +- .../AuthenticationSettings/TPADialog.test.tsx | 10 +- .../TPAProviders.test.tsx | 2 +- .../CreateOAuthClientDrawer.test.tsx | 18 +- .../SSHKeys/CreateSSHKeyDrawer.test.tsx | 18 +- .../SSHKeys/DeleteSSHKeyDialog.test.tsx | 10 +- .../StackScriptBase/StackScriptBase.tsx | 3 + .../StackScriptCreate/StackScriptCreate.tsx | 6 +- .../Support/TicketAttachmentList.test.tsx | 4 +- .../VPCs/VPCCreate/VPCCreate.test.tsx | 8 +- .../features/Volumes/VolumeTableRow.test.tsx | 12 +- .../Volumes/VolumesActionMenu.test.tsx | 80 +- .../manager/src/hooks/useAPIRequest.test.ts | 33 +- packages/manager/src/hooks/useAPIRequest.ts | 2 + .../manager/src/hooks/useOpenClose.test.ts | 2 +- packages/manager/src/hooks/useOrder.test.tsx | 50 +- packages/manager/src/hooks/useSet.test.ts | 2 +- packages/manager/src/index.tsx | 6 +- packages/manager/src/testSetup.ts | 12 +- packages/manager/src/utilities/link.test.tsx | 1 + .../manager/src/utilities/testHelpers.tsx | 84 +- yarn.lock | 6679 +++++++---------- 100 files changed, 3288 insertions(+), 4637 deletions(-) create mode 100644 packages/manager/.changeset/pr-10169-tech-stories-1707760967410.md delete mode 100644 packages/manager/src/features/Account/AutoBackups.test.tsx diff --git a/package.json b/package.json index 9ed95835e54..73c02bf2854 100644 --- a/package.json +++ b/package.json @@ -58,11 +58,11 @@ "lodash": "^4.17.21", "glob-parent": "^5.1.2", "hosted-git-info": "^5.0.0", - "@types/react": "^17", "yaml": "^2.3.0", "word-wrap": "^1.2.4", "semver": "^7.5.2", - "tough-cookie": "^4.1.3" + "tough-cookie": "^4.1.3", + "jackspeak": "2.1.1" }, "workspaces": { "packages": [ diff --git a/packages/manager/.changeset/pr-10169-tech-stories-1707760967410.md b/packages/manager/.changeset/pr-10169-tech-stories-1707760967410.md new file mode 100644 index 00000000000..381f3f68f6a --- /dev/null +++ b/packages/manager/.changeset/pr-10169-tech-stories-1707760967410.md @@ -0,0 +1,5 @@ +--- +"@linode/manager": Tech Stories +--- + +Update to React 18 ([#10169](https://github.com/linode/manager/pull/10169)) diff --git a/packages/manager/cypress/support/ui/select.ts b/packages/manager/cypress/support/ui/select.ts index 6d117789272..d9aad65293d 100644 --- a/packages/manager/cypress/support/ui/select.ts +++ b/packages/manager/cypress/support/ui/select.ts @@ -25,6 +25,7 @@ export const select = { * @returns Cypress chainable. */ findItemById: (id: string) => { + // eslint-disable-next-line cypress/unsafe-to-chain-command return cy .get(`[data-qa-option="${id}"]`) .scrollIntoView() @@ -41,6 +42,7 @@ export const select = { * @returns Cypress chainable. */ findItemByText: (text: string) => { + // eslint-disable-next-line cypress/unsafe-to-chain-command return cy .get('[data-qa-option]') .contains(text) @@ -58,6 +60,7 @@ export const select = { * @returns Cypress chainable. */ findLinodeItemByText: (text: string) => { + // eslint-disable-next-line cypress/unsafe-to-chain-command return cy .get('[data-qa-linode-option]') .contains(text) diff --git a/packages/manager/package.json b/packages/manager/package.json index 9856aaecb0c..c18ee430367 100644 --- a/packages/manager/package.json +++ b/packages/manager/package.json @@ -49,10 +49,10 @@ "patch-package": "^7.0.0", "qrcode.react": "^0.8.0", "ramda": "~0.25.0", - "react": "^17.0.2", + "react": "^18.2.0", "react-beautiful-dnd": "^13.0.0", "react-csv": "^2.0.3", - "react-dom": "^17.0.2", + "react-dom": "^18.2.0", "react-dropzone": "~11.2.0", "react-number-format": "^3.5.0", "react-query": "^3.3.2", @@ -121,17 +121,15 @@ "@storybook/theming": "^7.6.10", "@swc/core": "^1.3.1", "@testing-library/cypress": "^10.0.0", - "@testing-library/jest-dom": "~5.11.3", - "@testing-library/react": "~10.4.9", - "@testing-library/react-hooks": "~3.4.1", - "@testing-library/user-event": "^12.1.1", + "@testing-library/jest-dom": "~6.4.2", + "@testing-library/react": "~14.2.1", + "@testing-library/user-event": "^14.5.2", "@types/braintree-web": "^3.75.23", "@types/chai-string": "^1.4.5", "@types/chart.js": "^2.9.21", "@types/css-mediaquery": "^0.1.1", "@types/he": "^1.1.0", "@types/highlight.js": "~10.1.0", - "@types/jest-axe": "^3.5.7", "@types/jsdom": "^21.1.4", "@types/jspdf": "^1.3.3", "@types/luxon": "3.4.2", @@ -141,10 +139,10 @@ "@types/node": "^12.7.1", "@types/qrcode.react": "^0.8.0", "@types/ramda": "0.25.16", - "@types/react": "^17.0.27", + "@types/react": "^18.2.55", "@types/react-beautiful-dnd": "^13.0.0", "@types/react-csv": "^1.1.3", - "@types/react-dom": "^17.0.9", + "@types/react-dom": "^18.2.18", "@types/react-redux": "~7.1.7", "@types/react-router-dom": "~5.3.3", "@types/react-router-hash-link": "^1.2.1", @@ -165,7 +163,7 @@ "chalk": "^5.2.0", "commander": "^6.2.1", "css-mediaquery": "^0.1.2", - "cypress": "^13.5.0", + "cypress": "13.5.0", "cypress-axe": "^1.0.0", "cypress-file-upload": "^5.0.7", "cypress-real-events": "^1.11.0", @@ -188,7 +186,6 @@ "eslint-plugin-xss": "^0.1.10", "factory.ts": "^0.5.1", "glob": "^10.3.1", - "jest-axe": "^8.0.0", "jsdom": "^22.1.0", "junit2json": "^3.1.4", "lint-staged": "^13.2.2", diff --git a/packages/manager/src/components/AccessPanel/UserSSHKeyPanel.test.tsx b/packages/manager/src/components/AccessPanel/UserSSHKeyPanel.test.tsx index b3b152ff10d..e0d163d76c0 100644 --- a/packages/manager/src/components/AccessPanel/UserSSHKeyPanel.test.tsx +++ b/packages/manager/src/components/AccessPanel/UserSSHKeyPanel.test.tsx @@ -111,7 +111,7 @@ describe('UserSSHKeyPanel', () => { expect(getByText('test-user')).toBeInTheDocument(); expect(getByText('ssh-key')).toBeInTheDocument(); }); - userEvent.click(getByRole('checkbox')); + await userEvent.click(getByRole('checkbox')); expect(props.setAuthorizedUsers).toBeCalledWith(['test-user']); }); }); diff --git a/packages/manager/src/components/AccountActivation/AccountActivationError.tsx b/packages/manager/src/components/AccountActivation/AccountActivationError.tsx index 5fff87e057f..ad56e0fcc4b 100644 --- a/packages/manager/src/components/AccountActivation/AccountActivationError.tsx +++ b/packages/manager/src/components/AccountActivation/AccountActivationError.tsx @@ -26,7 +26,7 @@ const AccountActivationError = (props: CombinedProps) => { {getAPIErrorOrDefault( props.errors, 'Your account is not yet activated. Please reach out to support@linode.com for more information' - )} + )[0].reason} ); }; diff --git a/packages/manager/src/components/ActionsPanel/ActionsPanel.test.tsx b/packages/manager/src/components/ActionsPanel/ActionsPanel.test.tsx index efb6a7c22f4..9cbc228dc1c 100644 --- a/packages/manager/src/components/ActionsPanel/ActionsPanel.test.tsx +++ b/packages/manager/src/components/ActionsPanel/ActionsPanel.test.tsx @@ -47,7 +47,7 @@ describe('ActionsPanel', () => { expect(screen.queryByTestId(secondaryButtonTestId)).not.toBeInTheDocument(); }); - it('should call primaryButtonHandler when primary button is clicked', () => { + it('should call primaryButtonHandler when primary button is clicked', async () => { const mockHandler = vi.fn(); renderWithTheme( { }} /> ); - userEvent.click(screen.getByTestId(primaryButtonTestId)); + await userEvent.click(screen.getByTestId(primaryButtonTestId)); expect(mockHandler).toHaveBeenCalledTimes(1); }); - it('should call secondaryButtonHandler when secondary button is clicked', () => { + it('should call secondaryButtonHandler when secondary button is clicked', async () => { const mockHandler = vi.fn(); renderWithTheme( { }} /> ); - userEvent.click(screen.getByTestId(secondaryButtonTestId)); + await userEvent.click(screen.getByTestId(secondaryButtonTestId)); expect(mockHandler).toHaveBeenCalledTimes(1); }); }); diff --git a/packages/manager/src/components/AreaChart/AreaChart.tsx b/packages/manager/src/components/AreaChart/AreaChart.tsx index 7f2db46b8fa..a64ed6c25ed 100644 --- a/packages/manager/src/components/AreaChart/AreaChart.tsx +++ b/packages/manager/src/components/AreaChart/AreaChart.tsx @@ -173,11 +173,15 @@ export const AreaChart = (props: AreaChartProps) => { {value} )} + onClick={({ dataKey }) => { + if (dataKey) { + handleLegendClick(dataKey as string); + } + }} wrapperStyle={{ left: 25, }} iconType="square" - onClick={(props) => handleLegendClick(props.dataKey)} /> )} {showLegend && legendRows && ( diff --git a/packages/manager/src/components/Autocomplete/Autocomplete.tsx b/packages/manager/src/components/Autocomplete/Autocomplete.tsx index 013314d5235..3aa494f3c23 100644 --- a/packages/manager/src/components/Autocomplete/Autocomplete.tsx +++ b/packages/manager/src/components/Autocomplete/Autocomplete.tsx @@ -33,6 +33,7 @@ export interface EnhancedAutocompleteProps< noMarginTop?: boolean; /** Text to show when the Autocomplete search yields no results. */ noOptionsText?: string; + placeholder?: string; /** Label for the "select all" option. */ selectAllLabel?: string; textFieldProps?: Partial; diff --git a/packages/manager/src/components/DebouncedSearchTextField/DebouncedSearchTextfield.test.tsx b/packages/manager/src/components/DebouncedSearchTextField/DebouncedSearchTextfield.test.tsx index b3bc7b175de..fc430e82dd7 100644 --- a/packages/manager/src/components/DebouncedSearchTextField/DebouncedSearchTextfield.test.tsx +++ b/packages/manager/src/components/DebouncedSearchTextField/DebouncedSearchTextfield.test.tsx @@ -1,13 +1,11 @@ +import { waitFor } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; -import { debounce } from 'lodash'; import * as React from 'react'; import { renderWithTheme } from 'src/utilities/testHelpers'; import { DebouncedSearchTextField } from './DebouncedSearchTextField'; -vi.useFakeTimers(); - const labelVal = 'Search textfield label'; const textfieldId = 'textfield-input'; const props = { @@ -45,20 +43,15 @@ describe('Debounced Search Text Field', () => { expect(circleIcon).toBeInTheDocument(); }); - it('calls isSearching', () => { - const debouncedOnSearch = debounce(props.onSearch, 250); + it('calls isSearching', async () => { const screen = renderWithTheme( - + ); const textfield = screen.getByTestId(textfieldId); - userEvent.type(textfield, 'test'); - vi.runAllTimers(); - expect(props.onSearch).toHaveBeenCalled(); + await userEvent.type(textfield, 'test'); + + await waitFor(() => expect(props.onSearch).toHaveBeenCalled()); }); it('renders the expected placeholder', () => { diff --git a/packages/manager/src/components/EditableText/EditableText.test.tsx b/packages/manager/src/components/EditableText/EditableText.test.tsx index 63f2dbe7062..589ab3d4c0b 100644 --- a/packages/manager/src/components/EditableText/EditableText.test.tsx +++ b/packages/manager/src/components/EditableText/EditableText.test.tsx @@ -86,7 +86,7 @@ describe('Editable Text', () => { expect(getByLabelText(BUTTON_LABEL)).toBeInTheDocument(); }); - it('calls onEdit if the text has been changed', () => { + it('calls onEdit if the text has been changed', async () => { const { getByLabelText, getByTestId } = renderWithTheme( ); @@ -101,7 +101,7 @@ describe('Editable Text', () => { // editing text const textfield = getByTestId('textfield-input'); expect(textfield).toHaveValue('Edit this'); - userEvent.type(textfield, ' has now been edited'); + await userEvent.type(textfield, ' has now been edited'); expect(textfield).toHaveValue('Edit this has now been edited'); // saving text diff --git a/packages/manager/src/components/EnhancedNumberInput/EnhancedNumberInput.test.tsx b/packages/manager/src/components/EnhancedNumberInput/EnhancedNumberInput.test.tsx index 84053d6927e..3e4162196a0 100644 --- a/packages/manager/src/components/EnhancedNumberInput/EnhancedNumberInput.test.tsx +++ b/packages/manager/src/components/EnhancedNumberInput/EnhancedNumberInput.test.tsx @@ -16,8 +16,6 @@ const disabledProps = { disabled: true, }; -beforeEach(vi.clearAllMocks); - describe('EnhancedNumberInput', () => { it("should increment the input's value by 1 when the plus button is clicked", () => { const { getByTestId } = render( diff --git a/packages/manager/src/components/EnhancedSelect/__mocks__/Select.tsx b/packages/manager/src/components/EnhancedSelect/__mocks__/Select.tsx index 9b215dfe4ba..590dc1ebd7f 100644 --- a/packages/manager/src/components/EnhancedSelect/__mocks__/Select.tsx +++ b/packages/manager/src/components/EnhancedSelect/__mocks__/Select.tsx @@ -50,7 +50,6 @@ export default ({ name={_label} onBlur={handleChange} onChange={handleChange} - placeholder={placeholder} value={value ?? ''} > {_options.map((thisOption: any) => ( diff --git a/packages/manager/src/components/Link.test.tsx b/packages/manager/src/components/Link.test.tsx index c9aa1d13b92..d977e1cb2aa 100644 --- a/packages/manager/src/components/Link.test.tsx +++ b/packages/manager/src/components/Link.test.tsx @@ -60,7 +60,7 @@ describe('Link component', () => { expect(linkElement).toHaveTextContent(/External Link/); }); - it('calls the onClick handler when the link is clicked', () => { + it('calls the onClick handler when the link is clicked', async () => { const mockOnClick = vi.fn(); const mockProps: LinkProps = { children: 'External Link', @@ -76,7 +76,7 @@ describe('Link component', () => { expect(linkElement.tagName).toBe('A'); expect(linkElement).toHaveTextContent(/External Link/); - userEvent.click(linkElement); + await userEvent.click(linkElement); expect(mockOnClick).toHaveBeenCalledTimes(1); }); diff --git a/packages/manager/src/components/PaymentMethodRow/PaymentMethodRow.test.tsx b/packages/manager/src/components/PaymentMethodRow/PaymentMethodRow.test.tsx index 486d083a4ac..438798296c8 100644 --- a/packages/manager/src/components/PaymentMethodRow/PaymentMethodRow.test.tsx +++ b/packages/manager/src/components/PaymentMethodRow/PaymentMethodRow.test.tsx @@ -111,7 +111,7 @@ describe('Payment Method Row', () => { expect(getByLabelText(expectedLabelPayPal)).toBeVisible(); }); - it('Disables "Make Default" and "Delete" actions if payment method is set as default', () => { + it('Disables "Make Default" and "Delete" actions if payment method is set as default', async () => { const { getByLabelText, getByText } = renderWithTheme( { /> ); - userEvent.click(getByLabelText(/^Action menu for/)); + await userEvent.click(getByLabelText(/^Action menu for/)); expect( getByText('Make Default').closest('li')?.getAttribute('aria-disabled') ).toEqual('true'); @@ -129,7 +129,7 @@ describe('Payment Method Row', () => { ).toEqual('true'); }); - it('Calls `onDelete` callback when "Delete" action is clicked', () => { + it('Calls `onDelete` callback when "Delete" action is clicked', async () => { const mockFunction = vi.fn(); const { getByLabelText, getByText } = renderWithTheme( @@ -142,16 +142,16 @@ describe('Payment Method Row', () => { ); const actionMenu = getByLabelText('Action menu for card ending in 1881'); - userEvent.click(actionMenu); + await userEvent.click(actionMenu); const deleteActionButton = getByText('Delete'); expect(deleteActionButton).toBeVisible(); - userEvent.click(deleteActionButton); + await userEvent.click(deleteActionButton); expect(mockFunction).toBeCalledTimes(1); }); - it('Makes payment method default when "Make Default" action is clicked', () => { + it('Makes payment method default when "Make Default" action is clicked', async () => { const paymentMethod = paymentMethodFactory.build({ data: { card_type: 'Visa', @@ -167,16 +167,16 @@ describe('Payment Method Row', () => { ); const actionMenu = getByLabelText('Action menu for card ending in 1111'); - userEvent.click(actionMenu); + await userEvent.click(actionMenu); const makeDefaultButton = getByText('Make Default'); expect(makeDefaultButton).toBeVisible(); - userEvent.click(makeDefaultButton); + await userEvent.click(makeDefaultButton); expect(makeDefaultPaymentMethod).toBeCalledTimes(1); }); - it('Opens "Make a Payment" drawer if "Make a Payment" action is clicked', () => { + it('Opens "Make a Payment" drawer if "Make a Payment" action is clicked', async () => { const paymentMethod = paymentMethodFactory.build(); /* @@ -195,11 +195,11 @@ describe('Payment Method Row', () => { ); const actionMenu = getByLabelText('Action menu for card ending in 1881'); - userEvent.click(actionMenu); + await userEvent.click(actionMenu); const makePaymentButton = getByText('Make a Payment'); expect(makePaymentButton).toBeVisible(); - userEvent.click(makePaymentButton); + await userEvent.click(makePaymentButton); expect(getByTestId('drawer')).toBeVisible(); expect(getByTestId('drawer-title').textContent).toEqual('Make a Payment'); diff --git a/packages/manager/src/components/PrimaryNav/SideMenu.test.tsx b/packages/manager/src/components/PrimaryNav/SideMenu.test.tsx index f27ebd945d7..089201f2414 100644 --- a/packages/manager/src/components/PrimaryNav/SideMenu.test.tsx +++ b/packages/manager/src/components/PrimaryNav/SideMenu.test.tsx @@ -1,4 +1,3 @@ -import '@testing-library/jest-dom'; import { fireEvent, screen } from '@testing-library/react'; import React from 'react'; diff --git a/packages/manager/src/components/SingleTextFieldForm/SingleTextFieldForm.test.tsx b/packages/manager/src/components/SingleTextFieldForm/SingleTextFieldForm.test.tsx index bf3f19be53f..4a80c6e8d67 100644 --- a/packages/manager/src/components/SingleTextFieldForm/SingleTextFieldForm.test.tsx +++ b/packages/manager/src/components/SingleTextFieldForm/SingleTextFieldForm.test.tsx @@ -21,8 +21,8 @@ describe('SingleTextFieldForm', () => { it('Renders a success message on success', async () => { renderWithTheme(); - userEvent.type(screen.getByTestId('textfield-input'), 'new-value'); - userEvent.click(screen.getByText('Update Username')); + await userEvent.type(screen.getByTestId('textfield-input'), 'new-value'); + await userEvent.click(screen.getByText('Update Username')); await waitFor(() => expect(screen.getByText(/username updated/i)).toBeInTheDocument() ); @@ -37,8 +37,8 @@ describe('SingleTextFieldForm', () => { )} /> ); - userEvent.type(screen.getByTestId('textfield-input'), 'new-value'); - userEvent.click(screen.getByText('Update Username')); + await userEvent.type(screen.getByTestId('textfield-input'), 'new-value'); + await userEvent.click(screen.getByText('Update Username')); await waitFor(() => expect(screen.getByText(/error updating/i)).toBeInTheDocument() ); diff --git a/packages/manager/src/components/TagCell/TagCell.tsx b/packages/manager/src/components/TagCell/TagCell.tsx index 5e8393a5954..ced0fd1b51b 100644 --- a/packages/manager/src/components/TagCell/TagCell.tsx +++ b/packages/manager/src/components/TagCell/TagCell.tsx @@ -41,7 +41,7 @@ const TagCell = (props: TagCellProps) => { const [addingTag, setAddingTag] = React.useState(false); const [loading, setLoading] = React.useState(false); const overflowRef = React.useCallback( - (node) => { + (node: HTMLDivElement) => { if (node !== null) { setOverflow(checkOverflow(node)); } diff --git a/packages/manager/src/components/TagsPanel/TagsPanel.test.tsx b/packages/manager/src/components/TagsPanel/TagsPanel.test.tsx index 1c3f2b5b92c..0b572f63c9d 100644 --- a/packages/manager/src/components/TagsPanel/TagsPanel.test.tsx +++ b/packages/manager/src/components/TagsPanel/TagsPanel.test.tsx @@ -7,6 +7,7 @@ import { renderWithTheme } from 'src/utilities/testHelpers'; import { TagsPanel } from './TagsPanel'; import type { TagsPanelProps } from './TagsPanel'; +import userEvent from '@testing-library/user-event'; const queryClient = new QueryClient(); @@ -43,14 +44,14 @@ describe('TagsPanel', () => { ); - fireEvent.click(getByText('Add a tag')); + await userEvent.click(getByText('Add a tag')); fireEvent.change(getByLabelText('Create or Select a Tag'), { target: { value: 'NewTag' }, }); const newTagItem = getByText('Create "NewTag"'); - fireEvent.click(newTagItem); + await userEvent.click(newTagItem); await waitFor(() => { expect(updateTagsMock).toHaveBeenCalledWith(['NewTag', 'Tag1', 'Tag2']); diff --git a/packages/manager/src/components/TextTooltip/TextTooltip.test.tsx b/packages/manager/src/components/TextTooltip/TextTooltip.test.tsx index 56c86524ef7..7a44e14538e 100644 --- a/packages/manager/src/components/TextTooltip/TextTooltip.test.tsx +++ b/packages/manager/src/components/TextTooltip/TextTooltip.test.tsx @@ -16,12 +16,12 @@ describe('TextTooltip', () => { ); - expect(queryByRole(/tooltip/)).not.toBeInTheDocument(); + expect(queryByRole('tooltip')).not.toBeInTheDocument(); expect(getByText(props.displayText)).toBeInTheDocument(); fireEvent.mouseEnter(getByText(props.displayText)); - const tooltip = await findByRole(/tooltip/); + const tooltip = await findByRole('tooltip'); expect(tooltip).toBeInTheDocument(); }); @@ -37,7 +37,7 @@ describe('TextTooltip', () => { ); fireEvent.mouseEnter(getByText(props.displayText)); - const tooltip = await findByRole(/tooltip/); + const tooltip = await findByRole('tooltip'); expect(tooltip).toHaveAttribute('data-popper-placement', 'bottom'); }); diff --git a/packages/manager/src/components/Uploaders/ImageUploader/ImageUploader.tsx b/packages/manager/src/components/Uploaders/ImageUploader/ImageUploader.tsx index d4568ecb0f7..4dc9c18b7f5 100644 --- a/packages/manager/src/components/Uploaders/ImageUploader/ImageUploader.tsx +++ b/packages/manager/src/components/Uploaders/ImageUploader/ImageUploader.tsx @@ -1,6 +1,7 @@ import { APIError } from '@linode/api-v4/lib/types'; import { useSnackbar } from 'notistack'; import * as React from 'react'; +import { flushSync } from 'react-dom'; import { FileRejection, useDropzone } from 'react-dropzone'; import { useQueryClient } from 'react-query'; import { useDispatch } from 'react-redux'; @@ -216,7 +217,11 @@ export const ImageUploader = React.memo((props: ImageUploaderProps) => { variant: 'success', }); - dispatchAction(setPendingUpload(false)); + // React force a render so that `pendingUpload` is false when navigating away + // from the upload page. + flushSync(() => { + dispatchAction(setPendingUpload(false)); + }); recordImageAnalytics('success', file); diff --git a/packages/manager/src/components/VerticalLinearStepper/VerticalLinearStepper.test.tsx b/packages/manager/src/components/VerticalLinearStepper/VerticalLinearStepper.test.tsx index 729d6e8dec4..12cea4b6252 100644 --- a/packages/manager/src/components/VerticalLinearStepper/VerticalLinearStepper.test.tsx +++ b/packages/manager/src/components/VerticalLinearStepper/VerticalLinearStepper.test.tsx @@ -1,4 +1,3 @@ -import '@testing-library/jest-dom/extend-expect'; import { screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import React from 'react'; @@ -34,9 +33,9 @@ describe('VerticalLinearStepper', () => { expect(screen.getByText('Next: Summary')).toBeInTheDocument(); expect(screen.queryByText('Previous: Details')).toBeNull(); }); - test('Should navigate to second step conent', () => { + test('Should navigate to second step conent', async () => { renderWithTheme(); - userEvent.click(screen.getByTestId('summary')); + await userEvent.click(screen.getByTestId('summary')); expect(steps[0].handler).toHaveBeenCalledTimes(1); expect(screen.getByText('Step 2 Content')).toBeInTheDocument(); expect(screen.queryByText('Step 1 Content')).toBeNull(); @@ -44,10 +43,10 @@ describe('VerticalLinearStepper', () => { expect(screen.getByText('Next: Next')).toBeInTheDocument(); expect(screen.queryByText('Previous: Summary')).toBeNull(); }); - test('Should navigate to final step conent', () => { + test('Should navigate to final step conent', async () => { renderWithTheme(); - userEvent.click(screen.getByTestId('summary')); - userEvent.click(screen.getByTestId('next')); + await userEvent.click(screen.getByTestId('summary')); + await userEvent.click(screen.getByTestId('next')); expect(steps[1].handler).toHaveBeenCalledTimes(1); expect(screen.queryByText('Step 1 Content')).toBeNull(); expect(screen.queryByText('Step 2 Content')).toBeNull(); @@ -55,10 +54,10 @@ describe('VerticalLinearStepper', () => { expect(screen.queryByText('Next: Summary')).toBeNull(); expect(screen.getByText('Previous: Summary')).toBeInTheDocument(); }); - test('Should be able to go previous step', () => { + test('Should be able to go previous step', async () => { renderWithTheme(); - userEvent.click(screen.getByTestId('summary')); - userEvent.click(screen.getByText('Previous: Details')); + await userEvent.click(screen.getByTestId('summary')); + await userEvent.click(screen.getByText('Previous: Details')); expect(steps[1].handler).toHaveBeenCalledTimes(1); expect(screen.getByText('Step 1 Content')).toBeInTheDocument(); }); diff --git a/packages/manager/src/containers/images.container.tsx b/packages/manager/src/containers/images.container.tsx index 75d173de4f2..c5711b488f6 100644 --- a/packages/manager/src/containers/images.container.tsx +++ b/packages/manager/src/containers/images.container.tsx @@ -5,7 +5,7 @@ import * as React from 'react'; import { listToItemsByID } from 'src/queries/base'; import { useAllImagesQuery } from 'src/queries/images'; -export interface DefaultProps { +export interface WithImagesProps { imagesData: Record; imagesError?: APIError[]; imagesLastUpdated: number; @@ -26,12 +26,9 @@ export interface DefaultProps { * best practice is to include an FC container above it (the routing level often works well) * and pass the data through there. */ -type Wrapper = ( - Component: React.ComponentType -) => React.FC; -const imagesContainer: Wrapper = ( - Component: React.ComponentType -) => (props) => { +export const withImages = ( + Component: React.ComponentType +) => (props: Props) => { const { data, dataUpdatedAt, error, isLoading } = useAllImagesQuery(); const _imagesData = listToItemsByID(data ?? []); @@ -45,5 +42,3 @@ const imagesContainer: Wrapper = ( /> ); }; - -export default imagesContainer; diff --git a/packages/manager/src/dev-tools/dev-tools.tsx b/packages/manager/src/dev-tools/dev-tools.tsx index d24f54ad37b..99ba883b528 100644 --- a/packages/manager/src/dev-tools/dev-tools.tsx +++ b/packages/manager/src/dev-tools/dev-tools.tsx @@ -1,15 +1,15 @@ import Grid from '@mui/material/Unstable_Grid2'; import React from 'react'; -import ReactDOM from 'react-dom'; +import { createRoot } from 'react-dom/client'; import { Provider } from 'react-redux'; import { ENABLE_DEV_TOOLS, isProductionBuild } from 'src/constants'; import { ApplicationStore } from 'src/store'; +import './dev-tools.css'; import { EnvironmentToggleTool } from './EnvironmentToggleTool'; import { FeatureFlagTool } from './FeatureFlagTool'; import { MockDataTool } from './MockDataTool'; -import './dev-tools.css'; function install(store: ApplicationStore) { function DevTools() { @@ -37,11 +37,11 @@ function install(store: ApplicationStore) { const devToolsRoot = document.createElement('div'); document.body.appendChild(devToolsRoot); - ReactDOM.render( + const root = createRoot(devToolsRoot); + root.render( - , - devToolsRoot + ); } diff --git a/packages/manager/src/features/Account/AutoBackups.test.tsx b/packages/manager/src/features/Account/AutoBackups.test.tsx deleted file mode 100644 index 4ec909af6d9..00000000000 --- a/packages/manager/src/features/Account/AutoBackups.test.tsx +++ /dev/null @@ -1,56 +0,0 @@ -import * as jaxe from 'jest-axe'; -import * as React from 'react'; - -import { renderWithTheme, toPassAxeCheck } from 'src/utilities/testHelpers'; - -import AutoBackups from './AutoBackups'; - -const TEST_TIMEOUT = 10000; - -expect.extend(toPassAxeCheck); -expect.extend(jaxe.toHaveNoViolations); - -// expect.extend(jaxe.toHaveNoViolations); -describe('AutoBackups simple sanity check', () => { - it( - 'not managed not auto backups with linodes nobackups', - async () => { - const openDrawer = vi.fn(); - const props = { - backups_enabled: false, - hasLinodesWithoutBackups: true, - isManagedCustomer: false, - onChange: vi.fn(), - openBackupsDrawer: openDrawer, - }; - const res = renderWithTheme(); - expect(res).toPassAxeCheck(); - expect(await jaxe.axe(res.container)).toHaveNoViolations(); - }, - TEST_TIMEOUT - ); - - // it('should FAIL but does not', async () => { - // // pass anything that outputs html to axe - // const html = render(test) - // expect(await jaxe.axe(html.container)).toHaveNoViolations() - // expect(html).toPassAxeCheck() - - // }) - // it('should FAIL but does not', async () => { - // const html = render(test) - // expect(await jaxe.axe(html.container)).toHaveNoViolations() - // expect(html).toPassAxeCheck() - // }) - // it('should PASS', async () => { - // const html = render(test) - // expect(await jaxe.axe(html.container)).toHaveNoViolations() - // expect(html).toPassAxeCheck() - - // }) - // it('should FAIL', async () => { - // const html = render() - // expect(await jaxe.axe(html.container)).toHaveNoViolations() - // expect(html).toPassAxeCheck() - // }) -}); diff --git a/packages/manager/src/features/Account/CloseAccountDialog.tsx b/packages/manager/src/features/Account/CloseAccountDialog.tsx index c74d8009bb5..5ebca3b4297 100644 --- a/packages/manager/src/features/Account/CloseAccountDialog.tsx +++ b/packages/manager/src/features/Account/CloseAccountDialog.tsx @@ -60,7 +60,7 @@ const CloseAccountDialog = ({ closeDialog, open }: Props) => { }, [inputtedUsername, profile]); const inputRef = React.useCallback( - (node) => { + (node: any) => { /** * focus on first textfield when modal is opened */ diff --git a/packages/manager/src/features/Account/SwitchAccountButton.test.tsx b/packages/manager/src/features/Account/SwitchAccountButton.test.tsx index c991d2c2357..b043e9f825c 100644 --- a/packages/manager/src/features/Account/SwitchAccountButton.test.tsx +++ b/packages/manager/src/features/Account/SwitchAccountButton.test.tsx @@ -14,11 +14,11 @@ describe('SwitchAccountButton', () => { expect(screen.getByTestId('swap-icon')).toBeInTheDocument(); }); - test('calls onClick handler when button is clicked', () => { + test('calls onClick handler when button is clicked', async () => { const onClickMock = vi.fn(); renderWithTheme(); - userEvent.click(screen.getByText('Switch Account')); + await userEvent.click(screen.getByText('Switch Account')); expect(onClickMock).toHaveBeenCalledTimes(1); }); diff --git a/packages/manager/src/features/Account/SwitchAccounts/useParentTokenManagement.test.tsx b/packages/manager/src/features/Account/SwitchAccounts/useParentTokenManagement.test.tsx index 0715e3d02d5..3304c35029b 100644 --- a/packages/manager/src/features/Account/SwitchAccounts/useParentTokenManagement.test.tsx +++ b/packages/manager/src/features/Account/SwitchAccounts/useParentTokenManagement.test.tsx @@ -1,4 +1,4 @@ -import { renderHook } from '@testing-library/react-hooks'; +import { renderHook } from '@testing-library/react'; import * as React from 'react'; import { switchAccountSessionContext } from 'src/context/switchAccountSessionContext'; diff --git a/packages/manager/src/features/Backups/AutoEnroll.test.tsx b/packages/manager/src/features/Backups/AutoEnroll.test.tsx index 1c21b6d656b..2ca4004372a 100644 --- a/packages/manager/src/features/Backups/AutoEnroll.test.tsx +++ b/packages/manager/src/features/Backups/AutoEnroll.test.tsx @@ -18,12 +18,12 @@ describe('AutoEnroll display component', () => { ); expect(getByRole('checkbox')).toBeChecked(); }); - it('the toggle props works', () => { + it('the toggle props works', async () => { const toggle = vi.fn(); const { getByRole } = renderWithTheme( ); - userEvent.click(getByRole('checkbox')); + await userEvent.click(getByRole('checkbox')); expect(toggle).toBeCalled(); }); it('should render its error prop', () => { diff --git a/packages/manager/src/features/Billing/BillingPanels/BillingSummary/BillingSummary.test.tsx b/packages/manager/src/features/Billing/BillingPanels/BillingSummary/BillingSummary.test.tsx index dc463dc6c12..b9605c9cbde 100644 --- a/packages/manager/src/features/Billing/BillingPanels/BillingSummary/BillingSummary.test.tsx +++ b/packages/manager/src/features/Billing/BillingPanels/BillingSummary/BillingSummary.test.tsx @@ -134,7 +134,7 @@ describe('BillingSummary', () => { within(screen.getByTestId('accrued-charges-value')).getByText('$5.00'); }); - it('opens "Make a Payment" drawer when "Make a payment." is clicked', () => { + it('opens "Make a Payment" drawer when "Make a payment." is clicked', async () => { const { getByTestId, getByText } = renderWithTheme( @@ -142,7 +142,7 @@ describe('BillingSummary', () => { ); const paymentButton = getByText('Make a payment', { exact: false }); - userEvent.click(paymentButton); + await userEvent.click(paymentButton); expect(getByTestId('drawer')).toBeVisible(); expect(getByTestId('drawer-title').textContent).toEqual('Make a Payment'); diff --git a/packages/manager/src/features/Billing/BillingPanels/BillingSummary/PaymentDrawer/PaymentBits/CreditCardDialog.tsx b/packages/manager/src/features/Billing/BillingPanels/BillingSummary/PaymentDrawer/PaymentBits/CreditCardDialog.tsx index 6b5b54d5990..e07974e3fd3 100644 --- a/packages/manager/src/features/Billing/BillingPanels/BillingSummary/PaymentDrawer/PaymentBits/CreditCardDialog.tsx +++ b/packages/manager/src/features/Billing/BillingPanels/BillingSummary/PaymentDrawer/PaymentBits/CreditCardDialog.tsx @@ -1,5 +1,4 @@ import * as React from 'react'; -import { compose } from 'recompose'; import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel'; import { ConfirmationDialog } from 'src/components/ConfirmationDialog/ConfirmationDialog'; @@ -18,14 +17,26 @@ interface Props extends Actions { usd: string; } -type CombinedProps = Props; - -const CreditCardDialog: React.SFC = (props) => { - const { cancel, error, open, usd, ...actionsProps } = props; +export const CreditCardDialog = (props: Props) => { + const { cancel, error, open, usd, isMakingPayment, executePayment } = props; return ( } + actions={ + + } onClose={cancel} open={open} title="Confirm Payment" @@ -35,25 +46,3 @@ const CreditCardDialog: React.SFC = (props) => { ); }; - -export default compose(React.memo)(CreditCardDialog); - -class DialogActions extends React.PureComponent { - render() { - return ( - - ); - } -} diff --git a/packages/manager/src/features/Billing/BillingPanels/BillingSummary/PaymentDrawer/PaymentDrawer.test.tsx b/packages/manager/src/features/Billing/BillingPanels/BillingSummary/PaymentDrawer/PaymentDrawer.test.tsx index a7ef1e2d320..6670bff1051 100644 --- a/packages/manager/src/features/Billing/BillingPanels/BillingSummary/PaymentDrawer/PaymentDrawer.test.tsx +++ b/packages/manager/src/features/Billing/BillingPanels/BillingSummary/PaymentDrawer/PaymentDrawer.test.tsx @@ -43,8 +43,8 @@ describe('Make a Payment Panel', () => { await waitForElementToBeRemoved(screen.getByTestId('loading-account')); - userEvent.click(screen.getByText(/pay now/i)); - userEvent.click(screen.getByTestId('credit-card-submit')); + await userEvent.click(screen.getByText(/pay now/i)); + await userEvent.click(screen.getByTestId('credit-card-submit')); expect( await screen.findByText(/your payment has been processed but/i) ).toBeInTheDocument(); @@ -57,8 +57,8 @@ describe('Make a Payment Panel', () => { }) ); render(wrapWithTheme()); - userEvent.click(screen.getByText(/pay via credit card/i)); - userEvent.click(screen.getByTestId('credit-card-submit')); + await userEvent.click(screen.getByText(/pay via credit card/i)); + await userEvent.click(screen.getByTestId('credit-card-submit')); expect( await screen.findByText(/submitted successfully/i) ).toBeInTheDocument(); diff --git a/packages/manager/src/features/Billing/BillingPanels/BillingSummary/PaymentDrawer/PaymentDrawer.tsx b/packages/manager/src/features/Billing/BillingPanels/BillingSummary/PaymentDrawer/PaymentDrawer.tsx index 20c21f35058..ee55de5fd8a 100644 --- a/packages/manager/src/features/Billing/BillingPanels/BillingSummary/PaymentDrawer/PaymentDrawer.tsx +++ b/packages/manager/src/features/Billing/BillingPanels/BillingSummary/PaymentDrawer/PaymentDrawer.tsx @@ -22,15 +22,15 @@ import { TooltipIcon } from 'src/components/TooltipIcon'; import { Typography } from 'src/components/Typography'; import { useAccount } from 'src/queries/account'; import { queryKey } from 'src/queries/accountBilling'; +import { isCreditCardExpired } from 'src/utilities/creditCard'; import { getAPIErrorOrDefault } from 'src/utilities/errorUtils'; import { PayPalErrorBoundary } from '../../PaymentInfoPanel/PayPalErrorBoundary'; import GooglePayButton from './GooglePayButton'; import PayPalButton from './PayPalButton'; -import CreditCardDialog from './PaymentBits/CreditCardDialog'; +import { CreditCardDialog } from './PaymentBits/CreditCardDialog'; import { PaymentMethodCard } from './PaymentMethodCard'; import { SetSuccess } from './types'; -import { isCreditCardExpired } from 'src/utilities/creditCard'; const useStyles = makeStyles()(() => ({ button: { diff --git a/packages/manager/src/features/Billing/BillingPanels/PaymentInfoPanel/PayPalErrorBoundary.tsx b/packages/manager/src/features/Billing/BillingPanels/PaymentInfoPanel/PayPalErrorBoundary.tsx index beca9b99c3d..7ed99986599 100644 --- a/packages/manager/src/features/Billing/BillingPanels/PaymentInfoPanel/PayPalErrorBoundary.tsx +++ b/packages/manager/src/features/Billing/BillingPanels/PaymentInfoPanel/PayPalErrorBoundary.tsx @@ -7,6 +7,7 @@ interface State { } interface Props { + children: React.ReactNode; renderError: (errorMsg: string) => JSX.Element; } diff --git a/packages/manager/src/features/CancelLanding/CancelLanding.test.tsx b/packages/manager/src/features/CancelLanding/CancelLanding.test.tsx index 881d2ae48a0..1942bf0cf0a 100644 --- a/packages/manager/src/features/CancelLanding/CancelLanding.test.tsx +++ b/packages/manager/src/features/CancelLanding/CancelLanding.test.tsx @@ -1,4 +1,3 @@ -import '@testing-library/jest-dom/extend-expect'; import { fireEvent, render } from '@testing-library/react'; import * as React from 'react'; diff --git a/packages/manager/src/features/Databases/DatabaseDetail/DatabaseBackups/DatabaseBackups.test.tsx b/packages/manager/src/features/Databases/DatabaseDetail/DatabaseBackups/DatabaseBackups.test.tsx index 3753848e790..9dba00adf70 100644 --- a/packages/manager/src/features/Databases/DatabaseDetail/DatabaseBackups/DatabaseBackups.test.tsx +++ b/packages/manager/src/features/Databases/DatabaseDetail/DatabaseBackups/DatabaseBackups.test.tsx @@ -1,4 +1,3 @@ -import { waitForElementToBeRemoved } from '@testing-library/react'; import * as React from 'react'; import { QueryClient } from 'react-query'; @@ -48,20 +47,15 @@ describe('Database Backups', () => { }) ); - const { getByTestId, getByText } = renderWithTheme(, { + const { findByText } = renderWithTheme(, { queryClient, }); - // Should render a loading state - expect(getByTestId(loadingTestId)).toBeInTheDocument(); - - // Wait for loading to finish before test continues - await waitForElementToBeRemoved(getByTestId(loadingTestId)); - for (const backup of backups) { // Check to see if all 7 backups are rendered expect( - getByText(formatDate(backup.created, { timezone: 'utc' })) + // eslint-disable-next-line no-await-in-loop + await findByText(formatDate(backup.created, { timezone: 'utc' })) ).toBeInTheDocument(); } }); @@ -81,16 +75,10 @@ describe('Database Backups', () => { }) ); - const { getByTestId, getByText } = renderWithTheme(, { + const { findByText } = renderWithTheme(, { queryClient, }); - // Should render a loading state - expect(getByTestId(loadingTestId)).toBeInTheDocument(); - - // Wait for loading to finish before test continues - await waitForElementToBeRemoved(getByTestId(loadingTestId)); - - expect(getByText('No backups to display.')).toBeInTheDocument(); + expect(await findByText('No backups to display.')).toBeInTheDocument(); }); }); diff --git a/packages/manager/src/features/Domains/DomainActionMenu.test.tsx b/packages/manager/src/features/Domains/DomainActionMenu.test.tsx index 0830f31780e..4b7efc443a9 100644 --- a/packages/manager/src/features/Domains/DomainActionMenu.test.tsx +++ b/packages/manager/src/features/Domains/DomainActionMenu.test.tsx @@ -1,7 +1,8 @@ +import { userEvent } from '@testing-library/user-event'; import * as React from 'react'; import { domainFactory } from 'src/factories/domain'; -import { includesActions, renderWithTheme } from 'src/utilities/testHelpers'; +import { renderWithTheme } from 'src/utilities/testHelpers'; import { DomainActionMenu } from './DomainActionMenu'; @@ -13,10 +14,17 @@ const props = { }; describe('Domain action menu', () => { - it('should include basic Domain actions', () => { - const { queryByText } = renderWithTheme( + it('should include basic Domain actions', async () => { + const { getByText, queryByLabelText } = renderWithTheme( ); - includesActions(['Edit', 'Clone', 'Delete'], queryByText); + + const actionMenuButton = queryByLabelText(/^Action menu for/)!; + + await userEvent.click(actionMenuButton); + + for (const action of ['Edit', 'Clone', 'Delete']) { + expect(getByText(action)).toBeVisible(); + } }); }); diff --git a/packages/manager/src/features/Firewalls/FirewallDetail/Rules/FirewallRuleActionMenu.test.tsx b/packages/manager/src/features/Firewalls/FirewallDetail/Rules/FirewallRuleActionMenu.test.tsx index d584addf945..f9277c7c6d9 100644 --- a/packages/manager/src/features/Firewalls/FirewallDetail/Rules/FirewallRuleActionMenu.test.tsx +++ b/packages/manager/src/features/Firewalls/FirewallDetail/Rules/FirewallRuleActionMenu.test.tsx @@ -1,14 +1,13 @@ +import userEvent from '@testing-library/user-event'; import * as React from 'react'; -import { includesActions, renderWithTheme } from 'src/utilities/testHelpers'; +import { renderWithTheme } from 'src/utilities/testHelpers'; import { FirewallRuleActionMenu, FirewallRuleActionMenuProps, } from './FirewallRuleActionMenu'; -vi.mock('src/components/ActionMenu/ActionMenu'); - const props: FirewallRuleActionMenuProps = { disabled: false, idx: 1, @@ -18,10 +17,17 @@ const props: FirewallRuleActionMenuProps = { }; describe('Firewall rule action menu', () => { - it('should include the correct actions', () => { - const { queryByText } = renderWithTheme( + it('should include the correct actions', async () => { + const { getByText, queryByLabelText } = renderWithTheme( ); - includesActions(['Edit', 'Clone', 'Delete'], queryByText); + + const actionMenuButton = queryByLabelText(/^Action menu for/)!; + + await userEvent.click(actionMenuButton); + + for (const action of ['Edit', 'Clone', 'Delete']) { + expect(getByText(action)).toBeVisible(); + } }); }); diff --git a/packages/manager/src/features/Firewalls/FirewallDetail/Rules/FirewallRuleDrawer.test.tsx b/packages/manager/src/features/Firewalls/FirewallDetail/Rules/FirewallRuleDrawer.test.tsx index c17c3fd635a..b18c4f1aeb7 100644 --- a/packages/manager/src/features/Firewalls/FirewallDetail/Rules/FirewallRuleDrawer.test.tsx +++ b/packages/manager/src/features/Firewalls/FirewallDetail/Rules/FirewallRuleDrawer.test.tsx @@ -47,24 +47,21 @@ describe('AddRuleDrawer', () => { getByText('Add an Inbound Rule'); }); - it('disables the port input when the ICMP protocol is selected', () => { + it('disables the port input when the ICMP protocol is selected', async () => { renderWithTheme( ); expect(screen.getByLabelText('Ports')).not.toBeDisabled(); - userEvent.selectOptions(screen.getByPlaceholderText(/protocol/i), 'ICMP'); + await userEvent.selectOptions(screen.getByLabelText('Protocol'), 'ICMP'); expect(screen.getByLabelText('Ports')).toBeDisabled(); }); - it('disables the port input when the IPENCAP protocol is selected', () => { + it('disables the port input when the IPENCAP protocol is selected', async () => { renderWithTheme( ); expect(screen.getByLabelText('Ports')).not.toBeDisabled(); - userEvent.selectOptions( - screen.getByPlaceholderText(/protocol/i), - 'IPENCAP' - ); + await userEvent.selectOptions(screen.getByLabelText('Protocol'), 'IPENCAP'); expect(screen.getByLabelText('Ports')).toBeDisabled(); }); }); diff --git a/packages/manager/src/features/Firewalls/FirewallLanding/CreateFirewallDrawer.test.tsx b/packages/manager/src/features/Firewalls/FirewallLanding/CreateFirewallDrawer.test.tsx index c742b662b04..3ed4808724e 100644 --- a/packages/manager/src/features/Firewalls/FirewallLanding/CreateFirewallDrawer.test.tsx +++ b/packages/manager/src/features/Firewalls/FirewallLanding/CreateFirewallDrawer.test.tsx @@ -14,9 +14,9 @@ const props = { }; describe('Create Firewall Drawer', () => { - it('should close the drawer on cancel', () => { + it('should close the drawer on cancel', async () => { renderWithTheme(); - userEvent.click(screen.getByTestId('cancel')); + await userEvent.click(screen.getByTestId('cancel')); expect(props.onClose).toHaveBeenCalledTimes(1); }); @@ -30,8 +30,8 @@ describe('Create Firewall Drawer', () => { it('should validate the form on submit', async () => { renderWithTheme(); - userEvent.type(screen.getByLabelText('Label (required)'), 'a'); - userEvent.click(screen.getByTestId('submit')); + await userEvent.type(screen.getByLabelText('Label (required)'), 'a'); + await userEvent.click(screen.getByTestId('submit')); const error = await screen.findByText( /Label must be between 3 and 32 characters./i ); diff --git a/packages/manager/src/features/Help/StatusBanners.test.tsx b/packages/manager/src/features/Help/StatusBanners.test.tsx index 54768bf999b..9e9bd66bdbb 100644 --- a/packages/manager/src/features/Help/StatusBanners.test.tsx +++ b/packages/manager/src/features/Help/StatusBanners.test.tsx @@ -33,10 +33,10 @@ describe('Status banners from statuspage.io', () => { expect(screen.getByRole('link')).toHaveAttribute('href', props.href); }); - it("clicking a banner's close icon should remove it from view", () => { + it("clicking a banner's close icon should remove it from view", async () => { const { container } = renderWithTheme(); const dismissButton = screen.getByTestId('notice-dismiss'); - userEvent.click(dismissButton); + await userEvent.click(dismissButton); expect(container).toBeEmptyDOMElement(); }); }); diff --git a/packages/manager/src/features/Kubernetes/ClusterList/ClusterActionMenu.test.tsx b/packages/manager/src/features/Kubernetes/ClusterList/ClusterActionMenu.test.tsx index 7cf60a25762..ad975d03544 100644 --- a/packages/manager/src/features/Kubernetes/ClusterList/ClusterActionMenu.test.tsx +++ b/packages/manager/src/features/Kubernetes/ClusterList/ClusterActionMenu.test.tsx @@ -1,9 +1,10 @@ import * as kube from '@linode/api-v4/lib/kubernetes/kubernetes'; import { fireEvent, render } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; import * as React from 'react'; import { reactRouterProps } from 'src/__data__/reactRouterProps'; -import { includesActions, wrapWithTheme } from 'src/utilities/testHelpers'; +import { wrapWithTheme } from 'src/utilities/testHelpers'; import { ClusterActionMenu } from './ClusterActionMenu'; @@ -32,18 +33,24 @@ const props = { }; describe('Kubernetes cluster action menu', () => { - it('should include the correct Kube actions', () => { - const { queryByText } = render( + it('should include the correct Kube actions', async () => { + const { getByText, queryByLabelText } = render( wrapWithTheme() ); - includesActions(['Download kubeconfig', 'Delete'], queryByText); + + const actionMenuButton = queryByLabelText(/^Action menu for/)!; + + await userEvent.click(actionMenuButton); + for (const action of ['Download kubeconfig', 'Delete']) { + expect(getByText(action)).toBeVisible(); + } }); - it('should query the API for a config file when Download kubeconfig is clicked', () => { + it('should query the API for a config file when Download kubeconfig is clicked', async () => { const { getByText } = render( wrapWithTheme() ); - fireEvent.click(getByText(/download/i)); + await fireEvent.click(getByText(/download/i)); expect(mockGetKubeConfig).toHaveBeenCalledWith(123456); }); }); diff --git a/packages/manager/src/features/Linodes/AccessTable.test.tsx b/packages/manager/src/features/Linodes/AccessTable.test.tsx index e0a20d6e9b9..dbe22dc2faf 100644 --- a/packages/manager/src/features/Linodes/AccessTable.test.tsx +++ b/packages/manager/src/features/Linodes/AccessTable.test.tsx @@ -26,7 +26,7 @@ describe('AccessTable', () => { fireEvent.mouseEnter(helpIconButton); - const publicIpsUnassignedTooltip = await findByRole(/tooltip/); + const publicIpsUnassignedTooltip = await findByRole('tooltip'); expect(publicIpsUnassignedTooltip).toContainHTML( PUBLIC_IPS_UNASSIGNED_TOOLTIP_TEXT ); diff --git a/packages/manager/src/features/Linodes/LinodeSelect/LinodeSelect.test.tsx b/packages/manager/src/features/Linodes/LinodeSelect/LinodeSelect.test.tsx index 10a294b5443..a6c44f5eef3 100644 --- a/packages/manager/src/features/Linodes/LinodeSelect/LinodeSelect.test.tsx +++ b/packages/manager/src/features/Linodes/LinodeSelect/LinodeSelect.test.tsx @@ -40,7 +40,7 @@ describe('LinodeSelect', () => { const input = screen.getByTestId(TEXTFIELD_ID); // Open the dropdown - userEvent.click(input); + await userEvent.click(input); // Wait for the options to load (use some unique identifier for the options) await waitFor(() => { @@ -69,7 +69,7 @@ describe('LinodeSelect', () => { const input = screen.getByTestId(TEXTFIELD_ID); // Open the dropdown - userEvent.click(input); + await userEvent.click(input); await waitFor(() => { // The custom no options message should be displayed when there are no options available @@ -93,7 +93,7 @@ describe('LinodeSelect', () => { // Open the dropdown const input = screen.getByTestId(TEXTFIELD_ID); - userEvent.click(input); + await userEvent.click(input); await waitFor(() => { // The default no options message should be displayed when noOptionsMessage prop is not provided @@ -120,7 +120,7 @@ describe('LinodeSelect', () => { const input = screen.getByTestId(TEXTFIELD_ID); // Open the dropdown - userEvent.click(input); + await userEvent.click(input); await waitFor(() => { expect(screen.getByText(customNoOptionsMessage)).toBeInTheDocument(); @@ -144,7 +144,7 @@ describe('LinodeSelect', () => { const input = screen.getByTestId(TEXTFIELD_ID); - userEvent.type(input, 'Linode 2'); + await userEvent.type(input, 'Linode 2'); await waitFor(() => { expect(screen.getByText(customNoOptionsMessage)).toBeInTheDocument(); @@ -169,7 +169,7 @@ describe('LinodeSelect', () => { const input = screen.getByTestId(TEXTFIELD_ID); // The custom no options message should not be displayed when user input matches an option - userEvent.type(input, 'Linode 1'); + await userEvent.type(input, 'Linode 1'); await waitFor(() => { expect( diff --git a/packages/manager/src/features/Linodes/LinodesCreate/ApiAwarenessModal/ApiAwarenessModal.test.tsx b/packages/manager/src/features/Linodes/LinodesCreate/ApiAwarenessModal/ApiAwarenessModal.test.tsx index efbcb0ff1f3..235651efc50 100644 --- a/packages/manager/src/features/Linodes/LinodesCreate/ApiAwarenessModal/ApiAwarenessModal.test.tsx +++ b/packages/manager/src/features/Linodes/LinodesCreate/ApiAwarenessModal/ApiAwarenessModal.test.tsx @@ -30,9 +30,9 @@ describe('ApiAwarenessModal', () => { renderComponent({ isOpen: true }); screen.getByText('Create Linode'); }); - it('Should invoke onClose handler upon cliking close button', () => { + it('Should invoke onClose handler upon cliking close button', async () => { renderComponent({ isOpen: true }); - userEvent.click(screen.getByTestId('close-button')); + await userEvent.click(screen.getByTestId('close-button')); expect(defaultProps.onClose).toHaveBeenCalledTimes(1); }); }); diff --git a/packages/manager/src/features/Linodes/LinodesCreate/LinodeCreate.tsx b/packages/manager/src/features/Linodes/LinodesCreate/LinodeCreate.tsx index e828af82c44..63f2f259c6c 100644 --- a/packages/manager/src/features/Linodes/LinodesCreate/LinodeCreate.tsx +++ b/packages/manager/src/features/Linodes/LinodesCreate/LinodeCreate.tsx @@ -34,7 +34,7 @@ import { withAccount, } from 'src/containers/account.container'; import { WithFeatureFlagProps } from 'src/containers/flags.container'; -import { DefaultProps as ImagesProps } from 'src/containers/images.container'; +import { WithImagesProps as ImagesProps } from 'src/containers/images.container'; import { RegionsProps } from 'src/containers/regions.container'; import { WithTypesProps } from 'src/containers/types.container'; import { WithLinodesProps } from 'src/containers/withLinodes.container'; diff --git a/packages/manager/src/features/Linodes/LinodesCreate/LinodeCreateContainer.tsx b/packages/manager/src/features/Linodes/LinodesCreate/LinodeCreateContainer.tsx index fa39eab131d..317d2d39b56 100644 --- a/packages/manager/src/features/Linodes/LinodesCreate/LinodeCreateContainer.tsx +++ b/packages/manager/src/features/Linodes/LinodesCreate/LinodeCreateContainer.tsx @@ -30,9 +30,7 @@ import { WithFeatureFlagProps, withFeatureFlags, } from 'src/containers/flags.container'; -import withImages, { - DefaultProps as ImagesProps, -} from 'src/containers/images.container'; +import { WithImagesProps, withImages } from 'src/containers/images.container'; import { WithProfileProps, withProfile, @@ -135,7 +133,7 @@ interface State { type CombinedProps = WithSnackbarProps & CreateType & - ImagesProps & + WithImagesProps & WithTypesProps & WithLinodesProps & RegionsProps & diff --git a/packages/manager/src/features/Linodes/LinodesDetail/LinodeBackup/CaptureSnapshot.test.tsx b/packages/manager/src/features/Linodes/LinodesDetail/LinodeBackup/CaptureSnapshot.test.tsx index a3a6879cb1a..fdc2b732fcf 100644 --- a/packages/manager/src/features/Linodes/LinodesDetail/LinodeBackup/CaptureSnapshot.test.tsx +++ b/packages/manager/src/features/Linodes/LinodesDetail/LinodeBackup/CaptureSnapshot.test.tsx @@ -39,9 +39,9 @@ describe('CaptureSnapshot', () => { ); - userEvent.type(getByLabelText('Name Snapshot'), 'my-linode-snapshot'); + await userEvent.type(getByLabelText('Name Snapshot'), 'my-linode-snapshot'); - userEvent.click(getByText('Take Snapshot')); + await userEvent.click(getByText('Take Snapshot')); expect( getByText( diff --git a/packages/manager/src/features/Linodes/LinodesDetail/LinodeNetworking/LinodeIPAddressRow.test.tsx b/packages/manager/src/features/Linodes/LinodesDetail/LinodeNetworking/LinodeIPAddressRow.test.tsx index 45cb4a2f974..cb5dd2b9beb 100644 --- a/packages/manager/src/features/Linodes/LinodesDetail/LinodeNetworking/LinodeIPAddressRow.test.tsx +++ b/packages/manager/src/features/Linodes/LinodesDetail/LinodeNetworking/LinodeIPAddressRow.test.tsx @@ -85,7 +85,7 @@ describe('LinodeIPAddressRow', () => { const deleteBtn = getByTestId('action-menu-item-delete'); expect(deleteBtn).toHaveAttribute('aria-disabled', 'true'); fireEvent.mouseEnter(deleteBtn); - const publicIpsUnassignedTooltip = await findByRole(/tooltip/); + const publicIpsUnassignedTooltip = await findByRole('tooltip'); expect(publicIpsUnassignedTooltip).toContainHTML( PUBLIC_IPS_UNASSIGNED_TOOLTIP_TEXT ); @@ -94,7 +94,7 @@ describe('LinodeIPAddressRow', () => { expect(editRDNSBtn).toHaveAttribute('aria-disabled', 'true'); fireEvent.mouseEnter(editRDNSBtn); - const publicIpsUnassignedTooltip2 = await findByRole(/tooltip/); + const publicIpsUnassignedTooltip2 = await findByRole('tooltip'); expect(publicIpsUnassignedTooltip2).toContainHTML( PUBLIC_IPS_UNASSIGNED_TOOLTIP_TEXT ); diff --git a/packages/manager/src/features/Linodes/LinodesDetail/LinodeSettings/LinodeSettingsLabelPanel.test.tsx b/packages/manager/src/features/Linodes/LinodesDetail/LinodeSettings/LinodeSettingsLabelPanel.test.tsx index 5edb2ac03c9..b2ea8887fd1 100644 --- a/packages/manager/src/features/Linodes/LinodesDetail/LinodeSettings/LinodeSettingsLabelPanel.test.tsx +++ b/packages/manager/src/features/Linodes/LinodesDetail/LinodeSettings/LinodeSettingsLabelPanel.test.tsx @@ -29,7 +29,7 @@ describe('LinodeSettingsLabelPanel', () => { await waitFor(() => { // Verify the input contains the Linode's label when it loads it - expect(input).toHaveAttribute('value', 'my-linode-1'); + expect(input).toHaveValue('my-linode-1'); }); // Verify that the save button is disabled (because the label is unmodified) diff --git a/packages/manager/src/features/Linodes/LinodesDetail/LinodesDetail.tsx b/packages/manager/src/features/Linodes/LinodesDetail/LinodesDetail.tsx index 2d1084aaa9f..db661dcdeea 100644 --- a/packages/manager/src/features/Linodes/LinodesDetail/LinodesDetail.tsx +++ b/packages/manager/src/features/Linodes/LinodesDetail/LinodesDetail.tsx @@ -46,19 +46,16 @@ const LinodeDetail = () => { have to reload all the configs, disks, etc. once we get to the CloneLanding page. */} - + + + + + ( - - - - - - - )} /> diff --git a/packages/manager/src/features/Linodes/LinodesLanding/LinodeActionMenu.test.tsx b/packages/manager/src/features/Linodes/LinodesLanding/LinodeActionMenu.test.tsx index 78f4fd7e73e..62fde8194bc 100644 --- a/packages/manager/src/features/Linodes/LinodesLanding/LinodeActionMenu.test.tsx +++ b/packages/manager/src/features/Linodes/LinodesLanding/LinodeActionMenu.test.tsx @@ -1,17 +1,17 @@ import { screen } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; import * as React from 'react'; import { extendedTypes } from 'src/__data__/ExtendedType'; import { linodeBackupsFactory } from 'src/factories/linodes'; import { regionFactory } from 'src/factories/regions'; -import { includesActions, renderWithTheme } from 'src/utilities/testHelpers'; +import { renderWithTheme } from 'src/utilities/testHelpers'; import { LinodeActionMenu, LinodeActionMenuProps, buildQueryStringForLinodeClone, } from './LinodeActionMenu'; -import userEvent from '@testing-library/user-event'; const props: LinodeActionMenuProps = { inListView: true, @@ -31,65 +31,98 @@ const props: LinodeActionMenuProps = { describe('LinodeActionMenu', () => { describe('Action menu', () => { - it('should contain all basic actions when the Linode is running', () => { - renderWithTheme(); - expect( - includesActions( - [ - 'Power Off', - 'Reboot', - 'Launch LISH Console', - 'Clone', - 'Resize', - 'Rebuild', - 'Rescue', - 'Migrate', - 'Delete', - ], - screen.queryByText - ) + it('should contain all basic actions when the Linode is running', async () => { + const { getByLabelText, getByText } = renderWithTheme( + + ); + + const actionMenuButton = getByLabelText( + `Action menu for Linode ${props.linodeLabel}` ); + + await userEvent.click(actionMenuButton); + + const actions = [ + 'Power Off', + 'Reboot', + 'Launch LISH Console', + 'Clone', + 'Resize', + 'Rebuild', + 'Rescue', + 'Migrate', + 'Delete', + ]; + + for (const action of actions) { + expect(getByText(action)).toBeVisible(); + } }); - it('should contain Power On when the Linode is offline', () => { - renderWithTheme(); - expect(includesActions(['Power On'], screen.queryByText)); - expect(screen.queryByText('Power Off')).toBeNull(); + it('should contain Power On when the Linode is offline', async () => { + const { getByLabelText, queryByText } = renderWithTheme( + + ); + + const actionMenuButton = getByLabelText( + `Action menu for Linode ${props.linodeLabel}` + ); + + await userEvent.click(actionMenuButton); + + expect(queryByText('Power On')).toBeVisible(); + expect(queryByText('Power Off')).toBeNull(); }); - it('should contain all actions except Power Off, Reboot, and Launch Console when not in table context', () => { - renderWithTheme( + it('should contain all actions except Power Off, Reboot, and Launch Console when not in table context', async () => { + const { getByLabelText, getByText, queryByText } = renderWithTheme( ); - expect( - includesActions( - ['Clone', 'Resize', 'Rebuild', 'Rescue', 'Migrate', 'Delete'], - screen.queryByText - ) - ); - expect( - includesActions( - ['Launch LISH Console', 'Power On', 'Reboot'], - screen.queryByText, - false - ) + + const actionMenuButton = getByLabelText( + `Action menu for Linode ${props.linodeLabel}` ); + + await userEvent.click(actionMenuButton); + + const actionsThatShouldBeVisible = [ + 'Clone', + 'Resize', + 'Rebuild', + 'Rescue', + 'Migrate', + 'Delete', + ]; + + for (const action of actionsThatShouldBeVisible) { + expect(getByText(action)).toBeVisible(); + } + + const actionsThatShouldNotBeShown = [ + 'Launch LISH Console', + 'Power On', + 'Reboot', + ]; + + for (const action of actionsThatShouldNotBeShown) { + expect(queryByText(action)).toBeNull(); + } }); - it('should allow a reboot if the Linode is running', () => { + it('should allow a reboot if the Linode is running', async () => { renderWithTheme(); - userEvent.click(screen.getByLabelText(/^Action menu for/)); + await userEvent.click(screen.getByLabelText(/^Action menu for/)); expect(screen.queryByText('Reboot')).not.toHaveAttribute('aria-disabled'); }); - it('should disable the reboot action if the Linode is not running', () => { + it('should disable the reboot action if the Linode is not running', async () => { // TODO: Should check for "read_only" permissions too renderWithTheme(); - userEvent.click(screen.getByLabelText(/^Action menu for/)); + await userEvent.click(screen.getByLabelText(/^Action menu for/)); expect(screen.queryByText('Reboot')?.closest('li')).toHaveAttribute( 'aria-disabled', 'true' diff --git a/packages/manager/src/features/Linodes/LinodesLanding/LinodeRow/LinodeRow.test.tsx b/packages/manager/src/features/Linodes/LinodesLanding/LinodeRow/LinodeRow.test.tsx index d882e9c0b82..234c8c01ab6 100644 --- a/packages/manager/src/features/Linodes/LinodesLanding/LinodeRow/LinodeRow.test.tsx +++ b/packages/manager/src/features/Linodes/LinodesLanding/LinodeRow/LinodeRow.test.tsx @@ -19,7 +19,7 @@ describe('LinodeRow', () => { }); }); - it('should render a linode row', () => { + it('should render a linode row', async () => { const linode = linodeFactory.build(); const renderedLinode = ( { // Open action menu const actionMenu = getByLabelText(`Action menu for Linode ${linode.label}`); - userEvent.click(actionMenu); + await userEvent.click(actionMenu); getByText('Power Off'); getByText('Reboot'); diff --git a/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/AddRouteDrawer.test.tsx b/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/AddRouteDrawer.test.tsx index 8805a453c84..b783c89e218 100644 --- a/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/AddRouteDrawer.test.tsx +++ b/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/AddRouteDrawer.test.tsx @@ -54,9 +54,9 @@ describe('AddRouteDrawer (ACLB full create flow)', () => { 'button' ); - userEvent.type(labelTextField, 'my-route'); + await userEvent.type(labelTextField, 'my-route'); - userEvent.click(addButton!); + await userEvent.click(addButton!); await waitFor(() => expect(onClose).toBeCalled()); }); diff --git a/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/EditRouteDrawer.test.tsx b/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/EditRouteDrawer.test.tsx index 108bd77c681..d21934c21f3 100644 --- a/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/EditRouteDrawer.test.tsx +++ b/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/EditRouteDrawer.test.tsx @@ -60,10 +60,10 @@ describe('EditRouteDrawer (ACLB full create flow)', () => { expect(saveButton).toHaveAttribute('aria-disabled', 'true'); - userEvent.type(routeLabelTextField, 'my-new-label'); + await userEvent.type(routeLabelTextField, 'my-new-label'); expect(saveButton).toHaveAttribute('aria-disabled', 'false'); - userEvent.click(saveButton!); + await userEvent.click(saveButton!); }); }); diff --git a/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/LoadBalancerConfiguration.test.tsx b/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/LoadBalancerConfiguration.test.tsx index 585e7e109ab..6caa6384b05 100644 --- a/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/LoadBalancerConfiguration.test.tsx +++ b/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/LoadBalancerConfiguration.test.tsx @@ -24,7 +24,7 @@ export const handlers: Handlers = { }; describe('LoadBalancerConfiguration', () => { - test('Should render Details content', () => { + test('Should render Details content', async () => { renderWithThemeAndFormik( , { initialValues, onSubmit: vi.fn() } @@ -35,10 +35,10 @@ describe('LoadBalancerConfiguration', () => { ); const ConfigurationPort = screen.getByPlaceholderText('Enter Port'); - userEvent.type(ConfigurationInputLabel, 'Test Label'); + await userEvent.type(ConfigurationInputLabel, 'Test Label'); // Clear the input field before typing - userEvent.clear(ConfigurationPort); - userEvent.type(ConfigurationPort, '90'); + await userEvent.clear(ConfigurationPort); + await userEvent.type(ConfigurationPort, '90'); expect(ConfigurationInputLabel).toHaveValue('Test Label'); expect(ConfigurationPort).toHaveValue(90); @@ -47,34 +47,34 @@ describe('LoadBalancerConfiguration', () => { expect(screen.getByText('Next: Service Targets')).toBeInTheDocument(); expect(screen.queryByText('Previous: Details')).toBeNull(); }); - test('Should navigate to Service Targets content', () => { + test('Should navigate to Service Targets content', async () => { renderWithThemeAndFormik( , { initialValues, onSubmit: vi.fn() } ); - userEvent.click(screen.getByTestId('service-targets')); + await userEvent.click(screen.getByTestId('service-targets')); expect(screen.getByText('Add Service Target')).toBeInTheDocument(); expect(screen.getByText('Next: Routes')).toBeInTheDocument(); expect(screen.getByText('Previous: Details')).toBeInTheDocument(); expect(screen.queryByText('Previous: Service Targets')).toBeNull(); }); - test('Should navigate to Routes content', () => { + test('Should navigate to Routes content', async () => { renderWithThemeAndFormik( , { initialValues, onSubmit: vi.fn() } ); - userEvent.click(screen.getByTestId('service-targets')); - userEvent.click(screen.getByTestId('routes')); + await userEvent.click(screen.getByTestId('service-targets')); + await userEvent.click(screen.getByTestId('routes')); expect(screen.getByText('Routes', { selector: 'h2' })).toBeVisible(); expect(screen.getByText('Previous: Service Targets')).toBeInTheDocument(); }); - test('Should be able to go previous step', () => { + test('Should be able to go previous step', async () => { renderWithThemeAndFormik( , { initialValues, onSubmit: vi.fn() } ); - userEvent.click(screen.getByTestId('service-targets')); - userEvent.click(screen.getByText('Previous: Details')); + await userEvent.click(screen.getByTestId('service-targets')); + await userEvent.click(screen.getByText('Previous: Details')); expect(screen.getByText('Protocol')).toBeInTheDocument(); }); }); diff --git a/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/LoadBalancerSummary/EditLoadBalancerConfigurations/EditConfigurationDetails/ConfigurationAccordion.test.tsx b/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/LoadBalancerSummary/EditLoadBalancerConfigurations/EditConfigurationDetails/ConfigurationAccordion.test.tsx index 82c833f2f76..e011b16c476 100644 --- a/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/LoadBalancerSummary/EditLoadBalancerConfigurations/EditConfigurationDetails/ConfigurationAccordion.test.tsx +++ b/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/LoadBalancerSummary/EditLoadBalancerConfigurations/EditConfigurationDetails/ConfigurationAccordion.test.tsx @@ -43,7 +43,7 @@ describe('ConfigurationAccordion', () => { expect(screen.getByRole('button', { name: 'Edit' })).toBeInTheDocument(); }); - test('should click edit button and validate configuration details in the drawer', () => { + test('should click edit button and validate configuration details in the drawer', async () => { renderWithThemeAndFormik( { } ); - userEvent.click(screen.getByRole('button', { name: 'Edit' })); + await userEvent.click(screen.getByRole('button', { name: 'Edit' })); expect( screen.getByRole('dialog', { @@ -85,7 +85,7 @@ describe('ConfigurationAccordion', () => { ).toHaveDisplayValue('8080'); }); - test('should click to expand accordion and validate configuration details', () => { + test('should click to expand accordion and validate configuration details', async () => { renderWithThemeAndFormik( { } ); - userEvent.click( + await userEvent.click( screen.getByRole('heading', { name: configHeading, }) diff --git a/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/LoadBalancerSummary/EditLoadBalancerConfigurations/EditConfigurationDetails/ConfigurationAccordionHeader.test.tsx b/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/LoadBalancerSummary/EditLoadBalancerConfigurations/EditConfigurationDetails/ConfigurationAccordionHeader.test.tsx index 40518ea5a23..48fed639b23 100644 --- a/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/LoadBalancerSummary/EditLoadBalancerConfigurations/EditConfigurationDetails/ConfigurationAccordionHeader.test.tsx +++ b/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/LoadBalancerSummary/EditLoadBalancerConfigurations/EditConfigurationDetails/ConfigurationAccordionHeader.test.tsx @@ -35,7 +35,7 @@ describe('ConfigurationAccordionHeader', () => { expect(screen.getByText('1 Route')).toBeInTheDocument(); // Adjust based on pluralize function }); - test('calls editClickHandler when edit button is clicked', () => { + test('calls editClickHandler when edit button is clicked', async () => { const mockEditClickHandler = vi.fn(); renderWithTheme( { /> ); - userEvent.click(screen.getByRole('button', { name: 'Edit' })); + await userEvent.click(screen.getByRole('button', { name: 'Edit' })); expect(mockEditClickHandler).toHaveBeenCalled(); }); }); diff --git a/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/LoadBalancerSummary/EditLoadBalancerConfigurations/EditRoutes/EditRouteDrawer.test.tsx b/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/LoadBalancerSummary/EditLoadBalancerConfigurations/EditRoutes/EditRouteDrawer.test.tsx index 0c7fb8a60cd..15b80bbb206 100644 --- a/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/LoadBalancerSummary/EditLoadBalancerConfigurations/EditRoutes/EditRouteDrawer.test.tsx +++ b/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/LoadBalancerSummary/EditLoadBalancerConfigurations/EditRoutes/EditRouteDrawer.test.tsx @@ -38,7 +38,7 @@ describe('EditRouteDrawer', () => { screen.getByRole('button', { name: 'Save Changes' }) ).toBeInTheDocument(); }); - test('Should edit and save Route Label', () => { + test('Should edit and save Route Label', async () => { renderWithThemeAndFormik( { userEvent.type(routeLabelFiled, 'rote-new-label'); - userEvent.click(screen.getByRole('button', { name: 'Save Changes' })); + await userEvent.click(screen.getByRole('button', { name: 'Save Changes' })); }); - test('Should call onClose when close button is clicked', () => { + test('Should call onClose when close button is clicked', async () => { const onCloseMock = vi.fn(); renderWithThemeAndFormik( { ); const closeButton = screen.getByRole('button', { name: 'Close drawer' }); - userEvent.click(closeButton); + await userEvent.click(closeButton); expect(onCloseMock).toHaveBeenCalled(); }); diff --git a/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/LoadBalancerSummary/EditLoadBalancerConfigurations/EditRoutes/RouteAccordionHeader.test.tsx b/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/LoadBalancerSummary/EditLoadBalancerConfigurations/EditRoutes/RouteAccordionHeader.test.tsx index 92aa87fcdb8..fdd32ef7917 100644 --- a/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/LoadBalancerSummary/EditLoadBalancerConfigurations/EditRoutes/RouteAccordionHeader.test.tsx +++ b/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/LoadBalancerSummary/EditLoadBalancerConfigurations/EditRoutes/RouteAccordionHeader.test.tsx @@ -29,7 +29,7 @@ describe('RouteAccordionHeader', () => { expect(screen.getByText('0 Rules')).toBeInTheDocument(); // Adjust based on pluralize function }); - test('calls editClickHandler when edit button is clicked', () => { + test('calls editClickHandler when edit button is clicked', async () => { const mockEditClickHandler = vi.fn(); renderWithTheme( { /> ); - userEvent.click(screen.getByRole('button', { name: 'Edit' })); + await userEvent.click(screen.getByRole('button', { name: 'Edit' })); expect(mockEditClickHandler).toHaveBeenCalled(); }); }); diff --git a/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/Routes.test.tsx b/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/Routes.test.tsx index 11907c21f07..1d9e248d5c5 100644 --- a/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/Routes.test.tsx +++ b/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/Routes.test.tsx @@ -48,7 +48,7 @@ describe('Routes (ACLB full create flow)', () => { expect(getByText(route.label)).toBeVisible(); } }); - it('can remove a route', () => { + it('can remove a route', async () => { const routes: RoutePayload[] = [ { label: 'test-1', protocol: 'http', rules: [] }, { label: 'test-2', protocol: 'http', rules: [] }, @@ -78,10 +78,10 @@ describe('Routes (ACLB full create flow)', () => { ); const actionMenu = getByLabelText(`Action Menu for Route test-2`); - userEvent.click(actionMenu); + await userEvent.click(actionMenu); const deleteButton = getByText('Remove'); - userEvent.click(deleteButton); + await userEvent.click(deleteButton); expect(queryByText('test-2')).not.toBeInTheDocument(); expect(getByText('test-1')).toBeInTheDocument(); diff --git a/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/ServiceTargets.test.tsx b/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/ServiceTargets.test.tsx index f641703c476..b2598aa6ab7 100644 --- a/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/ServiceTargets.test.tsx +++ b/packages/manager/src/features/LoadBalancers/LoadBalancerCreate/ServiceTargets.test.tsx @@ -47,7 +47,7 @@ describe('ServiceTargets', () => { 'button' ); - userEvent.click(addServiceTargetButton!); + await userEvent.click(addServiceTargetButton!); expect(handlers.handleAddServiceTarget).toHaveBeenCalled(); }); diff --git a/packages/manager/src/features/LoadBalancers/LoadBalancerDetail/Certificates/CreateCertificateDrawer.test.tsx b/packages/manager/src/features/LoadBalancers/LoadBalancerDetail/Certificates/CreateCertificateDrawer.test.tsx index 2e9b2de4581..eb99d893cab 100644 --- a/packages/manager/src/features/LoadBalancers/LoadBalancerDetail/Certificates/CreateCertificateDrawer.test.tsx +++ b/packages/manager/src/features/LoadBalancers/LoadBalancerDetail/Certificates/CreateCertificateDrawer.test.tsx @@ -1,4 +1,4 @@ -import { act, waitFor } from '@testing-library/react'; +import { waitFor } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import React from 'react'; @@ -23,13 +23,11 @@ describe('CreateCertificateDrawer', () => { const certInput = getByLabelText('TLS Certificate'); const keyInput = getByLabelText('Private Key'); - act(() => { - userEvent.type(labelInput, 'my-cert-0'); - userEvent.type(certInput, 'massive cert'); - userEvent.type(keyInput, 'massive key'); + await userEvent.type(labelInput, 'my-cert-0'); + await userEvent.type(certInput, 'massive cert'); + await userEvent.type(keyInput, 'massive key'); - userEvent.click(getByTestId('submit')); - }); + await userEvent.click(getByTestId('submit')); await waitFor(() => expect(onClose).toBeCalled()); }); diff --git a/packages/manager/src/features/LoadBalancers/LoadBalancerDetail/Certificates/EditCertificateDrawer.test.tsx b/packages/manager/src/features/LoadBalancers/LoadBalancerDetail/Certificates/EditCertificateDrawer.test.tsx index 7efd1e5a9fa..d727d4ad7cc 100644 --- a/packages/manager/src/features/LoadBalancers/LoadBalancerDetail/Certificates/EditCertificateDrawer.test.tsx +++ b/packages/manager/src/features/LoadBalancers/LoadBalancerDetail/Certificates/EditCertificateDrawer.test.tsx @@ -82,9 +82,9 @@ describe('EditCertificateDrawer', () => { expect(labelInput).toHaveDisplayValue(mockCACertificate.label); expect(certInput).toHaveDisplayValue(mockCACertificate.certificate.trim()); - act(() => { - userEvent.type(labelInput, 'my-updated-cert-0'); - userEvent.click(getByTestId('submit')); + await act(async () => { + await userEvent.type(labelInput, 'my-updated-cert-0'); + await userEvent.click(getByTestId('submit')); }); await waitFor(() => expect(onClose).toBeCalled()); @@ -105,12 +105,12 @@ describe('EditCertificateDrawer', () => { const certInput = getByLabelText('TLS Certificate'); const keyInput = getByLabelText('Private Key'); - act(() => { - userEvent.type(labelInput, 'my-cert-0'); - userEvent.type(certInput, 'massive cert'); - userEvent.type(keyInput, 'massive key'); + await act(async () => { + await userEvent.type(labelInput, 'my-cert-0'); + await userEvent.type(certInput, 'massive cert'); + await userEvent.type(keyInput, 'massive key'); - userEvent.click(getByTestId('submit')); + await userEvent.click(getByTestId('submit')); }); await waitFor(() => expect(onClose).toBeCalled()); diff --git a/packages/manager/src/features/LoadBalancers/LoadBalancerDetail/Routes/EditRouteDrawer.tsx b/packages/manager/src/features/LoadBalancers/LoadBalancerDetail/Routes/EditRouteDrawer.tsx index f697fa32f29..bf97f1bcc30 100644 --- a/packages/manager/src/features/LoadBalancers/LoadBalancerDetail/Routes/EditRouteDrawer.tsx +++ b/packages/manager/src/features/LoadBalancers/LoadBalancerDetail/Routes/EditRouteDrawer.tsx @@ -92,13 +92,13 @@ export const EditRouteDrawer = (props: Props) => { Protocol } + control={} data-qa-radio="HTTP" label="HTTP" value="http" /> } + control={} data-qa-radio="TCP" label="TCP" value="tcp" diff --git a/packages/manager/src/features/LoadBalancers/LoadBalancerDetail/ServiceTargets/EndpointTable.test.tsx b/packages/manager/src/features/LoadBalancers/LoadBalancerDetail/ServiceTargets/EndpointTable.test.tsx index 53921248b40..52d7185e7a1 100644 --- a/packages/manager/src/features/LoadBalancers/LoadBalancerDetail/ServiceTargets/EndpointTable.test.tsx +++ b/packages/manager/src/features/LoadBalancers/LoadBalancerDetail/ServiceTargets/EndpointTable.test.tsx @@ -50,7 +50,8 @@ describe('EndpointTable', () => { expect(removeEndpointButton).toBeVisible(); - userEvent.click(removeEndpointButton); + // eslint-disable-next-line no-await-in-loop + await userEvent.click(removeEndpointButton); expect(props.onRemove).toBeCalledWith(endpoints.indexOf(endpoint)); } diff --git a/packages/manager/src/features/Longview/LongviewLanding/LongviewPlans.test.tsx b/packages/manager/src/features/Longview/LongviewLanding/LongviewPlans.test.tsx index 609f4c87c71..dc3eee3e42c 100644 --- a/packages/manager/src/features/Longview/LongviewLanding/LongviewPlans.test.tsx +++ b/packages/manager/src/features/Longview/LongviewLanding/LongviewPlans.test.tsx @@ -1,5 +1,6 @@ import { screen, + waitFor, waitForElementToBeRemoved, within, } from '@testing-library/react'; @@ -67,11 +68,7 @@ describe('LongviewPlans', () => { renderWithTheme(); - await waitForElementToBeRemoved(screen.getByTestId('loading'), { - timeout: 5000, - }); - - expect(document.title).toMatch(/^Plan Details/); + await waitFor(() => expect(document.title).toMatch(/^Plan Details/)); }); it('renders all columns for all plan types', async () => { diff --git a/packages/manager/src/features/Managed/Monitors/MonitorActionMenu.test.tsx b/packages/manager/src/features/Managed/Monitors/MonitorActionMenu.test.tsx index 7d5f338ab98..523658f0335 100644 --- a/packages/manager/src/features/Managed/Monitors/MonitorActionMenu.test.tsx +++ b/packages/manager/src/features/Managed/Monitors/MonitorActionMenu.test.tsx @@ -1,6 +1,7 @@ +import userEvent from '@testing-library/user-event'; import * as React from 'react'; -import { includesActions, renderWithTheme } from 'src/utilities/testHelpers'; +import { renderWithTheme } from 'src/utilities/testHelpers'; import { MonitorActionMenu, MonitorActionMenuProps } from './MonitorActionMenu'; @@ -14,26 +15,49 @@ const props: MonitorActionMenuProps = { }; describe('Monitor action menu', () => { - it('should include basic Monitor actions', () => { - const { queryByText } = renderWithTheme( + it('should include basic Monitor actions', async () => { + const { getByLabelText, getByText } = renderWithTheme( ); - includesActions(['View Issue History', 'Edit', 'Delete'], queryByText); + + const actionMenuButton = getByLabelText( + `Action menu for Monitor ${props.label}` + ); + + await userEvent.click(actionMenuButton); + + for (const action of ['View Issue History', 'Edit', 'Delete']) { + expect(getByText(action)).toBeVisible(); + } }); - it('should include Enable if the monitor is disabled', () => { - const { queryByText } = renderWithTheme( + it('should include Enable if the monitor is disabled', async () => { + const { getByLabelText, getByText, queryByText } = renderWithTheme( ); - includesActions(['Enable'], queryByText); + + const actionMenuButton = getByLabelText( + `Action menu for Monitor ${props.label}` + ); + + await userEvent.click(actionMenuButton); + + expect(getByText('Enable')).toBeVisible(); expect(queryByText('Disable')).toBeNull(); }); - it('should include Disable if the monitor is enabled', () => { - const { queryByText } = renderWithTheme( + it('should include Disable if the monitor is enabled', async () => { + const { getByLabelText, getByText, queryByText } = renderWithTheme( ); - includesActions(['Disable'], queryByText); + + const actionMenuButton = getByLabelText( + `Action menu for Monitor ${props.label}` + ); + + await userEvent.click(actionMenuButton); + + expect(getByText('Disable')).toBeVisible(); expect(queryByText('Enable')).toBeNull(); }); }); diff --git a/packages/manager/src/features/Managed/SSHAccess/SSHAccessActionMenu.test.tsx b/packages/manager/src/features/Managed/SSHAccess/SSHAccessActionMenu.test.tsx index 3908c097497..aa9d4c9888c 100644 --- a/packages/manager/src/features/Managed/SSHAccess/SSHAccessActionMenu.test.tsx +++ b/packages/manager/src/features/Managed/SSHAccess/SSHAccessActionMenu.test.tsx @@ -1,15 +1,13 @@ -import { fireEvent, render } from '@testing-library/react'; +import { fireEvent } from '@testing-library/react'; import * as React from 'react'; -import { includesActions, wrapWithTheme } from 'src/utilities/testHelpers'; +import { renderWithTheme, wrapWithTheme } from 'src/utilities/testHelpers'; import { - SSHAccessActionMenu as ActionMenu, + SSHAccessActionMenu, SSHAccessActionMenuProps, } from './SSHAccessActionMenu'; -vi.mock('src/components/ActionMenu/ActionMenu'); - const mockOpenDrawer = vi.fn(); const props: SSHAccessActionMenuProps = { @@ -20,29 +18,33 @@ const props: SSHAccessActionMenuProps = { }; describe('SSH Access Action Menu', () => { - it('should include basic actions', () => { - const { queryByText } = render(wrapWithTheme()); - includesActions(['Edit'], queryByText); + it('should include basic actions', async () => { + const { getByText } = renderWithTheme(); + + expect(getByText('Edit')).toBeVisible(); + expect(getByText('Disable')).toBeVisible(); }); it('should include Enable if access to the Linode is disabled', () => { - const { queryByText } = render( - wrapWithTheme() + const { queryByText } = renderWithTheme( + ); expect(queryByText('Enable')).toBeInTheDocument(); expect(queryByText('Disable')).not.toBeInTheDocument(); }); it('should include Disable if access to the Linode is enabled', () => { - const { queryByText } = render( - wrapWithTheme() + const { queryByText } = renderWithTheme( + wrapWithTheme() ); expect(queryByText('Disable')).toBeInTheDocument(); expect(queryByText('Enable')).not.toBeInTheDocument(); }); it('should open the drawer when "Edit" option is clicked', () => { - const { getByText } = render(wrapWithTheme()); + const { getByText } = renderWithTheme( + wrapWithTheme() + ); fireEvent.click(getByText('Edit')); expect(mockOpenDrawer).toHaveBeenCalledWith(1); }); diff --git a/packages/manager/src/features/NodeBalancers/NodeBalancerSelect.test.tsx b/packages/manager/src/features/NodeBalancers/NodeBalancerSelect.test.tsx index 4ab0ea4a8ab..1c55588a837 100644 --- a/packages/manager/src/features/NodeBalancers/NodeBalancerSelect.test.tsx +++ b/packages/manager/src/features/NodeBalancers/NodeBalancerSelect.test.tsx @@ -42,7 +42,7 @@ describe('NodeBalancerSelect', () => { const input = screen.getByTestId(TEXTFIELD_ID); // Open the dropdown - userEvent.click(input); + await userEvent.click(input); // Wait for the options to load (use some unique identifier for the options) await waitFor(() => { @@ -71,7 +71,7 @@ describe('NodeBalancerSelect', () => { const input = screen.getByTestId(TEXTFIELD_ID); // Open the dropdown - userEvent.click(input); + await userEvent.click(input); await waitFor(() => { // The custom no options message should be displayed when there are no options available @@ -95,7 +95,7 @@ describe('NodeBalancerSelect', () => { // Open the dropdown const input = screen.getByTestId(TEXTFIELD_ID); - userEvent.click(input); + await userEvent.click(input); await waitFor(() => { // The default no options message should be displayed when noOptionsMessage prop is not provided @@ -124,7 +124,7 @@ describe('NodeBalancerSelect', () => { const input = screen.getByTestId(TEXTFIELD_ID); // Open the dropdown - userEvent.click(input); + await userEvent.click(input); await waitFor(() => { expect(screen.getByText(customNoOptionsMessage)).toBeInTheDocument(); @@ -151,7 +151,7 @@ describe('NodeBalancerSelect', () => { const input = screen.getByTestId(TEXTFIELD_ID); - userEvent.type(input, 'NodeBalancer 2'); + await userEvent.type(input, 'NodeBalancer 2'); await waitFor(() => { expect(screen.getByText(customNoOptionsMessage)).toBeInTheDocument(); @@ -179,7 +179,7 @@ describe('NodeBalancerSelect', () => { const input = screen.getByTestId(TEXTFIELD_ID); // The custom no options message should not be displayed when user input matches an option - userEvent.type(input, 'NodeBalancer 1'); + await userEvent.type(input, 'NodeBalancer 1'); await waitFor(() => { expect( diff --git a/packages/manager/src/features/NotificationCenter/NotificationSection.tsx b/packages/manager/src/features/NotificationCenter/NotificationSection.tsx index 223aa3ee385..2dc9b40673d 100644 --- a/packages/manager/src/features/NotificationCenter/NotificationSection.tsx +++ b/packages/manager/src/features/NotificationCenter/NotificationSection.tsx @@ -161,8 +161,8 @@ const ContentBody = React.memo((props: BodyProps) => { <> {_content.map((thisItem) => ( {thisItem.body} @@ -232,14 +232,8 @@ const StyledLToggleContainer = styled(Box, { const StyledNotificationItem = styled(Box, { label: 'StyledNotificationItem', - shouldForwardProp: omittedProps([ - 'count', - 'emptyMessage', - 'header', - 'loading', - 'content', - ]), -})(({ theme, ...props }) => ({ + shouldForwardProp: omittedProps(['header']), +})<{ header: string }>(({ theme, ...props }) => ({ '& p': { color: theme.textColors.headlineStatic, lineHeight: '1.25rem', diff --git a/packages/manager/src/features/ObjectStorage/AccessKeyLanding/HostNamesDrawer.test.tsx b/packages/manager/src/features/ObjectStorage/AccessKeyLanding/HostNamesDrawer.test.tsx index f3e49b5c3d0..e0625281e98 100644 --- a/packages/manager/src/features/ObjectStorage/AccessKeyLanding/HostNamesDrawer.test.tsx +++ b/packages/manager/src/features/ObjectStorage/AccessKeyLanding/HostNamesDrawer.test.tsx @@ -63,7 +63,7 @@ describe('HostNamesDrawer', () => { ).toBeInTheDocument(); }); - it('calls onClose when the drawer is closed', () => { + it('calls onClose when the drawer is closed', async () => { renderWithTheme( { ); const closeButton = screen.getByRole('button', { name: 'Close drawer' }); - userEvent.click(closeButton); + await userEvent.click(closeButton); expect(mockOnClose).toHaveBeenCalled(); }); diff --git a/packages/manager/src/features/ObjectStorage/BucketLanding/BucketLanding.test.tsx b/packages/manager/src/features/ObjectStorage/BucketLanding/BucketLanding.test.tsx index af8be40e301..f37a071c3d5 100644 --- a/packages/manager/src/features/ObjectStorage/BucketLanding/BucketLanding.test.tsx +++ b/packages/manager/src/features/ObjectStorage/BucketLanding/BucketLanding.test.tsx @@ -1,6 +1,5 @@ -import { screen, waitForElementToBeRemoved } from '@testing-library/react'; +import { screen } from '@testing-library/react'; import * as React from 'react'; -import { QueryClient, setLogger } from 'react-query'; import { objectStorageBucketFactory, @@ -8,22 +7,11 @@ import { } from 'src/factories/objectStorage'; import { makeResourcePage } from 'src/mocks/serverHandlers'; import { rest, server } from 'src/mocks/testServer'; -import { queryPresets } from 'src/queries/base'; import { renderWithTheme } from 'src/utilities/testHelpers'; import { BucketLanding } from './BucketLanding'; -const queryClient = new QueryClient({ - defaultOptions: { queries: queryPresets.oneTimeFetch }, -}); - describe('ObjectStorageLanding', () => { - afterEach(() => { - queryClient.clear(); - // If necessary, reset React Query logger. - setLogger(console); - }); - it('renders a loading state', () => { // Mock Buckets server.use( @@ -53,30 +41,12 @@ describe('ObjectStorageLanding', () => { }) ); - renderWithTheme(, { queryClient }); - - await waitForElementToBeRemoved(screen.getByTestId('circle-progress')); + renderWithTheme(); - screen.getByTestId('placeholder-button'); + await screen.findByTestId('placeholder-button'); }); it('renders per-cluster errors', async () => { - // Suppress logging React Query errors to CLI since this test is expected - // to trigger errors. - // - // Note: Logging options improved in React Query v4 and `setLogger` will - // be removed in v5. We will be able to accomplish this more cleanly once - // we upgrade. - // - // See also: - // - https://github.com/TanStack/query/issues/125 - // - https://github.com/TanStack/query/discussions/4252 - setLogger({ - log: () => {}, - warn: () => {}, - error: () => {}, - }); - objectStorageBucketFactory.resetSequenceNumber(); objectStorageClusterFactory.resetSequenceNumber(); @@ -113,30 +83,14 @@ describe('ObjectStorageLanding', () => { }) ); - renderWithTheme(, { queryClient }); - - await waitForElementToBeRemoved(screen.getByTestId('circle-progress')); + renderWithTheme(); - screen.getByText(/^There was an error loading buckets in Fremont, CA/); + await screen.findByText( + /^There was an error loading buckets in Fremont, CA/ + ); }); it('renders general error state', async () => { - // Suppress logging React Query errors to CLI since this test is expected - // to trigger errors. - // - // Note: Logging options improved in React Query v4 and `setLogger` will - // be removed in v5. We will be able to accomplish this more cleanly once - // we upgrade. - // - // See also: - // - https://github.com/TanStack/query/issues/125 - // - https://github.com/TanStack/query/discussions/4252 - setLogger({ - log: () => {}, - warn: () => {}, - error: () => {}, - }); - // Mock Clusters server.use( rest.get('*/object-storage/clusters', (req, res, ctx) => { @@ -151,11 +105,9 @@ describe('ObjectStorageLanding', () => { return res(ctx.status(500), ctx.json([{ reason: 'Cluster offline!' }])); }) ); - renderWithTheme(, { queryClient }); - - await waitForElementToBeRemoved(screen.getByTestId('circle-progress')); + renderWithTheme(); - screen.getByText(/^There was an error retrieving your buckets/); + await screen.findByText(/^There was an error retrieving your buckets/); }); it('renders rows for each Bucket', async () => { @@ -176,12 +128,10 @@ describe('ObjectStorageLanding', () => { }) ); - renderWithTheme(, { queryClient }); - - await waitForElementToBeRemoved(screen.getByTestId('circle-progress')); + renderWithTheme(); - screen.getByText(buckets[0].label); - screen.getByText(buckets[1].label); + await screen.findByText(buckets[0].label); + await screen.findByText(buckets[1].label); }); it('renders a "Total usage" section if there is more than one Bucket', async () => { @@ -204,10 +154,8 @@ describe('ObjectStorageLanding', () => { }) ); - renderWithTheme(, { queryClient }); - - await waitForElementToBeRemoved(screen.getByTestId('circle-progress')); + renderWithTheme(); - screen.getByText(/Total storage used: 10 GB/); + await screen.findByText(/Total storage used: 10 GB/); }); }); diff --git a/packages/manager/src/features/ObjectStorage/BucketLanding/CreateBucketDrawer.test.tsx b/packages/manager/src/features/ObjectStorage/BucketLanding/CreateBucketDrawer.test.tsx index 43054803ef6..b54025501cb 100644 --- a/packages/manager/src/features/ObjectStorage/BucketLanding/CreateBucketDrawer.test.tsx +++ b/packages/manager/src/features/ObjectStorage/BucketLanding/CreateBucketDrawer.test.tsx @@ -92,7 +92,7 @@ describe('CreateBucketDrawer', () => { getByTestId, } = renderWithTheme(, { queryClient }); - userEvent.type(getByLabelText('Label', { exact: false }), 'my-test-bucket'); + await userEvent.type(getByLabelText('Label', { exact: false }), 'my-test-bucket'); // We must waitFor because we need to load region and cluster data from the API await waitFor(() => @@ -104,7 +104,7 @@ describe('CreateBucketDrawer', () => { const saveButton = getByTestId('create-bucket-button'); - userEvent.click(saveButton); + await userEvent.click(saveButton); await findByText('Object Storage is offline!'); }); diff --git a/packages/manager/src/features/ObjectStorage/BucketLanding/OveragePricing.test.tsx b/packages/manager/src/features/ObjectStorage/BucketLanding/OveragePricing.test.tsx index 00b07b00266..efc2669ea5a 100644 --- a/packages/manager/src/features/ObjectStorage/BucketLanding/OveragePricing.test.tsx +++ b/packages/manager/src/features/ObjectStorage/BucketLanding/OveragePricing.test.tsx @@ -41,7 +41,7 @@ describe('OveragePricing', () => { fireEvent.mouseEnter(getByText('network transfer pool for this region')); - const tooltip = await findByRole(/tooltip/); + const tooltip = await findByRole('tooltip'); expect(tooltip).toBeInTheDocument(); expect(getByText(DC_SPECIFIC_TRANSFER_POOLS_TOOLTIP_TEXT)).toBeVisible(); @@ -54,7 +54,7 @@ describe('OveragePricing', () => { fireEvent.mouseEnter(getByText('global network transfer pool')); - const tooltip = await findByRole(/tooltip/); + const tooltip = await findByRole('tooltip'); expect(tooltip).toBeInTheDocument(); expect(getByText(GLOBAL_TRANSFER_POOL_TOOLTIP_TEXT)).toBeVisible(); diff --git a/packages/manager/src/features/ObjectStorage/EnableObjectStorageModal.test.tsx b/packages/manager/src/features/ObjectStorage/EnableObjectStorageModal.test.tsx index 2e401e6fceb..e36ba887af3 100644 --- a/packages/manager/src/features/ObjectStorage/EnableObjectStorageModal.test.tsx +++ b/packages/manager/src/features/ObjectStorage/EnableObjectStorageModal.test.tsx @@ -1,4 +1,3 @@ -import '@testing-library/jest-dom/extend-expect'; import { fireEvent, render } from '@testing-library/react'; import * as React from 'react'; diff --git a/packages/manager/src/features/Profile/APITokens/CreateAPITokenDrawer.test.tsx b/packages/manager/src/features/Profile/APITokens/CreateAPITokenDrawer.test.tsx index a3d46dc5748..4ae67ab5a57 100644 --- a/packages/manager/src/features/Profile/APITokens/CreateAPITokenDrawer.test.tsx +++ b/packages/manager/src/features/Profile/APITokens/CreateAPITokenDrawer.test.tsx @@ -65,9 +65,9 @@ describe('Create API Token Drawer', () => { ); const labelField = getByTestId('textfield-input'); - userEvent.type(labelField, 'my-test-token'); + await userEvent.type(labelField, 'my-test-token'); const submit = getByText('Create Token'); - userEvent.click(submit); + await userEvent.click(submit); await waitFor(() => expect(props.showSecret).toBeCalledWith('secret-value') @@ -135,10 +135,10 @@ describe('Create API Token Drawer', () => { expect(vpcScope).not.toBeInTheDocument(); }); - it('Should close when Cancel is pressed', () => { + it('Should close when Cancel is pressed', async () => { const { getByText } = renderWithTheme(); const cancelButton = getByText(/Cancel/); - userEvent.click(cancelButton); + await userEvent.click(cancelButton); expect(props.onClose).toBeCalled(); }); }); diff --git a/packages/manager/src/features/Profile/APITokens/EditAPITokenDrawer.test.tsx b/packages/manager/src/features/Profile/APITokens/EditAPITokenDrawer.test.tsx index 61b3a541f1f..03fd219e1e3 100644 --- a/packages/manager/src/features/Profile/APITokens/EditAPITokenDrawer.test.tsx +++ b/packages/manager/src/features/Profile/APITokens/EditAPITokenDrawer.test.tsx @@ -66,15 +66,15 @@ describe('Edit API Token Drawer', () => { expect(saveButton).toHaveAttribute('aria-disabled', 'false') ); - userEvent.click(saveButton); + await userEvent.click(saveButton); await waitFor(() => expect(props.onClose).toBeCalled()); }); }); - it('Should close when Cancel is pressed', () => { + it('Should close when Cancel is pressed', async () => { const { getByText } = renderWithTheme(); const cancelButton = getByText(/Cancel/); - userEvent.click(cancelButton); + await userEvent.click(cancelButton); expect(props.onClose).toBeCalled(); }); }); diff --git a/packages/manager/src/features/Profile/APITokens/RevokeTokenDialog.test.tsx b/packages/manager/src/features/Profile/APITokens/RevokeTokenDialog.test.tsx index 3bf8e780c40..9754156c796 100644 --- a/packages/manager/src/features/Profile/APITokens/RevokeTokenDialog.test.tsx +++ b/packages/manager/src/features/Profile/APITokens/RevokeTokenDialog.test.tsx @@ -28,17 +28,17 @@ describe('Revoke API Token Dialog', () => { const revokeButton = getByTestId('revoke-button'); - userEvent.click(revokeButton); + await userEvent.click(revokeButton); // We must wait because an API call (to the MSW) is made await waitFor(() => expect(props.onClose).toBeCalled()); }); - it('Should close when Cancel is pressed', () => { + it('Should close when Cancel is pressed', async () => { const { getByTestId } = renderWithTheme(); const cancelButton = getByTestId('cancel-button'); - userEvent.click(cancelButton); + await userEvent.click(cancelButton); expect(props.onClose).toBeCalled(); }); diff --git a/packages/manager/src/features/Profile/AuthenticationSettings/TPADialog.test.tsx b/packages/manager/src/features/Profile/AuthenticationSettings/TPADialog.test.tsx index 3d20bb204ac..bb827321048 100644 --- a/packages/manager/src/features/Profile/AuthenticationSettings/TPADialog.test.tsx +++ b/packages/manager/src/features/Profile/AuthenticationSettings/TPADialog.test.tsx @@ -77,10 +77,10 @@ describe('TPADialog', () => { const title = screen.getByText('Change login method to GitHub?'); expect(title).toBeInTheDocument(); }); - it('Should close TPADialog upon clicking close button', () => { + it('Should close TPADialog upon clicking close button', async () => { renderWithTheme(); const cancelButton = screen.getByTestId('confirm-cancel'); - userEvent.click(cancelButton); + await userEvent.click(cancelButton); expect(props.onClose).toBeCalled(); }); it('Should redirect to disable TPA', async () => { @@ -89,7 +89,7 @@ describe('TPADialog', () => { renderWithTheme(); const changeButton = screen.getByTestId('confirm-login-change'); - userEvent.click(changeButton); + await userEvent.click(changeButton); expect(props.onClose).toBeCalled(); expect(mockWindow).toHaveBeenCalledWith( @@ -114,7 +114,7 @@ describe('TPADialog', () => { renderWithTheme(); const changeButton = screen.getByTestId('confirm-login-change'); - userEvent.click(changeButton); + await userEvent.click(changeButton); expect(props.onClose).toBeCalled(); expect(mockWindow).toHaveBeenCalledWith( @@ -139,7 +139,7 @@ describe('TPADialog', () => { renderWithTheme(); const changeButton = screen.getByTestId('confirm-login-change'); - userEvent.click(changeButton); + await userEvent.click(changeButton); expect(props.onClose).toBeCalled(); expect(mockWindow).toHaveBeenCalledWith( diff --git a/packages/manager/src/features/Profile/AuthenticationSettings/TPAProviders.test.tsx b/packages/manager/src/features/Profile/AuthenticationSettings/TPAProviders.test.tsx index 3e7258c310e..d954fb07540 100644 --- a/packages/manager/src/features/Profile/AuthenticationSettings/TPAProviders.test.tsx +++ b/packages/manager/src/features/Profile/AuthenticationSettings/TPAProviders.test.tsx @@ -65,7 +65,7 @@ describe('TPAProviders component', () => { ); const button = getByTestId('Button-Google'); - userEvent.click(button); + await userEvent.click(button); const dialog = getByTestId('drawer'); expect(dialog).toBeInTheDocument(); }); diff --git a/packages/manager/src/features/Profile/OAuthClients/CreateOAuthClientDrawer.test.tsx b/packages/manager/src/features/Profile/OAuthClients/CreateOAuthClientDrawer.test.tsx index 6a12b590817..03d1ac7174e 100644 --- a/packages/manager/src/features/Profile/OAuthClients/CreateOAuthClientDrawer.test.tsx +++ b/packages/manager/src/features/Profile/OAuthClients/CreateOAuthClientDrawer.test.tsx @@ -1,4 +1,4 @@ -import { act, waitFor } from '@testing-library/react'; +import { waitFor } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import * as React from 'react'; @@ -33,9 +33,7 @@ describe('Create API Token Drawer', () => { const submit = getByText('Create'); - act(() => { - userEvent.click(submit); - }); + await userEvent.click(submit); await waitFor(() => expect(getByText('Label is required.')).toBeVisible()); }); @@ -62,20 +60,18 @@ describe('Create API Token Drawer', () => { const submit = getByText('Create'); - act(() => { - userEvent.type(labelField, 'my-oauth-client'); - userEvent.type(callbackUrlField, 'http://localhost:3000'); - userEvent.click(submit); - }); + await userEvent.type(labelField, 'my-oauth-client'); + await userEvent.type(callbackUrlField, 'http://localhost:3000'); + await userEvent.click(submit); await waitFor(() => expect(props.showSecret).toBeCalledWith('omg!')); }); - it('Should close when Cancel is pressed', () => { + it('Should close when Cancel is pressed', async () => { const { getByText } = renderWithTheme( ); const cancelButton = getByText('Cancel'); - userEvent.click(cancelButton); + await userEvent.click(cancelButton); expect(props.onClose).toBeCalled(); }); }); diff --git a/packages/manager/src/features/Profile/SSHKeys/CreateSSHKeyDrawer.test.tsx b/packages/manager/src/features/Profile/SSHKeys/CreateSSHKeyDrawer.test.tsx index da67e8204ed..a2ffc316139 100644 --- a/packages/manager/src/features/Profile/SSHKeys/CreateSSHKeyDrawer.test.tsx +++ b/packages/manager/src/features/Profile/SSHKeys/CreateSSHKeyDrawer.test.tsx @@ -1,4 +1,4 @@ -import { act, waitFor } from '@testing-library/react'; +import { waitFor } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import * as React from 'react'; @@ -32,15 +32,11 @@ describe('SSHKeyCreationDrawer', () => { const inputs = getAllByRole('textbox'); - const labelInput = inputs[0]; const sskKeyInput = inputs[1]; const submitButton = getByTestId('submit'); - act(() => { - userEvent.type(labelInput, ''); - userEvent.type(sskKeyInput, 'invalid ssh key'); - userEvent.click(submitButton); - }); + await userEvent.type(sskKeyInput, 'invalid ssh key'); + await userEvent.click(submitButton); await waitFor(() => { getByText('Label is required.'); @@ -64,11 +60,9 @@ describe('SSHKeyCreationDrawer', () => { const sskKeyInput = inputs[1]; const submitButton = getByTestId('submit'); - act(() => { - userEvent.type(labelInput, 'my-ssh-key'); - userEvent.type(sskKeyInput, 'pretend this is a valid ssh key'); - userEvent.click(submitButton); - }); + await userEvent.type(labelInput, 'my-ssh-key'); + await userEvent.type(sskKeyInput, 'pretend this is a valid ssh key'); + await userEvent.click(submitButton); await waitFor(() => { expect(props.onClose).toBeCalled(); diff --git a/packages/manager/src/features/Profile/SSHKeys/DeleteSSHKeyDialog.test.tsx b/packages/manager/src/features/Profile/SSHKeys/DeleteSSHKeyDialog.test.tsx index a889b5d4a54..514c581db2c 100644 --- a/packages/manager/src/features/Profile/SSHKeys/DeleteSSHKeyDialog.test.tsx +++ b/packages/manager/src/features/Profile/SSHKeys/DeleteSSHKeyDialog.test.tsx @@ -1,4 +1,4 @@ -import { act, waitFor } from '@testing-library/react'; +import { waitFor } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import * as React from 'react'; @@ -43,9 +43,7 @@ describe('DeleteSSHKeyDialog', () => { const submitButton = getByTestId('confirm-delete'); - act(() => { - userEvent.click(submitButton); - }); + await userEvent.click(submitButton); await waitFor(() => { expect(props.onClose).toBeCalled(); @@ -57,9 +55,7 @@ describe('DeleteSSHKeyDialog', () => { const cancelButton = getByTestId('cancel-delete'); - act(() => { - userEvent.click(cancelButton); - }); + await userEvent.click(cancelButton); await waitFor(() => { expect(props.onClose).toBeCalled(); diff --git a/packages/manager/src/features/StackScripts/StackScriptBase/StackScriptBase.tsx b/packages/manager/src/features/StackScripts/StackScriptBase/StackScriptBase.tsx index b964b21f651..d40fcd04808 100644 --- a/packages/manager/src/features/StackScripts/StackScriptBase/StackScriptBase.tsx +++ b/packages/manager/src/features/StackScripts/StackScriptBase/StackScriptBase.tsx @@ -466,6 +466,9 @@ const withStackScriptBase = (options: WithStackScriptBaseOptions) => ( }; handleSearch = (value: string) => { + if (!this.mounted) { + return; + } const { currentFilter } = this.state; const { category, history, request } = this.props; diff --git a/packages/manager/src/features/StackScripts/StackScriptCreate/StackScriptCreate.tsx b/packages/manager/src/features/StackScripts/StackScriptCreate/StackScriptCreate.tsx index fe935a1c914..30c51fa3a6e 100644 --- a/packages/manager/src/features/StackScripts/StackScriptCreate/StackScriptCreate.tsx +++ b/packages/manager/src/features/StackScripts/StackScriptCreate/StackScriptCreate.tsx @@ -23,9 +23,7 @@ import { ErrorState } from 'src/components/ErrorState/ErrorState'; import { LandingHeader } from 'src/components/LandingHeader'; import { Notice } from 'src/components/Notice/Notice'; import { Typography } from 'src/components/Typography'; -import withImages, { - DefaultProps as ImagesProps, -} from 'src/containers/images.container'; +import { WithImagesProps, withImages } from 'src/containers/images.container'; import { WithProfileProps, withProfile, @@ -60,7 +58,7 @@ interface Props { } type CombinedProps = Props & - ImagesProps & + WithImagesProps & WithProfileProps & RouteComponentProps<{ stackScriptID: string }> & WithQueryClientProps; diff --git a/packages/manager/src/features/Support/TicketAttachmentList.test.tsx b/packages/manager/src/features/Support/TicketAttachmentList.test.tsx index f27d093a687..c2753eb7d40 100644 --- a/packages/manager/src/features/Support/TicketAttachmentList.test.tsx +++ b/packages/manager/src/features/Support/TicketAttachmentList.test.tsx @@ -36,10 +36,10 @@ describe('TicketAttachmentList component', () => { } } }); - it('should render all attachment when show more is clicked', () => { + it('should render all attachment when show more is clicked', async () => { const { getByText } = renderWithTheme(); const showMoreButton = getByText('Show More Files').closest('button'); - userEvent.click(showMoreButton!); + await userEvent.click(showMoreButton!); for (const attachment of props.attachments) { expect(getByText(attachment)).toBeVisible(); } diff --git a/packages/manager/src/features/VPCs/VPCCreate/VPCCreate.test.tsx b/packages/manager/src/features/VPCs/VPCCreate/VPCCreate.test.tsx index 0617029c98d..b67ce7af200 100644 --- a/packages/manager/src/features/VPCs/VPCCreate/VPCCreate.test.tsx +++ b/packages/manager/src/features/VPCs/VPCCreate/VPCCreate.test.tsx @@ -43,7 +43,7 @@ describe('VPC create page', () => { expect(createVPCButton).toBeInTheDocument(); expect(subnetIP[3]).toBeInTheDocument(); await act(async () => { - userEvent.click(createVPCButton); + await userEvent.click(createVPCButton); }); const regionError = getByText('Region is required'); expect(regionError).toBeInTheDocument(); @@ -58,7 +58,7 @@ describe('VPC create page', () => { const addSubnet = screen.getByText('Add another Subnet'); expect(addSubnet).toBeInTheDocument(); await act(async () => { - userEvent.click(addSubnet); + await userEvent.click(addSubnet); }); const subnetLabels = screen.getAllByText('Subnet Label'); @@ -69,7 +69,7 @@ describe('VPC create page', () => { const deleteSubnet = screen.getByTestId('delete-subnet-1'); expect(deleteSubnet).toBeInTheDocument(); await act(async () => { - userEvent.click(deleteSubnet); + await userEvent.click(deleteSubnet); }); const subnetLabelAfter = screen.getAllByText('Subnet Label'); @@ -89,7 +89,7 @@ describe('VPC create page', () => { await act(async () => { await userEvent.type(subnetIp, 'bad'); - userEvent.click(createVPCButton); + await userEvent.click(createVPCButton); }); const badSubnetIP = screen.getByText( diff --git a/packages/manager/src/features/Volumes/VolumeTableRow.test.tsx b/packages/manager/src/features/Volumes/VolumeTableRow.test.tsx index 619c50f5b5e..30e32ea53f4 100644 --- a/packages/manager/src/features/Volumes/VolumeTableRow.test.tsx +++ b/packages/manager/src/features/Volumes/VolumeTableRow.test.tsx @@ -29,7 +29,7 @@ const handlers: ActionHandlers = { }; describe('Volume table row', () => { - it("should show the attached Linode's label if present", () => { + it("should show the attached Linode's label if present", async () => { const { getByLabelText, getByTestId, getByText } = renderWithTheme( wrapWithTableBody( @@ -42,13 +42,13 @@ describe('Volume table row', () => { expect(getByTestId('region')); expect(getByText(attachedVolume.linode_label!)); - userEvent.click(getByLabelText(/^Action menu for/)); + await userEvent.click(getByLabelText(/^Action menu for/)); // Make sure there is a detach button expect(getByText('Detach')); }); - it('should show Unattached if the Volume is not attached to a Linode', () => { + it('should show Unattached if the Volume is not attached to a Linode', async () => { const { getByLabelText, getByText } = renderWithTheme( wrapWithTableBody( @@ -56,7 +56,7 @@ describe('Volume table row', () => { ); expect(getByText('Unattached')); - userEvent.click(getByLabelText(/^Action menu for/)); + await userEvent.click(getByLabelText(/^Action menu for/)); // Make sure there is an attach button expect(getByText('Attach')); @@ -64,7 +64,7 @@ describe('Volume table row', () => { }); describe('Volume table row - for linodes detail page', () => { - it("should show the attached Linode's label if present", () => { + it("should show the attached Linode's label if present", async () => { const { getByLabelText, getByText, @@ -91,7 +91,7 @@ describe('Volume table row - for linodes detail page', () => { // Because we are on a Linode details page, we don't need to show the Linode label expect(queryByText(attachedVolume.linode_label!)).toBeNull(); - userEvent.click(getByLabelText(/^Action menu for/)); + await userEvent.click(getByLabelText(/^Action menu for/)); // Make sure there is a detach button expect(getByText('Detach')); diff --git a/packages/manager/src/features/Volumes/VolumesActionMenu.test.tsx b/packages/manager/src/features/Volumes/VolumesActionMenu.test.tsx index 9fa705666f5..2123552f8b3 100644 --- a/packages/manager/src/features/Volumes/VolumesActionMenu.test.tsx +++ b/packages/manager/src/features/Volumes/VolumesActionMenu.test.tsx @@ -1,10 +1,13 @@ +import { userEvent } from '@testing-library/user-event'; import * as React from 'react'; import { volumeFactory } from 'src/factories'; -import { includesActions, renderWithTheme } from 'src/utilities/testHelpers'; +import { renderWithTheme } from 'src/utilities/testHelpers'; import { Props, VolumesActionMenu } from './VolumesActionMenu'; +const volume = volumeFactory.build({ linode_id: null, linode_label: null }); + const props: Props = { handlers: { handleAttach: vi.fn(), @@ -16,39 +19,72 @@ const props: Props = { handleResize: vi.fn(), }, isVolumesLanding: true, - volume: volumeFactory.build({ linode_id: null, linode_label: null }), + volume, }; describe('Volume action menu', () => { - it('should include basic Volume actions', () => { - const { queryByText } = renderWithTheme(); - includesActions(['Show Config', 'Edit'], queryByText); + it('should include basic Volume actions', async () => { + const { getByLabelText, getByText } = renderWithTheme( + + ); + + const actionMenuButton = getByLabelText( + `Action menu for Volume ${volume.label}` + ); + + await userEvent.click(actionMenuButton); + + for (const action of ['Show Config', 'Edit']) { + expect(getByText(action)).toBeVisible(); + } }); - it('should include Attach if the Volume is not attached', () => { - const { queryByText } = renderWithTheme( + it('should include Attach if the Volume is not attached', async () => { + const { getByLabelText, getByText, queryByText } = renderWithTheme( ); - includesActions(['Attach'], queryByText); + + const actionMenuButton = getByLabelText( + `Action menu for Volume ${volume.label}` + ); + + await userEvent.click(actionMenuButton); + + expect(getByText('Attach')).toBeVisible(); expect(queryByText('Detach')).toBeNull(); }); - it('should include Detach if the Volume is attached', () => { - const { queryByText } = renderWithTheme( - - ); - includesActions(['Detach'], queryByText); + it('should include Detach if the Volume is attached', async () => { + const attachedVolune = volumeFactory.build({ + linode_id: 2, + linode_label: 'linode-2', + }); + + const { getByLabelText, getByText, queryByText } = renderWithTheme( + + ); + + const actionMenuButton = getByLabelText( + `Action menu for Volume ${attachedVolune.label}` + ); + + await userEvent.click(actionMenuButton); + + expect(getByText('Detach')).toBeVisible(); expect(queryByText('Attach')).toBeNull(); }); - it('should include Delete', () => { - const { queryByText } = renderWithTheme(); - includesActions(['Delete'], queryByText); + it('should include Delete', async () => { + const { getByLabelText, getByText } = renderWithTheme( + + ); + + const actionMenuButton = getByLabelText( + `Action menu for Volume ${volume.label}` + ); + + await userEvent.click(actionMenuButton); + + expect(getByText('Delete')).toBeVisible(); }); }); diff --git a/packages/manager/src/hooks/useAPIRequest.test.ts b/packages/manager/src/hooks/useAPIRequest.test.ts index 25e43274226..82311e98ee9 100644 --- a/packages/manager/src/hooks/useAPIRequest.test.ts +++ b/packages/manager/src/hooks/useAPIRequest.test.ts @@ -1,4 +1,4 @@ -import { act, renderHook } from '@testing-library/react-hooks'; +import { renderHook, waitFor } from '@testing-library/react'; import { useAPIRequest } from './useAPIRequest'; @@ -15,44 +15,35 @@ const mockRequestFailure = (): Promise => describe('useAPIRequest', () => { it('sets `data` on load', async () => { - const { result, waitForNextUpdate } = renderHook(() => + const { result } = renderHook(() => useAPIRequest(mockRequestSuccess, 0) ); - await act(async () => { - await waitForNextUpdate(); - + await waitFor(() => { expect(result.current.data).toEqual(1); }); }); it('executes request when dependencies change', async () => { - let mockDep = 1; - const { rerender, result, waitForNextUpdate } = renderHook(() => - useAPIRequest(mockRequestWithDep(mockDep), 0, [mockDep]) + const { rerender, result } = renderHook( + ({ mockVal }) => + useAPIRequest(mockRequestWithDep(mockVal), 0, [mockVal]), + { initialProps: { mockVal: 0 } } ); - await act(async () => { - await waitForNextUpdate(); - const data1 = result.current.data; + await waitFor(() => expect(result.current.data).toBe(0)); - mockDep = 2; - rerender(); - await waitForNextUpdate(); - const data2 = result.current.data; + rerender({ mockVal: 2 }); - expect(data1).not.toEqual(data2); - }); + await waitFor(() => expect(result.current.data).toBe(2)); }); it('sets error when request fails', async () => { - const { result, waitForNextUpdate } = renderHook(() => + const { result } = renderHook(() => useAPIRequest(mockRequestFailure, 0) ); - await act(async () => { - await waitForNextUpdate(); - + await waitFor(() => { expect(result.current.error).toEqual(mockError); }); }); diff --git a/packages/manager/src/hooks/useAPIRequest.ts b/packages/manager/src/hooks/useAPIRequest.ts index ac5bcf272ce..25f01e6e09d 100644 --- a/packages/manager/src/hooks/useAPIRequest.ts +++ b/packages/manager/src/hooks/useAPIRequest.ts @@ -47,6 +47,8 @@ export interface UseAPIRequest { * ); * ``` * + * @deprecated Please don't use this. Use React Query! + * * @param request The request function to execute when `deps` change. * @param defaultData Value to use for `data` before request is made. * @param deps The dependencies this hook relies on. Defaults to an empty array diff --git a/packages/manager/src/hooks/useOpenClose.test.ts b/packages/manager/src/hooks/useOpenClose.test.ts index 33100b4e724..23c507eb422 100644 --- a/packages/manager/src/hooks/useOpenClose.test.ts +++ b/packages/manager/src/hooks/useOpenClose.test.ts @@ -1,4 +1,4 @@ -import { act, renderHook } from '@testing-library/react-hooks'; +import { act, renderHook } from '@testing-library/react'; import { useOpenClose } from './useOpenClose'; diff --git a/packages/manager/src/hooks/useOrder.test.tsx b/packages/manager/src/hooks/useOrder.test.tsx index 7926311d4d3..94838acd73f 100644 --- a/packages/manager/src/hooks/useOrder.test.tsx +++ b/packages/manager/src/hooks/useOrder.test.tsx @@ -1,4 +1,5 @@ -import { act, renderHook } from '@testing-library/react-hooks'; +import { act, renderHook, waitFor } from '@testing-library/react'; +import { QueryClient } from 'react-query'; import { rest, server } from 'src/mocks/testServer'; import { queryClientFactory } from 'src/queries/base'; @@ -49,27 +50,6 @@ vi.mock('react-router-dom', async () => { const queryClient = queryClientFactory(); describe('useOrder hook', () => { - // wait for preferences to load - beforeEach(async () => { - await act(async () => { - server.use( - rest.get('*/profile/preferences', (_, res, ctx) => { - return res( - ctx.json({ - sortKeys: { - 'account-maintenance-order': preferenceOrder, - }, - }) - ); - }) - ); - - await renderHook(() => usePreferences(), { - wrapper: (ui) => wrapWithTheme(ui, { queryClient }), - }).waitForNextUpdate(); - }); - }); - it('should use default sort options when there are no query params or preference', () => { const { result } = renderHook(() => useOrder(defaultOrder), { wrapper: (ui) => wrapWithTheme(ui, { queryClient }), @@ -97,7 +77,31 @@ describe('useOrder hook', () => { }); it('use preferences are used when there are no query params', async () => { - const { result, waitFor } = renderHook( + const queryClient = new QueryClient(); + + server.use( + rest.get('*/profile/preferences', (_, res, ctx) => { + return res( + ctx.json({ + sortKeys: { + 'account-maintenance-order': preferenceOrder, + }, + }) + ); + }) + ); + + const { result: preferencesResult } = renderHook(() => usePreferences(), { + wrapper: (ui) => wrapWithTheme(ui, { queryClient }), + }); + + // This is kind of a bug. useOrder currently requires preferences to be cached + // before it works properly. + await waitFor(() => { + expect(preferencesResult.current.data).toBeDefined(); + }); + + const { result } = renderHook( () => useOrder(defaultOrder, 'account-maintenance-order'), { wrapper: (ui) => wrapWithTheme(ui, { queryClient }), diff --git a/packages/manager/src/hooks/useSet.test.ts b/packages/manager/src/hooks/useSet.test.ts index 50e506319ae..6fc09f430c5 100644 --- a/packages/manager/src/hooks/useSet.test.ts +++ b/packages/manager/src/hooks/useSet.test.ts @@ -1,4 +1,4 @@ -import { act, renderHook } from '@testing-library/react-hooks'; +import { act, renderHook } from '@testing-library/react'; import { useSet } from './useSet'; diff --git a/packages/manager/src/index.tsx b/packages/manager/src/index.tsx index d3fee1824f2..34b40de4edc 100644 --- a/packages/manager/src/index.tsx +++ b/packages/manager/src/index.tsx @@ -1,7 +1,7 @@ import CssBaseline from '@mui/material/CssBaseline'; import 'font-logos/assets/font-logos.css'; import * as React from 'react'; -import * as ReactDOM from 'react-dom'; +import { createRoot } from 'react-dom/client'; import { QueryClientProvider } from 'react-query'; import { ReactQueryDevtools } from 'react-query/devtools'; import { Provider as ReduxStoreProvider } from 'react-redux'; @@ -97,7 +97,9 @@ async function loadApp() { // This ensures the MSW is setup before we start making API calls. await loadDevTools(store); } - ReactDOM.render(
, document.getElementById('root')); + const container = document.getElementById('root'); + const root = createRoot(container!); + root.render(
); } loadApp(); diff --git a/packages/manager/src/testSetup.ts b/packages/manager/src/testSetup.ts index 6f87e964ec6..4cfaec0117d 100644 --- a/packages/manager/src/testSetup.ts +++ b/packages/manager/src/testSetup.ts @@ -1,17 +1,19 @@ -import matchers from '@testing-library/jest-dom/matchers'; +import * as matchers from '@testing-library/jest-dom/matchers'; +import { cleanup } from '@testing-library/react'; import { expect } from 'vitest'; -// JSDom matchers. +import { server } from './mocks/testServer'; + expect.extend(matchers); -import { server } from './mocks/testServer'; +afterEach(() => { + cleanup(); +}); beforeAll(() => server.listen({ onUnhandledRequest: 'warn' })); afterAll(() => server.close()); afterEach(() => server.resetHandlers()); -require('@testing-library/jest-dom/extend-expect'); - // @ts-expect-error this prevents some console errors HTMLCanvasElement.prototype.getContext = () => { return 0; diff --git a/packages/manager/src/utilities/link.test.tsx b/packages/manager/src/utilities/link.test.tsx index d357e0454dc..95b20d0f923 100644 --- a/packages/manager/src/utilities/link.test.tsx +++ b/packages/manager/src/utilities/link.test.tsx @@ -75,6 +75,7 @@ describe('childrenContainsNoText', () => { it('should return true if children are not valid React elements', () => { const invalidChildren = {}; const emptyArray: React.ReactNode[] = []; + // @ts-expect-error we are testing an invalid input expect(childrenContainsNoText(invalidChildren)).toBe(true); expect(childrenContainsNoText(emptyArray)).toBe(true); }); diff --git a/packages/manager/src/utilities/testHelpers.tsx b/packages/manager/src/utilities/testHelpers.tsx index 228a8ea9de3..541a0191633 100644 --- a/packages/manager/src/utilities/testHelpers.tsx +++ b/packages/manager/src/utilities/testHelpers.tsx @@ -1,10 +1,4 @@ -import { - MatcherFunction, - RenderResult, - render, - screen, -} from '@testing-library/react'; -import userEvent from '@testing-library/user-event'; +import { MatcherFunction, render } from '@testing-library/react'; import mediaQuery from 'css-mediaquery'; import { Formik, FormikConfig, FormikValues } from 'formik'; import { LDProvider } from 'launchdarkly-react-client-sdk'; @@ -165,82 +159,6 @@ export const renderWithThemeAndFormik = ( configObj: FormikConfig ) => renderWithTheme({ui}); -declare global { - // export would be better, but i m aligning with how the namespace is declared by vi-axe - // eslint-disable-next-line @typescript-eslint/no-namespace - namespace vi { - interface Matchers { - toPassAxeCheck(): R; - } - } -} -export const toPassAxeCheck = { - toPassAxeCheck(received: RenderResult) { - // if ((typeof rec) !== RenderResult){ - // return { - // pass:false, - // message:()=> `Expected type RenderResult (result of function call render...)` - // }; - // } - const anchors = received.container.querySelectorAll('a'); - // Here i want to use forEach but tslint has a bug saying not all my pth return a value, - // which is intended as i want to return only if there is an error, if not keep traversing - // Also i could have used For .. Of but this was making tslint think e was a string... - for (let i = 0; i < anchors.length; i++) { - const e = anchors[i]; - const hasHref = e.hasAttribute('href'); - if (!hasHref) { - return { - message: () => `anchors has no href - specify a value for href - \nsee: https://a11yproject.com/posts/creating-valid-and-accessible-links/:\n${received.debug( - e - )}`, - pass: false, - }; - } - let hrefAtt = e.getAttribute('href'); - if (hrefAtt == null) { - return { - message: () => `anchors has bad href - specify a non null value for href - \nsee: https://a11yproject.com/posts/creating-valid-and-accessible-links/:\n${received.debug( - e - )}`, - pass: false, - }; - } - hrefAtt = hrefAtt as string; - if (['#', ''].includes(hrefAtt) || hrefAtt.includes('javascript')) { - return { - message: () => `anchors has invalid href - specify a valid value not #,'' or javascript(void) - \nsee: https://a11yproject.com/posts/creating-valid-and-accessible-links/:\n${received.debug( - e - )}`, - pass: false, - }; - } - // ugly trick to bypass tslint inablility to understand it s normal not to return - continue; - } - return { message: () => '!', pass: true }; - }, -}; - -export const includesActions = ( - actions: string[], - query: any, - includes = true -) => { - const actionMenuButton = screen.queryByLabelText(/^Action menu for/); - if (actionMenuButton) { - userEvent.click(actionMenuButton); - } - for (const action of actions) { - includes - ? expect(query(action)).toBeInTheDocument() - : expect(query(action)).not.toBeInTheDocument(); - } -}; - type Query = (f: MatcherFunction) => HTMLElement; /** H/T to https://stackoverflow.com/questions/55509875/how-to-query-by-text-string-which-contains-html-tags-using-react-testing-library */ diff --git a/yarn.lock b/yarn.lock index 35cee6d6553..24f16828c76 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,119 +2,121 @@ # yarn lockfile v1 -"@algolia/cache-browser-local-storage@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.14.3.tgz#b9e0da012b2f124f785134a4d468ee0841b2399d" - integrity sha512-hWH1yCxgG3+R/xZIscmUrWAIBnmBFHH5j30fY/+aPkEZWt90wYILfAHIOZ1/Wxhho5SkPfwFmT7ooX2d9JeQBw== - dependencies: - "@algolia/cache-common" "4.14.3" - -"@algolia/cache-common@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@algolia/cache-common/-/cache-common-4.14.3.tgz#a78e9faee3dfec018eab7b0996e918e06b476ac7" - integrity sha512-oZJofOoD9FQOwiGTzyRnmzvh3ZP8WVTNPBLH5xU5JNF7drDbRT0ocVT0h/xB2rPHYzOeXRrLaQQBwRT/CKom0Q== - -"@algolia/cache-in-memory@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@algolia/cache-in-memory/-/cache-in-memory-4.14.3.tgz#96cefb942aeb80e51e6a7e29f25f4f7f3439b736" - integrity sha512-ES0hHQnzWjeioLQf5Nq+x1AWdZJ50znNPSH3puB/Y4Xsg4Av1bvLmTJe7SY2uqONaeMTvL0OaVcoVtQgJVw0vg== - dependencies: - "@algolia/cache-common" "4.14.3" - -"@algolia/client-account@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@algolia/client-account/-/client-account-4.14.3.tgz#6d7d032a65c600339ce066505c77013d9a9e4966" - integrity sha512-PBcPb0+f5Xbh5UfLZNx2Ow589OdP8WYjB4CnvupfYBrl9JyC1sdH4jcq/ri8osO/mCZYjZrQsKAPIqW/gQmizQ== - dependencies: - "@algolia/client-common" "4.14.3" - "@algolia/client-search" "4.14.3" - "@algolia/transporter" "4.14.3" - -"@algolia/client-analytics@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@algolia/client-analytics/-/client-analytics-4.14.3.tgz#ca409d00a8fff98fdcc215dc96731039900055dc" - integrity sha512-eAwQq0Hb/aauv9NhCH5Dp3Nm29oFx28sayFN2fdOWemwSeJHIl7TmcsxVlRsO50fsD8CtPcDhtGeD3AIFLNvqw== - dependencies: - "@algolia/client-common" "4.14.3" - "@algolia/client-search" "4.14.3" - "@algolia/requester-common" "4.14.3" - "@algolia/transporter" "4.14.3" - -"@algolia/client-common@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@algolia/client-common/-/client-common-4.14.3.tgz#c44e48652b2121a20d7a40cfd68d095ebb4191a8" - integrity sha512-jkPPDZdi63IK64Yg4WccdCsAP4pHxSkr4usplkUZM5C1l1oEpZXsy2c579LQ0rvwCs5JFmwfNG4ahOszidfWPw== - dependencies: - "@algolia/requester-common" "4.14.3" - "@algolia/transporter" "4.14.3" - -"@algolia/client-personalization@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@algolia/client-personalization/-/client-personalization-4.14.3.tgz#8f71325035aa2a5fa7d1d567575235cf1d6c654f" - integrity sha512-UCX1MtkVNgaOL9f0e22x6tC9e2H3unZQlSUdnVaSKpZ+hdSChXGaRjp2UIT7pxmPqNCyv51F597KEX5WT60jNg== - dependencies: - "@algolia/client-common" "4.14.3" - "@algolia/requester-common" "4.14.3" - "@algolia/transporter" "4.14.3" - -"@algolia/client-search@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@algolia/client-search/-/client-search-4.14.3.tgz#cf1e77549f5c3e73408ffe6441ede985fde69da0" - integrity sha512-I2U7xBx5OPFdPLA8AXKUPPxGY3HDxZ4r7+mlZ8ZpLbI8/ri6fnu6B4z3wcL7sgHhDYMwnAE8Xr0AB0h3Hnkp4A== - dependencies: - "@algolia/client-common" "4.14.3" - "@algolia/requester-common" "4.14.3" - "@algolia/transporter" "4.14.3" - -"@algolia/logger-common@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@algolia/logger-common/-/logger-common-4.14.3.tgz#87d4725e7f56ea5a39b605771b7149fff62032a7" - integrity sha512-kUEAZaBt/J3RjYi8MEBT2QEexJR2kAE2mtLmezsmqMQZTV502TkHCxYzTwY2dE7OKcUTxi4OFlMuS4GId9CWPw== - -"@algolia/logger-console@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@algolia/logger-console/-/logger-console-4.14.3.tgz#1f19f8f0a5ef11f01d1f9545290eb6a89b71fb8a" - integrity sha512-ZWqAlUITktiMN2EiFpQIFCJS10N96A++yrexqC2Z+3hgF/JcKrOxOdT4nSCQoEPvU4Ki9QKbpzbebRDemZt/hw== - dependencies: - "@algolia/logger-common" "4.14.3" - -"@algolia/requester-browser-xhr@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.14.3.tgz#bcf55cba20f58fd9bc95ee55793b5219f3ce8888" - integrity sha512-AZeg2T08WLUPvDncl2XLX2O67W5wIO8MNaT7z5ii5LgBTuk/rU4CikTjCe2xsUleIZeFl++QrPAi4Bdxws6r/Q== - dependencies: - "@algolia/requester-common" "4.14.3" - -"@algolia/requester-common@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@algolia/requester-common/-/requester-common-4.14.3.tgz#2d02fbe01afb7ae5651ae8dfe62d6c089f103714" - integrity sha512-RrRzqNyKFDP7IkTuV3XvYGF9cDPn9h6qEDl595lXva3YUk9YSS8+MGZnnkOMHvjkrSCKfoLeLbm/T4tmoIeclw== - -"@algolia/requester-node-http@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@algolia/requester-node-http/-/requester-node-http-4.14.3.tgz#72389e1c2e5d964702451e75e368eefe85a09d8f" - integrity sha512-O5wnPxtDRPuW2U0EaOz9rMMWdlhwP0J0eSL1Z7TtXF8xnUeeUyNJrdhV5uy2CAp6RbhM1VuC3sOJcIR6Av+vbA== - dependencies: - "@algolia/requester-common" "4.14.3" - -"@algolia/transporter@4.14.3": - version "4.14.3" - resolved "https://registry.yarnpkg.com/@algolia/transporter/-/transporter-4.14.3.tgz#5593036bd9cf2adfd077fdc3e81d2e6118660a7a" - integrity sha512-2qlKlKsnGJ008exFRb5RTeTOqhLZj0bkMCMVskxoqWejs2Q2QtWmsiH98hDfpw0fmnyhzHEt0Z7lqxBYp8bW2w== - dependencies: - "@algolia/cache-common" "4.14.3" - "@algolia/logger-common" "4.14.3" - "@algolia/requester-common" "4.14.3" +"@aashutoshrathi/word-wrap@^1.2.3": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" + integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== -"@ampproject/remapping@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" - integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== +"@adobe/css-tools@^4.3.2": + version "4.3.3" + resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.3.3.tgz#90749bde8b89cd41764224f5aac29cd4138f75ff" + integrity sha512-rE0Pygv0sEZ4vBWHlAgJLGDU7Pm8xoO6p3wsEceb7GYAjScrOHpEo8KK/eVkAcnSM+slAEtXjA2JpdjLp4fJQQ== + +"@algolia/cache-browser-local-storage@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.22.1.tgz#14b6dc9abc9e3a304a5fffb063d15f30af1032d1" + integrity sha512-Sw6IAmOCvvP6QNgY9j+Hv09mvkvEIDKjYW8ow0UDDAxSXy664RBNQk3i/0nt7gvceOJ6jGmOTimaZoY1THmU7g== dependencies: - "@jridgewell/gen-mapping" "^0.1.0" - "@jridgewell/trace-mapping" "^0.3.9" + "@algolia/cache-common" "4.22.1" + +"@algolia/cache-common@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@algolia/cache-common/-/cache-common-4.22.1.tgz#c625dff4bc2a74e79f9aed67b4e053b0ef1b3ec1" + integrity sha512-TJMBKqZNKYB9TptRRjSUtevJeQVXRmg6rk9qgFKWvOy8jhCPdyNZV1nB3SKGufzvTVbomAukFR8guu/8NRKBTA== + +"@algolia/cache-in-memory@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@algolia/cache-in-memory/-/cache-in-memory-4.22.1.tgz#858a3d887f521362e87d04f3943e2810226a0d71" + integrity sha512-ve+6Ac2LhwpufuWavM/aHjLoNz/Z/sYSgNIXsinGofWOysPilQZPUetqLj8vbvi+DHZZaYSEP9H5SRVXnpsNNw== + dependencies: + "@algolia/cache-common" "4.22.1" + +"@algolia/client-account@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@algolia/client-account/-/client-account-4.22.1.tgz#a7fb8b66b9a4f0a428e1426b2561144267d76d43" + integrity sha512-k8m+oegM2zlns/TwZyi4YgCtyToackkOpE+xCaKCYfBfDtdGOaVZCM5YvGPtK+HGaJMIN/DoTL8asbM3NzHonw== + dependencies: + "@algolia/client-common" "4.22.1" + "@algolia/client-search" "4.22.1" + "@algolia/transporter" "4.22.1" + +"@algolia/client-analytics@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@algolia/client-analytics/-/client-analytics-4.22.1.tgz#506558740b4d49b1b1e3393861f729a8ce921851" + integrity sha512-1ssi9pyxyQNN4a7Ji9R50nSdISIumMFDwKNuwZipB6TkauJ8J7ha/uO60sPJFqQyqvvI+px7RSNRQT3Zrvzieg== + dependencies: + "@algolia/client-common" "4.22.1" + "@algolia/client-search" "4.22.1" + "@algolia/requester-common" "4.22.1" + "@algolia/transporter" "4.22.1" + +"@algolia/client-common@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@algolia/client-common/-/client-common-4.22.1.tgz#042b19c1b6157c485fa1b551349ab313944d2b05" + integrity sha512-IvaL5v9mZtm4k4QHbBGDmU3wa/mKokmqNBqPj0K7lcR8ZDKzUorhcGp/u8PkPC/e0zoHSTvRh7TRkGX3Lm7iOQ== + dependencies: + "@algolia/requester-common" "4.22.1" + "@algolia/transporter" "4.22.1" + +"@algolia/client-personalization@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@algolia/client-personalization/-/client-personalization-4.22.1.tgz#ff088d797648224fb582e9fe5828f8087835fa3d" + integrity sha512-sl+/klQJ93+4yaqZ7ezOttMQ/nczly/3GmgZXJ1xmoewP5jmdP/X/nV5U7EHHH3hCUEHeN7X1nsIhGPVt9E1cQ== + dependencies: + "@algolia/client-common" "4.22.1" + "@algolia/requester-common" "4.22.1" + "@algolia/transporter" "4.22.1" + +"@algolia/client-search@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@algolia/client-search/-/client-search-4.22.1.tgz#508cc6ab3d1f4e9c02735a630d4dff6fbb8514a2" + integrity sha512-yb05NA4tNaOgx3+rOxAmFztgMTtGBi97X7PC3jyNeGiwkAjOZc2QrdZBYyIdcDLoI09N0gjtpClcackoTN0gPA== + dependencies: + "@algolia/client-common" "4.22.1" + "@algolia/requester-common" "4.22.1" + "@algolia/transporter" "4.22.1" + +"@algolia/logger-common@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@algolia/logger-common/-/logger-common-4.22.1.tgz#79cf4cd295de0377a94582c6aaac59b1ded731d9" + integrity sha512-OnTFymd2odHSO39r4DSWRFETkBufnY2iGUZNrMXpIhF5cmFE8pGoINNPzwg02QLBlGSaLqdKy0bM8S0GyqPLBg== + +"@algolia/logger-console@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@algolia/logger-console/-/logger-console-4.22.1.tgz#0355345f6940f67aaa78ae9b81c06e44e49f2336" + integrity sha512-O99rcqpVPKN1RlpgD6H3khUWylU24OXlzkavUAMy6QZd1776QAcauE3oP8CmD43nbaTjBexZj2nGsBH9Tc0FVA== + dependencies: + "@algolia/logger-common" "4.22.1" + +"@algolia/requester-browser-xhr@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.22.1.tgz#f04df6fe9690a071b267c77d26b83a3be9280361" + integrity sha512-dtQGYIg6MteqT1Uay3J/0NDqD+UciHy3QgRbk7bNddOJu+p3hzjTRYESqEnoX/DpEkaNYdRHUKNylsqMpgwaEw== + dependencies: + "@algolia/requester-common" "4.22.1" + +"@algolia/requester-common@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@algolia/requester-common/-/requester-common-4.22.1.tgz#27be35f3718aafcb6b388ff9c3aa2defabd559ff" + integrity sha512-dgvhSAtg2MJnR+BxrIFqlLtkLlVVhas9HgYKMk2Uxiy5m6/8HZBL40JVAMb2LovoPFs9I/EWIoFVjOrFwzn5Qg== + +"@algolia/requester-node-http@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@algolia/requester-node-http/-/requester-node-http-4.22.1.tgz#589a6fa828ad0f325e727a6fcaf4e1a2343cc62b" + integrity sha512-JfmZ3MVFQkAU+zug8H3s8rZ6h0ahHZL/SpMaSasTCGYR5EEJsCc8SI5UZ6raPN2tjxa5bxS13BRpGSBUens7EA== + dependencies: + "@algolia/requester-common" "4.22.1" + +"@algolia/transporter@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@algolia/transporter/-/transporter-4.22.1.tgz#8843841b857dc021668f31647aa557ff19cd9cb1" + integrity sha512-kzWgc2c9IdxMa3YqA6TN0NW5VrKYYW/BELIn7vnLyn+U/RFdZ4lxxt9/8yq3DKV5snvoDzzO4ClyejZRdV3lMQ== + dependencies: + "@algolia/cache-common" "4.22.1" + "@algolia/logger-common" "4.22.1" + "@algolia/requester-common" "4.22.1" -"@ampproject/remapping@^2.2.1": +"@ampproject/remapping@^2.2.0", "@ampproject/remapping@^2.2.1": version "2.2.1" resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== @@ -129,29 +131,7 @@ dependencies: default-browser-id "3.0.0" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" - integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== - dependencies: - "@babel/highlight" "^7.18.6" - -"@babel/code-frame@^7.21.4": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.21.4.tgz#d0fa9e4413aca81f2b23b9442797bda1826edb39" - integrity sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g== - dependencies: - "@babel/highlight" "^7.18.6" - -"@babel/code-frame@^7.22.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/code-frame@^7.23.5": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.23.5": version "7.23.5" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== @@ -159,141 +139,33 @@ "@babel/highlight" "^7.23.4" chalk "^2.4.2" -"@babel/compat-data@^7.20.5": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.21.0.tgz#c241dc454e5b5917e40d37e525e2f4530c399298" - integrity sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g== - -"@babel/compat-data@^7.22.0": - version "7.22.3" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.3.tgz#cd502a6a0b6e37d7ad72ce7e71a7160a3ae36f7e" - integrity sha512-aNtko9OPOwVESUFp3MZfD8Uzxl7JzSeJpd7npIoxCasU37PFbAQRpKglkaKwlHOyeJdrREpo8TW8ldrkYWwvIQ== - -"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9": - version "7.23.2" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.2.tgz#6a12ced93455827037bfb5ed8492820d60fc32cc" - integrity sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ== - -"@babel/compat-data@^7.23.3", "@babel/compat-data@^7.23.5": +"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.23.3", "@babel/compat-data@^7.23.5": version "7.23.5" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98" integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== -"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.20.12": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.21.0.tgz#1341aefdcc14ccc7553fcc688dd8986a2daffc13" - integrity sha512-PuxUbxcW6ZYe656yL3EAhpy7qXKq0DmYsrJLpbB8XrsCP9Nm+XCg9XFMb5vIDliPD7+U/+M+QJlH17XOcB7eXA== - dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.21.0" - "@babel/helper-compilation-targets" "^7.20.7" - "@babel/helper-module-transforms" "^7.21.0" - "@babel/helpers" "^7.21.0" - "@babel/parser" "^7.21.0" - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.21.0" - "@babel/types" "^7.21.0" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.2" - semver "^6.3.0" - -"@babel/core@^7.18.9": - version "7.23.2" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.2.tgz#ed10df0d580fff67c5f3ee70fd22e2e4c90a9f94" - integrity sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ== - dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.23.0" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-module-transforms" "^7.23.0" - "@babel/helpers" "^7.23.2" - "@babel/parser" "^7.23.0" - "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.2" - "@babel/types" "^7.23.0" - convert-source-map "^2.0.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.3" - semver "^6.3.1" - -"@babel/core@^7.21.3": - version "7.22.1" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.1.tgz#5de51c5206f4c6f5533562838337a603c1033cfd" - integrity sha512-Hkqu7J4ynysSXxmAahpN1jjRwVJ+NdpraFLIWflgjpVob3KNyK3/tIUc7Q7szed8WMp0JNa7Qtd1E9Oo22F9gA== - dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.21.4" - "@babel/generator" "^7.22.0" - "@babel/helper-compilation-targets" "^7.22.1" - "@babel/helper-module-transforms" "^7.22.1" - "@babel/helpers" "^7.22.0" - "@babel/parser" "^7.22.0" - "@babel/template" "^7.21.9" - "@babel/traverse" "^7.22.1" - "@babel/types" "^7.22.0" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.2" - semver "^6.3.0" - -"@babel/core@^7.23.0", "@babel/core@^7.23.2": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.6.tgz#8be77cd77c55baadcc1eae1c33df90ab6d2151d4" - integrity sha512-FxpRyGjrMJXh7X3wGLGhNDCRiwpWEF74sKjTLDJSG5Kyvow3QZaG0Adbqzi9ZrVjTWpsX+2cxWXD71NMg93kdw== +"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.18.9", "@babel/core@^7.20.12", "@babel/core@^7.21.3", "@babel/core@^7.23.0", "@babel/core@^7.23.2": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.9.tgz#b028820718000f267870822fec434820e9b1e4d1" + integrity sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw== dependencies: "@ampproject/remapping" "^2.2.0" "@babel/code-frame" "^7.23.5" "@babel/generator" "^7.23.6" "@babel/helper-compilation-targets" "^7.23.6" "@babel/helper-module-transforms" "^7.23.3" - "@babel/helpers" "^7.23.6" - "@babel/parser" "^7.23.6" - "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.6" - "@babel/types" "^7.23.6" + "@babel/helpers" "^7.23.9" + "@babel/parser" "^7.23.9" + "@babel/template" "^7.23.9" + "@babel/traverse" "^7.23.9" + "@babel/types" "^7.23.9" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.21.0": - version "7.21.1" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.21.1.tgz#951cc626057bc0af2c35cd23e9c64d384dea83dd" - integrity sha512-1lT45bAYlQhFn/BHivJs43AiW2rg3/UbLyShGfF3C0KmHvO5fSghWd5kBJy30kpRRucGzXStvnnCFniCR2kXAA== - dependencies: - "@babel/types" "^7.21.0" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" - jsesc "^2.5.1" - -"@babel/generator@^7.22.0": - version "7.22.3" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.3.tgz#0ff675d2edb93d7596c5f6728b52615cfc0df01e" - integrity sha512-C17MW4wlk//ES/CJDL51kPNwl+qiBQyN7b9SKyVp11BLGFeSPoVaHrv+MNt8jwQFhQWowW88z1eeBx3pFz9v8A== - dependencies: - "@babel/types" "^7.22.3" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" - jsesc "^2.5.1" - -"@babel/generator@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.0.tgz#df5c386e2218be505b34837acbcb874d7a983420" - integrity sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g== - dependencies: - "@babel/types" "^7.23.0" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" - jsesc "^2.5.1" - -"@babel/generator@^7.23.6": +"@babel/generator@^7.23.0", "@babel/generator@^7.23.6": version "7.23.6" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.6.tgz#9e1fca4811c77a10580d17d26b57b036133f3c2e" integrity sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw== @@ -303,13 +175,6 @@ "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" -"@babel/helper-annotate-as-pure@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb" - integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA== - dependencies: - "@babel/types" "^7.18.6" - "@babel/helper-annotate-as-pure@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" @@ -324,40 +189,7 @@ dependencies: "@babel/types" "^7.22.15" -"@babel/helper-compilation-targets@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz#a6cd33e93629f5eb473b021aac05df62c4cd09bb" - integrity sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ== - dependencies: - "@babel/compat-data" "^7.20.5" - "@babel/helper-validator-option" "^7.18.6" - browserslist "^4.21.3" - lru-cache "^5.1.1" - semver "^6.3.0" - -"@babel/helper-compilation-targets@^7.22.1": - version "7.22.1" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.1.tgz#bfcd6b7321ffebe33290d68550e2c9d7eb7c7a58" - integrity sha512-Rqx13UM3yVB5q0D/KwQ8+SPfX/+Rnsy1Lw1k/UwOC4KC6qrzIQoY3lYnBu5EHKBlEHHcj0M0W8ltPSkD8rqfsQ== - dependencies: - "@babel/compat-data" "^7.22.0" - "@babel/helper-validator-option" "^7.21.0" - browserslist "^4.21.3" - lru-cache "^5.1.1" - semver "^6.3.0" - -"@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.6": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz#0698fc44551a26cf29f18d4662d5bf545a6cfc52" - integrity sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw== - dependencies: - "@babel/compat-data" "^7.22.9" - "@babel/helper-validator-option" "^7.22.15" - browserslist "^4.21.9" - lru-cache "^5.1.1" - semver "^6.3.1" - -"@babel/helper-compilation-targets@^7.23.6": +"@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.23.6": version "7.23.6" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991" integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== @@ -369,9 +201,9 @@ semver "^6.3.1" "@babel/helper-create-class-features-plugin@^7.22.15", "@babel/helper-create-class-features-plugin@^7.23.6": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.6.tgz#b04d915ce92ce363666f816a884cdcfc9be04953" - integrity sha512-cBXU1vZni/CpGF29iTu4YRbOZt3Wat6zCoMDxRF1MayiEc4URxOj31tT65HUM0CRpMowA3HCJaAOVOUnMf96cw== + version "7.23.10" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.10.tgz#25d55fafbaea31fd0e723820bb6cc3df72edf7ea" + integrity sha512-2XpP2XhkXzgxecPNEEK8Vz8Asj9aRxt08oKOqtiZoqV2UGZ5T+EkyP9sXQ9nwMxBIG34a7jmasVqoMop7VdPUw== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" "@babel/helper-environment-visitor" "^7.22.20" @@ -383,30 +215,7 @@ "@babel/helper-split-export-declaration" "^7.22.6" semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.22.5": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz#97a61b385e57fe458496fad19f8e63b63c867de4" - integrity sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-member-expression-to-functions" "^7.22.15" - "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - semver "^6.3.1" - -"@babel/helper-create-regexp-features-plugin@^7.18.6": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.21.0.tgz#53ff78472e5ce10a52664272a239787107603ebb" - integrity sha512-N+LaFW/auRSWdx7SHD/HiARwXQju1vXTW4fKr4u5SgBUTm51OKEjKgj+cs00ggW3kEvNqwErnlwuq7Y3xBe4eg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - regexpu-core "^5.3.1" - -"@babel/helper-create-regexp-features-plugin@^7.22.15", "@babel/helper-create-regexp-features-plugin@^7.22.5": +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.15", "@babel/helper-create-regexp-features-plugin@^7.22.5": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz#5ee90093914ea09639b01c711db0d6775e558be1" integrity sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w== @@ -415,10 +224,10 @@ regexpu-core "^5.3.1" semver "^6.3.1" -"@babel/helper-define-polyfill-provider@^0.4.3": - version "0.4.3" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.3.tgz#a71c10f7146d809f4a256c373f462d9bba8cf6ba" - integrity sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug== +"@babel/helper-define-polyfill-provider@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz#465805b7361f461e86c680f1de21eaf88c25901b" + integrity sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q== dependencies: "@babel/helper-compilation-targets" "^7.22.6" "@babel/helper-plugin-utils" "^7.22.5" @@ -426,17 +235,7 @@ lodash.debounce "^4.0.8" resolve "^1.14.2" -"@babel/helper-environment-visitor@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" - integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== - -"@babel/helper-environment-visitor@^7.22.1": - version "7.22.1" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.1.tgz#ac3a56dbada59ed969d712cf527bd8271fe3eba8" - integrity sha512-Z2tgopurB/kTbidvzeBrc2To3PUP/9i5MUe+fU6QJCQDyPwSH2oRapkLw3KGECDYSjhQZCNxEvNvZlLw8JjGwA== - -"@babel/helper-environment-visitor@^7.22.20", "@babel/helper-environment-visitor@^7.22.5": +"@babel/helper-environment-visitor@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== @@ -463,66 +262,13 @@ dependencies: "@babel/types" "^7.23.0" -"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" - integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-module-imports@^7.21.4": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz#ac88b2f76093637489e718a90cec6cf8a9b029af" - integrity sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg== - dependencies: - "@babel/types" "^7.21.4" - -"@babel/helper-module-imports@^7.22.15": +"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.22.15": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== dependencies: "@babel/types" "^7.22.15" -"@babel/helper-module-transforms@^7.21.0": - version "7.21.2" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz#160caafa4978ac8c00ac66636cb0fa37b024e2d2" - integrity sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ== - dependencies: - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-simple-access" "^7.20.2" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/helper-validator-identifier" "^7.19.1" - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.21.2" - "@babel/types" "^7.21.2" - -"@babel/helper-module-transforms@^7.22.1": - version "7.22.1" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.1.tgz#e0cad47fedcf3cae83c11021696376e2d5a50c63" - integrity sha512-dxAe9E7ySDGbQdCVOY/4+UcD8M9ZFqZcZhSPsPacvCG4M+9lwtDDQfI2EoaSvmf7W/8yCBkGU0m7Pvt1ru3UZw== - dependencies: - "@babel/helper-environment-visitor" "^7.22.1" - "@babel/helper-module-imports" "^7.21.4" - "@babel/helper-simple-access" "^7.21.5" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/helper-validator-identifier" "^7.19.1" - "@babel/template" "^7.21.9" - "@babel/traverse" "^7.22.1" - "@babel/types" "^7.22.0" - -"@babel/helper-module-transforms@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz#3ec246457f6c842c0aee62a01f60739906f7047e" - integrity sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw== - dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-simple-access" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/helper-validator-identifier" "^7.22.20" - "@babel/helper-module-transforms@^7.23.3": version "7.23.3" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" @@ -541,12 +287,7 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz#d1b9000752b18d0877cff85a5c376ce5c3121629" - integrity sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ== - -"@babel/helper-plugin-utils@^7.22.5": +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== @@ -560,7 +301,7 @@ "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-wrap-function" "^7.22.20" -"@babel/helper-replace-supers@^7.22.20", "@babel/helper-replace-supers@^7.22.9": +"@babel/helper-replace-supers@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz#e37d367123ca98fe455a9887734ed2e16eb7a793" integrity sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw== @@ -569,20 +310,6 @@ "@babel/helper-member-expression-to-functions" "^7.22.15" "@babel/helper-optimise-call-expression" "^7.22.5" -"@babel/helper-simple-access@^7.20.2": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz#0ab452687fe0c2cfb1e2b9e0015de07fc2d62dd9" - integrity sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA== - dependencies: - "@babel/types" "^7.20.2" - -"@babel/helper-simple-access@^7.21.5": - version "7.21.5" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.21.5.tgz#d697a7971a5c39eac32c7e63c0921c06c8a249ee" - integrity sha512-ENPDAMC1wAjR0uaCUwliBdiSl1KBJAVnMTzXqi64c2MG8MPR6ii4qf7bSXDqSFbr4W6W028/rf5ivoHop5/mkg== - dependencies: - "@babel/types" "^7.21.5" - "@babel/helper-simple-access@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" @@ -597,13 +324,6 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-split-export-declaration@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" - integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== - dependencies: - "@babel/types" "^7.18.6" - "@babel/helper-split-export-declaration@^7.22.6": version "7.22.6" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" @@ -611,47 +331,17 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-string-parser@^7.19.4": - version "7.19.4" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63" - integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw== - -"@babel/helper-string-parser@^7.21.5": - version "7.21.5" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.21.5.tgz#2b3eea65443c6bdc31c22d037c65f6d323b6b2bd" - integrity sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w== - -"@babel/helper-string-parser@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" - integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== - "@babel/helper-string-parser@^7.23.4": version "7.23.4" resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== -"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": - version "7.19.1" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" - integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== - "@babel/helper-validator-identifier@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== -"@babel/helper-validator-option@^7.18.6", "@babel/helper-validator-option@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz#8224c7e13ace4bafdc4004da2cf064ef42673180" - integrity sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ== - -"@babel/helper-validator-option@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz#694c30dfa1d09a6534cdfcafbe56789d36aba040" - integrity sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA== - -"@babel/helper-validator-option@^7.23.5": +"@babel/helper-validator-option@^7.22.15", "@babel/helper-validator-option@^7.23.5": version "7.23.5" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== @@ -665,59 +355,14 @@ "@babel/template" "^7.22.15" "@babel/types" "^7.22.19" -"@babel/helpers@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.21.0.tgz#9dd184fb5599862037917cdc9eecb84577dc4e7e" - integrity sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA== - dependencies: - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.21.0" - "@babel/types" "^7.21.0" - -"@babel/helpers@^7.22.0": - version "7.22.3" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.3.tgz#53b74351da9684ea2f694bf0877998da26dd830e" - integrity sha512-jBJ7jWblbgr7r6wYZHMdIqKc73ycaTcCaWRq4/2LpuPHcx7xMlZvpGQkOYc9HeSjn6rcx15CPlgVcBtZ4WZJ2w== - dependencies: - "@babel/template" "^7.21.9" - "@babel/traverse" "^7.22.1" - "@babel/types" "^7.22.3" - -"@babel/helpers@^7.23.2": - version "7.23.2" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.2.tgz#2832549a6e37d484286e15ba36a5330483cac767" - integrity sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ== - dependencies: - "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.2" - "@babel/types" "^7.23.0" - -"@babel/helpers@^7.23.6": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.6.tgz#d03af2ee5fb34691eec0cda90f5ecbb4d4da145a" - integrity sha512-wCfsbN4nBidDRhpDhvcKlzHWCTlgJYUUdSJfzXb2NuBssDSIjc3xcb+znA7l+zYsFljAcGM0aFkN40cR3lXiGA== - dependencies: - "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.6" - "@babel/types" "^7.23.6" - -"@babel/highlight@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" - integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== - dependencies: - "@babel/helper-validator-identifier" "^7.18.6" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/highlight@^7.22.13": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54" - integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg== +"@babel/helpers@^7.23.9": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.9.tgz#c3e20bbe7f7a7e10cb9b178384b4affdf5995c7d" + integrity sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ== dependencies: - "@babel/helper-validator-identifier" "^7.22.20" - chalk "^2.4.2" - js-tokens "^4.0.0" + "@babel/template" "^7.23.9" + "@babel/traverse" "^7.23.9" + "@babel/types" "^7.23.9" "@babel/highlight@^7.23.4": version "7.23.4" @@ -728,32 +373,7 @@ chalk "^2.4.2" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.21.0", "@babel/parser@^7.7.0": - version "7.21.2" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.2.tgz#dacafadfc6d7654c3051a66d6fe55b6cb2f2a0b3" - integrity sha512-URpaIJQwEkEC2T9Kn+Ai6Xe/02iNaVCuT/PtoRz3GPVJVDpPd7mLo+VddTbhCRU9TXqW5mSrQfXZyi8kDKOVpQ== - -"@babel/parser@^7.21.9", "@babel/parser@^7.22.0": - version "7.22.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.4.tgz#a770e98fd785c231af9d93f6459d36770993fb32" - integrity sha512-VLLsx06XkEYqBtE5YGPwfSGwfrjnyPP5oiGty3S8pQLFDFLaS8VwWSIxkTXpcvr5zeYLE6+MBNl2npl/YnfofA== - -"@babel/parser@^7.22.15", "@babel/parser@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.0.tgz#da950e622420bf96ca0d0f2909cdddac3acd8719" - integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw== - -"@babel/parser@^7.23.3": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.5.tgz#37dee97c4752af148e1d38c34b856b2507660563" - integrity sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ== - -"@babel/parser@^7.23.6": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.6.tgz#ba1c9e512bda72a47e285ae42aff9d2a635a9e3b" - integrity sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ== - -"@babel/parser@^7.23.9": +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.0", "@babel/parser@^7.23.6", "@babel/parser@^7.23.9", "@babel/parser@^7.7.0": version "7.23.9" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.9.tgz#7b903b6149b0f8fa7ad564af646c4c38a77fc44b" integrity sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA== @@ -774,10 +394,10 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" "@babel/plugin-transform-optional-chaining" "^7.23.3" -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.3.tgz#20c60d4639d18f7da8602548512e9d3a4c8d7098" - integrity sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w== +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.23.7": + version "7.23.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.7.tgz#516462a95d10a9618f197d39ad291a9b47ae1d7b" + integrity sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw== dependencies: "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-plugin-utils" "^7.22.5" @@ -942,10 +562,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-async-generator-functions@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.4.tgz#93ac8e3531f347fba519b4703f9ff2a75c6ae27a" - integrity sha512-efdkfPhHYTtn0G6n2ddrESE91fgXxjlqLsnUtPWnJs4a4mZIbUaK7ffqKIIUKXSHwcDvaCVX6GXkaJJFqtX7jw== +"@babel/plugin-transform-async-generator-functions@^7.23.9": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.9.tgz#9adaeb66fc9634a586c5df139c6240d41ed801ce" + integrity sha512-8Q3veQEDGe14dTYuwagbRtwxQDnytyg1JFu4/HwEMETeofocrB0U0ejBJIXoeG/t2oXZ8kzCyI0ZZfbT80VFNQ== dependencies: "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-plugin-utils" "^7.22.5" @@ -975,15 +595,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-class-properties@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz#97a56e31ad8c9dc06a0b3710ce7803d5a48cca77" - integrity sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-class-properties@^7.23.3": +"@babel/plugin-transform-class-properties@^7.22.5", "@babel/plugin-transform-class-properties@^7.23.3": version "7.23.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz#35c377db11ca92a785a718b6aa4e3ed1eb65dc48" integrity sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg== @@ -1000,16 +612,15 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-transform-classes@^7.23.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.5.tgz#e7a75f815e0c534cc4c9a39c56636c84fc0d64f2" - integrity sha512-jvOTR4nicqYC9yzOHIhXG5emiFEOpappSJAl73SDSEDcybD+Puuze8Tnpb9p9qEyYup24tq891gkaygIFvWDqg== +"@babel/plugin-transform-classes@^7.23.8": + version "7.23.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.8.tgz#d08ae096c240347badd68cdf1b6d1624a6435d92" + integrity sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-compilation-targets" "^7.23.6" "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-function-name" "^7.23.0" - "@babel/helper-optimise-call-expression" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-replace-supers" "^7.22.20" "@babel/helper-split-export-declaration" "^7.22.6" @@ -1132,16 +743,7 @@ "@babel/helper-module-transforms" "^7.23.3" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-modules-commonjs@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.0.tgz#b3dba4757133b2762c00f4f94590cf6d52602481" - integrity sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ== - dependencies: - "@babel/helper-module-transforms" "^7.23.0" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-simple-access" "^7.22.5" - -"@babel/plugin-transform-modules-commonjs@^7.23.3": +"@babel/plugin-transform-modules-commonjs@^7.23.0", "@babel/plugin-transform-modules-commonjs@^7.23.3": version "7.23.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz#661ae831b9577e52be57dd8356b734f9700b53b4" integrity sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA== @@ -1150,10 +752,10 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-simple-access" "^7.22.5" -"@babel/plugin-transform-modules-systemjs@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.3.tgz#fa7e62248931cb15b9404f8052581c302dd9de81" - integrity sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ== +"@babel/plugin-transform-modules-systemjs@^7.23.9": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.9.tgz#105d3ed46e4a21d257f83a2f9e2ee4203ceda6be" + integrity sha512-KDlPRM6sLo4o1FkiSlXoAa8edLXFsKKIda779fbLrvmeuc3itnjCtaO6RrtoaANsIJANj+Vk1zqbZIMhkCAHVw== dependencies: "@babel/helper-hoist-variables" "^7.22.5" "@babel/helper-module-transforms" "^7.23.3" @@ -1183,15 +785,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-nullish-coalescing-operator@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz#debef6c8ba795f5ac67cd861a81b744c5d38d9fc" - integrity sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - -"@babel/plugin-transform-nullish-coalescing-operator@^7.23.4": +"@babel/plugin-transform-nullish-coalescing-operator@^7.22.11", "@babel/plugin-transform-nullish-coalescing-operator@^7.23.4": version "7.23.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz#45556aad123fc6e52189ea749e33ce090637346e" integrity sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA== @@ -1234,16 +828,7 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-transform-optional-chaining@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.0.tgz#73ff5fc1cf98f542f09f29c0631647d8ad0be158" - integrity sha512-sBBGXbLJjxTzLBF5rFWaikMnOGOk/BmK6vVByIdEggZ7Vn6CvWXZyRkkLFK6WE0IF8jSliyOkUN6SScFgzCM0g== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - -"@babel/plugin-transform-optional-chaining@^7.23.3", "@babel/plugin-transform-optional-chaining@^7.23.4": +"@babel/plugin-transform-optional-chaining@^7.23.0", "@babel/plugin-transform-optional-chaining@^7.23.3", "@babel/plugin-transform-optional-chaining@^7.23.4": version "7.23.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz#6acf61203bdfc4de9d4e52e64490aeb3e52bd017" integrity sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA== @@ -1259,15 +844,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-private-methods@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz#21c8af791f76674420a147ae62e9935d790f8722" - integrity sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-private-methods@^7.23.3": +"@babel/plugin-transform-private-methods@^7.22.5", "@babel/plugin-transform-private-methods@^7.23.3": version "7.23.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz#b2d7a3c97e278bfe59137a978d53b2c2e038c0e4" integrity sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g== @@ -1293,18 +870,18 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-react-jsx-self@^7.18.6": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.21.0.tgz#ec98d4a9baafc5a1eb398da4cf94afbb40254a54" - integrity sha512-f/Eq+79JEu+KUANFks9UZCcvydOOGMgF7jBrcwjHa5jTZD8JivnhCJYvmlhR/WTXBWonDExPoW0eO/CR4QJirA== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.23.3.tgz#ed3e7dadde046cce761a8e3cf003a13d1a7972d9" + integrity sha512-qXRvbeKDSfwnlJnanVRp0SfuWE5DQhwQr5xtLBzp56Wabyo+4CMosF6Kfp+eOD/4FYpql64XVJ2W0pVLlJZxOQ== dependencies: - "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-react-jsx-source@^7.19.6": - version "7.19.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.19.6.tgz#88578ae8331e5887e8ce28e4c9dc83fb29da0b86" - integrity sha512-RpAi004QyMNisst/pvSanoRdJ4q+jMCWyk9zdw/CyLB9j8RXEahodR6l2GyttDRyEVWZtbN+TpLiHJ3t34LbsQ== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.23.3.tgz#03527006bdc8775247a78643c51d4e715fe39a3e" + integrity sha512-91RS0MDnAWDNvGC6Wio5XYkyWI39FMFO+JK9+4AlgaTH+yWwVTsw7/sn6LK0lH7c5F+TFkpv/3LfCJ1Ydwof/g== dependencies: - "@babel/helper-plugin-utils" "^7.19.0" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-regenerator@^7.23.3": version "7.23.3" @@ -1399,9 +976,9 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/preset-env@^7.23.2": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.23.6.tgz#ad0ea799d5a3c07db5b9a172819bbd444092187a" - integrity sha512-2XPn/BqKkZCpzYhUUNZ1ssXw7DcXfKQEjv/uXZUXgaebCMYmkEsfZ2yY+vv+xtXv50WmL5SGhyB6/xsWxIvvOQ== + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.23.9.tgz#beace3b7994560ed6bf78e4ae2073dff45387669" + integrity sha512-3kBGTNBBk9DQiPoXYS0g0BYlwTQYUTifqgKTjxUwEUkduRT2QOa0FPGBJ+NROQhGyYO5BuTJwGvBnqKDykac6A== dependencies: "@babel/compat-data" "^7.23.5" "@babel/helper-compilation-targets" "^7.23.6" @@ -1409,7 +986,7 @@ "@babel/helper-validator-option" "^7.23.5" "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.23.3" "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.23.3" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.23.3" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.23.7" "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" @@ -1430,13 +1007,13 @@ "@babel/plugin-syntax-top-level-await" "^7.14.5" "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" "@babel/plugin-transform-arrow-functions" "^7.23.3" - "@babel/plugin-transform-async-generator-functions" "^7.23.4" + "@babel/plugin-transform-async-generator-functions" "^7.23.9" "@babel/plugin-transform-async-to-generator" "^7.23.3" "@babel/plugin-transform-block-scoped-functions" "^7.23.3" "@babel/plugin-transform-block-scoping" "^7.23.4" "@babel/plugin-transform-class-properties" "^7.23.3" "@babel/plugin-transform-class-static-block" "^7.23.4" - "@babel/plugin-transform-classes" "^7.23.5" + "@babel/plugin-transform-classes" "^7.23.8" "@babel/plugin-transform-computed-properties" "^7.23.3" "@babel/plugin-transform-destructuring" "^7.23.3" "@babel/plugin-transform-dotall-regex" "^7.23.3" @@ -1452,7 +1029,7 @@ "@babel/plugin-transform-member-expression-literals" "^7.23.3" "@babel/plugin-transform-modules-amd" "^7.23.3" "@babel/plugin-transform-modules-commonjs" "^7.23.3" - "@babel/plugin-transform-modules-systemjs" "^7.23.3" + "@babel/plugin-transform-modules-systemjs" "^7.23.9" "@babel/plugin-transform-modules-umd" "^7.23.3" "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" "@babel/plugin-transform-new-target" "^7.23.3" @@ -1478,9 +1055,9 @@ "@babel/plugin-transform-unicode-regex" "^7.23.3" "@babel/plugin-transform-unicode-sets-regex" "^7.23.3" "@babel/preset-modules" "0.1.6-no-external-plugins" - babel-plugin-polyfill-corejs2 "^0.4.6" - babel-plugin-polyfill-corejs3 "^0.8.5" - babel-plugin-polyfill-regenerator "^0.5.3" + babel-plugin-polyfill-corejs2 "^0.4.8" + babel-plugin-polyfill-corejs3 "^0.9.0" + babel-plugin-polyfill-regenerator "^0.5.5" core-js-compat "^3.31.0" semver "^6.3.1" @@ -1514,14 +1091,14 @@ "@babel/plugin-transform-typescript" "^7.23.3" "@babel/register@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.22.15.tgz#c2c294a361d59f5fa7bcc8b97ef7319c32ecaec7" - integrity sha512-V3Q3EqoQdn65RCgTLwauZaTfd1ShhwPmbBv+1dkZV/HpCGMKVyn6oFcRlI7RaKqiDQjX2Qd3AuoEguBgdjIKlg== + version "7.23.7" + resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.23.7.tgz#485a5e7951939d21304cae4af1719fdb887bc038" + integrity sha512-EjJeB6+kvpk+Y5DAkEAmbOBEFkh9OASx0huoEkqYTFxAZHzOAX2Oh5uwAUuL2rUddqfM0SA+KPXV2TbzoZ2kvQ== dependencies: clone-deep "^4.0.1" find-cache-dir "^2.0.0" make-dir "^2.1.0" - pirates "^4.0.5" + pirates "^4.0.6" source-map-support "^0.5.16" "@babel/regjsgen@^0.8.0": @@ -1529,70 +1106,23 @@ resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== -"@babel/runtime-corejs3@^7.10.2": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.21.0.tgz#6e4939d9d9789ff63e2dc58e88f13a3913a24eba" - integrity sha512-TDD4UJzos3JJtM+tHX+w2Uc+KWj7GV+VKKFdMVd2Rx8sdA19hcc3P3AHFYd5LVOw+pYuSd5lICC3gm52B6Rwxw== - dependencies: - core-js-pure "^3.25.1" - regenerator-runtime "^0.13.11" - -"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.0", "@babel/runtime@^7.14.6", "@babel/runtime@^7.15.4", "@babel/runtime@^7.17.8", "@babel/runtime@^7.18.3", "@babel/runtime@^7.20.7", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.2", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.21.0.tgz#5b55c9d394e5fcf304909a8b00c07dc217b56673" - integrity sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw== - dependencies: - regenerator-runtime "^0.13.11" - -"@babel/runtime@^7.12.13": +"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.14.0", "@babel/runtime@^7.14.6", "@babel/runtime@^7.15.4", "@babel/runtime@^7.17.8", "@babel/runtime@^7.18.3", "@babel/runtime@^7.23.2", "@babel/runtime@^7.23.8", "@babel/runtime@^7.23.9", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.2", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": version "7.23.9" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.9.tgz#47791a15e4603bb5f905bc0753801cf21d6345f7" integrity sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw== dependencies: regenerator-runtime "^0.14.0" -"@babel/runtime@^7.13.10": - version "7.23.2" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.2.tgz#062b0ac103261d68a966c4c7baf2ae3e62ec3885" - integrity sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg== - dependencies: - regenerator-runtime "^0.14.0" - -"@babel/runtime@^7.22.10": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.11.tgz#7a9ba3bbe406ad6f9e8dd4da2ece453eb23a77a4" - integrity sha512-ee7jVNlWN09+KftVOu9n7S8gQzD/Z6hN/I8VBRXW4P1+Xe7kJGXMwu8vds4aGIMHZnNbdpSWCfZZtinytpcAvA== - dependencies: - regenerator-runtime "^0.14.0" - -"@babel/template@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8" - integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw== - dependencies: - "@babel/code-frame" "^7.18.6" - "@babel/parser" "^7.20.7" - "@babel/types" "^7.20.7" - -"@babel/template@^7.21.9": - version "7.21.9" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.21.9.tgz#bf8dad2859130ae46088a99c1f265394877446fb" - integrity sha512-MK0X5k8NKOuWRamiEfc3KEJiHMTkGZNUjzMipqCGDDc6ijRl/B7RGSKVGncu4Ro/HdyzzY6cmoXuKI2Gffk7vQ== - dependencies: - "@babel/code-frame" "^7.21.4" - "@babel/parser" "^7.21.9" - "@babel/types" "^7.21.5" - -"@babel/template@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" - integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== +"@babel/template@^7.22.15", "@babel/template@^7.23.9": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.23.9.tgz#f881d0487cba2828d3259dcb9ef5005a9731011a" + integrity sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA== dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/parser" "^7.22.15" - "@babel/types" "^7.22.15" + "@babel/code-frame" "^7.23.5" + "@babel/parser" "^7.23.9" + "@babel/types" "^7.23.9" -"@babel/traverse@^7.18.9", "@babel/traverse@^7.21.0", "@babel/traverse@^7.21.2", "@babel/traverse@^7.22.1", "@babel/traverse@^7.23.2", "@babel/traverse@^7.23.3", "@babel/traverse@^7.23.6", "@babel/traverse@^7.7.0": +"@babel/traverse@^7.18.9", "@babel/traverse@^7.23.2", "@babel/traverse@^7.23.3", "@babel/traverse@^7.23.9", "@babel/traverse@^7.7.0": version "7.23.9" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.9.tgz#2f9d6aead6b564669394c5ce0f9302bb65b9d950" integrity sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg== @@ -1608,61 +1138,7 @@ debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.20.2", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.2", "@babel/types@^7.3.0", "@babel/types@^7.4.4", "@babel/types@^7.7.0": - version "7.21.2" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.21.2.tgz#92246f6e00f91755893c2876ad653db70c8310d1" - integrity sha512-3wRZSs7jiFaB8AjxiiD+VqN5DTG2iRvJGQ+qYFrs/654lg6kGTQWIOFjlBo5RaXuAZjBmP3+OQH4dmhqiiyYxw== - dependencies: - "@babel/helper-string-parser" "^7.19.4" - "@babel/helper-validator-identifier" "^7.19.1" - to-fast-properties "^2.0.0" - -"@babel/types@^7.21.3", "@babel/types@^7.21.5", "@babel/types@^7.22.0", "@babel/types@^7.22.3": - version "7.22.4" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.4.tgz#56a2653ae7e7591365dabf20b76295410684c071" - integrity sha512-Tx9x3UBHTTsMSW85WB2kphxYQVvrZ/t1FxD88IpSgIjiUJlCm9z+xWIDwyo1vffTwSqteqyznB8ZE9vYYk16zA== - dependencies: - "@babel/helper-string-parser" "^7.21.5" - "@babel/helper-validator-identifier" "^7.19.1" - to-fast-properties "^2.0.0" - -"@babel/types@^7.21.4": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.21.4.tgz#2d5d6bb7908699b3b416409ffd3b5daa25b030d4" - integrity sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA== - dependencies: - "@babel/helper-string-parser" "^7.19.4" - "@babel/helper-validator-identifier" "^7.19.1" - to-fast-properties "^2.0.0" - -"@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.0.tgz#8c1f020c9df0e737e4e247c0619f58c68458aaeb" - integrity sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg== - dependencies: - "@babel/helper-string-parser" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.20" - to-fast-properties "^2.0.0" - -"@babel/types@^7.23.3": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.5.tgz#48d730a00c95109fa4393352705954d74fb5b602" - integrity sha512-ON5kSOJwVO6xXVRTvOI0eOnWe7VdUcIpsovGo9U/Br4Ie4UVFQTboO2cYnDhAGU6Fp+UxSiT+pMft0SMHfuq6w== - dependencies: - "@babel/helper-string-parser" "^7.23.4" - "@babel/helper-validator-identifier" "^7.22.20" - to-fast-properties "^2.0.0" - -"@babel/types@^7.23.6": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.6.tgz#be33fdb151e1f5a56877d704492c240fc71c7ccd" - integrity sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg== - dependencies: - "@babel/helper-string-parser" "^7.23.4" - "@babel/helper-validator-identifier" "^7.22.20" - to-fast-properties "^2.0.0" - -"@babel/types@^7.23.9": +"@babel/types@^7.0.0", "@babel/types@^7.18.9", "@babel/types@^7.20.7", "@babel/types@^7.21.3", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6", "@babel/types@^7.23.9", "@babel/types@^7.4.4", "@babel/types@^7.7.0": version "7.23.9" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.9.tgz#1dd7b59a9a2b5c87f8b41e52770b5ecbf492e002" integrity sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q== @@ -1688,10 +1164,15 @@ dependencies: promise-polyfill "^8.1.3" -"@braintree/browser-detection@1.14.0", "@braintree/browser-detection@^1.12.1": - version "1.14.0" - resolved "https://registry.yarnpkg.com/@braintree/browser-detection/-/browser-detection-1.14.0.tgz#d1b397b00ccbc7cac12f6cec27c0a413d740332a" - integrity sha512-OsqU+28RhNvSw8Y5JEiUHUrAyn4OpYazFkjSJe8ZVZfkAaRXQc6hsV38MMEpIlkPMig+A68buk/diY+0O8/dMQ== +"@braintree/browser-detection@1.17.1": + version "1.17.1" + resolved "https://registry.yarnpkg.com/@braintree/browser-detection/-/browser-detection-1.17.1.tgz#d151c409dc7245e9307b05f3a06ede254e0f5d1e" + integrity sha512-Mk7jauyp9pD14BTRS7otoy9dqIJGb3Oy0XtxKM/adGD9i9MAuCjH5uRZMyW2iVmJQTaA/PLlWdG7eSDyMWMc8Q== + +"@braintree/browser-detection@^1.12.1": + version "1.17.2" + resolved "https://registry.yarnpkg.com/@braintree/browser-detection/-/browser-detection-1.17.2.tgz#bf4edf97a90897aaa0956869316e50be0c4fbcb5" + integrity sha512-DdEX09uYs6kHwGt4cbONlxlta/0hfmrDUncP6EtfZxFVywNF9LeRUyon+2LihJTbqgSnGqz9ZL450hkqBd6oSw== "@braintree/event-emitter@0.4.1": version "0.4.1" @@ -1708,10 +1189,10 @@ resolved "https://registry.yarnpkg.com/@braintree/iframer/-/iframer-1.1.0.tgz#7e59b975c2a48bd92616f653367a5214fc2ddd4b" integrity sha512-tVpr7U6u6bqeQlHreEjYMNtnHX62vLnNWziY2kQLqkWhvusPuY5DfuGEIPpWqsd+V/a1slyTQaxK6HWTlH6A/Q== -"@braintree/sanitize-url@6.0.2": - version "6.0.2" - resolved "https://registry.yarnpkg.com/@braintree/sanitize-url/-/sanitize-url-6.0.2.tgz#6110f918d273fe2af8ea1c4398a88774bb9fc12f" - integrity sha512-Tbsj02wXCbqGmzdnXNk0SOF19ChhRU70BsroIi4Pm6Ehp56in6vch94mfbdQ17DozxkL3BAVjbZ4Qc1a0HFRAg== +"@braintree/sanitize-url@6.0.4": + version "6.0.4" + resolved "https://registry.yarnpkg.com/@braintree/sanitize-url/-/sanitize-url-6.0.4.tgz#923ca57e173c6b232bbbb07347b1be982f03e783" + integrity sha512-s3jaWicZd0pkP0jf5ysyHUI/RE7MHos6qlToFcGWXVp+ykHOy77OUMrfbgJ9it2C5bow7OIQwYYaHjk9XlBQ2A== "@braintree/uuid@0.1.0", "@braintree/uuid@^0.1.0": version "0.1.0" @@ -1789,16 +1270,16 @@ source-map "^0.5.7" stylis "4.2.0" -"@emotion/cache@*": - version "11.10.5" - resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.10.5.tgz#c142da9351f94e47527ed458f7bbbbe40bb13c12" - integrity sha512-dGYHWyzTdmK+f2+EnIGBpkz1lKc4Zbj2KHd4cX3Wi8/OWr5pKslNjc3yABKH4adRGCvSX4VDC0i04mrrq0aiRA== +"@emotion/cache@*", "@emotion/cache@^11.11.0": + version "11.11.0" + resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.11.0.tgz#809b33ee6b1cb1a625fef7a45bc568ccd9b8f3ff" + integrity sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ== dependencies: - "@emotion/memoize" "^0.8.0" - "@emotion/sheet" "^1.2.1" - "@emotion/utils" "^1.2.0" - "@emotion/weak-memoize" "^0.3.0" - stylis "4.1.3" + "@emotion/memoize" "^0.8.1" + "@emotion/sheet" "^1.2.2" + "@emotion/utils" "^1.2.1" + "@emotion/weak-memoize" "^0.3.1" + stylis "4.2.0" "@emotion/cache@^10.0.27", "@emotion/cache@^10.0.9": version "10.0.29" @@ -1810,17 +1291,6 @@ "@emotion/utils" "0.11.3" "@emotion/weak-memoize" "0.2.5" -"@emotion/cache@^11.11.0": - version "11.11.0" - resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.11.0.tgz#809b33ee6b1cb1a625fef7a45bc568ccd9b8f3ff" - integrity sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ== - dependencies: - "@emotion/memoize" "^0.8.1" - "@emotion/sheet" "^1.2.2" - "@emotion/utils" "^1.2.1" - "@emotion/weak-memoize" "^0.3.1" - stylis "4.2.0" - "@emotion/core@^10.0.9": version "10.3.1" resolved "https://registry.yarnpkg.com/@emotion/core/-/core-10.3.1.tgz#4021b6d8b33b3304d48b0bb478485e7d7421c69d" @@ -1847,11 +1317,6 @@ resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.8.0.tgz#bbbff68978fefdbe68ccb533bc8cbe1d1afb5413" integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow== -"@emotion/hash@^0.9.0": - version "0.9.0" - resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.0.tgz#c5153d50401ee3c027a57a177bc269b16d889cb7" - integrity sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ== - "@emotion/hash@^0.9.1": version "0.9.1" resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.1.tgz#4ffb0055f7ef676ebc3a5a91fb621393294e2f43" @@ -1869,39 +1334,34 @@ resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.4.tgz#19bf0f5af19149111c40d98bb0cf82119f5d9eeb" integrity sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw== -"@emotion/memoize@^0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.0.tgz#f580f9beb67176fa57aae70b08ed510e1b18980f" - integrity sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA== - "@emotion/memoize@^0.8.1": version "0.8.1" resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.1.tgz#c1ddb040429c6d21d38cc945fe75c818cfb68e17" integrity sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA== "@emotion/react@^11.11.1": - version "11.11.1" - resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.11.1.tgz#b2c36afac95b184f73b08da8c214fdf861fa4157" - integrity sha512-5mlW1DquU5HaxjLkfkGN1GA/fvVGdyHURRiX/0FHl2cfIfRxSOfmxEH5YS43edp0OldZrZ+dkBKbngxcNCdZvA== + version "11.11.3" + resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.11.3.tgz#96b855dc40a2a55f52a72f518a41db4f69c31a25" + integrity sha512-Cnn0kuq4DoONOMcnoVsTOR8E+AdnKFf//6kUWc4LCdnxj31pZWn7rIULd6Y7/Js1PiPHzn7SKCM9vB/jBni8eA== dependencies: "@babel/runtime" "^7.18.3" "@emotion/babel-plugin" "^11.11.0" "@emotion/cache" "^11.11.0" - "@emotion/serialize" "^1.1.2" + "@emotion/serialize" "^1.1.3" "@emotion/use-insertion-effect-with-fallbacks" "^1.0.1" "@emotion/utils" "^1.2.1" "@emotion/weak-memoize" "^0.3.1" hoist-non-react-statics "^3.3.1" -"@emotion/serialize@*": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.1.1.tgz#0595701b1902feded8a96d293b26be3f5c1a5cf0" - integrity sha512-Zl/0LFggN7+L1liljxXdsVSVlg6E/Z/olVWpfxUTxOAmi8NU7YoeWeLfi1RmnB2TATHoaWwIBRoL+FvAJiTUQA== +"@emotion/serialize@*", "@emotion/serialize@^1.1.2", "@emotion/serialize@^1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.1.3.tgz#84b77bfcfe3b7bb47d326602f640ccfcacd5ffb0" + integrity sha512-iD4D6QVZFDhcbH0RAG1uVu1CwVLMWUkCvAqqlewO/rxf8+87yIBAlt4+AxMiiKPLs5hFc0owNk/sLLAOROw3cA== dependencies: - "@emotion/hash" "^0.9.0" - "@emotion/memoize" "^0.8.0" - "@emotion/unitless" "^0.8.0" - "@emotion/utils" "^1.2.0" + "@emotion/hash" "^0.9.1" + "@emotion/memoize" "^0.8.1" + "@emotion/unitless" "^0.8.1" + "@emotion/utils" "^1.2.1" csstype "^3.0.2" "@emotion/serialize@^0.11.15", "@emotion/serialize@^0.11.16": @@ -1915,27 +1375,11 @@ "@emotion/utils" "0.11.3" csstype "^2.5.7" -"@emotion/serialize@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.1.2.tgz#017a6e4c9b8a803bd576ff3d52a0ea6fa5a62b51" - integrity sha512-zR6a/fkFP4EAcCMQtLOhIgpprZOwNmCldtpaISpvz348+DP4Mz8ZoKaGGCQpbzepNIUWbq4w6hNZkwDyKoS+HA== - dependencies: - "@emotion/hash" "^0.9.1" - "@emotion/memoize" "^0.8.1" - "@emotion/unitless" "^0.8.1" - "@emotion/utils" "^1.2.1" - csstype "^3.0.2" - "@emotion/sheet@0.9.4": version "0.9.4" resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-0.9.4.tgz#894374bea39ec30f489bbfc3438192b9774d32e5" integrity sha512-zM9PFmgVSqBw4zL101Q0HrBVTGmpAxFZH/pYx/cjJT5advXguvcgjHFTCaIO3enL/xr89vK2bh0Mfyj9aa0ANA== -"@emotion/sheet@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.2.1.tgz#0767e0305230e894897cadb6c8df2c51e61a6c2c" - integrity sha512-zxRBwl93sHMsOj4zs+OslQKg/uhF38MB+OMKoCrVuS0nyTkqnau+BM3WGEoOptg9Oz45T/aIGs1qbVAsEFo3nA== - "@emotion/sheet@^1.2.2": version "1.2.2" resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.2.2.tgz#d58e788ee27267a14342303e1abb3d508b6d0fec" @@ -1963,275 +1407,260 @@ resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed" integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg== -"@emotion/unitless@^0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.8.0.tgz#a4a36e9cbdc6903737cd20d38033241e1b8833db" - integrity sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw== - "@emotion/unitless@^0.8.1": version "0.8.1" resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.8.1.tgz#182b5a4704ef8ad91bde93f7a860a88fd92c79a3" integrity sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ== -"@emotion/use-insertion-effect-with-fallbacks@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.0.tgz#ffadaec35dbb7885bd54de3fa267ab2f860294df" - integrity sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A== - -"@emotion/use-insertion-effect-with-fallbacks@^1.0.1": +"@emotion/use-insertion-effect-with-fallbacks@^1.0.0", "@emotion/use-insertion-effect-with-fallbacks@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz#08de79f54eb3406f9daaf77c76e35313da963963" integrity sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw== -"@emotion/utils@*", "@emotion/utils@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.2.0.tgz#9716eaccbc6b5ded2ea5a90d65562609aab0f561" - integrity sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw== +"@emotion/utils@*", "@emotion/utils@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.2.1.tgz#bbab58465738d31ae4cb3dbb6fc00a5991f755e4" + integrity sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg== "@emotion/utils@0.11.3": version "0.11.3" resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-0.11.3.tgz#a759863867befa7e583400d322652a3f44820924" integrity sha512-0o4l6pZC+hI88+bzuaX/6BgOvQVhbt2PfmxauVaYOGgbsAw14wdKyvMCZXnsnsHys94iadcF+RG/wZyx6+ZZBw== -"@emotion/utils@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.2.1.tgz#bbab58465738d31ae4cb3dbb6fc00a5991f755e4" - integrity sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg== - "@emotion/weak-memoize@0.2.5": version "0.2.5" resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46" integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA== -"@emotion/weak-memoize@^0.3.0": - version "0.3.0" - resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.3.0.tgz#ea89004119dc42db2e1dba0f97d553f7372f6fcb" - integrity sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg== - "@emotion/weak-memoize@^0.3.1": version "0.3.1" resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz#d0fce5d07b0620caa282b5131c297bb60f9d87e6" integrity sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww== +"@esbuild/aix-ppc64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz#d1bc06aedb6936b3b6d313bf809a5a40387d2b7f" + integrity sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA== + "@esbuild/android-arm64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz#984b4f9c8d0377443cc2dfcef266d02244593622" integrity sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ== -"@esbuild/android-arm64@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.8.tgz#fb7130103835b6d43ea499c3f30cfb2b2ed58456" - integrity sha512-B8JbS61bEunhfx8kasogFENgQfr/dIp+ggYXwTqdbMAgGDhRa3AaPpQMuQU0rNxDLECj6FhDzk1cF9WHMVwrtA== +"@esbuild/android-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz#7ad65a36cfdb7e0d429c353e00f680d737c2aed4" + integrity sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA== "@esbuild/android-arm@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.18.20.tgz#fedb265bc3a589c84cc11f810804f234947c3682" integrity sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw== -"@esbuild/android-arm@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.8.tgz#b46e4d9e984e6d6db6c4224d72c86b7757e35bcb" - integrity sha512-31E2lxlGM1KEfivQl8Yf5aYU/mflz9g06H6S15ITUFQueMFtFjESRMoDSkvMo8thYvLBax+VKTPlpnx+sPicOA== +"@esbuild/android-arm@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.12.tgz#b0c26536f37776162ca8bde25e42040c203f2824" + integrity sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w== "@esbuild/android-x64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.18.20.tgz#35cf419c4cfc8babe8893d296cd990e9e9f756f2" integrity sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg== -"@esbuild/android-x64@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.8.tgz#a13db9441b5a4f4e4fec4a6f8ffacfea07888db7" - integrity sha512-rdqqYfRIn4jWOp+lzQttYMa2Xar3OK9Yt2fhOhzFXqg0rVWEfSclJvZq5fZslnz6ypHvVf3CT7qyf0A5pM682A== +"@esbuild/android-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.12.tgz#cb13e2211282012194d89bf3bfe7721273473b3d" + integrity sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew== "@esbuild/darwin-arm64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz#08172cbeccf95fbc383399a7f39cfbddaeb0d7c1" integrity sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA== -"@esbuild/darwin-arm64@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.8.tgz#49f5718d36541f40dd62bfdf84da9c65168a0fc2" - integrity sha512-RQw9DemMbIq35Bprbboyf8SmOr4UXsRVxJ97LgB55VKKeJOOdvsIPy0nFyF2l8U+h4PtBx/1kRf0BelOYCiQcw== +"@esbuild/darwin-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz#cbee41e988020d4b516e9d9e44dd29200996275e" + integrity sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g== "@esbuild/darwin-x64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz#d70d5790d8bf475556b67d0f8b7c5bdff053d85d" integrity sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ== -"@esbuild/darwin-x64@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.8.tgz#75c5c88371eea4bfc1f9ecfd0e75104c74a481ac" - integrity sha512-3sur80OT9YdeZwIVgERAysAbwncom7b4bCI2XKLjMfPymTud7e/oY4y+ci1XVp5TfQp/bppn7xLw1n/oSQY3/Q== +"@esbuild/darwin-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz#e37d9633246d52aecf491ee916ece709f9d5f4cd" + integrity sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A== "@esbuild/freebsd-arm64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz#98755cd12707f93f210e2494d6a4b51b96977f54" integrity sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw== -"@esbuild/freebsd-arm64@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.8.tgz#9d7259fea4fd2b5f7437b52b542816e89d7c8575" - integrity sha512-WAnPJSDattvS/XtPCTj1tPoTxERjcTpH6HsMr6ujTT+X6rylVe8ggxk8pVxzf5U1wh5sPODpawNicF5ta/9Tmw== +"@esbuild/freebsd-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz#1ee4d8b682ed363b08af74d1ea2b2b4dbba76487" + integrity sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA== "@esbuild/freebsd-x64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz#c1eb2bff03915f87c29cece4c1a7fa1f423b066e" integrity sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ== -"@esbuild/freebsd-x64@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.8.tgz#abac03e1c4c7c75ee8add6d76ec592f46dbb39e3" - integrity sha512-ICvZyOplIjmmhjd6mxi+zxSdpPTKFfyPPQMQTK/w+8eNK6WV01AjIztJALDtwNNfFhfZLux0tZLC+U9nSyA5Zg== +"@esbuild/freebsd-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz#37a693553d42ff77cd7126764b535fb6cc28a11c" + integrity sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg== "@esbuild/linux-arm64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz#bad4238bd8f4fc25b5a021280c770ab5fc3a02a0" integrity sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA== -"@esbuild/linux-arm64@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.8.tgz#c577932cf4feeaa43cb9cec27b89cbe0df7d9098" - integrity sha512-z1zMZivxDLHWnyGOctT9JP70h0beY54xDDDJt4VpTX+iwA77IFsE1vCXWmprajJGa+ZYSqkSbRQ4eyLCpCmiCQ== +"@esbuild/linux-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz#be9b145985ec6c57470e0e051d887b09dddb2d4b" + integrity sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA== "@esbuild/linux-arm@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz#3e617c61f33508a27150ee417543c8ab5acc73b0" integrity sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg== -"@esbuild/linux-arm@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.8.tgz#d6014d8b98b5cbc96b95dad3d14d75bb364fdc0f" - integrity sha512-H4vmI5PYqSvosPaTJuEppU9oz1dq2A7Mr2vyg5TF9Ga+3+MGgBdGzcyBP7qK9MrwFQZlvNyJrvz6GuCaj3OukQ== +"@esbuild/linux-arm@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz#207ecd982a8db95f7b5279207d0ff2331acf5eef" + integrity sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w== "@esbuild/linux-ia32@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz#699391cccba9aee6019b7f9892eb99219f1570a7" integrity sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA== -"@esbuild/linux-ia32@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.8.tgz#2379a0554307d19ac4a6cdc15b08f0ea28e7a40d" - integrity sha512-1a8suQiFJmZz1khm/rDglOc8lavtzEMRo0v6WhPgxkrjcU0LkHj+TwBrALwoz/OtMExvsqbbMI0ChyelKabSvQ== +"@esbuild/linux-ia32@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz#d0d86b5ca1562523dc284a6723293a52d5860601" + integrity sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA== "@esbuild/linux-loong64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz#e6fccb7aac178dd2ffb9860465ac89d7f23b977d" integrity sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg== -"@esbuild/linux-loong64@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.8.tgz#e2a5bbffe15748b49356a6cd7b2d5bf60c5a7123" - integrity sha512-fHZWS2JJxnXt1uYJsDv9+b60WCc2RlvVAy1F76qOLtXRO+H4mjt3Tr6MJ5l7Q78X8KgCFudnTuiQRBhULUyBKQ== +"@esbuild/linux-loong64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz#9a37f87fec4b8408e682b528391fa22afd952299" + integrity sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA== "@esbuild/linux-mips64el@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz#eeff3a937de9c2310de30622a957ad1bd9183231" integrity sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ== -"@esbuild/linux-mips64el@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.8.tgz#1359331e6f6214f26f4b08db9b9df661c57cfa24" - integrity sha512-Wy/z0EL5qZYLX66dVnEg9riiwls5IYnziwuju2oUiuxVc+/edvqXa04qNtbrs0Ukatg5HEzqT94Zs7J207dN5Q== +"@esbuild/linux-mips64el@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz#4ddebd4e6eeba20b509d8e74c8e30d8ace0b89ec" + integrity sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w== "@esbuild/linux-ppc64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz#2f7156bde20b01527993e6881435ad79ba9599fb" integrity sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA== -"@esbuild/linux-ppc64@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.8.tgz#9ba436addc1646dc89dae48c62d3e951ffe70951" - integrity sha512-ETaW6245wK23YIEufhMQ3HSeHO7NgsLx8gygBVldRHKhOlD1oNeNy/P67mIh1zPn2Hr2HLieQrt6tWrVwuqrxg== +"@esbuild/linux-ppc64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz#adb67dadb73656849f63cd522f5ecb351dd8dee8" + integrity sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg== "@esbuild/linux-riscv64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz#6628389f210123d8b4743045af8caa7d4ddfc7a6" integrity sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A== -"@esbuild/linux-riscv64@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.8.tgz#fbcf0c3a0b20f40b5fc31c3b7695f0769f9de66b" - integrity sha512-T2DRQk55SgoleTP+DtPlMrxi/5r9AeFgkhkZ/B0ap99zmxtxdOixOMI570VjdRCs9pE4Wdkz7JYrsPvsl7eESg== +"@esbuild/linux-riscv64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz#11bc0698bf0a2abf8727f1c7ace2112612c15adf" + integrity sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg== "@esbuild/linux-s390x@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz#255e81fb289b101026131858ab99fba63dcf0071" integrity sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ== -"@esbuild/linux-s390x@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.8.tgz#989e8a05f7792d139d5564ffa7ff898ac6f20a4a" - integrity sha512-NPxbdmmo3Bk7mbNeHmcCd7R7fptJaczPYBaELk6NcXxy7HLNyWwCyDJ/Xx+/YcNH7Im5dHdx9gZ5xIwyliQCbg== +"@esbuild/linux-s390x@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz#e86fb8ffba7c5c92ba91fc3b27ed5a70196c3cc8" + integrity sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg== "@esbuild/linux-x64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz#c7690b3417af318a9b6f96df3031a8865176d338" integrity sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w== -"@esbuild/linux-x64@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.8.tgz#b187295393a59323397fe5ff51e769ec4e72212b" - integrity sha512-lytMAVOM3b1gPypL2TRmZ5rnXl7+6IIk8uB3eLsV1JwcizuolblXRrc5ShPrO9ls/b+RTp+E6gbsuLWHWi2zGg== +"@esbuild/linux-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz#5f37cfdc705aea687dfe5dfbec086a05acfe9c78" + integrity sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg== "@esbuild/netbsd-x64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz#30e8cd8a3dded63975e2df2438ca109601ebe0d1" integrity sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A== -"@esbuild/netbsd-x64@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.8.tgz#c1ec0e24ea82313cb1c7bae176bd5acd5bde7137" - integrity sha512-hvWVo2VsXz/8NVt1UhLzxwAfo5sioj92uo0bCfLibB0xlOmimU/DeAEsQILlBQvkhrGjamP0/el5HU76HAitGw== +"@esbuild/netbsd-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz#29da566a75324e0d0dd7e47519ba2f7ef168657b" + integrity sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA== "@esbuild/openbsd-x64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz#7812af31b205055874c8082ea9cf9ab0da6217ae" integrity sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg== -"@esbuild/openbsd-x64@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.8.tgz#0c5b696ac66c6d70cf9ee17073a581a28af9e18d" - integrity sha512-/7Y7u77rdvmGTxR83PgaSvSBJCC2L3Kb1M/+dmSIvRvQPXXCuC97QAwMugBNG0yGcbEGfFBH7ojPzAOxfGNkwQ== +"@esbuild/openbsd-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz#306c0acbdb5a99c95be98bdd1d47c916e7dc3ff0" + integrity sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw== "@esbuild/sunos-x64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz#d5c275c3b4e73c9b0ecd38d1ca62c020f887ab9d" integrity sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ== -"@esbuild/sunos-x64@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.8.tgz#2a697e1f77926ff09fcc457d8f29916d6cd48fb1" - integrity sha512-9Lc4s7Oi98GqFA4HzA/W2JHIYfnXbUYgekUP/Sm4BG9sfLjyv6GKKHKKVs83SMicBF2JwAX6A1PuOLMqpD001w== +"@esbuild/sunos-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz#0933eaab9af8b9b2c930236f62aae3fc593faf30" + integrity sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA== "@esbuild/win32-arm64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz#73bc7f5a9f8a77805f357fab97f290d0e4820ac9" integrity sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg== -"@esbuild/win32-arm64@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.8.tgz#ec029e62a2fca8c071842ecb1bc5c2dd20b066f1" - integrity sha512-rq6WzBGjSzihI9deW3fC2Gqiak68+b7qo5/3kmB6Gvbh/NYPA0sJhrnp7wgV4bNwjqM+R2AApXGxMO7ZoGhIJg== +"@esbuild/win32-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz#773bdbaa1971b36db2f6560088639ccd1e6773ae" + integrity sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A== "@esbuild/win32-ia32@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz#ec93cbf0ef1085cc12e71e0d661d20569ff42102" integrity sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g== -"@esbuild/win32-ia32@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.8.tgz#cbb9a3146bde64dc15543e48afe418c7a3214851" - integrity sha512-AIAbverbg5jMvJznYiGhrd3sumfwWs8572mIJL5NQjJa06P8KfCPWZQ0NwZbPQnbQi9OWSZhFVSUWjjIrn4hSw== +"@esbuild/win32-ia32@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz#000516cad06354cc84a73f0943a4aa690ef6fd67" + integrity sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ== "@esbuild/win32-x64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz#786c5f41f043b07afb1af37683d7c33668858f6d" integrity sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ== -"@esbuild/win32-x64@0.19.8": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.8.tgz#c8285183dbdb17008578dbacb6e22748709b4822" - integrity sha512-bfZ0cQ1uZs2PqpulNL5j/3w+GDhP36k1K5c38QdQg+Swy51jFZWWeIkteNsufkQxp986wnqRRsb/bHbY1WQ7TA== +"@esbuild/win32-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz#c57c8afbb4054a3ab8317591a0b7320360b444ae" + integrity sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA== "@eslint-community/eslint-utils@^4.2.0": version "4.4.0" @@ -2240,14 +1669,19 @@ dependencies: eslint-visitor-keys "^3.3.0" -"@eslint/eslintrc@^1.4.1": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.4.1.tgz#af58772019a2d271b7e2d4c23ff4ddcba3ccfb3e" - integrity sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA== +"@eslint-community/regexpp@^4.6.1": + version "4.10.0" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" + integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== + +"@eslint/eslintrc@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" + integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== dependencies: ajv "^6.12.4" debug "^4.3.2" - espree "^9.4.0" + espree "^9.6.0" globals "^13.19.0" ignore "^5.2.0" import-fresh "^3.2.1" @@ -2255,45 +1689,50 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" +"@eslint/js@8.56.0": + version "8.56.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.56.0.tgz#ef20350fec605a7f7035a01764731b2de0f3782b" + integrity sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A== + "@fal-works/esbuild-plugin-global-externals@^2.1.2": version "2.1.2" resolved "https://registry.yarnpkg.com/@fal-works/esbuild-plugin-global-externals/-/esbuild-plugin-global-externals-2.1.2.tgz#c05ed35ad82df8e6ac616c68b92c2282bd083ba4" integrity sha512-cEee/Z+I12mZcFJshKcCqC8tuX5hG3s+d+9nZ3LabqKF1vKdF41B92pJVCBggjAGORAeOzyyDDKrZwIkLffeOQ== -"@floating-ui/core@^1.4.1": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.4.1.tgz#0d633f4b76052668afb932492ac452f7ebe97f17" - integrity sha512-jk3WqquEJRlcyu7997NtR5PibI+y5bi+LS3hPmguVClypenMsCY3CBa3LAQnozRCtCrYWSEtAdiskpamuJRFOQ== +"@floating-ui/core@^1.6.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.6.0.tgz#fa41b87812a16bf123122bf945946bae3fdf7fc1" + integrity sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g== dependencies: - "@floating-ui/utils" "^0.1.1" + "@floating-ui/utils" "^0.2.1" -"@floating-ui/dom@^1.5.1": - version "1.5.1" - resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.5.1.tgz#88b70defd002fe851f17b4a25efb2d3c04d7a8d7" - integrity sha512-KwvVcPSXg6mQygvA1TjbN/gh///36kKtllIF8SUm0qpFj8+rvYrpvlYdL1JoA71SHpDqgSSdGOSoQ0Mp3uY5aw== +"@floating-ui/dom@^1.6.1": + version "1.6.1" + resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.6.1.tgz#d552e8444f77f2d88534372369b3771dc3a2fa5d" + integrity sha512-iA8qE43/H5iGozC3W0YSnVSW42Vh522yyM1gj+BqRwVsTNOyr231PsXDaV04yT39PsO0QL2QpbI/M0ZaLUQgRQ== dependencies: - "@floating-ui/core" "^1.4.1" - "@floating-ui/utils" "^0.1.1" + "@floating-ui/core" "^1.6.0" + "@floating-ui/utils" "^0.2.1" -"@floating-ui/react-dom@^2.0.0", "@floating-ui/react-dom@^2.0.1": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-2.0.2.tgz#fab244d64db08e6bed7be4b5fcce65315ef44d20" - integrity sha512-5qhlDvjaLmAst/rKb3VdlCinwTF4EYMiVxuuc/HVUjs46W0zgtbMmAZ1UTsDrRTxRmUEzl92mOtWbeeXL26lSQ== +"@floating-ui/react-dom@^2.0.0", "@floating-ui/react-dom@^2.0.8": + version "2.0.8" + resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-2.0.8.tgz#afc24f9756d1b433e1fe0d047c24bd4d9cefaa5d" + integrity sha512-HOdqOt3R3OGeTKidaLvJKcgg75S6tibQ3Tif4eyd91QnIJWr0NLvoXFpJA/j8HqkFSL68GDca9AuyWEHlhyClw== dependencies: - "@floating-ui/dom" "^1.5.1" + "@floating-ui/dom" "^1.6.1" -"@floating-ui/utils@^0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.1.1.tgz#1a5b1959a528e374e8037c4396c3e825d6cf4a83" - integrity sha512-m0G6wlnhm/AX0H12IOWtK8gASEMffnX08RtKkCgTdHb9JpHKGloI7icFfLg9ZmQeavcvR0PKmzxClyuFPSjKWw== +"@floating-ui/utils@^0.2.1": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.1.tgz#16308cea045f0fc777b6ff20a9f25474dd8293d2" + integrity sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q== -"@humanwhocodes/config-array@^0.11.8": - version "0.11.8" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.8.tgz#03595ac2075a4dc0f191cc2131de14fbd7d410b9" - integrity sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g== +"@humanwhocodes/config-array@^0.11.13": + version "0.11.14" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" + integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== dependencies: - "@humanwhocodes/object-schema" "^1.2.1" - debug "^4.1.1" + "@humanwhocodes/object-schema" "^2.0.2" + debug "^4.3.1" minimatch "^3.0.5" "@humanwhocodes/module-importer@^1.0.1": @@ -2301,22 +1740,10 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== -"@humanwhocodes/object-schema@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== - -"@isaacs/cliui@^8.0.2": - version "8.0.2" - resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" - integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== - dependencies: - string-width "^5.1.2" - string-width-cjs "npm:string-width@^4.2.0" - strip-ansi "^7.0.1" - strip-ansi-cjs "npm:strip-ansi@^6.0.1" - wrap-ansi "^8.1.0" - wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" +"@humanwhocodes/object-schema@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz#d9fae00a2d5cb40f92cfe64b47ad749fbc38f917" + integrity sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw== "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" @@ -2334,20 +1761,6 @@ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== -"@jest/expect-utils@^29.4.3": - version "29.4.3" - resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.4.3.tgz#95ce4df62952f071bcd618225ac7c47eaa81431e" - integrity sha512-/6JWbkxHOP8EoS8jeeTd9dTfc9Uawi+43oLKHfp6zzux3U2hqOOVnV3ai4RpDYHOccL6g+5nrxpoc8DmJxtXVQ== - dependencies: - jest-get-type "^29.4.3" - -"@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" @@ -2356,43 +1769,32 @@ "@sinclair/typebox" "^0.27.8" "@jest/transform@^29.3.1": - version "29.4.3" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.4.3.tgz#f7d17eac9cb5bb2e1222ea199c7c7e0835e0c037" - integrity sha512-8u0+fBGWolDshsFgPQJESkDa72da/EVwvL+II0trN2DR66wMwiQ9/CihaGfHdlLGFzbBZwMykFtxuwFdZqlKwg== + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.7.0.tgz#df2dd9c346c7d7768b8a06639994640c642e284c" + integrity sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw== dependencies: "@babel/core" "^7.11.6" - "@jest/types" "^29.4.3" - "@jridgewell/trace-mapping" "^0.3.15" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" babel-plugin-istanbul "^6.1.1" chalk "^4.0.0" convert-source-map "^2.0.0" fast-json-stable-stringify "^2.1.0" graceful-fs "^4.2.9" - jest-haste-map "^29.4.3" - jest-regex-util "^29.4.3" - jest-util "^29.4.3" + jest-haste-map "^29.7.0" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" micromatch "^4.0.4" pirates "^4.0.4" slash "^3.0.0" write-file-atomic "^4.0.2" -"@jest/types@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e" - integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^15.0.0" - chalk "^4.0.0" - -"@jest/types@^29.4.3": - version "29.4.3" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.4.3.tgz#9069145f4ef09adf10cec1b2901b2d390031431f" - integrity sha512-bPYfw8V65v17m2Od1cv44FH+SiKW7w2Xu7trhcdTLUmSv85rfKsP+qXSjO4KGJr4dtPSzl/gvslZBXctf1qGEA== +"@jest/types@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" + integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== dependencies: - "@jest/schemas" "^29.4.3" + "@jest/schemas" "^29.6.3" "@types/istanbul-lib-coverage" "^2.0.0" "@types/istanbul-reports" "^3.0.0" "@types/node" "*" @@ -2409,15 +1811,7 @@ magic-string "^0.27.0" react-docgen-typescript "^2.2.2" -"@jridgewell/gen-mapping@^0.1.0": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" - integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== - dependencies: - "@jridgewell/set-array" "^1.0.0" - "@jridgewell/sourcemap-codec" "^1.4.10" - -"@jridgewell/gen-mapping@^0.3.0": +"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": version "0.3.3" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== @@ -2426,36 +1820,17 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/gen-mapping@^0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" - integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== - dependencies: - "@jridgewell/set-array" "^1.0.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/resolve-uri@3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" - integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== - "@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": version "3.1.1" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== -"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": +"@jridgewell/set-array@^1.0.1": version "1.1.2" resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== -"@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.13": - version "1.4.14" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" - integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== - -"@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.4.15": +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.13", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.4.15": version "1.4.15" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== @@ -2468,22 +1843,14 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@jridgewell/trace-mapping@^0.3.12": - version "0.3.20" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz#72e45707cf240fa6b081d0366f8265b0cd10197f" - integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q== +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.22" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz#72a621e5de59f5f1ef792d0793a82ee20f645e4c" + integrity sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw== dependencies: "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" -"@jridgewell/trace-mapping@^0.3.15", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.17" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985" - integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g== - dependencies: - "@jridgewell/resolve-uri" "3.1.0" - "@jridgewell/sourcemap-codec" "1.4.14" - "@juggle/resize-observer@^3.3.1": version "3.4.0" resolved "https://registry.yarnpkg.com/@juggle/resize-observer/-/resize-observer-3.4.0.tgz#08d6c5e20cf7e4cc02fd181c4b0c225cd31dbb60" @@ -2536,104 +1903,101 @@ strict-event-emitter "^0.2.4" web-encoding "^1.1.5" -"@mui/base@5.0.0-beta.13": - version "5.0.0-beta.13" - resolved "https://registry.yarnpkg.com/@mui/base/-/base-5.0.0-beta.13.tgz#3bae94c39752546d84a67d4ca73486b7c4923a89" - integrity sha512-uC0l97pBspfDAp+iz2cJq8YZ8Sd9i73V77+WzUiOAckIVEyCm5dyVDZCCO2/phmzckVEeZCGcytybkjMQuhPQw== +"@mui/base@5.0.0-beta.36": + version "5.0.0-beta.36" + resolved "https://registry.yarnpkg.com/@mui/base/-/base-5.0.0-beta.36.tgz#29ca2de9d387f6d3943b6f18a84415c43e5f206c" + integrity sha512-6A8fYiXgjqTO6pgj31Hc8wm1M3rFYCxDRh09dBVk0L0W4cb2lnurRJa3cAyic6hHY+we1S58OdGYRbKmOsDpGQ== dependencies: - "@babel/runtime" "^7.22.10" - "@emotion/is-prop-valid" "^1.2.1" - "@floating-ui/react-dom" "^2.0.1" - "@mui/types" "^7.2.4" - "@mui/utils" "^5.14.7" + "@babel/runtime" "^7.23.9" + "@floating-ui/react-dom" "^2.0.8" + "@mui/types" "^7.2.13" + "@mui/utils" "^5.15.9" "@popperjs/core" "^2.11.8" - clsx "^2.0.0" + clsx "^2.1.0" prop-types "^15.8.1" - react-is "^18.2.0" -"@mui/core-downloads-tracker@^5.14.7": - version "5.14.7" - resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-5.14.7.tgz#95bed2487bf59632125a13b8eb8f4c21e460afec" - integrity sha512-sCWTUNElBPgB30iLvWe3PU7SIlTKZNf6/E/sko85iHVeHCM6WPkDw+y89CrZYjhFNmPqt2fIQM/pZu+rP2lFLA== +"@mui/core-downloads-tracker@^5.15.9": + version "5.15.9" + resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-5.15.9.tgz#c29138c70cc0fb49cd909c29beef3fb0647e5af7" + integrity sha512-CSDpVevGaxsvMkiYBZ8ztki1z/eT0mM2MqUT21eCRiMz3DU4zQw5rXG5ML/yTuJF9Z2Wv9SliIeaRAuSR/9Nig== "@mui/icons-material@^5.14.7": - version "5.14.7" - resolved "https://registry.yarnpkg.com/@mui/icons-material/-/icons-material-5.14.7.tgz#d7f6bd188fe38adf35c89d9343b8a529c2306383" - integrity sha512-mWp4DwMa8c1Gx9yOEtPgxM4b+e6hAbtZyzfSubdBwrnEE6G5D2rbAJ5MB+If6kfI48JaYaJ5j8+zAdmZLuZc0A== + version "5.15.9" + resolved "https://registry.yarnpkg.com/@mui/icons-material/-/icons-material-5.15.9.tgz#8d11839d35cf3cfd62df40934d8e9485f66be620" + integrity sha512-6tLQoM6RylQuDnHR6qQay0G0pJgKmrhn5MIm0IfrwtmSO8eV5iUFR+nNUTXsWa24gt7ZbIKnJ962UlYaeXa4bg== dependencies: - "@babel/runtime" "^7.22.10" + "@babel/runtime" "^7.23.9" "@mui/material@^5.14.7": - version "5.14.7" - resolved "https://registry.yarnpkg.com/@mui/material/-/material-5.14.7.tgz#6c2c0de8a625562f789e1bb33cb4cfc8cf20bdb0" - integrity sha512-jIZj9F7zMv6IlyaYDVv5M2Kp20jIX8c0kzuwteySHS/A0IvPVyomQEPtWc51MCbpDNCqzwoZUp3rQtA2lI8k7A== - dependencies: - "@babel/runtime" "^7.22.10" - "@mui/base" "5.0.0-beta.13" - "@mui/core-downloads-tracker" "^5.14.7" - "@mui/system" "^5.14.7" - "@mui/types" "^7.2.4" - "@mui/utils" "^5.14.7" - "@types/react-transition-group" "^4.4.6" - clsx "^2.0.0" - csstype "^3.1.2" + version "5.15.9" + resolved "https://registry.yarnpkg.com/@mui/material/-/material-5.15.9.tgz#4d6a4aee002c6a2d0e174e08c6d23245c18dd828" + integrity sha512-kbHTZDcFmN8GHKzRpImUEl9AJfFWI/0Kl+DsYVT3kHzQWUuHiKm3uHXR1RCOqr7H8IgHFPdbxItmCSQ/mj7zgg== + dependencies: + "@babel/runtime" "^7.23.9" + "@mui/base" "5.0.0-beta.36" + "@mui/core-downloads-tracker" "^5.15.9" + "@mui/system" "^5.15.9" + "@mui/types" "^7.2.13" + "@mui/utils" "^5.15.9" + "@types/react-transition-group" "^4.4.10" + clsx "^2.1.0" + csstype "^3.1.3" prop-types "^15.8.1" react-is "^18.2.0" react-transition-group "^4.4.5" -"@mui/private-theming@^5.14.7": - version "5.14.7" - resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-5.14.7.tgz#c9fec31e59bf66b12959e724b0e8ec3bb4a3d923" - integrity sha512-Y86+hmDnJab2Ka42PgxKpK3oL7EiacbeeX3X/lG9LGO0wSc45wZjHeTfIlVSkkUCkexiMKEJp5NlSjZhr27NRQ== +"@mui/private-theming@^5.15.9": + version "5.15.9" + resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-5.15.9.tgz#3ea3514ed2f6bf68541dbe9206665a82cd89cb01" + integrity sha512-/aMJlDOxOTAXyp4F2rIukW1O0anodAMCkv1DfBh/z9vaKHY3bd5fFf42wmP+0GRmwMinC5aWPpNfHXOED1fEtg== dependencies: - "@babel/runtime" "^7.22.10" - "@mui/utils" "^5.14.7" + "@babel/runtime" "^7.23.9" + "@mui/utils" "^5.15.9" prop-types "^15.8.1" -"@mui/styled-engine@^5.14.7": - version "5.14.7" - resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-5.14.7.tgz#aaacec6c87bcc9a180b2da062c613213af10f2e3" - integrity sha512-hKBETEDsIAkL8/mBwPiQj/vw28OeIhMXC3Tvj4J2bb9snxAKpiZioR1PwqP+6P41twsC/GKBd0Vr9oaWYaHuMg== +"@mui/styled-engine@^5.15.9": + version "5.15.9" + resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-5.15.9.tgz#444605039ec3fe456bdd5d5cb94330183be62b91" + integrity sha512-NRKtYkL5PZDH7dEmaLEIiipd3mxNnQSO+Yo8rFNBNptY8wzQnQ+VjayTq39qH7Sast5cwHKYFusUrQyD+SS4Og== dependencies: - "@babel/runtime" "^7.22.10" + "@babel/runtime" "^7.23.9" "@emotion/cache" "^11.11.0" - csstype "^3.1.2" + csstype "^3.1.3" prop-types "^15.8.1" -"@mui/system@^5.14.7": - version "5.14.7" - resolved "https://registry.yarnpkg.com/@mui/system/-/system-5.14.7.tgz#b08e23f9151d38186ab12dd618906abd4d73d203" - integrity sha512-jeZtHglc+Pi6qjGoopT6O4RqYXVBMqHVOsjMGP0hxGSSPm1T4gsAu7jU8eqGx9YwwjvvJ0eotTjFqw7iJ6qE2Q== - dependencies: - "@babel/runtime" "^7.22.10" - "@mui/private-theming" "^5.14.7" - "@mui/styled-engine" "^5.14.7" - "@mui/types" "^7.2.4" - "@mui/utils" "^5.14.7" - clsx "^2.0.0" - csstype "^3.1.2" +"@mui/system@^5.15.9": + version "5.15.9" + resolved "https://registry.yarnpkg.com/@mui/system/-/system-5.15.9.tgz#8a34ac0ab133af2550cc7ab980a35174142fd265" + integrity sha512-SxkaaZ8jsnIJ77bBXttfG//LUf6nTfOcaOuIgItqfHv60ZCQy/Hu7moaob35kBb+guxVJnoSZ+7vQJrA/E7pKg== + dependencies: + "@babel/runtime" "^7.23.9" + "@mui/private-theming" "^5.15.9" + "@mui/styled-engine" "^5.15.9" + "@mui/types" "^7.2.13" + "@mui/utils" "^5.15.9" + clsx "^2.1.0" + csstype "^3.1.3" prop-types "^15.8.1" -"@mui/types@^7.2.4": - version "7.2.4" - resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.2.4.tgz#b6fade19323b754c5c6de679a38f068fd50b9328" - integrity sha512-LBcwa8rN84bKF+f5sDyku42w1NTxaPgPyYKODsh01U1fVstTClbUoSA96oyRBnSNyEiAVjKm6Gwx9vjR+xyqHA== +"@mui/types@^7.2.13": + version "7.2.13" + resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.2.13.tgz#d1584912942f9dc042441ecc2d1452be39c666b8" + integrity sha512-qP9OgacN62s+l8rdDhSFRe05HWtLLJ5TGclC9I1+tQngbssu0m2dmFZs+Px53AcOs9fD7TbYd4gc9AXzVqO/+g== -"@mui/utils@^5.14.7": - version "5.14.7" - resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.14.7.tgz#3677bcabe032f1185e151f57d8c1a166df3ae0a1" - integrity sha512-RtheP/aBoPogVdi8vj8Vo2IFnRa4mZVmnD0RGlVZ49yF60rZs+xP4/KbpIrTr83xVs34QmHQ2aQ+IX7I0a0dDw== +"@mui/utils@^5.15.9": + version "5.15.9" + resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.15.9.tgz#2bdf925e274d87cbe90c14eb52d0835318205e86" + integrity sha512-yDYfr61bCYUz1QtwvpqYy/3687Z8/nS4zv7lv/ih/6ZFGMl1iolEvxRmR84v2lOYxlds+kq1IVYbXxDKh8Z9sg== dependencies: - "@babel/runtime" "^7.22.10" - "@types/prop-types" "^15.7.5" - "@types/react-is" "^18.2.1" + "@babel/runtime" "^7.23.9" + "@types/prop-types" "^15.7.11" prop-types "^15.8.1" react-is "^18.2.0" "@ndelangen/get-tarball@^3.0.7": - version "3.0.7" - resolved "https://registry.yarnpkg.com/@ndelangen/get-tarball/-/get-tarball-3.0.7.tgz#87c7aef2df4ff4fbdbab6ac9ed32cee142c4b1a3" - integrity sha512-NqGfTZIZpRFef1GoVaShSSRwDC3vde3ThtTeqFdcYd6ipKqnfEVhjK2hUeHjCQUcptyZr2TONqcloFXM+5QBrQ== + version "3.0.9" + resolved "https://registry.yarnpkg.com/@ndelangen/get-tarball/-/get-tarball-3.0.9.tgz#727ff4454e65f34707e742a59e5e6b1f525d8964" + integrity sha512-9JKTEik4vq+yGosHYhZ1tiH/3WpUS0Nh0kej4Agndhox8pAdWhEx5knFVRcb/ya9knCRCs1rPxNrSXTDdfVqpA== dependencies: gunzip-maybe "^1.4.2" pump "^3.0.0" @@ -2681,9 +2045,9 @@ "@paypal/sdk-constants" "^1.0.122" "@paypal/sdk-constants@^1.0.122": - version "1.0.129" - resolved "https://registry.yarnpkg.com/@paypal/sdk-constants/-/sdk-constants-1.0.129.tgz#23d878c1413d90e09d9a94fd8d9170a4a46f0543" - integrity sha512-FnZk6JZDGDxPCKHHsQ7HBBpelEy8+VFO78PlvdubgY8LGCql9eU7q1SQLYSiSW0zA5Lpr6zqVSFY0gRmlUFO9g== + version "1.0.139" + resolved "https://registry.yarnpkg.com/@paypal/sdk-constants/-/sdk-constants-1.0.139.tgz#b8918d26ae0feecf38ba9ad367243165af57818c" + integrity sha512-rCRL2Ys5OAbSCLcJjaFlunJWrgY92UzGNrHb7wYnr//sEXSRJx1n8Na/jxSxiFBmp4GGa/TbgodJvM80fx1iyQ== dependencies: hi-base32 "^0.5.0" @@ -2692,10 +2056,10 @@ resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== -"@polka/url@^1.0.0-next.20": - version "1.0.0-next.23" - resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.23.tgz#498e41218ab3b6a1419c735e5c6ae2c5ed609b6c" - integrity sha512-C16M+IYz0rgRhWZdCmK+h58JMv8vijAA61gmz2rspCSwKwzBebpdcsiUmwrtJRdphuY30i6BSLEOP8ppbNLyLg== +"@polka/url@^1.0.0-next.24": + version "1.0.0-next.24" + resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.24.tgz#58601079e11784d20f82d0585865bb42305c4df3" + integrity sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ== "@popperjs/core@^2.11.8": version "2.11.8" @@ -3028,143 +2392,161 @@ tslib "^2.0.0" warning "^4.0.3" -"@rollup/pluginutils@^5.0.2": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.0.2.tgz#012b8f53c71e4f6f9cb317e311df1404f56e7a33" - integrity sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA== +"@rollup/pluginutils@^5.0.2", "@rollup/pluginutils@^5.0.4": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.1.0.tgz#7e53eddc8c7f483a4ad0b94afb1f7f5fd3c771e0" + integrity sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g== dependencies: "@types/estree" "^1.0.0" estree-walker "^2.0.2" picomatch "^2.3.1" -"@rollup/rollup-android-arm-eabi@4.6.1": - version "4.6.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.6.1.tgz#0ea289f68ff248b50fea5716ca9f65f7d4dba3ae" - integrity sha512-0WQ0ouLejaUCRsL93GD4uft3rOmB8qoQMU05Kb8CmMtMBe7XUDLAltxVZI1q6byNqEtU7N1ZX1Vw5lIpgulLQA== - -"@rollup/rollup-android-arm64@4.6.1": - version "4.6.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.6.1.tgz#27c8c67fc5de574874085a1b480ac65b3e18378e" - integrity sha512-1TKm25Rn20vr5aTGGZqo6E4mzPicCUD79k17EgTLAsXc1zysyi4xXKACfUbwyANEPAEIxkzwue6JZ+stYzWUTA== - -"@rollup/rollup-darwin-arm64@4.6.1": - version "4.6.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.6.1.tgz#c5735c042980c85495411af7183dd20294763bd8" - integrity sha512-cEXJQY/ZqMACb+nxzDeX9IPLAg7S94xouJJCNVE5BJM8JUEP4HeTF+ti3cmxWeSJo+5D+o8Tc0UAWUkfENdeyw== - -"@rollup/rollup-darwin-x64@4.6.1": - version "4.6.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.6.1.tgz#af844bd54abb73ca3c9cf89a31eec17861d1375d" - integrity sha512-LoSU9Xu56isrkV2jLldcKspJ7sSXmZWkAxg7sW/RfF7GS4F5/v4EiqKSMCFbZtDu2Nc1gxxFdQdKwkKS4rwxNg== - -"@rollup/rollup-linux-arm-gnueabihf@4.6.1": - version "4.6.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.6.1.tgz#5e972f63c441eaf859551039b3f18db9b035977d" - integrity sha512-EfI3hzYAy5vFNDqpXsNxXcgRDcFHUWSx5nnRSCKwXuQlI5J9dD84g2Usw81n3FLBNsGCegKGwwTVsSKK9cooSQ== - -"@rollup/rollup-linux-arm64-gnu@4.6.1": - version "4.6.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.6.1.tgz#f4cfbc71e3b6fdb395b28b1472414e181515c72d" - integrity sha512-9lhc4UZstsegbNLhH0Zu6TqvDfmhGzuCWtcTFXY10VjLLUe4Mr0Ye2L3rrtHaDd/J5+tFMEuo5LTCSCMXWfUKw== - -"@rollup/rollup-linux-arm64-musl@4.6.1": - version "4.6.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.6.1.tgz#6a94c691830dc29bf708de7c640f494996130893" - integrity sha512-FfoOK1yP5ksX3wwZ4Zk1NgyGHZyuRhf99j64I5oEmirV8EFT7+OhUZEnP+x17lcP/QHJNWGsoJwrz4PJ9fBEXw== - -"@rollup/rollup-linux-x64-gnu@4.6.1": - version "4.6.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.6.1.tgz#f07bae3f7dc532d9ea5ab36c9071db329f9a1efb" - integrity sha512-DNGZvZDO5YF7jN5fX8ZqmGLjZEXIJRdJEdTFMhiyXqyXubBa0WVLDWSNlQ5JR2PNgDbEV1VQowhVRUh+74D+RA== - -"@rollup/rollup-linux-x64-musl@4.6.1": - version "4.6.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.6.1.tgz#357a34fdbf410af88ce48bd802bea6462bb9a8bc" - integrity sha512-RkJVNVRM+piYy87HrKmhbexCHg3A6Z6MU0W9GHnJwBQNBeyhCJG9KDce4SAMdicQnpURggSvtbGo9xAWOfSvIQ== - -"@rollup/rollup-win32-arm64-msvc@4.6.1": - version "4.6.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.6.1.tgz#b6e97fd38281667e35297033393cd1101f4a31be" - integrity sha512-v2FVT6xfnnmTe3W9bJXl6r5KwJglMK/iRlkKiIFfO6ysKs0rDgz7Cwwf3tjldxQUrHL9INT/1r4VA0n9L/F1vQ== - -"@rollup/rollup-win32-ia32-msvc@4.6.1": - version "4.6.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.6.1.tgz#a95db026c640c8128bfd38546d85342f2329beaf" - integrity sha512-YEeOjxRyEjqcWphH9dyLbzgkF8wZSKAKUkldRY6dgNR5oKs2LZazqGB41cWJ4Iqqcy9/zqYgmzBkRoVz3Q9MLw== - -"@rollup/rollup-win32-x64-msvc@4.6.1": - version "4.6.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.6.1.tgz#45785b5caf83200a34a9867ba50d69560880c120" - integrity sha512-0zfTlFAIhgz8V2G8STq8toAjsYYA6eci1hnXuyOTUFnymrtJwnS6uGKiv3v5UrPZkBlamLvrLV2iiaeqCKzb0A== - -"@sentry-internal/tracing@7.57.0": - version "7.57.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.57.0.tgz#cb761931b635f8f24c84be0eecfacb8516b20551" - integrity sha512-tpViyDd8AhQGYYhI94xi2aaDopXOPfL2Apwrtb3qirWkomIQ2K86W1mPmkce+B0cFOnW2Dxv/ZTFKz6ghjK75A== - dependencies: - "@sentry/core" "7.57.0" - "@sentry/types" "7.57.0" - "@sentry/utils" "7.57.0" - tslib "^2.4.1 || ^1.9.3" - -"@sentry/browser@7.57.0": - version "7.57.0" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.57.0.tgz#6e724c9eac680dba99ced0fdf81be8d1e3b3bceb" - integrity sha512-E0HaYYlaqHFiIRZXxcvOO8Odvlt+TR1vFFXzqUWXPOvDRxURglTOCQ3EN/u6bxtAGJ6y/Zc2obgihTtypuel/w== - dependencies: - "@sentry-internal/tracing" "7.57.0" - "@sentry/core" "7.57.0" - "@sentry/replay" "7.57.0" - "@sentry/types" "7.57.0" - "@sentry/utils" "7.57.0" - tslib "^2.4.1 || ^1.9.3" - -"@sentry/core@7.57.0": - version "7.57.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.57.0.tgz#65093d739c04f320a54395a21be955fcbe326acb" - integrity sha512-l014NudPH0vQlzybtXajPxYFfs9w762NoarjObC3gu76D1jzBBFzhdRelkGpDbSLNTIsKhEDDRpgAjBWJ9icfw== - dependencies: - "@sentry/types" "7.57.0" - "@sentry/utils" "7.57.0" - tslib "^2.4.1 || ^1.9.3" +"@rollup/rollup-android-arm-eabi@4.9.6": + version "4.9.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.6.tgz#66b8d9cb2b3a474d115500f9ebaf43e2126fe496" + integrity sha512-MVNXSSYN6QXOulbHpLMKYi60ppyO13W9my1qogeiAqtjb2yR4LSmfU2+POvDkLzhjYLXz9Rf9+9a3zFHW1Lecg== + +"@rollup/rollup-android-arm64@4.9.6": + version "4.9.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.6.tgz#46327d5b86420d2307946bec1535fdf00356e47d" + integrity sha512-T14aNLpqJ5wzKNf5jEDpv5zgyIqcpn1MlwCrUXLrwoADr2RkWA0vOWP4XxbO9aiO3dvMCQICZdKeDrFl7UMClw== + +"@rollup/rollup-darwin-arm64@4.9.6": + version "4.9.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.6.tgz#166987224d2f8b1e2fd28ee90c447d52271d5e90" + integrity sha512-CqNNAyhRkTbo8VVZ5R85X73H3R5NX9ONnKbXuHisGWC0qRbTTxnF1U4V9NafzJbgGM0sHZpdO83pLPzq8uOZFw== + +"@rollup/rollup-darwin-x64@4.9.6": + version "4.9.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.6.tgz#a2e6e096f74ccea6e2f174454c26aef6bcdd1274" + integrity sha512-zRDtdJuRvA1dc9Mp6BWYqAsU5oeLixdfUvkTHuiYOHwqYuQ4YgSmi6+/lPvSsqc/I0Omw3DdICx4Tfacdzmhog== + +"@rollup/rollup-linux-arm-gnueabihf@4.9.6": + version "4.9.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.6.tgz#09fcd4c55a2d6160c5865fec708a8e5287f30515" + integrity sha512-oNk8YXDDnNyG4qlNb6is1ojTOGL/tRhbbKeE/YuccItzerEZT68Z9gHrY3ROh7axDc974+zYAPxK5SH0j/G+QQ== + +"@rollup/rollup-linux-arm64-gnu@4.9.6": + version "4.9.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.6.tgz#19a3c0b6315c747ca9acf86e9b710cc2440f83c9" + integrity sha512-Z3O60yxPtuCYobrtzjo0wlmvDdx2qZfeAWTyfOjEDqd08kthDKexLpV97KfAeUXPosENKd8uyJMRDfFMxcYkDQ== + +"@rollup/rollup-linux-arm64-musl@4.9.6": + version "4.9.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.6.tgz#94aaf95fdaf2ad9335983a4552759f98e6b2e850" + integrity sha512-gpiG0qQJNdYEVad+1iAsGAbgAnZ8j07FapmnIAQgODKcOTjLEWM9sRb+MbQyVsYCnA0Im6M6QIq6ax7liws6eQ== + +"@rollup/rollup-linux-riscv64-gnu@4.9.6": + version "4.9.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.6.tgz#160510e63f4b12618af4013bddf1761cf9fc9880" + integrity sha512-+uCOcvVmFUYvVDr27aiyun9WgZk0tXe7ThuzoUTAukZJOwS5MrGbmSlNOhx1j80GdpqbOty05XqSl5w4dQvcOA== + +"@rollup/rollup-linux-x64-gnu@4.9.6": + version "4.9.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.6.tgz#5ac5d068ce0726bd0a96ca260d5bd93721c0cb98" + integrity sha512-HUNqM32dGzfBKuaDUBqFB7tP6VMN74eLZ33Q9Y1TBqRDn+qDonkAUyKWwF9BR9unV7QUzffLnz9GrnKvMqC/fw== + +"@rollup/rollup-linux-x64-musl@4.9.6": + version "4.9.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.6.tgz#bafa759ab43e8eab9edf242a8259ffb4f2a57a5d" + integrity sha512-ch7M+9Tr5R4FK40FHQk8VnML0Szi2KRujUgHXd/HjuH9ifH72GUmw6lStZBo3c3GB82vHa0ZoUfjfcM7JiiMrQ== + +"@rollup/rollup-win32-arm64-msvc@4.9.6": + version "4.9.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.6.tgz#1cc3416682e5a20d8f088f26657e6e47f8db468e" + integrity sha512-VD6qnR99dhmTQ1mJhIzXsRcTBvTjbfbGGwKAHcu+52cVl15AC/kplkhxzW/uT0Xl62Y/meBKDZvoJSJN+vTeGA== + +"@rollup/rollup-win32-ia32-msvc@4.9.6": + version "4.9.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.6.tgz#7d2251e1aa5e8a1e47c86891fe4547a939503461" + integrity sha512-J9AFDq/xiRI58eR2NIDfyVmTYGyIZmRcvcAoJ48oDld/NTR8wyiPUu2X/v1navJ+N/FGg68LEbX3Ejd6l8B7MQ== + +"@rollup/rollup-win32-x64-msvc@4.9.6": + version "4.9.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.6.tgz#2c1fb69e02a3f1506f52698cfdc3a8b6386df9a6" + integrity sha512-jqzNLhNDvIZOrt69Ce4UjGRpXJBzhUBzawMwnaDAwyHriki3XollsewxWzOzz+4yOFDkuJHtTsZFwMxhYJWmLQ== + +"@sentry-internal/feedback@7.100.1": + version "7.100.1" + resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-7.100.1.tgz#99585ba6f71eca3e7afe918273dd55b12f3aac8a" + integrity sha512-yqcRVnjf+qS+tC4NxOKLJOaSJ+csHmh/dHUzvCTkf5rLsplwXYRnny2r0tqGTQ4tuXMxwgSMKPYwicg81P+xuw== + dependencies: + "@sentry/core" "7.100.1" + "@sentry/types" "7.100.1" + "@sentry/utils" "7.100.1" + +"@sentry-internal/replay-canvas@7.100.1": + version "7.100.1" + resolved "https://registry.yarnpkg.com/@sentry-internal/replay-canvas/-/replay-canvas-7.100.1.tgz#d37228575931b869d2ad415af46b342d83dd0fd7" + integrity sha512-TnqxqJGhbFhhYRhTG2WLFer+lVieV7mNGeIxFBiw1L4kuj8KGl+C0sknssKyZSRVJFSahhHIosHJGRMkkD//7g== + dependencies: + "@sentry/core" "7.100.1" + "@sentry/replay" "7.100.1" + "@sentry/types" "7.100.1" + "@sentry/utils" "7.100.1" + +"@sentry-internal/tracing@7.100.1": + version "7.100.1" + resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.100.1.tgz#4329492e50c390567197a4acbf7e3672b1db7820" + integrity sha512-+u9RRf5eL3StiyiRyAHZmdkAR7GTSGx4Mt4Lmi5NEtCcWlTGZ1QgW2r8ZbhouVmTiJkjhQgYCyej3cojtazeJg== + dependencies: + "@sentry/core" "7.100.1" + "@sentry/types" "7.100.1" + "@sentry/utils" "7.100.1" + +"@sentry/browser@7.100.1": + version "7.100.1" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.100.1.tgz#146ffca94cc187ecbf49915ef3100f6037316110" + integrity sha512-IxHQ08ixf0bmaWpe4yt1J4UUsOpg02fxax9z3tOQYXw5MSzz5pDXn8M8DFUVJB3wWuyXhHXTub9yD3VIP9fnoA== + dependencies: + "@sentry-internal/feedback" "7.100.1" + "@sentry-internal/replay-canvas" "7.100.1" + "@sentry-internal/tracing" "7.100.1" + "@sentry/core" "7.100.1" + "@sentry/replay" "7.100.1" + "@sentry/types" "7.100.1" + "@sentry/utils" "7.100.1" + +"@sentry/core@7.100.1": + version "7.100.1" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.100.1.tgz#7b8e101a931af8e8b3b2449534749f882772df4f" + integrity sha512-f+ItUge/o9AjlveQq0ZUbQauKlPH1FIJbC1TRaYLJ4KNfOdrsh8yZ29RmWv0cFJ/e+FGTr603gWpRPObF5rM8Q== + dependencies: + "@sentry/types" "7.100.1" + "@sentry/utils" "7.100.1" "@sentry/react@^7.57.0": - version "7.57.0" - resolved "https://registry.yarnpkg.com/@sentry/react/-/react-7.57.0.tgz#cf91f0115bcd2a8306d6c8a39d8e8b53d4b21814" - integrity sha512-XGNTjIoCG3naSmCU8qObd+y+CqAB6NQkGWOp2yyBwp2inyKF2ehJvDh6bIQloBYq2TmOJDa4NfXdMrkilxaLFQ== - dependencies: - "@sentry/browser" "7.57.0" - "@sentry/types" "7.57.0" - "@sentry/utils" "7.57.0" + version "7.100.1" + resolved "https://registry.yarnpkg.com/@sentry/react/-/react-7.100.1.tgz#a8621f2124848b6a7bb1fc6279167f5e3cbc44f1" + integrity sha512-EdrBtrXVLK2LSx4Rvz/nQP7HZUZQmr+t3GHV8436RAhF6vs5mntACVMBoQJRWiUvtZ1iRo3rIsIdah7DLiFPgQ== + dependencies: + "@sentry/browser" "7.100.1" + "@sentry/core" "7.100.1" + "@sentry/types" "7.100.1" + "@sentry/utils" "7.100.1" hoist-non-react-statics "^3.3.2" - tslib "^2.4.1 || ^1.9.3" -"@sentry/replay@7.57.0": - version "7.57.0" - resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.57.0.tgz#c8f7eae7b7edc9d32c3d2955b337f3b3c76dff39" - integrity sha512-pN4ryNS3J5EYbkXvR+O/+hseAJha7XDl8mPFtK0OGTHG10JzCi4tQJazblHQdpb5QBaMMPCeZ+isyfoQLDNXnw== +"@sentry/replay@7.100.1": + version "7.100.1" + resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.100.1.tgz#d9af5f8e92ce0f93cef89f5aef74d91a8d12c3eb" + integrity sha512-B1NFjzGEFaqejxBRdUyEzH8ChXc2kfiqlA/W/Lg0aoWIl2/7nuMk+l4ld9gW5F5bIAXDTVd5vYltb1lWEbpr7w== dependencies: - "@sentry/core" "7.57.0" - "@sentry/types" "7.57.0" - "@sentry/utils" "7.57.0" + "@sentry-internal/tracing" "7.100.1" + "@sentry/core" "7.100.1" + "@sentry/types" "7.100.1" + "@sentry/utils" "7.100.1" -"@sentry/types@7.57.0": - version "7.57.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.57.0.tgz#4fdb80cbd49ba034dd8d9be0c0005a016d5db3ce" - integrity sha512-D7ifoUfxuVCUyktIr5Gc+jXUbtcUMmfHdTtTbf1XCZHua5mJceK9wtl3YCg3eq/HK2Ppd52BKnTzEcS5ZKQM+w== +"@sentry/types@7.100.1": + version "7.100.1" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.100.1.tgz#1349b77269cecf4e80c087842575bd1a001e9995" + integrity sha512-fLM+LedHuKzOd8IhXBqaQuym+AA519MGjeczBa5kGakes/BbAsUMwsNfjsKQedp7Kh44RgYF99jwoRPK2oDrXw== -"@sentry/utils@7.57.0": - version "7.57.0" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.57.0.tgz#8253c6fcf35138b4c424234b8da1596e11b98ad8" - integrity sha512-YXrkMCiNklqkXctn4mKYkrzNCf/dfVcRUQrkXjeBC+PHXbcpPyaJgInNvztR7Skl8lE3JPGPN4v5XhLxK1bUUg== +"@sentry/utils@7.100.1": + version "7.100.1" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.100.1.tgz#6e26f3b06b1e485a2180f464ab3374ecb8d5e407" + integrity sha512-Ve6dXr1o6xiBe3VCoJgiutmBKrugryI65EZAbYto5XI+t+PjiLLf9wXtEMF24ZrwImo4Lv3E9Uqza+fWkEbw6A== dependencies: - "@sentry/types" "7.57.0" - tslib "^2.4.1 || ^1.9.3" - -"@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== + "@sentry/types" "7.100.1" "@sinclair/typebox@^0.27.8": version "0.27.8" @@ -3172,11 +2554,11 @@ integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== "@storybook/addon-actions@^7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-7.6.10.tgz#5b43534e158797114db032f4ad8505a81809ed00" - integrity sha512-pcKmf0H/caGzKDy8cz1adNSjv+KOBWLJ11RzGExrWm+Ad5ACifwlsQPykJ3TQ/21sTd9IXVrE9uuq4LldEnPbg== + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-7.6.13.tgz#a1675fe2535e76228fa121fa1b30eb274349c0a4" + integrity sha512-uxjBLzJNJfj8oS0orgLt7/Gs5tLoP2xhBESi5vjk+7BZjAgfoA6w5IwMwmh9sRB3+aUx3ks7fGjE/hRT/YcaxA== dependencies: - "@storybook/core-events" "7.6.10" + "@storybook/core-events" "7.6.13" "@storybook/global" "^5.0.0" "@types/uuid" "^9.0.1" dequal "^2.0.2" @@ -3184,106 +2566,97 @@ uuid "^9.0.0" "@storybook/addon-controls@^7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/addon-controls/-/addon-controls-7.6.10.tgz#6cd309440bf2b86c21f11a8b5f20bc1340d6c045" - integrity sha512-LjwCQRMWq1apLtFwDi6U8MI6ITUr+KhxJucZ60tfc58RgB2v8ayozyDAonFEONsx9YSR1dNIJ2Z/e2rWTBJeYA== + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/addon-controls/-/addon-controls-7.6.13.tgz#18eaf499e8e110b8a88ac209c8e4ea08090066ee" + integrity sha512-NdCEvr9xg3ANOSoEXKnB9jQR74n7G8XFWngnjJqviqXjRxiL7jwv2TCkyJyDTMmIAtPkHKU3NoD2Q1eQk16iYg== dependencies: - "@storybook/blocks" "7.6.10" + "@storybook/blocks" "7.6.13" lodash "^4.17.21" ts-dedent "^2.0.0" "@storybook/addon-docs@^7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/addon-docs/-/addon-docs-7.6.10.tgz#aab69f253a9cfbb57fd84062f00fac08f9c796cd" - integrity sha512-GtyQ9bMx1AOOtl6ZS9vwK104HFRK+tqzxddRRxhXkpyeKu3olm9aMgXp35atE/3fJSqyyDm2vFtxxH8mzBA20A== + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/addon-docs/-/addon-docs-7.6.13.tgz#b90b4a67d7aca2259bbcb90b17245b9f2bb09b4e" + integrity sha512-rRaHPVYuOrpLzk/KGemN/ePengYLL0Vly/Shb+nxcbDnKiraMELWsAkQEvEa/WbPa5sdpRD2+cJTqPcif4Du4g== dependencies: "@jest/transform" "^29.3.1" "@mdx-js/react" "^2.1.5" - "@storybook/blocks" "7.6.10" - "@storybook/client-logger" "7.6.10" - "@storybook/components" "7.6.10" - "@storybook/csf-plugin" "7.6.10" - "@storybook/csf-tools" "7.6.10" + "@storybook/blocks" "7.6.13" + "@storybook/client-logger" "7.6.13" + "@storybook/components" "7.6.13" + "@storybook/csf-plugin" "7.6.13" + "@storybook/csf-tools" "7.6.13" "@storybook/global" "^5.0.0" "@storybook/mdx2-csf" "^1.0.0" - "@storybook/node-logger" "7.6.10" - "@storybook/postinstall" "7.6.10" - "@storybook/preview-api" "7.6.10" - "@storybook/react-dom-shim" "7.6.10" - "@storybook/theming" "7.6.10" - "@storybook/types" "7.6.10" + "@storybook/node-logger" "7.6.13" + "@storybook/postinstall" "7.6.13" + "@storybook/preview-api" "7.6.13" + "@storybook/react-dom-shim" "7.6.13" + "@storybook/theming" "7.6.13" + "@storybook/types" "7.6.13" fs-extra "^11.1.0" remark-external-links "^8.0.0" remark-slug "^6.0.0" ts-dedent "^2.0.0" "@storybook/addon-mdx-gfm@^7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/addon-mdx-gfm/-/addon-mdx-gfm-7.6.10.tgz#6b71b6d3f8739315b3294564e7e308b7dd3e465f" - integrity sha512-gA1kQZJ4ZKOpi9afu7WRC1twCwZR0J1Nd7u47kNq+5coW1GH9uqGDFYHzr4mfKdD1J09/OrmfMnVjCPx9MYDtQ== + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/addon-mdx-gfm/-/addon-mdx-gfm-7.6.13.tgz#542c96fe30d6fe5a94984d69941438aeb9cfeb4c" + integrity sha512-fc+y34MojGYDL9/5cg86tteORd7JTQaMzcfzK23+OIH1Fmy6mpbsFd5lkKOkof0GqvCL+iooS+Xa7IViq0l82w== dependencies: - "@storybook/node-logger" "7.6.10" + "@storybook/node-logger" "7.6.13" remark-gfm "^3.0.1" ts-dedent "^2.0.0" "@storybook/addon-measure@^7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/addon-measure/-/addon-measure-7.6.10.tgz#5e41d64aa6e02b9c6df1696d918058979598250e" - integrity sha512-OVfTI56+kc4hLWfZ/YPV3WKj/aA9e4iKXYxZyPdhfX4Z8TgZdD1wv9Z6e8DKS0H5kuybYrHKHaID5ki6t7qz3w== + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/addon-measure/-/addon-measure-7.6.13.tgz#26ff632bd7e99857df3f07a3ec46cb697b7b3529" + integrity sha512-WdxEicIy3x79kgP93HMf9hgbbW3h7xo3eNzrTaMsTeoXaolXWN9qdpusm8Cc8vDIP5JMd+gkwi2u563KjggXVQ== dependencies: "@storybook/global" "^5.0.0" tiny-invariant "^1.3.1" "@storybook/addon-storysource@^7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/addon-storysource/-/addon-storysource-7.6.10.tgz#dd277b88069b00d9a325076c2c476a9f8e3f30e2" - integrity sha512-ZtMiO26Bqd2oEovEeJ5ulvIL/rsAuHHpjAgBRZd/Byw25DQKY3GTqGtV474Wjm5tzj7HWhfk69fqAv87HnveCw== + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/addon-storysource/-/addon-storysource-7.6.13.tgz#2dbfd9d33f28a25513946c2f5071fb9930c4e3f1" + integrity sha512-qnuD5MXUKabLjGbygQG0KThfgoFtfwgPltdGIcYTStrABBnhlkgoOLraX22XRXXGaQaS63tQXuDnbF/Jp0IC+A== dependencies: - "@storybook/source-loader" "7.6.10" + "@storybook/source-loader" "7.6.13" estraverse "^5.2.0" tiny-invariant "^1.3.1" "@storybook/addon-viewport@^7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/addon-viewport/-/addon-viewport-7.6.10.tgz#834bad76a56e4117ffb2dc935d349dca3b49bcc3" - integrity sha512-+bA6juC/lH4vEhk+w0rXakaG8JgLG4MOYrIudk5vJKQaC6X58LIM9N4kzIS2KSExRhkExXBPrWsnMfCo7uxmKg== + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/addon-viewport/-/addon-viewport-7.6.13.tgz#c0bb05584cc191c3079ca34cc10579aeba372ac9" + integrity sha512-yqUCWzp3IY/tlS488k9iAXMgOWW/rTswbVgGEh8alUg38QjbUnh4lKFLtd9Va8Fd1zNeVd9nkpCMTSsGy85uMg== dependencies: memoizerific "^1.11.3" -"@storybook/addons@^7.0.0": - version "7.0.7" - resolved "https://registry.yarnpkg.com/@storybook/addons/-/addons-7.0.7.tgz#cef9a022bcdd14e79d4fc364fb3eb8e44e94ed18" - integrity sha512-it8NWXsdm3dhjc237d9jj7dGJf6eHDfuDv12nirV64J1dzWrnW+lONeZMPMgxxdLlgYfxH52fLgjcw/dAC/E+Q== - dependencies: - "@storybook/manager-api" "7.0.7" - "@storybook/preview-api" "7.0.7" - "@storybook/types" "7.0.7" - -"@storybook/addons@^7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/addons/-/addons-7.6.10.tgz#dfc8b71581dd38acd6813f2339ade2f299c28c63" - integrity sha512-lv/oT4ZGMKfXh6bB7LbuRP85bwRprBPYuMMl+e1Ikvu5WTfqVoJRYjc7mvXaIHGCI6DZ/nFcbRjra6q8ZhoDgw== - dependencies: - "@storybook/manager-api" "7.6.10" - "@storybook/preview-api" "7.6.10" - "@storybook/types" "7.6.10" - -"@storybook/blocks@7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/blocks/-/blocks-7.6.10.tgz#353a5efa6a922a9a3766254f9f24cc2adad34f83" - integrity sha512-oSIukGC3yuF8pojABC/HLu5tv2axZvf60TaUs8eDg7+NiiKhzYSPoMQxs5uMrKngl+EJDB92ESgWT9vvsfvIPg== - dependencies: - "@storybook/channels" "7.6.10" - "@storybook/client-logger" "7.6.10" - "@storybook/components" "7.6.10" - "@storybook/core-events" "7.6.10" +"@storybook/addons@^7.0.0", "@storybook/addons@^7.6.10": + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/addons/-/addons-7.6.13.tgz#fda1f435712cbdb6ce8b9c4b7e516589f8ec559d" + integrity sha512-Vu7Su2GT1Sg6F43b01npnMSEALreoNeHPoL3BCJ52/7C4lHNopk4KOeeNbPP9TbVkfbICJi8L/u7MitVZZbhag== + dependencies: + "@storybook/manager-api" "7.6.13" + "@storybook/preview-api" "7.6.13" + "@storybook/types" "7.6.13" + +"@storybook/blocks@7.6.13": + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/blocks/-/blocks-7.6.13.tgz#949b6a97ef749f484901d173e59fe88d20ad88d2" + integrity sha512-wjiwGHLIDfzgonxQaEOlQBR8H7U4hjOEkvkT6leaA3SXJaBgoZBD8zTqWqMX1Gl6vUmmRqMzq/nTSVai8Y1vVQ== + dependencies: + "@storybook/channels" "7.6.13" + "@storybook/client-logger" "7.6.13" + "@storybook/components" "7.6.13" + "@storybook/core-events" "7.6.13" "@storybook/csf" "^0.1.2" - "@storybook/docs-tools" "7.6.10" + "@storybook/docs-tools" "7.6.13" "@storybook/global" "^5.0.0" - "@storybook/manager-api" "7.6.10" - "@storybook/preview-api" "7.6.10" - "@storybook/theming" "7.6.10" - "@storybook/types" "7.6.10" + "@storybook/manager-api" "7.6.13" + "@storybook/preview-api" "7.6.13" + "@storybook/theming" "7.6.13" + "@storybook/types" "7.6.13" "@types/lodash" "^4.14.167" color-convert "^2.0.1" dequal "^2.0.2" @@ -3297,15 +2670,15 @@ ts-dedent "^2.0.0" util-deprecate "^1.0.2" -"@storybook/builder-manager@7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/builder-manager/-/builder-manager-7.6.10.tgz#fc30b19dd74e6f6ae896d8f4045552c3206c25f9" - integrity sha512-f+YrjZwohGzvfDtH8BHzqM3xW0p4vjjg9u7uzRorqUiNIAAKHpfNrZ/WvwPlPYmrpAHt4xX/nXRJae4rFSygPw== +"@storybook/builder-manager@7.6.13": + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/builder-manager/-/builder-manager-7.6.13.tgz#75d9e999810476e7422b532b79e26412876d8bda" + integrity sha512-RsZO7W33fYD5QKr//6DQ2+H0tdOt6BJ9I7U+3k5C8qCCoIW1CwYz/qbX+IB403k1yKKyw+Xau3F3tCVxR3j9Bw== dependencies: "@fal-works/esbuild-plugin-global-externals" "^2.1.2" - "@storybook/core-common" "7.6.10" - "@storybook/manager" "7.6.10" - "@storybook/node-logger" "7.6.10" + "@storybook/core-common" "7.6.13" + "@storybook/manager" "7.6.13" + "@storybook/node-logger" "7.6.13" "@types/ejs" "^3.1.1" "@types/find-cache-dir" "^3.2.1" "@yarnpkg/esbuild-plugin-pnp" "^3.0.0-rc.10" @@ -3319,19 +2692,19 @@ process "^0.11.10" util "^0.12.4" -"@storybook/builder-vite@7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/builder-vite/-/builder-vite-7.6.10.tgz#f8a23668a17e7473e4d19465658199c46bf731d7" - integrity sha512-qxe19axiNJVdIKj943e1ucAmADwU42fTGgMSdBzzrvfH3pSOmx2057aIxRzd8YtBRnj327eeqpgCHYIDTunMYQ== - dependencies: - "@storybook/channels" "7.6.10" - "@storybook/client-logger" "7.6.10" - "@storybook/core-common" "7.6.10" - "@storybook/csf-plugin" "7.6.10" - "@storybook/node-logger" "7.6.10" - "@storybook/preview" "7.6.10" - "@storybook/preview-api" "7.6.10" - "@storybook/types" "7.6.10" +"@storybook/builder-vite@7.6.13": + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/builder-vite/-/builder-vite-7.6.13.tgz#bc75e8dd8a47a0901cc229da5b3992bdcfb50a63" + integrity sha512-BpOUP1QPS7NeTTTs5i2gUmORtjigo2S6B57Pb08vDyy1/1bd+NpkLvHvdc/TxBBc57FI4TS/7m8NtwIYHtwkcQ== + dependencies: + "@storybook/channels" "7.6.13" + "@storybook/client-logger" "7.6.13" + "@storybook/core-common" "7.6.13" + "@storybook/csf-plugin" "7.6.13" + "@storybook/node-logger" "7.6.13" + "@storybook/preview" "7.6.13" + "@storybook/preview-api" "7.6.13" + "@storybook/types" "7.6.13" "@types/find-cache-dir" "^3.2.1" browser-assert "^1.2.1" es-module-lexer "^0.9.3" @@ -3341,64 +2714,35 @@ magic-string "^0.30.0" rollup "^2.25.0 || ^3.3.0" -"@storybook/channel-postmessage@7.0.7": - version "7.0.7" - resolved "https://registry.yarnpkg.com/@storybook/channel-postmessage/-/channel-postmessage-7.0.7.tgz#8b00a45f3a078946169f7222c320d8d1e17b67c2" - integrity sha512-XMtYfcaE0UoY/V7K1cTu9PcWETD4iyWb/Yswc4F9VrPw0Ui4UwGS1j4iaAu8DC06yyoJs4XvxYFBMlCQmKja6A== - dependencies: - "@storybook/channels" "7.0.7" - "@storybook/client-logger" "7.0.7" - "@storybook/core-events" "7.0.7" - "@storybook/global" "^5.0.0" - qs "^6.10.0" - telejson "^7.0.3" - -"@storybook/channels@7.0.7": - version "7.0.7" - resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-7.0.7.tgz#3f3962be97b447752db99a78ef7beea9f94d75a4" - integrity sha512-Om4ovBLNw8pVrBu83MpOKgAuGO9Dpr1Coh2qp8t64WRPkejX1mxOY9IgH723//zH3igx8LCkf9rvBvcrsyaScQ== - -"@storybook/channels@7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-7.6.10.tgz#04fd2c2f0b530bb8d236f5763e8df8cb5fa7c921" - integrity sha512-ITCLhFuDBKgxetuKnWwYqMUWlU7zsfH3gEKZltTb+9/2OAWR7ez0iqU7H6bXP1ridm0DCKkt2UMWj2mmr9iQqg== - dependencies: - "@storybook/client-logger" "7.6.10" - "@storybook/core-events" "7.6.10" - "@storybook/global" "^5.0.0" - qs "^6.10.0" - telejson "^7.2.0" - tiny-invariant "^1.3.1" - -"@storybook/channels@7.6.4": - version "7.6.4" - resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-7.6.4.tgz#d0af47f1f049c3ad77bcdefec54253f56b3b0a47" - integrity sha512-Z4PY09/Czl70ap4ObmZ4bgin+EQhPaA3HdrEDNwpnH7A9ttfEO5u5KThytIjMq6kApCCihmEPDaYltoVrfYJJA== +"@storybook/channels@7.6.13": + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-7.6.13.tgz#4d60407ecab0cfb99184fc230fec237d1df019c2" + integrity sha512-AiplFJXPjgHA62xqZFq7SwCS+o8bFrYLPM9I8yNY+8jhAi9N3Yig+h2P0jOXxLKicwrCXa5ZJ7PZK05M1r6YqA== dependencies: - "@storybook/client-logger" "7.6.4" - "@storybook/core-events" "7.6.4" + "@storybook/client-logger" "7.6.13" + "@storybook/core-events" "7.6.13" "@storybook/global" "^5.0.0" qs "^6.10.0" telejson "^7.2.0" tiny-invariant "^1.3.1" -"@storybook/cli@7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/cli/-/cli-7.6.10.tgz#2436276c5404b166a9f795fef44bbd75826d9bfe" - integrity sha512-pK1MEseMm73OMO2OVoSz79QWX8ymxgIGM8IeZTCo9gImiVRChMNDFYcv8yPWkjuyesY8c15CoO48aR7pdA1OjQ== +"@storybook/cli@7.6.13": + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/cli/-/cli-7.6.13.tgz#3fa2761adb7522b119f83f76286ddc79d7a519f2" + integrity sha512-9JBFckdWeJKU1xV3G3+L/kjuwNZm2RAUxac4GgVBxXACF0QU0nXml8Ss5ZA5nss+qCnn/gdRYRDNdfJ28L0/mw== dependencies: "@babel/core" "^7.23.2" "@babel/preset-env" "^7.23.2" "@babel/types" "^7.23.0" "@ndelangen/get-tarball" "^3.0.7" - "@storybook/codemod" "7.6.10" - "@storybook/core-common" "7.6.10" - "@storybook/core-events" "7.6.10" - "@storybook/core-server" "7.6.10" - "@storybook/csf-tools" "7.6.10" - "@storybook/node-logger" "7.6.10" - "@storybook/telemetry" "7.6.10" - "@storybook/types" "7.6.10" + "@storybook/codemod" "7.6.13" + "@storybook/core-common" "7.6.13" + "@storybook/core-events" "7.6.13" + "@storybook/core-server" "7.6.13" + "@storybook/csf-tools" "7.6.13" + "@storybook/node-logger" "7.6.13" + "@storybook/telemetry" "7.6.13" + "@storybook/types" "7.6.13" "@types/semver" "^7.3.4" "@yarnpkg/fslib" "2.10.3" "@yarnpkg/libzip" "2.3.0" @@ -3429,46 +2773,32 @@ util-deprecate "^1.0.2" "@storybook/client-api@^7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/client-api/-/client-api-7.6.10.tgz#5fd95488cbfcaec3535a414fd94374ce0ecba063" - integrity sha512-Y9z6Uy4h3/hDAUVBEEGLLbbvnSKQJhr4Sn1wJ328PhMppcZ1+GW1iGphFBmthm+O0cun1Zevl18Y081kqiGzSQ== - dependencies: - "@storybook/client-logger" "7.6.10" - "@storybook/preview-api" "7.6.10" - -"@storybook/client-logger@7.0.7": - version "7.0.7" - resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-7.0.7.tgz#1f91eb2785111c94b7946bda2d32199c11045d71" - integrity sha512-EclHjDs5HwHMKB4X2orn/KKA0DTIDmp4AXAUJGRfxb5ArpKEb7tXLHsgrRBlaoz1j5LAwKTmEyZOONh9G3etjg== - dependencies: - "@storybook/global" "^5.0.0" - -"@storybook/client-logger@7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-7.6.10.tgz#5d66feb18a21836f84b63f71cf5b3a85d669f049" - integrity sha512-U7bbpu21ntgePMz/mKM18qvCSWCUGCUlYru8mgVlXLCKqFqfTeP887+CsPEQf29aoE3cLgDrxqbRJ1wxX9kL9A== + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/client-api/-/client-api-7.6.13.tgz#2d8efffde6572e3e6407772a16f8ead2d0bccfcd" + integrity sha512-95u4Uip0/LNA0xuX9Tg60zCfFuqtYPVn5nvFd3IRZaUewhsioe5lfDSkbmVPycGZq3V8vKC9buaIBTxgoyKh7Q== dependencies: - "@storybook/global" "^5.0.0" + "@storybook/client-logger" "7.6.13" + "@storybook/preview-api" "7.6.13" -"@storybook/client-logger@7.6.4": - version "7.6.4" - resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-7.6.4.tgz#7533f5194903f554c297b0d327efee04c5accfbb" - integrity sha512-vJwMShC98tcoFruRVQ4FphmFqvAZX1FqZqjFyk6IxtFumPKTVSnXJjlU1SnUIkSK2x97rgdUMqkdI+wAv/tugQ== +"@storybook/client-logger@7.6.13": + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-7.6.13.tgz#bcba58e9a7ad706ca7309d50854a09ec04687f34" + integrity sha512-uo51MsUG1Fbi1IA+me9tewF1mFiaYuyR0IMeBmaU3Z3CtjEUdOekmvRQ9ckoFn+BbKtxSipTodiR4HmIZDta3g== dependencies: "@storybook/global" "^5.0.0" -"@storybook/codemod@7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/codemod/-/codemod-7.6.10.tgz#21cc0e69df6f57d567fc27264310f820662d62fa" - integrity sha512-pzFR0nocBb94vN9QCJLC3C3dP734ZigqyPmd0ZCDj9Xce2ytfHK3v1lKB6TZWzKAZT8zztauECYxrbo4LVuagw== +"@storybook/codemod@7.6.13": + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/codemod/-/codemod-7.6.13.tgz#97cfdaa3b0bfa71db85bf1eaa05e22f20eef13b7" + integrity sha512-QjjVAxT/NnCN4hJ5TLf2wQtddfwn9r0yaFMxLb3gGsjW/ZVzmp4xOS5KeqUUXXbb1wjYWv56Egamkrs/qoUTyA== dependencies: "@babel/core" "^7.23.2" "@babel/preset-env" "^7.23.2" "@babel/types" "^7.23.0" "@storybook/csf" "^0.1.2" - "@storybook/csf-tools" "7.6.10" - "@storybook/node-logger" "7.6.10" - "@storybook/types" "7.6.10" + "@storybook/csf-tools" "7.6.13" + "@storybook/node-logger" "7.6.13" + "@storybook/types" "7.6.13" "@types/cross-spawn" "^6.0.2" cross-spawn "^7.0.3" globby "^11.0.2" @@ -3477,52 +2807,38 @@ prettier "^2.8.0" recast "^0.23.1" -"@storybook/components@7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/components/-/components-7.6.10.tgz#2d1b8c66c374327663b91f65db3b1be5749a1a6b" - integrity sha512-H5hF8pxwtbt0LxV24KMMsPlbYG9Oiui3ObvAQkvGu6q62EYxRPeNSrq3GBI5XEbI33OJY9bT24cVaZx18dXqwQ== +"@storybook/components@7.6.13", "@storybook/components@^7.0.0": + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/components/-/components-7.6.13.tgz#a9792015c7190f2a1e5ae0f5f847bb509d9450e4" + integrity sha512-IkUermvJFOCooJwlR1mamnByjSGukKjkmFGue6HWc64cZ+/DTwgHzh9O/XV82fnfTTMJ2CjOFYlYVr3brDqTVg== dependencies: "@radix-ui/react-select" "^1.2.2" "@radix-ui/react-toolbar" "^1.0.4" - "@storybook/client-logger" "7.6.10" + "@storybook/client-logger" "7.6.13" "@storybook/csf" "^0.1.2" "@storybook/global" "^5.0.0" - "@storybook/theming" "7.6.10" - "@storybook/types" "7.6.10" + "@storybook/theming" "7.6.13" + "@storybook/types" "7.6.13" memoizerific "^1.11.3" use-resize-observer "^9.1.0" util-deprecate "^1.0.2" -"@storybook/components@^7.0.0": - version "7.0.7" - resolved "https://registry.yarnpkg.com/@storybook/components/-/components-7.0.7.tgz#3b4829e8287e81a6850417c40f6f28e6ea5580bc" - integrity sha512-6PLs9LMkBuhH/w4bSJ72tYgICMbOOIHuoB/fQdVlzhsdnXL2fM/v4RVW2N7v+Oz3lYXp/JtV8V9Ub8h6eDQKXg== +"@storybook/core-client@7.6.13": + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/core-client/-/core-client-7.6.13.tgz#733307f75f1925b136627bcb9f701d390a1ec824" + integrity sha512-6tzWZ5u/8YXSthVuBqDHGABqALsiv/h+IiYaeg+UPWgz7sYwyj/IoFlHN1/du/h1wV5bc8GZyPcAIrOHxF60rQ== dependencies: - "@storybook/client-logger" "7.0.7" - "@storybook/csf" "^0.1.0" - "@storybook/global" "^5.0.0" - "@storybook/theming" "7.0.7" - "@storybook/types" "7.0.7" - memoizerific "^1.11.3" - use-resize-observer "^9.1.0" - util-deprecate "^1.0.2" + "@storybook/client-logger" "7.6.13" + "@storybook/preview-api" "7.6.13" -"@storybook/core-client@7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/core-client/-/core-client-7.6.10.tgz#cd427d7017c1f32b2e956b4eb8ea89f3424b60c9" - integrity sha512-DjnzSzSNDmZyxyg6TxugzWQwOsW+n/iWVv6sHNEvEd5STr0mjuJjIEELmv58LIr5Lsre5+LEddqHsyuLyt8ubg== +"@storybook/core-common@7.6.13": + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/core-common/-/core-common-7.6.13.tgz#46b47cce8f563a4542e9d5a9128733bc2229469d" + integrity sha512-kCCVDga/66wIWFSluT3acD3/JT3vwV7A9rxG8FZF5K38quU/b37sRXvCw8Yk5HJ4rQhrB76cxVhIOy/ZucaZVw== dependencies: - "@storybook/client-logger" "7.6.10" - "@storybook/preview-api" "7.6.10" - -"@storybook/core-common@7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/core-common/-/core-common-7.6.10.tgz#00b73761eb3c4452105a7d79b5179237a6f01b32" - integrity sha512-K3YWqjCKMnpvYsWNjOciwTH6zWbuuZzmOiipziZaVJ+sB1XYmH52Y3WGEm07TZI8AYK9DRgwA13dR/7W0nw72Q== - dependencies: - "@storybook/core-events" "7.6.10" - "@storybook/node-logger" "7.6.10" - "@storybook/types" "7.6.10" + "@storybook/core-events" "7.6.13" + "@storybook/node-logger" "7.6.13" + "@storybook/types" "7.6.13" "@types/find-cache-dir" "^3.2.1" "@types/node" "^18.0.0" "@types/node-fetch" "^2.6.4" @@ -3544,45 +2860,33 @@ resolve-from "^5.0.0" ts-dedent "^2.0.0" -"@storybook/core-events@7.0.7", "@storybook/core-events@^7.0.0": - version "7.0.7" - resolved "https://registry.yarnpkg.com/@storybook/core-events/-/core-events-7.0.7.tgz#9acb6425d0a2a3d25becc21980c2c678c6c5548e" - integrity sha512-XNsR2RgaL2vBwuqsu+KA1DzGmB1UFfrAhpxhmyWTKDCniwtTLlaXgfKbqwcrOrPu/o1YswgIup/9UHepRHaf4A== - -"@storybook/core-events@7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/core-events/-/core-events-7.6.10.tgz#d521cbdadebfa56caaa8815a1e132694a20f05e9" - integrity sha512-yccDH67KoROrdZbRKwxgTswFMAco5nlCyxszCDASCLygGSV2Q2e+YuywrhchQl3U6joiWi3Ps1qWu56NeNafag== - dependencies: - ts-dedent "^2.0.0" - -"@storybook/core-events@7.6.4": - version "7.6.4" - resolved "https://registry.yarnpkg.com/@storybook/core-events/-/core-events-7.6.4.tgz#55405545dbc9ae5715654d2198ee1f1a3cc34ef7" - integrity sha512-i3xzcJ19ILSy4oJL5Dz9y0IlyApynn5RsGhAMIsW+mcfri+hGfeakq1stNCo0o7jW4Y3A7oluFTtIoK8DOxQdQ== +"@storybook/core-events@7.6.13", "@storybook/core-events@^7.0.0": + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/core-events/-/core-events-7.6.13.tgz#772834ebf72f1fda339d7152566f051ac38394b9" + integrity sha512-hsL6JT273b1RcJBGHpNNLJ1ilzFMT4UCJwwtOpNNQVPBJt0Hn22vxC69/hpqSINrhHRLj3ak8CTtA0ynVjngaQ== dependencies: ts-dedent "^2.0.0" -"@storybook/core-server@7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/core-server/-/core-server-7.6.10.tgz#53bf43b8b3c999c87196774a0b92e2e10a434e4c" - integrity sha512-2icnqJkn3vwq0eJPP0rNaHd7IOvxYf5q4lSVl2AWTxo/Ae19KhokI6j/2vvS2XQJMGQszwshlIwrZUNsj5p0yw== +"@storybook/core-server@7.6.13": + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/core-server/-/core-server-7.6.13.tgz#66116d3c8cd5965e40a246f0eabc4313ec29781a" + integrity sha512-kcHhCL8XDv4k5QJqBVWOYJ2lwX6orQHnx0N7fvLhJ7IHtUp1YQYn1+ufnGFZBlpNGGvPwz3oX4hmOT1G+PQdlw== dependencies: "@aw-web-design/x-default-browser" "1.4.126" "@discoveryjs/json-ext" "^0.5.3" - "@storybook/builder-manager" "7.6.10" - "@storybook/channels" "7.6.10" - "@storybook/core-common" "7.6.10" - "@storybook/core-events" "7.6.10" + "@storybook/builder-manager" "7.6.13" + "@storybook/channels" "7.6.13" + "@storybook/core-common" "7.6.13" + "@storybook/core-events" "7.6.13" "@storybook/csf" "^0.1.2" - "@storybook/csf-tools" "7.6.10" + "@storybook/csf-tools" "7.6.13" "@storybook/docs-mdx" "^0.1.0" "@storybook/global" "^5.0.0" - "@storybook/manager" "7.6.10" - "@storybook/node-logger" "7.6.10" - "@storybook/preview-api" "7.6.10" - "@storybook/telemetry" "7.6.10" - "@storybook/types" "7.6.10" + "@storybook/manager" "7.6.13" + "@storybook/node-logger" "7.6.13" + "@storybook/preview-api" "7.6.13" + "@storybook/telemetry" "7.6.13" + "@storybook/types" "7.6.13" "@types/detect-port" "^1.3.0" "@types/node" "^18.0.0" "@types/pretty-hrtime" "^1.0.0" @@ -3610,25 +2914,25 @@ watchpack "^2.2.0" ws "^8.2.3" -"@storybook/csf-plugin@7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/csf-plugin/-/csf-plugin-7.6.10.tgz#479cffe04c68a87f60589a6891a306805c758437" - integrity sha512-Sc+zZg/BnPH2X28tthNaQBnDiFfO0QmfjVoOx0fGYM9SvY3P5ehzWwp5hMRBim6a/twOTzePADtqYL+t6GMqqg== +"@storybook/csf-plugin@7.6.13": + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/csf-plugin/-/csf-plugin-7.6.13.tgz#8585d9c61b9627c46e0a8e7daf60560eddef41b9" + integrity sha512-ZTyAao/W8Aob6wT1nC4cTfBjWAT9FN0Y9nzairbvNOiqRkAvk3w/02K4BauESHYMm06QC8Pg0tzS1s+tWJtRRQ== dependencies: - "@storybook/csf-tools" "7.6.10" + "@storybook/csf-tools" "7.6.13" unplugin "^1.3.1" -"@storybook/csf-tools@7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/csf-tools/-/csf-tools-7.6.10.tgz#320638f64e2e14cf539dd55188f676fd82789be5" - integrity sha512-TnDNAwIALcN6SA4l00Cb67G02XMOrYU38bIpFJk5VMDX2dvgPjUtJNBuLmEbybGcOt7nPyyFIHzKcY5FCVGoWA== +"@storybook/csf-tools@7.6.13": + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/csf-tools/-/csf-tools-7.6.13.tgz#c7a59063d6151b44760183d283e2996cf9d24e95" + integrity sha512-N0erD3fhbZIDkQpcHlNTLvkpWVVtpiOjY3JO8B5SdBT2uQ8T7aXx7IEM3Q8g1f/BpfjkM15rZl9r4HFtm5E43Q== dependencies: "@babel/generator" "^7.23.0" "@babel/parser" "^7.23.0" "@babel/traverse" "^7.23.2" "@babel/types" "^7.23.0" "@storybook/csf" "^0.1.2" - "@storybook/types" "7.6.10" + "@storybook/types" "7.6.13" fs-extra "^11.1.0" recast "^0.23.1" ts-dedent "^2.0.0" @@ -3640,13 +2944,6 @@ dependencies: lodash "^4.17.15" -"@storybook/csf@^0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@storybook/csf/-/csf-0.1.0.tgz#62315bf9704f3aa4e0d4d909b9033833774ddfbe" - integrity sha512-uk+jMXCZ8t38jSTHk2o5btI+aV2Ksbvl6DoOv3r6VaCM1KZqeuMwtwywIQdflkA8/6q/dKT8z8L+g8hC4GC3VQ== - dependencies: - type-fest "^2.19.0" - "@storybook/csf@^0.1.2": version "0.1.2" resolved "https://registry.yarnpkg.com/@storybook/csf/-/csf-0.1.2.tgz#8e7452f0097507f5841b5ade3f5da1525bc9afb2" @@ -3659,14 +2956,14 @@ resolved "https://registry.yarnpkg.com/@storybook/docs-mdx/-/docs-mdx-0.1.0.tgz#33ba0e39d1461caf048b57db354b2cc410705316" integrity sha512-JDaBR9lwVY4eSH5W8EGHrhODjygPd6QImRbwjAuJNEnY0Vw4ie3bPkeGfnacB3OBW6u/agqPv2aRlR46JcAQLg== -"@storybook/docs-tools@7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/docs-tools/-/docs-tools-7.6.10.tgz#90ce6bcf468b8d0a479fb75e9a6ff87f482095dc" - integrity sha512-UgbikducoXzqQHf2TozO0f2rshaeBNnShVbL5Ai4oW7pDymBmrfzdjGbF/milO7yxNKcoIByeoNmu384eBamgQ== +"@storybook/docs-tools@7.6.13": + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/docs-tools/-/docs-tools-7.6.13.tgz#0e5ec2b3054f1435d144e21aa7390374427c17bc" + integrity sha512-m3YAyNRQ97vm/rLj48Lgg8jjhbjr+668aADU49S50zjwtvC7H9C0h8PJI3LyE1Owxg2Ld2B6bG5wBv30nPnxZg== dependencies: - "@storybook/core-common" "7.6.10" - "@storybook/preview-api" "7.6.10" - "@storybook/types" "7.6.10" + "@storybook/core-common" "7.6.13" + "@storybook/preview-api" "7.6.13" + "@storybook/types" "7.6.13" "@types/doctrine" "^0.0.3" assert "^2.1.0" doctrine "^3.0.0" @@ -3677,40 +2974,19 @@ resolved "https://registry.yarnpkg.com/@storybook/global/-/global-5.0.0.tgz#b793d34b94f572c1d7d9e0f44fac4e0dbc9572ed" integrity sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ== -"@storybook/manager-api@7.0.7": - version "7.0.7" - resolved "https://registry.yarnpkg.com/@storybook/manager-api/-/manager-api-7.0.7.tgz#0b3a839f4c48c84424ce0462739afb5c7e08d1b7" - integrity sha512-QTd/P72peAhofKqK+8yzIO9iWAEfPn8WUGGveV2KGaTlSlgbr87RLHEKilcXMZcYhBWC9izFRmjKum9ROdskrQ== - dependencies: - "@storybook/channels" "7.0.7" - "@storybook/client-logger" "7.0.7" - "@storybook/core-events" "7.0.7" - "@storybook/csf" "^0.1.0" - "@storybook/global" "^5.0.0" - "@storybook/router" "7.0.7" - "@storybook/theming" "7.0.7" - "@storybook/types" "7.0.7" - dequal "^2.0.2" - lodash "^4.17.21" - memoizerific "^1.11.3" - semver "^7.3.7" - store2 "^2.14.2" - telejson "^7.0.3" - ts-dedent "^2.0.0" - -"@storybook/manager-api@7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/manager-api/-/manager-api-7.6.10.tgz#0c2932f42bb97de8fb25240844fcf64474fc8905" - integrity sha512-8eGVpRlpunuFScDtc7nxpPJf/4kJBAAZlNdlhmX09j8M3voX6GpcxabBamSEX5pXZqhwxQCshD4IbqBmjvadlw== +"@storybook/manager-api@7.6.13", "@storybook/manager-api@^7.0.0": + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/manager-api/-/manager-api-7.6.13.tgz#6cfe52b05b4d68406175008bc2837908089157d8" + integrity sha512-D23lbJSmJnVGHwXzKEw3TeUbPZMDP03R5Pp4S73fWHHhSBqjadcGCGRxiFWOyCyGXi4kUg1q4TYSIMw0pHvnlg== dependencies: - "@storybook/channels" "7.6.10" - "@storybook/client-logger" "7.6.10" - "@storybook/core-events" "7.6.10" + "@storybook/channels" "7.6.13" + "@storybook/client-logger" "7.6.13" + "@storybook/core-events" "7.6.13" "@storybook/csf" "^0.1.2" "@storybook/global" "^5.0.0" - "@storybook/router" "7.6.10" - "@storybook/theming" "7.6.10" - "@storybook/types" "7.6.10" + "@storybook/router" "7.6.13" + "@storybook/theming" "7.6.13" + "@storybook/types" "7.6.13" dequal "^2.0.2" lodash "^4.17.21" memoizerific "^1.11.3" @@ -3718,79 +2994,37 @@ telejson "^7.2.0" ts-dedent "^2.0.0" -"@storybook/manager-api@^7.0.0": - version "7.6.4" - resolved "https://registry.yarnpkg.com/@storybook/manager-api/-/manager-api-7.6.4.tgz#edf5d553a78987ad8602700b7200391776010f48" - integrity sha512-RFb/iaBJfXygSgXkINPRq8dXu7AxBicTGX7MxqKXbz5FU7ANwV7abH6ONBYURkSDOH9//TQhRlVkF5u8zWg3bw== - dependencies: - "@storybook/channels" "7.6.4" - "@storybook/client-logger" "7.6.4" - "@storybook/core-events" "7.6.4" - "@storybook/csf" "^0.1.2" - "@storybook/global" "^5.0.0" - "@storybook/router" "7.6.4" - "@storybook/theming" "7.6.4" - "@storybook/types" "7.6.4" - dequal "^2.0.2" - lodash "^4.17.21" - memoizerific "^1.11.3" - semver "^7.3.7" - store2 "^2.14.2" - telejson "^7.2.0" - ts-dedent "^2.0.0" - -"@storybook/manager@7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/manager/-/manager-7.6.10.tgz#eb1b71c802fbf04353f3bf017dfb102eb0db217e" - integrity sha512-Co3sLCbNYY6O4iH2ggmRDLCPWLj03JE5s/DOG8OVoXc6vBwTc/Qgiyrsxxp6BHQnPpM0mxL6aKAxE3UjsW/Nog== +"@storybook/manager@7.6.13": + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/manager/-/manager-7.6.13.tgz#1793fc3c562984c8dbe7ade1ec3314a5675705d0" + integrity sha512-f/Qecur8pXSncdmll7dYyP8EZ+IzzReIN8eZF/NHKULfnBkIkRxf+w4LlXBgOwgU36DdsW+VH0OuGMWeeqTUwA== "@storybook/mdx2-csf@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@storybook/mdx2-csf/-/mdx2-csf-1.0.0.tgz#ce4b2e44c9082bf382db835eef611b0097b7d771" - integrity sha512-dBAnEL4HfxxJmv7LdEYUoZlQbWj9APZNIbOaq0tgF8XkxiIbzqvgB0jhL/9UOrysSDbQWBiCRTu2wOVxedGfmw== - -"@storybook/node-logger@7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-7.6.10.tgz#d4c52d04384d2728d6610fb0afff6eb1feb50fd4" - integrity sha512-ZBuqrv4bjJzKXyfRGFkVIi+z6ekn6rOPoQao4KmsfLNQAUUsEdR8Baw/zMnnU417zw5dSEaZdpuwx75SCQAeOA== - -"@storybook/postinstall@7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/postinstall/-/postinstall-7.6.10.tgz#9e81c54b1f23f71a59a6db7ee8a4d5ac40852d17" - integrity sha512-SMdXtednPCy3+SRJ7oN1OPN1oVFhj3ih+ChOEX8/kZ5J3nfmV3wLPtsZvFGUCf0KWQEP1xL+1Urv48mzMKcV/w== - -"@storybook/preview-api@7.0.7": - version "7.0.7" - resolved "https://registry.yarnpkg.com/@storybook/preview-api/-/preview-api-7.0.7.tgz#8f8da37418d91dd3d9009df914cb26add87a8e67" - integrity sha512-R5pmGTodpu6hbwEg2RM2ulWtW3d426YzsisHrZJ+FT9lecWauN1y9xHCz7HdNzEFhT8r4YOa24L9ZS3mosZ7hA== - dependencies: - "@storybook/channel-postmessage" "7.0.7" - "@storybook/channels" "7.0.7" - "@storybook/client-logger" "7.0.7" - "@storybook/core-events" "7.0.7" - "@storybook/csf" "^0.1.0" - "@storybook/global" "^5.0.0" - "@storybook/types" "7.0.7" - "@types/qs" "^6.9.5" - dequal "^2.0.2" - lodash "^4.17.21" - memoizerific "^1.11.3" - qs "^6.10.0" - synchronous-promise "^2.0.15" - ts-dedent "^2.0.0" - util-deprecate "^1.0.2" - -"@storybook/preview-api@7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/preview-api/-/preview-api-7.6.10.tgz#b8d5a4f897745fc28f0ae75f7e0e9278b0e4a50a" - integrity sha512-5A3etoIwZCx05yuv3KSTv1wynN4SR4rrzaIs/CTBp3BC4q1RBL+Or/tClk0IJPXQMlx/4Y134GtNIBbkiDofpw== - dependencies: - "@storybook/channels" "7.6.10" - "@storybook/client-logger" "7.6.10" - "@storybook/core-events" "7.6.10" + version "1.1.0" + resolved "https://registry.yarnpkg.com/@storybook/mdx2-csf/-/mdx2-csf-1.1.0.tgz#97f6df04d0bf616991cc1005a073ac004a7281e5" + integrity sha512-TXJJd5RAKakWx4BtpwvSNdgTDkKM6RkXU8GK34S/LhidQ5Pjz3wcnqb0TxEkfhK/ztbP8nKHqXFwLfa2CYkvQw== + +"@storybook/node-logger@7.6.13": + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-7.6.13.tgz#bab8256bafa7f54be7d2465db8a72d5f73cec679" + integrity sha512-Ci/2Gd0+Qd3fX6GWGS1UAa/bTl0uALsEuMuzOO0meKEPEEYZvBFCoeK6lP1ysMnxWxKaDjxNr01JlTpmjfT6ag== + +"@storybook/postinstall@7.6.13": + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/postinstall/-/postinstall-7.6.13.tgz#31aefcd7f18d7e85e8837265b01665853a480841" + integrity sha512-6NohciDuEPWSjMrUfhFjawfFUCvR70IDtAjjYhfXlSesyt06fXqbht1VrKhSsRjvwzbhYeiza5Uh/ujvSgxeGg== + +"@storybook/preview-api@7.6.13": + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/preview-api/-/preview-api-7.6.13.tgz#ace76ab343ef01328d8244264749913345979d6f" + integrity sha512-BbRlVpxgOXSe4/hpf9cRtbvvCJoRrFbjMCnmaDh+krd8O4wLbVknKhqgSR46qLyW/VGud9Rb3upakz7tNP+mtg== + dependencies: + "@storybook/channels" "7.6.13" + "@storybook/client-logger" "7.6.13" + "@storybook/core-events" "7.6.13" "@storybook/csf" "^0.1.2" "@storybook/global" "^5.0.0" - "@storybook/types" "7.6.10" + "@storybook/types" "7.6.13" "@types/qs" "^6.9.5" dequal "^2.0.2" lodash "^4.17.21" @@ -3800,41 +3034,41 @@ ts-dedent "^2.0.0" util-deprecate "^1.0.2" -"@storybook/preview@7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/preview/-/preview-7.6.10.tgz#895053c97f7e09141c6321fa42390fa8af377bef" - integrity sha512-F07BzVXTD3byq+KTWtvsw3pUu3fQbyiBNLFr2CnfU4XSdLKja5lDt8VqDQq70TayVQOf5qfUTzRd4M6pQkjw1w== +"@storybook/preview@7.6.13": + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/preview/-/preview-7.6.13.tgz#473a625be3ed7c46a15e922ed568b485074fc472" + integrity sha512-XW8+6PRVC/AfdY4Vf67XFNu9bNi5AwyLnLz7v+H4VEv+AnalRDXuszQcT6rUEumDDsDx2uwAhVs19xaQyAJu/w== -"@storybook/react-dom-shim@7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/react-dom-shim/-/react-dom-shim-7.6.10.tgz#d16df5d65a51ed66df92430d8f51d50bd177f2c2" - integrity sha512-M+N/h6ximacaFdIDjMN2waNoWwApeVYTpFeoDppiFTvdBTXChyIuiPgYX9QSg7gDz92OaA52myGOot4wGvXVzg== +"@storybook/react-dom-shim@7.6.13": + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/react-dom-shim/-/react-dom-shim-7.6.13.tgz#7309a55f65749098984461f04f2b2ee6d27f74f9" + integrity sha512-8nrys2WAFymVjywM4GrqVL1fxTfgjWkONJuH7eBbVE2SmgG87NN4lchG/V+TpkFOTkYnGwJRqUcWSqRBUoHLrg== "@storybook/react-vite@^7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/react-vite/-/react-vite-7.6.10.tgz#d69e1e8c9043bbc5e856bb09f07bb3a8b361fd93" - integrity sha512-YE2+J1wy8nO+c6Nv/hBMu91Edew3K184L1KSnfoZV8vtq2074k1Me/8pfe0QNuq631AncpfCYNb37yBAXQ/80w== + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/react-vite/-/react-vite-7.6.13.tgz#bf25917ed4560759c82f335e8baab6df4d210771" + integrity sha512-swdHnDXzGD0SCxlLqTS1QgjnmNgz8yLTuuQIM8uoMD8/Obeb/zp19Xj+tGr9LIL7u8/tspKJAyDUf9HVyh18lQ== dependencies: "@joshwooding/vite-plugin-react-docgen-typescript" "0.3.0" "@rollup/pluginutils" "^5.0.2" - "@storybook/builder-vite" "7.6.10" - "@storybook/react" "7.6.10" + "@storybook/builder-vite" "7.6.13" + "@storybook/react" "7.6.13" "@vitejs/plugin-react" "^3.0.1" magic-string "^0.30.0" react-docgen "^7.0.0" -"@storybook/react@7.6.10", "@storybook/react@^7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/react/-/react-7.6.10.tgz#aca5c446f43de75981f19d112a8a04d7abd0a03d" - integrity sha512-wwBn1cg2uZWW4peqqBjjU7XGmFq8HdkVUtWwh6dpfgmlY1Aopi+vPgZt7pY9KkWcTOq5+DerMdSfwxukpc3ajQ== +"@storybook/react@7.6.13", "@storybook/react@^7.6.10": + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/react/-/react-7.6.13.tgz#0e146fe49651d9fbc16ffc7439040e00228996f8" + integrity sha512-DjA2uyiUnDT6w0ibzsq++5z6V49bNURfuXUmPbqe6dAPvoKtMFgrT/7h+LN/0PnLe9MKhFXKpmHyUwjAQLS1QA== dependencies: - "@storybook/client-logger" "7.6.10" - "@storybook/core-client" "7.6.10" - "@storybook/docs-tools" "7.6.10" + "@storybook/client-logger" "7.6.13" + "@storybook/core-client" "7.6.13" + "@storybook/docs-tools" "7.6.13" "@storybook/global" "^5.0.0" - "@storybook/preview-api" "7.6.10" - "@storybook/react-dom-shim" "7.6.10" - "@storybook/types" "7.6.10" + "@storybook/preview-api" "7.6.13" + "@storybook/react-dom-shim" "7.6.13" + "@storybook/types" "7.6.13" "@types/escodegen" "^0.0.6" "@types/estree" "^0.0.51" "@types/node" "^18.0.0" @@ -3850,333 +3084,216 @@ type-fest "~2.19" util-deprecate "^1.0.2" -"@storybook/router@7.0.7": - version "7.0.7" - resolved "https://registry.yarnpkg.com/@storybook/router/-/router-7.0.7.tgz#9f60dc63f083b3a24e40e2461cc18eb531dfd451" - integrity sha512-/lM8/NHQKeshfnC3ayFuO8Y9TCSHnCAPRhIsVxvanBzcj+ILbCIyZ+TspvB3hT4MbX/Ez+JR8VrMbjXIGwmH8w== - dependencies: - "@storybook/client-logger" "7.0.7" - memoizerific "^1.11.3" - qs "^6.10.0" - -"@storybook/router@7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/router/-/router-7.6.10.tgz#b1f2c550eeb9f7146eefa33c5460e4149a62d721" - integrity sha512-G/H4Jn2+y8PDe8Zbq4DVxF/TPn0/goSItdILts39JENucHiuGBCjKjSWGBe1rkwKi1tUbB3yhxJVrLagxFEPpQ== - dependencies: - "@storybook/client-logger" "7.6.10" - memoizerific "^1.11.3" - qs "^6.10.0" - -"@storybook/router@7.6.4": - version "7.6.4" - resolved "https://registry.yarnpkg.com/@storybook/router/-/router-7.6.4.tgz#13112bd9d6709bebe4072d923e4921b660f8f00c" - integrity sha512-5MQ7Z4D7XNPN2yhFgjey7hXOYd6s8CggUqeAwhzGTex90SMCkKHSz1hfkcXn1ZqBPaall2b53uK553OvPLp9KQ== +"@storybook/router@7.6.13": + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/router/-/router-7.6.13.tgz#aceb9823cd5611066f6cccc6ec8453b669746e79" + integrity sha512-PE912SaViaq3SlheKMz0IW+/MIUmQpxf77YUOb3ZlMvu2KVhdZFsi9xC/3ym67nuVuF1yLELpz4Q/G1Jxlh/sg== dependencies: - "@storybook/client-logger" "7.6.4" + "@storybook/client-logger" "7.6.13" memoizerific "^1.11.3" qs "^6.10.0" -"@storybook/source-loader@7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/source-loader/-/source-loader-7.6.10.tgz#fe214f6323a27c14b85b6beb573a9ddb38d8cb35" - integrity sha512-S3nOWyj+sdpsqJqKGIN3DKE1q+Q0KYxEyPlPCawMFazozUH7tOodTIqmHBqJZCSNqdC4M1S/qcL8vpP4PfXhuA== +"@storybook/source-loader@7.6.13": + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/source-loader/-/source-loader-7.6.13.tgz#d24af2a43ec2c13c8e1f3c7cf81dbc3049c7efee" + integrity sha512-mPQWmnbtojjFWWFTQ1tThpM+VzjBllqUp6mhzXTohoWdnvxjR9b5NDVj5dRR4U/FgYxpzMpoa3jk2tJFGwMDzg== dependencies: "@storybook/csf" "^0.1.2" - "@storybook/types" "7.6.10" + "@storybook/types" "7.6.13" estraverse "^5.2.0" lodash "^4.17.21" prettier "^2.8.0" -"@storybook/telemetry@7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/telemetry/-/telemetry-7.6.10.tgz#31c0edfb9c7005cf9b5922e51ca896218e3d81ea" - integrity sha512-p3mOSUtIyy2tF1z6pQXxNh1JzYFcAm97nUgkwLzF07GfEdVAPM+ftRSLFbD93zVvLEkmLTlsTiiKaDvOY/lQWg== +"@storybook/telemetry@7.6.13": + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/telemetry/-/telemetry-7.6.13.tgz#88f24a900497c20267484b51dc7be214e1fc0ac9" + integrity sha512-G23QTpCd3W83NISTFSFjq5SyePRaQUin7F9KnafJM54cMDya7xi7aPUrlVRc5zi2Gfr8PJ8tTna1C4k3cIrHFw== dependencies: - "@storybook/client-logger" "7.6.10" - "@storybook/core-common" "7.6.10" - "@storybook/csf-tools" "7.6.10" + "@storybook/client-logger" "7.6.13" + "@storybook/core-common" "7.6.13" + "@storybook/csf-tools" "7.6.13" chalk "^4.1.0" - detect-package-manager "^2.0.1" - fetch-retry "^5.0.2" - fs-extra "^11.1.0" - read-pkg-up "^7.0.1" - -"@storybook/theming@7.0.7", "@storybook/theming@^7.0.0": - version "7.0.7" - resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-7.0.7.tgz#263c162825e3c0ff4eb53e204e586077e596037e" - integrity sha512-InTZe+Sgco1NsxgiG+cyUKWQe3GsjlIyU/o5qDdtOTXcZ64HzyBuAZlAequSddqfDeMDqxRFPc2w1J28MAUHxA== - dependencies: - "@emotion/use-insertion-effect-with-fallbacks" "^1.0.0" - "@storybook/client-logger" "7.0.7" - "@storybook/global" "^5.0.0" - memoizerific "^1.11.3" - -"@storybook/theming@7.6.10", "@storybook/theming@^7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-7.6.10.tgz#c09d66d19f5756964cc89b1f94051545fc4aaea7" - integrity sha512-f5tuy7yV3TOP3fIboSqpgLHy0wKayAw/M8HxX0jVET4Z4fWlFK0BiHJabQ+XEdAfQM97XhPFHB2IPbwsqhCEcQ== - dependencies: - "@emotion/use-insertion-effect-with-fallbacks" "^1.0.0" - "@storybook/client-logger" "7.6.10" - "@storybook/global" "^5.0.0" - memoizerific "^1.11.3" + detect-package-manager "^2.0.1" + fetch-retry "^5.0.2" + fs-extra "^11.1.0" + read-pkg-up "^7.0.1" -"@storybook/theming@7.6.4": - version "7.6.4" - resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-7.6.4.tgz#cc81d0aee5fc80fe383cb6790e3a0e2ad80d2185" - integrity sha512-Z/dcC5EpkIXelYCkt9ojnX6D7qGOng8YHxV/OWlVE9TrEGYVGPOEfwQryR0RhmGpDha1TYESLYrsDb4A8nJ1EA== +"@storybook/theming@7.6.13", "@storybook/theming@^7.0.0", "@storybook/theming@^7.6.10": + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-7.6.13.tgz#9026cf418101f7532da79e3684ac444e5daa6f2f" + integrity sha512-Dj+zVF2CVdTrynjSW3Iydajc8EKCQCYNYA3bpkid0LltAIe8mLTkuTBYiI5CgviWmQc55iBrNpF2MA5AzW5Q3Q== dependencies: "@emotion/use-insertion-effect-with-fallbacks" "^1.0.0" - "@storybook/client-logger" "7.6.4" + "@storybook/client-logger" "7.6.13" "@storybook/global" "^5.0.0" memoizerific "^1.11.3" -"@storybook/types@7.0.7": - version "7.0.7" - resolved "https://registry.yarnpkg.com/@storybook/types/-/types-7.0.7.tgz#e42ab7e44b3d7d49f50592f0d9d03023f44af079" - integrity sha512-v9piuwp8FvTiHXIOOi5lEyTEJKhnbcbhVxgJ3VFhhXYFd0DTz6Bst0XIIgkgs21ITb3xhkfPbCRUueMcbXO1MA== - dependencies: - "@storybook/channels" "7.0.7" - "@types/babel__core" "^7.0.0" - "@types/express" "^4.7.0" - file-system-cache "^2.0.0" - -"@storybook/types@7.6.10": - version "7.6.10" - resolved "https://registry.yarnpkg.com/@storybook/types/-/types-7.6.10.tgz#20cfb2dfeba2ecf54721de131276041d073fe42e" - integrity sha512-hcS2HloJblaMpCAj2axgGV+53kgSRYPT0a1PG1IHsZaYQILfHSMmBqM8XzXXYTsgf9250kz3dqFX1l0n3EqMlQ== +"@storybook/types@7.6.13": + version "7.6.13" + resolved "https://registry.yarnpkg.com/@storybook/types/-/types-7.6.13.tgz#4d957ac6ddb2213b90525b28b8548749899c2f18" + integrity sha512-N8HfqhL5uaI69BZx+xLkKi1YIgDp34XeL3uhxii4NfThcY1KJA643Gqk3oLKefiBqBpIRGKN0nA41Fhdvhr7Hw== dependencies: - "@storybook/channels" "7.6.10" + "@storybook/channels" "7.6.13" "@types/babel__core" "^7.0.0" "@types/express" "^4.7.0" file-system-cache "2.3.0" -"@storybook/types@7.6.4": - version "7.6.4" - resolved "https://registry.yarnpkg.com/@storybook/types/-/types-7.6.4.tgz#3bb50b46286cc83484848c3c450c32cc2071eb21" - integrity sha512-qyiiXPCvol5uVgfubcIMzJBA0awAyFPU+TyUP1mkPYyiTHnsHYel/mKlSdPjc8a97N3SlJXHOCx41Hde4IyJgg== - dependencies: - "@storybook/channels" "7.6.4" - "@types/babel__core" "^7.0.0" - "@types/express" "^4.7.0" - file-system-cache "2.3.0" - -"@svgr/babel-plugin-add-jsx-attribute@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-7.0.0.tgz#80856c1b7a3b7422d232f6e079f0beb90c4a13e9" - integrity sha512-khWbXesWIP9v8HuKCl2NU2HNAyqpSQ/vkIl36Nbn4HIwEYSRWL0H7Gs6idJdha2DkpFDWlsqMELvoCE8lfFY6Q== +"@svgr/babel-plugin-add-jsx-attribute@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz#4001f5d5dd87fa13303e36ee106e3ff3a7eb8b22" + integrity sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g== -"@svgr/babel-plugin-remove-jsx-attribute@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-7.0.0.tgz#91da77a009dc38e8d30da45d9b62ef8736f2d90a" - integrity sha512-iiZaIvb3H/c7d3TH2HBeK91uI2rMhZNwnsIrvd7ZwGLkFw6mmunOCoVnjdYua662MqGFxlN9xTq4fv9hgR4VXQ== +"@svgr/babel-plugin-remove-jsx-attribute@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz#69177f7937233caca3a1afb051906698f2f59186" + integrity sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA== -"@svgr/babel-plugin-remove-jsx-empty-expression@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-7.0.0.tgz#5154ff1213509e36ab315974c8c2fd48dafb827b" - integrity sha512-sQQmyo+qegBx8DfFc04PFmIO1FP1MHI1/QEpzcIcclo5OAISsOJPW76ZIs0bDyO/DBSJEa/tDa1W26pVtt0FRw== +"@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz#c2c48104cfd7dcd557f373b70a56e9e3bdae1d44" + integrity sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA== -"@svgr/babel-plugin-replace-jsx-attribute-value@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-7.0.0.tgz#7e72f44ee57fdbcb02fb0d4a7629466c5242725e" - integrity sha512-i6MaAqIZXDOJeikJuzocByBf8zO+meLwfQ/qMHIjCcvpnfvWf82PFvredEZElErB5glQFJa2KVKk8N2xV6tRRA== +"@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz#8fbb6b2e91fa26ac5d4aa25c6b6e4f20f9c0ae27" + integrity sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ== -"@svgr/babel-plugin-svg-dynamic-title@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-7.0.0.tgz#8caf0449c678ea29be756b89960b2b16c9f33f00" - integrity sha512-BoVSh6ge3SLLpKC0pmmN9DFlqgFy4NxNgdZNLPNJWBUU7TQpDWeBuyVuDW88iXydb5Cv0ReC+ffa5h3VrKfk1w== +"@svgr/babel-plugin-svg-dynamic-title@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz#1d5ba1d281363fc0f2f29a60d6d936f9bbc657b0" + integrity sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og== -"@svgr/babel-plugin-svg-em-dimensions@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-7.0.0.tgz#4db6b5af6d29e93db236b1a013fa953754071d41" - integrity sha512-tNDcBa+hYn0gO+GkP/AuNKdVtMufVhU9fdzu+vUQsR18RIJ9RWe7h/pSBY338RO08wArntwbDk5WhQBmhf2PaA== +"@svgr/babel-plugin-svg-em-dimensions@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz#35e08df300ea8b1d41cb8f62309c241b0369e501" + integrity sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g== -"@svgr/babel-plugin-transform-react-native-svg@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-7.0.0.tgz#236995e58b5e36ff06365d5310509ce5391aeec9" - integrity sha512-qw54u8ljCJYL2KtBOjI5z7Nzg8LnSvQOP5hPKj77H4VQL4+HdKbAT5pnkkZLmHKYwzsIHSYKXxHouD8zZamCFQ== +"@svgr/babel-plugin-transform-react-native-svg@8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz#90a8b63998b688b284f255c6a5248abd5b28d754" + integrity sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q== -"@svgr/babel-plugin-transform-svg-component@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-7.0.0.tgz#a9b62730acf10d22a2aa57e0f701c0ecbc270430" - integrity sha512-CcFECkDj98daOg9jE3Bh3uyD9kzevCAnZ+UtzG6+BQG/jOQ2OA3jHnX6iG4G1MCJkUQFnUvEv33NvQfqrb/F3A== +"@svgr/babel-plugin-transform-svg-component@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz#013b4bfca88779711f0ed2739f3f7efcefcf4f7e" + integrity sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw== -"@svgr/babel-preset@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-7.0.0.tgz#55aaca4cec2ff6515a571715b6b6fa98675b66d9" - integrity sha512-EX/NHeFa30j5UjldQGVQikuuQNHUdGmbh9kEpBKofGUtF0GUPJ4T4rhoYiqDAOmBOxojyot36JIFiDUHUK1ilQ== - dependencies: - "@svgr/babel-plugin-add-jsx-attribute" "^7.0.0" - "@svgr/babel-plugin-remove-jsx-attribute" "^7.0.0" - "@svgr/babel-plugin-remove-jsx-empty-expression" "^7.0.0" - "@svgr/babel-plugin-replace-jsx-attribute-value" "^7.0.0" - "@svgr/babel-plugin-svg-dynamic-title" "^7.0.0" - "@svgr/babel-plugin-svg-em-dimensions" "^7.0.0" - "@svgr/babel-plugin-transform-react-native-svg" "^7.0.0" - "@svgr/babel-plugin-transform-svg-component" "^7.0.0" - -"@svgr/core@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@svgr/core/-/core-7.0.0.tgz#def863d2670c682615583c80b408e83c095c2233" - integrity sha512-ztAoxkaKhRVloa3XydohgQQCb0/8x9T63yXovpmHzKMkHO6pkjdsIAWKOS4bE95P/2quVh1NtjSKlMRNzSBffw== +"@svgr/babel-preset@8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-8.1.0.tgz#0e87119aecdf1c424840b9d4565b7137cabf9ece" + integrity sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug== + dependencies: + "@svgr/babel-plugin-add-jsx-attribute" "8.0.0" + "@svgr/babel-plugin-remove-jsx-attribute" "8.0.0" + "@svgr/babel-plugin-remove-jsx-empty-expression" "8.0.0" + "@svgr/babel-plugin-replace-jsx-attribute-value" "8.0.0" + "@svgr/babel-plugin-svg-dynamic-title" "8.0.0" + "@svgr/babel-plugin-svg-em-dimensions" "8.0.0" + "@svgr/babel-plugin-transform-react-native-svg" "8.1.0" + "@svgr/babel-plugin-transform-svg-component" "8.0.0" + +"@svgr/core@^8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@svgr/core/-/core-8.1.0.tgz#41146f9b40b1a10beaf5cc4f361a16a3c1885e88" + integrity sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA== dependencies: "@babel/core" "^7.21.3" - "@svgr/babel-preset" "^7.0.0" + "@svgr/babel-preset" "8.1.0" camelcase "^6.2.0" cosmiconfig "^8.1.3" + snake-case "^3.0.4" -"@svgr/hast-util-to-babel-ast@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-7.0.0.tgz#d457dfbe74ebc1e5a6daf97ded49e9576a3a00cf" - integrity sha512-42Ej9sDDEmsJKjrfQ1PHmiDiHagh/u9AHO9QWbeNx4KmD9yS5d1XHmXUNINfUcykAU+4431Cn+k6Vn5mWBYimQ== +"@svgr/hast-util-to-babel-ast@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz#6952fd9ce0f470e1aded293b792a2705faf4ffd4" + integrity sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q== dependencies: "@babel/types" "^7.21.3" entities "^4.4.0" -"@svgr/plugin-jsx@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-7.0.0.tgz#b9e0c7d05bc890d70163ac0490ba8c41f1afab90" - integrity sha512-SWlTpPQmBUtLKxXWgpv8syzqIU8XgFRvyhfkam2So8b3BE0OS0HPe5UfmlJ2KIC+a7dpuuYovPR2WAQuSyMoPw== +"@svgr/plugin-jsx@^8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz#96969f04a24b58b174ee4cd974c60475acbd6928" + integrity sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA== dependencies: "@babel/core" "^7.21.3" - "@svgr/babel-preset" "^7.0.0" - "@svgr/hast-util-to-babel-ast" "^7.0.0" + "@svgr/babel-preset" "8.1.0" + "@svgr/hast-util-to-babel-ast" "8.0.0" svg-parser "^2.0.4" -"@swc/core-darwin-arm64@1.3.100": - version "1.3.100" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.100.tgz#f582c5bbc9c49506f728fc1d14dff33c2cc226d5" - integrity sha512-XVWFsKe6ei+SsDbwmsuRkYck1SXRpO60Hioa4hoLwR8fxbA9eVp6enZtMxzVVMBi8ej5seZ4HZQeAWepbukiBw== - -"@swc/core-darwin-arm64@1.3.36": - version "1.3.36" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.36.tgz#37f15d0edda0e78837bdab337d69777d2fecfa40" - integrity sha512-lsP+C8p9cC/Vd9uAbtxpEnM8GoJI/MMnVuXak7OlxOtDH9/oTwmAcAQTfNGNaH19d2FAIRwf+5RbXCPnxa2Zjw== - -"@swc/core-darwin-x64@1.3.100": - version "1.3.100" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.3.100.tgz#d84f5c0bb4603c252884d011a698ed7c634b1505" - integrity sha512-KF/MXrnH1nakm1wbt4XV8FS7kvqD9TGmVxeJ0U4bbvxXMvzeYUurzg3AJUTXYmXDhH/VXOYJE5N5RkwZZPs5iA== - -"@swc/core-darwin-x64@1.3.36": - version "1.3.36" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.3.36.tgz#da6327511b62a78c2992749dd9ed813a9345608b" - integrity sha512-jaLXsozWN5xachl9fPxDMi5nbWq1rRxPAt6ISeiYB6RJk0MQKH1634pOweBBem2pUDDzwDFXFw6f22LTm/cFvA== - -"@swc/core-linux-arm-gnueabihf@1.3.36": - version "1.3.36" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.36.tgz#4272d94f376e5b90e6453d56f52f2618e2f7b825" - integrity sha512-vcBdTHjoEpvJDbFlgto+S6VwAHzLA9GyCiuNcTU2v4KNQlFzhbO4A4PMfMCb/Z0RLJEr16tirfHdWIxjU3h8nw== - -"@swc/core-linux-arm64-gnu@1.3.100": - version "1.3.100" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.100.tgz#1ed4b92b373882d8f338c4e0a0aa64cdaa6106f1" - integrity sha512-p8hikNnAEJrw5vHCtKiFT4hdlQxk1V7vqPmvUDgL/qe2menQDK/i12tbz7/3BEQ4UqUPnvwpmVn2d19RdEMNxw== - -"@swc/core-linux-arm64-gnu@1.3.36": - version "1.3.36" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.36.tgz#d5c39fa52803ec0891c861588e5c4deb89652f63" - integrity sha512-o7f5OsvwWppJo+qIZmrGO5+XC6DPt6noecSbRHjF6o1YAcR13ETPC14k1eC9H1YbQwpyCFNVAFXyNcUbCeQyrQ== - -"@swc/core-linux-arm64-musl@1.3.100": - version "1.3.100" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.100.tgz#9db560f7459e42e65ec02670d6a8316e7c850cfc" - integrity sha512-BWx/0EeY89WC4q3AaIaBSGfQxkYxIlS3mX19dwy2FWJs/O+fMvF9oLk/CyJPOZzbp+1DjGeeoGFuDYpiNO91JA== - -"@swc/core-linux-arm64-musl@1.3.36": - version "1.3.36" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.36.tgz#2a47ba9b438790f2e32584ca0698ef053cc3ddba" - integrity sha512-FSHPngMi3c0fuGt9yY2Ubn5UcELi3EiPLJxBSC3X8TF9atI/WHZzK9PE9Gtn0C/LyRh4CoyOugDtSOPzGYmLQg== - -"@swc/core-linux-x64-gnu@1.3.100": - version "1.3.100" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.100.tgz#228826ea48879bf1e73683fbef4373e3e762e424" - integrity sha512-XUdGu3dxAkjsahLYnm8WijPfKebo+jHgHphDxaW0ovI6sTdmEGFDew7QzKZRlbYL2jRkUuuKuDGvD6lO5frmhA== - -"@swc/core-linux-x64-gnu@1.3.36": - version "1.3.36" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.36.tgz#5e239123452231092eac7d6bd007949b5a7e38fb" - integrity sha512-PHSsH2rek5pr3e0K09VgWAbrWK2vJhaI7MW9TPoTjyACYjcs3WwjcjQ30MghXUs2Dc/bXjWAOi9KFTjq/uCyFg== - -"@swc/core-linux-x64-musl@1.3.100": - version "1.3.100" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.100.tgz#09a234dbbf625d071ecb663680e997a62d230d49" - integrity sha512-PhoXKf+f0OaNW/GCuXjJ0/KfK9EJX7z2gko+7nVnEA0p3aaPtbP6cq1Ubbl6CMoPL+Ci3gZ7nYumDqXNc3CtLQ== - -"@swc/core-linux-x64-musl@1.3.36": - version "1.3.36" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.36.tgz#ed2a26e32d4d4e6f7cbf9f34d50cd38feb78d8dd" - integrity sha512-4LfMYQHzozHCKkIcmQy83b+4SpI+mOp6sYNbXqSRz5dYvTVjegKZXe596P1U/87cK2cgR4uYvkgkgBXquaWvwQ== - -"@swc/core-win32-arm64-msvc@1.3.100": - version "1.3.100" - resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.100.tgz#add1c82884c10a9054ed6a48f884097aa85c6d2b" - integrity sha512-PwLADZN6F9cXn4Jw52FeP/MCLVHm8vwouZZSOoOScDtihjY495SSjdPnlosMaRSR4wJQssGwiD/4MbpgQPqbAw== - -"@swc/core-win32-arm64-msvc@1.3.36": - version "1.3.36" - resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.36.tgz#d8fbba50bfbf5e39aa4826c8c46978c4b1fdfbe7" - integrity sha512-7y3dDcun79TAjCyk3Iv0eOMw1X/KNQbkVyKOGqnEgq9g22F8F1FoUGKHNTzUqVdzpHeJSsHgW5PlkEkl3c/d9w== - -"@swc/core-win32-ia32-msvc@1.3.100": - version "1.3.100" - resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.100.tgz#e0b6c5ae7f3250adeeb88dae83558d3f45148c56" - integrity sha512-0f6nicKSLlDKlyPRl2JEmkpBV4aeDfRQg6n8mPqgL7bliZIcDahG0ej+HxgNjZfS3e0yjDxsNRa6sAqWU2Z60A== - -"@swc/core-win32-ia32-msvc@1.3.36": - version "1.3.36" - resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.36.tgz#108830d0282a80d0f2d77bee7773d2985d389346" - integrity sha512-zK0VR3B4LX5hzQ+7eD+K+FkxJlJg5Lo36BeahMzQ+/i0IURpnuyFlW88sdkFkMsc2swdU6bpvxLZeIRQ3W4OUg== - -"@swc/core-win32-x64-msvc@1.3.100": - version "1.3.100" - resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.100.tgz#34721dff151d7dcf165675f18aeed0a12264d88c" - integrity sha512-b7J0rPoMkRTa3XyUGt8PwCaIBuYWsL2DqbirrQKRESzgCvif5iNpqaM6kjIjI/5y5q1Ycv564CB51YDpiS8EtQ== - -"@swc/core-win32-x64-msvc@1.3.36": - version "1.3.36" - resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.36.tgz#96d9b1077a6877f6583f5d7405f8b9380b9364fc" - integrity sha512-2bIjr9DhAckGiXZEvj6z2z7ECPcTimG+wD0VuQTvr+wkx46uAJKl5Kq+Zk+dd15ErL7JGUtCet1T7bf1k4FwvQ== - -"@swc/core@^1.3.1": - version "1.3.36" - resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.3.36.tgz#c82fd4e7789082aeff47a622ef3701fffaf835e7" - integrity sha512-Ogrd9uRNIj7nHjXxG66UlKBIcXESUenJ7OD6K2a8p82qlg6ne7Ne5Goiipm/heHYhSfVmjcnRWL9ZJ4gv+YCPA== - optionalDependencies: - "@swc/core-darwin-arm64" "1.3.36" - "@swc/core-darwin-x64" "1.3.36" - "@swc/core-linux-arm-gnueabihf" "1.3.36" - "@swc/core-linux-arm64-gnu" "1.3.36" - "@swc/core-linux-arm64-musl" "1.3.36" - "@swc/core-linux-x64-gnu" "1.3.36" - "@swc/core-linux-x64-musl" "1.3.36" - "@swc/core-win32-arm64-msvc" "1.3.36" - "@swc/core-win32-ia32-msvc" "1.3.36" - "@swc/core-win32-x64-msvc" "1.3.36" - -"@swc/core@^1.3.96": - version "1.3.100" - resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.3.100.tgz#8fa36f26a35137620234b084224c9fa9b8a0fee2" - integrity sha512-7dKgTyxJjlrMwFZYb1auj3Xq0D8ZBe+5oeIgfMlRU05doXZypYJe0LAk0yjj3WdbwYzpF+T1PLxwTWizI0pckw== +"@swc/core-darwin-arm64@1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.4.0.tgz#11abf23b884929a467ba270cf6789b9c50c4248b" + integrity sha512-UTJ/Vz+s7Pagef6HmufWt6Rs0aUu+EJF4Pzuwvr7JQQ5b1DZeAAUeUtkUTFx/PvCbM8Xfw4XdKBUZfrIKCfW8A== + +"@swc/core-darwin-x64@1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.4.0.tgz#f044ddaca60c5081e907b148721ad7461f6f6dfe" + integrity sha512-f8v58u2GsGak8EtZFN9guXqE0Ep10Suny6xriaW2d8FGqESPyNrnBzli3aqkSeQk5gGqu2zJ7WiiKp3XoUOidA== + +"@swc/core-linux-arm-gnueabihf@1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.4.0.tgz#52ceea673fc76692c0bd6d58e1863125c3e6173b" + integrity sha512-q2KAkBzmPcTnRij/Y1fgHCKAGevUX/H4uUESrw1J5gmUg9Qip6onKV80lTumA1/aooGJ18LOsB31qdbwmZk9OA== + +"@swc/core-linux-arm64-gnu@1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.4.0.tgz#7f3ff1ab824ec48acdb39d231cbcb4096a4f9dd0" + integrity sha512-SknGu96W0mzHtLHWm+62fk5+Omp9fMPFO7AWyGFmz2tr8EgRRXtTSrBUnWhAbgcalnhen48GsvtMdxf1KNputg== + +"@swc/core-linux-arm64-musl@1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.4.0.tgz#26c3b1f7947c19ef725997af716f230957d586f8" + integrity sha512-/k3TDvpBRMDNskHooNN1KqwUhcwkfBlIYxRTnJvsfT2C7My4pffR+4KXmt0IKynlTTbCdlU/4jgX4801FSuliw== + +"@swc/core-linux-x64-gnu@1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.4.0.tgz#2c7d03a04a7d045394cfed7d46419ff8816ec22e" + integrity sha512-GYsTMvNt5+WTVlwwQzOOWsPMw6P/F41u5PGHWmfev8Nd4QJ1h3rWPySKk4mV42IJwH9MgQCVSl3ygwNqwl6kFg== + +"@swc/core-linux-x64-musl@1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.4.0.tgz#0e76442dfb6d5026d8d6e7db6b2f4922b7692d0f" + integrity sha512-jGVPdM/VwF7kK/uYRW5N6FwzKf/FnDjGIR3RPvQokjYJy7Auk+3Oj21C0Jev7sIT9RYnO/TrFEoEozKeD/z2Qw== + +"@swc/core-win32-arm64-msvc@1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.4.0.tgz#0177bebf312eb251d6749ab76259c0e08088e837" + integrity sha512-biHYm1AronEKlt47O/H8sSOBM2BKXMmWT+ApvlxUw50m1RGNnVnE0bgY7tylFuuSiWyXsQPJbmUV708JqORXVg== + +"@swc/core-win32-ia32-msvc@1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.4.0.tgz#27fa650280e5651aa42129eaf03e02787b866417" + integrity sha512-TL5L2tFQb19kJwv6+elToGBj74QXCn9j+hZfwQatvZEJRA5rDK16eH6oAE751dGUArhnWlW3Vj65hViPvTuycw== + +"@swc/core-win32-x64-msvc@1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.4.0.tgz#bd575c599bd6847bddc4863a3babd85e3db5e11e" + integrity sha512-e2xVezU7XZ2Stzn4i7TOQe2Kn84oYdG0M3A7XI7oTdcpsKCcKwgiMoroiAhqCv+iN20KNqhnWwJiUiTj/qN5AA== + +"@swc/core@^1.3.1", "@swc/core@^1.3.107": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.4.0.tgz#3a0ceeea5b889173f4592955fe1da4d071d86a76" + integrity sha512-wc5DMI5BJftnK0Fyx9SNJKkA0+BZSJQx8430yutWmsILkHMBD3Yd9GhlMaxasab9RhgKqZp7Ht30hUYO5ZDvQg== dependencies: "@swc/counter" "^0.1.1" "@swc/types" "^0.1.5" optionalDependencies: - "@swc/core-darwin-arm64" "1.3.100" - "@swc/core-darwin-x64" "1.3.100" - "@swc/core-linux-arm64-gnu" "1.3.100" - "@swc/core-linux-arm64-musl" "1.3.100" - "@swc/core-linux-x64-gnu" "1.3.100" - "@swc/core-linux-x64-musl" "1.3.100" - "@swc/core-win32-arm64-msvc" "1.3.100" - "@swc/core-win32-ia32-msvc" "1.3.100" - "@swc/core-win32-x64-msvc" "1.3.100" + "@swc/core-darwin-arm64" "1.4.0" + "@swc/core-darwin-x64" "1.4.0" + "@swc/core-linux-arm-gnueabihf" "1.4.0" + "@swc/core-linux-arm64-gnu" "1.4.0" + "@swc/core-linux-arm64-musl" "1.4.0" + "@swc/core-linux-x64-gnu" "1.4.0" + "@swc/core-linux-x64-musl" "1.4.0" + "@swc/core-win32-arm64-msvc" "1.4.0" + "@swc/core-win32-ia32-msvc" "1.4.0" + "@swc/core-win32-x64-msvc" "1.4.0" "@swc/counter@^0.1.1": - version "0.1.2" - resolved "https://registry.yarnpkg.com/@swc/counter/-/counter-0.1.2.tgz#bf06d0770e47c6f1102270b744e17b934586985e" - integrity sha512-9F4ys4C74eSTEUNndnER3VJ15oru2NumfQxS8geE+f3eB5xvfxpWyqE5XlVnxb/R14uoXi6SLbBwwiDSkv+XEw== + version "0.1.3" + resolved "https://registry.yarnpkg.com/@swc/counter/-/counter-0.1.3.tgz#cc7463bd02949611c6329596fccd2b0ec782b0e9" + integrity sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ== "@swc/types@^0.1.5": version "0.1.5" @@ -4191,24 +3308,10 @@ "@babel/runtime" "^7.14.6" "@testing-library/dom" "^9.0.0" -"@testing-library/dom@^7.22.3": - version "7.31.2" - resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-7.31.2.tgz#df361db38f5212b88555068ab8119f5d841a8c4a" - integrity sha512-3UqjCpey6HiTZT92vODYLPxTBWlM8ZOOjr3LX5F37/VRipW2M1kX6I/Cm4VXzteZqfGfagg8yXywpcOgQBlNsQ== - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/runtime" "^7.12.5" - "@types/aria-query" "^4.2.0" - aria-query "^4.2.2" - chalk "^4.1.0" - dom-accessibility-api "^0.5.6" - lz-string "^1.4.4" - pretty-format "^26.6.2" - "@testing-library/dom@^9.0.0": - version "9.3.3" - resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-9.3.3.tgz#108c23a5b0ef51121c26ae92eb3179416b0434f5" - integrity sha512-fB0R+fa3AUqbLHWyxXa2kGVtf1Fe1ZZFr0Zp6AIbIAzXb2mKbEXl+PCQNUOaq5lbTab5tfctfXRNsWXxa2f7Aw== + version "9.3.4" + resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-9.3.4.tgz#50696ec28376926fec0a1bf87d9dbac5e27f60ce" + integrity sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ== dependencies: "@babel/code-frame" "^7.10.4" "@babel/runtime" "^7.12.5" @@ -4219,42 +3322,33 @@ lz-string "^1.5.0" pretty-format "^27.0.2" -"@testing-library/jest-dom@~5.11.3": - version "5.11.10" - resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-5.11.10.tgz#1cd90715023e1627f5ed26ab3b38e6f22d77046c" - integrity sha512-FuKiq5xuk44Fqm0000Z9w0hjOdwZRNzgx7xGGxQYepWFZy+OYUMOT/wPI4nLYXCaVltNVpU1W/qmD88wLWDsqQ== +"@testing-library/jest-dom@~6.4.2": + version "6.4.2" + resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-6.4.2.tgz#38949f6b63722900e2d75ba3c6d9bf8cffb3300e" + integrity sha512-CzqH0AFymEMG48CpzXFriYYkOjk6ZGPCLMhW9e9jg3KMCn5OfJecF8GtGW7yGfR/IgCe3SX8BSwjdzI6BBbZLw== dependencies: + "@adobe/css-tools" "^4.3.2" "@babel/runtime" "^7.9.2" - "@types/testing-library__jest-dom" "^5.9.1" - aria-query "^4.2.2" + aria-query "^5.0.0" chalk "^3.0.0" - css "^3.0.0" css.escape "^1.5.1" + dom-accessibility-api "^0.6.3" lodash "^4.17.15" redent "^3.0.0" -"@testing-library/react-hooks@~3.4.1": - version "3.4.2" - resolved "https://registry.yarnpkg.com/@testing-library/react-hooks/-/react-hooks-3.4.2.tgz#8deb94f7684e0d896edd84a4c90e5b79a0810bc2" - integrity sha512-RfPG0ckOzUIVeIqlOc1YztKgFW+ON8Y5xaSPbiBkfj9nMkkiLhLeBXT5icfPX65oJV/zCZu4z8EVnUc6GY9C5A== - dependencies: - "@babel/runtime" "^7.5.4" - "@types/testing-library__react-hooks" "^3.4.0" - -"@testing-library/react@~10.4.9": - version "10.4.9" - resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-10.4.9.tgz#9faa29c6a1a217bf8bbb96a28bd29d7a847ca150" - integrity sha512-pHZKkqUy0tmiD81afs8xfiuseXfU/N7rAX3iKjeZYje86t9VaB0LrxYVa+OOsvkrveX5jCK3IjajVn2MbePvqA== - dependencies: - "@babel/runtime" "^7.10.3" - "@testing-library/dom" "^7.22.3" - -"@testing-library/user-event@^12.1.1": - version "12.8.3" - resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-12.8.3.tgz#1aa3ed4b9f79340a1e1836bc7f57c501e838704a" - integrity sha512-IR0iWbFkgd56Bu5ZI/ej8yQwrkCv8Qydx6RzwbKz9faXazR/+5tvYKsZQgyXJiwgpcva127YO6JcWy7YlCfofQ== +"@testing-library/react@~14.2.1": + version "14.2.1" + resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-14.2.1.tgz#bf69aa3f71c36133349976a4a2da3687561d8310" + integrity sha512-sGdjws32ai5TLerhvzThYFbpnF9XtL65Cjf+gB0Dhr29BGqK+mAeN7SURSdu+eqgET4ANcWoC7FQpkaiGvBr+A== dependencies: "@babel/runtime" "^7.12.5" + "@testing-library/dom" "^9.0.0" + "@types/react-dom" "^18.0.0" + +"@testing-library/user-event@^14.5.2": + version "14.5.2" + resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-14.5.2.tgz#db7257d727c891905947bd1c1a99da20e03c2ebd" + integrity sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ== "@tootallnate/once@2": version "2.0.0" @@ -4281,31 +3375,15 @@ resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== -"@types/aria-query@^4.2.0": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-4.2.2.tgz#ed4e0ad92306a704f9fb132a0cfcf77486dbe2bc" - integrity sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig== - "@types/aria-query@^5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-5.0.1.tgz#3286741fb8f1e1580ac28784add4c7a1d49bdfbc" - integrity sha512-XTIieEY+gvJ39ChLcB4If5zHtPxt3Syj5rgZR+e1ctpmK8NjPf0zFqsz4JpLJT0xla9GFDKjy8Cpu331nrmE1Q== - -"@types/babel__core@^7.0.0": - version "7.20.0" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.0.tgz#61bc5a4cae505ce98e1e36c5445e4bee060d8891" - integrity sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ== - dependencies: - "@babel/parser" "^7.20.7" - "@babel/types" "^7.20.7" - "@types/babel__generator" "*" - "@types/babel__template" "*" - "@types/babel__traverse" "*" + version "5.0.4" + resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-5.0.4.tgz#1a31c3d378850d2778dabb6374d036dcba4ba708" + integrity sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw== -"@types/babel__core@^7.18.0": - version "7.20.3" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.3.tgz#d5625a50b6f18244425a1359a858c73d70340778" - integrity sha512-54fjTSeSHwfan8AyHWrKbfBWiEUrNTZsUwPTDSNaaP1QDQIZbeNUg3a59E9D+375MzUw/x1vx2/0F5LBz+AeYA== +"@types/babel__core@^7.0.0", "@types/babel__core@^7.18.0": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" + integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== dependencies: "@babel/parser" "^7.20.7" "@babel/types" "^7.20.7" @@ -4314,46 +3392,39 @@ "@types/babel__traverse" "*" "@types/babel__generator@*": - version "7.6.4" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.4.tgz#1f20ce4c5b1990b37900b63f050182d28c2439b7" - integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg== + version "7.6.8" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.8.tgz#f836c61f48b1346e7d2b0d93c6dacc5b9535d3ab" + integrity sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw== dependencies: "@babel/types" "^7.0.0" "@types/babel__template@*": - version "7.4.1" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969" - integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== + version "7.4.4" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" + integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" -"@types/babel__traverse@*": - version "7.18.3" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.18.3.tgz#dfc508a85781e5698d5b33443416b6268c4b3e8d" - integrity sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w== - dependencies: - "@babel/types" "^7.3.0" - -"@types/babel__traverse@^7.18.0": - version "7.20.3" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.3.tgz#a971aa47441b28ef17884ff945d0551265a2d058" - integrity sha512-Lsh766rGEFbaxMIDH7Qa+Yha8cMVI3qAK6CHt3OR0YfxOIn5Z54iHiyDRycHrBqeIiqGa20Kpsv1cavfBKkRSw== +"@types/babel__traverse@*", "@types/babel__traverse@^7.18.0": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.5.tgz#7b7502be0aa80cc4ef22978846b983edaafcd4dd" + integrity sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ== dependencies: "@babel/types" "^7.20.7" "@types/body-parser@*": - version "1.19.2" - resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0" - integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== + version "1.19.5" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.5.tgz#04ce9a3b677dc8bd681a17da1ab9835dc9d3ede4" + integrity sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg== dependencies: "@types/connect" "*" "@types/node" "*" "@types/braintree-web@^3.75.23": - version "3.75.23" - resolved "https://registry.yarnpkg.com/@types/braintree-web/-/braintree-web-3.75.23.tgz#4ef88d6724582c9f6f01f57f90b98ec575087976" - integrity sha512-uD2wQCpHXlaPHjVkoaHgNcKY8zpPddSYRztWQ3cRbpiP99Fk4p6HqDV/OkB58oMyLf5syz9cYG96qsS4VXtPKw== + version "3.96.10" + resolved "https://registry.yarnpkg.com/@types/braintree-web/-/braintree-web-3.96.10.tgz#c718cd9b6b107748746c04b3d02b0d07af7f951b" + integrity sha512-WB68hhxId8cUxddF9Au8STWULeeT2ZGvSJ+SvJz5ACqV3mYg7rlFkCOY88wHvbWBQAerqdxQ8NLVTe5V05R4/Q== dependencies: "@types/googlepay" "*" "@types/paypal-checkout-components" "*" @@ -4371,16 +3442,16 @@ integrity sha512-qQR1dr2rGIHYlJulmr8Ioq3De0Le9E4MJ5AiaeAETJJpndT1uUNHsGFK3L/UIu+rbkQSdj8J/w2bCsBZc/Y5fQ== "@types/chart.js@^2.9.21": - version "2.9.37" - resolved "https://registry.yarnpkg.com/@types/chart.js/-/chart.js-2.9.37.tgz#8af70862b154fedf938b5b87debdb3a70f6e3208" - integrity sha512-9bosRfHhkXxKYfrw94EmyDQcdjMaQPkU1fH2tDxu8DWXxf1mjzWQAV4laJF51ZbC2ycYwNDvIm1rGez8Bug0vg== + version "2.9.41" + resolved "https://registry.yarnpkg.com/@types/chart.js/-/chart.js-2.9.41.tgz#4148cdc87d4f98fad44b2883271cd0fa57f05e0d" + integrity sha512-3dvkDvueckY83UyUXtJMalYoH6faOLkWQoaTlJgB4Djde3oORmNP0Jw85HtzTuXyliUHcdp704s0mZFQKio/KQ== dependencies: moment "^2.10.2" "@types/connect@*": - version "3.4.35" - resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" - integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== + version "3.4.38" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858" + integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== dependencies: "@types/node" "*" @@ -4390,16 +3461,16 @@ integrity sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q== "@types/cross-spawn@^6.0.2": - version "6.0.4" - resolved "https://registry.yarnpkg.com/@types/cross-spawn/-/cross-spawn-6.0.4.tgz#e658d29e2308a01f48b7b30fd8cdf07aeb2e5a82" - integrity sha512-GGLpeThc2Bu8FBGmVn76ZU3lix17qZensEI4/MPty0aZpm2CHfgEMis31pf5X5EiudYKcPAsWciAsCALoPo5dw== + version "6.0.6" + resolved "https://registry.yarnpkg.com/@types/cross-spawn/-/cross-spawn-6.0.6.tgz#0163d0b79a6f85409e0decb8dcca17147f81fd22" + integrity sha512-fXRhhUkG4H3TQk5dBhQ7m/JDdSNHKwR2BBia62lhwEIq9xGiQKLxd6LymNhn47SjXhsUEPmxi+PKw2OkW4LLjA== dependencies: "@types/node" "*" "@types/css-mediaquery@^0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@types/css-mediaquery/-/css-mediaquery-0.1.1.tgz#0902ee5849b89a45390c2c9dccbb536a75a88511" - integrity sha512-JQ+sPiPlRUHmlL4e3DBUNbxVEb6p7dis78/uSDbQpkeCKVoepChZMWGPIVA2JIH0ylfkA9S+TZUdShlgDpFKrw== + version "0.1.4" + resolved "https://registry.yarnpkg.com/@types/css-mediaquery/-/css-mediaquery-0.1.4.tgz#8efbebbc0cebaf34c77db2b63892711e19143c63" + integrity sha512-DZyHAz716ZUctpqkUU2COwUoZ4gI6mZK2Q1oIz/fvNS6XHVpKSJgDnE7vRxZUBn9vjJHDVelCVW0dkshKOLFsA== "@types/d3-array@^3.0.3": version "3.2.1" @@ -4424,9 +3495,9 @@ "@types/d3-color" "*" "@types/d3-path@*": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@types/d3-path/-/d3-path-3.0.2.tgz#4327f4a05d475cf9be46a93fc2e0f8d23380805a" - integrity sha512-WAIEVlOCdd/NKRYTsqCpOMHQHemKBEINf8YXMYOtXH0GA7SY0dqMB78P3Uhgfy+4X+/Mlw2wDtlETkN6kQUCMA== + version "3.1.0" + resolved "https://registry.yarnpkg.com/@types/d3-path/-/d3-path-3.1.0.tgz#2b907adce762a78e98828f0b438eaca339ae410a" + integrity sha512-P2dlU/q51fkOc/Gfl3Ul9kicV7l+ra934qBFXCFhrZMOL6du1TM0pm1ThYvENukyOn5h9v+yMJ9Fn5JK4QozrQ== "@types/d3-scale@^4.0.2": version "4.0.8" @@ -4452,24 +3523,17 @@ resolved "https://registry.yarnpkg.com/@types/d3-timer/-/d3-timer-3.0.2.tgz#70bbda77dc23aa727413e22e214afa3f0e852f70" integrity sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw== -"@types/debug@^4.0.0": +"@types/debug@^4.0.0", "@types/debug@^4.1.7": version "4.1.12" resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.12.tgz#a155f21690871953410df4b6b6f53187f0500917" integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ== dependencies: "@types/ms" "*" -"@types/debug@^4.1.7": - version "4.1.10" - resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.10.tgz#f23148a6eb771a34c466a4fc28379d8101e84494" - integrity sha512-tOSCru6s732pofZ+sMv9o4o3Zc+Sa8l3bxd/tweTQudFn06vAzb13ZX46Zi6m6EJ+RUbRTHvgQJ1gBtSgkaUYA== - dependencies: - "@types/ms" "*" - "@types/detect-port@^1.3.0": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@types/detect-port/-/detect-port-1.3.2.tgz#8c06a975e472803b931ee73740aeebd0a2eb27ae" - integrity sha512-xxgAGA2SAU4111QefXPSp5eGbDm/hW6zhvYl9IeEPZEry9F4d66QAHm5qpUXjb6IsevZV/7emAEx5MhP6O192g== + version "1.3.5" + resolved "https://registry.yarnpkg.com/@types/detect-port/-/detect-port-1.3.5.tgz#deecde143245989dee0e82115f3caba5ee0ea747" + integrity sha512-Rf3/lB9WkDfIL9eEKaSYKc+1L/rNVYBjThk22JTqQw0YozXarX8YljFAz+HCoC6h4B4KwCMsBPZHaFezwT4BNA== "@types/doctrine@^0.0.3": version "0.0.3" @@ -4482,43 +3546,44 @@ integrity sha512-eOIHzCUSH7SMfonMG1LsC2f8vxBFtho6NGBznK41R84YzPuvSBzrhEps33IsQiOW9+VL6NQ9DbjQJznk/S4uRA== "@types/ejs@^3.1.1": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@types/ejs/-/ejs-3.1.2.tgz#75d277b030bc11b3be38c807e10071f45ebc78d9" - integrity sha512-ZmiaE3wglXVWBM9fyVC17aGPkLo/UgaOjEiI2FXQfyczrCefORPxIe+2dVmnmk3zkVIbizjrlQzmPGhSYGXG5g== + version "3.1.5" + resolved "https://registry.yarnpkg.com/@types/ejs/-/ejs-3.1.5.tgz#49d738257cc73bafe45c13cb8ff240683b4d5117" + integrity sha512-nv+GSx77ZtXiJzwKdsASqi+YQ5Z7vwHsTP0JY2SiQgjGckkBRKZnk8nIM+7oUZ1VCtuTz0+By4qVR7fqzp/Dfg== "@types/emscripten@^1.39.6": - version "1.39.9" - resolved "https://registry.yarnpkg.com/@types/emscripten/-/emscripten-1.39.9.tgz#cbe73a8d153fc714a2e3177fbda2d7332d45efa7" - integrity sha512-ILdWj4XYtNOqxJaW22NEQx2gJsLfV5ncxYhhGX1a1H1lXl2Ta0gUz7QOnOoF1xQbJwWDjImi8gXN9mKdIf6n9g== + version "1.39.10" + resolved "https://registry.yarnpkg.com/@types/emscripten/-/emscripten-1.39.10.tgz#da6e58a6171b46a41d3694f812d845d515c77e18" + integrity sha512-TB/6hBkYQJxsZHSqyeuO1Jt0AB/bW6G7rHt9g7lML7SOF6lbgcHvw/Lr+69iqN0qxgXLhWKScAon73JNnptuDw== "@types/escodegen@^0.0.6": version "0.0.6" resolved "https://registry.yarnpkg.com/@types/escodegen/-/escodegen-0.0.6.tgz#5230a9ce796e042cda6f086dbf19f22ea330659c" integrity sha512-AjwI4MvWx3HAOaZqYsjKWyEObT9lcVV0Y0V8nXo6cXzN8ZiMxVhf6F3d/UNvXVGKrEzL/Dluc5p+y9GkzlTWig== +"@types/estree@1.0.5", "@types/estree@^1.0.0": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" + integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== + "@types/estree@^0.0.51": version "0.0.51" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== -"@types/estree@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2" - integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== - "@types/express-serve-static-core@^4.17.33": - version "4.17.33" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz#de35d30a9d637dc1450ad18dd583d75d5733d543" - integrity sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA== + version "4.17.43" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.43.tgz#10d8444be560cb789c4735aea5eac6e5af45df54" + integrity sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg== dependencies: "@types/node" "*" "@types/qs" "*" "@types/range-parser" "*" + "@types/send" "*" "@types/express@^4.7.0": - version "4.17.17" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.17.tgz#01d5437f6ef9cfa8668e616e13c2f2ac9a491ae4" - integrity sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q== + version "4.17.21" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.21.tgz#c26d4a151e60efe0084b23dc3369ebc631ed192d" + integrity sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ== dependencies: "@types/body-parser" "*" "@types/express-serve-static-core" "^4.17.33" @@ -4539,21 +3604,21 @@ "@types/node" "*" "@types/googlepay@*": - version "0.6.4" - resolved "https://registry.yarnpkg.com/@types/googlepay/-/googlepay-0.6.4.tgz#e0b06ae1f12496c4fa43e52d35e76411dbbee135" - integrity sha512-PTt/UCllzl8z5HmhymPpSj6uENZvVKZvCBYdDVmbBVJnLStitxtWrterAOQZkKGlqVdzxNXYeif5hOAMNMS5mw== + version "0.7.5" + resolved "https://registry.yarnpkg.com/@types/googlepay/-/googlepay-0.7.5.tgz#b944cd0e4c49f4661c9b966cb45614eb7ae87a26" + integrity sha512-158egcRaqkMSpW6unyGV4uG4FpoCklRf3J5emCzOXSRVAohMfIuZ481JNvp4X6+KxoNjxWiGtMx5vb1YfQADPw== "@types/graceful-fs@^4.1.3": - version "4.1.6" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.6.tgz#e14b2576a1c25026b7f02ede1de3b84c3a1efeae" - integrity sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw== + version "4.1.9" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4" + integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ== dependencies: "@types/node" "*" "@types/he@^1.1.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@types/he/-/he-1.2.0.tgz#3845193e597d943bab4e61ca5d7f3d8fc3d572a3" - integrity sha512-uH2smqTN4uGReAiKedIVzoLUAXIYLBTbSofhx3hbNqj74Ua6KqFsLYszduTrLCMEAEAozF73DbGi/SC1bzQq4g== + version "1.2.3" + resolved "https://registry.yarnpkg.com/@types/he/-/he-1.2.3.tgz#c33ca3096f30cbd5d68d78211572de3f9adff75a" + integrity sha512-q67/qwlxblDzEDvzHhVkwc1gzVWxaNxeyHUBF4xElrvjL11O+Ytze+1fGpBHlr/H9myiBUaUXNnNPmBHxxfAcA== "@types/highlight.js@^9.7.0": version "9.12.4" @@ -4573,76 +3638,55 @@ integrity sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA== "@types/hoist-non-react-statics@^3.3.0": - version "3.3.1" - resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f" - integrity sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA== + version "3.3.5" + resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz#dab7867ef789d87e2b4b0003c9d65c49cc44a494" + integrity sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg== dependencies: "@types/react" "*" hoist-non-react-statics "^3.3.0" -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": +"@types/http-errors@*": version "2.0.4" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" - integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== + resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.4.tgz#7eb47726c391b7345a6ec35ad7f4de469cf5ba4f" + integrity sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA== -"@types/istanbul-lib-coverage@^2.0.1": +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": version "2.0.6" resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== "@types/istanbul-lib-report@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" - integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf" + integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== dependencies: "@types/istanbul-lib-coverage" "*" "@types/istanbul-reports@^3.0.0": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" - integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54" + integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== dependencies: "@types/istanbul-lib-report" "*" -"@types/jest-axe@^3.5.7": - version "3.5.7" - resolved "https://registry.yarnpkg.com/@types/jest-axe/-/jest-axe-3.5.7.tgz#12abeb00936a71e71760ee00c574f63e68d5d873" - integrity sha512-eFIaZbh4t7Odys8dSQBJLMbM3cubzaJLl+g5yZwBMF6nqOpXQCvwPQPDHk0tfVepeDodcLy87bopvHb5bWrNAQ== - dependencies: - "@types/jest" "*" - axe-core "^3.5.5" - -"@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/js-levenshtein@^1.1.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@types/js-levenshtein/-/js-levenshtein-1.1.2.tgz#e88f365d6a34beeaff9654706b99a790b5a5aabd" - integrity sha512-/NCbMABw2uacuyE16Iwka1EzREDD50/W2ggRBad0y1WHBvAkvR9OEINxModVY7D428gXBe0igeVX7bUc9GaslQ== + version "1.1.3" + resolved "https://registry.yarnpkg.com/@types/js-levenshtein/-/js-levenshtein-1.1.3.tgz#a6fd0bdc8255b274e5438e0bfb25f154492d1106" + integrity sha512-jd+Q+sD20Qfu9e2aEXogiO3vpOC1PYJOUdyN9gvs4Qrvkg4wF43L5OhqrPeokdv8TL0/mXoYfpkcoGZMNN2pkQ== "@types/jsdom@^21.1.4": - version "21.1.4" - resolved "https://registry.yarnpkg.com/@types/jsdom/-/jsdom-21.1.4.tgz#82105c8fb5a1072265dde1a180336ca74a8fbabf" - integrity sha512-NzAMLEV0KQ4cBaDx3Ls8VfJUElyDUm1xrtYRmcMK0gF8L5xYbujFVaQlJ50yinQ/d47j2rEP1XUzkiYrw4YRFA== + version "21.1.6" + resolved "https://registry.yarnpkg.com/@types/jsdom/-/jsdom-21.1.6.tgz#bcbc7b245787ea863f3da1ef19aa1dcfb9271a1b" + integrity sha512-/7kkMsC+/kMs7gAYmmBR9P0vGTnOoLhQhyhQJSlXGI5bzTHp6xdo0TtKWQAsz6pmSAeVqKSbqeyP6hytqr9FDw== dependencies: "@types/node" "*" "@types/tough-cookie" "*" parse5 "^7.0.0" -"@types/json-schema@^7.0.3", "@types/json-schema@^7.0.7": - version "7.0.11" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" - integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== - -"@types/json-schema@^7.0.9": - version "7.0.12" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.12.tgz#d70faba7039d5fca54c83c7dbab41051d2b6f6cb" - integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA== +"@types/json-schema@^7.0.3", "@types/json-schema@^7.0.7", "@types/json-schema@^7.0.9": + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== "@types/jspdf@^1.3.3": version "1.3.3" @@ -4650,14 +3694,14 @@ integrity sha512-DqwyAKpVuv+7DniCp2Deq1xGvfdnKSNgl9Agun2w6dFvR5UKamiv4VfYUgcypd8S9ojUyARFIlZqBrYrBMQlew== "@types/linkify-it@*": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@types/linkify-it/-/linkify-it-3.0.2.tgz#fd2cd2edbaa7eaac7e7f3c1748b52a19143846c9" - integrity sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA== + version "3.0.5" + resolved "https://registry.yarnpkg.com/@types/linkify-it/-/linkify-it-3.0.5.tgz#1e78a3ac2428e6d7e6c05c1665c242023a4601d8" + integrity sha512-yg6E+u0/+Zjva+buc3EIb+29XEg4wltq7cSmd4Uc2EE/1nUVmxyzpX6gUXD0V8jIrG0r7YeOGVIbYRkxeooCtw== "@types/lodash@^4.14.167", "@types/lodash@^4.14.175": - version "4.14.191" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.191.tgz#09511e7f7cba275acd8b419ddac8da9a6a79e2fa" - integrity sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ== + version "4.14.202" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.202.tgz#f09dbd2fb082d507178b2f2a5c7e74bd72ff98f8" + integrity sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ== "@types/luxon@3.4.2": version "3.4.2" @@ -4675,9 +3719,9 @@ highlight.js "^9.7.0" "@types/md5@^2.1.32": - version "2.3.2" - resolved "https://registry.yarnpkg.com/@types/md5/-/md5-2.3.2.tgz#529bb3f8a7e9e9f621094eb76a443f585d882528" - integrity sha512-v+JFDu96+UYJ3/UWzB0mEglIS//MZXgRaJ4ubUPwOM0gvLc/kcQ3TWNYwENEK7/EcXGQVrW8h/XqednSjBd/Og== + version "2.3.5" + resolved "https://registry.yarnpkg.com/@types/md5/-/md5-2.3.5.tgz#481cef0a896e3a5dcbfc5a8a8b02c05958af48a5" + integrity sha512-/i42wjYNgE6wf0j2bcTX6kuowmdL/6PE4IVitMpm2eYKBUuYCprdcWVK+xEF0gcV6ufMCRhtxmReGfc6hIK7Jw== "@types/mdast@^3.0.0": version "3.0.15" @@ -4687,24 +3731,29 @@ "@types/unist" "^2" "@types/mdurl@*": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@types/mdurl/-/mdurl-1.0.2.tgz#e2ce9d83a613bacf284c7be7d491945e39e1f8e9" - integrity sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA== + version "1.0.5" + resolved "https://registry.yarnpkg.com/@types/mdurl/-/mdurl-1.0.5.tgz#3e0d2db570e9fb6ccb2dc8fde0be1d79ac810d39" + integrity sha512-6L6VymKTzYSrEf4Nev4Xa1LCHKrlTlYCBMTlQKFuddo1CvQcE52I0mwfOJayueUC7MJuXOeHTcIU683lzd0cUA== "@types/mdx@^2.0.0": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@types/mdx/-/mdx-2.0.3.tgz#43fd32414f17fcbeced3578109a6edd877a2d96e" - integrity sha512-IgHxcT3RC8LzFLhKwP3gbMPeaK7BM9eBH46OdapPA7yvuIUJ8H6zHZV53J8hGZcTSnt95jANt+rTBNUUc22ACQ== + version "2.0.11" + resolved "https://registry.yarnpkg.com/@types/mdx/-/mdx-2.0.11.tgz#21f4c166ed0e0a3a733869ba04cd8daea9834b8e" + integrity sha512-HM5bwOaIQJIQbAYfax35HCKxx7a3KrK3nBtIqJgSOitivTD1y3oW9P3rxY9RkXYPUk7y/AjAohfHKmFpGE79zw== "@types/mime-types@^2.1.0": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@types/mime-types/-/mime-types-2.1.1.tgz#d9ba43490fa3a3df958759adf69396c3532cf2c1" - integrity sha512-vXOTGVSLR2jMw440moWTC7H19iUyLtP3Z1YTj7cSsubOICinjMxFeb/V57v9QdyyPGbbWolUFSSmSiRSn94tFw== + version "2.1.4" + resolved "https://registry.yarnpkg.com/@types/mime-types/-/mime-types-2.1.4.tgz#93a1933e24fed4fb9e4adc5963a63efcbb3317a2" + integrity sha512-lfU4b34HOri+kAY5UheuFMWPDOI+OPceBSHZKp69gEyTL/mmJ4cnU6Y/rlme3UL3GyOn6Y42hyIEw0/q8sWx5w== "@types/mime@*": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.1.tgz#5f8f2bca0a5863cb69bc0b0acd88c96cb1d4ae10" - integrity sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA== + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.4.tgz#2198ac274de6017b44d941e00261d5bc6a0e0a45" + integrity sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw== + +"@types/mime@^1": + version "1.3.5" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690" + integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== "@types/minimatch@*": version "5.1.2" @@ -4712,27 +3761,29 @@ integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== "@types/mocha@^10.0.2": - version "10.0.2" - resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-10.0.2.tgz#96d63314255540a36bf24da094cce7a13668d73b" - integrity sha512-NaHL0+0lLNhX6d9rs+NSt97WH/gIlRHmszXbQ/8/MV/eVcFNdeJ/GYhrFuUc8K7WuPhRhTSdMkCp8VMzhUq85w== + version "10.0.6" + resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-10.0.6.tgz#818551d39113081048bdddbef96701b4e8bb9d1b" + integrity sha512-dJvrYWxP/UcXm36Qn36fxhUKu8A/xMRXVT2cliFF1Z7UA9liG5Psj3ezNSZw+5puH2czDXRLcXQxf8JbJt0ejg== "@types/ms@*": - version "0.7.33" - resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.33.tgz#80bf1da64b15f21fd8c1dc387c31929317d99ee9" - integrity sha512-AuHIyzR5Hea7ij0P9q7vx7xu4z0C28ucwjAZC0ja7JhINyCnOw8/DnvAPQQ9TfOlCtZAmCERKQX9+o1mgQhuOQ== + version "0.7.34" + resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.34.tgz#10964ba0dee6ac4cd462e2795b6bebd407303433" + integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== "@types/node-fetch@^2.6.4": - version "2.6.4" - resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.4.tgz#1bc3a26de814f6bf466b25aeb1473fa1afe6a660" - integrity sha512-1ZX9fcN4Rvkvgv4E6PAY5WXUFWFcRWxZa3EW83UjycOB9ljJCedb2CupIP4RZMEwF/M3eTcCihbBRgwtGbg5Rg== + version "2.6.11" + resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.11.tgz#9b39b78665dae0e82a08f02f4967d62c66f95d24" + integrity sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g== dependencies: "@types/node" "*" - form-data "^3.0.0" + form-data "^4.0.0" "@types/node@*": - version "18.14.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.14.1.tgz#90dad8476f1e42797c49d6f8b69aaf9f876fc69f" - integrity sha512-QH+37Qds3E0eDlReeboBxfHbX9omAcBCXEzswCu6jySP642jiM3cYSIkU/REqwhCUqXdonHFuBfJDiAJxMNhaQ== + version "20.11.17" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.17.tgz#cdd642d0e62ef3a861f88ddbc2b61e32578a9292" + integrity sha512-QmgQZGWu1Yw9TDyAP9ZzpFJKynYNeOvwMJmaxABfieQoVoiVOS6MN1WSpqpRcbeA5+RW82kraAVxCCJg+780Qw== + dependencies: + undici-types "~5.26.4" "@types/node@^12.7.1": version "12.20.55" @@ -4740,36 +3791,36 @@ integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== "@types/node@^18.0.0", "@types/node@^18.17.5": - version "18.18.8" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.18.8.tgz#2b285361f2357c8c8578ec86b5d097c7f464cfd6" - integrity sha512-OLGBaaK5V3VRBS1bAkMVP2/W9B+H8meUfl866OrMNQqt7wDgdpWPp5o6gmIc9pB+lIQHSq4ZL8ypeH1vPxcPaQ== + version "18.19.15" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.15.tgz#313a9d75435669a57fc28dc8694e7f4c4319f419" + integrity sha512-AMZ2UWx+woHNfM11PyAEQmfSxi05jm9OlkxczuHeEqmvwPkYj6MWv44gbzDPefYOLysTOFyI3ziiy2ONmUZfpA== dependencies: undici-types "~5.26.4" "@types/normalize-package-data@^2.4.0": - version "2.4.1" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" - integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== + version "2.4.4" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz#56e2cc26c397c038fab0e3a917a12d5c5909e901" + integrity sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA== "@types/parse-json@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" - integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.2.tgz#5950e50960793055845e956c427fc2b0d70c5239" + integrity sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw== "@types/paypal-checkout-components@*": - version "4.0.5" - resolved "https://registry.yarnpkg.com/@types/paypal-checkout-components/-/paypal-checkout-components-4.0.5.tgz#71d56b6cbdf85bd1f2c05d0fae0fa40ba2c35d7f" - integrity sha512-GQSehUkFYpSVKvJ3r0b2enJCMjuUb8mg7eG0Kz+27/2P5kHKMEF+uMkrBBEwlOApLcqaWTiiVVDntKdsHoUTRA== + version "4.0.8" + resolved "https://registry.yarnpkg.com/@types/paypal-checkout-components/-/paypal-checkout-components-4.0.8.tgz#dae11a164fb77fe370b013c0be44951bdc4ebf4d" + integrity sha512-Z3IWbFPGdgL3O+Bg+TyVmMT8S3uGBsBjw3a8uRNR4OlYWa9m895djENErJMYU8itoki9rtcQMzoHOSFn8NFb1A== "@types/pretty-hrtime@^1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@types/pretty-hrtime/-/pretty-hrtime-1.0.1.tgz#72a26101dc567b0d68fd956cf42314556e42d601" - integrity sha512-VjID5MJb1eGKthz2qUerWT8+R4b9N+CHvGCzg9fn4kWZgaF9AhdYikQio3R7wV8YY1NsQKPaCwKz1Yff+aHNUQ== + version "1.0.3" + resolved "https://registry.yarnpkg.com/@types/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#ee1bd8c9f7a01b3445786aad0ef23aba5f511a44" + integrity sha512-nj39q0wAIdhwn7DGUyT9irmsKK1tV0bd5WFEhgpqNTMFZ8cE+jieuTphCW0tfdm47S2zVT5mr09B28b1chmQMA== -"@types/prop-types@*", "@types/prop-types@^15.7.5": - version "15.7.5" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" - integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== +"@types/prop-types@*", "@types/prop-types@^15.7.11": + version "15.7.11" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.11.tgz#2596fb352ee96a1379c657734d4b913a613ad563" + integrity sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng== "@types/qrcode.react@^0.8.0": version "0.8.2" @@ -4779,14 +3830,14 @@ "@types/react" "*" "@types/qs@*", "@types/qs@^6.9.5": - version "6.9.7" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" - integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== + version "6.9.11" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.11.tgz#208d8a30bc507bd82e03ada29e4732ea46a6bbda" + integrity sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ== "@types/raf@^3.4.0": - version "3.4.0" - resolved "https://registry.yarnpkg.com/@types/raf/-/raf-3.4.0.tgz#2b72cbd55405e071f1c4d29992638e022b20acc2" - integrity sha512-taW5/WYqo36N7V39oYyHP9Ipfd5pNFvGTIQsNGj86xV88YQ7GnI30/yMfKDF7Zgin0m3e+ikX88FvImnK4RjGw== + version "3.4.3" + resolved "https://registry.yarnpkg.com/@types/raf/-/raf-3.4.3.tgz#85f1d1d17569b28b8db45e16e996407a56b0ab04" + integrity sha512-c4YAvMedbPZ5tEyxzQdMoOhhJ4RD3rngZIdwC2/qDN3d7JpEhB6fiBRKVY1lg5B7Wk+uPBjn5f39j1/2MY1oOw== "@types/ramda@0.25.16": version "0.25.16" @@ -4794,49 +3845,35 @@ integrity sha512-jNxaEg+kSJ58iaM9bBawJugDxexXVPnLU245yEI1p2BTcfR5pcgM6mpsyBhRRo2ozyfJUvTmasL2Ft+C6BNkVQ== "@types/range-parser@*": - version "1.2.4" - resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" - integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== + version "1.2.7" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" + integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== "@types/react-beautiful-dnd@^13.0.0": - version "13.1.3" - resolved "https://registry.yarnpkg.com/@types/react-beautiful-dnd/-/react-beautiful-dnd-13.1.3.tgz#9812f6086c4b77ce08c83120788d92084a26db0f" - integrity sha512-BNdmvONKtsrZq3AGrujECQrIn8cDT+fZsxBLXuX3YWY/nHfZinUFx4W88eS0rkcXzuLbXpKOsu/1WCMPMLEpPg== + version "13.1.8" + resolved "https://registry.yarnpkg.com/@types/react-beautiful-dnd/-/react-beautiful-dnd-13.1.8.tgz#f52d3ea07e1e19159d6c3c4a48c8da3d855e60b4" + integrity sha512-E3TyFsro9pQuK4r8S/OL6G99eq7p8v29sX0PM7oT8Z+PJfZvSQTx4zTQbUJ+QZXioAF0e7TGBEcA1XhYhCweyQ== dependencies: "@types/react" "*" "@types/react-csv@^1.1.3": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@types/react-csv/-/react-csv-1.1.3.tgz#b93a33314d71e8e3c5c41b20d19a2912c6e642c8" - integrity sha512-dkEdyRvRpygSnNg4cyzYWSUjukIQ5lAtXJwc7BqyUfzww/Cv2dcAFGYd+sWTFpGiDNZMVPp6vVPLcAPvJID8Kg== - dependencies: - "@types/react" "*" - -"@types/react-dom@*": - version "18.0.11" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.0.11.tgz#321351c1459bc9ca3d216aefc8a167beec334e33" - integrity sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw== + version "1.1.10" + resolved "https://registry.yarnpkg.com/@types/react-csv/-/react-csv-1.1.10.tgz#b4e292d7330d2fa12062c579c752f254f559bf56" + integrity sha512-PESAyASL7Nfi/IyBR3ufd8qZkyoS+7jOylKmJxRZUZLFASLo4NZaRsJ8rNP8pCcbIziADyWBbLPD1nPddhsL4g== dependencies: "@types/react" "*" -"@types/react-dom@^17.0.9": - version "17.0.19" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.19.tgz#36feef3aa35d045cacd5ed60fe0eef5272f19492" - integrity sha512-PiYG40pnQRdPHnlf7tZnp0aQ6q9tspYr72vD61saO6zFCybLfMqwUCN0va1/P+86DXn18ZWeW30Bk7xlC5eEAQ== - dependencies: - "@types/react" "^17" - -"@types/react-is@^18.2.1": - version "18.2.1" - resolved "https://registry.yarnpkg.com/@types/react-is/-/react-is-18.2.1.tgz#61d01c2a6fc089a53520c0b66996d458fdc46863" - integrity sha512-wyUkmaaSZEzFZivD8F2ftSyAfk6L+DfFliVj/mYdOXbVjRcS87fQJLTnhk6dRZPuJjI+9g6RZJO4PNCngUrmyw== +"@types/react-dom@*", "@types/react-dom@^18.0.0", "@types/react-dom@^18.2.18": + version "18.2.19" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.19.tgz#b84b7c30c635a6c26c6a6dfbb599b2da9788be58" + integrity sha512-aZvQL6uUbIJpjZk4U8JZGbau9KDeAwMfmhyWorxgBkqDIEf6ROjRozcmPIicqsUwPUjbkDfHKgGee1Lq65APcA== dependencies: "@types/react" "*" "@types/react-redux@^7.1.20", "@types/react-redux@~7.1.7": - version "7.1.25" - resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-7.1.25.tgz#de841631205b24f9dfb4967dd4a7901e048f9a88" - integrity sha512-bAGh4e+w5D8dajd6InASVIyCo4pZLJ66oLb80F9OBLO1gKESbZcRCJpTT6uLXX+HAB57zw1WTdwJdAsewuTweg== + version "7.1.33" + resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-7.1.33.tgz#53c5564f03f1ded90904e3c90f77e4bd4dc20b15" + integrity sha512-NF8m5AjWCkert+fosDsN3hAlHzpjSiXlVy9EgQEmLoBhaNXbmyeGs/aj5dQzKuF+/q+S7JQagorGDW8pJ28Hmg== dependencies: "@types/hoist-non-react-statics" "^3.3.0" "@types/react" "*" @@ -4877,89 +3914,79 @@ "@types/react-dom" "*" "@types/react-transition-group" "*" -"@types/react-test-renderer@*": - version "18.0.0" - resolved "https://registry.yarnpkg.com/@types/react-test-renderer/-/react-test-renderer-18.0.0.tgz#7b7f69ca98821ea5501b21ba24ea7b6139da2243" - integrity sha512-C7/5FBJ3g3sqUahguGi03O79b8afNeSD6T8/GU50oQrJCU0bVCCGQHaGKUbg2Ce8VQEEqTw8/HiS6lXHHdgkdQ== - dependencies: - "@types/react" "*" - -"@types/react-transition-group@*": - version "4.4.5" - resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.5.tgz#aae20dcf773c5aa275d5b9f7cdbca638abc5e416" - integrity sha512-juKD/eiSM3/xZYzjuzH6ZwpP+/lejltmiS3QEzV/vmb/Q8+HfDmxu+Baga8UEMGBqV88Nbg4l2hY/K2DkyaLLA== - dependencies: - "@types/react" "*" - -"@types/react-transition-group@^4.4.6": - version "4.4.6" - resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.6.tgz#18187bcda5281f8e10dfc48f0943e2fdf4f75e2e" - integrity sha512-VnCdSxfcm08KjsJVQcfBmhEQAPnLB8G08hAxn39azX1qYBQ/5RVQuoHuKIcfKOdncuaUvEpFKFzEvbtIMsfVew== +"@types/react-transition-group@*", "@types/react-transition-group@^4.4.10": + version "4.4.10" + resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.10.tgz#6ee71127bdab1f18f11ad8fb3322c6da27c327ac" + integrity sha512-hT/+s0VQs2ojCX823m60m5f0sL5idt9SO6Tj6Dg+rdphGPIeJbJ6CxvBYkgkGKrYeDjvIpKTR38UzmtHJOGW3Q== dependencies: "@types/react" "*" -"@types/react@*", "@types/react@>=16", "@types/react@^17", "@types/react@^17.0.27": - 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@*", "@types/react@>=16", "@types/react@^18.2.55": + version "18.2.55" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.55.tgz#38141821b7084404b5013742bc4ae08e44da7a67" + integrity sha512-Y2Tz5P4yz23brwm2d7jNon39qoAtMMmalOQv6+fEFt1mT+FcM3D841wDpoUvFXhaYenuROCy3FZYqdTjM7qVyA== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" csstype "^3.0.2" "@types/recompose@^0.30.0": - version "0.30.10" - resolved "https://registry.yarnpkg.com/@types/recompose/-/recompose-0.30.10.tgz#b6ab1743c279f463f2b62ccb90b82433dcea63c5" - integrity sha512-oF1ulwi5Tz7L9jZE870CCyD6n/nvCLNaGMp/oMEnm4gd7doc67rSHtypM6MFDiI6BKjTXoR87CwhET5JJInDFQ== + version "0.30.14" + resolved "https://registry.yarnpkg.com/@types/recompose/-/recompose-0.30.14.tgz#06c5b3ff3f1df746ab6e8baecc3e288971936892" + integrity sha512-DDxwOemcQhtXuwIODKz8UVRroNoMkLoHiLJ/kIML3nC4WWE/0sfdrCev4zsazHCuj9BwDTTn/LsNtxwxTRK1WA== dependencies: "@types/react" "*" "@types/redux-mock-store@^1.0.1": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@types/redux-mock-store/-/redux-mock-store-1.0.3.tgz#895de4a364bc4836661570aec82f2eef5989d1fb" - integrity sha512-Wqe3tJa6x9MxMN4DJnMfZoBRBRak1XTPklqj4qkVm5VBpZnC8PSADf4kLuFQ9NAdHaowfWoEeUMz7NWc2GMtnA== + version "1.0.6" + resolved "https://registry.yarnpkg.com/@types/redux-mock-store/-/redux-mock-store-1.0.6.tgz#0a03b2655028b7cf62670d41ac1de5ca1b1f5958" + integrity sha512-eg5RDfhJTXuoJjOMyXiJbaDb1B8tfTaJixscmu+jOusj6adGC0Krntz09Tf4gJgXeCqCrM5bBMd+B7ez0izcAQ== dependencies: redux "^4.0.5" "@types/resolve@^1.20.2": - version "1.20.4" - resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.20.4.tgz#d2df996a35695c843dbf180e26bc2c7a0f1a3e12" - integrity sha512-BKGK0T1VgB1zD+PwQR4RRf0ais3NyvH1qjLUrHI5SEiccYaJrhLstLuoXFWJ+2Op9whGizSPUMGPJY/Qtb/A2w== + version "1.20.6" + resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.20.6.tgz#e6e60dad29c2c8c206c026e6dd8d6d1bdda850b8" + integrity sha512-A4STmOXPhMUtHH+S6ymgE2GiBSMqf4oTvcQZMcHzokuTLVYzXTB8ttjcgxOVaAp2lGwEdzZ0J+cRbbeevQj1UQ== "@types/sanitize-html@^2.9.1": - version "2.9.1" - resolved "https://registry.yarnpkg.com/@types/sanitize-html/-/sanitize-html-2.9.1.tgz#6e4b232916cfb3ec0c4733c9899c99e1697ef953" - integrity sha512-XSLD0a9P8c+rKUM09KIi5Nd8mOHLHNgXb1G04rpXWa/GqQVpM+knrS9KR9ptj1CeC3gXWGZn75ApH3H6qNbhYA== + version "2.11.0" + resolved "https://registry.yarnpkg.com/@types/sanitize-html/-/sanitize-html-2.11.0.tgz#582d8c72215c0228e3af2be136e40e0b531addf2" + integrity sha512-7oxPGNQHXLHE48r/r/qjn7q0hlrs3kL7oZnGj0Wf/h9tj/6ibFyRkNbsDxaBBZ4XUZ0Dx5LGCyDJ04ytSofacQ== dependencies: htmlparser2 "^8.0.0" "@types/scheduler@*": - version "0.16.2" - resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" - integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== + version "0.16.8" + resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.8.tgz#ce5ace04cfeabe7ef87c0091e50752e36707deff" + integrity sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A== -"@types/semver@^7.3.12": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.0.tgz#591c1ce3a702c45ee15f47a42ade72c2fd78978a" - integrity sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw== +"@types/semver@^7.3.12", "@types/semver@^7.3.4": + version "7.5.6" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.6.tgz#c65b2bfce1bec346582c07724e3f8c1017a20339" + integrity sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A== -"@types/semver@^7.3.4": - version "7.3.13" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" - integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== +"@types/send@*": + version "0.17.4" + resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.4.tgz#6619cd24e7270793702e4e6a4b958a9010cfc57a" + integrity sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA== + dependencies: + "@types/mime" "^1" + "@types/node" "*" "@types/serve-static@*": - version "1.15.1" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.1.tgz#86b1753f0be4f9a1bee68d459fcda5be4ea52b5d" - integrity sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ== + version "1.15.5" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.5.tgz#15e67500ec40789a1e8c9defc2d32a896f05b033" + integrity sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ== dependencies: + "@types/http-errors" "*" "@types/mime" "*" "@types/node" "*" "@types/set-cookie-parser@^2.4.0": - version "2.4.5" - resolved "https://registry.yarnpkg.com/@types/set-cookie-parser/-/set-cookie-parser-2.4.5.tgz#f08fc44f9ab0bb136b7a73bc4e73de7c0c747cf3" - integrity sha512-ZPmztaAQ4rbnW/WTUnT1dwSENQo4bjGqxCSeyK+gZxmd+zJl/QAeF6dpEXcS5UEJX22HwiggFSaY8nE1nRmkbg== + version "2.4.7" + resolved "https://registry.yarnpkg.com/@types/set-cookie-parser/-/set-cookie-parser-2.4.7.tgz#4a341ed1d3a922573ee54db70b6f0a6d818290e7" + integrity sha512-+ge/loa0oTozxip6zmhRIk8Z/boU51wl9Q6QdLZcokIGMzY5lFXYy/x7Htj2HTC6/KZP1hUbZ1ekx8DYXICvWg== dependencies: "@types/node" "*" @@ -4969,28 +3996,9 @@ integrity sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g== "@types/sizzle@^2.3.2": - version "2.3.3" - resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.3.tgz#ff5e2f1902969d305225a047c8a0fd5c915cebef" - integrity sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ== - -"@types/stack-utils@^2.0.0": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" - integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== - -"@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/testing-library__react-hooks@^3.4.0": - version "3.4.1" - resolved "https://registry.yarnpkg.com/@types/testing-library__react-hooks/-/testing-library__react-hooks-3.4.1.tgz#b8d7311c6c1f7db3103e94095fe901f8fef6e433" - integrity sha512-G4JdzEcq61fUyV6wVW9ebHWEiLK2iQvaBuCHHn9eMSbZzVh4Z4wHnUGIvQOYCCYeu5DnUtFyNYuAAgbSaO/43Q== - dependencies: - "@types/react-test-renderer" "*" + version "2.3.8" + resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.8.tgz#518609aefb797da19bf222feb199e8f653ff7627" + integrity sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg== "@types/throttle-debounce@^1.0.0": version "1.1.1" @@ -4998,65 +4006,53 @@ integrity sha512-VhX9p0l8p3TS27XU+CnDfhdnzW7HpVgtKiYDh/lfucSAz8s9uTt0q4aPwcYIr+q+3/NghlU3smXBW6ItvfJKYQ== "@types/tough-cookie@*": - version "4.0.4" - resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.4.tgz#cf2f0c7c51b985b6afecea73eb2cd65421ecb717" - integrity sha512-95Sfz4nvMAb0Nl9DTxN3j64adfwfbBPEYq14VN7zT5J5O2M9V6iZMIIQU1U+pJyl9agHYHNCqhCXgyEtIRRa5A== + version "4.0.5" + resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.5.tgz#cb6e2a691b70cb177c6e3ae9c1d2e8b2ea8cd304" + integrity sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA== -"@types/unist@^2": +"@types/unist@^2", "@types/unist@^2.0.0": version "2.0.10" resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.10.tgz#04ffa7f406ab628f7f7e97ca23e290cd8ab15efc" integrity sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA== -"@types/unist@^2.0.0": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.6.tgz#250a7b16c3b91f672a24552ec64678eeb1d3a08d" - integrity sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ== - "@types/uuid@^3.4.3": - version "3.4.10" - resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-3.4.10.tgz#637d3c8431f112edf6728ac9bdfadfe029540f48" - integrity sha512-BgeaZuElf7DEYZhWYDTc/XcLZXdVgFkVSTa13BqKvbnmUrxr3TJFKofUxCtDO9UQOdhnV+HPOESdHiHKZOJV1A== + version "3.4.13" + resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-3.4.13.tgz#fe890e517fb840620be284ee213e81d702b1f76b" + integrity sha512-pAeZeUbLE4Z9Vi9wsWV2bYPTweEHeJJy0G4pEjOA/FSvy1Ad5U5Km8iDV6TKre1mjBiVNfAdVHKruP8bAh4Q5A== "@types/uuid@^9.0.1": - version "9.0.7" - resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-9.0.7.tgz#b14cebc75455eeeb160d5fe23c2fcc0c64f724d8" - integrity sha512-WUtIVRUZ9i5dYXefDEAI7sh9/O7jGvHg7Df/5O/gtH3Yabe5odI3UWopVR1qbPXQtvOxWu3mM4XxlYeZtMWF4g== + version "9.0.8" + resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-9.0.8.tgz#7545ba4fc3c003d6c756f651f3bf163d8f0f29ba" + integrity sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA== "@types/warning@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/warning/-/warning-3.0.0.tgz#0d2501268ad8f9962b740d387c4654f5f8e23e52" - integrity sha512-t/Tvs5qR47OLOr+4E9ckN8AmP2Tf16gWq+/qA4iUGS/OOyHVO8wv2vjJuX8SNOUTJyWb+2t7wJm6cXILFnOROA== + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/warning/-/warning-3.0.3.tgz#d1884c8cc4a426d1ac117ca2611bf333834c6798" + integrity sha512-D1XC7WK8K+zZEveUPY+cf4+kgauk8N4eHr/XIHXGlGYkHLud6hK9lYfZk1ry1TNh798cZUCgb6MqGEG8DkJt6Q== -"@types/xml2js@0.4.13": - version "0.4.13" - resolved "https://registry.yarnpkg.com/@types/xml2js/-/xml2js-0.4.13.tgz#219134d550c21e2f1d7b0e2fbb9174144c6053ed" - integrity sha512-nuT42GzgoUa4zZgBoF4d+Zqc12/FlVxXCT4xU6j3RfqTFVQWrUAClI/0sNJ5ImM9Wv6KB42KMG2xsVMn4cSBzA== +"@types/xml2js@0.4.14": + version "0.4.14" + resolved "https://registry.yarnpkg.com/@types/xml2js/-/xml2js-0.4.14.tgz#5d462a2a7330345e2309c6b549a183a376de8f9a" + integrity sha512-4YnrRemBShWRO2QjvUin8ESA41rH+9nQGLUGZV/1IDhi3SL9OhdpNC/MrulTWuptXKwhx/aDxE7toV0f/ypIXQ== dependencies: "@types/node" "*" "@types/yargs-parser@*": - version "21.0.0" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" - integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== - -"@types/yargs@^15.0.0": - version "15.0.15" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.15.tgz#e609a2b1ef9e05d90489c2f5f45bbfb2be092158" - integrity sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg== - dependencies: - "@types/yargs-parser" "*" + version "21.0.3" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" + integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== "@types/yargs@^17.0.8": - version "17.0.22" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.22.tgz#7dd37697691b5f17d020f3c63e7a45971ff71e9a" - integrity sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g== + version "17.0.32" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.32.tgz#030774723a2f7faafebf645f4e5a48371dca6229" + integrity sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog== dependencies: "@types/yargs-parser" "*" "@types/yauzl@^2.9.1": - version "2.10.0" - resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.0.tgz#b3248295276cf8c6f153ebe6a9aba0c988cb2599" - integrity sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw== + version "2.10.3" + resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.3.tgz#e9b2808b4f109504a03cda958259876f61017999" + integrity sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q== dependencies: "@types/node" "*" @@ -5066,9 +4062,9 @@ integrity sha512-Ynb/CjHhE/Xp/4bhHmQC4U1Ox+I2OpfRYF3dnNgQqn1cHa6LK3H1wJMNPT02tSVZA6FYuXE2ITORfbnb6zBCSA== "@types/zxcvbn@^4.4.0": - version "4.4.1" - resolved "https://registry.yarnpkg.com/@types/zxcvbn/-/zxcvbn-4.4.1.tgz#46e42cbdcee681b22181478feaf4af2bc4c1abd2" - integrity sha512-3NoqvZC2W5gAC5DZbTpCeJ251vGQmgcWIHQJGq2J240HY6ErQ9aWKkwfoKJlHLx+A83WPNTZ9+3cd2ILxbvr1w== + version "4.4.4" + resolved "https://registry.yarnpkg.com/@types/zxcvbn/-/zxcvbn-4.4.4.tgz#987f5fcd87e957097433c476c3a1c91a54f53131" + integrity sha512-Tuk4q7q0DnpzyJDI4aMeghGuFu2iS1QAdKpabn8JfbtfGmVDUgvZv1I7mEjP61Bvnp3ljKCC8BE6YYSTNxmvRQ== "@typescript-eslint/eslint-plugin@^4.1.1": version "4.33.0" @@ -5125,13 +4121,13 @@ "@typescript-eslint/types" "4.33.0" "@typescript-eslint/visitor-keys" "4.33.0" -"@typescript-eslint/scope-manager@5.60.1": - version "5.60.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.60.1.tgz#35abdb47f500c68c08f2f2b4f22c7c79472854bb" - integrity sha512-Dn/LnN7fEoRD+KspEOV0xDMynEmR3iSHdgNsarlXNLGGtcUok8L4N71dxUgt3YvlO8si7E+BJ5Fe3wb5yUw7DQ== +"@typescript-eslint/scope-manager@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c" + integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== dependencies: - "@typescript-eslint/types" "5.60.1" - "@typescript-eslint/visitor-keys" "5.60.1" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/visitor-keys" "5.62.0" "@typescript-eslint/types@3.10.1": version "3.10.1" @@ -5143,10 +4139,10 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.33.0.tgz#a1e59036a3b53ae8430ceebf2a919dc7f9af6d72" integrity sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ== -"@typescript-eslint/types@5.60.1", "@typescript-eslint/types@^5.59.11": - version "5.60.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.60.1.tgz#a17473910f6b8d388ea83c9d7051af89c4eb7561" - integrity sha512-zDcDx5fccU8BA0IDZc71bAtYIcG9PowaOwaD8rjYbqwK7dpe/UMQl3inJ4UtUK42nOCT41jTSCwg76E62JpMcg== +"@typescript-eslint/types@5.62.0", "@typescript-eslint/types@^5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" + integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== "@typescript-eslint/typescript-estree@3.10.1": version "3.10.1" @@ -5175,30 +4171,30 @@ semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/typescript-estree@5.60.1": - version "5.60.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.60.1.tgz#8c71824b7165b64d5ebd7aa42968899525959834" - integrity sha512-hkX70J9+2M2ZT6fhti5Q2FoU9zb+GeZK2SLP1WZlvUDqdMbEKhexZODD1WodNRyO8eS+4nScvT0dts8IdaBzfw== +"@typescript-eslint/typescript-estree@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" + integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== dependencies: - "@typescript-eslint/types" "5.60.1" - "@typescript-eslint/visitor-keys" "5.60.1" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/visitor-keys" "5.62.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/utils@^5.45.0", "@typescript-eslint/utils@^5.59.11": - version "5.60.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.60.1.tgz#6861ebedbefba1ac85482d2bdef6f2ff1eb65b80" - integrity sha512-tiJ7FFdFQOWssFa3gqb94Ilexyw0JVxj6vBzaSpfN/8IhoKkDuSAenUKvsSHw2A/TMpJb26izIszTXaqygkvpQ== +"@typescript-eslint/utils@^5.45.0", "@typescript-eslint/utils@^5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86" + integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@types/json-schema" "^7.0.9" "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.60.1" - "@typescript-eslint/types" "5.60.1" - "@typescript-eslint/typescript-estree" "5.60.1" + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/typescript-estree" "5.62.0" eslint-scope "^5.1.1" semver "^7.3.7" @@ -5217,20 +4213,25 @@ "@typescript-eslint/types" "4.33.0" eslint-visitor-keys "^2.0.0" -"@typescript-eslint/visitor-keys@5.60.1": - version "5.60.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.60.1.tgz#19a877358bf96318ec35d90bfe6bd1445cce9434" - integrity sha512-xEYIxKcultP6E/RMKqube11pGjXH1DCo60mQoWhVYyKfLkwbIVVjYxmOenNMxILx0TjCujPTjjnTIVzm09TXIw== +"@typescript-eslint/visitor-keys@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" + integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== dependencies: - "@typescript-eslint/types" "5.60.1" + "@typescript-eslint/types" "5.62.0" eslint-visitor-keys "^3.3.0" +"@ungap/structured-clone@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" + integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== + "@vitejs/plugin-react-swc@^3.5.0": - version "3.5.0" - resolved "https://registry.yarnpkg.com/@vitejs/plugin-react-swc/-/plugin-react-swc-3.5.0.tgz#1fadff5148003e8091168c431e44c850f9a39e74" - integrity sha512-1PrOvAaDpqlCV+Up8RkAh9qaiUjoDUcjtttyhXDKw53XA6Ve16SOp6cCOpRs8Dj8DqUQs6eTW5YkLcLJjrXAig== + version "3.6.0" + resolved "https://registry.yarnpkg.com/@vitejs/plugin-react-swc/-/plugin-react-swc-3.6.0.tgz#dc9cd1363baf3780f3ad3e0a12a46a3ffe0c7526" + integrity sha512-XFRbsGgpGxGzEV5i5+vRiro1bwcIaZDIdBRP16qwm+jP68ue/S8FJTBEgOeojtVDYrbSua3XFp71kC8VJE6v+g== dependencies: - "@swc/core" "^1.3.96" + "@swc/core" "^1.3.107" "@vitejs/plugin-react@^3.0.1": version "3.1.0" @@ -5244,9 +4245,9 @@ react-refresh "^0.14.0" "@vitest/coverage-v8@^1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@vitest/coverage-v8/-/coverage-v8-1.0.4.tgz#49193139399c37ddf16c23d96892ef32cd67a69a" - integrity sha512-xD6Yuql6RW0Ir/JJIs6rVrmnG2/KOWJF+IRX1oJQk5wGKGxbtdrYPbl+WTUn/4ICCQ2G20zbE1e8/nPNyAG5Vg== + version "1.2.2" + resolved "https://registry.yarnpkg.com/@vitest/coverage-v8/-/coverage-v8-1.2.2.tgz#681f4f76de896d0d2484cca32285477e288fec3a" + integrity sha512-IHyKnDz18SFclIEEAHb9Y4Uxx0sPKC2VO1kdDCs1BF6Ip4S8rQprs971zIsooLUn7Afs71GRxWMWpkCGZpRMhw== dependencies: "@ampproject/remapping" "^2.2.1" "@bcoe/v8-coverage" "^0.2.3" @@ -5256,115 +4257,63 @@ istanbul-lib-source-maps "^4.0.1" istanbul-reports "^3.1.6" magic-string "^0.30.5" - magicast "^0.3.2" + magicast "^0.3.3" picocolors "^1.0.0" std-env "^3.5.0" test-exclude "^6.0.0" v8-to-istanbul "^9.2.0" -"@vitest/expect@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-1.0.1.tgz#5e63902316a3c65948c6e36f284046962601fb88" - integrity sha512-3cdrb/eKD/0tygDX75YscuHEHMUJ70u3UoLSq2eqhWks57AyzvsDQbyn53IhZ0tBN7gA8Jj2VhXiOV2lef7thw== - dependencies: - "@vitest/spy" "1.0.1" - "@vitest/utils" "1.0.1" - chai "^4.3.10" - -"@vitest/expect@1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-1.2.0.tgz#de93f5c32c2781c41415a8c3a6e48e1c023d6613" - integrity sha512-H+2bHzhyvgp32o7Pgj2h9RTHN0pgYaoi26Oo3mE+dCi1PAqV31kIIVfTbqMO3Bvshd5mIrJLc73EwSRrbol9Lw== +"@vitest/expect@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-1.2.2.tgz#39ea22e849bbf404b7e5272786551aa99e2663d0" + integrity sha512-3jpcdPAD7LwHUUiT2pZTj2U82I2Tcgg2oVPvKxhn6mDI2On6tfvPQTjAI4628GUGDZrCm4Zna9iQHm5cEexOAg== dependencies: - "@vitest/spy" "1.2.0" - "@vitest/utils" "1.2.0" + "@vitest/spy" "1.2.2" + "@vitest/utils" "1.2.2" chai "^4.3.10" -"@vitest/runner@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@vitest/runner/-/runner-1.0.1.tgz#d94cab9e3008dba52f89e811540184334766ab61" - integrity sha512-/+z0vhJ0MfRPT3AyTvAK6m57rzlew/ct8B2a4LMv7NhpPaiI2QLGyOBMB3lcioWdJHjRuLi9aYppfOv0B5aRQA== - dependencies: - "@vitest/utils" "1.0.1" - p-limit "^5.0.0" - pathe "^1.1.1" - -"@vitest/runner@1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@vitest/runner/-/runner-1.2.0.tgz#84775f0f5c48620ff1943a45c19863355791c6d9" - integrity sha512-vaJkDoQaNUTroT70OhM0NPznP7H3WyRwt4LvGwCVYs/llLaqhoSLnlIhUClZpbF5RgAee29KRcNz0FEhYcgxqA== +"@vitest/runner@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@vitest/runner/-/runner-1.2.2.tgz#8b060a56ecf8b3d607b044d79f5f50d3cd9fee2f" + integrity sha512-JctG7QZ4LSDXr5CsUweFgcpEvrcxOV1Gft7uHrvkQ+fsAVylmWQvnaAr/HDp3LAH1fztGMQZugIheTWjaGzYIg== dependencies: - "@vitest/utils" "1.2.0" + "@vitest/utils" "1.2.2" p-limit "^5.0.0" pathe "^1.1.1" -"@vitest/snapshot@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@vitest/snapshot/-/snapshot-1.0.1.tgz#9d2a01c64726afa62264175554690e5ce148d4a5" - integrity sha512-wIPtPDGSxEZ+DpNMc94AsybX6LV6uN6sosf5TojyP1m2QbKwiRuLV/5RSsjt1oWViHsTj8mlcwrQQ1zHGO0fMw== - dependencies: - magic-string "^0.30.5" - pathe "^1.1.1" - pretty-format "^29.7.0" - -"@vitest/snapshot@1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@vitest/snapshot/-/snapshot-1.2.0.tgz#2fcddb5c6e8a9d2fc9f18ea2f8fd39b1b6e691b4" - integrity sha512-P33EE7TrVgB3HDLllrjK/GG6WSnmUtWohbwcQqmm7TAk9AVHpdgf7M3F3qRHKm6vhr7x3eGIln7VH052Smo6Kw== +"@vitest/snapshot@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@vitest/snapshot/-/snapshot-1.2.2.tgz#f56fd575569774968f3eeba9382a166c26201042" + integrity sha512-SmGY4saEw1+bwE1th6S/cZmPxz/Q4JWsl7LvbQIky2tKE35US4gd0Mjzqfr84/4OD0tikGWaWdMja/nWL5NIPA== dependencies: magic-string "^0.30.5" pathe "^1.1.1" pretty-format "^29.7.0" -"@vitest/spy@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-1.0.1.tgz#d82af1c4d935e08443bf20432ba55afd001ac71f" - integrity sha512-yXwm1uKhBVr/5MhVeSmtNqK+0q2RXIchJt8kokEKdrWLtkPeDgdbZ6SjR1VQGZuNdWL6sSBnLayIyVvcS0qLfA== - dependencies: - tinyspy "^2.2.0" - -"@vitest/spy@1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-1.2.0.tgz#61104de4c19a3addefff021d884c9e20dc17ebcd" - integrity sha512-MNxSAfxUaCeowqyyGwC293yZgk7cECZU9wGb8N1pYQ0yOn/SIr8t0l9XnGRdQZvNV/ZHBYu6GO/W3tj5K3VN1Q== +"@vitest/spy@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-1.2.2.tgz#8fc2aeccb96cecbbdd192c643729bd5f97a01c86" + integrity sha512-k9Gcahssw8d7X3pSLq3e3XEu/0L78mUkCjivUqCQeXJm9clfXR/Td8+AP+VC1O6fKPIDLcHDTAmBOINVuv6+7g== dependencies: tinyspy "^2.2.0" "@vitest/ui@^1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@vitest/ui/-/ui-1.0.4.tgz#810aa36bdd0d984483ae0c50d5163012d8191c7a" - integrity sha512-gd4p6e7pjukSe4joWS5wpnm/JcEfzCZUYkYWQOORqJK1mDJ0MOaXa/9BbPOEVO5TcvdnKvFJUdJpFHnqoyYwZA== + version "1.2.2" + resolved "https://registry.yarnpkg.com/@vitest/ui/-/ui-1.2.2.tgz#62dddb1ec12bdc5c186e7f2425490bb8b5080695" + integrity sha512-CG+5fa8lyoBr+9i+UZGS31Qw81v33QlD10uecHxN2CLJVN+jLnqx4pGzGvFFeJ7jSnUCT0AlbmVWY6fU6NJZmw== dependencies: - "@vitest/utils" "1.0.4" + "@vitest/utils" "1.2.2" fast-glob "^3.3.2" fflate "^0.8.1" flatted "^3.2.9" pathe "^1.1.1" picocolors "^1.0.0" - sirv "^2.0.3" - -"@vitest/utils@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-1.0.1.tgz#ab2bf6de50845649b252a9d263765ab7f16bd6a2" - integrity sha512-MGPCHkzXbbAyscrhwGzh8uP1HPrTYLWaj1WTDtWSGrpe2yJWLRN9mF9ooKawr6NMOg9vTBtg2JqWLfuLC7Dknw== - dependencies: - diff-sequences "^29.6.3" - loupe "^2.3.7" - pretty-format "^29.7.0" - -"@vitest/utils@1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-1.0.4.tgz#6e673eaf87a2ff28a12688d17bdbb62cc22bf773" - integrity sha512-gsswWDXxtt0QvtK/y/LWukN7sGMYmnCcv1qv05CsY6cU/Y1zpGX1QuvLs+GO1inczpE6Owixeel3ShkjhYtGfA== - dependencies: - diff-sequences "^29.6.3" - loupe "^2.3.7" - pretty-format "^29.7.0" + sirv "^2.0.4" -"@vitest/utils@1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-1.2.0.tgz#deb9bdc3d094bf47f93a592a6a0b3946aa575e7a" - integrity sha512-FyD5bpugsXlwVpTcGLDf3wSPYy8g541fQt14qtzo8mJ4LdEpDKZ9mQy2+qdJm2TZRpjY5JLXihXCgIxiRJgi5g== +"@vitest/utils@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-1.2.2.tgz#94b5a1bd8745ac28cf220a99a8719efea1bcfc83" + integrity sha512-WKITBHLsBHlpjnDQahr+XK6RE7MiAsgrIkr0pGhQ9ygoxBfUeG0lUG5iLlzqjmKSlBv3+j5EGsriBzh+C3Tq9g== dependencies: diff-sequences "^29.6.3" estree-walker "^3.0.3" @@ -5437,17 +4386,7 @@ acorn-walk@^7.2.0: resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== -acorn-walk@^8.1.1: - version "8.3.1" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.1.tgz#2f10f5b69329d90ae18c58bf1fa8fccd8b959a43" - integrity sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw== - -acorn-walk@^8.3.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.0.tgz#2097665af50fd0cf7a2dfccd2b9368964e66540f" - integrity sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA== - -acorn-walk@^8.3.1: +acorn-walk@^8.1.1, acorn-walk@^8.3.2: version "8.3.2" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== @@ -5457,15 +4396,10 @@ acorn@^7.1.1, acorn@^7.4.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.10.0, acorn@^8.4.1: - version "8.11.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.2.tgz#ca0d78b51895be5390a5903c5b3bdcdaf78ae40b" - integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w== - -acorn@^8.8.0: - version "8.8.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" - integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== +acorn@^8.10.0, acorn@^8.11.3, acorn@^8.4.1, acorn@^8.9.0: + version "8.11.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" + integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== address@^1.0.1: version "1.2.2" @@ -5513,24 +4447,24 @@ ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.4: uri-js "^4.2.2" algoliasearch@^4.14.3: - version "4.14.3" - resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-4.14.3.tgz#f02a77a4db17de2f676018938847494b692035e7" - integrity sha512-GZTEuxzfWbP/vr7ZJfGzIl8fOsoxN916Z6FY2Egc9q2TmZ6hvq5KfAxY89pPW01oW/2HDEKA8d30f9iAH9eXYg== - dependencies: - "@algolia/cache-browser-local-storage" "4.14.3" - "@algolia/cache-common" "4.14.3" - "@algolia/cache-in-memory" "4.14.3" - "@algolia/client-account" "4.14.3" - "@algolia/client-analytics" "4.14.3" - "@algolia/client-common" "4.14.3" - "@algolia/client-personalization" "4.14.3" - "@algolia/client-search" "4.14.3" - "@algolia/logger-common" "4.14.3" - "@algolia/logger-console" "4.14.3" - "@algolia/requester-browser-xhr" "4.14.3" - "@algolia/requester-common" "4.14.3" - "@algolia/requester-node-http" "4.14.3" - "@algolia/transporter" "4.14.3" + version "4.22.1" + resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-4.22.1.tgz#f10fbecdc7654639ec20d62f109c1b3a46bc6afc" + integrity sha512-jwydKFQJKIx9kIZ8Jm44SdpigFwRGPESaxZBaHSV0XWN2yBJAOT4mT7ppvlrpA4UGzz92pqFnVKr/kaZXrcreg== + dependencies: + "@algolia/cache-browser-local-storage" "4.22.1" + "@algolia/cache-common" "4.22.1" + "@algolia/cache-in-memory" "4.22.1" + "@algolia/client-account" "4.22.1" + "@algolia/client-analytics" "4.22.1" + "@algolia/client-common" "4.22.1" + "@algolia/client-personalization" "4.22.1" + "@algolia/client-search" "4.22.1" + "@algolia/logger-common" "4.22.1" + "@algolia/logger-console" "4.22.1" + "@algolia/requester-browser-xhr" "4.22.1" + "@algolia/requester-common" "4.22.1" + "@algolia/requester-node-http" "4.22.1" + "@algolia/transporter" "4.22.1" ansi-align@^3.0.1: version "3.0.1" @@ -5551,6 +4485,13 @@ ansi-escapes@^4.2.1, ansi-escapes@^4.3.0: dependencies: type-fest "^0.21.3" +ansi-escapes@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-5.0.0.tgz#b6a0caf0eef0c41af190e9a749e0c00ec04bb2a6" + integrity sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA== + dependencies: + type-fest "^1.0.2" + ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" @@ -5566,7 +4507,7 @@ ansi-regex@^4.1.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== -ansi-regex@^5.0.0, ansi-regex@^5.0.1: +ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== @@ -5652,35 +4593,42 @@ aria-hidden@^1.1.1: dependencies: tslib "^2.0.0" -aria-query@5.1.3, aria-query@^5.1.3: +aria-query@5.1.3: version "5.1.3" resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.1.3.tgz#19db27cd101152773631396f7a95a3b58c22c35e" integrity sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ== dependencies: deep-equal "^2.0.5" -aria-query@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-4.2.2.tgz#0d2ca6c9aceb56b8977e9fed6aed7e15bbd2f83b" - integrity sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA== +aria-query@^5.0.0, aria-query@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e" + integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A== + dependencies: + dequal "^2.0.3" + +array-buffer-byte-length@^1.0.0, array-buffer-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" + integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== dependencies: - "@babel/runtime" "^7.10.2" - "@babel/runtime-corejs3" "^7.10.2" + call-bind "^1.0.5" + is-array-buffer "^3.0.4" array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== -array-includes@^3.1.5, array-includes@^3.1.6: - version "3.1.6" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f" - integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw== +array-includes@^3.1.6, array-includes@^3.1.7: + version "3.1.7" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.7.tgz#8cd2e01b26f7a3086cbc87271593fe921c62abda" + integrity sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - get-intrinsic "^1.1.3" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" is-string "^1.0.7" array-union@^2.1.0: @@ -5688,26 +4636,50 @@ array-union@^2.1.0: resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array.prototype.flatmap@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183" - integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ== +array.prototype.flat@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18" + integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" -array.prototype.tosorted@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz#ccf44738aa2b5ac56578ffda97c03fd3e23dd532" - integrity sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ== +array.prototype.flatmap@^1.3.1, array.prototype.flatmap@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" + integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" - get-intrinsic "^1.1.3" + +array.prototype.tosorted@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz#c8c89348337e51b8a3c48a9227f9ce93ceedcba8" + integrity sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg== + dependencies: + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.1.0" + es-shim-unscopables "^1.0.2" + +arraybuffer.prototype.slice@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6" + integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A== + dependencies: + array-buffer-byte-length "^1.0.1" + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.2.1" + get-intrinsic "^1.2.3" + is-array-buffer "^3.0.4" + is-shared-array-buffer "^1.0.2" asap@~2.0.3: version "2.0.6" @@ -5726,17 +4698,7 @@ assert-plus@1.0.0, assert-plus@^1.0.0: resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== -assert@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/assert/-/assert-2.0.0.tgz#95fc1c616d48713510680f2eaf2d10dd22e02d32" - integrity sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A== - dependencies: - es6-object-assign "^1.1.0" - is-nan "^1.2.1" - object-is "^1.0.1" - util "^0.12.0" - -assert@^2.1.0: +assert@^2.0.0, assert@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/assert/-/assert-2.1.0.tgz#6d92a238d05dc02e7427c881fb8be81c8448b2dd" integrity sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw== @@ -5752,10 +4714,10 @@ assertion-error@^1.1.0: resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== -ast-types-flow@^0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" - integrity sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag== +ast-types-flow@^0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.8.tgz#0a85e1c92695769ac13a428bb653e7538bea27d6" + integrity sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ== ast-types@^0.16.1: version "0.16.1" @@ -5780,9 +4742,16 @@ async-limiter@~1.0.0: integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== async@^3.2.0, async@^3.2.3: - version "3.2.4" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" - integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== + version "3.2.5" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.5.tgz#ebd52a8fdaf7a2289a24df399f8d8485c8a46b66" + integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg== + +asynciterator.prototype@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz#8c5df0514936cdd133604dfcc9d3fb93f09b2b62" + integrity sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg== + dependencies: + has-symbols "^1.0.3" asynckit@^0.4.0: version "0.4.0" @@ -5804,10 +4773,10 @@ attr-accept@^2.2.1: resolved "https://registry.yarnpkg.com/attr-accept/-/attr-accept-2.2.2.tgz#646613809660110749e92f2c10833b70968d929b" integrity sha512-7prDjvt9HmqiZ0cl5CRjtS84sEyhsHP2coDkaZKRKVfCDo9s7iw7ChVmar78Gu9pC4SoR/28wFu/G5JJhTnqEg== -available-typed-arrays@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" - integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== +available-typed-arrays@^1.0.5, available-typed-arrays@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.6.tgz#ac812d8ce5a6b976d738e1c45f08d0b00bc7d725" + integrity sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg== aws-sign2@~0.7.0: version "0.7.0" @@ -5819,20 +4788,10 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.12.0.tgz#ce1c9d143389679e253b314241ea9aa5cec980d3" integrity sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg== -axe-core@4.7.2: - version "4.7.2" - resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.7.2.tgz#040a7342b20765cb18bb50b628394c21bccc17a0" - integrity sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g== - -axe-core@^3.5.5: - version "3.5.6" - resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-3.5.6.tgz#e762a90d7f6dbd244ceacb4e72760ff8aad521b5" - integrity sha512-LEUDjgmdJoA3LqklSTwKYqkjcZ4HKc4ddIYGSAiSkr46NTjzg2L9RNB+lekO9P7Dlpa87+hBtzc2Fzn/+GUWMQ== - -axe-core@^4.6.2: - version "4.6.3" - resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.6.3.tgz#fc0db6fdb65cc7a80ccf85286d91d64ababa3ece" - integrity sha512-/BQzOX780JhsxDnPpH4ZiyrJAzcd8AfzFPkv+89veFSr1rcMjuq2JDCwypKaPeB6ljHp9KjXhPpjgCvQlWYuqg== +axe-core@=4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.7.0.tgz#34ba5a48a8b564f67e103f0aa5768d76e15bbbbf" + integrity sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ== axios-mock-adapter@^1.22.0: version "1.22.0" @@ -5843,20 +4802,20 @@ axios-mock-adapter@^1.22.0: is-buffer "^2.0.5" axios@~1.6.5: - version "1.6.5" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.5.tgz#2c090da14aeeab3770ad30c3a1461bc970fb0cd8" - integrity sha512-Ii012v05KEVuUoFWmMW/UQv9aRIc3ZwkWDcM+h5Il8izZCtRVpDUfwpoFf7eOtajT3QiGR4yDUx7lPqHJULgbg== + version "1.6.7" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.7.tgz#7b48c2e27c96f9c68a2f8f31e2ab19f59b06b0a7" + integrity sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA== dependencies: follow-redirects "^1.15.4" form-data "^4.0.0" proxy-from-env "^1.1.0" -axobject-query@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-3.1.1.tgz#3b6e5c6d4e43ca7ba51c5babf99d22a9c68485e1" - integrity sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg== +axobject-query@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-3.2.1.tgz#39c378a6e3b06ca679f29138151e45b2b32da62a" + integrity sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg== dependencies: - deep-equal "^2.0.5" + dequal "^2.0.3" babel-core@^7.0.0-bridge.0: version "7.0.0-bridge.0" @@ -5920,29 +4879,29 @@ babel-plugin-macros@^3.1.0: cosmiconfig "^7.0.0" resolve "^1.19.0" -babel-plugin-polyfill-corejs2@^0.4.6: - version "0.4.6" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.6.tgz#b2df0251d8e99f229a8e60fc4efa9a68b41c8313" - integrity sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q== +babel-plugin-polyfill-corejs2@^0.4.8: + version "0.4.8" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.8.tgz#dbcc3c8ca758a290d47c3c6a490d59429b0d2269" + integrity sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg== dependencies: "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.4.3" + "@babel/helper-define-polyfill-provider" "^0.5.0" semver "^6.3.1" -babel-plugin-polyfill-corejs3@^0.8.5: - version "0.8.6" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.6.tgz#25c2d20002da91fe328ff89095c85a391d6856cf" - integrity sha512-leDIc4l4tUgU7str5BWLS2h8q2N4Nf6lGZP6UrNDxdtfF2g69eJ5L0H7S8A5Ln/arfFAfHor5InAdZuIOwZdgQ== +babel-plugin-polyfill-corejs3@^0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.9.0.tgz#9eea32349d94556c2ad3ab9b82ebb27d4bf04a81" + integrity sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg== dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.3" - core-js-compat "^3.33.1" + "@babel/helper-define-polyfill-provider" "^0.5.0" + core-js-compat "^3.34.0" -babel-plugin-polyfill-regenerator@^0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.3.tgz#d4c49e4b44614607c13fb769bcd85c72bb26a4a5" - integrity sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw== +babel-plugin-polyfill-regenerator@^0.5.5: + version "0.5.5" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz#8b0c8fc6434239e5d7b8a9d1f832bb2b0310f06a" + integrity sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg== dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.3" + "@babel/helper-define-polyfill-provider" "^0.5.0" babel-plugin-syntax-jsx@^6.18.0: version "6.18.0" @@ -5984,9 +4943,9 @@ better-opn@^3.0.2: open "^8.0.4" big-integer@^1.6.16, big-integer@^1.6.44: - version "1.6.51" - resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686" - integrity sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg== + version "1.6.52" + resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.52.tgz#60a887f3047614a8e1bffe5d7173490a97dc8c85" + integrity sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg== binary-extensions@^2.0.0: version "2.2.0" @@ -6074,21 +5033,21 @@ braces@^3.0.2, braces@~3.0.2: fill-range "^7.0.1" braintree-web@^3.92.2: - version "3.92.2" - resolved "https://registry.yarnpkg.com/braintree-web/-/braintree-web-3.92.2.tgz#a11454f47b81fc7984dc2a1d5e3402cf1f7f6515" - integrity sha512-aGPwbXddmgUTshsCQvPi4OJcUi2KnOj4O8+lfCCohyO9qX+ZKNBNYfcdzhfQ8N+9DbLebUyrTjRJyJC1a+6oxA== + version "3.100.0" + resolved "https://registry.yarnpkg.com/braintree-web/-/braintree-web-3.100.0.tgz#e12b3f5aa5b6f8ca3d4c234a9481b611a81306ef" + integrity sha512-+paeD3D5uYUfKKa3dnuIj6sRyivXQMoKmlwH3Iiy4f1e+4BZyirMj8egO4J9srPf+mIInLSYP60RwoymalfMsQ== dependencies: "@braintree/asset-loader" "0.4.4" - "@braintree/browser-detection" "1.14.0" + "@braintree/browser-detection" "1.17.1" "@braintree/event-emitter" "0.4.1" "@braintree/extended-promise" "0.4.1" "@braintree/iframer" "1.1.0" - "@braintree/sanitize-url" "6.0.2" + "@braintree/sanitize-url" "6.0.4" "@braintree/uuid" "0.1.0" "@braintree/wrap-promise" "2.1.0" card-validator "8.1.1" credit-card-type "9.1.0" - framebus "5.2.0" + framebus "5.2.1" inject-stylesheet "5.0.0" promise-polyfill "8.2.3" restricted-input "3.0.5" @@ -6119,33 +5078,13 @@ browserify-zlib@^0.1.4: dependencies: pako "~0.2.0" -browserslist@^4.21.3: - version "4.21.5" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7" - integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== - dependencies: - caniuse-lite "^1.0.30001449" - electron-to-chromium "^1.4.284" - node-releases "^2.0.8" - update-browserslist-db "^1.0.10" - -browserslist@^4.21.9, browserslist@^4.22.1: - version "4.22.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.1.tgz#ba91958d1a59b87dab6fed8dfbcb3da5e2e9c619" - integrity sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ== - dependencies: - caniuse-lite "^1.0.30001541" - electron-to-chromium "^1.4.535" - node-releases "^2.0.13" - update-browserslist-db "^1.0.13" - browserslist@^4.22.2: - version "4.22.2" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.2.tgz#704c4943072bd81ea18997f3bd2180e89c77874b" - integrity sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A== + version "4.22.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.3.tgz#299d11b7e947a6b843981392721169e27d60c5a6" + integrity sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A== dependencies: - caniuse-lite "^1.0.30001565" - electron-to-chromium "^1.4.601" + caniuse-lite "^1.0.30001580" + electron-to-chromium "^1.4.648" node-releases "^2.0.14" update-browserslist-db "^1.0.13" @@ -6180,9 +5119,9 @@ buffer@^5.5.0, buffer@^5.6.0: ieee754 "^1.1.13" bundle-require@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/bundle-require/-/bundle-require-4.0.1.tgz#2cc1ad76428043d15e0e7f30990ee3d5404aa2e3" - integrity sha512-9NQkRHlNdNpDBGmLpngF3EFDcwodhMUuLz9PaWYciVcQF9SE4LFjM2DB/xV1Li5JiuDMv7ZUWuC3rGbqR0MAXQ== + version "4.0.2" + resolved "https://registry.yarnpkg.com/bundle-require/-/bundle-require-4.0.2.tgz#65fc74ff14eabbba36d26c9a6161bd78fff6b29e" + integrity sha512-jwzPOChofl67PSTW2SGubV9HBQAhhR2i6nskiOThauo9dzwDUgOWQScFVaJkjEfYX+UXiD+LEx8EblQMc2wIag== dependencies: load-tsconfig "^0.2.3" @@ -6202,17 +5141,19 @@ cac@^6.7.12, cac@^6.7.14: integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== cachedir@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.3.0.tgz#0c75892a052198f0b21c7c1804d8331edfcae0e8" - integrity sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw== + version "2.4.0" + resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.4.0.tgz#7fef9cf7367233d7c88068fe6e34ed0d355a610d" + integrity sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ== -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== +call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.6.tgz#6c46675fc7a5e9de82d75a233d586c8b7ac0d931" + integrity sha512-Mj50FLHtlsoVfRfnHaZvyrooHcrlceNZdL/QBvJJVd9Ta55qCQK0gs4ss2oZDeV9zFCs6ewzYgVE5yfVmfFpVg== dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.3" + set-function-length "^1.2.0" caller-callsite@^2.0.0: version "2.0.0" @@ -6253,20 +5194,10 @@ camelcase@^7.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-7.0.1.tgz#f02e50af9fd7782bc8b88a3558c32fd3a388f048" integrity sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw== -caniuse-lite@^1.0.30001449: - version "1.0.30001520" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001520.tgz" - integrity sha512-tahF5O9EiiTzwTUqAeFjIZbn4Dnqxzz7ktrgGlMYNLH43Ul26IgTMH/zvL3DG0lZxBYnlT04axvInszUsZULdA== - -caniuse-lite@^1.0.30001541: - version "1.0.30001559" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001559.tgz#95a982440d3d314c471db68d02664fb7536c5a30" - integrity sha512-cPiMKZgqgkg5LY3/ntGeLFUpi6tzddBNS58A4tnTgQw1zON7u2sZMU7SzOeVH4tj20++9ggL+V6FDOFMTaFFYA== - -caniuse-lite@^1.0.30001565: - version "1.0.30001570" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001570.tgz#b4e5c1fa786f733ab78fc70f592df6b3f23244ca" - integrity sha512-+3e0ASu4sw1SWaoCtvPeyXp+5PsjigkSt8OXZbF9StH5pQWbxEjLAZE3n8Aup5udop1uRiKA7a4utUk/uoSpUw== +caniuse-lite@^1.0.30001580: + version "1.0.30001585" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001585.tgz#0b4e848d84919c783b2a41c13f7de8ce96744401" + integrity sha512-yr2BWR1yLXQ8fMpdS/4ZZXpseBgE7o4g41x3a6AJOqZuOi+iE/WdJYAuZ6Y95i4Ohd2Y+9MzIWRR+uGABH4s3Q== canvg@^3.0.6: version "3.0.10" @@ -6305,9 +5236,9 @@ chai-string@^1.5.0: integrity sha512-sydDC3S3pNAQMYwJrs6dQX0oBQ6KfIPuOZ78n7rocW0eJJlsHPh2t3kwW7xfwYA/1Bf6/arGtSUo16rxR2JFlw== chai@^4.3.10: - version "4.3.10" - resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.10.tgz#d784cec635e3b7e2ffb66446a63b4e33bd390384" - integrity sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g== + version "4.4.1" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.4.1.tgz#3603fa6eba35425b0f2ac91a009fe924106e50d1" + integrity sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g== dependencies: assertion-error "^1.1.0" check-error "^1.0.3" @@ -6324,25 +5255,17 @@ chalk-template@0.4.0: dependencies: chalk "^4.1.2" -chalk@4.1.2, chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - chalk@5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.0.1.tgz#ca57d71e82bb534a296df63bbacc4a1c22b2a4b6" integrity sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w== -chalk@5.2.0, chalk@^5.0.1, chalk@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.2.0.tgz#249623b7d66869c673699fb66d65723e54dfcfb3" - integrity sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA== +chalk@5.3.0, chalk@^5.0.1, chalk@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385" + integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== -chalk@^2.0.0, chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2: +chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -6359,6 +5282,14 @@ chalk@^3.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" +chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + change-emitter@^0.1.2: version "0.1.6" resolved "https://registry.yarnpkg.com/change-emitter/-/change-emitter-0.1.6.tgz#e8b2fe3d7f1ab7d69a32199aff91ea6931409515" @@ -6415,9 +5346,9 @@ check-more-types@^2.24.0: integrity sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA== chokidar@^3.4.2, chokidar@^3.5.1, chokidar@^3.5.3: - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + version "3.6.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== dependencies: anymatch "~3.1.2" braces "~3.0.2" @@ -6445,9 +5376,16 @@ ci-info@^2.0.0: integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== ci-info@^3.2.0, ci-info@^3.7.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" - integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== + version "3.9.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" + integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== + +citty@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/citty/-/citty-0.1.5.tgz#fe37ceae5dc764af75eb2fece99d2bf527ea4e50" + integrity sha512-AS7n5NSc0OQVMV9v6wt3ByujNIrne0/cTjiC2MYqhvao57VNfiuVksTSr2p17nVOhEr2KtqiAkGwHcgMC/qUuQ== + dependencies: + consola "^3.2.3" clean-stack@^2.0.0: version "2.2.0" @@ -6466,10 +5404,17 @@ cli-cursor@^3.1.0: dependencies: restore-cursor "^3.1.0" +cli-cursor@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-4.0.0.tgz#3cecfe3734bf4fe02a8361cbdc0f6fe28c6a57ea" + integrity sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg== + dependencies: + restore-cursor "^4.0.0" + cli-spinners@^2.5.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.0.tgz#5881d0ad96381e117bbe07ad91f2008fe6ffd8db" - integrity sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g== + version "2.9.2" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41" + integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== cli-table3@^0.6.1, cli-table3@~0.6.1: version "0.6.3" @@ -6547,10 +5492,10 @@ clsx@^1.1.0: resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== -clsx@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.0.0.tgz#12658f3fd98fafe62075595a5c30e43d18f3d00b" - integrity sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q== +clsx@^2.0.0, clsx@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.0.tgz#e851283bcb5c80ee7608db18487433f7b23f77cb" + integrity sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg== code-point-at@^1.0.0: version "1.1.0" @@ -6581,10 +5526,10 @@ color-name@^1.0.0, color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -colorette@^2.0.16, colorette@^2.0.19: - version "2.0.19" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798" - integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== +colorette@^2.0.16, colorette@^2.0.20: + version "2.0.20" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" + integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: version "1.0.8" @@ -6593,10 +5538,10 @@ combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" -commander@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.0.tgz#71797971162cd3cf65f0b9d24eb28f8d303acdf1" - integrity sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA== +commander@11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-11.0.0.tgz#43e19c25dbedc8256203538e8d7e9346877a6f67" + integrity sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ== commander@^4.0.0: version "4.1.1" @@ -6668,6 +5613,11 @@ concurrently@^4.1.1: tree-kill "^1.2.1" yargs "^12.0.5" +consola@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/consola/-/consola-3.2.3.tgz#0741857aa88cfa0d6fd53f1cff0375136e98502f" + integrity sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ== + "consolidated-events@^1.1.0 || ^2.0.0": version "2.0.2" resolved "https://registry.yarnpkg.com/consolidated-events/-/consolidated-events-2.0.2.tgz#da8d8f8c2b232831413d9e190dc11669c79f4a91" @@ -6690,7 +5640,7 @@ content-type@~1.0.4: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== -convert-source-map@^1.5.0, convert-source-map@^1.7.0: +convert-source-map@^1.5.0: version "1.9.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== @@ -6722,17 +5672,12 @@ copy-to-clipboard@^3.0.8: dependencies: toggle-selection "^1.0.6" -core-js-compat@^3.31.0, core-js-compat@^3.33.1: - version "3.33.2" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.33.2.tgz#3ea4563bfd015ad4e4b52442865b02c62aba5085" - integrity sha512-axfo+wxFVxnqf8RvxTzoAlzW4gRoacrHeoFlc9n0x50+7BEyZL/Rt3hicaED1/CEd7I6tPCPVUYcJwCMO5XUYw== +core-js-compat@^3.31.0, core-js-compat@^3.34.0: + version "3.35.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.35.1.tgz#215247d7edb9e830efa4218ff719beb2803555e2" + integrity sha512-sftHa5qUJY3rs9Zht1WEnmkvXputCyDBczPnr7QDgL8n3qrF3CMXY4VPSYtOLLiOUJcah2WNXREd48iOl6mQIw== dependencies: - browserslist "^4.22.1" - -core-js-pure@^3.25.1: - version "3.28.0" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.28.0.tgz#4ef2888475b6c856ef6f5aeef8b4f618b76ad048" - integrity sha512-DSOVleA9/v3LNj/vFxAPfUHttKTzrB2RXhAPvR5TPXn4vrra3Z2ssytvRyt8eruJwAfwAiFADEbrjcRdcvPLQQ== + browserslist "^4.22.2" core-js@^1.0.0: version "1.2.7" @@ -6740,9 +5685,9 @@ core-js@^1.0.0: integrity sha512-ZiPp9pZlgxpWRu0M+YWbm6+aQ84XEfH1JRXvfOc/fILWI0VKhLC2LX13X1NYq4fULzLMq7Hfh43CSo2/aIaUPA== core-js@^3.6.0, core-js@^3.8.3: - version "3.28.0" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.28.0.tgz#ed8b9e99c273879fdfff0edfc77ee709a5800e4a" - integrity sha512-GiZn9D4Z/rSYvTeg1ljAIsEqFm0LaN9gVtwDCrKL80zHtS31p9BAjmTxVqTQDMpwlMolJZOFntUG2uwyj7DAqw== + version "3.35.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.35.1.tgz#9c28f8b7ccee482796f8590cc8d15739eaaf980c" + integrity sha512-IgdsbxNyMskrTFxa9lWHyMwAJU5gXOPP+1yO+K59d50VLVAIDAbs7gIv705KzALModfK3ZrSZTPNpC0PQgIZuw== core-util-is@1.0.2: version "1.0.2" @@ -6787,13 +5732,13 @@ cosmiconfig@^7.0.0: yaml "^1.10.0" cosmiconfig@^8.1.3: - version "8.2.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.2.0.tgz#f7d17c56a590856cd1e7cee98734dca272b0d8fd" - integrity sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ== + version "8.3.6" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.3.6.tgz#060a2b871d66dba6c8538ea1118ba1ac16f5fae3" + integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA== dependencies: - import-fresh "^3.2.1" + import-fresh "^3.3.0" js-yaml "^4.1.0" - parse-json "^5.0.0" + parse-json "^5.2.0" path-type "^4.0.0" country-region-data@^1.4.5: @@ -6872,15 +5817,6 @@ css.escape@^1.5.1: resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb" integrity sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg== -css@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/css/-/css-3.0.0.tgz#4447a4d58fdd03367c516ca9f64ae365cee4aa5d" - integrity sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ== - dependencies: - inherits "^2.0.4" - source-map "^0.6.1" - source-map-resolve "^0.6.0" - cssstyle@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-3.0.0.tgz#17ca9c87d26eac764bb8cfd00583cff21ce0277a" @@ -6893,20 +5829,15 @@ csstype@^2.5.7: resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.21.tgz#2efb85b7cc55c80017c66a5ad7cbd931fda3a90e" integrity sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w== -csstype@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.1.tgz#841b532c45c758ee546a11d5bd7b7b473c8c30b9" - integrity sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw== - -csstype@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" - integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== +csstype@^3.0.2, csstype@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" + integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== cypress-axe@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/cypress-axe/-/cypress-axe-1.3.0.tgz#255ef8ef8e88747f2a72ceb7f7c60e8185b7852b" - integrity sha512-b2zAva1+uRwGA7r/JzP7C/64YHu9Fa8RsHRIrapUDzJeGLEQImz86FbwRW/lBamrEt7YHzGRwuJizXKTyQBsfQ== + version "1.5.0" + resolved "https://registry.yarnpkg.com/cypress-axe/-/cypress-axe-1.5.0.tgz#95082734583da77b51ce9b7784e14a442016c7a1" + integrity sha512-Hy/owCjfj+25KMsecvDgo4fC/781ccL+e8p+UUYoadGVM2ogZF9XIKbiM6KI8Y3cEaSreymdD6ZzccbI2bY0lQ== cypress-file-upload@^5.0.7: version "5.0.8" @@ -6926,7 +5857,7 @@ cypress-vite@^1.5.0: chokidar "^3.5.3" debug "^4.3.4" -cypress@^13.5.0: +cypress@13.5.0: version "13.5.0" resolved "https://registry.yarnpkg.com/cypress/-/cypress-13.5.0.tgz#8c149074186130972f08b2cdce6ded41f014bacd" integrity sha512-oh6U7h9w8wwHfzNDJQ6wVcAeXu31DlIYlNOBvfd6U4CcB8oe4akawQmH+QJVOMZlM42eBoCne015+svVqdwdRQ== @@ -7073,9 +6004,9 @@ date-fns@^1.30.1: integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw== dayjs@^1.10.4: - version "1.11.7" - resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.7.tgz#4b296922642f70999544d1144a2c25730fce63e2" - integrity sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ== + version "1.11.10" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.10.tgz#68acea85317a6e164457d6d6947564029a6a16a0" + integrity sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ== debug@2.6.9, debug@^2.6.9: version "2.6.9" @@ -7084,7 +6015,7 @@ debug@2.6.9, debug@^2.6.9: dependencies: ms "2.0.0" -debug@4, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: +debug@4, debug@4.3.4, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -7120,11 +6051,6 @@ decode-named-character-reference@^1.0.0: dependencies: character-entities "^2.0.0" -decode-uri-component@^0.2.0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" - integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== - deep-eql@^4.1.3: version "4.1.3" resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.3.tgz#7c7775513092f7df98d8df9996dd085eb668cc6d" @@ -7133,15 +6059,16 @@ deep-eql@^4.1.3: type-detect "^4.0.0" deep-equal@^2.0.5: - version "2.2.0" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.2.0.tgz#5caeace9c781028b9ff459f33b779346637c43e6" - integrity sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw== + version "2.2.3" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.2.3.tgz#af89dafb23a396c7da3e862abc0be27cf51d56e1" + integrity sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA== dependencies: - call-bind "^1.0.2" - es-get-iterator "^1.1.2" - get-intrinsic "^1.1.3" + array-buffer-byte-length "^1.0.0" + call-bind "^1.0.5" + es-get-iterator "^1.1.3" + get-intrinsic "^1.2.2" is-arguments "^1.1.1" - is-array-buffer "^3.0.1" + is-array-buffer "^3.0.2" is-date-object "^1.0.5" is-regex "^1.1.4" is-shared-array-buffer "^1.0.2" @@ -7149,11 +6076,11 @@ deep-equal@^2.0.5: object-is "^1.1.5" object-keys "^1.1.1" object.assign "^4.1.4" - regexp.prototype.flags "^1.4.3" + regexp.prototype.flags "^1.5.1" side-channel "^1.0.4" which-boxed-primitive "^1.0.2" which-collection "^1.0.1" - which-typed-array "^1.1.9" + which-typed-array "^1.1.13" deep-extend@^0.6.0: version "0.6.0" @@ -7171,9 +6098,9 @@ deepmerge@^2.1.1: integrity sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA== deepmerge@^4.2.2: - version "4.3.0" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.0.tgz#65491893ec47756d44719ae520e0e2609233b59b" - integrity sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og== + version "4.3.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== default-browser-id@3.0.0: version "3.0.0" @@ -7190,23 +6117,34 @@ defaults@^1.0.3: dependencies: clone "^1.0.2" +define-data-property@^1.0.1, define-data-property@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.2.tgz#f3c33b4f0102360cd7c0f5f28700f5678510b63a" + integrity sha512-SRtsSqsDbgpJBbW3pABMCOt6rQyeM8s8RiyeSN8jYG8sYmt/kGJejbydttUsnDs1tadr19tvhT4ShwMyoqAm4g== + dependencies: + es-errors "^1.3.0" + get-intrinsic "^1.2.2" + gopd "^1.0.1" + has-property-descriptors "^1.0.1" + define-lazy-prop@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== -define-properties@^1.1.3, define-properties@^1.1.4: - version "1.2.0" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" - integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== +define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== dependencies: + define-data-property "^1.0.1" has-property-descriptors "^1.0.0" object-keys "^1.1.1" -defu@^6.1.2: - version "6.1.2" - resolved "https://registry.yarnpkg.com/defu/-/defu-6.1.2.tgz#1217cba167410a1765ba93893c6dbac9ed9d9e5c" - integrity sha512-+uO4+qr7msjNNWKYPHqN/3+Dx3NFkmIzayk2L1MyZQlvgZb/J1A0fo410dpKrN2SnqFjt8n4JL8fDJE0wIgjFQ== +defu@^6.1.3: + version "6.1.4" + resolved "https://registry.yarnpkg.com/defu/-/defu-6.1.4.tgz#4e0c9cf9ff68fe5f3d7f2765cc1a012dfdcb0479" + integrity sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg== del@^6.0.0: version "6.1.1" @@ -7232,7 +6170,7 @@ depd@2.0.0: resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== -dequal@^2.0.0, dequal@^2.0.2: +dequal@^2.0.0, dequal@^2.0.2, dequal@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== @@ -7272,11 +6210,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" @@ -7313,17 +6246,15 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" -dom-accessibility-api@^0.5.6, dom-accessibility-api@^0.5.9: +dom-accessibility-api@^0.5.9: version "0.5.16" resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz#5a7429e6066eb3664d911e33fb0e45de8eb08453" integrity sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg== -dom-helpers@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.4.0.tgz#e9b369700f959f62ecde5a6babde4bccd9169af8" - integrity sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA== - dependencies: - "@babel/runtime" "^7.1.2" +dom-accessibility-api@^0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz#993e925cc1d73f2c662e7d75dd5a5445259a8fd8" + integrity sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w== dom-helpers@^5.0.1: version "5.2.1" @@ -7354,7 +6285,7 @@ domexception@^4.0.0: dependencies: webidl-conversions "^7.0.0" -domhandler@^5.0.1, domhandler@^5.0.2, domhandler@^5.0.3: +domhandler@^5.0.2, domhandler@^5.0.3: version "5.0.3" resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== @@ -7362,18 +6293,26 @@ domhandler@^5.0.1, domhandler@^5.0.2, domhandler@^5.0.3: domelementtype "^2.3.0" dompurify@^2.2.0: - version "2.4.4" - resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.4.4.tgz#c17803931dd524e1b68e0e940a84567f9498f4bd" - integrity sha512-1e2SpqHiRx4DPvmRuXU5J0di3iQACwJM+mFGE2HAkkK7Tbnfk9WcghcAmyWc9CRrjyRRUpmuhPUH6LphQQR3EQ== + version "2.4.7" + resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.4.7.tgz#277adeb40a2c84be2d42a8bcd45f582bfa4d0cfc" + integrity sha512-kxxKlPEDa6Nc5WJi+qRgPbOAbgTpSULL+vI3NUXsZMlkJxTqYI9wg5ZTay2sFrdZRWHPWNi+EdAhcJf81WtoMQ== domutils@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.0.1.tgz#696b3875238338cb186b6c0612bd4901c89a4f1c" - integrity sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q== + version "3.1.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e" + integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA== dependencies: dom-serializer "^2.0.0" domelementtype "^2.3.0" - domhandler "^5.0.1" + domhandler "^5.0.3" + +dot-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" + integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" dotenv-expand@^10.0.0: version "10.0.0" @@ -7381,9 +6320,9 @@ dotenv-expand@^10.0.0: integrity sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A== dotenv@^16.0.0, dotenv@^16.0.3: - version "16.0.3" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.3.tgz#115aec42bac5053db3c456db30cc243a5a836a07" - integrity sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ== + version "16.4.1" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.1.tgz#1d9931f1d3e5d2959350d1250efab299561f7f11" + integrity sha512-CjA3y+Dr3FyFDOAMnxZEGtnW9KBR2M0JvvUtXNW+dYJL5ROWxP9DUHCwgFqpMk0OXCc0ljhaNTr2w/kutYIcHQ== duplexify@^3.5.0, duplexify@^3.6.0: version "3.7.1" @@ -7414,26 +6353,16 @@ ee-first@1.1.1: integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== ejs@^3.1.8: - version "3.1.8" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.8.tgz#758d32910c78047585c7ef1f92f9ee041c1c190b" - integrity sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ== + version "3.1.9" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.9.tgz#03c9e8777fe12686a9effcef22303ca3d8eeb361" + integrity sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ== dependencies: jake "^10.8.5" -electron-to-chromium@^1.4.284: - version "1.4.309" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.309.tgz#82158606da135ffffc16a2e1eb853fa0a10955e7" - integrity sha512-U7DTiKe4h+irqBG6h4EZ0XXaZuJj4md3xIXXaGSYhwiumPZ4BSc6rgf9UD0hVUMaeP/jB0q5pKWCPxvhO8fvZA== - -electron-to-chromium@^1.4.535: - version "1.4.572" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.572.tgz#ed9876658998138fe9e3aa47ecfa0bf914192a86" - integrity sha512-RlFobl4D3ieetbnR+2EpxdzFl9h0RAJkPK3pfiwMug2nhBin2ZCsGIAJWdpNniLz43sgXam/CgipOmvTA+rUiA== - -electron-to-chromium@^1.4.601: - version "1.4.613" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.613.tgz#529e4fc65576ecfd055d7d4619fade4fac446af2" - integrity sha512-r4x5+FowKG6q+/Wj0W9nidx7QO31BJwmR2uEo+Qh3YLGQ8SbBAFuDFpTxzly/I2gsbrFwBuIjrMp423L3O5U3w== +electron-to-chromium@^1.4.648: + version "1.4.665" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.665.tgz#681700bd590b0e5a3be66e3e2874ce62abcf5da5" + integrity sha512-UpyCWObBoD+nSZgOC2ToaIdZB0r9GhqT2WahPKiSki6ckkSuKhQNso8V2PrFcHBMleI/eqbKgVQgVC4Wni4ilw== emoji-regex@^7.0.1: version "7.0.3" @@ -7463,16 +6392,17 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1: once "^1.4.0" enquirer@^2.3.6: - version "2.3.6" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + version "2.4.1" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.4.1.tgz#93334b3fbd74fc7097b224ab4a8fb7e40bf4ae56" + integrity sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ== dependencies: ansi-colors "^4.1.1" + strip-ansi "^6.0.1" entities@^4.2.0, entities@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-4.4.0.tgz#97bdaba170339446495e653cfd2db78962900174" - integrity sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA== + version "4.5.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" + integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== entities@~2.1.0: version "2.1.0" @@ -7480,9 +6410,9 @@ entities@~2.1.0: integrity sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w== envinfo@^7.7.3: - version "7.8.1" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" - integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== + version "7.11.1" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.11.1.tgz#2ffef77591057081b0129a8fd8cf6118da1b94e1" + integrity sha512-8PiZgZNIB4q/Lw4AhOvAfB/ityHAd2bli3lESSWmWSzSsl5dKpy5N1d1Rfkd2teq/g9xN90lc6o98DOjMeYHpg== error-ex@^1.3.1: version "1.3.2" @@ -7491,46 +6421,57 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.19.0, es-abstract@^1.20.4: - version "1.21.1" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.21.1.tgz#e6105a099967c08377830a0c9cb589d570dd86c6" - integrity sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg== +es-abstract@^1.22.1, es-abstract@^1.22.3: + version "1.22.3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.3.tgz#48e79f5573198de6dee3589195727f4f74bc4f32" + integrity sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA== dependencies: + array-buffer-byte-length "^1.0.0" + arraybuffer.prototype.slice "^1.0.2" available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + call-bind "^1.0.5" es-set-tostringtag "^2.0.1" es-to-primitive "^1.2.1" - function-bind "^1.1.1" - function.prototype.name "^1.1.5" - get-intrinsic "^1.1.3" + function.prototype.name "^1.1.6" + get-intrinsic "^1.2.2" get-symbol-description "^1.0.0" globalthis "^1.0.3" gopd "^1.0.1" - has "^1.0.3" has-property-descriptors "^1.0.0" has-proto "^1.0.1" has-symbols "^1.0.3" - internal-slot "^1.0.4" - is-array-buffer "^3.0.1" + hasown "^2.0.0" + internal-slot "^1.0.5" + is-array-buffer "^3.0.2" is-callable "^1.2.7" is-negative-zero "^2.0.2" is-regex "^1.1.4" is-shared-array-buffer "^1.0.2" is-string "^1.0.7" - is-typed-array "^1.1.10" + is-typed-array "^1.1.12" is-weakref "^1.0.2" - object-inspect "^1.12.2" + object-inspect "^1.13.1" object-keys "^1.1.1" object.assign "^4.1.4" - regexp.prototype.flags "^1.4.3" + regexp.prototype.flags "^1.5.1" + safe-array-concat "^1.0.1" safe-regex-test "^1.0.0" - string.prototype.trimend "^1.0.6" - string.prototype.trimstart "^1.0.6" + string.prototype.trim "^1.2.8" + string.prototype.trimend "^1.0.7" + string.prototype.trimstart "^1.0.7" + typed-array-buffer "^1.0.0" + typed-array-byte-length "^1.0.0" + typed-array-byte-offset "^1.0.0" typed-array-length "^1.0.4" unbox-primitive "^1.0.2" - which-typed-array "^1.1.9" + which-typed-array "^1.1.13" + +es-errors@^1.0.0, es-errors@^1.1.0, es-errors@^1.2.1, es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== -es-get-iterator@^1.1.2: +es-get-iterator@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.3.tgz#3ef87523c5d464d41084b2c3c9c214f1199763d6" integrity sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw== @@ -7545,26 +6486,46 @@ es-get-iterator@^1.1.2: isarray "^2.0.5" stop-iteration-iterator "^1.0.0" +es-iterator-helpers@^1.0.12, es-iterator-helpers@^1.0.15: + version "1.0.15" + resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.15.tgz#bd81d275ac766431d19305923707c3efd9f1ae40" + integrity sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g== + dependencies: + asynciterator.prototype "^1.0.0" + call-bind "^1.0.2" + define-properties "^1.2.1" + es-abstract "^1.22.1" + es-set-tostringtag "^2.0.1" + function-bind "^1.1.1" + get-intrinsic "^1.2.1" + globalthis "^1.0.3" + has-property-descriptors "^1.0.0" + has-proto "^1.0.1" + has-symbols "^1.0.3" + internal-slot "^1.0.5" + iterator.prototype "^1.1.2" + safe-array-concat "^1.0.1" + es-module-lexer@^0.9.3: version "0.9.3" resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19" integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ== es-set-tostringtag@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" - integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== + version "2.0.2" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz#11f7cc9f63376930a5f20be4915834f4bc74f9c9" + integrity sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q== dependencies: - get-intrinsic "^1.1.3" - has "^1.0.3" + get-intrinsic "^1.2.2" has-tostringtag "^1.0.0" + hasown "^2.0.0" -es-shim-unscopables@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" - integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== +es-shim-unscopables@^1.0.0, es-shim-unscopables@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" + integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== dependencies: - has "^1.0.3" + hasown "^2.0.0" es-to-primitive@^1.2.1: version "1.2.1" @@ -7575,11 +6536,6 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" -es6-object-assign@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/es6-object-assign/-/es6-object-assign-1.1.0.tgz#c2c3582656247c39ea107cb1e6652b6f9f24523c" - integrity sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw== - esbuild-plugin-alias@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/esbuild-plugin-alias/-/esbuild-plugin-alias-0.2.1.tgz#45a86cb941e20e7c2bc68a2bea53562172494fcb" @@ -7592,7 +6548,7 @@ esbuild-register@^3.5.0: dependencies: debug "^4.3.4" -esbuild@^0.18.0, esbuild@^0.18.2: +esbuild@^0.18.0: version "0.18.20" resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.18.20.tgz#4709f5a34801b43b799ab7d6d82f7284a9b7a7a6" integrity sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA== @@ -7620,38 +6576,39 @@ esbuild@^0.18.0, esbuild@^0.18.2: "@esbuild/win32-ia32" "0.18.20" "@esbuild/win32-x64" "0.18.20" -esbuild@^0.19.3: - version "0.19.8" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.8.tgz#ad05b72281d84483fa6b5345bd246c27a207b8f1" - integrity sha512-l7iffQpT2OrZfH2rXIp7/FkmaeZM0vxbxN9KfiCwGYuZqzMg/JdvX26R31Zxn/Pxvsrg3Y9N6XTcnknqDyyv4w== +esbuild@^0.19.2, esbuild@^0.19.3: + version "0.19.12" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.12.tgz#dc82ee5dc79e82f5a5c3b4323a2a641827db3e04" + integrity sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg== optionalDependencies: - "@esbuild/android-arm" "0.19.8" - "@esbuild/android-arm64" "0.19.8" - "@esbuild/android-x64" "0.19.8" - "@esbuild/darwin-arm64" "0.19.8" - "@esbuild/darwin-x64" "0.19.8" - "@esbuild/freebsd-arm64" "0.19.8" - "@esbuild/freebsd-x64" "0.19.8" - "@esbuild/linux-arm" "0.19.8" - "@esbuild/linux-arm64" "0.19.8" - "@esbuild/linux-ia32" "0.19.8" - "@esbuild/linux-loong64" "0.19.8" - "@esbuild/linux-mips64el" "0.19.8" - "@esbuild/linux-ppc64" "0.19.8" - "@esbuild/linux-riscv64" "0.19.8" - "@esbuild/linux-s390x" "0.19.8" - "@esbuild/linux-x64" "0.19.8" - "@esbuild/netbsd-x64" "0.19.8" - "@esbuild/openbsd-x64" "0.19.8" - "@esbuild/sunos-x64" "0.19.8" - "@esbuild/win32-arm64" "0.19.8" - "@esbuild/win32-ia32" "0.19.8" - "@esbuild/win32-x64" "0.19.8" + "@esbuild/aix-ppc64" "0.19.12" + "@esbuild/android-arm" "0.19.12" + "@esbuild/android-arm64" "0.19.12" + "@esbuild/android-x64" "0.19.12" + "@esbuild/darwin-arm64" "0.19.12" + "@esbuild/darwin-x64" "0.19.12" + "@esbuild/freebsd-arm64" "0.19.12" + "@esbuild/freebsd-x64" "0.19.12" + "@esbuild/linux-arm" "0.19.12" + "@esbuild/linux-arm64" "0.19.12" + "@esbuild/linux-ia32" "0.19.12" + "@esbuild/linux-loong64" "0.19.12" + "@esbuild/linux-mips64el" "0.19.12" + "@esbuild/linux-ppc64" "0.19.12" + "@esbuild/linux-riscv64" "0.19.12" + "@esbuild/linux-s390x" "0.19.12" + "@esbuild/linux-x64" "0.19.12" + "@esbuild/netbsd-x64" "0.19.12" + "@esbuild/openbsd-x64" "0.19.12" + "@esbuild/sunos-x64" "0.19.12" + "@esbuild/win32-arm64" "0.19.12" + "@esbuild/win32-ia32" "0.19.12" + "@esbuild/win32-x64" "0.19.12" escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + version "3.1.2" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" + integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== escape-html@~1.0.3: version "1.0.3" @@ -7663,11 +6620,6 @@ escape-string-regexp@^1.0.5: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== -escape-string-regexp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" - integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== - escape-string-regexp@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" @@ -7695,11 +6647,11 @@ eslint-config-prettier@~8.1.0: integrity sha512-oKMhGv3ihGbCIimCAjqkdzx2Q+jthoqnXSP+d86M9tptwugycmTFdVR4IpLgq2c4SHifbwO90z2fQ8/Aio73yw== eslint-plugin-cypress@^2.11.3: - version "2.12.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-cypress/-/eslint-plugin-cypress-2.12.1.tgz#9aeee700708ca8c058e00cdafe215199918c2632" - integrity sha512-c2W/uPADl5kospNDihgiLc7n87t5XhUbFDoTl6CfVkmG+kDAb5Ux10V9PoLPu9N+r7znpc+iQlcmAqT1A/89HA== + version "2.15.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-cypress/-/eslint-plugin-cypress-2.15.1.tgz#336afa7e8e27451afaf65aa359c9509e0a4f3a7b" + integrity sha512-eLHLWP5Q+I4j2AWepYq0PgFEei9/s5LvjuSqWrxurkg1YZ8ltxdvMNmdSf0drnsNo57CTgYY/NIHHLRSWejR7w== dependencies: - globals "^11.12.0" + globals "^13.20.0" eslint-plugin-es@^3.0.0: version "3.0.1" @@ -7710,26 +6662,26 @@ eslint-plugin-es@^3.0.0: regexpp "^3.0.0" eslint-plugin-jsx-a11y@^6.7.1: - version "6.7.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz#fca5e02d115f48c9a597a6894d5bcec2f7a76976" - integrity sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA== - dependencies: - "@babel/runtime" "^7.20.7" - aria-query "^5.1.3" - array-includes "^3.1.6" - array.prototype.flatmap "^1.3.1" - ast-types-flow "^0.0.7" - axe-core "^4.6.2" - axobject-query "^3.1.1" + version "6.8.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz#2fa9c701d44fcd722b7c771ec322432857fcbad2" + integrity sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA== + dependencies: + "@babel/runtime" "^7.23.2" + aria-query "^5.3.0" + array-includes "^3.1.7" + array.prototype.flatmap "^1.3.2" + ast-types-flow "^0.0.8" + axe-core "=4.7.0" + axobject-query "^3.2.1" damerau-levenshtein "^1.0.8" emoji-regex "^9.2.2" - has "^1.0.3" - jsx-ast-utils "^3.3.3" - language-tags "=1.0.5" + es-iterator-helpers "^1.0.15" + hasown "^2.0.0" + jsx-ast-utils "^3.3.5" + language-tags "^1.0.9" minimatch "^3.1.2" - object.entries "^1.1.6" - object.fromentries "^2.0.6" - semver "^6.3.0" + object.entries "^1.1.7" + object.fromentries "^2.0.7" eslint-plugin-node@^11.0.0: version "11.1.0" @@ -7744,15 +6696,15 @@ eslint-plugin-node@^11.0.0: semver "^6.1.0" eslint-plugin-perfectionist@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-perfectionist/-/eslint-plugin-perfectionist-1.4.0.tgz#c87b8b425a32098a1c291e1a412eb4a45a2f31e9" - integrity sha512-9gO+qmuU1DYzoYeN2D0PqYrI1FlqMPYGsZTWUWnWPrMQdFGFtq7eYraeQ57/8ffNBbVX6e6HvQOJ9iok9DfJvw== + version "1.5.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-perfectionist/-/eslint-plugin-perfectionist-1.5.1.tgz#9fa6bcb3b8634d583f5204f10ea7f0d9ae3fce3e" + integrity sha512-PiUrAfGDc/l6MKKUP8qt5RXueC7FZC6F/0j8ijXYU8o3x8o2qUi6zEEYBkId/IiKloIXM5KTD4jrH9833kDNzA== dependencies: - "@typescript-eslint/types" "^5.59.11" - "@typescript-eslint/utils" "^5.59.11" + "@typescript-eslint/types" "^5.62.0" + "@typescript-eslint/utils" "^5.62.0" is-core-module "^2.12.1" json5 "^2.2.3" - minimatch "^9.0.1" + minimatch "^9.0.3" natural-compare-lite "^1.4.0" eslint-plugin-prettier@~3.3.1: @@ -7777,14 +6729,15 @@ eslint-plugin-react-hooks@^3.0.0: integrity sha512-EjxTHxjLKIBWFgDJdhKKzLh5q+vjTFrqNZX36uIxWS4OfyXe5DawqPj3U5qeJ1ngLwatjzQnmR0Lz0J0YH3kxw== eslint-plugin-react@^7.19.0: - version "7.32.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz#e71f21c7c265ebce01bcbc9d0955170c55571f10" - integrity sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg== + version "7.33.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz#69ee09443ffc583927eafe86ffebb470ee737608" + integrity sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw== dependencies: array-includes "^3.1.6" array.prototype.flatmap "^1.3.1" array.prototype.tosorted "^1.1.1" doctrine "^2.1.0" + es-iterator-helpers "^1.0.12" estraverse "^5.3.0" jsx-ast-utils "^2.4.1 || ^3.0.0" minimatch "^3.1.2" @@ -7794,7 +6747,7 @@ eslint-plugin-react@^7.19.0: object.values "^1.1.6" prop-types "^15.8.1" resolve "^2.0.0-next.4" - semver "^6.3.0" + semver "^6.3.1" string.prototype.matchall "^4.0.8" eslint-plugin-scanjs-rules@^0.2.1: @@ -7842,10 +6795,10 @@ eslint-scope@^5.0.0, eslint-scope@^5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" -eslint-scope@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" - integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== +eslint-scope@^7.2.2: + version "7.2.2" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" + integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== dependencies: esrecurse "^4.3.0" estraverse "^5.2.0" @@ -7881,54 +6834,53 @@ eslint-visitor-keys@^2.0.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== -eslint-visitor-keys@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" - integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== eslint@>=1.1: - version "8.34.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.34.0.tgz#fe0ab0ef478104c1f9ebc5537e303d25a8fb22d6" - integrity sha512-1Z8iFsucw+7kSqXNZVslXS8Ioa4u2KM7GPwuKtkTFAqZ/cHMcEaR+1+Br0wLlot49cNxIiZk5wp8EAbPcYZxTg== + version "8.56.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.56.0.tgz#4957ce8da409dc0809f99ab07a1b94832ab74b15" + integrity sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ== dependencies: - "@eslint/eslintrc" "^1.4.1" - "@humanwhocodes/config-array" "^0.11.8" + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.4" + "@eslint/js" "8.56.0" + "@humanwhocodes/config-array" "^0.11.13" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" - ajv "^6.10.0" + "@ungap/structured-clone" "^1.2.0" + ajv "^6.12.4" chalk "^4.0.0" cross-spawn "^7.0.2" debug "^4.3.2" doctrine "^3.0.0" escape-string-regexp "^4.0.0" - eslint-scope "^7.1.1" - eslint-utils "^3.0.0" - eslint-visitor-keys "^3.3.0" - espree "^9.4.0" - esquery "^1.4.0" + eslint-scope "^7.2.2" + eslint-visitor-keys "^3.4.3" + espree "^9.6.1" + esquery "^1.4.2" esutils "^2.0.2" fast-deep-equal "^3.1.3" file-entry-cache "^6.0.1" find-up "^5.0.0" glob-parent "^6.0.2" globals "^13.19.0" - grapheme-splitter "^1.0.4" + graphemer "^1.4.0" ignore "^5.2.0" - import-fresh "^3.0.0" imurmurhash "^0.1.4" is-glob "^4.0.0" is-path-inside "^3.0.3" - js-sdsl "^4.1.4" js-yaml "^4.1.0" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.4.1" lodash.merge "^4.6.2" minimatch "^3.1.2" natural-compare "^1.4.0" - optionator "^0.9.1" - regexpp "^3.2.0" + optionator "^0.9.3" strip-ansi "^6.0.1" - strip-json-comments "^3.1.0" text-table "^0.2.0" eslint@^6.8.0: @@ -7983,24 +6935,24 @@ espree@^6.1.2: acorn-jsx "^5.2.0" eslint-visitor-keys "^1.1.0" -espree@^9.4.0: - version "9.4.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.4.1.tgz#51d6092615567a2c2cff7833445e37c28c0065bd" - integrity sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg== +espree@^9.6.0, espree@^9.6.1: + version "9.6.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" + integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== dependencies: - acorn "^8.8.0" + acorn "^8.9.0" acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.3.0" + eslint-visitor-keys "^3.4.1" esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esquery@^1.0.1, esquery@^1.4.0: - version "1.4.2" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.2.tgz#c6d3fee05dd665808e2ad870631f221f5617b1d1" - integrity sha512-JVSoLdTlTDkmjFmab7H/9SL9qGSyjElT3myyKp7krqjVFQCDLmj1QFaCLRFBszBKI0XVZaiiXvuPIX3ZwHe1Ng== +esquery@^1.0.1, esquery@^1.4.2: + version "1.5.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" + integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== dependencies: estraverse "^5.1.0" @@ -8053,6 +7005,11 @@ eventemitter3@^4.0.1: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== +eventemitter3@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" + integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== + events@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" @@ -8073,6 +7030,21 @@ execa@4.1.0: signal-exit "^3.0.2" strip-final-newline "^2.0.0" +execa@7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-7.2.0.tgz#657e75ba984f42a70f38928cedc87d6f2d4fe4e9" + integrity sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.1" + human-signals "^4.3.0" + is-stream "^3.0.0" + merge-stream "^2.0.0" + npm-run-path "^5.1.0" + onetime "^6.0.0" + signal-exit "^3.0.7" + strip-final-newline "^3.0.0" + execa@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" @@ -8101,21 +7073,6 @@ execa@^5.0.0, execa@^5.1.1: signal-exit "^3.0.3" strip-final-newline "^2.0.0" -execa@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-7.0.0.tgz#2a44e20e73797f6c2df23889927972386157d7e4" - integrity sha512-tQbH0pH/8LHTnwTrsKWideqi6rFB/QNUawEwrn+WHyz7PX1Tuz2u7wfTvbaNBdP5JD5LVWxNo8/A8CHNZ3bV6g== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.1" - human-signals "^4.3.0" - is-stream "^3.0.0" - merge-stream "^2.0.0" - npm-run-path "^5.1.0" - onetime "^6.0.0" - signal-exit "^3.0.7" - strip-final-newline "^3.0.0" - execa@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/execa/-/execa-8.0.1.tgz#51f6a5943b580f963c3ca9c6321796db8cc39b8c" @@ -8138,17 +7095,6 @@ executable@^4.1.1: dependencies: pify "^2.2.0" -expect@^29.0.0: - version "29.4.3" - resolved "https://registry.yarnpkg.com/expect/-/expect-29.4.3.tgz#5e47757316df744fe3b8926c3ae8a3ebdafff7fe" - integrity sha512-uC05+Q7eXECFpgDrHdXA4k2rpMyStAYPItEDLyQDo5Ta7fVkJnNA/4zh/OIVkVVNZ1oOK1PipQoyNjuZ6sz6Dg== - dependencies: - "@jest/expect-utils" "^29.4.3" - jest-get-type "^29.4.3" - jest-matcher-utils "^29.4.3" - jest-message-util "^29.4.3" - jest-util "^29.4.3" - express@^4.17.3: version "4.18.2" resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" @@ -8250,27 +7196,16 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== fast-diff@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" - integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== + version "1.3.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" + integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== -fast-equals@^5.0.0: +fast-equals@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/fast-equals/-/fast-equals-5.0.1.tgz#a4eefe3c5d1c0d021aeed0bc10ba5e0c12ee405d" integrity sha512-WF1Wi8PwwSY7/6Kx0vKXtw8RwuSGoM1bvDaJbu7MxDlR1vovZjIAKrnzyrThgAjm6JDTu0fVgWXDlMGspodfoQ== -fast-glob@^3.2.9: - version "3.2.12" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" - integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fast-glob@^3.3.2: +fast-glob@^3.2.9, fast-glob@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== @@ -8299,9 +7234,9 @@ fast-url-parser@1.1.3: punycode "^1.3.2" fastq@^1.6.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" - integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== + version "1.17.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" + integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== dependencies: reusify "^1.0.4" @@ -8333,9 +7268,9 @@ fd-slicer@~1.1.0: pend "~1.2.0" fetch-retry@^5.0.2: - version "5.0.4" - resolved "https://registry.yarnpkg.com/fetch-retry/-/fetch-retry-5.0.4.tgz#06e8e4533030bf6faa00ffbb9450cb9264c23c12" - integrity sha512-LXcdgpdcVedccGg0AZqg+S8lX/FCdwXD92WNZ5k5qsb0irRhSFsBOpcJt7oevyqT2/C2nEE0zSFNdBEpj3YOSw== + version "5.0.6" + resolved "https://registry.yarnpkg.com/fetch-retry/-/fetch-retry-5.0.6.tgz#17d0bc90423405b7a88b74355bf364acd2a7fa56" + integrity sha512-3yurQZ2hD9VISAhJJP9bpYFNQrHHBXE2JxxjY5aLEcDi46RmAzJE2OC9FAde0yis5ElW0jTTzs0zfg/Cca4XqQ== fflate@^0.4.8: version "0.4.8" @@ -8343,9 +7278,9 @@ fflate@^0.4.8: integrity sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA== fflate@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/fflate/-/fflate-0.8.1.tgz#1ed92270674d2ad3c73f077cd0acf26486dae6c9" - integrity sha512-/exOvEuc+/iaUm105QIiOt4LpBdMTWsXxqR0HDF35vx3fmaKzw7354gTilCh5rkzEt8WYyG//ku3h3nRmd7CHQ== + version "0.8.2" + resolved "https://registry.yarnpkg.com/fflate/-/fflate-0.8.2.tgz#fc8631f5347812ad6028bbe4a2308b2792aa1dea" + integrity sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A== figures@^3.0.0, figures@^3.2.0: version "3.2.0" @@ -8383,15 +7318,7 @@ file-system-cache@2.3.0: fs-extra "11.1.1" ramda "0.29.0" -file-system-cache@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/file-system-cache/-/file-system-cache-2.0.2.tgz#6b51d58c5786302146fa883529e0d7f88896e948" - integrity sha512-lp4BHO4CWqvRyx88Tt3quZic9ZMf4cJyquYq7UI8sH42Bm2ArlBBjKQAalZOo+UfaBassb7X123Lik5qZ/tSAA== - dependencies: - fs-extra "^11.1.0" - ramda "^0.28.0" - -filelist@^1.0.1: +filelist@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== @@ -8472,9 +7399,9 @@ find-yarn-workspace-root@^2.0.0: micromatch "^4.0.2" flag-icons@^6.6.5: - version "6.6.6" - resolved "https://registry.yarnpkg.com/flag-icons/-/flag-icons-6.6.6.tgz#9ddff81e1126778ca6a5a1e0e2cfac2e865f2cb7" - integrity sha512-4lHDKxldnQ7q617pf9Dx9nAetT+9zcMpUexbRrc9kjLw9KJgZ83zA5Dky3Vv7ZDzUjAiZ46x/cy5P0HnEnqA2A== + version "6.15.0" + resolved "https://registry.yarnpkg.com/flag-icons/-/flag-icons-6.15.0.tgz#9b9ea631f408ff41844872d1d7df9bd020d4c76d" + integrity sha512-ARo9Q+aATZEjyjveeec9e+orx+xLWUBdOX9baOKoGqDzMbvZ65ghPhaHbVt5T7ZB+Q4OFsB4Hr+eQnpV8Q+dLA== flat-cache@^2.0.1: version "2.0.1" @@ -8486,11 +7413,12 @@ flat-cache@^2.0.1: write "1.0.3" flat-cache@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" - integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + version "3.2.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" + integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== dependencies: - flatted "^3.1.0" + flatted "^3.2.9" + keyv "^4.5.3" rimraf "^3.0.2" flatted@^2.0.0: @@ -8498,25 +7426,20 @@ flatted@^2.0.0: resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== -flatted@^3.1.0: - version "3.2.7" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" - integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== - flatted@^3.2.9: version "3.2.9" resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== flow-parser@0.*: - version "0.200.1" - resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.200.1.tgz#99a94b35b7d1815716e3db56bb797440ed340716" - integrity sha512-N6gxgo0iQx0G2m3aJjg3RLxNLUG3EBYgBN/xDDPGQXSjvqNkTdEd2t1myE36Xi7GndZQWngDP7jf0GvxdL6pRg== + version "0.228.0" + resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.228.0.tgz#0b801507c8cf44257338596b49bd0904caea2026" + integrity sha512-xPWkzCO07AnS8X+fQFpWm+tJ+C7aeaiVzJ+rSepbkCXUvUJ6l6squEl63axoMcixyH4wLjmypOzq/+zTD0O93w== follow-redirects@^1.15.4: - version "1.15.4" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.4.tgz#cdc7d308bf6493126b17ea2191ea0ccf3e535adf" - integrity sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw== + version "1.15.5" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.5.tgz#54d4d6d062c0fa7d9d17feb008461550e3ba8020" + integrity sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw== font-logos@^0.18.0: version "0.18.0" @@ -8543,15 +7466,6 @@ forever-agent@~0.6.1: resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== -form-data@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" - integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - form-data@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" @@ -8589,10 +7503,10 @@ forwarded@0.2.0: resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== -framebus@5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/framebus/-/framebus-5.2.0.tgz#a1689e8bbd5abf3ae7af8b1139658bb66d808e62" - integrity sha512-hIKt71vBVd/g0emUbuVg8HAeHEjxBwhAE87CKXvxPIy0sCoGWqBulB1k9lWBWUU6ZHXPs0xjXWMwUldWMiqD6A== +framebus@5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/framebus/-/framebus-5.2.1.tgz#6b7468191c020e28ee339c15561d4bd12864c636" + integrity sha512-K6pw+M2wNBuOhEoFrmMbf1O+fm7PnNDIfA9y0KpAyQzXRIJ420szGgJ/dI2Ikz0XG+5VfspLqA72M6bXhuyKIQ== dependencies: "@braintree/uuid" "^0.1.0" @@ -8616,9 +7530,9 @@ fs-extra@11.1.1: universalify "^2.0.0" fs-extra@>=5, fs-extra@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.1.0.tgz#5784b102104433bb0e090f48bfc4a30742c357ed" - integrity sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw== + version "11.2.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.2.0.tgz#e70e17dfad64232287d01929399e0ea7c86b0e5b" + integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw== dependencies: graceful-fs "^4.2.0" jsonfile "^6.0.1" @@ -8646,42 +7560,32 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== -fsevents@^2.3.2, fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - -fsevents@~2.3.3: +fsevents@^2.3.2, fsevents@~2.3.2, fsevents@~2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -function-bind@^1.1.2: +function-bind@^1.1.1, function-bind@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== -function.prototype.name@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" - integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== +function.prototype.name@^1.1.5, function.prototype.name@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" + integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.0" - functions-have-names "^1.2.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + functions-have-names "^1.2.3" functional-red-black-tree@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== -functions-have-names@^1.2.2: +functions-have-names@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== @@ -8706,14 +7610,16 @@ get-func-name@^2.0.1, get-func-name@^2.0.2: resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.2.tgz#0d7cf20cd13fda808669ffa88f4ffc7a3943fc41" integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.0.tgz#7ad1dc0535f3a2904bba075772763e5051f6d05f" - integrity sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q== +get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" + integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== dependencies: - function-bind "^1.1.1" - has "^1.0.3" + es-errors "^1.3.0" + function-bind "^1.1.2" + has-proto "^1.0.1" has-symbols "^1.0.3" + hasown "^2.0.0" get-nonce@^1.0.0: version "1.0.1" @@ -8721,9 +7627,9 @@ get-nonce@^1.0.0: integrity sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q== get-npm-tarball-url@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/get-npm-tarball-url/-/get-npm-tarball-url-2.0.3.tgz#67dff908d699e9e2182530ae6e939a93e5f8dfdb" - integrity sha512-R/PW6RqyaBQNWYaSyfrh54/qtcnOp22FHCCiRhSSZj0FP3KQWCsxxt0DzIdVTbwTqe9CtQfvl/FPD4UIPt4pqw== + version "2.1.0" + resolved "https://registry.yarnpkg.com/get-npm-tarball-url/-/get-npm-tarball-url-2.1.0.tgz#cbd6bb25884622bc3191c761466c93ac83343213" + integrity sha512-ro+DiMu5DXgRBabqXupW38h7WPZ9+Ad8UjwhvsmmN8w1sU7ab0nzAXvVZ4kqYg57OrqomRtJvepX5/xvFKNtjA== get-package-type@^0.1.0: version "0.1.0" @@ -8765,12 +7671,13 @@ get-stream@^8.0.1: integrity sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA== get-symbol-description@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" - integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5" + integrity sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" + call-bind "^1.0.5" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" getos@^3.2.1: version "3.2.1" @@ -8786,19 +7693,20 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" -giget@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/giget/-/giget-1.1.2.tgz#f99a49cb0ff85479c8c3612cdc7ca27f2066e818" - integrity sha512-HsLoS07HiQ5oqvObOI+Qb2tyZH4Gj5nYGfF9qQcZNrPw+uEFhdXtgJr01aO2pWadGHucajYDLxxbtQkm97ON2A== - dependencies: - colorette "^2.0.19" - defu "^6.1.2" - https-proxy-agent "^5.0.1" - mri "^1.2.0" - node-fetch-native "^1.0.2" - pathe "^1.1.0" - tar "^6.1.13" - +giget@^1.0.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/giget/-/giget-1.2.1.tgz#4f42779aae57a5f664a1c4d50401b008e9810f4c" + integrity sha512-4VG22mopWtIeHwogGSy1FViXVo0YT+m6BrqZfz0JJFwbSsePsCdOzdLIIli5BtMp7Xe8f/o2OmBpQX2NBOC24g== + dependencies: + citty "^0.1.5" + consola "^3.2.3" + defu "^6.1.3" + node-fetch-native "^1.6.1" + nypm "^0.3.3" + ohash "^1.1.3" + pathe "^1.1.1" + tar "^6.2.0" + github-slugger@^1.0.0: version "1.5.0" resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.5.0.tgz#17891bbc73232051474d68bd867a34625c955f7d" @@ -8823,30 +7731,7 @@ glob-to-regexp@^0.4.1: resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@7.1.6: - version "7.1.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" - integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@>=7: - version "8.1.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" - integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^5.0.1" - once "^1.3.0" - -glob@^10.0.0: +glob@>=7, glob@^10.0.0, glob@^10.3.1, glob@^10.3.10: version "10.3.10" resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b" integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== @@ -8857,17 +7742,6 @@ glob@^10.0.0: minipass "^5.0.0 || ^6.0.2 || ^7.0.0" path-scurry "^1.10.1" -glob@^10.3.1: - version "10.3.1" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.1.tgz#9789cb1b994515bedb811a6deca735b5c37d2bf4" - integrity sha512-9BKYcEeIs7QwlCYs+Y3GBvqAMISufUS0i2ELd11zpZjxI5V9iyRj0HgzB5/cLf2NY4vcYBTYzJ7GIui7j/4DOw== - dependencies: - foreground-child "^3.1.0" - jackspeak "^2.0.3" - minimatch "^9.0.1" - minipass "^5.0.0 || ^6.0.2" - path-scurry "^1.10.0" - glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.2.0: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" @@ -8887,7 +7761,7 @@ global-dirs@^3.0.0: dependencies: ini "2.0.0" -globals@^11.1.0, globals@^11.12.0: +globals@^11.1.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== @@ -8899,10 +7773,10 @@ globals@^12.1.0: dependencies: type-fest "^0.8.1" -globals@^13.19.0: - version "13.20.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" - integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== +globals@^13.19.0, globals@^13.20.0: + version "13.24.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" + integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== dependencies: type-fest "^0.20.2" @@ -8933,14 +7807,14 @@ gopd@^1.0.1: get-intrinsic "^1.1.3" graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.9: - version "4.2.10" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== -grapheme-splitter@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" - integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== graphql@^16.8.1: version "16.8.1" @@ -8960,12 +7834,12 @@ gunzip-maybe@^1.4.2: through2 "^2.0.3" handlebars@^4.7.7: - version "4.7.7" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" - integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== + version "4.7.8" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.8.tgz#41c42c18b1be2365439188c77c6afae71c0cd9e9" + integrity sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ== dependencies: minimist "^1.2.5" - neo-async "^2.6.0" + neo-async "^2.6.2" source-map "^0.6.1" wordwrap "^1.0.0" optionalDependencies: @@ -8991,12 +7865,12 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-property-descriptors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" - integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" + integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== dependencies: - get-intrinsic "^1.1.1" + get-intrinsic "^1.2.2" has-proto@^1.0.1: version "1.0.1" @@ -9008,19 +7882,12 @@ has-symbols@^1.0.2, has-symbols@^1.0.3: resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== -has-tostringtag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" - integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== - dependencies: - has-symbols "^1.0.2" - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== +has-tostringtag@^1.0.0, has-tostringtag@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== dependencies: - function-bind "^1.1.1" + has-symbols "^1.0.3" hasown@^2.0.0: version "2.0.0" @@ -9045,9 +7912,9 @@ hi-base32@^0.5.0: integrity sha512-EmBBpvdYh/4XxsnUybsPag6VikPYnN30td+vQk+GI3qpahVEG9+gTkG0aXVxTjBqQ5T6ijbWIu77O+C5WFWsnA== highlight.js@*: - version "11.7.0" - resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-11.7.0.tgz#3ff0165bc843f8c9bce1fd89e2fda9143d24b11e" - integrity sha512-1rRqesRFhMO/PRF+G86evnyJkCgaZFOI+Z6kdj15TA18funfoqJXvgPCLSf0SWq3SRfg1j3HlDs8o4s3EGq1oQ== + version "11.9.0" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-11.9.0.tgz#04ab9ee43b52a41a047432c8103e2158a1b8b5b0" + integrity sha512-fJ7cW7fQGCYAkgv4CPfwFHrfd/cLS4Hau96JuJ+ZTOWhjnhoeN1ub1tFmALm/+lW5z4WCAuAV9bm05AP0mS6Gw== highlight.js@^9.7.0: version "9.18.5" @@ -9103,9 +7970,9 @@ html-escaper@^2.0.0: integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== html-tags@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.2.0.tgz#dbb3518d20b726524e4dd43de397eb0a95726961" - integrity sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg== + version "3.3.1" + resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.3.1.tgz#a04026a18c882e4bba8a01a3d39cfe465d40b5ce" + integrity sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ== html2canvas@^1.0.0-rc.5: version "1.4.1" @@ -9181,9 +8048,9 @@ human-signals@^2.1.0: integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== human-signals@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-4.3.0.tgz#2095c3cd5afae40049403d4b811235b03879db50" - integrity sha512-zyzVyMjpGBX2+6cDVZeFPCdtOtdsxOeseRhB9tkQ6xXmGUNrcnBzdEKPy3VPNYz+4gy1oukVOXcrJCunSyc6QQ== + version "4.3.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-4.3.1.tgz#ab7f811e851fca97ffbd2c1fe9a958964de321b2" + integrity sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ== human-signals@^5.0.0: version "5.0.0" @@ -9232,14 +8099,14 @@ ignore@^4.0.6: integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== ignore@^5.1.1, ignore@^5.1.8, ignore@^5.2.0: - version "5.2.4" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" - integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== + version "5.3.1" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" + integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== immer@^9.0.6: - version "9.0.19" - resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.19.tgz#67fb97310555690b5f9cd8380d38fc0aabb6b38b" - integrity sha512-eY+Y0qcsB4TZKwgQzLaE/lqYMlKhv5J9dyd2RhhtGhNo2njPXDqU9XPfcNfa3MIDsdtZt5KlkIsirlo4dHsWdQ== + version "9.0.21" + resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.21.tgz#1e025ea31a40f24fb064f1fef23e931496330176" + integrity sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA== import-fresh@^2.0.0: version "2.0.0" @@ -9249,7 +8116,7 @@ import-fresh@^2.0.0: caller-path "^2.0.0" resolve-from "^3.0.0" -import-fresh@^3.0.0, import-fresh@^3.1.0, import-fresh@^3.2.1: +import-fresh@^3.0.0, import-fresh@^3.1.0, import-fresh@^3.2.1, import-fresh@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== @@ -9335,13 +8202,13 @@ inquirer@^8.2.0: through "^2.3.6" wrap-ansi "^6.0.1" -internal-slot@^1.0.3, internal-slot@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" - integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== +internal-slot@^1.0.4, internal-slot@^1.0.5: + version "1.0.7" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" + integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== dependencies: - get-intrinsic "^1.2.0" - has "^1.0.3" + es-errors "^1.3.0" + hasown "^2.0.0" side-channel "^1.0.4" "internmap@1 - 2": @@ -9372,9 +8239,9 @@ ipaddr.js@1.9.1, ipaddr.js@^1.9.1: integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== ipaddr.js@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.0.1.tgz#eca256a7a877e917aeb368b0a7497ddf42ef81c0" - integrity sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng== + version "2.1.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.1.0.tgz#2119bc447ff8c257753b196fc5f1ce08a4cdf39f" + integrity sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ== is-absolute-url@^3.0.0: version "3.0.3" @@ -9389,20 +8256,26 @@ is-arguments@^1.0.4, is-arguments@^1.1.1: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-array-buffer@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.1.tgz#deb1db4fcae48308d54ef2442706c0393997052a" - integrity sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ== +is-array-buffer@^3.0.2, is-array-buffer@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" + integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== dependencies: call-bind "^1.0.2" - get-intrinsic "^1.1.3" - is-typed-array "^1.1.10" + get-intrinsic "^1.2.1" is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== +is-async-function@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.0.0.tgz#8e4418efd3e5d3a6ebb0164c05ef5afb69aa9646" + integrity sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA== + dependencies: + has-tostringtag "^1.0.0" + is-bigint@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" @@ -9447,27 +8320,13 @@ is-ci@^3.0.0: dependencies: ci-info "^3.2.0" -is-core-module@^2.12.1: - version "2.12.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd" - integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg== - dependencies: - has "^1.0.3" - -is-core-module@^2.13.0: +is-core-module@^2.12.1, is-core-module@^2.13.0: version "2.13.1" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== dependencies: hasown "^2.0.0" -is-core-module@^2.9.0: - version "2.11.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" - integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== - dependencies: - has "^1.0.3" - is-date-object@^1.0.1, is-date-object@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" @@ -9495,6 +8354,13 @@ is-extglob@^2.1.1: resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== +is-finalizationregistry@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz#c8749b65f17c133313e661b1289b95ad3dbd62e6" + integrity sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw== + dependencies: + call-bind "^1.0.2" + is-fullwidth-code-point@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" @@ -9517,7 +8383,7 @@ is-fullwidth-code-point@^4.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz#fae3167c729e7463f8461ce512b080a49268aa88" integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== -is-generator-function@^1.0.7: +is-generator-function@^1.0.10, is-generator-function@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== @@ -9554,7 +8420,7 @@ is-map@^2.0.1, is-map@^2.0.2: resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== -is-nan@^1.2.1, is-nan@^1.3.2: +is-nan@^1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.3.2.tgz#043a54adea31748b55b6cd4e09aadafa69bd9e1d" integrity sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w== @@ -9670,16 +8536,12 @@ is-symbol@^1.0.2, is-symbol@^1.0.3: dependencies: has-symbols "^1.0.2" -is-typed-array@^1.1.10, is-typed-array@^1.1.3, is-typed-array@^1.1.9: - version "1.1.10" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f" - integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A== +is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.13, is-typed-array@^1.1.3, is-typed-array@^1.1.9: + version "1.1.13" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" + integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.0" + which-typed-array "^1.1.14" is-typedarray@~1.0.0: version "1.0.0" @@ -9756,16 +8618,11 @@ isstream@~0.1.2: resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== -istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.2: +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0, istanbul-lib-coverage@^3.2.2: version "3.2.2" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== -istanbul-lib-coverage@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" - integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== - istanbul-lib-instrument@^5.0.4: version "5.2.1" resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" @@ -9803,152 +8660,79 @@ istanbul-reports@^3.1.6: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" -jackspeak@^2.0.3: - version "2.2.1" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.2.1.tgz#655e8cf025d872c9c03d3eb63e8f0c024fef16a6" - integrity sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw== +iterator.prototype@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.2.tgz#5e29c8924f01916cb9335f1ff80619dcff22b0c0" + integrity sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w== dependencies: - "@isaacs/cliui" "^8.0.2" - optionalDependencies: - "@pkgjs/parseargs" "^0.11.0" + define-properties "^1.2.1" + get-intrinsic "^1.2.1" + has-symbols "^1.0.3" + reflect.getprototypeof "^1.0.4" + set-function-name "^2.0.1" -jackspeak@^2.3.5: - version "2.3.6" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" - integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== +jackspeak@2.1.1, jackspeak@^2.3.5: + version "2.1.1" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.1.1.tgz#2a42db4cfbb7e55433c28b6f75d8b796af9669cd" + integrity sha512-juf9stUEwUaILepraGOWIJTLwg48bUnBmRqd2ln2Os1sW987zeoj/hzhbvRB95oMuS2ZTpjULmdwHNX4rzZIZw== dependencies: - "@isaacs/cliui" "^8.0.2" + cliui "^8.0.1" optionalDependencies: "@pkgjs/parseargs" "^0.11.0" jake@^10.8.5: - version "10.8.5" - resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.5.tgz#f2183d2c59382cb274226034543b9c03b8164c46" - integrity sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw== + version "10.8.7" + resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.7.tgz#63a32821177940c33f356e0ba44ff9d34e1c7d8f" + integrity sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w== dependencies: async "^3.2.3" chalk "^4.0.2" - filelist "^1.0.1" - minimatch "^3.0.4" - -jest-axe@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/jest-axe/-/jest-axe-8.0.0.tgz#4d89a1756bda2999a4271e851370981319389155" - integrity sha512-4kNcNn7J0jPO4jANEYZOHeQ/tSBvkXS+MxTbX1CKbXGd0+ZbRGDn/v/8IYWI/MmYX15iLVyYRnRev9X3ksePWA== - dependencies: - axe-core "4.7.2" - chalk "4.1.2" - jest-matcher-utils "29.2.2" - lodash.merge "4.6.2" + filelist "^1.0.4" + minimatch "^3.1.2" -jest-diff@^29.2.1: +jest-haste-map@^29.7.0: version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" - integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== - dependencies: - chalk "^4.0.0" - diff-sequences "^29.6.3" - jest-get-type "^29.6.3" - pretty-format "^29.7.0" - -jest-diff@^29.4.3: - version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.4.3.tgz#42f4eb34d0bf8c0fb08b0501069b87e8e84df347" - integrity sha512-YB+ocenx7FZ3T5O9lMVMeLYV4265socJKtkwgk/6YUz/VsEzYDkiMuMhWzZmxm3wDRQvayJu/PjkjjSkjoHsCA== - dependencies: - chalk "^4.0.0" - diff-sequences "^29.4.3" - jest-get-type "^29.4.3" - pretty-format "^29.4.3" - -jest-get-type@^29.2.0, 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" - integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== - -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-haste-map@^29.4.3: - version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.4.3.tgz#085a44283269e7ace0645c63a57af0d2af6942e2" - integrity sha512-eZIgAS8tvm5IZMtKlR8Y+feEOMfo2pSQkmNbufdbMzMSn9nitgGxF1waM/+LbryO3OkMcKS98SUb+j/cQxp/vQ== + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.7.0.tgz#3c2396524482f5a0506376e6c858c3bbcc17b104" + integrity sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA== dependencies: - "@jest/types" "^29.4.3" + "@jest/types" "^29.6.3" "@types/graceful-fs" "^4.1.3" "@types/node" "*" anymatch "^3.0.3" fb-watchman "^2.0.0" graceful-fs "^4.2.9" - jest-regex-util "^29.4.3" - jest-util "^29.4.3" - jest-worker "^29.4.3" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" + jest-worker "^29.7.0" micromatch "^4.0.4" walker "^1.0.8" optionalDependencies: fsevents "^2.3.2" -jest-matcher-utils@29.2.2: - version "29.2.2" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.2.2.tgz#9202f8e8d3a54733266784ce7763e9a08688269c" - integrity sha512-4DkJ1sDPT+UX2MR7Y3od6KtvRi9Im1ZGLGgdLFLm4lPexbTaCgJW5NN3IOXlQHF7NSHY/VHhflQ+WoKtD/vyCw== - dependencies: - chalk "^4.0.0" - jest-diff "^29.2.1" - jest-get-type "^29.2.0" - pretty-format "^29.2.1" - -jest-matcher-utils@^29.4.3: - version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.4.3.tgz#ea68ebc0568aebea4c4213b99f169ff786df96a0" - integrity sha512-TTciiXEONycZ03h6R6pYiZlSkvYgT0l8aa49z/DLSGYjex4orMUcafuLXYyyEDWB1RKglq00jzwY00Ei7yFNVg== - dependencies: - chalk "^4.0.0" - jest-diff "^29.4.3" - jest-get-type "^29.4.3" - pretty-format "^29.4.3" - -jest-message-util@^29.4.3: - version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.4.3.tgz#65b5280c0fdc9419503b49d4f48d4999d481cb5b" - integrity sha512-1Y8Zd4ZCN7o/QnWdMmT76If8LuDv23Z1DRovBj/vcSFNlGCJGoO8D1nJDw1AdyAGUk0myDLFGN5RbNeJyCRGCw== - dependencies: - "@babel/code-frame" "^7.12.13" - "@jest/types" "^29.4.3" - "@types/stack-utils" "^2.0.0" - chalk "^4.0.0" - graceful-fs "^4.2.9" - micromatch "^4.0.4" - pretty-format "^29.4.3" - slash "^3.0.0" - stack-utils "^2.0.3" - -jest-regex-util@^29.4.3: - version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.4.3.tgz#a42616141e0cae052cfa32c169945d00c0aa0bb8" - integrity sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg== +jest-regex-util@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.6.3.tgz#4a556d9c776af68e1c5f48194f4d0327d24e8a52" + integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== -jest-util@^29.4.3: - version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.4.3.tgz#851a148e23fc2b633c55f6dad2e45d7f4579f496" - integrity sha512-ToSGORAz4SSSoqxDSylWX8JzkOQR7zoBtNRsA7e+1WUX5F8jrOwaNpuh1YfJHJKDHXLHmObv5eOjejUd+/Ws+Q== +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.4.3" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" ci-info "^3.2.0" graceful-fs "^4.2.9" picomatch "^2.2.3" -jest-worker@^29.4.3: - version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.4.3.tgz#9a4023e1ea1d306034237c7133d7da4240e8934e" - integrity sha512-GLHN/GTAAMEy5BFdvpUfzr9Dr80zQqBrh0fz1mtRMe05hqP45+HfQltu7oTBfduD0UeZs09d+maFtFYAXFWvAA== +jest-worker@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a" + integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== dependencies: "@types/node" "*" - jest-util "^29.4.3" + jest-util "^29.7.0" merge-stream "^2.0.0" supports-color "^8.0.0" @@ -9962,11 +8746,6 @@ js-levenshtein@^1.1.6: resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d" integrity sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g== -js-sdsl@^4.1.4: - version "4.3.0" - resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.3.0.tgz#aeefe32a451f7af88425b11fdb5f58c90ae1d711" - integrity sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ== - js-sha3@0.8.0: version "0.8.0" resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" @@ -10062,6 +8841,11 @@ jsesc@~0.5.0: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + json-parse-better-errors@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" @@ -10097,15 +8881,15 @@ json-stringify-safe@~5.0.1: resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== -json5@^2.2.2, json5@^2.2.3: +json5@^2.2.3: version "2.2.3" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== jsonc-parser@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" - integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== + version "3.2.1" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.1.tgz#031904571ccf929d7670ee8c547545081cb37f1a" + integrity sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA== jsonfile@^6.0.1: version "6.1.0" @@ -10117,9 +8901,9 @@ jsonfile@^6.0.1: graceful-fs "^4.1.6" jspdf-autotable@^3.5.14: - version "3.5.28" - resolved "https://registry.yarnpkg.com/jspdf-autotable/-/jspdf-autotable-3.5.28.tgz#5463acbfa7a5b182453afea8f8aeac48bc96bfdb" - integrity sha512-eNYt5mUxCGa1Y0bmOhGXU+Va/P2jNkgOgUPGIpZp2rbZUauU34s0q3S59Jps5zi2u90nQy7DmD/D+sdesJLIEA== + version "3.8.1" + resolved "https://registry.yarnpkg.com/jspdf-autotable/-/jspdf-autotable-3.8.1.tgz#e4d9b62356a412024e8f08e84fdeb5b85e1383b5" + integrity sha512-UjJqo80Z3/WUzDi4JipTGp0pAvNvR3Gsm38inJ5ZnwsJH0Lw4pEbssRSH6zMWAhR1ZkTrsDpQo5p6rZk987/AQ== jspdf@^2.3.1: version "2.5.1" @@ -10146,23 +8930,32 @@ jsprim@^2.0.2: json-schema "0.4.0" verror "1.10.0" -"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.3: - version "3.3.3" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz#76b3e6e6cece5c69d49a5792c3d01bd1a0cdc7ea" - integrity sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw== +"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.5: + version "3.3.5" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz#4766bd05a8e2a11af222becd19e15575e52a853a" + integrity sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ== dependencies: - array-includes "^3.1.5" - object.assign "^4.1.3" + array-includes "^3.1.6" + array.prototype.flat "^1.3.1" + object.assign "^4.1.4" + object.values "^1.1.6" junit2json@^3.1.4: - version "3.1.4" - resolved "https://registry.yarnpkg.com/junit2json/-/junit2json-3.1.4.tgz#22c64c9d0f6624882952a5af59e0927b6cdd5266" - integrity sha512-56vEmCjFcLfsDVdBfhyBXJhs3TXL5gKGVr5cbkyoddRlBBq311iQIsupgelo2eBooAZ183VcgHAfvRZH2ZEg6Q== + version "3.1.5" + resolved "https://registry.yarnpkg.com/junit2json/-/junit2json-3.1.5.tgz#6832ae2c0bd0de9c59b532a92f32721af6cbee5b" + integrity sha512-6fAHN5OMb0VV3+f+8DJ3/8yysRJxajrnUmkBeR+QjQQtUXZ5h4E3RMzF7gFhLnIhFewBUAyQGalgCJrkHieHqQ== dependencies: - "@types/xml2js" "0.4.13" + "@types/xml2js" "0.4.14" xml2js "0.6.2" yargs "17.7.2" +keyv@^4.5.3: + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== + dependencies: + json-buffer "3.0.1" + kind-of@^6.0.2, kind-of@^6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" @@ -10185,17 +8978,17 @@ kleur@^4.0.3: resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== -language-subtag-registry@~0.3.2: +language-subtag-registry@^0.3.20: version "0.3.22" resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d" integrity sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w== -language-tags@=1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a" - integrity sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ== +language-tags@^1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.9.tgz#1ffdcd0ec0fafb4b1be7f8b11f306ad0f9c08777" + integrity sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA== dependencies: - language-subtag-registry "~0.3.2" + language-subtag-registry "^0.3.20" launchdarkly-js-client-sdk@^3.1.4: version "3.1.4" @@ -10266,19 +9059,19 @@ levn@^0.4.1: type-check "~0.4.0" libphonenumber-js@^1.10.6: - version "1.10.20" - resolved "https://registry.yarnpkg.com/libphonenumber-js/-/libphonenumber-js-1.10.20.tgz#03c310adf83381eeceb4bd6830442fd14e64964d" - integrity sha512-kQovlKNdLcVzerbTPmJ+Fx4R+7/pYXmPDIllHjg7IxL4X6MsMG7jaT5opfYrBok0uqkByVif//JUR8e11l/V7w== + version "1.10.55" + resolved "https://registry.yarnpkg.com/libphonenumber-js/-/libphonenumber-js-1.10.55.tgz#ec864e369bf7babde02021d06b5f2433d7e9c78e" + integrity sha512-MrTg2JFLscgmTY6/oT9vopYETlgUls/FU6OaeeamGwk4LFxjIgOUML/ZSZICgR0LPYXaonVJo40lzMvaaTJlQA== lilconfig@2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== -lilconfig@^2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.6.tgz#32a384558bd58af3d4c6e077dd1ad1d397bc69d4" - integrity sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg== +lilconfig@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.0.0.tgz#f8067feb033b5b74dab4602a5f5029420be749bc" + integrity sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g== lines-and-columns@^1.1.6: version "1.2.4" @@ -10293,23 +9086,32 @@ linkify-it@^3.0.1: uc.micro "^1.0.1" lint-staged@^13.2.2: - version "13.2.2" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-13.2.2.tgz#5e711d3139c234f73402177be2f8dd312e6508ca" - integrity sha512-71gSwXKy649VrSU09s10uAT0rWCcY3aewhMaHyl2N84oBk4Xs9HgxvUp3AYu+bNsK4NrOYYxvSgg7FyGJ+jGcA== + version "13.3.0" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-13.3.0.tgz#7965d72a8d6a6c932f85e9c13ccf3596782d28a5" + integrity sha512-mPRtrYnipYYv1FEE134ufbWpeggNTo+O/UPzngoaKzbzHAthvR55am+8GfHTnqNRQVRRrYQLGW9ZyUoD7DsBHQ== + dependencies: + chalk "5.3.0" + commander "11.0.0" + debug "4.3.4" + execa "7.2.0" + lilconfig "2.1.0" + listr2 "6.6.1" + micromatch "4.0.5" + pidtree "0.6.0" + string-argv "0.3.2" + yaml "2.3.1" + +listr2@6.6.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-6.6.1.tgz#08b2329e7e8ba6298481464937099f4a2cd7f95d" + integrity sha512-+rAXGHh0fkEWdXBmX+L6mmfmXmXvDGEKzkjxO+8mP3+nI/r/CWznVBvsibXdxda9Zz0OW2e2ikphN3OwCT/jSg== dependencies: - chalk "5.2.0" cli-truncate "^3.1.0" - commander "^10.0.0" - debug "^4.3.4" - execa "^7.0.0" - lilconfig "2.1.0" - listr2 "^5.0.7" - micromatch "^4.0.5" - normalize-path "^3.0.0" - object-inspect "^1.12.3" - pidtree "^0.6.0" - string-argv "^0.3.1" - yaml "^2.2.2" + colorette "^2.0.20" + eventemitter3 "^5.0.1" + log-update "^5.0.1" + rfdc "^1.3.0" + wrap-ansi "^8.1.0" listr2@^3.8.3: version "3.14.0" @@ -10325,20 +9127,6 @@ listr2@^3.8.3: through "^2.3.8" wrap-ansi "^7.0.0" -listr2@^5.0.7: - version "5.0.7" - resolved "https://registry.yarnpkg.com/listr2/-/listr2-5.0.7.tgz#de69ccc4caf6bea7da03c74f7a2ffecf3904bd53" - integrity sha512-MD+qXHPmtivrHIDRwPYdfNkrzqDiuaKU/rfBcec3WMyMF3xylQj3jMq344OtvQxz7zaCFViRAeqlr2AFhPvXHw== - dependencies: - cli-truncate "^2.1.0" - colorette "^2.0.19" - log-update "^4.0.0" - p-map "^4.0.0" - rfdc "^1.3.0" - rxjs "^7.8.0" - through "^2.3.8" - wrap-ansi "^7.0.0" - load-json-file@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" @@ -10350,9 +9138,9 @@ load-json-file@^4.0.0: strip-bom "^3.0.0" load-tsconfig@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/load-tsconfig/-/load-tsconfig-0.2.3.tgz#08af3e7744943caab0c75f8af7f1703639c3ef1f" - integrity sha512-iyT2MXws+dc2Wi6o3grCFtGXpeMvHmJqS27sMPGtV2eUu4PeFnG+33I8BlFK1t1NWMjOpcx9bridn5yxLDX2gQ== + version "0.2.5" + resolved "https://registry.yarnpkg.com/load-tsconfig/-/load-tsconfig-0.2.5.tgz#453b8cd8961bfb912dea77eb6c168fe8cca3d3a1" + integrity sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg== local-pkg@^0.5.0: version "0.5.0" @@ -10409,7 +9197,7 @@ lodash.isplainobject@^4.0.6: resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== -lodash.merge@4.6.2, lodash.merge@^4.6.2: +lodash.merge@^4.6.2: version "4.6.2" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== @@ -10447,6 +9235,17 @@ log-update@^4.0.0: slice-ansi "^4.0.0" wrap-ansi "^6.2.0" +log-update@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-5.0.1.tgz#9e928bf70cb183c1f0c9e91d9e6b7115d597ce09" + integrity sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw== + dependencies: + ansi-escapes "^5.0.0" + cli-cursor "^4.0.0" + slice-ansi "^5.0.0" + strip-ansi "^7.0.1" + wrap-ansi "^8.0.1" + logic-query-parser@^0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/logic-query-parser/-/logic-query-parser-0.0.5.tgz#56edf7c012f594c8236fd5175079ef5da1bea93c" @@ -10471,6 +9270,13 @@ loupe@^2.3.6, loupe@^2.3.7: dependencies: get-func-name "^2.0.1" +lower-case@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" + integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== + dependencies: + tslib "^2.0.3" + lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" @@ -10491,20 +9297,15 @@ lru-cache@^7.5.1: integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== "lru-cache@^9.1.1 || ^10.0.0": - version "10.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.0.0.tgz#b9e2a6a72a129d81ab317202d93c7691df727e61" - integrity sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw== + version "10.2.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" + integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== luxon@3.4.4: version "3.4.4" resolved "https://registry.yarnpkg.com/luxon/-/luxon-3.4.4.tgz#cf20dc27dc532ba41a169c43fdcc0063601577af" integrity sha512-zobTr7akeGHnv7eBOXcRgMeCP6+uyYsczwmeRCauvpvaAltgNyTbLH/+VaEAPUeWBT+1GuNmz4wC/6jtQzbbVA== -lz-string@^1.4.4: - version "1.4.4" - resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.4.4.tgz#c0d8eaf36059f705796e1e344811cf4c498d3a26" - integrity sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ== - lz-string@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941" @@ -10518,19 +9319,19 @@ magic-string@^0.27.0: "@jridgewell/sourcemap-codec" "^1.4.13" magic-string@^0.30.0, magic-string@^0.30.5: - version "0.30.5" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.5.tgz#1994d980bd1c8835dc6e78db7cbd4ae4f24746f9" - integrity sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA== + version "0.30.7" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.7.tgz#0cecd0527d473298679da95a2d7aeb8c64048505" + integrity sha512-8vBuFF/I/+OSLRmdf2wwFCJCz+nSn0m6DPvGH1fS/KiQoSaR+sETbov0eIk9KhEKy8CYqIkIAnbohxT/4H0kuA== dependencies: "@jridgewell/sourcemap-codec" "^1.4.15" -magicast@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/magicast/-/magicast-0.3.2.tgz#42dcade5573ed8f10f5540f9d04964e21dba9130" - integrity sha512-Fjwkl6a0syt9TFN0JSYpOybxiMCkYNEeOTnOTNRbjphirLakznZXAqrXgj/7GG3D1dvETONNwrBfinvAbpunDg== +magicast@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/magicast/-/magicast-0.3.3.tgz#a15760f982deec9dabc5f314e318d7c6bddcb27b" + integrity sha512-ZbrP1Qxnpoes8sz47AM0z08U+jW6TyRgZzcWy3Ma3vDhJttwMwAFDMMQFobwdBxByBD46JYmxRzeF7w2+wJEuw== dependencies: - "@babel/parser" "^7.23.3" - "@babel/types" "^7.23.3" + "@babel/parser" "^7.23.6" + "@babel/types" "^7.23.6" source-map-js "^1.0.2" make-dir@^2.0.0, make-dir@^2.1.0: @@ -10596,17 +9397,17 @@ markdown-table@^3.0.0: integrity sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw== markdown-to-jsx@^7.1.8: - version "7.1.9" - resolved "https://registry.yarnpkg.com/markdown-to-jsx/-/markdown-to-jsx-7.1.9.tgz#1ffae0cda07c189163d273bd57a5b8f8f8745586" - integrity sha512-x4STVIKIJR0mGgZIZ5RyAeQD7FEZd5tS8m/htbcVGlex32J+hlSLj+ExrHCxP6nRKF1EKbcO7i6WhC1GtOpBlA== + version "7.4.1" + resolved "https://registry.yarnpkg.com/markdown-to-jsx/-/markdown-to-jsx-7.4.1.tgz#1ed6a60f8f9cd944bec39d9923fbbc8d3d60dcb9" + integrity sha512-GbrbkTnHp9u6+HqbPRFJbObi369AgJNXi/sGqq5HRsoZW063xR1XDCaConqq+whfEIAlzB1YPnOgsPc7B7bc/A== match-sorter@^6.0.2: - version "6.3.1" - resolved "https://registry.yarnpkg.com/match-sorter/-/match-sorter-6.3.1.tgz#98cc37fda756093424ddf3cbc62bfe9c75b92bda" - integrity sha512-mxybbo3pPNuA+ZuCUhm5bwNkXrJTbsk5VWbR5wiwz/GC6LIiegBGn2w3O08UG/jdbYLinw51fSQ5xNU1U3MgBw== + version "6.3.4" + resolved "https://registry.yarnpkg.com/match-sorter/-/match-sorter-6.3.4.tgz#afa779d8e922c81971fbcb4781c7003ace781be7" + integrity sha512-jfZW7cWS5y/1xswZo8VBOdudUiSd9nifYRWphc9M5D/ee4w4AoXLgBEdRbgVaxbMuagBPeUC5y2Hi8DO6o9aDg== dependencies: - "@babel/runtime" "^7.12.5" - remove-accents "0.4.2" + "@babel/runtime" "^7.23.8" + remove-accents "0.5.0" md5@^2.2.1, md5@^2.3.0: version "2.3.0" @@ -11073,7 +9874,7 @@ micromark@^3.0.0: micromark-util-types "^1.0.1" uvu "^0.5.0" -micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: +micromatch@4.0.5, micromatch@^4.0.2, micromatch@^4.0.4: version "4.0.5" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== @@ -11149,7 +9950,7 @@ minimatch@^5.0.1: dependencies: brace-expansion "^2.0.1" -minimatch@^9.0.1: +minimatch@^9.0.1, minimatch@^9.0.3: version "9.0.3" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== @@ -11168,15 +9969,10 @@ minipass@^3.0.0: dependencies: yallist "^4.0.0" -minipass@^4.0.0: - version "4.2.4" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.2.4.tgz#7d0d97434b6a19f59c5c3221698b48bbf3b2cd06" - integrity sha512-lwycX3cBMTvcejsHITUgYj6Gy6A7Nh4Q6h9NP4sTHY1ccJlC7yKzDmiShEHsJ16Jf1nKGDEaiHxiltsJEvk0nQ== - -"minipass@^5.0.0 || ^6.0.2": - version "6.0.2" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-6.0.2.tgz#542844b6c4ce95b202c0995b0a471f1229de4c81" - integrity sha512-MzWSV5nYVT7mVyWCwn2o7JH13w2TBRmmSqSRCKzTw+lmft9X4z+3wjvs06Tzijo5z4W/kahUCDpRXTF+ZrmF/w== +minipass@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" + integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== "minipass@^5.0.0 || ^6.0.2 || ^7.0.0": version "7.0.4" @@ -11214,14 +10010,14 @@ mkdirp@^3.0.0: integrity sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg== mlly@^1.2.0, mlly@^1.4.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.4.2.tgz#7cf406aa319ff6563d25da6b36610a93f2a8007e" - integrity sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg== + version "1.5.0" + resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.5.0.tgz#8428a4617d54cc083d3009030ac79739a0e5447a" + integrity sha512-NPVQvAY1xr1QoVeG0cy8yUYC7FQcOx6evl/RjT1wL5FvzPnzOysoqB/jmx/DhssT2dYa8nxECLAaFI/+gVLhDQ== dependencies: - acorn "^8.10.0" - pathe "^1.1.1" + acorn "^8.11.3" + pathe "^1.1.2" pkg-types "^1.0.3" - ufo "^1.3.0" + ufo "^1.3.2" mocha-junit-reporter@^2.2.1: version "2.2.1" @@ -11235,19 +10031,19 @@ mocha-junit-reporter@^2.2.1: xml "^1.0.1" moment@^2.10.2: - version "2.29.4" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108" - integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== + version "2.30.1" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae" + integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how== -mri@^1.1.0, mri@^1.2.0: +mri@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b" integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA== -mrmime@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-1.0.1.tgz#5f90c825fad4bdd41dc914eff5d1a8cfdaf24f27" - integrity sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw== +mrmime@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-2.0.0.tgz#151082a6e06e59a9a39b46b3e14d5cfe92b3abb4" + integrity sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw== ms@2.0.0: version "2.0.0" @@ -11335,7 +10131,7 @@ negotiator@0.6.3: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== -neo-async@^2.5.0, neo-async@^2.6.0: +neo-async@^2.5.0, neo-async@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== @@ -11345,6 +10141,14 @@ nice-try@^1.0.4: resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== +no-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" + integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== + dependencies: + lower-case "^2.0.2" + tslib "^2.0.3" + node-dir@^0.1.17: version "0.1.17" resolved "https://registry.yarnpkg.com/node-dir/-/node-dir-0.1.17.tgz#5f5665d93351335caabef8f1c554516cf5f1e4e5" @@ -11352,15 +10156,15 @@ node-dir@^0.1.17: dependencies: minimatch "^3.0.2" -node-fetch-native@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/node-fetch-native/-/node-fetch-native-1.0.2.tgz#de3651399fda89a1a7c0bf6e7c4e9c239e8d0697" - integrity sha512-KIkvH1jl6b3O7es/0ShyCgWLcfXxlBrLBbP3rOr23WArC66IMcU4DeZEeYEOwnopYhawLTn7/y+YtmASe8DFVQ== +node-fetch-native@^1.6.1: + version "1.6.2" + resolved "https://registry.yarnpkg.com/node-fetch-native/-/node-fetch-native-1.6.2.tgz#f439000d972eb0c8a741b65dcda412322955e1c6" + integrity sha512-69mtXOFZ6hSkYiXAVB5SqaRvrbITC/NPyqv7yuu/qw0nmgPyYbIMYYNIDhNtwPrzk0ptrimrLz/hhjvm4w5Z+w== node-fetch@^1.0.1, node-fetch@^2.0.0, node-fetch@^2.6.7: - version "2.6.9" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.9.tgz#7c7f744b5cc6eb5fd404e0c7a9fec630a55657e6" - integrity sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg== + version "2.7.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== dependencies: whatwg-url "^5.0.0" @@ -11369,21 +10173,11 @@ node-int64@^0.4.0: resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== -node-releases@^2.0.13: - version "2.0.13" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" - integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== - node-releases@^2.0.14: version "2.0.14" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== -node-releases@^2.0.8: - version "2.0.10" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.10.tgz#c311ebae3b6a148c89b1813fd7c4d3c024ef537f" - integrity sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w== - normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" @@ -11437,9 +10231,9 @@ npm-run-path@^4.0.0, npm-run-path@^4.0.1: path-key "^3.0.0" npm-run-path@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.1.0.tgz#bc62f7f3f6952d9894bd08944ba011a6ee7b7e00" - integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q== + version "5.2.0" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.2.0.tgz#224cdd22c755560253dd71b83a1ef2f758b2e955" + integrity sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg== dependencies: path-key "^4.0.0" @@ -11453,17 +10247,27 @@ nwsapi@^2.2.4: resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.7.tgz#738e0707d3128cb750dddcfe90e4610482df0f30" integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ== +nypm@^0.3.3: + version "0.3.6" + resolved "https://registry.yarnpkg.com/nypm/-/nypm-0.3.6.tgz#940b558e6e56c2ed5dc43adf6dcf2c16577a80ff" + integrity sha512-2CATJh3pd6CyNfU5VZM7qSwFu0ieyabkEdnogE30Obn1czrmOYiZ8DOZLe1yBdLKWoyD3Mcy2maUs+0MR3yVjQ== + dependencies: + citty "^0.1.5" + execa "^8.0.1" + pathe "^1.1.2" + ufo "^1.3.2" + object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -object-inspect@^1.12.2, object-inspect@^1.12.3, object-inspect@^1.9.0: - version "1.12.3" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" - integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== +object-inspect@^1.13.1: + version "1.13.1" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== -object-is@^1.0.1, object-is@^1.1.5: +object-is@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== @@ -11476,56 +10280,61 @@ object-keys@^1.1.1: resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object.assign@^4.1.3, object.assign@^4.1.4: - version "4.1.4" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" - integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== +object.assign@^4.1.4: + version "4.1.5" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" + integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" + call-bind "^1.0.5" + define-properties "^1.2.1" has-symbols "^1.0.3" object-keys "^1.1.1" -object.entries@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.6.tgz#9737d0e5b8291edd340a3e3264bb8a3b00d5fa23" - integrity sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w== +object.entries@^1.1.6, object.entries@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.7.tgz#2b47760e2a2e3a752f39dd874655c61a7f03c131" + integrity sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" -object.fromentries@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.6.tgz#cdb04da08c539cffa912dcd368b886e0904bfa73" - integrity sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg== +object.fromentries@^2.0.6, object.fromentries@^2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.7.tgz#71e95f441e9a0ea6baf682ecaaf37fa2a8d7e616" + integrity sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" object.hasown@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.2.tgz#f919e21fad4eb38a57bc6345b3afd496515c3f92" - integrity sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw== + version "1.1.3" + resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.3.tgz#6a5f2897bb4d3668b8e79364f98ccf971bda55ae" + integrity sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA== dependencies: - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" object.values@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" - integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== + version "1.1.7" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.7.tgz#617ed13272e7e1071b43973aa1655d9291b8442a" + integrity sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" oblivious-set@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/oblivious-set/-/oblivious-set-1.0.0.tgz#c8316f2c2fb6ff7b11b6158db3234c49f733c566" integrity sha512-z+pI07qxo4c2CulUHCDf9lcqDlMSo72N/4rLUpRXf6fu+q8vjt8y0xS+Tlf8NTJDdTXHbdeO1n3MlbctwEoXZw== +ohash@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/ohash/-/ohash-1.1.3.tgz#f12c3c50bfe7271ce3fd1097d42568122ccdcf07" + integrity sha512-zuHHiGTYTA1sYJ/wZN+t5HKZaH23i4yI1HMwbuXm24Nid7Dv0KcuRlKoNKS9UNfAVSBlnGLcuQrnOKWOZoEGaw== + on-finished@2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" @@ -11593,17 +10402,17 @@ optionator@^0.8.3: type-check "~0.3.2" word-wrap "~1.2.3" -optionator@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" - integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== +optionator@^0.9.3: + version "0.9.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" + integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== dependencies: + "@aashutoshrathi/word-wrap" "^1.2.3" deep-is "^0.1.3" 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: version "5.4.1" @@ -11640,9 +10449,9 @@ ospath@^1.2.2: integrity sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA== outvariant@^1.2.1, outvariant@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/outvariant/-/outvariant-1.4.0.tgz#e742e4bda77692da3eca698ef5bfac62d9fba06e" - integrity sha512-AlWY719RF02ujitly7Kk/0QlV+pXGFDHrHf9O2OKqyqgBieaPOIeuSkL8sRK6j2WK+/ZAURq2kZsY0d8JapUiw== + version "1.4.2" + resolved "https://registry.yarnpkg.com/outvariant/-/outvariant-1.4.2.tgz#f54f19240eeb7f15b28263d5147405752d8e2066" + integrity sha512-Ou3dJ6bA/UJ5GVHxah4LnqDwZRwAmWxrG3wtrHrbGnP4RnLCtA64A4F+ae7Y8ww660JaddSoArUR5HjipWSHAQ== p-defer@^1.0.0: version "1.0.0" @@ -11733,7 +10542,7 @@ parse-json@^4.0.0: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" -parse-json@^5.0.0: +parse-json@^5.0.0, parse-json@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== @@ -11761,9 +10570,9 @@ parseurl@~1.3.3: integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== patch-package@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/patch-package/-/patch-package-7.0.0.tgz#5c646b6b4b4bf37e5184a6950777b21dea6bb66e" - integrity sha512-eYunHbnnB2ghjTNc5iL1Uo7TsGMuXk0vibX3RFcE/CdVdXzmdbMsG/4K4IgoSuIkLTI5oHrMQk4+NkFqSed0BQ== + version "7.0.2" + resolved "https://registry.yarnpkg.com/patch-package/-/patch-package-7.0.2.tgz#c01589bb6964854b5210506a5845d47900641f5a" + integrity sha512-PMYfL8LXxGIRmxXLqlEaBxzKPu7/SdP13ld6GSfAUJUZRmBDPp8chZs0dpzaAFn9TSPnFiMwkC6PJt6pBiAl8Q== dependencies: "@yarnpkg/lockfile" "^1.1.0" chalk "^4.1.2" @@ -11775,7 +10584,7 @@ patch-package@^7.0.0: minimist "^1.2.6" open "^7.4.2" rimraf "^2.6.3" - semver "^5.6.0" + semver "^7.5.3" slash "^2.0.0" tmp "^0.0.33" yaml "^2.2.2" @@ -11820,14 +10629,6 @@ path-parse@^1.0.7: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -path-scurry@^1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.0.tgz#0ffbd4c1f7de9600f98a1405507d9f9acb438ab3" - integrity sha512-tZFEaRQbMLjwrsmidsGJ6wDMv0iazJWk6SfIKnY4Xru8auXgmJkOBa5DUbYFcFD2Rzk2+KDlIiF0GVXNCbgC7g== - dependencies: - lru-cache "^9.1.1 || ^10.0.0" - minipass "^5.0.0 || ^6.0.2" - path-scurry@^1.10.1: version "1.10.1" resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698" @@ -11870,15 +10671,10 @@ path-type@^4.0.0: resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== -pathe@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.0.tgz#e2e13f6c62b31a3289af4ba19886c230f295ec03" - integrity sha512-ODbEPR0KKHqECXW1GoxdDb+AZvULmXjVPy4rt+pGo2+TnjJTIPJQSVS6N63n8T2Ip+syHhbn52OewKicV0373w== - -pathe@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.1.tgz#1dd31d382b974ba69809adc9a7a347e65d84829a" - integrity sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q== +pathe@^1.1.0, pathe@^1.1.1, pathe@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.2.tgz#6c4cb47a945692e48a1ddd6e4094d170516437ec" + integrity sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ== pathval@^1.1.1: version "1.1.1" @@ -11914,16 +10710,16 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.0, picomatc resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +pidtree@0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.6.0.tgz#90ad7b6d42d5841e69e0a2419ef38f8883aa057c" + integrity sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g== + pidtree@^0.3.0: version "0.3.1" resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.3.1.tgz#ef09ac2cc0533df1f3250ccf2c4d366b0d12114a" integrity sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA== -pidtree@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.6.0.tgz#90ad7b6d42d5841e69e0a2419ef38f8883aa057c" - integrity sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g== - pify@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -11939,10 +10735,10 @@ pify@^4.0.1: resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== -pirates@^4.0.1, pirates@^4.0.4, pirates@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" - integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== +pirates@^4.0.1, pirates@^4.0.4, pirates@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" + integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== pkg-dir@^3.0.0: version "3.0.0" @@ -11982,24 +10778,24 @@ please-upgrade-node@^3.2.0: semver-compare "^1.0.0" polished@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/polished/-/polished-4.2.2.tgz#2529bb7c3198945373c52e34618c8fe7b1aa84d1" - integrity sha512-Sz2Lkdxz6F2Pgnpi9U5Ng/WdWAUZxmHrNPoVlm3aAemxoy2Qy7LGjQg4uf8qKelDAUW94F4np3iH2YPf2qefcQ== + version "4.3.1" + resolved "https://registry.yarnpkg.com/polished/-/polished-4.3.1.tgz#5a00ae32715609f83d89f6f31d0f0261c6170548" + integrity sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA== dependencies: "@babel/runtime" "^7.17.8" postcss-load-config@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-4.0.1.tgz#152383f481c2758274404e4962743191d73875bd" - integrity sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA== + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-4.0.2.tgz#7159dcf626118d33e299f485d6afe4aff7c4a3e3" + integrity sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ== dependencies: - lilconfig "^2.0.5" - yaml "^2.1.1" + lilconfig "^3.0.0" + yaml "^2.3.4" -postcss@^8.3.11, postcss@^8.4.32: - version "8.4.32" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.32.tgz#1dac6ac51ab19adb21b8b34fd2d93a86440ef6c9" - integrity sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw== +postcss@^8.3.11, postcss@^8.4.35: + version "8.4.35" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.35.tgz#60997775689ce09011edf083a549cea44aabe2f7" + integrity sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA== dependencies: nanoid "^3.3.7" picocolors "^1.0.0" @@ -12034,9 +10830,9 @@ prettier-linter-helpers@^1.0.0: fast-diff "^1.1.2" prettier@^2.8.0: - version "2.8.4" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.4.tgz#34dd2595629bfbb79d344ac4a91ff948694463c3" - integrity sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw== + version "2.8.8" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" + integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== prettier@~2.2.1: version "2.2.1" @@ -12048,16 +10844,6 @@ pretty-bytes@^5.6.0: resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== -pretty-format@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" - integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg== - dependencies: - "@jest/types" "^26.6.2" - ansi-regex "^5.0.0" - ansi-styles "^4.0.0" - react-is "^17.0.1" - pretty-format@^27.0.2: version "27.5.1" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" @@ -12067,16 +10853,7 @@ pretty-format@^27.0.2: ansi-styles "^5.0.0" react-is "^17.0.1" -pretty-format@^29.0.0, pretty-format@^29.4.3: - version "29.4.3" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.4.3.tgz#25500ada21a53c9e8423205cf0337056b201244c" - integrity sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA== - dependencies: - "@jest/schemas" "^29.4.3" - ansi-styles "^5.0.0" - react-is "^18.0.0" - -pretty-format@^29.2.1, pretty-format@^29.7.0: +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== @@ -12140,9 +10917,9 @@ prop-types@^15.0.0, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.2, react-is "^16.13.1" property-expr@^2.0.4: - version "2.0.5" - resolved "https://registry.yarnpkg.com/property-expr/-/property-expr-2.0.5.tgz#278bdb15308ae16af3e3b9640024524f4dc02cb4" - integrity sha512-IJUkICM5dP5znhCckHSv30Q4b5/JA5enCtkRHYaOVOAocnH/1BQEYTC5NMfT3AVl/iXKdr3aqQbQn9DxyWknwA== + version "2.0.6" + resolved "https://registry.yarnpkg.com/property-expr/-/property-expr-2.0.6.tgz#f77bc00d5928a6c748414ad12882e83f24aec1e8" + integrity sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA== proxy-addr@~2.0.7: version "2.0.7" @@ -12198,9 +10975,9 @@ punycode@^1.3.2: integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== punycode@^2.1.0, punycode@^2.1.1, punycode@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" - integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== puppeteer-core@^2.1.1: version "2.1.1" @@ -12238,13 +11015,20 @@ qs@6.10.4: dependencies: side-channel "^1.0.4" -qs@6.11.0, qs@^6.10.0: +qs@6.11.0: version "6.11.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== dependencies: side-channel "^1.0.4" +qs@^6.10.0: + version "6.11.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" + integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== + dependencies: + side-channel "^1.0.4" + querystringify@^2.1.1: version "2.2.0" resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" @@ -12277,11 +11061,6 @@ ramda@0.29.0: resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.29.0.tgz#fbbb67a740a754c8a4cbb41e2a6e0eb8507f55fb" integrity sha512-BBea6L67bYLtdbOqfp8f58fPMqEwx0doL+pAi8TZyp2YWz8R9G8z9x75CZI8W+ftqhFHCpEX2cRnUUXK130iKA== -ramda@^0.28.0: - version "0.28.0" - resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.28.0.tgz#acd785690100337e8b063cab3470019be427cc97" - integrity sha512-9QnLuG/kPVgWvMQ4aODhsBUFKOUmnbUnsSXACv+NCQZcHbeb+v8Lodp8OVxtRULN1/xOyYLLaL6npE6dMq5QTA== - range-parser@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" @@ -12341,9 +11120,9 @@ react-docgen-typescript@^2.2.2: integrity sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg== react-docgen@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/react-docgen/-/react-docgen-7.0.1.tgz#b6528fe45385908645ffbee1ec0d65709e1e047c" - integrity sha512-rCz0HBIT0LWbIM+///LfRrJoTKftIzzwsYDf0ns5KwaEjejMHQRtphcns+IXFHDNY9pnz6G8l/JbbI6pD4EAIA== + version "7.0.3" + resolved "https://registry.yarnpkg.com/react-docgen/-/react-docgen-7.0.3.tgz#f811b785f07b1f2023cb899b6bcf9d522b21b95d" + integrity sha512-i8aF1nyKInZnANZ4uZrH49qn1paRgBZ7wZiCNBMnenlPzEv0mRl+ShpTVEI6wZNl8sSc79xZkivtgLKQArcanQ== dependencies: "@babel/core" "^7.18.9" "@babel/traverse" "^7.18.9" @@ -12356,14 +11135,13 @@ react-docgen@^7.0.0: resolve "^1.22.1" strip-indent "^4.0.0" -react-dom@^17.0.2: - 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.2.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-dropzone@~11.2.0: version "11.2.4" @@ -12415,7 +11193,7 @@ react-is@^17.0.1, react-is@^17.0.2: resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== -react-lifecycles-compat@^3.0.2, react-lifecycles-compat@^3.0.4: +react-lifecycles-compat@^3.0.2: version "3.0.4" resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== @@ -12533,13 +11311,14 @@ react-select@~3.1.0: react-input-autosize "^2.2.2" react-transition-group "^4.3.0" -react-smooth@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/react-smooth/-/react-smooth-2.0.5.tgz#d153b7dffc7143d0c99e82db1532f8cf93f20ecd" - integrity sha512-BMP2Ad42tD60h0JW6BFaib+RJuV5dsXJK9Baxiv/HlNFjvRLqA9xrNKxVWnUIZPQfzUwGXIlU/dSYLU+54YGQA== +react-smooth@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/react-smooth/-/react-smooth-4.0.0.tgz#69e560ab69b69a066187d70cb92c1a664f7f046a" + integrity sha512-2NMXOBY1uVUQx1jBeENGA497HK20y6CPGYL1ZnJLeoQ8rrc3UfmOM82sRxtzpcoCkUMy4CS0RGylfuVhuFjBgg== dependencies: - fast-equals "^5.0.0" - react-transition-group "2.9.0" + fast-equals "^5.0.1" + prop-types "^15.8.1" + react-transition-group "^4.4.5" react-style-singleton@^2.2.1: version "2.2.1" @@ -12560,16 +11339,6 @@ react-test-renderer@16.14.0: react-is "^16.8.6" scheduler "^0.19.1" -react-transition-group@2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-2.9.0.tgz#df9cdb025796211151a436c69a8f3b97b5b07c8d" - integrity sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg== - dependencies: - dom-helpers "^3.4.0" - loose-envify "^1.4.0" - prop-types "^15.6.2" - react-lifecycles-compat "^3.0.4" - react-transition-group@^4.3.0, react-transition-group@^4.4.5: version "4.4.5" resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.5.tgz#e53d4e3f3344da8521489fbef8f2581d42becdd1" @@ -12581,9 +11350,9 @@ react-transition-group@^4.3.0, react-transition-group@^4.4.5: prop-types "^15.6.2" react-vnc@^0.5.3: - version "0.5.8" - resolved "https://registry.yarnpkg.com/react-vnc/-/react-vnc-0.5.8.tgz#6957f5cc4cbdfde56ad01deca7fa7571869acd32" - integrity sha512-DJZ87qGmsNMRiT0WQbPx7aes/ko0xiYLeZ3l8MfK55gUfeQ6qByLnYW99XIV6O6KNGjDYGbp2jC1pAtMIZ+VBA== + version "0.5.16" + resolved "https://registry.yarnpkg.com/react-vnc/-/react-vnc-0.5.16.tgz#8198fad16358c45add6ec877d9c947590b8ca533" + integrity sha512-rM2VmY03cwbwl9v4y6DHjXGqLjHbZGBJxgG1P74QzrjagVG3WkH5+K1zgDgYK4x0Mjk/80WztWX56Q8lZ9F3Cg== react-waypoint@^10.3.0: version "10.3.0" @@ -12595,13 +11364,12 @@ react-waypoint@^10.3.0: prop-types "^15.0.0" react-is "^17.0.1 || ^18.0.0" -react@^17.0.2: - 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.2.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" read-pkg-up@^7.0.1: version "7.0.1" @@ -12654,9 +11422,9 @@ readable-stream@^2.0.0, readable-stream@^2.2.2, readable-stream@~2.3.6: util-deprecate "~1.0.1" readable-stream@^3.1.1, readable-stream@^3.4.0: - version "3.6.1" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.1.tgz#f9f9b5f536920253b3d26e7660e7da4ccff9bb62" - integrity sha512-+rQmrWMYGA90yenhTYsLWAsLsqVC8osOw6PKE1HDYiO0gdPeKe/xDHNzIAIn4C91YQ6oenEhfYqqc1883qHbjQ== + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== dependencies: inherits "^2.0.3" string_decoder "^1.1.1" @@ -12669,18 +11437,7 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" -recast@^0.23.1: - version "0.23.1" - resolved "https://registry.yarnpkg.com/recast/-/recast-0.23.1.tgz#ee415a5561d2f99f02318ea8db81ad3a2267a6ff" - integrity sha512-RokaBcoxSjXUDzz1TXSZmZsSW6ZpLmlA3GGqJ8uuTrQ9hZhEz+4Tpsc+gRvYRJ2BU4H+ZyUlg91eSGDw7bwy7g== - dependencies: - assert "^2.0.0" - ast-types "^0.16.1" - esprima "~4.0.0" - source-map "~0.6.1" - tslib "^2.0.1" - -recast@^0.23.3: +recast@^0.23.1, recast@^0.23.3: version "0.23.4" resolved "https://registry.yarnpkg.com/recast/-/recast-0.23.4.tgz#ca1bac7bfd3011ea5a28dfecb5df678559fb1ddf" integrity sha512-qtEDqIZGVcSZCHniWwZWbRy79Dc6Wp3kT/UmDA2RJKBPg7+7k51aQBZirHmUGn5uvHf2rg8DkjizrN26k61ATw== @@ -12699,15 +11456,15 @@ recharts-scale@^0.4.4: decimal.js-light "^2.4.1" recharts@^2.9.3: - version "2.10.1" - resolved "https://registry.yarnpkg.com/recharts/-/recharts-2.10.1.tgz#c28c7451ed83d31072013446104ec07b3062893c" - integrity sha512-9bi0jIzxOTfEda+oYqgimKuYfApmBr0zKnAX8r4Iw56k3Saz/IQyBD4zohZL0eyzfz0oGFRH7alpJBgH1eC57g== + version "2.12.0" + resolved "https://registry.yarnpkg.com/recharts/-/recharts-2.12.0.tgz#e731e2733359d7942d5807c34c70f67673096d25" + integrity sha512-rVNcdNQ5b7+40Ue7mcEKZJyEv+3SUk2bDEVvOyXPDXXVE7TU3lrvnJUgAvO36hSzhRP2DnAamKXvHLFIFOU0Ww== dependencies: clsx "^2.0.0" eventemitter3 "^4.0.1" lodash "^4.17.19" react-is "^16.10.2" - react-smooth "^2.0.5" + react-smooth "^4.0.0" recharts-scale "^0.4.4" tiny-invariant "^1.3.1" victory-vendor "^36.6.8" @@ -12751,10 +11508,23 @@ redux@^4.0.0, redux@^4.0.4, redux@^4.0.5: dependencies: "@babel/runtime" "^7.9.2" +reflect.getprototypeof@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.5.tgz#e0bd28b597518f16edaf9c0e292c631eb13e0674" + integrity sha512-62wgfC8dJWrmxv44CA36pLDnP6KKl3Vhxb7PL+8+qrrFMMoJij4vgiMP8zV4O8+CBMXY1mHxI5fITGHXFHVmQQ== + dependencies: + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.0.0" + get-intrinsic "^1.2.3" + globalthis "^1.0.3" + which-builtin-type "^1.1.3" + regenerate-unicode-properties@^10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz#7c3192cab6dd24e21cb4461e5ddd7dd24fa8374c" - integrity sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ== + version "10.1.1" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz#6b0e05489d9076b04c436f318d9b067bba459480" + integrity sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q== dependencies: regenerate "^1.4.2" @@ -12763,15 +11533,15 @@ regenerate@^1.4.2: resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== -regenerator-runtime@^0.13.11, regenerator-runtime@^0.13.7: +regenerator-runtime@^0.13.7: version "0.13.11" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== regenerator-runtime@^0.14.0: - version "0.14.0" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" - integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== + version "0.14.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" + integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== regenerator-transform@^0.15.2: version "0.15.2" @@ -12780,29 +11550,29 @@ regenerator-transform@^0.15.2: dependencies: "@babel/runtime" "^7.8.4" -regexp.prototype.flags@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" - integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== +regexp.prototype.flags@^1.5.0, regexp.prototype.flags@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz#90ce989138db209f81492edd734183ce99f9677e" + integrity sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - functions-have-names "^1.2.2" + define-properties "^1.2.0" + set-function-name "^2.0.0" regexpp@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== -regexpp@^3.0.0, regexpp@^3.1.0, regexpp@^3.2.0: +regexpp@^3.0.0, regexpp@^3.1.0: version "3.2.0" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== regexpu-core@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.1.tgz#66900860f88def39a5cb79ebd9490e84f17bcdfb" - integrity sha512-nCOzW2V/X15XpLsK2rlgdwrysrBq+AauCn+omItIz4R1pIcmeot5zvjdmOBRLzEH/CkC6IxMJVmxDe3QcMuNVQ== + version "5.3.2" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b" + integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ== dependencies: "@babel/regjsgen" "^0.8.0" regenerate "^1.4.2" @@ -12863,10 +11633,10 @@ remark-slug@^6.0.0: mdast-util-to-string "^1.0.0" unist-util-visit "^2.0.0" -remove-accents@0.4.2: - version "0.4.2" - resolved "https://registry.yarnpkg.com/remove-accents/-/remove-accents-0.4.2.tgz#0a43d3aaae1e80db919e07ae254b285d9e1c7bb5" - integrity sha512-7pXIJqJOq5tFgG1A2Zxti3Ht8jJF337m4sowbuHsW30ZnkQFnDzy9qBNhgzX8ZLW4+UBcXiiR7SwR6pokHsxiA== +remove-accents@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/remove-accents/-/remove-accents-0.5.0.tgz#77991f37ba212afba162e375b627631315bed687" + integrity sha512-8g3/Otx1eJaVD12e31UbJj1YzdtVvzH85HV7t+9MJYk/u3XmkOUJ5Ys9wQrf9PCPK8+xn4ymzqYCiZl6QWKn+A== req-all@^1.0.0: version "1.0.0" @@ -12923,9 +11693,9 @@ reselect@4.0.0: integrity sha512-qUgANli03jjAyGlnbYVAV5vvnOmJnODyABz51RdBN7M4WaVu8mecZWgyQNkG8Yqe3KRGRt0l4K4B3XVEULC4CA== reselect@^4.0.0: - version "4.1.7" - resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.1.7.tgz#56480d9ff3d3188970ee2b76527bd94a95567a42" - integrity sha512-Zu1xbUt3/OPwsXL46hvOOoQrap2azE7ZQbokq61BQfiXvhewsKDwhMeZjTX9sX0nvw1t/U5Audyn1I9P/m9z0A== + version "4.1.8" + resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.1.8.tgz#3f5dc671ea168dccdeb3e141236f69f02eaec524" + integrity sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ== resolve-from@>=4, resolve-from@^5.0.0: version "5.0.0" @@ -12954,16 +11724,7 @@ resolve-pkg@>=1: dependencies: resolve-from "^5.0.0" -resolve@^1.10.0, resolve@^1.10.1, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.19.0: - version "1.22.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" - integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== - dependencies: - is-core-module "^2.9.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -resolve@^1.22.1: +resolve@^1.10.0, resolve@^1.10.1, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.22.1: version "1.22.8" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== @@ -12973,11 +11734,11 @@ resolve@^1.22.1: supports-preserve-symlinks-flag "^1.0.0" resolve@^2.0.0-next.4: - version "2.0.0-next.4" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660" - integrity sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ== + version "2.0.0-next.5" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.5.tgz#6b0ec3107e671e52b68cd068ef327173b90dc03c" + integrity sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA== dependencies: - is-core-module "^2.9.0" + is-core-module "^2.13.0" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" @@ -12989,6 +11750,14 @@ restore-cursor@^3.1.0: onetime "^5.1.0" signal-exit "^3.0.2" +restore-cursor@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-4.0.0.tgz#519560a4318975096def6e609d44100edaa4ccb9" + integrity sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + restricted-input@3.0.5: version "3.0.5" resolved "https://registry.yarnpkg.com/restricted-input/-/restricted-input-3.0.5.tgz#c43d279df36be0a11085daa3b1ae1d28044c44d8" @@ -13002,9 +11771,9 @@ reusify@^1.0.4: integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== rfdc@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" - integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== + version "1.3.1" + resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.1.tgz#2b6d4df52dffe8bb346992a10ea9451f24373a8f" + integrity sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg== rgbcolor@^1.0.1: version "1.0.1" @@ -13032,30 +11801,33 @@ rimraf@^2.6.1, rimraf@^2.6.3: dependencies: glob "^7.1.3" -"rollup@^2.25.0 || ^3.3.0", rollup@^3.2.5: - version "3.18.0" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.18.0.tgz#2354ba63ba66d6a09c652c3ea0dbcd9dad72bbde" - integrity sha512-J8C6VfEBjkvYPESMQYxKHxNOh4A5a3FlP+0BETGo34HEcE4eTlgCrO2+eWzlu2a/sHs2QUkZco+wscH7jhhgWg== +"rollup@^2.25.0 || ^3.3.0": + version "3.29.4" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.29.4.tgz#4d70c0f9834146df8705bfb69a9a19c9e1109981" + integrity sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw== optionalDependencies: fsevents "~2.3.2" -rollup@^4.2.0: - version "4.6.1" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.6.1.tgz#351501c86b5b4f976dde8c5837516452b59921f8" - integrity sha512-jZHaZotEHQaHLgKr8JnQiDT1rmatjgKlMekyksz+yk9jt/8z9quNjnKNRoaM0wd9DC2QKXjmWWuDYtM3jfF8pQ== +rollup@^4.0.2, rollup@^4.2.0: + version "4.9.6" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.9.6.tgz#4515facb0318ecca254a2ee1315e22e09efc50a0" + integrity sha512-05lzkCS2uASX0CiLFybYfVkwNbKZG5NFQ6Go0VWyogFTXXbR039UVsegViTntkk4OglHBdF54ccApXRRuXRbsg== + dependencies: + "@types/estree" "1.0.5" optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.6.1" - "@rollup/rollup-android-arm64" "4.6.1" - "@rollup/rollup-darwin-arm64" "4.6.1" - "@rollup/rollup-darwin-x64" "4.6.1" - "@rollup/rollup-linux-arm-gnueabihf" "4.6.1" - "@rollup/rollup-linux-arm64-gnu" "4.6.1" - "@rollup/rollup-linux-arm64-musl" "4.6.1" - "@rollup/rollup-linux-x64-gnu" "4.6.1" - "@rollup/rollup-linux-x64-musl" "4.6.1" - "@rollup/rollup-win32-arm64-msvc" "4.6.1" - "@rollup/rollup-win32-ia32-msvc" "4.6.1" - "@rollup/rollup-win32-x64-msvc" "4.6.1" + "@rollup/rollup-android-arm-eabi" "4.9.6" + "@rollup/rollup-android-arm64" "4.9.6" + "@rollup/rollup-darwin-arm64" "4.9.6" + "@rollup/rollup-darwin-x64" "4.9.6" + "@rollup/rollup-linux-arm-gnueabihf" "4.9.6" + "@rollup/rollup-linux-arm64-gnu" "4.9.6" + "@rollup/rollup-linux-arm64-musl" "4.9.6" + "@rollup/rollup-linux-riscv64-gnu" "4.9.6" + "@rollup/rollup-linux-x64-gnu" "4.9.6" + "@rollup/rollup-linux-x64-musl" "4.9.6" + "@rollup/rollup-win32-arm64-msvc" "4.9.6" + "@rollup/rollup-win32-ia32-msvc" "4.9.6" + "@rollup/rollup-win32-x64-msvc" "4.9.6" fsevents "~2.3.2" rrweb-cssom@^0.6.0: @@ -13087,14 +11859,7 @@ rxjs@^6.5.2, rxjs@^6.6.0: dependencies: tslib "^1.9.0" -rxjs@^7.5.1, rxjs@^7.8.0: - version "7.8.0" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.0.tgz#90a938862a82888ff4c7359811a595e14e1e09a4" - integrity sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg== - dependencies: - tslib "^2.1.0" - -rxjs@^7.5.5: +rxjs@^7.5.1, rxjs@^7.5.5: version "7.8.1" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== @@ -13108,6 +11873,16 @@ sade@^1.7.3: dependencies: mri "^1.1.0" +safe-array-concat@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.0.tgz#8d0cae9cb806d6d1c06e08ab13d847293ebe0692" + integrity sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg== + dependencies: + call-bind "^1.0.5" + get-intrinsic "^1.2.2" + has-symbols "^1.0.3" + isarray "^2.0.5" + safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" @@ -13119,12 +11894,12 @@ safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== safe-regex-test@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" - integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== + version "1.0.3" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377" + integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.3" + call-bind "^1.0.6" + es-errors "^1.3.0" is-regex "^1.1.4" "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: @@ -13172,13 +11947,12 @@ scheduler@^0.19.1: loose-envify "^1.1.0" object-assign "^4.1.1" -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" search-string@^3.1.0: version "3.1.0" @@ -13241,9 +12015,9 @@ serve-static@1.15.0: send "0.18.0" serve@^14.0.1: - version "14.2.0" - resolved "https://registry.yarnpkg.com/serve/-/serve-14.2.0.tgz#3d768e88fa13ad8644f2393599189707176e66b8" - integrity sha512-+HOw/XK1bW8tw5iBilBz/mJLWRzM8XM6MPxL4J/dKzdxq1vfdEWSwhaR7/yS8EJp5wzvP92p1qirysJvnEtjXg== + version "14.2.1" + resolved "https://registry.yarnpkg.com/serve/-/serve-14.2.1.tgz#3f078d292ed5e7b2c5a64f957af2765b0459798b" + integrity sha512-48er5fzHh7GCShLnNyPBRPEjs2I6QBozeGr02gaacROiyS/8ARADlj595j39iZXAqBbJHH/ivJJyPRWY9sQWZA== dependencies: "@zeit/schemas" "2.29.0" ajv "8.11.0" @@ -13267,6 +12041,27 @@ set-cookie-parser@^2.4.6: resolved "https://registry.yarnpkg.com/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz#131921e50f62ff1a66a461d7d62d7b21d5d15a51" integrity sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ== +set-function-length@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.1.tgz#47cc5945f2c771e2cf261c6737cf9684a2a5e425" + integrity sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g== + dependencies: + define-data-property "^1.1.2" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.3" + gopd "^1.0.1" + has-property-descriptors "^1.0.1" + +set-function-name@^2.0.0, set-function-name@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" + integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA== + dependencies: + define-data-property "^1.0.1" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.0" + setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" @@ -13309,18 +12104,19 @@ shebang-regex@^3.0.0: integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== shell-quote@^1.6.1: - version "1.8.0" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.0.tgz#20d078d0eaf71d54f43bd2ba14a1b5b9bfa5c8ba" - integrity sha512-QHsz8GgQIGKlRi24yFc6a6lN69Idnx634w49ay6+jA5yFh7a1UY+4Rp6HPx/L/1zcEDPEij8cIsiqR6bQsE5VQ== + version "1.8.1" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680" + integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + version "1.0.5" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.5.tgz#9a84546599b48909fb6af1211708d23b1946221b" + integrity sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ== dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" + call-bind "^1.0.6" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + object-inspect "^1.13.1" siginfo@^2.0.0: version "2.0.0" @@ -13332,32 +12128,27 @@ signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== -signal-exit@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.0.2.tgz#ff55bb1d9ff2114c13b400688fa544ac63c36967" - integrity sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q== - -signal-exit@^4.1.0: +signal-exit@^4.0.1, signal-exit@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== simple-git@^3.19.0: - version "3.19.0" - resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-3.19.0.tgz#fe8d0cd86a0e68372b75c0c44a0cb887201c3f7d" - integrity sha512-hyH2p9Ptxjf/xPuL7HfXbpYt9gKhC1yWDh3KYIAYJJePAKV7AEjLN4xhp7lozOdNiaJ9jlVvAbBymVlcS2jRiA== + version "3.22.0" + resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-3.22.0.tgz#616d41c661e30f9c65778956317d422b1729a242" + integrity sha512-6JujwSs0ac82jkGjMHiCnTifvf1crOiY/+tfs/Pqih6iow7VrpNKRRNdWm6RtaXpvvv/JGNYhlUtLhGFqHF+Yw== dependencies: "@kwsites/file-exists" "^1.1.1" "@kwsites/promise-deferred" "^1.1.1" debug "^4.3.4" -sirv@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/sirv/-/sirv-2.0.3.tgz#ca5868b87205a74bef62a469ed0296abceccd446" - integrity sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA== +sirv@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/sirv/-/sirv-2.0.4.tgz#5dd9a725c578e34e449f332703eb2a74e46a29b0" + integrity sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ== dependencies: - "@polka/url" "^1.0.0-next.20" - mrmime "^1.0.0" + "@polka/url" "^1.0.0-next.24" + mrmime "^2.0.0" totalist "^3.0.0" sisteransi@^1.0.5: @@ -13410,19 +12201,19 @@ slice-ansi@^5.0.0: ansi-styles "^6.0.0" is-fullwidth-code-point "^4.0.0" +snake-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c" + integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + source-map-js@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== -source-map-resolve@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.6.0.tgz#3d9df87e236b53f16d01e58150fc7711138e5ed2" - integrity sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w== - dependencies: - atob "^2.1.2" - decode-uri-component "^0.2.0" - source-map-support@^0.5.16, source-map-support@^0.5.19: version "0.5.21" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" @@ -13459,17 +12250,17 @@ spawn-command@^0.0.2-1: integrity sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg== spdx-correct@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" - integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + version "3.2.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" + integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== dependencies: spdx-expression-parse "^3.0.0" spdx-license-ids "^3.0.0" spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + version "2.4.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.4.0.tgz#c07a4ede25b16e4f78e6707bbd84b15a45c19c1b" + integrity sha512-hcjppoJ68fhxA/cjbN4T8N6uCUejN8yFw69ttpqtBeCbF3u13n7mb31NB9jKwGTTWWnt9IbRA/mf1FprYS8wfw== spdx-expression-parse@^3.0.0: version "3.0.1" @@ -13480,9 +12271,9 @@ spdx-expression-parse@^3.0.0: spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.12" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz#69077835abe2710b65f03969898b6637b505a779" - integrity sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA== + version "3.0.17" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz#887da8aa73218e51a1d917502d79863161a93f9c" + integrity sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg== sprintf-js@~1.0.2: version "1.0.3" @@ -13490,9 +12281,9 @@ sprintf-js@~1.0.2: integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== sshpk@^1.14.1: - version "1.17.0" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5" - integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== + version "1.18.0" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.18.0.tgz#1663e55cddf4d688b86a46b77f0d5fe363aba028" + integrity sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ== dependencies: asn1 "~0.2.3" assert-plus "^1.0.0" @@ -13504,22 +12295,15 @@ sshpk@^1.14.1: safer-buffer "^2.0.2" tweetnacl "~0.14.0" -stack-utils@^2.0.3: - version "2.0.6" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" - integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== - dependencies: - escape-string-regexp "^2.0.0" - stackback@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/stackback/-/stackback-0.0.2.tgz#1ac8a0d9483848d1695e418b6d031a3c3ce68e3b" integrity sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw== stackblur-canvas@^2.0.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/stackblur-canvas/-/stackblur-canvas-2.5.0.tgz#aa87bbed1560fdcd3138fff344fc6a1c413ebac4" - integrity sha512-EeNzTVfj+1In7aSLPKDD03F/ly4RxEuF/EX0YcOG0cKoPXs+SLZxDawQbexQDBzwROs4VKLWTOaZQlZkGBFEIQ== + version "2.7.0" + resolved "https://registry.yarnpkg.com/stackblur-canvas/-/stackblur-canvas-2.7.0.tgz#af931277d0b5096df55e1f91c530043e066989b6" + integrity sha512-yf7OENo23AGJhBriGx0QivY5JP6Y1HbrrDI6WLt6C5auYZXlQrheoY8hD4ibekFKz1HOfE48Ww8kMWMnJD/zcQ== statuses@2.0.1: version "2.0.1" @@ -13527,9 +12311,9 @@ statuses@2.0.1: integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== std-env@^3.5.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.6.0.tgz#94807562bddc68fa90f2e02c5fd5b6865bb4e98e" - integrity sha512-aFZ19IgVmhdB2uX599ve2kE6BIE3YMnQ6Gp6BURhW/oIzpXGKr878TQfAQZn1+i0Flcc/UKUy1gOlcfaUBCryg== + version "3.7.0" + resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.7.0.tgz#c9f7386ced6ecf13360b6c6c55b8aaa4ef7481d2" + integrity sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg== stop-iteration-iterator@^1.0.0: version "1.0.0" @@ -13558,16 +12342,16 @@ storybook-dark-mode@^3.0.3: memoizerific "^1.11.3" storybook@^7.6.10: - version "7.6.10" - resolved "https://registry.yarnpkg.com/storybook/-/storybook-7.6.10.tgz#2185d26cd7b43390e3e2c7581586e2f60cdbd9bd" - integrity sha512-ypFeGhQTUBBfqSUVZYh7wS5ghn3O2wILCiQc4459SeUpvUn+skcqw/TlrwGSoF5EWjDA7gtRrWDxO3mnlPt5Cw== + version "7.6.13" + resolved "https://registry.yarnpkg.com/storybook/-/storybook-7.6.13.tgz#f11b92c6e8cd2b846b03aefaed1d81ecbe20664d" + integrity sha512-c06c27f1m9OeXUtyA0/pwVLWJo+OD9SDIaTcPtojtwt5QEtSKfhQN+b9fnq/+GXRAHdkPF13AqR0uCXJZ/9Xtw== dependencies: - "@storybook/cli" "7.6.10" + "@storybook/cli" "7.6.13" stream-shift@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" - integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== + version "1.0.3" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.3.tgz#85b8fab4d71010fc3ba8772e8046cc49b8a3864b" + integrity sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ== strict-event-emitter@^0.2.4: version "0.2.8" @@ -13581,19 +12365,10 @@ strict-event-emitter@^0.4.3: resolved "https://registry.yarnpkg.com/strict-event-emitter/-/strict-event-emitter-0.4.6.tgz#ff347c8162b3e931e3ff5f02cfce6772c3b07eb3" integrity sha512-12KWeb+wixJohmnwNFerbyiBrAlq5qJLwIt38etRtKtmmHyDSoGlIqFE9wx+4IwG0aDjI7GV8tc8ZccjWZZtTg== -string-argv@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da" - integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== - -"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" +string-argv@0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.2.tgz#2b6d0ef24b656274d957d54e0a4bbf6153dc02b6" + integrity sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q== string-width@^1.0.1: version "1.0.2" @@ -13621,6 +12396,15 @@ string-width@^3.0.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + string-width@^5.0.0, string-width@^5.0.1, string-width@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" @@ -13631,45 +12415,55 @@ string-width@^5.0.0, string-width@^5.0.1, string-width@^5.1.2: strip-ansi "^7.0.1" string.prototype.matchall@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz#3bf85722021816dcd1bf38bb714915887ca79fd3" - integrity sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg== + version "4.0.10" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz#a1553eb532221d4180c51581d6072cd65d1ee100" + integrity sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - get-intrinsic "^1.1.3" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" has-symbols "^1.0.3" - internal-slot "^1.0.3" - regexp.prototype.flags "^1.4.3" + internal-slot "^1.0.5" + regexp.prototype.flags "^1.5.0" + set-function-name "^2.0.0" side-channel "^1.0.4" string.prototype.padend@^3.0.0: - version "3.1.4" - resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.4.tgz#2c43bb3a89eb54b6750de5942c123d6c98dd65b6" - integrity sha512-67otBXoksdjsnXXRUq+KMVTdlVRZ2af422Y0aTyTjVaoQkGr3mxl2Bc5emi7dOQ3OGVVQQskmLEWwFXwommpNw== + version "3.1.5" + resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.5.tgz#311ef3a4e3c557dd999cdf88fbdde223f2ac0f95" + integrity sha512-DOB27b/2UTTD+4myKUFh+/fXWcu/UDyASIXfg+7VzoCNNGOfWvoyU/x5pvVHr++ztyt/oSYI1BcWBBG/hmlNjA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" -string.prototype.trimend@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" - integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== +string.prototype.trim@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd" + integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" -string.prototype.trimstart@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" - integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== +string.prototype.trimend@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz#1bb3afc5008661d73e2dc015cd4853732d6c471e" + integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + +string.prototype.trimstart@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz#d4cdb44b83a4737ffbac2d406e405d43d0184298" + integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" string_decoder@^1.1.1: version "1.3.0" @@ -13685,13 +12479,6 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" @@ -13713,10 +12500,17 @@ strip-ansi@^5.1.0, strip-ansi@^5.2.0: dependencies: ansi-regex "^4.1.0" +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + strip-ansi@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2" - integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== + version "7.1.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== dependencies: ansi-regex "^6.0.1" @@ -13754,7 +12548,7 @@ strip-indent@^4.0.0: dependencies: min-indent "^1.0.1" -strip-json-comments@^3.0.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: +strip-json-comments@^3.0.1, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== @@ -13771,23 +12565,19 @@ strip-literal@^1.3.0: dependencies: acorn "^8.10.0" -stylis@4.1.3: - version "4.1.3" - resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.1.3.tgz#fd2fbe79f5fed17c55269e16ed8da14c84d069f7" - integrity sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA== - stylis@4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.2.0.tgz#79daee0208964c8fe695a42fcffcac633a211a51" integrity sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw== sucrase@^3.20.3: - version "3.29.0" - resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.29.0.tgz#3207c5bc1b980fdae1e539df3f8a8a518236da7d" - integrity sha512-bZPAuGA5SdFHuzqIhTAqt9fvNEo9rESqXIG3oiKdF8K4UmkQxC4KlNL3lVyAErXp+mPvUqZ5l13qx6TrDIGf3A== + version "3.35.0" + resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.35.0.tgz#57f17a3d7e19b36d8995f06679d121be914ae263" + integrity sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA== dependencies: + "@jridgewell/gen-mapping" "^0.3.2" commander "^4.0.0" - glob "7.1.6" + glob "^10.3.10" lines-and-columns "^1.1.6" mz "^2.7.0" pirates "^4.0.1" @@ -13882,25 +12672,18 @@ tar-stream@^2.1.4: inherits "^2.0.3" readable-stream "^3.1.1" -tar@^6.1.13: - version "6.1.13" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.13.tgz#46e22529000f612180601a6fe0680e7da508847b" - integrity sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw== +tar@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.0.tgz#b14ce49a79cb1cd23bc9b016302dea5474493f73" + integrity sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ== dependencies: chownr "^2.0.0" fs-minipass "^2.0.0" - minipass "^4.0.0" + minipass "^5.0.0" minizlib "^2.1.1" mkdirp "^1.0.3" yallist "^4.0.0" -telejson@^7.0.3: - version "7.0.4" - resolved "https://registry.yarnpkg.com/telejson/-/telejson-7.0.4.tgz#2e88c0af9566b4f687622ed490588312b2bec186" - integrity sha512-J4QEuCnYGXAI9KSN7RXK0a0cOW2ONpjc4IQbInGZ6c3stvplLAYyZjTnScrRd8deXVjNCFV1wXcLC7SObDuQYA== - dependencies: - memoizerific "^1.11.3" - telejson@^7.2.0: version "7.2.0" resolved "https://registry.yarnpkg.com/telejson/-/telejson-7.2.0.tgz#3994f6c9a8f8d7f2dba9be2c7c5bbb447e876f32" @@ -13972,9 +12755,9 @@ throttle-debounce@^2.0.0: integrity sha512-H7oLPV0P7+jgvrk+6mwwwBDmxTaxnu9HMXmloNLXwnNO0ZxZ31Orah2n8lU1eMPvsaowP2CX+USCgyovXfdOFQ== throttleit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.0.tgz#9e785836daf46743145a5984b6268d828528ac6c" - integrity sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g== + version "1.0.1" + resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.1.tgz#304ec51631c3b770c65c6c6f76938b384000f4d5" + integrity sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ== through2@^2.0.3: version "2.0.5" @@ -14000,19 +12783,19 @@ tiny-warning@^1.0.0, tiny-warning@^1.0.2: integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== tinybench@^2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.5.1.tgz#3408f6552125e53a5a48adee31261686fd71587e" - integrity sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg== + version "2.6.0" + resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.6.0.tgz#1423284ee22de07c91b3752c048d2764714b341b" + integrity sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA== -tinypool@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-0.8.1.tgz#b6c4e4972ede3e3e5cda74a3da1679303d386b03" - integrity sha512-zBTCK0cCgRROxvs9c0CGK838sPkeokNGdQVUUwHAbynHFlmyJYj825f/oRs528HaIJ97lo0pLIlDUzwN+IorWg== +tinypool@^0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-0.8.2.tgz#84013b03dc69dacb322563a475d4c0a9be00f82a" + integrity sha512-SUszKYe5wgsxnNOVlBYO6IC+8VGWdVGZWAqUxp3UErNBtptZvWbwyUOyzNL59zigz2rCA92QiL3wvG+JDSdJdQ== tinyspy@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/tinyspy/-/tinyspy-2.2.0.tgz#9dc04b072746520b432f77ea2c2d17933de5d6ce" - integrity sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg== + version "2.2.1" + resolved "https://registry.yarnpkg.com/tinyspy/-/tinyspy-2.2.1.tgz#117b2342f1f38a0dbdcc73a50a454883adf861d1" + integrity sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A== tmp@^0.0.33: version "0.0.33" @@ -14046,9 +12829,9 @@ to-regex-range@^5.0.1: is-number "^7.0.0" tocbot@^4.20.1: - version "4.21.6" - resolved "https://registry.yarnpkg.com/tocbot/-/tocbot-4.21.6.tgz#64e3685a3cb41e23841a06eedba9ad807270190f" - integrity sha512-bAnyV6SU2n1AvuBvEgi8t7KiIn5rRiEmwFp4+elx/1ueuncAUyubITfXDMwOqStgUwh8pDzLdWgDKLicsJPikw== + version "4.25.0" + resolved "https://registry.yarnpkg.com/tocbot/-/tocbot-4.25.0.tgz#bc38aea5ec8f076779bb39636f431b044129a237" + integrity sha512-kE5wyCQJ40hqUaRVkyQ4z5+4juzYsv/eK+aqD97N62YH0TxFhzJvo22RUQQZdO3YnXAk42ZOfOpjVdy+Z0YokA== toggle-selection@^1.0.6: version "1.0.6" @@ -14105,9 +12888,9 @@ tree-kill@^1.2.1, tree-kill@^1.2.2: integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== trough@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/trough/-/trough-2.1.0.tgz#0f7b511a4fde65a46f18477ab38849b22c554876" - integrity sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g== + version "2.2.0" + resolved "https://registry.yarnpkg.com/trough/-/trough-2.2.0.tgz#94a60bd6bd375c152c1df911a4b11d5b0256f50f" + integrity sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw== ts-dedent@^2.0.0, ts-dedent@^2.2.0: version "2.2.0" @@ -14144,40 +12927,35 @@ tslib@^1.10.0, tslib@^1.13.0, tslib@^1.8.1, tslib@^1.9.0: integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== tslib@^2.0.0, tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.4.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" - integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== - -"tslib@^2.4.1 || ^1.9.3": - version "2.6.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.0.tgz#b295854684dbda164e181d259a22cd779dcd7bc3" - integrity sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA== + version "2.6.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== tss-react@^4.8.2: - version "4.8.2" - resolved "https://registry.yarnpkg.com/tss-react/-/tss-react-4.8.2.tgz#ea424965e8a6828ac02bc8c8f2a7a75bb87cf0ac" - integrity sha512-VT2tvbnfyG5oEMUsJjyp9KPa/A+lahCju+usy8of9SnvNOWFhkVKOMcvTn8KF10ncBF0T+O+XlkcCR4Eoqw1mw== + version "4.9.4" + resolved "https://registry.yarnpkg.com/tss-react/-/tss-react-4.9.4.tgz#037603ed2f8765c2f208ac1c75e9293753aa18cd" + integrity sha512-4o+XFdaTcraNEIsCRxKiEX7g6xhcsdSxfHRjos3Kg9GbYIpzfK4M2MHMETTuXT54nUrldtnkipNC003v/q5KVg== dependencies: "@emotion/cache" "*" "@emotion/serialize" "*" "@emotion/utils" "*" tsup@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/tsup/-/tsup-7.2.0.tgz#bb24c0d5e436477900c712e42adc67200607303c" - integrity sha512-vDHlczXbgUvY3rWvqFEbSqmC1L7woozbzngMqTtL2PGBODTtWlRwGDDawhvWzr5c1QjKe4OAKqJGfE1xeXUvtQ== + version "7.3.0" + resolved "https://registry.yarnpkg.com/tsup/-/tsup-7.3.0.tgz#c7776e08c7ef55ed69def2c6e7ba4719005f5abd" + integrity sha512-Ja1eaSRrE+QarmATlNO5fse2aOACYMBX+IZRKy1T+gpyH+jXgRrl5l4nHIQJQ1DoDgEjHDTw8cpE085UdBZuWQ== dependencies: bundle-require "^4.0.0" cac "^6.7.12" chokidar "^3.5.1" debug "^4.3.1" - esbuild "^0.18.2" + esbuild "^0.19.2" execa "^5.0.0" globby "^11.0.3" joycon "^3.0.1" postcss-load-config "^4.0.1" resolve-from "^5.0.0" - rollup "^3.2.5" + rollup "^4.0.2" source-map "0.8.0-beta.0" sucrase "^3.20.3" tree-kill "^1.2.2" @@ -14245,6 +13023,11 @@ type-fest@^0.8.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== +type-fest@^1.0.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" + integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== + type-fest@^2.13.0, type-fest@^2.19.0, type-fest@~2.19: version "2.19.0" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b" @@ -14258,6 +13041,36 @@ type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" +typed-array-buffer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.1.tgz#0608ffe6bca71bf15a45bff0ca2604107a1325f5" + integrity sha512-RSqu1UEuSlrBhHTWC8O9FnPjOduNs4M7rJ4pRKoEjtx1zUNOPN2sSXHLDX+Y2WPbHIxbvg4JFo2DNAEfPIKWoQ== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-typed-array "^1.1.13" + +typed-array-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0" + integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + has-proto "^1.0.1" + is-typed-array "^1.1.10" + +typed-array-byte-offset@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b" + integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + has-proto "^1.0.1" + is-typed-array "^1.1.10" + typed-array-length@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" @@ -14297,10 +13110,10 @@ uc.micro@^1.0.1, uc.micro@^1.0.5: resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA== -ufo@^1.3.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.3.1.tgz#e085842f4627c41d4c1b60ebea1f75cdab4ce86b" - integrity sha512-uY/99gMLIOlJPwATcMVYfqDSxUR9//AUcgZMzwfSTJPDKzA1S8mX4VLqa+fiAtveraQUBCz4FFcwVZBGbwBXIw== +ufo@^1.3.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.4.0.tgz#39845b31be81b4f319ab1d99fd20c56cac528d32" + integrity sha512-Hhy+BhRBleFjpJ2vchUNN40qgkh0366FWJGqVLYBHev0vpHTrXSA0ryT+74UiW6KWsldNurQMKGqCm1M2zBciQ== uglify-js@^3.1.4: version "3.17.4" @@ -14424,9 +13237,9 @@ universalify@^0.2.0: integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + version "2.0.1" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== unload@2.2.0: version "2.2.0" @@ -14442,28 +13255,20 @@ unpipe@1.0.0, unpipe@~1.0.0: integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== unplugin@^1.3.1: - version "1.5.0" - resolved "https://registry.yarnpkg.com/unplugin/-/unplugin-1.5.0.tgz#8938ae84defe62afc7757df9ca05d27160f6c20c" - integrity sha512-9ZdRwbh/4gcm1JTOkp9lAkIDrtOyOxgHmY7cjuwI8L/2RTikMcVG25GsZwNAgRuap3iDw2jeq7eoqtAsz5rW3A== + version "1.7.1" + resolved "https://registry.yarnpkg.com/unplugin/-/unplugin-1.7.1.tgz#009571e3128640f4e327f33680d2db27afaf1e11" + integrity sha512-JqzORDAPxxs8ErLV4x+LL7bk5pk3YlcWqpSNsIkAZj972KzFZLClc/ekppahKkOczGkwIG6ElFgdOgOlK4tXZw== dependencies: - acorn "^8.10.0" + acorn "^8.11.3" chokidar "^3.5.3" webpack-sources "^3.2.3" - webpack-virtual-modules "^0.5.0" + webpack-virtual-modules "^0.6.1" untildify@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== -update-browserslist-db@^1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" - integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - update-browserslist-db@^1.0.13: version "1.0.13" resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" @@ -14496,9 +13301,9 @@ url-parse@^1.5.3: requires-port "^1.0.0" use-callback-ref@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/use-callback-ref/-/use-callback-ref-1.3.0.tgz#772199899b9c9a50526fedc4993fc7fa1f7e32d5" - integrity sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w== + version "1.3.1" + resolved "https://registry.yarnpkg.com/use-callback-ref/-/use-callback-ref-1.3.1.tgz#9be64c3902cbd72b07fe55e56408ae3a26036fd0" + integrity sha512-Lg4Vx1XZQauB42Hw3kK7JM6yjVjgFmFC5/Ab797s79aARomD2nEErc4mCgM8EZrARLmmbWpi5DGCadmK50DcAQ== dependencies: tslib "^2.0.0" @@ -14527,7 +13332,7 @@ util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== -util@^0.12.0, util@^0.12.3, util@^0.12.4, util@^0.12.5: +util@^0.12.3, util@^0.12.4, util@^0.12.5: version "0.12.5" resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== @@ -14556,9 +13361,9 @@ uuid@^8.0.0, uuid@^8.3.2: integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== uuid@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5" - integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg== + version "9.0.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" + integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== uvu@^0.5.0: version "0.5.6" @@ -14576,9 +13381,9 @@ v8-compile-cache-lib@^3.0.1: integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== v8-compile-cache@^2.0.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" - integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== + version "2.4.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz#cdada8bec61e15865f05d097c5f4fd30e94dc128" + integrity sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw== v8-to-istanbul@^9.2.0: version "9.2.0" @@ -14635,9 +13440,9 @@ vfile@^5.0.0: vfile-message "^3.0.0" victory-vendor@^36.6.8: - version "36.6.12" - resolved "https://registry.yarnpkg.com/victory-vendor/-/victory-vendor-36.6.12.tgz#17fa4d79d266a6e2bde0291c60c5002c55008164" - integrity sha512-pJrTkNHln+D83vDCCSUf0ZfxBvIaVrFHmrBOsnnLAbdqfudRACAj51He2zU94/IWq9464oTADcPVkmWAfNMwgA== + version "36.9.1" + resolved "https://registry.yarnpkg.com/victory-vendor/-/victory-vendor-36.9.1.tgz#a7536766ca9725711c7dc1a36dd1d1d248cfa22d" + integrity sha512-+pZIP+U3pEJdDCeFmsXwHzV7vNHQC/eIbHklfe2ZCZqayYRH7lQbHcVgsJ0XOOv27hWs4jH4MONgXxHMObTMSA== dependencies: "@types/d3-array" "^3.0.3" "@types/d3-ease" "^3.0.0" @@ -14654,21 +13459,10 @@ victory-vendor@^36.6.8: d3-time "^3.0.0" d3-timer "^3.0.1" -vite-node@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-1.0.1.tgz#c16c9df9b5d47b74156a6501c9db5b380d992768" - integrity sha512-Y2Jnz4cr2azsOMMYuVPrQkp3KMnS/0WV8ezZjCy4hU7O5mUHCAVOnFmoEvs1nvix/4mYm74Len8bYRWZJMNP6g== - dependencies: - cac "^6.7.14" - debug "^4.3.4" - pathe "^1.1.1" - picocolors "^1.0.0" - vite "^5.0.0-beta.15 || ^5.0.0" - -vite-node@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-1.2.0.tgz#9a359804469203a54ac49daad3065f2fd0bfb9c3" - integrity sha512-ETnQTHeAbbOxl7/pyBck9oAPZZZo+kYnFt1uQDD+hPReOc+wCjXw4r4jHriBRuVDB5isHmPXxrfc1yJnfBERqg== +vite-node@1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-1.2.2.tgz#f6d329b06f9032130ae6eac1dc773f3663903c25" + integrity sha512-1as4rDTgVWJO3n1uHmUYqq7nsFgINQ9u+mRcXpjeOMJUmviqNKjcZB7UfRZrlM7MjYXMKpuWp5oGkjaFLnjawg== dependencies: cac "^6.7.14" debug "^4.3.4" @@ -14677,63 +13471,36 @@ vite-node@1.2.0: vite "^5.0.0" vite-plugin-svgr@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/vite-plugin-svgr/-/vite-plugin-svgr-3.2.0.tgz#920375aaf6635091c9ac8e467825f92d32544476" - integrity sha512-Uvq6niTvhqJU6ga78qLKBFJSDvxWhOnyfQSoKpDPMAGxJPo5S3+9hyjExE5YDj6Lpa4uaLkGc1cBgxXov+LjSw== + version "3.3.0" + resolved "https://registry.yarnpkg.com/vite-plugin-svgr/-/vite-plugin-svgr-3.3.0.tgz#024f083c0f0831497d8507b82e49a8ee2b29701a" + integrity sha512-vWZMCcGNdPqgziYFKQ3Y95XP0d0YGp28+MM3Dp9cTa/px5CKcHHrIoPl2Jw81rgVm6/ZUNONzjXbZQZ7Kw66og== dependencies: - "@rollup/pluginutils" "^5.0.2" - "@svgr/core" "^7.0.0" - "@svgr/plugin-jsx" "^7.0.0" + "@rollup/pluginutils" "^5.0.4" + "@svgr/core" "^8.1.0" + "@svgr/plugin-jsx" "^8.1.0" -vite@^5.0.0, "vite@^5.0.0-beta.15 || ^5.0.0", "vite@^5.0.0-beta.19 || ^5.0.0", vite@^5.0.12: - version "5.0.12" - resolved "https://registry.yarnpkg.com/vite/-/vite-5.0.12.tgz#8a2ffd4da36c132aec4adafe05d7adde38333c47" - integrity sha512-4hsnEkG3q0N4Tzf1+t6NdN9dg/L3BM+q8SWgbSPnJvrgH2kgdyzfVJwbR1ic69/4uMJJ/3dqDZZE5/WwqW8U1w== +vite@^5.0.0, vite@^5.0.12: + version "5.1.1" + resolved "https://registry.yarnpkg.com/vite/-/vite-5.1.1.tgz#294e39b199d669981efc7e0261b14f78ec80819e" + integrity sha512-wclpAgY3F1tR7t9LL5CcHC41YPkQIpKUGeIuT8MdNwNZr6OqOTLs7JX5vIHAtzqLWXts0T+GDrh9pN2arneKqg== dependencies: esbuild "^0.19.3" - postcss "^8.4.32" + postcss "^8.4.35" rollup "^4.2.0" optionalDependencies: fsevents "~2.3.3" -vitest@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/vitest/-/vitest-1.0.1.tgz#3ba1307066842bc801084fa384ce0b23941b91f7" - integrity sha512-MHsOj079S28hDsvdDvyD1pRj4dcS51EC5Vbe0xvOYX+WryP8soiK2dm8oULi+oA/8Xa/h6GoJEMTmcmBy5YM+Q== - dependencies: - "@vitest/expect" "1.0.1" - "@vitest/runner" "1.0.1" - "@vitest/snapshot" "1.0.1" - "@vitest/spy" "1.0.1" - "@vitest/utils" "1.0.1" - acorn-walk "^8.3.0" - cac "^6.7.14" - chai "^4.3.10" - debug "^4.3.4" - execa "^8.0.1" - local-pkg "^0.5.0" - magic-string "^0.30.5" - pathe "^1.1.1" - picocolors "^1.0.0" - std-env "^3.5.0" - strip-literal "^1.3.0" - tinybench "^2.5.1" - tinypool "^0.8.1" - vite "^5.0.0-beta.19 || ^5.0.0" - vite-node "1.0.1" - why-is-node-running "^2.2.2" - -vitest@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/vitest/-/vitest-1.2.0.tgz#2ddff4a32ed992339655f243525c0e187b5af6d9" - integrity sha512-Ixs5m7BjqvLHXcibkzKRQUvD/XLw0E3rvqaCMlrm/0LMsA0309ZqYvTlPzkhh81VlEyVZXFlwWnkhb6/UMtcaQ== - dependencies: - "@vitest/expect" "1.2.0" - "@vitest/runner" "1.2.0" - "@vitest/snapshot" "1.2.0" - "@vitest/spy" "1.2.0" - "@vitest/utils" "1.2.0" - acorn-walk "^8.3.1" +vitest@^1.0.1, vitest@^1.2.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/vitest/-/vitest-1.2.2.tgz#9e29ad2a74a5df553c30c5798c57a062d58ce299" + integrity sha512-d5Ouvrnms3GD9USIK36KG8OZ5bEvKEkITFtnGv56HFaSlbItJuYr7hv2Lkn903+AvRAgSixiamozUVfORUekjw== + dependencies: + "@vitest/expect" "1.2.2" + "@vitest/runner" "1.2.2" + "@vitest/snapshot" "1.2.2" + "@vitest/spy" "1.2.2" + "@vitest/utils" "1.2.2" + acorn-walk "^8.3.2" cac "^6.7.14" chai "^4.3.10" debug "^4.3.4" @@ -14745,9 +13512,9 @@ vitest@^1.2.0: std-env "^3.5.0" strip-literal "^1.3.0" tinybench "^2.5.1" - tinypool "^0.8.1" + tinypool "^0.8.2" vite "^5.0.0" - vite-node "1.2.0" + vite-node "1.2.2" why-is-node-running "^2.2.2" w3c-xmlserializer@^4.0.0: @@ -14815,10 +13582,10 @@ webpack-sources@^3.2.3: resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== -webpack-virtual-modules@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/webpack-virtual-modules/-/webpack-virtual-modules-0.5.0.tgz#362f14738a56dae107937ab98ea7062e8bdd3b6c" - integrity sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw== +webpack-virtual-modules@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/webpack-virtual-modules/-/webpack-virtual-modules-0.6.1.tgz#ac6fdb9c5adb8caecd82ec241c9631b7a3681b6f" + integrity sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg== whatwg-encoding@^2.0.0: version "2.0.0" @@ -14828,9 +13595,9 @@ whatwg-encoding@^2.0.0: iconv-lite "0.6.3" whatwg-fetch@>=0.10.0: - version "3.6.2" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz#dced24f37f2624ed0281725d51d0e2e3fe677f8c" - integrity sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA== + version "3.6.20" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz#580ce6d791facec91d37c72890995a0b48d31c70" + integrity sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg== whatwg-mimetype@^3.0.0: version "3.0.0" @@ -14873,6 +13640,24 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" +which-builtin-type@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.1.3.tgz#b1b8443707cc58b6e9bf98d32110ff0c2cbd029b" + integrity sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw== + dependencies: + function.prototype.name "^1.1.5" + has-tostringtag "^1.0.0" + is-async-function "^2.0.0" + is-date-object "^1.0.5" + is-finalizationregistry "^1.0.2" + is-generator-function "^1.0.10" + is-regex "^1.1.4" + is-weakref "^1.0.2" + isarray "^2.0.5" + which-boxed-primitive "^1.0.2" + which-collection "^1.0.1" + which-typed-array "^1.1.9" + which-collection@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906" @@ -14884,21 +13669,20 @@ which-collection@^1.0.1: is-weakset "^2.0.1" which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - integrity sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q== + version "2.0.1" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409" + integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== -which-typed-array@^1.1.2, which-typed-array@^1.1.9: - version "1.1.9" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" - integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== +which-typed-array@^1.1.13, which-typed-array@^1.1.14, which-typed-array@^1.1.2, which-typed-array@^1.1.9: + version "1.1.14" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.14.tgz#1f78a111aee1e131ca66164d8bdc3ab062c95a06" + integrity sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg== dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + available-typed-arrays "^1.0.6" + call-bind "^1.0.5" for-each "^0.3.3" gopd "^1.0.1" - has-tostringtag "^1.0.0" - is-typed-array "^1.1.10" + has-tostringtag "^1.0.1" which@^1.2.9: version "1.3.1" @@ -14929,7 +13713,7 @@ widest-line@^4.0.1: dependencies: string-width "^5.0.1" -word-wrap@^1.2.3, word-wrap@^1.2.4, word-wrap@~1.2.3: +word-wrap@^1.2.4, word-wrap@~1.2.3: version "1.2.5" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== @@ -14939,15 +13723,6 @@ wordwrap@^1.0.0: resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - wrap-ansi@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" @@ -14965,6 +13740,15 @@ wrap-ansi@^6.0.1, wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrap-ansi@^8.0.1, wrap-ansi@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" @@ -15010,15 +13794,10 @@ ws@^6.1.0: dependencies: async-limiter "~1.0.0" -ws@^8.13.0: - version "8.14.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.14.2.tgz#6c249a806eb2db7a20d26d51e7709eab7b2e6c7f" - integrity sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g== - -ws@^8.2.3: - version "8.12.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.12.1.tgz#c51e583d79140b5e42e39be48c934131942d4a8f" - integrity sha512-1qo+M9Ba+xNhPB+YTWUlK6M17brTut5EXbcBaMRN5pH5dFrXz7lzz1ChFSUq3bOUl8yEvSenhHmYUNJxFzdJew== +ws@^8.13.0, ws@^8.2.3: + version "8.16.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.16.0.tgz#d1cd774f36fbc07165066a60e40323eab6446fd4" + integrity sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ== xml-name-validator@^4.0.0: version "4.0.0" @@ -15078,7 +13857,7 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yaml@^1.10.0, yaml@^1.7.2, yaml@^2.1.1, yaml@^2.2.2, yaml@^2.3.0: +yaml@2.3.1, yaml@^1.10.0, yaml@^1.7.2, yaml@^2.2.2, yaml@^2.3.0, yaml@^2.3.4: version "2.3.4" resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.4.tgz#53fc1d514be80aabf386dc6001eb29bf3b7523b2" integrity sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA== From 455f09bb2630207cd70fb7d864f0773e5747efe1 Mon Sep 17 00:00:00 2001 From: Banks Nussman <115251059+bnussman-akamai@users.noreply.github.com> Date: Fri, 16 Feb 2024 10:27:07 -0500 Subject: [PATCH 03/37] fix: [M3-7758] - Linode Network Graph Tooltip - Incorrect Units (#10197) * fix tooltip unit * Added changeset: Linode Network Graph Tooltip - Incorrect Units --------- Co-authored-by: Banks Nussman --- .../pr-10197-fixed-1708020473057.md | 5 ++ .../LinodeSummary/NetworkGraphs.tsx | 59 +++++-------------- 2 files changed, 19 insertions(+), 45 deletions(-) create mode 100644 packages/manager/.changeset/pr-10197-fixed-1708020473057.md diff --git a/packages/manager/.changeset/pr-10197-fixed-1708020473057.md b/packages/manager/.changeset/pr-10197-fixed-1708020473057.md new file mode 100644 index 00000000000..1a0dfbcdaf6 --- /dev/null +++ b/packages/manager/.changeset/pr-10197-fixed-1708020473057.md @@ -0,0 +1,5 @@ +--- +"@linode/manager": Fixed +--- + +Linode Network Graph Tooltip - Incorrect Units ([#10197](https://github.com/linode/manager/pull/10197)) diff --git a/packages/manager/src/features/Linodes/LinodesDetail/LinodeSummary/NetworkGraphs.tsx b/packages/manager/src/features/Linodes/LinodesDetail/LinodeSummary/NetworkGraphs.tsx index 0fa810b5864..45bf3fdfc01 100644 --- a/packages/manager/src/features/Linodes/LinodesDetail/LinodeSummary/NetworkGraphs.tsx +++ b/packages/manager/src/features/Linodes/LinodesDetail/LinodeSummary/NetworkGraphs.tsx @@ -1,7 +1,6 @@ import { Stats } from '@linode/api-v4/lib/linodes'; import Grid from '@mui/material/Unstable_Grid2'; import { Theme, styled, useTheme } from '@mui/material/styles'; -import { map, pathOr } from 'ramda'; import * as React from 'react'; import { AreaChart } from 'src/components/AreaChart/AreaChart'; @@ -13,14 +12,10 @@ import { formatBitsPerSecond, formatNetworkTooltip, generateNetworkUnits, + NetworkUnit, } from 'src/features/Longview/shared/utilities'; import { useFlags } from 'src/hooks/useFlags'; -import { - Metrics, - getMetrics, - getTotalTraffic, -} from 'src/utilities/statMetrics'; -import { readableBytes } from 'src/utilities/unitConversions'; +import { Metrics, getMetrics } from 'src/utilities/statMetrics'; import { StatsPanel } from './StatsPanel'; @@ -30,9 +25,6 @@ export interface TotalTrafficProps { outTraffic: string; } -const formatTotalTraffic = (value: number) => - readableBytes(value, { base10: true }).formatted; - export interface ChartProps { height: number; loading: boolean; @@ -64,7 +56,7 @@ interface NetworkStats { const _getMetrics = (data: NetworkStats) => { return { privateIn: getMetrics(data.privateIn), - privateOut: getMetrics(data.privateOut ?? []), + privateOut: getMetrics(data.privateOut), publicIn: getMetrics(data.publicIn), publicOut: getMetrics(data.publicOut), }; @@ -77,42 +69,22 @@ export const NetworkGraphs = (props: Props) => { const flags = useFlags(); const v4Data: NetworkStats = { - privateIn: pathOr([], ['data', 'netv4', 'private_in'], stats), - privateOut: pathOr([], ['data', 'netv4', 'private_out'], stats), - publicIn: pathOr([], ['data', 'netv4', 'in'], stats), - publicOut: pathOr([], ['data', 'netv4', 'out'], stats), + privateIn: stats?.data.netv4.private_in ?? [], + privateOut: stats?.data.netv4.private_out ?? [], + publicIn: stats?.data.netv4.in ?? [], + publicOut: stats?.data.netv4.out ?? [], }; const v6Data: NetworkStats = { - privateIn: pathOr([], ['data', 'netv6', 'private_in'], stats), - privateOut: pathOr([], ['data', 'netv6', 'private_out'], stats), - publicIn: pathOr([], ['data', 'netv6', 'in'], stats), - publicOut: pathOr([], ['data', 'netv6', 'out'], stats), + privateIn: stats?.data.netv6.private_in ?? [], + privateOut: stats?.data.netv6.private_out ?? [], + publicIn: stats?.data.netv6.in ?? [], + publicOut: stats?.data.netv6.out ?? [], }; const v4Metrics = _getMetrics(v4Data); const v6Metrics = _getMetrics(v6Data); - const v4totalTraffic: TotalTrafficProps = map( - formatTotalTraffic, - getTotalTraffic( - v4Metrics.publicIn.total, - v4Metrics.publicOut.total, - v4Data.publicIn.length, - v6Metrics.publicIn.total, - v6Metrics.publicOut.total - ) - ); - - const v6totalTraffic: TotalTrafficProps = map( - formatTotalTraffic, - getTotalTraffic( - v6Metrics.publicIn.total, - v6Metrics.publicOut.total, - v6Metrics.publicIn.length - ) - ); - // Convert to bytes, which is what generateNetworkUnits expects. const maxV4InBytes = Math.max( @@ -150,7 +122,6 @@ export const NetworkGraphs = (props: Props) => { ariaLabel="IPv4 Network Traffic Graph" data={v4Data} metrics={v4Metrics} - totalTraffic={v4totalTraffic} unit={v4Unit} {...commonGraphProps} /> @@ -166,7 +137,6 @@ export const NetworkGraphs = (props: Props) => { ariaLabel="IPv6 Network Traffic Graph" data={v6Data} metrics={v6Metrics} - totalTraffic={v6totalTraffic} unit={v6Unit} {...commonGraphProps} /> @@ -187,8 +157,7 @@ interface GraphProps { rangeSelection: string; theme: Theme; timezone: string; - totalTraffic: TotalTrafficProps; - unit: string; + unit: NetworkUnit; xAxisTickFormat: string; } @@ -210,7 +179,7 @@ const Graph = (props: GraphProps) => { const format = formatBitsPerSecond; const convertNetworkData = (value: number) => { - return convertNetworkToUnit(value, unit as any); + return convertNetworkToUnit(value, unit); }; /** @@ -298,7 +267,7 @@ const Graph = (props: GraphProps) => { height={420} showLegend timezone={timezone} - unit={' Kb/s'} + unit={` ${unit}/s`} /> ); From 42137a08f06e3e03f20caa03abe656f18685707b Mon Sep 17 00:00:00 2001 From: Alban Bailly <130582365+abailly-akamai@users.noreply.github.com> Date: Fri, 16 Feb 2024 11:24:28 -0500 Subject: [PATCH 04/37] upcoming: [M3-7618] - Delete Placement Group Modal (#10162) * Initial commit: save work * Wrap up comment and add test * Cleanup * Error handling * Cleanup and more error handling * Add linode list * Add unassign logic * error handling * Test * Restore initial mock data * Cleanup * Test and story for changes in removable selection list * Added changeset: Add Delete Placement Group Modal * Invalidate related linode when removed from PG * Feedback --- ...r-10162-upcoming-features-1708036002117.md | 5 + .../RemovableSelectionsList.stories.tsx | 46 +++++ .../RemovableSelectionsList.test.tsx | 12 ++ .../RemovableSelectionsList.tsx | 40 +++-- .../TypeToConfirmDialog.tsx | 3 + .../PlacementGroupsDeleteModal.test.tsx | 125 ++++++++++++++ .../PlacementGroupsDeleteModal.tsx | 163 ++++++++++++++++++ .../PlacementGroupsDetail.tsx | 2 +- .../PlacementGroupsLanding.tsx | 9 +- .../PlacementGroupsRow.tsx | 2 +- .../PlacementGroupsUnassignModal.tsx | 6 +- .../src/features/PlacementGroups/index.tsx | 5 + packages/manager/src/mocks/serverHandlers.ts | 2 +- .../manager/src/queries/placementGroups.ts | 19 +- 14 files changed, 398 insertions(+), 41 deletions(-) create mode 100644 packages/manager/.changeset/pr-10162-upcoming-features-1708036002117.md create mode 100644 packages/manager/src/features/PlacementGroups/PlacementGroupsDeleteModal.test.tsx create mode 100644 packages/manager/src/features/PlacementGroups/PlacementGroupsDeleteModal.tsx diff --git a/packages/manager/.changeset/pr-10162-upcoming-features-1708036002117.md b/packages/manager/.changeset/pr-10162-upcoming-features-1708036002117.md new file mode 100644 index 00000000000..858fe9b9d8b --- /dev/null +++ b/packages/manager/.changeset/pr-10162-upcoming-features-1708036002117.md @@ -0,0 +1,5 @@ +--- +"@linode/manager": Upcoming Features +--- + +Add Delete Placement Group Modal ([#10162](https://github.com/linode/manager/pull/10162)) diff --git a/packages/manager/src/components/RemovableSelectionsList/RemovableSelectionsList.stories.tsx b/packages/manager/src/components/RemovableSelectionsList/RemovableSelectionsList.stories.tsx index 81d5ee88869..300f3e4486b 100644 --- a/packages/manager/src/components/RemovableSelectionsList/RemovableSelectionsList.stories.tsx +++ b/packages/manager/src/components/RemovableSelectionsList/RemovableSelectionsList.stories.tsx @@ -110,6 +110,52 @@ export const CustomHeightAndWidth: Story = { ), }; +/** + * Example of a RemovableSelectionsList with no data to remove + */ +export const WithReadableRemoveCTA: Story = { + render: () => { + const SpecifiedLabelWrapper = () => { + const [data, setData] = React.useState(diffLabelListItems); + + const handleRemove = (item: RemovableItem) => { + setData([...data].filter((data) => data.id !== item.id)); + }; + + const resetList = () => { + setData([...diffLabelListItems]); + }; + + return ( + <> + ( + + )} + headerText="Linodes to remove" + noDataText="No Linodes available" + onRemove={handleRemove} + selectionData={data} + /> + + + ); + }; + + return ; + }, +}; + /** * Example of a RemovableSelectionsList with no data to remove */ diff --git a/packages/manager/src/components/RemovableSelectionsList/RemovableSelectionsList.test.tsx b/packages/manager/src/components/RemovableSelectionsList/RemovableSelectionsList.test.tsx index 9eae742e28a..89bbf72f9d4 100644 --- a/packages/manager/src/components/RemovableSelectionsList/RemovableSelectionsList.test.tsx +++ b/packages/manager/src/components/RemovableSelectionsList/RemovableSelectionsList.test.tsx @@ -3,6 +3,7 @@ import * as React from 'react'; import { renderWithTheme } from 'src/utilities/testHelpers'; +import { Button } from '../Button/Button'; import { RemovableSelectionsList } from './RemovableSelectionsList'; const defaultList = Array.from({ length: 5 }, (_, index) => { @@ -89,4 +90,15 @@ describe('Removable Selections List', () => { const removeButton = screen.queryByLabelText(`remove my-linode-1`); expect(removeButton).not.toBeInTheDocument(); }); + + it('should render the remove button as text when removeButtonText is declared', () => { + const { queryAllByText } = renderWithTheme( + } + isRemovable + /> + ); + expect(queryAllByText('Remove Linode')).toHaveLength(5); + }); }); diff --git a/packages/manager/src/components/RemovableSelectionsList/RemovableSelectionsList.tsx b/packages/manager/src/components/RemovableSelectionsList/RemovableSelectionsList.tsx index ec09036a215..9bcf7c8ad12 100644 --- a/packages/manager/src/components/RemovableSelectionsList/RemovableSelectionsList.tsx +++ b/packages/manager/src/components/RemovableSelectionsList/RemovableSelectionsList.tsx @@ -15,6 +15,7 @@ import { } from './RemovableSelectionsList.style'; import type { SxProps, Theme } from '@mui/material'; +import type { ButtonProps } from 'src/components/Button/Button'; export type RemovableItem = { id: number; @@ -29,6 +30,11 @@ export interface RemovableSelectionsListProps { * The custom label component */ LabelComponent?: React.ComponentType<{ selection: RemovableItem }>; + /** + * Overrides the render of the X Button + * Has no effect if isRemovable is false + */ + RemoveButton?: (props: ButtonProps) => JSX.Element; /** * The descriptive text to display above the list */ @@ -78,6 +84,7 @@ export const RemovableSelectionsList = ( ) => { const { LabelComponent, + RemoveButton, headerText, id, isRemovable = true, @@ -115,9 +122,9 @@ export const RemovableSelectionsList = ( > {selectionData.map((selection) => ( @@ -130,20 +137,23 @@ export const RemovableSelectionsList = ( selection.label )} - {isRemovable && ( - handleOnClick(selection)} - size="medium" - > - - - )} + {isRemovable && + (RemoveButton ? ( + handleOnClick(selection)} /> + ) : ( + handleOnClick(selection)} + size="medium" + > + + + ))} ))} diff --git a/packages/manager/src/components/TypeToConfirmDialog/TypeToConfirmDialog.tsx b/packages/manager/src/components/TypeToConfirmDialog/TypeToConfirmDialog.tsx index bd6a89ab5c7..883a2d5cc48 100644 --- a/packages/manager/src/components/TypeToConfirmDialog/TypeToConfirmDialog.tsx +++ b/packages/manager/src/components/TypeToConfirmDialog/TypeToConfirmDialog.tsx @@ -25,6 +25,7 @@ interface EntityInfo { | 'Linode' | 'Load Balancer' | 'NodeBalancer' + | 'Placement Group' | 'Subnet' | 'VPC' | 'Volume'; @@ -49,6 +50,7 @@ export const TypeToConfirmDialog = (props: CombinedProps) => { children, entity, errors, + inputProps, label, loading, onClick, @@ -120,6 +122,7 @@ export const TypeToConfirmDialog = (props: CombinedProps) => { data-testid={'dialog-confirm-text-input'} expand hideInstructions={entity.subType === 'CloseAccount'} + inputProps={inputProps} label={label} placeholder={entity.subType === 'CloseAccount' ? 'Username' : ''} textFieldStyle={textFieldStyle} diff --git a/packages/manager/src/features/PlacementGroups/PlacementGroupsDeleteModal.test.tsx b/packages/manager/src/features/PlacementGroups/PlacementGroupsDeleteModal.test.tsx new file mode 100644 index 00000000000..929e4f21f55 --- /dev/null +++ b/packages/manager/src/features/PlacementGroups/PlacementGroupsDeleteModal.test.tsx @@ -0,0 +1,125 @@ +import { fireEvent } from '@testing-library/react'; +import * as React from 'react'; + +import { linodeFactory, placementGroupFactory } from 'src/factories'; +import { renderWithTheme } from 'src/utilities/testHelpers'; + +import { PlacementGroupsDeleteModal } from './PlacementGroupsDeleteModal'; + +const queryMocks = vi.hoisted(() => ({ + useAllLinodesQuery: vi.fn().mockReturnValue({}), + useDeletePlacementGroup: vi.fn().mockReturnValue({ + mutateAsync: vi.fn().mockResolvedValue({}), + reset: vi.fn(), + }), + useParams: vi.fn().mockReturnValue({}), + usePlacementGroupQuery: vi.fn().mockReturnValue({}), +})); + +vi.mock('react-router-dom', async () => { + const actual = await vi.importActual('react-router-dom'); + return { + ...actual, + useParams: queryMocks.useParams, + }; +}); + +vi.mock('src/queries/placementGroups', async () => { + const actual = await vi.importActual('src/queries/placementGroups'); + return { + ...actual, + useDeletePlacementGroup: queryMocks.useDeletePlacementGroup, + usePlacementGroupQuery: queryMocks.usePlacementGroupQuery, + }; +}); + +vi.mock('src/queries/linodes/linodes', async () => { + const actual = await vi.importActual('src/queries/linodes/linodes'); + return { + ...actual, + useAllLinodesQuery: queryMocks.useAllLinodesQuery, + }; +}); + +const props = { + onClose: vi.fn(), + open: true, +}; + +describe('PlacementGroupsDeleteModal', () => { + beforeAll(() => { + queryMocks.useParams.mockReturnValue({ + id: '1', + }); + queryMocks.useAllLinodesQuery.mockReturnValue({ + data: [ + linodeFactory.build({ + id: 1, + label: 'test-linode', + }), + ], + }); + }); + + it('should render the right form elements', () => { + queryMocks.usePlacementGroupQuery.mockReturnValue({ + data: placementGroupFactory.build({ + affinity_type: 'anti_affinity', + id: 1, + label: 'PG-to-delete', + linode_ids: [1], + }), + }); + + const { getByRole, getByTestId, getByText } = renderWithTheme( + + ); + + expect( + getByRole('heading', { + name: 'Delete Placement Group PG-to-delete (Anti-affinity)', + }) + ).toBeInTheDocument(); + expect( + getByText( + 'Linodes assigned to Placement Group PG-to-delete (Anti-affinity)' + ) + ).toBeInTheDocument(); + expect(getByTestId('assigned-linodes')).toContainElement( + getByText('test-linode') + ); + expect(getByTestId('textfield-input')).toBeDisabled(); + expect(getByRole('button', { name: 'Close' })).toBeInTheDocument(); + expect(getByRole('button', { name: 'Cancel' })).toBeInTheDocument(); + expect(getByRole('button', { name: 'Delete' })).toBeDisabled(); + }); + + it("should be enabled when there's no assigned linodes", () => { + queryMocks.usePlacementGroupQuery.mockReturnValue({ + data: placementGroupFactory.build({ + affinity_type: 'anti_affinity', + id: 1, + label: 'PG-to-delete', + linode_ids: [], + }), + }); + const { getByRole, getByTestId, getByText } = renderWithTheme( + + ); + + expect(getByText('No Linodes assigned to this Placement Group.')); + + const textField = getByTestId('textfield-input'); + const deleteButton = getByRole('button', { name: 'Delete' }); + + expect(textField).toBeEnabled(); + expect(deleteButton).toBeDisabled(); + + fireEvent.change(textField, { target: { value: 'PG-to-delete' } }); + + expect(deleteButton).toBeEnabled(); + fireEvent.click(deleteButton); + + expect(queryMocks.useDeletePlacementGroup).toHaveBeenCalled(); + }); +}); diff --git a/packages/manager/src/features/PlacementGroups/PlacementGroupsDeleteModal.tsx b/packages/manager/src/features/PlacementGroups/PlacementGroupsDeleteModal.tsx new file mode 100644 index 00000000000..af7c99be0f4 --- /dev/null +++ b/packages/manager/src/features/PlacementGroups/PlacementGroupsDeleteModal.tsx @@ -0,0 +1,163 @@ +import { AFFINITY_TYPES } from '@linode/api-v4'; +import * as React from 'react'; +import { useParams } from 'react-router-dom'; + +import { Button } from 'src/components/Button/Button'; +import { List } from 'src/components/List'; +import { ListItem } from 'src/components/ListItem'; +import { Notice } from 'src/components/Notice/Notice'; +import { RemovableSelectionsList } from 'src/components/RemovableSelectionsList/RemovableSelectionsList'; +import { TypeToConfirmDialog } from 'src/components/TypeToConfirmDialog/TypeToConfirmDialog'; +import { Typography } from 'src/components/Typography'; +import { usePlacementGroupData } from 'src/hooks/usePlacementGroupsData'; +import { + useDeletePlacementGroup, + usePlacementGroupQuery, + useUnassignLinodesFromPlacementGroup, +} from 'src/queries/placementGroups'; + +import type { + Linode, + UnassignLinodesFromPlacementGroupPayload, +} from '@linode/api-v4'; + +interface Props { + onClose: () => void; + open: boolean; +} + +export const PlacementGroupsDeleteModal = (props: Props) => { + const { onClose, open } = props; + const { id } = useParams<{ id: string }>(); + const { data: selectedPlacementGroup } = usePlacementGroupQuery(+id); + const { + assignedLinodes, + isLoading: placementGroupDataLoading, + linodesCount: assignedLinodesCount, + } = usePlacementGroupData({ + placementGroup: selectedPlacementGroup, + }); + const { + error: deletePlacementError, + isLoading: deletePlacementLoading, + mutateAsync: deletePlacementGroup, + reset: resetDeletePlacementGroup, + } = useDeletePlacementGroup(selectedPlacementGroup?.id ?? -1); + const { + error: unassignLinodeError, + isLoading: unassignLinodeLoading, + mutateAsync: unassignLinodes, + reset: resetUnassignLinodes, + } = useUnassignLinodesFromPlacementGroup(selectedPlacementGroup?.id ?? -1); + + const error = deletePlacementError || unassignLinodeError; + + React.useEffect(() => { + if (open) { + resetDeletePlacementGroup(); + resetUnassignLinodes(); + } + }, [open, resetUnassignLinodes, resetDeletePlacementGroup]); + + const handleUnassignLinode = async (linode: Linode) => { + const payload: UnassignLinodesFromPlacementGroupPayload = { + linodes: [linode.id], + }; + + await unassignLinodes(payload); + }; + + const onDelete = async () => { + await deletePlacementGroup(); + onClose(); + }; + + const placementGroupLabel = selectedPlacementGroup + ? `Placement Group ${selectedPlacementGroup?.label} (${ + AFFINITY_TYPES[selectedPlacementGroup.affinity_type] + })` + : 'Placement Group'; + + const isDisabled = !selectedPlacementGroup || assignedLinodesCount > 0; + + return ( + + {error && ( + + )} + + + + Warning: + + ({ + '& > li': { + display: 'list-item', + fontSize: '0.875rem', + pb: 0, + pl: 0, + }, + listStyle: 'disc', + ml: theme.spacing(2), + mt: theme.spacing(), + })} + > + + Deleting a placement group is permanent and cannot be undone. + + + You need to unassign all Linodes before deleting a placement group. + + + + ( + + )} + headerText={`Linodes assigned to ${placementGroupLabel}`} + id="assigned-linodes" + maxWidth={540} + noDataText="No Linodes assigned to this Placement Group." + onRemove={handleUnassignLinode} + selectionData={assignedLinodes ?? []} + sx={{ mb: 3, mt: 1 }} + /> + + ); +}; diff --git a/packages/manager/src/features/PlacementGroups/PlacementGroupsDetail/PlacementGroupsDetail.tsx b/packages/manager/src/features/PlacementGroups/PlacementGroupsDetail/PlacementGroupsDetail.tsx index 8cddb981a5d..ff2e103a72b 100644 --- a/packages/manager/src/features/PlacementGroups/PlacementGroupsDetail/PlacementGroupsDetail.tsx +++ b/packages/manager/src/features/PlacementGroups/PlacementGroupsDetail/PlacementGroupsDetail.tsx @@ -26,7 +26,7 @@ export const PlacementGroupsDetail = () => { const flags = useFlags(); const { id, tab } = useParams<{ id: string; tab?: string }>(); const history = useHistory(); - const placementGroupId = Number(id); + const placementGroupId = +id; const { data: placementGroup, diff --git a/packages/manager/src/features/PlacementGroups/PlacementGroupsLanding/PlacementGroupsLanding.tsx b/packages/manager/src/features/PlacementGroups/PlacementGroupsLanding/PlacementGroupsLanding.tsx index df3e582ed2e..9728225396e 100644 --- a/packages/manager/src/features/PlacementGroups/PlacementGroupsLanding/PlacementGroupsLanding.tsx +++ b/packages/manager/src/features/PlacementGroups/PlacementGroupsLanding/PlacementGroupsLanding.tsx @@ -22,6 +22,7 @@ import { usePlacementGroupsQuery } from 'src/queries/placementGroups'; import { getAPIErrorOrDefault } from 'src/utilities/errorUtils'; import { PlacementGroupsCreateDrawer } from '../PlacementGroupsCreateDrawer'; +import { PlacementGroupsDeleteModal } from '../PlacementGroupsDeleteModal'; import { PlacementGroupsRenameDrawer } from '../PlacementGroupsRenameDrawer'; import { PlacementGroupsLandingEmptyState } from './PlacementGroupsLandingEmptyState'; import { PlacementGroupsRow } from './PlacementGroupsRow'; @@ -75,15 +76,16 @@ export const PlacementGroupsLanding = React.memo(() => { const handleDeletePlacementGroup = (placementGroup: PlacementGroup) => { setSelectedPlacementGroup(placementGroup); + history.replace(`/placement-groups/delete/${placementGroup.id}`); }; const onClosePlacementGroupDrawer = () => { history.replace('/placement-groups'); - setSelectedPlacementGroup(undefined); }; const isPlacementGroupCreateDrawerOpen = location.pathname.endsWith('create'); const isPlacementGroupRenameDrawerOpen = location.pathname.includes('rename'); + const isPlacementGroupDeleteModalOpen = location.pathname.includes('delete'); if (isLoading) { return ; @@ -206,7 +208,10 @@ export const PlacementGroupsLanding = React.memo(() => { open={isPlacementGroupRenameDrawerOpen} selectedPlacementGroup={selectedPlacementGroup} /> - {/* TODO VM_Placement: add delete dialog */} + ); }); diff --git a/packages/manager/src/features/PlacementGroups/PlacementGroupsLanding/PlacementGroupsRow.tsx b/packages/manager/src/features/PlacementGroups/PlacementGroupsLanding/PlacementGroupsRow.tsx index d8bc510db5a..55d778aae5f 100644 --- a/packages/manager/src/features/PlacementGroups/PlacementGroupsLanding/PlacementGroupsRow.tsx +++ b/packages/manager/src/features/PlacementGroups/PlacementGroupsLanding/PlacementGroupsRow.tsx @@ -1,9 +1,9 @@ import { AFFINITY_TYPES } from '@linode/api-v4'; import React from 'react'; -import { Link } from 'react-router-dom'; import { Hidden } from 'src/components/Hidden'; import { InlineMenuAction } from 'src/components/InlineMenuAction/InlineMenuAction'; +import { Link } from 'src/components/Link'; import { List } from 'src/components/List'; import { ListItem } from 'src/components/ListItem'; import { TableCell } from 'src/components/TableCell'; diff --git a/packages/manager/src/features/PlacementGroups/PlacementGroupsUnassignModal.tsx b/packages/manager/src/features/PlacementGroups/PlacementGroupsUnassignModal.tsx index 9f6093f7cc5..3d1ac69bb1c 100644 --- a/packages/manager/src/features/PlacementGroups/PlacementGroupsUnassignModal.tsx +++ b/packages/manager/src/features/PlacementGroups/PlacementGroupsUnassignModal.tsx @@ -25,11 +25,11 @@ export const PlacementGroupsUnassignModal = (props: Props) => { error, isLoading, mutateAsync: unassignLinodes, - } = useUnassignLinodesFromPlacementGroup(Number(placementGroupId) ?? -1); - const { data: selectedLinode } = useLinodeQuery(Number(linodeId) ?? -1); + } = useUnassignLinodesFromPlacementGroup(+placementGroupId ?? -1); + const { data: selectedLinode } = useLinodeQuery(+linodeId ?? -1); const payload: UnassignLinodesFromPlacementGroupPayload = { - linodes: [Number(linodeId) ?? -1], + linodes: [+linodeId ?? -1], }; const onUnassign = async () => { diff --git a/packages/manager/src/features/PlacementGroups/index.tsx b/packages/manager/src/features/PlacementGroups/index.tsx index 5a94d394c1c..b8e2e1f3b2b 100644 --- a/packages/manager/src/features/PlacementGroups/index.tsx +++ b/packages/manager/src/features/PlacementGroups/index.tsx @@ -36,6 +36,11 @@ export const PlacementGroups = () => { exact path={`${path}/rename/:id`} /> + { - if (req.params.placementGroupId === 'undefined') { + if (req.params.placementGroupId === '-1') { return res(ctx.status(404)); } diff --git a/packages/manager/src/queries/placementGroups.ts b/packages/manager/src/queries/placementGroups.ts index 3f2e1f26108..a1952724458 100644 --- a/packages/manager/src/queries/placementGroups.ts +++ b/packages/manager/src/queries/placementGroups.ts @@ -17,7 +17,6 @@ import { useMutation, useQuery, useQueryClient } from 'react-query'; import { getAll } from 'src/utilities/getAll'; -import { queryKey as LINODES_QUERY_KEY } from './linodes/linodes'; import { queryKey as PROFILE_QUERY_KEY } from './profile'; import type { @@ -119,23 +118,7 @@ export const useAssignLinodesToPlacementGroup = (placementGroupId: number) => { >({ mutationFn: (data) => assignLinodesToPlacementGroup(placementGroupId, data), onSuccess: (updatedPlacementGroup) => { - // Invalidate placement group linodes - queryClient.invalidateQueries([ - queryKey, - 'placement-group', - placementGroupId, - 'linodes', - ]); - - // Invalidate linode placement group data - queryClient.invalidateQueries([ - LINODES_QUERY_KEY, - 'linode', - updatedPlacementGroup.linode_ids[0], - 'placement_groups', - ]); - - // Set the updated placement group + queryClient.invalidateQueries([queryKey, 'paginated']); queryClient.setQueryData( [queryKey, 'placement-group', placementGroupId], updatedPlacementGroup From 8e5bb022d9da372aac18737f60068eb229619205 Mon Sep 17 00:00:00 2001 From: cpathipa <119517080+cpathipa@users.noreply.github.com> Date: Fri, 16 Feb 2024 13:34:06 -0600 Subject: [PATCH 05/37] upcoming: [M3-7694] - OBJ Multi Cluster Copy updates (#10188) * Remove text "S3 Endpoint" * Update Error message in Add / Edit Access Key Drawer * Add tooltip and change column name "None" to "No Access" * Added changeset: OBJ Multi Cluster Copy updates. * Update packages/manager/.changeset/pr-10188-upcoming-features-1707837776464.md Co-authored-by: Mariah Jacobs <114685994+mjac0bs@users.noreply.github.com> * Update packages/manager/src/features/ObjectStorage/AccessKeyLanding/LimitedAccessControls.tsx Co-authored-by: Mariah Jacobs <114685994+mjac0bs@users.noreply.github.com> * Hide copy all when one host name exists * Adjust styles for hostname label * Adjust padding --------- Co-authored-by: Mariah Jacobs <114685994+mjac0bs@users.noreply.github.com> --- ...r-10188-upcoming-features-1707837776464.md | 5 +++ .../AccessKeyTable/AccessKeyTable.tsx | 5 +-- .../BucketPermissionsTable.tsx | 11 +++-- .../{CopyAll.tsx => CopyAllHostnames.tsx} | 40 ++++++++++--------- .../AccessKeyLanding/HostNamesDrawer.test.tsx | 4 +- .../AccessKeyLanding/HostNamesDrawer.tsx | 12 ++---- .../LimitedAccessControls.tsx | 31 +++++++++++++- .../AccessKeyLanding/OMC_AccessKeyDrawer.tsx | 22 ++++++++-- .../SecretTokenDialog/SecretTokenDialog.tsx | 26 +++++++----- .../src/objectStorageKeys.schema.ts | 7 +++- 10 files changed, 113 insertions(+), 50 deletions(-) create mode 100644 packages/manager/.changeset/pr-10188-upcoming-features-1707837776464.md rename packages/manager/src/features/ObjectStorage/AccessKeyLanding/{CopyAll.tsx => CopyAllHostnames.tsx} (50%) diff --git a/packages/manager/.changeset/pr-10188-upcoming-features-1707837776464.md b/packages/manager/.changeset/pr-10188-upcoming-features-1707837776464.md new file mode 100644 index 00000000000..c61aa78b755 --- /dev/null +++ b/packages/manager/.changeset/pr-10188-upcoming-features-1707837776464.md @@ -0,0 +1,5 @@ +--- +"@linode/manager": Upcoming Features +--- + +Update OBJ Multi-Cluster copy ([#10188](https://github.com/linode/manager/pull/10188)) diff --git a/packages/manager/src/features/ObjectStorage/AccessKeyLanding/AccessKeyTable/AccessKeyTable.tsx b/packages/manager/src/features/ObjectStorage/AccessKeyLanding/AccessKeyTable/AccessKeyTable.tsx index 44120fe3f69..3a609d63c13 100644 --- a/packages/manager/src/features/ObjectStorage/AccessKeyLanding/AccessKeyTable/AccessKeyTable.tsx +++ b/packages/manager/src/features/ObjectStorage/AccessKeyLanding/AccessKeyTable/AccessKeyTable.tsx @@ -7,19 +7,16 @@ import { styled } from '@mui/material/styles'; import React, { useState } from 'react'; import { Table } from 'src/components/Table'; - +import { TableBody } from 'src/components/TableBody'; import { TableCell } from 'src/components/TableCell'; import { TableHead } from 'src/components/TableHead'; import { TableRow } from 'src/components/TableRow'; -import { TableBody } from 'src/components/TableBody'; - import { useAccountManagement } from 'src/hooks/useAccountManagement'; import { useFlags } from 'src/hooks/useFlags'; import { isFeatureEnabled } from 'src/utilities/accountCapabilities'; import { HostNamesDrawer } from '../HostNamesDrawer'; import { OpenAccessDrawer } from '../types'; - import { AccessKeyTableBody } from './AccessKeyTableBody'; export interface AccessKeyTableProps { diff --git a/packages/manager/src/features/ObjectStorage/AccessKeyLanding/BucketPermissionsTable.tsx b/packages/manager/src/features/ObjectStorage/AccessKeyLanding/BucketPermissionsTable.tsx index bb3e41a7dc0..9995bade45d 100644 --- a/packages/manager/src/features/ObjectStorage/AccessKeyLanding/BucketPermissionsTable.tsx +++ b/packages/manager/src/features/ObjectStorage/AccessKeyLanding/BucketPermissionsTable.tsx @@ -86,13 +86,15 @@ export const BucketPermissionsTable = React.memo((props: Props) => { return ( Region Bucket - None + + No Access + Read Only @@ -170,7 +172,10 @@ export const BucketPermissionsTable = React.memo((props: Props) => { key={scopeName} mode={mode} > - + {regionsLookup[thisScope.region ?? '']?.label} diff --git a/packages/manager/src/features/ObjectStorage/AccessKeyLanding/CopyAll.tsx b/packages/manager/src/features/ObjectStorage/AccessKeyLanding/CopyAllHostnames.tsx similarity index 50% rename from packages/manager/src/features/ObjectStorage/AccessKeyLanding/CopyAll.tsx rename to packages/manager/src/features/ObjectStorage/AccessKeyLanding/CopyAllHostnames.tsx index 521b73b7788..a2949093775 100644 --- a/packages/manager/src/features/ObjectStorage/AccessKeyLanding/CopyAll.tsx +++ b/packages/manager/src/features/ObjectStorage/AccessKeyLanding/CopyAllHostnames.tsx @@ -8,12 +8,13 @@ import { InputLabel } from 'src/components/InputLabel'; import { Tooltip } from 'src/components/Tooltip'; export interface Props { + hideShowAll?: boolean; text: string; } -export const CopyAll = (props: Props) => { +export const CopyAllHostnames = (props: Props) => { const [copied, setCopied] = React.useState(false); - const { text } = props; + const { hideShowAll = false, text } = props; const handleIconClick = () => { setCopied(true); @@ -23,28 +24,31 @@ export const CopyAll = (props: Props) => { return ( - S3 Endpoint Hostnames - - S3 Endpoint Hostnames + {!hideShowAll && ( + - Copy all - - + + Copy all + + + )} ); }; const StyledBox = styled(Box, { label: 'StyledBox' })(({ theme }) => ({ - borderColor: theme.name === 'light' ? '#ccc' : '#222', + borderColor: theme.name === 'light' ? theme.color.grey3 : theme.color.black, display: 'flex', justifyContent: 'space-between', + marginBottom: theme.spacing(1), })); diff --git a/packages/manager/src/features/ObjectStorage/AccessKeyLanding/HostNamesDrawer.test.tsx b/packages/manager/src/features/ObjectStorage/AccessKeyLanding/HostNamesDrawer.test.tsx index e0625281e98..7aac34288ce 100644 --- a/packages/manager/src/features/ObjectStorage/AccessKeyLanding/HostNamesDrawer.test.tsx +++ b/packages/manager/src/features/ObjectStorage/AccessKeyLanding/HostNamesDrawer.test.tsx @@ -53,12 +53,12 @@ describe('HostNamesDrawer', () => { ).toBeInTheDocument(); expect( screen.getByRole('button', { - name: 'Copy S3 Endpoint: Atlanta, GA: endpoint2 to clipboard', + name: 'Copy Atlanta, GA: endpoint2 to clipboard', }) ).toBeInTheDocument(); expect( screen.getByRole('button', { - name: 'Copy S3 Endpoint: Newark, NJ: endpoint1 to clipboard', + name: 'Copy Newark, NJ: endpoint1 to clipboard', }) ).toBeInTheDocument(); }); diff --git a/packages/manager/src/features/ObjectStorage/AccessKeyLanding/HostNamesDrawer.tsx b/packages/manager/src/features/ObjectStorage/AccessKeyLanding/HostNamesDrawer.tsx index d5534b13e31..9fd21ecd033 100644 --- a/packages/manager/src/features/ObjectStorage/AccessKeyLanding/HostNamesDrawer.tsx +++ b/packages/manager/src/features/ObjectStorage/AccessKeyLanding/HostNamesDrawer.tsx @@ -7,7 +7,7 @@ import { Drawer } from 'src/components/Drawer'; import { useRegionsQuery } from 'src/queries/regions'; import { getRegionsByRegionId } from 'src/utilities/regions'; -import { CopyAll } from './CopyAll'; +import { CopyAllHostnames } from './CopyAllHostnames'; interface Props { onClose: () => void; @@ -27,14 +27,12 @@ export const HostNamesDrawer = (props: Props) => { return ( ({ marginTop: theme.spacing(3) })}> - - `S3 Endpoint: ${regionsLookup[region.id]?.label}: ${ - region.s3_endpoint - }` + `${regionsLookup[region.id]?.label}: ${region.s3_endpoint}` ) .join('\n') ?? '' } @@ -49,13 +47,11 @@ export const HostNamesDrawer = (props: Props) => { > {regions.map((region, index) => ( ))} diff --git a/packages/manager/src/features/ObjectStorage/AccessKeyLanding/LimitedAccessControls.tsx b/packages/manager/src/features/ObjectStorage/AccessKeyLanding/LimitedAccessControls.tsx index ccab6a2e5c4..04d70a725cc 100644 --- a/packages/manager/src/features/ObjectStorage/AccessKeyLanding/LimitedAccessControls.tsx +++ b/packages/manager/src/features/ObjectStorage/AccessKeyLanding/LimitedAccessControls.tsx @@ -6,12 +6,28 @@ import { Toggle } from 'src/components/Toggle/Toggle'; import { Typography } from 'src/components/Typography'; import { useAccountManagement } from 'src/hooks/useAccountManagement'; import { useFlags } from 'src/hooks/useFlags'; +import { TooltipIcon } from 'src/components/TooltipIcon'; import { isFeatureEnabled } from 'src/utilities/accountCapabilities'; import { AccessTable } from './AccessTable'; import { BucketPermissionsTable } from './BucketPermissionsTable'; import { MODE } from './types'; +type LabelWithTooltipProps = { + labelText: string; + tooltipText: string; +}; + +const LabelWithTooltip = ({ + labelText, + tooltipText, +}: LabelWithTooltipProps) => ( + + {labelText} + {tooltipText && } + +); + interface Props { bucket_access: Scope[] | null; checked: boolean; @@ -36,6 +52,10 @@ export const LimitedAccessControls = React.memo((props: Props) => { return ( <> ({ + marginTop: theme.spacing(0.5), + marginBottom: theme.spacing(0.5), + })} control={ { onChange={handleToggle} /> } - label={'Limited Access'} + label={ + isObjMultiClusterEnabled ? ( + + ) : ( + 'Limited Access' + ) + } /> Limited access keys can list all buckets, regardless of access. They can diff --git a/packages/manager/src/features/ObjectStorage/AccessKeyLanding/OMC_AccessKeyDrawer.tsx b/packages/manager/src/features/ObjectStorage/AccessKeyLanding/OMC_AccessKeyDrawer.tsx index a99f0d036ab..6231553e59a 100644 --- a/packages/manager/src/features/ObjectStorage/AccessKeyLanding/OMC_AccessKeyDrawer.tsx +++ b/packages/manager/src/features/ObjectStorage/AccessKeyLanding/OMC_AccessKeyDrawer.tsx @@ -7,8 +7,11 @@ import { Scope, UpdateObjectStorageKeyRequest, } from '@linode/api-v4/lib/object-storage'; -import { createObjectStorageKeysSchema } from '@linode/validation/lib/objectStorageKeys.schema'; -import { useFormik, FormikProps } from 'formik'; +import { + createObjectStorageKeysSchema, + updateObjectStorageKeysSchema, +} from '@linode/validation/lib/objectStorageKeys.schema'; +import { FormikProps, useFormik } from 'formik'; import React, { useEffect, useState } from 'react'; import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel'; @@ -166,7 +169,9 @@ export const OMC_AccessKeyDrawer = (props: AccessKeyDrawerProps) => { }, validateOnBlur: true, validateOnChange: false, - validationSchema: createObjectStorageKeysSchema, + validationSchema: createMode + ? createObjectStorageKeysSchema + : updateObjectStorageKeysSchema, }); const isSaveDisabled = @@ -295,6 +300,17 @@ export const OMC_AccessKeyDrawer = (props: AccessKeyDrawerProps) => { required selectedRegion={formik.values.regions} /> + {createMode && ( + ({ + marginTop: theme.spacing(2), + })} + > + Unlimited S3 access key can be used to create buckets in the + selected region using S3 Endpoint returned on successful creation + of the key. + + )} {createMode && !bucketsError && ( { const { objectStorageKey, onClose, open, title, value } = props; + const { data: regionsData } = useRegionsQuery(); + const regionsLookup = regionsData && getRegionsByRegionId(regionsData); + const flags = useFlags(); const { account } = useAccountManagement(); @@ -73,11 +78,17 @@ export const SecretTokenDialog = (props: Props) => { /> {isObjMultiClusterEnabled && (
- `S3 Endpoint: ${region.id}: ${region.s3_endpoint}` + (region) => + `${regionsLookup?.[region.id]?.label}: ${ + region.s3_endpoint + }` ) .join('\n') ?? '' } @@ -87,23 +98,20 @@ export const SecretTokenDialog = (props: Props) => { {isObjMultiClusterEnabled && ( ({ - '.copyIcon': { - marginRight: 0, - paddingRight: 0, - }, backgroundColor: theme.bg.main, border: `1px solid ${theme.color.grey3}`, borderColor: theme.name === 'light' ? '#ccc' : '#222', - padding: theme.spacing(1), })} > {objectStorageKey?.regions.map((region, index) => ( ))} diff --git a/packages/validation/src/objectStorageKeys.schema.ts b/packages/validation/src/objectStorageKeys.schema.ts index b15dfe2ace8..4cb404e60ba 100644 --- a/packages/validation/src/objectStorageKeys.schema.ts +++ b/packages/validation/src/objectStorageKeys.schema.ts @@ -10,7 +10,7 @@ export const createObjectStorageKeysSchema = object({ .trim(), regions: array() .of(string()) - .min(1, 'Regions must include at least one region') + .min(1, 'Select at least one region to continue') .notRequired(), }); @@ -22,6 +22,9 @@ export const updateObjectStorageKeysSchema = object({ .trim(), regions: array() .of(string()) - .min(1, 'Regions must include at least one region') + .min( + 1, + 'You need to select at least one region. To delete all keys, go to the Access Keys page in Cloud Manager and select Revoke.' + ) .notRequired(), }); From 9e03e40d6ff72d9535d55d2fd98c2e400f7dbed7 Mon Sep 17 00:00:00 2001 From: Mariah Jacobs <114685994+mjac0bs@users.noreply.github.com> Date: Tue, 20 Feb 2024 11:59:31 -0700 Subject: [PATCH 06/37] upcoming: [M3-7775] - Disable ability to edit or delete a proxy user via User Profile page (#10202) * Disable fields and buttons on proxy user's user profile page * Separate Display and User Profile test specs; add coverage * Finish test coverage * Clean up * Meant to push the changesets too * Remove proxy user language --- .../pr-10202-tests-1708119481596.md | 5 + ...r-10202-upcoming-features-1708119409383.md | 5 + ...rname.spec.ts => display-settings.spec.ts} | 54 +--- .../e2e/core/account/user-profile.spec.ts | 283 ++++++++++++++++++ .../manager/src/features/Account/constants.ts | 3 + .../DisplaySettings/DisplaySettings.tsx | 8 +- .../src/features/Users/UserProfile.tsx | 45 +-- 7 files changed, 329 insertions(+), 74 deletions(-) create mode 100644 packages/manager/.changeset/pr-10202-tests-1708119481596.md create mode 100644 packages/manager/.changeset/pr-10202-upcoming-features-1708119409383.md rename packages/manager/cypress/e2e/core/account/{change-username.spec.ts => display-settings.spec.ts} (73%) create mode 100644 packages/manager/cypress/e2e/core/account/user-profile.spec.ts diff --git a/packages/manager/.changeset/pr-10202-tests-1708119481596.md b/packages/manager/.changeset/pr-10202-tests-1708119481596.md new file mode 100644 index 00000000000..3017a0cdc53 --- /dev/null +++ b/packages/manager/.changeset/pr-10202-tests-1708119481596.md @@ -0,0 +1,5 @@ +--- +"@linode/manager": Tests +--- + +Improve User Profile integration test coverage and separate from Display Settings coverage ([#10202](https://github.com/linode/manager/pull/10202)) diff --git a/packages/manager/.changeset/pr-10202-upcoming-features-1708119409383.md b/packages/manager/.changeset/pr-10202-upcoming-features-1708119409383.md new file mode 100644 index 00000000000..1d906c12174 --- /dev/null +++ b/packages/manager/.changeset/pr-10202-upcoming-features-1708119409383.md @@ -0,0 +1,5 @@ +--- +"@linode/manager": Upcoming Features +--- + +Disable ability to edit or delete a proxy user via User Profile page ([#10202](https://github.com/linode/manager/pull/10202)) diff --git a/packages/manager/cypress/e2e/core/account/change-username.spec.ts b/packages/manager/cypress/e2e/core/account/display-settings.spec.ts similarity index 73% rename from packages/manager/cypress/e2e/core/account/change-username.spec.ts rename to packages/manager/cypress/e2e/core/account/display-settings.spec.ts index a0374fc698f..a08f8e04b94 100644 --- a/packages/manager/cypress/e2e/core/account/change-username.spec.ts +++ b/packages/manager/cypress/e2e/core/account/display-settings.spec.ts @@ -8,10 +8,7 @@ import { makeFeatureFlagData } from 'support/util/feature-flags'; import { mockGetProfile } from 'support/intercepts/profile'; import { getProfile } from 'support/api/account'; import { interceptGetProfile } from 'support/intercepts/profile'; -import { - interceptGetUser, - mockUpdateUsername, -} from 'support/intercepts/account'; +import { mockUpdateUsername } from 'support/intercepts/account'; import { ui } from 'support/ui'; import { randomString } from 'support/util/random'; @@ -59,54 +56,7 @@ const verifyUsernameAndEmail = ( } }; -describe('username', () => { - /* - * - Validates username update flow via the user profile page using mocked data. - */ - it('can change username via user profile page', () => { - const newUsername = randomString(12); - - getProfile().then((profile) => { - const username = profile.body.username; - - interceptGetUser(username).as('getUser'); - mockUpdateUsername(username, newUsername).as('updateUsername'); - - cy.visitWithLogin(`account/users/${username}`); - cy.wait('@getUser'); - - cy.findByText('Username').should('be.visible'); - cy.findByText('Email').should('be.visible'); - cy.findByText('Delete User').should('be.visible'); - - cy.get('[id="username"]') - .should('be.visible') - .should('have.value', username) - .clear() - .type(newUsername); - - cy.get('[data-qa-textfield-label="Username"]') - .parent() - .parent() - .parent() - .within(() => { - ui.button - .findByTitle('Save') - .should('be.visible') - .should('be.enabled') - .click(); - }); - - cy.wait('@updateUsername'); - - // No confirmation gets shown on this page when changes are saved. - // Confirm that the text field has the correct value instead. - cy.get('[id="username"]') - .should('be.visible') - .should('have.value', newUsername); - }); - }); - +describe('Display Settings', () => { /* * - Validates username update flow via the profile display page using mocked data. */ diff --git a/packages/manager/cypress/e2e/core/account/user-profile.spec.ts b/packages/manager/cypress/e2e/core/account/user-profile.spec.ts new file mode 100644 index 00000000000..a7ffc031bc6 --- /dev/null +++ b/packages/manager/cypress/e2e/core/account/user-profile.spec.ts @@ -0,0 +1,283 @@ +import { accountUserFactory } from 'src/factories/accountUsers'; +import { getProfile } from 'support/api/account'; +import { + interceptGetUser, + mockGetUser, + mockGetUsers, + mockUpdateUsername, +} from 'support/intercepts/account'; +import { randomString } from 'support/util/random'; +import { ui } from 'support/ui'; +import { mockUpdateProfile } from 'support/intercepts/profile'; + +describe('User Profile', () => { + /* + * - Validates the flow of updating the username and email of the active account user via the User Profile page using mocked data. + */ + it('can change email and username of the active account', () => { + const newUsername = randomString(12); + const newEmail = `${newUsername}@example.com`; + + getProfile().then((profile) => { + const activeUsername = profile.body.username; + const activeEmail = profile.body.email; + + interceptGetUser(activeUsername).as('getUser'); + mockUpdateUsername(activeUsername, newUsername).as('updateUsername'); + mockUpdateProfile({ + ...profile.body, + email: newEmail, + }).as('updateEmail'); + + cy.visitWithLogin(`account/users/${activeUsername}`); + cy.wait('@getUser'); + + cy.findByText('Username').should('be.visible'); + cy.findByText('Email').should('be.visible'); + cy.findByText('Delete User').should('be.visible'); + + // Confirm the currently active user cannot be deleted. + ui.button + .findByTitle('Delete') + .should('be.visible') + .should('be.disabled') + .trigger('mouseover'); + // Click the button first, then confirm the tooltip is shown. + ui.tooltip + .findByText('You can\u{2019}t delete the currently active user.') + .should('be.visible'); + + // Confirm user can update their email before updating the username, since you cannot update a different user's (as determined by username) email. + cy.get('[id="email"]') + .should('be.visible') + .should('have.value', activeEmail) + .clear() + .type(newEmail); + + cy.get('[data-qa-textfield-label="Email"]') + .parent() + .parent() + .parent() + .within(() => { + ui.button + .findByTitle('Save') + .should('be.visible') + .should('be.enabled') + .click(); + }); + + cy.wait('@updateEmail'); + + // Confirm success notice displays. + cy.findByText('Email updated successfully').should('be.visible'); + + // Confirm user can update their username. + cy.get('[id="username"]') + .should('be.visible') + .should('have.value', activeUsername) + .clear() + .type(newUsername); + + cy.get('[data-qa-textfield-label="Username"]') + .parent() + .parent() + .parent() + .within(() => { + ui.button + .findByTitle('Save') + .should('be.visible') + .should('be.enabled') + .click(); + }); + + cy.wait('@updateUsername'); + + // No confirmation gets shown on this page when changes are saved. + // Confirm that the text field has the correct value instead. + cy.get('[id="username"]') + .should('be.visible') + .should('have.value', newUsername); + }); + }); + + /* + * - Validates the flow of updating the username and email of another user via the User Profile page using mocked data. + */ + it('can change the username but not email of another user account', () => { + const newUsername = randomString(12); + + getProfile().then((profile) => { + const additionalUsername = 'mock_user2'; + const mockAccountUsers = accountUserFactory.buildList(1, { + username: additionalUsername, + }); + const additionalUser = mockAccountUsers[0]; + + mockGetUsers(mockAccountUsers).as('getUsers'); + mockGetUser(additionalUser).as('getUser'); + mockUpdateUsername(additionalUsername, newUsername).as('updateUsername'); + + cy.visitWithLogin(`account/users/${additionalUsername}`); + + cy.wait('@getUser'); + + cy.findByText('Username').should('be.visible'); + cy.findByText('Email').should('be.visible'); + cy.findByText('Delete User').should('be.visible'); + ui.button.findByTitle('Delete').should('be.visible').should('be.enabled'); + + // Confirm email of another user cannot be updated. + cy.get('[id="email"]') + .should('be.visible') + .should('have.value', additionalUser.email) + .should('be.disabled') + .parent() + .parent() + .parent() + .within(() => { + ui.button + .findByAttribute('data-qa-help-button', 'true') + .should('be.visible') + .trigger('mouseover'); + // Click the button first, then confirm the tooltip is shown. + ui.tooltip + .findByText( + 'You can\u{2019}t change another user\u{2019}s email address.' + ) + .should('be.visible'); + }); + + cy.get('[data-qa-textfield-label="Email"]') + .parent() + .parent() + .parent() + .within(() => { + ui.button + .findByTitle('Save') + .should('be.visible') + .should('be.disabled') + .click(); + }); + + // Confirm username of another user can be updated. + cy.get('[id="username"]') + .should('be.visible') + .should('have.value', additionalUsername) + .clear() + .type(newUsername); + + cy.get('[data-qa-textfield-label="Username"]') + .parent() + .parent() + .parent() + .within(() => { + ui.button + .findByTitle('Save') + .should('be.visible') + .should('be.enabled') + .click(); + }); + + cy.wait('@updateUsername'); + + // No confirmation gets shown on this page when changes are saved. + // Confirm that the text field has the correct value instead. + cy.get('[id="username"]') + .should('be.visible') + .should('have.value', newUsername); + }); + }); + + /* + * - Validates disabled username and email flow for a proxy user via the User Profile page using mocked data. + */ + it('cannot change username or email for a proxy user or delete the proxy user', () => { + getProfile().then((profile) => { + const proxyUsername = 'proxy_user'; + const mockAccountUsers = accountUserFactory.buildList(1, { + username: proxyUsername, + user_type: 'proxy', + }); + + mockGetUsers(mockAccountUsers).as('getUsers'); + mockGetUser(mockAccountUsers[0]).as('getUser'); + + cy.visitWithLogin(`account/users/${proxyUsername}`); + + cy.wait('@getUser'); + + cy.findByText('Username').should('be.visible'); + cy.findByText('Email').should('be.visible'); + cy.findByText('Delete User').should('be.visible'); + + cy.get('[id="username"]') + .should('be.visible') + .should('have.value', proxyUsername) + .should('be.disabled') + .parent() + .parent() + .parent() + .within(() => { + ui.button + .findByAttribute('data-qa-help-button', 'true') + .should('be.visible') + .trigger('mouseover'); + // Click the button first, then confirm the tooltip is shown. + ui.tooltip + .findByText('This account type cannot update this field.') + .should('be.visible'); + }); + + cy.get('[data-qa-textfield-label="Username"]') + .parent() + .parent() + .parent() + .within(() => { + ui.button + .findByTitle('Save') + .should('be.visible') + .should('be.disabled'); + }); + + cy.get('[id="email"]') + .should('be.visible') + .should('be.disabled') + .parent() + .parent() + .parent() + .within(() => { + ui.button + .findByAttribute('data-qa-help-button', 'true') + .should('be.visible') + .trigger('mouseover'); + // Click the button first, then confirm the tooltip is shown. + ui.tooltip + .findByText('This account type cannot update this field.') + .should('be.visible'); + }); + + cy.get('[data-qa-textfield-label="Email"]') + .parent() + .parent() + .parent() + .within(() => { + ui.button + .findByTitle('Save') + .should('be.visible') + .should('be.disabled') + .click(); + }); + + // Confirms the proxy user cannot be deleted. + ui.button + .findByTitle('Delete') + .should('be.visible') + .should('be.disabled') + .trigger('mouseover'); + // Click the button first, then confirm the tooltip is shown. + ui.tooltip + .findByText('You can\u{2019}t delete a business partner user.') + .should('be.visible'); + }); + }); +}); diff --git a/packages/manager/src/features/Account/constants.ts b/packages/manager/src/features/Account/constants.ts index 0bb075f38d4..83ac50faa9c 100644 --- a/packages/manager/src/features/Account/constants.ts +++ b/packages/manager/src/features/Account/constants.ts @@ -22,3 +22,6 @@ export const CHILD_USER_CLOSE_ACCOUNT_TOOLTIP_TEXT = // TODO: Parent/Child: Requires updated copy... export const PARENT_SESSION_EXPIRED = 'Session expired. Please log in again to your business partner account.'; + +export const RESTRICTED_FIELD_TOOLTIP = + 'This account type cannot update this field.'; diff --git a/packages/manager/src/features/Profile/DisplaySettings/DisplaySettings.tsx b/packages/manager/src/features/Profile/DisplaySettings/DisplaySettings.tsx index cd45bec69f9..d86f9f66760 100644 --- a/packages/manager/src/features/Profile/DisplaySettings/DisplaySettings.tsx +++ b/packages/manager/src/features/Profile/DisplaySettings/DisplaySettings.tsx @@ -18,6 +18,7 @@ import { useMutateProfile, useProfile } from 'src/queries/profile'; import { ApplicationState } from 'src/store'; import { TimezoneForm } from './TimezoneForm'; +import { RESTRICTED_FIELD_TOOLTIP } from 'src/features/Account/constants'; export const DisplaySettings = () => { const theme = useTheme(); @@ -65,9 +66,6 @@ export const DisplaySettings = () => { ); - const restrictedProxyUserTooltip = - 'This account type cannot update this field.'; - return ( { profile?.restricted ? 'Restricted users cannot update their username. Please contact an account administrator.' : isProxyUser - ? restrictedProxyUserTooltip + ? RESTRICTED_FIELD_TOOLTIP : undefined } disabled={profile?.restricted || isProxyUser} @@ -138,7 +136,7 @@ export const DisplaySettings = () => { key={emailResetToken} label="Email" submitForm={updateEmail} - tooltipText={isProxyUser ? restrictedProxyUserTooltip : undefined} + tooltipText={isProxyUser ? RESTRICTED_FIELD_TOOLTIP : undefined} trimmed type="email" /> diff --git a/packages/manager/src/features/Users/UserProfile.tsx b/packages/manager/src/features/Users/UserProfile.tsx index 3a81a5be023..94dea27e373 100644 --- a/packages/manager/src/features/Users/UserProfile.tsx +++ b/packages/manager/src/features/Users/UserProfile.tsx @@ -9,13 +9,14 @@ import { CircleProgress } from 'src/components/CircleProgress'; import { DocumentTitleSegment } from 'src/components/DocumentTitle'; import { Notice } from 'src/components/Notice/Notice'; import { TextField } from 'src/components/TextField'; -import { TooltipIcon } from 'src/components/TooltipIcon'; import { Typography } from 'src/components/Typography'; +import { useAccountUser } from 'src/queries/accountUsers'; import { useProfile } from 'src/queries/profile'; import { getAPIErrorFor } from 'src/utilities/getAPIErrorFor'; import { UserDeleteConfirmationDialog } from './UserDeleteConfirmationDialog'; import { StyledTitle, StyledWrapper } from './UserProfile.styles'; +import { RESTRICTED_FIELD_TOOLTIP } from '../Account/constants'; interface UserProfileProps { accountErrors?: APIError[]; @@ -59,12 +60,15 @@ export const UserProfile = (props: UserProfileProps) => { } = props; const { data: profile } = useProfile(); + const { data: currentUser } = useAccountUser(username); const [ deleteConfirmDialogOpen, setDeleteConfirmDialogOpen, ] = React.useState(false); + const isProxyUserProfile = currentUser?.user_type === 'proxy'; + const renderProfileSection = () => { const hasAccountErrorFor = getAPIErrorFor( { username: 'Username' }, @@ -97,7 +101,11 @@ export const UserProfile = (props: UserProfileProps) => { /> )} { /> )} { Delete User - {profile?.username === originalUsername && ( - - )} Date: Tue, 20 Feb 2024 12:13:12 -0700 Subject: [PATCH 07/37] change: [M3-7598] - Update developer docs on components (#10198) * Update developer docs on components * Correct some punctuation and remove an old Storybook section on mdx --- docs/development-guide/02-component-structure.md | 6 +++++- docs/development-guide/04-component-library.md | 10 ++++------ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/docs/development-guide/02-component-structure.md b/docs/development-guide/02-component-structure.md index 55a0f57b14e..004e4ba0923 100644 --- a/docs/development-guide/02-component-structure.md +++ b/docs/development-guide/02-component-structure.md @@ -61,7 +61,9 @@ export const capitalize = (s: string) => { #### Composition -When building a large component, it is recommended to break it down and avoid writing several components within the same file. It improves readability and testability. Components should, in most cases, come with their own unit test, although they can be skipped if an e2e suite is covering the functionality. +When building a large component, it is recommended to break it down and avoid writing several components within the same file. It improves readability and testability. It is also best to avoid same-file render functions (e.g. `renderTableBody`), in favor of extracting the JSX into its own component. In addition to improved readability and testability, this practice makes components less brittle and more extensible. + +Components should, in most cases, come with their own unit test, although they can be skipped if an e2e suite is covering the functionality. Utilities should almost always feature a unit test. #### Styles @@ -85,6 +87,8 @@ export const interface MyComponentProps { const MyComponent = (props: MyComponentProps) { ... } ``` - When it comes to components located in the `src/features/` directory, you can use the name `Props` for their types or interfaces, unless exporting is necessary. In such cases, name the type or interface after the component name. +- Define props as required, rather than optional, as often as possible for data relying on API responses (which can be `undefined`). In the case of `undefined` props, error handling - such as early return statements - can be done in the HOC. This allows all child components to expect data, avoiding extra conditionals or convoluted logic. + #### Function Component Definition - Prefer function components over class components. diff --git a/docs/development-guide/04-component-library.md b/docs/development-guide/04-component-library.md index b66e19046eb..2be52331b2d 100644 --- a/docs/development-guide/04-component-library.md +++ b/docs/development-guide/04-component-library.md @@ -2,7 +2,7 @@ ## Material-UI -We use [Material-UI](https://mui.com/material-ui/getting-started/overview/) as the primary component library for Cloud Manager. The library contains many UI primitives like `` and `
- {cluster.control_plane.high_availability ? ( + {cluster.control_plane.high_availability && ( ({ borderColor: theme.color.green })} variant="outlined" /> - ) : null} + )}
{cluster.k8s_version} - {hasUpgrade ? ( + {hasUpgrade && ( - ) : null} + )}
diff --git a/packages/manager/src/features/Kubernetes/KubernetesClusterDetail/KubeSummaryPanel.tsx b/packages/manager/src/features/Kubernetes/KubernetesClusterDetail/KubeSummaryPanel.tsx index b90234ccb59..1b90a583ff5 100644 --- a/packages/manager/src/features/Kubernetes/KubernetesClusterDetail/KubeSummaryPanel.tsx +++ b/packages/manager/src/features/Kubernetes/KubernetesClusterDetail/KubeSummaryPanel.tsx @@ -170,8 +170,8 @@ export const KubeSummaryPanel = (props: Props) => { {cluster.control_plane.high_availability && ( ({ borderColor: theme.color.green })} variant="outlined" /> )} diff --git a/packages/manager/src/features/Linodes/LinodeEntityDetail.styles.ts b/packages/manager/src/features/Linodes/LinodeEntityDetail.styles.ts index 01b37413de4..47af5c1e3da 100644 --- a/packages/manager/src/features/Linodes/LinodeEntityDetail.styles.ts +++ b/packages/manager/src/features/Linodes/LinodeEntityDetail.styles.ts @@ -6,26 +6,15 @@ import { Theme } from '@mui/material/styles'; import { Link } from 'react-router-dom'; import { Box } from 'src/components/Box'; -import { Chip } from 'src/components/Chip'; import { CopyTooltip } from 'src/components/CopyTooltip/CopyTooltip'; import { TableCell } from 'src/components/TableCell'; import { TableRow } from 'src/components/TableRow'; import { Typography } from 'src/components/Typography'; -import { omittedProps } from 'src/utilities/omittedProps'; - -import type { HeaderProps } from './LinodeEntityDetailHeader'; // --------------------------------------------------------------------- // Header Styles // --------------------------------------------------------------------- -type StyledChipProps = Pick & { - hasSecondaryStatus: boolean; - isOffline: boolean; - isOther: boolean; - isRunning: boolean; -}; - export const StyledLink = styled(Link, { label: 'StyledLink' })( ({ theme }) => ({ '&:hover': { @@ -36,52 +25,6 @@ export const StyledLink = styled(Link, { label: 'StyledLink' })( }) ); -export const StyledChip = styled(Chip, { - label: 'StyledChip', - shouldForwardProp: omittedProps([ - 'isSummaryView', - 'hasSecondaryStatus', - 'isOffline', - 'isOther', - 'isRunning', - ]), -})( - ({ - hasSecondaryStatus, - isOffline, - isOther, - isRunning, - isSummaryView, - theme, - }) => ({ - '&:before': { - ...(isOffline && { - backgroundColor: theme.color.grey8, - }), - ...(isOther && { - backgroundColor: theme.color.orange, - }), - ...(isRunning && { - backgroundColor: theme.color.teal, - }), - }, - borderRadius: 0, - fontSize: '0.875rem', - height: theme.spacing(3), - letterSpacing: '.5px', - marginLeft: theme.spacing(2), - ...(hasSecondaryStatus && { - borderRight: `1px solid ${theme.borderColors.borderTypography}`, - paddingRight: `${theme.spacing(2)}`, - }), - ...(isSummaryView && { - [theme.breakpoints.down('lg')]: { - marginLeft: theme.spacing(), - }, - }), - }) -); - // --------------------------------------------------------------------- // Body Styles // --------------------------------------------------------------------- diff --git a/packages/manager/src/features/Linodes/LinodeEntityDetailHeader.tsx b/packages/manager/src/features/Linodes/LinodeEntityDetailHeader.tsx index f940664b6ef..b792be8fac7 100644 --- a/packages/manager/src/features/Linodes/LinodeEntityDetailHeader.tsx +++ b/packages/manager/src/features/Linodes/LinodeEntityDetailHeader.tsx @@ -1,5 +1,6 @@ import { Config } from '@linode/api-v4/lib'; import { LinodeBackups } from '@linode/api-v4/lib/linodes'; +import { Typography } from '@mui/material'; import { useTheme } from '@mui/material/styles'; import * as React from 'react'; import { useQueryClient } from 'react-query'; @@ -8,6 +9,8 @@ import { Box } from 'src/components/Box'; import { Button } from 'src/components/Button/Button'; import { EntityHeader } from 'src/components/EntityHeader/EntityHeader'; import { Hidden } from 'src/components/Hidden'; +import { Stack } from 'src/components/Stack'; +import { StatusIcon } from 'src/components/StatusIcon/StatusIcon'; import { TooltipIcon } from 'src/components/TooltipIcon'; import { TypographyProps } from 'src/components/Typography'; import { LinodeActionMenu } from 'src/features/Linodes/LinodesLanding/LinodeActionMenu/LinodeActionMenu'; @@ -17,8 +20,9 @@ import { queryKey as linodesQueryKey } from 'src/queries/linodes/linodes'; import { sendLinodeActionMenuItemEvent } from 'src/utilities/analytics'; import { VPC_REBOOT_MESSAGE } from '../VPCs/constants'; -import { StyledChip, StyledLink } from './LinodeEntityDetail.styles'; +import { StyledLink } from './LinodeEntityDetail.styles'; import { LinodeHandlers } from './LinodesLanding/LinodesLanding'; +import { getLinodeIconStatus } from './LinodesLanding/utils'; import type { Linode, LinodeType } from '@linode/api-v4/lib/linodes/types'; @@ -80,7 +84,6 @@ export const LinodeEntityDetailHeader = ( const isRunning = linodeStatus === 'running'; const isOffline = linodeStatus === 'stopped' || linodeStatus === 'offline'; - const isOther = !['offline', 'running', 'stopped'].includes(linodeStatus); const handleConsoleButtonClick = (id: number) => { sendLinodeActionMenuItemEvent('Launch Console'); @@ -146,18 +149,19 @@ export const LinodeEntityDetailHeader = ( variant={variant} > - + direction="row" + spacing={1.5} + sx={{ paddingX: 2 }} + > + + ({ fontFamily: theme.font.bold })}> + {formattedStatus} + + {isRebootNeeded && ( )} - {hasSecondaryStatus ? ( + {hasSecondaryStatus && ( - ) : null} + )} diff --git a/packages/manager/src/utilities/noneSingleOrMultipleWithChip.tsx b/packages/manager/src/utilities/noneSingleOrMultipleWithChip.tsx index 67b58fb2dcc..783d31a01dd 100644 --- a/packages/manager/src/utilities/noneSingleOrMultipleWithChip.tsx +++ b/packages/manager/src/utilities/noneSingleOrMultipleWithChip.tsx @@ -33,8 +33,8 @@ export const determineNoneSingleOrMultipleWithChip = ( From 9c88cb1ffb922411c5f5aca52f0860b623d2592b Mon Sep 17 00:00:00 2001 From: Alban Bailly <130582365+abailly-akamai@users.noreply.github.com> Date: Mon, 26 Feb 2024 10:06:17 -0500 Subject: [PATCH 21/37] change: [M3-7785] - Improve Dev Tools (#10220) * Initial commit - save work * No store * Active MSW icon color * Documentation update * Cleanup * Added changeset: Improve dev toolsUI * Feedback * fix overflow issue * improve clarity * feedback --- docs/development-guide/10-local-dev-tools.md | 18 +++++++- .../pr-10220-changed-1708622627827.md | 5 +++ .../manager/src/dev-tools/FeatureFlagTool.tsx | 14 +++++- .../manager/src/dev-tools/Preferences.tsx | 25 +++++++++++ .../src/dev-tools/ServiceWorkerTool.tsx | 4 +- .../manager/src/dev-tools/ThemeSelector.tsx | 45 +++++++++++++++++++ packages/manager/src/dev-tools/dev-tools.css | 12 ++++- packages/manager/src/dev-tools/dev-tools.tsx | 12 ++++- packages/manager/src/mocks/serverHandlers.ts | 36 ++++++++------- 9 files changed, 148 insertions(+), 23 deletions(-) create mode 100644 packages/manager/.changeset/pr-10220-changed-1708622627827.md create mode 100644 packages/manager/src/dev-tools/Preferences.tsx create mode 100644 packages/manager/src/dev-tools/ThemeSelector.tsx diff --git a/docs/development-guide/10-local-dev-tools.md b/docs/development-guide/10-local-dev-tools.md index 8dca8ebe66d..172269fb849 100644 --- a/docs/development-guide/10-local-dev-tools.md +++ b/docs/development-guide/10-local-dev-tools.md @@ -1,10 +1,24 @@ # Local Dev Tools -To facilitate development and debugging, Cloud Manager includes a "Dev Tools" mode. Currently this mode is used for feature flag toggling, data mocking, and environment switching. +To facilitate development and debugging, Cloud Manager includes a "Dev Tools" mode. Currently this mode is used for feature flag toggling, data mocking, and theme & environment switching. + +In order to access the dev tools, hover or click (mobile) on the 🛠 icon in the lower left corner of your browser window. The icon will be colored green if MSW is enabled. This mode is enabled by default while running the development server. To disable it, add `?dev-tools=false` to the URL, or write `dev-tools: false` to local storage. -This mode is disabled by default in production builds, but can be enabled by adding `?dev-tools=true` to the URL, or `dev-tools: true` to local storage. +This mode is disabled by default in production builds. + +## Feature Flags + +The display of the Flags in dev tools is defined in the `options` array in `FeatureFlagTool.tsx`. While it is convenient to add those switches to the dev tools, it is not always necessary as they can clutter the UI. Additionally, it is important to clean them up once the feature has been battle tested in production. + +The flags on/off values are stored in local storage for convenience and will be remembered on reload or app restart. + +By default, the boolean flags checkboxes represent their true values as returned by Launch Darkly (dev environment). Hitting the reset button will bring them back to those default values and clear local storage. + +## Theme Select + +The theme select in dev tools is a convenient way to store the theme choice while MSW is enabled (it won't affect your actual Application settings/preferences). The default is "system". ## Writing a new tool diff --git a/packages/manager/.changeset/pr-10220-changed-1708622627827.md b/packages/manager/.changeset/pr-10220-changed-1708622627827.md new file mode 100644 index 00000000000..5344aa3cf4e --- /dev/null +++ b/packages/manager/.changeset/pr-10220-changed-1708622627827.md @@ -0,0 +1,5 @@ +--- +"@linode/manager": Changed +--- + +Improve dev tools UI ([#10220](https://github.com/linode/manager/pull/10220)) diff --git a/packages/manager/src/dev-tools/FeatureFlagTool.tsx b/packages/manager/src/dev-tools/FeatureFlagTool.tsx index 7a5b7586832..26213e2d33d 100644 --- a/packages/manager/src/dev-tools/FeatureFlagTool.tsx +++ b/packages/manager/src/dev-tools/FeatureFlagTool.tsx @@ -1,4 +1,5 @@ import Grid from '@mui/material/Unstable_Grid2'; +import { useFlags as ldUseFlags } from 'launchdarkly-react-client-sdk'; import * as React from 'react'; import { useDispatch } from 'react-redux'; @@ -8,7 +9,6 @@ import { Dispatch } from 'src/hooks/types'; import { useFlags } from 'src/hooks/useFlags'; import { setMockFeatureFlags } from 'src/store/mockFeatureFlags'; import { getStorage, setStorage } from 'src/utilities/storage'; - const MOCK_FEATURE_FLAGS_STORAGE_KEY = 'devTools/mock-feature-flags'; const options: { flag: keyof Flags; label: string }[] = [ @@ -28,6 +28,7 @@ const options: { flag: keyof Flags; label: string }[] = [ export const FeatureFlagTool = withFeatureFlagProvider(() => { const dispatch: Dispatch = useDispatch(); const flags = useFlags(); + const ldFlags = ldUseFlags(); React.useEffect(() => { const storedFlags = getStorage(MOCK_FEATURE_FLAGS_STORAGE_KEY); @@ -48,6 +49,14 @@ export const FeatureFlagTool = withFeatureFlagProvider(() => { setStorage(MOCK_FEATURE_FLAGS_STORAGE_KEY, updatedFlags); }; + /** + * This will reset the flags values to the Launch Darkly defaults (as returned from the LD dev environment) + */ + const resetFlags = () => { + dispatch(setMockFeatureFlags(ldFlags)); + setStorage(MOCK_FEATURE_FLAGS_STORAGE_KEY, ''); + }; + return ( @@ -75,6 +84,9 @@ export const FeatureFlagTool = withFeatureFlagProvider(() => { ); })} + diff --git a/packages/manager/src/dev-tools/Preferences.tsx b/packages/manager/src/dev-tools/Preferences.tsx new file mode 100644 index 00000000000..de25a3a0216 --- /dev/null +++ b/packages/manager/src/dev-tools/Preferences.tsx @@ -0,0 +1,25 @@ +import LinkIcon from '@mui/icons-material/Link'; +import * as React from 'react'; + +export const Preferences = () => { + return ( + <> +

Preferences

+ + Open preference Modal + + + + ); +}; diff --git a/packages/manager/src/dev-tools/ServiceWorkerTool.tsx b/packages/manager/src/dev-tools/ServiceWorkerTool.tsx index 38190d8ccf0..6d7c6d70986 100644 --- a/packages/manager/src/dev-tools/ServiceWorkerTool.tsx +++ b/packages/manager/src/dev-tools/ServiceWorkerTool.tsx @@ -15,7 +15,9 @@ export const ServiceWorkerTool = () => { <> Mock Service Worker: - {isMSWEnabled ? 'Enabled' : 'Disabled'} + + {isMSWEnabled ? 'Enabled' : 'Disabled'} + { + const [mockTheme, setMockTheme] = React.useState('system'); + + React.useEffect(() => { + const storedTheme = getStorage(MOCK_THEME_STORAGE_KEY); + if (storedTheme) { + setMockTheme(storedTheme); + } + }, []); + + const handleSetTheme = (e: React.ChangeEvent) => { + const selectedValue = e.target.value as ThemeChoice; + + setMockTheme(selectedValue); + setStorage(MOCK_THEME_STORAGE_KEY, selectedValue); + window.location.reload(); + }; + + return ( + + +

MSW Theme Selector

+

+ (only when MSW is enabled) +

+
+ + + +
+ ); +}; diff --git a/packages/manager/src/dev-tools/dev-tools.css b/packages/manager/src/dev-tools/dev-tools.css index 535828c6756..23f3b0a5a28 100644 --- a/packages/manager/src/dev-tools/dev-tools.css +++ b/packages/manager/src/dev-tools/dev-tools.css @@ -10,13 +10,21 @@ width: 60px; transition: all 0.3s; z-index: 1; - overflow: auto; +} + +#dev-tools.mswEnabled svg { + color: #aaff00; } #dev-tools:hover { - height: 325px; + height: 375px; width: 100%; opacity: 0.9; + overflow: auto; +} + +#dev-tools:hover svg { + color: white; } #dev-tools .tools { diff --git a/packages/manager/src/dev-tools/dev-tools.tsx b/packages/manager/src/dev-tools/dev-tools.tsx index 99ba883b528..531961e1fe2 100644 --- a/packages/manager/src/dev-tools/dev-tools.tsx +++ b/packages/manager/src/dev-tools/dev-tools.tsx @@ -1,3 +1,4 @@ +import Handyman from '@mui/icons-material/Handyman'; import Grid from '@mui/material/Unstable_Grid2'; import React from 'react'; import { createRoot } from 'react-dom/client'; @@ -10,12 +11,17 @@ import './dev-tools.css'; import { EnvironmentToggleTool } from './EnvironmentToggleTool'; import { FeatureFlagTool } from './FeatureFlagTool'; import { MockDataTool } from './MockDataTool'; +import { Preferences } from './Preferences'; +import { isMSWEnabled } from './ServiceWorkerTool'; +import { ThemeSelector } from './ThemeSelector'; function install(store: ApplicationStore) { function DevTools() { return ( -
-
🛠
+
+
+ +
@@ -28,6 +34,8 @@ function install(store: ApplicationStore) { {!isProductionBuild || ENABLE_DEV_TOOLS ? ( + + ) : null} diff --git a/packages/manager/src/mocks/serverHandlers.ts b/packages/manager/src/mocks/serverHandlers.ts index 8bae0035f00..e2375fb63ef 100644 --- a/packages/manager/src/mocks/serverHandlers.ts +++ b/packages/manager/src/mocks/serverHandlers.ts @@ -11,9 +11,10 @@ import { DateTime } from 'luxon'; import { rest } from 'msw'; import { regions } from 'src/__data__/regionsData'; +import { MOCK_THEME_STORAGE_KEY } from 'src/dev-tools/ThemeSelector'; import { VLANFactory, - abuseTicketNotificationFactory, + // abuseTicketNotificationFactory, accountAvailabilityFactory, accountBetaFactory, accountFactory, @@ -103,6 +104,7 @@ import { accountLoginFactory } from 'src/factories/accountLogin'; import { accountUserFactory } from 'src/factories/accountUsers'; import { grantFactory, grantsFactory } from 'src/factories/grants'; import { pickRandom } from 'src/utilities/random'; +import { getStorage } from 'src/utilities/storage'; export const makeResourcePage = ( e: T[], @@ -1146,7 +1148,11 @@ export const handlers = [ return res(ctx.json(makeResourcePage(vlans))); }), rest.get('*/profile/preferences', (req, res, ctx) => { - return res(ctx.json({})); + return res( + ctx.json({ + theme: getStorage(MOCK_THEME_STORAGE_KEY) ?? 'system', + }) + ); }), rest.get('*/profile/devices', (req, res, ctx) => { return res(ctx.json(makeResourcePage([]))); @@ -1819,18 +1825,18 @@ export const handlers = [ when: null, }; - const emailBounce = notificationFactory.build({ - body: null, - entity: null, - label: 'We are unable to send emails to your billing email address!', - message: 'We are unable to send emails to your billing email address!', - severity: 'major', - type: 'billing_email_bounce', - until: null, - when: null, - }); + // const emailBounce = notificationFactory.build({ + // body: null, + // entity: null, + // label: 'We are unable to send emails to your billing email address!', + // message: 'We are unable to send emails to your billing email address!', + // severity: 'major', + // type: 'billing_email_bounce', + // until: null, + // when: null, + // }); - const abuseTicket = abuseTicketNotificationFactory.build(); + // const abuseTicket = abuseTicketNotificationFactory.build(); const migrationNotification = notificationFactory.build({ entity: { id: 0, label: 'linode-0', type: 'linode' }, @@ -1926,8 +1932,8 @@ export const handlers = [ outageNotification, minorSeverityNotification, criticalSeverityNotification, - abuseTicket, - emailBounce, + // abuseTicket, + // emailBounce, migrationNotification, balanceNotification, blockStorageMigrationScheduledNotification, From 02bdf6debb11bccc43a1d995058b63b9aad2007d Mon Sep 17 00:00:00 2001 From: Hana Xu <115299789+hana-linode@users.noreply.github.com> Date: Mon, 26 Feb 2024 10:19:28 -0500 Subject: [PATCH 22/37] upcoming: [M3-7702] - Update Region Select for edge sites (#10194) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Description 📝 Update our Region Select to support edge regions for Project Gecko ## Changes 🔄 - New `site_type` property to the Region type - New `gecko` feature flag - New icon to indicate an Edge region and updates to support displaying it ## How to test 🧪 ### Prerequisites (How to setup test environment) - Turn on the MSW and Gecko feature flag in DevTools ### Verification steps (How to verify changes) - Go to `/linodes/create` and open the Region Select dropdown. You should see an icon next to the `Gecko Edge Test` region and also icon helper text next to the region select. - You should _not_ see the icon or icon helper text for Marketplace, Cloning, or Images ``` yarn test RegionSelect yarn test RegionSelect.utils ``` --- packages/api-v4/src/regions/types.ts | 3 ++ ...r-10194-upcoming-features-1708456171781.md | 5 ++ packages/manager/src/__data__/regionsData.ts | 39 ++++++++++++++ .../assets/icons/entityIcons/edge-server.svg | 7 +++ .../components/Autocomplete/Autocomplete.tsx | 6 +++ .../RegionSelect/RegionMultiSelect.tsx | 5 ++ .../components/RegionSelect/RegionOption.tsx | 26 ++++++++- .../RegionSelect/RegionSelect.styles.ts | 43 +++++++++++++++ .../RegionSelect/RegionSelect.test.tsx | 18 +++++++ .../components/RegionSelect/RegionSelect.tsx | 53 +++++++++++++++++-- .../RegionSelect/RegionSelect.types.ts | 7 +++ .../RegionSelect/RegionSelect.utils.test.tsx | 51 ++++++++++++++++++ .../RegionSelect/RegionSelect.utils.ts | 34 +++++++++++- .../SelectRegionPanel.test.tsx | 2 + .../SelectRegionPanel/SelectRegionPanel.tsx | 17 ++++++ .../manager/src/dev-tools/FeatureFlagTool.tsx | 2 +- packages/manager/src/factories/regions.ts | 2 + packages/manager/src/featureFlags.ts | 1 + .../Images/ImagesCreate/CreateImageTab.tsx | 9 +++- .../Linodes/LinodesCreate/LinodeCreate.tsx | 3 +- .../features/Linodes/LinodesCreate/types.ts | 8 +++ packages/manager/src/mocks/serverHandlers.ts | 6 +++ .../manager/src/utilities/regions.test.ts | 4 ++ 23 files changed, 339 insertions(+), 12 deletions(-) create mode 100644 packages/manager/.changeset/pr-10194-upcoming-features-1708456171781.md create mode 100644 packages/manager/src/assets/icons/entityIcons/edge-server.svg diff --git a/packages/api-v4/src/regions/types.ts b/packages/api-v4/src/regions/types.ts index 23204247879..84871a6a6b0 100644 --- a/packages/api-v4/src/regions/types.ts +++ b/packages/api-v4/src/regions/types.ts @@ -24,6 +24,8 @@ export interface DNSResolvers { export type RegionStatus = 'ok' | 'outage'; +export type RegionSite = 'core' | 'edge'; + export interface Region { id: string; label: string; @@ -33,6 +35,7 @@ export interface Region { maximum_vms_per_pg: number; status: RegionStatus; resolvers: DNSResolvers; + site_type: RegionSite; } export interface RegionAvailability { diff --git a/packages/manager/.changeset/pr-10194-upcoming-features-1708456171781.md b/packages/manager/.changeset/pr-10194-upcoming-features-1708456171781.md new file mode 100644 index 00000000000..7e255b7427c --- /dev/null +++ b/packages/manager/.changeset/pr-10194-upcoming-features-1708456171781.md @@ -0,0 +1,5 @@ +--- +"@linode/manager": Upcoming Features +--- + +Update Region Select for edge sites ([#10194](https://github.com/linode/manager/pull/10194)) diff --git a/packages/manager/src/__data__/regionsData.ts b/packages/manager/src/__data__/regionsData.ts index c8afbb336d6..6e44c8dd739 100644 --- a/packages/manager/src/__data__/regionsData.ts +++ b/packages/manager/src/__data__/regionsData.ts @@ -24,6 +24,7 @@ export const regions: Region[] = [ ipv6: '2400:8904::f03c:91ff:fea5:659, 2400:8904::f03c:91ff:fea5:9282, 2400:8904::f03c:91ff:fea5:b9b3, 2400:8904::f03c:91ff:fea5:925a, 2400:8904::f03c:91ff:fea5:22cb, 2400:8904::f03c:91ff:fea5:227a, 2400:8904::f03c:91ff:fea5:924c, 2400:8904::f03c:91ff:fea5:f7e2, 2400:8904::f03c:91ff:fea5:2205, 2400:8904::f03c:91ff:fea5:9207', }, + site_type: 'core', status: 'ok', }, { @@ -48,6 +49,7 @@ export const regions: Region[] = [ ipv6: '2600:3c04::f03c:91ff:fea9:f63, 2600:3c04::f03c:91ff:fea9:f6d, 2600:3c04::f03c:91ff:fea9:f80, 2600:3c04::f03c:91ff:fea9:f0f, 2600:3c04::f03c:91ff:fea9:f99, 2600:3c04::f03c:91ff:fea9:fbd, 2600:3c04::f03c:91ff:fea9:fdd, 2600:3c04::f03c:91ff:fea9:fe2, 2600:3c04::f03c:91ff:fea9:f68, 2600:3c04::f03c:91ff:fea9:f4a', }, + site_type: 'core', status: 'ok', }, { @@ -72,6 +74,7 @@ export const regions: Region[] = [ ipv6: '2400:8907::f03c:92ff:fe6e:ec8, 2400:8907::f03c:92ff:fe6e:98e4, 2400:8907::f03c:92ff:fe6e:1c58, 2400:8907::f03c:92ff:fe6e:c299, 2400:8907::f03c:92ff:fe6e:c210, 2400:8907::f03c:92ff:fe6e:c219, 2400:8907::f03c:92ff:fe6e:1c5c, 2400:8907::f03c:92ff:fe6e:c24e, 2400:8907::f03c:92ff:fe6e:e6b, 2400:8907::f03c:92ff:fe6e:e3d', }, + site_type: 'core', status: 'ok', }, { @@ -98,6 +101,7 @@ export const regions: Region[] = [ ipv6: '2600:3c05::f03c:93ff:feb6:43b6, 2600:3c05::f03c:93ff:feb6:4365, 2600:3c05::f03c:93ff:feb6:43c2, 2600:3c05::f03c:93ff:feb6:e441, 2600:3c05::f03c:93ff:feb6:94ef, 2600:3c05::f03c:93ff:feb6:94ba, 2600:3c05::f03c:93ff:feb6:94a8, 2600:3c05::f03c:93ff:feb6:9413, 2600:3c05::f03c:93ff:feb6:9443, 2600:3c05::f03c:93ff:feb6:94e0', }, + site_type: 'core', status: 'ok', }, { @@ -124,6 +128,7 @@ export const regions: Region[] = [ ipv6: '2600:3c06::f03c:93ff:fed0:e5fc, 2600:3c06::f03c:93ff:fed0:e54b, 2600:3c06::f03c:93ff:fed0:e572, 2600:3c06::f03c:93ff:fed0:e530, 2600:3c06::f03c:93ff:fed0:e597, 2600:3c06::f03c:93ff:fed0:e511, 2600:3c06::f03c:93ff:fed0:e5f2, 2600:3c06::f03c:93ff:fed0:e5bf, 2600:3c06::f03c:93ff:fed0:e529, 2600:3c06::f03c:93ff:fed0:e5a3', }, + site_type: 'core', status: 'ok', }, { @@ -150,6 +155,7 @@ export const regions: Region[] = [ ipv6: '2600:3c07::f03c:93ff:fef2:2e63, 2600:3c07::f03c:93ff:fef2:2ec7, 2600:3c07::f03c:93ff:fef2:0dee, 2600:3c07::f03c:93ff:fef2:0d25, 2600:3c07::f03c:93ff:fef2:0de0, 2600:3c07::f03c:93ff:fef2:2e29, 2600:3c07::f03c:93ff:fef2:0dda, 2600:3c07::f03c:93ff:fef2:0d82, 2600:3c07::f03c:93ff:fef2:b3ac, 2600:3c07::f03c:93ff:fef2:b3a8', }, + site_type: 'core', status: 'ok', }, { @@ -175,6 +181,7 @@ export const regions: Region[] = [ ipv6: '2600:3c0a::f03c:93ff:fe54:c6da, 2600:3c0a::f03c:93ff:fe54:c691, 2600:3c0a::f03c:93ff:fe54:c68d, 2600:3c0a::f03c:93ff:fe54:c61e, 2600:3c0a::f03c:93ff:fe54:c653, 2600:3c0a::f03c:93ff:fe54:c64c, 2600:3c0a::f03c:93ff:fe54:c68a, 2600:3c0a::f03c:93ff:fe54:c697, 2600:3c0a::f03c:93ff:fe54:c60f, 2600:3c0a::f03c:93ff:fe54:c6a0', }, + site_type: 'core', status: 'ok', }, { @@ -200,6 +207,7 @@ export const regions: Region[] = [ ipv6: '2600:3c0d::f03c:93ff:fe3d:51cb, 2600:3c0d::f03c:93ff:fe3d:51a7, 2600:3c0d::f03c:93ff:fe3d:51a9, 2600:3c0d::f03c:93ff:fe3d:5119, 2600:3c0d::f03c:93ff:fe3d:51fe, 2600:3c0d::f03c:93ff:fe3d:517c, 2600:3c0d::f03c:93ff:fe3d:5144, 2600:3c0d::f03c:93ff:fe3d:5170, 2600:3c0d::f03c:93ff:fe3d:51cc, 2600:3c0d::f03c:93ff:fe3d:516c', }, + site_type: 'core', status: 'ok', }, { @@ -225,6 +233,7 @@ export const regions: Region[] = [ ipv6: '2600:3c0e::f03c:93ff:fe9d:2d10, 2600:3c0e::f03c:93ff:fe9d:2d89, 2600:3c0e::f03c:93ff:fe9d:2d79, 2600:3c0e::f03c:93ff:fe9d:2d96, 2600:3c0e::f03c:93ff:fe9d:2da5, 2600:3c0e::f03c:93ff:fe9d:2d34, 2600:3c0e::f03c:93ff:fe9d:2d68, 2600:3c0e::f03c:93ff:fe9d:2d17, 2600:3c0e::f03c:93ff:fe9d:2d45, 2600:3c0e::f03c:93ff:fe9d:2d5c', }, + site_type: 'core', status: 'ok', }, { @@ -250,6 +259,7 @@ export const regions: Region[] = [ ipv6: '2600:3c09::f03c:93ff:fea9:4dbe, 2600:3c09::f03c:93ff:fea9:4d63, 2600:3c09::f03c:93ff:fea9:4dce, 2600:3c09::f03c:93ff:fea9:4dbb, 2600:3c09::f03c:93ff:fea9:4d99, 2600:3c09::f03c:93ff:fea9:4d26, 2600:3c09::f03c:93ff:fea9:4de0, 2600:3c09::f03c:93ff:fea9:4d69, 2600:3c09::f03c:93ff:fea9:4dbf, 2600:3c09::f03c:93ff:fea9:4da6', }, + site_type: 'core', status: 'ok', }, { @@ -275,6 +285,7 @@ export const regions: Region[] = [ ipv6: '2600:3c08::f03c:93ff:fe7c:1135, 2600:3c08::f03c:93ff:fe7c:11f8, 2600:3c08::f03c:93ff:fe7c:11d2, 2600:3c08::f03c:93ff:fe7c:11a7, 2600:3c08::f03c:93ff:fe7c:11ad, 2600:3c08::f03c:93ff:fe7c:110a, 2600:3c08::f03c:93ff:fe7c:11f9, 2600:3c08::f03c:93ff:fe7c:1137, 2600:3c08::f03c:93ff:fe7c:11db, 2600:3c08::f03c:93ff:fe7c:1164', }, + site_type: 'core', status: 'ok', }, { @@ -300,6 +311,7 @@ export const regions: Region[] = [ ipv6: '2400:8905::f03c:93ff:fe9d:b085, 2400:8905::f03c:93ff:fe9d:b012, 2400:8905::f03c:93ff:fe9d:b09b, 2400:8905::f03c:93ff:fe9d:b0d8, 2400:8905::f03c:93ff:fe9d:259f, 2400:8905::f03c:93ff:fe9d:b006, 2400:8905::f03c:93ff:fe9d:b084, 2400:8905::f03c:93ff:fe9d:b0ce, 2400:8905::f03c:93ff:fe9d:25ea, 2400:8905::f03c:93ff:fe9d:b086', }, + site_type: 'core', status: 'ok', }, { @@ -325,6 +337,7 @@ export const regions: Region[] = [ ipv6: '2600:3c0b::f03c:93ff:feba:d513, 2600:3c0b::f03c:93ff:feba:d5c3, 2600:3c0b::f03c:93ff:feba:d597, 2600:3c0b::f03c:93ff:feba:d5fb, 2600:3c0b::f03c:93ff:feba:d51f, 2600:3c0b::f03c:93ff:feba:d58e, 2600:3c0b::f03c:93ff:feba:d5d5, 2600:3c0b::f03c:93ff:feba:d534, 2600:3c0b::f03c:93ff:feba:d57c, 2600:3c0b::f03c:93ff:feba:d529', }, + site_type: 'core', status: 'ok', }, { @@ -350,6 +363,7 @@ export const regions: Region[] = [ ipv6: '2a01:7e04::f03c:93ff:fead:d31f, 2a01:7e04::f03c:93ff:fead:d37f, 2a01:7e04::f03c:93ff:fead:d30c, 2a01:7e04::f03c:93ff:fead:d318, 2a01:7e04::f03c:93ff:fead:d316, 2a01:7e04::f03c:93ff:fead:d339, 2a01:7e04::f03c:93ff:fead:d367, 2a01:7e04::f03c:93ff:fead:d395, 2a01:7e04::f03c:93ff:fead:d3d0, 2a01:7e04::f03c:93ff:fead:d38e', }, + site_type: 'core', status: 'ok', }, { @@ -375,6 +389,7 @@ export const regions: Region[] = [ ipv6: '2600:3c0c::f03c:93ff:feed:a90b, 2600:3c0c::f03c:93ff:feed:a9a5, 2600:3c0c::f03c:93ff:feed:a935, 2600:3c0c::f03c:93ff:feed:a930, 2600:3c0c::f03c:93ff:feed:a95c, 2600:3c0c::f03c:93ff:feed:a9ad, 2600:3c0c::f03c:93ff:feed:a9f2, 2600:3c0c::f03c:93ff:feed:a9ff, 2600:3c0c::f03c:93ff:feed:a9c8, 2600:3c0c::f03c:93ff:feed:a96b', }, + site_type: 'core', status: 'ok', }, { @@ -400,6 +415,7 @@ export const regions: Region[] = [ ipv6: '2a01:7e03::f03c:93ff:feb1:b789, 2a01:7e03::f03c:93ff:feb1:b717, 2a01:7e03::f03c:93ff:feb1:b707, 2a01:7e03::f03c:93ff:feb1:b7ab, 2a01:7e03::f03c:93ff:feb1:b7e2, 2a01:7e03::f03c:93ff:feb1:b709, 2a01:7e03::f03c:93ff:feb1:b7a6, 2a01:7e03::f03c:93ff:feb1:b750, 2a01:7e03::f03c:93ff:feb1:b76e, 2a01:7e03::f03c:93ff:feb1:b7a2', }, + site_type: 'core', status: 'ok', }, { @@ -424,6 +440,7 @@ export const regions: Region[] = [ ipv6: '2600:3c00::2, 2600:3c00::9, 2600:3c00::7, 2600:3c00::5, 2600:3c00::3, 2600:3c00::8, 2600:3c00::6, 2600:3c00::4, 2600:3c00::c, 2600:3c00::b', }, + site_type: 'core', status: 'ok', }, { @@ -447,6 +464,7 @@ export const regions: Region[] = [ ipv6: '2600:3c01::2, 2600:3c01::9, 2600:3c01::5, 2600:3c01::7, 2600:3c01::3, 2600:3c01::8, 2600:3c01::4, 2600:3c01::b, 2600:3c01::c, 2600:3c01::6', }, + site_type: 'core', status: 'ok', }, { @@ -473,6 +491,7 @@ export const regions: Region[] = [ ipv6: '2600:3c02::3, 2600:3c02::5, 2600:3c02::4, 2600:3c02::6, 2600:3c02::c, 2600:3c02::7, 2600:3c02::2, 2600:3c02::9, 2600:3c02::8, 2600:3c02::b', }, + site_type: 'core', status: 'ok', }, { @@ -500,6 +519,7 @@ export const regions: Region[] = [ ipv6: '2600:3c03::7, 2600:3c03::4, 2600:3c03::9, 2600:3c03::6, 2600:3c03::3, 2600:3c03::c, 2600:3c03::5, 2600:3c03::b, 2600:3c03::2, 2600:3c03::8', }, + site_type: 'core', status: 'ok', }, { @@ -524,6 +544,7 @@ export const regions: Region[] = [ ipv6: '2a01:7e00::9, 2a01:7e00::3, 2a01:7e00::c, 2a01:7e00::5, 2a01:7e00::6, 2a01:7e00::8, 2a01:7e00::b, 2a01:7e00::4, 2a01:7e00::7, 2a01:7e00::2', }, + site_type: 'core', status: 'ok', }, { @@ -550,6 +571,7 @@ export const regions: Region[] = [ ipv6: '2400:8901::5, 2400:8901::4, 2400:8901::b, 2400:8901::3, 2400:8901::9, 2400:8901::2, 2400:8901::8, 2400:8901::7, 2400:8901::c, 2400:8901::6', }, + site_type: 'core', status: 'ok', }, { @@ -576,6 +598,23 @@ export const regions: Region[] = [ ipv6: '2a01:7e01::5, 2a01:7e01::9, 2a01:7e01::7, 2a01:7e01::c, 2a01:7e01::2, 2a01:7e01::4, 2a01:7e01::3, 2a01:7e01::6, 2a01:7e01::b, 2a01:7e01::8', }, + site_type: 'core', + status: 'ok', + }, + { + capabilities: ['Linodes'], + country: 'us', + id: 'us-edgetest', + label: 'Gecko Edge Test', + maximum_pgs_per_customer: 5, + maximum_vms_per_pg: 10, + resolvers: { + ipv4: + '139.162.130.5, 139.162.131.5, 139.162.132.5, 139.162.133.5, 139.162.134.5, 139.162.135.5, 139.162.136.5, 139.162.137.5, 139.162.138.5, 139.162.139.5', + ipv6: + '2a01:7e01::5, 2a01:7e01::9, 2a01:7e01::7, 2a01:7e01::c, 2a01:7e01::2, 2a01:7e01::4, 2a01:7e01::3, 2a01:7e01::6, 2a01:7e01::b, 2a01:7e01::8', + }, + site_type: 'edge', status: 'ok', }, ]; diff --git a/packages/manager/src/assets/icons/entityIcons/edge-server.svg b/packages/manager/src/assets/icons/entityIcons/edge-server.svg new file mode 100644 index 00000000000..1ca05241491 --- /dev/null +++ b/packages/manager/src/assets/icons/entityIcons/edge-server.svg @@ -0,0 +1,7 @@ + + +edge-server + + + + diff --git a/packages/manager/src/components/Autocomplete/Autocomplete.tsx b/packages/manager/src/components/Autocomplete/Autocomplete.tsx index 52a27160840..20fd80ba968 100644 --- a/packages/manager/src/components/Autocomplete/Autocomplete.tsx +++ b/packages/manager/src/components/Autocomplete/Autocomplete.tsx @@ -114,6 +114,12 @@ export const Autocomplete = < InputProps={{ ...params.InputProps, ...textFieldProps?.InputProps, + endAdornment: ( + + {textFieldProps?.InputProps?.endAdornment} + {params.InputProps.endAdornment} + + ), }} /> )} diff --git a/packages/manager/src/components/RegionSelect/RegionMultiSelect.tsx b/packages/manager/src/components/RegionSelect/RegionMultiSelect.tsx index 4b37ee42435..aa235200cb3 100644 --- a/packages/manager/src/components/RegionSelect/RegionMultiSelect.tsx +++ b/packages/manager/src/components/RegionSelect/RegionMultiSelect.tsx @@ -117,6 +117,11 @@ export const RegionMultiSelect = React.memo((props: RegionMultiSelectProps) => { /> ); }} + sx={(theme) => ({ + [theme.breakpoints.up('md')]: { + width: '416px', + }, + })} textFieldProps={{ InputProps: { required, diff --git a/packages/manager/src/components/RegionSelect/RegionOption.tsx b/packages/manager/src/components/RegionSelect/RegionOption.tsx index 38fe2feaccd..7186b1cc6c3 100644 --- a/packages/manager/src/components/RegionSelect/RegionOption.tsx +++ b/packages/manager/src/components/RegionSelect/RegionOption.tsx @@ -1,27 +1,36 @@ import { visuallyHidden } from '@mui/utils'; import React from 'react'; +import EdgeServer from 'src/assets/icons/entityIcons/edge-server.svg'; import { Box } from 'src/components/Box'; import { Flag } from 'src/components/Flag'; import { Link } from 'src/components/Link'; import { Tooltip } from 'src/components/Tooltip'; +import { TooltipIcon } from 'src/components/TooltipIcon'; import { SelectedIcon, StyledFlagContainer, StyledListItem, + sxEdgeIcon, } from './RegionSelect.styles'; import { RegionSelectOption } from './RegionSelect.types'; import type { ListItemComponentsPropsOverrides } from '@mui/material/ListItem'; type Props = { + displayEdgeServerIcon?: boolean; option: RegionSelectOption; props: React.HTMLAttributes; - selected: boolean; + selected?: boolean; }; -export const RegionOption = ({ option, props, selected }: Props) => { +export const RegionOption = ({ + displayEdgeServerIcon, + option, + props, + selected, +}: Props) => { const isDisabledMenuItem = option.unavailable; return ( @@ -78,6 +87,11 @@ export const RegionOption = ({ option, props, selected }: Props) => { {option.label} + {displayEdgeServerIcon && ( + +  (This region is an Edge site.) + + )} {isDisabledMenuItem && ( Disabled option - There may be limited capacity in this region. @@ -87,6 +101,14 @@ export const RegionOption = ({ option, props, selected }: Props) => { )} {selected && } + {displayEdgeServerIcon && ( + } + status="other" + sxTooltipIcon={sxEdgeIcon} + text="This region is an edge site." + /> + )} diff --git a/packages/manager/src/components/RegionSelect/RegionSelect.styles.ts b/packages/manager/src/components/RegionSelect/RegionSelect.styles.ts index b71ef206b31..d4a72010e19 100644 --- a/packages/manager/src/components/RegionSelect/RegionSelect.styles.ts +++ b/packages/manager/src/components/RegionSelect/RegionSelect.styles.ts @@ -20,8 +20,51 @@ export const StyledAutocompleteContainer = styled(Box, { marginTop: -8, }, }, + '& .MuiAutocomplete-root .MuiAutocomplete-inputRoot': { + paddingRight: 8, + }, + display: 'flex', + [theme.breakpoints.down('md')]: { + flexDirection: 'column', + }, })); +export const sxEdgeIcon = { + '& svg': { + color: 'inherit !important', + height: 21, + width: 24, + }, + '&:hover': { + color: 'inherit', + }, + color: 'inherit', + padding: 0, +}; + +export const StyledEdgeBox = styled(Box, { label: 'StyledEdgeBox' })( + ({ theme }) => ({ + '& svg': { + height: 21, + marginLeft: 8, + marginRight: 8, + width: 24, + }, + alignSelf: 'end', + color: 'inherit', + display: 'flex', + marginLeft: 8, + padding: '8px 0', + [theme.breakpoints.down('md')]: { + '& svg': { + marginLeft: 0, + }, + alignSelf: 'start', + marginLeft: 0, + }, + }) +); + export const StyledFlagContainer = styled('div', { label: 'RegionSelectFlagContainer', })(({ theme }) => ({ diff --git a/packages/manager/src/components/RegionSelect/RegionSelect.test.tsx b/packages/manager/src/components/RegionSelect/RegionSelect.test.tsx index 33f6cd426f0..dc1ed580610 100644 --- a/packages/manager/src/components/RegionSelect/RegionSelect.test.tsx +++ b/packages/manager/src/components/RegionSelect/RegionSelect.test.tsx @@ -64,4 +64,22 @@ describe('RegionSelect', () => { ); expect(getByTestId('textfield-input')).toBeDisabled(); }); + + it('should render a Select component with edge region text', () => { + const newProps = { + ...props, + showGeckoHelperText: true, + }; + const { getByTestId } = renderWithTheme(); + expect(getByTestId('region-select-edge-text')).toBeInTheDocument(); + }); + + it('should render a Select component with no edge region text', () => { + const newProps = { + ...props, + showGeckoHelperText: false, + }; + const { queryByTestId } = renderWithTheme(); + expect(queryByTestId('region-select-edge-text')).not.toBeInTheDocument(); + }); }); diff --git a/packages/manager/src/components/RegionSelect/RegionSelect.tsx b/packages/manager/src/components/RegionSelect/RegionSelect.tsx index 65d412c176b..8e63085c29f 100644 --- a/packages/manager/src/components/RegionSelect/RegionSelect.tsx +++ b/packages/manager/src/components/RegionSelect/RegionSelect.tsx @@ -1,13 +1,19 @@ +import { Typography } from '@mui/material'; import * as React from 'react'; +import EdgeServer from 'src/assets/icons/entityIcons/edge-server.svg'; import { Autocomplete } from 'src/components/Autocomplete/Autocomplete'; import { Flag } from 'src/components/Flag'; +import { Link } from 'src/components/Link'; +import { TooltipIcon } from 'src/components/TooltipIcon'; import { useAccountAvailabilitiesQueryUnpaginated } from 'src/queries/accountAvailability'; import { RegionOption } from './RegionOption'; import { StyledAutocompleteContainer, + StyledEdgeBox, StyledFlagContainer, + sxEdgeIcon, } from './RegionSelect.styles'; import { getRegionOptions, getSelectedRegionById } from './RegionSelect.utils'; @@ -20,14 +26,17 @@ import type { * A specific select for regions. * * The RegionSelect automatically filters regions based on capability using its `currentCapability` prop. For example, if - * `currentCapability="VPCs"`, only regions that support VPCs will appear in the RegionSelect dropdown. There is no need to - * prefilter regions when passing them to the RegionSelect. See the description of `currentCapability` prop for more information. + * `currentCapability="VPCs"`, only regions that support VPCs will appear in the RegionSelect dropdown. Edge regions are filtered based on the `hideEdgeServers` prop. + * There is no need to pre-filter regions when passing them to the RegionSelect. See the description of `currentCapability` prop for more information. + * + * We do not display the selected check mark for single selects. */ export const RegionSelect = React.memo((props: RegionSelectProps) => { const { currentCapability, disabled, errorText, + geckoEnabled, handleSelection, helperText, isClearable, @@ -35,6 +44,7 @@ export const RegionSelect = React.memo((props: RegionSelectProps) => { regions, required, selectedId, + showGeckoHelperText, width, } = props; @@ -74,9 +84,10 @@ export const RegionSelect = React.memo((props: RegionSelectProps) => { getRegionOptions({ accountAvailabilityData: accountAvailability, currentCapability, + hideEdgeServers: !geckoEnabled, regions, }), - [accountAvailability, currentCapability, regions] + [accountAvailability, currentCapability, regions, geckoEnabled] ); return ( @@ -95,18 +106,34 @@ export const RegionSelect = React.memo((props: RegionSelectProps) => { handleRegionChange(null); } }} - renderOption={(props, option, { selected }) => { + renderOption={(props, option) => { return ( ); }} + sx={(theme) => ({ + [theme.breakpoints.up('md')]: { + width: '416px', + }, + })} textFieldProps={{ InputProps: { + endAdornment: geckoEnabled && + selectedRegion?.site_type === 'edge' && ( + } + status="other" + sxTooltipIcon={sxEdgeIcon} + text="This region is an Edge server." + /> + ), required, startAdornment: selectedRegion && ( @@ -132,6 +159,22 @@ export const RegionSelect = React.memo((props: RegionSelectProps) => { placeholder="Select a Region" value={selectedRegion} /> + {showGeckoHelperText && ( // @TODO Gecko MVP: Add docs link + + + + {' '} + Indicates an Edge server region.{' '} + + Learn more + + . + + + )} ); }); diff --git a/packages/manager/src/components/RegionSelect/RegionSelect.types.ts b/packages/manager/src/components/RegionSelect/RegionSelect.types.ts index 90460892f2f..1d6b6b16073 100644 --- a/packages/manager/src/components/RegionSelect/RegionSelect.types.ts +++ b/packages/manager/src/components/RegionSelect/RegionSelect.types.ts @@ -5,6 +5,7 @@ import type { Capabilities, Country, Region, + RegionSite, } from '@linode/api-v4'; import type { EnhancedAutocompleteProps } from 'src/components/Autocomplete/Autocomplete'; @@ -14,6 +15,7 @@ export interface RegionSelectOption { region: string; }; label: string; + site_type: RegionSite; unavailable: boolean; value: string; } @@ -31,6 +33,7 @@ export interface RegionSelectProps * See `ImageUpload.tsx` for an example of a RegionSelect with an undefined `currentCapability` - there is no capability associated with Images yet. */ currentCapability: Capabilities | undefined; + geckoEnabled?: boolean; handleSelection: (id: string) => void; helperText?: string; isClearable?: boolean; @@ -38,6 +41,7 @@ export interface RegionSelectProps regions: Region[]; required?: boolean; selectedId: null | string; + showGeckoHelperText?: boolean; width?: number; } @@ -68,6 +72,7 @@ export interface RegionOptionAvailability { } export interface GetRegionOptions extends RegionOptionAvailability { + hideEdgeServers?: boolean; regions: Region[]; } @@ -86,3 +91,5 @@ export interface GetSelectedRegionsByIdsArgs { regions: Region[]; selectedRegionIds: string[]; } + +export type SupportedEdgeTypes = 'Distributions' | 'StackScripts'; diff --git a/packages/manager/src/components/RegionSelect/RegionSelect.utils.test.tsx b/packages/manager/src/components/RegionSelect/RegionSelect.utils.test.tsx index f7a4b1c2acc..5b424acc1c7 100644 --- a/packages/manager/src/components/RegionSelect/RegionSelect.utils.test.tsx +++ b/packages/manager/src/components/RegionSelect/RegionSelect.utils.test.tsx @@ -38,6 +38,17 @@ const regions: Region[] = [ }), ]; +const regionsWithEdge = [ + ...regions, + regionFactory.build({ + capabilities: ['Linodes'], + country: 'us', + id: 'us-edge-1', + label: 'Gecko Edge Test', + site_type: 'edge', + }), +]; + const expectedRegions: RegionSelectOption[] = [ { data: { @@ -45,18 +56,21 @@ const expectedRegions: RegionSelectOption[] = [ region: 'North America', }, label: 'US Location (us-1)', + site_type: 'core', unavailable: false, value: 'us-1', }, { data: { country: 'ca', region: 'North America' }, label: 'CA Location (ca-1)', + site_type: 'core', unavailable: false, value: 'ca-1', }, { data: { country: 'jp', region: 'Asia' }, label: 'JP Location (jp-1)', + site_type: 'core', unavailable: false, value: 'jp-1', }, @@ -103,6 +117,39 @@ describe('getRegionOptions', () => { expect(result).toEqual(expectedRegions); }); + + it('should filter out edge regions if hideEdgeServers is true', () => { + const result: RegionSelectOption[] = getRegionOptions({ + accountAvailabilityData, + currentCapability: 'Linodes', + hideEdgeServers: true, + regions: regionsWithEdge, + }); + + expect(result).toEqual(expectedRegions); + }); + + it('should not filter out edge regions if hideEdgeServers is false', () => { + const expectedRegionsWithEdge = [ + { + data: { country: 'us', region: 'North America' }, + label: 'Gecko Edge Test (us-edge-1)', + site_type: 'edge', + unavailable: false, + value: 'us-edge-1', + }, + ...expectedRegions, + ]; + + const result: RegionSelectOption[] = getRegionOptions({ + accountAvailabilityData, + currentCapability: 'Linodes', + hideEdgeServers: false, + regions: regionsWithEdge, + }); + + expect(result).toEqual(expectedRegionsWithEdge); + }); }); describe('getSelectedRegionById', () => { @@ -123,6 +170,7 @@ describe('getSelectedRegionById', () => { region: 'North America', }, label: 'US Location (us-1)', + site_type: 'core', unavailable: false, value: 'us-1', }; @@ -188,6 +236,7 @@ describe('getSelectedRegionsByIds', () => { region: 'North America', }, label: 'US Location (us-1)', + site_type: 'core', unavailable: false, value: 'us-1', }, @@ -197,6 +246,7 @@ describe('getSelectedRegionsByIds', () => { region: 'North America', }, label: 'CA Location (ca-1)', + site_type: 'core', unavailable: false, value: 'ca-1', }, @@ -222,6 +272,7 @@ describe('getSelectedRegionsByIds', () => { region: 'North America', }, label: 'US Location (us-1)', + site_type: 'core', unavailable: false, value: 'us-1', }, diff --git a/packages/manager/src/components/RegionSelect/RegionSelect.utils.ts b/packages/manager/src/components/RegionSelect/RegionSelect.utils.ts index d5f54ca0304..597b7b1276d 100644 --- a/packages/manager/src/components/RegionSelect/RegionSelect.utils.ts +++ b/packages/manager/src/components/RegionSelect/RegionSelect.utils.ts @@ -1,5 +1,6 @@ import { CONTINENT_CODE_TO_CONTINENT } from '@linode/api-v4'; +import { useFlags } from 'src/hooks/useFlags'; import { getRegionCountryGroup, getSelectedRegion, @@ -11,8 +12,10 @@ import type { GetSelectedRegionById, GetSelectedRegionsByIdsArgs, RegionSelectOption, + SupportedEdgeTypes, } from './RegionSelect.types'; import type { AccountAvailability, Region } from '@linode/api-v4'; +import type { LinodeCreateType } from 'src/features/Linodes/LinodesCreate/types'; const NORTH_AMERICA = CONTINENT_CODE_TO_CONTINENT.NA; @@ -25,15 +28,22 @@ const NORTH_AMERICA = CONTINENT_CODE_TO_CONTINENT.NA; export const getRegionOptions = ({ accountAvailabilityData, currentCapability, + hideEdgeServers = false, regions, }: GetRegionOptions): RegionSelectOption[] => { - const filteredRegions = currentCapability + const filteredRegionsByCapability = currentCapability ? regions.filter((region) => region.capabilities.includes(currentCapability) ) : regions; - return filteredRegions + const filteredRegionsByCapabilityAndSiteType = hideEdgeServers + ? filteredRegionsByCapability.filter( + (region) => region.site_type !== 'edge' + ) + : filteredRegionsByCapability; + + return filteredRegionsByCapabilityAndSiteType .map((region: Region) => { const group = getRegionCountryGroup(region); @@ -43,6 +53,7 @@ export const getRegionOptions = ({ region: group, }, label: `${region.label} (${region.id})`, + site_type: region.site_type, unavailable: getRegionOptionAvailability({ accountAvailabilityData, currentCapability, @@ -116,6 +127,7 @@ export const getSelectedRegionById = ({ region: group, }, label: `${selectedRegion.label} (${selectedRegion.id})`, + site_type: selectedRegion.site_type, unavailable: getRegionOptionAvailability({ accountAvailabilityData, currentCapability, @@ -175,3 +187,21 @@ export const getSelectedRegionsByIds = ({ ) .filter((region): region is RegionSelectOption => !!region); }; + +/** + * Util to determine whether a create type has support for edge regions. + * + * @returns a boolean indicating whether or not to enable gecko. + */ +export const useIsGeckoEnabled = (createType: LinodeCreateType) => { + const flags = useFlags(); + + const supportedEdgeTypes: SupportedEdgeTypes[] = [ + 'Distributions', + 'StackScripts', + ]; + return Boolean( + flags.gecko && + !supportedEdgeTypes.includes(createType as SupportedEdgeTypes) + ); +}; diff --git a/packages/manager/src/components/SelectRegionPanel/SelectRegionPanel.test.tsx b/packages/manager/src/components/SelectRegionPanel/SelectRegionPanel.test.tsx index 2a21db6cd10..ab77c8c36be 100644 --- a/packages/manager/src/components/SelectRegionPanel/SelectRegionPanel.test.tsx +++ b/packages/manager/src/components/SelectRegionPanel/SelectRegionPanel.test.tsx @@ -11,6 +11,7 @@ const pricingMocks = vi.hoisted(() => ({ })); const queryParamMocks = vi.hoisted(() => ({ + getQueryParamFromQueryString: vi.fn().mockReturnValue({}), getQueryParamsFromQueryString: vi.fn().mockReturnValue({}), })); @@ -20,6 +21,7 @@ vi.mock('src/utilities/pricing/linodes', () => ({ })); vi.mock('src/utilities/queryParams', () => ({ + getQueryParamFromQueryString: queryParamMocks.getQueryParamFromQueryString, getQueryParamsFromQueryString: queryParamMocks.getQueryParamsFromQueryString, })); diff --git a/packages/manager/src/components/SelectRegionPanel/SelectRegionPanel.tsx b/packages/manager/src/components/SelectRegionPanel/SelectRegionPanel.tsx index 4db3bdde0ce..0d3db1b4740 100644 --- a/packages/manager/src/components/SelectRegionPanel/SelectRegionPanel.tsx +++ b/packages/manager/src/components/SelectRegionPanel/SelectRegionPanel.tsx @@ -6,6 +6,7 @@ import { useLocation } from 'react-router-dom'; import { Notice } from 'src/components/Notice/Notice'; import { Paper } from 'src/components/Paper'; import { RegionSelect } from 'src/components/RegionSelect/RegionSelect'; +import { useIsGeckoEnabled } from 'src/components/RegionSelect/RegionSelect.utils'; import { RegionHelperText } from 'src/components/SelectRegionPanel/RegionHelperText'; import { Typography } from 'src/components/Typography'; import { CROSS_DATA_CENTER_CLONE_WARNING } from 'src/features/Linodes/LinodesCreate/constants'; @@ -22,6 +23,8 @@ import { Box } from '../Box'; import { DocsLink } from '../DocsLink/DocsLink'; import { Link } from '../Link'; +import type { LinodeCreateType } from 'src/features/Linodes/LinodesCreate/types'; + interface SelectRegionPanelProps { currentCapability: Capabilities; disabled?: boolean; @@ -72,6 +75,18 @@ export const SelectRegionPanel = (props: SelectRegionPanelProps) => { type, }); + const geckoEnabled = useIsGeckoEnabled(params.type as LinodeCreateType); + + const showGeckoHelperText = Boolean( + geckoEnabled && + currentCapability && + regions.find( + (region) => + region.site_type === 'edge' && + region.capabilities.includes(currentCapability) + ) + ); + if (props.regions.length === 0) { return null; } @@ -116,10 +131,12 @@ export const SelectRegionPanel = (props: SelectRegionPanelProps) => { currentCapability={currentCapability} disabled={disabled} errorText={error} + geckoEnabled={geckoEnabled} handleSelection={handleSelection} helperText={helperText} regions={regions} selectedId={selectedId || null} + showGeckoHelperText={showGeckoHelperText} /> {showClonePriceWarning && ( ({ maximum_pgs_per_customer: 5, maximum_vms_per_pg: 10, resolvers: resolverFactory.build(), + site_type: 'core', status: 'ok', }); @@ -42,6 +43,7 @@ export const regionWithDynamicPricingFactory = Factory.Sync.makeFactory( maximum_pgs_per_customer: 5, maximum_vms_per_pg: 10, resolvers: resolverFactory.build(), + site_type: 'core', status: 'ok', } ); diff --git a/packages/manager/src/featureFlags.ts b/packages/manager/src/featureFlags.ts index 6e88368d995..0a6b6bee49f 100644 --- a/packages/manager/src/featureFlags.ts +++ b/packages/manager/src/featureFlags.ts @@ -47,6 +47,7 @@ export interface Flags { databaseResize: boolean; databases: boolean; firewallNodebalancer: boolean; + gecko: boolean; ipv6Sharing: boolean; linodeCloneUIChanges: boolean; linodeCreateWithFirewall: boolean; diff --git a/packages/manager/src/features/Images/ImagesCreate/CreateImageTab.tsx b/packages/manager/src/features/Images/ImagesCreate/CreateImageTab.tsx index 6773a912703..88717cc573e 100644 --- a/packages/manager/src/features/Images/ImagesCreate/CreateImageTab.tsx +++ b/packages/manager/src/features/Images/ImagesCreate/CreateImageTab.tsx @@ -21,6 +21,7 @@ import { useFlags } from 'src/hooks/useFlags'; import { useEventsPollingActions } from 'src/queries/events/events'; import { useCreateImageMutation } from 'src/queries/images'; import { useGrants, useProfile } from 'src/queries/profile'; +import { useRegionsQuery } from 'src/queries/regions'; import { getAPIErrorOrDefault } from 'src/utilities/errorUtils'; import { getAPIErrorFor } from 'src/utilities/getAPIErrorFor'; @@ -99,6 +100,7 @@ export const CreateImageTab: React.FC = (props) => { const { data: profile } = useProfile(); const { data: grants } = useGrants(); const flags = useFlags(); + const { data: regions } = useRegionsQuery(); const { mutateAsync: createImage } = useCreateImageMutation(); @@ -236,6 +238,9 @@ export const CreateImageTab: React.FC = (props) => { const linodeError = hasErrorFor('linode_id'); const diskError = hasErrorFor('disk_id'); + const linodeIsNotInEdgeRegion = (linodeRegion: string) => + regions?.find((region) => region.id === linodeRegion)?.site_type !== 'edge'; + return ( {!canCreateImage ? ( @@ -251,7 +256,9 @@ export const CreateImageTab: React.FC = (props) => { - availableLinodesToImagize?.includes(linode.id) ?? true + (linodeIsNotInEdgeRegion(linode.region) && + availableLinodesToImagize?.includes(linode.id)) ?? + true } disabled={!canCreateImage} errorText={linodeError} diff --git a/packages/manager/src/features/Linodes/LinodesCreate/LinodeCreate.tsx b/packages/manager/src/features/Linodes/LinodesCreate/LinodeCreate.tsx index 5ce9b345831..a98f321cadb 100644 --- a/packages/manager/src/features/Linodes/LinodesCreate/LinodeCreate.tsx +++ b/packages/manager/src/features/Linodes/LinodesCreate/LinodeCreate.tsx @@ -103,6 +103,7 @@ import { } from './types'; import type { Tab } from 'src/components/Tabs/TabLinkList'; +import type { LinodeCreateType } from 'src/features/Linodes/LinodesCreate/types'; export interface LinodeCreateProps { additionalIPv4RangesForVPC: ExtendedIP[]; @@ -207,7 +208,7 @@ export class LinodeCreate extends React.PureComponent< /** Get the query params as an object, excluding the "?" */ const queryParams = getQueryParamsFromQueryString(location.search); - const _tabs = [ + const _tabs: LinodeCreateType[] = [ 'Distributions', 'One-Click', 'StackScripts', diff --git a/packages/manager/src/features/Linodes/LinodesCreate/types.ts b/packages/manager/src/features/Linodes/LinodesCreate/types.ts index c7efd6d39bb..0907d08a61c 100644 --- a/packages/manager/src/features/Linodes/LinodesCreate/types.ts +++ b/packages/manager/src/features/Linodes/LinodesCreate/types.ts @@ -167,3 +167,11 @@ export type AllFormStateAndHandlers = BaseFormStateAndHandlers & CloneFormStateHandlers & StackScriptFormStateHandlers & BackupFormStateHandlers; + +export type LinodeCreateType = + | 'Backups' + | 'Clone Linode' + | 'Distributions' + | 'Images' + | 'One-Click' + | 'StackScripts'; diff --git a/packages/manager/src/mocks/serverHandlers.ts b/packages/manager/src/mocks/serverHandlers.ts index e2375fb63ef..ce213679d83 100644 --- a/packages/manager/src/mocks/serverHandlers.ts +++ b/packages/manager/src/mocks/serverHandlers.ts @@ -669,6 +669,11 @@ export const handlers = [ label: 'metadata-test-region', region: 'eu-west', }); + const linodeInEdgeRegion = linodeFactory.build({ + image: 'edge-test-image', + label: 'edge-test-region', + region: 'us-southeast', + }); const onlineLinodes = linodeFactory.buildList(40, { backups: { enabled: false }, ipv4: ['000.000.000.000'], @@ -699,6 +704,7 @@ export const handlers = [ const linodes = [ metadataLinodeWithCompatibleImage, metadataLinodeWithCompatibleImageAndRegion, + linodeInEdgeRegion, ...onlineLinodes, linodeWithEligibleVolumes, ...offlineLinodes, diff --git a/packages/manager/src/utilities/regions.test.ts b/packages/manager/src/utilities/regions.test.ts index 99eee287b3d..c705afefcc4 100644 --- a/packages/manager/src/utilities/regions.test.ts +++ b/packages/manager/src/utilities/regions.test.ts @@ -13,6 +13,7 @@ describe('getRegionsByRegionId', () => { maximum_pgs_per_customer: 5, maximum_vms_per_pg: 10, resolvers: { ipv4: '', ipv6: '' }, + site_type: 'core', status: 'ok', }, { @@ -23,6 +24,7 @@ describe('getRegionsByRegionId', () => { maximum_pgs_per_customer: 5, maximum_vms_per_pg: 10, resolvers: { ipv4: '', ipv6: '' }, + site_type: 'core', status: 'ok', }, ]; @@ -36,6 +38,7 @@ describe('getRegionsByRegionId', () => { maximum_pgs_per_customer: 5, maximum_vms_per_pg: 10, resolvers: { ipv4: '', ipv6: '' }, + site_type: 'core', status: 'ok', }, 'us-southeast': { @@ -46,6 +49,7 @@ describe('getRegionsByRegionId', () => { maximum_pgs_per_customer: 5, maximum_vms_per_pg: 10, resolvers: { ipv4: '', ipv6: '' }, + site_type: 'core', status: 'ok', }, }; From ca527383b1b91f93cdad6c6032516c3cc0f1c4e0 Mon Sep 17 00:00:00 2001 From: Banks Nussman <115251059+bnussman-akamai@users.noreply.github.com> Date: Mon, 26 Feb 2024 11:17:02 -0500 Subject: [PATCH 23/37] refactor: [M3-7800] - Clean up `new QueryClient()` pattern in unit tests (#10217) * clean up `new QueryClient()` in unit tests * Added changeset: Clean up `new QueryClient()` pattern in unit tests --------- Co-authored-by: Banks Nussman --- .../pr-10217-tech-stories-1708960982000.md | 5 +++ .../AbuseTicketBanner.test.tsx | 17 +++------- .../AccessPanel/UserSSHKeyPanel.test.tsx | 10 ++---- .../SelectFirewallPanel.test.tsx | 13 +------- .../components/TagsPanel/TagsPanel.test.tsx | 32 ++++++------------- .../Maintenance/MaintenanceTable.test.tsx | 11 +------ .../DatabaseCreate/DatabaseCreate.test.tsx | 19 ++--------- .../DatabaseDetail/AccessControls.test.tsx | 6 ---- .../AddAccessControlDrawer.test.tsx | 6 ---- .../DatabaseBackups/DatabaseBackups.test.tsx | 26 ++------------- .../DatabaseResize/DatabaseResize.test.tsx | 25 +++------------ ...atabaseResizeCurrentConfiguration.test.tsx | 15 ++------- .../DatabaseLanding/DatabaseLanding.test.tsx | 24 ++++---------- .../RegionStatusBanner.test.tsx | 14 ++------ .../DeleteKubernetesClusterDialog.test.tsx | 7 ---- .../Linodes/LinodesCreate/VPCPanel.test.tsx | 20 +----------- .../LinodeFirewalls/LinodeFirewalls.test.tsx | 18 ++--------- .../LinodeRescue/RescueDialog.test.tsx | 13 +++----- .../BucketDetail/ObjectDetailsDrawer.test.tsx | 5 +-- .../BucketLanding/CreateBucketDrawer.test.tsx | 30 +---------------- .../features/Search/SearchLanding.test.tsx | 8 ++--- .../SupportTickets/TicketList.test.tsx | 19 +++-------- .../SubnetAssignLinodesDrawer.test.tsx | 16 ++-------- .../VPCs/VPCDetail/SubnetLinodeRow.test.tsx | 21 ++---------- .../VPCs/VPCDetail/VPCDetail.test.tsx | 22 +++---------- .../VPCs/VPCDetail/VPCSubnetsTable.test.tsx | 10 +----- .../VPCs/VPCLanding/VPCLanding.test.tsx | 14 ++------ 27 files changed, 71 insertions(+), 355 deletions(-) create mode 100644 packages/manager/.changeset/pr-10217-tech-stories-1708960982000.md diff --git a/packages/manager/.changeset/pr-10217-tech-stories-1708960982000.md b/packages/manager/.changeset/pr-10217-tech-stories-1708960982000.md new file mode 100644 index 00000000000..5c773dd96b6 --- /dev/null +++ b/packages/manager/.changeset/pr-10217-tech-stories-1708960982000.md @@ -0,0 +1,5 @@ +--- +"@linode/manager": Tech Stories +--- + +Clean up `new QueryClient()` pattern in unit tests ([#10217](https://github.com/linode/manager/pull/10217)) diff --git a/packages/manager/src/components/AbuseTicketBanner/AbuseTicketBanner.test.tsx b/packages/manager/src/components/AbuseTicketBanner/AbuseTicketBanner.test.tsx index 634ba095b3b..05d11b37f99 100644 --- a/packages/manager/src/components/AbuseTicketBanner/AbuseTicketBanner.test.tsx +++ b/packages/manager/src/components/AbuseTicketBanner/AbuseTicketBanner.test.tsx @@ -1,6 +1,5 @@ import { render, waitFor } from '@testing-library/react'; import * as React from 'react'; -import { QueryClient } from 'react-query'; import { abuseTicketNotificationFactory, @@ -43,9 +42,7 @@ describe('Abuse ticket banner', () => { ); }) ); - const { queryAllByText } = render( - wrapWithTheme(, { queryClient: new QueryClient() }) - ); + const { queryAllByText } = render(wrapWithTheme()); await waitFor(() => { expect(queryAllByText(/2 open abuse tickets/)).toHaveLength(1); @@ -59,9 +56,7 @@ describe('Abuse ticket banner', () => { return res(ctx.json(makeResourcePage([mockAbuseTicket]))); }) ); - const { getByTestId } = renderWithTheme(, { - queryClient: new QueryClient(), - }); + const { getByTestId } = renderWithTheme(); await waitFor(() => { const link = getByTestId(TICKET_TESTID); @@ -76,9 +71,7 @@ describe('Abuse ticket banner', () => { return res(ctx.json(makeResourcePage(mockAbuseTickets))); }) ); - const { getByTestId } = renderWithTheme(, { - queryClient: new QueryClient(), - }); + const { getByTestId } = renderWithTheme(); await waitFor(() => { const link = getByTestId(TICKET_TESTID); @@ -92,9 +85,7 @@ describe('Abuse ticket banner', () => { return res(ctx.json(makeResourcePage([]))); }) ); - const { queryByTestId } = renderWithTheme(, { - queryClient: new QueryClient(), - }); + const { queryByTestId } = renderWithTheme(); expect(queryByTestId(TICKET_TESTID)).toBeNull(); }); diff --git a/packages/manager/src/components/AccessPanel/UserSSHKeyPanel.test.tsx b/packages/manager/src/components/AccessPanel/UserSSHKeyPanel.test.tsx index e0d163d76c0..5326b0e1e92 100644 --- a/packages/manager/src/components/AccessPanel/UserSSHKeyPanel.test.tsx +++ b/packages/manager/src/components/AccessPanel/UserSSHKeyPanel.test.tsx @@ -1,7 +1,6 @@ import { waitFor } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import * as React from 'react'; -import { QueryClient } from 'react-query'; import { profileFactory, sshKeyFactory } from 'src/factories'; import { accountUserFactory } from 'src/factories/accountUsers'; @@ -51,8 +50,7 @@ describe('UserSSHKeyPanel', () => { }) ); const { getByText } = renderWithTheme( - , - { queryClient: new QueryClient() } + ); await waitFor(() => { expect(getByText('my-ssh-key', { exact: false })).toBeInTheDocument(); @@ -75,8 +73,7 @@ describe('UserSSHKeyPanel', () => { }) ); const { getByText } = renderWithTheme( - , - { queryClient: new QueryClient() } + ); await waitFor(() => { expect(getByText('test-user', { exact: false })).toBeInTheDocument(); @@ -104,8 +101,7 @@ describe('UserSSHKeyPanel', () => { }; const { getByRole, getByText } = renderWithTheme( - , - { queryClient: new QueryClient() } + ); await waitFor(() => { expect(getByText('test-user')).toBeInTheDocument(); diff --git a/packages/manager/src/components/SelectFirewallPanel/SelectFirewallPanel.test.tsx b/packages/manager/src/components/SelectFirewallPanel/SelectFirewallPanel.test.tsx index 2602e944c18..60c209320af 100644 --- a/packages/manager/src/components/SelectFirewallPanel/SelectFirewallPanel.test.tsx +++ b/packages/manager/src/components/SelectFirewallPanel/SelectFirewallPanel.test.tsx @@ -1,6 +1,5 @@ import { fireEvent, waitFor } from '@testing-library/react'; import * as React from 'react'; -import { QueryClient } from 'react-query'; import { LINODE_CREATE_FLOW_TEXT, @@ -10,12 +9,7 @@ import { mockMatchMedia, renderWithTheme } from 'src/utilities/testHelpers'; import { SelectFirewallPanel } from './SelectFirewallPanel'; -const queryClient = new QueryClient(); - beforeAll(() => mockMatchMedia()); -afterEach(() => { - queryClient.clear(); -}); const testId = 'select-firewall-panel'; @@ -27,10 +21,7 @@ describe('SelectFirewallPanel', () => { handleFirewallChange={vi.fn()} helperText={Testing} selectedFirewallId={-1} - />, - { - queryClient, - } + /> ); await waitFor(() => { @@ -48,7 +39,6 @@ describe('SelectFirewallPanel', () => { />, { flags: { firewallNodebalancer: true }, - queryClient, } ); @@ -73,7 +63,6 @@ describe('SelectFirewallPanel', () => { />, { flags: { firewallNodebalancer: true }, - queryClient, } ); diff --git a/packages/manager/src/components/TagsPanel/TagsPanel.test.tsx b/packages/manager/src/components/TagsPanel/TagsPanel.test.tsx index 0b572f63c9d..16d172084ca 100644 --- a/packages/manager/src/components/TagsPanel/TagsPanel.test.tsx +++ b/packages/manager/src/components/TagsPanel/TagsPanel.test.tsx @@ -1,27 +1,16 @@ import { fireEvent, waitFor } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; import React from 'react'; -import { QueryClient, QueryClientProvider } from 'react-query'; import { renderWithTheme } from 'src/utilities/testHelpers'; import { TagsPanel } from './TagsPanel'; -import type { TagsPanelProps } from './TagsPanel'; -import userEvent from '@testing-library/user-event'; - -const queryClient = new QueryClient(); - -const renderWithQueryClient = (ui: React.ReactElement) => { - return renderWithTheme( - {ui} - ); -}; - describe('TagsPanel', () => { it('renders TagsPanel component with existing tags', async () => { const updateTagsMock = vi.fn(() => Promise.resolve()); - const { getByLabelText, getByText } = renderWithQueryClient( + const { getByLabelText, getByText } = renderWithTheme( ); @@ -40,7 +29,7 @@ describe('TagsPanel', () => { it('creates a new tag successfully', async () => { const updateTagsMock = vi.fn(() => Promise.resolve()); - const { getByLabelText, getByText } = renderWithQueryClient( + const { getByLabelText, getByText } = renderWithTheme( ); @@ -61,18 +50,19 @@ describe('TagsPanel', () => { it('displays an error message for invalid tag creation', async () => { const updateTagsMock = vi.fn(() => Promise.resolve()); - const { getByLabelText, getByText } = renderWithQueryClient( + const { getByLabelText, getByText } = renderWithTheme( ); - fireEvent.click(getByText('Add a tag')); + await userEvent.click(getByText('Add a tag')); fireEvent.change(getByLabelText('Create or Select a Tag'), { target: { value: 'yz' }, }); const newTagItem = getByText('Create "yz"'); - fireEvent.click(newTagItem); + + await userEvent.click(newTagItem); await waitFor(() => expect( @@ -84,11 +74,7 @@ describe('TagsPanel', () => { it('deletes a tag successfully', async () => { const updateTagsMock = vi.fn(() => Promise.resolve()); - const { - getByLabelText, - getByText, - queryByLabelText, - } = renderWithQueryClient( + const { getByLabelText, getByText, queryByLabelText } = renderWithTheme( ); @@ -106,7 +92,7 @@ describe('TagsPanel', () => { it('prevents creation or deletion of tags when disabled', async () => { const updateTagsMock = vi.fn(() => Promise.resolve()); - const { getByText, queryByLabelText, queryByText } = renderWithQueryClient( + const { getByText, queryByLabelText, queryByText } = renderWithTheme( ); diff --git a/packages/manager/src/features/Account/Maintenance/MaintenanceTable.test.tsx b/packages/manager/src/features/Account/Maintenance/MaintenanceTable.test.tsx index 7d20d9dd606..5dddf2d778a 100644 --- a/packages/manager/src/features/Account/Maintenance/MaintenanceTable.test.tsx +++ b/packages/manager/src/features/Account/Maintenance/MaintenanceTable.test.tsx @@ -4,12 +4,10 @@ import { within, } from '@testing-library/react'; import * as React from 'react'; -import { QueryClient } from 'react-query'; import { accountMaintenanceFactory } from 'src/factories'; import { makeResourcePage } from 'src/mocks/serverHandlers'; import { rest, server } from 'src/mocks/testServer'; -import { queryPresets } from 'src/queries/base'; import { parseAPIDate } from 'src/utilities/date'; import { formatDate } from 'src/utilities/formatDate'; import { @@ -21,14 +19,7 @@ import { import { MaintenanceTable } from './MaintenanceTable'; import { MaintenanceTableRow } from './MaintenanceTableRow'; -const queryClient = new QueryClient({ - defaultOptions: { queries: queryPresets.oneTimeFetch }, -}); - beforeAll(() => mockMatchMedia()); -afterEach(() => { - queryClient.clear(); -}); const loadingTestId = 'table-row-loading'; @@ -93,7 +84,7 @@ describe('Maintenance Table', () => { }) ); - renderWithTheme(, { queryClient }); + renderWithTheme(); expect(await screen.findByTestId('table-row-empty')).toBeInTheDocument(); diff --git a/packages/manager/src/features/Databases/DatabaseCreate/DatabaseCreate.test.tsx b/packages/manager/src/features/Databases/DatabaseCreate/DatabaseCreate.test.tsx index 1cddea631a2..a8da6ff98bb 100644 --- a/packages/manager/src/features/Databases/DatabaseCreate/DatabaseCreate.test.tsx +++ b/packages/manager/src/features/Databases/DatabaseCreate/DatabaseCreate.test.tsx @@ -1,7 +1,6 @@ import { fireEvent, waitForElementToBeRemoved } from '@testing-library/react'; import { createMemoryHistory } from 'history'; import * as React from 'react'; -import { QueryClient } from 'react-query'; import { Router } from 'react-router-dom'; import { databaseTypeFactory } from 'src/factories'; @@ -12,28 +11,19 @@ import { mockMatchMedia } from 'src/utilities/testHelpers'; import DatabaseCreate from './DatabaseCreate'; -const queryClient = new QueryClient(); const loadingTestId = 'circle-progress'; beforeAll(() => mockMatchMedia()); -afterEach(() => { - queryClient.clear(); -}); describe('Database Create', () => { it('should render loading state', () => { - const { getByTestId } = renderWithTheme(, { - queryClient, - }); + const { getByTestId } = renderWithTheme(); expect(getByTestId(loadingTestId)).toBeInTheDocument(); }); it('should render inputs', async () => { const { getAllByTestId, getAllByText } = renderWithTheme( - , - { - queryClient, - } + ); await waitForElementToBeRemoved(getAllByTestId(loadingTestId)); @@ -74,10 +64,7 @@ describe('Database Create', () => { const { getAllByText, getByTestId } = renderWithTheme( - , - { - queryClient, - } + ); await waitForElementToBeRemoved(getByTestId(loadingTestId)); diff --git a/packages/manager/src/features/Databases/DatabaseDetail/AccessControls.test.tsx b/packages/manager/src/features/Databases/DatabaseDetail/AccessControls.test.tsx index 86eaff3e5d5..bb057b14fac 100644 --- a/packages/manager/src/features/Databases/DatabaseDetail/AccessControls.test.tsx +++ b/packages/manager/src/features/Databases/DatabaseDetail/AccessControls.test.tsx @@ -1,18 +1,12 @@ import { fireEvent, screen } from '@testing-library/react'; import * as React from 'react'; -import { QueryClient } from 'react-query'; import { databaseFactory } from 'src/factories'; import { mockMatchMedia, renderWithTheme } from 'src/utilities/testHelpers'; import AccessControls from './AccessControls'; -const queryClient = new QueryClient(); - beforeAll(() => mockMatchMedia()); -afterEach(() => { - queryClient.clear(); -}); describe('Access Controls', () => { it('Should have a Remove button for each IP listed in the table', () => { diff --git a/packages/manager/src/features/Databases/DatabaseDetail/AddAccessControlDrawer.test.tsx b/packages/manager/src/features/Databases/DatabaseDetail/AddAccessControlDrawer.test.tsx index 160358deaf9..23a5a3a5399 100644 --- a/packages/manager/src/features/Databases/DatabaseDetail/AddAccessControlDrawer.test.tsx +++ b/packages/manager/src/features/Databases/DatabaseDetail/AddAccessControlDrawer.test.tsx @@ -1,6 +1,5 @@ import { fireEvent, screen } from '@testing-library/react'; import * as React from 'react'; -import { QueryClient } from 'react-query'; import { databaseFactory } from 'src/factories'; import { IPv4List } from 'src/factories/databases'; @@ -10,12 +9,7 @@ import { mockMatchMedia, renderWithTheme } from 'src/utilities/testHelpers'; import AccessControls from './AccessControls'; import AddAccessControlDrawer from './AddAccessControlDrawer'; -const queryClient = new QueryClient(); - beforeAll(() => mockMatchMedia()); -afterEach(() => { - queryClient.clear(); -}); describe('Add Access Controls drawer', () => { const database = databaseFactory.build(); diff --git a/packages/manager/src/features/Databases/DatabaseDetail/DatabaseBackups/DatabaseBackups.test.tsx b/packages/manager/src/features/Databases/DatabaseDetail/DatabaseBackups/DatabaseBackups.test.tsx index 9dba00adf70..9881d95cb68 100644 --- a/packages/manager/src/features/Databases/DatabaseDetail/DatabaseBackups/DatabaseBackups.test.tsx +++ b/packages/manager/src/features/Databases/DatabaseDetail/DatabaseBackups/DatabaseBackups.test.tsx @@ -1,5 +1,4 @@ import * as React from 'react'; -import { QueryClient } from 'react-query'; import { databaseBackupFactory, @@ -13,24 +12,7 @@ import { renderWithTheme } from 'src/utilities/testHelpers'; import DatabaseBackups from './DatabaseBackups'; -const queryClient = new QueryClient(); - -afterEach(() => { - queryClient.clear(); -}); - -const loadingTestId = 'table-row-loading'; - describe('Database Backups', () => { - it('should render a loading state', async () => { - const { getByTestId } = renderWithTheme(, { - queryClient, - }); - - // Should render a loading state - expect(getByTestId(loadingTestId)).toBeInTheDocument(); - }); - it('should render a list of backups after loading', async () => { const backups = databaseBackupFactory.buildList(7); @@ -47,9 +29,7 @@ describe('Database Backups', () => { }) ); - const { findByText } = renderWithTheme(, { - queryClient, - }); + const { findByText } = renderWithTheme(); for (const backup of backups) { // Check to see if all 7 backups are rendered @@ -75,9 +55,7 @@ describe('Database Backups', () => { }) ); - const { findByText } = renderWithTheme(, { - queryClient, - }); + const { findByText } = renderWithTheme(); expect(await findByText('No backups to display.')).toBeInTheDocument(); }); diff --git a/packages/manager/src/features/Databases/DatabaseDetail/DatabaseResize/DatabaseResize.test.tsx b/packages/manager/src/features/Databases/DatabaseDetail/DatabaseResize/DatabaseResize.test.tsx index d14ab0c7775..d37d71ea695 100644 --- a/packages/manager/src/features/Databases/DatabaseDetail/DatabaseResize/DatabaseResize.test.tsx +++ b/packages/manager/src/features/Databases/DatabaseDetail/DatabaseResize/DatabaseResize.test.tsx @@ -5,7 +5,6 @@ import { } from '@testing-library/react'; import { createMemoryHistory } from 'history'; import * as React from 'react'; -import { QueryClient } from 'react-query'; import { Router } from 'react-router-dom'; import { databaseFactory, databaseTypeFactory } from 'src/factories'; @@ -15,13 +14,9 @@ import { mockMatchMedia, renderWithTheme } from 'src/utilities/testHelpers'; import { DatabaseResize } from './DatabaseResize'; -const queryClient = new QueryClient(); const loadingTestId = 'circle-progress'; beforeAll(() => mockMatchMedia()); -afterEach(() => { - queryClient.clear(); -}); describe('database resize', () => { const database = databaseFactory.build(); @@ -31,10 +26,7 @@ describe('database resize', () => { it('should render a loading state', async () => { const { getByTestId } = renderWithTheme( - , - { - queryClient, - } + ); // Should render a loading state @@ -61,10 +53,7 @@ describe('database resize', () => { ); const { getByTestId, getByText } = renderWithTheme( - , - { - queryClient, - } + ); expect(getByTestId(loadingTestId)).toBeInTheDocument(); @@ -103,10 +92,7 @@ describe('database resize', () => { it('resize button should be disabled when no input is provided in the form', async () => { const { getByTestId, getByText } = renderWithTheme( - , - { - queryClient, - } + ); await waitForElementToBeRemoved(getByTestId(loadingTestId)); expect( @@ -121,10 +107,7 @@ describe('database resize', () => { const { container, getByTestId, getByText } = renderWithTheme( - , - { - queryClient, - } + ); await waitForElementToBeRemoved(getByTestId(loadingTestId)); const getById = queryByAttribute.bind(null, 'id'); diff --git a/packages/manager/src/features/Databases/DatabaseDetail/DatabaseResize/DatabaseResizeCurrentConfiguration.test.tsx b/packages/manager/src/features/Databases/DatabaseDetail/DatabaseResize/DatabaseResizeCurrentConfiguration.test.tsx index 6d41b67a3ea..d54812cfebb 100644 --- a/packages/manager/src/features/Databases/DatabaseDetail/DatabaseResize/DatabaseResizeCurrentConfiguration.test.tsx +++ b/packages/manager/src/features/Databases/DatabaseDetail/DatabaseResize/DatabaseResizeCurrentConfiguration.test.tsx @@ -1,6 +1,5 @@ import { waitForElementToBeRemoved } from '@testing-library/react'; import * as React from 'react'; -import { QueryClient } from 'react-query'; import { databaseFactory, databaseTypeFactory } from 'src/factories'; import { makeResourcePage } from 'src/mocks/serverHandlers'; @@ -9,22 +8,15 @@ import { mockMatchMedia, renderWithTheme } from 'src/utilities/testHelpers'; import { DatabaseResizeCurrentConfiguration } from './DatabaseResizeCurrentConfiguration'; -const queryClient = new QueryClient(); const loadingTestId = 'circle-progress'; beforeAll(() => mockMatchMedia()); -afterEach(() => { - queryClient.clear(); -}); describe('database current configuration section', () => { const database = databaseFactory.build(); it('should render a loading state', async () => { const { getByTestId } = renderWithTheme( - , - { - queryClient, - } + ); // Should render a loading state @@ -54,10 +46,7 @@ describe('database current configuration section', () => { ); const { getByTestId, getByText } = renderWithTheme( - , - { - queryClient, - } + ); expect(getByTestId(loadingTestId)).toBeInTheDocument(); diff --git a/packages/manager/src/features/Databases/DatabaseLanding/DatabaseLanding.test.tsx b/packages/manager/src/features/Databases/DatabaseLanding/DatabaseLanding.test.tsx index d38b2cd5030..d59609730af 100644 --- a/packages/manager/src/features/Databases/DatabaseLanding/DatabaseLanding.test.tsx +++ b/packages/manager/src/features/Databases/DatabaseLanding/DatabaseLanding.test.tsx @@ -1,7 +1,6 @@ import { waitForElementToBeRemoved } from '@testing-library/react'; import { DateTime } from 'luxon'; import * as React from 'react'; -import { QueryClient } from 'react-query'; import { databaseInstanceFactory } from 'src/factories'; import { makeResourcePage } from 'src/mocks/serverHandlers'; @@ -17,12 +16,7 @@ import { import DatabaseLanding from './DatabaseLanding'; import DatabaseRow from './DatabaseRow'; -const queryClient = new QueryClient(); - beforeAll(() => mockMatchMedia()); -afterEach(() => { - queryClient.clear(); -}); const loadingTestId = 'circle-progress'; @@ -31,8 +25,7 @@ describe('Database Table Row', () => { const database = databaseInstanceFactory.build(); const { getByText } = renderWithTheme( - wrapWithTableBody(), - { queryClient } + wrapWithTableBody() ); // Check to see if the row rendered some data @@ -47,8 +40,7 @@ describe('Database Table Row', () => { }); const { getByText } = renderWithTheme( - wrapWithTableBody(), - { queryClient } + wrapWithTableBody() ); // Check to see if the row rendered the relative date @@ -67,11 +59,9 @@ describe('Database Table', () => { }) ); - const { - getAllByText, - getByTestId, - queryAllByText, - } = renderWithTheme(, { queryClient }); + const { getAllByText, getByTestId, queryAllByText } = renderWithTheme( + + ); // Loading state should render expect(getByTestId(loadingTestId)).toBeInTheDocument(); @@ -97,9 +87,7 @@ describe('Database Table', () => { }) ); - const { getByTestId, getByText } = renderWithTheme(, { - queryClient, - }); + const { getByTestId, getByText } = renderWithTheme(); await waitForElementToBeRemoved(getByTestId(loadingTestId)); diff --git a/packages/manager/src/features/GlobalNotifications/RegionStatusBanner.test.tsx b/packages/manager/src/features/GlobalNotifications/RegionStatusBanner.test.tsx index 16165e509ee..9e6768a1707 100644 --- a/packages/manager/src/features/GlobalNotifications/RegionStatusBanner.test.tsx +++ b/packages/manager/src/features/GlobalNotifications/RegionStatusBanner.test.tsx @@ -1,6 +1,5 @@ import { waitFor } from '@testing-library/react'; import * as React from 'react'; -import { QueryClient } from 'react-query'; import { regionFactory } from 'src/factories/regions'; import { makeResourcePage } from 'src/mocks/serverHandlers'; @@ -33,10 +32,7 @@ describe('Region status banner', () => { }) ); const { queryAllByTestId, queryAllByText } = renderWithTheme( - , - { - queryClient: new QueryClient(), - } + ); await waitFor(() => { expect(queryAllByText(/Newark, NJ/i)).toHaveLength(1); @@ -53,9 +49,7 @@ describe('Region status banner', () => { return res(ctx.json(makeResourcePage(regions))); }) ); - const { queryAllByTestId } = renderWithTheme(, { - queryClient: new QueryClient(), - }); + const { queryAllByTestId } = renderWithTheme(); await waitFor(() => { expect(queryAllByTestId(/facility-outage/)).toHaveLength(5); @@ -71,9 +65,7 @@ describe('Region status banner', () => { return res(ctx.json(makeResourcePage(regions))); }) ); - const { queryAllByTestId } = renderWithTheme(, { - queryClient: new QueryClient(), - }); + const { queryAllByTestId } = renderWithTheme(); await waitFor(() => { expect(queryAllByTestId(/facility-outage/)).toHaveLength(3); diff --git a/packages/manager/src/features/Kubernetes/KubernetesClusterDetail/DeleteKubernetesClusterDialog.test.tsx b/packages/manager/src/features/Kubernetes/KubernetesClusterDetail/DeleteKubernetesClusterDialog.test.tsx index 9e8bc2b7604..44482f79662 100644 --- a/packages/manager/src/features/Kubernetes/KubernetesClusterDetail/DeleteKubernetesClusterDialog.test.tsx +++ b/packages/manager/src/features/Kubernetes/KubernetesClusterDetail/DeleteKubernetesClusterDialog.test.tsx @@ -1,6 +1,5 @@ import { fireEvent } from '@testing-library/react'; import * as React from 'react'; -import { QueryClient } from 'react-query'; import { rest, server } from 'src/mocks/testServer'; import { renderWithTheme } from 'src/utilities/testHelpers'; @@ -17,12 +16,6 @@ const props: Props = { open: true, }; -const queryClient = new QueryClient(); - -afterEach(() => { - queryClient.clear(); -}); - describe('Kubernetes deletion dialog', () => { it('should close the drawer on cancel', () => { const { getByTestId } = renderWithTheme( diff --git a/packages/manager/src/features/Linodes/LinodesCreate/VPCPanel.test.tsx b/packages/manager/src/features/Linodes/LinodesCreate/VPCPanel.test.tsx index e5018a0679e..2f999fdfca6 100644 --- a/packages/manager/src/features/Linodes/LinodesCreate/VPCPanel.test.tsx +++ b/packages/manager/src/features/Linodes/LinodesCreate/VPCPanel.test.tsx @@ -1,6 +1,5 @@ import { waitFor } from '@testing-library/react'; import * as React from 'react'; -import { QueryClient } from 'react-query'; import { accountFactory, regionFactory } from 'src/factories'; import { makeResourcePage } from 'src/mocks/serverHandlers'; @@ -9,12 +8,7 @@ import { mockMatchMedia, renderWithTheme } from 'src/utilities/testHelpers'; import { VPCPanel, VPCPanelProps } from './VPCPanel'; -const queryClient = new QueryClient(); - beforeAll(() => mockMatchMedia()); -afterEach(() => { - queryClient.clear(); -}); const props = { additionalIPv4RangesForVPC: [], @@ -49,9 +43,7 @@ describe('VPCPanel', () => { }) ); - const wrapper = renderWithTheme(, { - queryClient, - }); + const wrapper = renderWithTheme(); await waitFor(() => { expect(wrapper.getByTestId(vpcPanelTestId)).toBeInTheDocument(); @@ -61,7 +53,6 @@ describe('VPCPanel', () => { it('should display the VPC Panel if the VPC feature flag is on', async () => { const wrapper = renderWithTheme(, { flags: { vpc: true }, - queryClient, }); await waitFor(() => { @@ -72,7 +63,6 @@ describe('VPCPanel', () => { it('should not display the VPC Panel if the user does not have the VPC account capability and the VPC feature flag is off', async () => { const wrapper = renderWithTheme(, { flags: { vpc: false }, - queryClient, }); await waitFor(() => { @@ -96,7 +86,6 @@ describe('VPCPanel', () => { const wrapper = renderWithTheme(, { flags: { vpc: true }, - queryClient, }); await waitFor(() => { @@ -127,7 +116,6 @@ describe('VPCPanel', () => { const wrapper = renderWithTheme(, { flags: { vpc: true }, - queryClient, }); await waitFor(() => { @@ -152,7 +140,6 @@ describe('VPCPanel', () => { const wrapper = renderWithTheme(, { flags: { vpc: true }, - queryClient, }); await waitFor(() => { @@ -182,7 +169,6 @@ describe('VPCPanel', () => { , { flags: { vpc: true }, - queryClient, } ); @@ -207,7 +193,6 @@ describe('VPCPanel', () => { const wrapper = renderWithTheme(, { flags: { vpc: true }, - queryClient, }); await waitFor(() => { @@ -229,7 +214,6 @@ describe('VPCPanel', () => { const wrapper = renderWithTheme(, { flags: { vpc: true }, - queryClient, }); await waitFor(() => { @@ -259,7 +243,6 @@ describe('VPCPanel', () => { const wrapper = renderWithTheme(, { flags: { vpc: true }, - queryClient, }); await waitFor(() => { @@ -294,7 +277,6 @@ describe('VPCPanel', () => { const wrapper = renderWithTheme(, { flags: { vpc: true }, - queryClient, }); await waitFor(() => { diff --git a/packages/manager/src/features/Linodes/LinodesDetail/LinodeNetworking/LinodeFirewalls/LinodeFirewalls.test.tsx b/packages/manager/src/features/Linodes/LinodesDetail/LinodeNetworking/LinodeFirewalls/LinodeFirewalls.test.tsx index b63ad4ee8c3..0c8c2e731df 100644 --- a/packages/manager/src/features/Linodes/LinodesDetail/LinodeNetworking/LinodeFirewalls/LinodeFirewalls.test.tsx +++ b/packages/manager/src/features/Linodes/LinodesDetail/LinodeNetworking/LinodeFirewalls/LinodeFirewalls.test.tsx @@ -1,6 +1,5 @@ import { waitFor } from '@testing-library/react'; import * as React from 'react'; -import { QueryClient } from 'react-query'; import { firewallFactory } from 'src/factories'; import { makeResourcePage } from 'src/mocks/serverHandlers'; @@ -9,18 +8,11 @@ import { mockMatchMedia, renderWithTheme } from 'src/utilities/testHelpers'; import { LinodeFirewalls } from './LinodeFirewalls'; -const queryClient = new QueryClient(); - beforeAll(() => mockMatchMedia()); -afterEach(() => { - queryClient.clear(); -}); describe('LinodeFirewalls', () => { it('should render', () => { - const wrapper = renderWithTheme(, { - queryClient, - }); + const wrapper = renderWithTheme(); // Verify table heading is visible expect(wrapper.getByTestId('linode-firewalls-table-header')).toBeVisible(); @@ -33,9 +25,7 @@ describe('LinodeFirewalls', () => { }) ); - const wrapper = renderWithTheme(, { - queryClient, - }); + const wrapper = renderWithTheme(); await waitFor(() => expect(wrapper.queryByTestId('table-row-empty'))); }); @@ -47,9 +37,7 @@ describe('LinodeFirewalls', () => { }) ); - const wrapper = renderWithTheme(, { - queryClient, - }); + const wrapper = renderWithTheme(); expect(wrapper.queryByTestId('data-qa-linode-firewall-row')); }); diff --git a/packages/manager/src/features/Linodes/LinodesDetail/LinodeRescue/RescueDialog.test.tsx b/packages/manager/src/features/Linodes/LinodesDetail/LinodeRescue/RescueDialog.test.tsx index da92424a33d..1e5654772b1 100644 --- a/packages/manager/src/features/Linodes/LinodesDetail/LinodeRescue/RescueDialog.test.tsx +++ b/packages/manager/src/features/Linodes/LinodesDetail/LinodeRescue/RescueDialog.test.tsx @@ -1,8 +1,9 @@ import * as React from 'react'; -import { QueryClient } from 'react-query'; + import { linodeFactory } from 'src/factories/linodes'; import { typeFactory } from 'src/factories/types'; import { renderWithTheme } from 'src/utilities/testHelpers'; + import { Props, RescueDialog } from './RescueDialog'; const standard = typeFactory.build({ id: 'g6-standard-1' }); @@ -53,10 +54,7 @@ describe('RescueDialog', () => { }); const { getByText, getByTestId } = renderWithTheme( - , - { - queryClient: new QueryClient(), - } + ); expect(getByText(/Rescue Linode/)).toBeInTheDocument(); @@ -73,10 +71,7 @@ describe('RescueDialog', () => { }); const { getByText, queryByTestId } = renderWithTheme( - , - { - queryClient: new QueryClient(), - } + ); expect(getByText(/Rescue Linode/)).toBeInTheDocument(); diff --git a/packages/manager/src/features/ObjectStorage/BucketDetail/ObjectDetailsDrawer.test.tsx b/packages/manager/src/features/ObjectStorage/BucketDetail/ObjectDetailsDrawer.test.tsx index 09d8a2a9d2e..13dc62299f2 100644 --- a/packages/manager/src/features/ObjectStorage/BucketDetail/ObjectDetailsDrawer.test.tsx +++ b/packages/manager/src/features/ObjectStorage/BucketDetail/ObjectDetailsDrawer.test.tsx @@ -1,6 +1,5 @@ import { act, waitFor } from '@testing-library/react'; import * as React from 'react'; -import { QueryClient } from 'react-query'; import { profileFactory } from 'src/factories'; import { rest, server } from 'src/mocks/testServer'; @@ -45,9 +44,7 @@ describe('ObjectDetailsDrawer', () => { res(ctx.json(profileFactory.build({ timezone: 'utc' }))) ) ); - const { getByText } = renderWithTheme(, { - queryClient: new QueryClient(), - }); + const { getByText } = renderWithTheme(); // The date rendering depends on knowing the profile timezone await waitFor(() => diff --git a/packages/manager/src/features/ObjectStorage/BucketLanding/CreateBucketDrawer.test.tsx b/packages/manager/src/features/ObjectStorage/BucketLanding/CreateBucketDrawer.test.tsx index bd597a4a468..29800ff231c 100644 --- a/packages/manager/src/features/ObjectStorage/BucketLanding/CreateBucketDrawer.test.tsx +++ b/packages/manager/src/features/ObjectStorage/BucketLanding/CreateBucketDrawer.test.tsx @@ -10,12 +10,9 @@ import { import { makeResourcePage } from 'src/mocks/serverHandlers'; import { rest, server } from 'src/mocks/testServer'; import { renderWithTheme } from 'src/utilities/testHelpers'; -import { QueryClient, setLogger } from 'react-query'; import { CreateBucketDrawer } from './CreateBucketDrawer'; -const queryClient = new QueryClient(); - const props = { isOpen: true, onClose: vi.fn(), @@ -24,32 +21,7 @@ const props = { vi.mock('src/components/EnhancedSelect/Select'); describe('CreateBucketDrawer', () => { - afterEach(() => { - // Reset React Query logger. - setLogger(console); - }); - - // I tried to fix this test after changing the Select component to use - // Autocomplete but something is still wrong. I'm skipping this test for now - // hoping we can get rid of it and use an end-to-end test instead. - // Will add a follow-up issue. it.skip('Should show a general error notice if the API returns one', async () => { - // Suppress logging React Query errors to CLI since this test is expected - // to trigger errors. - // - // Note: Logging options improved in React Query v4 and `setLogger` will - // be removed in v5. We will be able to accomplish this more cleanly once - // we upgrade. - // - // See also: - // - https://github.com/TanStack/query/issues/125 - // - https://github.com/TanStack/query/discussions/4252 - setLogger({ - log: () => {}, - warn: () => {}, - error: () => {}, - }); - server.use( rest.post('*/object-storage/buckets', (req, res, ctx) => { return res( @@ -90,7 +62,7 @@ describe('CreateBucketDrawer', () => { getByLabelText, getByPlaceholderText, getByTestId, - } = renderWithTheme(, { queryClient }); + } = renderWithTheme(); await userEvent.type( getByLabelText('Label', { exact: false }), diff --git a/packages/manager/src/features/Search/SearchLanding.test.tsx b/packages/manager/src/features/Search/SearchLanding.test.tsx index b7ef1405764..17ddc9bb726 100644 --- a/packages/manager/src/features/Search/SearchLanding.test.tsx +++ b/packages/manager/src/features/Search/SearchLanding.test.tsx @@ -1,14 +1,13 @@ import { render, waitForElementToBeRemoved } from '@testing-library/react'; import { assocPath } from 'ramda'; import * as React from 'react'; -import { QueryClient } from 'react-query'; import { reactRouterProps } from 'src/__data__/reactRouterProps'; import { searchbarResult1 } from 'src/__data__/searchResults'; +import { linodeTypeFactory } from 'src/factories'; import { makeResourcePage } from 'src/mocks/serverHandlers'; import { rest, server } from 'src/mocks/testServer'; import { renderWithTheme, wrapWithTheme } from 'src/utilities/testHelpers'; -import { linodeTypeFactory } from 'src/factories'; import { CombinedProps as Props, SearchLanding } from './SearchLanding'; import { emptyResults } from './utils'; @@ -28,8 +27,6 @@ const propsWithResults: Props = { searchResultsByEntity: { ...emptyResults, linodes: [searchbarResult1] }, }; -const queryClient = new QueryClient(); - describe('Component', () => { beforeEach(() => { server.use( @@ -54,8 +51,7 @@ describe('Component', () => { propsWithResults ); const { getByTestId, getByText } = renderWithTheme( - , - { queryClient } + ); await waitForElementToBeRemoved(getByTestId('loading')); getByText(/search/i); diff --git a/packages/manager/src/features/Support/SupportTickets/TicketList.test.tsx b/packages/manager/src/features/Support/SupportTickets/TicketList.test.tsx index eaa1797d86d..12493eb0f7e 100644 --- a/packages/manager/src/features/Support/SupportTickets/TicketList.test.tsx +++ b/packages/manager/src/features/Support/SupportTickets/TicketList.test.tsx @@ -1,6 +1,5 @@ import { screen, waitForElementToBeRemoved } from '@testing-library/react'; import * as React from 'react'; -import { QueryClient } from 'react-query'; import { supportTicketFactory } from 'src/factories'; import { makeResourcePage } from 'src/mocks/serverHandlers'; @@ -9,12 +8,7 @@ import { mockMatchMedia, renderWithTheme } from 'src/utilities/testHelpers'; import { Props, TicketList } from './TicketList'; -const queryClient = new QueryClient(); - beforeAll(() => mockMatchMedia()); -afterEach(() => { - queryClient.clear(); -}); const props: Props = { filterStatus: 'open', @@ -39,11 +33,9 @@ describe('TicketList', () => { }) ); - const { - getAllByText, - getByTestId, - queryAllByText, - } = renderWithTheme(, { queryClient }); + const { getAllByText, getByTestId, queryAllByText } = renderWithTheme( + + ); // Loading state should render expect(getByTestId(loadingTestId)).toBeInTheDocument(); @@ -70,10 +62,7 @@ describe('TicketList', () => { ); const { getByTestId, getByText } = renderWithTheme( - , - { - queryClient, - } + ); await waitForElementToBeRemoved(getByTestId(loadingTestId)); diff --git a/packages/manager/src/features/VPCs/VPCDetail/SubnetAssignLinodesDrawer.test.tsx b/packages/manager/src/features/VPCs/VPCDetail/SubnetAssignLinodesDrawer.test.tsx index e4174419378..53bc07d90e9 100644 --- a/packages/manager/src/features/VPCs/VPCDetail/SubnetAssignLinodesDrawer.test.tsx +++ b/packages/manager/src/features/VPCs/VPCDetail/SubnetAssignLinodesDrawer.test.tsx @@ -1,7 +1,6 @@ import { Subnet } from '@linode/api-v4'; import { fireEvent, waitFor } from '@testing-library/react'; import * as React from 'react'; -import { QueryClient } from 'react-query'; import { linodeFactory } from 'src/factories'; import { makeResourcePage } from 'src/mocks/serverHandlers'; @@ -10,12 +9,7 @@ import { mockMatchMedia, renderWithTheme } from 'src/utilities/testHelpers'; import { SubnetAssignLinodesDrawer } from './SubnetAssignLinodesDrawer'; -const queryClient = new QueryClient(); - beforeAll(() => mockMatchMedia()); -afterEach(() => { - queryClient.clear(); -}); const props = { onClose: vi.fn(), @@ -43,10 +37,7 @@ describe('Subnet Assign Linodes Drawer', () => { it('should render a subnet assign linodes drawer', () => { const { getByText, queryAllByText } = renderWithTheme( - , - { - queryClient, - } + ); const header = getByText( @@ -74,10 +65,7 @@ describe('Subnet Assign Linodes Drawer', () => { it.skip('should show the IPv4 textbox when the checkmark is clicked', async () => { const { findByText, getByLabelText } = renderWithTheme( - , - { - queryClient, - } + ); const selectField = getByLabelText('Linode'); diff --git a/packages/manager/src/features/VPCs/VPCDetail/SubnetLinodeRow.test.tsx b/packages/manager/src/features/VPCs/VPCDetail/SubnetLinodeRow.test.tsx index 5d2c103b148..58d289b495e 100644 --- a/packages/manager/src/features/VPCs/VPCDetail/SubnetLinodeRow.test.tsx +++ b/packages/manager/src/features/VPCs/VPCDetail/SubnetLinodeRow.test.tsx @@ -1,7 +1,6 @@ import { fireEvent } from '@testing-library/react'; import { waitFor, waitForElementToBeRemoved } from '@testing-library/react'; import * as React from 'react'; -import { QueryClient } from 'react-query'; import { LinodeConfigInterfaceFactory, @@ -23,12 +22,7 @@ import { import { WARNING_ICON_UNRECOMMENDED_CONFIG } from '../constants'; import { SubnetLinodeRow } from './SubnetLinodeRow'; -const queryClient = new QueryClient(); - beforeAll(() => mockMatchMedia()); -afterEach(() => { - queryClient.clear(); -}); const loadingTestId = 'circle-progress'; const mockFirewall0 = 'mock-firewall-0'; @@ -80,10 +74,7 @@ describe('SubnetLinodeRow', () => { linodeId={linodeFactory1.id} subnetId={0} /> - ), - { - queryClient, - } + ) ); // Loading state should render @@ -151,10 +142,7 @@ describe('SubnetLinodeRow', () => { linodeId={linodeFactory1.id} subnetId={0} /> - ), - { - queryClient, - } + ) ); // Loading state should render @@ -235,10 +223,7 @@ describe('SubnetLinodeRow', () => { subnet={subnet} subnetId={subnet.id} /> - ), - { - queryClient, - } + ) ); // Loading state should render diff --git a/packages/manager/src/features/VPCs/VPCDetail/VPCDetail.test.tsx b/packages/manager/src/features/VPCs/VPCDetail/VPCDetail.test.tsx index d75cba141a5..1204d1e55df 100644 --- a/packages/manager/src/features/VPCs/VPCDetail/VPCDetail.test.tsx +++ b/packages/manager/src/features/VPCs/VPCDetail/VPCDetail.test.tsx @@ -1,7 +1,6 @@ import { fireEvent } from '@testing-library/react'; import { waitForElementToBeRemoved } from '@testing-library/react'; import * as React from 'react'; -import { QueryClient } from 'react-query'; import { vpcFactory } from 'src/factories/vpcs'; import { rest, server } from 'src/mocks/testServer'; @@ -9,12 +8,7 @@ import { mockMatchMedia, renderWithTheme } from 'src/utilities/testHelpers'; import VPCDetail from './VPCDetail'; -const queryClient = new QueryClient(); - beforeAll(() => mockMatchMedia()); -afterEach(() => { - queryClient.clear(); -}); const loadingTestId = 'circle-progress'; @@ -27,9 +21,7 @@ describe('VPC Detail Summary section', () => { }) ); - const { getAllByText, getByTestId } = renderWithTheme(, { - queryClient, - }); + const { getAllByText, getByTestId } = renderWithTheme(); // Loading state should render expect(getByTestId(loadingTestId)).toBeInTheDocument(); @@ -63,9 +55,7 @@ describe('VPC Detail Summary section', () => { }) ); - const { getByTestId, getByText } = renderWithTheme(, { - queryClient, - }); + const { getByTestId, getByText } = renderWithTheme(); await waitForElementToBeRemoved(getByTestId(loadingTestId)); @@ -80,9 +70,7 @@ describe('VPC Detail Summary section', () => { }) ); - const { getByTestId, queryByText } = renderWithTheme(, { - queryClient, - }); + const { getByTestId, queryByText } = renderWithTheme(); await waitForElementToBeRemoved(getByTestId(loadingTestId)); @@ -99,9 +87,7 @@ describe('VPC Detail Summary section', () => { }) ); - const { getAllByRole, getByTestId } = renderWithTheme(, { - queryClient, - }); + const { getAllByRole, getByTestId } = renderWithTheme(); await waitForElementToBeRemoved(getByTestId(loadingTestId)); diff --git a/packages/manager/src/features/VPCs/VPCDetail/VPCSubnetsTable.test.tsx b/packages/manager/src/features/VPCs/VPCDetail/VPCSubnetsTable.test.tsx index 4ffff0919f4..5363d8a8bf1 100644 --- a/packages/manager/src/features/VPCs/VPCDetail/VPCSubnetsTable.test.tsx +++ b/packages/manager/src/features/VPCs/VPCDetail/VPCSubnetsTable.test.tsx @@ -1,7 +1,6 @@ import { fireEvent } from '@testing-library/react'; import { waitForElementToBeRemoved } from '@testing-library/react'; import * as React from 'react'; -import { QueryClient } from 'react-query'; import { subnetAssignedLinodeDataFactory, @@ -13,12 +12,7 @@ import { mockMatchMedia, renderWithTheme } from 'src/utilities/testHelpers'; import { VPCSubnetsTable } from './VPCSubnetsTable'; -const queryClient = new QueryClient(); - beforeAll(() => mockMatchMedia()); -afterEach(() => { - queryClient.clear(); -}); const loadingTestId = 'circle-progress'; @@ -43,9 +37,7 @@ describe('VPC Subnets table', () => { getByPlaceholderText, getByTestId, getByText, - } = renderWithTheme(, { - queryClient, - }); + } = renderWithTheme(); await waitForElementToBeRemoved(getByTestId(loadingTestId)); diff --git a/packages/manager/src/features/VPCs/VPCLanding/VPCLanding.test.tsx b/packages/manager/src/features/VPCs/VPCLanding/VPCLanding.test.tsx index 682d7b7b40b..b4c7526fc46 100644 --- a/packages/manager/src/features/VPCs/VPCLanding/VPCLanding.test.tsx +++ b/packages/manager/src/features/VPCs/VPCLanding/VPCLanding.test.tsx @@ -1,6 +1,5 @@ import { waitForElementToBeRemoved } from '@testing-library/react'; import * as React from 'react'; -import { QueryClient } from 'react-query'; import { subnetFactory } from 'src/factories'; import { vpcFactory } from 'src/factories/vpcs'; @@ -10,12 +9,7 @@ import { mockMatchMedia, renderWithTheme } from 'src/utilities/testHelpers'; import VPCLanding from './VPCLanding'; -const queryClient = new QueryClient(); - beforeAll(() => mockMatchMedia()); -afterEach(() => { - queryClient.clear(); -}); const loadingTestId = 'circle-progress'; @@ -30,9 +24,7 @@ describe('VPC Landing Table', () => { }) ); - const { getAllByText, getByTestId } = renderWithTheme(, { - queryClient, - }); + const { getAllByText, getByTestId } = renderWithTheme(); // Loading state should render expect(getByTestId(loadingTestId)).toBeInTheDocument(); @@ -54,9 +46,7 @@ describe('VPC Landing Table', () => { }) ); - const { getByTestId, getByText } = renderWithTheme(, { - queryClient, - }); + const { getByTestId, getByText } = renderWithTheme(); await waitForElementToBeRemoved(getByTestId(loadingTestId)); From 1ceb91ca412527624137a9e72e9e4f2d89d6628b Mon Sep 17 00:00:00 2001 From: Jaalah Ramos <125309814+jaalah-akamai@users.noreply.github.com> Date: Mon, 26 Feb 2024 12:10:43 -0500 Subject: [PATCH 24/37] upcoming: [M3-7777, M3-7778] - Improve Billing & Account Restricted User Experience (#10201) Co-authored-by: Jaalah Ramos Co-authored-by: Joe D'Amore --- ...r-10201-upcoming-features-1708522664228.md | 5 + .../account/account-login-history.spec.ts | 4 +- .../e2e/core/billing/billing-contact.spec.ts | 39 +++++++ .../billing/restricted-user-billing.spec.ts | 13 +-- .../src/features/Account/AccountLanding.tsx | 22 +++- .../src/features/Account/AccountLogins.tsx | 19 ++-- .../manager/src/features/Account/constants.ts | 3 +- .../manager/src/features/Account/utils.ts | 36 ++---- .../PaymentDrawer/PaymentDrawer.tsx | 105 +++++++++++------- .../PaymentDrawer/PaymentMethodCard.tsx | 9 +- .../ContactInformation.test.tsx | 18 +-- .../ContactInfoPanel/ContactInformation.tsx | 31 +++--- .../UpdateContactInformationForm.tsx | 36 ++++++ .../AddPaymentMethodDrawer.tsx | 93 ++++++++++------ .../PaymentInformation.test.tsx | 10 +- .../PaymentInfoPanel/PaymentInformation.tsx | 32 +++--- .../src/features/Billing/billingUtils.ts | 19 ---- .../manager/src/features/Billing/constants.ts | 2 - .../LinodeActionMenu/LinodeActionMenu.tsx | 2 +- .../hooks/useRestrictedGlobalGrantCheck.ts | 4 +- 20 files changed, 312 insertions(+), 190 deletions(-) create mode 100644 packages/manager/.changeset/pr-10201-upcoming-features-1708522664228.md diff --git a/packages/manager/.changeset/pr-10201-upcoming-features-1708522664228.md b/packages/manager/.changeset/pr-10201-upcoming-features-1708522664228.md new file mode 100644 index 00000000000..e31cca3a2a9 --- /dev/null +++ b/packages/manager/.changeset/pr-10201-upcoming-features-1708522664228.md @@ -0,0 +1,5 @@ +--- +"@linode/manager": Upcoming Features +--- + +Improve Billing & Account Restricted User Experience ([#10201](https://github.com/linode/manager/pull/10201)) diff --git a/packages/manager/cypress/e2e/core/account/account-login-history.spec.ts b/packages/manager/cypress/e2e/core/account/account-login-history.spec.ts index 6b213f48bf4..c06eb3c2959 100644 --- a/packages/manager/cypress/e2e/core/account/account-login-history.spec.ts +++ b/packages/manager/cypress/e2e/core/account/account-login-history.spec.ts @@ -130,7 +130,7 @@ describe('Account login history', () => { cy.findByLabelText('Account Logins').should('not.exist'); cy.findByText( - 'Access restricted. Please contact your business partner to request the necessary permission.' + "You don't have permissions to edit this Account. Please contact your business partner to request the necessary permissions." ); }); @@ -165,7 +165,7 @@ describe('Account login history', () => { cy.findByLabelText('Account Logins').should('not.exist'); cy.findByText( - 'Access restricted. Please contact your account administrator to request the necessary permission.' + "You don't have permissions to edit this Account. Please contact your account administrator to request the necessary permissions." ); }); }); diff --git a/packages/manager/cypress/e2e/core/billing/billing-contact.spec.ts b/packages/manager/cypress/e2e/core/billing/billing-contact.spec.ts index 0db765463af..dbd4d28727f 100644 --- a/packages/manager/cypress/e2e/core/billing/billing-contact.spec.ts +++ b/packages/manager/cypress/e2e/core/billing/billing-contact.spec.ts @@ -2,6 +2,16 @@ import { mockGetAccount, mockUpdateAccount } from 'support/intercepts/account'; import { accountFactory } from 'src/factories/account'; import type { Account } from '@linode/api-v4'; import { ui } from 'support/ui'; +import { profileFactory } from '@src/factories'; + +import { + mockAppendFeatureFlags, + mockGetFeatureFlagClientstream, +} from 'support/intercepts/feature-flags'; + +import { mockGetProfile } from 'support/intercepts/profile'; +import { makeFeatureFlagData } from 'support/util/feature-flags'; +import { randomLabel } from 'support/util/random'; /* eslint-disable sonarjs/no-duplicate-string */ const accountData = accountFactory.build({ @@ -151,3 +161,32 @@ describe('Billing Contact', () => { }); }); }); + +describe('Parent/Child feature disabled', () => { + beforeEach(() => { + mockAppendFeatureFlags({ + parentChildAccountAccess: makeFeatureFlagData(false), + }); + mockGetFeatureFlagClientstream(); + }); + + it('disables company name for Parent users', () => { + const mockProfile = profileFactory.build({ + username: randomLabel(), + restricted: false, + user_type: 'parent', + }); + + mockGetProfile(mockProfile); + cy.visitWithLogin('/account/billing/edit'); + + ui.drawer + .findByTitle('Edit Billing Contact Info') + .should('be.visible') + .within(() => { + cy.findByLabelText('Company Name') + .should('be.visible') + .should('be.disabled'); + }); + }); +}); diff --git a/packages/manager/cypress/e2e/core/billing/restricted-user-billing.spec.ts b/packages/manager/cypress/e2e/core/billing/restricted-user-billing.spec.ts index 8c6594b7f46..c0c349545b2 100644 --- a/packages/manager/cypress/e2e/core/billing/restricted-user-billing.spec.ts +++ b/packages/manager/cypress/e2e/core/billing/restricted-user-billing.spec.ts @@ -18,13 +18,10 @@ import { ui } from 'support/ui'; import { makeFeatureFlagData } from 'support/util/feature-flags'; import { randomLabel } from 'support/util/random'; -// Tooltip message that appears on disabled billing action buttons for restricted users. +// Tooltip message that appears on disabled billing action buttons for restricted +// and child users. const restrictedUserTooltip = - 'To modify this content, please contact your administrator.'; - -// Tooltip message that appears on disabled billing action buttons for child users. -const childUserTooltip = - 'To modify this content, please contact your business partner.'; + "You don't have permissions to edit this Account."; // Mock credit card payment method to use in tests. const mockPaymentMethods = [ @@ -288,8 +285,8 @@ describe('restricted user billing flows', () => { mockGetUser(mockUser); cy.visitWithLogin('/account/billing'); - assertEditBillingInfoDisabled(childUserTooltip); - assertAddPaymentMethodDisabled(childUserTooltip); + assertEditBillingInfoDisabled(restrictedUserTooltip); + assertAddPaymentMethodDisabled(restrictedUserTooltip); }); /* diff --git a/packages/manager/src/features/Account/AccountLanding.tsx b/packages/manager/src/features/Account/AccountLanding.tsx index 22f26737899..ecc8f704848 100644 --- a/packages/manager/src/features/Account/AccountLanding.tsx +++ b/packages/manager/src/features/Account/AccountLanding.tsx @@ -13,9 +13,11 @@ import { TabPanels } from 'src/components/Tabs/TabPanels'; import { Tabs } from 'src/components/Tabs/Tabs'; import { switchAccountSessionContext } from 'src/context/switchAccountSessionContext'; import { useParentTokenManagement } from 'src/features/Account/SwitchAccounts/useParentTokenManagement'; +import { getRestrictedResourceText } from 'src/features/Account/utils'; import { useFlags } from 'src/hooks/useFlags'; +import { useRestrictedGlobalGrantCheck } from 'src/hooks/useRestrictedGlobalGrantCheck'; import { useAccount } from 'src/queries/account'; -import { useGrants, useProfile } from 'src/queries/profile'; +import { useProfile } from 'src/queries/profile'; import { sendSwitchAccountEvent } from 'src/utilities/analytics'; import AccountLogins from './AccountLogins'; @@ -48,19 +50,23 @@ const AccountLanding = () => { const history = useHistory(); const location = useLocation(); const { data: account } = useAccount(); - const { data: grants } = useGrants(); const { data: profile } = useProfile(); const flags = useFlags(); const [isDrawerOpen, setIsDrawerOpen] = React.useState(false); const sessionContext = React.useContext(switchAccountSessionContext); - const accountAccessGrant = grants?.global?.account_access; - const readOnlyAccountAccess = accountAccessGrant === 'read_only'; const isAkamaiAccount = account?.billing_source === 'akamai'; const isProxyUser = profile?.user_type === 'proxy'; + const isChildUser = profile?.user_type === 'child'; const isParentUser = profile?.user_type === 'parent'; + const isReadOnly = + useRestrictedGlobalGrantCheck({ + globalGrantType: 'account_access', + permittedGrantLevel: 'read_write', + }) || isChildUser; + const { isParentTokenExpired } = useParentTokenManagement({ isProxyUser }); const tabs = [ @@ -139,6 +145,13 @@ const AccountLanding = () => { breadcrumbProps: { pathname: '/account', }, + buttonDataAttrs: { + disabled: isReadOnly, + tooltipText: getRestrictedResourceText({ + isChildUser, + resourceType: 'Account', + }), + }, title: 'Account', }; @@ -151,7 +164,6 @@ const AccountLanding = () => { landingHeaderProps.onButtonClick = () => history.replace('/account/billing/make-payment'); } - landingHeaderProps.disabledCreateButton = readOnlyAccountAccess; landingHeaderProps.extraActions = canSwitchBetweenParentOrProxyAccount ? ( { diff --git a/packages/manager/src/features/Account/AccountLogins.tsx b/packages/manager/src/features/Account/AccountLogins.tsx index 422ee1974d7..50a19b28fdf 100644 --- a/packages/manager/src/features/Account/AccountLogins.tsx +++ b/packages/manager/src/features/Account/AccountLogins.tsx @@ -23,7 +23,7 @@ import { useAccountLoginsQuery } from 'src/queries/accountLogins'; import { useProfile } from 'src/queries/profile'; import AccountLoginsTableRow from './AccountLoginsTableRow'; -import { getAccessRestrictedText } from './utils'; +import { getRestrictedResourceText } from './utils'; const preferenceKey = 'account-logins'; @@ -67,9 +67,10 @@ const AccountLogins = () => { filter ); const { data: profile } = useProfile(); + const isChildUser = profile?.user_type === 'child'; const isRestrictedChildUser = Boolean( - flags.parentChildAccountAccess && profile?.user_type === 'child' + flags.parentChildAccountAccess && isChildUser ); const isAccountAccessRestricted = isRestrictedChildUser || profile?.restricted; @@ -165,12 +166,14 @@ const AccountLogins = () => { /> ) : ( - - {getAccessRestrictedText( - profile?.user_type, - flags.parentChildAccountAccess - )} - + ); }; diff --git a/packages/manager/src/features/Account/constants.ts b/packages/manager/src/features/Account/constants.ts index 83ac50faa9c..59b82996e97 100644 --- a/packages/manager/src/features/Account/constants.ts +++ b/packages/manager/src/features/Account/constants.ts @@ -1,7 +1,8 @@ export const BUSINESS_PARTNER = 'business partner'; -export const ADMINISTRATOR = 'administrator'; +export const ADMINISTRATOR = 'account administrator'; export const grantTypeMap = { + account: 'Account', database: 'Databases', domain: 'Domains', firewall: 'Firewalls', diff --git a/packages/manager/src/features/Account/utils.ts b/packages/manager/src/features/Account/utils.ts index f46800c5937..6fcd095801e 100644 --- a/packages/manager/src/features/Account/utils.ts +++ b/packages/manager/src/features/Account/utils.ts @@ -1,11 +1,8 @@ import { getStorage, setStorage } from 'src/utilities/storage'; -import type { - GlobalGrantTypes, - GrantLevel, - Token, - UserType, -} from '@linode/api-v4'; +import { ADMINISTRATOR, BUSINESS_PARTNER } from './constants'; + +import type { GlobalGrantTypes, GrantLevel, Token } from '@linode/api-v4'; import type { GrantTypeMap } from 'src/features/Account/types'; export type ActionType = @@ -23,7 +20,8 @@ export type ActionType = interface GetRestrictedResourceText { action?: ActionType; - includeContactMessage?: boolean; + includeContactInfo?: boolean; + isChildUser?: boolean; isSingular?: boolean; resourceType: GrantTypeMap; } @@ -48,7 +46,8 @@ export type RestrictedGlobalGrantType = */ export const getRestrictedResourceText = ({ action = 'edit', - includeContactMessage = true, + includeContactInfo = true, + isChildUser = false, isSingular = true, resourceType, }: GetRestrictedResourceText): string => { @@ -56,30 +55,17 @@ export const getRestrictedResourceText = ({ ? 'this ' + resourceType.replace(/s$/, '') : resourceType; + const contactPerson = isChildUser ? BUSINESS_PARTNER : ADMINISTRATOR; + let message = `You don't have permissions to ${action} ${resource}.`; - if (includeContactMessage) { - message += - ' Please contact your account administrator to request the necessary permissions.'; + if (includeContactInfo) { + message += ` Please contact your ${contactPerson} to request the necessary permissions.`; } return message; }; -/** - * Get an 'access restricted' message based on user type. - */ -export const getAccessRestrictedText = ( - userType: UserType | undefined, - isParentChildFeatureEnabled?: boolean -) => { - return `Access restricted. Please contact your ${ - isParentChildFeatureEnabled && userType === 'child' - ? 'business partner' - : 'account administrator' - } to request the necessary permission.`; -}; - // TODO: Parent/Child: FOR MSW ONLY, REMOVE WHEN API IS READY // ================================================================ // const mockExpiredTime = diff --git a/packages/manager/src/features/Billing/BillingPanels/BillingSummary/PaymentDrawer/PaymentDrawer.tsx b/packages/manager/src/features/Billing/BillingPanels/BillingSummary/PaymentDrawer/PaymentDrawer.tsx index ee55de5fd8a..6ce794aa8f9 100644 --- a/packages/manager/src/features/Billing/BillingPanels/BillingSummary/PaymentDrawer/PaymentDrawer.tsx +++ b/packages/manager/src/features/Billing/BillingPanels/BillingSummary/PaymentDrawer/PaymentDrawer.tsx @@ -20,8 +20,11 @@ import { SupportLink } from 'src/components/SupportLink'; import { TextField } from 'src/components/TextField'; import { TooltipIcon } from 'src/components/TooltipIcon'; import { Typography } from 'src/components/Typography'; +import { getRestrictedResourceText } from 'src/features/Account/utils'; +import { useRestrictedGlobalGrantCheck } from 'src/hooks/useRestrictedGlobalGrantCheck'; import { useAccount } from 'src/queries/account'; import { queryKey } from 'src/queries/accountBilling'; +import { useProfile } from 'src/queries/profile'; import { isCreditCardExpired } from 'src/utilities/creditCard'; import { getAPIErrorOrDefault } from 'src/utilities/errorUtils'; @@ -85,7 +88,7 @@ export const PaymentDrawer = (props: Props) => { isLoading: accountLoading, refetch: accountRefetch, } = useAccount(); - + const { data: profile } = useProfile(); const { classes, cx } = useStyles(); const { enqueueSnackbar } = useSnackbar(); @@ -111,6 +114,13 @@ export const PaymentDrawer = (props: Props) => { const minimumPayment = getMinimumPayment(account?.balance || 0); const paymentTooLow = +usd < +minimumPayment; + const isChildUser = profile?.user_type === 'child'; + const isReadOnly = + useRestrictedGlobalGrantCheck({ + globalGrantType: 'account_access', + permittedGrantLevel: 'read_write', + }) || isChildUser; + React.useEffect(() => { setUSD(getMinimumPayment(account?.balance || 0)); }, [account]); @@ -226,6 +236,15 @@ export const PaymentDrawer = (props: Props) => { return ( + {isReadOnly && ( + + )} {errorMessage && } {warning ? : null} {isProcessing ? : null} @@ -250,7 +269,7 @@ export const PaymentDrawer = (props: Props) => { InputProps={{ startAdornment: $, }} - disabled={isProcessing} + disabled={isProcessing || isReadOnly} label="Payment Amount" noMarginTop onBlur={handleOnBlur} @@ -268,6 +287,7 @@ export const PaymentDrawer = (props: Props) => { {hasPaymentMethods ? ( paymentMethods?.map((paymentMethod: PaymentMethod) => ( { /> ) : null} - + ); return ( @@ -80,17 +74,19 @@ export const UpgradeVolumesDialog = (props: Props) => { open={open} title={`Upgrade Volume${numUpgradeableVolumes === 1 ? '' : 's'}`} > - + 1} label={linode.label} type="linode" /> - - As part of the upgrade process, this Linode may be rebooted and will - be returned to its last known state prior to the upgrade. - - + + + As part of the upgrade process, this Linode may be rebooted and will + be returned to its last known state prior to the upgrade. + + + ); }; diff --git a/packages/manager/src/features/Linodes/LinodesDetail/VolumesUpgradeBanner.tsx b/packages/manager/src/features/Linodes/LinodesDetail/VolumesUpgradeBanner.tsx new file mode 100644 index 00000000000..db87a52f73e --- /dev/null +++ b/packages/manager/src/features/Linodes/LinodesDetail/VolumesUpgradeBanner.tsx @@ -0,0 +1,67 @@ +import React from 'react'; +import { useHistory } from 'react-router-dom'; + +import { Button } from 'src/components/Button/Button'; +import { Link } from 'src/components/Link'; +import { Notice } from 'src/components/Notice/Notice'; +import { Paper } from 'src/components/Paper'; +import { Stack } from 'src/components/Stack'; +import { Typography } from 'src/components/Typography'; +import { getUpgradeableVolumeIds } from 'src/features/Volumes/utils'; +import { useNotificationsQuery } from 'src/queries/accountNotifications'; +import { useLinodeVolumesQuery } from 'src/queries/volumes'; + +interface Props { + linodeId: number; +} + +export const VolumesUpgradeBanner = ({ linodeId }: Props) => { + const history = useHistory(); + + const { data: volumesData } = useLinodeVolumesQuery(linodeId); + const { data: notifications } = useNotificationsQuery(); + + const volumeIdsEligibleForUpgrade = getUpgradeableVolumeIds( + volumesData?.data ?? [], + notifications ?? [] + ); + + const numUpgradeableVolumes = volumeIdsEligibleForUpgrade.length; + + if (numUpgradeableVolumes === 0) { + return null; + } + + return ( + + + + + {numUpgradeableVolumes === 1 + ? 'A Volume attached to this Linode is ' + : 'Volumes attached to this Linode are '} + eligible for a free upgrade to high performance NVMe Block + Storage.{' '} + + Learn More + + . + + + + + + ); +}; diff --git a/packages/manager/src/features/Linodes/LinodesDetail/VolumesUpgradeBenner.test.tsx b/packages/manager/src/features/Linodes/LinodesDetail/VolumesUpgradeBenner.test.tsx new file mode 100644 index 00000000000..ca51ccc58e3 --- /dev/null +++ b/packages/manager/src/features/Linodes/LinodesDetail/VolumesUpgradeBenner.test.tsx @@ -0,0 +1,67 @@ +import React from 'react'; + +import { notificationFactory, volumeFactory } from 'src/factories'; +import { makeResourcePage } from 'src/mocks/serverHandlers'; +import { rest, server } from 'src/mocks/testServer'; +import { renderWithTheme } from 'src/utilities/testHelpers'; + +import { VolumesUpgradeBanner } from './VolumesUpgradeBanner'; + +describe('VolumesUpgradeBanner', () => { + it('should render if there is an upgradable volume', async () => { + const volume = volumeFactory.build(); + const notification = notificationFactory.build({ + entity: { id: volume.id, type: 'volume' }, + type: 'volume_migration_scheduled', + }); + + server.use( + rest.get('*/linode/instances/:id/volumes', (req, res, ctx) => { + return res(ctx.json(makeResourcePage([volume]))); + }), + rest.get('*/account/notifications', (req, res, ctx) => { + return res(ctx.json(makeResourcePage([notification]))); + }) + ); + + const { findByText } = renderWithTheme( + + ); + + await findByText('A Volume attached to this Linode is eligible', { + exact: false, + }); + }); + + it('should render if there are many upgradable volumes', async () => { + const volumes = volumeFactory.buildList(5); + + const notifications = [ + notificationFactory.build({ + entity: { id: volumes[0].id, type: 'volume' }, + type: 'volume_migration_scheduled', + }), + notificationFactory.build({ + entity: { id: volumes[1].id, type: 'volume' }, + type: 'volume_migration_scheduled', + }), + ]; + + server.use( + rest.get('*/linode/instances/:id/volumes', (req, res, ctx) => { + return res(ctx.json(makeResourcePage(volumes))); + }), + rest.get('*/account/notifications', (req, res, ctx) => { + return res(ctx.json(makeResourcePage(notifications))); + }) + ); + + const { findByText } = renderWithTheme( + + ); + + await findByText('Volumes attached to this Linode are eligible', { + exact: false, + }); + }); +}); diff --git a/packages/manager/src/features/Linodes/LinodesDetail/types.ts b/packages/manager/src/features/Linodes/LinodesDetail/types.ts deleted file mode 100644 index 7a51a5bfb09..00000000000 --- a/packages/manager/src/features/Linodes/LinodesDetail/types.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Event, GrantLevel } from '@linode/api-v4/lib/account'; -import { Config, Disk } from '@linode/api-v4/lib/linodes'; - -import { ExtendedType } from 'src/utilities/extendType'; -import { LinodeWithMaintenance } from 'src/utilities/linodes'; - -export interface ExtendedLinode extends LinodeWithMaintenance { - _configs: Config[]; - _disks: Disk[]; - _events: Event[]; - _permissions: GrantLevel; - // Example: "Needs Maintenance" has a higher priority than "Offline". - _statusPriority?: number; - // In the Linodes table, the "Status" column can be sorted by priority. - _type?: ExtendedType | null; -} diff --git a/packages/manager/src/features/Volumes/UpgradeVolumeDialog.tsx b/packages/manager/src/features/Volumes/UpgradeVolumeDialog.tsx index cb5d3560303..ab854121709 100644 --- a/packages/manager/src/features/Volumes/UpgradeVolumeDialog.tsx +++ b/packages/manager/src/features/Volumes/UpgradeVolumeDialog.tsx @@ -8,6 +8,8 @@ import { Typography } from 'src/components/Typography'; import { useVolumesMigrateMutation } from 'src/queries/volumesMigrations'; import { getAPIErrorOrDefault } from 'src/utilities/errorUtils'; +import type { Volume } from '@linode/api-v4'; + interface CopyProps { isManyVolumes?: boolean; label: string; @@ -35,14 +37,13 @@ export const VolumeUpgradeCopy = (props: CopyProps) => { }; interface Props { - id: number; - label: string; onClose: () => void; open: boolean; + volume: Volume | undefined; } export const UpgradeVolumeDialog = (props: Props) => { - const { id, label, onClose, open } = props; + const { onClose, open, volume } = props; const { enqueueSnackbar } = useSnackbar(); const { @@ -52,10 +53,16 @@ export const UpgradeVolumeDialog = (props: Props) => { } = useVolumesMigrateMutation(); const onSubmit = () => { - migrateVolumes([id]).then(() => { - enqueueSnackbar(`Successfully added ${label} to the migration queue.`, { - variant: 'success', - }); + if (!volume) { + return; + } + migrateVolumes([volume.id]).then(() => { + enqueueSnackbar( + `Successfully added ${volume.label} to the migration queue.`, + { + variant: 'success', + } + ); onClose(); }); }; @@ -81,9 +88,9 @@ export const UpgradeVolumeDialog = (props: Props) => { actions={actions} onClose={onClose} open={open} - title={`Upgrade Volume ${label}`} + title={`Upgrade Volume ${volume?.label}`} > - + ); }; diff --git a/packages/manager/src/features/Volumes/VolumeTableRow.test.tsx b/packages/manager/src/features/Volumes/VolumeTableRow.test.tsx index 30e32ea53f4..f4b3f367d5b 100644 --- a/packages/manager/src/features/Volumes/VolumeTableRow.test.tsx +++ b/packages/manager/src/features/Volumes/VolumeTableRow.test.tsx @@ -1,11 +1,13 @@ import userEvent from '@testing-library/user-event'; import * as React from 'react'; -import { volumeFactory } from 'src/factories'; +import { notificationFactory, volumeFactory } from 'src/factories'; +import { makeResourcePage } from 'src/mocks/serverHandlers'; +import { rest, server } from 'src/mocks/testServer'; import { renderWithTheme, wrapWithTableBody } from 'src/utilities/testHelpers'; -import { VolumeTableRow } from './VolumeTableRow'; import { ActionHandlers } from './VolumesActionMenu'; +import { VolumeTableRow } from './VolumeTableRow'; const attachedVolume = volumeFactory.build({ linode_id: 0, @@ -26,6 +28,7 @@ const handlers: ActionHandlers = { handleDetails: vi.fn(), handleEdit: vi.fn(), handleResize: vi.fn(), + handleUpgrade: vi.fn(), }; describe('Volume table row', () => { @@ -61,6 +64,46 @@ describe('Volume table row', () => { // Make sure there is an attach button expect(getByText('Attach')); }); + + it('should should render an upgrade chip if the volume is eligible for an upgrade', async () => { + const volume = volumeFactory.build({ id: 5 }); + const notification = notificationFactory.build({ + entity: { id: volume.id, type: 'volume' }, + type: 'volume_migration_scheduled', + }); + + server.use( + rest.get('*/account/notifications', (req, res, ctx) => { + return res(ctx.json(makeResourcePage([notification]))); + }) + ); + + const { findByText } = renderWithTheme( + wrapWithTableBody() + ); + + await findByText('UPGRADE TO NVMe'); + }); + + it('should should render an "UPGRADE PENDING" chip if the volume upgrade is imminent', async () => { + const volume = volumeFactory.build({ id: 5 }); + const notification = notificationFactory.build({ + entity: { id: volume.id, type: 'volume' }, + type: 'volume_migration_imminent', + }); + + server.use( + rest.get('*/account/notifications', (req, res, ctx) => { + return res(ctx.json(makeResourcePage([notification]))); + }) + ); + + const { findByText } = renderWithTheme( + wrapWithTableBody() + ); + + await findByText('UPGRADE PENDING'); + }); }); describe('Volume table row - for linodes detail page', () => { diff --git a/packages/manager/src/features/Volumes/VolumeTableRow.tsx b/packages/manager/src/features/Volumes/VolumeTableRow.tsx index 1b0921cc45b..ec666f3d261 100644 --- a/packages/manager/src/features/Volumes/VolumeTableRow.tsx +++ b/packages/manager/src/features/Volumes/VolumeTableRow.tsx @@ -1,24 +1,28 @@ -import { Event } from '@linode/api-v4/lib/account'; -import { Volume } from '@linode/api-v4/lib/volumes/types'; -import { makeStyles } from 'tss-react/mui'; import * as React from 'react'; -import { Link } from 'react-router-dom'; +import { Link, useHistory } from 'react-router-dom'; +import { makeStyles } from 'tss-react/mui'; import { Box } from 'src/components/Box'; +import { Chip } from 'src/components/Chip'; import { Hidden } from 'src/components/Hidden'; import { StatusIcon } from 'src/components/StatusIcon/StatusIcon'; -import { Status } from 'src/components/StatusIcon/StatusIcon'; import { TableCell } from 'src/components/TableCell'; import { TableRow } from 'src/components/TableRow'; import { Typography } from 'src/components/Typography'; +import { useNotificationsQuery } from 'src/queries/accountNotifications'; +import { useInProgressEvents } from 'src/queries/events/events'; import { useRegionsQuery } from 'src/queries/regions'; +import { + getDerivedVolumeStatusFromStatusAndEvent, + getEventProgress, + volumeStatusIconMap, +} from './utils'; import { ActionHandlers, VolumesActionMenu } from './VolumesActionMenu'; +import type { Volume } from '@linode/api-v4'; + export const useStyles = makeStyles()({ - chipWrapper: { - alignSelf: 'center', - }, volumePath: { width: '35%', wordBreak: 'break-all', @@ -31,44 +35,61 @@ interface Props { volume: Volume; } -export const progressFromEvent = (e?: Event) => { - if (!e) { - return undefined; - } +export const VolumeTableRow = React.memo((props: Props) => { + const { classes } = useStyles(); + const { handlers, isDetailsPageRow, volume } = props; - if (e.status === 'started' && e.percent_complete) { - return e.percent_complete; - } + const history = useHistory(); - return undefined; -}; + const { data: regions } = useRegionsQuery(); + const { data: notifications } = useNotificationsQuery(); + const { data: inProgressEvents } = useInProgressEvents(); -export const isVolumeUpdating = (e?: Event) => { - // Make Typescript happy, since this function can otherwise technically return undefined - if (!e) { - return false; - } - return ( - e && - ['volume_attach', 'volume_create', 'volume_detach'].includes(e.action) && - ['scheduled', 'started'].includes(e.status) + const isVolumesLanding = !isDetailsPageRow; + + /** + * Once a migration is scheduled by Linode and eligible for an upgrade, + * the customer will receive a `volume_migration_scheduled` notification + */ + const isEligibleForUpgradeToNVMe = notifications?.some( + (notification) => + notification.type === 'volume_migration_scheduled' && + notification.entity?.id === volume.id ); -}; -export const volumeStatusIconMap: Record = { - active: 'active', - creating: 'other', - migrating: 'other', - offline: 'inactive', - resizing: 'other', -}; + /** + * Once a migration's scheduled date has passed, the customer will receive + * a `volume_migration_imminent` notification instead of the `volume_migration_scheduled` notification. + * + * This means that the migration will start when it gets picked up by a backend worker. + * The volume's status is set to `migrating` and a `volume_migrate` event is created. + */ + const isNVMeUpgradeImminent = notifications?.some( + (notification) => + notification.type === 'volume_migration_imminent' && + notification.entity?.id === volume.id + ); -export const VolumeTableRow = React.memo((props: Props) => { - const { classes } = useStyles(); - const { data: regions } = useRegionsQuery(); - const { handlers, isDetailsPageRow, volume } = props; + const mostRecentVolumeEvent = inProgressEvents?.find( + (event) => event.entity?.id === volume.id && event.entity.type === 'volume' + ); - const isVolumesLanding = !isDetailsPageRow; + const volumeStatus = getDerivedVolumeStatusFromStatusAndEvent( + volume.status, + mostRecentVolumeEvent + ); + + const isVolumeMigrating = volumeStatus === 'migrating'; + + const handleUpgrade = () => { + if (volume.linode_id !== null) { + // If the volume is attached to a Linode, we force the user + // to upgrade all of the Linode's volumes at once from the Linode details page + history.push(`/linodes/${volume.linode_id}/storage?upgrade=true`); + } else { + handlers.handleUpgrade(); + } + }; const regionLabel = regions?.find((r) => r.id === volume.region)?.label ?? volume.region; @@ -80,30 +101,42 @@ export const VolumeTableRow = React.memo((props: Props) => { sx={{ alignItems: 'center', display: 'flex', + gap: 2, justifyContent: 'space-between', wrap: 'nowrap', }} > {volume.label} + {isEligibleForUpgradeToNVMe && ( + + )} + {isNVMeUpgradeImminent && !isVolumeMigrating && ( + + )} - - {volume.status.replace('_', ' ')} + + {volumeStatus} {getEventProgress(mostRecentVolumeEvent)} - {isVolumesLanding && volume.region ? ( + {isVolumesLanding && ( {regionLabel} - ) : null} + )} {volume.size} GB - {!isVolumesLanding ? ( + {!isVolumesLanding && ( {volume.filesystem_path} - ) : null} + )} {isVolumesLanding && ( {volume.linode_id !== null ? ( diff --git a/packages/manager/src/features/Volumes/VolumesActionMenu.test.tsx b/packages/manager/src/features/Volumes/VolumesActionMenu.test.tsx index 2123552f8b3..ed035f5609c 100644 --- a/packages/manager/src/features/Volumes/VolumesActionMenu.test.tsx +++ b/packages/manager/src/features/Volumes/VolumesActionMenu.test.tsx @@ -17,6 +17,7 @@ const props: Props = { handleDetails: vi.fn(), handleEdit: vi.fn(), handleResize: vi.fn(), + handleUpgrade: vi.fn(), }, isVolumesLanding: true, volume, diff --git a/packages/manager/src/features/Volumes/VolumesActionMenu.tsx b/packages/manager/src/features/Volumes/VolumesActionMenu.tsx index 62c7fc4db22..97fb11c9d9d 100644 --- a/packages/manager/src/features/Volumes/VolumesActionMenu.tsx +++ b/packages/manager/src/features/Volumes/VolumesActionMenu.tsx @@ -15,6 +15,7 @@ export interface ActionHandlers { handleDetails: () => void; handleEdit: () => void; handleResize: () => void; + handleUpgrade: () => void; } export interface Props { diff --git a/packages/manager/src/features/Volumes/VolumesLanding.tsx b/packages/manager/src/features/Volumes/VolumesLanding.tsx index afb576a03b1..438a5196b59 100644 --- a/packages/manager/src/features/Volumes/VolumesLanding.tsx +++ b/packages/manager/src/features/Volumes/VolumesLanding.tsx @@ -23,9 +23,10 @@ import { DeleteVolumeDialog } from './DeleteVolumeDialog'; import { DetachVolumeDialog } from './DetachVolumeDialog'; import { EditVolumeDrawer } from './EditVolumeDrawer'; import { ResizeVolumeDrawer } from './ResizeVolumeDrawer'; +import { UpgradeVolumeDialog } from './UpgradeVolumeDialog'; import { VolumeDetailsDrawer } from './VolumeDetailsDrawer'; -import { VolumeTableRow } from './VolumeTableRow'; import { VolumesLandingEmptyState } from './VolumesLandingEmptyState'; +import { VolumeTableRow } from './VolumeTableRow'; import type { Volume } from '@linode/api-v4'; @@ -69,6 +70,7 @@ export const VolumesLanding = () => { const [isAttachDrawerOpen, setIsAttachDrawerOpen] = React.useState(false); const [isDetachDialogOpen, setIsDetachDialogOpen] = React.useState(false); const [isDeleteDialogOpen, setIsDeleteDialogOpen] = React.useState(false); + const [isUpgradeDialogOpen, setIsUpgradeDialogOpen] = React.useState(false); const selectedVolume = volumes?.data.find((v) => v.id === selectedVolumeId); @@ -107,6 +109,11 @@ export const VolumesLanding = () => { setIsAttachDrawerOpen(true); }; + const handleUpgrade = (volume: Volume) => { + setSelectedVolumeId(volume.id); + setIsUpgradeDialogOpen(true); + }; + if (isLoading) { return ; } @@ -177,6 +184,7 @@ export const VolumesLanding = () => { handleDetails: () => handleDetails(volume), handleEdit: () => handleEdit(volume), handleResize: () => handleResize(volume), + handleUpgrade: () => handleUpgrade(volume), }} key={volume.id} volume={volume} @@ -227,6 +235,11 @@ export const VolumesLanding = () => { open={isDetachDialogOpen} volume={selectedVolume} /> + setIsUpgradeDialogOpen(false)} + open={isUpgradeDialogOpen} + volume={selectedVolume} + /> setIsDeleteDialogOpen(false)} open={isDeleteDialogOpen} diff --git a/packages/manager/src/features/Volumes/utils.test.ts b/packages/manager/src/features/Volumes/utils.test.ts new file mode 100644 index 00000000000..8e4413b8c02 --- /dev/null +++ b/packages/manager/src/features/Volumes/utils.test.ts @@ -0,0 +1,88 @@ +import { + eventFactory, + notificationFactory, + volumeFactory, +} from 'src/factories'; + +import { + getDerivedVolumeStatusFromStatusAndEvent, + getEventProgress, + getUpgradeableVolumeIds, +} from './utils'; + +describe('getDerivedVolumeStatusFromStatusAndEvent', () => { + it('should return the volume status if no event exists', () => { + const volume = volumeFactory.build(); + expect( + getDerivedVolumeStatusFromStatusAndEvent(volume.status, undefined) + ).toBe(volume.status); + }); + + it('should return "migrating" if a migration event is in progress regardless of what the volume status actually is', () => { + const volume = volumeFactory.build({ status: 'active' }); + const event = eventFactory.build({ + action: 'volume_migrate', + status: 'started', + }); + + expect(getDerivedVolumeStatusFromStatusAndEvent(volume.status, event)).toBe( + 'migrating' + ); + }); +}); + +describe('getEventProgress', () => { + it('should return null if the status is not "started"', () => { + const event = eventFactory.build({ + percent_complete: 20, + status: 'finished', + }); + expect(getEventProgress(event)).toBe(null); + }); + + it('should return null if the API does not return a percentage', () => { + const event = eventFactory.build({ + percent_complete: null, + status: 'started', + }); + expect(getEventProgress(event)).toBe(null); + }); + + it('should return a formatted percentage if the API returns a percentage and the event is "started"', () => { + const event = eventFactory.build({ + percent_complete: 25, + status: 'started', + }); + expect(getEventProgress(event)).toBe('(25%)'); + }); +}); + +describe('getUpgradeableVolumeIds', () => { + it('should return the id of volumes that have a corresponding upgrade notification', () => { + const volumes = [ + volumeFactory.build({ id: 1 }), + volumeFactory.build({ id: 2 }), + volumeFactory.build({ id: 3 }), + ]; + + const notifications = [ + notificationFactory.build({ + entity: { id: 1 }, + type: 'volume_migration_scheduled', + }), + notificationFactory.build({ + entity: { id: 3 }, + type: 'volume_migration_scheduled', + }), + ]; + + expect(getUpgradeableVolumeIds(volumes, notifications)).toStrictEqual([ + 1, + 3, + ]); + }); + + it('should return an empty array given empty data', () => { + expect(getUpgradeableVolumeIds([], [])).toStrictEqual([]); + }); +}); diff --git a/packages/manager/src/features/Volumes/utils.ts b/packages/manager/src/features/Volumes/utils.ts new file mode 100644 index 00000000000..f8c33aa11cf --- /dev/null +++ b/packages/manager/src/features/Volumes/utils.ts @@ -0,0 +1,84 @@ +import type { Event, Notification, Volume } from '@linode/api-v4'; +import type { Status } from 'src/components/StatusIcon/StatusIcon'; + +export const volumeStatusIconMap: Record = { + active: 'active', + creating: 'other', + migrating: 'other', + offline: 'inactive', + resizing: 'other', +}; + +/** + * Given an in-progress event and a volume's status, this function + * returns a volume's status with event info taken into account. + * + * We do this to provide users with a real-time feeling experience + * without having to refetch a volume's status agressivly. + * + * @param status The actual volume status from the volumes endpoint + * @param event An in-progress event for the volume + * @returns a volume status + */ +export const getDerivedVolumeStatusFromStatusAndEvent = ( + status: Volume['status'], + event: Event | undefined +): Volume['status'] => { + if (event === undefined) { + return status; + } + + if (event.action === 'volume_migrate' && event.status === 'started') { + return 'migrating'; + } + + return status; +}; + +/** + * Returns a nicely formated percentage from an event + * only if the event is in progress and has a percentage. + * + * This allows us to show the user the progress of a + * volume migration. + * + * @returns "(50%)" for example + */ +export const getEventProgress = (event: Event | undefined) => { + if ( + event === undefined || + event.percent_complete === null || + event.status !== 'started' + ) { + return null; + } + + return `(${event.percent_complete}%)`; +}; + +/** + * Returns an array of IDs of Volumes that are scheduled to be upgraded. + * + * @param volumes - Array from which to retrieve upgradeable Volumes. + * @param notifications - Notifications containing Volume migration statuses. + * + * @returns Array of upgradeable Volume IDs. + */ +export const getUpgradeableVolumeIds = ( + volumes: Volume[], + notifications: Notification[] +) => { + return notifications + .filter( + (notification) => notification.type === 'volume_migration_scheduled' + ) + .reduce((volumeIds: number[], notification: Notification) => { + const upgradeableVolume = volumes.find( + (volume) => volume.id === notification.entity?.id + ); + if (upgradeableVolume) { + volumeIds.push(upgradeableVolume.id); + } + return volumeIds; + }, []); +}; diff --git a/packages/manager/src/hooks/useToastNotifications.tsx b/packages/manager/src/hooks/useToastNotifications.tsx index 684bd6016d5..22d252cec42 100644 --- a/packages/manager/src/hooks/useToastNotifications.tsx +++ b/packages/manager/src/hooks/useToastNotifications.tsx @@ -138,6 +138,10 @@ const toasts: Toasts = { failure: (e) => `Error detaching Volume ${getLabel(e)}.`, success: (e) => `Volume ${getLabel(e)} successfully detached.`, }, + volume_migrate: { + failure: (e) => `Error upgrading Volume ${getLabel(e)}.`, + success: (e) => `Volume ${getLabel(e)} successfully upgraded.`, + }, }; export const useToastNotifications = () => { diff --git a/packages/manager/src/queries/volumes.ts b/packages/manager/src/queries/volumes.ts index bce51491ada..5b4098d1534 100644 --- a/packages/manager/src/queries/volumes.ts +++ b/packages/manager/src/queries/volumes.ts @@ -24,11 +24,12 @@ import { useQueryClient, } from 'react-query'; +import { EventHandlerData } from 'src/hooks/useEventHandlers'; import { getAll } from 'src/utilities/getAll'; +import { queryKey as notificationsQueryKey } from './accountNotifications'; import { updateInPaginatedStore } from './base'; import { queryKey as PROFILE_QUERY_KEY } from './profile'; -import { EventHandlerData } from 'src/hooks/useEventHandlers'; export const queryKey = 'volumes'; @@ -185,6 +186,15 @@ export const volumeEventsHandler = ({ queryClient.invalidateQueries([queryKey]); } + if ( + event.action === 'volume_migrate' && + (event.status === 'finished' || event.status === 'failed') + ) { + // if a migration finishes, we want to re-request notifications so that the `volume_migration_imminent` + // notification goes away. + queryClient.invalidateQueries(notificationsQueryKey); + } + if (event.action === 'volume_clone') { // The API gives us no way to know when a cloned volume transitions from // creating to active, so we will just refresh after 10 seconds diff --git a/packages/manager/src/queries/volumesMigrations.ts b/packages/manager/src/queries/volumesMigrations.ts index d59d51fbcb1..604fd05ddd6 100644 --- a/packages/manager/src/queries/volumesMigrations.ts +++ b/packages/manager/src/queries/volumesMigrations.ts @@ -4,8 +4,9 @@ import { migrateVolumes, } from '@linode/api-v4/lib/volumes/migrations'; import { VolumesMigrationQueue } from '@linode/api-v4/lib/volumes/types'; -import { useMutation, useQuery } from 'react-query'; +import { useMutation, useQuery, useQueryClient } from 'react-query'; +import { queryKey as notificationsQueryKey } from './accountNotifications'; import { queryPresets } from './base'; const queryKey = 'volumes-migrations'; @@ -20,5 +21,19 @@ export const useVolumesMigrationQueueQuery = ( { ...queryPresets.shortLived, enabled } ); -export const useVolumesMigrateMutation = () => - useMutation<{}, APIError[], number[]>(migrateVolumes); +export const useVolumesMigrateMutation = () => { + const queryClient = useQueryClient(); + + return useMutation<{}, APIError[], number[]>({ + mutationFn: migrateVolumes, + onSuccess: () => { + // If a customer "force" migrates they will then see a + // `volume_migration_imminent` notification instead of + // the `volume_migration_scheduled` notification. + setTimeout(() => { + // Refetch notifications after 1.5 seconds. The API needs some time to process. + queryClient.invalidateQueries(notificationsQueryKey); + }, 1500); + }, + }); +}; From e255d5bff334d2e8b15f0930ab4e9074845b838a Mon Sep 17 00:00:00 2001 From: Jaalah Ramos <125309814+jaalah-akamai@users.noreply.github.com> Date: Tue, 27 Feb 2024 17:27:27 -0500 Subject: [PATCH 30/37] upcoming: [M3-7814, M3-7819] - Fix Account Switching (#10234) Co-authored-by: Jaalah Ramos Co-authored-by: Mariah Jacobs <114685994+mjac0bs@users.noreply.github.com> Co-authored-by: Joe D'Amore --- ...r-10234-upcoming-features-1709068609413.md | 5 ++ ...r-10234-upcoming-features-1709068764309.md | 5 ++ .../parentChild/account-switching.spec.ts | 69 +++++++++---------- .../features/Account/SwitchAccountDrawer.tsx | 45 +++++------- 4 files changed, 61 insertions(+), 63 deletions(-) create mode 100644 packages/manager/.changeset/pr-10234-upcoming-features-1709068609413.md create mode 100644 packages/manager/.changeset/pr-10234-upcoming-features-1709068764309.md diff --git a/packages/manager/.changeset/pr-10234-upcoming-features-1709068609413.md b/packages/manager/.changeset/pr-10234-upcoming-features-1709068609413.md new file mode 100644 index 00000000000..b41a933532d --- /dev/null +++ b/packages/manager/.changeset/pr-10234-upcoming-features-1709068609413.md @@ -0,0 +1,5 @@ +--- +"@linode/manager": Upcoming Features +--- + +Fix Account Switching ([#10234](https://github.com/linode/manager/pull/10234)) diff --git a/packages/manager/.changeset/pr-10234-upcoming-features-1709068764309.md b/packages/manager/.changeset/pr-10234-upcoming-features-1709068764309.md new file mode 100644 index 00000000000..ec7f0726d34 --- /dev/null +++ b/packages/manager/.changeset/pr-10234-upcoming-features-1709068764309.md @@ -0,0 +1,5 @@ +--- +"@linode/manager": Upcoming Features +--- + +Fix to ensure ChildAccountList receives proper account token ([#10234](https://github.com/linode/manager/pull/10234)) diff --git a/packages/manager/cypress/e2e/core/parentChild/account-switching.spec.ts b/packages/manager/cypress/e2e/core/parentChild/account-switching.spec.ts index 60c6488ef30..52b053af660 100644 --- a/packages/manager/cypress/e2e/core/parentChild/account-switching.spec.ts +++ b/packages/manager/cypress/e2e/core/parentChild/account-switching.spec.ts @@ -57,7 +57,7 @@ const assertAuthLocalStorage = ( expiry: string, scopes: string ) => { - assertLocalStorageValue('authentication/token', token); + assertLocalStorageValue('authentication/token', `Bearer ${token}`); assertLocalStorageValue('authentication/expire', expiry); assertLocalStorageValue('authentication/scopes', scopes); }; @@ -126,6 +126,23 @@ describe('Parent/Child account switching', () => { .should('be.enabled') .click(); + // Prepare up mocks in advance of the account switch. As soon as the child account is clicked, + // Cloud will replace its stored token with the token provided by the API and then reload. + // From that point forward, we will not have a valid test account token stored in local storage, + // so all non-intercepted API requests will respond with a 401 status code and we will get booted to login. + // We'll mitigate this by broadly mocking ALL API-v4 requests, then applying more specific mocks to the + // individual requests as needed. + mockAllApiRequests(); + mockGetLinodes([]); + mockGetRegions([]); + mockGetEvents([]); + mockGetNotifications([]); + mockGetAccount(mockChildAccount); + mockGetProfile(mockParentProfile); + mockGetUser(mockParentUser); + + // Mock the account switch itself -- we have to do this after the mocks above + // to ensure that it is applied. mockCreateChildAccountToken(mockChildAccount, mockChildAccountToken).as( 'switchAccount' ); @@ -147,24 +164,6 @@ describe('Parent/Child account switching', () => { mockChildAccountToken.scopes ); - // From this point forward, we will not have a valid test account token stored in local storage, - // so all non-intercepted API requests will respond with a 401 status code and we will get booted to login. - // We'll mitigate this by broadly mocking ALL API-v4 requests, then applying more specific mocks to the - // individual requests as needed. - mockAllApiRequests(); - mockGetLinodes([]); - mockGetRegions([]); - mockGetEvents([]); - mockGetNotifications([]); - - mockGetAccount(mockChildAccount); - mockGetProfile(mockParentProfile); - mockGetUser(mockParentUser); - - // TODO Remove the call to `cy.reload()` once Cloud Manager automatically updates itself upon account switching. - // TODO Add assertions for toast upon account switch. This might involve improving mocks for events/notifications. - cy.reload(); - // Confirm expected username and company are shown in user menu button. assertUserMenuButton( mockParentProfile.username, @@ -205,6 +204,21 @@ describe('Parent/Child account switching', () => { .click(); }); + // Prepare up mocks in advance of the account switch. As soon as the child account is clicked, + // Cloud will replace its stored token with the token provided by the API and then reload. + // From that point forward, we will not have a valid test account token stored in local storage, + // so all non-intercepted API requests will respond with a 401 status code and we will get booted to login. + // We'll mitigate this by broadly mocking ALL API-v4 requests, then applying more specific mocks to the + // individual requests as needed. + mockAllApiRequests(); + mockGetLinodes([]); + mockGetRegions([]); + mockGetEvents([]); + mockGetNotifications([]); + mockGetAccount(mockChildAccount); + mockGetProfile(mockParentProfile); + mockGetUser(mockParentUser); + // Click mock company name in "Switch Account" drawer. mockCreateChildAccountToken(mockChildAccount, mockChildAccountToken).as( 'switchAccount' @@ -227,23 +241,6 @@ describe('Parent/Child account switching', () => { mockChildAccountToken.scopes ); - // From this point forward, we will not have a valid test account token stored in local storage, - // so all non-intercepted API requests will respond with a 401 status code and we will get booted to login. - // We'll mitigate this by broadly mocking ALL API-v4 requests, then applying more specific mocks to the - // individual requests as needed. - mockAllApiRequests(); - mockGetLinodes([]); - mockGetRegions([]); - mockGetEvents([]); - mockGetNotifications([]); - mockGetAccount(mockChildAccount); - mockGetProfile(mockParentProfile); - mockGetUser(mockParentUser); - - // TODO Remove the call to `cy.reload()` once Cloud Manager automatically updates itself upon account switching. - // TODO Add assertions for toast upon account switch. This might involve improving mocks for events/notifications. - cy.reload(); - // Confirm expected username and company are shown in user menu button. assertUserMenuButton( mockParentProfile.username, diff --git a/packages/manager/src/features/Account/SwitchAccountDrawer.tsx b/packages/manager/src/features/Account/SwitchAccountDrawer.tsx index 3391402a690..216ccece28a 100644 --- a/packages/manager/src/features/Account/SwitchAccountDrawer.tsx +++ b/packages/manager/src/features/Account/SwitchAccountDrawer.tsx @@ -1,6 +1,5 @@ import { createChildAccountPersonalAccessToken } from '@linode/api-v4'; import React from 'react'; -import { useHistory } from 'react-router-dom'; import { StyledLinkButton } from 'src/components/Button/StyledLinkButton'; import { Drawer } from 'src/components/Drawer'; @@ -18,6 +17,7 @@ import { getStorage } from 'src/utilities/storage'; import { ChildAccountList } from './SwitchAccounts/ChildAccountList'; +import type { Token } from '@linode/api-v4'; import type { APIError, ChildAccountPayload, UserType } from '@linode/api-v4'; import type { State as AuthState } from 'src/store/authentication'; @@ -38,7 +38,8 @@ export const SwitchAccountDrawer = (props: Props) => { ); const currentTokenWithBearer = useCurrentToken() ?? ''; - const history = useHistory(); + const currentParentTokenWithBearer = + getStorage('authentication/parent_token/token') ?? ''; const handleClose = React.useCallback(() => { onClose(); @@ -76,11 +77,9 @@ export const SwitchAccountDrawer = (props: Props) => { [] ); - // Navigate to the current location, triggering a re-render without a full page reload. const refreshPage = React.useCallback(() => { - // TODO: Parent/Child: We need to test this against the real API. - history.push(history.location.pathname); - }, [history]); + location.reload(); + }, []); const handleSwitchToChildAccount = React.useCallback( async ({ @@ -97,17 +96,13 @@ export const SwitchAccountDrawer = (props: Props) => { isProxyUser: boolean; }) => { try { - // TODO: Parent/Child: FOR MSW ONLY, REMOVE WHEN API IS READY - // ================================================================ - // throw new Error( - // `Account switching failed. Try again.` - // ); - // ================================================================ - // We don't need to worry about this if we're a proxy user. if (!isProxyUser) { - const parentToken = { + const parentToken: Token = { + created: getStorage('authentication/created'), expiry: getStorage('authentication/expire'), + id: getStorage('authentication/id'), + label: getStorage('authentication/label'), scopes: getStorage('authentication/scopes'), token: currentTokenWithBearer ?? '', }; @@ -128,7 +123,10 @@ export const SwitchAccountDrawer = (props: Props) => { setTokenInLocalStorage({ prefix: 'authentication/proxy_token', - token: proxyToken, + token: { + ...proxyToken, + token: `Bearer ${proxyToken.token}`, + }, }); updateCurrentTokenBasedOnUserType({ @@ -139,16 +137,6 @@ export const SwitchAccountDrawer = (props: Props) => { refreshPage(); } catch (error) { setIsProxyTokenError(error as APIError[]); - - // TODO: Parent/Child: FOR MSW ONLY, REMOVE WHEN API IS READY - // ================================================================ - // setIsProxyTokenError([ - // { - // field: 'token', - // reason: error.message, - // }, - // ]); - // ================================================================ } }, [getProxyToken, refreshPage] @@ -168,7 +156,8 @@ export const SwitchAccountDrawer = (props: Props) => { updateCurrentTokenBasedOnUserType({ userType: 'parent' }); handleClose(); - }, [handleClose, isProxyUser]); + refreshPage(); + }, [handleClose, refreshPage]); return ( @@ -201,7 +190,9 @@ export const SwitchAccountDrawer = (props: Props) => { . Date: Tue, 27 Feb 2024 20:47:04 -0500 Subject: [PATCH 31/37] fix: [M3-7804] - Volume Create Drawer Crash (Linode detail) (#10225) * Update useEffect * Remove useEffect and add defaultValue logic * Added changeset: Linode storage Volume Create Drawer crash * Better name * Target form validation instead --- .../manager/.changeset/pr-10225-fixed-1708720961774.md | 5 +++++ .../Volumes/VolumeDrawer/LinodeVolumeCreateForm.tsx | 10 ++++++++++ 2 files changed, 15 insertions(+) create mode 100644 packages/manager/.changeset/pr-10225-fixed-1708720961774.md diff --git a/packages/manager/.changeset/pr-10225-fixed-1708720961774.md b/packages/manager/.changeset/pr-10225-fixed-1708720961774.md new file mode 100644 index 00000000000..302898fac72 --- /dev/null +++ b/packages/manager/.changeset/pr-10225-fixed-1708720961774.md @@ -0,0 +1,5 @@ +--- +"@linode/manager": Fixed +--- + +Linode storage Volume Create Drawer crash ([#10225](https://github.com/linode/manager/pull/10225)) diff --git a/packages/manager/src/features/Volumes/VolumeDrawer/LinodeVolumeCreateForm.tsx b/packages/manager/src/features/Volumes/VolumeDrawer/LinodeVolumeCreateForm.tsx index 30debabe284..37aeb219216 100644 --- a/packages/manager/src/features/Volumes/VolumeDrawer/LinodeVolumeCreateForm.tsx +++ b/packages/manager/src/features/Volumes/VolumeDrawer/LinodeVolumeCreateForm.tsx @@ -10,6 +10,7 @@ import { TagsInput } from 'src/components/TagsInput/TagsInput'; import { TextField } from 'src/components/TextField'; import { Typography } from 'src/components/Typography'; import { MAX_VOLUME_SIZE } from 'src/constants'; +import { useFormValidateOnChange } from 'src/hooks/useFormValidateOnChange'; import { useEventsPollingActions } from 'src/queries/events/events'; import { useGrants, useProfile } from 'src/queries/profile'; import { useCreateVolumeMutation } from 'src/queries/volumes'; @@ -56,6 +57,10 @@ export const LinodeVolumeCreateForm = (props: Props) => { const { data: profile } = useProfile(); const { data: grants } = useGrants(); const { mutateAsync: createVolume } = useCreateVolumeMutation(); + const { + hasFormBeenSubmitted, + setHasFormBeenSubmitted, + } = useFormValidateOnChange(); const { checkForNewEvents } = useEventsPollingActions(); @@ -90,6 +95,7 @@ export const LinodeVolumeCreateForm = (props: Props) => { size: maybeCastToNumber(size), tags, }); + setHasFormBeenSubmitted(false); checkForNewEvents(); enqueueSnackbar(`Volume scheduled for creation.`, { variant: 'success', @@ -99,6 +105,7 @@ export const LinodeVolumeCreateForm = (props: Props) => { // Analytics Event sendCreateVolumeEvent(`Size: ${size}GB`, origin); } catch (error) { + setHasFormBeenSubmitted(true); handleFieldErrors(setErrors, error); handleGeneralErrors( setStatus, @@ -107,6 +114,8 @@ export const LinodeVolumeCreateForm = (props: Props) => { ); } }, + validateOnBlur: false, + validateOnChange: hasFormBeenSubmitted, validationSchema: CreateVolumeSchema, }); @@ -205,6 +214,7 @@ export const LinodeVolumeCreateForm = (props: Props) => { disabled, label: 'Create Volume', loading: isSubmitting, + onClick: () => setHasFormBeenSubmitted(true), type: 'submit', }} secondaryButtonProps={{ From a482b2116248e3127b518446542da6aa558bf170 Mon Sep 17 00:00:00 2001 From: Alban Bailly <130582365+abailly-akamai@users.noreply.github.com> Date: Wed, 28 Feb 2024 12:11:55 -0500 Subject: [PATCH 32/37] fix: [M3-7804] - LinodeVolumeCreateForm crash (for real this time) (#10235) * Revert "fix: [M3-7804] - Volume Create Drawer Crash (Linode detail) (#10225)" This reverts commit 632b4541231ca9941d5f357501141b961f5acd6e. * remove the damn useEffect * Added changeset: LinodeVolumeCreateForm crash --- .../.changeset/pr-10225-fixed-1708720961774.md | 5 ----- .../.changeset/pr-10235-fixed-1709135736984.md | 5 +++++ .../features/Volumes/VolumeDrawer/ConfigSelect.tsx | 12 +++++------- .../Volumes/VolumeDrawer/LinodeVolumeCreateForm.tsx | 11 +---------- 4 files changed, 11 insertions(+), 22 deletions(-) delete mode 100644 packages/manager/.changeset/pr-10225-fixed-1708720961774.md create mode 100644 packages/manager/.changeset/pr-10235-fixed-1709135736984.md diff --git a/packages/manager/.changeset/pr-10225-fixed-1708720961774.md b/packages/manager/.changeset/pr-10225-fixed-1708720961774.md deleted file mode 100644 index 302898fac72..00000000000 --- a/packages/manager/.changeset/pr-10225-fixed-1708720961774.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@linode/manager": Fixed ---- - -Linode storage Volume Create Drawer crash ([#10225](https://github.com/linode/manager/pull/10225)) diff --git a/packages/manager/.changeset/pr-10235-fixed-1709135736984.md b/packages/manager/.changeset/pr-10235-fixed-1709135736984.md new file mode 100644 index 00000000000..0cbce4d44fd --- /dev/null +++ b/packages/manager/.changeset/pr-10235-fixed-1709135736984.md @@ -0,0 +1,5 @@ +--- +"@linode/manager": Fixed +--- + +LinodeVolumeCreateForm crash ([#10235](https://github.com/linode/manager/pull/10235)) diff --git a/packages/manager/src/features/Volumes/VolumeDrawer/ConfigSelect.tsx b/packages/manager/src/features/Volumes/VolumeDrawer/ConfigSelect.tsx index bb25df8287a..a2d7364c2c7 100644 --- a/packages/manager/src/features/Volumes/VolumeDrawer/ConfigSelect.tsx +++ b/packages/manager/src/features/Volumes/VolumeDrawer/ConfigSelect.tsx @@ -36,14 +36,12 @@ export const ConfigSelect = React.memo((props: Props) => { return { label: config.label, value: config.id }; }); - React.useEffect(() => { - if (configList?.length === 1) { - const newValue = configList[0].value; - if (value !== newValue) { - onChange(configList[0].value); - } + if (configList?.length === 1) { + const newValue = configList[0].value; + if (value !== newValue) { + onChange(newValue); } - }, [configList, onChange, value]); + } if (linodeId === null) { return null; diff --git a/packages/manager/src/features/Volumes/VolumeDrawer/LinodeVolumeCreateForm.tsx b/packages/manager/src/features/Volumes/VolumeDrawer/LinodeVolumeCreateForm.tsx index 37aeb219216..4e68a30cd5d 100644 --- a/packages/manager/src/features/Volumes/VolumeDrawer/LinodeVolumeCreateForm.tsx +++ b/packages/manager/src/features/Volumes/VolumeDrawer/LinodeVolumeCreateForm.tsx @@ -10,7 +10,6 @@ import { TagsInput } from 'src/components/TagsInput/TagsInput'; import { TextField } from 'src/components/TextField'; import { Typography } from 'src/components/Typography'; import { MAX_VOLUME_SIZE } from 'src/constants'; -import { useFormValidateOnChange } from 'src/hooks/useFormValidateOnChange'; import { useEventsPollingActions } from 'src/queries/events/events'; import { useGrants, useProfile } from 'src/queries/profile'; import { useCreateVolumeMutation } from 'src/queries/volumes'; @@ -57,10 +56,6 @@ export const LinodeVolumeCreateForm = (props: Props) => { const { data: profile } = useProfile(); const { data: grants } = useGrants(); const { mutateAsync: createVolume } = useCreateVolumeMutation(); - const { - hasFormBeenSubmitted, - setHasFormBeenSubmitted, - } = useFormValidateOnChange(); const { checkForNewEvents } = useEventsPollingActions(); @@ -95,7 +90,6 @@ export const LinodeVolumeCreateForm = (props: Props) => { size: maybeCastToNumber(size), tags, }); - setHasFormBeenSubmitted(false); checkForNewEvents(); enqueueSnackbar(`Volume scheduled for creation.`, { variant: 'success', @@ -105,7 +99,6 @@ export const LinodeVolumeCreateForm = (props: Props) => { // Analytics Event sendCreateVolumeEvent(`Size: ${size}GB`, origin); } catch (error) { - setHasFormBeenSubmitted(true); handleFieldErrors(setErrors, error); handleGeneralErrors( setStatus, @@ -114,8 +107,6 @@ export const LinodeVolumeCreateForm = (props: Props) => { ); } }, - validateOnBlur: false, - validateOnChange: hasFormBeenSubmitted, validationSchema: CreateVolumeSchema, }); @@ -176,6 +167,7 @@ export const LinodeVolumeCreateForm = (props: Props) => { { disabled, label: 'Create Volume', loading: isSubmitting, - onClick: () => setHasFormBeenSubmitted(true), type: 'submit', }} secondaryButtonProps={{ From 231e4ff17d1dafb3773afb4dbf874bde33036e68 Mon Sep 17 00:00:00 2001 From: Banks Nussman <115251059+bnussman-akamai@users.noreply.github.com> Date: Wed, 28 Feb 2024 13:04:22 -0500 Subject: [PATCH 33/37] change: [M3-7815] - Change ACLB Beta Regions (#10232) * switch `us-iad` for `us-mia` * Added changeset: ACLB beta region `Washington, DC` to `Miami, FL` --------- Co-authored-by: Banks Nussman --- .../manager/.changeset/pr-10232-changed-1709130492234.md | 5 +++++ .../LoadBalancers/LoadBalancerDetail/LoadBalancerRegions.tsx | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 packages/manager/.changeset/pr-10232-changed-1709130492234.md diff --git a/packages/manager/.changeset/pr-10232-changed-1709130492234.md b/packages/manager/.changeset/pr-10232-changed-1709130492234.md new file mode 100644 index 00000000000..f8b71f8b67a --- /dev/null +++ b/packages/manager/.changeset/pr-10232-changed-1709130492234.md @@ -0,0 +1,5 @@ +--- +"@linode/manager": Changed +--- + +ACLB beta region `Washington, DC` to `Miami, FL` ([#10232](https://github.com/linode/manager/pull/10232)) diff --git a/packages/manager/src/features/LoadBalancers/LoadBalancerDetail/LoadBalancerRegions.tsx b/packages/manager/src/features/LoadBalancers/LoadBalancerDetail/LoadBalancerRegions.tsx index 4c0f2068904..df3a6fe58e6 100644 --- a/packages/manager/src/features/LoadBalancers/LoadBalancerDetail/LoadBalancerRegions.tsx +++ b/packages/manager/src/features/LoadBalancers/LoadBalancerDetail/LoadBalancerRegions.tsx @@ -7,7 +7,7 @@ import { Typography } from 'src/components/Typography'; import type { Country } from '@linode/api-v4'; export const regions = [ - { country: 'us', id: 'us-iad', label: 'Washington, DC' }, + { country: 'us', id: 'us-mia', label: 'Miami, FL' }, { country: 'us', id: 'us-lax', label: 'Los Angeles, CA' }, { country: 'fr', id: 'fr-par', label: 'Paris, FR' }, { country: 'jp', id: 'jp-osa', label: 'Osaka, JP' }, From 525aed0e85b28d9048854f32e141f3583de82647 Mon Sep 17 00:00:00 2001 From: jdamore-linode <97627410+jdamore-linode@users.noreply.github.com> Date: Thu, 29 Feb 2024 10:15:57 -0500 Subject: [PATCH 34/37] test: [M3-7820] - Suppress Cypress "MODULE_LEVEL_DIRECTIVE" and "SOURCEMAP_ERROR" warnings (#10239) * Suppress "MODULE_LEVEL_DIRECTIVE" and "SOURCEMAP_ERROR" Rollup warnings when building Cypress tests --- .../pr-10239-tests-1709145080838.md | 5 ++++ packages/manager/cypress/vite.config.ts | 26 +++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 packages/manager/.changeset/pr-10239-tests-1709145080838.md diff --git a/packages/manager/.changeset/pr-10239-tests-1709145080838.md b/packages/manager/.changeset/pr-10239-tests-1709145080838.md new file mode 100644 index 00000000000..594b449874d --- /dev/null +++ b/packages/manager/.changeset/pr-10239-tests-1709145080838.md @@ -0,0 +1,5 @@ +--- +"@linode/manager": Tests +--- + +Suppress Rollup warnings during Cypress tests ([#10239](https://github.com/linode/manager/pull/10239)) diff --git a/packages/manager/cypress/vite.config.ts b/packages/manager/cypress/vite.config.ts index 64101f8589e..1e25f3d86f9 100644 --- a/packages/manager/cypress/vite.config.ts +++ b/packages/manager/cypress/vite.config.ts @@ -1,3 +1,5 @@ +import react from '@vitejs/plugin-react-swc'; +import svgr from 'vite-plugin-svgr'; import { defineConfig } from 'vite'; import { URL } from 'url'; @@ -5,6 +7,30 @@ import { URL } from 'url'; const DIRNAME = new URL('.', import.meta.url).pathname; export default defineConfig({ + plugins: [react(), svgr({ exportAsDefault: true })], + build: { + rollupOptions: { + // Suppress "SOURCEMAP_ERROR" warnings. + // This is necessary because MUI contains React SSR "use client" module-level + // directive, and Rollup does not support module-level directives. + // `vite-plugin-react` and `vite-plugin-react-swc` both silence this warning, + // but the inability to handle module-level directives also causes Sourcemap + // output errors. The warnings for this are not suppressed by Vite plugins, + // so we need to suppress them ourselves. + // + // See also: + // - https://github.com/vitejs/vite-plugin-react/blob/7f53c63/packages/plugin-react/src/index.ts#L303 + // - https://github.com/vitejs/vite-plugin-react-swc/blob/53ecc44/src/index.ts#L262 + // - https://github.com/rollup/rollup/issues/4699#issuecomment-1299770973 + // - https://github.com/vitejs/vite/issues/15012#issuecomment-1815854072 + onwarn(warning, defaultHandler) { + if (warning.code === 'SOURCEMAP_ERROR') { + return; + } + defaultHandler(warning); + }, + }, + }, resolve: { alias: { '@src': `${DIRNAME}/../src`, From 04d2fed3104183aef0878ef1454a9fc56e628af7 Mon Sep 17 00:00:00 2001 From: Mariah Jacobs <114685994+mjac0bs@users.noreply.github.com> Date: Thu, 29 Feb 2024 10:29:49 -0700 Subject: [PATCH 35/37] fix: [M3-7796] - Correct Default VPC Scope and Adjust PAT Creation Behavior (#10226) * Do not allow VPC scope to be Read Only * Add a test case * Added changeset: Invalid VPC scope with a Select All > Read Only selection in Create PAT drawer * Improve variable name in test * Fix typo that was testing the wrong radio button * Fix Select All Read Only radio button being unchecked because of VPC * Forgot the not * Add test case for util * Be consistent with naming * Check for the access level; this is still weird * Handle just VPC * Clean up; fix test * Address feedback --- .../pr-10226-fixed-1708710525397.md | 5 +++ .../APITokens/CreateAPITokenDrawer.test.tsx | 22 +++++++++++ .../APITokens/CreateAPITokenDrawer.tsx | 37 ++++++++++++++++++- .../features/Profile/APITokens/utils.test.ts | 26 +++++++++++++ .../src/features/Profile/APITokens/utils.ts | 21 ++++++++++- 5 files changed, 107 insertions(+), 4 deletions(-) create mode 100644 packages/manager/.changeset/pr-10226-fixed-1708710525397.md diff --git a/packages/manager/.changeset/pr-10226-fixed-1708710525397.md b/packages/manager/.changeset/pr-10226-fixed-1708710525397.md new file mode 100644 index 00000000000..30dcec52f42 --- /dev/null +++ b/packages/manager/.changeset/pr-10226-fixed-1708710525397.md @@ -0,0 +1,5 @@ +--- +"@linode/manager": Fixed +--- + +Invalid VPC scope with a Select All > Read Only selection in Create PAT drawer ([#10226](https://github.com/linode/manager/pull/10226)) diff --git a/packages/manager/src/features/Profile/APITokens/CreateAPITokenDrawer.test.tsx b/packages/manager/src/features/Profile/APITokens/CreateAPITokenDrawer.test.tsx index 4ae67ab5a57..5bc24a3c019 100644 --- a/packages/manager/src/features/Profile/APITokens/CreateAPITokenDrawer.test.tsx +++ b/packages/manager/src/features/Profile/APITokens/CreateAPITokenDrawer.test.tsx @@ -141,4 +141,26 @@ describe('Create API Token Drawer', () => { await userEvent.click(cancelButton); expect(props.onClose).toBeCalled(); }); + + it('Should not select Read Only for VPC scope when Select All > Read Only is clicked', async () => { + const { getAllByTestId, getByLabelText } = renderWithTheme( + , + { + flags: { vpc: true }, + } + ); + const vpcPermRadioButtons = getAllByTestId('perm-vpc-radio'); + const vpcNonePermRadioButton = vpcPermRadioButtons[0].firstChild; + const vpcReadOnlyPermRadioButton = vpcPermRadioButtons[1].firstChild; + + const selectAllReadOnlyPermRadioButton = getByLabelText( + 'Select read-only for all' + ); + await userEvent.click(selectAllReadOnlyPermRadioButton); + expect(selectAllReadOnlyPermRadioButton).toBeChecked(); + + expect(vpcNonePermRadioButton).toBeChecked(); + expect(vpcReadOnlyPermRadioButton).not.toBeChecked(); + expect(vpcReadOnlyPermRadioButton).toBeDisabled(); + }); }); diff --git a/packages/manager/src/features/Profile/APITokens/CreateAPITokenDrawer.tsx b/packages/manager/src/features/Profile/APITokens/CreateAPITokenDrawer.tsx index 685b3eaaf1b..d026c8785e3 100644 --- a/packages/manager/src/features/Profile/APITokens/CreateAPITokenDrawer.tsx +++ b/packages/manager/src/features/Profile/APITokens/CreateAPITokenDrawer.tsx @@ -74,6 +74,12 @@ export const genExpiryTups = (): Expiry[] => { ]; }; +export interface ExcludedScope { + defaultAccessLevel: number; + invalidAccessLevels: number[]; + name: string; +} + interface RadioButton extends HTMLInputElement { name: string; } @@ -165,7 +171,24 @@ export const CreateAPITokenDrawer = (props: Props) => { ): void => { const value = +e.currentTarget.value; const newScopes = form.values.scopes.map( - (scope): Permission => [scope[0], value] + (scope): Permission => { + // Check the excluded scopes object to see if the current scope will have its own defaults. + const indexOfExcludedScope = excludedScopesFromSelectAll.findIndex( + (excludedScope) => + excludedScope.name === scope[0] && + excludedScope.invalidAccessLevels.includes(value) + ); + + // Set an excluded scope based on its default access level, not the given Select All value. + if (indexOfExcludedScope >= 0) { + return [ + scope[0], + excludedScopesFromSelectAll[indexOfExcludedScope] + .defaultAccessLevel, + ]; + } + return [scope[0], value]; + } ); form.setFieldValue('scopes', newScopes); }; @@ -174,8 +197,18 @@ export const CreateAPITokenDrawer = (props: Props) => { form.setFieldValue('expiry', e.value); }; + // Permission scopes with a different default when Selecting All for the specified access level. + const excludedScopesFromSelectAll: ExcludedScope[] = [ + { + defaultAccessLevel: 0, + invalidAccessLevels: [1], + name: 'vpc', + }, + ]; + const indexOfColumnWhereAllAreSelected = allScopesAreTheSame( - form.values.scopes + form.values.scopes, + excludedScopesFromSelectAll ); const errorMap = getErrorMap(['label', 'scopes'], error); diff --git a/packages/manager/src/features/Profile/APITokens/utils.test.ts b/packages/manager/src/features/Profile/APITokens/utils.test.ts index c8e19673a99..070164de0e6 100644 --- a/packages/manager/src/features/Profile/APITokens/utils.test.ts +++ b/packages/manager/src/features/Profile/APITokens/utils.test.ts @@ -1,5 +1,6 @@ import { DateTime } from 'luxon'; +import { ExcludedScope } from './CreateAPITokenDrawer'; import { Permission, allScopesAreTheSame, @@ -324,5 +325,30 @@ describe('APIToken utils', () => { expect(allScopesAreTheSame(scopes)).toBe(null); }); }); + it('should return 1 if all scopes, except any exclusions, are 1', () => { + const scopes: Permission[] = [ + ['account', 1], + ['child_account', 1], + ['databases', 1], + ['domains', 1], + ['events', 1], + ['firewall', 1], + ['images', 1], + ['ips', 1], + ['linodes', 1], + ['lke', 1], + ['longview', 2], + ['nodebalancers', 1], + ['object_storage', 1], + ['stackscripts', 1], + ['volumes', 1], + ['vpc', 0], + ]; + const excludedScopeNames: ExcludedScope[] = [ + { defaultAccessLevel: 0, invalidAccessLevels: [1], name: 'vpc' }, + { defaultAccessLevel: 2, invalidAccessLevels: [1], name: 'longview' }, + ]; + expect(allScopesAreTheSame(scopes, excludedScopeNames)).toBe(1); + }); }); }); diff --git a/packages/manager/src/features/Profile/APITokens/utils.ts b/packages/manager/src/features/Profile/APITokens/utils.ts index 67da585fe32..5aad811b893 100644 --- a/packages/manager/src/features/Profile/APITokens/utils.ts +++ b/packages/manager/src/features/Profile/APITokens/utils.ts @@ -2,6 +2,8 @@ import { DateTime } from 'luxon'; import { isPast } from 'src/utilities/isPast'; +import { ExcludedScope } from './CreateAPITokenDrawer'; + export type Permission = [string, number]; export const basePerms = [ @@ -177,13 +179,28 @@ export const permTuplesToScopeString = (scopeTups: Permission[]): string => { * returned. Otherwise, `null` is returned. * * @param scopes - Permission scopes for which to check access levels. + * @param excludedScopes - Permission scopes for which to exclude from the access level check. (e.g. they have a different default) + * Example: { name: 'vpc', defaultAccessLevel: 0 } would ignore the VPC scope when it's set to None. * * @returns Access level for the given scopes if they are all the same; `null` otherwise. */ -export const allScopesAreTheSame = (scopes: Permission[]) => { +export const allScopesAreTheSame = ( + scopes: Permission[], + excludedScopes?: ExcludedScope[] +) => { const sample = scopes[0]; + + // Filter out any scopes that are set to their own defaults. + const filteredScopes = scopes.filter( + (scope: Permission) => + !excludedScopes?.find( + (excludedScope) => + excludedScope.name === scope[0] && + excludedScope.defaultAccessLevel === scope[1] + ) + ); const scopeMatches = (scope: Permission) => scope[1] === sample[1]; - return scopes.slice(1).every(scopeMatches) ? sample[1] : null; + return filteredScopes.slice(1).every(scopeMatches) ? sample[1] : null; }; /** From b584a4d9213e9493a5a5008508930da5b9fdd0a9 Mon Sep 17 00:00:00 2001 From: ecarrill Date: Fri, 1 Mar 2024 08:46:16 -0800 Subject: [PATCH 36/37] Cloud version 1.114.0, API v4 version 0.111.0, and Validation version 0.41.0 --- .../pr-10193-changed-1708424137596.md | 5 -- ...r-10195-upcoming-features-1708464732978.md | 5 -- packages/api-v4/CHANGELOG.md | 10 ++++ packages/api-v4/package.json | 2 +- .../pr-10110-tests-1706208561568.md | 5 -- ...r-10162-upcoming-features-1708036002117.md | 5 -- .../pr-10169-tech-stories-1707760967410.md | 5 -- ...r-10182-upcoming-features-1707859324148.md | 5 -- ...r-10188-upcoming-features-1707837776464.md | 5 -- ...r-10189-upcoming-features-1707838240012.md | 5 -- ...r-10190-upcoming-features-1707847452121.md | 5 -- .../pr-10193-changed-1708084511111.md | 5 -- ...r-10194-upcoming-features-1708456171781.md | 5 -- ...r-10195-upcoming-features-1708099058499.md | 5 -- .../pr-10197-fixed-1708020473057.md | 5 -- .../pr-10199-tech-stories-1708028973425.md | 5 -- ...r-10200-upcoming-features-1709050942048.md | 5 -- ...r-10201-upcoming-features-1708522664228.md | 5 -- .../pr-10202-tests-1708119481596.md | 5 -- ...r-10202-upcoming-features-1708119409383.md | 5 -- .../pr-10203-tech-stories-1708119742778.md | 5 -- .../pr-10211-tests-1708466647763.md | 5 -- .../pr-10212-tech-stories-1708530535485.md | 5 -- ...r-10213-upcoming-features-1708540968499.md | 5 -- .../pr-10214-tech-stories-1708552464325.md | 5 -- .../pr-10215-fixed-1708555044784.md | 5 -- .../pr-10217-tech-stories-1708960982000.md | 5 -- .../pr-10219-tech-stories-1708637715379.md | 5 -- .../pr-10220-changed-1708622627827.md | 5 -- .../pr-10223-tech-stories-1708637625570.md | 5 -- .../pr-10226-fixed-1708710525397.md | 5 -- .../pr-10229-added-1708735909784.md | 5 -- ...r-10230-upcoming-features-1708982538087.md | 5 -- .../pr-10231-fixed-1708986686253.md | 5 -- .../pr-10232-changed-1709130492234.md | 5 -- ...r-10234-upcoming-features-1709068609413.md | 5 -- ...r-10234-upcoming-features-1709068764309.md | 5 -- .../pr-10235-fixed-1709135736984.md | 5 -- .../pr-10239-tests-1709145080838.md | 5 -- packages/manager/CHANGELOG.md | 55 +++++++++++++++++++ packages/manager/package.json | 2 +- packages/validation/CHANGELOG.md | 13 ++--- packages/validation/package.json | 4 +- 43 files changed, 74 insertions(+), 197 deletions(-) delete mode 100644 packages/api-v4/.changeset/pr-10193-changed-1708424137596.md delete mode 100644 packages/api-v4/.changeset/pr-10195-upcoming-features-1708464732978.md delete mode 100644 packages/manager/.changeset/pr-10110-tests-1706208561568.md delete mode 100644 packages/manager/.changeset/pr-10162-upcoming-features-1708036002117.md delete mode 100644 packages/manager/.changeset/pr-10169-tech-stories-1707760967410.md delete mode 100644 packages/manager/.changeset/pr-10182-upcoming-features-1707859324148.md delete mode 100644 packages/manager/.changeset/pr-10188-upcoming-features-1707837776464.md delete mode 100644 packages/manager/.changeset/pr-10189-upcoming-features-1707838240012.md delete mode 100644 packages/manager/.changeset/pr-10190-upcoming-features-1707847452121.md delete mode 100644 packages/manager/.changeset/pr-10193-changed-1708084511111.md delete mode 100644 packages/manager/.changeset/pr-10194-upcoming-features-1708456171781.md delete mode 100644 packages/manager/.changeset/pr-10195-upcoming-features-1708099058499.md delete mode 100644 packages/manager/.changeset/pr-10197-fixed-1708020473057.md delete mode 100644 packages/manager/.changeset/pr-10199-tech-stories-1708028973425.md delete mode 100644 packages/manager/.changeset/pr-10200-upcoming-features-1709050942048.md delete mode 100644 packages/manager/.changeset/pr-10201-upcoming-features-1708522664228.md delete mode 100644 packages/manager/.changeset/pr-10202-tests-1708119481596.md delete mode 100644 packages/manager/.changeset/pr-10202-upcoming-features-1708119409383.md delete mode 100644 packages/manager/.changeset/pr-10203-tech-stories-1708119742778.md delete mode 100644 packages/manager/.changeset/pr-10211-tests-1708466647763.md delete mode 100644 packages/manager/.changeset/pr-10212-tech-stories-1708530535485.md delete mode 100644 packages/manager/.changeset/pr-10213-upcoming-features-1708540968499.md delete mode 100644 packages/manager/.changeset/pr-10214-tech-stories-1708552464325.md delete mode 100644 packages/manager/.changeset/pr-10215-fixed-1708555044784.md delete mode 100644 packages/manager/.changeset/pr-10217-tech-stories-1708960982000.md delete mode 100644 packages/manager/.changeset/pr-10219-tech-stories-1708637715379.md delete mode 100644 packages/manager/.changeset/pr-10220-changed-1708622627827.md delete mode 100644 packages/manager/.changeset/pr-10223-tech-stories-1708637625570.md delete mode 100644 packages/manager/.changeset/pr-10226-fixed-1708710525397.md delete mode 100644 packages/manager/.changeset/pr-10229-added-1708735909784.md delete mode 100644 packages/manager/.changeset/pr-10230-upcoming-features-1708982538087.md delete mode 100644 packages/manager/.changeset/pr-10231-fixed-1708986686253.md delete mode 100644 packages/manager/.changeset/pr-10232-changed-1709130492234.md delete mode 100644 packages/manager/.changeset/pr-10234-upcoming-features-1709068609413.md delete mode 100644 packages/manager/.changeset/pr-10234-upcoming-features-1709068764309.md delete mode 100644 packages/manager/.changeset/pr-10235-fixed-1709135736984.md delete mode 100644 packages/manager/.changeset/pr-10239-tests-1709145080838.md diff --git a/packages/api-v4/.changeset/pr-10193-changed-1708424137596.md b/packages/api-v4/.changeset/pr-10193-changed-1708424137596.md deleted file mode 100644 index e95d7374393..00000000000 --- a/packages/api-v4/.changeset/pr-10193-changed-1708424137596.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@linode/api-v4": Changed ---- - -rename scale up to resize ([#10193](https://github.com/linode/manager/pull/10193)) diff --git a/packages/api-v4/.changeset/pr-10195-upcoming-features-1708464732978.md b/packages/api-v4/.changeset/pr-10195-upcoming-features-1708464732978.md deleted file mode 100644 index b9ed63dfbd0..00000000000 --- a/packages/api-v4/.changeset/pr-10195-upcoming-features-1708464732978.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@linode/api-v4": Upcoming Features ---- - -Accept placement group in Linode create payload ([#10195](https://github.com/linode/manager/pull/10195)) diff --git a/packages/api-v4/CHANGELOG.md b/packages/api-v4/CHANGELOG.md index 7e09e127e93..7e88e1546d2 100644 --- a/packages/api-v4/CHANGELOG.md +++ b/packages/api-v4/CHANGELOG.md @@ -1,3 +1,13 @@ +## [2024-03-04] - v0.111.0 + +### Changed: + +- Rename `database_scale` type to `database_resize` ([#10193](https://github.com/linode/manager/pull/10193)) + +### Upcoming Features: + +- Accept placement group in Linode create payload ([#10195](https://github.com/linode/manager/pull/10195)) + ## [2024-02-20] - v0.110.0 ### Upcoming Features: diff --git a/packages/api-v4/package.json b/packages/api-v4/package.json index 4d5475a0cfe..4b13695ece2 100644 --- a/packages/api-v4/package.json +++ b/packages/api-v4/package.json @@ -1,6 +1,6 @@ { "name": "@linode/api-v4", - "version": "0.110.0", + "version": "0.111.0", "homepage": "https://github.com/linode/manager/tree/develop/packages/api-v4", "bugs": { "url": "https://github.com/linode/manager/issues" diff --git a/packages/manager/.changeset/pr-10110-tests-1706208561568.md b/packages/manager/.changeset/pr-10110-tests-1706208561568.md deleted file mode 100644 index 49a1409e99b..00000000000 --- a/packages/manager/.changeset/pr-10110-tests-1706208561568.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@linode/manager": Tests ---- - -Add Cypress tests for account switching from Parent to Child ([#10110](https://github.com/linode/manager/pull/10110)) diff --git a/packages/manager/.changeset/pr-10162-upcoming-features-1708036002117.md b/packages/manager/.changeset/pr-10162-upcoming-features-1708036002117.md deleted file mode 100644 index 858fe9b9d8b..00000000000 --- a/packages/manager/.changeset/pr-10162-upcoming-features-1708036002117.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@linode/manager": Upcoming Features ---- - -Add Delete Placement Group Modal ([#10162](https://github.com/linode/manager/pull/10162)) diff --git a/packages/manager/.changeset/pr-10169-tech-stories-1707760967410.md b/packages/manager/.changeset/pr-10169-tech-stories-1707760967410.md deleted file mode 100644 index 381f3f68f6a..00000000000 --- a/packages/manager/.changeset/pr-10169-tech-stories-1707760967410.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@linode/manager": Tech Stories ---- - -Update to React 18 ([#10169](https://github.com/linode/manager/pull/10169)) diff --git a/packages/manager/.changeset/pr-10182-upcoming-features-1707859324148.md b/packages/manager/.changeset/pr-10182-upcoming-features-1707859324148.md deleted file mode 100644 index 5754ebaf602..00000000000 --- a/packages/manager/.changeset/pr-10182-upcoming-features-1707859324148.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@linode/manager": Upcoming Features ---- - -List view for Linode Clone and Create from Backup ([#10182](https://github.com/linode/manager/pull/10182)) diff --git a/packages/manager/.changeset/pr-10188-upcoming-features-1707837776464.md b/packages/manager/.changeset/pr-10188-upcoming-features-1707837776464.md deleted file mode 100644 index c61aa78b755..00000000000 --- a/packages/manager/.changeset/pr-10188-upcoming-features-1707837776464.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@linode/manager": Upcoming Features ---- - -Update OBJ Multi-Cluster copy ([#10188](https://github.com/linode/manager/pull/10188)) diff --git a/packages/manager/.changeset/pr-10189-upcoming-features-1707838240012.md b/packages/manager/.changeset/pr-10189-upcoming-features-1707838240012.md deleted file mode 100644 index 9f90805efdc..00000000000 --- a/packages/manager/.changeset/pr-10189-upcoming-features-1707838240012.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@linode/manager": Upcoming Features ---- - -Handle errors gracefully when OBJ Multi-Cluster feature flag is enabled without MSW ([#10189](https://github.com/linode/manager/pull/10189)) diff --git a/packages/manager/.changeset/pr-10190-upcoming-features-1707847452121.md b/packages/manager/.changeset/pr-10190-upcoming-features-1707847452121.md deleted file mode 100644 index ab62abd7f6f..00000000000 --- a/packages/manager/.changeset/pr-10190-upcoming-features-1707847452121.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@linode/manager": Upcoming Features ---- - -Tag custom analytics events for account switching ([#10190](https://github.com/linode/manager/pull/10190)) diff --git a/packages/manager/.changeset/pr-10193-changed-1708084511111.md b/packages/manager/.changeset/pr-10193-changed-1708084511111.md deleted file mode 100644 index ca143bd31df..00000000000 --- a/packages/manager/.changeset/pr-10193-changed-1708084511111.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@linode/manager": Changed ---- - -rename scale up to resize ([#10193](https://github.com/linode/manager/pull/10193)) diff --git a/packages/manager/.changeset/pr-10194-upcoming-features-1708456171781.md b/packages/manager/.changeset/pr-10194-upcoming-features-1708456171781.md deleted file mode 100644 index 7e255b7427c..00000000000 --- a/packages/manager/.changeset/pr-10194-upcoming-features-1708456171781.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@linode/manager": Upcoming Features ---- - -Update Region Select for edge sites ([#10194](https://github.com/linode/manager/pull/10194)) diff --git a/packages/manager/.changeset/pr-10195-upcoming-features-1708099058499.md b/packages/manager/.changeset/pr-10195-upcoming-features-1708099058499.md deleted file mode 100644 index 1e32acd1e2d..00000000000 --- a/packages/manager/.changeset/pr-10195-upcoming-features-1708099058499.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@linode/manager": Upcoming Features ---- - -Add placement group details to Create Linode payload ([#10195](https://github.com/linode/manager/pull/10195)) diff --git a/packages/manager/.changeset/pr-10197-fixed-1708020473057.md b/packages/manager/.changeset/pr-10197-fixed-1708020473057.md deleted file mode 100644 index 1a0dfbcdaf6..00000000000 --- a/packages/manager/.changeset/pr-10197-fixed-1708020473057.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@linode/manager": Fixed ---- - -Linode Network Graph Tooltip - Incorrect Units ([#10197](https://github.com/linode/manager/pull/10197)) diff --git a/packages/manager/.changeset/pr-10199-tech-stories-1708028973425.md b/packages/manager/.changeset/pr-10199-tech-stories-1708028973425.md deleted file mode 100644 index 4dab61e254f..00000000000 --- a/packages/manager/.changeset/pr-10199-tech-stories-1708028973425.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@linode/manager": Tech Stories ---- - -Refactor & Improve LinodeActionMenu Restricted User Experience ([#10199](https://github.com/linode/manager/pull/10199)) diff --git a/packages/manager/.changeset/pr-10200-upcoming-features-1709050942048.md b/packages/manager/.changeset/pr-10200-upcoming-features-1709050942048.md deleted file mode 100644 index 53a3d5f1c89..00000000000 --- a/packages/manager/.changeset/pr-10200-upcoming-features-1709050942048.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@linode/manager": Upcoming Features ---- - -Update Placement Groups types, methods and factories ([#10200](https://github.com/linode/manager/pull/10200)) diff --git a/packages/manager/.changeset/pr-10201-upcoming-features-1708522664228.md b/packages/manager/.changeset/pr-10201-upcoming-features-1708522664228.md deleted file mode 100644 index e31cca3a2a9..00000000000 --- a/packages/manager/.changeset/pr-10201-upcoming-features-1708522664228.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@linode/manager": Upcoming Features ---- - -Improve Billing & Account Restricted User Experience ([#10201](https://github.com/linode/manager/pull/10201)) diff --git a/packages/manager/.changeset/pr-10202-tests-1708119481596.md b/packages/manager/.changeset/pr-10202-tests-1708119481596.md deleted file mode 100644 index 3017a0cdc53..00000000000 --- a/packages/manager/.changeset/pr-10202-tests-1708119481596.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@linode/manager": Tests ---- - -Improve User Profile integration test coverage and separate from Display Settings coverage ([#10202](https://github.com/linode/manager/pull/10202)) diff --git a/packages/manager/.changeset/pr-10202-upcoming-features-1708119409383.md b/packages/manager/.changeset/pr-10202-upcoming-features-1708119409383.md deleted file mode 100644 index 1d906c12174..00000000000 --- a/packages/manager/.changeset/pr-10202-upcoming-features-1708119409383.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@linode/manager": Upcoming Features ---- - -Disable ability to edit or delete a proxy user via User Profile page ([#10202](https://github.com/linode/manager/pull/10202)) diff --git a/packages/manager/.changeset/pr-10203-tech-stories-1708119742778.md b/packages/manager/.changeset/pr-10203-tech-stories-1708119742778.md deleted file mode 100644 index 9bde62beef8..00000000000 --- a/packages/manager/.changeset/pr-10203-tech-stories-1708119742778.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@linode/manager": Tech Stories ---- - -Convert isRestrictedGlobalGrantType to Hook ([#10203](https://github.com/linode/manager/pull/10203)) diff --git a/packages/manager/.changeset/pr-10211-tests-1708466647763.md b/packages/manager/.changeset/pr-10211-tests-1708466647763.md deleted file mode 100644 index c26a92e7d5c..00000000000 --- a/packages/manager/.changeset/pr-10211-tests-1708466647763.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@linode/manager": Tests ---- - -Add test for OBJ Multicluster bucket create flow ([#10211](https://github.com/linode/manager/pull/10211)) diff --git a/packages/manager/.changeset/pr-10212-tech-stories-1708530535485.md b/packages/manager/.changeset/pr-10212-tech-stories-1708530535485.md deleted file mode 100644 index b3fff73342e..00000000000 --- a/packages/manager/.changeset/pr-10212-tech-stories-1708530535485.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@linode/manager": Tech Stories ---- - -Update Storybook to latest to resolve CVE-2023-42282 ([#10212](https://github.com/linode/manager/pull/10212)) diff --git a/packages/manager/.changeset/pr-10213-upcoming-features-1708540968499.md b/packages/manager/.changeset/pr-10213-upcoming-features-1708540968499.md deleted file mode 100644 index abba4498a36..00000000000 --- a/packages/manager/.changeset/pr-10213-upcoming-features-1708540968499.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@linode/manager": Upcoming Features ---- - -Ensure correct ARIA labels for permissions are displayed in Access Key "Permissions" drawer when OBJ Multicluster is enabled ([#10213](https://github.com/linode/manager/pull/10213)) diff --git a/packages/manager/.changeset/pr-10214-tech-stories-1708552464325.md b/packages/manager/.changeset/pr-10214-tech-stories-1708552464325.md deleted file mode 100644 index efbd64b666f..00000000000 --- a/packages/manager/.changeset/pr-10214-tech-stories-1708552464325.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@linode/manager": Tech Stories ---- - -Generate docs site sidebar based on folder structure ([#10214](https://github.com/linode/manager/pull/10214)) diff --git a/packages/manager/.changeset/pr-10215-fixed-1708555044784.md b/packages/manager/.changeset/pr-10215-fixed-1708555044784.md deleted file mode 100644 index 1d65574d944..00000000000 --- a/packages/manager/.changeset/pr-10215-fixed-1708555044784.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@linode/manager": Fixed ---- - -Disabled Add button once a node pool is added to kubernetes cluster in Create flow ([#10215](https://github.com/linode/manager/pull/10215)) diff --git a/packages/manager/.changeset/pr-10217-tech-stories-1708960982000.md b/packages/manager/.changeset/pr-10217-tech-stories-1708960982000.md deleted file mode 100644 index 5c773dd96b6..00000000000 --- a/packages/manager/.changeset/pr-10217-tech-stories-1708960982000.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@linode/manager": Tech Stories ---- - -Clean up `new QueryClient()` pattern in unit tests ([#10217](https://github.com/linode/manager/pull/10217)) diff --git a/packages/manager/.changeset/pr-10219-tech-stories-1708637715379.md b/packages/manager/.changeset/pr-10219-tech-stories-1708637715379.md deleted file mode 100644 index 8d5f727239d..00000000000 --- a/packages/manager/.changeset/pr-10219-tech-stories-1708637715379.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@linode/manager": Tech Stories ---- - -Remove build time API caching ([#10219](https://github.com/linode/manager/pull/10219)) diff --git a/packages/manager/.changeset/pr-10220-changed-1708622627827.md b/packages/manager/.changeset/pr-10220-changed-1708622627827.md deleted file mode 100644 index 5344aa3cf4e..00000000000 --- a/packages/manager/.changeset/pr-10220-changed-1708622627827.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@linode/manager": Changed ---- - -Improve dev tools UI ([#10220](https://github.com/linode/manager/pull/10220)) diff --git a/packages/manager/.changeset/pr-10223-tech-stories-1708637625570.md b/packages/manager/.changeset/pr-10223-tech-stories-1708637625570.md deleted file mode 100644 index e18d82f558d..00000000000 --- a/packages/manager/.changeset/pr-10223-tech-stories-1708637625570.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@linode/manager": Tech Stories ---- - -Clean up `Chip` component ([#10223](https://github.com/linode/manager/pull/10223)) diff --git a/packages/manager/.changeset/pr-10226-fixed-1708710525397.md b/packages/manager/.changeset/pr-10226-fixed-1708710525397.md deleted file mode 100644 index 30dcec52f42..00000000000 --- a/packages/manager/.changeset/pr-10226-fixed-1708710525397.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@linode/manager": Fixed ---- - -Invalid VPC scope with a Select All > Read Only selection in Create PAT drawer ([#10226](https://github.com/linode/manager/pull/10226)) diff --git a/packages/manager/.changeset/pr-10229-added-1708735909784.md b/packages/manager/.changeset/pr-10229-added-1708735909784.md deleted file mode 100644 index b35e801c150..00000000000 --- a/packages/manager/.changeset/pr-10229-added-1708735909784.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@linode/manager": Added ---- - -Reintroduce NVMe Volume Upgrades ([#10229](https://github.com/linode/manager/pull/10229)) diff --git a/packages/manager/.changeset/pr-10230-upcoming-features-1708982538087.md b/packages/manager/.changeset/pr-10230-upcoming-features-1708982538087.md deleted file mode 100644 index 9d3ae547592..00000000000 --- a/packages/manager/.changeset/pr-10230-upcoming-features-1708982538087.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@linode/manager": Upcoming Features ---- - -Fix Users & Grants filtering error based on `user_type` ([#10230](https://github.com/linode/manager/pull/10230)) diff --git a/packages/manager/.changeset/pr-10231-fixed-1708986686253.md b/packages/manager/.changeset/pr-10231-fixed-1708986686253.md deleted file mode 100644 index ca12005d161..00000000000 --- a/packages/manager/.changeset/pr-10231-fixed-1708986686253.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@linode/manager": Fixed ---- - -Disabled styles for Textfield input ([#10231](https://github.com/linode/manager/pull/10231)) diff --git a/packages/manager/.changeset/pr-10232-changed-1709130492234.md b/packages/manager/.changeset/pr-10232-changed-1709130492234.md deleted file mode 100644 index f8b71f8b67a..00000000000 --- a/packages/manager/.changeset/pr-10232-changed-1709130492234.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@linode/manager": Changed ---- - -ACLB beta region `Washington, DC` to `Miami, FL` ([#10232](https://github.com/linode/manager/pull/10232)) diff --git a/packages/manager/.changeset/pr-10234-upcoming-features-1709068609413.md b/packages/manager/.changeset/pr-10234-upcoming-features-1709068609413.md deleted file mode 100644 index b41a933532d..00000000000 --- a/packages/manager/.changeset/pr-10234-upcoming-features-1709068609413.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@linode/manager": Upcoming Features ---- - -Fix Account Switching ([#10234](https://github.com/linode/manager/pull/10234)) diff --git a/packages/manager/.changeset/pr-10234-upcoming-features-1709068764309.md b/packages/manager/.changeset/pr-10234-upcoming-features-1709068764309.md deleted file mode 100644 index ec7f0726d34..00000000000 --- a/packages/manager/.changeset/pr-10234-upcoming-features-1709068764309.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@linode/manager": Upcoming Features ---- - -Fix to ensure ChildAccountList receives proper account token ([#10234](https://github.com/linode/manager/pull/10234)) diff --git a/packages/manager/.changeset/pr-10235-fixed-1709135736984.md b/packages/manager/.changeset/pr-10235-fixed-1709135736984.md deleted file mode 100644 index 0cbce4d44fd..00000000000 --- a/packages/manager/.changeset/pr-10235-fixed-1709135736984.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@linode/manager": Fixed ---- - -LinodeVolumeCreateForm crash ([#10235](https://github.com/linode/manager/pull/10235)) diff --git a/packages/manager/.changeset/pr-10239-tests-1709145080838.md b/packages/manager/.changeset/pr-10239-tests-1709145080838.md deleted file mode 100644 index 594b449874d..00000000000 --- a/packages/manager/.changeset/pr-10239-tests-1709145080838.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@linode/manager": Tests ---- - -Suppress Rollup warnings during Cypress tests ([#10239](https://github.com/linode/manager/pull/10239)) diff --git a/packages/manager/CHANGELOG.md b/packages/manager/CHANGELOG.md index 88934156e35..3517ca79c82 100644 --- a/packages/manager/CHANGELOG.md +++ b/packages/manager/CHANGELOG.md @@ -4,6 +4,61 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/). +## [2024-03-04] - v1.114.0 + +### Added: + +- Reintroduce NVMe Volume Upgrades ([#10229](https://github.com/linode/manager/pull/10229)) + +### Changed: + +- Improve dev tools UI ([#10220](https://github.com/linode/manager/pull/10220)) +- ACLB beta region from `Washington, DC` to `Miami, FL` ([#10232](https://github.com/linode/manager/pull/10232)) + +### Fixed: + +- Incorrect units in Linode Network Graph Tooltip ([#10197](https://github.com/linode/manager/pull/10197)) +- Disabled `Add` button once a node pool is added to kubernetes cluster in Create flow ([#10215](https://github.com/linode/manager/pull/10215)) +- Invalid VPC scope with a Select All > Read Only selection in Create PAT drawer ([#10226](https://github.com/linode/manager/pull/10226)) +- Disabled styles for Textfield input ([#10231](https://github.com/linode/manager/pull/10231)) +- LinodeVolumeCreateForm crash ([#10235](https://github.com/linode/manager/pull/10235)) + +### Tech Stories: + +- Update to React 18 ([#10169](https://github.com/linode/manager/pull/10169)) +- Improve LinodeActionMenu restricted user experience ([#10199](https://github.com/linode/manager/pull/10199)) +- Convert isRestrictedGlobalGrantType to Hook ([#10203](https://github.com/linode/manager/pull/10203)) +- Update Storybook to latest to resolve CVE-2023-42282 ([#10212](https://github.com/linode/manager/pull/10212)) +- Generate docs site sidebar based on folder structure ([#10214](https://github.com/linode/manager/pull/10214)) +- Clean up `new QueryClient()` pattern in unit tests ([#10217](https://github.com/linode/manager/pull/10217)) +- Remove build time API caching ([#10219](https://github.com/linode/manager/pull/10219)) +- Clean up `Chip` component ([#10223](https://github.com/linode/manager/pull/10223)) + +### Tests: + +- Add Cypress tests for account switching from Parent to Child ([#10110](https://github.com/linode/manager/pull/10110)) +- Improve User Profile integration test coverage and separate from Display Settings coverage ([#10202](https://github.com/linode/manager/pull/10202)) +- Add test for OBJ Multicluster bucket create flow ([#10211](https://github.com/linode/manager/pull/10211)) +- Suppress Rollup warnings during Cypress tests ([#10239](https://github.com/linode/manager/pull/10239)) + +### Upcoming Features: + +- Add list view for Linode Clone and Create from Backup ([#10182](https://github.com/linode/manager/pull/10182)) +- Add ‘Delete Placement Group’ Modal (#10162) +- Update Placement Groups types, methods and factories (#10200) +- Add placement group details to Create Linode payload ([#10195](https://github.com/linode/manager/pull/10195)) +- Update OBJ Multi-Cluster copy ([#10188](https://github.com/linode/manager/pull/10188)) +- Handle errors gracefully when OBJ Multi-Cluster feature flag is enabled without MSW (#10189) +- Ensure correct ARIA labels for permissions are displayed in Access Key "Permissions" drawer when OBJ Multicluster is enabled ([#10213](https://github.com/linode/manager/pull/10213)) +- Update Region Select for edge sites (#10194) +- Tag custom analytics events for account switching ([#10190](https://github.com/linode/manager/pull/10190)) +- Improve Billing & Account restricted user experience ([#10201](https://github.com/linode/manager/pull/10201)) +- Disable ability to edit or delete a proxy user via User Profile page ([#10202](https://github.com/linode/manager/pull/10202)) +- Fix Users & Grants filtering error based on `user_type` ([#10230](https://github.com/linode/manager/pull/10230)) +- Fix Account Switching ([#10234](https://github.com/linode/manager/pull/10234)) +- Fix to ensure ChildAccountList receives proper account token (#10234) +- Rename database scale up to database resize ([#10193](https://github.com/linode/manager/pull/10193)) + ## [2024-02-20] - v1.113.0 ### Added: diff --git a/packages/manager/package.json b/packages/manager/package.json index d34a381a11a..bc5a2813a46 100644 --- a/packages/manager/package.json +++ b/packages/manager/package.json @@ -2,7 +2,7 @@ "name": "linode-manager", "author": "Linode", "description": "The Linode Manager website", - "version": "1.113.0", + "version": "1.114.0", "private": true, "type": "module", "bugs": { diff --git a/packages/validation/CHANGELOG.md b/packages/validation/CHANGELOG.md index 9ba366e402f..6db4b431274 100644 --- a/packages/validation/CHANGELOG.md +++ b/packages/validation/CHANGELOG.md @@ -1,5 +1,9 @@ -## [2024-02-13] - v0.40.0 +## [2024-03-04] - v0.41.0 +### Upcoming Features: + +- Add Placement Group data in Create Linode payload ([#10195](https://github.com/linode/manager/pull/10195)) +- Placement Group types update ([#10200](https://github.com/linode/manager/pull/10200)) ### Changed: @@ -7,15 +11,12 @@ ## [2024-02-05] - v0.39.0 - ### Upcoming Features: - Add `path_regex` as a valid ACLB rule match field ([#10126](https://github.com/linode/manager/pull/10126)) - ## [2024-01-22] - v0.38.0 - ### Changed: - Revise createObjectStorageKeysSchema to include optional 'regions' field ([#10063](https://github.com/linode/manager/pull/10063)) @@ -23,14 +24,12 @@ ## [2024-01-08] - v0.37.0 - ### Tech Stories: - Add Lint Github Action ([#9973](https://github.com/linode/manager/pull/9973)) ## [2023-12-11] - v0.36.0 - ### Upcoming Features: - Improve `UpdateConfigurationSchema` ([#9870](https://github.com/linode/manager/pull/9870)) @@ -40,14 +39,12 @@ ## [2023-11-13] - v0.35.0 - ### Upcoming Features: - Add `CreateLoadBalancerEndpointSchema`, `CreateLoadBalancerServiceTargetSchema`, `CreateLoadBalancerRuleSchema`, `ConfigurationSchema`, and `CreateLoadBalancerSchema` for AGLB ([#9848](https://github.com/linode/manager/pull/9848)) - Add `UpdateConfigurationSchema` for AGLB ([#9853](https://github.com/linode/manager/pull/9853)) - Add missing label validation to `UpdateCertificateSchema` for AGLB ([#9880](https://github.com/linode/manager/pull/9880)) - ## [2023-10-30] - v0.34.0 ### Changed: diff --git a/packages/validation/package.json b/packages/validation/package.json index 3d5d2f5e275..a09c0a89ae1 100644 --- a/packages/validation/package.json +++ b/packages/validation/package.json @@ -1,6 +1,6 @@ { "name": "@linode/validation", - "version": "0.40.0", + "version": "0.41.0", "description": "Yup validation schemas for use with the Linode APIv4", "type": "module", "main": "lib/index.cjs", @@ -68,4 +68,4 @@ }, "author": "Linode LLC", "license": "Apache-2.0" -} \ No newline at end of file +} From e07d8c71ccdfc3be012e3a00e692213ed1434413 Mon Sep 17 00:00:00 2001 From: ecarrill Date: Mon, 4 Mar 2024 08:53:17 -0800 Subject: [PATCH 37/37] Add the release date and version number for Validation package that was deleted --- packages/validation/CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/validation/CHANGELOG.md b/packages/validation/CHANGELOG.md index 6db4b431274..20122feb24a 100644 --- a/packages/validation/CHANGELOG.md +++ b/packages/validation/CHANGELOG.md @@ -5,6 +5,8 @@ - Add Placement Group data in Create Linode payload ([#10195](https://github.com/linode/manager/pull/10195)) - Placement Group types update ([#10200](https://github.com/linode/manager/pull/10200)) +## [2024-02-13] - v0.40.0 + ### Changed: - ip_ranges field in LinodeInterfaceSchema no longer limited to 1 element ([#10089](https://github.com/linode/manager/pull/10089))