Commit 1d4641e025 for woocommerce
commit 1d4641e0252a41c6d0ef0f3ee733d06e1e796f97
Author: Daniel Mallory <daniel.mallory@automattic.com>
Date: Fri Jan 30 20:47:54 2026 +0000
Fix accessibility issues on Settings > Payments screen (#62841)
* Fix accessibility issues on Settings > Payments screen
This commit addresses the accessibility issues reported in #60686:
1. Expand/Collapse button (More payment options section):
- Changed from div with role="button" to semantic <button> element
- Added screen reader text for expand/collapse state
- Added visible focus indicator
2. Escape key to close popovers:
- Added Escape key handler to status-badge popover
- Added Escape key handler to official-badge popover
- Added Escape key handler to category info popovers
- Added Escape key handler to business location indicator popover
- Focus returns to trigger element after closing
3. Country selector keyboard accessibility:
- Focus now moves to search input when dropdown opens
- Arrow Up/Down keys navigate the country list
- Enter key selects highlighted item and closes dropdown
- Escape key closes dropdown without selecting
- Tab moves focus to Apply button
- Improved focus visibility on all interactive elements
- Added keyboard navigation tests
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
* Fix no-case-declarations lint error in country selector
Wrap case 'Enter' body in braces to create block scope for const declaration.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
* Prevent page scroll on Space key for role=button elements
Add event.preventDefault() when Space key is pressed on span role="button"
elements to prevent default scroll behavior.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
* Remove accidental file
* Handle Escape key inside focusOnMount popovers
Add onKeyDown handler to popover content containers so Escape key
works when focus is inside the popover (due to focusOnMount=true).
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
* Add onKeyDown to Popover components for portal escape handling
Pass keyboard handler to Popover's onKeyDown prop in addition to the
inner content div, ensuring Escape key works in portal-rendered content.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
* Add changelog.
* Prevent page scroll when using arrow keys in EllipsisMenu
Add onKeyDown handler to NavigableMenu that calls preventDefault()
for ArrowUp and ArrowDown keys to prevent page scrolling while
navigating menu items.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
* Focus first menu item when ellipsis menu opens
Change focusOnMount from true (focuses container) to "firstElement"
(focuses first menu item) for better keyboard accessibility.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
* Fix: Use native KeyboardEvent type in EllipsisMenu
The handleMenuKeyDown function was using React.KeyboardEvent (imported
from 'react') but NavigableMenu's onKeyDown expects the native DOM
KeyboardEvent type. Using globalThis.KeyboardEvent explicitly references
the native type.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Fix: Remove unused variables and fix linting in country-selector
Removed unused `setHighlightedIndex` and `selectItem` variables from
useSelect destructuring and fixed Prettier formatting issues.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Add visible focus styles and Escape key support for accessibility
- WooPaymentsMethodsLogos: Add focus styles and global Escape key listener
to close popover when focus is inside the portal
- Country selector: Sync selection with value prop when reopening,
add stronger focus styles with !important to override WP defaults
- Business location warning: Add focus styles and global Escape key
listener to close popover
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* WIP: accessibility.
* Fix country selector not remembering selection after reopening
The ToggleButtonBlur handler in the stateReducer was allowing Downshift
to reset selectedItem when focus moved to the search input. This caused
the checkmark and highlight to show on the initial country instead of
the newly selected one when reopening the dropdown.
Fix by preserving state.selectedItem during blur events.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Fix Tab focus test to actually assert focus moves to Apply button
The test was only verifying the dropdown stayed open but not that focus
moved to the Apply button. Now uses userEvent.tab() and asserts focus.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Fix prettier formatting in country-selector test
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Oleksandr Aratovskyi <79862886+oaratovskyi@users.noreply.github.com>
diff --git a/packages/js/components/changelog/fix-ellipsis-menu-arrow-scroll b/packages/js/components/changelog/fix-ellipsis-menu-arrow-scroll
new file mode 100644
index 0000000000..a93e791bd3
--- /dev/null
+++ b/packages/js/components/changelog/fix-ellipsis-menu-arrow-scroll
@@ -0,0 +1,4 @@
+Significance: patch
+Type: fix
+
+Prevent page scroll when using arrow keys in EllipsisMenu component
diff --git a/packages/js/components/changelog/fix-ellipsis-menu-keydown-type b/packages/js/components/changelog/fix-ellipsis-menu-keydown-type
new file mode 100644
index 0000000000..adef26919e
--- /dev/null
+++ b/packages/js/components/changelog/fix-ellipsis-menu-keydown-type
@@ -0,0 +1,4 @@
+Significance: patch
+Type: fix
+
+Fix TypeScript error in EllipsisMenu onKeyDown handler by using native KeyboardEvent type.
diff --git a/packages/js/components/src/ellipsis-menu/index.tsx b/packages/js/components/src/ellipsis-menu/index.tsx
index c28c574502..425edab981 100644
--- a/packages/js/components/src/ellipsis-menu/index.tsx
+++ b/packages/js/components/src/ellipsis-menu/index.tsx
@@ -96,8 +96,18 @@ const EllipsisMenu = ( {
);
};
+ const handleMenuKeyDown = ( event: globalThis.KeyboardEvent ) => {
+ // Prevent page scroll when navigating menu with arrow keys.
+ if ( event.key === 'ArrowUp' || event.key === 'ArrowDown' ) {
+ event.preventDefault();
+ }
+ };
+
const renderMenu = ( renderContentArgs: CallbackProps ) => (
- <NavigableMenu className="woocommerce-ellipsis-menu__content">
+ <NavigableMenu
+ className="woocommerce-ellipsis-menu__content"
+ onKeyDown={ handleMenuKeyDown }
+ >
{ renderContent( renderContentArgs ) }
</NavigableMenu>
);
diff --git a/packages/js/onboarding/changelog/fix-woopayments-logos-escape-key b/packages/js/onboarding/changelog/fix-woopayments-logos-escape-key
new file mode 100644
index 0000000000..f7fdba318e
--- /dev/null
+++ b/packages/js/onboarding/changelog/fix-woopayments-logos-escape-key
@@ -0,0 +1,4 @@
+Significance: patch
+Type: fix
+
+Add Escape key support to close the WooPaymentsMethodsLogos popover
diff --git a/packages/js/onboarding/src/components/WooPaymentsMethodsLogos/PaymentMethodsLogos.scss b/packages/js/onboarding/src/components/WooPaymentsMethodsLogos/PaymentMethodsLogos.scss
index 5ced68e4e3..31562cb937 100644
--- a/packages/js/onboarding/src/components/WooPaymentsMethodsLogos/PaymentMethodsLogos.scss
+++ b/packages/js/onboarding/src/components/WooPaymentsMethodsLogos/PaymentMethodsLogos.scss
@@ -37,6 +37,20 @@
background-color: rgba(56, 88, 233, 0.15);
border-color: rgba(56, 88, 233, 1);
}
+
+ &-count:focus {
+ outline: 1.5px solid var(--wp-admin-theme-color, #007cba);
+ outline-offset: 1px;
+ }
+
+ &-count:focus:not(:focus-visible) {
+ outline: none;
+ }
+
+ &-count:focus-visible {
+ outline: 1.5px solid var(--wp-admin-theme-color, #007cba);
+ outline-offset: 1px;
+ }
}
.wc_payment_gateways_wrapper [data-gateway_id="pre_install_woocommerce_payments_promotion"] {
diff --git a/packages/js/onboarding/src/components/WooPaymentsMethodsLogos/index.tsx b/packages/js/onboarding/src/components/WooPaymentsMethodsLogos/index.tsx
index 7802503c4b..ea8745875c 100644
--- a/packages/js/onboarding/src/components/WooPaymentsMethodsLogos/index.tsx
+++ b/packages/js/onboarding/src/components/WooPaymentsMethodsLogos/index.tsx
@@ -182,6 +182,37 @@ export const WooPaymentsMethodsLogos = ( {
setPopoverVisible( false );
};
+ const handleKeyDown = ( event: React.KeyboardEvent ) => {
+ if ( event.key === 'Escape' && isPopoverVisible ) {
+ event.stopPropagation();
+ setPopoverVisible( false );
+ buttonRef.current?.focus();
+ } else if ( event.key === 'Enter' || event.key === ' ' ) {
+ event.preventDefault();
+ handleClick( event );
+ }
+ };
+
+ // Handle Escape key globally when popover is open (for portal focus)
+ useEffect( () => {
+ if ( ! isPopoverVisible ) {
+ return;
+ }
+
+ const handleGlobalKeyDown = ( event: KeyboardEvent ) => {
+ if ( event.key === 'Escape' ) {
+ event.stopPropagation();
+ setPopoverVisible( false );
+ buttonRef.current?.focus();
+ }
+ };
+
+ document.addEventListener( 'keydown', handleGlobalKeyDown );
+ return () => {
+ document.removeEventListener( 'keydown', handleGlobalKeyDown );
+ };
+ }, [ isPopoverVisible ] );
+
// Reduce the total number of payment methods by one if the store is not eligible for WooPay.
const maxSupportedPaymentMethods = isWooPayEligible
? totalPaymentMethods
@@ -245,11 +276,7 @@ export const WooPaymentsMethodsLogos = ( {
tabIndex={ 0 }
ref={ buttonRef }
onClick={ handleClick }
- onKeyDown={ ( event ) => {
- if ( event.key === 'Enter' || event.key === ' ' ) {
- handleClick( event );
- }
- } }
+ onKeyDown={ handleKeyDown }
>
+ { maxSupportedPaymentMethods - maxShownElements }
{ isPopoverVisible && (
@@ -262,6 +289,7 @@ export const WooPaymentsMethodsLogos = ( {
noArrow={ true }
shift={ true }
onFocusOutside={ handleFocusOutside }
+ onKeyDown={ handleKeyDown }
>
<div className="woocommerce-woopayments-payment-methods-logos">
{ hiddenPaymentMethods.map(
diff --git a/plugins/woocommerce/changelog/fix-60686-payments-settings-accessibility b/plugins/woocommerce/changelog/fix-60686-payments-settings-accessibility
new file mode 100644
index 0000000000..8b7e3e41f1
--- /dev/null
+++ b/plugins/woocommerce/changelog/fix-60686-payments-settings-accessibility
@@ -0,0 +1,4 @@
+Significance: minor
+Type: enhancement
+
+Accessibility fixes for the Payment Settings page
diff --git a/plugins/woocommerce/client/admin/client/settings-payments/components/country-selector/country-selector.scss b/plugins/woocommerce/client/admin/client/settings-payments/components/country-selector/country-selector.scss
index 20b8ee583a..37efa35f75 100644
--- a/plugins/woocommerce/client/admin/client/settings-payments/components/country-selector/country-selector.scss
+++ b/plugins/woocommerce/client/admin/client/settings-payments/components/country-selector/country-selector.scss
@@ -19,7 +19,9 @@
padding-left: 48px;
&.is-highlighted {
- background: #3858e90a;
+ background: rgba(var(--wp-admin-theme-color-rgb, 0, 124, 186), 0.08);
+ outline: 2px solid var(--wp-admin-theme-color, #007cba);
+ outline-offset: -2px;
}
svg {
@@ -131,6 +133,8 @@
&:focus {
background-color: #fff;
+ outline: 2px solid var(--wp-admin-theme-color, #007cba);
+ outline-offset: -2px;
}
}
@@ -146,7 +150,19 @@
.components-button.components-country-select-control__button {
&:focus {
- box-shadow: none;
+ box-shadow: none !important;
+ outline: 2px solid var(--wp-admin-theme-color, #007cba) !important;
+ outline-offset: -2px;
+ }
+
+ &:focus:not(:focus-visible) {
+ outline: none !important;
+ }
+
+ &:focus-visible {
+ box-shadow: none !important;
+ outline: 2px solid var(--wp-admin-theme-color, #007cba) !important;
+ outline-offset: -2px;
}
}
diff --git a/plugins/woocommerce/client/admin/client/settings-payments/components/country-selector/country-selector.tsx b/plugins/woocommerce/client/admin/client/settings-payments/components/country-selector/country-selector.tsx
index 9d95c8d300..807cc54bef 100644
--- a/plugins/woocommerce/client/admin/client/settings-payments/components/country-selector/country-selector.tsx
+++ b/plugins/woocommerce/client/admin/client/settings-payments/components/country-selector/country-selector.tsx
@@ -40,6 +40,14 @@ const stateReducer = < ItemType extends Item >(
const { selectedItem } = state;
switch ( type ) {
+ case useSelect.stateChangeTypes.ToggleButtonBlur:
+ // Prevent menu from closing when focus moves to search input.
+ // Also preserve the current selection to avoid resetting it.
+ return {
+ ...changes,
+ isOpen: state.isOpen,
+ selectedItem: state.selectedItem,
+ };
case useSelect.stateChangeTypes.ItemClick:
return {
...changes,
@@ -112,6 +120,9 @@ export const CountrySelector = < ItemType extends Item >( {
children,
}: ControlProps< ItemType > ): JSX.Element => {
const [ searchText, setSearchText ] = useState( '' );
+ const [ keyboardHighlightIndex, setKeyboardHighlightIndex ] = useState<
+ number | null
+ >( null );
// only run filter every 200ms even if the user is typing
const throttledApplySearchToItems = useThrottle(
@@ -144,12 +155,15 @@ export const CountrySelector = < ItemType extends Item >( {
highlightedIndex,
selectedItem,
closeMenu,
+ selectItem,
} = useSelect< ItemType >( {
initialSelectedItem: value,
items: [ ...visibleItems ],
stateReducer,
} );
+ const applyButtonRef = useRef< HTMLButtonElement >( null );
+
const itemString = getOptionLabel( value.key, items );
const selectedValue = selectedItem ? selectedItem.key : '';
@@ -225,16 +239,6 @@ export const CountrySelector = < ItemType extends Item >( {
[ onChange, selectedValue, closeMenu ]
);
- const onEnterApply = useCallback(
- ( event: React.KeyboardEvent< HTMLButtonElement > ) => {
- event.stopPropagation();
- if ( event.key === 'Enter' ) {
- onChange( selectedValue );
- }
- },
- [ onChange, selectedValue ]
- );
-
const onClearClickedHandler = useCallback(
( e: React.MouseEvent< HTMLButtonElement > ) => {
e.preventDefault();
@@ -253,12 +257,104 @@ export const CountrySelector = < ItemType extends Item >( {
[ searchText, selectedItem ]
);
+ const onSearchKeyDown = useCallback(
+ ( event: React.KeyboardEvent< HTMLInputElement > ) => {
+ const itemsArray = [ ...visibleItems ];
+ const itemCount = itemsArray.length;
+
+ switch ( event.key ) {
+ case 'ArrowDown':
+ event.preventDefault();
+ setKeyboardHighlightIndex( ( prev ) => {
+ const newIndex =
+ prev === null || prev === -1
+ ? 0
+ : Math.min( prev + 1, itemCount - 1 );
+ // Scroll the item into view.
+ setTimeout( () => {
+ highlightSelectedCountry( newIndex );
+ }, 0 );
+ return newIndex;
+ } );
+ break;
+ case 'ArrowUp':
+ event.preventDefault();
+ setKeyboardHighlightIndex( ( prev ) => {
+ const newIndex =
+ prev === null || prev === -1
+ ? itemCount - 1
+ : Math.max( prev - 1, 0 );
+ // Scroll the item into view.
+ setTimeout( () => {
+ highlightSelectedCountry( newIndex );
+ }, 0 );
+ return newIndex;
+ } );
+ break;
+ case 'Enter': {
+ event.preventDefault();
+ // Use highlighted item if available, otherwise use current selection.
+ const itemToApply =
+ keyboardHighlightIndex !== null &&
+ keyboardHighlightIndex >= 0 &&
+ keyboardHighlightIndex < itemCount
+ ? itemsArray[ keyboardHighlightIndex ]
+ : selectedItem;
+ if ( itemToApply ) {
+ onChange( itemToApply.key );
+ }
+ closeMenu();
+ break;
+ }
+ case 'Escape':
+ event.preventDefault();
+ closeMenu();
+ break;
+ case 'Tab':
+ // Allow default Tab behavior to move to Apply button.
+ break;
+ default:
+ break;
+ }
+ },
+ [
+ visibleItems,
+ keyboardHighlightIndex,
+ selectedItem,
+ onChange,
+ closeMenu,
+ ]
+ );
+
useEffect( () => {
- // Highlight the selected country when the menu is opened.
- if ( isOpen && selectedItem !== null ) {
- const selectedItemIndex =
- Array.from( visibleItems ).indexOf( selectedItem );
- highlightSelectedCountry( selectedItemIndex );
+ if ( isOpen ) {
+ // Sync the selected item with the value prop when the menu opens.
+ // This ensures the correct country is selected after applying changes.
+ if ( selectedItem?.key !== value.key ) {
+ selectItem( value );
+ }
+
+ // Focus the search input when the menu is opened.
+ // Use a small timeout to ensure the input is rendered.
+ setTimeout( () => {
+ searchRef.current?.focus();
+ }, 0 );
+
+ // Highlight the selected country when the menu is opened.
+ // Use value instead of selectedItem since we just synced it.
+ const valueIndex = Array.from( visibleItems ).findIndex(
+ ( item ) => item.key === value.key
+ );
+ if ( valueIndex >= 0 ) {
+ highlightSelectedCountry( valueIndex );
+ setKeyboardHighlightIndex( valueIndex );
+ } else {
+ // If the value is not in the visible items, highlight the first item.
+ setKeyboardHighlightIndex( 0 );
+ }
+ } else {
+ // Reset highlight when menu closes.
+ setKeyboardHighlightIndex( null );
}
}, [ isOpen ] );
@@ -279,7 +375,6 @@ export const CountrySelector = < ItemType extends Item >( {
{ placeholder: ! itemString }
),
name,
- onKeyDown: onEnterApply,
} ) }
>
<span className="components-country-select-control__button-value">
@@ -305,12 +400,22 @@ export const CountrySelector = < ItemType extends Item >( {
onChange={ ( { target } ) =>
setSearchText( target.value )
}
- tabIndex={ -1 }
+ onKeyDown={ onSearchKeyDown }
placeholder={ __( 'Search', 'woocommerce' ) }
+ aria-label={ __(
+ 'Search countries',
+ 'woocommerce'
+ ) }
/>
<button
className="components-country-select-control__search--input-suffix"
onClick={ onClearClickedHandler }
+ tabIndex={ -1 }
+ aria-label={
+ isSearchClearable
+ ? __( 'Clear search', 'woocommerce' )
+ : __( 'Search', 'woocommerce' )
+ }
>
{ getSearchSuffix( isSearchClearable ) }
</button>
@@ -327,7 +432,12 @@ export const CountrySelector = < ItemType extends Item >( {
'components-country-select-control__item',
{
'is-highlighted':
- index === highlightedIndex,
+ keyboardHighlightIndex !==
+ null
+ ? index ===
+ keyboardHighlightIndex
+ : index ===
+ highlightedIndex,
}
),
'data-index': index,
@@ -347,6 +457,7 @@ export const CountrySelector = < ItemType extends Item >( {
</div>
<div className="components-country-select-control__apply">
<button
+ ref={ applyButtonRef }
className="components-button is-primary"
onClick={ onApplyHandler }
>
diff --git a/plugins/woocommerce/client/admin/client/settings-payments/components/country-selector/test/country-selector.test.tsx b/plugins/woocommerce/client/admin/client/settings-payments/components/country-selector/test/country-selector.test.tsx
index 9431df04d1..d30317bc00 100644
--- a/plugins/woocommerce/client/admin/client/settings-payments/components/country-selector/test/country-selector.test.tsx
+++ b/plugins/woocommerce/client/admin/client/settings-payments/components/country-selector/test/country-selector.test.tsx
@@ -3,6 +3,7 @@
*/
import '@testing-library/jest-dom';
import { render, screen, fireEvent } from '@testing-library/react';
+import userEvent from '@testing-library/user-event';
import { __ } from '@wordpress/i18n';
/**
@@ -94,4 +95,169 @@ describe( 'CountrySelector', () => {
expect( screen.queryByRole( 'listbox' ) ).not.toBeInTheDocument();
} );
+
+ it( 'shows checkmark on newly selected item when reopening dropdown after Apply', async () => {
+ // This test reproduces a bug where the checkmark would show on the
+ // initial item instead of the newly selected item after reopening.
+ const { rerender } = render( <CountrySelector { ...defaultProps } /> );
+ const toggleButton = screen.getByRole( 'combobox' );
+
+ // Open dropdown and wait for focus to move to search input.
+ fireEvent.click( toggleButton );
+ await new Promise( ( resolve ) => setTimeout( resolve, 10 ) );
+
+ // Select Canada.
+ const canadaItem = screen.getByRole( 'option', { name: 'Canada' } );
+ fireEvent.click( canadaItem );
+
+ // Click Apply.
+ const applyButton = screen.getByText( 'Apply' );
+ fireEvent.click( applyButton );
+
+ // Simulate parent updating the value prop after onChange.
+ rerender(
+ <CountrySelector { ...defaultProps } value={ mockItems[ 1 ] } />
+ );
+
+ // Reopen dropdown and wait for focus to move to search input.
+ fireEvent.click( toggleButton );
+ await new Promise( ( resolve ) => setTimeout( resolve, 10 ) );
+
+ // Simulate blur event on toggle button (happens when focus moves to search input).
+ fireEvent.blur( toggleButton );
+ await new Promise( ( resolve ) => setTimeout( resolve, 10 ) );
+
+ // The checkmark should be on Canada, not United States.
+ const newCanadaOption = screen.getByRole( 'option', {
+ name: 'Canada',
+ } );
+ const usOption = screen.getByRole( 'option', {
+ name: 'United States',
+ } );
+
+ expect(
+ newCanadaOption.querySelector(
+ '.components-country-select-control__item-icon'
+ )
+ ).toBeInTheDocument();
+ expect(
+ usOption.querySelector(
+ '.components-country-select-control__item-icon'
+ )
+ ).not.toBeInTheDocument();
+ } );
+
+ describe( 'Keyboard Navigation', () => {
+ it( 'focuses search input when dropdown opens', async () => {
+ render( <CountrySelector { ...defaultProps } /> );
+ const toggleButton = screen.getByRole( 'combobox' );
+
+ fireEvent.click( toggleButton );
+
+ // Wait for focus to be set via setTimeout.
+ await new Promise( ( resolve ) => setTimeout( resolve, 10 ) );
+
+ const searchInput = screen.getByPlaceholderText( 'Search' );
+ expect( document.activeElement ).toBe( searchInput );
+ } );
+
+ it( 'navigates items with Arrow Down key', () => {
+ render( <CountrySelector { ...defaultProps } /> );
+ const toggleButton = screen.getByRole( 'combobox' );
+
+ fireEvent.click( toggleButton );
+
+ const searchInput = screen.getByPlaceholderText( 'Search' );
+
+ // Initial highlight is on selected item (US, index 0).
+ // Press Arrow Down to move to Canada (index 1).
+ fireEvent.keyDown( searchInput, { key: 'ArrowDown' } );
+
+ // Canada should now be highlighted.
+ const canadaItem = screen
+ .getByText( 'Canada' )
+ .closest( '.components-country-select-control__item' );
+ expect( canadaItem ).toHaveClass( 'is-highlighted' );
+ } );
+
+ it( 'navigates items with Arrow Up key', () => {
+ render( <CountrySelector { ...defaultProps } /> );
+ const toggleButton = screen.getByRole( 'combobox' );
+
+ fireEvent.click( toggleButton );
+
+ const searchInput = screen.getByPlaceholderText( 'Search' );
+
+ // Initial highlight is on selected item (US, index 0).
+ // Arrow Up from index 0 should stay at 0 (no circular navigation).
+ // So let's first go down, then up.
+ fireEvent.keyDown( searchInput, { key: 'ArrowDown' } ); // Now at Canada (1).
+ fireEvent.keyDown( searchInput, { key: 'ArrowUp' } ); // Back to US (0).
+
+ // US should be highlighted.
+ const usItem = screen.getByRole( 'option', {
+ name: 'United States',
+ } );
+ expect( usItem ).toHaveClass( 'is-highlighted' );
+ } );
+
+ it( 'selects highlighted item and closes dropdown on Enter', () => {
+ render( <CountrySelector { ...defaultProps } /> );
+ const toggleButton = screen.getByRole( 'combobox' );
+
+ fireEvent.click( toggleButton );
+
+ const searchInput = screen.getByPlaceholderText( 'Search' );
+
+ // Initial highlight is on US (index 0).
+ // Navigate to Canada (index 1).
+ fireEvent.keyDown( searchInput, { key: 'ArrowDown' } );
+
+ // Press Enter to select Canada.
+ fireEvent.keyDown( searchInput, { key: 'Enter' } );
+
+ expect( mockOnChange ).toHaveBeenCalledWith( 'CA' );
+ expect( screen.queryByRole( 'listbox' ) ).not.toBeInTheDocument();
+ } );
+
+ it( 'closes dropdown on Escape key without selecting', () => {
+ render( <CountrySelector { ...defaultProps } /> );
+ const toggleButton = screen.getByRole( 'combobox' );
+
+ fireEvent.click( toggleButton );
+
+ const searchInput = screen.getByPlaceholderText( 'Search' );
+
+ // Navigate to an item.
+ fireEvent.keyDown( searchInput, { key: 'ArrowDown' } );
+
+ // Press Escape to close without selecting.
+ fireEvent.keyDown( searchInput, { key: 'Escape' } );
+
+ expect( mockOnChange ).not.toHaveBeenCalled();
+ expect( screen.queryByRole( 'listbox' ) ).not.toBeInTheDocument();
+ } );
+
+ it( 'allows Tab to move focus to Apply button', async () => {
+ render( <CountrySelector { ...defaultProps } /> );
+ const toggleButton = screen.getByRole( 'combobox' );
+
+ fireEvent.click( toggleButton );
+
+ // Wait for focus to be set on search input.
+ await new Promise( ( resolve ) => setTimeout( resolve, 10 ) );
+
+ // Tab should not be prevented by onSearchKeyDown, allowing focus to move to Apply button.
+ userEvent.tab();
+
+ // Dropdown should still be open.
+ expect( screen.getByRole( 'listbox' ) ).toBeInTheDocument();
+
+ // Focus should have moved to the Apply button.
+ const applyButton = screen.getByRole( 'button', {
+ name: /apply/i,
+ } );
+ expect( applyButton ).toHaveFocus();
+ } );
+ } );
} );
diff --git a/plugins/woocommerce/client/admin/client/settings-payments/components/ellipsis-menu-content/ellipsis-menu.tsx b/plugins/woocommerce/client/admin/client/settings-payments/components/ellipsis-menu-content/ellipsis-menu.tsx
index 3537c7d2af..70e8f3ec90 100644
--- a/plugins/woocommerce/client/admin/client/settings-payments/components/ellipsis-menu-content/ellipsis-menu.tsx
+++ b/plugins/woocommerce/client/admin/client/settings-payments/components/ellipsis-menu-content/ellipsis-menu.tsx
@@ -75,7 +75,7 @@ export const EllipsisMenuWrapper = ( {
canResetOnboarding={ canResetOnboarding }
/>
) }
- focusOnMount={ true }
+ focusOnMount="firstElement"
/>
{ /* Modal for resetting WooPayments accounts */ }
<WooPaymentsResetAccountModal
diff --git a/plugins/woocommerce/client/admin/client/settings-payments/components/official-badge/official-badge.tsx b/plugins/woocommerce/client/admin/client/settings-payments/components/official-badge/official-badge.tsx
index e11249e2d6..ef5161ea30 100644
--- a/plugins/woocommerce/client/admin/client/settings-payments/components/official-badge/official-badge.tsx
+++ b/plugins/woocommerce/client/admin/client/settings-payments/components/official-badge/official-badge.tsx
@@ -66,6 +66,17 @@ export const OfficialBadge = ( {
setPopoverVisible( false );
};
+ const handleKeyDown = ( event: React.KeyboardEvent ) => {
+ if ( event.key === 'Escape' && isPopoverVisible ) {
+ event.stopPropagation();
+ setPopoverVisible( false );
+ buttonRef.current?.focus();
+ } else if ( event.key === 'Enter' || event.key === ' ' ) {
+ event.preventDefault();
+ handleClick( event );
+ }
+ };
+
return (
<Pill className={ `woocommerce-official-extension-badge` }>
<span
@@ -74,11 +85,7 @@ export const OfficialBadge = ( {
role="button"
ref={ buttonRef }
onClick={ handleClick }
- onKeyDown={ ( event: React.KeyboardEvent ) => {
- if ( event.key === 'Enter' || event.key === ' ' ) {
- handleClick( event );
- }
- } }
+ onKeyDown={ handleKeyDown }
>
<img
src={ WC_ASSET_URL + 'images/icons/official-extension.svg' }
@@ -100,8 +107,13 @@ export const OfficialBadge = ( {
noArrow={ true }
shift={ true }
onFocusOutside={ handleFocusOutside }
+ onKeyDown={ handleKeyDown }
>
- <div className="components-popover__content-container">
+ { /* eslint-disable-next-line jsx-a11y/no-static-element-interactions */ }
+ <div
+ className="components-popover__content-container"
+ onKeyDown={ handleKeyDown }
+ >
<p>
{ createInterpolateElement(
__(
diff --git a/plugins/woocommerce/client/admin/client/settings-payments/components/other-payment-gateways/other-payment-gateways.tsx b/plugins/woocommerce/client/admin/client/settings-payments/components/other-payment-gateways/other-payment-gateways.tsx
index d3a03cb96f..12560909dd 100644
--- a/plugins/woocommerce/client/admin/client/settings-payments/components/other-payment-gateways/other-payment-gateways.tsx
+++ b/plugins/woocommerce/client/admin/client/settings-payments/components/other-payment-gateways/other-payment-gateways.tsx
@@ -103,6 +103,23 @@ export const OtherPaymentGateways = ( {
setCategoryIdWithPopoverVisible( '' );
};
+ const handleInfoIconKeyDown = (
+ event: React.KeyboardEvent,
+ categoryId: string
+ ) => {
+ if (
+ event.key === 'Escape' &&
+ categoryId === categoryIdWithPopoverVisible
+ ) {
+ event.stopPropagation();
+ setCategoryIdWithPopoverVisible( '' );
+ buttonRefs.current[ categoryId ]?.focus();
+ } else if ( event.key === 'Enter' || event.key === ' ' ) {
+ event.preventDefault();
+ handleInfoIconClick( event, categoryId );
+ }
+ };
+
const handleSectionToggle = () => {
const expand = ! isExpanded;
@@ -206,17 +223,12 @@ export const OtherPaymentGateways = ( {
category.id
)
}
- onKeyDown={ ( event ) => {
- if (
- event.key === 'Enter' ||
- event.key === ' '
- ) {
- handleInfoIconClick(
- event,
- category.id
- );
- }
- } }
+ onKeyDown={ ( event ) =>
+ handleInfoIconKeyDown(
+ event,
+ category.id
+ )
+ }
tabIndex={ 0 }
role="button"
ref={ ( el ) => {
@@ -240,8 +252,23 @@ export const OtherPaymentGateways = ( {
onFocusOutside={
handleFocusOutsidePopover
}
+ onKeyDown={ ( event ) =>
+ handleInfoIconKeyDown(
+ event,
+ category.id
+ )
+ }
>
- <div className="components-popover__content-container">
+ { /* eslint-disable-next-line jsx-a11y/no-static-element-interactions */ }
+ <div
+ className="components-popover__content-container"
+ onKeyDown={ ( event ) =>
+ handleInfoIconKeyDown(
+ event,
+ category.id
+ )
+ }
+ >
<p>
{ decodeEntities(
category.description
@@ -365,27 +392,26 @@ export const OtherPaymentGateways = ( {
'other-payment-gateways' + ( isExpanded ? ' is-expanded' : '' )
}
>
- <div
+ <button
className="other-payment-gateways__header"
onClick={ handleSectionToggle }
- onKeyDown={ ( event ) => {
- if ( event.key === 'Enter' || event.key === ' ' ) {
- handleSectionToggle();
- }
- } }
- role="button"
- tabIndex={ 0 }
aria-expanded={ isExpanded }
+ type="button"
>
- <div className="other-payment-gateways__header__title">
+ <span className="other-payment-gateways__header__title">
<span>{ __( 'More payment options', 'woocommerce' ) }</span>
{ ! isExpanded && <>{ collapsedImages }</> }
- </div>
+ </span>
<Gridicon
className="other-payment-gateways__header__arrow"
icon={ isExpanded ? 'chevron-up' : 'chevron-down' }
/>
- </div>
+ <span className="screen-reader-text">
+ { isExpanded
+ ? __( 'Collapse section', 'woocommerce' )
+ : __( 'Expand section', 'woocommerce' ) }
+ </span>
+ </button>
{ isExpanded && (
<div className="other-payment-gateways__content">
{ expandedContent }
diff --git a/plugins/woocommerce/client/admin/client/settings-payments/components/payment-gateways/payment-gateways.tsx b/plugins/woocommerce/client/admin/client/settings-payments/components/payment-gateways/payment-gateways.tsx
index 30d8878e57..00ae88afbc 100644
--- a/plugins/woocommerce/client/admin/client/settings-payments/components/payment-gateways/payment-gateways.tsx
+++ b/plugins/woocommerce/client/admin/client/settings-payments/components/payment-gateways/payment-gateways.tsx
@@ -12,7 +12,7 @@ import {
woopaymentsOnboardingStore,
} from '@woocommerce/data';
import { useDispatch } from '@wordpress/data';
-import { useMemo, useRef, useState } from '@wordpress/element';
+import { useEffect, useMemo, useRef, useState } from '@wordpress/element';
import { decodeEntities } from '@wordpress/html-entities';
import { Popover } from '@wordpress/components';
import { Link } from '@woocommerce/components';
@@ -131,6 +131,42 @@ export const PaymentGateways = ( {
setIsPopoverVisible( false );
};
+ const handleIndicatorKeyDown = ( event: React.KeyboardEvent ) => {
+ if ( event.key === 'Escape' && isPopoverVisible ) {
+ event.stopPropagation();
+ setIsPopoverVisible( false );
+ buttonRef.current?.focus();
+ } else if ( event.key === 'Enter' || event.key === ' ' ) {
+ // Only handle Enter/Space when the indicator button itself is focused,
+ // allowing links inside the popover to work normally.
+ if ( event.target !== buttonRef.current ) {
+ return;
+ }
+ event.preventDefault();
+ handleBusinessLocationIndicatorClick( event );
+ }
+ };
+
+ // Handle Escape key globally when popover is open (for portal focus)
+ useEffect( () => {
+ if ( ! isPopoverVisible ) {
+ return;
+ }
+
+ const handleGlobalKeyDown = ( event: KeyboardEvent ) => {
+ if ( event.key === 'Escape' ) {
+ event.stopPropagation();
+ setIsPopoverVisible( false );
+ buttonRef.current?.focus();
+ }
+ };
+
+ document.addEventListener( 'keydown', handleGlobalKeyDown );
+ return () => {
+ document.removeEventListener( 'keydown', handleGlobalKeyDown );
+ };
+ }, [ isPopoverVisible ] );
+
return (
<div className="settings-payment-gateways">
<div className="settings-payment-gateways__header">
@@ -187,16 +223,7 @@ export const PaymentGateways = ( {
role="button"
ref={ buttonRef }
onClick={ handleBusinessLocationIndicatorClick }
- onKeyDown={ ( event ) => {
- if (
- event.key === 'Enter' ||
- event.key === ' '
- ) {
- handleBusinessLocationIndicatorClick(
- event
- );
- }
- } }
+ onKeyDown={ handleIndicatorKeyDown }
>
<div className="settings-payment-gateways__header-select-container--indicator-icon">
<InfoOutline />
diff --git a/plugins/woocommerce/client/admin/client/settings-payments/components/status-badge/status-badge.tsx b/plugins/woocommerce/client/admin/client/settings-payments/components/status-badge/status-badge.tsx
index 12148eb063..e16c51ad43 100644
--- a/plugins/woocommerce/client/admin/client/settings-payments/components/status-badge/status-badge.tsx
+++ b/plugins/woocommerce/client/admin/client/settings-payments/components/status-badge/status-badge.tsx
@@ -79,6 +79,17 @@ export const StatusBadge = ( {
setPopoverVisible( false );
};
+ const handleKeyDown = ( event: React.KeyboardEvent ) => {
+ if ( event.key === 'Escape' && isPopoverVisible ) {
+ event.stopPropagation();
+ setPopoverVisible( false );
+ buttonRef.current?.focus();
+ } else if ( event.key === 'Enter' || event.key === ' ' ) {
+ event.preventDefault();
+ handleClick( event );
+ }
+ };
+
/**
* Get the appropriate CSS class for the badge based on the status.
*/
@@ -137,11 +148,7 @@ export const StatusBadge = ( {
aria-label={ __( 'More information', 'woocommerce' ) }
ref={ buttonRef }
onClick={ handleClick }
- onKeyDown={ ( event: React.KeyboardEvent ) => {
- if ( event.key === 'Enter' || event.key === ' ' ) {
- handleClick( event );
- }
- } }
+ onKeyDown={ handleKeyDown }
>
<Icon
className="woocommerce-status-badge-icon"
@@ -158,8 +165,13 @@ export const StatusBadge = ( {
noArrow={ true }
shift={ true }
onFocusOutside={ handleFocusOutside }
+ onKeyDown={ handleKeyDown }
>
- <div className="components-popover__content-container">
+ { /* eslint-disable-next-line jsx-a11y/no-static-element-interactions */ }
+ <div
+ className="components-popover__content-container"
+ onKeyDown={ handleKeyDown }
+ >
{ popoverContent }
</div>
</Popover>
diff --git a/plugins/woocommerce/client/admin/client/settings-payments/settings-payments-main.scss b/plugins/woocommerce/client/admin/client/settings-payments/settings-payments-main.scss
index 65ad15f135..73739d7c35 100644
--- a/plugins/woocommerce/client/admin/client/settings-payments/settings-payments-main.scss
+++ b/plugins/woocommerce/client/admin/client/settings-payments/settings-payments-main.scss
@@ -102,6 +102,21 @@
cursor: pointer;
padding-top: 8px;
margin-left: auto;
+ border-radius: 2px;
+
+ &:focus {
+ outline: 1.5px solid var(--wp-admin-theme-color, #007cba);
+ outline-offset: -1.5px;
+ }
+
+ &:focus:not(:focus-visible) {
+ outline: none;
+ }
+
+ &:focus-visible {
+ outline: 1.5px solid var(--wp-admin-theme-color, #007cba);
+ outline-offset: -1.5px;
+ }
&-icon {
border-left: 1px solid $gray-200;
@@ -143,9 +158,16 @@
display: flex;
justify-content: space-between;
align-items: center;
-
- &:hover {
- cursor: pointer;
+ width: 100%;
+ background: none;
+ border: none;
+ padding: 0;
+ cursor: pointer;
+ text-align: left;
+
+ &:focus {
+ outline: 2px solid var(--wp-admin-theme-color, #007cba);
+ outline-offset: 2px;
}
&__title {
@@ -180,6 +202,20 @@
.components-button {
color: $gray-900;
}
+
+ /* Screen reader only text for accessibility */
+ .screen-reader-text {
+ border: 0;
+ clip: rect(1px, 1px, 1px, 1px);
+ clip-path: inset(50%);
+ height: 1px;
+ margin: -1px;
+ overflow: hidden;
+ padding: 0;
+ position: absolute;
+ width: 1px;
+ word-wrap: normal !important;
+ }
}
&.is-expanded {
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 19708d49c4..908b3a21aa 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -68,7 +68,7 @@ importers:
version: 4.1.2
copy-webpack-plugin:
specifier: 13.0.x
- version: 13.0.0(webpack@5.97.1)
+ version: 13.0.0(webpack@5.97.1(@swc/core@1.3.100))
core-js:
specifier: ^3.34.0
version: 3.34.0
@@ -116,7 +116,7 @@ importers:
version: 1.69.5
sass-loader:
specifier: 10.5.x
- version: 10.5.0(sass@1.69.5)(webpack@5.97.1)
+ version: 10.5.0(sass@1.69.5)(webpack@5.97.1(@swc/core@1.3.100))
syncpack:
specifier: ^10.9.3
version: 10.9.3
@@ -165,7 +165,7 @@ importers:
version: 29.5.0(@types/node@22.9.1)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@22.9.1)(typescript@5.7.2))
postcss-loader:
specifier: 4.3.x
- version: 4.3.0(postcss@8.4.49)(webpack@5.97.1(@swc/core@1.3.100))
+ version: 4.3.0(postcss@8.4.49)(webpack@5.97.1)
react:
specifier: 18.3.x
version: 18.3.1
@@ -280,7 +280,7 @@ importers:
version: 8.4.49
postcss-loader:
specifier: 4.3.x
- version: 4.3.0(postcss@8.4.49)(webpack@5.97.1(@swc/core@1.3.100))
+ version: 4.3.0(postcss@8.4.49)(webpack@5.97.1)
react:
specifier: 18.3.x
version: 18.3.1
@@ -587,7 +587,7 @@ importers:
version: 8.4.49
postcss-loader:
specifier: 4.3.x
- version: 4.3.0(postcss@8.4.49)(webpack@5.97.1(@swc/core@1.3.100))
+ version: 4.3.0(postcss@8.4.49)(webpack@5.97.1)
qrcode.react:
specifier: ^3.1.0
version: 3.1.0(react@18.3.1)
@@ -839,7 +839,7 @@ importers:
version: 8.4.49
postcss-loader:
specifier: 4.3.x
- version: 4.3.0(postcss@8.4.49)(webpack@5.97.1(@swc/core@1.3.100))
+ version: 4.3.0(postcss@8.4.49)(webpack@5.97.1)
rimraf:
specifier: 5.0.5
version: 5.0.5
@@ -1119,7 +1119,7 @@ importers:
version: 8.36.1-next.8b30e05b0.0
jest:
specifier: 29.5.x
- version: 29.5.0(@types/node@22.9.1)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@22.9.1)(typescript@5.7.2))
+ version: 29.5.0(@types/node@20.17.8)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@20.17.8)(typescript@5.7.2))
wireit:
specifier: 0.14.12
version: 0.14.12
@@ -1303,7 +1303,7 @@ importers:
version: 2.17.0(wp-prettier@2.8.5)
'@wordpress/stylelint-config':
specifier: ^21.0.0
- version: 21.36.0(postcss@8.4.32)(stylelint@14.16.1)
+ version: 21.36.0(postcss@8.4.49)(stylelint@14.16.1)
eslint:
specifier: ^8.55.0
version: 8.55.0
@@ -1327,7 +1327,7 @@ importers:
version: 14.16.1
ts-jest:
specifier: 29.1.x
- version: 29.1.1(@babel/core@7.25.7)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(jest@29.5.0(@types/node@20.17.8)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@20.17.8)(typescript@5.7.2)))(typescript@5.7.2)
+ version: 29.1.1(@babel/core@7.26.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(jest@29.5.0(@types/node@20.17.8)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@20.17.8)(typescript@5.7.2)))(typescript@5.7.2)
ts-loader:
specifier: 9.5.x
version: 9.5.1(typescript@5.7.2)(webpack@5.97.1(@swc/core@1.3.100))
@@ -1494,7 +1494,7 @@ importers:
version: 8.4.49
postcss-loader:
specifier: 4.3.x
- version: 4.3.0(postcss@8.4.49)(webpack@5.97.1(@swc/core@1.3.100))
+ version: 4.3.0(postcss@8.4.49)(webpack@5.97.1)
rimraf:
specifier: 5.0.5
version: 5.0.5
@@ -1807,7 +1807,7 @@ importers:
version: 4.1.0
'@automattic/webpack-rtl-plugin':
specifier: 6.0.x
- version: 6.0.0(webpack@5.97.1)
+ version: 6.0.0(webpack@5.97.1(@swc/core@1.3.100))
'@wordpress/base-styles':
specifier: wp-6.6
version: 5.0.1
@@ -1819,7 +1819,7 @@ importers:
version: 6.11.0(webpack@5.97.1(@swc/core@1.3.100))
fork-ts-checker-webpack-plugin:
specifier: 9.0.x
- version: 9.0.2(typescript@5.7.2)(webpack@5.97.1)
+ version: 9.0.2(typescript@5.7.2)(webpack@5.97.1(@swc/core@1.3.100))
json2php:
specifier: ^0.0.7
version: 0.0.7
@@ -1831,7 +1831,7 @@ importers:
version: 4.3.0(postcss@8.4.49)(webpack@5.97.1(@swc/core@1.3.100))
sass-loader:
specifier: 10.5.x
- version: 10.5.0(sass@1.69.5)(webpack@5.97.1)
+ version: 10.5.0(sass@1.69.5)(webpack@5.97.1(@swc/core@1.3.100))
webpack-remove-empty-scripts:
specifier: 1.0.x
version: 1.0.4(webpack@5.97.1)
@@ -2142,7 +2142,7 @@ importers:
version: 8.4.49
postcss-loader:
specifier: 4.3.x
- version: 4.3.0(postcss@8.4.49)(webpack@5.97.1(@swc/core@1.3.100))
+ version: 4.3.0(postcss@8.4.49)(webpack@5.97.1)
rimraf:
specifier: 5.0.5
version: 5.0.5
@@ -2308,7 +2308,7 @@ importers:
devDependencies:
'@automattic/webpack-rtl-plugin':
specifier: 6.0.x
- version: 6.0.0(webpack@5.97.1)
+ version: 6.0.0(webpack@5.97.1(@swc/core@1.3.100))
'@babel/core':
specifier: 7.25.7
version: 7.25.7
@@ -2401,7 +2401,7 @@ importers:
version: 8.4.49
postcss-loader:
specifier: 4.3.x
- version: 4.3.0(postcss@8.4.49)(webpack@5.97.1(@swc/core@1.3.100))
+ version: 4.3.0(postcss@8.4.49)(webpack@5.97.1)
react:
specifier: 18.3.x
version: 18.3.1
@@ -2680,7 +2680,7 @@ importers:
devDependencies:
'@automattic/webpack-rtl-plugin':
specifier: 6.0.x
- version: 6.0.0(webpack@5.97.1)
+ version: 6.0.0(webpack@5.97.1(@swc/core@1.3.100))
'@babel/core':
specifier: 7.25.7
version: 7.25.7
@@ -2761,7 +2761,7 @@ importers:
version: 8.4.49
postcss-loader:
specifier: 4.3.x
- version: 4.3.0(postcss@8.4.49)(webpack@5.97.1(@swc/core@1.3.100))
+ version: 4.3.0(postcss@8.4.49)(webpack@5.97.1)
react:
specifier: 18.3.x
version: 18.3.1
@@ -2797,7 +2797,7 @@ importers:
dependencies:
debug:
specifier: ^4.3.4
- version: 4.3.4(supports-color@5.5.0)
+ version: 4.3.4(supports-color@9.4.0)
devDependencies:
'@babel/core':
specifier: 7.25.7
@@ -2922,10 +2922,10 @@ importers:
version: 10.32.0(@types/node@22.9.1)
'@wordpress/scripts':
specifier: 30.6.0
- version: 30.6.0(@playwright/test@1.57.0)(@swc/core@1.3.100)(@types/node@22.9.1)(@types/webpack@4.41.38)(babel-plugin-macros@3.1.0)(file-loader@6.2.0(webpack@5.97.1))(node-notifier@8.0.2)(react@18.3.1)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@22.9.1)(typescript@5.7.2))(type-fest@4.41.0)(typescript@5.7.2)(webpack-hot-middleware@2.25.4)
+ version: 30.6.0(@playwright/test@1.57.0)(@swc/core@1.3.100)(@types/node@22.9.1)(@types/webpack@4.41.38)(file-loader@6.2.0(webpack@5.97.1))(node-notifier@8.0.2)(react@18.3.1)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@22.9.1)(typescript@5.7.2))(type-fest@4.41.0)(typescript@5.7.2)(webpack-hot-middleware@2.25.4)
'@wordpress/stylelint-config':
specifier: ^21.36.0
- version: 21.36.0(postcss@8.4.32)(stylelint@14.16.1)
+ version: 21.36.0(postcss@8.4.49)(stylelint@14.16.1)
allure-commandline:
specifier: ^2.32.2
version: 2.32.2
@@ -3244,7 +3244,7 @@ importers:
version: 3.34.0
debug:
specifier: ^4.3.4
- version: 4.3.4(supports-color@5.5.0)
+ version: 4.3.4(supports-color@9.4.0)
downshift:
specifier: ^9.0.8
version: 9.0.8(react@18.3.1)
@@ -3302,7 +3302,7 @@ importers:
version: 4.1.0
'@automattic/webpack-rtl-plugin':
specifier: 6.0.x
- version: 6.0.0(webpack@5.97.1)
+ version: 6.0.0(webpack@5.97.1(@swc/core@1.3.100))
'@babel/cli':
specifier: 7.25.7
version: 7.25.7(@babel/core@7.25.7)
@@ -3536,7 +3536,7 @@ importers:
version: 7.33.2(eslint@8.55.0)
fork-ts-checker-webpack-plugin:
specifier: 9.0.x
- version: 9.0.2(typescript@5.7.2)(webpack@5.97.1)
+ version: 9.0.2(typescript@5.7.2)(webpack@5.97.1(@swc/core@1.3.100))
fs-extra:
specifier: 11.1.1
version: 11.1.1
@@ -3578,7 +3578,7 @@ importers:
version: 4.1.0
postcss-loader:
specifier: 4.3.x
- version: 4.3.0(postcss@8.4.49)(webpack@5.97.1(@swc/core@1.3.100))
+ version: 4.3.0(postcss@8.4.49)(webpack@5.97.1)
prettier:
specifier: npm:wp-prettier@^2.8.5
version: wp-prettier@2.8.5
@@ -4171,7 +4171,7 @@ importers:
version: 4.1.0
postcss-loader:
specifier: 4.3.x
- version: 4.3.0(postcss@8.4.49)(webpack@5.97.1(@swc/core@1.3.100))
+ version: 4.3.0(postcss@8.4.49)(webpack@5.97.1)
prettier:
specifier: npm:wp-prettier@^2.8.5
version: wp-prettier@2.8.5
@@ -4256,7 +4256,7 @@ importers:
version: 20.17.8
'@wordpress/scripts':
specifier: ^30.23.0
- version: 30.23.0(@playwright/test@1.57.0)(@swc/core@1.3.100)(@types/eslint@8.44.8)(@types/node@20.17.8)(@types/webpack@4.41.38)(@wordpress/env@10.32.0(@types/node@20.17.8))(babel-plugin-macros@3.1.0)(file-loader@6.2.0(webpack@5.97.1))(node-notifier@8.0.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint-scss@6.11.1(stylelint@14.16.1))(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@20.17.8)(typescript@5.7.2))(type-fest@4.41.0)(typescript@5.7.2)(webpack-hot-middleware@2.25.4)
+ version: 30.23.0(@playwright/test@1.57.0)(@swc/core@1.3.100)(@types/eslint@8.44.8)(@types/node@20.17.8)(@types/webpack@4.41.38)(@wordpress/env@10.32.0(@types/node@20.17.8))(file-loader@6.2.0(webpack@5.97.1))(node-notifier@8.0.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint-scss@6.11.1(stylelint@14.16.1))(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@20.17.8)(typescript@5.7.2))(type-fest@4.41.0)(typescript@5.7.2)(webpack-hot-middleware@2.25.4)
'@wordpress/stylelint-config':
specifier: ^21.36.0
version: 21.36.0(postcss@8.4.49)(stylelint@14.16.1)
@@ -4371,7 +4371,7 @@ importers:
version: 29.5.0(@types/node@20.17.8)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@20.17.8)(typescript@5.7.2))
ts-jest:
specifier: 29.1.x
- version: 29.1.1(@babel/core@7.26.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(jest@29.5.0(@types/node@20.17.8)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@20.17.8)(typescript@5.7.2)))(typescript@5.7.2)
+ version: 29.1.1(@babel/core@7.26.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(jest@29.5.0(@types/node@20.17.8)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@20.17.8)(typescript@5.7.2)))(typescript@5.7.2)
ts-node:
specifier: ^10.9.2
version: 10.9.2(@swc/core@1.3.100)(@types/node@20.17.8)(typescript@5.7.2)
@@ -4559,7 +4559,7 @@ importers:
version: 1.2.2
ts-jest:
specifier: 29.1.x
- version: 29.1.1(@babel/core@7.26.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(jest@29.5.0(@types/node@20.17.8)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@20.17.8)(typescript@5.7.2)))(typescript@5.7.2)
+ version: 29.1.1(@babel/core@7.26.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(jest@29.5.0(@types/node@20.17.8)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@20.17.8)(typescript@5.7.2)))(typescript@5.7.2)
ts-loader:
specifier: 9.5.x
version: 9.5.1(typescript@5.7.2)(webpack@5.97.1(@swc/core@1.3.100))
@@ -24251,7 +24251,7 @@ snapshots:
'@wordpress/primitives': 3.55.0
'@wordpress/react-i18n': 3.55.0
classnames: 2.3.2
- debug: 4.3.4(supports-color@5.5.0)
+ debug: 4.3.4(supports-color@9.4.0)
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
react-popper: 2.3.0(@popperjs/core@2.11.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@@ -24271,7 +24271,7 @@ snapshots:
'@automattic/viewport@1.1.0': {}
- '@automattic/webpack-rtl-plugin@6.0.0(webpack@5.97.1)':
+ '@automattic/webpack-rtl-plugin@6.0.0(webpack@5.97.1(@swc/core@1.3.100))':
dependencies:
rtlcss: 3.5.0
webpack: 5.97.1(@swc/core@1.3.100)(webpack-cli@5.1.4)
@@ -26577,7 +26577,7 @@ snapshots:
'@types/istanbul-lib-coverage': 2.0.6
collect-v8-coverage: 1.0.2
- '@jest/test-sequencer@26.6.3(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@22.9.1)(typescript@5.7.2))':
+ '@jest/test-sequencer@26.6.3':
dependencies:
'@jest/test-result': 26.6.2
graceful-fs: 4.2.11
@@ -26585,11 +26585,7 @@ snapshots:
jest-runner: 26.6.3(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@22.9.1)(typescript@5.7.2))
jest-runtime: 26.6.3(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@22.9.1)(typescript@5.7.2))
transitivePeerDependencies:
- - bufferutil
- - canvas
- supports-color
- - ts-node
- - utf-8-validate
'@jest/test-sequencer@29.7.0':
dependencies:
@@ -27058,7 +27054,7 @@ snapshots:
'@oclif/color': 1.0.13
'@oclif/core': 2.15.0(@swc/core@1.3.100)(@types/node@20.17.8)(typescript@5.7.2)
chalk: 4.1.2
- debug: 4.3.4(supports-color@5.5.0)
+ debug: 4.3.4(supports-color@9.4.0)
fs-extra: 9.1.0
http-call: 5.3.0
load-json-file: 5.3.0
@@ -27582,7 +27578,7 @@ snapshots:
'@puppeteer/browsers@1.4.6(typescript@5.7.2)':
dependencies:
- debug: 4.3.4(supports-color@5.5.0)
+ debug: 4.3.4(supports-color@9.4.0)
extract-zip: 2.0.1
progress: 2.0.3
proxy-agent: 6.3.0
@@ -30748,18 +30744,18 @@ snapshots:
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
- '@stylelint/postcss-css-in-js@0.37.3(postcss-syntax@0.36.2(postcss-html@0.36.0(postcss-syntax@0.36.2(postcss@8.4.32))(postcss@7.0.39))(postcss-less@3.1.4)(postcss-scss@2.1.1)(postcss@7.0.39))(postcss@7.0.39)':
+ '@stylelint/postcss-css-in-js@0.37.3(postcss-syntax@0.36.2)(postcss@7.0.39)':
dependencies:
'@babel/core': 7.25.7
postcss: 7.0.39
- postcss-syntax: 0.36.2(postcss-html@0.36.0(postcss-syntax@0.36.2(postcss@8.4.32))(postcss@7.0.39))(postcss-less@3.1.4)(postcss-scss@2.1.1)(postcss@7.0.39)
+ postcss-syntax: 0.36.2(postcss@8.4.32)
transitivePeerDependencies:
- supports-color
- '@stylelint/postcss-markdown@0.36.2(postcss-syntax@0.36.2(postcss-html@0.36.0(postcss-syntax@0.36.2(postcss@8.4.32))(postcss@7.0.39))(postcss-less@3.1.4)(postcss-scss@2.1.1)(postcss@7.0.39))(postcss@7.0.39)':
+ '@stylelint/postcss-markdown@0.36.2(postcss-syntax@0.36.2)(postcss@7.0.39)':
dependencies:
postcss: 7.0.39
- postcss-syntax: 0.36.2(postcss-html@0.36.0(postcss-syntax@0.36.2(postcss@8.4.32))(postcss@7.0.39))(postcss-less@3.1.4)(postcss-scss@2.1.1)(postcss@7.0.39)
+ postcss-syntax: 0.36.2(postcss@8.4.32)
remark: 13.0.0
unist-util-find-all-after: 3.0.2
transitivePeerDependencies:
@@ -31903,7 +31899,7 @@ snapshots:
'@typescript-eslint/scope-manager': 5.56.0
'@typescript-eslint/type-utils': 5.56.0(eslint@8.55.0)(typescript@5.7.2)
'@typescript-eslint/utils': 5.56.0(eslint@8.55.0)(typescript@5.7.2)
- debug: 4.3.4(supports-color@5.5.0)
+ debug: 4.3.4(supports-color@9.4.0)
eslint: 8.55.0
grapheme-splitter: 1.0.4
ignore: 5.3.0
@@ -31922,7 +31918,7 @@ snapshots:
'@typescript-eslint/scope-manager': 5.62.0
'@typescript-eslint/type-utils': 5.62.0(eslint@8.55.0)(typescript@5.7.2)
'@typescript-eslint/utils': 5.62.0(eslint@8.55.0)(typescript@5.7.2)
- debug: 4.3.4(supports-color@5.5.0)
+ debug: 4.3.4(supports-color@9.4.0)
eslint: 8.55.0
graphemer: 1.4.0
ignore: 5.3.0
@@ -32003,7 +31999,7 @@ snapshots:
'@typescript-eslint/scope-manager': 5.56.0
'@typescript-eslint/types': 5.56.0
'@typescript-eslint/typescript-estree': 5.56.0(typescript@5.7.2)
- debug: 4.3.4(supports-color@5.5.0)
+ debug: 4.3.4(supports-color@9.4.0)
eslint: 8.55.0
optionalDependencies:
typescript: 5.7.2
@@ -32552,8 +32548,8 @@ snapshots:
'@webpack-cli/configtest@2.1.1(webpack-cli@5.1.4)(webpack@5.97.1)':
dependencies:
- webpack: 5.97.1(@swc/core@1.3.100)(webpack-cli@5.1.4)
- webpack-cli: 5.1.4(webpack@5.97.1)
+ webpack: 5.97.1(@swc/core@1.3.100)(esbuild@0.18.20)(webpack-cli@5.1.4)
+ webpack-cli: 5.1.4(webpack-bundle-analyzer@4.9.1)(webpack-dev-server@4.15.1)(webpack@5.97.1)
'@webpack-cli/info@1.5.0(webpack-cli@4.10.0(webpack-bundle-analyzer@4.7.0)(webpack@5.89.0))':
dependencies:
@@ -32562,8 +32558,8 @@ snapshots:
'@webpack-cli/info@2.0.2(webpack-cli@5.1.4)(webpack@5.97.1)':
dependencies:
- webpack: 5.97.1(@swc/core@1.3.100)(webpack-cli@5.1.4)
- webpack-cli: 5.1.4(webpack@5.97.1)
+ webpack: 5.97.1(@swc/core@1.3.100)(esbuild@0.18.20)(webpack-cli@5.1.4)
+ webpack-cli: 5.1.4(webpack-bundle-analyzer@4.9.1)(webpack-dev-server@4.15.1)(webpack@5.97.1)
'@webpack-cli/serve@1.7.0(webpack-cli@4.10.0(webpack-bundle-analyzer@4.7.0)(webpack@5.89.0))':
dependencies:
@@ -32571,8 +32567,8 @@ snapshots:
'@webpack-cli/serve@2.0.5(webpack-cli@5.1.4)(webpack-dev-server@4.15.1)(webpack@5.97.1)':
dependencies:
- webpack: 5.97.1(@swc/core@1.3.100)(webpack-cli@5.1.4)
- webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@4.15.1)(webpack@5.97.1)
+ webpack: 5.97.1(@swc/core@1.3.100)(esbuild@0.18.20)(webpack-cli@5.1.4)
+ webpack-cli: 5.1.4(webpack-bundle-analyzer@4.9.1)(webpack-dev-server@4.15.1)(webpack@5.97.1)
optionalDependencies:
webpack-dev-server: 4.15.1(webpack-cli@5.1.4)(webpack@5.97.1)
@@ -34597,7 +34593,7 @@ snapshots:
'@wordpress/dependency-extraction-webpack-plugin@6.36.1-next.8b30e05b0.0(webpack@5.97.1)':
dependencies:
json2php: 0.0.7
- webpack: 5.97.1(@swc/core@1.3.100)(webpack-cli@5.1.4)
+ webpack: 5.97.1(@swc/core@1.3.100)(esbuild@0.18.20)(webpack-cli@5.1.4)
'@wordpress/deprecated@2.12.3':
dependencies:
@@ -35333,7 +35329,7 @@ snapshots:
- jest
- supports-color
- '@wordpress/eslint-plugin@14.7.0(@babel/core@7.25.7)(eslint@8.55.0)(jest@29.7.0(@types/node@22.9.1)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@22.9.1)(typescript@5.7.2)))(typescript@5.7.2)(wp-prettier@3.0.3)':
+ '@wordpress/eslint-plugin@14.7.0(@babel/core@7.25.7)(eslint@8.55.0)(jest@29.7.0(@types/node@22.9.1)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@22.9.1)(typescript@5.7.2)))(typescript@5.7.2)(wp-prettier@3.0.3)':
dependencies:
'@babel/core': 7.25.7
'@babel/eslint-parser': 7.23.3(@babel/core@7.25.7)(eslint@8.55.0)
@@ -35345,7 +35341,7 @@ snapshots:
eslint: 8.55.0
eslint-config-prettier: 8.10.0(eslint@8.55.0)
eslint-plugin-import: 2.29.0(@typescript-eslint/parser@5.62.0(eslint@8.55.0)(typescript@5.7.2))(eslint-import-resolver-typescript@3.6.1)(eslint-import-resolver-webpack@0.13.8)(eslint@8.55.0)
- eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.55.0)(typescript@5.7.2))(eslint@8.55.0)(typescript@5.7.2))(eslint@8.55.0)(jest@29.7.0(@types/node@22.9.1)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@22.9.1)(typescript@5.7.2)))(typescript@5.7.2)
+ eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.55.0)(typescript@5.7.2))(eslint@8.55.0)(typescript@5.7.2))(eslint@8.55.0)(jest@29.7.0(@types/node@22.9.1)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@22.9.1)(typescript@5.7.2)))(typescript@5.7.2)
eslint-plugin-jsdoc: 39.9.1(eslint@8.55.0)
eslint-plugin-jsx-a11y: 6.8.0(eslint@8.55.0)
eslint-plugin-prettier: 3.4.1(eslint-config-prettier@8.10.0(eslint@8.55.0))(eslint@8.55.0)(wp-prettier@3.0.3)
@@ -35393,7 +35389,7 @@ snapshots:
- jest
- supports-color
- '@wordpress/eslint-plugin@22.16.0(@babel/core@7.25.7)(@types/eslint@8.44.8)(eslint@8.55.0)(jest@29.7.0(@types/node@20.17.8)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@20.17.8)(typescript@5.7.2)))(typescript@5.7.2)(wp-prettier@3.0.3)':
+ '@wordpress/eslint-plugin@22.16.0(@babel/core@7.25.7)(@types/eslint@8.44.8)(eslint@8.55.0)(jest@29.7.0(@types/node@20.17.8)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@20.17.8)(typescript@5.7.2)))(typescript@5.7.2)(wp-prettier@3.0.3)':
dependencies:
'@babel/core': 7.25.7
'@babel/eslint-parser': 7.25.7(@babel/core@7.25.7)(eslint@8.55.0)
@@ -35405,10 +35401,10 @@ snapshots:
eslint: 8.55.0
eslint-config-prettier: 8.10.0(eslint@8.55.0)
eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.21.0(eslint@8.55.0)(typescript@5.7.2))(eslint-import-resolver-typescript@3.6.1)(eslint-import-resolver-webpack@0.13.2)(eslint@8.55.0)
- eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.55.0)(typescript@5.7.2))(eslint@8.55.0)(typescript@5.7.2))(eslint@8.55.0)(jest@29.7.0(@types/node@20.17.8)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@20.17.8)(typescript@5.7.2)))(typescript@5.7.2)
+ eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.55.0)(typescript@5.7.2))(eslint@8.55.0)(typescript@5.7.2))(eslint@8.55.0)(jest@29.7.0(@types/node@20.17.8)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@20.17.8)(typescript@5.7.2)))(typescript@5.7.2)
eslint-plugin-jsdoc: 46.10.1(eslint@8.55.0)
eslint-plugin-jsx-a11y: 6.8.0(eslint@8.55.0)
- eslint-plugin-playwright: 0.15.3(eslint-plugin-jest@27.6.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.55.0)(typescript@5.7.2))(eslint@8.55.0)(typescript@5.7.2))(eslint@8.55.0)(jest@29.7.0(@types/node@20.17.8)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@20.17.8)(typescript@5.7.2)))(typescript@5.7.2))(eslint@8.55.0)
+ eslint-plugin-playwright: 0.15.3(eslint-plugin-jest@27.6.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.55.0)(typescript@5.7.2))(eslint@8.55.0)(typescript@5.7.2))(eslint@8.55.0)(jest@29.7.0(@types/node@20.17.8)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@20.17.8)(typescript@5.7.2)))(typescript@5.7.2))(eslint@8.55.0)
eslint-plugin-prettier: 5.2.3(@types/eslint@8.44.8)(eslint-config-prettier@8.10.0(eslint@8.55.0))(eslint@8.55.0)(wp-prettier@3.0.3)
eslint-plugin-react: 7.33.2(eslint@8.55.0)
eslint-plugin-react-hooks: 4.6.0(eslint@8.55.0)
@@ -35942,7 +35938,7 @@ snapshots:
jest: 29.5.0(@types/node@22.9.1)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@22.9.1)(typescript@5.7.2))
jest-matcher-utils: 27.5.1
- '@wordpress/jest-console@5.4.0(jest@29.7.0(@types/node@22.9.1)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@22.9.1)(typescript@5.7.2)))':
+ '@wordpress/jest-console@5.4.0(jest@29.7.0(@types/node@22.9.1)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@22.9.1)(typescript@5.7.2)))':
dependencies:
'@babel/runtime': 7.25.7
jest: 29.7.0(@types/node@22.9.1)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@22.9.1)(typescript@5.7.2))
@@ -35966,10 +35962,10 @@ snapshots:
jest: 29.7.0(@types/node@22.9.1)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@22.9.1)(typescript@5.7.2))
jest-matcher-utils: 29.7.0
- '@wordpress/jest-console@8.30.0(jest@29.7.0(@types/node@20.17.8)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@20.17.8)(typescript@5.7.2)))':
+ '@wordpress/jest-console@8.30.0(jest@29.7.0(@types/node@20.17.8)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@20.17.8)(typescript@5.7.2)))':
dependencies:
'@babel/runtime': 7.25.7
- jest: 29.7.0(@types/node@20.17.8)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@20.17.8)(typescript@5.7.2))
+ jest: 29.7.0(@types/node@20.17.8)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@20.17.8)(typescript@5.7.2))
jest-matcher-utils: 29.7.0
'@wordpress/jest-preset-default@11.29.0(@babel/core@7.25.7)(jest@29.7.0(@types/node@22.9.1)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@22.9.1)(typescript@5.7.2)))':
@@ -35999,12 +35995,12 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@wordpress/jest-preset-default@12.30.0(@babel/core@7.25.7)(jest@29.7.0(@types/node@20.17.8)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@20.17.8)(typescript@5.7.2)))':
+ '@wordpress/jest-preset-default@12.30.0(@babel/core@7.25.7)(jest@29.7.0(@types/node@20.17.8)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@20.17.8)(typescript@5.7.2)))':
dependencies:
'@babel/core': 7.25.7
- '@wordpress/jest-console': 8.30.0(jest@29.7.0(@types/node@20.17.8)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@20.17.8)(typescript@5.7.2)))
+ '@wordpress/jest-console': 8.30.0(jest@29.7.0(@types/node@20.17.8)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@20.17.8)(typescript@5.7.2)))
babel-jest: 29.7.0(@babel/core@7.25.7)
- jest: 29.7.0(@types/node@20.17.8)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@20.17.8)(typescript@5.7.2))
+ jest: 29.7.0(@types/node@20.17.8)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@20.17.8)(typescript@5.7.2))
transitivePeerDependencies:
- supports-color
@@ -36036,11 +36032,11 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@wordpress/jest-preset-default@8.5.2(@babel/core@7.25.7)(jest@29.7.0(@types/node@22.9.1)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@22.9.1)(typescript@5.7.2)))(react@18.3.1)':
+ '@wordpress/jest-preset-default@8.5.2(@babel/core@7.25.7)(jest@29.7.0(@types/node@22.9.1)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@22.9.1)(typescript@5.7.2)))(react@18.3.1)':
dependencies:
'@babel/core': 7.25.7
'@wojtekmaj/enzyme-adapter-react-17': 0.6.7(enzyme@3.11.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@wordpress/jest-console': 5.4.0(jest@29.7.0(@types/node@22.9.1)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@22.9.1)(typescript@5.7.2)))
+ '@wordpress/jest-console': 5.4.0(jest@29.7.0(@types/node@22.9.1)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@22.9.1)(typescript@5.7.2)))
babel-jest: 27.5.1(@babel/core@7.25.7)
enzyme: 3.11.0
enzyme-to-json: 3.6.2(enzyme@3.11.0)
@@ -36829,7 +36825,7 @@ snapshots:
expect-puppeteer: 4.4.0
filenamify: 4.3.0
jest: 26.6.3(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@22.9.1)(typescript@5.7.2))
- jest-circus: 26.6.3(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@22.9.1)(typescript@5.7.2))
+ jest-circus: 26.6.3
jest-dev-server: 5.0.3
jest-environment-node: 26.6.2
markdownlint: 0.23.1
@@ -36937,7 +36933,7 @@ snapshots:
sass-loader: 12.6.0(sass@1.69.5)(webpack@5.97.1)
source-map-loader: 3.0.2(webpack@5.97.1)
stylelint: 14.16.1
- terser-webpack-plugin: 5.3.11(@swc/core@1.3.100)(webpack@5.97.1(@swc/core@1.3.100))
+ terser-webpack-plugin: 5.3.11(@swc/core@1.3.100)(webpack@5.97.1)
url-loader: 4.1.1(file-loader@6.2.0(webpack@5.97.1))(webpack@5.97.1)
webpack: 5.97.1(@swc/core@1.3.100)(webpack-cli@5.1.4)
webpack-bundle-analyzer: 4.9.1
@@ -37067,7 +37063,7 @@ snapshots:
- webpack-hot-middleware
- webpack-plugin-serve
- '@wordpress/scripts@30.23.0(@playwright/test@1.57.0)(@swc/core@1.3.100)(@types/eslint@8.44.8)(@types/node@20.17.8)(@types/webpack@4.41.38)(@wordpress/env@10.32.0(@types/node@20.17.8))(babel-plugin-macros@3.1.0)(file-loader@6.2.0(webpack@5.97.1))(node-notifier@8.0.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint-scss@6.11.1(stylelint@14.16.1))(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@20.17.8)(typescript@5.7.2))(type-fest@4.41.0)(typescript@5.7.2)(webpack-hot-middleware@2.25.4)':
+ '@wordpress/scripts@30.23.0(@playwright/test@1.57.0)(@swc/core@1.3.100)(@types/eslint@8.44.8)(@types/node@20.17.8)(@types/webpack@4.41.38)(@wordpress/env@10.32.0(@types/node@20.17.8))(file-loader@6.2.0(webpack@5.97.1))(node-notifier@8.0.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint-scss@6.11.1(stylelint@14.16.1))(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@20.17.8)(typescript@5.7.2))(type-fest@4.41.0)(typescript@5.7.2)(webpack-hot-middleware@2.25.4)':
dependencies:
'@babel/core': 7.25.7
'@playwright/test': 1.57.0
@@ -37077,8 +37073,8 @@ snapshots:
'@wordpress/browserslist-config': 6.30.0
'@wordpress/dependency-extraction-webpack-plugin': 6.30.0(webpack@5.97.1)
'@wordpress/e2e-test-utils-playwright': 1.30.0(@playwright/test@1.57.0)
- '@wordpress/eslint-plugin': 22.16.0(@babel/core@7.25.7)(@types/eslint@8.44.8)(eslint@8.55.0)(jest@29.7.0(@types/node@20.17.8)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@20.17.8)(typescript@5.7.2)))(typescript@5.7.2)(wp-prettier@3.0.3)
- '@wordpress/jest-preset-default': 12.30.0(@babel/core@7.25.7)(jest@29.7.0(@types/node@20.17.8)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@20.17.8)(typescript@5.7.2)))
+ '@wordpress/eslint-plugin': 22.16.0(@babel/core@7.25.7)(@types/eslint@8.44.8)(eslint@8.55.0)(jest@29.7.0(@types/node@20.17.8)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@20.17.8)(typescript@5.7.2)))(typescript@5.7.2)(wp-prettier@3.0.3)
+ '@wordpress/jest-preset-default': 12.30.0(@babel/core@7.25.7)(jest@29.7.0(@types/node@20.17.8)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@20.17.8)(typescript@5.7.2)))
'@wordpress/npm-package-json-lint-config': 5.30.0(npm-package-json-lint@6.4.0(typescript@5.7.2))
'@wordpress/postcss-plugins-preset': 5.30.0(postcss@8.4.49)
'@wordpress/prettier-config': 4.30.0(wp-prettier@3.0.3)
@@ -37099,7 +37095,7 @@ snapshots:
expect-puppeteer: 4.4.0
fast-glob: 3.3.3
filenamify: 4.3.0
- jest: 29.7.0(@types/node@20.17.8)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@20.17.8)(typescript@5.7.2))
+ jest: 29.7.0(@types/node@20.17.8)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@20.17.8)(typescript@5.7.2))
jest-dev-server: 10.1.4
jest-environment-jsdom: 29.7.0
jest-environment-node: 29.7.0
@@ -37125,7 +37121,7 @@ snapshots:
schema-utils: 4.3.0
source-map-loader: 3.0.2(webpack@5.97.1)
stylelint: 16.11.0(typescript@5.7.2)
- terser-webpack-plugin: 5.3.11(@swc/core@1.3.100)(webpack@5.97.1(@swc/core@1.3.100))
+ terser-webpack-plugin: 5.3.11(@swc/core@1.3.100)(webpack@5.97.1)
url-loader: 4.1.1(file-loader@6.2.0(webpack@5.97.1))(webpack@5.97.1)
webpack: 5.97.1(@swc/core@1.3.100)(webpack-cli@5.1.4)
webpack-bundle-analyzer: 4.9.1
@@ -37162,7 +37158,7 @@ snapshots:
- webpack-hot-middleware
- webpack-plugin-serve
- '@wordpress/scripts@30.6.0(@playwright/test@1.57.0)(@swc/core@1.3.100)(@types/node@22.9.1)(@types/webpack@4.41.38)(babel-plugin-macros@3.1.0)(file-loader@6.2.0(webpack@5.97.1))(node-notifier@8.0.2)(react@18.3.1)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@22.9.1)(typescript@5.7.2))(type-fest@4.41.0)(typescript@5.7.2)(webpack-hot-middleware@2.25.4)':
+ '@wordpress/scripts@30.6.0(@playwright/test@1.57.0)(@swc/core@1.3.100)(@types/node@22.9.1)(@types/webpack@4.41.38)(file-loader@6.2.0(webpack@5.97.1))(node-notifier@8.0.2)(react@18.3.1)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@22.9.1)(typescript@5.7.2))(type-fest@4.41.0)(typescript@5.7.2)(webpack-hot-middleware@2.25.4)':
dependencies:
'@babel/core': 7.25.7
'@playwright/test': 1.57.0
@@ -37172,8 +37168,8 @@ snapshots:
'@wordpress/browserslist-config': 6.0.1
'@wordpress/dependency-extraction-webpack-plugin': 6.30.0(webpack@5.97.1)
'@wordpress/e2e-test-utils-playwright': 1.19.1(@playwright/test@1.57.0)
- '@wordpress/eslint-plugin': 14.7.0(@babel/core@7.25.7)(eslint@8.55.0)(jest@29.7.0(@types/node@22.9.1)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@22.9.1)(typescript@5.7.2)))(typescript@5.7.2)(wp-prettier@3.0.3)
- '@wordpress/jest-preset-default': 8.5.2(@babel/core@7.25.7)(jest@29.7.0(@types/node@22.9.1)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@22.9.1)(typescript@5.7.2)))(react@18.3.1)
+ '@wordpress/eslint-plugin': 14.7.0(@babel/core@7.25.7)(eslint@8.55.0)(jest@29.7.0(@types/node@22.9.1)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@22.9.1)(typescript@5.7.2)))(typescript@5.7.2)(wp-prettier@3.0.3)
+ '@wordpress/jest-preset-default': 8.5.2(@babel/core@7.25.7)(jest@29.7.0(@types/node@22.9.1)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@22.9.1)(typescript@5.7.2)))(react@18.3.1)
'@wordpress/npm-package-json-lint-config': 4.32.0(npm-package-json-lint@6.4.0(typescript@5.7.2))
'@wordpress/postcss-plugins-preset': 1.6.0
'@wordpress/prettier-config': 2.17.0(wp-prettier@3.0.3)
@@ -37220,7 +37216,7 @@ snapshots:
schema-utils: 4.2.0
source-map-loader: 3.0.2(webpack@5.97.1)
stylelint: 16.11.0(typescript@5.7.2)
- terser-webpack-plugin: 5.3.11(@swc/core@1.3.100)(webpack@5.97.1(@swc/core@1.3.100))
+ terser-webpack-plugin: 5.3.11(@swc/core@1.3.100)(webpack@5.97.1)
url-loader: 4.1.1(file-loader@6.2.0(webpack@5.97.1))(webpack@5.97.1)
webpack: 5.97.1(@swc/core@1.3.100)(webpack-cli@5.1.4)
webpack-bundle-analyzer: 4.10.2
@@ -37363,14 +37359,6 @@ snapshots:
stylelint-config-recommended-scss: 4.3.0(stylelint-scss@3.21.0(stylelint@13.13.1))(stylelint@13.13.1)
stylelint-scss: 3.21.0(stylelint@13.13.1)
- '@wordpress/stylelint-config@21.36.0(postcss@8.4.32)(stylelint@14.16.1)':
- dependencies:
- stylelint: 14.16.1
- stylelint-config-recommended: 6.0.0(stylelint@14.16.1)
- stylelint-config-recommended-scss: 5.0.2(postcss@8.4.32)(stylelint@14.16.1)
- transitivePeerDependencies:
- - postcss
-
'@wordpress/stylelint-config@21.36.0(postcss@8.4.32)(stylelint@16.11.0(typescript@5.7.2))':
dependencies:
stylelint: 16.11.0(typescript@5.7.2)
@@ -39856,7 +39844,7 @@ snapshots:
serialize-javascript: 6.0.1
webpack: 5.97.1(@swc/core@1.3.100)(webpack-cli@5.1.4)
- copy-webpack-plugin@13.0.0(webpack@5.97.1):
+ copy-webpack-plugin@13.0.0(webpack@5.97.1(@swc/core@1.3.100)):
dependencies:
glob-parent: 6.0.2
normalize-path: 3.0.0
@@ -39865,6 +39853,15 @@ snapshots:
tinyglobby: 0.2.12
webpack: 5.97.1(@swc/core@1.3.100)(webpack-cli@5.1.4)
+ copy-webpack-plugin@13.0.0(webpack@5.97.1):
+ dependencies:
+ glob-parent: 6.0.2
+ normalize-path: 3.0.0
+ schema-utils: 4.3.0
+ serialize-javascript: 6.0.2
+ tinyglobby: 0.2.12
+ webpack: 5.97.1(@swc/core@1.3.100)(esbuild@0.18.20)(webpack-cli@5.1.4)
+
core-js-compat@3.39.0:
dependencies:
browserslist: 4.24.4
@@ -39974,7 +39971,7 @@ snapshots:
safe-buffer: 5.2.1
sha.js: 2.4.11
- create-jest@29.7.0(@types/node@20.17.8)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@20.17.8)(typescript@5.7.2)):
+ create-jest@29.7.0(@types/node@20.17.8)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@20.17.8)(typescript@5.7.2)):
dependencies:
'@jest/types': 29.6.3
chalk: 4.1.2
@@ -41341,7 +41338,7 @@ snapshots:
eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@5.56.0(eslint@8.55.0)(typescript@5.7.2))(eslint-import-resolver-webpack@0.13.2)(eslint-plugin-import@2.28.1)(eslint@8.55.0):
dependencies:
- debug: 4.3.4(supports-color@5.5.0)
+ debug: 4.3.4(supports-color@9.4.0)
enhanced-resolve: 5.15.0
eslint: 8.55.0
eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.56.0(eslint@8.55.0)(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint-import-resolver-webpack@0.13.2)(eslint@8.55.0)
@@ -41358,7 +41355,7 @@ snapshots:
eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@5.62.0(eslint@8.55.0)(typescript@5.7.2))(eslint-import-resolver-webpack@0.13.8)(eslint-plugin-import@2.29.0)(eslint@8.55.0):
dependencies:
- debug: 4.3.4(supports-color@5.5.0)
+ debug: 4.3.4(supports-color@9.4.0)
enhanced-resolve: 5.15.0
eslint: 8.55.0
eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0(eslint@8.55.0)(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint-import-resolver-webpack@0.13.8)(eslint@8.55.0)
@@ -41603,7 +41600,7 @@ snapshots:
- supports-color
- typescript
- eslint-plugin-jest@27.6.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.55.0)(typescript@5.7.2))(eslint@8.55.0)(typescript@5.7.2))(eslint@8.55.0)(jest@29.7.0(@types/node@22.9.1)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@22.9.1)(typescript@5.7.2)))(typescript@5.7.2):
+ eslint-plugin-jest@27.6.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.55.0)(typescript@5.7.2))(eslint@8.55.0)(typescript@5.7.2))(eslint@8.55.0)(jest@29.7.0(@types/node@22.9.1)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@22.9.1)(typescript@5.7.2)))(typescript@5.7.2):
dependencies:
'@typescript-eslint/utils': 5.62.0(eslint@8.55.0)(typescript@5.7.2)
eslint: 8.55.0
@@ -41625,13 +41622,13 @@ snapshots:
- supports-color
- typescript
- eslint-plugin-jest@27.6.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.55.0)(typescript@5.7.2))(eslint@8.55.0)(typescript@5.7.2))(eslint@8.55.0)(jest@29.7.0(@types/node@20.17.8)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@20.17.8)(typescript@5.7.2)))(typescript@5.7.2):
+ eslint-plugin-jest@27.6.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.55.0)(typescript@5.7.2))(eslint@8.55.0)(typescript@5.7.2))(eslint@8.55.0)(jest@29.7.0(@types/node@20.17.8)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@20.17.8)(typescript@5.7.2)))(typescript@5.7.2):
dependencies:
'@typescript-eslint/utils': 5.62.0(eslint@8.55.0)(typescript@5.7.2)
eslint: 8.55.0
optionalDependencies:
'@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.55.0)(typescript@5.7.2))(eslint@8.55.0)(typescript@5.7.2)
- jest: 29.7.0(@types/node@20.17.8)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@20.17.8)(typescript@5.7.2))
+ jest: 29.7.0(@types/node@20.17.8)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@20.17.8)(typescript@5.7.2))
transitivePeerDependencies:
- supports-color
- typescript
@@ -41748,11 +41745,11 @@ snapshots:
transitivePeerDependencies:
- supports-color
- eslint-plugin-playwright@0.15.3(eslint-plugin-jest@27.6.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.55.0)(typescript@5.7.2))(eslint@8.55.0)(typescript@5.7.2))(eslint@8.55.0)(jest@29.7.0(@types/node@20.17.8)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@20.17.8)(typescript@5.7.2)))(typescript@5.7.2))(eslint@8.55.0):
+ eslint-plugin-playwright@0.15.3(eslint-plugin-jest@27.6.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.55.0)(typescript@5.7.2))(eslint@8.55.0)(typescript@5.7.2))(eslint@8.55.0)(jest@29.7.0(@types/node@20.17.8)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@20.17.8)(typescript@5.7.2)))(typescript@5.7.2))(eslint@8.55.0):
dependencies:
eslint: 8.55.0
optionalDependencies:
- eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.55.0)(typescript@5.7.2))(eslint@8.55.0)(typescript@5.7.2))(eslint@8.55.0)(jest@29.7.0(@types/node@20.17.8)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@20.17.8)(typescript@5.7.2)))(typescript@5.7.2)
+ eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.55.0)(typescript@5.7.2))(eslint@8.55.0)(typescript@5.7.2))(eslint@8.55.0)(jest@29.7.0(@types/node@20.17.8)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@20.17.8)(typescript@5.7.2)))(typescript@5.7.2)
eslint-plugin-playwright@0.15.3(eslint-plugin-jest@27.6.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.55.0)(typescript@5.7.2))(eslint@8.55.0)(typescript@5.7.2))(eslint@8.55.0)(jest@29.7.0(@types/node@22.9.1)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@22.9.1)(typescript@5.7.2)))(typescript@5.7.2))(eslint@8.55.0):
dependencies:
@@ -42656,7 +42653,7 @@ snapshots:
follow-redirects@1.15.6(debug@4.3.4):
optionalDependencies:
- debug: 4.3.4(supports-color@5.5.0)
+ debug: 4.3.4(supports-color@9.4.0)
for-each@0.3.3:
dependencies:
@@ -42756,7 +42753,7 @@ snapshots:
typescript: 5.7.2
webpack: 5.97.1(@swc/core@1.3.100)(esbuild@0.18.20)(webpack-cli@5.1.4)
- fork-ts-checker-webpack-plugin@9.0.2(typescript@5.7.2)(webpack@5.97.1):
+ fork-ts-checker-webpack-plugin@9.0.2(typescript@5.7.2)(webpack@5.97.1(@swc/core@1.3.100)):
dependencies:
'@babel/code-frame': 7.24.7
chalk: 4.1.2
@@ -44604,7 +44601,7 @@ snapshots:
jest-util: 29.7.0
p-limit: 3.1.0
- jest-circus@26.6.3(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@22.9.1)(typescript@5.7.2)):
+ jest-circus@26.6.3:
dependencies:
'@babel/traverse': 7.25.9
'@jest/environment': 26.6.2
@@ -44628,11 +44625,7 @@ snapshots:
stack-utils: 2.0.6
throat: 5.0.0
transitivePeerDependencies:
- - bufferutil
- - canvas
- supports-color
- - ts-node
- - utf-8-validate
jest-circus@29.5.0:
dependencies:
@@ -44751,13 +44744,13 @@ snapshots:
- supports-color
- ts-node
- jest-cli@29.7.0(@types/node@20.17.8)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@20.17.8)(typescript@5.7.2)):
+ jest-cli@29.7.0(@types/node@20.17.8)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@20.17.8)(typescript@5.7.2)):
dependencies:
'@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@20.17.8)(typescript@5.7.2))
'@jest/test-result': 29.7.0
'@jest/types': 29.6.3
chalk: 4.1.2
- create-jest: 29.7.0(@types/node@20.17.8)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@20.17.8)(typescript@5.7.2))
+ create-jest: 29.7.0(@types/node@20.17.8)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@20.17.8)(typescript@5.7.2))
exit: 0.1.2
import-local: 3.1.0
jest-config: 29.7.0(@types/node@20.17.8)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@20.17.8)(typescript@5.7.2))
@@ -44796,7 +44789,7 @@ snapshots:
jest-config@26.6.3(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@22.9.1)(typescript@5.7.2)):
dependencies:
'@babel/core': 7.25.7
- '@jest/test-sequencer': 26.6.3(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@22.9.1)(typescript@5.7.2))
+ '@jest/test-sequencer': 26.6.3
'@jest/types': 26.6.2
babel-jest: 26.6.3(@babel/core@7.25.7)
chalk: 4.1.2
@@ -44806,7 +44799,7 @@ snapshots:
jest-environment-jsdom: 26.6.2
jest-environment-node: 26.6.2
jest-get-type: 26.3.0
- jest-jasmine2: 26.6.3(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@22.9.1)(typescript@5.7.2))
+ jest-jasmine2: 26.6.3
jest-regex-util: 26.0.0
jest-resolve: 26.6.2
jest-util: 26.6.2
@@ -45133,7 +45126,7 @@ snapshots:
optionalDependencies:
fsevents: 2.3.3
- jest-jasmine2@26.6.3(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@22.9.1)(typescript@5.7.2)):
+ jest-jasmine2@26.6.3:
dependencies:
'@babel/traverse': 7.25.9
'@jest/environment': 26.6.2
@@ -45154,11 +45147,7 @@ snapshots:
pretty-format: 26.6.2
throat: 5.0.0
transitivePeerDependencies:
- - bufferutil
- - canvas
- supports-color
- - ts-node
- - utf-8-validate
jest-leak-detector@26.6.2:
dependencies:
@@ -45577,12 +45566,12 @@ snapshots:
- supports-color
- ts-node
- jest@29.7.0(@types/node@20.17.8)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@20.17.8)(typescript@5.7.2)):
+ jest@29.7.0(@types/node@20.17.8)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@20.17.8)(typescript@5.7.2)):
dependencies:
'@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@20.17.8)(typescript@5.7.2))
'@jest/types': 29.6.3
import-local: 3.1.0
- jest-cli: 29.7.0(@types/node@20.17.8)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@20.17.8)(typescript@5.7.2))
+ jest-cli: 29.7.0(@types/node@20.17.8)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@20.17.8)(typescript@5.7.2))
optionalDependencies:
node-notifier: 8.0.2
transitivePeerDependencies:
@@ -46159,7 +46148,7 @@ snapshots:
chalk: 5.2.0
cli-truncate: 3.1.0
commander: 10.0.1
- debug: 4.3.4(supports-color@5.5.0)
+ debug: 4.3.4(supports-color@9.4.0)
execa: 7.2.0
lilconfig: 2.1.0
listr2: 5.0.8(enquirer@2.4.1)
@@ -47199,7 +47188,7 @@ snapshots:
dependencies:
carlo: 0.9.46
chokidar: 3.5.3
- debug: 4.3.4(supports-color@5.5.0)
+ debug: 4.3.4(supports-color@9.4.0)
isbinaryfile: 3.0.3
mime: 2.6.0
opn: 5.5.0
@@ -47699,7 +47688,7 @@ snapshots:
'@oclif/plugin-warn-if-update-available': 2.1.1(@swc/core@1.3.100)(@types/node@20.17.8)(typescript@5.7.2)
aws-sdk: 2.1515.0
concurrently: 7.6.0
- debug: 4.3.4(supports-color@5.5.0)
+ debug: 4.3.4(supports-color@9.4.0)
find-yarn-workspace-root: 2.0.0
fs-extra: 8.1.0
github-slugger: 1.5.0
@@ -48463,11 +48452,11 @@ snapshots:
dependencies:
postcss: 7.0.39
- postcss-html@0.36.0(postcss-syntax@0.36.2(postcss@8.4.32))(postcss@7.0.39):
+ postcss-html@0.36.0(postcss-syntax@0.36.2)(postcss@7.0.39):
dependencies:
htmlparser2: 3.10.1
postcss: 7.0.39
- postcss-syntax: 0.36.2(postcss-html@0.36.0(postcss-syntax@0.36.2(postcss@8.4.32))(postcss@7.0.39))(postcss-less@3.1.4)(postcss-scss@2.1.1)(postcss@7.0.39)
+ postcss-syntax: 0.36.2(postcss@8.4.32)
postcss-less@3.1.4:
dependencies:
@@ -48493,6 +48482,16 @@ snapshots:
semver: 7.6.3
webpack: 5.97.1(@swc/core@1.3.100)(webpack-cli@5.1.4)
+ postcss-loader@4.3.0(postcss@8.4.49)(webpack@5.97.1):
+ dependencies:
+ cosmiconfig: 7.1.0
+ klona: 2.0.6
+ loader-utils: 2.0.4
+ postcss: 8.4.49
+ schema-utils: 3.3.0
+ semver: 7.6.3
+ webpack: 5.97.1(@swc/core@1.3.100)(esbuild@0.18.20)(webpack-cli@5.1.4)
+
postcss-loader@6.2.1(postcss@8.4.32)(webpack@5.89.0):
dependencies:
cosmiconfig: 7.1.0
@@ -49063,13 +49062,9 @@ snapshots:
postcss-value-parser: 4.2.0
svgo: 3.3.2
- postcss-syntax@0.36.2(postcss-html@0.36.0(postcss-syntax@0.36.2(postcss@8.4.32))(postcss@7.0.39))(postcss-less@3.1.4)(postcss-scss@2.1.1)(postcss@7.0.39):
+ postcss-syntax@0.36.2(postcss@8.4.32):
dependencies:
- postcss: 7.0.39
- optionalDependencies:
- postcss-html: 0.36.0(postcss-syntax@0.36.2(postcss@8.4.32))(postcss@7.0.39)
- postcss-less: 3.1.4
- postcss-scss: 2.1.1
+ postcss: 8.4.32
postcss-unique-selectors@5.1.1(postcss@8.4.32):
dependencies:
@@ -49403,7 +49398,7 @@ snapshots:
puppeteer-core@13.7.0(encoding@0.1.13):
dependencies:
cross-fetch: 3.1.5(encoding@0.1.13)
- debug: 4.3.4(supports-color@5.5.0)
+ debug: 4.3.4(supports-color@9.4.0)
devtools-protocol: 0.0.981744
extract-zip: 2.0.1
https-proxy-agent: 5.0.1
@@ -49442,7 +49437,7 @@ snapshots:
'@puppeteer/browsers': 1.4.6(typescript@5.7.2)
chromium-bidi: 0.4.16(devtools-protocol@0.0.1147663)
cross-fetch: 4.0.0(encoding@0.1.13)
- debug: 4.3.4(supports-color@5.5.0)
+ debug: 4.3.4(supports-color@9.4.0)
devtools-protocol: 0.0.1147663
ws: 8.13.0
optionalDependencies:
@@ -49653,7 +49648,7 @@ snapshots:
react-docgen-typescript-plugin@1.0.5(typescript@5.7.2)(webpack@5.97.1):
dependencies:
- debug: 4.3.4(supports-color@5.5.0)
+ debug: 4.3.4(supports-color@9.4.0)
endent: 2.1.0
find-cache-dir: 3.3.2
flat-cache: 3.2.0
@@ -50671,7 +50666,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
- sass-loader@10.5.0(sass@1.69.5)(webpack@5.97.1):
+ sass-loader@10.5.0(sass@1.69.5)(webpack@5.97.1(@swc/core@1.3.100)):
dependencies:
klona: 2.0.6
loader-utils: 2.0.4
@@ -50682,6 +50677,17 @@ snapshots:
optionalDependencies:
sass: 1.69.5
+ sass-loader@10.5.0(sass@1.69.5)(webpack@5.97.1):
+ dependencies:
+ klona: 2.0.6
+ loader-utils: 2.0.4
+ neo-async: 2.6.2
+ schema-utils: 3.3.0
+ semver: 7.6.3
+ webpack: 5.97.1(@swc/core@1.3.100)(esbuild@0.18.20)(webpack-cli@5.1.4)
+ optionalDependencies:
+ sass: 1.69.5
+
sass-loader@12.6.0(sass@1.69.5)(webpack@5.89.0):
dependencies:
klona: 2.0.6
@@ -50703,7 +50709,7 @@ snapshots:
neo-async: 2.6.2
optionalDependencies:
sass: 1.69.5
- webpack: 5.97.1(@swc/core@1.3.100)(webpack-cli@5.1.4)
+ webpack: 5.97.1(@swc/core@1.3.100)(esbuild@0.18.20)(webpack-cli@5.1.4)
sass@1.69.5:
dependencies:
@@ -50990,7 +50996,7 @@ snapshots:
dependencies:
'@kwsites/file-exists': 1.1.1
'@kwsites/promise-deferred': 1.1.1
- debug: 4.3.4(supports-color@5.5.0)
+ debug: 4.3.4(supports-color@9.4.0)
transitivePeerDependencies:
- supports-color
@@ -51607,15 +51613,6 @@ snapshots:
stylelint-config-recommended: 5.0.0(stylelint@13.13.1)
stylelint-scss: 3.21.0(stylelint@13.13.1)
- stylelint-config-recommended-scss@5.0.2(postcss@8.4.32)(stylelint@14.16.1):
- dependencies:
- postcss-scss: 4.0.9(postcss@8.4.32)
- stylelint: 14.16.1
- stylelint-config-recommended: 6.0.0(stylelint@14.16.1)
- stylelint-scss: 4.7.0(stylelint@14.16.1)
- transitivePeerDependencies:
- - postcss
-
stylelint-config-recommended-scss@5.0.2(postcss@8.4.32)(stylelint@16.11.0(typescript@5.7.2)):
dependencies:
postcss-scss: 4.0.9(postcss@8.4.32)
@@ -51705,8 +51702,8 @@ snapshots:
stylelint@13.13.1:
dependencies:
- '@stylelint/postcss-css-in-js': 0.37.3(postcss-syntax@0.36.2(postcss-html@0.36.0(postcss-syntax@0.36.2(postcss@8.4.32))(postcss@7.0.39))(postcss-less@3.1.4)(postcss-scss@2.1.1)(postcss@7.0.39))(postcss@7.0.39)
- '@stylelint/postcss-markdown': 0.36.2(postcss-syntax@0.36.2(postcss-html@0.36.0(postcss-syntax@0.36.2(postcss@8.4.32))(postcss@7.0.39))(postcss-less@3.1.4)(postcss-scss@2.1.1)(postcss@7.0.39))(postcss@7.0.39)
+ '@stylelint/postcss-css-in-js': 0.37.3(postcss-syntax@0.36.2)(postcss@7.0.39)
+ '@stylelint/postcss-markdown': 0.36.2(postcss-syntax@0.36.2)(postcss@7.0.39)
autoprefixer: 9.8.6
balanced-match: 2.0.0
chalk: 4.1.2
@@ -51732,7 +51729,7 @@ snapshots:
micromatch: 4.0.8
normalize-selector: 0.2.0
postcss: 7.0.39
- postcss-html: 0.36.0(postcss-syntax@0.36.2(postcss@8.4.32))(postcss@7.0.39)
+ postcss-html: 0.36.0(postcss-syntax@0.36.2)(postcss@7.0.39)
postcss-less: 3.1.4
postcss-media-query-parser: 0.2.3
postcss-resolve-nested-selector: 0.1.6
@@ -51740,7 +51737,7 @@ snapshots:
postcss-sass: 0.4.4
postcss-scss: 2.1.1
postcss-selector-parser: 6.1.2
- postcss-syntax: 0.36.2(postcss-html@0.36.0(postcss-syntax@0.36.2(postcss@8.4.32))(postcss@7.0.39))(postcss-less@3.1.4)(postcss-scss@2.1.1)(postcss@7.0.39)
+ postcss-syntax: 0.36.2(postcss@8.4.32)
postcss-value-parser: 4.2.0
resolve-from: 5.0.0
slash: 3.0.0
@@ -52185,7 +52182,7 @@ snapshots:
'@swc/core': 1.3.100
uglify-js: 3.17.4
- terser-webpack-plugin@5.3.11(@swc/core@1.3.100)(webpack@5.97.1(@swc/core@1.3.100)):
+ terser-webpack-plugin@5.3.11(@swc/core@1.3.100)(webpack@5.97.1):
dependencies:
'@jridgewell/trace-mapping': 0.3.25
jest-worker: 27.5.1
@@ -52470,7 +52467,7 @@ snapshots:
'@jest/types': 29.6.3
babel-jest: 29.7.0(@babel/core@7.25.7)
- ts-jest@29.1.1(@babel/core@7.26.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(jest@29.5.0(@types/node@20.17.8)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@20.17.8)(typescript@5.7.2)))(typescript@5.7.2):
+ ts-jest@29.1.1(@babel/core@7.26.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(jest@29.5.0(@types/node@20.17.8)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.3.100)(@types/node@20.17.8)(typescript@5.7.2)))(typescript@5.7.2):
dependencies:
bs-logger: 0.2.6
fast-json-stable-stringify: 2.1.0
@@ -53787,11 +53784,11 @@ snapshots:
neo-async: 2.6.2
schema-utils: 3.3.0
tapable: 2.2.1
- terser-webpack-plugin: 5.3.11(@swc/core@1.3.100)(webpack@5.97.1(@swc/core@1.3.100))
+ terser-webpack-plugin: 5.3.11(@swc/core@1.3.100)(webpack@5.97.1)
watchpack: 2.4.1
webpack-sources: 3.2.3
optionalDependencies:
- webpack-cli: 5.1.4(webpack@5.97.1)
+ webpack-cli: 5.1.4(webpack-bundle-analyzer@4.9.1)(webpack-dev-server@4.15.1)(webpack@5.97.1)
transitivePeerDependencies:
- '@swc/core'
- esbuild