diff --git a/jest.config.js b/jest.config.js index 7254c140eb6..6f9f99d5d56 100644 --- a/jest.config.js +++ b/jest.config.js @@ -159,6 +159,7 @@ module.exports = { // Options that will be passed to the testEnvironment testEnvironmentOptions: { + globalsCleanup: 'on', customExportConditions: ['source'] }, diff --git a/jest.ssr.config.js b/jest.ssr.config.js index 261fcd08746..8449502bfb9 100644 --- a/jest.ssr.config.js +++ b/jest.ssr.config.js @@ -41,6 +41,11 @@ module.exports = { // The test environment that will be used for testing testEnvironment: 'jsdom', + // Match jest.config.js so the in-repo `"source"` export condition wins over `require`. + testEnvironmentOptions: { + customExportConditions: ['source'] + }, + setupFilesAfterEnv: ['scripts/setupTests.js'], // The glob patterns Jest uses to detect test files diff --git a/package.json b/package.json index 29c841fb4f1..e65b9277d49 100644 --- a/package.json +++ b/package.json @@ -122,11 +122,11 @@ "@storybook/react": "^10.0.0", "@storybook/test-runner": "^0.24.0", "@swc/core": "^1.3.36", - "@swc/jest": "^0.2.36", + "@swc/jest": "^0.2.39", "@tailwindcss/postcss": "^4.0.17", "@testing-library/dom": "^10.1.0", - "@testing-library/jest-dom": "^5.16.5", - "@testing-library/react": "^16.0.0", + "@testing-library/jest-dom": "^6.9.1", + "@testing-library/react": "^16.3.0", "@testing-library/user-event": "patch:@testing-library/user-event@npm%3A14.6.1#~/.yarn/patches/@testing-library-user-event-npm-14.6.1-5da7e1d4e2.patch", "@types/react": "^19.0.0", "@types/react-dom": "^19.0.0", @@ -160,15 +160,16 @@ "identity-obj-proxy": "^3.0.0", "ignore-styles": "^5.0.1", "is-mingw": "^2.0.0", - "jest": "^29.5.0", - "jest-environment-jsdom": "^29.5.0", - "jest-junit": "^15.0.0", - "jest-matchmedia-mock": "^1.1.0", + "jest": "^30.0.0", + "jest-environment-jsdom": "^30.0.0", + "jest-junit": "^17.0.0", "json5": "^2.2.3", "lerna": "^3.13.2", "lucide-react": "^0.517.0", "md5": "^2.2.1", "mdast-util-to-string": "^4.0.0", + "media-query-fns": "^2.1.2", + "mock-match-media": "^1.0.0", "motion": "^12.23.6", "npm-cli-login": "^1.0.0", "oxfmt": "^0.48.0", diff --git a/packages/@adobe/react-spectrum/test/actiongroup/ActionGroup.test.js b/packages/@adobe/react-spectrum/test/actiongroup/ActionGroup.test.js index f33ce061c7a..ead720c81e0 100644 --- a/packages/@adobe/react-spectrum/test/actiongroup/ActionGroup.test.js +++ b/packages/@adobe/react-spectrum/test/actiongroup/ActionGroup.test.js @@ -435,10 +435,10 @@ describe('ActionGroup', function () { let [button1, button2] = getAllByRole('radio'); await user.click(button1); expect(button1).toHaveAttribute('disabled'); - expect(onSelectionChange).toBeCalledTimes(0); + expect(onSelectionChange).toHaveBeenCalledTimes(0); await user.click(button2); expect(button2).not.toHaveAttribute('disabled'); - expect(onSelectionChange).toBeCalledTimes(1); + expect(onSelectionChange).toHaveBeenCalledTimes(1); }); it('ActionGroup handles selectedKeys (controlled)', async function () { @@ -453,7 +453,7 @@ describe('ActionGroup', function () { expect(button1).toHaveAttribute('aria-checked', 'true'); expect(button2).toHaveAttribute('aria-checked', 'false'); await user.click(button2); - expect(onSelectionChange).toBeCalledTimes(1); + expect(onSelectionChange).toHaveBeenCalledTimes(1); expect(button1).toHaveAttribute('aria-checked', 'true'); expect(button2).toHaveAttribute('aria-checked', 'false'); }); @@ -470,7 +470,7 @@ describe('ActionGroup', function () { expect(button1).toHaveAttribute('aria-checked', 'true'); expect(button2).toHaveAttribute('aria-checked', 'false'); await user.click(button2); - expect(onSelectionChange).toBeCalledTimes(1); + expect(onSelectionChange).toHaveBeenCalledTimes(1); expect(button1).toHaveAttribute('aria-checked', 'false'); expect(button2).toHaveAttribute('aria-checked', 'true'); }); @@ -481,10 +481,10 @@ describe('ActionGroup', function () { let [button1] = getAllByRole('radio'); await user.click(button1); - expect(onSelectionChange).toBeCalledTimes(1); + expect(onSelectionChange).toHaveBeenCalledTimes(1); expect(new Set(onSelectionChange.mock.calls[0][0])).toEqual(new Set(['1'])); await user.click(button1); - expect(onSelectionChange).toBeCalledTimes(2); + expect(onSelectionChange).toHaveBeenCalledTimes(2); expect(new Set(onSelectionChange.mock.calls[1][0])).toEqual(new Set([])); }); diff --git a/packages/@adobe/react-spectrum/test/autocomplete/SearchAutocomplete.test.js b/packages/@adobe/react-spectrum/test/autocomplete/SearchAutocomplete.test.js index cbcd960d8d5..a1639f13f25 100644 --- a/packages/@adobe/react-spectrum/test/autocomplete/SearchAutocomplete.test.js +++ b/packages/@adobe/react-spectrum/test/autocomplete/SearchAutocomplete.test.js @@ -206,7 +206,7 @@ describe('SearchAutocomplete', function () { }); it('renders with placeholder text and shows warning', function () { - let spyWarn = jest.spyOn(console, 'warn').mockImplementation(() => {}); + using spyWarn = jest.spyOn(console, 'warn').mockImplementation(() => {}); let {getByPlaceholderText, getByRole} = renderSearchAutocomplete({ placeholder: 'Test placeholder' }); @@ -357,7 +357,7 @@ describe('SearchAutocomplete', function () { }); let listbox = getByRole('listbox'); - expect(onOpenChange).toBeCalledTimes(1); + expect(onOpenChange).toHaveBeenCalledTimes(1); expect(onOpenChange).toHaveBeenCalledWith(true, 'focus'); await testSearchAutocompleteOpen(searchAutocomplete, listbox); }); diff --git a/packages/@adobe/react-spectrum/test/checkbox/CheckboxGroup.test.js b/packages/@adobe/react-spectrum/test/checkbox/CheckboxGroup.test.js index 5c577506b84..0f819ac3008 100644 --- a/packages/@adobe/react-spectrum/test/checkbox/CheckboxGroup.test.js +++ b/packages/@adobe/react-spectrum/test/checkbox/CheckboxGroup.test.js @@ -346,7 +346,7 @@ describe('CheckboxGroup', () => { 'warns if %s is passed to an individual checkbox', prop => { let props = {[prop]: true}; - let spy = jest.spyOn(console, 'warn').mockImplementation(() => {}); + using spy = jest.spyOn(console, 'warn').mockImplementation(() => {}); render( diff --git a/packages/@adobe/react-spectrum/test/color/ColorField.test.js b/packages/@adobe/react-spectrum/test/color/ColorField.test.js index 771d542a539..9d0d65e6980 100644 --- a/packages/@adobe/react-spectrum/test/color/ColorField.test.js +++ b/packages/@adobe/react-spectrum/test/color/ColorField.test.js @@ -64,7 +64,7 @@ describe('ColorField', function () { }); it('should allow placeholder and show warning', function () { - let spyWarn = jest.spyOn(console, 'warn').mockImplementation(() => {}); + using spyWarn = jest.spyOn(console, 'warn').mockImplementation(() => {}); let {getByPlaceholderText, getByRole} = renderComponent({placeholder: 'Enter a color'}); expect(getByRole('textbox')).toBe(getByPlaceholderText('Enter a color')); expect(spyWarn).toHaveBeenCalledWith( @@ -392,7 +392,7 @@ describe('ColorField', function () { let [value, setValue] = React.useState(parseColor('#7f0000')); return (
- + ); @@ -419,7 +419,7 @@ describe('ColorField', function () { return (
- + ); diff --git a/packages/@adobe/react-spectrum/test/combobox/ComboBox.test.js b/packages/@adobe/react-spectrum/test/combobox/ComboBox.test.js index 997d54adc8c..6f5c85d6baf 100644 --- a/packages/@adobe/react-spectrum/test/combobox/ComboBox.test.js +++ b/packages/@adobe/react-spectrum/test/combobox/ComboBox.test.js @@ -328,7 +328,7 @@ describe('ComboBox', function () { }); it('renders with placeholder text and shows warning', function () { - let spyWarn = jest.spyOn(console, 'warn').mockImplementation(() => {}); + using spyWarn = jest.spyOn(console, 'warn').mockImplementation(() => {}); let {getByPlaceholderText, getByRole} = renderComboBox({placeholder: 'Test placeholder'}); let searchAutocomplete = getByRole('combobox'); @@ -472,7 +472,7 @@ describe('ComboBox', function () { await comboboxTester.open({triggerBehavior: 'focus'}); let listbox = comboboxTester.listbox; - expect(onOpenChange).toBeCalledTimes(1); + expect(onOpenChange).toHaveBeenCalledTimes(1); expect(onOpenChange).toHaveBeenCalledWith(true, 'focus'); await testComboBoxOpen(combobox, button, listbox); }); @@ -486,7 +486,7 @@ describe('ComboBox', function () { await comboboxTester.open({triggerBehavior: 'manual'}); let listbox = comboboxTester.listbox; - expect(onOpenChange).toBeCalledTimes(1); + expect(onOpenChange).toHaveBeenCalledTimes(1); expect(onOpenChange).toHaveBeenCalledWith(true, 'focus'); await testComboBoxOpen(combobox, button, listbox); }); @@ -1271,7 +1271,7 @@ describe('ComboBox', function () { await user.keyboard('a'); expect(combobox.value).toBe('blah'); - expect(onInputChange).toBeCalledTimes(1); + expect(onInputChange).toHaveBeenCalledTimes(1); expect(onInputChange).toHaveBeenCalledWith('blaha'); }); @@ -1828,7 +1828,7 @@ describe('ComboBox', function () { expect(onSelectionChange).toHaveBeenCalledTimes(1); expect(onSelectionChange).toHaveBeenCalledWith('1'); expect(document.activeElement).toBe(combobox); - expect(onBlur).not.toBeCalled(); + expect(onBlur).not.toHaveBeenCalled(); }); it('tab and shift tab move focus away from the combobox and select the focused item', async function () { @@ -2773,19 +2773,19 @@ describe('ComboBox', function () { if (!Name.includes('value') && !Name.includes('all')) { // Check that onInputChange is firing appropriately for the comboboxes w/o user defined onInputChange handlers - expect(onInputChange).toBeCalledTimes(3); + expect(onInputChange).toHaveBeenCalledTimes(3); expect(onInputChange).toHaveBeenLastCalledWith('One'); } if (Name === 'controlled value and open') { // Checking special case, spy is chained with the onSelectionChangeHandler - expect(onSelectionChange).toBeCalledTimes(2); + expect(onSelectionChange).toHaveBeenCalledTimes(2); expect(onSelectionChange).toHaveBeenLastCalledWith('1'); } if (!Name.includes('open') && !Name.includes('all')) { // Check that onOpenChange is firing appropriately for the comboboxes w/o user defined onOpenChange handlers - expect(onOpenChange).toBeCalledTimes(4); + expect(onOpenChange).toHaveBeenCalledTimes(4); expect(onOpenChange).toHaveBeenLastCalledWith(false, undefined); } @@ -2826,19 +2826,19 @@ describe('ComboBox', function () { if (!Name.includes('value') && !Name.includes('all')) { // Check that onInputChange is firing appropriately for the comboboxes w/o user defined onInputChange handlers - expect(onInputChange).toBeCalledTimes(3); + expect(onInputChange).toHaveBeenCalledTimes(3); expect(onInputChange).toHaveBeenLastCalledWith('One'); } if (Name === 'controlled value and open') { // Checking special case, spy is chained with the onSelectionChangeHandler - expect(onSelectionChange).toBeCalledTimes(1); + expect(onSelectionChange).toHaveBeenCalledTimes(1); expect(onSelectionChange).toHaveBeenLastCalledWith('1'); } if (!Name.includes('open') && !Name.includes('all')) { // Check that onOpenChange is firing appropriately for the comboboxes w/o user defined onOpenChange handlers - expect(onOpenChange).toBeCalledTimes(2); + expect(onOpenChange).toHaveBeenCalledTimes(2); expect(onOpenChange).toHaveBeenLastCalledWith(false, undefined); } @@ -2894,19 +2894,19 @@ describe('ComboBox', function () { if (!Name.includes('value') && !Name.includes('all')) { // Check that onInputChange is firing appropriately for the comboboxes w/o user defined onInputChange handlers - expect(onInputChange).toBeCalledTimes(5); + expect(onInputChange).toHaveBeenCalledTimes(5); expect(onInputChange).toHaveBeenLastCalledWith('One'); } if (Name === 'controlled value and open') { // Checking special case, spy is chained with the onSelectionChangeHandler - expect(onSelectionChange).toBeCalledTimes(2); + expect(onSelectionChange).toHaveBeenCalledTimes(2); expect(onSelectionChange).toHaveBeenLastCalledWith('1'); } if (!Name.includes('open') && !Name.includes('all')) { // Check that onOpenChange is firing appropriately for the comboboxes w/o user defined onOpenChange handlers - expect(onOpenChange).toBeCalledTimes(4); + expect(onOpenChange).toHaveBeenCalledTimes(4); expect(onOpenChange).toHaveBeenLastCalledWith(false, undefined); } }); @@ -2943,19 +2943,19 @@ describe('ComboBox', function () { if (!Name.includes('value') && !Name.includes('all')) { // Check that onInputChange is firing appropriately for the comboboxes w/o user defined onInputChange handlers - expect(onInputChange).toBeCalledTimes(5); + expect(onInputChange).toHaveBeenCalledTimes(5); expect(onInputChange).toHaveBeenLastCalledWith(''); } if (Name === 'controlled value and open') { // Checking special case, spy is chained with the onSelectionChangeHandler - expect(onSelectionChange).toBeCalledTimes(1); + expect(onSelectionChange).toHaveBeenCalledTimes(1); expect(onSelectionChange).toHaveBeenLastCalledWith(null); } if (!Name.includes('open') && !Name.includes('all')) { // Check that onOpenChange is firing appropriately for the comboboxes w/o user defined onOpenChange handlers - expect(onOpenChange).toBeCalledTimes(2); + expect(onOpenChange).toHaveBeenCalledTimes(2); expect(onOpenChange).toHaveBeenLastCalledWith(false, undefined); } }); @@ -2990,7 +2990,7 @@ describe('ComboBox', function () { (!Name.includes('key') && !Name.includes('all')) || Name === 'controlled value and open' ) { - expect(onSelectionChange).toBeCalledTimes(1); + expect(onSelectionChange).toHaveBeenCalledTimes(1); expect(onSelectionChange).toHaveBeenLastCalledWith('1'); } expect(queryByRole('listbox')).toBeNull(); @@ -3006,7 +3006,7 @@ describe('ComboBox', function () { if (Name === 'controlled value and open') { // Checking special case, spy is chained with the onSelectionChangeHandler // onSelectionChange is called on blur due to commitSelection (so that input value resets) - expect(onSelectionChange).toBeCalledTimes(2); + expect(onSelectionChange).toHaveBeenCalledTimes(2); expect(onSelectionChange).toHaveBeenLastCalledWith('1'); } @@ -3027,7 +3027,7 @@ describe('ComboBox', function () { expect(queryByRole('listbox')).toBeNull(); if (!Name.includes('value') && !Name.includes('all')) { - expect(onInputChange).toBeCalledTimes(5); + expect(onInputChange).toHaveBeenCalledTimes(5); expect(onInputChange).toHaveBeenLastCalledWith('New Text'); } }); @@ -3060,7 +3060,7 @@ describe('ComboBox', function () { (!Name.includes('key') && !Name.includes('all')) || Name === 'controlled value and open' ) { - expect(onSelectionChange).toBeCalledTimes(1); + expect(onSelectionChange).toHaveBeenCalledTimes(1); expect(onSelectionChange).toHaveBeenLastCalledWith('1'); } expect(queryByRole('listbox')).toBeNull(); diff --git a/packages/@adobe/react-spectrum/test/dialog/DialogTrigger.test.js b/packages/@adobe/react-spectrum/test/dialog/DialogTrigger.test.js index 5394b73e1c8..b08dac08f9e 100644 --- a/packages/@adobe/react-spectrum/test/dialog/DialogTrigger.test.js +++ b/packages/@adobe/react-spectrum/test/dialog/DialogTrigger.test.js @@ -831,7 +831,7 @@ describe('DialogTrigger', function () { }); it('should warn when unmounting a dialog trigger while a modal is open', async function () { - let warn = jest.spyOn(console, 'warn').mockImplementation(() => {}); + using warn = jest.spyOn(console, 'warn').mockImplementation(() => {}); let {getByRole, queryByRole} = render( diff --git a/packages/@adobe/react-spectrum/test/image/Image.test.js b/packages/@adobe/react-spectrum/test/image/Image.test.js index 903c44a530d..b929df3946b 100644 --- a/packages/@adobe/react-spectrum/test/image/Image.test.js +++ b/packages/@adobe/react-spectrum/test/image/Image.test.js @@ -36,7 +36,7 @@ describe('Image', () => { ); fireEvent.error(screen.getByAltText('Sky and roof')); - expect(mockOnErrorCallback).toBeCalled(); + expect(mockOnErrorCallback).toHaveBeenCalled(); }); describe('crossorigin attribute', () => { diff --git a/packages/@adobe/react-spectrum/test/list/ListView.test.js b/packages/@adobe/react-spectrum/test/list/ListView.test.js index c41f088f838..0b7c8e0659f 100644 --- a/packages/@adobe/react-spectrum/test/list/ListView.test.js +++ b/packages/@adobe/react-spectrum/test/list/ListView.test.js @@ -1100,7 +1100,7 @@ describe('ListView', function () { describe('selectionStyle highlight', function () { installPointerEvent(); it('should toggle items in selection highlight with meta-click on Mac', async function () { - let uaMock = jest.spyOn(navigator, 'platform', 'get').mockImplementation(() => 'Mac'); + using uaMock = jest.spyOn(navigator, 'platform', 'get').mockImplementation(() => 'Mac'); let tree = renderSelectionList({ onSelectionChange, selectionMode: 'multiple', @@ -1143,7 +1143,9 @@ describe('ListView', function () { }); it('should allow multiple items to be selected in selection highlight with ctrl-click on Windows', async function () { - let uaMock = jest.spyOn(navigator, 'userAgent', 'get').mockImplementation(() => 'Windows'); + using uaMock = jest + .spyOn(navigator, 'userAgent', 'get') + .mockImplementation(() => 'Windows'); let tree = renderSelectionList({ onSelectionChange, selectionMode: 'multiple', @@ -1178,7 +1180,9 @@ describe('ListView', function () { }); it('should toggle items in selection highlight with ctrl-click on Windows', async function () { - let uaMock = jest.spyOn(navigator, 'userAgent', 'get').mockImplementation(() => 'Windows'); + using uaMock = jest + .spyOn(navigator, 'userAgent', 'get') + .mockImplementation(() => 'Windows'); let tree = renderSelectionList({ onSelectionChange, selectionMode: 'multiple', diff --git a/packages/@adobe/react-spectrum/test/listbox/ListBox.test.js b/packages/@adobe/react-spectrum/test/listbox/ListBox.test.js index 2d13e6723a4..406fcbbc6a1 100644 --- a/packages/@adobe/react-spectrum/test/listbox/ListBox.test.js +++ b/packages/@adobe/react-spectrum/test/listbox/ListBox.test.js @@ -238,7 +238,7 @@ describe('ListBox', function () { let checkmarks = tree.getAllByRole('img', {hidden: true}); expect(checkmarks.length).toBe(1); - expect(onSelectionChange).toBeCalledTimes(1); + expect(onSelectionChange).toHaveBeenCalledTimes(1); expect(onSelectionChange.mock.calls[0][0].has('Bleh')).toBeTruthy(); }); @@ -273,7 +273,7 @@ describe('ListBox', function () { let checkmarks = tree.getAllByRole('img', {hidden: true}); expect(checkmarks.length).toBe(1); - expect(onSelectionChange).toBeCalledTimes(1); + expect(onSelectionChange).toHaveBeenCalledTimes(1); expect(onSelectionChange.mock.calls[0][0].has('Bleh')).toBeTruthy(); }); @@ -297,7 +297,7 @@ describe('ListBox', function () { expect(checkmarks.length).toBe(1); // Verify onSelectionChange is called - expect(onSelectionChange).toBeCalledTimes(1); + expect(onSelectionChange).toHaveBeenCalledTimes(1); expect(onSelectionChange.mock.calls[0][0].has('Bleh')).toBeTruthy(); }); @@ -319,7 +319,7 @@ describe('ListBox', function () { expect(checkmarks.length).toBe(1); // Verify onSelectionChange is called - expect(onSelectionChange).toBeCalledTimes(1); + expect(onSelectionChange).toHaveBeenCalledTimes(1); expect(onSelectionChange.mock.calls[0][0].has('Bleh')).toBeTruthy(); }); @@ -345,7 +345,7 @@ describe('ListBox', function () { expect(checkmarks.length).toBe(0); // Verify onSelectionChange is not called - expect(onSelectionChange).toBeCalledTimes(0); + expect(onSelectionChange).toHaveBeenCalledTimes(0); // Verify that keyboard navigation skips disabled items expect(document.activeElement).toBe(options[0]); @@ -389,7 +389,7 @@ describe('ListBox', function () { checkmarks = tree.getAllByRole('img', {hidden: true}); expect(checkmarks.length).toBe(2); - expect(onSelectionChange).toBeCalledTimes(2); + expect(onSelectionChange).toHaveBeenCalledTimes(2); expect(onSelectionChange.mock.calls[0][0].has('Blah')).toBeTruthy(); expect(onSelectionChange.mock.calls[1][0].has('Bar')).toBeTruthy(); }); @@ -434,7 +434,7 @@ describe('ListBox', function () { checkmarks = tree.getAllByRole('img', {hidden: true}); expect(checkmarks.length).toBe(3); - expect(onSelectionChange).toBeCalledTimes(1); + expect(onSelectionChange).toHaveBeenCalledTimes(1); expect(onSelectionChange.mock.calls[0][0].has('Bleh')).toBeTruthy(); expect(onSelectionChange.mock.calls[0][0].has('Foo')).toBeTruthy(); expect(onSelectionChange.mock.calls[0][0].has('Bar')).toBeTruthy(); @@ -480,7 +480,7 @@ describe('ListBox', function () { checkmarks = tree.getAllByRole('img', {hidden: true}); expect(checkmarks.length).toBe(2); - expect(onSelectionChange).toBeCalledTimes(1); + expect(onSelectionChange).toHaveBeenCalledTimes(1); expect(onSelectionChange.mock.calls[0][0].has('Bleh')).toBeTruthy(); }); @@ -523,7 +523,7 @@ describe('ListBox', function () { checkmarks = tree.getAllByRole('img', {hidden: true}); expect(checkmarks.length).toBe(1); - expect(onSelectionChange).toBeCalledTimes(1); + expect(onSelectionChange).toHaveBeenCalledTimes(1); expect(onSelectionChange.mock.calls[0][0].has('Bar')).toBeTruthy(); }); @@ -550,7 +550,7 @@ describe('ListBox', function () { let checkmarks = tree.getAllByRole('img', {hidden: true}); expect(checkmarks.length).toBe(2); - expect(onSelectionChange).toBeCalledTimes(0); + expect(onSelectionChange).toHaveBeenCalledTimes(0); }); it('should prevent Esc from clearing selection if escapeKeyBehavior is "none"', async function () { @@ -571,12 +571,12 @@ describe('ListBox', function () { await user.click(secondItem); expect(secondItem).toHaveAttribute('aria-selected', 'true'); - expect(onSelectionChange).toBeCalledTimes(2); + expect(onSelectionChange).toHaveBeenCalledTimes(2); expect(onSelectionChange.mock.calls[0][0].has('Blah')).toBeTruthy(); expect(onSelectionChange.mock.calls[1][0].has('Bar')).toBeTruthy(); await user.keyboard('{Escape}'); - expect(onSelectionChange).toBeCalledTimes(2); + expect(onSelectionChange).toHaveBeenCalledTimes(2); expect(onSelectionChange.mock.calls[0][0].has('Blah')).toBeTruthy(); expect(onSelectionChange.mock.calls[1][0].has('Bar')).toBeTruthy(); }); @@ -607,7 +607,7 @@ describe('ListBox', function () { // Make sure nothing is still checked checkmarks = tree.queryAllByRole('img'); expect(checkmarks.length).toBe(0); - expect(onSelectionChange).toBeCalledTimes(0); + expect(onSelectionChange).toHaveBeenCalledTimes(0); }); }); @@ -686,7 +686,7 @@ describe('ListBox', function () { expect(checkmarks.length).toBe(0); // Verify onSelectionChange was not called - expect(onSelectionChange).toBeCalledTimes(0); + expect(onSelectionChange).toHaveBeenCalledTimes(0); // Continue the search fireEvent.keyDown(listbox, {key: 'B'}); @@ -709,7 +709,7 @@ describe('ListBox', function () { expect(checkmarks.length).toBe(1); // Verify onSelectionChange is called - expect(onSelectionChange).toBeCalledTimes(1); + expect(onSelectionChange).toHaveBeenCalledTimes(1); expect(onSelectionChange.mock.calls[0][0].has('Foo Bar')).toBeTruthy(); }); @@ -781,7 +781,7 @@ describe('ListBox', function () { }); it('warns user if no aria-label is provided', () => { - let spyWarn = jest.spyOn(console, 'warn').mockImplementation(() => {}); + using spyWarn = jest.spyOn(console, 'warn').mockImplementation(() => {}); renderComponent({'aria-labelledby': undefined}); expect(spyWarn).toHaveBeenCalledWith( 'If you do not provide a visible label, you must specify an aria-label or aria-labelledby attribute for accessibility' diff --git a/packages/@adobe/react-spectrum/test/menu/ActionMenu.test.js b/packages/@adobe/react-spectrum/test/menu/ActionMenu.test.js index 1d1fd316f8c..dcb076ff8af 100644 --- a/packages/@adobe/react-spectrum/test/menu/ActionMenu.test.js +++ b/packages/@adobe/react-spectrum/test/menu/ActionMenu.test.js @@ -133,7 +133,7 @@ describe('ActionMenu', function () { act(() => { jest.runAllTimers(); }); - expect(onOpenChange).toBeCalledTimes(0); + expect(onOpenChange).toHaveBeenCalledTimes(0); let menu = tree.getByRole('menu'); expect(menu).toBeTruthy(); @@ -146,7 +146,7 @@ describe('ActionMenu', function () { menu = tree.getByRole('menu'); expect(menu).toBeTruthy(); - expect(onOpenChange).toBeCalledTimes(1); + expect(onOpenChange).toHaveBeenCalledTimes(1); expect(triggerButton).toHaveAttribute('aria-expanded', 'true'); }); @@ -164,7 +164,7 @@ describe('ActionMenu', function () { act(() => { jest.runAllTimers(); }); - expect(onOpenChange).toBeCalledTimes(0); + expect(onOpenChange).toHaveBeenCalledTimes(0); let menu = tree.getByRole('menu'); expect(menu).toBeTruthy(); @@ -176,7 +176,7 @@ describe('ActionMenu', function () { }); expect(menu).not.toBeInTheDocument(); - expect(onOpenChange).toBeCalledTimes(1); + expect(onOpenChange).toHaveBeenCalledTimes(1); expect(triggerButton).toHaveAttribute('aria-expanded', 'false'); }); diff --git a/packages/@adobe/react-spectrum/test/menu/Menu.test.js b/packages/@adobe/react-spectrum/test/menu/Menu.test.js index efb2c896f5a..3cf74d2321f 100644 --- a/packages/@adobe/react-spectrum/test/menu/Menu.test.js +++ b/packages/@adobe/react-spectrum/test/menu/Menu.test.js @@ -198,7 +198,7 @@ describe('Menu', function () { let checkmarks = tree.getAllByRole('img', {hidden: true}); expect(checkmarks.length).toBe(1); - expect(onSelectionChange).toBeCalledTimes(1); + expect(onSelectionChange).toHaveBeenCalledTimes(1); expect(onSelectionChange.mock.calls[0][0].has('Bleh')).toBeTruthy(); }); @@ -232,7 +232,7 @@ describe('Menu', function () { let checkmarks = tree.getAllByRole('img', {hidden: true}); expect(checkmarks.length).toBe(1); - expect(onSelectionChange).toBeCalledTimes(1); + expect(onSelectionChange).toHaveBeenCalledTimes(1); expect(onSelectionChange.mock.calls[0][0].has('Bleh')).toBeTruthy(); }); @@ -257,7 +257,7 @@ describe('Menu', function () { expect(checkmarks.length).toBe(1); // Verify onSelectionChange is called - expect(onSelectionChange).toBeCalledTimes(1); + expect(onSelectionChange).toHaveBeenCalledTimes(1); expect(onSelectionChange.mock.calls[0][0].has('Bleh')).toBeTruthy(); }); @@ -282,7 +282,7 @@ describe('Menu', function () { expect(checkmarks.length).toBe(1); // Verify onSelectionChange is called - expect(onSelectionChange).toBeCalledTimes(1); + expect(onSelectionChange).toHaveBeenCalledTimes(1); expect(onSelectionChange.mock.calls[0][0].has('Bleh')).toBeTruthy(); }); @@ -306,7 +306,7 @@ describe('Menu', function () { expect(checkmarks.length).toBe(0); // Verify onSelectionChange is not called - expect(onSelectionChange).toBeCalledTimes(0); + expect(onSelectionChange).toHaveBeenCalledTimes(0); }); }); @@ -341,7 +341,7 @@ describe('Menu', function () { checkmarks = tree.getAllByRole('img', {hidden: true}); expect(checkmarks.length).toBe(2); - expect(onSelectionChange).toBeCalledTimes(2); + expect(onSelectionChange).toHaveBeenCalledTimes(2); expect(onSelectionChange.mock.calls[0][0].has('Blah')).toBeTruthy(); expect(onSelectionChange.mock.calls[1][0].has('Bar')).toBeTruthy(); }); @@ -386,7 +386,7 @@ describe('Menu', function () { checkmarks = tree.getAllByRole('img', {hidden: true}); expect(checkmarks.length).toBe(3); - expect(onSelectionChange).toBeCalledTimes(1); + expect(onSelectionChange).toHaveBeenCalledTimes(1); expect(onSelectionChange.mock.calls[0][0].has('Bleh')).toBeTruthy(); expect(onSelectionChange.mock.calls[0][0].has('Foo')).toBeTruthy(); expect(onSelectionChange.mock.calls[0][0].has('Bar')).toBeTruthy(); @@ -431,7 +431,7 @@ describe('Menu', function () { checkmarks = tree.getAllByRole('img', {hidden: true}); expect(checkmarks.length).toBe(2); - expect(onSelectionChange).toBeCalledTimes(1); + expect(onSelectionChange).toHaveBeenCalledTimes(1); expect(onSelectionChange.mock.calls[0][0].has('Bleh')).toBeTruthy(); }); @@ -472,7 +472,7 @@ describe('Menu', function () { checkmarks = tree.getAllByRole('img', {hidden: true}); expect(checkmarks.length).toBe(1); - expect(onSelectionChange).toBeCalledTimes(1); + expect(onSelectionChange).toHaveBeenCalledTimes(1); expect(onSelectionChange.mock.calls[0][0].has('Bar')).toBeTruthy(); }); @@ -496,7 +496,7 @@ describe('Menu', function () { let checkmarks = tree.getAllByRole('img', {hidden: true}); expect(checkmarks.length).toBe(2); - expect(onSelectionChange).toBeCalledTimes(0); + expect(onSelectionChange).toHaveBeenCalledTimes(0); }); }); @@ -530,7 +530,7 @@ describe('Menu', function () { // Make sure nothing is still checked checkmarks = tree.queryAllByRole('img', {hidden: true}); expect(checkmarks.length).toBe(0); - expect(onSelectionChange).toBeCalledTimes(0); + expect(onSelectionChange).toHaveBeenCalledTimes(0); }); }); @@ -809,7 +809,7 @@ describe('Menu', function () { }); it('warns user if no aria-label is provided', () => { - let spyWarn = jest.spyOn(console, 'warn').mockImplementation(() => {}); + using spyWarn = jest.spyOn(console, 'warn').mockImplementation(() => {}); renderComponent(Menu, {}, {'aria-labelledby': undefined}); expect(spyWarn).toHaveBeenCalledWith( 'An aria-label or aria-labelledby prop is required for accessibility.' diff --git a/packages/@adobe/react-spectrum/test/menu/MenuTrigger.test.js b/packages/@adobe/react-spectrum/test/menu/MenuTrigger.test.js index 081d3b97ee4..2b2c48ab56a 100644 --- a/packages/@adobe/react-spectrum/test/menu/MenuTrigger.test.js +++ b/packages/@adobe/react-spectrum/test/menu/MenuTrigger.test.js @@ -119,7 +119,7 @@ describe('MenuTrigger', function () { let triggerButton = tree.getByRole('button'); let menuTester = testUtilUser.createTester('Menu', {root: triggerButton}); - expect(onOpenChange).toBeCalledTimes(0); + expect(onOpenChange).toHaveBeenCalledTimes(0); await triggerEvent(triggerButton); act(() => { @@ -141,10 +141,10 @@ describe('MenuTrigger', function () { expect(triggerButton).toHaveAttribute('aria-controls', menu.id); if (Component === MenuTrigger) { - expect(onOpenChange).toBeCalledTimes(1); + expect(onOpenChange).toHaveBeenCalledTimes(1); } else { - expect(onOpen).toBeCalledTimes(1); - expect(onClose).toBeCalledTimes(0); + expect(onOpen).toHaveBeenCalledTimes(1); + expect(onClose).toHaveBeenCalledTimes(0); } await triggerEvent(triggerButton, menu); @@ -155,10 +155,10 @@ describe('MenuTrigger', function () { if (Component === MenuTrigger) { expect(triggerButton).toHaveAttribute('aria-expanded', 'false'); - expect(onOpenChange).toBeCalledTimes(2); + expect(onOpenChange).toHaveBeenCalledTimes(2); } else { expect(triggerButton).not.toHaveAttribute('aria-expanded'); - expect(onOpen).toBeCalledTimes(1); + expect(onOpen).toHaveBeenCalledTimes(1); } } @@ -171,7 +171,7 @@ describe('MenuTrigger', function () { act(() => { jest.runAllTimers(); }); - expect(onOpenChange).toBeCalledTimes(0); + expect(onOpenChange).toHaveBeenCalledTimes(0); let menu = tree.getByRole('menu'); expect(menu).toBeInTheDocument(); @@ -184,7 +184,7 @@ describe('MenuTrigger', function () { }); expect(menu).toBeInTheDocument(); - expect(onOpenChange).toBeCalledTimes(1); + expect(onOpenChange).toHaveBeenCalledTimes(1); }); // New functionality in v3 @@ -196,7 +196,7 @@ describe('MenuTrigger', function () { act(() => { jest.runAllTimers(); }); - expect(onOpenChange).toBeCalledTimes(0); + expect(onOpenChange).toHaveBeenCalledTimes(0); let menu = tree.getByRole('menu'); expect(menu).toBeInTheDocument(); @@ -208,7 +208,7 @@ describe('MenuTrigger', function () { }); expect(menu).not.toBeInTheDocument(); - expect(onOpenChange).toBeCalledTimes(1); + expect(onOpenChange).toHaveBeenCalledTimes(1); }); describe('menu popover closing behavior', function () { @@ -243,16 +243,16 @@ describe('MenuTrigger', function () { async function ({Component, props}) { tree = renderComponent(Component, props, {selectionMode: 'single', onSelectionChange}); let menuTester = testUtilUser.createTester('Menu', {root: tree.container}); - expect(onOpenChange).toBeCalledTimes(0); + expect(onOpenChange).toHaveBeenCalledTimes(0); await menuTester.open(); if (Component === MenuTrigger) { - expect(onOpenChange).toBeCalledTimes(1); - expect(onSelectionChange).toBeCalledTimes(0); + expect(onOpenChange).toHaveBeenCalledTimes(1); + expect(onSelectionChange).toHaveBeenCalledTimes(0); } else { - expect(onOpen).toBeCalledTimes(1); - expect(onClose).toBeCalledTimes(0); - expect(onSelect).toBeCalledTimes(0); + expect(onOpen).toHaveBeenCalledTimes(1); + expect(onClose).toHaveBeenCalledTimes(0); + expect(onSelect).toHaveBeenCalledTimes(0); } await menuTester.selectOption({ @@ -262,20 +262,20 @@ describe('MenuTrigger', function () { }); if (Component === MenuTrigger) { - expect(onSelectionChange).toBeCalledTimes(1); + expect(onSelectionChange).toHaveBeenCalledTimes(1); } else { - expect(onSelect).toBeCalledTimes(1); + expect(onSelect).toHaveBeenCalledTimes(1); } expect(menuTester.menu).toBeInTheDocument(); if (Component === MenuTrigger) { expect(menuTester.trigger).toHaveAttribute('aria-expanded', 'true'); - expect(onOpenChange).toBeCalledTimes(1); + expect(onOpenChange).toHaveBeenCalledTimes(1); } else { expect(menuTester.trigger).toHaveAttribute('aria-expanded'); - expect(onOpen).toBeCalledTimes(1); - expect(onClose).toBeCalledTimes(0); + expect(onOpen).toHaveBeenCalledTimes(1); + expect(onClose).toHaveBeenCalledTimes(0); } } ); @@ -288,11 +288,11 @@ describe('MenuTrigger', function () { async function ({Component, props}) { tree = renderComponent(Component, props, {selectionMode: 'single', onSelectionChange}); let menuTester = testUtilUser.createTester('Menu', {root: tree.container}); - expect(onOpenChange).toBeCalledTimes(0); + expect(onOpenChange).toHaveBeenCalledTimes(0); await menuTester.open(); - expect(onOpenChange).toBeCalledTimes(1); - expect(onSelectionChange).toBeCalledTimes(0); + expect(onOpenChange).toHaveBeenCalledTimes(1); + expect(onSelectionChange).toHaveBeenCalledTimes(0); menuTester.setInteractionType('keyboard'); await menuTester.selectOption({ option: 'Foo', @@ -302,7 +302,7 @@ describe('MenuTrigger', function () { expect(menuTester.menu).toBeInTheDocument(); expect(menuTester.trigger).toHaveAttribute('aria-expanded', 'true'); - expect(onOpenChange).toBeCalledTimes(1); + expect(onOpenChange).toHaveBeenCalledTimes(1); } ); @@ -321,30 +321,30 @@ describe('MenuTrigger', function () { root: tree.container, interactionType: 'keyboard' }); - expect(onOpenChange).toBeCalledTimes(0); + expect(onOpenChange).toHaveBeenCalledTimes(0); await menuTester.open(); - expect(onOpenChange).toBeCalledTimes(1); - expect(onSelectionChange).toBeCalledTimes(0); + expect(onOpenChange).toHaveBeenCalledTimes(1); + expect(onSelectionChange).toHaveBeenCalledTimes(0); await menuTester.selectOption({ option: 'Foo', menuSelectionMode: 'multiple', keyboardActivation: 'Space' }); - expect(onSelectionChange).toBeCalledTimes(1); + expect(onSelectionChange).toHaveBeenCalledTimes(1); expect(onSelectionChange.mock.calls[0][0].has('Foo')).toBeTruthy(); await menuTester.selectOption({ option: 'Bar', menuSelectionMode: 'multiple', keyboardActivation: 'Space' }); - expect(onSelectionChange).toBeCalledTimes(2); + expect(onSelectionChange).toHaveBeenCalledTimes(2); expect(onSelectionChange.mock.calls[1][0].has('Bar')).toBeTruthy(); await menuTester.close(); expect(menuTester.menu).not.toBeInTheDocument(); - expect(onOpenChange).toBeCalledTimes(2); + expect(onOpenChange).toHaveBeenCalledTimes(2); } ); @@ -467,7 +467,7 @@ describe('MenuTrigger', function () { let button = tree.getByRole('button'); await user.pointer({target: button, keys: '[TouchA]'}); - expect(getMenuOrThrow).toThrowError(ERROR_MENU_NOT_FOUND); + expect(getMenuOrThrow).toThrow(ERROR_MENU_NOT_FOUND); }); it(`should not open menu on short press (default threshold set to ${DEFAULT_LONG_PRESS_TIME}ms)`, async function () { @@ -476,7 +476,7 @@ describe('MenuTrigger', function () { let button = tree.getByRole('button'); await user.pointer({target: button, keys: '[TouchA]'}); - expect(getMenuOrThrow).toThrowError(ERROR_MENU_NOT_FOUND); + expect(getMenuOrThrow).toThrow(ERROR_MENU_NOT_FOUND); }); it('should not open the menu on Enter', async function () { @@ -485,7 +485,7 @@ describe('MenuTrigger', function () { let button = tree.getByRole('button'); await user.pointer({target: button, keys: '[TouchA]'}); - expect(getMenuOrThrow).toThrowError(ERROR_MENU_NOT_FOUND); + expect(getMenuOrThrow).toThrow(ERROR_MENU_NOT_FOUND); }); it('should not open the menu on Space', async function () { @@ -493,7 +493,7 @@ describe('MenuTrigger', function () { let tree = renderComponent(MenuTrigger, props, {}); let button = tree.getByRole('button'); await user.pointer({target: button, keys: '[TouchA]'}); - expect(getMenuOrThrow).toThrowError(ERROR_MENU_NOT_FOUND); + expect(getMenuOrThrow).toThrow(ERROR_MENU_NOT_FOUND); }); it('should open the menu on Alt+ArrowUp', async function () { diff --git a/packages/@adobe/react-spectrum/test/menu/SubMenuTrigger.test.tsx b/packages/@adobe/react-spectrum/test/menu/SubMenuTrigger.test.tsx index 75807a3ba30..03468f2c4b9 100644 --- a/packages/@adobe/react-spectrum/test/menu/SubMenuTrigger.test.tsx +++ b/packages/@adobe/react-spectrum/test/menu/SubMenuTrigger.test.tsx @@ -751,12 +751,12 @@ describe('Submenu', function () { let menuItems = within(menu).getAllByRole('menuitemcheckbox'); expect(document.activeElement).toBe(menuItems[0]); await user.keyboard('[Space]'); - expect(onSelectionChange).toBeCalledTimes(1); + expect(onSelectionChange).toHaveBeenCalledTimes(1); expect(new Set(onSelectionChange.mock.calls[0][0])).toEqual(new Set(['Lvl 1 Item 1'])); await user.keyboard('[ArrowDown]'); await user.keyboard('[ArrowDown]'); await user.keyboard('[Space]'); - expect(onSelectionChange).toBeCalledTimes(2); + expect(onSelectionChange).toHaveBeenCalledTimes(2); expect(new Set(onSelectionChange.mock.calls[1][0])).toEqual( new Set(['Lvl 1 Item 1', 'Lvl 1 Item 3']) ); @@ -770,17 +770,17 @@ describe('Submenu', function () { jest.runAllTimers(); }); - expect(onSelectionChange).toBeCalledTimes(2); + expect(onSelectionChange).toHaveBeenCalledTimes(2); let menus = tree.getAllByRole('menu', {hidden: true}); let submenu1Items = within(menus[1]).getAllByRole('menuitemradio'); expect(document.activeElement).toBe(submenu1Items[0]); await user.keyboard('[Space]'); - expect(onSelectionChange).toBeCalledTimes(2); - expect(submenuOnSelectionChange).toBeCalledTimes(1); + expect(onSelectionChange).toHaveBeenCalledTimes(2); + expect(submenuOnSelectionChange).toHaveBeenCalledTimes(1); expect(new Set(submenuOnSelectionChange.mock.calls[0][0])).toEqual(new Set(['Lvl 2 Item 1'])); await user.keyboard('[ArrowDown]'); await user.keyboard('[Space]'); - expect(submenuOnSelectionChange).toBeCalledTimes(2); + expect(submenuOnSelectionChange).toHaveBeenCalledTimes(2); expect(new Set(submenuOnSelectionChange.mock.calls[1][0])).toEqual(new Set(['Lvl 2 Item 2'])); }); diff --git a/packages/@adobe/react-spectrum/test/numberfield/NumberField.test.js b/packages/@adobe/react-spectrum/test/numberfield/NumberField.test.js index 36e045617c6..3cf64042ad8 100644 --- a/packages/@adobe/react-spectrum/test/numberfield/NumberField.test.js +++ b/packages/@adobe/react-spectrum/test/numberfield/NumberField.test.js @@ -155,7 +155,7 @@ describe('NumberField', function () { let platformMock = jest .spyOn(navigator, 'platform', 'get') .mockImplementation(() => platform); - let uaMock = jest.spyOn(navigator, 'userAgent', 'get').mockImplementation(() => UA); + using uaMock = jest.spyOn(navigator, 'userAgent', 'get').mockImplementation(() => UA); let {textField} = renderNumberField({onChange: onChangeSpy, ...props}); platformMock.mockRestore(); diff --git a/packages/@adobe/react-spectrum/test/overlays/Popover.test.js b/packages/@adobe/react-spectrum/test/overlays/Popover.test.js index 8e73bcc3840..a4de5de8716 100644 --- a/packages/@adobe/react-spectrum/test/overlays/Popover.test.js +++ b/packages/@adobe/react-spectrum/test/overlays/Popover.test.js @@ -239,6 +239,7 @@ describe('Popover', function () { + ); @@ -246,6 +247,7 @@ describe('Popover', function () { jest.runAllTimers(); }); let button = getAllByRole('button')[1]; + let outside = getByTestId('outside'); let popover = getByTestId('popover'); expect(document.activeElement).toBe(button); @@ -254,11 +256,38 @@ describe('Popover', function () { }); // wait for animation act(() => { - button.blur(); + outside.focus(); }); expect(onOpenChange).toHaveBeenCalledTimes(1); }); + it('does not close when focus is lost with no replacement, such as switching tabs', async function () { + let onOpenChange = jest.fn(); + let {getAllByRole, getByTestId} = render( + + + + + + ); + + act(() => { + jest.runAllTimers(); + }); + let button = getAllByRole('button')[1]; + let popover = getByTestId('popover'); + expect(document.activeElement).toBe(button); + await waitFor(() => { + expect(popover).toBeVisible(); + }); + + act(() => { + button.blur(); + }); + expect(onOpenChange).not.toHaveBeenCalled(); + expect(popover).toBeVisible(); + }); + it('should have hidden dismiss buttons for screen readers', function () { let onOpenChange = jest.fn(); let {getAllByRole} = render( diff --git a/packages/@adobe/react-spectrum/test/overlays/Tray.test.js b/packages/@adobe/react-spectrum/test/overlays/Tray.test.js index b98f0e0a516..408f7cc9bd7 100644 --- a/packages/@adobe/react-spectrum/test/overlays/Tray.test.js +++ b/packages/@adobe/react-spectrum/test/overlays/Tray.test.js @@ -100,11 +100,12 @@ describe('Tray', function () { it('hides the tray on blur when shouldCloseOnBlur is true', async function () { let onOpenChange = jest.fn(); - let {getByRole} = render( + let {getByRole, getByTestId} = render( contents + ); @@ -116,15 +117,44 @@ describe('Tray', function () { }); let dialog = await getByRole('dialog'); + let outside = getByTestId('outside'); expect(document.activeElement).toBe(dialog); expect(onOpenChange).toHaveBeenCalledTimes(0); act(() => { - dialog.blur(); + outside.focus(); }); expect(onOpenChange).toHaveBeenCalledTimes(1); }); + it('does not close when focus is lost with no replacement, such as switching tabs', async function () { + let onOpenChange = jest.fn(); + let {getByRole} = render( + + + contents + + + ); + + await waitFor(() => { + expect(getByRole('dialog')).toBeVisible(); + }); + act(() => { + jest.runAllTimers(); + }); + + let dialog = getByRole('dialog'); + expect(document.activeElement).toBe(dialog); + expect(onOpenChange).not.toHaveBeenCalled(); + + act(() => { + dialog.blur(); + }); + expect(onOpenChange).not.toHaveBeenCalled(); + expect(dialog).toBeVisible(); + }); + it('should have hidden dismiss buttons for screen readers', function () { let onOpenChange = jest.fn(); let {getAllByRole} = render( diff --git a/packages/@adobe/react-spectrum/test/picker/Picker.test.js b/packages/@adobe/react-spectrum/test/picker/Picker.test.js index c607b1ff994..925eac8dd83 100644 --- a/packages/@adobe/react-spectrum/test/picker/Picker.test.js +++ b/packages/@adobe/react-spectrum/test/picker/Picker.test.js @@ -113,7 +113,7 @@ describe('Picker', function () { let listbox = selectTester.listbox; expect(listbox).toBeVisible(); - expect(onOpenChange).toBeCalledTimes(1); + expect(onOpenChange).toHaveBeenCalledTimes(1); expect(onOpenChange).toHaveBeenCalledWith(true); expect(picker).toHaveAttribute('aria-expanded', 'true'); expect(picker).toHaveAttribute('aria-controls', listbox.id); @@ -154,7 +154,7 @@ describe('Picker', function () { let listbox = getByRole('listbox'); expect(listbox).toBeVisible(); - expect(onOpenChange).toBeCalledTimes(1); + expect(onOpenChange).toHaveBeenCalledTimes(1); expect(onOpenChange).toHaveBeenCalledWith(true); expect(picker).toHaveAttribute('aria-expanded', 'true'); expect(picker).toHaveAttribute('aria-controls', listbox.id); @@ -189,7 +189,7 @@ describe('Picker', function () { let listbox = getByRole('listbox'); expect(listbox).toBeVisible(); - expect(onOpenChange).toBeCalledTimes(1); + expect(onOpenChange).toHaveBeenCalledTimes(1); expect(onOpenChange).toHaveBeenCalledWith(true); expect(picker).toHaveAttribute('aria-expanded', 'true'); expect(picker).toHaveAttribute('aria-controls', listbox.id); @@ -224,7 +224,7 @@ describe('Picker', function () { let listbox = selectTester.listbox; expect(listbox).toBeVisible(); - expect(onOpenChange).toBeCalledTimes(1); + expect(onOpenChange).toHaveBeenCalledTimes(1); expect(onOpenChange).toHaveBeenCalledWith(true); expect(picker).toHaveAttribute('aria-expanded', 'true'); expect(picker).toHaveAttribute('aria-controls', listbox.id); @@ -262,7 +262,7 @@ describe('Picker', function () { let listbox = selectTester.listbox; expect(listbox).toBeVisible(); - expect(onOpenChange).toBeCalledTimes(1); + expect(onOpenChange).toHaveBeenCalledTimes(1); expect(onOpenChange).toHaveBeenCalledWith(true); expect(picker).toHaveAttribute('aria-expanded', 'true'); expect(picker).toHaveAttribute('aria-controls', listbox.id); @@ -297,7 +297,7 @@ describe('Picker', function () { let listbox = getByRole('listbox'); expect(listbox).toBeVisible(); - expect(onOpenChange).toBeCalledTimes(1); + expect(onOpenChange).toHaveBeenCalledTimes(1); expect(onOpenChange).toHaveBeenCalledWith(true); expect(picker).toHaveAttribute('aria-expanded', 'true'); expect(picker).toHaveAttribute('aria-controls', listbox.id); @@ -332,7 +332,7 @@ describe('Picker', function () { let listbox = getByRole('listbox'); expect(listbox).toBeVisible(); - expect(onOpenChange).toBeCalledTimes(1); + expect(onOpenChange).toHaveBeenCalledTimes(1); expect(onOpenChange).toHaveBeenCalledWith(true); expect(picker).toHaveAttribute('aria-expanded', 'true'); expect(picker).toHaveAttribute('aria-controls', listbox.id); @@ -380,7 +380,7 @@ describe('Picker', function () { let listbox = getByRole('listbox'); expect(listbox).toBeVisible(); - expect(onOpenChange).not.toBeCalled(); + expect(onOpenChange).not.toHaveBeenCalled(); let picker = getByLabelText('Select…'); expect(picker).toHaveAttribute('aria-expanded', 'true'); @@ -411,7 +411,7 @@ describe('Picker', function () { let listbox = getByRole('listbox'); expect(listbox).toBeVisible(); - expect(onOpenChange).not.toBeCalled(); + expect(onOpenChange).not.toHaveBeenCalled(); let picker = getByLabelText('Select…'); expect(picker).toHaveAttribute('aria-expanded', 'true'); @@ -473,7 +473,7 @@ describe('Picker', function () { let listbox = getByRole('listbox'); expect(listbox).toBeVisible(); - expect(onOpenChange).toBeCalledTimes(1); + expect(onOpenChange).toHaveBeenCalledTimes(1); expect(onOpenChange).toHaveBeenCalledWith(true); expect(picker).toHaveAttribute('aria-expanded', 'true'); expect(picker).toHaveAttribute('aria-controls', listbox.id); @@ -484,7 +484,7 @@ describe('Picker', function () { expect(listbox).not.toBeInTheDocument(); expect(picker).toHaveAttribute('aria-expanded', 'false'); expect(picker).not.toHaveAttribute('aria-controls'); - expect(onOpenChange).toBeCalledTimes(2); + expect(onOpenChange).toHaveBeenCalledTimes(2); expect(onOpenChange).toHaveBeenCalledWith(false); // run restore focus rAF @@ -512,7 +512,7 @@ describe('Picker', function () { let listbox = getByRole('listbox'); expect(listbox).toBeVisible(); - expect(onOpenChange).toBeCalledTimes(1); + expect(onOpenChange).toHaveBeenCalledTimes(1); expect(onOpenChange).toHaveBeenCalledWith(true); expect(picker).toHaveAttribute('aria-expanded', 'true'); expect(picker).toHaveAttribute('aria-controls', listbox.id); @@ -523,7 +523,7 @@ describe('Picker', function () { expect(listbox).not.toBeInTheDocument(); expect(picker).toHaveAttribute('aria-expanded', 'false'); expect(picker).not.toHaveAttribute('aria-controls'); - expect(onOpenChange).toBeCalledTimes(2); + expect(onOpenChange).toHaveBeenCalledTimes(2); expect(onOpenChange).toHaveBeenCalledWith(false); }); @@ -546,7 +546,7 @@ describe('Picker', function () { let listbox = selectTester.listbox; expect(listbox).toBeVisible(); - expect(onOpenChange).toBeCalledTimes(1); + expect(onOpenChange).toHaveBeenCalledTimes(1); expect(onOpenChange).toHaveBeenCalledWith(true); expect(picker).toHaveAttribute('aria-expanded', 'true'); expect(picker).toHaveAttribute('aria-controls', listbox.id); @@ -555,7 +555,7 @@ describe('Picker', function () { expect(picker).toHaveAttribute('aria-expanded', 'false'); expect(picker).not.toHaveAttribute('aria-controls'); - expect(onOpenChange).toBeCalledTimes(2); + expect(onOpenChange).toHaveBeenCalledTimes(2); expect(onOpenChange).toHaveBeenCalledWith(false); expect(document.activeElement).toBe(picker); @@ -563,31 +563,33 @@ describe('Picker', function () { it('closes on blur', async function () { let onOpenChange = jest.fn(); - let {getByRole, queryByRole} = render( + let {getByRole, getByTestId, queryByRole} = render( One Two Three + ); expect(queryByRole('listbox')).toBeNull(); - let picker = getByRole('button'); + let picker = getByRole('button', {name: /Test/}); await user.click(picker); act(() => jest.runAllTimers()); let listbox = getByRole('listbox'); expect(listbox).toBeVisible(); - expect(onOpenChange).toBeCalledTimes(1); + expect(onOpenChange).toHaveBeenCalledTimes(1); expect(onOpenChange).toHaveBeenCalledWith(true); expect(picker).toHaveAttribute('aria-expanded', 'true'); expect(picker).toHaveAttribute('aria-controls', listbox.id); + let outside = getByTestId('outside'); act(() => { - document.activeElement.blur(); + outside.focus(); }); act(() => jest.runAllTimers()); act(() => jest.runAllTimers()); @@ -595,12 +597,50 @@ describe('Picker', function () { expect(listbox).not.toBeInTheDocument(); expect(picker).toHaveAttribute('aria-expanded', 'false'); expect(picker).not.toHaveAttribute('aria-controls'); - expect(onOpenChange).toBeCalledTimes(2); + expect(onOpenChange).toHaveBeenCalledTimes(2); expect(onOpenChange).toHaveBeenCalledWith(false); + // FocusScope.restoreFocus pulls focus back to the trigger on unmount, regardless + // of where focus moved during the blur. expect(document.activeElement).toBe(picker); }); + // When the user switches tabs for example, then we should not close the picker. + // See useOverlay.ts comment + issues 4130 / 4922. + it('does not close when focus is lost with no replacement, such as switching tabs', async function () { + let onOpenChange = jest.fn(); + let {getByRole, queryByRole} = render( + + + One + Two + Three + + + ); + + expect(queryByRole('listbox')).toBeNull(); + let picker = getByRole('button', {name: /Test/}); + await user.click(picker); + act(() => jest.runAllTimers()); + let listbox = getByRole('listbox'); + expect(listbox).toBeVisible(); + expect(onOpenChange).toHaveBeenCalledTimes(1); + expect(onOpenChange).toHaveBeenCalledWith(true); + + // Simulate tab switch / app switch: native .blur() fires blur+focusout with + // relatedTarget=null, matching what real Chromium produces on a real tab switch. + let active = document.activeElement; + act(() => { + active.blur(); + }); + act(() => jest.runAllTimers()); + + expect(queryByRole('listbox')).not.toBeNull(); + expect(picker).toHaveAttribute('aria-expanded', 'true'); + expect(onOpenChange).toHaveBeenCalledTimes(1); + }); + it('does not shift focus when tabbing', async function () { let onOpenChange = jest.fn(); let {getByRole} = render( @@ -621,7 +661,7 @@ describe('Picker', function () { let listbox = getByRole('listbox'); expect(listbox).toBeVisible(); - expect(onOpenChange).toBeCalledTimes(1); + expect(onOpenChange).toHaveBeenCalledTimes(1); expect(onOpenChange).toHaveBeenCalledWith(true); expect(picker).toHaveAttribute('aria-expanded', 'true'); expect(picker).toHaveAttribute('aria-controls', listbox.id); @@ -653,7 +693,7 @@ describe('Picker', function () { let listbox = getByRole('listbox'); expect(listbox).toBeVisible(); - expect(onOpenChange).toBeCalledTimes(1); + expect(onOpenChange).toHaveBeenCalledTimes(1); expect(picker).toHaveAttribute('aria-expanded', 'true'); expect(picker).toHaveAttribute('aria-controls', listbox.id); @@ -671,7 +711,7 @@ describe('Picker', function () { expect(listbox).not.toBeInTheDocument(); expect(picker).toHaveAttribute('aria-expanded', 'false'); expect(picker).not.toHaveAttribute('aria-controls'); - expect(onOpenChange).toBeCalledTimes(2); + expect(onOpenChange).toHaveBeenCalledTimes(2); expect(onOpenChange).toHaveBeenCalledWith(false); // run restore focus rAF @@ -695,7 +735,7 @@ describe('Picker', function () { let listbox = getByRole('listbox'); expect(listbox).toBeVisible(); - expect(onOpenChange).not.toBeCalled(); + expect(onOpenChange).not.toHaveBeenCalled(); let picker = getByLabelText('Select…'); expect(picker).toHaveAttribute('aria-expanded', 'true'); @@ -706,7 +746,7 @@ describe('Picker', function () { act(() => jest.runAllTimers()); expect(listbox).toBeVisible(); - expect(onOpenChange).toBeCalledTimes(1); + expect(onOpenChange).toHaveBeenCalledTimes(1); expect(onOpenChange).toHaveBeenCalledWith(false); }); @@ -725,7 +765,7 @@ describe('Picker', function () { act(() => jest.runAllTimers()); expect(getByRole('listbox')).toBeVisible(); - expect(onOpenChange).not.toBeCalled(); + expect(onOpenChange).not.toHaveBeenCalled(); let picker = getByLabelText('Select…'); expect(picker).toHaveAttribute('aria-expanded', 'true'); @@ -741,7 +781,7 @@ describe('Picker', function () { expect(listbox).not.toBeInTheDocument(); expect(picker).toHaveAttribute('aria-expanded', 'false'); expect(picker).not.toHaveAttribute('aria-controls'); - expect(onOpenChange).toBeCalledTimes(1); + expect(onOpenChange).toHaveBeenCalledTimes(1); expect(onOpenChange).toHaveBeenCalledWith(false); }); }); @@ -1840,7 +1880,7 @@ describe('Picker', function () { expect(queryByRole('listbox')).toBeNull(); - expect(onOpenChange).toBeCalledTimes(0); + expect(onOpenChange).toHaveBeenCalledTimes(0); expect(picker).toHaveAttribute('aria-expanded', 'false'); expect(document.activeElement).not.toBe(picker); @@ -1867,7 +1907,7 @@ describe('Picker', function () { expect(queryByRole('listbox')).toBeNull(); - expect(onOpenChange).toBeCalledTimes(0); + expect(onOpenChange).toHaveBeenCalledTimes(0); expect(picker).toHaveAttribute('aria-expanded', 'false'); expect(document.activeElement).not.toBe(picker); diff --git a/packages/@adobe/react-spectrum/test/picker/TempUtilTest.test.js b/packages/@adobe/react-spectrum/test/picker/TempUtilTest.test.js index 7e465438f0c..2a31b384103 100644 --- a/packages/@adobe/react-spectrum/test/picker/TempUtilTest.test.js +++ b/packages/@adobe/react-spectrum/test/picker/TempUtilTest.test.js @@ -90,7 +90,7 @@ describe('Picker/Select ', function () { let listbox = await findByRole('listbox'); expect(listbox).toBeVisible(); - expect(onOpenChange).toBeCalledTimes(1); + expect(onOpenChange).toHaveBeenCalledTimes(1); expect(onOpenChange).toHaveBeenCalledWith(true); expect(picker).toHaveAttribute('aria-expanded', 'true'); expect(picker).toHaveAttribute('aria-controls', listbox.id); @@ -206,7 +206,7 @@ describe('Picker/Select ', function () { let listbox = getByRole('listbox'); expect(listbox).toBeVisible(); - expect(onOpenChange).toBeCalledTimes(1); + expect(onOpenChange).toHaveBeenCalledTimes(1); expect(onOpenChange).toHaveBeenCalledWith(true); expect(picker).toHaveAttribute('aria-expanded', 'true'); expect(picker).toHaveAttribute('aria-controls', listbox.id); diff --git a/packages/@adobe/react-spectrum/test/progress/ProgressBar.test.js b/packages/@adobe/react-spectrum/test/progress/ProgressBar.test.js index c1f9d87a8e6..7fa8e116755 100644 --- a/packages/@adobe/react-spectrum/test/progress/ProgressBar.test.js +++ b/packages/@adobe/react-spectrum/test/progress/ProgressBar.test.js @@ -83,7 +83,7 @@ describe('ProgressBar', function () { }); it('warns user if no aria-label is provided', () => { - let spyWarn = jest.spyOn(console, 'warn').mockImplementation(() => {}); + using spyWarn = jest.spyOn(console, 'warn').mockImplementation(() => {}); render(); expect(spyWarn).toHaveBeenCalledWith( 'If you do not provide a visible label via children, you must specify an aria-label or aria-labelledby attribute for accessibility' diff --git a/packages/@adobe/react-spectrum/test/progress/ProgressCircle.test.js b/packages/@adobe/react-spectrum/test/progress/ProgressCircle.test.js index d5a819d608d..5977e061da7 100644 --- a/packages/@adobe/react-spectrum/test/progress/ProgressCircle.test.js +++ b/packages/@adobe/react-spectrum/test/progress/ProgressCircle.test.js @@ -155,7 +155,7 @@ describe('ProgressCircle', function () { }); it('warns user if no aria-label is provided', () => { - let spyWarn = jest.spyOn(console, 'warn').mockImplementation(() => {}); + using spyWarn = jest.spyOn(console, 'warn').mockImplementation(() => {}); render(); expect(spyWarn).toHaveBeenCalledWith( 'ProgressCircle requires an aria-label or aria-labelledby attribute for accessibility' diff --git a/packages/@adobe/react-spectrum/test/provider/Provider.test.tsx b/packages/@adobe/react-spectrum/test/provider/Provider.test.tsx index 8de74e9d5b6..411cd98c640 100644 --- a/packages/@adobe/react-spectrum/test/provider/Provider.test.tsx +++ b/packages/@adobe/react-spectrum/test/provider/Provider.test.tsx @@ -14,8 +14,7 @@ import {act, fireEvent, pointerMap, render} from '@react-spectrum/test-utils-int import {ActionButton} from '../../src/button/ActionButton'; import {Button} from '../../src/button/Button'; import {Checkbox} from '../../src/checkbox/Checkbox'; -import MatchMediaMock from 'jest-matchmedia-mock'; - +import {cleanup, setMedia} from 'mock-match-media'; import {Provider} from '../../src/provider/Provider'; import React, {useRef} from 'react'; import {Switch} from '../../src/switch/Switch'; @@ -31,28 +30,26 @@ let theme = { medium: {'spectrum--medium': 'spectrum--medium'}, large: {'spectrum--large': 'spectrum--large'} }; -let mediaQueryLight = '(prefers-color-scheme: light)'; -let mediaQueryDark = '(prefers-color-scheme: dark)'; -let mediaQueryMinXSmall = '(min-width: 190px)'; -let mediaQueryMinSmall = '(min-width: 640px)'; -let mediaQueryMinMedium = '(min-width: 768px)'; -let mediaQueryMinLarge = '(min-width: 1024px)'; +// `as const` narrows the string to the literal union setMedia expects. +let mediaQueryLight = {prefersColorScheme: 'light'} as const; +let mediaQueryDark = {prefersColorScheme: 'dark'} as const; +// mock-match-media drives (min-width: *) queries via viewport `width`, not a `minWidth` media key. +let mediaQueryBelowS = {width: 300}; +let mediaQueryAtS = {width: 700}; +let mediaQueryAtM = {width: 900}; +let mediaQueryAtL = {width: 1100}; describe('Provider', () => { let user; - let matchMedia; beforeAll(() => { user = userEvent.setup({delay: null, pointerMap}); }); - beforeEach(() => { - matchMedia = new MatchMediaMock(); - }); afterEach(() => { - matchMedia.clear(); + cleanup(); }); it('Uses OS theme by default - dark', () => { - matchMedia.useMediaQuery(mediaQueryDark); + setMedia(mediaQueryDark); let {getByTestId} = render(
hello
@@ -63,7 +60,7 @@ describe('Provider', () => { }); it('Uses OS theme by default - light', () => { - matchMedia.useMediaQuery(mediaQueryLight); + setMedia(mediaQueryLight); let {getByTestId} = render(
hello
@@ -74,7 +71,7 @@ describe('Provider', () => { }); it('Can be set to dark regardless of OS setting', () => { - matchMedia.useMediaQuery(mediaQueryLight); + setMedia(mediaQueryLight); let {getByTestId} = render(
hello
@@ -107,7 +104,7 @@ describe('Provider', () => { }); it('Nested providers follow their ancestors by default, not the OS', () => { - matchMedia.useMediaQuery(mediaQueryLight); + setMedia(mediaQueryLight); let {getByTestId} = render( @@ -122,7 +119,7 @@ describe('Provider', () => { }); it('Nested providers can update to follow their ancestors', () => { - matchMedia.useMediaQuery(mediaQueryDark); + setMedia(mediaQueryDark); let NestedProviders = props => ( @@ -144,7 +141,7 @@ describe('Provider', () => { }); it('Nested providers can be explicitly set to something else', () => { - matchMedia.useMediaQuery(mediaQueryLight); + setMedia(mediaQueryLight); let {getByTestId} = render( @@ -175,7 +172,7 @@ describe('Provider', () => { }); it('will render an available color scheme automatically if the previous does not exist on the new theme', () => { - matchMedia.useMediaQuery(mediaQueryDark); + setMedia(mediaQueryDark); let {getByTestId} = render( { }); it('Provider will rerender if the OS preferred changes and it is on auto', () => { - matchMedia.useMediaQuery(mediaQueryLight); + setMedia(mediaQueryLight); let {getByTestId} = render( @@ -211,7 +208,7 @@ describe('Provider', () => { expect(provider2.classList.contains('spectrum--light')).toBeTruthy(); act(() => { - matchMedia.useMediaQuery(mediaQueryDark); + setMedia(mediaQueryDark); }); expect(provider1.classList.contains('spectrum--dark')).toBeTruthy(); @@ -222,17 +219,17 @@ describe('Provider', () => { let breakpoints = {S: 480, M: 640, L: 1024}; // jsdom/cssstyle doesn't support var() yet, so we need to use other values it.each` - name | mediaquery | props | expected - ${'default'} | ${mediaQueryMinXSmall} | ${{}} | ${'192px'} - ${'default'} | ${mediaQueryMinSmall} | ${{}} | ${'1000px'} - ${'default'} | ${mediaQueryMinMedium} | ${{}} | ${'2000px'} - ${'default'} | ${mediaQueryMinLarge} | ${{}} | ${'3000px'} - ${'custom breakpoints'} | ${mediaQueryMinXSmall} | ${{breakpoints}} | ${'192px'} - ${'custom breakpoints'} | ${'(min-width: 480px)'} | ${{breakpoints}} | ${'1000px'} - ${'custom breakpoints'} | ${'(min-width: 640px)'} | ${{breakpoints}} | ${'2000px'} - ${'custom breakpoints'} | ${'(min-width: 1024px)'} | ${{breakpoints}} | ${'3000px'} + name | mediaquery | props | expected + ${'default'} | ${mediaQueryBelowS} | ${{}} | ${'192px'} + ${'default'} | ${mediaQueryAtS} | ${{}} | ${'1000px'} + ${'default'} | ${mediaQueryAtM} | ${{}} | ${'2000px'} + ${'default'} | ${mediaQueryAtL} | ${{}} | ${'3000px'} + ${'custom breakpoints'} | ${mediaQueryBelowS} | ${{breakpoints}} | ${'192px'} + ${'custom breakpoints'} | ${{width: 500}} | ${{breakpoints}} | ${'1000px'} + ${'custom breakpoints'} | ${{width: 800}} | ${{breakpoints}} | ${'2000px'} + ${'custom breakpoints'} | ${{width: 1100}} | ${{breakpoints}} | ${'3000px'} `('$name $mediaquery', function ({mediaquery, props, expected}) { - matchMedia.useMediaQuery(mediaquery); + setMedia(mediaquery); let {getByTestId} = render( @@ -245,13 +242,13 @@ describe('Provider', () => { }); it.each` - mediaquery | expected - ${mediaQueryMinXSmall} | ${'192px'} - ${mediaQueryMinSmall} | ${'192px'} - ${mediaQueryMinMedium} | ${'192px'} - ${mediaQueryMinLarge} | ${'3000px'} + mediaquery | expected + ${mediaQueryBelowS} | ${'192px'} + ${mediaQueryAtS} | ${'192px'} + ${mediaQueryAtM} | ${'192px'} + ${mediaQueryAtL} | ${'3000px'} `('omitted sizes $mediaquery', function ({mediaquery, expected}) { - matchMedia.useMediaQuery(mediaquery); + setMedia(mediaquery); let {getByTestId} = render( @@ -277,7 +274,7 @@ describe('Provider', () => { return ; } - matchMedia.useMediaQuery('(min-width: 768px)'); + setMedia(mediaQueryAtM); let onBreakpointChange = jest.fn(); render( @@ -288,7 +285,7 @@ describe('Provider', () => { expect(onBreakpointChange).toHaveBeenCalledTimes(1); expect(onBreakpointChange).toHaveBeenNthCalledWith(1, 'M'); - matchMedia.useMediaQuery('(min-width: 1024px)'); + setMedia(mediaQueryAtL); fireEvent(window, new Event('resize')); expect(onBreakpointChange).toHaveBeenCalledTimes(2); diff --git a/packages/@adobe/react-spectrum/test/provider/mediaQueries.test.ts b/packages/@adobe/react-spectrum/test/provider/mediaQueries.test.ts index d9f2e877d58..bc3c150384e 100644 --- a/packages/@adobe/react-spectrum/test/provider/mediaQueries.test.ts +++ b/packages/@adobe/react-spectrum/test/provider/mediaQueries.test.ts @@ -10,8 +10,7 @@ * governing permissions and limitations under the License. */ -// needs to be imported first -import MatchMediaMock from 'jest-matchmedia-mock'; +import {cleanup, setMedia} from 'mock-match-media'; import {renderHook} from '@react-spectrum/test-utils-internal'; import {useColorScheme} from '../../src/provider/mediaQueries'; @@ -23,27 +22,24 @@ let theme = { large: {} }; -let mediaQueryLight = '(prefers-color-scheme: light)'; -let mediaQueryDark = '(prefers-color-scheme: dark)'; +// `as const` narrows the string to the literal union setMedia expects. +let mediaQueryLight = {prefersColorScheme: 'light'} as const; +let mediaQueryDark = {prefersColorScheme: 'dark'} as const; describe('mediaQueries', () => { - let matchMedia; - beforeEach(() => { - matchMedia = new MatchMediaMock(); - }); afterEach(() => { - matchMedia.clear(); + cleanup(); }); describe('useColorScheme', () => { it('uses OS as default - dark', () => { - matchMedia.useMediaQuery(mediaQueryDark); + setMedia(mediaQueryDark); let {result} = renderHook(() => useColorScheme(theme, 'light')); expect(result.current).toBe('dark'); }); it('uses OS as default - light', () => { - matchMedia.useMediaQuery(mediaQueryLight); + setMedia(mediaQueryLight); let {result} = renderHook(() => useColorScheme(theme, 'light')); expect(result.current).toBe('light'); }); diff --git a/packages/@adobe/react-spectrum/test/searchfield/SearchField.test.js b/packages/@adobe/react-spectrum/test/searchfield/SearchField.test.js index 508e45aa640..dc36510b16b 100644 --- a/packages/@adobe/react-spectrum/test/searchfield/SearchField.test.js +++ b/packages/@adobe/react-spectrum/test/searchfield/SearchField.test.js @@ -105,7 +105,7 @@ describe('Search', () => { let tree = renderComponent(Component, {defaultValue: inputText, onSubmit}); let input = tree.getByTestId(testId); fireEvent.keyDown(input, {key: 'Enter', code: 13, charCode: 13}); - expect(onSubmit).toBeCalledTimes(1); + expect(onSubmit).toHaveBeenCalledTimes(1); expect(onSubmit).toHaveBeenLastCalledWith(inputText); act(() => { @@ -114,7 +114,7 @@ describe('Search', () => { act(() => { fireEvent.keyDown(input, {key: 'Enter', code: 13, charCode: 13}); }); - expect(onSubmit).toBeCalledTimes(2); + expect(onSubmit).toHaveBeenCalledTimes(2); expect(onSubmit).toHaveBeenLastCalledWith(''); }); @@ -127,7 +127,7 @@ describe('Search', () => { let tree = renderComponent(Component, {defaultValue: inputText, onSubmit, ...props}); let input = tree.getByTestId(testId); fireEvent.keyDown(input, {key: 'Enter', code: 13, charCode: 13}); - expect(onSubmit).toBeCalledTimes(0); + expect(onSubmit).toHaveBeenCalledTimes(0); } ); @@ -141,14 +141,14 @@ describe('Search', () => { let input = tree.getByTestId(testId); expect(input.value).toBe(inputText); fireEvent.keyDown(input, {key: 'Escape', code: 27, charCode: 27}); - expect(onChange).toBeCalledTimes(1); + expect(onChange).toHaveBeenCalledTimes(1); expect(onChange).toHaveBeenLastCalledWith(''); expect(input.value).toBe(''); expect(document.activeElement).toBe(document.body); // onClear was added in v3 if (Component === SearchField) { - expect(onClear).toBeCalledTimes(1); + expect(onClear).toHaveBeenCalledTimes(1); expect(onChange).toHaveBeenLastCalledWith(expect.anything()); } } @@ -164,12 +164,12 @@ describe('Search', () => { let input = tree.getByTestId(testId); expect(input.value).toBe(inputText); fireEvent.keyDown(input, {key: 'Escape', code: 27, charCode: 27}); - expect(onChange).toBeCalledTimes(1); + expect(onChange).toHaveBeenCalledTimes(1); expect(onChange).toHaveBeenLastCalledWith(''); expect(input.value).toBe(inputText); expect(document.activeElement).toBe(document.body); - expect(onClear).toBeCalledTimes(1); + expect(onClear).toHaveBeenCalledTimes(1); expect(onChange).toHaveBeenLastCalledWith(expect.anything()); } ); @@ -184,10 +184,10 @@ describe('Search', () => { let input = tree.getByTestId(testId); expect(input.value).toBe(inputText); fireEvent.keyDown(input, {key: 'Escape', code: 27, charCode: 27}); - expect(onChange).toBeCalledTimes(0); + expect(onChange).toHaveBeenCalledTimes(0); expect(input.value).toBe(inputText); - expect(onClear).toBeCalledTimes(0); + expect(onClear).toHaveBeenCalledTimes(0); } ); @@ -203,14 +203,14 @@ describe('Search', () => { let clearButton = tree.getByLabelText('Clear search'); expect(input.value).toBe(inputText); await user.click(clearButton); - expect(onChange).toBeCalledTimes(1); + expect(onChange).toHaveBeenCalledTimes(1); expect(onChange).toHaveBeenLastCalledWith(''); expect(input.value).toBe(''); expect(document.activeElement).toBe(input); - expect(onClear).toBeCalledTimes(1); + expect(onClear).toHaveBeenCalledTimes(1); expect(onChange).toHaveBeenLastCalledWith(expect.anything()); } ); @@ -226,14 +226,14 @@ describe('Search', () => { let clearButton = tree.getByLabelText('Clear search'); expect(input.value).toBe(inputText); await user.click(clearButton); - expect(onChange).toBeCalledTimes(1); + expect(onChange).toHaveBeenCalledTimes(1); expect(onChange).toHaveBeenLastCalledWith(''); expect(input.value).toBe(inputText); expect(document.activeElement).toBe(input); - expect(onClear).toBeCalledTimes(1); + expect(onClear).toHaveBeenCalledTimes(1); expect(onChange).toHaveBeenLastCalledWith(expect.anything()); } ); @@ -249,10 +249,10 @@ describe('Search', () => { let clearButton = tree.getByLabelText('Clear search'); expect(input.value).toBe(inputText); await user.click(clearButton); - expect(onChange).toBeCalledTimes(0); + expect(onChange).toHaveBeenCalledTimes(0); expect(input.value).toBe(inputText); - expect(onClear).toBeCalledTimes(0); + expect(onClear).toHaveBeenCalledTimes(0); } ); diff --git a/packages/@adobe/react-spectrum/test/statuslight/StatusLight.test.js b/packages/@adobe/react-spectrum/test/statuslight/StatusLight.test.js index 65181cf3b0c..ed95be67a55 100644 --- a/packages/@adobe/react-spectrum/test/statuslight/StatusLight.test.js +++ b/packages/@adobe/react-spectrum/test/statuslight/StatusLight.test.js @@ -45,7 +45,7 @@ describe('StatusLight', function () { Name | Component | props ${'StatusLight'} | ${StatusLight} | ${{variant: 'celery'}} `('$Name warns user if no label is provided', function ({Component, props}) { - let spyWarn = jest.spyOn(console, 'warn').mockImplementation(() => {}); + using spyWarn = jest.spyOn(console, 'warn').mockImplementation(() => {}); render(); expect(spyWarn).toHaveBeenCalledWith( 'If no children are provided, an aria-label must be specified' @@ -56,7 +56,7 @@ describe('StatusLight', function () { Name | Component | props ${'StatusLight'} | ${StatusLight} | ${{variant: 'celery'}} `('$Name warns user if label is provided without a role', function ({Component, props}) { - let spyWarn = jest.spyOn(console, 'warn').mockImplementation(() => {}); + using spyWarn = jest.spyOn(console, 'warn').mockImplementation(() => {}); render(); expect(spyWarn).toHaveBeenCalledWith('A labelled StatusLight must have a role.'); }); diff --git a/packages/@adobe/react-spectrum/test/table/TableSizing.test.tsx b/packages/@adobe/react-spectrum/test/table/TableSizing.test.tsx index 75252aed301..4a6d36632c0 100644 --- a/packages/@adobe/react-spectrum/test/table/TableSizing.test.tsx +++ b/packages/@adobe/react-spectrum/test/table/TableSizing.test.tsx @@ -1528,7 +1528,8 @@ describe('TableViewSizing', function () { }); it('should prevent columns with child columns from being resizable', function () { - let warn = jest.spyOn(global.console, 'warn').mockImplementation(); + using warn = jest.spyOn(global.console, 'warn').mockImplementation() as jest.SpyInstance & + Disposable; let tree = render( diff --git a/packages/@adobe/react-spectrum/test/table/TableTests.js b/packages/@adobe/react-spectrum/test/table/TableTests.js index 82ba1d79183..54524a8971f 100644 --- a/packages/@adobe/react-spectrum/test/table/TableTests.js +++ b/packages/@adobe/react-spectrum/test/table/TableTests.js @@ -3313,7 +3313,7 @@ export let tableTests = () => { }); it('will add to the current selection if the command key is pressed', async function () { - let uaMock = jest.spyOn(navigator, 'platform', 'get').mockImplementation(() => 'Mac'); + using uaMock = jest.spyOn(navigator, 'platform', 'get').mockImplementation(() => 'Mac'); let onSelectionChange = jest.fn(); let tree = renderTable({onSelectionChange, selectionStyle: 'highlight'}); @@ -4893,7 +4893,7 @@ export let tableTests = () => { }); it("should add sort direction info to the column header's aria-describedby for Android", async function () { - let uaMock = jest.spyOn(navigator, 'userAgent', 'get').mockImplementation(() => 'Android'); + using uaMock = jest.spyOn(navigator, 'userAgent', 'get').mockImplementation(() => 'Android'); let tree = render(); let tableTester = testUtilUser.createTester('Table', {root: tree.getByRole('grid')}); tableTester.setInteractionType('keyboard'); diff --git a/packages/@adobe/react-spectrum/test/tabs/Tabs.test.js b/packages/@adobe/react-spectrum/test/tabs/Tabs.test.js index 5f09f928321..2d1bde51e21 100644 --- a/packages/@adobe/react-spectrum/test/tabs/Tabs.test.js +++ b/packages/@adobe/react-spectrum/test/tabs/Tabs.test.js @@ -279,7 +279,7 @@ describe('Tabs', function () { expect(secondItem).toHaveAttribute('aria-selected', 'false'); expect(thirdItem).toHaveAttribute('aria-selected', 'true'); - expect(onSelectionChange).toBeCalledTimes(1); + expect(onSelectionChange).toHaveBeenCalledTimes(1); }); it('supports using click to change tab', async function () { @@ -302,7 +302,7 @@ describe('Tabs', function () { expect(tabpanel).toHaveAttribute('aria-labelledby', secondItem.id); expect(tabpanel).toHaveAttribute('role', 'tabpanel'); expect(tabpanel).toHaveTextContent(defaultItems[1].children); - expect(onSelectionChange).toBeCalledTimes(1); + expect(onSelectionChange).toHaveBeenCalledTimes(1); }); it('does not generate conflicting ids between multiple tabs instances', function () { @@ -378,7 +378,7 @@ describe('Tabs', function () { expect(document.activeElement).toBe(tabs[0]); fireEvent.keyDown(tabs[1], {key: 'ArrowRight'}); fireEvent.keyUp(tabs[1], {key: 'ArrowRight'}); - expect(onSelectionChange).toBeCalledWith(defaultItems[2].name); + expect(onSelectionChange).toHaveBeenCalledWith(defaultItems[2].name); }); it('disabled tabs cannot be pressed', async function () { @@ -393,7 +393,7 @@ describe('Tabs', function () { let tabs = within(tablist).getAllByRole('tab'); expect(document.activeElement).toBe(tabs[0]); await user.click(tabs[1]); - expect(onSelectionChange).not.toBeCalled(); + expect(onSelectionChange).not.toHaveBeenCalled(); }); it('finds the first non-disabled tab if the currently selected one is removed', async function () { @@ -409,7 +409,7 @@ describe('Tabs', function () { expect(document.activeElement).toBe(tabs[1]); fireEvent.keyDown(tabs[1], {key: 'ArrowRight'}); fireEvent.keyUp(tabs[1], {key: 'ArrowRight'}); - expect(onSelectionChange).toBeCalledWith(defaultItems[2].name); + expect(onSelectionChange).toHaveBeenCalledWith(defaultItems[2].name); tree.rerender( @@ -429,7 +429,7 @@ describe('Tabs', function () { ); - expect(onSelectionChange).toBeCalledWith(defaultItems[1].name); + expect(onSelectionChange).toHaveBeenCalledWith(defaultItems[1].name); }); it('selects first tab if all tabs are disabled', async function () { @@ -444,7 +444,7 @@ describe('Tabs', function () { let tabs = within(tablist).getAllByRole('tab'); let tabpanel = tree.getByRole('tabpanel'); expect(tabs[0]).toHaveAttribute('aria-selected', 'true'); - expect(onSelectionChange).toBeCalledWith(defaultItems[0].name); + expect(onSelectionChange).toHaveBeenCalledWith(defaultItems[0].name); expect(document.activeElement).toBe(tabpanel); }); @@ -505,7 +505,7 @@ describe('Tabs', function () { await user.click(option); act(() => jest.runAllTimers()); - expect(onSelectionChange).toBeCalledTimes(1); + expect(onSelectionChange).toHaveBeenCalledTimes(1); expect(onSelectionChange).toHaveBeenCalledWith('Tab 3'); tabpanel = getByRole('tabpanel'); @@ -904,7 +904,7 @@ describe('Tabs', function () { expect(firstItem).toHaveAttribute('aria-selected', 'true'); await user.click(firstItem); - expect(onSelectionChange).toBeCalledTimes(1); + expect(onSelectionChange).toHaveBeenCalledTimes(1); expect(onSelectionChange).toHaveBeenCalledWith(defaultItems[0].name); }); diff --git a/packages/@adobe/react-spectrum/test/textfield/TextField.test.js b/packages/@adobe/react-spectrum/test/textfield/TextField.test.js index 608a9a71f78..a63420f4122 100644 --- a/packages/@adobe/react-spectrum/test/textfield/TextField.test.js +++ b/packages/@adobe/react-spectrum/test/textfield/TextField.test.js @@ -98,7 +98,7 @@ describe('Shared TextField behavior', () => { ${'v3 TextArea'} | ${TextArea} ${'v3 SearchField'} | ${SearchField} `('$Name renders with placeholder text and shows warning', ({Name, Component}) => { - let spyWarn = jest.spyOn(console, 'warn').mockImplementation(() => {}); + using spyWarn = jest.spyOn(console, 'warn').mockImplementation(() => {}); let tree = renderComponent(Component, { placeholder: inputText, 'aria-label': 'mandatory label' diff --git a/packages/@adobe/react-spectrum/test/well/Well.test.js b/packages/@adobe/react-spectrum/test/well/Well.test.js index 496d4035061..84ef73308fc 100644 --- a/packages/@adobe/react-spectrum/test/well/Well.test.js +++ b/packages/@adobe/react-spectrum/test/well/Well.test.js @@ -80,7 +80,7 @@ describe('Well', () => { }); it('v3 warns user if label is provided without a role', function () { - let spyWarn = jest.spyOn(console, 'warn').mockImplementation(() => {}); + using spyWarn = jest.spyOn(console, 'warn').mockImplementation(() => {}); render(Well); expect(spyWarn).toHaveBeenCalledWith('A labelled Well must have a role.'); }); diff --git a/packages/@react-spectrum/s2/test/Combobox.test.tsx b/packages/@react-spectrum/s2/test/Combobox.test.tsx index c3244e2f749..125876c6d61 100644 --- a/packages/@react-spectrum/s2/test/Combobox.test.tsx +++ b/packages/@react-spectrum/s2/test/Combobox.test.tsx @@ -202,7 +202,8 @@ describe('Combobox', () => { it('should support contextual help', async () => { // Issue with how we don't render the contextual help button in the fake DOM since PressResponder isn't using createHideableComponent - let warn = jest.spyOn(global.console, 'warn').mockImplementation(); + using warn = jest.spyOn(global.console, 'warn').mockImplementation() as jest.SpyInstance & + Disposable; let user = userEvent.setup({delay: null, pointerMap}); let tree = render( { }); it('should be cancellable through Escape key', async () => { + // The Escape -> onCancel handler is wired in the mobile CustomDialog path. + // Force the mobile media so we exercise that path (jest-matchmedia-mock used + // to default every query to false, which made isMobile true implicitly). + setMedia({hover: 'none', pointer: 'coarse'}); let onCancel = jest.fn(); let {getByRole} = render(); @@ -871,6 +876,10 @@ describe('TableView', () => { }); it('should be cancellable through Escape key', async () => { + // The Escape -> onCancel handler is wired in the mobile CustomDialog path. + // Force the mobile media so we exercise that path (jest-matchmedia-mock used + // to default every query to false, which made isMobile true implicitly). + setMedia({hover: 'none', pointer: 'coarse'}); let onCancel = jest.fn(); let {getByRole} = render(); diff --git a/packages/@react-spectrum/s2/test/Picker.test.tsx b/packages/@react-spectrum/s2/test/Picker.test.tsx index 4eeea7d015c..9838c45b4e7 100644 --- a/packages/@react-spectrum/s2/test/Picker.test.tsx +++ b/packages/@react-spectrum/s2/test/Picker.test.tsx @@ -181,7 +181,8 @@ describe('Picker', () => { }); it('should warn if the custom render value output has a interactive child', async () => { - let spy = jest.spyOn(console, 'warn').mockImplementation(() => {}); + using spy = jest.spyOn(console, 'warn').mockImplementation(() => {}) as jest.SpyInstance & + Disposable; let items = [ {id: 'chocolate', name: 'Chocolate'}, {id: 'strawberry', name: 'Strawberry'}, @@ -221,7 +222,8 @@ describe('Picker', () => { it('should support contextual help', async () => { // Issue with how we don't render the contextual help button in the fake DOM since PressResponder isn't using createHideableComponent - let warn = jest.spyOn(global.console, 'warn').mockImplementation(); + using warn = jest.spyOn(global.console, 'warn').mockImplementation() as jest.SpyInstance & + Disposable; let user = userEvent.setup({delay: null, pointerMap}); let tree = render( import('@react-spectrum/s2'))"`; diff --git a/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/inlinealert.test.ts.snap b/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/inlinealert.test.ts.snap index 66c49d02012..250046c8944 100644 --- a/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/inlinealert.test.ts.snap +++ b/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/inlinealert.test.ts.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Change variant info to informative 1`] = ` "import { InlineAlert, Heading, Content } from "@react-spectrum/s2"; diff --git a/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/link.test.ts.snap b/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/link.test.ts.snap index bd7775329c2..3367748f6b2 100644 --- a/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/link.test.ts.snap +++ b/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/link.test.ts.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Change variant=overBackground to staticColor=white 1`] = ` "import { Link } from "@react-spectrum/s2"; diff --git a/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/listbox.test.ts.snap b/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/listbox.test.ts.snap index 63b17660164..894d259c1f0 100644 --- a/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/listbox.test.ts.snap +++ b/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/listbox.test.ts.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`No changes 1`] = ` "import {ListBox, Item} from '@adobe/react-spectrum'; diff --git a/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/listview.test.ts.snap b/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/listview.test.ts.snap index e69c1c3cfad..f2e5379cce9 100644 --- a/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/listview.test.ts.snap +++ b/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/listview.test.ts.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Leave a comment for density 1`] = ` "import { ListViewItem, ListView } from "@react-spectrum/s2"; diff --git a/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/menu.test.ts.snap b/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/menu.test.ts.snap index 8c6b13b359d..4b885566c46 100644 --- a/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/menu.test.ts.snap +++ b/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/menu.test.ts.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Dynamic - Renames Item to MenuItem with Submenu, Section to MenuSection 1`] = ` "import { MenuItem, MenuSection, Menu, MenuTrigger, SubmenuTrigger, Button } from "@react-spectrum/s2"; diff --git a/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/meter.test.ts.snap b/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/meter.test.ts.snap index aa514a3270f..6a9f437a4ed 100644 --- a/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/meter.test.ts.snap +++ b/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/meter.test.ts.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Renames variants 1`] = ` "import { Meter } from "@react-spectrum/s2"; diff --git a/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/multi-collection.test.ts.snap b/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/multi-collection.test.ts.snap index 5552b2c5eaf..3ed9f14ef60 100644 --- a/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/multi-collection.test.ts.snap +++ b/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/multi-collection.test.ts.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Does not affect unimplemented collections 1`] = ` "import {Item, ActionBarContainer, ActionBar, ListBox} from '@adobe/react-spectrum'; diff --git a/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/numberfield.test.ts.snap b/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/numberfield.test.ts.snap index 490535760c1..5b811053554 100644 --- a/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/numberfield.test.ts.snap +++ b/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/numberfield.test.ts.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Comments out hideStepper 1`] = ` "import { NumberField } from "@react-spectrum/s2"; diff --git a/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/picker.test.ts.snap b/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/picker.test.ts.snap index 6a1d6ca6c4d..838934ed0b1 100644 --- a/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/picker.test.ts.snap +++ b/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/picker.test.ts.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Dynamic - Renames Item to PickerItem 1`] = ` "import { PickerItem, Picker } from "@react-spectrum/s2"; diff --git a/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/progressbar.test.ts.snap b/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/progressbar.test.ts.snap index 3a25c98d68a..2b960714f4d 100644 --- a/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/progressbar.test.ts.snap +++ b/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/progressbar.test.ts.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Comments out labelPosition 1`] = ` "import { ProgressBar } from "@react-spectrum/s2"; diff --git a/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/progresscircle.test.ts.snap b/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/progresscircle.test.ts.snap index da0bfabe7e6..8e739b49a79 100644 --- a/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/progresscircle.test.ts.snap +++ b/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/progresscircle.test.ts.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Renames variants 1`] = ` "import { ProgressCircle } from "@react-spectrum/s2"; diff --git a/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/provider.test.ts.snap b/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/provider.test.ts.snap index d31f48d6004..13630b98f30 100644 --- a/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/provider.test.ts.snap +++ b/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/provider.test.ts.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Does nothing 1`] = ` "import {Provider, defaultTheme} from '@adobe/react-spectrum'; diff --git a/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/radio.test.ts.snap b/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/radio.test.ts.snap index 7f8726f7175..e2fe8c3b943 100644 --- a/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/radio.test.ts.snap +++ b/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/radio.test.ts.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Does nothing 1`] = ` "import { Radio } from "@react-spectrum/s2"; diff --git a/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/radiogroup.test.ts.snap b/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/radiogroup.test.ts.snap index 061620500c1..5de2583f583 100644 --- a/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/radiogroup.test.ts.snap +++ b/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/radiogroup.test.ts.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Removes showErrorIcon 1`] = ` "import { Radio, RadioGroup } from "@react-spectrum/s2"; diff --git a/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/rangeslider.test.ts.snap b/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/rangeslider.test.ts.snap index 7fa0bef9af9..f3da055fb73 100644 --- a/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/rangeslider.test.ts.snap +++ b/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/rangeslider.test.ts.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Comments out getValueLabel 1`] = ` "import { RangeSlider } from "@react-spectrum/s2"; diff --git a/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/searchfield.test.ts.snap b/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/searchfield.test.ts.snap index 72c6c88a278..eee07412982 100644 --- a/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/searchfield.test.ts.snap +++ b/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/searchfield.test.ts.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Removes isQuiet 1`] = ` "import { SearchField } from "@react-spectrum/s2"; diff --git a/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/slider.test.ts.snap b/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/slider.test.ts.snap index 2ad68b05413..68c47ffa844 100644 --- a/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/slider.test.ts.snap +++ b/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/slider.test.ts.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Comments out getValueLabel 1`] = ` "import { Slider } from "@react-spectrum/s2"; diff --git a/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/statuslight.test.ts.snap b/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/statuslight.test.ts.snap index d85a644d161..a088af409f1 100644 --- a/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/statuslight.test.ts.snap +++ b/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/statuslight.test.ts.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Change variant from info to informative 1`] = ` "import { StatusLight } from "@react-spectrum/s2"; diff --git a/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/styleProps.test.ts.snap b/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/styleProps.test.ts.snap index c22a458ca51..99bccd3a4d6 100644 --- a/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/styleProps.test.ts.snap +++ b/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/styleProps.test.ts.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Adds a comment to UNSAFE_className 1`] = ` "import { Button } from "@react-spectrum/s2"; diff --git a/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/subset.test.ts.snap b/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/subset.test.ts.snap index 890842abf47..801f05b9ab8 100644 --- a/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/subset.test.ts.snap +++ b/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/subset.test.ts.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Should not update components that are not provided to --components option 1`] = ` "import {Button, TextArea} from '@adobe/react-spectrum'; diff --git a/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/switch.test.ts.snap b/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/switch.test.ts.snap index ffc761fbbfc..9f925664a81 100644 --- a/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/switch.test.ts.snap +++ b/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/switch.test.ts.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Renames variants 1`] = ` "// import {Switch} from '@adobe/react-spectrum'; diff --git a/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/table.test.ts.snap b/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/table.test.ts.snap index fb62bf1d185..0e6b50f6417 100644 --- a/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/table.test.ts.snap +++ b/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/table.test.ts.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Dynamic TableView 1`] = ` "import { Cell, Column, Row, TableBody, TableHeader, TableView } from "@react-spectrum/s2"; diff --git a/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/tabs.test.ts.snap b/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/tabs.test.ts.snap index 0725e2952c3..fe481f99f73 100644 --- a/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/tabs.test.ts.snap +++ b/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/tabs.test.ts.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Converts dynamic TabList Item to Tab 1`] = ` "import { Tab, Collection, TabPanel, Tabs, TabList } from "@react-spectrum/s2"; diff --git a/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/taggroup.test.ts.snap b/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/taggroup.test.ts.snap index b7466aebe0a..6c8f1e47345 100644 --- a/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/taggroup.test.ts.snap +++ b/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/taggroup.test.ts.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Dynamic - Renames Item to Tag 1`] = ` "import { Tag, TagGroup } from "@react-spectrum/s2"; diff --git a/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/textarea.test.ts.snap b/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/textarea.test.ts.snap index c06a6cb3e13..de8496bd828 100644 --- a/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/textarea.test.ts.snap +++ b/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/textarea.test.ts.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Removes isQuiet 1`] = ` "import { TextArea } from "@react-spectrum/s2"; diff --git a/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/textfield.test.ts.snap b/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/textfield.test.ts.snap index 3d581560410..9869cd4d282 100644 --- a/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/textfield.test.ts.snap +++ b/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/textfield.test.ts.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Removes isQuiet 1`] = ` "import { TextField } from "@react-spectrum/s2"; diff --git a/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/timefield.test.ts.snap b/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/timefield.test.ts.snap index 66d69951a4b..d46e2ef7304 100644 --- a/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/timefield.test.ts.snap +++ b/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/timefield.test.ts.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Removes isQuiet 1`] = ` "import { TimeField } from "@react-spectrum/s2"; diff --git a/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/togglebutton.test.ts.snap b/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/togglebutton.test.ts.snap index bd0090d88f3..9ab6767ff41 100644 --- a/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/togglebutton.test.ts.snap +++ b/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/togglebutton.test.ts.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Renames variants 1`] = ` "// import {ToggleButton} from '@adobe/react-spectrum'; diff --git a/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/toolbar.test.ts.snap b/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/toolbar.test.ts.snap index 304b916b24d..c39a907f936 100644 --- a/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/toolbar.test.ts.snap +++ b/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/toolbar.test.ts.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Renames variants 1`] = ` "// import {Toolbar} from '@adobe/react-spectrum'; diff --git a/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/tooltip.test.ts.snap b/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/tooltip.test.ts.snap index 83567a2426e..0d360daa4ee 100644 --- a/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/tooltip.test.ts.snap +++ b/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/tooltip.test.ts.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Alerts users to isOpen change in wrapped tooltip 1`] = ` "import { Tooltip } from "@react-spectrum/s2"; diff --git a/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/well.test.ts.snap b/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/well.test.ts.snap index 74450eaa09a..b4142eedf3b 100644 --- a/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/well.test.ts.snap +++ b/packages/dev/codemods/src/s1-to-s2/__tests__/__snapshots__/well.test.ts.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Updates Well to be div with style macro 1`] = ` "import { style } from "@react-spectrum/s2/style" with { type: "macro" }; diff --git a/packages/dev/parcel-transformer-docs/__tests__/__snapshots__/DocsTransformer.parceltest.tsx.snap b/packages/dev/parcel-transformer-docs/__tests__/__snapshots__/DocsTransformer.parceltest.tsx.snap index 842e80f8165..d690ac0d41e 100644 --- a/packages/dev/parcel-transformer-docs/__tests__/__snapshots__/DocsTransformer.parceltest.tsx.snap +++ b/packages/dev/parcel-transformer-docs/__tests__/__snapshots__/DocsTransformer.parceltest.tsx.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`DocsTransformer - API builtins writes export entry for referenced function 1`] = ` { diff --git a/packages/dev/test-utils/package.json b/packages/dev/test-utils/package.json index ec94117be44..950a665de98 100644 --- a/packages/dev/test-utils/package.json +++ b/packages/dev/test-utils/package.json @@ -28,10 +28,10 @@ "@react-spectrum/theme-default": "^3.5.13", "@swc/helpers": "^0.5.0", "@testing-library/dom": "^10.1.0", - "@testing-library/jest-dom": "^5.16.4", - "@testing-library/react": "^16.0.0", + "@testing-library/jest-dom": "^6.0.0", + "@testing-library/react": "^16.3.0", "@testing-library/user-event": "^14.0.0", - "jest": "^29.5.0", + "jest": "^30.0.0", "react-aria": "^3.47.0", "resolve": "^2.0.0-next.6" }, diff --git a/packages/dev/test-utils/src/mockImplementation.ts b/packages/dev/test-utils/src/mockImplementation.ts index 48b9b6eac0b..1a8907aed11 100644 --- a/packages/dev/test-utils/src/mockImplementation.ts +++ b/packages/dev/test-utils/src/mockImplementation.ts @@ -26,6 +26,8 @@ export function mockImplementation( } // multiple override definition of spyOn doesn't work with our type + // we'll want to figure out how to make use of `using` here, or all + // the cleanup that jest needs to do should be returned let spy = jest.spyOn(...(spyTarget as [any, string, 'get'])); mockCalls.forEach(mock => { spy.mockImplementationOnce(mock); diff --git a/packages/react-aria-components/test/Button.test.js b/packages/react-aria-components/test/Button.test.js index 92067e137c2..271596d5542 100644 --- a/packages/react-aria-components/test/Button.test.js +++ b/packages/react-aria-components/test/Button.test.js @@ -69,7 +69,7 @@ describe('Button', () => { }); it('should warn when rendering the wrong element type', () => { - let warn = jest.spyOn(console, 'warn').mockImplementation(() => {}); + using warn = jest.spyOn(console, 'warn').mockImplementation(() => {}); render(); expect(warn).toHaveBeenCalledWith( 'Unexpected DOM element returned by custom `render` function. Expected ); expect(warn).toHaveBeenCalledWith( 'Ref was not connected to DOM element returned by custom `render` function. Did you forget to pass through or merge the `ref`?' diff --git a/packages/react-aria-components/test/GridList.test.js b/packages/react-aria-components/test/GridList.test.js index 27b381c1eef..65f6c6f78fb 100644 --- a/packages/react-aria-components/test/GridList.test.js +++ b/packages/react-aria-components/test/GridList.test.js @@ -1491,10 +1491,10 @@ describe('GridList', () => { let items = getAllByRole('row'); await user.pointer({target: items[0], keys: '[MouseLeft>]'}); - expect(onSelectionChange).toBeCalledTimes(1); + expect(onSelectionChange).toHaveBeenCalledTimes(1); await user.pointer({target: items[0], keys: '[/MouseLeft]'}); - expect(onSelectionChange).toBeCalledTimes(1); + expect(onSelectionChange).toHaveBeenCalledTimes(1); }); it('should select an item on pressing down when shouldSelectOnPressUp is false', async () => { @@ -1507,10 +1507,10 @@ describe('GridList', () => { let items = getAllByRole('row'); await user.pointer({target: items[0], keys: '[MouseLeft>]'}); - expect(onSelectionChange).toBeCalledTimes(1); + expect(onSelectionChange).toHaveBeenCalledTimes(1); await user.pointer({target: items[0], keys: '[/MouseLeft]'}); - expect(onSelectionChange).toBeCalledTimes(1); + expect(onSelectionChange).toHaveBeenCalledTimes(1); }); it('should select an item on pressing up when shouldSelectOnPressUp is true', async () => { @@ -1523,10 +1523,10 @@ describe('GridList', () => { let items = getAllByRole('row'); await user.pointer({target: items[0], keys: '[MouseLeft>]'}); - expect(onSelectionChange).toBeCalledTimes(0); + expect(onSelectionChange).toHaveBeenCalledTimes(0); await user.pointer({target: items[0], keys: '[/MouseLeft]'}); - expect(onSelectionChange).toBeCalledTimes(1); + expect(onSelectionChange).toHaveBeenCalledTimes(1); }); }); diff --git a/packages/react-aria-components/test/HiddenDateInput.test.js b/packages/react-aria-components/test/HiddenDateInput.test.js index c6ed19fac9c..74d15cac784 100644 --- a/packages/react-aria-components/test/HiddenDateInput.test.js +++ b/packages/react-aria-components/test/HiddenDateInput.test.js @@ -49,7 +49,7 @@ describe('', () => { let input = document.querySelector('input[type=date]'); await user.type(input, '2000-05-30'); let dateValue = parseDate('2000-05-30'); - expect(onChange).toBeCalledWith(dateValue); + expect(onChange).toHaveBeenCalledWith(dateValue); }); it('should always add a data attribute data-a11y-ignore="aria-hidden-focus"', () => { diff --git a/packages/react-aria-components/test/ListBox.test.js b/packages/react-aria-components/test/ListBox.test.js index 979f6b0a75d..dacdb22e103 100644 --- a/packages/react-aria-components/test/ListBox.test.js +++ b/packages/react-aria-components/test/ListBox.test.js @@ -1874,10 +1874,10 @@ describe('ListBox', () => { let items = getAllByRole('option'); await user.pointer({target: items[0], keys: '[MouseLeft>]'}); - expect(onSelectionChange).toBeCalledTimes(1); + expect(onSelectionChange).toHaveBeenCalledTimes(1); await user.pointer({target: items[0], keys: '[/MouseLeft]'}); - expect(onSelectionChange).toBeCalledTimes(1); + expect(onSelectionChange).toHaveBeenCalledTimes(1); }); it('should select an item on pressing down when shouldSelectOnPressUp is false', async () => { @@ -1890,10 +1890,10 @@ describe('ListBox', () => { let items = getAllByRole('option'); await user.pointer({target: items[0], keys: '[MouseLeft>]'}); - expect(onSelectionChange).toBeCalledTimes(1); + expect(onSelectionChange).toHaveBeenCalledTimes(1); await user.pointer({target: items[0], keys: '[/MouseLeft]'}); - expect(onSelectionChange).toBeCalledTimes(1); + expect(onSelectionChange).toHaveBeenCalledTimes(1); }); it('should select an item on pressing up when shouldSelectOnPressUp is true', async () => { @@ -1906,10 +1906,10 @@ describe('ListBox', () => { let items = getAllByRole('option'); await user.pointer({target: items[0], keys: '[MouseLeft>]'}); - expect(onSelectionChange).toBeCalledTimes(0); + expect(onSelectionChange).toHaveBeenCalledTimes(0); await user.pointer({target: items[0], keys: '[/MouseLeft]'}); - expect(onSelectionChange).toBeCalledTimes(1); + expect(onSelectionChange).toHaveBeenCalledTimes(1); }); }); diff --git a/packages/react-aria-components/test/Table.test.js b/packages/react-aria-components/test/Table.test.js index 1ab33d14ad9..b092299f760 100644 --- a/packages/react-aria-components/test/Table.test.js +++ b/packages/react-aria-components/test/Table.test.js @@ -3098,10 +3098,10 @@ describe('Table', () => { let items = getAllByRole('row'); await user.pointer({target: items[1], keys: '[MouseLeft>]'}); - expect(onSelectionChange).toBeCalledTimes(1); + expect(onSelectionChange).toHaveBeenCalledTimes(1); await user.pointer({target: items[1], keys: '[/MouseLeft]'}); - expect(onSelectionChange).toBeCalledTimes(1); + expect(onSelectionChange).toHaveBeenCalledTimes(1); }); it('should select an item on pressing down when shouldSelectOnPressUp is false', async () => { @@ -3112,10 +3112,10 @@ describe('Table', () => { let items = getAllByRole('row'); await user.pointer({target: items[1], keys: '[MouseLeft>]'}); - expect(onSelectionChange).toBeCalledTimes(1); + expect(onSelectionChange).toHaveBeenCalledTimes(1); await user.pointer({target: items[1], keys: '[/MouseLeft]'}); - expect(onSelectionChange).toBeCalledTimes(1); + expect(onSelectionChange).toHaveBeenCalledTimes(1); }); it('should select an item on pressing up when shouldSelectOnPressUp is true', async () => { @@ -3126,10 +3126,10 @@ describe('Table', () => { let items = getAllByRole('row'); await user.pointer({target: items[1], keys: '[MouseLeft>]'}); - expect(onSelectionChange).toBeCalledTimes(0); + expect(onSelectionChange).toHaveBeenCalledTimes(0); await user.pointer({target: items[1], keys: '[/MouseLeft]'}); - expect(onSelectionChange).toBeCalledTimes(1); + expect(onSelectionChange).toHaveBeenCalledTimes(1); }); }); diff --git a/packages/react-aria-components/test/Tabs.test.js b/packages/react-aria-components/test/Tabs.test.js index 3500b2fa62e..4992ca4f206 100644 --- a/packages/react-aria-components/test/Tabs.test.js +++ b/packages/react-aria-components/test/Tabs.test.js @@ -578,7 +578,7 @@ describe('Tabs', () => { expect(tabs[1]).toHaveAttribute('aria-selected', 'false'); expect(tabs[2]).toHaveAttribute('aria-selected', 'true'); - expect(onSelectionChange).toBeCalledTimes(1); + expect(onSelectionChange).toHaveBeenCalledTimes(1); }); it('should support tabs as links', async function () { diff --git a/packages/react-aria-components/test/TagGroup.test.js b/packages/react-aria-components/test/TagGroup.test.js index 2b691194c3a..e94c84b7686 100644 --- a/packages/react-aria-components/test/TagGroup.test.js +++ b/packages/react-aria-components/test/TagGroup.test.js @@ -847,10 +847,10 @@ describe('TagGroup', () => { let items = getAllByRole('row'); await user.pointer({target: items[0], keys: '[MouseLeft>]'}); - expect(onSelectionChange).toBeCalledTimes(1); + expect(onSelectionChange).toHaveBeenCalledTimes(1); await user.pointer({target: items[0], keys: '[/MouseLeft]'}); - expect(onSelectionChange).toBeCalledTimes(1); + expect(onSelectionChange).toHaveBeenCalledTimes(1); }); it('should select an item on pressing down when shouldSelectOnPressUp is false', async () => { @@ -863,10 +863,10 @@ describe('TagGroup', () => { let items = getAllByRole('row'); await user.pointer({target: items[0], keys: '[MouseLeft>]'}); - expect(onSelectionChange).toBeCalledTimes(1); + expect(onSelectionChange).toHaveBeenCalledTimes(1); await user.pointer({target: items[0], keys: '[/MouseLeft]'}); - expect(onSelectionChange).toBeCalledTimes(1); + expect(onSelectionChange).toHaveBeenCalledTimes(1); }); it('should select an item on pressing up when shouldSelectOnPressUp is true', async () => { @@ -879,10 +879,10 @@ describe('TagGroup', () => { let items = getAllByRole('row'); await user.pointer({target: items[0], keys: '[MouseLeft>]'}); - expect(onSelectionChange).toBeCalledTimes(0); + expect(onSelectionChange).toHaveBeenCalledTimes(0); await user.pointer({target: items[0], keys: '[/MouseLeft]'}); - expect(onSelectionChange).toBeCalledTimes(1); + expect(onSelectionChange).toHaveBeenCalledTimes(1); }); }); diff --git a/packages/react-aria-components/test/Tree.test.tsx b/packages/react-aria-components/test/Tree.test.tsx index 5fc5a09f824..072993a0693 100644 --- a/packages/react-aria-components/test/Tree.test.tsx +++ b/packages/react-aria-components/test/Tree.test.tsx @@ -2166,10 +2166,10 @@ describe('Tree', () => { let items = getAllByRole('row'); await user.pointer({target: items[0], keys: '[MouseLeft>]'}); - expect(onSelectionChange).toBeCalledTimes(1); + expect(onSelectionChange).toHaveBeenCalledTimes(1); await user.pointer({target: items[0], keys: '[/MouseLeft]'}); - expect(onSelectionChange).toBeCalledTimes(1); + expect(onSelectionChange).toHaveBeenCalledTimes(1); }); it('should select an item on pressing down when shouldSelectOnPressUp is false', async () => { @@ -2182,10 +2182,10 @@ describe('Tree', () => { let items = getAllByRole('row'); await user.pointer({target: items[0], keys: '[MouseLeft>]'}); - expect(onSelectionChange).toBeCalledTimes(1); + expect(onSelectionChange).toHaveBeenCalledTimes(1); await user.pointer({target: items[0], keys: '[/MouseLeft]'}); - expect(onSelectionChange).toBeCalledTimes(1); + expect(onSelectionChange).toHaveBeenCalledTimes(1); }); it('should select an item on pressing up when shouldSelectOnPressUp is true', async () => { @@ -2198,10 +2198,10 @@ describe('Tree', () => { let items = getAllByRole('row'); await user.pointer({target: items[0], keys: '[MouseLeft>]'}); - expect(onSelectionChange).toBeCalledTimes(0); + expect(onSelectionChange).toHaveBeenCalledTimes(0); await user.pointer({target: items[0], keys: '[/MouseLeft]'}); - expect(onSelectionChange).toBeCalledTimes(1); + expect(onSelectionChange).toHaveBeenCalledTimes(1); }); }); diff --git a/packages/react-aria/src/dnd/DragManager.ts b/packages/react-aria/src/dnd/DragManager.ts index ac8f89f7251..637cdf0daf6 100644 --- a/packages/react-aria/src/dnd/DragManager.ts +++ b/packages/react-aria/src/dnd/DragManager.ts @@ -309,7 +309,10 @@ class DragSession { onBlur(e: FocusEvent): void { let activateButton = this.getCurrentActivateButton(); - if (e.relatedTarget === activateButton) { + // Guard activateButton non-null so this doesn't trip on the case where + // there's no activate button and the focused element loses focus to nothing + // (browsers and jsdom 26+ both set relatedTarget to null in that case). + if (activateButton && e.relatedTarget === activateButton) { this.cancelEvent(e); return; } diff --git a/packages/react-aria/src/dnd/utils.ts b/packages/react-aria/src/dnd/utils.ts index bb8e2e356c8..7db7e892242 100644 --- a/packages/react-aria/src/dnd/utils.ts +++ b/packages/react-aria/src/dnd/utils.ts @@ -73,7 +73,12 @@ function mapModality(modality: string | null) { modality = 'virtual'; } - if (modality === 'virtual' && typeof window !== 'undefined' && 'ontouchstart' in window) { + if ( + modality === 'virtual' && + typeof window !== 'undefined' && + typeof window.matchMedia === 'function' && + window.matchMedia('(pointer: coarse)').matches + ) { modality = 'touch'; } diff --git a/packages/react-aria/test/calendar/useCalendar.test.js b/packages/react-aria/test/calendar/useCalendar.test.js index f92e9817a0e..1cc79b9d4d0 100644 --- a/packages/react-aria/test/calendar/useCalendar.test.js +++ b/packages/react-aria/test/calendar/useCalendar.test.js @@ -12,7 +12,7 @@ import {act, pointerMap, render} from '@react-spectrum/test-utils-internal'; import {CalendarDate} from '@internationalized/date'; -import {Custom454Calendar} from '@internationalized/date/tests/customCalendarImpl'; +import {Custom454Calendar} from '../../../@internationalized/date/tests/customCalendarImpl'; import {Example, ExampleCustomFirstDay} from '../../stories/calendar/Example'; import {I18nProvider} from '../../src/i18n/I18nProvider'; import React from 'react'; diff --git a/packages/react-aria/test/dnd/dnd.test.js b/packages/react-aria/test/dnd/dnd.test.js index 8ee14b20a25..848278cc8a3 100644 --- a/packages/react-aria/test/dnd/dnd.test.js +++ b/packages/react-aria/test/dnd/dnd.test.js @@ -25,6 +25,7 @@ import {Draggable, Droppable} from './examples'; import {DragTypes} from '../../src/dnd/utils'; import React, {useEffect} from 'react'; import ReactDOM from 'react-dom'; +import {setMedia} from 'mock-match-media'; import userEvent from '@testing-library/user-event'; function pointerEvent(type, opts) { @@ -3239,7 +3240,7 @@ describe('useDrag and useDrop', function () { }); it('should use touch specific aria descriptions when available', async () => { - window.ontouchstart = () => {}; + setMedia({pointer: 'coarse'}); let tree = render( <> @@ -3273,8 +3274,6 @@ describe('useDrag and useDrop', function () { expect(document.getElementById(droppable.getAttribute('aria-describedby'))).toHaveTextContent( 'Double tap to drop.' ); - - delete window.ontouchstart; }); }); }); diff --git a/packages/react-aria/test/dnd/useDraggableCollection.test.js b/packages/react-aria/test/dnd/useDraggableCollection.test.js index 0c4efede2df..fc33abd2972 100644 --- a/packages/react-aria/test/dnd/useDraggableCollection.test.js +++ b/packages/react-aria/test/dnd/useDraggableCollection.test.js @@ -25,6 +25,7 @@ import {Droppable} from './examples'; import {Item} from 'react-stately/Item'; import {Provider} from '@adobe/react-spectrum/Provider'; import React from 'react'; +import {setMedia} from 'mock-match-media'; import {defaultTheme as theme} from '@adobe/react-spectrum/defaultTheme'; import userEvent from '@testing-library/user-event'; @@ -1036,7 +1037,7 @@ describe('useDraggableCollection', () => { }); it('should work with a listbox without a drag button', async () => { - window.ontouchstart = () => {}; + setMedia({pointer: 'coarse'}); let onDragStart = jest.fn(); let onDragEnd = jest.fn(); let onDrop = jest.fn(); @@ -1124,12 +1125,10 @@ describe('useDraggableCollection', () => { keys: new Set(['foo', 'bar']), isInternal: false }); - - delete window.ontouchstart; }); it('should support row actions', async () => { - window.ontouchstart = () => {}; + setMedia({pointer: 'coarse'}); let onDragStart = jest.fn(); let onDragEnd = jest.fn(); let onDrop = jest.fn(); @@ -1233,8 +1232,6 @@ describe('useDraggableCollection', () => { keys: new Set(['foo', 'bar']), isInternal: false }); - - delete window.ontouchstart; }); }); }); diff --git a/packages/react-aria/test/dnd/useDroppableCollection.test.js b/packages/react-aria/test/dnd/useDroppableCollection.test.js index 03ad3aa8afa..33823acea33 100644 --- a/packages/react-aria/test/dnd/useDroppableCollection.test.js +++ b/packages/react-aria/test/dnd/useDroppableCollection.test.js @@ -243,7 +243,7 @@ describe('useDroppableCollection', () => { let cells = within(grid).getAllByRole('gridcell'); expect(cells).toHaveLength(6); - let scrollTop = jest.spyOn(grid, 'scrollTop', 'set'); + using scrollTop = jest.spyOn(grid, 'scrollTop', 'set'); let dataTransfer = new DataTransfer(); fireEvent(draggable, new DragEvent('dragstart', {dataTransfer, clientX: 0, clientY: 0})); diff --git a/packages/react-aria/test/interactions/Focusable.test.js b/packages/react-aria/test/interactions/Focusable.test.js index ae66f7743c7..5e151e35420 100644 --- a/packages/react-aria/test/interactions/Focusable.test.js +++ b/packages/react-aria/test/interactions/Focusable.test.js @@ -103,7 +103,7 @@ describe('Focusable', function () { }); it('should error if component does not forward its ref', async function () { - let spy = jest.spyOn(console, 'error').mockImplementation(() => {}); + using spy = jest.spyOn(console, 'error').mockImplementation(() => {}); let Component = () => Hi; render( @@ -115,7 +115,7 @@ describe('Focusable', function () { }); it('should error if component does not forward its ref to a DOM element', async function () { - let spy = jest.spyOn(console, 'error').mockImplementation(() => {}); + using spy = jest.spyOn(console, 'error').mockImplementation(() => {}); let Component = React.forwardRef((_, ref) => { useImperativeHandle(ref, () => ({something: true})); return ; @@ -131,7 +131,7 @@ describe('Focusable', function () { }); it('should warn if child is not focusable', async function () { - let spy = jest.spyOn(console, 'warn').mockImplementation(() => {}); + using spy = jest.spyOn(console, 'warn').mockImplementation(() => {}); let Component = React.forwardRef((_, ref) => ( Hi @@ -149,7 +149,7 @@ describe('Focusable', function () { }); it('should warn if child does not have a role', async function () { - let spy = jest.spyOn(console, 'warn').mockImplementation(() => {}); + using spy = jest.spyOn(console, 'warn').mockImplementation(() => {}); render( Trigger @@ -160,7 +160,7 @@ describe('Focusable', function () { }); it('should warn if child does not have an interactive role', async function () { - let spy = jest.spyOn(console, 'warn').mockImplementation(() => {}); + using spy = jest.spyOn(console, 'warn').mockImplementation(() => {}); render( Trigger diff --git a/packages/react-aria/test/interactions/PressResponder.test.js b/packages/react-aria/test/interactions/PressResponder.test.js index 7fd9de57f49..e6c2de3e1dc 100644 --- a/packages/react-aria/test/interactions/PressResponder.test.js +++ b/packages/react-aria/test/interactions/PressResponder.test.js @@ -53,7 +53,7 @@ describe('PressResponder', function () { }); it('should warn if there is no pressable child', function () { - let warn = jest.spyOn(global.console, 'warn').mockImplementation(); + using warn = jest.spyOn(global.console, 'warn').mockImplementation(); render(
@@ -67,7 +67,7 @@ describe('PressResponder', function () { }); it('should not warn if there is a pressable child', function () { - let warn = jest.spyOn(global.console, 'warn').mockImplementation(); + using warn = jest.spyOn(global.console, 'warn').mockImplementation(); render(
diff --git a/packages/react-aria/test/interactions/Pressable.test.js b/packages/react-aria/test/interactions/Pressable.test.js index e1e70b2989a..658320f0d5c 100644 --- a/packages/react-aria/test/interactions/Pressable.test.js +++ b/packages/react-aria/test/interactions/Pressable.test.js @@ -78,7 +78,7 @@ describe('Pressable', function () { }); it('should error if component does not forward its ref', async function () { - let spy = jest.spyOn(console, 'error').mockImplementation(() => {}); + using spy = jest.spyOn(console, 'error').mockImplementation(() => {}); let Component = () => ; render( @@ -90,7 +90,7 @@ describe('Pressable', function () { }); it('should error if component does not forward its ref to a DOM element', async function () { - let spy = jest.spyOn(console, 'error').mockImplementation(() => {}); + using spy = jest.spyOn(console, 'error').mockImplementation(() => {}); let Component = React.forwardRef((_, ref) => { useImperativeHandle(ref, () => ({something: true})); return ; @@ -106,7 +106,7 @@ describe('Pressable', function () { }); it('should warn if child is not focusable', async function () { - let spy = jest.spyOn(console, 'warn').mockImplementation(() => {}); + using spy = jest.spyOn(console, 'warn').mockImplementation(() => {}); let Component = React.forwardRef((_, ref) => ( Hi @@ -124,7 +124,7 @@ describe('Pressable', function () { }); it('supports isDisabled', async function () { - let spy = jest.spyOn(console, 'warn').mockImplementation(() => {}); + using spy = jest.spyOn(console, 'warn').mockImplementation(() => {}); let {getByRole} = render( Button @@ -137,7 +137,7 @@ describe('Pressable', function () { }); it('should warn if child does not have a role', async function () { - let spy = jest.spyOn(console, 'warn').mockImplementation(() => {}); + using spy = jest.spyOn(console, 'warn').mockImplementation(() => {}); render( Trigger @@ -148,7 +148,7 @@ describe('Pressable', function () { }); it('should warn if child does not have an interactive role', async function () { - let spy = jest.spyOn(console, 'warn').mockImplementation(() => {}); + using spy = jest.spyOn(console, 'warn').mockImplementation(() => {}); render( Trigger diff --git a/packages/react-aria/test/interactions/focusSafely.test.js b/packages/react-aria/test/interactions/focusSafely.test.js index 72ba66e0d1c..5b42aa894b6 100644 --- a/packages/react-aria/test/interactions/focusSafely.test.js +++ b/packages/react-aria/test/interactions/focusSafely.test.js @@ -46,7 +46,7 @@ describe('focusSafely', () => { jest.runAllTimers(); }); - expect(focusWithoutScrolling).toBeCalledTimes(0); + expect(focusWithoutScrolling).toHaveBeenCalledTimes(0); }); it("should focus on the element if it's connected", async function () { @@ -64,7 +64,7 @@ describe('focusSafely', () => { jest.runAllTimers(); }); - expect(focusWithoutScrolling).toBeCalledTimes(1); + expect(focusWithoutScrolling).toHaveBeenCalledTimes(1); }); describe('focusSafely with Shadow DOM', function () { @@ -89,7 +89,7 @@ describe('focusSafely', () => { jest.runAllTimers(); }); - expect(focusWithoutScrolling).toBeCalledTimes(0); + expect(focusWithoutScrolling).toHaveBeenCalledTimes(0); }); it("should focus on the element if it's connected within shadow DOM", async function () { @@ -109,7 +109,7 @@ describe('focusSafely', () => { jest.runAllTimers(); }); - expect(focusWithoutScrolling).toBeCalledTimes(1); + expect(focusWithoutScrolling).toHaveBeenCalledTimes(1); unmount(); shadowRoot.host.remove(); diff --git a/packages/react-aria/test/interactions/useHover.test.js b/packages/react-aria/test/interactions/useHover.test.js index 3860a5188c8..1edde7c3461 100644 --- a/packages/react-aria/test/interactions/useHover.test.js +++ b/packages/react-aria/test/interactions/useHover.test.js @@ -20,7 +20,6 @@ import { import {ActionButton} from '@adobe/react-spectrum/ActionButton'; import {Dialog} from '@adobe/react-spectrum/Dialog'; import {DialogTrigger} from '@adobe/react-spectrum/DialogTrigger'; -import MatchMediaMock from 'jest-matchmedia-mock'; import {Provider} from '@adobe/react-spectrum/Provider'; import React, {useState} from 'react'; import {defaultTheme as theme} from '@adobe/react-spectrum/defaultTheme'; @@ -618,9 +617,7 @@ describe('useHover', function () { jest.useFakeTimers(); }); - let matchMedia; beforeEach(() => { - matchMedia = new MatchMediaMock(); // this needs to be a setTimeout so that the dialog can be removed from the dom before the callback is invoked jest .spyOn(window, 'requestAnimationFrame') @@ -637,8 +634,6 @@ describe('useHover', function () { jest.runAllTimers(); }); } - - matchMedia.clear(); window.requestAnimationFrame.mockRestore(); }); diff --git a/packages/react-aria/test/interactions/usePress.test.js b/packages/react-aria/test/interactions/usePress.test.js index acb34d99e9c..4aa431633c2 100644 --- a/packages/react-aria/test/interactions/usePress.test.js +++ b/packages/react-aria/test/interactions/usePress.test.js @@ -23,7 +23,6 @@ import {ActionButton} from '@adobe/react-spectrum/ActionButton'; import {Dialog} from '@adobe/react-spectrum/Dialog'; import {DialogTrigger} from '@adobe/react-spectrum/DialogTrigger'; import {enableShadowDOM} from 'react-stately/private/flags/flags'; -import MatchMediaMock from 'jest-matchmedia-mock'; import {Provider} from '@adobe/react-spectrum/Provider'; import React from 'react'; import ReactDOM, {createPortal} from 'react-dom'; @@ -1125,7 +1124,7 @@ describe('usePress', function () { }); it('should not ignore virtual pointer events on android ', function () { - let uaMock = jest.spyOn(navigator, 'userAgent', 'get').mockImplementation(() => 'Android'); + using uaMock = jest.spyOn(navigator, 'userAgent', 'get').mockImplementation(() => 'Android'); let events = []; let addEvent = e => events.push(e); @@ -3035,7 +3034,7 @@ describe('usePress', function () { /> ); - let spy = jest.spyOn(window.navigator, 'platform', 'get').mockImplementation(() => 'Mac'); + using spy = jest.spyOn(window.navigator, 'platform', 'get').mockImplementation(() => 'Mac'); let el = res.getByText('test'); fireEvent.keyDown(el, {key: 'Meta'}); @@ -3936,11 +3935,6 @@ describe('usePress', function () { jest.useFakeTimers(); }); - let matchMedia; - beforeEach(() => { - matchMedia = new MatchMediaMock(); - }); - afterEach(() => { // Ensure we close any dialogs before unmounting to avoid warning. let dialog = document.querySelector('[role="dialog"]'); @@ -3951,8 +3945,6 @@ describe('usePress', function () { jest.runAllTimers(); }); } - - matchMedia.clear(); }); describe.each` @@ -4356,22 +4348,18 @@ describe('usePress', function () { const {shadowRoot} = createShadowRoot(); events = []; addEvent = e => events.push(e); - const ExampleComponent = () => - ReactDOM.createPortal( -
- addEvent({type: 'presschange', pressed})} - onPress={addEvent} - onPressUp={addEvent} - {...extraProps} - /> -
, - shadowRoot - ); - - const {unmount: _unmount} = render(); + const {unmount: _unmount} = render( + addEvent({type: 'presschange', pressed})} + onPress={addEvent} + onPressUp={addEvent} + {...extraProps} + />, + {container: shadowRoot} + ); unmount = _unmount; return shadowRoot; @@ -4983,7 +4971,7 @@ describe('usePress', function () { }); it('should not ignore virtual pointer events on android ', function () { - let uaMock = jest.spyOn(navigator, 'userAgent', 'get').mockImplementation(() => 'Android'); + using uaMock = jest.spyOn(navigator, 'userAgent', 'get').mockImplementation(() => 'Android'); const shadowRoot = setupShadowDOMTest({onPressChange: null}); @@ -5191,7 +5179,8 @@ describe('usePress', function () { expect(el).toHaveStyle('user-select: none'); fireEvent(el, pointerEvent('pointerup', {pointerId: 1, pointerType: 'mouse'})); fireEvent.click(el); - expect(el).not.toHaveStyle('user-select: none'); + // checking toHaveStyle leads to a cache issue in jsdom 26, https://github.com/testing-library/jest-dom/issues/673 + expect(el).not.toHaveAttribute('style', 'user-select: none'); }); }); }); diff --git a/packages/react-aria/test/label/useLabel.test.js b/packages/react-aria/test/label/useLabel.test.js index f16c967160b..278d481a47b 100644 --- a/packages/react-aria/test/label/useLabel.test.js +++ b/packages/react-aria/test/label/useLabel.test.js @@ -75,7 +75,7 @@ describe('useLabel hook', () => { }); it('should warn if no visible label or aria labels are provided', () => { - let spyWarn = jest.spyOn(console, 'warn').mockImplementation(() => {}); + using spyWarn = jest.spyOn(console, 'warn').mockImplementation(() => {}); renderLabelHook({}); expect(spyWarn).toHaveBeenCalledWith( 'If you do not provide a visible label, you must specify an aria-label or aria-labelledby attribute for accessibility' diff --git a/packages/react-aria/test/landmark/useLandmark.test.tsx b/packages/react-aria/test/landmark/useLandmark.test.tsx index a12e4db1245..2ec3ef822c2 100644 --- a/packages/react-aria/test/landmark/useLandmark.test.tsx +++ b/packages/react-aria/test/landmark/useLandmark.test.tsx @@ -591,7 +591,8 @@ describe('LandmarkManager', function () { }); it('Should allow 2+ landmarks with same role if they are labelled.', function () { - let spyWarn = jest.spyOn(console, 'warn').mockImplementation(() => {}); + using spyWarn = jest.spyOn(console, 'warn').mockImplementation(() => {}) as jest.SpyInstance & + Disposable; render(
@@ -631,7 +632,8 @@ describe('LandmarkManager', function () { }); it('Should warn if 2+ landmarks with same role are used but not labelled.', function () { - let spyWarn = jest.spyOn(console, 'warn').mockImplementation(() => {}); + using spyWarn = jest.spyOn(console, 'warn').mockImplementation(() => {}) as jest.SpyInstance & + Disposable; let tree = render(
@@ -676,7 +678,8 @@ describe('LandmarkManager', function () { }); it('Should warn if 2+ landmarks with same role and same label', function () { - let spyWarn = jest.spyOn(console, 'warn').mockImplementation(() => {}); + using spyWarn = jest.spyOn(console, 'warn').mockImplementation(() => {}) as jest.SpyInstance & + Disposable; let tree = render(
@@ -1214,7 +1217,8 @@ describe('LandmarkManager', function () { }); it('updates the landmark if the label changes', function () { - let spyWarn = jest.spyOn(console, 'warn').mockImplementation(() => {}); + using spyWarn = jest.spyOn(console, 'warn').mockImplementation(() => {}) as jest.SpyInstance & + Disposable; let tree = render(
diff --git a/packages/react-aria/test/numberfield/useNumberField.test.ts b/packages/react-aria/test/numberfield/useNumberField.test.ts index a06c945af3b..dfc9c66f6d6 100644 --- a/packages/react-aria/test/numberfield/useNumberField.test.ts +++ b/packages/react-aria/test/numberfield/useNumberField.test.ts @@ -22,7 +22,9 @@ describe('useNumberField hook', () => { describe('should return numberFieldProps', () => { it('with default numberField props if no props are provided', () => { - let consoleWarnSpy = jest.spyOn(console, 'warn').mockImplementation(() => {}); + using consoleWarnSpy = jest + .spyOn(console, 'warn') + .mockImplementation(() => {}) as jest.SpyInstance & Disposable; let {inputProps} = renderNumberFieldHook({}); expect(inputProps.type).toBe('text'); expect(inputProps.disabled).toBeFalsy(); diff --git a/packages/react-aria/test/progress/useProgressBar.test.js b/packages/react-aria/test/progress/useProgressBar.test.js index e9ec2ceba3c..db9b52db0be 100644 --- a/packages/react-aria/test/progress/useProgressBar.test.js +++ b/packages/react-aria/test/progress/useProgressBar.test.js @@ -21,7 +21,7 @@ describe('useProgressBar', function () { }; it('with default props if no props are provided', () => { - let consoleWarnSpy = jest.spyOn(console, 'warn').mockImplementation(() => {}); + using consoleWarnSpy = jest.spyOn(console, 'warn').mockImplementation(() => {}); let {progressBarProps} = renderProgressBarHook({}); expect(progressBarProps.role).toBe('progressbar'); expect(progressBarProps['aria-valuemin']).toBe(0); @@ -59,7 +59,7 @@ describe('useProgressBar', function () { }); it('with custom text value', () => { - let props = {value: 25, valueLabel: '¥25'}; + let props = {value: 25, valueLabel: '¥25', 'aria-label': 'mandatory label'}; let {progressBarProps} = renderProgressBarHook(props); expect(progressBarProps['aria-valuenow']).toBe(25); expect(progressBarProps['aria-valuetext']).toBe('¥25'); diff --git a/packages/react-aria/test/select/HiddenSelect.test.tsx b/packages/react-aria/test/select/HiddenSelect.test.tsx index 7d0875359f6..72738c25bcb 100644 --- a/packages/react-aria/test/select/HiddenSelect.test.tsx +++ b/packages/react-aria/test/select/HiddenSelect.test.tsx @@ -87,7 +87,7 @@ describe('', () => { const select = screen.getByLabelText('select'); await user.selectOptions(select, '5'); - expect(onSelectionChange).toBeCalledWith('5'); + expect(onSelectionChange).toHaveBeenCalledWith('5'); }); it('should include a non-empty placeholder option for native select markup', () => { diff --git a/packages/react-aria/test/slider/useSliderThumb.test.js b/packages/react-aria/test/slider/useSliderThumb.test.js index 9a151e01a55..e65a4ae684f 100644 --- a/packages/react-aria/test/slider/useSliderThumb.test.js +++ b/packages/react-aria/test/slider/useSliderThumb.test.js @@ -401,7 +401,7 @@ describe('useSliderThumb', () => { expect(onChangeSpy).toHaveBeenLastCalledWith([40]); expect(onChangeEndSpy).toHaveBeenLastCalledWith([40]); expect(stateRef.current.values).toEqual([40]); - expect(onChangeEndSpy).toBeCalledTimes(1); + expect(onChangeEndSpy).toHaveBeenCalledTimes(1); }); }); @@ -435,7 +435,7 @@ describe('useSliderThumb', () => { expect(onChangeSpy).toHaveBeenLastCalledWith([40]); expect(onChangeEndSpy).toHaveBeenLastCalledWith([40]); expect(stateRef.current.values).toEqual([40]); - expect(onChangeEndSpy).toBeCalledTimes(1); + expect(onChangeEndSpy).toHaveBeenCalledTimes(1); }); it('can be moved by dragging (vertical)', () => { @@ -468,7 +468,7 @@ describe('useSliderThumb', () => { expect(onChangeSpy).toHaveBeenLastCalledWith([40]); expect(onChangeEndSpy).toHaveBeenLastCalledWith([40]); expect(stateRef.current.values).toEqual([40]); - expect(onChangeEndSpy).toBeCalledTimes(1); + expect(onChangeEndSpy).toHaveBeenCalledTimes(1); }); }); diff --git a/packages/react-aria/test/textfield/useTextField.test.js b/packages/react-aria/test/textfield/useTextField.test.js index 73431c154e1..efb766b7860 100644 --- a/packages/react-aria/test/textfield/useTextField.test.js +++ b/packages/react-aria/test/textfield/useTextField.test.js @@ -22,7 +22,7 @@ describe('useTextField hook', () => { describe('should return textFieldProps', () => { it('with default textfield props if no props are provided', () => { - let consoleWarnSpy = jest.spyOn(console, 'warn').mockImplementation(() => {}); + using consoleWarnSpy = jest.spyOn(console, 'warn').mockImplementation(() => {}); let props = renderTextFieldHook({}); expect(props.type).toBe('text'); expect(props.disabled).toBeFalsy(); @@ -103,7 +103,12 @@ describe('useTextField hook', () => { it('without type prop if inputElementType is textarea', () => { let type = 'search'; let pattern = /pattern/; - let props = renderTextFieldHook({type, pattern, inputElementType: 'textarea'}); + let props = renderTextFieldHook({ + type, + pattern, + inputElementType: 'textarea', + 'aria-label': 'mandatory label' + }); expect(props.type).toBeUndefined(); expect(props.pattern).toBeUndefined(); }); diff --git a/packages/react-stately/test/utils/useControlledState.test.tsx b/packages/react-stately/test/utils/useControlledState.test.tsx index dbd1a3e920b..0c4b2d398f2 100644 --- a/packages/react-stately/test/utils/useControlledState.test.tsx +++ b/packages/react-stately/test/utils/useControlledState.test.tsx @@ -111,12 +111,12 @@ describe('useControlledState tests', function () { let button = getByRole('button'); getByTestId('5'); if (!process.env.STRICT_MODE) { - expect(renderSpy).toBeCalledTimes(1); + expect(renderSpy).toHaveBeenCalledTimes(1); } await user.click(button); getByTestId('6'); if (!process.env.STRICT_MODE) { - expect(renderSpy).toBeCalledTimes(2); + expect(renderSpy).toHaveBeenCalledTimes(2); } }); @@ -257,7 +257,9 @@ describe('useControlledState tests', function () { it('will console warn if the programmer tries to switch from controlled to uncontrolled', () => { let onChangeSpy = jest.fn(); - let consoleWarnSpy = jest.spyOn(console, 'warn').mockImplementation(() => {}); + using consoleWarnSpy = jest + .spyOn(console, 'warn') + .mockImplementation(() => {}) as jest.SpyInstance & Disposable; let {result, rerender} = renderHook( ({value, defaultValue, onChange}) => useControlledState(value, defaultValue, onChange), { @@ -280,7 +282,9 @@ describe('useControlledState tests', function () { it('will console warn if the programmer tries to switch from uncontrolled to controlled', () => { let onChangeSpy = jest.fn(); - let consoleWarnSpy = jest.spyOn(console, 'warn').mockImplementation(() => {}); + using consoleWarnSpy = jest + .spyOn(console, 'warn') + .mockImplementation(() => {}) as jest.SpyInstance & Disposable; let {result, rerender} = renderHook( ({value, defaultValue, onChange}) => useControlledState(value, defaultValue, onChange), { diff --git a/packages/tailwindcss-react-aria-components/test/__snapshots__/index.test.js.snap b/packages/tailwindcss-react-aria-components/test/__snapshots__/index.test.js.snap index 9674eac2788..46da6dd0a41 100644 --- a/packages/tailwindcss-react-aria-components/test/__snapshots__/index.test.js.snap +++ b/packages/tailwindcss-react-aria-components/test/__snapshots__/index.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`variants 1`] = ` "/*! tailwindcss v4.0.17 | MIT License | https://tailwindcss.com */ diff --git a/scripts/buildBranchAPI.js b/scripts/buildBranchAPI.js index b663c368cd3..31637382e6c 100644 --- a/scripts/buildBranchAPI.js +++ b/scripts/buildBranchAPI.js @@ -107,7 +107,7 @@ async function build() { // Add dependencies on each published package to the package.json, and // copy the docs from the current package into the temp dir. let packagesDir = path.join(srcDir, 'packages'); - let packages = glob.sync('*/**/package.json', {cwd: packagesDir}); + let packages = glob.sync('*/**/package.json', {cwd: packagesDir, ignore: ['**/node_modules/**']}); pkg.devDependencies['babel-plugin-transform-glob-import'] = '*'; diff --git a/scripts/setupTests.js b/scripts/setupTests.js index 2a8e1261b04..8d213e8edbd 100644 --- a/scripts/setupTests.js +++ b/scripts/setupTests.js @@ -11,6 +11,11 @@ */ // setup file +// oxlint-disable-next-line +import 'mock-match-media/jest-setup'; +// oxlint-disable-next-line +import {cleanup as cleanupMatchMedia} from 'mock-match-media'; +// oxlint-disable-next-line import '@testing-library/jest-dom'; // this prints a nice stack like this @@ -122,4 +127,5 @@ afterEach(() => { // Clean up the clientWidth/clientHeight properties delete document.documentElement.clientWidth; delete document.documentElement.clientHeight; + cleanupMatchMedia(); }); diff --git a/yarn.lock b/yarn.lock index 139d5124625..3c839698356 100644 --- a/yarn.lock +++ b/yarn.lock @@ -51,7 +51,7 @@ __metadata: languageName: node linkType: hard -"@adobe/css-tools@npm:^4.0.1, @adobe/css-tools@npm:^4.4.0": +"@adobe/css-tools@npm:^4.4.0": version: 4.4.2 resolution: "@adobe/css-tools@npm:4.4.2" checksum: 10c0/19433666ad18536b0ed05d4b53fbb3dd6ede266996796462023ec77a90b484890ad28a3e528cdf3ab8a65cb2fcdff5d8feb04db6bc6eed6ca307c40974239c94 @@ -153,6 +153,19 @@ __metadata: languageName: node linkType: hard +"@asamuzakjp/css-color@npm:^3.2.0": + version: 3.2.0 + resolution: "@asamuzakjp/css-color@npm:3.2.0" + dependencies: + "@csstools/css-calc": "npm:^2.1.3" + "@csstools/css-color-parser": "npm:^3.0.9" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" + lru-cache: "npm:^10.4.3" + checksum: 10c0/a4bf1c831751b1fae46b437e37e8a38c0b5bd58d23230157ae210bd1e905fe509b89b7c243e63d1522d852668a6292ed730a160e21342772b4e5b7b8ea14c092 + languageName: node + linkType: hard + "@babel/cli@npm:7.24.1": version: 7.24.1 resolution: "@babel/cli@npm:7.24.1" @@ -180,7 +193,7 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.23.5, @babel/code-frame@npm:^7.24.1, @babel/code-frame@npm:^7.24.2": +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.23.5, @babel/code-frame@npm:^7.24.1, @babel/code-frame@npm:^7.24.2": version: 7.24.2 resolution: "@babel/code-frame@npm:7.24.2" dependencies: @@ -231,7 +244,7 @@ __metadata: languageName: node linkType: hard -"@babel/generator@npm:^7.22.5, @babel/generator@npm:^7.24.1, @babel/generator@npm:^7.7.2": +"@babel/generator@npm:^7.22.5, @babel/generator@npm:^7.24.1": version: 7.24.5 resolution: "@babel/generator@npm:7.24.5" dependencies: @@ -650,7 +663,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-class-properties@npm:^7.12.13, @babel/plugin-syntax-class-properties@npm:^7.8.3": +"@babel/plugin-syntax-class-properties@npm:^7.12.13": version: 7.12.13 resolution: "@babel/plugin-syntax-class-properties@npm:7.12.13" dependencies: @@ -749,7 +762,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-import-meta@npm:^7.10.4, @babel/plugin-syntax-import-meta@npm:^7.8.3": +"@babel/plugin-syntax-import-meta@npm:^7.10.4": version: 7.10.4 resolution: "@babel/plugin-syntax-import-meta@npm:7.10.4" dependencies: @@ -771,7 +784,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-jsx@npm:^7.23.3, @babel/plugin-syntax-jsx@npm:^7.24.1, @babel/plugin-syntax-jsx@npm:^7.7.2": +"@babel/plugin-syntax-jsx@npm:^7.23.3, @babel/plugin-syntax-jsx@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-syntax-jsx@npm:7.24.1" dependencies: @@ -793,7 +806,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-logical-assignment-operators@npm:^7.10.4, @babel/plugin-syntax-logical-assignment-operators@npm:^7.8.3": +"@babel/plugin-syntax-logical-assignment-operators@npm:^7.10.4": version: 7.10.4 resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4" dependencies: @@ -815,7 +828,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-numeric-separator@npm:^7.10.4, @babel/plugin-syntax-numeric-separator@npm:^7.8.3": +"@babel/plugin-syntax-numeric-separator@npm:^7.10.4": version: 7.10.4 resolution: "@babel/plugin-syntax-numeric-separator@npm:7.10.4" dependencies: @@ -870,7 +883,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-top-level-await@npm:^7.14.5, @babel/plugin-syntax-top-level-await@npm:^7.8.3": +"@babel/plugin-syntax-top-level-await@npm:^7.14.5": version: 7.14.5 resolution: "@babel/plugin-syntax-top-level-await@npm:7.14.5" dependencies: @@ -881,7 +894,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-typescript@npm:^7.24.1, @babel/plugin-syntax-typescript@npm:^7.7.2": +"@babel/plugin-syntax-typescript@npm:^7.24.1": version: 7.24.1 resolution: "@babel/plugin-syntax-typescript@npm:7.24.1" dependencies: @@ -1786,7 +1799,7 @@ __metadata: languageName: node linkType: hard -"@babel/template@npm:^7.22.15, @babel/template@npm:^7.22.5, @babel/template@npm:^7.24.0, @babel/template@npm:^7.3.3": +"@babel/template@npm:^7.22.15, @babel/template@npm:^7.22.5, @babel/template@npm:^7.24.0": version: 7.24.0 resolution: "@babel/template@npm:7.24.0" dependencies: @@ -1852,6 +1865,36 @@ __metadata: languageName: node linkType: hard +"@csstools/color-helpers@npm:^5.1.0": + version: 5.1.0 + resolution: "@csstools/color-helpers@npm:5.1.0" + checksum: 10c0/b7f99d2e455cf1c9b41a67a5327d5d02888cd5c8802a68b1887dffef537d9d4bc66b3c10c1e62b40bbed638b6c1d60b85a232f904ed7b39809c4029cb36567db + languageName: node + linkType: hard + +"@csstools/css-calc@npm:^2.1.3, @csstools/css-calc@npm:^2.1.4": + version: 2.1.4 + resolution: "@csstools/css-calc@npm:2.1.4" + peerDependencies: + "@csstools/css-parser-algorithms": ^3.0.5 + "@csstools/css-tokenizer": ^3.0.4 + checksum: 10c0/42ce5793e55ec4d772083808a11e9fb2dfe36db3ec168713069a276b4c3882205b3507c4680224c28a5d35fe0bc2d308c77f8f2c39c7c09aad8747708eb8ddd8 + languageName: node + linkType: hard + +"@csstools/css-color-parser@npm:^3.0.9": + version: 3.1.0 + resolution: "@csstools/css-color-parser@npm:3.1.0" + dependencies: + "@csstools/color-helpers": "npm:^5.1.0" + "@csstools/css-calc": "npm:^2.1.4" + peerDependencies: + "@csstools/css-parser-algorithms": ^3.0.5 + "@csstools/css-tokenizer": ^3.0.4 + checksum: 10c0/0e0c670ad54ec8ec4d9b07568b80defd83b9482191f5e8ca84ab546b7be6db5d7cc2ba7ac9fae54488b129a4be235d6183d3aab4416fec5e89351f73af4222c5 + languageName: node + linkType: hard + "@csstools/css-parser-algorithms@npm:^2.1.1": version: 2.2.0 resolution: "@csstools/css-parser-algorithms@npm:2.2.0" @@ -1861,6 +1904,15 @@ __metadata: languageName: node linkType: hard +"@csstools/css-parser-algorithms@npm:^3.0.4": + version: 3.0.5 + resolution: "@csstools/css-parser-algorithms@npm:3.0.5" + peerDependencies: + "@csstools/css-tokenizer": ^3.0.4 + checksum: 10c0/d9a1c888bd43849ae3437ca39251d5c95d2c8fd6b5ccdb7c45491dfd2c1cbdc3075645e80901d120e4d2c1993db9a5b2d83793b779dbbabcfb132adb142eb7f7 + languageName: node + linkType: hard + "@csstools/css-tokenizer@npm:^2.1.1": version: 2.1.1 resolution: "@csstools/css-tokenizer@npm:2.1.1" @@ -1868,6 +1920,13 @@ __metadata: languageName: node linkType: hard +"@csstools/css-tokenizer@npm:^3.0.3": + version: 3.0.4 + resolution: "@csstools/css-tokenizer@npm:3.0.4" + checksum: 10c0/3b589f8e9942075a642213b389bab75a2d50d05d203727fcdac6827648a5572674caff07907eff3f9a2389d86a4ee47308fafe4f8588f4a77b7167c588d2559f + languageName: node + linkType: hard + "@cypress/request@npm:3.0.7": version: 3.0.7 resolution: "@cypress/request@npm:3.0.7" @@ -2964,107 +3023,58 @@ __metadata: languageName: node linkType: hard -"@jest/console@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/console@npm:29.7.0" +"@jest/console@npm:30.4.1": + version: 30.4.1 + resolution: "@jest/console@npm:30.4.1" dependencies: - "@jest/types": "npm:^29.6.3" + "@jest/types": "npm:30.4.1" "@types/node": "npm:*" - chalk: "npm:^4.0.0" - jest-message-util: "npm:^29.7.0" - jest-util: "npm:^29.7.0" + chalk: "npm:^4.1.2" + jest-message-util: "npm:30.4.1" + jest-util: "npm:30.4.1" slash: "npm:^3.0.0" - checksum: 10c0/7be408781d0a6f657e969cbec13b540c329671819c2f57acfad0dae9dbfe2c9be859f38fe99b35dba9ff1536937dc6ddc69fdcd2794812fa3c647a1619797f6c + checksum: 10c0/f782722ef5754ab864b996000cf1f0545f7be9db6ba8f89cb2381dfab9910a52c59a830e5ea069a76840023e40806493d9900d8eb7e9821d23a11a498f32739e languageName: node linkType: hard -"@jest/core@npm:30.3.0": - version: 30.3.0 - resolution: "@jest/core@npm:30.3.0" +"@jest/core@npm:30.4.2": + version: 30.4.2 + resolution: "@jest/core@npm:30.4.2" dependencies: - "@jest/console": "npm:30.3.0" - "@jest/pattern": "npm:30.0.1" - "@jest/reporters": "npm:30.3.0" - "@jest/test-result": "npm:30.3.0" - "@jest/transform": "npm:30.3.0" - "@jest/types": "npm:30.3.0" + "@jest/console": "npm:30.4.1" + "@jest/pattern": "npm:30.4.0" + "@jest/reporters": "npm:30.4.1" + "@jest/test-result": "npm:30.4.1" + "@jest/transform": "npm:30.4.1" + "@jest/types": "npm:30.4.1" "@types/node": "npm:*" ansi-escapes: "npm:^4.3.2" chalk: "npm:^4.1.2" ci-info: "npm:^4.2.0" exit-x: "npm:^0.2.2" + fast-json-stable-stringify: "npm:^2.1.0" graceful-fs: "npm:^4.2.11" - jest-changed-files: "npm:30.3.0" - jest-config: "npm:30.3.0" - jest-haste-map: "npm:30.3.0" - jest-message-util: "npm:30.3.0" - jest-regex-util: "npm:30.0.1" - jest-resolve: "npm:30.3.0" - jest-resolve-dependencies: "npm:30.3.0" - jest-runner: "npm:30.3.0" - jest-runtime: "npm:30.3.0" - jest-snapshot: "npm:30.3.0" - jest-util: "npm:30.3.0" - jest-validate: "npm:30.3.0" - jest-watcher: "npm:30.3.0" - pretty-format: "npm:30.3.0" + jest-changed-files: "npm:30.4.1" + jest-config: "npm:30.4.2" + jest-haste-map: "npm:30.4.1" + jest-message-util: "npm:30.4.1" + jest-regex-util: "npm:30.4.0" + jest-resolve: "npm:30.4.1" + jest-resolve-dependencies: "npm:30.4.2" + jest-runner: "npm:30.4.2" + jest-runtime: "npm:30.4.2" + jest-snapshot: "npm:30.4.1" + jest-util: "npm:30.4.1" + jest-validate: "npm:30.4.1" + jest-watcher: "npm:30.4.1" + pretty-format: "npm:30.4.1" slash: "npm:^3.0.0" peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: node-notifier: optional: true - checksum: 10c0/1735f2263cca10c6cae4e1dbde9c3ccb36e2cbd1cc10bac6fc45e187b06c4e33a6a029f9a6444a3cd43a2a44ffaec3b686d94f70965cebf2b885b198c8615322 - languageName: node - linkType: hard - -"@jest/core@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/core@npm:29.7.0" - dependencies: - "@jest/console": "npm:^29.7.0" - "@jest/reporters": "npm:^29.7.0" - "@jest/test-result": "npm:^29.7.0" - "@jest/transform": "npm:^29.7.0" - "@jest/types": "npm:^29.6.3" - "@types/node": "npm:*" - ansi-escapes: "npm:^4.2.1" - chalk: "npm:^4.0.0" - ci-info: "npm:^3.2.0" - exit: "npm:^0.1.2" - graceful-fs: "npm:^4.2.9" - jest-changed-files: "npm:^29.7.0" - jest-config: "npm:^29.7.0" - jest-haste-map: "npm:^29.7.0" - jest-message-util: "npm:^29.7.0" - jest-regex-util: "npm:^29.6.3" - jest-resolve: "npm:^29.7.0" - jest-resolve-dependencies: "npm:^29.7.0" - jest-runner: "npm:^29.7.0" - jest-runtime: "npm:^29.7.0" - jest-snapshot: "npm:^29.7.0" - jest-util: "npm:^29.7.0" - jest-validate: "npm:^29.7.0" - jest-watcher: "npm:^29.7.0" - micromatch: "npm:^4.0.4" - pretty-format: "npm:^29.7.0" - slash: "npm:^3.0.0" - strip-ansi: "npm:^6.0.0" - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - checksum: 10c0/934f7bf73190f029ac0f96662c85cd276ec460d407baf6b0dbaec2872e157db4d55a7ee0b1c43b18874602f662b37cb973dda469a4e6d88b4e4845b521adeeb2 - languageName: node - linkType: hard - -"@jest/create-cache-key-function@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/create-cache-key-function@npm:29.7.0" - dependencies: - "@jest/types": "npm:^29.6.3" - checksum: 10c0/5c47ef62205264adf77b1ff26b969ce9fe84920b8275c3c5e83f4236859d6ae5e4e7027af99eef04a8e334c4e424d44af3e167972083406070aca733ac2a2795 + checksum: 10c0/4237ec79d5403b82ba89e3be6e4318d9f37c3a11281bd76cfbdd4ff08d8c89850555607c4d494dab3526e01a90db3539e549017883967dd392b5084f1be0d5b2 languageName: node linkType: hard @@ -3084,6 +3094,34 @@ __metadata: languageName: node linkType: hard +"@jest/diff-sequences@npm:30.4.0": + version: 30.4.0 + resolution: "@jest/diff-sequences@npm:30.4.0" + checksum: 10c0/b4358b1b885098b905cb777f58788ddd45f90c4ebc3ce2c04fb1d4c9516f35ac2d9daef8263cd21c537bd7a52ab320f03e4ba9521677959ae20e3d405356b420 + languageName: node + linkType: hard + +"@jest/environment-jsdom-abstract@npm:30.4.1": + version: 30.4.1 + resolution: "@jest/environment-jsdom-abstract@npm:30.4.1" + dependencies: + "@jest/environment": "npm:30.4.1" + "@jest/fake-timers": "npm:30.4.1" + "@jest/types": "npm:30.4.1" + "@types/jsdom": "npm:^21.1.7" + "@types/node": "npm:*" + jest-mock: "npm:30.4.1" + jest-util: "npm:30.4.1" + peerDependencies: + canvas: ^3.0.0 + jsdom: "*" + peerDependenciesMeta: + canvas: + optional: true + checksum: 10c0/a06c832ea500690a2877aaff199c788c29a888cfc0db1e05e30ea4fcf1c272c357dfc6b6151d4fb5528ffa1691a4cdb8d8fff424a58c436093500df8597b7614 + languageName: node + linkType: hard + "@jest/environment@npm:30.3.0": version: 30.3.0 resolution: "@jest/environment@npm:30.3.0" @@ -3096,15 +3134,15 @@ __metadata: languageName: node linkType: hard -"@jest/environment@npm:^29.5.0, @jest/environment@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/environment@npm:29.7.0" +"@jest/environment@npm:30.4.1": + version: 30.4.1 + resolution: "@jest/environment@npm:30.4.1" dependencies: - "@jest/fake-timers": "npm:^29.7.0" - "@jest/types": "npm:^29.6.3" + "@jest/fake-timers": "npm:30.4.1" + "@jest/types": "npm:30.4.1" "@types/node": "npm:*" - jest-mock: "npm:^29.7.0" - checksum: 10c0/c7b1b40c618f8baf4d00609022d2afa086d9c6acc706f303a70bb4b67275868f620ad2e1a9efc5edd418906157337cce50589a627a6400bbdf117d351b91ef86 + jest-mock: "npm:30.4.1" + checksum: 10c0/704987ff8650c91a8ed13796ce47e9c55da3c12a01902d9e384330cead18eb4d34ce665a8d9962dddf2736fac006f92efc1039b8da424adf8fdc16f8d81aff6c languageName: node linkType: hard @@ -3117,12 +3155,12 @@ __metadata: languageName: node linkType: hard -"@jest/expect-utils@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/expect-utils@npm:29.7.0" +"@jest/expect-utils@npm:30.4.1": + version: 30.4.1 + resolution: "@jest/expect-utils@npm:30.4.1" dependencies: - jest-get-type: "npm:^29.6.3" - checksum: 10c0/60b79d23a5358dc50d9510d726443316253ecda3a7fb8072e1526b3e0d3b14f066ee112db95699b7a43ad3f0b61b750c72e28a5a1cac361d7a2bb34747fa938a + "@jest/get-type": "npm:30.1.0" + checksum: 10c0/6dea9e11ebcc7be68fea5950ae5a1b7ff9fd1490101ee8af0aede336b9934ab24a28bcafe2f1171dac0f95982406386c609ca2659b9132e1a9d419e8d69b9cd4 languageName: node linkType: hard @@ -3136,13 +3174,13 @@ __metadata: languageName: node linkType: hard -"@jest/expect@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/expect@npm:29.7.0" +"@jest/expect@npm:30.4.1": + version: 30.4.1 + resolution: "@jest/expect@npm:30.4.1" dependencies: - expect: "npm:^29.7.0" - jest-snapshot: "npm:^29.7.0" - checksum: 10c0/b41f193fb697d3ced134349250aed6ccea075e48c4f803159db102b826a4e473397c68c31118259868fd69a5cba70e97e1c26d2c2ff716ca39dc73a2ccec037e + expect: "npm:30.4.1" + jest-snapshot: "npm:30.4.1" + checksum: 10c0/2133183e735982879408036237b115abc2e57fa52bb7324be0a1f2ab6941a57da93b2e6f498dc110b7d007dd20463013fbcc5b24377cf65e6a8518d3b2ff76bd languageName: node linkType: hard @@ -3160,17 +3198,17 @@ __metadata: languageName: node linkType: hard -"@jest/fake-timers@npm:^29.5.0, @jest/fake-timers@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/fake-timers@npm:29.7.0" +"@jest/fake-timers@npm:30.4.1": + version: 30.4.1 + resolution: "@jest/fake-timers@npm:30.4.1" dependencies: - "@jest/types": "npm:^29.6.3" - "@sinonjs/fake-timers": "npm:^10.0.2" + "@jest/types": "npm:30.4.1" + "@sinonjs/fake-timers": "npm:^15.4.0" "@types/node": "npm:*" - jest-message-util: "npm:^29.7.0" - jest-mock: "npm:^29.7.0" - jest-util: "npm:^29.7.0" - checksum: 10c0/cf0a8bcda801b28dc2e2b2ba36302200ee8104a45ad7a21e6c234148932f826cb3bc57c8df3b7b815aeea0861d7b6ca6f0d4778f93b9219398ef28749e03595c + jest-message-util: "npm:30.4.1" + jest-mock: "npm:30.4.1" + jest-util: "npm:30.4.1" + checksum: 10c0/4a10e4eb64bb5ea2531cdcc79f3058731f5c14faf2a74f498fcb37f6690c3c0f9b12a9856736d26e34631eb38db12e12812da71de27b9d332df44dda9f460fbe languageName: node linkType: hard @@ -3193,15 +3231,15 @@ __metadata: languageName: node linkType: hard -"@jest/globals@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/globals@npm:29.7.0" +"@jest/globals@npm:30.4.1": + version: 30.4.1 + resolution: "@jest/globals@npm:30.4.1" dependencies: - "@jest/environment": "npm:^29.7.0" - "@jest/expect": "npm:^29.7.0" - "@jest/types": "npm:^29.6.3" - jest-mock: "npm:^29.7.0" - checksum: 10c0/a385c99396878fe6e4460c43bd7bb0a5cc52befb462cc6e7f2a3810f9e7bcce7cdeb51908fd530391ee452dc856c98baa2c5f5fa8a5b30b071d31ef7f6955cea + "@jest/environment": "npm:30.4.1" + "@jest/expect": "npm:30.4.1" + "@jest/types": "npm:30.4.1" + jest-mock: "npm:30.4.1" + checksum: 10c0/7961eefdc9e69ba7754d11a1bae4bc2960f33e03d9c1d6c73f27895b8cf92a9118a234330f31dc8efe16e835fe70ef9cc6c26f60121f6b6e9fac71c8b1bcd709 languageName: node linkType: hard @@ -3215,15 +3253,25 @@ __metadata: languageName: node linkType: hard -"@jest/reporters@npm:30.3.0": - version: 30.3.0 - resolution: "@jest/reporters@npm:30.3.0" +"@jest/pattern@npm:30.4.0": + version: 30.4.0 + resolution: "@jest/pattern@npm:30.4.0" + dependencies: + "@types/node": "npm:*" + jest-regex-util: "npm:30.4.0" + checksum: 10c0/05bc0799f84f3750bbbff0f9a546979efd0dbcee86c1be98b9e2811a68885809ec7b5cca39b8dda1497cb7cf17b7be936019fba8dfbcd9c53b181e03e67f4f82 + languageName: node + linkType: hard + +"@jest/reporters@npm:30.4.1": + version: 30.4.1 + resolution: "@jest/reporters@npm:30.4.1" dependencies: "@bcoe/v8-coverage": "npm:^0.2.3" - "@jest/console": "npm:30.3.0" - "@jest/test-result": "npm:30.3.0" - "@jest/transform": "npm:30.3.0" - "@jest/types": "npm:30.3.0" + "@jest/console": "npm:30.4.1" + "@jest/test-result": "npm:30.4.1" + "@jest/transform": "npm:30.4.1" + "@jest/types": "npm:30.4.1" "@jridgewell/trace-mapping": "npm:^0.3.25" "@types/node": "npm:*" chalk: "npm:^4.1.2" @@ -3236,9 +3284,9 @@ __metadata: istanbul-lib-report: "npm:^3.0.0" istanbul-lib-source-maps: "npm:^5.0.0" istanbul-reports: "npm:^3.1.3" - jest-message-util: "npm:30.3.0" - jest-util: "npm:30.3.0" - jest-worker: "npm:30.3.0" + jest-message-util: "npm:30.4.1" + jest-util: "npm:30.4.1" + jest-worker: "npm:30.4.1" slash: "npm:^3.0.0" string-length: "npm:^4.0.2" v8-to-istanbul: "npm:^9.0.1" @@ -3247,44 +3295,7 @@ __metadata: peerDependenciesMeta: node-notifier: optional: true - checksum: 10c0/e1b6fb13df94435d4b8e6f4d4bd1c27dfc572ca7393b0a95d14c98013abe3c962aa28e2c56864f3ddd0894834d21c9a67485d11e6c31532aaaeea66ca6a2a026 - languageName: node - linkType: hard - -"@jest/reporters@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/reporters@npm:29.7.0" - dependencies: - "@bcoe/v8-coverage": "npm:^0.2.3" - "@jest/console": "npm:^29.7.0" - "@jest/test-result": "npm:^29.7.0" - "@jest/transform": "npm:^29.7.0" - "@jest/types": "npm:^29.6.3" - "@jridgewell/trace-mapping": "npm:^0.3.18" - "@types/node": "npm:*" - chalk: "npm:^4.0.0" - collect-v8-coverage: "npm:^1.0.0" - exit: "npm:^0.1.2" - glob: "npm:^7.1.3" - graceful-fs: "npm:^4.2.9" - istanbul-lib-coverage: "npm:^3.0.0" - istanbul-lib-instrument: "npm:^6.0.0" - istanbul-lib-report: "npm:^3.0.0" - istanbul-lib-source-maps: "npm:^4.0.0" - istanbul-reports: "npm:^3.1.3" - jest-message-util: "npm:^29.7.0" - jest-util: "npm:^29.7.0" - jest-worker: "npm:^29.7.0" - slash: "npm:^3.0.0" - string-length: "npm:^4.0.1" - strip-ansi: "npm:^6.0.0" - v8-to-istanbul: "npm:^9.0.1" - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - checksum: 10c0/a754402a799541c6e5aff2c8160562525e2a47e7d568f01ebfc4da66522de39cbb809bbb0a841c7052e4270d79214e70aec3c169e4eae42a03bc1a8a20cb9fa2 + checksum: 10c0/cf5220462c6242fa564bbeb6d5988ebfd814e0351f3bddae07323b55c68c7ebd4aa4c23e717231ab4b2d63c4fc7fa4615b9dad8584be534bd44622981242dceb languageName: node linkType: hard @@ -3297,6 +3308,15 @@ __metadata: languageName: node linkType: hard +"@jest/schemas@npm:30.4.1": + version: 30.4.1 + resolution: "@jest/schemas@npm:30.4.1" + dependencies: + "@sinclair/typebox": "npm:^0.34.0" + checksum: 10c0/96f388ebfc1974457fcbde2ad36c40a0b549cba3f624fe8d9d6e5903a152dc75e4043f4ac9ac7668622f2ecb0f9a4dcb9a38edf3bc0d52b82045b2bb2b69b72a + languageName: node + linkType: hard + "@jest/schemas@npm:^28.1.3": version: 28.1.3 resolution: "@jest/schemas@npm:28.1.3" @@ -3306,15 +3326,6 @@ __metadata: languageName: node linkType: hard -"@jest/schemas@npm:^29.6.3": - version: 29.6.3 - resolution: "@jest/schemas@npm:29.6.3" - dependencies: - "@sinclair/typebox": "npm:^0.27.8" - checksum: 10c0/b329e89cd5f20b9278ae1233df74016ebf7b385e0d14b9f4c1ad18d096c4c19d1e687aa113a9c976b16ec07f021ae53dea811fb8c1248a50ac34fbe009fdf6be - languageName: node - linkType: hard - "@jest/snapshot-utils@npm:30.3.0": version: 30.3.0 resolution: "@jest/snapshot-utils@npm:30.3.0" @@ -3327,6 +3338,18 @@ __metadata: languageName: node linkType: hard +"@jest/snapshot-utils@npm:30.4.1": + version: 30.4.1 + resolution: "@jest/snapshot-utils@npm:30.4.1" + dependencies: + "@jest/types": "npm:30.4.1" + chalk: "npm:^4.1.2" + graceful-fs: "npm:^4.2.11" + natural-compare: "npm:^1.4.0" + checksum: 10c0/81da9079719eece02b89c45cb97162b5b7d794981652c8d8fe2846843ac81ce219ea4bc21bde7cf76c9032006435f82bd9aee8d6139d90b77078ddad4865af02 + languageName: node + linkType: hard + "@jest/source-map@npm:30.0.1": version: 30.0.1 resolution: "@jest/source-map@npm:30.0.1" @@ -3338,17 +3361,6 @@ __metadata: languageName: node linkType: hard -"@jest/source-map@npm:^29.6.3": - version: 29.6.3 - resolution: "@jest/source-map@npm:29.6.3" - dependencies: - "@jridgewell/trace-mapping": "npm:^0.3.18" - callsites: "npm:^3.0.0" - graceful-fs: "npm:^4.2.9" - checksum: 10c0/a2f177081830a2e8ad3f2e29e20b63bd40bade294880b595acf2fc09ec74b6a9dd98f126a2baa2bf4941acd89b13a4ade5351b3885c224107083a0059b60a219 - languageName: node - linkType: hard - "@jest/test-result@npm:30.3.0": version: 30.3.0 resolution: "@jest/test-result@npm:30.3.0" @@ -3361,39 +3373,27 @@ __metadata: languageName: node linkType: hard -"@jest/test-result@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/test-result@npm:29.7.0" +"@jest/test-result@npm:30.4.1": + version: 30.4.1 + resolution: "@jest/test-result@npm:30.4.1" dependencies: - "@jest/console": "npm:^29.7.0" - "@jest/types": "npm:^29.6.3" - "@types/istanbul-lib-coverage": "npm:^2.0.0" - collect-v8-coverage: "npm:^1.0.0" - checksum: 10c0/7de54090e54a674ca173470b55dc1afdee994f2d70d185c80236003efd3fa2b753fff51ffcdda8e2890244c411fd2267529d42c4a50a8303755041ee493e6a04 + "@jest/console": "npm:30.4.1" + "@jest/types": "npm:30.4.1" + "@types/istanbul-lib-coverage": "npm:^2.0.6" + collect-v8-coverage: "npm:^1.0.2" + checksum: 10c0/920fa3fe3cc8b5e11bfe36066d733030f1245865d7cac4862e3783a96f9c0a087fd8073c8cb56e4c87c6fcc97b46e6f828ecd3b10dd8e208f5e1b983fcc5cdb8 languageName: node linkType: hard -"@jest/test-sequencer@npm:30.3.0": - version: 30.3.0 - resolution: "@jest/test-sequencer@npm:30.3.0" +"@jest/test-sequencer@npm:30.4.1": + version: 30.4.1 + resolution: "@jest/test-sequencer@npm:30.4.1" dependencies: - "@jest/test-result": "npm:30.3.0" + "@jest/test-result": "npm:30.4.1" graceful-fs: "npm:^4.2.11" - jest-haste-map: "npm:30.3.0" - slash: "npm:^3.0.0" - checksum: 10c0/698be35e7145e79ea9d66071d4ec255f6cef4b5972b5142d299f3edbcbc0428cadf8ddecc6d21e938c98ed72b73b15a6d5f81e7b8b370aaa130d2f6b26fd017c - languageName: node - linkType: hard - -"@jest/test-sequencer@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/test-sequencer@npm:29.7.0" - dependencies: - "@jest/test-result": "npm:^29.7.0" - graceful-fs: "npm:^4.2.9" - jest-haste-map: "npm:^29.7.0" + jest-haste-map: "npm:30.4.1" slash: "npm:^3.0.0" - checksum: 10c0/593a8c4272797bb5628984486080cbf57aed09c7cfdc0a634e8c06c38c6bef329c46c0016e84555ee55d1cd1f381518cf1890990ff845524c1123720c8c1481b + checksum: 10c0/531b19ffb2358b3b22a56b306359acf66db2073978dd6df8a9522b5b4034ad7540a9cb84bdfebbcb2872686d6d2ab8cabea04ad23ef9d4488cbafd03f7511501 languageName: node linkType: hard @@ -3419,26 +3419,25 @@ __metadata: languageName: node linkType: hard -"@jest/transform@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/transform@npm:29.7.0" +"@jest/transform@npm:30.4.1": + version: 30.4.1 + resolution: "@jest/transform@npm:30.4.1" dependencies: - "@babel/core": "npm:^7.11.6" - "@jest/types": "npm:^29.6.3" - "@jridgewell/trace-mapping": "npm:^0.3.18" - babel-plugin-istanbul: "npm:^6.1.1" - chalk: "npm:^4.0.0" + "@babel/core": "npm:^7.27.4" + "@jest/types": "npm:30.4.1" + "@jridgewell/trace-mapping": "npm:^0.3.25" + babel-plugin-istanbul: "npm:^7.0.1" + chalk: "npm:^4.1.2" convert-source-map: "npm:^2.0.0" fast-json-stable-stringify: "npm:^2.1.0" - graceful-fs: "npm:^4.2.9" - jest-haste-map: "npm:^29.7.0" - jest-regex-util: "npm:^29.6.3" - jest-util: "npm:^29.7.0" - micromatch: "npm:^4.0.4" - pirates: "npm:^4.0.4" + graceful-fs: "npm:^4.2.11" + jest-haste-map: "npm:30.4.1" + jest-regex-util: "npm:30.4.0" + jest-util: "npm:30.4.1" + pirates: "npm:^4.0.7" slash: "npm:^3.0.0" - write-file-atomic: "npm:^4.0.2" - checksum: 10c0/7f4a7f73dcf45dfdf280c7aa283cbac7b6e5a904813c3a93ead7e55873761fc20d5c4f0191d2019004fac6f55f061c82eb3249c2901164ad80e362e7a7ede5a6 + write-file-atomic: "npm:^5.0.1" + checksum: 10c0/194f463f179f6ab3ccd6f4f0f03a117e3c01a7ce098ebf562250aca4c900ed3a9ec08b694227788eabd7cb4e0597f1d0788077c7550ddc679f68a0ad21cc87e0 languageName: node linkType: hard @@ -3457,30 +3456,31 @@ __metadata: languageName: node linkType: hard -"@jest/types@npm:^27.4.2, @jest/types@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/types@npm:27.5.1" +"@jest/types@npm:30.4.1": + version: 30.4.1 + resolution: "@jest/types@npm:30.4.1" dependencies: - "@types/istanbul-lib-coverage": "npm:^2.0.0" - "@types/istanbul-reports": "npm:^3.0.0" + "@jest/pattern": "npm:30.4.0" + "@jest/schemas": "npm:30.4.1" + "@types/istanbul-lib-coverage": "npm:^2.0.6" + "@types/istanbul-reports": "npm:^3.0.4" "@types/node": "npm:*" - "@types/yargs": "npm:^16.0.0" - chalk: "npm:^4.0.0" - checksum: 10c0/4598b302398db0eb77168b75a6c58148ea02cc9b9f21c5d1bbe985c1c9257110a5653cf7b901c3cab87fba231e3fed83633687f1c0903b4bc6939ab2a8452504 + "@types/yargs": "npm:^17.0.33" + chalk: "npm:^4.1.2" + checksum: 10c0/4c79f6dbdb1c7eaab5da255fc696c7cae744759d4020e42da8aa63b37fe55ce594be73075fe1ee5407dd59d7e47975be9f674bfc81e91bae2c89c62d27ba55a1 languageName: node linkType: hard -"@jest/types@npm:^29.5.0, @jest/types@npm:^29.6.3": - version: 29.6.3 - resolution: "@jest/types@npm:29.6.3" +"@jest/types@npm:^27.4.2, @jest/types@npm:^27.5.1": + version: 27.5.1 + resolution: "@jest/types@npm:27.5.1" dependencies: - "@jest/schemas": "npm:^29.6.3" "@types/istanbul-lib-coverage": "npm:^2.0.0" "@types/istanbul-reports": "npm:^3.0.0" "@types/node": "npm:*" - "@types/yargs": "npm:^17.0.8" + "@types/yargs": "npm:^16.0.0" chalk: "npm:^4.0.0" - checksum: 10c0/ea4e493dd3fb47933b8ccab201ae573dcc451f951dc44ed2a86123cd8541b82aa9d2b1031caf9b1080d6673c517e2dcc25a44b2dc4f3fbc37bfc965d444888c0 + checksum: 10c0/4598b302398db0eb77168b75a6c58148ea02cc9b9f21c5d1bbe985c1c9257110a5653cf7b901c3cab87fba231e3fed83633687f1c0903b4bc6939ab2a8452504 languageName: node linkType: hard @@ -3563,7 +3563,7 @@ __metadata: languageName: node linkType: hard -"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.18, @jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25, @jridgewell/trace-mapping@npm:^0.3.9": +"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25, @jridgewell/trace-mapping@npm:^0.3.9": version: 0.3.25 resolution: "@jridgewell/trace-mapping@npm:0.3.25" dependencies: @@ -8253,10 +8253,10 @@ __metadata: "@react-spectrum/theme-default": "npm:^3.5.13" "@swc/helpers": "npm:^0.5.0" "@testing-library/dom": "npm:^10.1.0" - "@testing-library/jest-dom": "npm:^5.16.4" - "@testing-library/react": "npm:^16.0.0" + "@testing-library/jest-dom": "npm:^6.0.0" + "@testing-library/react": "npm:^16.3.0" "@testing-library/user-event": "npm:^14.0.0" - jest: "npm:^29.5.0" + jest: "npm:^30.0.0" react: "npm:^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" react-aria: "npm:^3.47.0" react-dom: "npm:^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" @@ -9837,15 +9837,6 @@ __metadata: languageName: node linkType: hard -"@sinonjs/commons@npm:^2.0.0": - version: 2.0.0 - resolution: "@sinonjs/commons@npm:2.0.0" - dependencies: - type-detect: "npm:4.0.8" - checksum: 10c0/babe3fdfc7dfb810f6918f2ae055032a1c7c18910595f1c6bfda87bb1737c1a57268d4ca78c3d8ad2fa4aae99ff79796fad76be735a5a38ab763c0b3cfad1ae7 - languageName: node - linkType: hard - "@sinonjs/commons@npm:^3.0.1": version: 3.0.1 resolution: "@sinonjs/commons@npm:3.0.1" @@ -9855,15 +9846,6 @@ __metadata: languageName: node linkType: hard -"@sinonjs/fake-timers@npm:^10.0.2": - version: 10.0.2 - resolution: "@sinonjs/fake-timers@npm:10.0.2" - dependencies: - "@sinonjs/commons": "npm:^2.0.0" - checksum: 10c0/24555ed94053319fa18d4efa0923b295a445a00d2515d260b9e4e2b5943bd8b5b55fee85baabb2819a13ca1f57dbc1949265a350f592eef9e2535ec9de711ebc - languageName: node - linkType: hard - "@sinonjs/fake-timers@npm:^15.0.0": version: 15.3.2 resolution: "@sinonjs/fake-timers@npm:15.3.2" @@ -9873,6 +9855,15 @@ __metadata: languageName: node linkType: hard +"@sinonjs/fake-timers@npm:^15.4.0": + version: 15.4.0 + resolution: "@sinonjs/fake-timers@npm:15.4.0" + dependencies: + "@sinonjs/commons": "npm:^3.0.1" + checksum: 10c0/de4522afe0699fa8d3ae9d1715cbaa4b47e518c707bb7988a9ec6c7c67557d9f6df451f6be0338598b984a86f65aab9fab38dd9ce75a3c0ffb801a9500d5b10d + languageName: node + linkType: hard + "@spectrum-css/component-builder@workspace:^, @spectrum-css/component-builder@workspace:packages/@adobe/spectrum-css-builder-temp": version: 0.0.0-use.local resolution: "@spectrum-css/component-builder@workspace:packages/@adobe/spectrum-css-builder-temp" @@ -10430,20 +10421,7 @@ __metadata: languageName: node linkType: hard -"@swc/jest@npm:^0.2.36": - version: 0.2.37 - resolution: "@swc/jest@npm:0.2.37" - dependencies: - "@jest/create-cache-key-function": "npm:^29.7.0" - "@swc/counter": "npm:^0.1.3" - jsonc-parser: "npm:^3.2.0" - peerDependencies: - "@swc/core": "*" - checksum: 10c0/abe10d87610bf7c172aa7ab14c64599a22e48c1f43a09d6e22733f85f25fb98e57cb4bb58b9554e60a3ac8629be559bd967d7a8601a3ceaacad618aecccebec2 - languageName: node - linkType: hard - -"@swc/jest@npm:^0.2.38": +"@swc/jest@npm:^0.2.38, @swc/jest@npm:^0.2.39": version: 0.2.39 resolution: "@swc/jest@npm:0.2.39" dependencies: @@ -10641,20 +10619,17 @@ __metadata: languageName: node linkType: hard -"@testing-library/jest-dom@npm:^5.16.4, @testing-library/jest-dom@npm:^5.16.5": - version: 5.17.0 - resolution: "@testing-library/jest-dom@npm:5.17.0" +"@testing-library/jest-dom@npm:^6.0.0, @testing-library/jest-dom@npm:^6.9.1": + version: 6.9.1 + resolution: "@testing-library/jest-dom@npm:6.9.1" dependencies: - "@adobe/css-tools": "npm:^4.0.1" - "@babel/runtime": "npm:^7.9.2" - "@types/testing-library__jest-dom": "npm:^5.9.1" + "@adobe/css-tools": "npm:^4.4.0" aria-query: "npm:^5.0.0" - chalk: "npm:^3.0.0" css.escape: "npm:^1.5.1" - dom-accessibility-api: "npm:^0.5.6" - lodash: "npm:^4.17.15" + dom-accessibility-api: "npm:^0.6.3" + picocolors: "npm:^1.1.1" redent: "npm:^3.0.0" - checksum: 10c0/24e09c5779ea44644945ec26f2e4e5f48aecfe57d469decf2317a3253a5db28d865c55ad0ea4818d8d1df7572a6486c45daa06fa09644a833a7dd84563881939 + checksum: 10c0/4291ebd2f0f38d14cefac142c56c337941775a5807e2a3d6f1a14c2fbd6be76a18e498ed189e95bedc97d9e8cf1738049bc76c85b5bc5e23fae7c9e10f7b3a12 languageName: node linkType: hard @@ -10673,20 +10648,6 @@ __metadata: languageName: node linkType: hard -"@testing-library/jest-dom@npm:^6.9.1": - version: 6.9.1 - resolution: "@testing-library/jest-dom@npm:6.9.1" - dependencies: - "@adobe/css-tools": "npm:^4.4.0" - aria-query: "npm:^5.0.0" - css.escape: "npm:^1.5.1" - dom-accessibility-api: "npm:^0.6.3" - picocolors: "npm:^1.1.1" - redent: "npm:^3.0.0" - checksum: 10c0/4291ebd2f0f38d14cefac142c56c337941775a5807e2a3d6f1a14c2fbd6be76a18e498ed189e95bedc97d9e8cf1738049bc76c85b5bc5e23fae7c9e10f7b3a12 - languageName: node - linkType: hard - "@testing-library/react@npm:^16.0.0": version: 16.2.0 resolution: "@testing-library/react@npm:16.2.0" @@ -10707,6 +10668,26 @@ __metadata: languageName: node linkType: hard +"@testing-library/react@npm:^16.3.0": + version: 16.3.2 + resolution: "@testing-library/react@npm:16.3.2" + dependencies: + "@babel/runtime": "npm:^7.12.5" + peerDependencies: + "@testing-library/dom": ^10.0.0 + "@types/react": ^18.0.0 || ^19.0.0 + "@types/react-dom": ^18.0.0 || ^19.0.0 + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + checksum: 10c0/f9c7f0915e1b5f7b750e6c7d8b51f091b8ae7ea99bacb761d7b8505ba25de9cfcb749a0f779f1650fb268b499dd79165dc7e1ee0b8b4cb63430d3ddc81ffe044 + languageName: node + linkType: hard + "@testing-library/user-event@npm:14.6.1": version: 14.6.1 resolution: "@testing-library/user-event@npm:14.6.1" @@ -10725,13 +10706,6 @@ __metadata: languageName: node linkType: hard -"@tootallnate/once@npm:2": - version: 2.0.0 - resolution: "@tootallnate/once@npm:2.0.0" - checksum: 10c0/073bfa548026b1ebaf1659eb8961e526be22fa77139b10d60e712f46d2f0f05f4e6c8bec62a087d41088ee9e29faa7f54838568e475ab2f776171003c3920858 - languageName: node - linkType: hard - "@trysound/sax@npm:0.2.0": version: 0.2.0 resolution: "@trysound/sax@npm:0.2.0" @@ -10803,7 +10777,7 @@ __metadata: languageName: node linkType: hard -"@types/babel__core@npm:^7.1.14, @types/babel__core@npm:^7.20.5": +"@types/babel__core@npm:^7.20.5": version: 7.20.5 resolution: "@types/babel__core@npm:7.20.5" dependencies: @@ -10835,7 +10809,7 @@ __metadata: languageName: node linkType: hard -"@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.0.6": +"@types/babel__traverse@npm:*": version: 7.14.2 resolution: "@types/babel__traverse@npm:7.14.2" dependencies: @@ -10961,15 +10935,6 @@ __metadata: languageName: node linkType: hard -"@types/graceful-fs@npm:^4.1.3": - version: 4.1.6 - resolution: "@types/graceful-fs@npm:4.1.6" - dependencies: - "@types/node": "npm:*" - checksum: 10c0/b1d32c5ae7bd52cf60e29df20407904c4312a39612e7ec2ee23c1e3731c1cfe31d97c6941bf6cb52f5f929d50d86d92dd506436b63fafa833181d439b628885e - languageName: node - linkType: hard - "@types/hast@npm:^2.0.0, @types/hast@npm:^2.3.2": version: 2.3.4 resolution: "@types/hast@npm:2.3.4" @@ -11003,11 +10968,11 @@ __metadata: linkType: hard "@types/istanbul-lib-report@npm:*": - version: 1.1.1 - resolution: "@types/istanbul-lib-report@npm:1.1.1" + version: 3.0.3 + resolution: "@types/istanbul-lib-report@npm:3.0.3" dependencies: "@types/istanbul-lib-coverage": "npm:*" - checksum: 10c0/b773aa6adb92cef94b0985fa49d9d8c06f30117b7607426b99a2ab06c0019fcd27844f5ca787956a80c10dccae3f8a3062c818c90bebc299f06dac290d9d367f + checksum: 10c0/247e477bbc1a77248f3c6de5dadaae85ff86ac2d76c5fc6ab1776f54512a745ff2a5f791d22b942e3990ddbd40f3ef5289317c4fca5741bedfaa4f01df89051c languageName: node linkType: hard @@ -11029,7 +10994,7 @@ __metadata: languageName: node linkType: hard -"@types/jest@npm:*, @types/jest@npm:28.1.3": +"@types/jest@npm:28.1.3": version: 28.1.3 resolution: "@types/jest@npm:28.1.3" dependencies: @@ -11049,14 +11014,14 @@ __metadata: languageName: node linkType: hard -"@types/jsdom@npm:^20.0.0": - version: 20.0.1 - resolution: "@types/jsdom@npm:20.0.1" +"@types/jsdom@npm:^21.1.7": + version: 21.1.7 + resolution: "@types/jsdom@npm:21.1.7" dependencies: "@types/node": "npm:*" "@types/tough-cookie": "npm:*" parse5: "npm:^7.0.0" - checksum: 10c0/3d4b2a3eab145674ee6da482607c5e48977869109f0f62560bf91ae1a792c9e847ac7c6aaf243ed2e97333cb3c51aef314ffa54a19ef174b8f9592dfcb836b25 + checksum: 10c0/c0c0025adc2b193e85453eeeea168bb909f0ebad08d6552be7474a407e9c163db8f696dcf1e3cbe8cb9c9d970ba45f4386171794509c1a0fe5d1fed72c91679d languageName: node linkType: hard @@ -11200,13 +11165,6 @@ __metadata: languageName: node linkType: hard -"@types/stack-utils@npm:^2.0.0": - version: 2.0.1 - resolution: "@types/stack-utils@npm:2.0.1" - checksum: 10c0/3327ee919a840ffe907bbd5c1d07dfd79137dd9732d2d466cf717ceec5bb21f66296173c53bb56cff95fae4185b9cd6770df3e9745fe4ba528bbc4975f54d13f - languageName: node - linkType: hard - "@types/stack-utils@npm:^2.0.3": version: 2.0.3 resolution: "@types/stack-utils@npm:2.0.3" @@ -11214,15 +11172,6 @@ __metadata: languageName: node linkType: hard -"@types/testing-library__jest-dom@npm:^5.9.1": - version: 5.9.2 - resolution: "@types/testing-library__jest-dom@npm:5.9.2" - dependencies: - "@types/jest": "npm:*" - checksum: 10c0/81431e8f95854e02a94f9cb54ff8fe0bdad66dc5bd3603b3d51dae01682484fdc4968496edcb2315a734eca6966e172ad450332fcd9e0c89b4279b898744626d - languageName: node - linkType: hard - "@types/tough-cookie@npm:*": version: 4.0.2 resolution: "@types/tough-cookie@npm:4.0.2" @@ -11285,15 +11234,6 @@ __metadata: languageName: node linkType: hard -"@types/yargs@npm:^17.0.8": - version: 17.0.24 - resolution: "@types/yargs@npm:17.0.24" - dependencies: - "@types/yargs-parser": "npm:*" - checksum: 10c0/fbebf57e1d04199e5e7eb0c67a402566fa27177ee21140664e63da826408793d203d262b48f8f41d4a7665126393d2e952a463e960e761226def247d9bbcdbd0 - languageName: node - linkType: hard - "@typescript/native-preview-darwin-arm64@npm:7.0.0-dev.20251223.1": version: 7.0.0-dev.20251223.1 resolution: "@typescript/native-preview-darwin-arm64@npm:7.0.0-dev.20251223.1" @@ -12008,13 +11948,6 @@ __metadata: languageName: node linkType: hard -"abab@npm:^2.0.6": - version: 2.0.6 - resolution: "abab@npm:2.0.6" - checksum: 10c0/0b245c3c3ea2598fe0025abf7cc7bb507b06949d51e8edae5d12c1b847a0a0c09639abcb94788332b4e2044ac4491c1e8f571b51c7826fd4b0bda1685ad4a278 - languageName: node - linkType: hard - "abbrev@npm:1": version: 1.1.1 resolution: "abbrev@npm:1.1.1" @@ -12058,16 +11991,6 @@ __metadata: languageName: node linkType: hard -"acorn-globals@npm:^7.0.0": - version: 7.0.1 - resolution: "acorn-globals@npm:7.0.1" - dependencies: - acorn: "npm:^8.1.0" - acorn-walk: "npm:^8.0.2" - checksum: 10c0/7437f58e92d99292dbebd0e79531af27d706c9f272f31c675d793da6c82d897e75302a8744af13c7f7978a8399840f14a353b60cf21014647f71012982456d2b - languageName: node - linkType: hard - "acorn-jsx@npm:^5.0.0, acorn-jsx@npm:^5.3.2": version: 5.3.2 resolution: "acorn-jsx@npm:5.3.2" @@ -12077,7 +12000,7 @@ __metadata: languageName: node linkType: hard -"acorn-walk@npm:^8.0.2, acorn-walk@npm:^8.1.1": +"acorn-walk@npm:^8.1.1": version: 8.3.3 resolution: "acorn-walk@npm:8.3.3" dependencies: @@ -12086,7 +12009,7 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.0.0, acorn@npm:^8.1.0, acorn@npm:^8.11.0, acorn@npm:^8.12.1, acorn@npm:^8.4.1, acorn@npm:^8.8.1": +"acorn@npm:^8.0.0, acorn@npm:^8.11.0, acorn@npm:^8.12.1, acorn@npm:^8.4.1": version: 8.12.1 resolution: "acorn@npm:8.12.1" bin: @@ -12140,6 +12063,13 @@ __metadata: languageName: node linkType: hard +"agent-base@npm:^7.1.2": + version: 7.1.4 + resolution: "agent-base@npm:7.1.4" + checksum: 10c0/c2c9ab7599692d594b6a161559ada307b7a624fa4c7b03e3afdb5a5e31cd0e53269115b620fcab024c5ac6a6f37fa5eb2e004f076ad30f5f7e6b8b671f7b35fe + languageName: node + linkType: hard + "agent-base@npm:~4.2.1": version: 4.2.1 resolution: "agent-base@npm:4.2.1" @@ -12236,15 +12166,6 @@ __metadata: languageName: node linkType: hard -"ansi-escapes@npm:^4.2.1": - version: 4.3.0 - resolution: "ansi-escapes@npm:4.3.0" - dependencies: - type-fest: "npm:^0.8.1" - checksum: 10c0/2e9dc01e75bc1254abf54d65978dae9627c4729164657b7db673bdd7658f94414af7045cda7cb446607b36894882e2279c946cc57609a234121a968a1d1ae4e3 - languageName: node - linkType: hard - "ansi-escapes@npm:^4.3.2": version: 4.3.2 resolution: "ansi-escapes@npm:4.3.2" @@ -12352,7 +12273,7 @@ __metadata: languageName: node linkType: hard -"anymatch@npm:^3.0.3, anymatch@npm:^3.1.3, anymatch@npm:~3.1.2": +"anymatch@npm:^3.1.3, anymatch@npm:~3.1.2": version: 3.1.3 resolution: "anymatch@npm:3.1.3" dependencies: @@ -12933,37 +12854,20 @@ __metadata: languageName: node linkType: hard -"babel-jest@npm:30.3.0": - version: 30.3.0 - resolution: "babel-jest@npm:30.3.0" +"babel-jest@npm:30.4.1": + version: 30.4.1 + resolution: "babel-jest@npm:30.4.1" dependencies: - "@jest/transform": "npm:30.3.0" + "@jest/transform": "npm:30.4.1" "@types/babel__core": "npm:^7.20.5" babel-plugin-istanbul: "npm:^7.0.1" - babel-preset-jest: "npm:30.3.0" + babel-preset-jest: "npm:30.4.0" chalk: "npm:^4.1.2" graceful-fs: "npm:^4.2.11" slash: "npm:^3.0.0" peerDependencies: "@babel/core": ^7.11.0 || ^8.0.0-0 - checksum: 10c0/5e41e124a404ddb78aa37a20336d7c883feab5ad9c4f4c72ae26db71be2fcca345874b9a7fef97d9c5f64f144a264b247ebde8acfe493578320f314ca581bac3 - languageName: node - linkType: hard - -"babel-jest@npm:^29.7.0": - version: 29.7.0 - resolution: "babel-jest@npm:29.7.0" - dependencies: - "@jest/transform": "npm:^29.7.0" - "@types/babel__core": "npm:^7.1.14" - babel-plugin-istanbul: "npm:^6.1.1" - babel-preset-jest: "npm:^29.6.3" - chalk: "npm:^4.0.0" - graceful-fs: "npm:^4.2.9" - slash: "npm:^3.0.0" - peerDependencies: - "@babel/core": ^7.8.0 - checksum: 10c0/2eda9c1391e51936ca573dd1aedfee07b14c59b33dbe16ef347873ddd777bcf6e2fc739681e9e9661ab54ef84a3109a03725be2ac32cd2124c07ea4401cbe8c1 + checksum: 10c0/339b449011f31dc9eb18d9c49f0bb84e8de284e1107e64159a2f4a432bbd532d6a729774a56b7fbe76f5ddd716a0b4b7ad737265feab23b4d0225489b79a6f72 languageName: node linkType: hard @@ -12976,19 +12880,6 @@ __metadata: languageName: node linkType: hard -"babel-plugin-istanbul@npm:^6.1.1": - version: 6.1.1 - resolution: "babel-plugin-istanbul@npm:6.1.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.0.0" - "@istanbuljs/load-nyc-config": "npm:^1.0.0" - "@istanbuljs/schema": "npm:^0.1.2" - istanbul-lib-instrument: "npm:^5.0.4" - test-exclude: "npm:^6.0.0" - checksum: 10c0/1075657feb705e00fd9463b329921856d3775d9867c5054b449317d39153f8fbcebd3e02ebf00432824e647faff3683a9ca0a941325ef1afe9b3c4dd51b24beb - languageName: node - linkType: hard - "babel-plugin-istanbul@npm:^7.0.1": version: 7.0.1 resolution: "babel-plugin-istanbul@npm:7.0.1" @@ -13002,24 +12893,12 @@ __metadata: languageName: node linkType: hard -"babel-plugin-jest-hoist@npm:30.3.0": - version: 30.3.0 - resolution: "babel-plugin-jest-hoist@npm:30.3.0" +"babel-plugin-jest-hoist@npm:30.4.0": + version: 30.4.0 + resolution: "babel-plugin-jest-hoist@npm:30.4.0" dependencies: "@types/babel__core": "npm:^7.20.5" - checksum: 10c0/5e15900a6487356131e084970f4a9ebe24b702d74930f786e897d4fab90b0987054f66661a3570ea692f429dcd158c2214c97ecf08f7356cbc60029d7b277c74 - languageName: node - linkType: hard - -"babel-plugin-jest-hoist@npm:^29.6.3": - version: 29.6.3 - resolution: "babel-plugin-jest-hoist@npm:29.6.3" - dependencies: - "@babel/template": "npm:^7.3.3" - "@babel/types": "npm:^7.3.3" - "@types/babel__core": "npm:^7.1.14" - "@types/babel__traverse": "npm:^7.0.6" - checksum: 10c0/7e6451caaf7dce33d010b8aafb970e62f1b0c0b57f4978c37b0d457bbcf0874d75a395a102daf0bae0bd14eafb9f6e9a165ee5e899c0a4f1f3bb2e07b304ed2e + checksum: 10c0/1738ed536bb5ff536b4d406b8db7dbbd76cf10f80bb20d902e6efdda79898f045b9a991124d7104d8c398d0bd995d511d57694952645fba0f6250595a45277b0 languageName: node linkType: hard @@ -13088,28 +12967,6 @@ __metadata: languageName: node linkType: hard -"babel-preset-current-node-syntax@npm:^1.0.0": - version: 1.0.1 - resolution: "babel-preset-current-node-syntax@npm:1.0.1" - dependencies: - "@babel/plugin-syntax-async-generators": "npm:^7.8.4" - "@babel/plugin-syntax-bigint": "npm:^7.8.3" - "@babel/plugin-syntax-class-properties": "npm:^7.8.3" - "@babel/plugin-syntax-import-meta": "npm:^7.8.3" - "@babel/plugin-syntax-json-strings": "npm:^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators": "npm:^7.8.3" - "@babel/plugin-syntax-nullish-coalescing-operator": "npm:^7.8.3" - "@babel/plugin-syntax-numeric-separator": "npm:^7.8.3" - "@babel/plugin-syntax-object-rest-spread": "npm:^7.8.3" - "@babel/plugin-syntax-optional-catch-binding": "npm:^7.8.3" - "@babel/plugin-syntax-optional-chaining": "npm:^7.8.3" - "@babel/plugin-syntax-top-level-await": "npm:^7.8.3" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/5ba39a3a0e6c37d25e56a4fb843be632dac98d54706d8a0933f9bcb1a07987a96d55c2b5a6c11788a74063fb2534fe68c1f1dbb6c93626850c785e0938495627 - languageName: node - linkType: hard - "babel-preset-current-node-syntax@npm:^1.2.0": version: 1.2.0 resolution: "babel-preset-current-node-syntax@npm:1.2.0" @@ -13135,27 +12992,15 @@ __metadata: languageName: node linkType: hard -"babel-preset-jest@npm:30.3.0": - version: 30.3.0 - resolution: "babel-preset-jest@npm:30.3.0" +"babel-preset-jest@npm:30.4.0": + version: 30.4.0 + resolution: "babel-preset-jest@npm:30.4.0" dependencies: - babel-plugin-jest-hoist: "npm:30.3.0" + babel-plugin-jest-hoist: "npm:30.4.0" babel-preset-current-node-syntax: "npm:^1.2.0" peerDependencies: "@babel/core": ^7.11.0 || ^8.0.0-beta.1 - checksum: 10c0/a6839a1527d254bf04e82c0cf61a6a2aa283123a74f0a552e6fce462cb990abebab75a13ec3e9c58b09a865d4d2dfbac710c2d3975ae3ce6f2707cb314915c66 - languageName: node - linkType: hard - -"babel-preset-jest@npm:^29.6.3": - version: 29.6.3 - resolution: "babel-preset-jest@npm:29.6.3" - dependencies: - babel-plugin-jest-hoist: "npm:^29.6.3" - babel-preset-current-node-syntax: "npm:^1.0.0" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/ec5fd0276b5630b05f0c14bb97cc3815c6b31600c683ebb51372e54dcb776cff790bdeeabd5b8d01ede375a040337ccbf6a3ccd68d3a34219125945e167ad943 + checksum: 10c0/ca2623aa4d8bf82b1fd01e5724a87cea7f80ff089341cf12415e9ce4b10f74838ecc6c8a48921f421f90bcd44f7929c0ad300146082e2f400253adb97ab5eb3a languageName: node linkType: hard @@ -13536,15 +13381,6 @@ __metadata: languageName: node linkType: hard -"bser@npm:^2.0.0": - version: 2.1.0 - resolution: "bser@npm:2.1.0" - dependencies: - node-int64: "npm:^0.4.0" - checksum: 10c0/88f194be505c7e3be6b055ee68a2c2d43094824401d886781ac4814bf2be8c9155bb828bd40672ea3989c90d8e3a61e4e0ea6ad0ff4bc47ac87605df6eb8cd29 - languageName: node - linkType: hard - "btoa-lite@npm:^1.0.0": version: 1.0.0 resolution: "btoa-lite@npm:1.0.0" @@ -14093,13 +13929,6 @@ __metadata: languageName: node linkType: hard -"ci-info@npm:^3.2.0": - version: 3.3.0 - resolution: "ci-info@npm:3.3.0" - checksum: 10c0/f23ec1b3c4717abb5fb9934fe0ab6db621cf767abd3832f07af2803e4809d21908d8b87321de4b79861dfe8105c08dba1803a9fb6346d5586b0c57db2bfbce3b - languageName: node - linkType: hard - "ci-info@npm:^4.2.0": version: 4.4.0 resolution: "ci-info@npm:4.4.0" @@ -14107,13 +13936,6 @@ __metadata: languageName: node linkType: hard -"cjs-module-lexer@npm:^1.0.0": - version: 1.2.2 - resolution: "cjs-module-lexer@npm:1.2.2" - checksum: 10c0/83330e1feda2e3699b8c305bfa8f841b41822049393f5eefeb574e60bde556e2a251ee9b7971cde0cb47ac4f7823bf4ab4a6005b8471f86ad9f5509eefb66cbd - languageName: node - linkType: hard - "cjs-module-lexer@npm:^2.1.0": version: 2.2.0 resolution: "cjs-module-lexer@npm:2.2.0" @@ -14310,13 +14132,6 @@ __metadata: languageName: node linkType: hard -"collect-v8-coverage@npm:^1.0.0": - version: 1.0.1 - resolution: "collect-v8-coverage@npm:1.0.1" - checksum: 10c0/df8192811a773d10978fd25060124e4228d9a86bab40de3f18df5ce1a3730832351a52ba1c0e3915d5bd638298fc7bc9723760d25f534462746e269a6f0ac91c - languageName: node - linkType: hard - "collect-v8-coverage@npm:^1.0.2": version: 1.0.3 resolution: "collect-v8-coverage@npm:1.0.3" @@ -14941,23 +14756,6 @@ __metadata: languageName: node linkType: hard -"create-jest@npm:^29.7.0": - version: 29.7.0 - resolution: "create-jest@npm:29.7.0" - dependencies: - "@jest/types": "npm:^29.6.3" - chalk: "npm:^4.0.0" - exit: "npm:^0.1.2" - graceful-fs: "npm:^4.2.9" - jest-config: "npm:^29.7.0" - jest-util: "npm:^29.7.0" - prompts: "npm:^2.0.1" - bin: - create-jest: bin/create-jest.js - checksum: 10c0/e7e54c280692470d3398f62a6238fd396327e01c6a0757002833f06d00afc62dd7bfe04ff2b9cd145264460e6b4d1eb8386f2925b7e567f97939843b7b0e812f - languageName: node - linkType: hard - "create-require@npm:^1.1.0": version: 1.1.1 resolution: "create-require@npm:1.1.1" @@ -15145,26 +14943,13 @@ __metadata: languageName: node linkType: hard -"cssom@npm:^0.5.0": - version: 0.5.0 - resolution: "cssom@npm:0.5.0" - checksum: 10c0/8c4121c243baf0678c65dcac29b201ff0067dfecf978de9d5c83b2ff127a8fdefd2bfd54577f5ad8c80ed7d2c8b489ae01c82023545d010c4ecb87683fb403dd - languageName: node - linkType: hard - -"cssom@npm:~0.3.6": - version: 0.3.8 - resolution: "cssom@npm:0.3.8" - checksum: 10c0/d74017b209440822f9e24d8782d6d2e808a8fdd58fa626a783337222fe1c87a518ba944d4c88499031b4786e68772c99dfae616638d71906fe9f203aeaf14411 - languageName: node - linkType: hard - -"cssstyle@npm:^2.3.0": - version: 2.3.0 - resolution: "cssstyle@npm:2.3.0" +"cssstyle@npm:^4.2.1": + version: 4.6.0 + resolution: "cssstyle@npm:4.6.0" dependencies: - cssom: "npm:~0.3.6" - checksum: 10c0/863400da2a458f73272b9a55ba7ff05de40d850f22eb4f37311abebd7eff801cf1cd2fb04c4c92b8c3daed83fe766e52e4112afb7bc88d86c63a9c2256a7d178 + "@asamuzakjp/css-color": "npm:^3.2.0" + rrweb-cssom: "npm:^0.8.0" + checksum: 10c0/71add1b0ffafa1bedbef6855db6189b9523d3320e015a0bf3fbd504760efb9a81e1f1a225228d5fa892ee58e56d06994ca372e7f4e461cda7c4c9985fe075f65 languageName: node linkType: hard @@ -15219,14 +15004,13 @@ __metadata: languageName: node linkType: hard -"data-urls@npm:^3.0.2": - version: 3.0.2 - resolution: "data-urls@npm:3.0.2" +"data-urls@npm:^5.0.0": + version: 5.0.0 + resolution: "data-urls@npm:5.0.0" dependencies: - abab: "npm:^2.0.6" - whatwg-mimetype: "npm:^3.0.0" - whatwg-url: "npm:^11.0.0" - checksum: 10c0/051c3aaaf3e961904f136aab095fcf6dff4db23a7fc759dd8ba7b3e6ba03fc07ef608086caad8ab910d864bd3b5e57d0d2f544725653d77c96a2c971567045f4 + whatwg-mimetype: "npm:^4.0.0" + whatwg-url: "npm:^14.0.0" + checksum: 10c0/1b894d7d41c861f3a4ed2ae9b1c3f0909d4575ada02e36d3d3bc584bdd84278e20709070c79c3b3bff7ac98598cb191eb3e86a89a79ea4ee1ef360e1694f92ad languageName: node linkType: hard @@ -15435,10 +15219,10 @@ __metadata: languageName: node linkType: hard -"decimal.js@npm:^10.4.2": - version: 10.4.3 - resolution: "decimal.js@npm:10.4.3" - checksum: 10c0/6d60206689ff0911f0ce968d40f163304a6c1bc739927758e6efc7921cfa630130388966f16bf6ef6b838cb33679fbe8e7a78a2f3c478afce841fd55ac8fb8ee +"decimal.js@npm:^10.5.0": + version: 10.6.0 + resolution: "decimal.js@npm:10.6.0" + checksum: 10c0/07d69fbcc54167a340d2d97de95f546f9ff1f69d2b45a02fd7a5292412df3cd9eb7e23065e532a318f5474a2e1bccf8392fdf0443ef467f97f3bf8cb0477e5aa languageName: node linkType: hard @@ -15465,18 +15249,6 @@ __metadata: languageName: node linkType: hard -"dedent@npm:^1.0.0": - version: 1.5.3 - resolution: "dedent@npm:1.5.3" - peerDependencies: - babel-plugin-macros: ^3.1.0 - peerDependenciesMeta: - babel-plugin-macros: - optional: true - checksum: 10c0/d94bde6e6f780be4da4fd760288fcf755ec368872f4ac5218197200d86430aeb8d90a003a840bff1c20221188e3f23adced0119cb811c6873c70d0ac66d12832 - languageName: node - linkType: hard - "dedent@npm:^1.6.0": version: 1.7.2 resolution: "dedent@npm:1.7.2" @@ -15510,7 +15282,7 @@ __metadata: languageName: node linkType: hard -"deepmerge@npm:^4.2.2, deepmerge@npm:^4.3.1": +"deepmerge@npm:^4.3.1": version: 4.3.1 resolution: "deepmerge@npm:4.3.1" checksum: 10c0/e53481aaf1aa2c4082b5342be6b6d8ad9dfe387bc92ce197a66dea08bd4265904a087e75e464f14d1347cf2ac8afe1e4c16b266e0561cc5df29382d3c5f80044 @@ -15688,7 +15460,7 @@ __metadata: languageName: node linkType: hard -"detect-newline@npm:^3.0.0, detect-newline@npm:^3.1.0": +"detect-newline@npm:^3.1.0": version: 3.1.0 resolution: "detect-newline@npm:3.1.0" checksum: 10c0/c38cfc8eeb9fda09febb44bcd85e467c970d4e3bf526095394e5a4f18bc26dd0cf6b22c69c1fa9969261521c593836db335c2795218f6d781a512aea2fb8209d @@ -15721,13 +15493,6 @@ __metadata: languageName: node linkType: hard -"diff-sequences@npm:^29.6.3": - version: 29.6.3 - resolution: "diff-sequences@npm:29.6.3" - checksum: 10c0/32e27ac7dbffdf2fb0eb5a84efd98a9ad084fbabd5ac9abb8757c6770d5320d2acd172830b28c4add29bb873d59420601dfc805ac4064330ce59b1adfd0593b2 - languageName: node - linkType: hard - "diff@npm:^4.0.1": version: 4.0.2 resolution: "diff@npm:4.0.2" @@ -15769,7 +15534,7 @@ __metadata: languageName: node linkType: hard -"dom-accessibility-api@npm:^0.5.6, dom-accessibility-api@npm:^0.5.9": +"dom-accessibility-api@npm:^0.5.9": version: 0.5.10 resolution: "dom-accessibility-api@npm:0.5.10" checksum: 10c0/59ef8de881d28181a28c969a976beb89538ce13dce78da1f81f432369c4723f48dd5c2671526eb0276ff320c2e2ee46b84636024c6b668209fd224886f1847f3 @@ -15828,15 +15593,6 @@ __metadata: languageName: node linkType: hard -"domexception@npm:^4.0.0": - version: 4.0.0 - resolution: "domexception@npm:4.0.0" - dependencies: - webidl-conversions: "npm:^7.0.0" - checksum: 10c0/774277cd9d4df033f852196e3c0077a34dbd15a96baa4d166e0e47138a80f4c0bdf0d94e4703e6ff5883cec56bb821a6fff84402d8a498e31de7c87eb932a294 - languageName: node - linkType: hard - "domhandler@npm:^2.3.0": version: 2.4.2 resolution: "domhandler@npm:2.4.2" @@ -16155,6 +15911,13 @@ __metadata: languageName: node linkType: hard +"entities@npm:^6.0.0": + version: 6.0.1 + resolution: "entities@npm:6.0.1" + checksum: 10c0/ed836ddac5acb34341094eb495185d527bd70e8632b6c0d59548cbfa23defdbae70b96f9a405c82904efa421230b5b3fd2283752447d737beffd3f3e6ee74414 + languageName: node + linkType: hard + "env-paths@npm:^1.0.0": version: 1.0.0 resolution: "env-paths@npm:1.0.0" @@ -16633,24 +16396,6 @@ __metadata: languageName: node linkType: hard -"escodegen@npm:^2.0.0": - version: 2.1.0 - resolution: "escodegen@npm:2.1.0" - dependencies: - esprima: "npm:^4.0.1" - estraverse: "npm:^5.2.0" - esutils: "npm:^2.0.2" - source-map: "npm:~0.6.1" - dependenciesMeta: - source-map: - optional: true - bin: - escodegen: bin/escodegen.js - esgenerate: bin/esgenerate.js - checksum: 10c0/e1450a1f75f67d35c061bf0d60888b15f62ab63aef9df1901cffc81cffbbb9e8b3de237c5502cf8613a017c1df3a3003881307c78835a1ab54d8c8d2206e01d3 - languageName: node - linkType: hard - "eslint-import-resolver-node@npm:^0.3.10": version: 0.3.10 resolution: "eslint-import-resolver-node@npm:0.3.10" @@ -16782,7 +16527,7 @@ __metadata: languageName: node linkType: hard -"esprima@npm:^4.0.0, esprima@npm:^4.0.1, esprima@npm:~4.0.0": +"esprima@npm:^4.0.0, esprima@npm:~4.0.0": version: 4.0.1 resolution: "esprima@npm:4.0.1" bin: @@ -16975,7 +16720,7 @@ __metadata: languageName: node linkType: hard -"execa@npm:^5.0.0, execa@npm:^5.1.1": +"execa@npm:^5.1.1": version: 5.1.1 resolution: "execa@npm:5.1.1" dependencies: @@ -17067,16 +16812,17 @@ __metadata: languageName: node linkType: hard -"expect@npm:^29.7.0": - version: 29.7.0 - resolution: "expect@npm:29.7.0" +"expect@npm:30.4.1": + version: 30.4.1 + resolution: "expect@npm:30.4.1" dependencies: - "@jest/expect-utils": "npm:^29.7.0" - jest-get-type: "npm:^29.6.3" - jest-matcher-utils: "npm:^29.7.0" - jest-message-util: "npm:^29.7.0" - jest-util: "npm:^29.7.0" - checksum: 10c0/2eddeace66e68b8d8ee5f7be57f3014b19770caaf6815c7a08d131821da527fb8c8cb7b3dcd7c883d2d3d8d184206a4268984618032d1e4b16dc8d6596475d41 + "@jest/expect-utils": "npm:30.4.1" + "@jest/get-type": "npm:30.1.0" + jest-matcher-utils: "npm:30.4.1" + jest-message-util: "npm:30.4.1" + jest-mock: "npm:30.4.1" + jest-util: "npm:30.4.1" + checksum: 10c0/ad04fbdffac5a2bae186478938a60f737e3aac823db9a80c87f3f390f9f458bddcc454dc3a3997d715706747c6aff928923e6a71db3a221adb89a51cc1582e72 languageName: node linkType: hard @@ -17375,15 +17121,6 @@ __metadata: languageName: node linkType: hard -"fb-watchman@npm:^2.0.0": - version: 2.0.0 - resolution: "fb-watchman@npm:2.0.0" - dependencies: - bser: "npm:^2.0.0" - checksum: 10c0/507f6b48a45d80475f37e7c2ac873934318b44ddcb599470567c9a49682d4d5f6faf5cf14d22fd671165264f0c126ca09189e936c306fd0df1d9d8744908e281 - languageName: node - linkType: hard - "fb-watchman@npm:^2.0.2": version: 2.0.2 resolution: "fb-watchman@npm:2.0.2" @@ -17955,7 +17692,7 @@ __metadata: languageName: node linkType: hard -"fsevents@npm:2.3.2, fsevents@npm:^2.3.2, fsevents@npm:~2.3.2": +"fsevents@npm:2.3.2, fsevents@npm:~2.3.2": version: 2.3.2 resolution: "fsevents@npm:2.3.2" dependencies: @@ -17975,7 +17712,7 @@ __metadata: languageName: node linkType: hard -"fsevents@patch:fsevents@npm%3A2.3.2#optional!builtin, fsevents@patch:fsevents@npm%3A^2.3.2#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin": +"fsevents@patch:fsevents@npm%3A2.3.2#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin": version: 2.3.2 resolution: "fsevents@patch:fsevents@npm%3A2.3.2#optional!builtin::version=2.3.2&hash=df0bf1" dependencies: @@ -18624,7 +18361,7 @@ __metadata: languageName: node linkType: hard -"graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.15, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.3, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.10, graceful-fs@npm:^4.2.11, graceful-fs@npm:^4.2.2, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.8, graceful-fs@npm:^4.2.9": +"graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.15, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.3, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.10, graceful-fs@npm:^4.2.11, graceful-fs@npm:^4.2.2, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.8": version: 4.2.11 resolution: "graceful-fs@npm:4.2.11" checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 @@ -19080,12 +18817,12 @@ __metadata: languageName: node linkType: hard -"html-encoding-sniffer@npm:^3.0.0": - version: 3.0.0 - resolution: "html-encoding-sniffer@npm:3.0.0" +"html-encoding-sniffer@npm:^4.0.0": + version: 4.0.0 + resolution: "html-encoding-sniffer@npm:4.0.0" dependencies: - whatwg-encoding: "npm:^2.0.0" - checksum: 10c0/b17b3b0fb5d061d8eb15121c3b0b536376c3e295ecaf09ba48dd69c6b6c957839db124fe1e2b3f11329753a4ee01aa7dedf63b7677999e86da17fbbdd82c5386 + whatwg-encoding: "npm:^3.1.1" + checksum: 10c0/523398055dc61ac9b34718a719cb4aa691e4166f29187e211e1607de63dc25ac7af52ca7c9aead0c4b3c0415ffecb17326396e1202e2e86ff4bca4c0ee4c6140 languageName: node linkType: hard @@ -19154,18 +18891,7 @@ __metadata: languageName: node linkType: hard -"http-proxy-agent@npm:^5.0.0": - version: 5.0.0 - resolution: "http-proxy-agent@npm:5.0.0" - dependencies: - "@tootallnate/once": "npm:2" - agent-base: "npm:6" - debug: "npm:4" - checksum: 10c0/32a05e413430b2c1e542e5c74b38a9f14865301dd69dff2e53ddb684989440e3d2ce0c4b64d25eb63cf6283e6265ff979a61cf93e3ca3d23047ddfdc8df34a32 - languageName: node - linkType: hard - -"http-proxy-agent@npm:^7.0.0": +"http-proxy-agent@npm:^7.0.0, http-proxy-agent@npm:^7.0.2": version: 7.0.2 resolution: "http-proxy-agent@npm:7.0.2" dependencies: @@ -19240,7 +18966,7 @@ __metadata: languageName: node linkType: hard -"https-proxy-agent@npm:5.0.1, https-proxy-agent@npm:^5.0.1": +"https-proxy-agent@npm:5.0.1": version: 5.0.1 resolution: "https-proxy-agent@npm:5.0.1" dependencies: @@ -19270,6 +18996,16 @@ __metadata: languageName: node linkType: hard +"https-proxy-agent@npm:^7.0.6": + version: 7.0.6 + resolution: "https-proxy-agent@npm:7.0.6" + dependencies: + agent-base: "npm:^7.1.2" + debug: "npm:4" + checksum: 10c0/f729219bc735edb621fa30e6e84e60ee5d00802b8247aac0d7b79b0bd6d4b3294737a337b93b86a0bd9e68099d031858a39260c976dc14cdbba238ba1f8779ac + languageName: node + linkType: hard + "human-signals@npm:^2.1.0": version: 2.1.0 resolution: "human-signals@npm:2.1.0" @@ -19410,18 +19146,6 @@ __metadata: languageName: node linkType: hard -"import-local@npm:^3.0.2": - version: 3.0.2 - resolution: "import-local@npm:3.0.2" - dependencies: - pkg-dir: "npm:^4.2.0" - resolve-cwd: "npm:^3.0.0" - bin: - import-local-fixture: fixtures/cli.js - checksum: 10c0/593ec592c5c2c0849f94b81198077b53e342f02bd7a7cc3f8a3dd5b52f40a37003b3b2922a80b4e7b565c0f7c951a41849a03852c4e68144fff84bf892d129cb - languageName: node - linkType: hard - "import-local@npm:^3.2.0": version: 3.2.0 resolution: "import-local@npm:3.2.0" @@ -19974,7 +19698,7 @@ __metadata: languageName: node linkType: hard -"is-generator-fn@npm:^2.0.0, is-generator-fn@npm:^2.1.0": +"is-generator-fn@npm:^2.1.0": version: 2.1.0 resolution: "is-generator-fn@npm:2.1.0" checksum: 10c0/2957cab387997a466cd0bf5c1b6047bd21ecb32bdcfd8996b15747aa01002c1c88731802f1b3d34ac99f4f6874b626418bd118658cf39380fe5fff32a3af9c4d @@ -20543,19 +20267,6 @@ __metadata: languageName: node linkType: hard -"istanbul-lib-instrument@npm:^5.0.4": - version: 5.2.1 - resolution: "istanbul-lib-instrument@npm:5.2.1" - dependencies: - "@babel/core": "npm:^7.12.3" - "@babel/parser": "npm:^7.14.7" - "@istanbuljs/schema": "npm:^0.1.2" - istanbul-lib-coverage: "npm:^3.2.0" - semver: "npm:^6.3.0" - checksum: 10c0/8a1bdf3e377dcc0d33ec32fe2b6ecacdb1e4358fd0eb923d4326bb11c67622c0ceb99600a680f3dad5d29c66fc1991306081e339b4d43d0b8a2ab2e1d910a6ee - languageName: node - linkType: hard - "istanbul-lib-instrument@npm:^6.0.0": version: 6.0.2 resolution: "istanbul-lib-instrument@npm:6.0.2" @@ -20661,29 +20372,46 @@ __metadata: languageName: node linkType: hard -"jest-changed-files@npm:30.3.0": - version: 30.3.0 - resolution: "jest-changed-files@npm:30.3.0" +"jest-changed-files@npm:30.4.1": + version: 30.4.1 + resolution: "jest-changed-files@npm:30.4.1" dependencies: execa: "npm:^5.1.1" - jest-util: "npm:30.3.0" + jest-util: "npm:30.4.1" p-limit: "npm:^3.1.0" - checksum: 10c0/5a2f9790f8ab7f5804ebbf0fcdd908c40286d602d76abbecc6bea72e7f3c60b77dc8a3d3f5acdddd11653b2574f471a5c126ceda0734bc6a7d607cf145843525 + checksum: 10c0/324bbec3920a7d9ceb1d11872b9f1befe73d152a7ef289243f663bf3b22afe124c2c656ec316e44393f30a83b74a1738b56307a066906fa49b800686fd4d0f04 languageName: node linkType: hard -"jest-changed-files@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-changed-files@npm:29.7.0" +"jest-circus@npm:30.4.2": + version: 30.4.2 + resolution: "jest-circus@npm:30.4.2" dependencies: - execa: "npm:^5.0.0" - jest-util: "npm:^29.7.0" + "@jest/environment": "npm:30.4.1" + "@jest/expect": "npm:30.4.1" + "@jest/test-result": "npm:30.4.1" + "@jest/types": "npm:30.4.1" + "@types/node": "npm:*" + chalk: "npm:^4.1.2" + co: "npm:^4.6.0" + dedent: "npm:^1.6.0" + is-generator-fn: "npm:^2.1.0" + jest-each: "npm:30.4.1" + jest-matcher-utils: "npm:30.4.1" + jest-message-util: "npm:30.4.1" + jest-runtime: "npm:30.4.2" + jest-snapshot: "npm:30.4.1" + jest-util: "npm:30.4.1" p-limit: "npm:^3.1.0" - checksum: 10c0/e071384d9e2f6bb462231ac53f29bff86f0e12394c1b49ccafbad225ce2ab7da226279a8a94f421949920bef9be7ef574fd86aee22e8adfa149be73554ab828b + pretty-format: "npm:30.4.1" + pure-rand: "npm:^7.0.0" + slash: "npm:^3.0.0" + stack-utils: "npm:^2.0.6" + checksum: 10c0/5d99f1336eb249057063a007fabad4ced802501fbaad7ddeea8db9553fa54fbd44d26e71e8bf61a0979d42b3b93a3d920e6f00afa26cdbb70d1e7d0969515d10 languageName: node linkType: hard -"jest-circus@npm:30.3.0, jest-circus@npm:^30.0.4": +"jest-circus@npm:^30.0.4": version: 30.3.0 resolution: "jest-circus@npm:30.3.0" dependencies: @@ -20711,47 +20439,19 @@ __metadata: languageName: node linkType: hard -"jest-circus@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-circus@npm:29.7.0" +"jest-cli@npm:30.4.2": + version: 30.4.2 + resolution: "jest-cli@npm:30.4.2" dependencies: - "@jest/environment": "npm:^29.7.0" - "@jest/expect": "npm:^29.7.0" - "@jest/test-result": "npm:^29.7.0" - "@jest/types": "npm:^29.6.3" - "@types/node": "npm:*" - chalk: "npm:^4.0.0" - co: "npm:^4.6.0" - dedent: "npm:^1.0.0" - is-generator-fn: "npm:^2.0.0" - jest-each: "npm:^29.7.0" - jest-matcher-utils: "npm:^29.7.0" - jest-message-util: "npm:^29.7.0" - jest-runtime: "npm:^29.7.0" - jest-snapshot: "npm:^29.7.0" - jest-util: "npm:^29.7.0" - p-limit: "npm:^3.1.0" - pretty-format: "npm:^29.7.0" - pure-rand: "npm:^6.0.0" - slash: "npm:^3.0.0" - stack-utils: "npm:^2.0.3" - checksum: 10c0/8d15344cf7a9f14e926f0deed64ed190c7a4fa1ed1acfcd81e4cc094d3cc5bf7902ebb7b874edc98ada4185688f90c91e1747e0dfd7ac12463b097968ae74b5e - languageName: node - linkType: hard - -"jest-cli@npm:30.3.0": - version: 30.3.0 - resolution: "jest-cli@npm:30.3.0" - dependencies: - "@jest/core": "npm:30.3.0" - "@jest/test-result": "npm:30.3.0" - "@jest/types": "npm:30.3.0" + "@jest/core": "npm:30.4.2" + "@jest/test-result": "npm:30.4.1" + "@jest/types": "npm:30.4.1" chalk: "npm:^4.1.2" exit-x: "npm:^0.2.2" import-local: "npm:^3.2.0" - jest-config: "npm:30.3.0" - jest-util: "npm:30.3.0" - jest-validate: "npm:30.3.0" + jest-config: "npm:30.4.2" + jest-util: "npm:30.4.1" + jest-validate: "npm:30.4.1" yargs: "npm:^17.7.2" peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 @@ -20760,61 +20460,35 @@ __metadata: optional: true bin: jest: ./bin/jest.js - checksum: 10c0/764d77551e0fb6d666212e89d01be6f7bb1a2b3adb918bba7c5c37593a11b01cf2af645506c2b6438335cfc79bfcf41bfd4680958d8ca751851752a7c66269d3 - languageName: node - linkType: hard - -"jest-cli@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-cli@npm:29.7.0" - dependencies: - "@jest/core": "npm:^29.7.0" - "@jest/test-result": "npm:^29.7.0" - "@jest/types": "npm:^29.6.3" - chalk: "npm:^4.0.0" - create-jest: "npm:^29.7.0" - exit: "npm:^0.1.2" - import-local: "npm:^3.0.2" - jest-config: "npm:^29.7.0" - jest-util: "npm:^29.7.0" - jest-validate: "npm:^29.7.0" - yargs: "npm:^17.3.1" - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - bin: - jest: bin/jest.js - checksum: 10c0/a658fd55050d4075d65c1066364595962ead7661711495cfa1dfeecf3d6d0a8ffec532f3dbd8afbb3e172dd5fd2fb2e813c5e10256e7cf2fea766314942fb43a + checksum: 10c0/a036a1bf06ce7d5fed644a518c4a4ccf60c5fe5f3d96d143973048e6690c4a28a4f97fa3275d90ca236430a1b2a7c10544e7e190a4f2edfdf0a4e6daf1f6a384 languageName: node linkType: hard -"jest-config@npm:30.3.0": - version: 30.3.0 - resolution: "jest-config@npm:30.3.0" +"jest-config@npm:30.4.2": + version: 30.4.2 + resolution: "jest-config@npm:30.4.2" dependencies: "@babel/core": "npm:^7.27.4" "@jest/get-type": "npm:30.1.0" - "@jest/pattern": "npm:30.0.1" - "@jest/test-sequencer": "npm:30.3.0" - "@jest/types": "npm:30.3.0" - babel-jest: "npm:30.3.0" + "@jest/pattern": "npm:30.4.0" + "@jest/test-sequencer": "npm:30.4.1" + "@jest/types": "npm:30.4.1" + babel-jest: "npm:30.4.1" chalk: "npm:^4.1.2" ci-info: "npm:^4.2.0" deepmerge: "npm:^4.3.1" glob: "npm:^10.5.0" graceful-fs: "npm:^4.2.11" - jest-circus: "npm:30.3.0" - jest-docblock: "npm:30.2.0" - jest-environment-node: "npm:30.3.0" - jest-regex-util: "npm:30.0.1" - jest-resolve: "npm:30.3.0" - jest-runner: "npm:30.3.0" - jest-util: "npm:30.3.0" - jest-validate: "npm:30.3.0" + jest-circus: "npm:30.4.2" + jest-docblock: "npm:30.4.0" + jest-environment-node: "npm:30.4.1" + jest-regex-util: "npm:30.4.0" + jest-resolve: "npm:30.4.1" + jest-runner: "npm:30.4.2" + jest-util: "npm:30.4.1" + jest-validate: "npm:30.4.1" parse-json: "npm:^5.2.0" - pretty-format: "npm:30.3.0" + pretty-format: "npm:30.4.1" slash: "npm:^3.0.0" strip-json-comments: "npm:^3.1.1" peerDependencies: @@ -20828,45 +20502,7 @@ __metadata: optional: true ts-node: optional: true - checksum: 10c0/157607e5ac5e83924df97d992fbd40a1540af07c5a7be296fae49455b3729687847304f3b4a9112e7da17593b76cec3453cd55c1ecd4334f7318f2489d7d10a1 - languageName: node - linkType: hard - -"jest-config@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-config@npm:29.7.0" - dependencies: - "@babel/core": "npm:^7.11.6" - "@jest/test-sequencer": "npm:^29.7.0" - "@jest/types": "npm:^29.6.3" - babel-jest: "npm:^29.7.0" - chalk: "npm:^4.0.0" - ci-info: "npm:^3.2.0" - deepmerge: "npm:^4.2.2" - glob: "npm:^7.1.3" - graceful-fs: "npm:^4.2.9" - jest-circus: "npm:^29.7.0" - jest-environment-node: "npm:^29.7.0" - jest-get-type: "npm:^29.6.3" - jest-regex-util: "npm:^29.6.3" - jest-resolve: "npm:^29.7.0" - jest-runner: "npm:^29.7.0" - jest-util: "npm:^29.7.0" - jest-validate: "npm:^29.7.0" - micromatch: "npm:^4.0.4" - parse-json: "npm:^5.2.0" - pretty-format: "npm:^29.7.0" - slash: "npm:^3.0.0" - strip-json-comments: "npm:^3.1.1" - peerDependencies: - "@types/node": "*" - ts-node: ">=9.0.0" - peerDependenciesMeta: - "@types/node": - optional: true - ts-node: - optional: true - checksum: 10c0/bab23c2eda1fff06e0d104b00d6adfb1d1aabb7128441899c9bff2247bd26710b050a5364281ce8d52b46b499153bf7e3ee88b19831a8f3451f1477a0246a0f1 + checksum: 10c0/18300b1dc54a4bfb5d1db6c10aeb01b6c64736224e3f60d119da9504d49cbab5a76d789f38c44af7d168418463356db6843ad7e44f249c63ce7f409758eba0c6 languageName: node linkType: hard @@ -20882,6 +20518,18 @@ __metadata: languageName: node linkType: hard +"jest-diff@npm:30.4.1": + version: 30.4.1 + resolution: "jest-diff@npm:30.4.1" + dependencies: + "@jest/diff-sequences": "npm:30.4.0" + "@jest/get-type": "npm:30.1.0" + chalk: "npm:^4.1.2" + pretty-format: "npm:30.4.1" + checksum: 10c0/787e11f0ea27e94815479d6c5415e4173da1e74bede34c1515b8515fc9d1fe053e2ad25a3c31f9998a7292c186a0e4d395ed82e0e149d57d7708ee6759b442e9 + languageName: node + linkType: hard + "jest-diff@npm:^28.1.3": version: 28.1.3 resolution: "jest-diff@npm:28.1.3" @@ -20894,18 +20542,6 @@ __metadata: languageName: node linkType: hard -"jest-diff@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-diff@npm:29.7.0" - dependencies: - chalk: "npm:^4.0.0" - diff-sequences: "npm:^29.6.3" - jest-get-type: "npm:^29.6.3" - pretty-format: "npm:^29.7.0" - checksum: 10c0/89a4a7f182590f56f526443dde69acefb1f2f0c9e59253c61d319569856c4931eae66b8a3790c443f529267a0ddba5ba80431c585deed81827032b2b2a1fc999 - languageName: node - linkType: hard - "jest-docblock@npm:30.2.0": version: 30.2.0 resolution: "jest-docblock@npm:30.2.0" @@ -20915,12 +20551,12 @@ __metadata: languageName: node linkType: hard -"jest-docblock@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-docblock@npm:29.7.0" +"jest-docblock@npm:30.4.0": + version: 30.4.0 + resolution: "jest-docblock@npm:30.4.0" dependencies: - detect-newline: "npm:^3.0.0" - checksum: 10c0/d932a8272345cf6b6142bb70a2bb63e0856cc0093f082821577ea5bdf4643916a98744dfc992189d2b1417c38a11fa42466f6111526bc1fb81366f56410f3be9 + detect-newline: "npm:^3.1.0" + checksum: 10c0/1fe1c971207e1b905e4f23d98e508a03ae631337e9ffa347ff2f6df81a1d75ced7ed3e52a809fad75fb8a8cd55b6bda4483bc124e5e1d7529eeb4ef76b29e913 languageName: node linkType: hard @@ -20937,37 +20573,32 @@ __metadata: languageName: node linkType: hard -"jest-each@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-each@npm:29.7.0" +"jest-each@npm:30.4.1": + version: 30.4.1 + resolution: "jest-each@npm:30.4.1" dependencies: - "@jest/types": "npm:^29.6.3" - chalk: "npm:^4.0.0" - jest-get-type: "npm:^29.6.3" - jest-util: "npm:^29.7.0" - pretty-format: "npm:^29.7.0" - checksum: 10c0/f7f9a90ebee80cc688e825feceb2613627826ac41ea76a366fa58e669c3b2403d364c7c0a74d862d469b103c843154f8456d3b1c02b487509a12afa8b59edbb4 + "@jest/get-type": "npm:30.1.0" + "@jest/types": "npm:30.4.1" + chalk: "npm:^4.1.2" + jest-util: "npm:30.4.1" + pretty-format: "npm:30.4.1" + checksum: 10c0/41bc1cec23901cb0c7d8f547a70574fffca8cc16a1660ed97645bf3b61f4e6151aaa58bb14ce55a3cd9f5a63a2cc782a39366caf3304a2159d1e3cc5ae79a9e4 languageName: node linkType: hard -"jest-environment-jsdom@npm:^29.5.0": - version: 29.5.0 - resolution: "jest-environment-jsdom@npm:29.5.0" +"jest-environment-jsdom@npm:^30.0.0": + version: 30.4.1 + resolution: "jest-environment-jsdom@npm:30.4.1" dependencies: - "@jest/environment": "npm:^29.5.0" - "@jest/fake-timers": "npm:^29.5.0" - "@jest/types": "npm:^29.5.0" - "@types/jsdom": "npm:^20.0.0" - "@types/node": "npm:*" - jest-mock: "npm:^29.5.0" - jest-util: "npm:^29.5.0" - jsdom: "npm:^20.0.0" + "@jest/environment": "npm:30.4.1" + "@jest/environment-jsdom-abstract": "npm:30.4.1" + jsdom: "npm:^26.1.0" peerDependencies: - canvas: ^2.5.0 + canvas: ^3.0.0 peerDependenciesMeta: canvas: optional: true - checksum: 10c0/972a1bdfb1d508a359951ec11ade5dfad7cfabea0ab9f7746737ba10e0c6381e34f2b4acb03c7e5eb623611813310dfb0775eb0607c5537b7618234d04aab2ac + checksum: 10c0/fec7ab60f4072c3495c5c05d272c578573df184feabf8da1bd210ad9af957166e2ded215727e516f856437f1403b2a0ad3f3efe0c2a92225bbf4197e24d7cea1 languageName: node linkType: hard @@ -20986,17 +20617,18 @@ __metadata: languageName: node linkType: hard -"jest-environment-node@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-environment-node@npm:29.7.0" +"jest-environment-node@npm:30.4.1": + version: 30.4.1 + resolution: "jest-environment-node@npm:30.4.1" dependencies: - "@jest/environment": "npm:^29.7.0" - "@jest/fake-timers": "npm:^29.7.0" - "@jest/types": "npm:^29.6.3" + "@jest/environment": "npm:30.4.1" + "@jest/fake-timers": "npm:30.4.1" + "@jest/types": "npm:30.4.1" "@types/node": "npm:*" - jest-mock: "npm:^29.7.0" - jest-util: "npm:^29.7.0" - checksum: 10c0/61f04fec077f8b1b5c1a633e3612fc0c9aa79a0ab7b05600683428f1e01a4d35346c474bde6f439f9fcc1a4aa9a2861ff852d079a43ab64b02105d1004b2592b + jest-mock: "npm:30.4.1" + jest-util: "npm:30.4.1" + jest-validate: "npm:30.4.1" + checksum: 10c0/d8d6bb22bfd280f077b5856558d9d7112c48fd3bae6eda9b76694f1c8e1be783a725686a137437d180c9d49e6b37386c8e342e0b8e5bfcb6526dee9c10cc31ec languageName: node linkType: hard @@ -21007,13 +20639,6 @@ __metadata: languageName: node linkType: hard -"jest-get-type@npm:^29.6.3": - version: 29.6.3 - resolution: "jest-get-type@npm:29.6.3" - checksum: 10c0/552e7a97a983d3c2d4e412a44eb7de0430ff773dd99f7500962c268d6dfbfa431d7d08f919c9d960530e5f7f78eb47f267ad9b318265e5092b3ff9ede0db7c2b - languageName: node - linkType: hard - "jest-haste-map@npm:30.3.0": version: 30.3.0 resolution: "jest-haste-map@npm:30.3.0" @@ -21036,50 +20661,49 @@ __metadata: languageName: node linkType: hard -"jest-haste-map@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-haste-map@npm:29.7.0" +"jest-haste-map@npm:30.4.1": + version: 30.4.1 + resolution: "jest-haste-map@npm:30.4.1" dependencies: - "@jest/types": "npm:^29.6.3" - "@types/graceful-fs": "npm:^4.1.3" + "@jest/types": "npm:30.4.1" "@types/node": "npm:*" - anymatch: "npm:^3.0.3" - fb-watchman: "npm:^2.0.0" - fsevents: "npm:^2.3.2" - graceful-fs: "npm:^4.2.9" - jest-regex-util: "npm:^29.6.3" - jest-util: "npm:^29.7.0" - jest-worker: "npm:^29.7.0" - micromatch: "npm:^4.0.4" + anymatch: "npm:^3.1.3" + fb-watchman: "npm:^2.0.2" + fsevents: "npm:^2.3.3" + graceful-fs: "npm:^4.2.11" + jest-regex-util: "npm:30.4.0" + jest-util: "npm:30.4.1" + jest-worker: "npm:30.4.1" + picomatch: "npm:^4.0.3" walker: "npm:^1.0.8" dependenciesMeta: fsevents: optional: true - checksum: 10c0/2683a8f29793c75a4728787662972fedd9267704c8f7ef9d84f2beed9a977f1cf5e998c07b6f36ba5603f53cb010c911fe8cd0ac9886e073fe28ca66beefd30c + checksum: 10c0/1350c24952bbf31c86cb1ed4e2e5edd4766a93e2be8816c4648c05463d06cfae89f3c73732f9274fdb626fdfdfe6605ed6f259b6c21257df536a6379d4b9a5e7 languageName: node linkType: hard -"jest-junit@npm:^15.0.0": - version: 15.0.0 - resolution: "jest-junit@npm:15.0.0" +"jest-junit@npm:^16.0.0": + version: 16.0.0 + resolution: "jest-junit@npm:16.0.0" dependencies: mkdirp: "npm:^1.0.4" strip-ansi: "npm:^6.0.1" uuid: "npm:^8.3.2" xml: "npm:^1.0.1" - checksum: 10c0/8320cb9d5597278f9fbb162c0d41aab9b0834b80a1d42de58cf33ff0ca51b4ee2dff8d6ed071aaec58eafe53bf1ee35ebd1743b28e912b079efcdf5097e76fbb + checksum: 10c0/d813d4d142341c2b51b634db7ad6ceb9849514cb58f96ec5e7e4cf4031a557133490452710c2d9dec9b1dd546334d9ca663e042d3070c3e8f102ce6217bd8e2e languageName: node linkType: hard -"jest-junit@npm:^16.0.0": - version: 16.0.0 - resolution: "jest-junit@npm:16.0.0" +"jest-junit@npm:^17.0.0": + version: 17.0.0 + resolution: "jest-junit@npm:17.0.0" dependencies: mkdirp: "npm:^1.0.4" strip-ansi: "npm:^6.0.1" - uuid: "npm:^8.3.2" + uuid: "npm:^14.0.0" xml: "npm:^1.0.1" - checksum: 10c0/d813d4d142341c2b51b634db7ad6ceb9849514cb58f96ec5e7e4cf4031a557133490452710c2d9dec9b1dd546334d9ca663e042d3070c3e8f102ce6217bd8e2e + checksum: 10c0/24206792c48064a474cb13deba5edac6212667065f79dc024677cb6f34615b96991ed231cb61846fd32eca2d5f97011e5dfb714d8a30b583f5e584b41b0878da languageName: node linkType: hard @@ -21093,13 +20717,13 @@ __metadata: languageName: node linkType: hard -"jest-leak-detector@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-leak-detector@npm:29.7.0" +"jest-leak-detector@npm:30.4.1": + version: 30.4.1 + resolution: "jest-leak-detector@npm:30.4.1" dependencies: - jest-get-type: "npm:^29.6.3" - pretty-format: "npm:^29.7.0" - checksum: 10c0/71bb9f77fc489acb842a5c7be030f2b9acb18574dc9fb98b3100fc57d422b1abc55f08040884bd6e6dbf455047a62f7eaff12aa4058f7cbdc11558718ca6a395 + "@jest/get-type": "npm:30.1.0" + pretty-format: "npm:30.4.1" + checksum: 10c0/57256ac08f12186e3ed1687126b8d75a12de9c4ffa959ff41322e9ba5f93e3ed8af91dc36bc4d59f77cef6d4008bcf5a3e646cdd950743898576aec8dbae6778 languageName: node linkType: hard @@ -21115,36 +20739,27 @@ __metadata: languageName: node linkType: hard -"jest-matcher-utils@npm:^28.0.0": - version: 28.1.3 - resolution: "jest-matcher-utils@npm:28.1.3" - dependencies: - chalk: "npm:^4.0.0" - jest-diff: "npm:^28.1.3" - jest-get-type: "npm:^28.0.2" - pretty-format: "npm:^28.1.3" - checksum: 10c0/026fbe664cfdaed5a5c9facfc86ccc9bed3718a7d1fe061e355eb6158019a77f74e9b843bc99f9a467966cbebe60bde8b43439174cbf64997d4ad404f8f809d0 - languageName: node - linkType: hard - -"jest-matcher-utils@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-matcher-utils@npm:29.7.0" +"jest-matcher-utils@npm:30.4.1": + version: 30.4.1 + resolution: "jest-matcher-utils@npm:30.4.1" dependencies: - chalk: "npm:^4.0.0" - jest-diff: "npm:^29.7.0" - jest-get-type: "npm:^29.6.3" - pretty-format: "npm:^29.7.0" - checksum: 10c0/0d0e70b28fa5c7d4dce701dc1f46ae0922102aadc24ed45d594dd9b7ae0a8a6ef8b216718d1ab79e451291217e05d4d49a82666e1a3cc2b428b75cd9c933244e + "@jest/get-type": "npm:30.1.0" + chalk: "npm:^4.1.2" + jest-diff: "npm:30.4.1" + pretty-format: "npm:30.4.1" + checksum: 10c0/ddbb0c7075def27ba30160883c327cb3fd13f561f5789d00a1edca1b48b0651f8ea23a1c51bcfcb6413a68c47d658bcf47a34701b8a39ce135dd28d87a3117af languageName: node linkType: hard -"jest-matchmedia-mock@npm:^1.1.0": - version: 1.1.0 - resolution: "jest-matchmedia-mock@npm:1.1.0" - peerDependencies: - jest: ">=13" - checksum: 10c0/600b0adffca6fd9b5fe0dc499960471a852f5d442b5bd9b7cc29bb461cc91c3e606e79bfde0827c27e7f07b476e04a1df7d3939931042d26ebc262bb45bcca2b +"jest-matcher-utils@npm:^28.0.0": + version: 28.1.3 + resolution: "jest-matcher-utils@npm:28.1.3" + dependencies: + chalk: "npm:^4.0.0" + jest-diff: "npm:^28.1.3" + jest-get-type: "npm:^28.0.2" + pretty-format: "npm:^28.1.3" + checksum: 10c0/026fbe664cfdaed5a5c9facfc86ccc9bed3718a7d1fe061e355eb6158019a77f74e9b843bc99f9a467966cbebe60bde8b43439174cbf64997d4ad404f8f809d0 languageName: node linkType: hard @@ -21165,20 +20780,21 @@ __metadata: languageName: node linkType: hard -"jest-message-util@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-message-util@npm:29.7.0" +"jest-message-util@npm:30.4.1": + version: 30.4.1 + resolution: "jest-message-util@npm:30.4.1" dependencies: - "@babel/code-frame": "npm:^7.12.13" - "@jest/types": "npm:^29.6.3" - "@types/stack-utils": "npm:^2.0.0" - chalk: "npm:^4.0.0" - graceful-fs: "npm:^4.2.9" - micromatch: "npm:^4.0.4" - pretty-format: "npm:^29.7.0" + "@babel/code-frame": "npm:^7.27.1" + "@jest/types": "npm:30.4.1" + "@types/stack-utils": "npm:^2.0.3" + chalk: "npm:^4.1.2" + graceful-fs: "npm:^4.2.11" + jest-util: "npm:30.4.1" + picomatch: "npm:^4.0.3" + pretty-format: "npm:30.4.1" slash: "npm:^3.0.0" - stack-utils: "npm:^2.0.3" - checksum: 10c0/850ae35477f59f3e6f27efac5215f706296e2104af39232bb14e5403e067992afb5c015e87a9243ec4d9df38525ef1ca663af9f2f4766aa116f127247008bd22 + stack-utils: "npm:^2.0.6" + checksum: 10c0/ae7427544e042bc1c14abf3c0dbe8b83d0dbec22a9a5efefaca5b8ccb6b9bf391abe732e6f2117ca995c6889bfe1be35c78cec75e5ea0a50e28cffe1ba6f9fdf languageName: node linkType: hard @@ -21193,36 +20809,24 @@ __metadata: languageName: node linkType: hard -"jest-mock@npm:^27.3.0": - version: 27.5.1 - resolution: "jest-mock@npm:27.5.1" +"jest-mock@npm:30.4.1": + version: 30.4.1 + resolution: "jest-mock@npm:30.4.1" dependencies: - "@jest/types": "npm:^27.5.1" + "@jest/types": "npm:30.4.1" "@types/node": "npm:*" - checksum: 10c0/6ad58454b37ee3f726930b07efbf40a7c79d2d2d9c7b226708b4b550bc0904de93bcacf714105d11952a5c0bc855e5d59145c8c9dbbb4e69b46e7367abf53b52 + jest-util: "npm:30.4.1" + checksum: 10c0/5185a41255285c1634c5d85dda037afaaadfc12793b3293c9e253a30bb67449f8df968447f830abb9cf7a52e63694e6734680130e8085ce119056280890bf6fc languageName: node linkType: hard -"jest-mock@npm:^29.5.0, jest-mock@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-mock@npm:29.7.0" +"jest-mock@npm:^27.3.0": + version: 27.5.1 + resolution: "jest-mock@npm:27.5.1" dependencies: - "@jest/types": "npm:^29.6.3" + "@jest/types": "npm:^27.5.1" "@types/node": "npm:*" - jest-util: "npm:^29.7.0" - checksum: 10c0/7b9f8349ee87695a309fe15c46a74ab04c853369e5c40952d68061d9dc3159a0f0ed73e215f81b07ee97a9faaf10aebe5877a9d6255068a0977eae6a9ff1d5ac - languageName: node - linkType: hard - -"jest-pnp-resolver@npm:^1.2.2": - version: 1.2.2 - resolution: "jest-pnp-resolver@npm:1.2.2" - peerDependencies: - jest-resolve: "*" - peerDependenciesMeta: - jest-resolve: - optional: true - checksum: 10c0/f6ef6193f7f015830aea3a13a4fd9f53a60746bbaa2d56d18af4afd26ed1b527039c466c8d2447f68b149db8a912b9493a727f29b809ff883b8b5daec16e98ce + checksum: 10c0/6ad58454b37ee3f726930b07efbf40a7c79d2d2d9c7b226708b4b550bc0904de93bcacf714105d11952a5c0bc855e5d59145c8c9dbbb4e69b46e7367abf53b52 languageName: node linkType: hard @@ -21263,30 +20867,20 @@ __metadata: languageName: node linkType: hard -"jest-regex-util@npm:^29.6.3": - version: 29.6.3 - resolution: "jest-regex-util@npm:29.6.3" - checksum: 10c0/4e33fb16c4f42111159cafe26397118dcfc4cf08bc178a67149fb05f45546a91928b820894572679d62559839d0992e21080a1527faad65daaae8743a5705a3b - languageName: node - linkType: hard - -"jest-resolve-dependencies@npm:30.3.0": - version: 30.3.0 - resolution: "jest-resolve-dependencies@npm:30.3.0" - dependencies: - jest-regex-util: "npm:30.0.1" - jest-snapshot: "npm:30.3.0" - checksum: 10c0/25dde0c8c050bc3437332f37ab87484f597596b80ece77a93e4da2b466b42e45cc5ad748270c1477587536de15eea1ffe83a32638e824b120830c3a87c9a5b71 +"jest-regex-util@npm:30.4.0": + version: 30.4.0 + resolution: "jest-regex-util@npm:30.4.0" + checksum: 10c0/fe7426f67b54d38bed8e9d6e6a099d63d72f41f5bf65b922d9d03fedcb55c614b45657207632f6ee22d0a59d8d11327891f258d23f68a58912fcdb0f7db48435 languageName: node linkType: hard -"jest-resolve-dependencies@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-resolve-dependencies@npm:29.7.0" +"jest-resolve-dependencies@npm:30.4.2": + version: 30.4.2 + resolution: "jest-resolve-dependencies@npm:30.4.2" dependencies: - jest-regex-util: "npm:^29.6.3" - jest-snapshot: "npm:^29.7.0" - checksum: 10c0/b6e9ad8ae5b6049474118ea6441dfddd385b6d1fc471db0136f7c8fbcfe97137a9665e4f837a9f49f15a29a1deb95a14439b7aec812f3f99d08f228464930f0d + jest-regex-util: "npm:30.4.0" + jest-snapshot: "npm:30.4.1" + checksum: 10c0/4101afabd2a4ef4e6c82bf82ea145286c1238373f7611938e8d47ddcf5aaa6e10af365436a934b7af194451e351774829cb021ac73f857b4873dcccc7aabb616 languageName: node linkType: hard @@ -21306,24 +20900,53 @@ __metadata: languageName: node linkType: hard -"jest-resolve@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-resolve@npm:29.7.0" +"jest-resolve@npm:30.4.1": + version: 30.4.1 + resolution: "jest-resolve@npm:30.4.1" dependencies: - chalk: "npm:^4.0.0" - graceful-fs: "npm:^4.2.9" - jest-haste-map: "npm:^29.7.0" - jest-pnp-resolver: "npm:^1.2.2" - jest-util: "npm:^29.7.0" - jest-validate: "npm:^29.7.0" - resolve: "npm:^1.20.0" - resolve.exports: "npm:^2.0.0" + chalk: "npm:^4.1.2" + graceful-fs: "npm:^4.2.11" + jest-haste-map: "npm:30.4.1" + jest-pnp-resolver: "npm:^1.2.3" + jest-util: "npm:30.4.1" + jest-validate: "npm:30.4.1" slash: "npm:^3.0.0" - checksum: 10c0/59da5c9c5b50563e959a45e09e2eace783d7f9ac0b5dcc6375dea4c0db938d2ebda97124c8161310082760e8ebbeff9f6b177c15ca2f57fb424f637a5d2adb47 + unrs-resolver: "npm:^1.7.11" + checksum: 10c0/0a99ef4f4fd7b3678d58a5e1cf8f0b5ec1997cdba21f5d66a8b26353d57a226f8e6a5fffc450c8836e90ab0e20d5e7935d0dea939d9a9b6a08781b9a7413184c + languageName: node + linkType: hard + +"jest-runner@npm:30.4.2": + version: 30.4.2 + resolution: "jest-runner@npm:30.4.2" + dependencies: + "@jest/console": "npm:30.4.1" + "@jest/environment": "npm:30.4.1" + "@jest/test-result": "npm:30.4.1" + "@jest/transform": "npm:30.4.1" + "@jest/types": "npm:30.4.1" + "@types/node": "npm:*" + chalk: "npm:^4.1.2" + emittery: "npm:^0.13.1" + exit-x: "npm:^0.2.2" + graceful-fs: "npm:^4.2.11" + jest-docblock: "npm:30.4.0" + jest-environment-node: "npm:30.4.1" + jest-haste-map: "npm:30.4.1" + jest-leak-detector: "npm:30.4.1" + jest-message-util: "npm:30.4.1" + jest-resolve: "npm:30.4.1" + jest-runtime: "npm:30.4.2" + jest-util: "npm:30.4.1" + jest-watcher: "npm:30.4.1" + jest-worker: "npm:30.4.1" + p-limit: "npm:^3.1.0" + source-map-support: "npm:0.5.13" + checksum: 10c0/339e630fb1a7db52e208ed9f12f722122733fe9a450d9bd83c0fccc10fbc5142a8808f624c41ab1e25833af02f9c3eca85561554b75a5b3ad75b4a226f72c5cf languageName: node linkType: hard -"jest-runner@npm:30.3.0, jest-runner@npm:^30.0.4": +"jest-runner@npm:^30.0.4": version: 30.3.0 resolution: "jest-runner@npm:30.3.0" dependencies: @@ -21353,35 +20976,6 @@ __metadata: languageName: node linkType: hard -"jest-runner@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-runner@npm:29.7.0" - dependencies: - "@jest/console": "npm:^29.7.0" - "@jest/environment": "npm:^29.7.0" - "@jest/test-result": "npm:^29.7.0" - "@jest/transform": "npm:^29.7.0" - "@jest/types": "npm:^29.6.3" - "@types/node": "npm:*" - chalk: "npm:^4.0.0" - emittery: "npm:^0.13.1" - graceful-fs: "npm:^4.2.9" - jest-docblock: "npm:^29.7.0" - jest-environment-node: "npm:^29.7.0" - jest-haste-map: "npm:^29.7.0" - jest-leak-detector: "npm:^29.7.0" - jest-message-util: "npm:^29.7.0" - jest-resolve: "npm:^29.7.0" - jest-runtime: "npm:^29.7.0" - jest-util: "npm:^29.7.0" - jest-watcher: "npm:^29.7.0" - jest-worker: "npm:^29.7.0" - p-limit: "npm:^3.1.0" - source-map-support: "npm:0.5.13" - checksum: 10c0/2194b4531068d939f14c8d3274fe5938b77fa73126aedf9c09ec9dec57d13f22c72a3b5af01ac04f5c1cf2e28d0ac0b4a54212a61b05f10b5d6b47f2a1097bb4 - languageName: node - linkType: hard - "jest-runtime@npm:30.3.0": version: 30.3.0 resolution: "jest-runtime@npm:30.3.0" @@ -21412,33 +21006,33 @@ __metadata: languageName: node linkType: hard -"jest-runtime@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-runtime@npm:29.7.0" +"jest-runtime@npm:30.4.2": + version: 30.4.2 + resolution: "jest-runtime@npm:30.4.2" dependencies: - "@jest/environment": "npm:^29.7.0" - "@jest/fake-timers": "npm:^29.7.0" - "@jest/globals": "npm:^29.7.0" - "@jest/source-map": "npm:^29.6.3" - "@jest/test-result": "npm:^29.7.0" - "@jest/transform": "npm:^29.7.0" - "@jest/types": "npm:^29.6.3" + "@jest/environment": "npm:30.4.1" + "@jest/fake-timers": "npm:30.4.1" + "@jest/globals": "npm:30.4.1" + "@jest/source-map": "npm:30.0.1" + "@jest/test-result": "npm:30.4.1" + "@jest/transform": "npm:30.4.1" + "@jest/types": "npm:30.4.1" "@types/node": "npm:*" - chalk: "npm:^4.0.0" - cjs-module-lexer: "npm:^1.0.0" - collect-v8-coverage: "npm:^1.0.0" - glob: "npm:^7.1.3" - graceful-fs: "npm:^4.2.9" - jest-haste-map: "npm:^29.7.0" - jest-message-util: "npm:^29.7.0" - jest-mock: "npm:^29.7.0" - jest-regex-util: "npm:^29.6.3" - jest-resolve: "npm:^29.7.0" - jest-snapshot: "npm:^29.7.0" - jest-util: "npm:^29.7.0" + chalk: "npm:^4.1.2" + cjs-module-lexer: "npm:^2.1.0" + collect-v8-coverage: "npm:^1.0.2" + glob: "npm:^10.5.0" + graceful-fs: "npm:^4.2.11" + jest-haste-map: "npm:30.4.1" + jest-message-util: "npm:30.4.1" + jest-mock: "npm:30.4.1" + jest-regex-util: "npm:30.4.0" + jest-resolve: "npm:30.4.1" + jest-snapshot: "npm:30.4.1" + jest-util: "npm:30.4.1" slash: "npm:^3.0.0" strip-bom: "npm:^4.0.0" - checksum: 10c0/7cd89a1deda0bda7d0941835434e44f9d6b7bd50b5c5d9b0fc9a6c990b2d4d2cab59685ab3cb2850ed4cc37059f6de903af5a50565d7f7f1192a77d3fd6dd2a6 + checksum: 10c0/9fce55b0c78fbe47dc2c10a944e9513833fd43c14f292460ef5cdd91e375088bf35549336e66f69fc9d29bf4f410894e9a7eef0bf12a6f39d99174a5300c2c53 languageName: node linkType: hard @@ -21480,31 +21074,32 @@ __metadata: languageName: node linkType: hard -"jest-snapshot@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-snapshot@npm:29.7.0" +"jest-snapshot@npm:30.4.1": + version: 30.4.1 + resolution: "jest-snapshot@npm:30.4.1" dependencies: - "@babel/core": "npm:^7.11.6" - "@babel/generator": "npm:^7.7.2" - "@babel/plugin-syntax-jsx": "npm:^7.7.2" - "@babel/plugin-syntax-typescript": "npm:^7.7.2" - "@babel/types": "npm:^7.3.3" - "@jest/expect-utils": "npm:^29.7.0" - "@jest/transform": "npm:^29.7.0" - "@jest/types": "npm:^29.6.3" - babel-preset-current-node-syntax: "npm:^1.0.0" - chalk: "npm:^4.0.0" - expect: "npm:^29.7.0" - graceful-fs: "npm:^4.2.9" - jest-diff: "npm:^29.7.0" - jest-get-type: "npm:^29.6.3" - jest-matcher-utils: "npm:^29.7.0" - jest-message-util: "npm:^29.7.0" - jest-util: "npm:^29.7.0" - natural-compare: "npm:^1.4.0" - pretty-format: "npm:^29.7.0" - semver: "npm:^7.5.3" - checksum: 10c0/6e9003c94ec58172b4a62864a91c0146513207bedf4e0a06e1e2ac70a4484088a2683e3a0538d8ea913bcfd53dc54a9b98a98cdfa562e7fe1d1339aeae1da570 + "@babel/core": "npm:^7.27.4" + "@babel/generator": "npm:^7.27.5" + "@babel/plugin-syntax-jsx": "npm:^7.27.1" + "@babel/plugin-syntax-typescript": "npm:^7.27.1" + "@babel/types": "npm:^7.27.3" + "@jest/expect-utils": "npm:30.4.1" + "@jest/get-type": "npm:30.1.0" + "@jest/snapshot-utils": "npm:30.4.1" + "@jest/transform": "npm:30.4.1" + "@jest/types": "npm:30.4.1" + babel-preset-current-node-syntax: "npm:^1.2.0" + chalk: "npm:^4.1.2" + expect: "npm:30.4.1" + graceful-fs: "npm:^4.2.11" + jest-diff: "npm:30.4.1" + jest-matcher-utils: "npm:30.4.1" + jest-message-util: "npm:30.4.1" + jest-util: "npm:30.4.1" + pretty-format: "npm:30.4.1" + semver: "npm:^7.7.2" + synckit: "npm:^0.11.8" + checksum: 10c0/cebd70277b6f0d2606f22815480146cf1e37295ed69a1d16e260a99a2ab48db167857e2fb9a938923d22ac13203c83a5e31d7f066b58d87c6d42db58c914ff13 languageName: node linkType: hard @@ -21522,17 +21117,17 @@ __metadata: languageName: node linkType: hard -"jest-util@npm:^29.5.0, jest-util@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-util@npm:29.7.0" +"jest-util@npm:30.4.1": + version: 30.4.1 + resolution: "jest-util@npm:30.4.1" dependencies: - "@jest/types": "npm:^29.6.3" + "@jest/types": "npm:30.4.1" "@types/node": "npm:*" - chalk: "npm:^4.0.0" - ci-info: "npm:^3.2.0" - graceful-fs: "npm:^4.2.9" - picomatch: "npm:^2.2.3" - checksum: 10c0/bc55a8f49fdbb8f51baf31d2a4f312fb66c9db1483b82f602c9c990e659cdd7ec529c8e916d5a89452ecbcfae4949b21b40a7a59d4ffc0cd813a973ab08c8150 + chalk: "npm:^4.1.2" + ci-info: "npm:^4.2.0" + graceful-fs: "npm:^4.2.11" + picomatch: "npm:^4.0.3" + checksum: 10c0/3efe1f25e5a172d04c6af8612d82867ab603b7c1bd8cb89073ff834679b44eba178793cf3af162cf5e25be13aa736ebd23a7826683acc85bddc5873f305b1f6e languageName: node linkType: hard @@ -21550,17 +21145,17 @@ __metadata: languageName: node linkType: hard -"jest-validate@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-validate@npm:29.7.0" +"jest-validate@npm:30.4.1": + version: 30.4.1 + resolution: "jest-validate@npm:30.4.1" dependencies: - "@jest/types": "npm:^29.6.3" - camelcase: "npm:^6.2.0" - chalk: "npm:^4.0.0" - jest-get-type: "npm:^29.6.3" + "@jest/get-type": "npm:30.1.0" + "@jest/types": "npm:30.4.1" + camelcase: "npm:^6.3.0" + chalk: "npm:^4.1.2" leven: "npm:^3.1.0" - pretty-format: "npm:^29.7.0" - checksum: 10c0/a20b930480c1ed68778c739f4739dce39423131bc070cd2505ddede762a5570a256212e9c2401b7ae9ba4d7b7c0803f03c5b8f1561c62348213aba18d9dbece2 + pretty-format: "npm:30.4.1" + checksum: 10c0/23e6677ee6d06476f368c8b6d442b4207e5fbe062e74c1da3eae9ed30a18605f4e8a14809fa9cc7f22a2d8446e8de91a512f59c278720db2ad61c77dc25ffefc languageName: node linkType: hard @@ -21597,19 +21192,19 @@ __metadata: languageName: node linkType: hard -"jest-watcher@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-watcher@npm:29.7.0" +"jest-watcher@npm:30.4.1": + version: 30.4.1 + resolution: "jest-watcher@npm:30.4.1" dependencies: - "@jest/test-result": "npm:^29.7.0" - "@jest/types": "npm:^29.6.3" + "@jest/test-result": "npm:30.4.1" + "@jest/types": "npm:30.4.1" "@types/node": "npm:*" - ansi-escapes: "npm:^4.2.1" - chalk: "npm:^4.0.0" + ansi-escapes: "npm:^4.3.2" + chalk: "npm:^4.1.2" emittery: "npm:^0.13.1" - jest-util: "npm:^29.7.0" - string-length: "npm:^4.0.1" - checksum: 10c0/ec6c75030562fc8f8c727cb8f3b94e75d831fc718785abfc196e1f2a2ebc9a2e38744a15147170039628a853d77a3b695561ce850375ede3a4ee6037a2574567 + jest-util: "npm:30.4.1" + string-length: "npm:^4.0.2" + checksum: 10c0/a56e1714b7b0f9c620c5cee95a84a48b780093594cd188e365a24768f208714895a0deb784ee48e4eec7f1828bc00435ab3c39208d490c33be3786937e997c97 languageName: node linkType: hard @@ -21626,45 +21221,27 @@ __metadata: languageName: node linkType: hard -"jest-worker@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-worker@npm:29.7.0" +"jest-worker@npm:30.4.1": + version: 30.4.1 + resolution: "jest-worker@npm:30.4.1" dependencies: "@types/node": "npm:*" - jest-util: "npm:^29.7.0" + "@ungap/structured-clone": "npm:^1.3.0" + jest-util: "npm:30.4.1" merge-stream: "npm:^2.0.0" - supports-color: "npm:^8.0.0" - checksum: 10c0/5570a3a005b16f46c131968b8a5b56d291f9bbb85ff4217e31c80bd8a02e7de799e59a54b95ca28d5c302f248b54cbffde2d177c2f0f52ffcee7504c6eabf660 - languageName: node - linkType: hard - -"jest@npm:^29.5.0": - version: 29.7.0 - resolution: "jest@npm:29.7.0" - dependencies: - "@jest/core": "npm:^29.7.0" - "@jest/types": "npm:^29.6.3" - import-local: "npm:^3.0.2" - jest-cli: "npm:^29.7.0" - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - bin: - jest: bin/jest.js - checksum: 10c0/f40eb8171cf147c617cc6ada49d062fbb03b4da666cb8d39cdbfb739a7d75eea4c3ca150fb072d0d273dce0c753db4d0467d54906ad0293f59c54f9db4a09d8b + supports-color: "npm:^8.1.1" + checksum: 10c0/3eb7ec7e928b82491e66ae6709e3a1eef3edad2bc351514a5d52037b997151989de6ce2912d6a5a3806ae3ae3bf6a1c36b1ad7bbc567d0790503fdb74576f140 languageName: node linkType: hard -"jest@npm:^30.0.4": - version: 30.3.0 - resolution: "jest@npm:30.3.0" +"jest@npm:^30.0.0, jest@npm:^30.0.4": + version: 30.4.2 + resolution: "jest@npm:30.4.2" dependencies: - "@jest/core": "npm:30.3.0" - "@jest/types": "npm:30.3.0" + "@jest/core": "npm:30.4.2" + "@jest/types": "npm:30.4.1" import-local: "npm:^3.2.0" - jest-cli: "npm:30.3.0" + jest-cli: "npm:30.4.2" peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: @@ -21672,7 +21249,7 @@ __metadata: optional: true bin: jest: ./bin/jest.js - checksum: 10c0/1f940424b741d1541c3d71e311f77c3cfaf31cff9ab2d53180333f00a31f157790a8d3d413b72b8dd2bb191aa75769fa741d9bc9085df779cd59689559a65815 + checksum: 10c0/26a76eaabfc043abd8ee702b97f61ff968dde03412efdb4a69c22c99a5e4bf47788a3e45f75134aec1377a686a9d59d1e3bae85a816e409013475a80de1458ec languageName: node linkType: hard @@ -21795,42 +21372,36 @@ __metadata: languageName: node linkType: hard -"jsdom@npm:^20.0.0": - version: 20.0.3 - resolution: "jsdom@npm:20.0.3" +"jsdom@npm:^26.1.0": + version: 26.1.0 + resolution: "jsdom@npm:26.1.0" dependencies: - abab: "npm:^2.0.6" - acorn: "npm:^8.8.1" - acorn-globals: "npm:^7.0.0" - cssom: "npm:^0.5.0" - cssstyle: "npm:^2.3.0" - data-urls: "npm:^3.0.2" - decimal.js: "npm:^10.4.2" - domexception: "npm:^4.0.0" - escodegen: "npm:^2.0.0" - form-data: "npm:^4.0.0" - html-encoding-sniffer: "npm:^3.0.0" - http-proxy-agent: "npm:^5.0.0" - https-proxy-agent: "npm:^5.0.1" + cssstyle: "npm:^4.2.1" + data-urls: "npm:^5.0.0" + decimal.js: "npm:^10.5.0" + html-encoding-sniffer: "npm:^4.0.0" + http-proxy-agent: "npm:^7.0.2" + https-proxy-agent: "npm:^7.0.6" is-potential-custom-element-name: "npm:^1.0.1" - nwsapi: "npm:^2.2.2" - parse5: "npm:^7.1.1" + nwsapi: "npm:^2.2.16" + parse5: "npm:^7.2.1" + rrweb-cssom: "npm:^0.8.0" saxes: "npm:^6.0.0" symbol-tree: "npm:^3.2.4" - tough-cookie: "npm:^4.1.2" - w3c-xmlserializer: "npm:^4.0.0" + tough-cookie: "npm:^5.1.1" + w3c-xmlserializer: "npm:^5.0.0" webidl-conversions: "npm:^7.0.0" - whatwg-encoding: "npm:^2.0.0" - whatwg-mimetype: "npm:^3.0.0" - whatwg-url: "npm:^11.0.0" - ws: "npm:^8.11.0" - xml-name-validator: "npm:^4.0.0" + whatwg-encoding: "npm:^3.1.1" + whatwg-mimetype: "npm:^4.0.0" + whatwg-url: "npm:^14.1.1" + ws: "npm:^8.18.0" + xml-name-validator: "npm:^5.0.0" peerDependencies: - canvas: ^2.5.0 + canvas: ^3.0.0 peerDependenciesMeta: canvas: optional: true - checksum: 10c0/b109073bb826a966db7828f46cb1d7371abecd30f182b143c52be5fe1ed84513bbbe995eb3d157241681fcd18331381e61e3dc004d4949f3a63bca02f6214902 + checksum: 10c0/5b14a5bc32ce077a06fb42d1ab95b1191afa5cbbce8859e3b96831c5143becbbcbf0511d4d4934e922d2901443ced2cdc3b734c1cf30b5f73b3e067ce457d0f4 languageName: node linkType: hard @@ -22688,7 +22259,7 @@ __metadata: languageName: node linkType: hard -"lodash@npm:4, lodash@npm:4.17.21, lodash@npm:^4.17.12, lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.21, lodash@npm:^4.17.4, lodash@npm:^4.2.1": +"lodash@npm:4, lodash@npm:4.17.21, lodash@npm:^4.17.12, lodash@npm:^4.17.14, lodash@npm:^4.17.21, lodash@npm:^4.17.4, lodash@npm:^4.2.1": version: 4.17.21 resolution: "lodash@npm:4.17.21" checksum: 10c0/d8cbea072bb08655bb4c989da418994b073a608dffa608b09ac04b43a791b12aeae7cd7ad919aa4c925f33b48490b5cfe6c1f71d827956071dae2e7bb3a6b74c @@ -22790,6 +22361,13 @@ __metadata: languageName: node linkType: hard +"lru-cache@npm:^10.4.3": + version: 10.4.3 + resolution: "lru-cache@npm:10.4.3" + checksum: 10c0/ebd04fbca961e6c1d6c0af3799adcc966a1babe798f685bb84e6599266599cd95d94630b10262f5424539bc4640107e8a33aa28585374abf561d30d16f4b39fb + languageName: node + linkType: hard + "lru-cache@npm:^11.0.0": version: 11.2.2 resolution: "lru-cache@npm:11.2.2" @@ -23201,6 +22779,22 @@ __metadata: languageName: node linkType: hard +"media-query-fns@npm:^2.1.2": + version: 2.1.2 + resolution: "media-query-fns@npm:2.1.2" + dependencies: + media-query-parser: "npm:3.0.0-beta.1" + checksum: 10c0/6055602fb84c13e7506619e8c7900d10e46a3af7c2da08069cffa797241a3960c1e0f1fff2c9e12edc83116befd2f41c06b71323e2054d14ad8c26d98f8900a4 + languageName: node + linkType: hard + +"media-query-parser@npm:3.0.0-beta.1": + version: 3.0.0-beta.1 + resolution: "media-query-parser@npm:3.0.0-beta.1" + checksum: 10c0/84792a4cb05ce8f4fa3f85c851a1cacd9716d66e82131a23a6a1b912151f30d21a3a05cbf02b249d8f341ac72a0eea4f4ea1dd711712a43735a355d1f2c875f9 + languageName: node + linkType: hard + "media-typer@npm:0.3.0": version: 0.3.0 resolution: "media-typer@npm:0.3.0" @@ -24059,6 +23653,13 @@ __metadata: languageName: node linkType: hard +"mock-match-media@npm:^1.0.0": + version: 1.0.3 + resolution: "mock-match-media@npm:1.0.3" + checksum: 10c0/b7c4bb69b95703b599acfd202590ff1210f82b907e3fa54e23f4d391b3a0208cfc632bc8351c6d90a632e089ac50bad08b341c18b26f4deae0e6ed1a99d6404e + languageName: node + linkType: hard + "modify-values@npm:^1.0.0": version: 1.0.1 resolution: "modify-values@npm:1.0.1" @@ -24747,10 +24348,10 @@ __metadata: languageName: node linkType: hard -"nwsapi@npm:^2.2.2": - version: 2.2.4 - resolution: "nwsapi@npm:2.2.4" - checksum: 10c0/d6d297feed79e0fc984e7a9588fe20255a493c0645f35a3419b04662535311cc38126fa12d8e1a5ae8f18cc0de0ec0d36680e03fab44050f7117e0503ecc9c38 +"nwsapi@npm:^2.2.16": + version: 2.2.23 + resolution: "nwsapi@npm:2.2.23" + checksum: 10c0/e44bfc9246baf659581206ed716d291a1905185247795fb8a302cb09315c943a31023b4ac4d026a5eaf32b2def51d77b3d0f9ebf4f3d35f70e105fcb6447c76e languageName: node linkType: hard @@ -25701,7 +25302,7 @@ __metadata: languageName: node linkType: hard -"parse5@npm:^7.0.0, parse5@npm:^7.1.1": +"parse5@npm:^7.0.0": version: 7.1.2 resolution: "parse5@npm:7.1.2" dependencies: @@ -25710,6 +25311,15 @@ __metadata: languageName: node linkType: hard +"parse5@npm:^7.2.1": + version: 7.3.0 + resolution: "parse5@npm:7.3.0" + dependencies: + entities: "npm:^6.0.0" + checksum: 10c0/7fd2e4e247e85241d6f2a464d0085eed599a26d7b0a5233790c49f53473232eb85350e8133344d9b3fd58b89339e7ad7270fe1f89d28abe50674ec97b87f80b5 + languageName: node + linkType: hard + "parseurl@npm:^1.3.3, parseurl@npm:~1.3.3": version: 1.3.3 resolution: "parseurl@npm:1.3.3" @@ -25959,7 +25569,7 @@ __metadata: languageName: node linkType: hard -"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.2.3, picomatch@npm:^2.3.1": +"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.3.1": version: 2.3.1 resolution: "picomatch@npm:2.3.1" checksum: 10c0/26c02b8d06f03206fc2ab8d16f19960f2ff9e81a658f831ecb656d8f17d9edc799e8364b1f4a7873e89d9702dff96204be0fa26fe4181f6843f040f819dac4be @@ -26057,7 +25667,7 @@ __metadata: languageName: node linkType: hard -"pirates@npm:^4.0.4, pirates@npm:^4.0.6": +"pirates@npm:^4.0.6": version: 4.0.6 resolution: "pirates@npm:4.0.6" checksum: 10c0/00d5fa51f8dded94d7429700fb91a0c1ead00ae2c7fd27089f0c5b63e6eca36197fe46384631872690a66f390c5e27198e99006ab77ae472692ab9c2ca903f36 @@ -26269,6 +25879,18 @@ __metadata: languageName: node linkType: hard +"pretty-format@npm:30.4.1": + version: 30.4.1 + resolution: "pretty-format@npm:30.4.1" + dependencies: + "@jest/schemas": "npm:30.4.1" + ansi-styles: "npm:^5.2.0" + react-is-18: "npm:react-is@^18.3.1" + react-is-19: "npm:react-is@^19.2.5" + checksum: 10c0/c7e6633740cd2f6d382f188c00c8b4b3f2bee3cda16db6753471c6bb4b94f76531358d3a7793062a0fb00d72ebfb934e8ae1d4f5ced6bb34c8e7f60996f90076 + languageName: node + linkType: hard + "pretty-format@npm:^27.0.2": version: 27.4.2 resolution: "pretty-format@npm:27.4.2" @@ -26293,17 +25915,6 @@ __metadata: languageName: node linkType: hard -"pretty-format@npm:^29.7.0": - version: 29.7.0 - resolution: "pretty-format@npm:29.7.0" - dependencies: - "@jest/schemas": "npm:^29.6.3" - ansi-styles: "npm:^5.0.0" - react-is: "npm:^18.0.0" - checksum: 10c0/edc5ff89f51916f036c62ed433506b55446ff739358de77207e63e88a28ca2894caac6e73dcb68166a606e51c8087d32d400473e6a9fdd2dbe743f46c9c0276f - languageName: node - linkType: hard - "proc-log@npm:^3.0.0": version: 3.0.0 resolution: "proc-log@npm:3.0.0" @@ -26382,7 +25993,7 @@ __metadata: languageName: node linkType: hard -"prompts@npm:^2.0.1, prompts@npm:^2.4.1": +"prompts@npm:^2.4.1": version: 2.4.2 resolution: "prompts@npm:2.4.2" dependencies: @@ -26466,7 +26077,7 @@ __metadata: languageName: node linkType: hard -"psl@npm:^1.1.28, psl@npm:^1.1.33": +"psl@npm:^1.1.28": version: 1.8.0 resolution: "psl@npm:1.8.0" checksum: 10c0/b5f1956f7530860e1918e7238291689fdc3cab9c2c0cdbc47cde21addcc7f62495d794692cc1e43e54728d273f78037e8e73ac43009509a1a7f823341f4039c8 @@ -26511,6 +26122,13 @@ __metadata: languageName: node linkType: hard +"punycode@npm:^2.3.1": + version: 2.3.1 + resolution: "punycode@npm:2.3.1" + checksum: 10c0/14f76a8206bc3464f794fb2e3d3cc665ae416c01893ad7a02b23766eb07159144ee612ad67af5e84fa4479ccfe67678c4feb126b0485651b302babf66f04f9e9 + languageName: node + linkType: hard + "pure-rand@npm:^5.0.0": version: 5.0.0 resolution: "pure-rand@npm:5.0.0" @@ -26518,13 +26136,6 @@ __metadata: languageName: node linkType: hard -"pure-rand@npm:^6.0.0": - version: 6.0.2 - resolution: "pure-rand@npm:6.0.2" - checksum: 10c0/0556bee2e16a8d081a2b7630d9cb4e5dafd4e6bd6e4c61de1cf1ef5974f127847523e3d0e62884f6f5d64b66a5e93b05bd8f37ed009f3a4fe5089899e05914aa - languageName: node - linkType: hard - "pure-rand@npm:^7.0.0": version: 7.0.1 resolution: "pure-rand@npm:7.0.1" @@ -26573,13 +26184,6 @@ __metadata: languageName: node linkType: hard -"querystringify@npm:^2.1.1": - version: 2.2.0 - resolution: "querystringify@npm:2.2.0" - checksum: 10c0/3258bc3dbdf322ff2663619afe5947c7926a6ef5fb78ad7d384602974c467fadfc8272af44f5eb8cddd0d011aae8fabf3a929a8eee4b86edcc0a21e6bd10f9aa - languageName: node - linkType: hard - "quick-format-unescaped@npm:^4.0.3": version: 4.0.4 resolution: "quick-format-unescaped@npm:4.0.4" @@ -26743,6 +26347,20 @@ __metadata: languageName: node linkType: hard +"react-is-18@npm:react-is@^18.3.1, react-is@npm:^18.0.0, react-is@npm:^18.3.1": + version: 18.3.1 + resolution: "react-is@npm:18.3.1" + checksum: 10c0/f2f1e60010c683479e74c63f96b09fb41603527cd131a9959e2aee1e5a8b0caf270b365e5ca77d4a6b18aae659b60a86150bb3979073528877029b35aecd2072 + languageName: node + linkType: hard + +"react-is-19@npm:react-is@^19.2.5": + version: 19.2.6 + resolution: "react-is@npm:19.2.6" + checksum: 10c0/263177f370fc156b279d22570dd6e922a0ad641a4a426a4cb70284b8003b00ef532d59f2beca1d22a1ca0b37f85f9077d7733ca5d344ebecd2942e9bc2a2a3c0 + languageName: node + linkType: hard + "react-is@npm:^16.13.1": version: 16.13.1 resolution: "react-is@npm:16.13.1" @@ -26757,13 +26375,6 @@ __metadata: languageName: node linkType: hard -"react-is@npm:^18.0.0, react-is@npm:^18.3.1": - version: 18.3.1 - resolution: "react-is@npm:18.3.1" - checksum: 10c0/f2f1e60010c683479e74c63f96b09fb41603527cd131a9959e2aee1e5a8b0caf270b365e5ca77d4a6b18aae659b60a86150bb3979073528877029b35aecd2072 - languageName: node - linkType: hard - "react-is@npm:^19.1.0": version: 19.1.1 resolution: "react-is@npm:19.1.1" @@ -26846,11 +26457,11 @@ __metadata: "@storybook/react": "npm:^10.0.0" "@storybook/test-runner": "npm:^0.24.0" "@swc/core": "npm:^1.3.36" - "@swc/jest": "npm:^0.2.36" + "@swc/jest": "npm:^0.2.39" "@tailwindcss/postcss": "npm:^4.0.17" "@testing-library/dom": "npm:^10.1.0" - "@testing-library/jest-dom": "npm:^5.16.5" - "@testing-library/react": "npm:^16.0.0" + "@testing-library/jest-dom": "npm:^6.9.1" + "@testing-library/react": "npm:^16.3.0" "@testing-library/user-event": "patch:@testing-library/user-event@npm%3A14.6.1#~/.yarn/patches/@testing-library-user-event-npm-14.6.1-5da7e1d4e2.patch" "@types/react": "npm:^19.0.0" "@types/react-dom": "npm:^19.0.0" @@ -26884,15 +26495,16 @@ __metadata: identity-obj-proxy: "npm:^3.0.0" ignore-styles: "npm:^5.0.1" is-mingw: "npm:^2.0.0" - jest: "npm:^29.5.0" - jest-environment-jsdom: "npm:^29.5.0" - jest-junit: "npm:^15.0.0" - jest-matchmedia-mock: "npm:^1.1.0" + jest: "npm:^30.0.0" + jest-environment-jsdom: "npm:^30.0.0" + jest-junit: "npm:^17.0.0" json5: "npm:^2.2.3" lerna: "npm:^3.13.2" lucide-react: "npm:^0.517.0" md5: "npm:^2.2.1" mdast-util-to-string: "npm:^4.0.0" + media-query-fns: "npm:^2.1.2" + mock-match-media: "npm:^1.0.0" motion: "npm:^12.23.6" npm-cli-login: "npm:^1.0.0" oxfmt: "npm:^0.48.0" @@ -27688,13 +27300,6 @@ __metadata: languageName: node linkType: hard -"resolve.exports@npm:^2.0.0": - version: 2.0.2 - resolution: "resolve.exports@npm:2.0.2" - checksum: 10c0/cc4cffdc25447cf34730f388dca5021156ba9302a3bad3d7f168e790dc74b2827dff603f1bc6ad3d299bac269828dca96dd77e036dc9fba6a2a1807c47ab5c98 - languageName: node - linkType: hard - "resolve@npm:^1.1.7, resolve@npm:^1.10.0, resolve@npm:^1.14.2, resolve@npm:^1.19.0, resolve@npm:^1.20.0": version: 1.22.11 resolution: "resolve@npm:1.22.11" @@ -27976,6 +27581,13 @@ __metadata: languageName: node linkType: hard +"rrweb-cssom@npm:^0.8.0": + version: 0.8.0 + resolution: "rrweb-cssom@npm:0.8.0" + checksum: 10c0/56f2bfd56733adb92c0b56e274c43f864b8dd48784d6fe946ef5ff8d438234015e59ad837fc2ad54714b6421384141c1add4eb569e72054e350d1f8a50b8ac7b + languageName: node + linkType: hard + "rsc-html-stream@npm:^0.0.6": version: 0.0.6 resolution: "rsc-html-stream@npm:0.0.6" @@ -28242,7 +27854,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:^7.3.5, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.6.3, semver@npm:^7.7.1": +"semver@npm:^7.3.5, semver@npm:^7.5.4, semver@npm:^7.6.3, semver@npm:^7.7.1": version: 7.7.2 resolution: "semver@npm:7.7.2" bin: @@ -28589,7 +28201,7 @@ __metadata: languageName: node linkType: hard -"signal-exit@npm:^3.0.0, signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7": +"signal-exit@npm:^3.0.0, signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3": version: 3.0.7 resolution: "signal-exit@npm:3.0.7" checksum: 10c0/25d272fa73e146048565e08f3309d5b942c1979a6f4a58a8c59d5fa299728e9c2fcd1a759ec870863b1fd38653670240cd420dad2ad9330c71f36608a6a1c912 @@ -29047,15 +28659,6 @@ __metadata: languageName: node linkType: hard -"stack-utils@npm:^2.0.3": - version: 2.0.5 - resolution: "stack-utils@npm:2.0.5" - dependencies: - escape-string-regexp: "npm:^2.0.0" - checksum: 10c0/059f828eed5b03b963e8200529c27bd92b105f2cac9dffc9edcbc739ea8fa108e4ec45d0da257d8e0f7b5ac98db5643a0787e5c25ceab1396f7123e1ee15a086 - languageName: node - linkType: hard - "stack-utils@npm:^2.0.6": version: 2.0.6 resolution: "stack-utils@npm:2.0.6" @@ -29229,16 +28832,6 @@ __metadata: languageName: node linkType: hard -"string-length@npm:^4.0.1": - version: 4.0.1 - resolution: "string-length@npm:4.0.1" - dependencies: - char-regex: "npm:^1.0.2" - strip-ansi: "npm:^6.0.0" - checksum: 10c0/160c226cc2c7621f4c1d857390bb9d2d4cd46cfa6c89142248feb0aa6dd06e1877d94759a6dc00b0d3962173086c408a4f5a3ed2be9b353f58abb403290d7f6c - languageName: node - linkType: hard - "string-length@npm:^4.0.2": version: 4.0.2 resolution: "string-length@npm:4.0.2" @@ -29613,7 +29206,7 @@ __metadata: languageName: node linkType: hard -"supports-color@npm:^8.0.0, supports-color@npm:^8.1.0, supports-color@npm:^8.1.1": +"supports-color@npm:^8.1.0, supports-color@npm:^8.1.1": version: 8.1.1 resolution: "supports-color@npm:8.1.1" dependencies: @@ -30171,18 +29764,6 @@ __metadata: languageName: node linkType: hard -"tough-cookie@npm:^4.1.2": - version: 4.1.2 - resolution: "tough-cookie@npm:4.1.2" - dependencies: - psl: "npm:^1.1.33" - punycode: "npm:^2.1.1" - universalify: "npm:^0.2.0" - url-parse: "npm:^1.5.3" - checksum: 10c0/1f9d97bc9ff22b41e107eca4a146064f916e567b5557795dbfe742f098557ba1101b8f7c4e02ac785236663f7f086c37dc595a5b9813ef8fb27f8d800dc9eb9b - languageName: node - linkType: hard - "tough-cookie@npm:^5.0.0": version: 5.1.1 resolution: "tough-cookie@npm:5.1.1" @@ -30192,6 +29773,15 @@ __metadata: languageName: node linkType: hard +"tough-cookie@npm:^5.1.1": + version: 5.1.2 + resolution: "tough-cookie@npm:5.1.2" + dependencies: + tldts: "npm:^6.1.32" + checksum: 10c0/5f95023a47de0f30a902bba951664b359725597d8adeabc66a0b93a931c3af801e1e697dae4b8c21a012056c0ea88bd2bf4dfe66b2adcf8e2f42cd9796fe0626 + languageName: node + linkType: hard + "tough-cookie@npm:~2.5.0": version: 2.5.0 resolution: "tough-cookie@npm:2.5.0" @@ -30211,12 +29801,12 @@ __metadata: languageName: node linkType: hard -"tr46@npm:^3.0.0": - version: 3.0.0 - resolution: "tr46@npm:3.0.0" +"tr46@npm:^5.1.0": + version: 5.1.1 + resolution: "tr46@npm:5.1.1" dependencies: - punycode: "npm:^2.1.1" - checksum: 10c0/cdc47cad3a9d0b6cb293e39ccb1066695ae6fdd39b9e4f351b010835a1f8b4f3a6dc3a55e896b421371187f22b48d7dac1b693de4f6551bdef7b6ab6735dfe3b + punycode: "npm:^2.3.1" + checksum: 10c0/ae270e194d52ec67ebd695c1a42876e0f19b96e4aca2ab464ab1d9d17dc3acd3e18764f5034c93897db73421563be27c70c98359c4501136a497e46deda5d5ec languageName: node linkType: hard @@ -30435,7 +30025,7 @@ __metadata: languageName: node linkType: hard -"type-fest@npm:^0.8.0, type-fest@npm:^0.8.1": +"type-fest@npm:^0.8.0": version: 0.8.1 resolution: "type-fest@npm:0.8.1" checksum: 10c0/dffbb99329da2aa840f506d376c863bd55f5636f4741ad6e65e82f5ce47e6914108f44f340a0b74009b0cb5d09d6752ae83203e53e98b1192cf80ecee5651636 @@ -31011,13 +30601,6 @@ __metadata: languageName: node linkType: hard -"universalify@npm:^0.2.0": - version: 0.2.0 - resolution: "universalify@npm:0.2.0" - checksum: 10c0/cedbe4d4ca3967edf24c0800cfc161c5a15e240dac28e3ce575c689abc11f2c81ccc6532c8752af3b40f9120fb5e454abecd359e164f4f6aa44c29cd37e194fe - languageName: node - linkType: hard - "unix-crypt-td-js@npm:1.1.4": version: 1.1.4 resolution: "unix-crypt-td-js@npm:1.1.4" @@ -31316,16 +30899,6 @@ __metadata: languageName: node linkType: hard -"url-parse@npm:^1.5.3": - version: 1.5.10 - resolution: "url-parse@npm:1.5.10" - dependencies: - querystringify: "npm:^2.1.1" - requires-port: "npm:^1.0.0" - checksum: 10c0/bd5aa9389f896974beb851c112f63b466505a04b4807cea2e5a3b7092f6fbb75316f0491ea84e44f66fed55f1b440df5195d7e3a8203f64fcefa19d182f5be87 - languageName: node - linkType: hard - "use-sync-external-store@npm:^1.5.0, use-sync-external-store@npm:^1.6.0": version: 1.6.0 resolution: "use-sync-external-store@npm:1.6.0" @@ -31372,6 +30945,15 @@ __metadata: languageName: node linkType: hard +"uuid@npm:^14.0.0": + version: 14.0.0 + resolution: "uuid@npm:14.0.0" + bin: + uuid: dist-node/bin/uuid + checksum: 10c0/a57ae7794c45005c1a9208989196c5baf79a7679c30f43c1bee9033a2c4d113a2cea216fa6fcc9663b08b0d55635df1a7c6eb7e7f3d21c3e50688c698fa39a50 + languageName: node + linkType: hard + "uuid@npm:^3.0.1, uuid@npm:^3.3.2": version: 3.4.0 resolution: "uuid@npm:3.4.0" @@ -31900,12 +31482,12 @@ __metadata: languageName: node linkType: hard -"w3c-xmlserializer@npm:^4.0.0": - version: 4.0.0 - resolution: "w3c-xmlserializer@npm:4.0.0" +"w3c-xmlserializer@npm:^5.0.0": + version: 5.0.0 + resolution: "w3c-xmlserializer@npm:5.0.0" dependencies: - xml-name-validator: "npm:^4.0.0" - checksum: 10c0/02cc66d6efc590bd630086cd88252444120f5feec5c4043932b0d0f74f8b060512f79dc77eb093a7ad04b4f02f39da79ce4af47ceb600f2bf9eacdc83204b1a8 + xml-name-validator: "npm:^5.0.0" + checksum: 10c0/8712774c1aeb62dec22928bf1cdfd11426c2c9383a1a63f2bcae18db87ca574165a0fbe96b312b73652149167ac6c7f4cf5409f2eb101d9c805efe0e4bae798b languageName: node linkType: hard @@ -32013,29 +31595,29 @@ __metadata: languageName: node linkType: hard -"whatwg-encoding@npm:^2.0.0": - version: 2.0.0 - resolution: "whatwg-encoding@npm:2.0.0" +"whatwg-encoding@npm:^3.1.1": + version: 3.1.1 + resolution: "whatwg-encoding@npm:3.1.1" dependencies: iconv-lite: "npm:0.6.3" - checksum: 10c0/91b90a49f312dc751496fd23a7e68981e62f33afe938b97281ad766235c4872fc4e66319f925c5e9001502b3040dd25a33b02a9c693b73a4cbbfdc4ad10c3e3e + checksum: 10c0/273b5f441c2f7fda3368a496c3009edbaa5e43b71b09728f90425e7f487e5cef9eb2b846a31bd760dd8077739c26faf6b5ca43a5f24033172b003b72cf61a93e languageName: node linkType: hard -"whatwg-mimetype@npm:^3.0.0": - version: 3.0.0 - resolution: "whatwg-mimetype@npm:3.0.0" - checksum: 10c0/323895a1cda29a5fb0b9ca82831d2c316309fede0365047c4c323073e3239067a304a09a1f4b123b9532641ab604203f33a1403b5ca6a62ef405bcd7a204080f +"whatwg-mimetype@npm:^4.0.0": + version: 4.0.0 + resolution: "whatwg-mimetype@npm:4.0.0" + checksum: 10c0/a773cdc8126b514d790bdae7052e8bf242970cebd84af62fb2f35a33411e78e981f6c0ab9ed1fe6ec5071b09d5340ac9178e05b52d35a9c4bcf558ba1b1551df languageName: node linkType: hard -"whatwg-url@npm:^11.0.0": - version: 11.0.0 - resolution: "whatwg-url@npm:11.0.0" +"whatwg-url@npm:^14.0.0, whatwg-url@npm:^14.1.1": + version: 14.2.0 + resolution: "whatwg-url@npm:14.2.0" dependencies: - tr46: "npm:^3.0.0" + tr46: "npm:^5.1.0" webidl-conversions: "npm:^7.0.0" - checksum: 10c0/f7ec264976d7c725e0696fcaf9ebe056e14422eacbf92fdbb4462034609cba7d0c85ffa1aab05e9309d42969bcf04632ba5ed3f3882c516d7b093053315bf4c1 + checksum: 10c0/f746fc2f4c906607d09537de1227b13f9494c171141e5427ed7d2c0dd0b6a48b43d8e71abaae57d368d0c06b673fd8ec63550b32ad5ed64990c7b0266c2b4272 languageName: node linkType: hard @@ -32323,16 +31905,6 @@ __metadata: languageName: node linkType: hard -"write-file-atomic@npm:^4.0.2": - version: 4.0.2 - resolution: "write-file-atomic@npm:4.0.2" - dependencies: - imurmurhash: "npm:^0.1.4" - signal-exit: "npm:^3.0.7" - checksum: 10c0/a2c282c95ef5d8e1c27b335ae897b5eca00e85590d92a3fd69a437919b7b93ff36a69ea04145da55829d2164e724bc62202cdb5f4b208b425aba0807889375c7 - languageName: node - linkType: hard - "write-file-atomic@npm:^5.0.1": version: 5.0.1 resolution: "write-file-atomic@npm:5.0.1" @@ -32381,21 +31953,6 @@ __metadata: languageName: node linkType: hard -"ws@npm:^8.11.0": - version: 8.13.0 - resolution: "ws@npm:8.13.0" - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ">=5.0.2" - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - checksum: 10c0/579817dbbab3ee46669129c220cfd81ba6cdb9ab5c3e9a105702dd045743c4ab72e33bb384573827c0c481213417cc880e41bc097e0fc541a0b79fa3eb38207d - languageName: node - linkType: hard - "ws@npm:^8.18.0, ws@npm:^8.18.3": version: 8.19.0 resolution: "ws@npm:8.19.0" @@ -32427,10 +31984,10 @@ __metadata: languageName: node linkType: hard -"xml-name-validator@npm:^4.0.0": - version: 4.0.0 - resolution: "xml-name-validator@npm:4.0.0" - checksum: 10c0/c1bfa219d64e56fee265b2bd31b2fcecefc063ee802da1e73bad1f21d7afd89b943c9e2c97af2942f60b1ad46f915a4c81e00039c7d398b53cf410e29d3c30bd +"xml-name-validator@npm:^5.0.0": + version: 5.0.0 + resolution: "xml-name-validator@npm:5.0.0" + checksum: 10c0/3fcf44e7b73fb18be917fdd4ccffff3639373c7cb83f8fc35df6001fecba7942f1dbead29d91ebb8315e2f2ff786b508f0c9dc0215b6353f9983c6b7d62cb1f5 languageName: node linkType: hard @@ -32591,7 +32148,7 @@ __metadata: languageName: node linkType: hard -"yargs@npm:^17.3.1, yargs@npm:^17.7.2": +"yargs@npm:^17.7.2": version: 17.7.2 resolution: "yargs@npm:17.7.2" dependencies: