Commit 105e1ed15ac for woocommerce

commit 105e1ed15acd2cac4d49dfaf8dfede649513f09e
Author: Luigi Teschio <gigitux@gmail.com>
Date:   Fri Aug 21 12:12:15 2026 +0200

    Remove experimental products app features (#67883)

    * Remove experimental products app features

    * Add changelog entries for experimental products app removal

    * remove blueprint

diff --git a/.github/project-community-pr-assigner.yml b/.github/project-community-pr-assigner.yml
index 26c67a57b92..53f2ecc2381 100644
--- a/.github/project-community-pr-assigner.yml
+++ b/.github/project-community-pr-assigner.yml
@@ -29,7 +29,7 @@
     - team: monorepo

 # Blocks, patterns, products, inventory, search, and storefront (Woo FSE / Kirigami).
-'packages/js/{block-templates,components,experimental,experimental-products-app,expression-evaluation,sanitize}/**/*':
+'packages/js/{block-templates,components,experimental,expression-evaluation,sanitize}/**/*':
     - team: woo-fse

 'plugins/woocommerce/{.wordpress-org,i18n}/**/*':
diff --git a/.syncpackrc b/.syncpackrc
index 367ad96d3d7..71b47c30856 100644
--- a/.syncpackrc
+++ b/.syncpackrc
@@ -485,20 +485,6 @@
 			],
 			"isIgnored": true
 		},
-		{
-			"label": "experimental-products-app uses custom WordPress package versions",
-			"dependencies": [
-				"@wordpress/base-styles",
-				"@wordpress/dataviews",
-				"@wordpress/icons",
-				"@wordpress/router",
-				"@wordpress/theme"
-			],
-			"packages": [
-				"@woocommerce/experimental-products-app"
-			],
-			"isIgnored": true
-		},
 		{
 			"label": "settings-ui temporarily pins DataViews 17.1.0 for the DataForm migration",
 			"dependencies": [
diff --git a/packages/js/dependency-extraction-webpack-plugin/assets/packages.js b/packages/js/dependency-extraction-webpack-plugin/assets/packages.js
index 542ad3ab33a..4ee1031df3d 100644
--- a/packages/js/dependency-extraction-webpack-plugin/assets/packages.js
+++ b/packages/js/dependency-extraction-webpack-plugin/assets/packages.js
@@ -9,7 +9,6 @@ module.exports = [
 	'@woocommerce/date',
 	'@woocommerce/dependency-extraction-webpack-plugin',
 	'@woocommerce/eslint-plugin',
-	'@woocommerce/experimental-products-app',
 	'@woocommerce/experimental',
 	'@woocommerce/explat',
 	'@woocommerce/extend-cart-checkout-block',
diff --git a/packages/js/dependency-extraction-webpack-plugin/changelog/remove-experimental-products-app b/packages/js/dependency-extraction-webpack-plugin/changelog/remove-experimental-products-app
new file mode 100644
index 00000000000..6577ca1e3c9
--- /dev/null
+++ b/packages/js/dependency-extraction-webpack-plugin/changelog/remove-experimental-products-app
@@ -0,0 +1,3 @@
+Significance: patch
+Type: dev
+Comment: Remove the deleted experimental products app from the dependency extraction package list.
diff --git a/packages/js/experimental-products-app/.npmrc b/packages/js/experimental-products-app/.npmrc
deleted file mode 100644
index 43c97e719a5..00000000000
--- a/packages/js/experimental-products-app/.npmrc
+++ /dev/null
@@ -1 +0,0 @@
-package-lock=false
diff --git a/packages/js/experimental-products-app/README.md b/packages/js/experimental-products-app/README.md
deleted file mode 100644
index 5efe3dfc697..00000000000
--- a/packages/js/experimental-products-app/README.md
+++ /dev/null
@@ -1,30 +0,0 @@
-# Experimental Products App
-
-This package is a prototype for the work tracked in [Epic: Improve Product Catalog Management Experience](https://github.com/woocommerce/woocommerce/issues/64414).
-
-It is used to explore a faster, more scalable **All Products** experience in WooCommerce, especially for stores with large catalogs.
-
-Current areas of exploration:
-
--   A more flexible table-based product view
--   Better filtering, sorting, and scanning
--   Inline handling of product variations
--   Faster quick edit and [bulk edit flows](docs/bulk-editing.md)
--   A clearer extension surface for integrations
-
-## Try It Quickly
-
-You can try the experimental products app in [WordPress Playground](https://playground.wordpress.net/?blueprint-url=https%3A%2F%2Fraw.githubusercontent.com%2Fwoocommerce%2Fwoocommerce%2F8588e7cc98f16c51527136ff0600e74967db77a3%2Fpackages%2Fjs%2Fexperimental-products-app%2Fblueprint.json&random=pf6owa52dsr).
-
-The shared Blueprint:
-
--   Installs WooCommerce nightly, Gutenberg, and WooCommerce Beta Tester
--   Enables the required feature flags
--   Imports WooCommerce sample products from CSV
--   Opens the experimental products dashboard directly
-
-## DataViews Dependency
-
-This package currently uses a custom build of `@wordpress/dataviews` from [WordPress/gutenberg#77905](https://github.com/WordPress/gutenberg/pull/77905). The package is installed from the tarball referenced in `package.json` so the prototype can use the new table tree hierarchy API before it is available in a published WordPress package release.
-
-The custom build is expected to be temporary. Once the DataViews hierarchy changes are published in the regular `@wordpress/dataviews` package, replace the tarball dependency with the published version and refresh `pnpm-lock.yaml`.
diff --git a/packages/js/experimental-products-app/babel.config.js b/packages/js/experimental-products-app/babel.config.js
deleted file mode 100644
index f73e04467aa..00000000000
--- a/packages/js/experimental-products-app/babel.config.js
+++ /dev/null
@@ -1,3 +0,0 @@
-module.exports = {
-	extends: '../internal-js-tests/babel.config.js',
-};
diff --git a/packages/js/experimental-products-app/blueprint.json b/packages/js/experimental-products-app/blueprint.json
deleted file mode 100644
index 55a160fb304..00000000000
--- a/packages/js/experimental-products-app/blueprint.json
+++ /dev/null
@@ -1,52 +0,0 @@
-{
-	"$schema": "https://playground.wordpress.net/blueprint-schema.json",
-	"landingPage": "/wp-admin/edit.php?post_type=product&page=woocommerce-products-dashboard",
-	"preferredVersions": {
-		"php": "8.2",
-		"wp": "latest"
-	},
-	"features": {
-		"networking": true
-	},
-	"steps": [
-		{
-			"step": "login",
-			"username": "admin",
-			"password": "password"
-		},
-		{
-			"step": "installPlugin",
-			"pluginData": {
-				"resource": "url",
-				"url": "https://github.com/woocommerce/woocommerce/releases/download/nightly/woocommerce-trunk-nightly.zip"
-			},
-			"options": {
-				"activate": true
-			}
-		},
-		{
-			"step": "installPlugin",
-			"pluginData": {
-				"resource": "wordpress.org/plugins",
-				"slug": "gutenberg"
-			},
-			"options": {
-				"activate": true
-			}
-		},
-		{
-			"step": "installPlugin",
-			"pluginData": {
-				"resource": "url",
-				"url": "https://github.com/woocommerce/woocommerce/releases/download/wc-beta-tester-3.0.0/woocommerce-beta-tester.zip"
-			},
-			"options": {
-				"activate": true
-			}
-		},
-		{
-			"step": "runPHP",
-			"code": "<?php require '/wordpress/wp-load.php'; delete_transient( '_wc_activation_redirect' ); update_option( 'woocommerce_onboarding_profile', array( 'skipped' => true ) ); update_option( 'wc_admin_helper_feature_values', array( 'product-data-views' => true, 'rest-api-v4' => true ) ); $experiments = get_option( 'gutenberg-experiments', array() ); if ( ! is_array( $experiments ) ) { $experiments = array(); } $experiments['gutenberg-editor-inspector-use-dataform'] = true; update_option( 'gutenberg-experiments', $experiments ); if ( 0 === wp_count_posts( 'product' )->publish ) { if ( ! class_exists( '\\Automattic\\WooCommerce\\Admin\\API\\OnboardingTasks' ) ) { require_once WC_ABSPATH . 'src/Admin/API/OnboardingTasks.php'; } $import = \\Automattic\\WooCommerce\\Admin\\API\\OnboardingTasks::import_sample_products_from_csv( WC_ABSPATH . 'sample-data/sample_products.csv' ); if ( is_wp_error( $import ) ) { wp_die( esc_html( $import->get_error_message() ) ); } }"
-		}
-	]
-}
diff --git a/packages/js/experimental-products-app/build.mjs b/packages/js/experimental-products-app/build.mjs
deleted file mode 100644
index 2d76d01222e..00000000000
--- a/packages/js/experimental-products-app/build.mjs
+++ /dev/null
@@ -1,3 +0,0 @@
-import { runPackageBuilder } from '@woocommerce/internal-build';
-
-await runPackageBuilder( { entryPoints: 'src/**/*.{ts,tsx,js,jsx}' } );
diff --git a/packages/js/experimental-products-app/changelog.md b/packages/js/experimental-products-app/changelog.md
deleted file mode 100644
index 3783eb0da3d..00000000000
--- a/packages/js/experimental-products-app/changelog.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# Changelog
-
-This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
diff --git a/packages/js/experimental-products-app/changelog/.gitkeep b/packages/js/experimental-products-app/changelog/.gitkeep
deleted file mode 100644
index e69de29bb2d..00000000000
diff --git a/packages/js/experimental-products-app/changelog/64161-dev-64111-post-cleanup b/packages/js/experimental-products-app/changelog/64161-dev-64111-post-cleanup
deleted file mode 100644
index b740e6c4df4..00000000000
--- a/packages/js/experimental-products-app/changelog/64161-dev-64111-post-cleanup
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: minor
-Type: dev
-
-Monorepo: complete migration to @woocommerce/internal-style-build/webpack-rtl-plugin
\ No newline at end of file
diff --git a/packages/js/experimental-products-app/changelog/64255-fix-all-products-experiment-composer b/packages/js/experimental-products-app/changelog/64255-fix-all-products-experiment-composer
deleted file mode 100644
index 40b00ca25c0..00000000000
--- a/packages/js/experimental-products-app/changelog/64255-fix-all-products-experiment-composer
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: dev
-
-Fix missing changelogger setup in experimental-products-app package.
\ No newline at end of file
diff --git a/packages/js/experimental-products-app/changelog/64424-add-filters b/packages/js/experimental-products-app/changelog/64424-add-filters
deleted file mode 100644
index ceb2dccdbc7..00000000000
--- a/packages/js/experimental-products-app/changelog/64424-add-filters
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: minor
-Type: add
-
-Add product list filters to the experimental products app
\ No newline at end of file
diff --git a/packages/js/experimental-products-app/changelog/64481-add-dataform-component b/packages/js/experimental-products-app/changelog/64481-add-dataform-component
deleted file mode 100644
index e409db96fdf..00000000000
--- a/packages/js/experimental-products-app/changelog/64481-add-dataform-component
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: minor
-Type: add
-
-Add quick edit and bulk product actions to the experimental products app.
\ No newline at end of file
diff --git a/packages/js/experimental-products-app/changelog/64812-fix-bulk-editing-field b/packages/js/experimental-products-app/changelog/64812-fix-bulk-editing-field
deleted file mode 100644
index 60cbe154750..00000000000
--- a/packages/js/experimental-products-app/changelog/64812-fix-bulk-editing-field
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: fix
-
-Ensure product quick edit shows the correct fields in the expected order.
\ No newline at end of file
diff --git a/packages/js/experimental-products-app/changelog/64838-dev-esbuild-package-builds b/packages/js/experimental-products-app/changelog/64838-dev-esbuild-package-builds
deleted file mode 100644
index 53b9c7cd29c..00000000000
--- a/packages/js/experimental-products-app/changelog/64838-dev-esbuild-package-builds
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: dev
-
-Replaced wireit + tsc package build pipeline with a per-package esbuild script.
diff --git a/packages/js/experimental-products-app/changelog/64845-wooplug-6696-gate-the-customer-review-request-feature-behind-a b/packages/js/experimental-products-app/changelog/64845-wooplug-6696-gate-the-customer-review-request-feature-behind-a
deleted file mode 100644
index 8eca5bfa2a6..00000000000
--- a/packages/js/experimental-products-app/changelog/64845-wooplug-6696-gate-the-customer-review-request-feature-behind-a
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: dev
-
-Gate the Customer Review Request feature behind a FeaturesController flag (off by default). The host page is created lazily on the first request after the feature is enabled, not on plugin install.
\ No newline at end of file
diff --git a/packages/js/experimental-products-app/changelog/65143-try-product-bulk-edit-ui-ux b/packages/js/experimental-products-app/changelog/65143-try-product-bulk-edit-ui-ux
deleted file mode 100644
index 37098ddcf83..00000000000
--- a/packages/js/experimental-products-app/changelog/65143-try-product-bulk-edit-ui-ux
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: minor
-Type: add
-
-Prototype bulk product editing controls in the experimental products app.
\ No newline at end of file
diff --git a/packages/js/experimental-products-app/changelog/65662-dev-65627-postrelease-cleanup b/packages/js/experimental-products-app/changelog/65662-dev-65627-postrelease-cleanup
deleted file mode 100644
index 37d461033be..00000000000
--- a/packages/js/experimental-products-app/changelog/65662-dev-65627-postrelease-cleanup
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: major
-Type: dev
-
-Update @wordpress/data peer dependency to ^10.19.0 to align with WordPress 6.8 minimum; remove @types/react from peerDependencies as the package is private.
\ No newline at end of file
diff --git a/packages/js/experimental-products-app/changelog/add-categories-default-column b/packages/js/experimental-products-app/changelog/add-categories-default-column
deleted file mode 100644
index 214d981a1cd..00000000000
--- a/packages/js/experimental-products-app/changelog/add-categories-default-column
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: minor
-Type: add
-
-Add categories as a default column in the product list, before price
diff --git a/packages/js/experimental-products-app/changelog/add-cost-of-goods-field b/packages/js/experimental-products-app/changelog/add-cost-of-goods-field
deleted file mode 100644
index 1e152d89da0..00000000000
--- a/packages/js/experimental-products-app/changelog/add-cost-of-goods-field
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: minor
-Type: add
-
-Add the cost of goods field to the experimental products edit form.
diff --git a/packages/js/experimental-products-app/changelog/add-downloadable-files-section b/packages/js/experimental-products-app/changelog/add-downloadable-files-section
deleted file mode 100644
index f9c7a7f47db..00000000000
--- a/packages/js/experimental-products-app/changelog/add-downloadable-files-section
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: update
-
-Add a downloadable files section to the experimental products edit panel and upload selected files to the media library.
diff --git a/packages/js/experimental-products-app/changelog/add-product-list-variations b/packages/js/experimental-products-app/changelog/add-product-list-variations
deleted file mode 100644
index c913da0807a..00000000000
--- a/packages/js/experimental-products-app/changelog/add-product-list-variations
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: minor
-Type: add
-
-Display product variations in the experimental products list
diff --git a/packages/js/experimental-products-app/changelog/add-products-app-beta-feedback-badge b/packages/js/experimental-products-app/changelog/add-products-app-beta-feedback-badge
deleted file mode 100644
index cde72195c2c..00000000000
--- a/packages/js/experimental-products-app/changelog/add-products-app-beta-feedback-badge
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: minor
-Type: add
-
-Add a "Beta · Share feedback" badge next to the Products page title in the experimental products app, linking to the user feedback form.
diff --git a/packages/js/experimental-products-app/changelog/add-products-app-brand-filter b/packages/js/experimental-products-app/changelog/add-products-app-brand-filter
deleted file mode 100644
index 6548bf6495b..00000000000
--- a/packages/js/experimental-products-app/changelog/add-products-app-brand-filter
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: minor
-Type: add
-
-Add a Brands filter to the experimental products app product list.
diff --git a/packages/js/experimental-products-app/changelog/add-products-app-empty-states b/packages/js/experimental-products-app/changelog/add-products-app-empty-states
deleted file mode 100644
index 7a5da5b9113..00000000000
--- a/packages/js/experimental-products-app/changelog/add-products-app-empty-states
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: minor
-Type: add
-
-Add per-tab empty states to the experimental products app product list (All, Published, Draft, Pending review, Trash) using the design-system EmptyState component.
diff --git a/packages/js/experimental-products-app/changelog/add-products-app-product-type-column b/packages/js/experimental-products-app/changelog/add-products-app-product-type-column
deleted file mode 100644
index 24a568661e4..00000000000
--- a/packages/js/experimental-products-app/changelog/add-products-app-product-type-column
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: minor
-Type: add
-
-Add an opt-in "Product type" column to the experimental products app product list, showing whether each row is a Simple, Variable, Grouped, Affiliate, or Variation product.
diff --git a/packages/js/experimental-products-app/changelog/add-products-app-shipping-class-filter b/packages/js/experimental-products-app/changelog/add-products-app-shipping-class-filter
deleted file mode 100644
index f589d907a18..00000000000
--- a/packages/js/experimental-products-app/changelog/add-products-app-shipping-class-filter
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: minor
-Type: add
-
-Add a Shipping Class filter to the experimental products app product list.
diff --git a/packages/js/experimental-products-app/changelog/add-products-app-stock-quantity-filter b/packages/js/experimental-products-app/changelog/add-products-app-stock-quantity-filter
deleted file mode 100644
index d2b2b2c34d2..00000000000
--- a/packages/js/experimental-products-app/changelog/add-products-app-stock-quantity-filter
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: minor
-Type: add
-
-Add a Stock quantity filter to the experimental products app product list, and rename the field from "Available stock" to "Stock quantity".
diff --git a/packages/js/experimental-products-app/changelog/add-products-app-tag-filter b/packages/js/experimental-products-app/changelog/add-products-app-tag-filter
deleted file mode 100644
index 41eab996507..00000000000
--- a/packages/js/experimental-products-app/changelog/add-products-app-tag-filter
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: minor
-Type: add
-
-Add a Tags filter to the experimental products app product list.
diff --git a/packages/js/experimental-products-app/changelog/add-products-fields-integration b/packages/js/experimental-products-app/changelog/add-products-fields-integration
deleted file mode 100644
index 0cf4a143696..00000000000
--- a/packages/js/experimental-products-app/changelog/add-products-fields-integration
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: add
-
-Integrate products app field modules into the product list
diff --git a/packages/js/experimental-products-app/changelog/add-products-fields-inventory-shipping b/packages/js/experimental-products-app/changelog/add-products-fields-inventory-shipping
deleted file mode 100644
index 7bc4c3fdfe2..00000000000
--- a/packages/js/experimental-products-app/changelog/add-products-fields-inventory-shipping
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: add
-
-Add inventory and shipping field modules for the experimental products app
diff --git a/packages/js/experimental-products-app/changelog/add-products-fields-media-seo b/packages/js/experimental-products-app/changelog/add-products-fields-media-seo
deleted file mode 100644
index 792dbf3d60f..00000000000
--- a/packages/js/experimental-products-app/changelog/add-products-fields-media-seo
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: add
-
-Add media, relationship, and SEO field modules for the experimental products app
diff --git a/packages/js/experimental-products-app/changelog/add-products-fields-organization b/packages/js/experimental-products-app/changelog/add-products-fields-organization
deleted file mode 100644
index 8564badd626..00000000000
--- a/packages/js/experimental-products-app/changelog/add-products-fields-organization
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: add
-
-Add organization and merchandising field modules for the experimental products app
diff --git a/packages/js/experimental-products-app/changelog/add-products-fields-pricing b/packages/js/experimental-products-app/changelog/add-products-fields-pricing
deleted file mode 100644
index c09210746f7..00000000000
--- a/packages/js/experimental-products-app/changelog/add-products-fields-pricing
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: add
-
-Add pricing field modules for the experimental products app
diff --git a/packages/js/experimental-products-app/changelog/add-products-fields-shared-foundation b/packages/js/experimental-products-app/changelog/add-products-fields-shared-foundation
deleted file mode 100644
index 0ebf062f5b0..00000000000
--- a/packages/js/experimental-products-app/changelog/add-products-fields-shared-foundation
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: add
-
-Add shared products app field controls and utilities
diff --git a/packages/js/experimental-products-app/changelog/add-products-trash-actions b/packages/js/experimental-products-app/changelog/add-products-trash-actions
deleted file mode 100644
index 6f297b11016..00000000000
--- a/packages/js/experimental-products-app/changelog/add-products-trash-actions
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: minor
-Type: add
-
-Add Restore and Permanently delete actions to trashed products in the experimental products app
diff --git a/packages/js/experimental-products-app/changelog/add-properties-tags-brands-date-gtin b/packages/js/experimental-products-app/changelog/add-properties-tags-brands-date-gtin
deleted file mode 100644
index 9b70fdcd2cb..00000000000
--- a/packages/js/experimental-products-app/changelog/add-properties-tags-brands-date-gtin
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: minor
-Type: add
-
-Add Tags, Brands, Date, and GTIN/UPC/EAN/ISBN as toggleable columns in the experimental products list (hidden by default).
diff --git a/packages/js/experimental-products-app/changelog/add-quick-edit-bulk-action b/packages/js/experimental-products-app/changelog/add-quick-edit-bulk-action
deleted file mode 100644
index eae9e9bf702..00000000000
--- a/packages/js/experimental-products-app/changelog/add-quick-edit-bulk-action
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: minor
-Type: add
-
-Add Quick edit to the products list bulk-action bar.
diff --git a/packages/js/experimental-products-app/changelog/add-quick-edit-row-action b/packages/js/experimental-products-app/changelog/add-quick-edit-row-action
deleted file mode 100644
index 61f0f8e8a1e..00000000000
--- a/packages/js/experimental-products-app/changelog/add-quick-edit-row-action
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: minor
-Type: add
-
-Add Quick edit as a primary row action; Edit now opens the full product editor.
diff --git a/packages/js/experimental-products-app/changelog/add-tree-select-control b/packages/js/experimental-products-app/changelog/add-tree-select-control
deleted file mode 100644
index 2f3dcd7f0ff..00000000000
--- a/packages/js/experimental-products-app/changelog/add-tree-select-control
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: add
-
-Add a tree select control to the experimental products app.
diff --git a/packages/js/experimental-products-app/changelog/add-variation-panel-fields b/packages/js/experimental-products-app/changelog/add-variation-panel-fields
deleted file mode 100644
index bc51e6fe12d..00000000000
--- a/packages/js/experimental-products-app/changelog/add-variation-panel-fields
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: minor
-Type: add
-
-Add variation-exclusive fields (tax class, virtual, backorders, downloadable options) and refactor panel field registry to compose from shared main registry
diff --git a/packages/js/experimental-products-app/changelog/add-variation-view-bundle b/packages/js/experimental-products-app/changelog/add-variation-view-bundle
deleted file mode 100644
index a62b51eda04..00000000000
--- a/packages/js/experimental-products-app/changelog/add-variation-view-bundle
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: minor
-Type: add
-
-Add a dedicated variation view bundle for the classic product editor redesign.
diff --git a/packages/js/experimental-products-app/changelog/add-wordpress-theme b/packages/js/experimental-products-app/changelog/add-wordpress-theme
deleted file mode 100644
index 348f9d7a0cb..00000000000
--- a/packages/js/experimental-products-app/changelog/add-wordpress-theme
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: add
-
-Align products app with @wordpress/theme
diff --git a/packages/js/experimental-products-app/changelog/consolidate-eslint-core-modules b/packages/js/experimental-products-app/changelog/consolidate-eslint-core-modules
deleted file mode 100644
index 4ce5e15a51f..00000000000
--- a/packages/js/experimental-products-app/changelog/consolidate-eslint-core-modules
+++ /dev/null
@@ -1,3 +0,0 @@
-Significance: patch
-Type: dev
-Comment: Consolidate the shared `import/core-modules` list into `@woocommerce/eslint-config`. Tooling only; no runtime change.
diff --git a/packages/js/experimental-products-app/changelog/dev-64837-type-check-only-on-lint b/packages/js/experimental-products-app/changelog/dev-64837-type-check-only-on-lint
deleted file mode 100644
index efdb3bd771a..00000000000
--- a/packages/js/experimental-products-app/changelog/dev-64837-type-check-only-on-lint
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: dev
-
-Move TypeScript type-checking from the build to a new `lint:lang:types` script. Builds now emit types and JS without type-checking.
diff --git a/packages/js/experimental-products-app/changelog/dev-cjs-prepack-only b/packages/js/experimental-products-app/changelog/dev-cjs-prepack-only
deleted file mode 100644
index 0f64fecf28c..00000000000
--- a/packages/js/experimental-products-app/changelog/dev-cjs-prepack-only
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: dev
-
-Move the CommonJS build to prepack so day-to-day development only builds the ESM output.
diff --git a/packages/js/experimental-products-app/changelog/dev-products-app-blueprint-rest-v4 b/packages/js/experimental-products-app/changelog/dev-products-app-blueprint-rest-v4
deleted file mode 100644
index f5d119c3e3f..00000000000
--- a/packages/js/experimental-products-app/changelog/dev-products-app-blueprint-rest-v4
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: dev
-
-Enable the REST v4 feature flag in the experimental products app blueprint.
diff --git a/packages/js/experimental-products-app/changelog/fix-bulk-edit-variations b/packages/js/experimental-products-app/changelog/fix-bulk-edit-variations
deleted file mode 100644
index f6ec04187b7..00000000000
--- a/packages/js/experimental-products-app/changelog/fix-bulk-edit-variations
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: fix
-
-Show compatible bulk edit fields when editing product variations
diff --git a/packages/js/experimental-products-app/changelog/fix-disable-name-price-sort b/packages/js/experimental-products-app/changelog/fix-disable-name-price-sort
deleted file mode 100644
index 1a60b74e913..00000000000
--- a/packages/js/experimental-products-app/changelog/fix-disable-name-price-sort
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: fix
-
-Disable sorting by product name and price in the product list.
diff --git a/packages/js/experimental-products-app/changelog/fix-edit-variations b/packages/js/experimental-products-app/changelog/fix-edit-variations
deleted file mode 100644
index f57e5b7c679..00000000000
--- a/packages/js/experimental-products-app/changelog/fix-edit-variations
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: fix
-
-Update variations through the variation endpoint in the experimental products app
diff --git a/packages/js/experimental-products-app/changelog/fix-images-field-label-spacing b/packages/js/experimental-products-app/changelog/fix-images-field-label-spacing
deleted file mode 100644
index 1d13139c0a1..00000000000
--- a/packages/js/experimental-products-app/changelog/fix-images-field-label-spacing
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: fix
-
-Align the gap between the Images field label and its upload area with other form fields
diff --git a/packages/js/experimental-products-app/changelog/fix-product-field-visibility b/packages/js/experimental-products-app/changelog/fix-product-field-visibility
deleted file mode 100644
index 9dee81f6d26..00000000000
--- a/packages/js/experimental-products-app/changelog/fix-product-field-visibility
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: fix
-
-Limit quick edit fields to compatible product types
diff --git a/packages/js/experimental-products-app/changelog/fix-product-image-field-selection b/packages/js/experimental-products-app/changelog/fix-product-image-field-selection
deleted file mode 100644
index e42e0971014..00000000000
--- a/packages/js/experimental-products-app/changelog/fix-product-image-field-selection
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: fix
-
-Fix product image selection in the experimental products app quick edit form.
diff --git a/packages/js/experimental-products-app/changelog/fix-products-app-bulk-editing-label b/packages/js/experimental-products-app/changelog/fix-products-app-bulk-editing-label
deleted file mode 100644
index 8d19a83ff24..00000000000
--- a/packages/js/experimental-products-app/changelog/fix-products-app-bulk-editing-label
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: fix
-
-Rename quick edit to bulk editing when multiple products are selected.
diff --git a/packages/js/experimental-products-app/changelog/fix-products-app-crash-fallback b/packages/js/experimental-products-app/changelog/fix-products-app-crash-fallback
deleted file mode 100644
index 5e2bb37c56c..00000000000
--- a/packages/js/experimental-products-app/changelog/fix-products-app-crash-fallback
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: fix
-
-Show a recovery message with GitHub and survey links when the experimental products app crashes.
diff --git a/packages/js/experimental-products-app/changelog/fix-products-app-drawer-animated-close b/packages/js/experimental-products-app/changelog/fix-products-app-drawer-animated-close
deleted file mode 100644
index 8e5f4bd6779..00000000000
--- a/packages/js/experimental-products-app/changelog/fix-products-app-drawer-animated-close
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: fix
-
-Animate the quick/bulk edit drawer's close transition in the experimental products app so it mirrors the open animation, and close the drawer after a fully successful save. The drawer stays open on any save failure so the user can correct and retry.
diff --git a/packages/js/experimental-products-app/changelog/fix-products-app-drawer-close-query b/packages/js/experimental-products-app/changelog/fix-products-app-drawer-close-query
deleted file mode 100644
index 7d8432a2e8e..00000000000
--- a/packages/js/experimental-products-app/changelog/fix-products-app-drawer-close-query
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: fix
-
-Ensure the experimental products app quick edit drawer closes when using the close icon or Cancel button.
diff --git a/packages/js/experimental-products-app/changelog/fix-products-dashboard-filter-empty-state b/packages/js/experimental-products-app/changelog/fix-products-dashboard-filter-empty-state
deleted file mode 100644
index 8811e09dd3f..00000000000
--- a/packages/js/experimental-products-app/changelog/fix-products-dashboard-filter-empty-state
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: fix
-
-Show a search and filter empty state when product filters return no results.
diff --git a/packages/js/experimental-products-app/changelog/fix-products-dashboard-mobile-layout b/packages/js/experimental-products-app/changelog/fix-products-dashboard-mobile-layout
deleted file mode 100644
index fcb74f41016..00000000000
--- a/packages/js/experimental-products-app/changelog/fix-products-dashboard-mobile-layout
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: fix
-
-Render the products dashboard content on mobile-width viewports.
diff --git a/packages/js/experimental-products-app/changelog/fix-products-dashboard-undefined-url b/packages/js/experimental-products-app/changelog/fix-products-dashboard-undefined-url
deleted file mode 100644
index 62de213387b..00000000000
--- a/packages/js/experimental-products-app/changelog/fix-products-dashboard-undefined-url
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: fix
-
-Prevent product dashboard interactions from adding an invalid undefined query parameter to the URL.
diff --git a/packages/js/experimental-products-app/changelog/fix-products-dimension-quick-edit b/packages/js/experimental-products-app/changelog/fix-products-dimension-quick-edit
deleted file mode 100644
index 95e89414594..00000000000
--- a/packages/js/experimental-products-app/changelog/fix-products-dimension-quick-edit
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: fix
-
-Fix dimension inputs in the experimental products app quick edit when product dimensions are empty or mixed.
diff --git a/packages/js/experimental-products-app/changelog/fix-products-table-polish b/packages/js/experimental-products-app/changelog/fix-products-table-polish
deleted file mode 100644
index fd15d8e2d22..00000000000
--- a/packages/js/experimental-products-app/changelog/fix-products-table-polish
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: fix
-
-Fix product table row refresh, price spacing, and stock badge display.
diff --git a/packages/js/experimental-products-app/changelog/fix-quick-edit-bulk-selection b/packages/js/experimental-products-app/changelog/fix-quick-edit-bulk-selection
deleted file mode 100644
index 27ec239d527..00000000000
--- a/packages/js/experimental-products-app/changelog/fix-quick-edit-bulk-selection
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: fix
-
-Fix quick edit bulk selection and hide unsupported SKU field in bulk edits.
diff --git a/packages/js/experimental-products-app/changelog/fix-quick-edit-drawer-title-and-spacing b/packages/js/experimental-products-app/changelog/fix-quick-edit-drawer-title-and-spacing
deleted file mode 100644
index 8588ec75eb4..00000000000
--- a/packages/js/experimental-products-app/changelog/fix-quick-edit-drawer-title-and-spacing
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: fix
-
-Reduce quick edit drawer title to 15px and add 24px gap between the header and the first content element.
diff --git a/packages/js/experimental-products-app/changelog/fix-quick-edit-sale-price-visibility b/packages/js/experimental-products-app/changelog/fix-quick-edit-sale-price-visibility
deleted file mode 100644
index 687fcde29a1..00000000000
--- a/packages/js/experimental-products-app/changelog/fix-quick-edit-sale-price-visibility
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: fix
-
-Experimental Products App: Show the sale price field after enabling on sale in quick edit.
diff --git a/packages/js/experimental-products-app/changelog/fix-rsm-3550-empty-filters b/packages/js/experimental-products-app/changelog/fix-rsm-3550-empty-filters
deleted file mode 100644
index 492974170fb..00000000000
--- a/packages/js/experimental-products-app/changelog/fix-rsm-3550-empty-filters
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: fix
-
-Ignore empty product list filters until a value is selected.
diff --git a/packages/js/experimental-products-app/changelog/fix-rsm-3550-price-range-spacing b/packages/js/experimental-products-app/changelog/fix-rsm-3550-price-range-spacing
deleted file mode 100644
index cbb043ebd00..00000000000
--- a/packages/js/experimental-products-app/changelog/fix-rsm-3550-price-range-spacing
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: fix
-
-Add spacing between product list price range filter fields.
diff --git a/packages/js/experimental-products-app/changelog/fix-rsm-3550-stock-multiselect b/packages/js/experimental-products-app/changelog/fix-rsm-3550-stock-multiselect
deleted file mode 100644
index de24640f9c7..00000000000
--- a/packages/js/experimental-products-app/changelog/fix-rsm-3550-stock-multiselect
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: fix
-
-Allow selecting multiple stock statuses in product list filters.
diff --git a/packages/js/experimental-products-app/changelog/fix-variation-active-status b/packages/js/experimental-products-app/changelog/fix-variation-active-status
deleted file mode 100644
index 395e8a6c6f2..00000000000
--- a/packages/js/experimental-products-app/changelog/fix-variation-active-status
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: fix
-
-Show variation Active and Inactive status in the products app table and quick edit.
diff --git a/packages/js/experimental-products-app/changelog/fix-variation-image-save b/packages/js/experimental-products-app/changelog/fix-variation-image-save
deleted file mode 100644
index acda80f00f6..00000000000
--- a/packages/js/experimental-products-app/changelog/fix-variation-image-save
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: fix
-
-Fix variation image updates in the experimental products app.
diff --git a/packages/js/experimental-products-app/changelog/fix-variation-parent-edit-link b/packages/js/experimental-products-app/changelog/fix-variation-parent-edit-link
deleted file mode 100644
index 910b36551bf..00000000000
--- a/packages/js/experimental-products-app/changelog/fix-variation-parent-edit-link
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: fix
-
-Fix variation table edit links to open the parent product.
diff --git a/packages/js/experimental-products-app/changelog/fix-variation-shipping-tax-class-display b/packages/js/experimental-products-app/changelog/fix-variation-shipping-tax-class-display
deleted file mode 100644
index d43ebec7da4..00000000000
--- a/packages/js/experimental-products-app/changelog/fix-variation-shipping-tax-class-display
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: fix
-
-Fix shipping class and tax class selects in variation edit panel to show "Same as parent" instead of blank when no override is set.
diff --git a/packages/js/experimental-products-app/changelog/reorder-shipping-fields b/packages/js/experimental-products-app/changelog/reorder-shipping-fields
deleted file mode 100644
index 89e423fa815..00000000000
--- a/packages/js/experimental-products-app/changelog/reorder-shipping-fields
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: minor
-Type: update
-
-Reorder shipping fields in the product edit drawer to Length, Width, Height in a row with Weight below.
diff --git a/packages/js/experimental-products-app/changelog/tweak-products-app-delete-modal-no-quotes b/packages/js/experimental-products-app/changelog/tweak-products-app-delete-modal-no-quotes
deleted file mode 100644
index 75b8f11ae91..00000000000
--- a/packages/js/experimental-products-app/changelog/tweak-products-app-delete-modal-no-quotes
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: tweak
-
-Drop the wrapping quotes around the product name in the experimental products app delete confirmation modal.
diff --git a/packages/js/experimental-products-app/changelog/tweak-products-app-drawer-header-padding-24px b/packages/js/experimental-products-app/changelog/tweak-products-app-drawer-header-padding-24px
deleted file mode 100644
index babd7a37ae1..00000000000
--- a/packages/js/experimental-products-app/changelog/tweak-products-app-drawer-header-padding-24px
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: tweak
-
-Bump the experimental products app product edit drawer header's horizontal padding to 24px so the title and close button align with the 24px-padded form below (vertical padding unchanged at 12px).
diff --git a/packages/js/experimental-products-app/changelog/tweak-products-app-drawer-title-20px b/packages/js/experimental-products-app/changelog/tweak-products-app-drawer-title-20px
deleted file mode 100644
index ef270b0e7df..00000000000
--- a/packages/js/experimental-products-app/changelog/tweak-products-app-drawer-title-20px
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: tweak
-
-Bump the experimental products app quick-edit drawer title to 20px so it matches the design-system Drawer header treatment.
diff --git a/packages/js/experimental-products-app/changelog/tweak-searchable-chip-select-spacing b/packages/js/experimental-products-app/changelog/tweak-searchable-chip-select-spacing
deleted file mode 100644
index d7d10eced29..00000000000
--- a/packages/js/experimental-products-app/changelog/tweak-searchable-chip-select-spacing
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: tweak
-
-Adjust searchable chip select spacing in the experimental products app.
diff --git a/packages/js/experimental-products-app/changelog/tweak-variation-filter-padding b/packages/js/experimental-products-app/changelog/tweak-variation-filter-padding
deleted file mode 100644
index c9a76c543b8..00000000000
--- a/packages/js/experimental-products-app/changelog/tweak-variation-filter-padding
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: tweak
-
-Adjust variation view filter spacing in the experimental products app.
diff --git a/packages/js/experimental-products-app/changelog/update-always-show-sale-price b/packages/js/experimental-products-app/changelog/update-always-show-sale-price
deleted file mode 100644
index 07964bb2272..00000000000
--- a/packages/js/experimental-products-app/changelog/update-always-show-sale-price
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: minor
-Type: update
-
-Remove the "On sale" toggle from the product editor and always show the sale price field
diff --git a/packages/js/experimental-products-app/changelog/update-categories-remove-description b/packages/js/experimental-products-app/changelog/update-categories-remove-description
deleted file mode 100644
index 2a74a614e82..00000000000
--- a/packages/js/experimental-products-app/changelog/update-categories-remove-description
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: update
-
-Remove the helper text under the Categories field in the experimental products edit panel.
diff --git a/packages/js/experimental-products-app/changelog/update-dimensions-row-layout b/packages/js/experimental-products-app/changelog/update-dimensions-row-layout
deleted file mode 100644
index 616c5f4a810..00000000000
--- a/packages/js/experimental-products-app/changelog/update-dimensions-row-layout
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: minor
-Type: update
-
-Render the weight, length, and width fields side-by-side with height last in the experimental products quick edit panel.
diff --git a/packages/js/experimental-products-app/changelog/update-featured-product-checkbox b/packages/js/experimental-products-app/changelog/update-featured-product-checkbox
deleted file mode 100644
index 10d180f4aca..00000000000
--- a/packages/js/experimental-products-app/changelog/update-featured-product-checkbox
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: update
-
-Render the "Featured product" and "Track inventory" controls as checkboxes, move "Track inventory" above "Stock status", and tighten the row height for checkbox-only fields
diff --git a/packages/js/experimental-products-app/changelog/update-images-field-label-drag-and-size b/packages/js/experimental-products-app/changelog/update-images-field-label-drag-and-size
deleted file mode 100644
index c81c011f8ec..00000000000
--- a/packages/js/experimental-products-app/changelog/update-images-field-label-drag-and-size
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: minor
-Type: update
-
-Add an "Images" label above the images field, fix drag-and-drop reordering, and resize all thumbnails (including the featured image) to a uniform 72x72 grid.
diff --git a/packages/js/experimental-products-app/changelog/update-product-edit-field-groups b/packages/js/experimental-products-app/changelog/update-product-edit-field-groups
deleted file mode 100644
index e93cc31a8f5..00000000000
--- a/packages/js/experimental-products-app/changelog/update-product-edit-field-groups
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: update
-
-Group product edit fields by section and align section spacing with the design.
diff --git a/packages/js/experimental-products-app/changelog/update-product-list-header-layout b/packages/js/experimental-products-app/changelog/update-product-list-header-layout
deleted file mode 100644
index b9296fbdb8c..00000000000
--- a/packages/js/experimental-products-app/changelog/update-product-list-header-layout
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: update
-
-Update the experimental product list header layout to match the compact prototype.
diff --git a/packages/js/experimental-products-app/changelog/update-product-status-and-catalog-visibility-dropdowns b/packages/js/experimental-products-app/changelog/update-product-status-and-catalog-visibility-dropdowns
deleted file mode 100644
index 575efa06f69..00000000000
--- a/packages/js/experimental-products-app/changelog/update-product-status-and-catalog-visibility-dropdowns
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: minor
-Type: update
-
-Rename the stock dropdown's "Status" label to "Stock status" and the "Visibility" field to "Catalog visibility" (with updated option labels)
diff --git a/packages/js/experimental-products-app/changelog/update-products-app-add-new-button b/packages/js/experimental-products-app/changelog/update-products-app-add-new-button
deleted file mode 100644
index 7f562ca8fc1..00000000000
--- a/packages/js/experimental-products-app/changelog/update-products-app-add-new-button
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: update
-
-Restore the single add new product button in the experimental products app header.
diff --git a/packages/js/experimental-products-app/changelog/update-products-app-add-new-menu b/packages/js/experimental-products-app/changelog/update-products-app-add-new-menu
deleted file mode 100644
index 5950aecd5c9..00000000000
--- a/packages/js/experimental-products-app/changelog/update-products-app-add-new-menu
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: minor
-Type: update
-
-Replace the single "Add new product" button with a dropdown menu offering physical, variable, grouped, downloadable, and affiliate product types in the experimental products app header.
diff --git a/packages/js/experimental-products-app/changelog/update-products-app-admin-theme-color b/packages/js/experimental-products-app/changelog/update-products-app-admin-theme-color
deleted file mode 100644
index 721533d8299..00000000000
--- a/packages/js/experimental-products-app/changelog/update-products-app-admin-theme-color
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: update
-
-Update the experimental products app admin theme color.
diff --git a/packages/js/experimental-products-app/changelog/update-products-app-category-label-singular b/packages/js/experimental-products-app/changelog/update-products-app-category-label-singular
deleted file mode 100644
index 9d034ecac63..00000000000
--- a/packages/js/experimental-products-app/changelog/update-products-app-category-label-singular
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: update
-
-Rename the Category filter and column label from "Categories" to "Category" in the experimental products app.
diff --git a/packages/js/experimental-products-app/changelog/update-products-app-drawer b/packages/js/experimental-products-app/changelog/update-products-app-drawer
deleted file mode 100644
index 20208b4deaf..00000000000
--- a/packages/js/experimental-products-app/changelog/update-products-app-drawer
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: update
-
-Display the experimental products app quick edit form in a Drawer.
diff --git a/packages/js/experimental-products-app/changelog/update-products-app-grouped-products-field b/packages/js/experimental-products-app/changelog/update-products-app-grouped-products-field
deleted file mode 100644
index 1d5c89706c6..00000000000
--- a/packages/js/experimental-products-app/changelog/update-products-app-grouped-products-field
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: minor
-Type: update
-
-Replace the Upsells field in the grouped product quick-edit form with a Grouped products chip-select field that searches products and shows each child with its thumbnail.
diff --git a/packages/js/experimental-products-app/changelog/update-products-app-rest-api-v4-blueprint b/packages/js/experimental-products-app/changelog/update-products-app-rest-api-v4-blueprint
deleted file mode 100644
index 99de837bf80..00000000000
--- a/packages/js/experimental-products-app/changelog/update-products-app-rest-api-v4-blueprint
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: update
-
-Enable REST API v4 in the experimental products app Blueprint environment.
diff --git a/packages/js/experimental-products-app/changelog/update-products-app-variation-row-actions b/packages/js/experimental-products-app/changelog/update-products-app-variation-row-actions
deleted file mode 100644
index a3730a2fc00..00000000000
--- a/packages/js/experimental-products-app/changelog/update-products-app-variation-row-actions
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: minor
-Type: update
-
-Tailor the row actions on variation rows in the experimental products app product list: keep Quick edit and Edit, hide Duplicate, and replace Move to trash with Permanently delete (using the existing delete-confirmation modal).
diff --git a/packages/js/experimental-products-app/changelog/update-products-quick-edit-fields b/packages/js/experimental-products-app/changelog/update-products-quick-edit-fields
deleted file mode 100644
index fb256dd90c1..00000000000
--- a/packages/js/experimental-products-app/changelog/update-products-quick-edit-fields
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: update
-
-Update quick edit fields for simple, variable parent, and variation products.
diff --git a/packages/js/experimental-products-app/changelog/update-remove-featured-helper-text b/packages/js/experimental-products-app/changelog/update-remove-featured-helper-text
deleted file mode 100644
index 58261ae0d07..00000000000
--- a/packages/js/experimental-products-app/changelog/update-remove-featured-helper-text
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: update
-
-Remove the helper text from the Featured product toggle in the experimental quick edit panel.
diff --git a/packages/js/experimental-products-app/changelog/update-remove-product-title-underline b/packages/js/experimental-products-app/changelog/update-remove-product-title-underline
deleted file mode 100644
index d9610eab260..00000000000
--- a/packages/js/experimental-products-app/changelog/update-remove-product-title-underline
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: update
-
-Remove the underline from product title links in the experimental All Products list.
diff --git a/packages/js/experimental-products-app/changelog/update-remove-shipping-class-filter b/packages/js/experimental-products-app/changelog/update-remove-shipping-class-filter
deleted file mode 100644
index 10728579c4c..00000000000
--- a/packages/js/experimental-products-app/changelog/update-remove-shipping-class-filter
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: update
-
-Remove the Shipping Class filter from the experimental products app product list.
diff --git a/packages/js/experimental-products-app/changelog/update-remove-tags-helper-text b/packages/js/experimental-products-app/changelog/update-remove-tags-helper-text
deleted file mode 100644
index e1f7932aee4..00000000000
--- a/packages/js/experimental-products-app/changelog/update-remove-tags-helper-text
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: update
-
-Remove the helper text from the Tags field in the experimental quick edit panel.
diff --git a/packages/js/experimental-products-app/changelog/update-remove-type-from-quick-edit b/packages/js/experimental-products-app/changelog/update-remove-type-from-quick-edit
deleted file mode 100644
index 0e942328a17..00000000000
--- a/packages/js/experimental-products-app/changelog/update-remove-type-from-quick-edit
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: update
-
-Remove the Product type field from the quick edit panel.
diff --git a/packages/js/experimental-products-app/changelog/update-sale-schedule-fields b/packages/js/experimental-products-app/changelog/update-sale-schedule-fields
deleted file mode 100644
index f2a39ca8f56..00000000000
--- a/packages/js/experimental-products-app/changelog/update-sale-schedule-fields
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: minor
-Type: update
-
-Add sale scheduling and shipping class fields to product edit forms
diff --git a/packages/js/experimental-products-app/changelog/update-schedule-sale-control b/packages/js/experimental-products-app/changelog/update-schedule-sale-control
deleted file mode 100644
index f1472aac8f8..00000000000
--- a/packages/js/experimental-products-app/changelog/update-schedule-sale-control
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: update
-
-Move the sale schedule date pickers into the schedule sale field.
diff --git a/packages/js/experimental-products-app/changelog/update-select-all-variations-action b/packages/js/experimental-products-app/changelog/update-select-all-variations-action
deleted file mode 100644
index 623e1a8469b..00000000000
--- a/packages/js/experimental-products-app/changelog/update-select-all-variations-action
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: update
-
-Replace the product view action with a select all variations action for variable products.
diff --git a/packages/js/experimental-products-app/changelog/update-select-fields-use-ui-primitive b/packages/js/experimental-products-app/changelog/update-select-fields-use-ui-primitive
deleted file mode 100644
index d30cc7bf016..00000000000
--- a/packages/js/experimental-products-app/changelog/update-select-fields-use-ui-primitive
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: minor
-Type: update
-
-Use the @wordpress/ui SelectControl for every single-select field in the experimental products quick edit panel (Status, Stock, Shipping class, Visibility).
diff --git a/packages/js/experimental-products-app/changelog/update-sku-remove-description b/packages/js/experimental-products-app/changelog/update-sku-remove-description
deleted file mode 100644
index eb6f863f062..00000000000
--- a/packages/js/experimental-products-app/changelog/update-sku-remove-description
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: update
-
-Remove the helper text under the SKU field in the experimental products edit panel.
diff --git a/packages/js/experimental-products-app/changelog/update-status-options-and-labels b/packages/js/experimental-products-app/changelog/update-status-options-and-labels
deleted file mode 100644
index 42235317729..00000000000
--- a/packages/js/experimental-products-app/changelog/update-status-options-and-labels
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: minor
-Type: update
-
-Align product status labels (Published, Draft, Pending review) across the status select, tabs, and badge in the experimental products list. Remove the helper text under the status select.
diff --git a/packages/js/experimental-products-app/changelog/update-stock-column-badge b/packages/js/experimental-products-app/changelog/update-stock-column-badge
deleted file mode 100644
index f1acd93afe4..00000000000
--- a/packages/js/experimental-products-app/changelog/update-stock-column-badge
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: minor
-Type: update
-
-Render the Stock column in the products list as a Badge, with intents reflecting in stock, out of stock, and on backorder states.
diff --git a/packages/js/experimental-products-app/changelog/update-taxonomy-fields-chip-select b/packages/js/experimental-products-app/changelog/update-taxonomy-fields-chip-select
deleted file mode 100644
index bec6e1bac98..00000000000
--- a/packages/js/experimental-products-app/changelog/update-taxonomy-fields-chip-select
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: minor
-Type: update
-
-Use the searchable chip select control for product category, tag, and brand taxonomy fields in the experimental products app.
diff --git a/packages/js/experimental-products-app/changelog/update-wordpress-ui-theme-provider b/packages/js/experimental-products-app/changelog/update-wordpress-ui-theme-provider
deleted file mode 100644
index 6a117af92e1..00000000000
--- a/packages/js/experimental-products-app/changelog/update-wordpress-ui-theme-provider
+++ /dev/null
@@ -1,4 +0,0 @@
-Significance: patch
-Type: dev
-
-Update WordPress UI dependencies and use the public ThemeProvider API.
diff --git a/packages/js/experimental-products-app/changelog/wooplug-6930-adopt-import-order b/packages/js/experimental-products-app/changelog/wooplug-6930-adopt-import-order
deleted file mode 100644
index 6a2c44e8ef9..00000000000
--- a/packages/js/experimental-products-app/changelog/wooplug-6930-adopt-import-order
+++ /dev/null
@@ -1,3 +0,0 @@
-Significance: patch
-Type: dev
-Comment: Remove obsolete @woocommerce/dependency-group eslint-disable directives following the switch to import/order in @woocommerce/eslint-plugin.
diff --git a/packages/js/experimental-products-app/changelog/wooplug-6930-eslint-v10-flat-config b/packages/js/experimental-products-app/changelog/wooplug-6930-eslint-v10-flat-config
deleted file mode 100644
index 46bff620b47..00000000000
--- a/packages/js/experimental-products-app/changelog/wooplug-6930-eslint-v10-flat-config
+++ /dev/null
@@ -1,3 +0,0 @@
-Significance: patch
-Type: dev
-Comment: Migrate to ESLint v10 Flat Config. Tooling only; no runtime change.
diff --git a/packages/js/experimental-products-app/changelog/wooplug-7554-add-tooling-catalog b/packages/js/experimental-products-app/changelog/wooplug-7554-add-tooling-catalog
deleted file mode 100644
index 9f377230e05..00000000000
--- a/packages/js/experimental-products-app/changelog/wooplug-7554-add-tooling-catalog
+++ /dev/null
@@ -1,3 +0,0 @@
-Significance: patch
-Type: dev
-Comment: Use the tooling catalog for shared Babel, PostCSS, and webpack versions.
diff --git a/packages/js/experimental-products-app/composer.json b/packages/js/experimental-products-app/composer.json
deleted file mode 100644
index 0efa33db6d8..00000000000
--- a/packages/js/experimental-products-app/composer.json
+++ /dev/null
@@ -1,32 +0,0 @@
-{
-	"name": "woocommerce/experimental-products-app",
-	"description": "WooCommerce experimental products app",
-	"type": "library",
-	"license": "GPL-2.0-or-later",
-	"minimum-stability": "dev",
-	"require-dev": {
-		"automattic/jetpack-changelogger": "3.3.0"
-	},
-	"config": {
-		"platform": {
-			"php": "7.4"
-		}
-	},
-	"extra": {
-		"changelogger": {
-			"formatter": {
-				"filename": "../../../tools/changelogger/class-package-formatter.php"
-			},
-			"types": {
-				"fix": "Fixes an existing bug",
-				"add": "Adds functionality",
-				"update": "Update existing functionality",
-				"dev": "Development related task",
-				"tweak": "A minor adjustment to the codebase",
-				"performance": "Address performance issues",
-				"enhancement": "Improve existing functionality"
-			},
-			"changelog": "changelog.md"
-		}
-	}
-}
diff --git a/packages/js/experimental-products-app/composer.lock b/packages/js/experimental-products-app/composer.lock
deleted file mode 100644
index 5e556e964b2..00000000000
--- a/packages/js/experimental-products-app/composer.lock
+++ /dev/null
@@ -1,1084 +0,0 @@
-{
-    "_readme": [
-        "This file locks the dependencies of your project to a known state",
-        "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
-        "This file is @generated automatically"
-    ],
-    "content-hash": "5e38beafcf5f4591a92b3fa8c03137df",
-    "packages": [],
-    "packages-dev": [
-        {
-            "name": "automattic/jetpack-changelogger",
-            "version": "v3.3.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/Automattic/jetpack-changelogger.git",
-                "reference": "8f63c829b8d1b0d7b1d5de93510d78523ed18959"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/Automattic/jetpack-changelogger/zipball/8f63c829b8d1b0d7b1d5de93510d78523ed18959",
-                "reference": "8f63c829b8d1b0d7b1d5de93510d78523ed18959",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.6",
-                "symfony/console": "^3.4 || ^5.2 || ^6.0",
-                "symfony/process": "^3.4 || ^5.2 || ^6.0",
-                "wikimedia/at-ease": "^1.2 || ^2.0"
-            },
-            "require-dev": {
-                "wikimedia/testing-access-wrapper": "^1.0 || ^2.0",
-                "yoast/phpunit-polyfills": "1.0.4"
-            },
-            "bin": [
-                "bin/changelogger"
-            ],
-            "type": "project",
-            "extra": {
-                "autotagger": true,
-                "mirror-repo": "Automattic/jetpack-changelogger",
-                "branch-alias": {
-                    "dev-trunk": "3.3.x-dev"
-                },
-                "changelogger": {
-                    "link-template": "https://github.com/Automattic/jetpack-changelogger/compare/${old}...${new}"
-                },
-                "version-constants": {
-                    "::VERSION": "src/Application.php"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Automattic\\Jetpack\\Changelog\\": "lib",
-                    "Automattic\\Jetpack\\Changelogger\\": "src"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "GPL-2.0-or-later"
-            ],
-            "description": "Jetpack Changelogger tool. Allows for managing changelogs by dropping change files into a changelog directory with each PR.",
-            "support": {
-                "source": "https://github.com/Automattic/jetpack-changelogger/tree/v3.3.0"
-            },
-            "time": "2022-12-26T13:49:01+00:00"
-        },
-        {
-            "name": "psr/container",
-            "version": "1.x-dev",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/php-fig/container.git",
-                "reference": "513e0666f7216c7459170d56df27dfcefe1689ea"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea",
-                "reference": "513e0666f7216c7459170d56df27dfcefe1689ea",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.4.0"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Psr\\Container\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "PHP-FIG",
-                    "homepage": "https://www.php-fig.org/"
-                }
-            ],
-            "description": "Common Container Interface (PHP FIG PSR-11)",
-            "homepage": "https://github.com/php-fig/container",
-            "keywords": [
-                "PSR-11",
-                "container",
-                "container-interface",
-                "container-interop",
-                "psr"
-            ],
-            "support": {
-                "issues": "https://github.com/php-fig/container/issues",
-                "source": "https://github.com/php-fig/container/tree/1.1.2"
-            },
-            "time": "2021-11-05T16:50:12+00:00"
-        },
-        {
-            "name": "symfony/console",
-            "version": "5.4.x-dev",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/console.git",
-                "reference": "c4ba980ca61a9eb18ee6bcc73f28e475852bb1ed"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/console/zipball/c4ba980ca61a9eb18ee6bcc73f28e475852bb1ed",
-                "reference": "c4ba980ca61a9eb18ee6bcc73f28e475852bb1ed",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2.5",
-                "symfony/deprecation-contracts": "^2.1|^3",
-                "symfony/polyfill-mbstring": "~1.0",
-                "symfony/polyfill-php73": "^1.9",
-                "symfony/polyfill-php80": "^1.16",
-                "symfony/service-contracts": "^1.1|^2|^3",
-                "symfony/string": "^5.1|^6.0"
-            },
-            "conflict": {
-                "psr/log": ">=3",
-                "symfony/dependency-injection": "<4.4",
-                "symfony/dotenv": "<5.1",
-                "symfony/event-dispatcher": "<4.4",
-                "symfony/lock": "<4.4",
-                "symfony/process": "<4.4"
-            },
-            "provide": {
-                "psr/log-implementation": "1.0|2.0"
-            },
-            "require-dev": {
-                "psr/log": "^1|^2",
-                "symfony/config": "^4.4|^5.0|^6.0",
-                "symfony/dependency-injection": "^4.4|^5.0|^6.0",
-                "symfony/event-dispatcher": "^4.4|^5.0|^6.0",
-                "symfony/lock": "^4.4|^5.0|^6.0",
-                "symfony/process": "^4.4|^5.0|^6.0",
-                "symfony/var-dumper": "^4.4|^5.0|^6.0"
-            },
-            "suggest": {
-                "psr/log": "For using the console logger",
-                "symfony/event-dispatcher": "",
-                "symfony/lock": "",
-                "symfony/process": ""
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Console\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Eases the creation of beautiful and testable command line interfaces",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "cli",
-                "command-line",
-                "console",
-                "terminal"
-            ],
-            "support": {
-                "source": "https://github.com/symfony/console/tree/5.4"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2024-11-06T11:30:55+00:00"
-        },
-        {
-            "name": "symfony/deprecation-contracts",
-            "version": "2.5.x-dev",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/deprecation-contracts.git",
-                "reference": "605389f2a7e5625f273b53960dc46aeaf9c62918"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/605389f2a7e5625f273b53960dc46aeaf9c62918",
-                "reference": "605389f2a7e5625f273b53960dc46aeaf9c62918",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.1"
-            },
-            "type": "library",
-            "extra": {
-                "thanks": {
-                    "url": "https://github.com/symfony/contracts",
-                    "name": "symfony/contracts"
-                },
-                "branch-alias": {
-                    "dev-main": "2.5-dev"
-                }
-            },
-            "autoload": {
-                "files": [
-                    "function.php"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "A generic function and convention to trigger deprecation notices",
-            "homepage": "https://symfony.com",
-            "support": {
-                "source": "https://github.com/symfony/deprecation-contracts/tree/2.5"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2024-09-25T14:11:13+00:00"
-        },
-        {
-            "name": "symfony/polyfill-ctype",
-            "version": "1.x-dev",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/polyfill-ctype.git",
-                "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638",
-                "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2"
-            },
-            "provide": {
-                "ext-ctype": "*"
-            },
-            "suggest": {
-                "ext-ctype": "For best performance"
-            },
-            "default-branch": true,
-            "type": "library",
-            "extra": {
-                "thanks": {
-                    "url": "https://github.com/symfony/polyfill",
-                    "name": "symfony/polyfill"
-                }
-            },
-            "autoload": {
-                "files": [
-                    "bootstrap.php"
-                ],
-                "psr-4": {
-                    "Symfony\\Polyfill\\Ctype\\": ""
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Gert de Pagter",
-                    "email": "BackEndTea@gmail.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony polyfill for ctype functions",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "compatibility",
-                "ctype",
-                "polyfill",
-                "portable"
-            ],
-            "support": {
-                "source": "https://github.com/symfony/polyfill-ctype/tree/v1.33.0"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://github.com/nicolas-grekas",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2024-09-09T11:45:10+00:00"
-        },
-        {
-            "name": "symfony/polyfill-intl-grapheme",
-            "version": "1.x-dev",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/polyfill-intl-grapheme.git",
-                "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/380872130d3a5dd3ace2f4010d95125fde5d5c70",
-                "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2"
-            },
-            "suggest": {
-                "ext-intl": "For best performance"
-            },
-            "default-branch": true,
-            "type": "library",
-            "extra": {
-                "thanks": {
-                    "url": "https://github.com/symfony/polyfill",
-                    "name": "symfony/polyfill"
-                }
-            },
-            "autoload": {
-                "files": [
-                    "bootstrap.php"
-                ],
-                "psr-4": {
-                    "Symfony\\Polyfill\\Intl\\Grapheme\\": ""
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony polyfill for intl's grapheme_* functions",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "compatibility",
-                "grapheme",
-                "intl",
-                "polyfill",
-                "portable",
-                "shim"
-            ],
-            "support": {
-                "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.33.0"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://github.com/nicolas-grekas",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2025-06-27T09:58:17+00:00"
-        },
-        {
-            "name": "symfony/polyfill-intl-normalizer",
-            "version": "1.x-dev",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/polyfill-intl-normalizer.git",
-                "reference": "3833d7255cc303546435cb650316bff708a1c75c"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c",
-                "reference": "3833d7255cc303546435cb650316bff708a1c75c",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2"
-            },
-            "suggest": {
-                "ext-intl": "For best performance"
-            },
-            "default-branch": true,
-            "type": "library",
-            "extra": {
-                "thanks": {
-                    "url": "https://github.com/symfony/polyfill",
-                    "name": "symfony/polyfill"
-                }
-            },
-            "autoload": {
-                "files": [
-                    "bootstrap.php"
-                ],
-                "psr-4": {
-                    "Symfony\\Polyfill\\Intl\\Normalizer\\": ""
-                },
-                "classmap": [
-                    "Resources/stubs"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony polyfill for intl's Normalizer class and related functions",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "compatibility",
-                "intl",
-                "normalizer",
-                "polyfill",
-                "portable",
-                "shim"
-            ],
-            "support": {
-                "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.33.0"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://github.com/nicolas-grekas",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2024-09-09T11:45:10+00:00"
-        },
-        {
-            "name": "symfony/polyfill-mbstring",
-            "version": "1.x-dev",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/polyfill-mbstring.git",
-                "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493",
-                "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493",
-                "shasum": ""
-            },
-            "require": {
-                "ext-iconv": "*",
-                "php": ">=7.2"
-            },
-            "provide": {
-                "ext-mbstring": "*"
-            },
-            "suggest": {
-                "ext-mbstring": "For best performance"
-            },
-            "default-branch": true,
-            "type": "library",
-            "extra": {
-                "thanks": {
-                    "url": "https://github.com/symfony/polyfill",
-                    "name": "symfony/polyfill"
-                }
-            },
-            "autoload": {
-                "files": [
-                    "bootstrap.php"
-                ],
-                "psr-4": {
-                    "Symfony\\Polyfill\\Mbstring\\": ""
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony polyfill for the Mbstring extension",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "compatibility",
-                "mbstring",
-                "polyfill",
-                "portable",
-                "shim"
-            ],
-            "support": {
-                "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.33.0"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://github.com/nicolas-grekas",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2024-12-23T08:48:59+00:00"
-        },
-        {
-            "name": "symfony/polyfill-php73",
-            "version": "1.x-dev",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/polyfill-php73.git",
-                "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/0f68c03565dcaaf25a890667542e8bd75fe7e5bb",
-                "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2"
-            },
-            "default-branch": true,
-            "type": "library",
-            "extra": {
-                "thanks": {
-                    "url": "https://github.com/symfony/polyfill",
-                    "name": "symfony/polyfill"
-                }
-            },
-            "autoload": {
-                "files": [
-                    "bootstrap.php"
-                ],
-                "psr-4": {
-                    "Symfony\\Polyfill\\Php73\\": ""
-                },
-                "classmap": [
-                    "Resources/stubs"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "compatibility",
-                "polyfill",
-                "portable",
-                "shim"
-            ],
-            "support": {
-                "source": "https://github.com/symfony/polyfill-php73/tree/v1.33.0"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://github.com/nicolas-grekas",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2024-09-09T11:45:10+00:00"
-        },
-        {
-            "name": "symfony/polyfill-php80",
-            "version": "1.x-dev",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/polyfill-php80.git",
-                "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/0cc9dd0f17f61d8131e7df6b84bd344899fe2608",
-                "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2"
-            },
-            "default-branch": true,
-            "type": "library",
-            "extra": {
-                "thanks": {
-                    "url": "https://github.com/symfony/polyfill",
-                    "name": "symfony/polyfill"
-                }
-            },
-            "autoload": {
-                "files": [
-                    "bootstrap.php"
-                ],
-                "psr-4": {
-                    "Symfony\\Polyfill\\Php80\\": ""
-                },
-                "classmap": [
-                    "Resources/stubs"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Ion Bazan",
-                    "email": "ion.bazan@gmail.com"
-                },
-                {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "compatibility",
-                "polyfill",
-                "portable",
-                "shim"
-            ],
-            "support": {
-                "source": "https://github.com/symfony/polyfill-php80/tree/v1.33.0"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://github.com/nicolas-grekas",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2025-01-02T08:10:11+00:00"
-        },
-        {
-            "name": "symfony/process",
-            "version": "5.4.x-dev",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/process.git",
-                "reference": "5d1662fb32ebc94f17ddb8d635454a776066733d"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/process/zipball/5d1662fb32ebc94f17ddb8d635454a776066733d",
-                "reference": "5d1662fb32ebc94f17ddb8d635454a776066733d",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2.5",
-                "symfony/polyfill-php80": "^1.16"
-            },
-            "type": "library",
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Component\\Process\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Fabien Potencier",
-                    "email": "fabien@symfony.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Executes commands in sub-processes",
-            "homepage": "https://symfony.com",
-            "support": {
-                "source": "https://github.com/symfony/process/tree/5.4"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2024-11-06T11:36:42+00:00"
-        },
-        {
-            "name": "symfony/service-contracts",
-            "version": "2.5.x-dev",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/service-contracts.git",
-                "reference": "f37b419f7aea2e9abf10abd261832cace12e3300"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f37b419f7aea2e9abf10abd261832cace12e3300",
-                "reference": "f37b419f7aea2e9abf10abd261832cace12e3300",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2.5",
-                "psr/container": "^1.1",
-                "symfony/deprecation-contracts": "^2.1|^3"
-            },
-            "conflict": {
-                "ext-psr": "<1.1|>=2"
-            },
-            "suggest": {
-                "symfony/service-implementation": ""
-            },
-            "type": "library",
-            "extra": {
-                "thanks": {
-                    "url": "https://github.com/symfony/contracts",
-                    "name": "symfony/contracts"
-                },
-                "branch-alias": {
-                    "dev-main": "2.5-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Symfony\\Contracts\\Service\\": ""
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Generic abstractions related to writing services",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "abstractions",
-                "contracts",
-                "decoupling",
-                "interfaces",
-                "interoperability",
-                "standards"
-            ],
-            "support": {
-                "source": "https://github.com/symfony/service-contracts/tree/2.5"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2024-09-25T14:11:13+00:00"
-        },
-        {
-            "name": "symfony/string",
-            "version": "5.4.x-dev",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/symfony/string.git",
-                "reference": "136ca7d72f72b599f2631aca474a4f8e26719799"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/symfony/string/zipball/136ca7d72f72b599f2631aca474a4f8e26719799",
-                "reference": "136ca7d72f72b599f2631aca474a4f8e26719799",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2.5",
-                "symfony/polyfill-ctype": "~1.8",
-                "symfony/polyfill-intl-grapheme": "~1.0",
-                "symfony/polyfill-intl-normalizer": "~1.0",
-                "symfony/polyfill-mbstring": "~1.0",
-                "symfony/polyfill-php80": "~1.15"
-            },
-            "conflict": {
-                "symfony/translation-contracts": ">=3.0"
-            },
-            "require-dev": {
-                "symfony/error-handler": "^4.4|^5.0|^6.0",
-                "symfony/http-client": "^4.4|^5.0|^6.0",
-                "symfony/translation-contracts": "^1.1|^2",
-                "symfony/var-exporter": "^4.4|^5.0|^6.0"
-            },
-            "type": "library",
-            "autoload": {
-                "files": [
-                    "Resources/functions.php"
-                ],
-                "psr-4": {
-                    "Symfony\\Component\\String\\": ""
-                },
-                "exclude-from-classmap": [
-                    "/Tests/"
-                ]
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Nicolas Grekas",
-                    "email": "p@tchwork.com"
-                },
-                {
-                    "name": "Symfony Community",
-                    "homepage": "https://symfony.com/contributors"
-                }
-            ],
-            "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way",
-            "homepage": "https://symfony.com",
-            "keywords": [
-                "grapheme",
-                "i18n",
-                "string",
-                "unicode",
-                "utf-8",
-                "utf8"
-            ],
-            "support": {
-                "source": "https://github.com/symfony/string/tree/5.4"
-            },
-            "funding": [
-                {
-                    "url": "https://symfony.com/sponsor",
-                    "type": "custom"
-                },
-                {
-                    "url": "https://github.com/fabpot",
-                    "type": "github"
-                },
-                {
-                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
-                    "type": "tidelift"
-                }
-            ],
-            "time": "2024-11-10T20:33:58+00:00"
-        },
-        {
-            "name": "wikimedia/at-ease",
-            "version": "v2.1.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/wikimedia/at-ease.git",
-                "reference": "e8ebaa7bb7c8a8395481a05f6dc4deaceab11c33"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/wikimedia/at-ease/zipball/e8ebaa7bb7c8a8395481a05f6dc4deaceab11c33",
-                "reference": "e8ebaa7bb7c8a8395481a05f6dc4deaceab11c33",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=7.2.9"
-            },
-            "require-dev": {
-                "mediawiki/mediawiki-codesniffer": "35.0.0",
-                "mediawiki/minus-x": "1.1.1",
-                "ockcyp/covers-validator": "1.3.3",
-                "php-parallel-lint/php-console-highlighter": "0.5.0",
-                "php-parallel-lint/php-parallel-lint": "1.2.0",
-                "phpunit/phpunit": "^8.5"
-            },
-            "type": "library",
-            "autoload": {
-                "files": [
-                    "src/Wikimedia/Functions.php"
-                ],
-                "psr-4": {
-                    "Wikimedia\\AtEase\\": "src/Wikimedia/AtEase/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "GPL-2.0-or-later"
-            ],
-            "authors": [
-                {
-                    "name": "Tim Starling",
-                    "email": "tstarling@wikimedia.org"
-                },
-                {
-                    "name": "MediaWiki developers",
-                    "email": "wikitech-l@lists.wikimedia.org"
-                }
-            ],
-            "description": "Safe replacement to @ for suppressing warnings.",
-            "homepage": "https://www.mediawiki.org/wiki/at-ease",
-            "support": {
-                "source": "https://github.com/wikimedia/at-ease/tree/v2.1.0"
-            },
-            "time": "2021-02-27T15:53:37+00:00"
-        }
-    ],
-    "aliases": [],
-    "minimum-stability": "dev",
-    "stability-flags": {},
-    "prefer-stable": false,
-    "prefer-lowest": false,
-    "platform": {},
-    "platform-dev": {},
-    "platform-overrides": {
-        "php": "7.4"
-    },
-    "plugin-api-version": "2.6.0"
-}
diff --git a/packages/js/experimental-products-app/docs/bulk-editing.md b/packages/js/experimental-products-app/docs/bulk-editing.md
deleted file mode 100644
index 0903172956c..00000000000
--- a/packages/js/experimental-products-app/docs/bulk-editing.md
+++ /dev/null
@@ -1,177 +0,0 @@
-# Bulk Editing
-
-Bulk editing in the experimental products app is built on top of the quick edit drawer. The same `ProductEdit` surface handles both single-product quick edits and multi-product bulk edits. When more than one product ID is selected, the form is made bulk-aware by merging product data, showing mixed field state, filtering fields to the shared editable set, and applying changes to every selected product.
-
-## Entry Point
-
-The DataViews quick edit action supports bulk selection. When it runs, it writes the selected IDs and the drawer state into the URL:
-
-```text
-/products?postId=12,34&quickEdit=true
-```
-
-The relevant pieces are:
-
-- `quickEditAction()` in `src/dataviews-actions/actions.tsx`, which sets `postId` and `quickEdit=true`.
-- `useLayoutAreas()` in `src/router.tsx`, which opens `ProductEdit` when `quickEdit` is true.
-- `ProductEdit` in `src/product-edit/index.tsx`, which reads `postId`, resolves the selected products, and renders the drawer.
-
-## Product Resolution
-
-`ProductEdit` resolves selected products from two places:
-
-- The current product list records, including embedded variations.
-- The WordPress core data store, when a selected product is not already in the list or has unsaved edits.
-
-For variations, the drawer keeps editing tied to the parent product record. A selected variation is read from the parent product's `_embedded.variations` when an edited parent record exists. This keeps variation edits in one place before save.
-
-## Field Selection
-
-Bulk edit uses the normal product field registry, then narrows it to fields that can safely apply to every selected product.
-
-`getProductEditFields()` removes fields that are display-only summaries or counts, such as `price_summary`, `inventory_summary`, and `images_count`.
-
-`getVisibleProductEditFields()` then applies the bulk rules:
-
-- Only fields supported by every selected product type are shown.
-- Fields hidden by per-field `isVisible()` logic are shown only when every selected product passes that visibility check.
-- `sku` is hidden during bulk editing because each product needs a unique value.
-- Parent-owned fields, such as `name`, `categories`, `tags`, and `catalog_visibility`, are hidden when the selection includes variations.
-- Sellable fields, such as prices and sale dates, are hidden when the selection includes a variable parent product.
-- Cost of goods is shown only when the feature is enabled and the selected products expose the data.
-
-The final field list is pruned into the product-type form layout by `getProductTypeFormFields()`.
-
-## Merged Form Data
-
-The form needs one data object even when many products are selected. `buildProductBulkEditData()` creates that object and also records per-field state.
-
-It starts with `buildMergedProductEditData()`:
-
-- Shared values are preserved. If every selected product has `status: "publish"`, the form gets `status: "publish"`.
-- Mixed string values fall back to an empty string.
-- Mixed arrays fall back to an empty array.
-- Mixed `null` values stay `null`.
-- Other mixed values fall back to `undefined`.
-
-Then `buildProductBulkEditData()` adds `fieldStates` for each visible field:
-
-- `isMixed` is true when selected products have different values.
-- `isEmpty` is true when all selected products share an empty value.
-- `value` contains the shared value when there is one.
-- `placeholder` is `Mixed` when the field has mixed values.
-
-This lets the UI show the current shared value when one exists, or a neutral mixed state when the selected products differ.
-
-## Bulk-Aware Controls
-
-`getBulkEnhancedProductEditFields()` adjusts field definitions only when more than one product is selected.
-
-For regular fields:
-
-- Mixed placeholders are passed through to the field.
-- The product name field is no longer required, so a mixed or empty name does not block bulk editing.
-- Mixed boolean fields use an indeterminate checkbox. Selecting it applies the chosen boolean value to every selected product.
-
-For numeric bulk fields:
-
-- The field is split into an operation control and a value control.
-- The value control is disabled while the operation is `dont_change`.
-- The value placeholder shows either `Mixed` or the shared existing value.
-
-`injectBulkNumericOperationFormFields()` wraps those paired controls in a row so each numeric field is presented as:
-
-```text
-Operation | Value
-```
-
-The operation control is created by `createBulkNumericOperationField()` in `src/product-edit/bulk-numeric-control.tsx`.
-
-## Change Handling
-
-Single-product edits are simple: `onChange()` immediately calls `editEntityRecord()` with the field changes.
-
-Bulk edits split changes into two groups:
-
-- Non-numeric changes are applied immediately to every selected product.
-- Numeric bulk operation changes are stored in local `bulkEditData` until save.
-
-The numeric fields are deferred because operations like "increase by 10%" depend on each product's original value. Applying the same raw form value immediately would lose that per-product calculation.
-
-`applySelectedProductChanges()` handles applying changes to the selected records:
-
-- Product changes call `editEntityRecord( 'root', 'product', product.id, changes )`.
-- Variation changes update the parent product's `_embedded.variations`.
-- Multiple variation edits for the same parent are grouped before the parent record is edited.
-
-## Numeric Operations
-
-The numeric bulk fields are:
-
-- `regular_price`
-- `sale_price`
-- `cost_of_goods_sold`
-- `stock_quantity`
-
-All numeric fields support:
-
-- `dont_change`
-- `set`
-- `increase`
-- `decrease`
-
-Money fields also support:
-
-- `increase_percent`
-- `decrease_percent`
-
-`stock_quantity` does not support percentage operations.
-
-On save, `getBulkNumericChangesForProduct()` calculates the final value for each selected product:
-
-- `set` uses the entered value.
-- `increase` and `decrease` add or subtract the entered amount from the product's current value.
-- Percentage operations apply the percentage to the product's current value.
-- Values are clamped to zero or higher.
-- Money values are rounded and formatted using the store currency precision.
-- Stock quantity is rounded to an integer.
-- Cost of goods updates the nested `cost_of_goods_sold.values[0].defined_value`.
-
-Before applying numeric edits, `validateBulkNumericEdits()` projects the calculated changes onto each selected product and validates prices. This catches cases such as a sale price becoming greater than or equal to the regular price.
-
-## Save Flow
-
-When the user clicks Save:
-
-1. Invalid numeric input blocks the save with a snackbar notice.
-2. Pending numeric operations are validated against every selected product.
-3. Valid numeric operations are converted into per-product edits and applied to the core data store.
-4. `saveSelectedProducts()` persists the selected records.
-5. The drawer shows a success or error notice based on how many products saved.
-6. On full success, the drawer closes and clears the quick edit URL state.
-
-`saveSelectedProducts()` treats products and variations differently:
-
-- Regular products are saved through `saveEditedEntityRecord( 'root', 'product', productId )`.
-- Variations are saved sequentially with `PUT /wc/v3/products/{parentId}/variations/{variationId}`.
-- After a variation saves, it is merged back into the parent product's embedded variations.
-- Parent products that own saved variations are saved after their variations.
-
-Variations are saved sequentially because each saved variation is merged into the current parent snapshot. Saving them concurrently could merge against stale parent data and overwrite another variation's update.
-
-## Cancel And Close
-
-Closing the drawer clears unsaved core data edits for the selected products or their parent products, resets local `bulkEditData`, removes `quickEdit` from the URL, and navigates back to the product list route.
-
-## Key Files
-
-| File | Role |
-| --- | --- |
-| `src/dataviews-actions/actions.tsx` | Opens quick edit or bulk edit by writing selected IDs to the URL. |
-| `src/router.tsx` | Mounts `ProductEdit` and controls whether the drawer is open. |
-| `src/product-edit/index.tsx` | Owns the drawer, form data, change handling, validation, notices, and save trigger. |
-| `src/product-edit/utils.ts` | Defines editable fields, product-type form layouts, field visibility rules, variation helpers, and merged data. |
-| `src/product-edit/bulk-edit.ts` | Builds bulk field state and calculates numeric bulk edits. |
-| `src/product-edit/bulk-numeric-control.tsx` | Defines the numeric operation select control. |
-| `src/product-edit/save.ts` | Persists products and variations. |
-| `src/product-edit/utils.test.ts` | Covers merged data, field visibility, variation helpers, and numeric bulk edit calculations. |
diff --git a/packages/js/experimental-products-app/eslint.config.mjs b/packages/js/experimental-products-app/eslint.config.mjs
deleted file mode 100644
index 9128218ebc3..00000000000
--- a/packages/js/experimental-products-app/eslint.config.mjs
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * Internal dependencies
- */
-import woocommerce from '@woocommerce/eslint-config';
-import { coreModules } from '@woocommerce/eslint-config/core-modules.js';
-
-export default [
-	...woocommerce,
-	{
-		settings: {
-			'import/core-modules': [
-				...coreModules,
-				'@wordpress/compose',
-				'@wordpress/dataviews',
-				'@wordpress/html-entities',
-				'@wordpress/i18n',
-				'@wordpress/icons',
-				'@wordpress/private-apis',
-				'@wordpress/router',
-				'@wordpress/url',
-				'@testing-library/react',
-				'clsx',
-				'react',
-			],
-			'import/resolver': {
-				node: {},
-				webpack: {},
-				typescript: {},
-			},
-		},
-	},
-	{
-		files: [ '**/*.js', '**/*.jsx', '**/*.tsx' ],
-		rules: {
-			'react/react-in-jsx-scope': 'off',
-		},
-	},
-];
diff --git a/packages/js/experimental-products-app/jest.config.json b/packages/js/experimental-products-app/jest.config.json
deleted file mode 100644
index fa3347efcc7..00000000000
--- a/packages/js/experimental-products-app/jest.config.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
-	"rootDir": "./",
-	"roots": [
-		"<rootDir>/src"
-	],
-	"preset": "./node_modules/@woocommerce/internal-js-tests/jest-preset.js"
-}
diff --git a/packages/js/experimental-products-app/package.json b/packages/js/experimental-products-app/package.json
deleted file mode 100644
index 3d59566a807..00000000000
--- a/packages/js/experimental-products-app/package.json
+++ /dev/null
@@ -1,164 +0,0 @@
-{
-	"name": "@woocommerce/experimental-products-app",
-	"version": "0.1.0",
-	"private": true,
-	"description": "Experimental all products app for WooCommerce admin.",
-	"author": "Automattic",
-	"license": "GPL-2.0-or-later",
-	"keywords": [
-		"wordpress",
-		"woocommerce"
-	],
-	"homepage": "https://github.com/woocommerce/woocommerce/tree/trunk/packages/js/experimental-products-app/README.md",
-	"repository": {
-		"type": "git",
-		"url": "https://github.com/woocommerce/woocommerce.git"
-	},
-	"bugs": {
-		"url": "https://github.com/woocommerce/woocommerce/issues"
-	},
-	"exports": {
-		".": {
-			"wc-source": "./src/index.ts",
-			"types": "./build-types/index.d.ts",
-			"import": "./build-module/index.js",
-			"require": "./build/index.js"
-		}
-	},
-	"main": "build/index.js",
-	"module": "build-module/index.js",
-	"types": "build-types/index.d.ts",
-	"react-native": "src/index",
-	"files": [
-		"build",
-		"build-module",
-		"build-style",
-		"build-types"
-	],
-	"sideEffects": [
-		"build-style/**",
-		"src/**/*.scss"
-	],
-	"publishConfig": {
-		"access": "public",
-		"exports": {
-			".": {
-				"types": "./build-types/index.d.ts",
-				"import": "./build-module/index.js",
-				"require": "./build/index.js"
-			}
-		}
-	},
-	"dependencies": {
-		"@base-ui/react": "1.4.1",
-		"@dnd-kit/react": "0.4.0",
-		"@types/lodash": "^4.14.202",
-		"@woocommerce/data": "workspace:*",
-		"@woocommerce/settings": "1.0.0",
-		"@wordpress/components": "catalog:wp-min",
-		"@wordpress/compose": "catalog:wp-min",
-		"@wordpress/core-data": "catalog:wp-min",
-		"@wordpress/data": "catalog:wp-min",
-		"@wordpress/dataviews": "https://github.com/gigitux/gutenberg/releases/download/%40wordpress%2Fdataviews-hierarchy/wordpress-dataviews-14.2.0.tgz",
-		"@wordpress/editor": "catalog:wp-min",
-		"@wordpress/element": "catalog:wp-min",
-		"@wordpress/admin-ui": "catalog:wp-bundled",
-		"@wordpress/html-entities": "catalog:wp-min",
-		"@wordpress/i18n": "catalog:wp-min",
-		"@wordpress/icons": "10.6.0",
-		"@wordpress/media-utils": "catalog:wp-min",
-		"@wordpress/private-apis": "catalog:wp-min",
-		"@wordpress/router": "1.11.0",
-		"@wordpress/ui": "catalog:wp-bundled",
-		"@wordpress/theme": "0.17.0",
-		"@wordpress/notices": "catalog:wp-min",
-		"@wordpress/api-fetch": "catalog:wp-min",
-		"@wordpress/url": "catalog:wp-min",
-		"@wordpress/base-styles": "6.20.0",
-		"clsx": "2.1.x",
-		"react": "18.3.x",
-		"react-dom": "18.3.x"
-	},
-	"devDependencies": {
-		"@babel/core": "catalog:tooling",
-		"@babel/runtime": "catalog:tooling",
-		"@testing-library/dom": "^10.4.x",
-		"@testing-library/jest-dom": "^6.x.x",
-		"@testing-library/react": "^16.x.x",
-		"@testing-library/user-event": "13.5.0",
-		"@types/jest": "29.5.x",
-		"@types/react": "18.3.x",
-		"@types/testing-library__jest-dom": "^5.14.9",
-		"@woocommerce/eslint-config": "workspace:*",
-		"@woocommerce/eslint-plugin": "workspace:*",
-		"@woocommerce/internal-build": "workspace:*",
-		"@woocommerce/internal-js-tests": "workspace:*",
-		"css-loader": "6.11.x",
-		"eslint": "^10.0.0",
-		"jest": "29.5.x",
-		"jest-cli": "29.5.x",
-		"jest-environment-jsdom": "29.5.x",
-		"postcss": "catalog:tooling",
-		"postcss-loader": "4.3.x",
-		"rimraf": "5.0.5",
-		"sass-loader": "10.5.x",
-		"ts-jest": "29.1.x",
-		"typescript": "5.7.x",
-		"webpack": "catalog:tooling",
-		"webpack-cli": "5.1.x",
-		"webpack-remove-empty-scripts": "1.0.x"
-	},
-	"scripts": {
-		"build": "pnpm build:project",
-		"build:project": "pnpm --stream '/^build:project:.*$/'",
-		"build:project:bundle": "NODE_ENV=production webpack",
-		"build:project:esm": "node build.mjs",
-		"build:publish:project": "pnpm --stream '/^build:publish:project:.*$/'",
-		"build:publish:project:cjs": "node build.mjs --commonjs",
-		"build:publish:project:types": "tsc --build --emitDeclarationOnly",
-		"build:publish:project:runtime": "pnpm build:project",
-		"changelog": "XDEBUG_MODE=off composer install --quiet && composer exec -- changelogger",
-		"lint": "pnpm --if-present '/^lint:lang:.*$/'",
-		"lint:fix": "pnpm --if-present '/^lint:fix:lang:.*$/'",
-		"lint:fix:lang:js": "eslint src --fix",
-		"lint:lang:js": "eslint src",
-		"lint:lang:types": "tsc --build --emitDeclarationOnly",
-		"prepack": "pnpm build:publish:project",
-		"test:js": "jest --config ./jest.config.json --passWithNoTests",
-		"update:php": "XDEBUG_MODE=off composer update --quiet",
-		"watch:build": "pnpm watch:build:project",
-		"watch:build:project": "pnpm --stream '/^watch:build:project:.*$/'",
-		"watch:build:project:bundle": "NODE_ENV=development webpack --watch",
-		"watch:build:project:esm": "node build.mjs --watch"
-	},
-	"peerDependencies": {
-		"@wordpress/data": "^10.19.0",
-		"react": "18.3.x",
-		"react-dom": "18.3.x"
-	},
-	"config": {
-		"ci": {
-			"lint": {
-				"command": "lint",
-				"changes": "src/**/*.{js,jsx,ts,tsx}"
-			},
-			"tests": [
-				{
-					"name": "JavaScript",
-					"command": "test:js",
-					"changes": [
-						"jest.config.js",
-						"babel.config.js",
-						"tsconfig.json",
-						"src/**/*.{js,jsx,ts,tsx}",
-						"typings/**/*.ts"
-					],
-					"events": [
-						"pull_request",
-						"push"
-					]
-				}
-			]
-		}
-	}
-}
diff --git a/packages/js/experimental-products-app/src/app-error-boundary.test.tsx b/packages/js/experimental-products-app/src/app-error-boundary.test.tsx
deleted file mode 100644
index 99320024371..00000000000
--- a/packages/js/experimental-products-app/src/app-error-boundary.test.tsx
+++ /dev/null
@@ -1,116 +0,0 @@
-/**
- * External dependencies
- */
-import { render, screen } from '@testing-library/react';
-import React from 'react';
-
-/**
- * Internal dependencies
- */
-import { AppErrorBoundary } from './app-error-boundary';
-import { FEEDBACK_URL, GITHUB_ISSUES_URL } from './constants';
-
-jest.mock( '@wordpress/i18n', () => ( {
-	__: jest.fn( ( message ) => message ),
-} ) );
-
-jest.mock( '@wordpress/components', () => ( {
-	Button: ( {
-		children,
-		href,
-		onClick,
-		rel,
-		target,
-	}: React.PropsWithChildren< {
-		href?: string;
-		onClick?: () => void;
-		rel?: string;
-		target?: string;
-	} > ) =>
-		href ? (
-			<a href={ href } rel={ rel } target={ target }>
-				{ children }
-			</a>
-		) : (
-			<button onClick={ onClick }>{ children }</button>
-		),
-} ) );
-
-jest.mock( '@wordpress/ui', () => ( {
-	EmptyState: {
-		Root: ( {
-			children,
-			className,
-		}: React.PropsWithChildren< { className?: string } > ) => (
-			<section className={ className }>{ children }</section>
-		),
-		Title: ( { children }: React.PropsWithChildren ) => (
-			<h2>{ children }</h2>
-		),
-		Description: ( {
-			children,
-			className,
-		}: React.PropsWithChildren< { className?: string } > ) => (
-			<p className={ className }>{ children }</p>
-		),
-		Actions: ( { children }: React.PropsWithChildren ) => (
-			<div>{ children }</div>
-		),
-	},
-	Stack: ( { children }: React.PropsWithChildren ) => <div>{ children }</div>,
-} ) );
-
-function BrokenComponent(): React.ReactElement {
-	throw new Error( 'Broken component' );
-}
-
-describe( 'AppErrorBoundary', () => {
-	let consoleErrorSpy: jest.SpyInstance;
-
-	beforeEach( () => {
-		consoleErrorSpy = jest
-			.spyOn( console, 'error' )
-			.mockImplementation( () => {} );
-	} );
-
-	afterEach( () => {
-		consoleErrorSpy.mockRestore();
-	} );
-
-	it( 'renders children when there is no error', () => {
-		render(
-			<AppErrorBoundary>
-				<div>Products app</div>
-			</AppErrorBoundary>
-		);
-
-		expect( screen.getByText( 'Products app' ) ).toBeInTheDocument();
-	} );
-
-	it( 'renders recovery actions when a child crashes', () => {
-		render(
-			<AppErrorBoundary>
-				<BrokenComponent />
-			</AppErrorBoundary>
-		);
-
-		expect(
-			screen.getByText(
-				'Oops, the experimental products experience ran into a problem'
-			)
-		).toBeInTheDocument();
-		expect(
-			screen.getByRole( 'link', {
-				name: 'Report an issue on GitHub',
-			} )
-		).toHaveAttribute( 'href', GITHUB_ISSUES_URL );
-		expect(
-			screen.getByRole( 'link', {
-				name: 'Share feedback in survey',
-			} )
-		).toHaveAttribute( 'href', FEEDBACK_URL );
-		expect(
-			screen.getByRole( 'button', { name: 'Reload page' } )
-		).toBeInTheDocument();
-	} );
-} );
diff --git a/packages/js/experimental-products-app/src/app-error-boundary.tsx b/packages/js/experimental-products-app/src/app-error-boundary.tsx
deleted file mode 100644
index 5e1cc308c6c..00000000000
--- a/packages/js/experimental-products-app/src/app-error-boundary.tsx
+++ /dev/null
@@ -1,104 +0,0 @@
-/**
- * External dependencies
- */
-import { Component, type ErrorInfo, type ReactNode } from 'react';
-import { __ } from '@wordpress/i18n';
-import { Button } from '@wordpress/components';
-import { EmptyState, Stack } from '@wordpress/ui';
-
-/**
- * Internal dependencies
- */
-import { FEEDBACK_URL, GITHUB_ISSUES_URL } from './constants';
-
-type AppErrorBoundaryProps = {
-	children: ReactNode;
-};
-
-type AppErrorBoundaryState = {
-	error: Error | null;
-	hasError: boolean;
-};
-
-export class AppErrorBoundary extends Component<
-	AppErrorBoundaryProps,
-	AppErrorBoundaryState
-> {
-	state: AppErrorBoundaryState = {
-		error: null,
-		hasError: false,
-	};
-
-	static getDerivedStateFromError(
-		error: Error
-	): Partial< AppErrorBoundaryState > {
-		return {
-			error,
-			hasError: true,
-		};
-	}
-
-	componentDidCatch( error: Error, errorInfo: ErrorInfo ) {
-		// eslint-disable-next-line no-console
-		console.error( error, errorInfo );
-	}
-
-	handleReload = () => {
-		window.location.reload();
-	};
-
-	render() {
-		if ( this.state.hasError ) {
-			return (
-				<EmptyState.Root className="woocommerce-experimental-products-app-error">
-					<EmptyState.Title>
-						{ __(
-							'Oops, the experimental products experience ran into a problem',
-							'woocommerce'
-						) }
-					</EmptyState.Title>
-					<EmptyState.Description className="woocommerce-experimental-products-app-error__description">
-						{ __(
-							'This experience is still experimental. Please report the issue on GitHub or share feedback in the survey so we can improve it.',
-							'woocommerce'
-						) }
-					</EmptyState.Description>
-					<EmptyState.Actions>
-						<Stack direction="row" gap="xs" justify="center">
-							<Button
-								href={ GITHUB_ISSUES_URL }
-								target="_blank"
-								rel="noopener noreferrer"
-								variant="primary"
-							>
-								{ __(
-									'Report an issue on GitHub',
-									'woocommerce'
-								) }
-							</Button>
-							<Button
-								href={ FEEDBACK_URL }
-								target="_blank"
-								rel="noopener noreferrer"
-								variant="secondary"
-							>
-								{ __(
-									'Share feedback in survey',
-									'woocommerce'
-								) }
-							</Button>
-							<Button
-								onClick={ this.handleReload }
-								variant="secondary"
-							>
-								{ __( 'Reload page', 'woocommerce' ) }
-							</Button>
-						</Stack>
-					</EmptyState.Actions>
-				</EmptyState.Root>
-			);
-		}
-
-		return this.props.children;
-	}
-}
diff --git a/packages/js/experimental-products-app/src/app.tsx b/packages/js/experimental-products-app/src/app.tsx
deleted file mode 100644
index ba8d5e6d829..00000000000
--- a/packages/js/experimental-products-app/src/app.tsx
+++ /dev/null
@@ -1,44 +0,0 @@
-/**
- * External dependencies
- */
-import { privateApis as routerPrivateApis } from '@wordpress/router';
-import { ThemeProvider } from '@wordpress/theme';
-import { UnsavedChangesWarning } from '@wordpress/editor';
-
-/**
- * Internal dependencies
- */
-import { unlock } from './lock-unlock';
-import useLayoutAreas from './router';
-import { Layout } from './layout';
-import {
-	NewNavigationProvider,
-	useNewNavigation,
-} from './utilites/new-navigation';
-
-const { RouterProvider } = unlock( routerPrivateApis );
-
-function ProductsLayout() {
-	// This ensures the edited entity id and type are initialized properly.
-	const [ showNewNavigation ] = useNewNavigation();
-	if ( showNewNavigation ) {
-		document.body.classList.add( 'is-fullscreen-mode' );
-	} else {
-		document.body.classList.remove( 'is-fullscreen-mode' );
-	}
-	const route = useLayoutAreas();
-	return <Layout route={ route } showNewNavigation={ showNewNavigation } />;
-}
-
-export function ProductsApp() {
-	return (
-		<NewNavigationProvider>
-			<UnsavedChangesWarning />
-			<RouterProvider pathArg="page">
-				<ThemeProvider isRoot>
-					<ProductsLayout />
-				</ThemeProvider>
-			</RouterProvider>
-		</NewNavigationProvider>
-	);
-}
diff --git a/packages/js/experimental-products-app/src/constants.ts b/packages/js/experimental-products-app/src/constants.ts
deleted file mode 100644
index 2cf19fbf803..00000000000
--- a/packages/js/experimental-products-app/src/constants.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-export const LAYOUT_GRID = 'grid';
-export const LAYOUT_TABLE = 'table';
-export const LAYOUT_LIST = 'list';
-
-export const OPERATOR_IS = 'is';
-export const OPERATOR_IS_NOT = 'isNot';
-export const OPERATOR_IS_ANY = 'isAny';
-export const OPERATOR_IS_NONE = 'isNone';
-
-export const FEEDBACK_URL = 'https://usabi.li/do/mqc0hscbzp2i/yejxei';
-export const GITHUB_ISSUES_URL =
-	'https://github.com/woocommerce/woocommerce/issues/new/choose';
diff --git a/packages/js/experimental-products-app/src/dataviews-actions/actions.test.tsx b/packages/js/experimental-products-app/src/dataviews-actions/actions.test.tsx
deleted file mode 100644
index 1403ff3656e..00000000000
--- a/packages/js/experimental-products-app/src/dataviews-actions/actions.test.tsx
+++ /dev/null
@@ -1,574 +0,0 @@
-/**
- * External dependencies
- */
-import apiFetch from '@wordpress/api-fetch';
-import { dispatch } from '@wordpress/data';
-import type { Action, ActionModal } from '@wordpress/dataviews';
-import { renderHook } from '@testing-library/react';
-import React from 'react';
-
-/**
- * Internal dependencies
- */
-import {
-	duplicateProductAction,
-	moveToTrashAction,
-	permanentlyDeleteAction,
-	restoreAction,
-	quickEditAction,
-	selectAllVariationsAction,
-	useProductActions,
-} from './actions';
-import type { ProductEntityRecord } from '../fields/types';
-
-jest.mock( '@wordpress/api-fetch', () => jest.fn() );
-
-jest.mock( '@wordpress/components', () => ( {
-	Button: 'button',
-	__experimentalHStack: ( { children }: { children: React.ReactNode } ) =>
-		children,
-	__experimentalText: ( { children }: { children: React.ReactNode } ) =>
-		children,
-	__experimentalVStack: ( { children }: { children: React.ReactNode } ) =>
-		children,
-} ) );
-
-jest.mock( '@wordpress/core-data', () => ( {
-	store: 'mock-core-store',
-} ) );
-
-jest.mock( '@wordpress/data', () => ( {
-	dispatch: jest.fn(),
-} ) );
-
-jest.mock( '@wordpress/notices', () => ( {
-	store: 'mock-notices-store',
-} ) );
-
-jest.mock( '../lock-unlock', () => {
-	const useHistory = jest.fn();
-	const useLocation = jest.fn();
-
-	return {
-		unlock: jest.fn( () => ( {
-			useHistory,
-			useLocation,
-		} ) ),
-		__mockUseHistory: useHistory,
-		__mockUseLocation: useLocation,
-	};
-} );
-
-jest.mock( '@wordpress/i18n', () => ( {
-	__: jest.fn( ( message ) => message ),
-	_x: jest.fn( ( message ) => message ),
-	_n: jest.fn( ( singular, plural, count ) =>
-		count === 1 ? singular : plural
-	),
-	sprintf: jest.fn( ( message, ...values ) =>
-		values.reduce(
-			( result, value ) =>
-				result.replace( /%[0-9]*\$?[sd]/, String( value ) ),
-			message
-		)
-	),
-} ) );
-
-jest.mock( '@woocommerce/settings', () => ( {
-	getAdminLink: jest.fn( ( path ) => path ),
-} ) );
-
-const { __mockUseHistory: mockUseHistory, __mockUseLocation: mockUseLocation } =
-	jest.requireMock( '../lock-unlock' ) as {
-		__mockUseHistory: jest.Mock;
-		__mockUseLocation: jest.Mock;
-	};
-const mockedApiFetch = jest.mocked( apiFetch );
-
-function getCallbackAction( action: Action< ProductEntityRecord > ) {
-	return action as Action< ProductEntityRecord > & {
-		callback: (
-			items: ProductEntityRecord[],
-			context: {
-				onActionPerformed?: ( items: ProductEntityRecord[] ) => void;
-			}
-		) => Promise< void >;
-	};
-}
-
-function getActionLabel(
-	action: Action< ProductEntityRecord >,
-	items: ProductEntityRecord[]
-) {
-	return typeof action.label === 'string'
-		? action.label
-		: action.label( items );
-}
-
-describe( 'product list actions', () => {
-	const product = {
-		id: 12,
-		status: 'draft',
-		name: 'Beanie',
-	} as ProductEntityRecord;
-	const hoodie = {
-		id: 34,
-		status: 'draft',
-		name: 'Hoodie',
-	} as ProductEntityRecord;
-	const blueVariation = {
-		id: 56,
-		parent_id: 78,
-		status: 'publish',
-		name: 'Blue hoodie',
-		type: 'variation',
-	} as ProductEntityRecord;
-	const greenVariation = {
-		id: 57,
-		parent_id: 78,
-		status: 'publish',
-		name: 'Green hoodie',
-		type: 'variation',
-	} as ProductEntityRecord;
-	const variableProduct = {
-		id: 78,
-		status: 'draft',
-		name: 'Variable hoodie',
-		type: 'variable',
-		_embedded: {
-			variations: [ blueVariation, greenVariation ],
-		},
-	} as ProductEntityRecord;
-
-	const deleteEntityRecord = jest.fn();
-	const editEntityRecord = jest.fn();
-	const saveEditedEntityRecord = jest.fn();
-	const invalidateResolution = jest.fn();
-	const invalidateResolutionForStoreSelector = jest.fn();
-	const createSuccessNotice = jest.fn();
-	const createErrorNotice = jest.fn();
-	const onActionPerformed = jest.fn();
-	const navigate = jest.fn();
-
-	beforeEach( () => {
-		jest.clearAllMocks();
-		mockUseHistory.mockReturnValue( {
-			navigate,
-		} );
-		mockUseLocation.mockReturnValue( {
-			path: '/products',
-			query: {
-				activeView: 'draft',
-			},
-		} );
-
-		( dispatch as jest.Mock ).mockImplementation( ( storeName ) => {
-			if ( storeName === 'mock-core-store' ) {
-				return {
-					deleteEntityRecord,
-					editEntityRecord,
-					saveEditedEntityRecord,
-					invalidateResolution,
-					invalidateResolutionForStoreSelector,
-				};
-			}
-
-			if ( storeName === 'mock-notices-store' ) {
-				return {
-					createSuccessNotice,
-					createErrorNotice,
-				};
-			}
-
-			return {};
-		} );
-	} );
-
-	it( 'opens quick edit panel when the Quick edit action is triggered', () => {
-		const { result } = renderHook( () => useProductActions() );
-		const quickEditProductAction = result.current.find(
-			( action ) => action.id === 'quick-edit-product'
-		);
-
-		expect( quickEditProductAction ).toBeDefined();
-
-		if ( ! quickEditProductAction ) {
-			throw new Error( 'Quick edit action not found.' );
-		}
-
-		getCallbackAction( quickEditProductAction ).callback( [ product ], {
-			onActionPerformed,
-		} );
-
-		expect( navigate ).toHaveBeenCalledWith(
-			'/products?activeView=draft&postId=12&quickEdit=true'
-		);
-		expect( onActionPerformed ).toHaveBeenCalledWith( [ product ] );
-	} );
-
-	it( 'exposes the Quick edit action as a bulk action', () => {
-		const { result } = renderHook( () => useProductActions() );
-		const quickEditProductAction = result.current.find(
-			( action ) => action.id === 'quick-edit-product'
-		);
-
-		expect( quickEditProductAction?.supportsBulk ).toBe( true );
-	} );
-
-	it( 'renames Quick edit to Bulk editing when multiple products are selected', () => {
-		const action = quickEditAction( {
-			navigate,
-		} );
-
-		expect( getActionLabel( action, [ product ] ) ).toBe( 'Quick edit' );
-		expect( getActionLabel( action, [ product, hoodie ] ) ).toBe(
-			'Bulk editing'
-		);
-	} );
-
-	it( 'opens quick edit panel with all selected products when triggered as a bulk action', () => {
-		const { result } = renderHook( () => useProductActions() );
-		const quickEditProductAction = result.current.find(
-			( action ) => action.id === 'quick-edit-product'
-		);
-
-		expect( quickEditProductAction ).toBeDefined();
-
-		if ( ! quickEditProductAction ) {
-			throw new Error( 'Quick edit action not found.' );
-		}
-
-		getCallbackAction( quickEditProductAction ).callback(
-			[ product, hoodie ],
-			{
-				onActionPerformed,
-			}
-		);
-
-		expect( navigate ).toHaveBeenCalledWith(
-			'/products?activeView=draft&postId=12%2C34&quickEdit=true'
-		);
-		expect( onActionPerformed ).toHaveBeenCalledWith( [ product, hoodie ] );
-	} );
-
-	it( 'replaces the View action with the Select all variations action', () => {
-		const { result } = renderHook( () => useProductActions() );
-		const actionIds = result.current.map( ( action ) => action.id );
-
-		expect( actionIds ).toContain( 'select-all-variations' );
-		expect( actionIds ).not.toContain( 'view-product' );
-	} );
-
-	it( 'shows the Select all variations action only for variable products with variations', () => {
-		const selectVariationsAction = selectAllVariationsAction( {
-			navigate,
-		} );
-
-		expect( selectVariationsAction.isEligible?.( variableProduct ) ).toBe(
-			true
-		);
-		expect(
-			selectVariationsAction.isEligible?.( {
-				...variableProduct,
-				_embedded: {
-					variations: [],
-				},
-			} )
-		).toBe( false );
-		expect( selectVariationsAction.isEligible?.( product ) ).toBe( false );
-		expect(
-			selectVariationsAction.isEligible?.( {
-				...variableProduct,
-				status: 'trash',
-			} )
-		).toBe( false );
-	} );
-
-	it( 'selects all variations when the Select all variations action is triggered', () => {
-		const { result } = renderHook( () => useProductActions() );
-		const selectVariationsAction = result.current.find(
-			( action ) => action.id === 'select-all-variations'
-		);
-
-		expect( selectVariationsAction ).toBeDefined();
-
-		if ( ! selectVariationsAction ) {
-			throw new Error( 'Select all variations action not found.' );
-		}
-
-		getCallbackAction( selectVariationsAction ).callback(
-			[ variableProduct ],
-			{
-				onActionPerformed,
-			}
-		);
-
-		expect( navigate ).toHaveBeenCalledWith(
-			'/products?activeView=draft&postId=56%2C57'
-		);
-		expect( onActionPerformed ).toHaveBeenCalledWith( [
-			blueVariation,
-			greenVariation,
-		] );
-	} );
-
-	it( 'opens product editor when the Edit action is triggered', () => {
-		const { result } = renderHook( () => useProductActions() );
-		const editProductAction = result.current.find(
-			( action ) => action.id === 'edit-product'
-		);
-
-		expect( editProductAction ).toBeDefined();
-
-		if ( ! editProductAction ) {
-			throw new Error( 'Edit action not found.' );
-		}
-
-		const originalLocation = window.location;
-		Object.defineProperty( window, 'location', {
-			writable: true,
-			value: { href: '' },
-		} );
-
-		getCallbackAction( editProductAction ).callback( [ product ], {
-			onActionPerformed,
-		} );
-
-		expect( window.location.href ).toBe( 'post.php?post=12&action=edit' );
-		expect( onActionPerformed ).toHaveBeenCalledWith( [ product ] );
-
-		Object.defineProperty( window, 'location', {
-			writable: true,
-			value: originalLocation,
-		} );
-	} );
-
-	it( 'opens the parent product editor when the Edit action is triggered for a variation', () => {
-		const { result } = renderHook( () => useProductActions() );
-		const editProductAction = result.current.find(
-			( action ) => action.id === 'edit-product'
-		);
-
-		expect( editProductAction ).toBeDefined();
-
-		if ( ! editProductAction ) {
-			throw new Error( 'Edit action not found.' );
-		}
-
-		const originalLocation = window.location;
-		Object.defineProperty( window, 'location', {
-			writable: true,
-			value: { href: '' },
-		} );
-
-		getCallbackAction( editProductAction ).callback( [ blueVariation ], {
-			onActionPerformed,
-		} );
-
-		expect( window.location.href ).toBe( 'post.php?post=78&action=edit' );
-		expect( onActionPerformed ).toHaveBeenCalledWith( [ blueVariation ] );
-
-		Object.defineProperty( window, 'location', {
-			writable: true,
-			value: originalLocation,
-		} );
-	} );
-
-	it( 'duplicates products through the WooCommerce duplicate endpoint', async () => {
-		const duplicatedProduct = {
-			...product,
-			id: 99,
-		} as ProductEntityRecord;
-		mockedApiFetch.mockResolvedValue( duplicatedProduct );
-
-		await getCallbackAction( duplicateProductAction() ).callback(
-			[ product ],
-			{
-				onActionPerformed,
-			}
-		);
-
-		expect( apiFetch ).toHaveBeenCalledWith( {
-			path: '/wc/v3/products/12/duplicate',
-			method: 'POST',
-		} );
-		expect( invalidateResolutionForStoreSelector ).toHaveBeenCalledWith(
-			'getEntityRecords'
-		);
-		expect( createSuccessNotice ).toHaveBeenCalledWith(
-			'"Beanie" duplicated successfully.',
-			expect.objectContaining( {
-				type: 'snackbar',
-				id: 'duplicate-product-action',
-				actions: expect.any( Array ),
-			} )
-		);
-		expect( onActionPerformed ).toHaveBeenCalledWith( [
-			duplicatedProduct,
-		] );
-		expect( createErrorNotice ).not.toHaveBeenCalled();
-	} );
-
-	it( 'shows an error notice when duplication fails', async () => {
-		mockedApiFetch.mockRejectedValueOnce( new Error( 'Duplicate failed' ) );
-
-		await getCallbackAction( duplicateProductAction() ).callback(
-			[ product ],
-			{
-				onActionPerformed,
-			}
-		);
-
-		expect( createSuccessNotice ).not.toHaveBeenCalled();
-		expect( createErrorNotice ).toHaveBeenCalledWith(
-			'Failed to duplicate "Beanie".',
-			{
-				type: 'snackbar',
-				id: 'duplicate-product-error',
-			}
-		);
-		expect( onActionPerformed ).not.toHaveBeenCalled();
-	} );
-
-	it( 'moves products to trash through coreStore root/product and refreshes the query', async () => {
-		deleteEntityRecord.mockResolvedValue( { id: 12 } );
-
-		await getCallbackAction( moveToTrashAction() ).callback( [ product ], {
-			onActionPerformed,
-		} );
-
-		expect( deleteEntityRecord ).toHaveBeenCalledWith(
-			'root',
-			'product',
-			12,
-			{
-				force: false,
-				throwOnError: true,
-			}
-		);
-
-		expect( createSuccessNotice ).toHaveBeenCalledWith(
-			'Product successfully deleted',
-			{ type: 'snackbar' }
-		);
-		expect( onActionPerformed ).toHaveBeenCalledWith( [ product ] );
-		expect( createErrorNotice ).not.toHaveBeenCalled();
-	} );
-
-	describe( 'restoreAction', () => {
-		const trashedProduct = {
-			...product,
-			status: 'trash',
-		} as ProductEntityRecord;
-
-		it( 'is eligible only for trashed products', () => {
-			const action = restoreAction();
-
-			expect( action.isEligible?.( trashedProduct ) ).toBe( true );
-			expect( action.isEligible?.( product ) ).toBe( false );
-		} );
-
-		it( 'restores products by saving status as draft and invalidates the query', async () => {
-			saveEditedEntityRecord.mockResolvedValue( {
-				id: 12,
-				status: 'draft',
-			} );
-
-			await getCallbackAction( restoreAction() ).callback(
-				[ trashedProduct ],
-				{ onActionPerformed }
-			);
-
-			expect( editEntityRecord ).toHaveBeenCalledWith(
-				'root',
-				'product',
-				12,
-				{ status: 'draft' }
-			);
-			expect( saveEditedEntityRecord ).toHaveBeenCalledWith(
-				'root',
-				'product',
-				12,
-				{ throwOnError: true }
-			);
-			expect( invalidateResolutionForStoreSelector ).toHaveBeenCalledWith(
-				'getEntityRecords'
-			);
-			expect( createSuccessNotice ).toHaveBeenCalledWith(
-				'Product successfully restored',
-				{ type: 'snackbar' }
-			);
-			expect( onActionPerformed ).toHaveBeenCalledWith( [
-				trashedProduct,
-			] );
-			expect( createErrorNotice ).not.toHaveBeenCalled();
-		} );
-
-		it( 'shows an error notice when restore fails', async () => {
-			saveEditedEntityRecord.mockRejectedValueOnce(
-				new Error( 'Restore failed' )
-			);
-
-			await getCallbackAction( restoreAction() ).callback(
-				[ trashedProduct ],
-				{ onActionPerformed }
-			);
-
-			expect( createSuccessNotice ).not.toHaveBeenCalled();
-			expect( createErrorNotice ).toHaveBeenCalledWith(
-				'Restore failed',
-				{
-					type: 'snackbar',
-				}
-			);
-			expect( onActionPerformed ).not.toHaveBeenCalled();
-		} );
-	} );
-
-	describe( 'permanentlyDeleteAction', () => {
-		const trashedProduct = {
-			...product,
-			status: 'trash',
-		} as ProductEntityRecord;
-
-		const getModalAction = (
-			action: Action< ProductEntityRecord >
-		): ActionModal< ProductEntityRecord > =>
-			action as ActionModal< ProductEntityRecord >;
-
-		it( 'is eligible for trashed products and for any variation', () => {
-			const action = permanentlyDeleteAction();
-			const variation = {
-				...product,
-				type: 'variation',
-			} as ProductEntityRecord;
-
-			expect( action.isEligible?.( trashedProduct ) ).toBe( true );
-			expect( action.isEligible?.( variation ) ).toBe( true );
-			expect( action.isEligible?.( product ) ).toBe( false );
-		} );
-
-		it( 'uses a singular modal header for a single product', () => {
-			const action = getModalAction( permanentlyDeleteAction() );
-			const header = action.modalHeader;
-
-			expect( typeof header ).toBe( 'function' );
-			expect(
-				typeof header === 'function'
-					? header( [ trashedProduct ] )
-					: header
-			).toBe( 'Delete product?' );
-		} );
-
-		it( 'uses a plural modal header for multiple products', () => {
-			const action = getModalAction( permanentlyDeleteAction() );
-			const header = action.modalHeader;
-
-			expect(
-				typeof header === 'function'
-					? header( [ trashedProduct, trashedProduct ] )
-					: header
-			).toBe( 'Delete products?' );
-		} );
-	} );
-} );
diff --git a/packages/js/experimental-products-app/src/dataviews-actions/actions.tsx b/packages/js/experimental-products-app/src/dataviews-actions/actions.tsx
deleted file mode 100644
index 092b4870cf9..00000000000
--- a/packages/js/experimental-products-app/src/dataviews-actions/actions.tsx
+++ /dev/null
@@ -1,630 +0,0 @@
-/**
- * External dependencies
- */
-import apiFetch from '@wordpress/api-fetch';
-import {
-	Button,
-	__experimentalHStack as HStack,
-	__experimentalText as Text,
-	__experimentalVStack as VStack,
-} from '@wordpress/components';
-import { store as coreStore } from '@wordpress/core-data';
-import { dispatch } from '@wordpress/data';
-import { backup, pencil, trash } from '@wordpress/icons';
-import { __, _n, sprintf } from '@wordpress/i18n';
-import { store as noticesStore } from '@wordpress/notices';
-import { privateApis as routerPrivateApis } from '@wordpress/router';
-import { addQueryArgs } from '@wordpress/url';
-import { getAdminLink } from '@woocommerce/settings';
-import type { Action } from '@wordpress/dataviews';
-import { useMemo } from '@wordpress/element';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../fields/types';
-import { unlock } from '../lock-unlock';
-import {
-	getProductEditPostId,
-	getProductListNavigationPath,
-} from '../product-list/utils';
-
-const { useHistory, useLocation } = unlock( routerPrivateApis );
-
-type EditActionOptions = {
-	navigate: ( path: string ) => void;
-	path?: string;
-	query?: Record< string, string | undefined >;
-};
-
-function getQuickEditPath(
-	path: string,
-	query: Record< string, string | undefined >,
-	productIds: number[]
-) {
-	const nextQuery = Object.entries( query ).reduce(
-		( acc, [ key, value ] ) => {
-			if ( typeof value === 'string' ) {
-				acc[ key ] = value;
-			}
-
-			return acc;
-		},
-		{} as Record< string, string >
-	);
-
-	return getProductListNavigationPath( path, {
-		...nextQuery,
-		postId: productIds.join( ',' ),
-		quickEdit: 'true',
-	} );
-}
-
-function getSelectionPath(
-	path: string,
-	query: Record< string, string | undefined >,
-	productIds: number[]
-) {
-	const nextQuery = Object.entries( query ).reduce(
-		( acc, [ key, value ] ) => {
-			if ( typeof value === 'string' ) {
-				acc[ key ] = value;
-			}
-
-			return acc;
-		},
-		{} as Record< string, string >
-	);
-
-	return getProductListNavigationPath( path, {
-		...nextQuery,
-		postId: productIds.join( ',' ),
-		quickEdit: undefined,
-	} );
-}
-
-function getErrorMessage( error: unknown ): string {
-	if ( error instanceof Error ) {
-		return error.message;
-	}
-
-	if ( typeof error === 'object' && error !== null && 'message' in error ) {
-		const errorWithMessage = error as Record< string, unknown >;
-
-		if ( typeof errorWithMessage.message === 'string' ) {
-			return errorWithMessage.message;
-		}
-	}
-
-	return __(
-		'An error occurred while performing the action.',
-		'woocommerce'
-	);
-}
-
-function getSuccessfulItems(
-	items: ProductEntityRecord[],
-	results: PromiseSettledResult< unknown >[]
-) {
-	return items.filter(
-		( _, index ) => results[ index ]?.status === 'fulfilled'
-	);
-}
-
-type SettledNotice = {
-	kind: 'success' | 'error';
-	message: string;
-};
-
-function getNoticeFromSettledResults( {
-	results,
-	successMessage,
-	errorMessage,
-}: {
-	results: PromiseSettledResult< ProductEntityRecord >[];
-	successMessage: ( count: number ) => string;
-	errorMessage: ( count: number ) => string;
-} ): SettledNotice {
-	const successfulCount = results.filter(
-		( result ) => result.status === 'fulfilled'
-	).length;
-	const failedCount = results.length - successfulCount;
-
-	if ( failedCount === 0 ) {
-		return {
-			kind: 'success',
-			message: successMessage( successfulCount ),
-		};
-	}
-
-	if ( successfulCount === 0 ) {
-		return {
-			kind: 'error',
-			message: errorMessage( failedCount ),
-		};
-	}
-
-	return {
-		kind: 'success',
-		message: successMessage( successfulCount ),
-	};
-}
-
-export const quickEditAction = ( {
-	navigate,
-	path = '/',
-	query = {},
-}: EditActionOptions ): Action< ProductEntityRecord > => ( {
-	id: 'quick-edit-product',
-	label: ( items ) =>
-		items.length > 1
-			? __( 'Bulk editing', 'woocommerce' )
-			: __( 'Quick edit', 'woocommerce' ),
-	isPrimary: true,
-	supportsBulk: true,
-	icon: pencil,
-	isEligible( product ) {
-		return product.status !== 'trash';
-	},
-	callback( items, { onActionPerformed } ) {
-		const productIds = items.map( ( product ) => product.id );
-
-		if ( productIds.length > 0 ) {
-			navigate( getQuickEditPath( path, query, productIds ) );
-		}
-
-		if ( onActionPerformed ) {
-			onActionPerformed( items );
-		}
-	},
-} );
-
-export const editAction = (): Action< ProductEntityRecord > => ( {
-	id: 'edit-product',
-	label: __( 'Edit', 'woocommerce' ),
-	isPrimary: true,
-	isEligible( product ) {
-		return product.status !== 'trash';
-	},
-	callback( items, { onActionPerformed } ) {
-		const product = items[ 0 ];
-
-		if ( product ) {
-			window.location.href = getAdminLink(
-				addQueryArgs( 'post.php', {
-					post: getProductEditPostId( product ),
-					action: 'edit',
-				} )
-			);
-		}
-
-		if ( onActionPerformed ) {
-			onActionPerformed( items );
-		}
-	},
-} );
-
-export const selectAllVariationsAction = ( {
-	navigate,
-	path = '/',
-	query = {},
-}: EditActionOptions ): Action< ProductEntityRecord > => ( {
-	id: 'select-all-variations',
-	label: __( 'Select all variations', 'woocommerce' ),
-	isPrimary: true,
-	isEligible( product ) {
-		return (
-			product.status !== 'trash' &&
-			product.type === 'variable' &&
-			Boolean( product._embedded?.variations?.length )
-		);
-	},
-	callback( items, { onActionPerformed } ) {
-		const variations = items.flatMap(
-			( product ) => product._embedded?.variations ?? []
-		);
-		const variationIds = Array.from(
-			new Set( variations.map( ( variation ) => variation.id ) )
-		);
-
-		if ( variationIds.length > 0 ) {
-			navigate( getSelectionPath( path, query, variationIds ) );
-		}
-
-		if ( onActionPerformed ) {
-			onActionPerformed( variations );
-		}
-	},
-} );
-
-const duplicateProducts = async ( items: ProductEntityRecord[] ) => {
-	return Promise.allSettled(
-		items.map( ( item ) =>
-			apiFetch< ProductEntityRecord >( {
-				path: `/wc/v3/products/${ item.id }/duplicate`,
-				method: 'POST',
-			} )
-		)
-	);
-};
-
-const duplicateProduct = async ( items: ProductEntityRecord[] ) => {
-	if ( items.length === 0 ) {
-		return;
-	}
-
-	const promiseResult = await duplicateProducts( items );
-	const failedItems = items.filter(
-		( _, index ) => promiseResult[ index ].status === 'rejected'
-	);
-
-	// @ts-expect-error `noticesStore` is not typed correctly in the WordPress types.
-	const { createSuccessNotice, createErrorNotice } = dispatch( noticesStore );
-	const notice = getNoticeFromSettledResults( {
-		results: promiseResult,
-		successMessage: ( count ) =>
-			sprintf(
-				/* translators: %1$s: The product's name. %2$d: The number of products. */
-				_n(
-					'"%1$s" duplicated successfully.',
-					'%2$d products duplicated successfully.',
-					count,
-					'woocommerce'
-				),
-				items[ 0 ]?.name || '',
-				count
-			),
-		errorMessage: ( count ) =>
-			sprintf(
-				/* translators: %1$s: The product's name. %2$d: The number of products. */
-				_n(
-					'Failed to duplicate "%1$s".',
-					'Failed to duplicate %2$d products.',
-					count,
-					'woocommerce'
-				),
-				failedItems[ 0 ]?.name || '',
-				count
-			),
-	} );
-
-	if ( notice.kind === 'success' ) {
-		const coreDispatch = dispatch( coreStore );
-
-		await coreDispatch.invalidateResolutionForStoreSelector(
-			'getEntityRecords'
-		);
-
-		const noticeOptions: Record< string, unknown > = {
-			type: 'snackbar',
-			id: 'duplicate-product-action',
-		};
-
-		if (
-			promiseResult.length === 1 &&
-			promiseResult[ 0 ]?.status === 'fulfilled'
-		) {
-			const newProduct = promiseResult[ 0 ].value;
-			noticeOptions.actions = [
-				{
-					label: __( 'View product', 'woocommerce' ),
-					onClick: () => {
-						window.location.href = getAdminLink(
-							addQueryArgs( 'post.php', {
-								post: newProduct.id,
-								action: 'edit',
-							} )
-						);
-					},
-				},
-			];
-		}
-
-		void createSuccessNotice( notice.message, noticeOptions );
-		return promiseResult;
-	}
-
-	void createErrorNotice( notice.message, {
-		type: 'snackbar',
-		id: 'duplicate-product-error',
-	} );
-};
-
-export const duplicateProductAction = (): Action< ProductEntityRecord > => ( {
-	id: 'duplicate-product',
-	label: __( 'Duplicate', 'woocommerce' ),
-	isPrimary: false,
-	supportsBulk: true,
-	isEligible( item ) {
-		return (
-			!! item &&
-			item.status !== 'trash' &&
-			item.status !== 'auto-draft' &&
-			item.type !== 'variation'
-		);
-	},
-	async callback( items, { onActionPerformed } ) {
-		const newProducts = await duplicateProduct( items );
-		const fulfilledResults =
-			newProducts
-				?.filter(
-					(
-						promiseResult
-					): promiseResult is PromiseFulfilledResult< ProductEntityRecord > =>
-						promiseResult.status === 'fulfilled'
-				)
-				.map( ( promiseResult ) => promiseResult.value ) || [];
-
-		if ( onActionPerformed && fulfilledResults.length > 0 ) {
-			onActionPerformed( fulfilledResults );
-		}
-	},
-} );
-
-export const moveToTrashAction = (): Action< ProductEntityRecord > => ( {
-	id: 'move-to-trash-product',
-	label: __( 'Move to trash', 'woocommerce' ),
-	supportsBulk: true,
-	icon: trash,
-	isEligible( product ) {
-		// Variations skip the trash and go straight to permanent delete
-		// (see `permanentlyDeleteAction`), since the variations REST endpoint
-		// doesn't support a soft-trash state.
-		return product.status !== 'trash' && product.type !== 'variation';
-	},
-	async callback( items, { onActionPerformed } ) {
-		const { deleteEntityRecord } = dispatch( coreStore );
-		const { createErrorNotice, createSuccessNotice } =
-			// @ts-expect-error noticesStore is not typed correctly in the WordPress types.
-			dispatch( noticesStore );
-
-		const results = await Promise.allSettled(
-			items.map( ( product ) =>
-				deleteEntityRecord( 'root', 'product', product.id, {
-					force: false,
-					throwOnError: true,
-				} )
-			)
-		);
-		const successfulItems = getSuccessfulItems( items, results );
-		const failedResults = results.filter(
-			( result ) => result.status === 'rejected'
-		);
-
-		if ( successfulItems.length > 0 ) {
-			createSuccessNotice(
-				successfulItems.length === 1
-					? __( 'Product successfully deleted', 'woocommerce' )
-					: sprintf(
-							/* translators: %s: number of products. */
-							_n(
-								'%s product successfully deleted',
-								'%s products successfully deleted',
-								successfulItems.length,
-								'woocommerce'
-							),
-							successfulItems.length.toString()
-					  ),
-				{
-					type: 'snackbar',
-				}
-			);
-			onActionPerformed?.( successfulItems );
-		}
-
-		if ( failedResults.length > 0 ) {
-			createErrorNotice(
-				getErrorMessage(
-					( failedResults[ 0 ] as PromiseRejectedResult ).reason
-				),
-				{
-					type: 'snackbar',
-				}
-			);
-		}
-	},
-} );
-
-export const restoreAction = (): Action< ProductEntityRecord > => ( {
-	id: 'restore-product',
-	label: __( 'Restore', 'woocommerce' ),
-	supportsBulk: true,
-	icon: backup,
-	isEligible( product ) {
-		return product.status === 'trash';
-	},
-	async callback( items, { onActionPerformed } ) {
-		const {
-			editEntityRecord,
-			saveEditedEntityRecord,
-			invalidateResolutionForStoreSelector,
-		} = dispatch( coreStore );
-		const { createErrorNotice, createSuccessNotice } =
-			// @ts-expect-error noticesStore is not typed correctly in the WordPress types.
-			dispatch( noticesStore );
-
-		const results = await Promise.allSettled(
-			items.map( async ( product ) => {
-				await editEntityRecord( 'root', 'product', product.id, {
-					status: 'draft',
-				} );
-				return saveEditedEntityRecord( 'root', 'product', product.id, {
-					throwOnError: true,
-				} );
-			} )
-		);
-		const successfulItems = getSuccessfulItems( items, results );
-		const failedResults = results.filter(
-			( result ) => result.status === 'rejected'
-		);
-
-		if ( successfulItems.length > 0 ) {
-			await invalidateResolutionForStoreSelector( 'getEntityRecords' );
-			createSuccessNotice(
-				successfulItems.length === 1
-					? __( 'Product successfully restored', 'woocommerce' )
-					: sprintf(
-							/* translators: %s: number of products. */
-							_n(
-								'%s product successfully restored',
-								'%s products successfully restored',
-								successfulItems.length,
-								'woocommerce'
-							),
-							successfulItems.length.toString()
-					  ),
-				{ type: 'snackbar' }
-			);
-			onActionPerformed?.( successfulItems );
-		}
-
-		if ( failedResults.length > 0 ) {
-			createErrorNotice(
-				getErrorMessage(
-					( failedResults[ 0 ] as PromiseRejectedResult ).reason
-				),
-				{ type: 'snackbar' }
-			);
-		}
-	},
-} );
-
-export const permanentlyDeleteAction = (): Action< ProductEntityRecord > => ( {
-	id: 'permanently-delete-product',
-	label: __( 'Permanently delete', 'woocommerce' ),
-	supportsBulk: true,
-	icon: trash,
-	isEligible( product ) {
-		// Variations are deleted directly (no trash step), so show this
-		// action for them regardless of status.
-		return product.status === 'trash' || product.type === 'variation';
-	},
-	modalHeader: ( items ) =>
-		items.length === 1
-			? __( 'Delete product?', 'woocommerce' )
-			: __( 'Delete products?', 'woocommerce' ),
-	RenderModal: ( { items, closeModal, onActionPerformed } ) => {
-		const onConfirm = async () => {
-			const { deleteEntityRecord, invalidateResolutionForStoreSelector } =
-				dispatch( coreStore );
-			const { createErrorNotice, createSuccessNotice } =
-				// @ts-expect-error noticesStore is not typed correctly in the WordPress types.
-				dispatch( noticesStore );
-
-			const results = await Promise.allSettled(
-				items.map( ( product ) =>
-					deleteEntityRecord( 'root', 'product', product.id, {
-						force: true,
-						throwOnError: true,
-					} )
-				)
-			);
-			const successfulItems = getSuccessfulItems( items, results );
-			const failedResults = results.filter(
-				( result ) => result.status === 'rejected'
-			);
-
-			if ( successfulItems.length > 0 ) {
-				await invalidateResolutionForStoreSelector(
-					'getEntityRecords'
-				);
-				createSuccessNotice(
-					successfulItems.length === 1
-						? __( 'Product permanently deleted', 'woocommerce' )
-						: sprintf(
-								/* translators: %s: number of products. */
-								_n(
-									'%s product permanently deleted',
-									'%s products permanently deleted',
-									successfulItems.length,
-									'woocommerce'
-								),
-								successfulItems.length.toString()
-						  ),
-					{ type: 'snackbar' }
-				);
-				onActionPerformed?.( successfulItems );
-			}
-
-			if ( failedResults.length > 0 ) {
-				createErrorNotice(
-					getErrorMessage(
-						( failedResults[ 0 ] as PromiseRejectedResult ).reason
-					),
-					{ type: 'snackbar' }
-				);
-			}
-
-			closeModal?.();
-		};
-
-		return (
-			<VStack spacing="5">
-				<Text>
-					{ items.length === 1
-						? sprintf(
-								/* translators: %s: The product's name. */
-								__(
-									"%s will be permanently deleted and can't be restored.",
-									'woocommerce'
-								),
-								items[ 0 ]?.name ?? ''
-						  )
-						: sprintf(
-								/* translators: %s: number of products. */
-								_n(
-									"%s product will be permanently deleted and can't be restored.",
-									"%s products will be permanently deleted and can't be restored.",
-									items.length,
-									'woocommerce'
-								),
-								items.length.toString()
-						  ) }
-				</Text>
-				<HStack justify="flex-end">
-					<Button
-						__next40pxDefaultSize
-						variant="tertiary"
-						onClick={ closeModal }
-					>
-						{ __( 'Cancel', 'woocommerce' ) }
-					</Button>
-					<Button
-						__next40pxDefaultSize
-						variant="primary"
-						isDestructive
-						onClick={ onConfirm }
-					>
-						{ __( 'Delete permanently', 'woocommerce' ) }
-					</Button>
-				</HStack>
-			</VStack>
-		);
-	},
-} );
-
-export const useProductActions = () => {
-	const { navigate } = useHistory();
-	const { path, query = {} } = useLocation();
-
-	return useMemo(
-		() => [
-			quickEditAction( {
-				navigate,
-				path,
-				query,
-			} ),
-			editAction(),
-			selectAllVariationsAction( {
-				navigate,
-				path,
-				query,
-			} ),
-			duplicateProductAction(),
-			moveToTrashAction(),
-			restoreAction(),
-			permanentlyDeleteAction(),
-		],
-		[ navigate, path, query ]
-	);
-};
diff --git a/packages/js/experimental-products-app/src/dataviews-actions/index.ts b/packages/js/experimental-products-app/src/dataviews-actions/index.ts
deleted file mode 100644
index 4b969aa27b9..00000000000
--- a/packages/js/experimental-products-app/src/dataviews-actions/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { useProductActions } from './actions';
diff --git a/packages/js/experimental-products-app/src/fields/brands/field.tsx b/packages/js/experimental-products-app/src/fields/brands/field.tsx
deleted file mode 100644
index b15a414bece..00000000000
--- a/packages/js/experimental-products-app/src/fields/brands/field.tsx
+++ /dev/null
@@ -1,67 +0,0 @@
-/**
- * External dependencies
- */
-import { resolveSelect } from '@wordpress/data';
-import { store as coreStore } from '@wordpress/core-data';
-import { __ } from '@wordpress/i18n';
-import { decodeEntities } from '@wordpress/html-entities';
-import type { DataFormControlProps, Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-import { TaxonomyEdit } from '../components/taxonomy-edit';
-
-const fieldDefinition = {
-	type: 'array',
-	label: __( 'Brands', 'woocommerce' ),
-	enableSorting: false,
-	filterBy: {
-		operators: [ 'isAny' ],
-	},
-} satisfies Partial< Field< ProductEntityRecord > >;
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	...fieldDefinition,
-	getValue: ( { item } ) => {
-		return ( item.brands ?? [] ).map( ( { id } ) => id.toString() );
-	},
-	setValue: ( { value }: { value: string[] } ) => {
-		return {
-			brands: value.map( ( v ) => ( {
-				id: parseInt( v, 10 ),
-			} ) ),
-		};
-	},
-	render: ( { item } ) => {
-		const names = ( item.brands ?? [] )
-			.map( ( { name } ) => decodeEntities( name ?? '' ) )
-			.filter( Boolean );
-
-		if ( names.length === 0 ) {
-			return <span>{ '—' }</span>;
-		}
-
-		return <span>{ names.join( ', ' ) }</span>;
-	},
-	getElements: async () => {
-		const records = ( await resolveSelect( coreStore ).getEntityRecords(
-			'taxonomy',
-			'product_brand',
-			{ per_page: -1 }
-		) ) as Array< { id: number; name: string } > | null;
-		return ( records ?? [] ).map( ( { id, name } ) => ( {
-			value: id.toString(),
-			label: decodeEntities( name ),
-		} ) );
-	},
-	Edit: ( props: DataFormControlProps< ProductEntityRecord > ) => (
-		<TaxonomyEdit
-			{ ...props }
-			taxonomy="product_brand"
-			fieldProperty="brands"
-			searchPlaceholder={ __( 'Search or create brands', 'woocommerce' ) }
-		/>
-	),
-};
diff --git a/packages/js/experimental-products-app/src/fields/button_text/field.tsx b/packages/js/experimental-products-app/src/fields/button_text/field.tsx
deleted file mode 100644
index 10874890bbc..00000000000
--- a/packages/js/experimental-products-app/src/fields/button_text/field.tsx
+++ /dev/null
@@ -1,27 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-
-const fieldDefinition = {
-	type: 'text',
-	label: __( 'Button Label', 'woocommerce' ),
-	description: __(
-		'Enter the text customers will see on the button that takes them to the store.',
-		'woocommerce'
-	),
-	enableSorting: false,
-	enableHiding: false,
-	filterBy: false,
-} satisfies Partial< Field< ProductEntityRecord > >;
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	...fieldDefinition,
-};
diff --git a/packages/js/experimental-products-app/src/fields/catalog_visibility/field.tsx b/packages/js/experimental-products-app/src/fields/catalog_visibility/field.tsx
deleted file mode 100644
index 42abe82bb3b..00000000000
--- a/packages/js/experimental-products-app/src/fields/catalog_visibility/field.tsx
+++ /dev/null
@@ -1,76 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-import { SelectControl } from '@wordpress/ui';
-
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-
-function isValidVisibility( value: string ) {
-	return (
-		value === 'visible' ||
-		value === 'catalog' ||
-		value === 'search' ||
-		value === 'hidden'
-	);
-}
-
-const fieldDefinition = {
-	label: __( 'Catalog visibility', 'woocommerce' ),
-	enableSorting: false,
-	enableHiding: false,
-	filterBy: false,
-	elements: [
-		{
-			label: __( 'Catalog and search results', 'woocommerce' ),
-			value: 'visible',
-		},
-		{ label: __( 'Catalog only', 'woocommerce' ), value: 'catalog' },
-		{
-			label: __( 'Search results only', 'woocommerce' ),
-			value: 'search',
-		},
-		{ label: __( 'Hidden', 'woocommerce' ), value: 'hidden' },
-	],
-} satisfies Partial< Field< ProductEntityRecord > >;
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	...fieldDefinition,
-	Edit: ( { data, onChange, field } ) => {
-		const options = field.elements ?? [];
-		const selectedOption =
-			field.placeholder && ! data.catalog_visibility
-				? undefined
-				: options.find(
-						( option ) =>
-							option.value ===
-							( data.catalog_visibility ?? 'visible' )
-				  );
-
-		return (
-			<SelectControl
-				label={ field.label }
-				placeholder={ field.placeholder }
-				value={ selectedOption }
-				items={ options }
-				onValueChange={ ( option ) => {
-					const value = option?.value;
-
-					if (
-						typeof value === 'string' &&
-						isValidVisibility( value )
-					) {
-						onChange( {
-							catalog_visibility: value,
-						} );
-					}
-				} }
-			/>
-		);
-	},
-};
diff --git a/packages/js/experimental-products-app/src/fields/categories/field.tsx b/packages/js/experimental-products-app/src/fields/categories/field.tsx
deleted file mode 100644
index 3040d33ece0..00000000000
--- a/packages/js/experimental-products-app/src/fields/categories/field.tsx
+++ /dev/null
@@ -1,80 +0,0 @@
-/**
- * External dependencies
- */
-import { resolveSelect } from '@wordpress/data';
-
-import { store as coreStore } from '@wordpress/core-data';
-
-import { decodeEntities } from '@wordpress/html-entities';
-
-import { __ } from '@wordpress/i18n';
-
-import type { DataFormControlProps, Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-
-import { TaxonomyEdit } from '../components/taxonomy-edit';
-
-type CategoryImage = {
-	id: number;
-	src?: string;
-	alt?: string;
-};
-
-type ProductCategory = {
-	id: number;
-	name: string;
-	image?: CategoryImage;
-};
-
-const fieldDefinition = {
-	type: 'array',
-	label: __( 'Category', 'woocommerce' ),
-	enableSorting: false,
-	filterBy: {
-		operators: [ 'isAny', 'isNone' ],
-	},
-} satisfies Partial< Field< ProductEntityRecord > >;
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	...fieldDefinition,
-	getValue: ( { item } ) => {
-		return item.categories.map( ( { id } ) => id.toString() );
-	},
-	setValue: ( { value }: { value: string[] } ) => {
-		return {
-			categories: value.map( ( v ) => ( {
-				id: parseInt( v, 10 ),
-			} ) ),
-		};
-	},
-	render: ( { item } ) => {
-		return ( item.categories ?? [] )
-			.map( ( { name } ) => decodeEntities( name ?? '' ) )
-			.join( ', ' );
-	},
-	getElements: async () => {
-		const records: ProductCategory[] | null = await resolveSelect(
-			coreStore
-		).getEntityRecords( 'taxonomy', 'product_cat', { per_page: -1 } );
-		return ( records ?? [] ).map( ( { id, name, image } ) => ( {
-			value: id.toString(),
-			label: decodeEntities( name ),
-			image: image?.src ? { src: image.src, alt: image.alt } : undefined,
-		} ) );
-	},
-	Edit: ( props: DataFormControlProps< ProductEntityRecord > ) => (
-		<TaxonomyEdit
-			{ ...props }
-			taxonomy="product_cat"
-			fieldProperty="categories"
-			searchPlaceholder={ __(
-				'Search or create categories',
-				'woocommerce'
-			) }
-		/>
-	),
-};
diff --git a/packages/js/experimental-products-app/src/fields/components/currency-input.tsx b/packages/js/experimental-products-app/src/fields/components/currency-input.tsx
deleted file mode 100644
index fafab7c58ba..00000000000
--- a/packages/js/experimental-products-app/src/fields/components/currency-input.tsx
+++ /dev/null
@@ -1,132 +0,0 @@
-/* eslint-disable @wordpress/no-unsafe-wp-apis -- Currency inputs use wrappers for the private ValidatedInputControl API. */
-/**
- * External dependencies
- */
-import {
-	privateApis,
-	__experimentalInputControlPrefixWrapper as InputControlPrefixWrapper,
-	__experimentalInputControlSuffixWrapper as InputControlSuffixWrapper,
-} from '@wordpress/components';
-
-import type { DataFormControlProps } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import { unlock } from '../../lock-unlock';
-
-import type { ProductEntityRecord } from '../types';
-
-import { getCurrencyObject } from '../utils/currency';
-import type { ProductBulkEditFormData } from '../../product-edit/bulk-edit';
-import { isBulkNumericPercentEdit } from '../../product-edit/bulk-edit';
-
-const { ValidatedInputControl } = unlock( privateApis );
-
-const { symbol, symbolPosition, precision } = getCurrencyObject();
-const isCurrencyLeft =
-	symbolPosition === 'left' || symbolPosition === 'left_space';
-// Step matches store decimal precision (e.g. precision=2 → step=0.01).
-const step = Math.pow( 10, -precision );
-
-type CurrencyField = 'regular_price' | 'sale_price';
-
-type CurrencyControlProps = {
-	id: string;
-	label: string;
-	value: string | number;
-	onChange: ( newValue: string ) => void;
-	customValidity?: NonNullable<
-		DataFormControlProps< ProductEntityRecord >[ 'validity' ]
-	>[ 'custom' ];
-	disabled?: boolean;
-	placeholder?: string;
-	hideLabelFromVision?: boolean;
-	showPercentAdornment?: boolean;
-};
-
-export function CurrencyControl( {
-	id,
-	label,
-	value,
-	onChange,
-	customValidity,
-	disabled = false,
-	placeholder,
-	hideLabelFromVision,
-	showPercentAdornment = false,
-}: CurrencyControlProps ) {
-	const prefix =
-		! showPercentAdornment && isCurrencyLeft ? (
-			<InputControlPrefixWrapper>{ symbol }</InputControlPrefixWrapper>
-		) : undefined;
-	let suffix;
-
-	if ( showPercentAdornment ) {
-		suffix = <InputControlSuffixWrapper>%</InputControlSuffixWrapper>;
-	} else if ( ! isCurrencyLeft ) {
-		suffix = (
-			<InputControlSuffixWrapper>{ symbol }</InputControlSuffixWrapper>
-		);
-	}
-
-	return (
-		// eslint-disable-next-line @typescript-eslint/no-unsafe-call -- ValidatedInputControl is a private API
-		<ValidatedInputControl
-			id={ id }
-			label={ label }
-			hideLabelFromVision={ hideLabelFromVision }
-			value={ value }
-			onChange={ onChange }
-			placeholder={ placeholder }
-			type="number"
-			min={ 0 }
-			step={ step }
-			customValidity={ customValidity }
-			disabled={ disabled }
-			prefix={ prefix }
-			suffix={ suffix }
-		/>
-	);
-}
-
-/**
- * Shared Edit component for currency fields.
- * Renders a number input with min=0 and currency prefix/suffix.
- *
- * @param root0                     Props from DataForm.
- * @param root0.data                Current product entity record.
- * @param root0.field               Normalized field definition.
- * @param root0.hideLabelFromVision Whether to visually hide the control label.
- * @param root0.onChange            Callback to update entity values.
- * @param root0.validity            Per-rule validation state from useFormValidity.
- */
-export function CurrencyInput( {
-	data,
-	field,
-	hideLabelFromVision,
-	onChange,
-	validity,
-}: DataFormControlProps< ProductEntityRecord > ) {
-	const fieldId = field.id as CurrencyField;
-	const disabled = field.isDisabled( { item: data, field } );
-
-	return (
-		<CurrencyControl
-			id={ `currency-input-${ fieldId }` }
-			label={ field.label }
-			hideLabelFromVision={ hideLabelFromVision }
-			value={ data[ fieldId ] ?? '' }
-			placeholder={ field.placeholder }
-			onChange={ ( newValue: string ) => {
-				onChange( { [ fieldId ]: newValue } );
-			} }
-			customValidity={ validity?.custom }
-			disabled={ disabled }
-			showPercentAdornment={ isBulkNumericPercentEdit(
-				data as ProductBulkEditFormData,
-				fieldId
-			) }
-		/>
-	);
-}
diff --git a/packages/js/experimental-products-app/src/fields/components/date-picker.tsx b/packages/js/experimental-products-app/src/fields/components/date-picker.tsx
deleted file mode 100644
index ef2a5896217..00000000000
--- a/packages/js/experimental-products-app/src/fields/components/date-picker.tsx
+++ /dev/null
@@ -1,67 +0,0 @@
-/**
- * External dependencies
- */
-import { InputControl } from '@wordpress/ui';
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-
-type DateFieldKey = 'date_on_sale_from' | 'date_on_sale_to';
-
-type DatePickerProps = {
-	data: ProductEntityRecord;
-	onChange: ( value: Partial< ProductEntityRecord > ) => void;
-	field: {
-		id?: string;
-		label?: string;
-	};
-	fieldKey: DateFieldKey;
-	min?: Date;
-};
-
-export function parseDateTimeLocal( value: string ) {
-	if ( ! value ) {
-		return null;
-	}
-
-	const parsedDate = new Date( value );
-
-	if ( Number.isNaN( parsedDate.getTime() ) ) {
-		return null;
-	}
-
-	return parsedDate;
-}
-
-export function formatDateTimeLocal( date: Date ) {
-	const year = date.getFullYear();
-	const month = String( date.getMonth() + 1 ).padStart( 2, '0' );
-	const day = String( date.getDate() ).padStart( 2, '0' );
-	const hours = String( date.getHours() ).padStart( 2, '0' );
-	const minutes = String( date.getMinutes() ).padStart( 2, '0' );
-
-	return `${ year }-${ month }-${ day }T${ hours }:${ minutes }`;
-}
-
-export function DatePicker( {
-	data,
-	onChange,
-	field,
-	fieldKey,
-	min,
-}: DatePickerProps ) {
-	return (
-		<InputControl
-			label={ field.label ?? '' }
-			type="datetime-local"
-			value={ data[ fieldKey ] || '' }
-			min={ min ? formatDateTimeLocal( min ) : undefined }
-			onChange={ ( event ) =>
-				onChange( {
-					[ fieldKey ]: event.target.value || null,
-				} as Partial< ProductEntityRecord > )
-			}
-		/>
-	);
-}
diff --git a/packages/js/experimental-products-app/src/fields/components/dimension.test.tsx b/packages/js/experimental-products-app/src/fields/components/dimension.test.tsx
deleted file mode 100644
index 4fb4f350a9d..00000000000
--- a/packages/js/experimental-products-app/src/fields/components/dimension.test.tsx
+++ /dev/null
@@ -1,166 +0,0 @@
-/**
- * External dependencies
- */
-import { fireEvent, render, screen } from '@testing-library/react';
-import type { DataFormControlProps } from '@wordpress/dataviews';
-import React from 'react';
-
-jest.mock( '@wordpress/core-data', () => ( {
-	useEntityRecord: jest.fn( () => ( {
-		record: {
-			values: {
-				woocommerce_dimension_unit: 'cm',
-			},
-		},
-		isResolving: false,
-	} ) ),
-} ) );
-
-jest.mock( '@wordpress/ui', () => {
-	const ReactActual = jest.requireActual( 'react' );
-
-	return {
-		InputControl: ( {
-			label,
-			onChange,
-			placeholder,
-			suffix,
-			value,
-		}: {
-			label: string;
-			onChange: React.ChangeEventHandler< HTMLInputElement >;
-			placeholder?: string;
-			suffix?: React.ReactNode;
-			value?: string;
-		} ) =>
-			ReactActual.createElement(
-				'label',
-				null,
-				label,
-				ReactActual.createElement( 'input', {
-					'aria-label': label,
-					onChange,
-					placeholder,
-					value: value ?? '',
-				} ),
-				suffix
-			),
-		InputLayout: {
-			Slot: ( { children }: { children?: React.ReactNode } ) =>
-				ReactActual.createElement( 'span', null, children ),
-		},
-	};
-} );
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-
-import { createDimensionField } from './dimension';
-
-describe( 'dimension field', () => {
-	const renderEdit = (
-		data: ProductEntityRecord,
-		onChange = jest.fn(),
-		placeholder?: string
-	) => {
-		const fieldExtensions = createDimensionField( 'length' );
-
-		if ( ! fieldExtensions.Edit ) {
-			throw new Error( 'dimension edit not implemented' );
-		}
-
-		const Edit = fieldExtensions.Edit as React.ComponentType<
-			DataFormControlProps< ProductEntityRecord >
-		>;
-
-		const view = render(
-			<Edit
-				data={ data }
-				field={
-					{
-						...fieldExtensions,
-						id: 'length',
-						label: 'Length',
-						placeholder,
-					} as DataFormControlProps< ProductEntityRecord >[ 'field' ]
-				}
-				onChange={ onChange }
-			/>
-		);
-
-		return {
-			...view,
-			onChange,
-		};
-	};
-
-	it( 'renders an empty input when dimensions are missing', () => {
-		const { onChange } = renderEdit( {
-			id: 12,
-			name: 'Beanie',
-		} as ProductEntityRecord );
-		const input = screen.getByLabelText( 'Length' );
-
-		expect( input ).toHaveValue( '' );
-
-		fireEvent.change( input, {
-			target: {
-				value: '12',
-			},
-		} );
-
-		expect( onChange ).toHaveBeenCalledWith( {
-			dimensions: {
-				length: '12',
-			},
-		} );
-	} );
-
-	it( 'emits only the edited dimension', () => {
-		const { onChange } = renderEdit( {
-			id: 12,
-			name: 'Beanie',
-			dimensions: {
-				length: '12',
-				width: '',
-				height: '',
-			},
-		} as ProductEntityRecord );
-		const input = screen.getByLabelText( 'Length' );
-
-		fireEvent.change( input, {
-			target: {
-				value: '15',
-			},
-		} );
-
-		expect( onChange ).toHaveBeenCalledWith( {
-			dimensions: {
-				length: '15',
-			},
-		} );
-	} );
-
-	it( 'renders the mixed placeholder when provided', () => {
-		renderEdit(
-			{
-				id: 12,
-				name: 'Beanie',
-				dimensions: {
-					length: '',
-					width: '',
-					height: '',
-				},
-			} as ProductEntityRecord,
-			jest.fn(),
-			'Mixed'
-		);
-
-		expect( screen.getByLabelText( 'Length' ) ).toHaveAttribute(
-			'placeholder',
-			'Mixed'
-		);
-	} );
-} );
diff --git a/packages/js/experimental-products-app/src/fields/components/dimension.tsx b/packages/js/experimental-products-app/src/fields/components/dimension.tsx
deleted file mode 100644
index 0ea8d7507d3..00000000000
--- a/packages/js/experimental-products-app/src/fields/components/dimension.tsx
+++ /dev/null
@@ -1,74 +0,0 @@
-/**
- * External dependencies
- */
-import { useEntityRecord } from '@wordpress/core-data';
-
-import type { Field } from '@wordpress/dataviews';
-import { InputControl, InputLayout } from '@wordpress/ui';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord, SettingsEntityRecord } from '../types';
-
-export type DimensionKey = 'height' | 'width' | 'length';
-
-export function isDimensionVisible( item: ProductEntityRecord ) {
-	const isSellableInstance =
-		( item.type === 'simple' && ! item.parent_id ) ||
-		( item.type === 'variable' && ! item.parent_id ) ||
-		item.type === 'variation' ||
-		Boolean( item.parent_id );
-
-	return ! item.virtual && ( isSellableInstance || item.downloadable );
-}
-
-export const createDimensionField = (
-	key: DimensionKey
-): Partial< Field< ProductEntityRecord > > => {
-	return {
-		isVisible: isDimensionVisible,
-		Edit: ( { data, onChange, field } ) => {
-			const dimensions: Partial< ProductEntityRecord[ 'dimensions' ] > =
-				data.dimensions ?? {};
-			const {
-				record: storeProductsSettings,
-				isResolving: storeProductsSettingsResolving,
-			} = useEntityRecord< SettingsEntityRecord >(
-				'root',
-				'settings',
-				'products'
-			);
-
-			if ( storeProductsSettingsResolving ) {
-				return null;
-			}
-
-			const dimensionUnit =
-				storeProductsSettings?.values?.woocommerce_dimension_unit;
-
-			return (
-				<InputControl
-					label={ field.label }
-					placeholder={ field.placeholder }
-					value={ dimensions[ key ] ?? '' }
-					onChange={ ( event ) => {
-						onChange( {
-							dimensions: {
-								[ key ]: event.target.value,
-							} as ProductEntityRecord[ 'dimensions' ],
-						} );
-					} }
-					type="number"
-					min={ 0 }
-					step="any"
-					suffix={
-						<InputLayout.Slot padding="minimal">
-							{ dimensionUnit }
-						</InputLayout.Slot>
-					}
-				/>
-			);
-		},
-	};
-};
diff --git a/packages/js/experimental-products-app/src/fields/components/list-item/index.tsx b/packages/js/experimental-products-app/src/fields/components/list-item/index.tsx
deleted file mode 100644
index a21ce73ec11..00000000000
--- a/packages/js/experimental-products-app/src/fields/components/list-item/index.tsx
+++ /dev/null
@@ -1,80 +0,0 @@
-/**
- * External dependencies
- */
-import { Button } from '@wordpress/components';
-import { close } from '@wordpress/icons';
-import { __ } from '@wordpress/i18n';
-import { isValidElement } from '@wordpress/element';
-import { Stack } from '@wordpress/ui';
-
-type Item = {
-	id: number | string;
-	title: string;
-	thumbnail?: string | JSX.Element;
-	meta?: string;
-	altText?: string;
-};
-
-interface ListItemProps {
-	items: Item[];
-	onRemove?: ( item: Item ) => void;
-	showRemoveButton?: boolean;
-}
-
-export const ListItem = ( {
-	items,
-	onRemove,
-	showRemoveButton = true,
-}: ListItemProps ) => {
-	return (
-		<Stack direction="column">
-			{ items.map( ( item ) => (
-				<Stack
-					key={ item.id }
-					direction="row"
-					align="center"
-					justify="space-between"
-					className="woocommerce-list-item"
-					gap={ 'md' }
-				>
-					{ item.thumbnail && (
-						<div className="woocommerce-list-item__thumbnail">
-							{ typeof item.thumbnail === 'string' && (
-								<img
-									src={ item.thumbnail }
-									alt={ item.altText ?? '' }
-									className="woocommerce-list-item__thumbnail-image"
-								/>
-							) }
-							{ isValidElement( item.thumbnail ) &&
-								item.thumbnail }
-						</div>
-					) }
-					<Stack
-						className="woocommerce-list-item__info"
-						direction="column"
-					>
-						<div className="woocommerce-list-item__title">
-							{ item.title }
-						</div>
-						{ item.meta && (
-							<div className="woocommerce-list-item__meta">
-								{ item.meta }
-							</div>
-						) }
-					</Stack>
-					{ showRemoveButton && onRemove && (
-						<Button
-							icon={ close }
-							variant="tertiary"
-							iconSize={ 16 }
-							onClick={ () => onRemove( item ) }
-							aria-label={ __( 'Remove item', 'woocommerce' ) }
-							className="woocommerce-list-item__remove-button"
-						/>
-					) }
-				</Stack>
-			) ) }
-		</Stack>
-	);
-};
diff --git a/packages/js/experimental-products-app/src/fields/components/list-item/style.scss b/packages/js/experimental-products-app/src/fields/components/list-item/style.scss
deleted file mode 100644
index 888194ea7fc..00000000000
--- a/packages/js/experimental-products-app/src/fields/components/list-item/style.scss
+++ /dev/null
@@ -1,46 +0,0 @@
-.woocommerce-list-item {
-	padding: 12px 0;
-	border-bottom: 1px solid #e0e0e0;
-	width: 100%;
-
-	&:last-of-type {
-		border-bottom: none;
-	}
-
-	&__thumbnail {
-		width: 48px;
-		height: 48px;
-		border-radius: 4px;
-		flex-shrink: 0;
-
-		&-image {
-			width: 100%;
-			height: 100%;
-			object-fit: cover;
-			border-radius: 4px;
-		}
-	}
-
-	&__info {
-		flex: 1;
-		min-width: 0;
-	}
-
-	&__title {
-		font-size: 14px;
-		font-weight: 500;
-		color: #1e1e1e;
-	}
-
-	&__meta {
-		font-size: 12px;
-		color: #757575;
-		font-weight: 500;
-	}
-
-	&__remove-button {
-		color: #757575;
-		padding: 8px;
-		min-width: auto;
-	}
-}
diff --git a/packages/js/experimental-products-app/src/fields/components/product-selector.tsx b/packages/js/experimental-products-app/src/fields/components/product-selector.tsx
deleted file mode 100644
index 64de2dfd6cd..00000000000
--- a/packages/js/experimental-products-app/src/fields/components/product-selector.tsx
+++ /dev/null
@@ -1,195 +0,0 @@
-/**
- * External dependencies
- */
-import { BaseControl, FormTokenField, Spinner } from '@wordpress/components';
-import { store as coreStore } from '@wordpress/core-data';
-import { resolveSelect } from '@wordpress/data';
-import { useEffect, useMemo, useState } from '@wordpress/element';
-import { __ } from '@wordpress/i18n';
-import type { Product } from '@woocommerce/data';
-
-/**
- * Internal dependencies
- */
-import type { ProductStatus } from '../types';
-
-type ProductSelectorProps = {
-	label?: string;
-	description?: string;
-	selectedProductIds: number[];
-	onSelectedProductIdsChange: ( ids: number[] ) => void;
-	excludeProductIds?: number[];
-	includeProductStatuses?: ProductStatus[];
-};
-
-const SEARCH_DELAY_MS = 250;
-
-function getProductToken( product: Pick< Product, 'id' | 'name' > ) {
-	return `${ product.name || __( '(Untitled product)', 'woocommerce' ) } (#${
-		product.id
-	})`;
-}
-
-export function ProductSelector( {
-	label,
-	description,
-	selectedProductIds,
-	onSelectedProductIdsChange,
-	excludeProductIds = [],
-	includeProductStatuses,
-}: ProductSelectorProps ) {
-	const [ inputValue, setInputValue ] = useState( '' );
-	const [ suggestions, setSuggestions ] = useState< Product[] >( [] );
-	const [ selectedProducts, setSelectedProducts ] = useState< Product[] >(
-		[]
-	);
-	const [ isLoading, setIsLoading ] = useState( false );
-
-	useEffect( () => {
-		let cancelled = false;
-
-		if ( selectedProductIds.length === 0 ) {
-			setSelectedProducts( [] );
-			return;
-		}
-
-		setIsLoading( true );
-
-		void resolveSelect( coreStore )
-			.getEntityRecords( 'postType', 'product', {
-				include: selectedProductIds,
-				per_page: selectedProductIds.length,
-				status: includeProductStatuses,
-			} )
-			.then( ( records: unknown ) => {
-				if ( cancelled || ! Array.isArray( records ) ) {
-					return;
-				}
-
-				const productsById = new Map(
-					records.map( ( product ) => [
-						product.id,
-						product as Product,
-					] )
-				);
-				setSelectedProducts(
-					selectedProductIds
-						.map( ( id ) => productsById.get( id ) )
-						.filter(
-							( product ): product is Product =>
-								product !== undefined
-						)
-				);
-			} )
-			.finally( () => {
-				if ( ! cancelled ) {
-					setIsLoading( false );
-				}
-			} );
-
-		return () => {
-			cancelled = true;
-		};
-	}, [ includeProductStatuses, selectedProductIds ] );
-
-	useEffect( () => {
-		const query = inputValue.trim();
-
-		if ( ! query ) {
-			setSuggestions( [] );
-			return;
-		}
-
-		let cancelled = false;
-		setIsLoading( true );
-
-		const timer = window.setTimeout( () => {
-			void resolveSelect( coreStore )
-				.getEntityRecords( 'postType', 'product', {
-					search: query,
-					per_page: 20,
-					exclude: [ ...excludeProductIds, ...selectedProductIds ],
-					status: includeProductStatuses,
-				} )
-				.then( ( records: unknown ) => {
-					if ( ! cancelled ) {
-						setSuggestions(
-							Array.isArray( records )
-								? ( records as Product[] )
-								: []
-						);
-					}
-				} )
-				.finally( () => {
-					if ( ! cancelled ) {
-						setIsLoading( false );
-					}
-				} );
-		}, SEARCH_DELAY_MS );
-
-		return () => {
-			cancelled = true;
-			window.clearTimeout( timer );
-		};
-	}, [
-		excludeProductIds,
-		includeProductStatuses,
-		inputValue,
-		selectedProductIds,
-	] );
-
-	const productTokenMap = useMemo( () => {
-		const allProducts = [ ...selectedProducts, ...suggestions ];
-		return new Map(
-			allProducts.map( ( product ) => [
-				getProductToken( product ),
-				product.id,
-			] )
-		);
-	}, [ selectedProducts, suggestions ] );
-
-	return (
-		// eslint-disable-next-line @wordpress/no-base-control-with-label-without-id
-		<BaseControl
-			label={ label }
-			help={
-				isLoading ? (
-					<span
-						style={ {
-							display: 'inline-flex',
-							alignItems: 'center',
-							gap: '8px',
-						} }
-					>
-						<Spinner />
-						{ description ||
-							__( 'Loading products…', 'woocommerce' ) }
-					</span>
-				) : (
-					description
-				)
-			}
-		>
-			<FormTokenField
-				value={ selectedProducts.map( getProductToken ) }
-				suggestions={ suggestions.map( getProductToken ) }
-				onInputChange={ setInputValue }
-				onChange={ ( tokens ) => {
-					onSelectedProductIdsChange(
-						tokens
-							.map( ( token ) =>
-								productTokenMap.get(
-									typeof token === 'string'
-										? token
-										: token.value
-								)
-							)
-							.filter(
-								( id ): id is number => typeof id === 'number'
-							)
-					);
-				} }
-			/>
-		</BaseControl>
-	);
-}
diff --git a/packages/js/experimental-products-app/src/fields/components/product-status-badge.tsx b/packages/js/experimental-products-app/src/fields/components/product-status-badge.tsx
deleted file mode 100644
index 9ff2ddceba8..00000000000
--- a/packages/js/experimental-products-app/src/fields/components/product-status-badge.tsx
+++ /dev/null
@@ -1,60 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-import { Badge } from '@wordpress/ui';
-import { ProductStatus } from '@woocommerce/data';
-
-type BadgeStatusConfig = {
-	label: string;
-	intent?: React.ComponentProps< typeof Badge >[ 'intent' ];
-};
-
-const statuses = {
-	draft: {
-		label: __( 'Draft', 'woocommerce' ),
-		intent: 'draft',
-	},
-	publish: {
-		label: __( 'Published', 'woocommerce' ),
-		intent: 'stable',
-	},
-	trash: {
-		label: __( 'Trash', 'woocommerce' ),
-		intent: 'none',
-	},
-	'auto-draft': {
-		label: __( 'Draft', 'woocommerce' ),
-		intent: 'draft',
-	},
-	deleted: {
-		label: __( 'Deleted', 'woocommerce' ),
-		intent: 'none',
-	},
-	pending: {
-		label: __( 'Pending review', 'woocommerce' ),
-		intent: 'informational',
-	},
-	private: {
-		label: __( 'Private', 'woocommerce' ),
-		intent: 'none',
-	},
-	future: {
-		label: __( 'Scheduled', 'woocommerce' ),
-		intent: 'none',
-	},
-	any: {
-		label: __( 'Any', 'woocommerce' ),
-		intent: 'none',
-	},
-} satisfies Record< ProductStatus, BadgeStatusConfig >;
-
-export const ProductStatusBadge = ( { status }: { status: ProductStatus } ) => {
-	const statusData = statuses[ status ];
-
-	if ( ! statusData ) {
-		return <Badge intent="none">{ __( 'Unknown', 'woocommerce' ) }</Badge>;
-	}
-
-	return <Badge intent={ statusData.intent }>{ statusData.label }</Badge>;
-};
diff --git a/packages/js/experimental-products-app/src/fields/components/searchable-chip-select/chip-with-remove.tsx b/packages/js/experimental-products-app/src/fields/components/searchable-chip-select/chip-with-remove.tsx
deleted file mode 100644
index f11471a8e08..00000000000
--- a/packages/js/experimental-products-app/src/fields/components/searchable-chip-select/chip-with-remove.tsx
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
- * External dependencies
- */
-import { Combobox as BaseCombobox } from '@base-ui/react/combobox';
-import clsx from 'clsx';
-import { forwardRef } from 'react';
-import { __ } from '@wordpress/i18n';
-
-/**
- * Internal dependencies
- */
-import type { SearchableChipSelectChipWithRemoveProps } from './types';
-
-export const ChipWithRemove = forwardRef<
-	HTMLDivElement,
-	SearchableChipSelectChipWithRemoveProps
->( function ChipWithRemove(
-	{ className, children, prefix, ...restProps },
-	ref
-) {
-	return (
-		<BaseCombobox.Chip
-			ref={ ref }
-			className={ clsx(
-				'woocommerce-searchable-chip-select__chip',
-				className
-			) }
-			{ ...restProps }
-		>
-			{ prefix && (
-				<span className="woocommerce-searchable-chip-select__chip-prefix">
-					{ prefix }
-				</span>
-			) }
-			<span className="woocommerce-searchable-chip-select__chip-content">
-				{ children }
-			</span>
-			<BaseCombobox.ChipRemove
-				className="woocommerce-searchable-chip-select__chip-remove"
-				aria-label={ __( 'Remove', 'woocommerce' ) }
-			>
-				<span aria-hidden="true">×</span>
-			</BaseCombobox.ChipRemove>
-		</BaseCombobox.Chip>
-	);
-} );
diff --git a/packages/js/experimental-products-app/src/fields/components/searchable-chip-select/index.ts b/packages/js/experimental-products-app/src/fields/components/searchable-chip-select/index.ts
deleted file mode 100644
index 0e5ececc8d3..00000000000
--- a/packages/js/experimental-products-app/src/fields/components/searchable-chip-select/index.ts
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * These components are copy-pasted from a private repository while we wait for
- * @wordpress/ui to support an equivalent component. Remove this implementation
- * once @wordpress/ui provides one.
- */
-
-/**
- * Internal dependencies
- */
-import { ChipWithRemove } from './chip-with-remove';
-import { Item } from './item';
-import { SearchableChipSelect as _SearchableChipSelect } from './searchable-chip-select';
-import { SearchableChipSelectControl as _SearchableChipSelectControl } from './searchable-chip-select-control';
-
-Item.displayName = 'SearchableChipSelect.Item';
-ChipWithRemove.displayName = 'SearchableChipSelect.ChipWithRemove';
-
-export const SearchableChipSelect = Object.assign( _SearchableChipSelect, {
-	Item,
-	ChipWithRemove,
-} );
-
-export const Combobox = SearchableChipSelect;
-
-export const SearchableChipSelectControl = Object.assign(
-	_SearchableChipSelectControl,
-	{
-		Item,
-		ChipWithRemove,
-	}
-);
-
-export type {
-	Item as SearchableChipSelectItem,
-	SearchableChipSelectChipWithRemoveProps,
-	SearchableChipSelectControlProps,
-	SearchableChipSelectItemProps,
-	SearchableChipSelectProps,
-} from './types';
diff --git a/packages/js/experimental-products-app/src/fields/components/searchable-chip-select/item.tsx b/packages/js/experimental-products-app/src/fields/components/searchable-chip-select/item.tsx
deleted file mode 100644
index 8c33a0649d9..00000000000
--- a/packages/js/experimental-products-app/src/fields/components/searchable-chip-select/item.tsx
+++ /dev/null
@@ -1,26 +0,0 @@
-/**
- * External dependencies
- */
-import { Combobox as BaseCombobox } from '@base-ui/react/combobox';
-import clsx from 'clsx';
-import { forwardRef } from 'react';
-
-/**
- * Internal dependencies
- */
-import type { SearchableChipSelectItemProps } from './types';
-
-export const Item = forwardRef< HTMLDivElement, SearchableChipSelectItemProps >(
-	function Item( { className, ...restProps }, ref ) {
-		return (
-			<BaseCombobox.Item
-				ref={ ref }
-				className={ clsx(
-					'woocommerce-searchable-chip-select__item',
-					className
-				) }
-				{ ...restProps }
-			/>
-		);
-	}
-);
diff --git a/packages/js/experimental-products-app/src/fields/components/searchable-chip-select/searchable-chip-select-control.tsx b/packages/js/experimental-products-app/src/fields/components/searchable-chip-select/searchable-chip-select-control.tsx
deleted file mode 100644
index 6017f385cdb..00000000000
--- a/packages/js/experimental-products-app/src/fields/components/searchable-chip-select/searchable-chip-select-control.tsx
+++ /dev/null
@@ -1,61 +0,0 @@
-/**
- * External dependencies
- */
-import { forwardRef, useId } from 'react';
-
-/**
- * Internal dependencies
- */
-import { SearchableChipSelect } from './searchable-chip-select';
-import type { SearchableChipSelectControlProps } from './types';
-
-function mergeIds( ...ids: Array< string | undefined > ) {
-	return ids.filter( Boolean ).join( ' ' ) || undefined;
-}
-
-/**
- * A searchable multi-selection field with label and description wiring.
- */
-export const SearchableChipSelectControl = forwardRef<
-	HTMLDivElement,
-	SearchableChipSelectControlProps
->( function SearchableChipSelectControl(
-	{
-		className,
-		label,
-		description,
-		'aria-labelledby': ariaLabelledby,
-		'aria-describedby': ariaDescribedby,
-		...restProps
-	},
-	ref
-) {
-	const id = useId();
-	const labelId = `${ id }-label`;
-	const descriptionId = description ? `${ id }-description` : undefined;
-
-	return (
-		<div className={ className }>
-			<div
-				id={ labelId }
-				className="woocommerce-searchable-chip-select__label"
-			>
-				{ label }
-			</div>
-			<SearchableChipSelect
-				ref={ ref }
-				aria-labelledby={ mergeIds( ariaLabelledby, labelId ) }
-				aria-describedby={ mergeIds( ariaDescribedby, descriptionId ) }
-				{ ...restProps }
-			/>
-			{ description && (
-				<div
-					id={ descriptionId }
-					className="woocommerce-searchable-chip-select__description"
-				>
-					{ description }
-				</div>
-			) }
-		</div>
-	);
-} );
diff --git a/packages/js/experimental-products-app/src/fields/components/searchable-chip-select/searchable-chip-select.tsx b/packages/js/experimental-products-app/src/fields/components/searchable-chip-select/searchable-chip-select.tsx
deleted file mode 100644
index be1ea5e2b71..00000000000
--- a/packages/js/experimental-products-app/src/fields/components/searchable-chip-select/searchable-chip-select.tsx
+++ /dev/null
@@ -1,188 +0,0 @@
-/**
- * External dependencies
- */
-import { Combobox as BaseCombobox } from '@base-ui/react/combobox';
-import clsx from 'clsx';
-import { forwardRef } from 'react';
-import { __ } from '@wordpress/i18n';
-
-/**
- * Internal dependencies
- */
-import type { Item, SearchableChipSelectProps } from './types';
-
-const DEFAULT_ITEMS: Item[] = [];
-
-function itemToStringLabel( item: Item ) {
-	return item.label;
-}
-
-function itemToStringValue( item: Item ) {
-	return item.value;
-}
-
-function isItemEqualToValue( item: Item, value: Item ) {
-	return item.value === value.value;
-}
-
-/**
- * A searchable multi-selection component with chips, with support for
- * a footer item to create new items.
- */
-export const SearchableChipSelect = forwardRef<
-	HTMLDivElement,
-	SearchableChipSelectProps
->( function SearchableChipSelect(
-	{
-		children,
-		creatableItem,
-		disabled,
-		emptyContent = __( 'No results found.', 'woocommerce' ),
-		items = DEFAULT_ITEMS,
-		chipsContent,
-		placeholderChip,
-		searchPlaceholder = __( 'Search', 'woocommerce' ),
-		showClearButton = true,
-		clearButtonLabel = __( 'Clear all', 'woocommerce' ),
-		'aria-label': ariaLabel,
-		'aria-labelledby': ariaLabelledby,
-		'aria-describedby': ariaDescribedby,
-		itemToStringLabel: customItemToStringLabel = itemToStringLabel,
-		itemToStringValue: customItemToStringValue = itemToStringValue,
-		isItemEqualToValue: customIsItemEqualToValue = isItemEqualToValue,
-		...restProps
-	},
-	ref
-) {
-	const rootItems = creatableItem ? [ ...items, creatableItem ] : items;
-
-	return (
-		<BaseCombobox.Root< Item, true >
-			items={ rootItems }
-			multiple
-			disabled={ disabled }
-			itemToStringLabel={ customItemToStringLabel }
-			itemToStringValue={ customItemToStringValue }
-			isItemEqualToValue={ customIsItemEqualToValue }
-			{ ...restProps }
-		>
-			<BaseCombobox.Chips
-				ref={ ref }
-				render={
-					<div
-						className={ clsx(
-							'woocommerce-searchable-chip-select',
-							disabled &&
-								'woocommerce-searchable-chip-select--is-disabled'
-						) }
-					/>
-				}
-			>
-				<BaseCombobox.Value>
-					{ ( value: Item[] ) => {
-						const hasValue = value.length > 0;
-						const showPlaceholderChip =
-							! hasValue && Boolean( placeholderChip );
-
-						return hasValue || showPlaceholderChip ? (
-							<div className="woocommerce-searchable-chip-select__chips-edit-area">
-								<div className="woocommerce-searchable-chip-select__chips-list">
-									{ hasValue && chipsContent
-										? chipsContent( value )
-										: value.map( ( item ) => (
-												<BaseCombobox.Chip
-													key={ item.value }
-													className="woocommerce-searchable-chip-select__chip"
-												>
-													<span className="woocommerce-searchable-chip-select__chip-content">
-														{ item.label }
-													</span>
-													<BaseCombobox.ChipRemove
-														className="woocommerce-searchable-chip-select__chip-remove"
-														aria-label={ __(
-															'Remove',
-															'woocommerce'
-														) }
-													>
-														<span aria-hidden="true">
-															×
-														</span>
-													</BaseCombobox.ChipRemove>
-												</BaseCombobox.Chip>
-										  ) ) }
-									{ showPlaceholderChip && (
-										<span className="woocommerce-searchable-chip-select__chip woocommerce-searchable-chip-select__chip--is-placeholder">
-											<span className="woocommerce-searchable-chip-select__chip-content">
-												{ placeholderChip }
-											</span>
-										</span>
-									) }
-								</div>
-								{ hasValue && showClearButton && (
-									<BaseCombobox.Clear
-										className="woocommerce-searchable-chip-select__clear"
-										aria-label={ clearButtonLabel }
-									>
-										<span aria-hidden="true">×</span>
-									</BaseCombobox.Clear>
-								) }
-							</div>
-						) : null;
-					} }
-				</BaseCombobox.Value>
-
-				<BaseCombobox.Input
-					className="woocommerce-searchable-chip-select__input"
-					placeholder={ searchPlaceholder }
-					aria-label={ ariaLabel }
-					aria-labelledby={ ariaLabelledby }
-					aria-describedby={ ariaDescribedby }
-				/>
-			</BaseCombobox.Chips>
-
-			<BaseCombobox.Portal>
-				<BaseCombobox.Positioner className="woocommerce-searchable-chip-select__positioner">
-					<BaseCombobox.Popup className="woocommerce-searchable-chip-select__popup">
-						<BaseCombobox.Empty className="woocommerce-searchable-chip-select__empty">
-							{ emptyContent }
-						</BaseCombobox.Empty>
-						<BaseCombobox.List className="woocommerce-searchable-chip-select__list">
-							<BaseCombobox.Collection>
-								{ ( item: Item, index: number ) => {
-									if ( item.value === creatableItem?.value ) {
-										return null;
-									}
-									if ( children ) {
-										return children( item, index );
-									}
-									return (
-										<BaseCombobox.Item
-											key={ item.value }
-											value={ item }
-											disabled={ item.disabled }
-											className="woocommerce-searchable-chip-select__item"
-										>
-											{ item.label }
-										</BaseCombobox.Item>
-									);
-								} }
-							</BaseCombobox.Collection>
-							{ creatableItem && (
-								<BaseCombobox.Item
-									value={ creatableItem }
-									disabled={ creatableItem.disabled }
-									className={ clsx(
-										'woocommerce-searchable-chip-select__item',
-										'woocommerce-searchable-chip-select__item--is-creatable'
-									) }
-								>
-									{ creatableItem.label }
-								</BaseCombobox.Item>
-							) }
-						</BaseCombobox.List>
-					</BaseCombobox.Popup>
-				</BaseCombobox.Positioner>
-			</BaseCombobox.Portal>
-		</BaseCombobox.Root>
-	);
-} );
diff --git a/packages/js/experimental-products-app/src/fields/components/searchable-chip-select/style.scss b/packages/js/experimental-products-app/src/fields/components/searchable-chip-select/style.scss
deleted file mode 100644
index 855685c5ea5..00000000000
--- a/packages/js/experimental-products-app/src/fields/components/searchable-chip-select/style.scss
+++ /dev/null
@@ -1,175 +0,0 @@
-.woocommerce-searchable-chip-select {
-	box-sizing: border-box;
-	display: flex;
-	flex-direction: column;
-	width: 100%;
-	min-height: 40px;
-	border: 1px solid #949494;
-	border-radius: 2px;
-	background: #fff;
-	color: #1e1e1e;
-	font-size: 13px;
-	line-height: 1.4;
-
-	&:focus-within {
-		border-color: var(--wp-admin-theme-color, #3858e9);
-		box-shadow: 0 0 0 1px var(--wp-admin-theme-color, #3858e9);
-		outline: 2px solid transparent;
-	}
-
-	&--is-disabled {
-		background: #f6f7f7;
-		color: #757575;
-	}
-
-	&__chips-edit-area {
-		display: flex;
-		gap: 8px;
-		align-items: flex-start;
-		padding: 8px 8px 0;
-	}
-
-	&__chips-list {
-		display: flex;
-		flex: 1 1 auto;
-		flex-wrap: wrap;
-		gap: 4px;
-	}
-
-	&__chip {
-		box-sizing: border-box;
-		display: inline-flex;
-		align-items: center;
-		overflow: hidden;
-		min-height: 24px;
-		border: 1px solid #c3c4c7;
-		border-radius: 12px;
-		background: #f6f7f7;
-		color: #1e1e1e;
-	}
-
-	&__chip--is-placeholder {
-		background: #fff;
-		color: #757575;
-	}
-
-	&__chip-prefix {
-		display: inline-flex;
-		align-items: center;
-		justify-content: center;
-		width: 20px;
-		height: 20px;
-		margin-inline-start: 1px;
-		overflow: hidden;
-		border-radius: 50%;
-	}
-
-	&__chip-content {
-		padding: 2px 8px 2px 8px;
-	}
-
-	&__chip-remove,
-	&__clear {
-		display: inline-flex;
-		align-items: center;
-		justify-content: center;
-		width: 24px;
-		height: 24px;
-		border: 0;
-		border-radius: 2px;
-		background: transparent;
-		color: inherit;
-		cursor: pointer;
-
-		&:hover {
-			background: #e0e0e0;
-		}
-	}
-
-	&__input {
-		box-sizing: border-box;
-		width: 100%;
-		min-height: 38px;
-		padding: 8px;
-		border: 0;
-		background: transparent;
-		color: inherit;
-		font: inherit;
-		outline: none;
-
-		&:focus {
-			border: 0;
-			box-shadow: none;
-			outline: none;
-		}
-	}
-
-	&__positioner {
-		z-index: 100000;
-	}
-
-	&__popup {
-		box-sizing: border-box;
-		width: var(--anchor-width);
-		max-height: min(var(--available-height), 320px);
-		overflow: auto;
-		border: 1px solid #c3c4c7;
-		border-radius: 2px;
-		background: #fff;
-		box-shadow: 0 2px 6px rgb(0 0 0 / 20%);
-	}
-
-	&__list {
-		margin: 0;
-		padding: 4px 0;
-	}
-
-	&__item,
-	&__empty {
-		box-sizing: border-box;
-		padding: 8px 12px;
-	}
-
-	&__item {
-		cursor: default;
-
-		&[data-highlighted] {
-			background: var(--wp-admin-theme-color, #3858e9);
-			color: #fff;
-		}
-
-		&[data-selected] {
-			font-weight: 600;
-		}
-
-		&[data-disabled] {
-			color: #757575;
-		}
-
-		&--is-creatable {
-			border-top: 1px solid #e0e0e0;
-		}
-	}
-
-	&__empty {
-		color: #757575;
-	}
-
-	&__label {
-		margin-bottom: 8px;
-		// Match the uppercase 11px treatment used by `@wordpress/ui`'s
-		// Field.Label primitive so the chip-select's label aligns with the
-		// rest of the DataForm fields (Name, Status, Catalog visibility, …).
-		font-size: var(--wpds-typography-font-size-xs, 11px);
-		font-weight: var(--wpds-typography-font-weight-medium, 499);
-		line-height: var(--wpds-typography-line-height-xs, 16px);
-		text-transform: uppercase;
-		color: var(--wpds-color-fg-content-neutral, #1e1e1e);
-	}
-
-	&__description {
-		margin-top: 4px;
-		color: #757575;
-		font-size: 12px;
-	}
-}
diff --git a/packages/js/experimental-products-app/src/fields/components/searchable-chip-select/test/index.test.tsx b/packages/js/experimental-products-app/src/fields/components/searchable-chip-select/test/index.test.tsx
deleted file mode 100644
index d3b638c907c..00000000000
--- a/packages/js/experimental-products-app/src/fields/components/searchable-chip-select/test/index.test.tsx
+++ /dev/null
@@ -1,161 +0,0 @@
-/**
- * External dependencies
- */
-import { render, screen, waitFor } from '@testing-library/react';
-import userEvent from '@testing-library/user-event';
-import { createRef } from 'react';
-
-/**
- * Internal dependencies
- */
-import { SearchableChipSelect, SearchableChipSelectControl } from '../index';
-
-describe( 'SearchableChipSelect', () => {
-	const mockItems = [
-		{ value: 'apple', label: 'Apple' },
-		{ value: 'banana', label: 'Banana' },
-		{ value: 'cherry', label: 'Cherry' },
-	];
-
-	it( 'forwards ref', () => {
-		const ref = createRef< HTMLDivElement >();
-
-		render( <SearchableChipSelect ref={ ref } /> );
-
-		expect( ref.current ).toBeInstanceOf( HTMLDivElement );
-	} );
-
-	it( 'passes aria-label and aria-describedby props to the input', () => {
-		render(
-			<>
-				<SearchableChipSelect
-					aria-label="My label"
-					aria-describedby="searchable-chip-select-description"
-				/>
-				<p id="searchable-chip-select-description">My description</p>
-			</>
-		);
-
-		expect(
-			screen.getByRole( 'combobox', {
-				name: 'My label',
-				description: 'My description',
-			} )
-		).toBeInTheDocument();
-	} );
-
-	it( 'passes aria-labelledby prop to the input', () => {
-		render(
-			<>
-				<p id="searchable-chip-select-label">My label</p>
-				<SearchableChipSelect aria-labelledby="searchable-chip-select-label" />
-			</>
-		);
-
-		expect(
-			screen.getByRole( 'combobox', {
-				name: 'My label',
-			} )
-		).toBeInTheDocument();
-	} );
-
-	it( 'renders accessible control label and description', () => {
-		render(
-			<SearchableChipSelectControl
-				label="Fruits"
-				description="Choose your favorite fruits"
-				items={ mockItems }
-			/>
-		);
-
-		expect(
-			screen.getByRole( 'combobox', {
-				name: 'Fruits',
-				description: 'Choose your favorite fruits',
-			} )
-		).toBeVisible();
-	} );
-
-	it( 'renders a placeholder chip when there are no selected values', () => {
-		render(
-			<SearchableChipSelectControl
-				label="Fruits"
-				items={ mockItems }
-				placeholderChip="Mixed (2)"
-			/>
-		);
-
-		expect( screen.getByText( 'Mixed (2)' ) ).toBeVisible();
-		expect(
-			screen.queryByLabelText( 'Clear all' )
-		).not.toBeInTheDocument();
-	} );
-
-	it( 'renders custom empty content', async () => {
-		render(
-			<SearchableChipSelectControl
-				label="Fruits"
-				items={ [] }
-				emptyContent="No fruit found."
-			/>
-		);
-
-		await userEvent.click(
-			screen.getByRole( 'combobox', {
-				name: 'Fruits',
-			} )
-		);
-
-		expect( screen.getByRole( 'status' ) ).toHaveTextContent(
-			'No fruit found.'
-		);
-	} );
-
-	it( 'supports custom chip and item renderers', async () => {
-		const ref = createRef< HTMLDivElement >();
-		const chipRef = createRef< HTMLDivElement >();
-		const itemRef = createRef< HTMLDivElement >();
-
-		render(
-			<SearchableChipSelectControl
-				ref={ ref }
-				label="Fruits"
-				items={ mockItems }
-				defaultValue={ [ mockItems[ 0 ] ] }
-				chipsContent={ ( value ) =>
-					value.map( ( item ) => (
-						<SearchableChipSelectControl.ChipWithRemove
-							key={ item.value }
-							ref={ chipRef }
-						>
-							{ item.label }
-						</SearchableChipSelectControl.ChipWithRemove>
-					) )
-				}
-			>
-				{ ( item ) => (
-					<SearchableChipSelectControl.Item
-						key={ item.value }
-						ref={ item.value === 'banana' ? itemRef : undefined }
-						value={ item }
-					>
-						{ item.label }
-					</SearchableChipSelectControl.Item>
-				) }
-			</SearchableChipSelectControl>
-		);
-
-		expect( ref.current ).toBeInstanceOf( HTMLDivElement );
-		expect( chipRef.current ).toBeInstanceOf( HTMLDivElement );
-
-		await userEvent.click(
-			screen.getByRole( 'combobox', {
-				name: 'Fruits',
-			} )
-		);
-
-		await waitFor( () => {
-			expect( itemRef.current ).toBeInstanceOf( HTMLDivElement );
-		} );
-	} );
-} );
diff --git a/packages/js/experimental-products-app/src/fields/components/searchable-chip-select/types.ts b/packages/js/experimental-products-app/src/fields/components/searchable-chip-select/types.ts
deleted file mode 100644
index 4e4b8e7d94d..00000000000
--- a/packages/js/experimental-products-app/src/fields/components/searchable-chip-select/types.ts
+++ /dev/null
@@ -1,91 +0,0 @@
-/**
- * External dependencies
- */
-import type {
-	ComboboxChipProps,
-	ComboboxCollectionProps,
-	ComboboxEmptyProps,
-	ComboboxInputProps,
-	ComboboxItemProps,
-	ComboboxRootProps,
-} from '@base-ui/react/combobox';
-import type { ReactNode } from 'react';
-
-export type SearchableChipSelectItem = {
-	label: string;
-	value: string;
-	disabled?: boolean;
-};
-
-export type Item = SearchableChipSelectItem;
-
-export type SearchableChipSelectProps = Omit<
-	ComboboxRootProps< SearchableChipSelectItem, true >,
-	'children' | 'items' | 'multiple'
-> &
-	Partial<
-		Pick<
-			ComboboxInputProps,
-			'aria-label' | 'aria-labelledby' | 'aria-describedby'
-		>
-	> & {
-		/**
-		 * The array of option items.
-		 */
-		items?: SearchableChipSelectItem[];
-		/**
-		 * A render function for custom rendering the list of matching items.
-		 */
-		children?: ComboboxCollectionProps[ 'children' ];
-		/**
-		 * The item that triggers the creation of a new item.
-		 */
-		creatableItem?: SearchableChipSelectItem;
-		/**
-		 * A render function for custom rendering the selected chips.
-		 */
-		chipsContent?: ( value: SearchableChipSelectItem[] ) => ReactNode;
-		/**
-		 * Chip content to show when there are no selected values.
-		 */
-		placeholderChip?: ReactNode;
-		/**
-		 * The custom content to use instead of the default empty state.
-		 */
-		emptyContent?: ComboboxEmptyProps[ 'children' ];
-		/**
-		 * The placeholder text to use for the search input.
-		 */
-		searchPlaceholder?: ComboboxInputProps[ 'placeholder' ];
-		/**
-		 * Whether to show the clear button to remove all selected items.
-		 *
-		 * @default true
-		 */
-		showClearButton?: boolean;
-		/**
-		 * The aria-label for the clear button.
-		 */
-		clearButtonLabel?: string;
-	};
-
-export type SearchableChipSelectControlProps = SearchableChipSelectProps & {
-	className?: string;
-	label: ReactNode;
-	description?: ReactNode;
-};
-
-export type SearchableChipSelectItemProps = ComboboxItemProps & {
-	children?: ReactNode;
-};
-
-export type SearchableChipSelectChipWithRemoveProps = Omit<
-	ComboboxChipProps,
-	'prefix'
-> & {
-	children?: ReactNode;
-	/**
-	 * Circular element to render before the chip content.
-	 */
-	prefix?: ReactNode;
-};
diff --git a/packages/js/experimental-products-app/src/fields/components/taxonomy-edit/index.tsx b/packages/js/experimental-products-app/src/fields/components/taxonomy-edit/index.tsx
deleted file mode 100644
index 8c9685bba93..00000000000
--- a/packages/js/experimental-products-app/src/fields/components/taxonomy-edit/index.tsx
+++ /dev/null
@@ -1,409 +0,0 @@
-/**
- * External dependencies
- */
-import { Spinner } from '@wordpress/components';
-import { store as coreStore, type Term } from '@wordpress/core-data';
-import { dispatch, useDispatch } from '@wordpress/data';
-import type { DataFormControlProps } from '@wordpress/dataviews';
-import { useCallback, useMemo, useState } from '@wordpress/element';
-import { decodeEntities } from '@wordpress/html-entities';
-import { __, sprintf } from '@wordpress/i18n';
-import { store as noticesStore } from '@wordpress/notices';
-import { Stack } from '@wordpress/ui';
-
-/**
- * Internal dependencies
- */
-import {
-	SearchableChipSelectControl,
-	Combobox,
-} from '../searchable-chip-select';
-import { useElements } from './use-elements';
-import { useAdaptiveTaxonomy } from './use-adaptive-taxonomy';
-import type { Item, ItemImage, TaxonomyTermRef } from './types';
-
-export type { Item, ItemImage, TaxonomyTermRef };
-
-const CREATABLE_VALUE = '__create__';
-
-type TaxonomyEditProps< T > = {
-	taxonomy: string;
-	fieldProperty: keyof T;
-	searchPlaceholder?: string;
-	/**
-	 * When set, fetches up to this many terms initially. If the store has
-	 * more, switches to server-side search. If omitted, uses the field's
-	 * elements/getElements for client-side filtering.
-	 */
-	serverSearchThreshold?: number;
-	/**
-	 * Known total term count for this taxonomy (e.g. from hydrated boot data).
-	 * Used with serverSearchThreshold to decide search mode without extra requests.
-	 */
-	termCount?: number;
-};
-
-function getErrorMessage( error: unknown ): string {
-	if ( error instanceof Error ) {
-		return error.message;
-	}
-	if ( typeof error === 'object' && error !== null && 'message' in error ) {
-		const errorWithMessage = error as Record< string, unknown >;
-		if ( typeof errorWithMessage.message === 'string' ) {
-			return errorWithMessage.message;
-		}
-	}
-	return String( error );
-}
-
-function itemsToTermRefs( selectedItems: Item[] ): TaxonomyTermRef[] {
-	return selectedItems
-		.filter( ( item ) => item.value !== CREATABLE_VALUE )
-		.map( ( item ) => ( { id: parseInt( item.value, 10 ) } ) )
-		.filter( ( ref ) => ! Number.isNaN( ref.id ) );
-}
-
-function isTaxonomyTermRef( value: unknown ): value is TaxonomyTermRef {
-	if ( typeof value !== 'object' || value === null ) {
-		return false;
-	}
-	if ( ! ( 'id' in value ) ) {
-		return false;
-	}
-	const { id } = value as { id: unknown };
-	return typeof id === 'number';
-}
-
-function isTermRecord( value: unknown ): value is Term {
-	if ( typeof value !== 'object' || value === null ) {
-		return false;
-	}
-	if ( ! ( 'id' in value ) || ! ( 'name' in value ) ) {
-		return false;
-	}
-	const term = value as Term;
-	return typeof term.id === 'number' && typeof term.name === 'string';
-}
-
-function createFieldChange< T extends Record< string, unknown > >(
-	fieldProperty: keyof T,
-	value: TaxonomyTermRef[]
-): Partial< T > {
-	const change: Partial< T > = {};
-	( change as Record< keyof T, TaxonomyTermRef[] > )[ fieldProperty ] = value;
-	return change;
-}
-
-function getEmptyContent(
-	isLoading: boolean,
-	isServerSearch: boolean,
-	inputValue: string
-) {
-	if ( isLoading ) {
-		return <Spinner />;
-	}
-	if ( isServerSearch && ! inputValue.trim() ) {
-		return __( 'Type to search…', 'woocommerce' );
-	}
-	return __( 'No results found.', 'woocommerce' );
-}
-
-export function TaxonomyEdit< T extends Record< string, unknown > >( {
-	data,
-	field,
-	onChange,
-	taxonomy,
-	fieldProperty,
-	searchPlaceholder,
-	serverSearchThreshold,
-	termCount,
-}: DataFormControlProps< T > & TaxonomyEditProps< T > ) {
-	const isAdaptiveMode = serverSearchThreshold !== undefined;
-
-	const [ inputValue, setInputValue ] = useState( '' );
-	const [ isCreating, setIsCreating ] = useState( false );
-	// Tracks items the user has selected or created, so chips persist
-	// even when search results change. Initialized from entity data.
-	const [ knownItems, setKnownItems ] = useState< Item[] >( () => {
-		if ( ! isAdaptiveMode ) {
-			return [];
-		}
-		const rawRefs = data?.[ fieldProperty ];
-		if ( ! Array.isArray( rawRefs ) ) {
-			return [];
-		}
-		return rawRefs
-			.filter( isTaxonomyTermRef )
-			.map( ( ref ) => {
-				const name = ( ref as { id: number; name?: string } ).name;
-				return name
-					? {
-							value: ref.id.toString(),
-							label: decodeEntities( name ),
-					  }
-					: null;
-			} )
-			.filter( ( item ): item is Item => item !== null );
-	} );
-	const { createErrorNotice } = useDispatch( noticesStore );
-
-	// Legacy mode: load all elements from field definition.
-	const { elements: fieldItems, isLoading: isFieldLoading } = useElements( {
-		elements: isAdaptiveMode
-			? undefined
-			: ( field.elements as Item[] | undefined ),
-		getElements: isAdaptiveMode
-			? undefined
-			: ( field.getElements as ( () => Promise< Item[] > ) | undefined ),
-	} );
-
-	// Adaptive mode: probes term count, uses client-side or server search.
-	const {
-		items: adaptiveItems,
-		isLoading: isAdaptiveLoading,
-		isServerSearch,
-	} = useAdaptiveTaxonomy( {
-		taxonomy,
-		inputValue: isAdaptiveMode ? inputValue : '',
-		knownItems: isAdaptiveMode ? knownItems : [],
-		threshold: serverSearchThreshold,
-		termCount,
-	} );
-
-	const isLoading = isAdaptiveMode ? isAdaptiveLoading : isFieldLoading;
-	const baseItems = isAdaptiveMode ? adaptiveItems : fieldItems;
-
-	const items: Item[] = useMemo( () => {
-		const existingValues = new Set( baseItems.map( ( i ) => i.value ) );
-		const newItems = knownItems.filter(
-			( i ) => ! existingValues.has( i.value )
-		);
-		return [ ...baseItems, ...newItems ];
-	}, [ baseItems, knownItems ] );
-
-	const itemsMap = useMemo( () => {
-		return new Map( items.map( ( item ) => [ item.value, item ] ) );
-	}, [ items ] );
-
-	const value: Item[] = useMemo( () => {
-		const rawRefs = data?.[ fieldProperty ];
-		const termRefs: TaxonomyTermRef[] = Array.isArray( rawRefs )
-			? rawRefs.filter( isTaxonomyTermRef )
-			: [];
-		return termRefs
-			.map( ( ref ) => itemsMap.get( ref.id.toString() ) )
-			.filter( ( item ): item is Item => item !== undefined );
-	}, [ data, fieldProperty, itemsMap ] );
-
-	const creatableItem: Item | undefined = useMemo( () => {
-		const termName = inputValue.trim();
-		if ( ! termName || isCreating ) {
-			return undefined;
-		}
-		return {
-			value: CREATABLE_VALUE,
-			label: sprintf(
-				/* translators: %s: the name of the new term to create */
-				__( 'Create "%s"', 'woocommerce' ),
-				termName
-			),
-		};
-	}, [ inputValue, isCreating ] );
-
-	const hasImages = useMemo(
-		() => items.some( ( item ) => item.image?.src ),
-		[ items ]
-	);
-
-	const handleValueChange = useCallback(
-		async ( newItems: Item[] ) => {
-			const creatableSelected = newItems.find(
-				( item ) => item.value === CREATABLE_VALUE
-			);
-
-			if ( creatableSelected ) {
-				const termName = inputValue.trim();
-				if ( ! termName ) {
-					return;
-				}
-
-				setIsCreating( true );
-
-				try {
-					const result: unknown = await dispatch(
-						coreStore
-					).saveEntityRecord(
-						'taxonomy',
-						taxonomy,
-						{ name: termName },
-						{ throwOnError: true }
-					);
-
-					if ( ! isTermRecord( result ) ) {
-						// eslint-disable-next-line no-console
-						console.error(
-							'[TaxonomyEdit] Unexpected response from saveEntityRecord:',
-							result
-						);
-						return;
-					}
-
-					const newTerm = result;
-
-					if ( newTerm.id ) {
-						const newItem: Item = {
-							value: newTerm.id.toString(),
-							label: decodeEntities( newTerm.name ),
-						};
-
-						setKnownItems( ( prev ) => [ ...prev, newItem ] );
-
-						const updatedItems = [
-							...newItems.filter(
-								( item ) => item.value !== CREATABLE_VALUE
-							),
-							newItem,
-						];
-
-						onChange(
-							createFieldChange< T >(
-								fieldProperty,
-								itemsToTermRefs( updatedItems )
-							)
-						);
-
-						setInputValue( '' );
-
-						if ( ! isServerSearch ) {
-							void dispatch( coreStore ).invalidateResolution(
-								'getEntityRecords',
-								[ 'taxonomy', taxonomy, { per_page: -1 } ]
-							);
-						}
-					}
-				} catch ( error ) {
-					void createErrorNotice(
-						sprintf(
-							/* translators: %s: error message */
-							__( 'Failed to create term: %s', 'woocommerce' ),
-							getErrorMessage( error )
-						),
-						{
-							type: 'snackbar',
-						}
-					);
-				} finally {
-					setIsCreating( false );
-				}
-			} else {
-				// Track selected items so chips persist across search changes.
-				if ( isServerSearch ) {
-					setKnownItems( ( prev ) => {
-						const known = new Set( prev.map( ( i ) => i.value ) );
-						const added = newItems.filter(
-							( i ) =>
-								i.value !== CREATABLE_VALUE &&
-								! known.has( i.value )
-						);
-						return added.length > 0 ? [ ...prev, ...added ] : prev;
-					} );
-				}
-
-				onChange(
-					createFieldChange< T >(
-						fieldProperty,
-						itemsToTermRefs( newItems )
-					)
-				);
-			}
-		},
-		[
-			inputValue,
-			taxonomy,
-			fieldProperty,
-			onChange,
-			createErrorNotice,
-			isServerSearch,
-		]
-	);
-
-	return (
-		<SearchableChipSelectControl
-			label={ field.label }
-			description={ field.description }
-			items={ items }
-			value={ value }
-			onValueChange={ handleValueChange }
-			inputValue={ inputValue }
-			onInputValueChange={ setInputValue }
-			creatableItem={ isLoading ? undefined : creatableItem }
-			placeholderChip={
-				value.length === 0 ? field.placeholder : undefined
-			}
-			searchPlaceholder={
-				searchPlaceholder ?? __( 'Search', 'woocommerce' )
-			}
-			disabled={ isCreating }
-			emptyContent={ getEmptyContent(
-				isLoading,
-				isServerSearch,
-				inputValue
-			) }
-			// Disable client-side filtering when using server-side search.
-			{ ...( isServerSearch ? { filter: null } : {} ) }
-			chipsContent={
-				hasImages
-					? ( selectedItems: Item[] ) =>
-							selectedItems.map( ( item ) => (
-								<Combobox.ChipWithRemove
-									key={ item.value }
-									prefix={
-										item.image?.src ? (
-											<img
-												src={ item.image.src }
-												alt={ item.image.alt ?? '' }
-												className="woocommerce-next-taxonomy-edit__chip-thumbnail"
-											/>
-										) : (
-											<span className="woocommerce-next-taxonomy-edit__chip-thumbnail woocommerce-next-taxonomy-edit__chip-thumbnail--empty" />
-										)
-									}
-								>
-									{ item.label }
-								</Combobox.ChipWithRemove>
-							) )
-					: undefined
-			}
-		>
-			{ hasImages
-				? ( item: Item ) => (
-						<Combobox.Item
-							key={ item.value }
-							value={ item }
-							disabled={ item.disabled }
-						>
-							<Stack
-								direction="row"
-								align="center"
-								style={ { gap: '12px' } }
-								className="woocommerce-next-taxonomy-edit__option"
-							>
-								{ item.image?.src ? (
-									<img
-										src={ item.image.src }
-										alt={ item.image.alt ?? '' }
-										className="woocommerce-next-taxonomy-edit__option-thumbnail"
-									/>
-								) : (
-									<span className="woocommerce-next-taxonomy-edit__option-thumbnail woocommerce-next-taxonomy-edit__option-thumbnail--empty" />
-								) }
-								<span className="woocommerce-next-taxonomy-edit__option-label">
-									{ item.label }
-								</span>
-							</Stack>
-						</Combobox.Item>
-				  )
-				: undefined }
-		</SearchableChipSelectControl>
-	);
-}
diff --git a/packages/js/experimental-products-app/src/fields/components/taxonomy-edit/style.scss b/packages/js/experimental-products-app/src/fields/components/taxonomy-edit/style.scss
deleted file mode 100644
index 63c70411b7e..00000000000
--- a/packages/js/experimental-products-app/src/fields/components/taxonomy-edit/style.scss
+++ /dev/null
@@ -1,26 +0,0 @@
-.woocommerce-next-taxonomy-edit {
-	&__chip-thumbnail {
-		width: 19px;
-		height: 19px;
-		border-radius: 50%;
-		object-fit: cover;
-		margin-left: 1px;
-
-		&--empty {
-			background-color: var(--wp-components-color-gray-100);
-		}
-	}
-
-	&__option {
-		width: 100%;
-	}
-
-	&__option-thumbnail {
-		width: 32px;
-		height: 32px;
-		flex-shrink: 0;
-		border-radius: 4px;
-		object-fit: cover;
-		background-color: var(--wp-components-color-gray-100);
-	}
-}
diff --git a/packages/js/experimental-products-app/src/fields/components/taxonomy-edit/types.ts b/packages/js/experimental-products-app/src/fields/components/taxonomy-edit/types.ts
deleted file mode 100644
index 4f7e35cae1a..00000000000
--- a/packages/js/experimental-products-app/src/fields/components/taxonomy-edit/types.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-export type ItemImage = {
-	src: string;
-	alt?: string;
-};
-
-export type Item = {
-	label: string;
-	value: string;
-	disabled?: boolean;
-	image?: ItemImage;
-};
-
-export type TaxonomyTermRef = {
-	id: number;
-};
diff --git a/packages/js/experimental-products-app/src/fields/components/taxonomy-edit/use-adaptive-taxonomy.ts b/packages/js/experimental-products-app/src/fields/components/taxonomy-edit/use-adaptive-taxonomy.ts
deleted file mode 100644
index 94a5b7e8f9d..00000000000
--- a/packages/js/experimental-products-app/src/fields/components/taxonomy-edit/use-adaptive-taxonomy.ts
+++ /dev/null
@@ -1,168 +0,0 @@
-/**
- * External dependencies
- */
-import { store as coreStore } from '@wordpress/core-data';
-import { resolveSelect } from '@wordpress/data';
-import { useEffect, useMemo, useRef, useState } from '@wordpress/element';
-import { decodeEntities } from '@wordpress/html-entities';
-
-/**
- * Internal dependencies
- */
-import type { Item } from './types';
-
-const DEBOUNCE_MS = 300;
-const SEARCH_PER_PAGE = 20;
-
-function isTermArray(
-	value: unknown
-): value is Array< { id: number; name: string } > {
-	return (
-		Array.isArray( value ) &&
-		value.every( ( item: unknown ) => {
-			if ( typeof item !== 'object' || item === null ) {
-				return false;
-			}
-			return (
-				'id' in item &&
-				typeof ( item as { id: unknown } ).id === 'number' &&
-				'name' in item &&
-				typeof ( item as { name: unknown } ).name === 'string'
-			);
-		} )
-	);
-}
-
-function termsToItems( terms: unknown ): Item[] {
-	if ( ! isTermArray( terms ) ) {
-		return [];
-	}
-	return terms.map( ( { id, name } ) => ( {
-		value: id.toString(),
-		label: decodeEntities( name ),
-	} ) );
-}
-
-/**
- * Hook that adaptively fetches taxonomy terms. Uses a provided term count
- * to decide between client-side filtering (all terms loaded) and
- * server-side search (debounced REST API queries).
- *
- * @param root0            Hook parameters.
- * @param root0.taxonomy   The taxonomy slug.
- * @param root0.inputValue Current search input value.
- * @param root0.knownItems Items to always include in results (selected/created).
- * @param root0.threshold  Max terms for client-side mode. Undefined = always client-side.
- * @param root0.termCount  Known total term count (e.g. from hydrated boot data).
- */
-export function useAdaptiveTaxonomy( {
-	taxonomy,
-	inputValue,
-	knownItems,
-	threshold,
-	termCount,
-}: {
-	taxonomy: string;
-	inputValue: string;
-	knownItems: Item[];
-	threshold?: number;
-	termCount?: number;
-} ) {
-	const isServerSearch =
-		threshold !== undefined &&
-		termCount !== undefined &&
-		termCount > threshold;
-
-	const [ allTerms, setAllTerms ] = useState< Item[] >( [] );
-	const [ searchResults, setSearchResults ] = useState< Item[] >( [] );
-	const [ isLoading, setIsLoading ] = useState( ! isServerSearch );
-	const [ isSearching, setIsSearching ] = useState( false );
-	const requestIdRef = useRef( 0 );
-
-	// Client-side mode: fetch all terms once.
-	useEffect( () => {
-		if ( isServerSearch ) {
-			return;
-		}
-
-		let cancelled = false;
-		setIsLoading( true );
-
-		resolveSelect( coreStore )
-			.getEntityRecords( 'taxonomy', taxonomy, { per_page: -1 } )
-			.then( ( records: unknown ) => {
-				if ( ! cancelled ) {
-					setAllTerms( termsToItems( records ) );
-				}
-			} )
-			.catch( () => {
-				// Silently fail.
-			} )
-			.finally( () => {
-				if ( ! cancelled ) {
-					setIsLoading( false );
-				}
-			} );
-
-		return () => {
-			cancelled = true;
-		};
-	}, [ taxonomy, isServerSearch ] );
-
-	// Server-side mode: debounced search on input change.
-	useEffect( () => {
-		if ( ! isServerSearch ) {
-			return;
-		}
-
-		const query = inputValue.trim();
-		if ( ! query ) {
-			setSearchResults( [] );
-			setIsSearching( false );
-			return;
-		}
-
-		setIsSearching( true );
-		requestIdRef.current += 1;
-		const currentRequestId = requestIdRef.current;
-
-		const timer = setTimeout( () => {
-			resolveSelect( coreStore )
-				.getEntityRecords( 'taxonomy', taxonomy, {
-					search: query,
-					per_page: SEARCH_PER_PAGE,
-				} )
-				.then( ( records: unknown ) => {
-					if ( currentRequestId === requestIdRef.current ) {
-						setSearchResults( termsToItems( records ) );
-						setIsSearching( false );
-					}
-				} )
-				.catch( () => {
-					if ( currentRequestId === requestIdRef.current ) {
-						setIsSearching( false );
-					}
-				} );
-		}, DEBOUNCE_MS );
-
-		return () => {
-			clearTimeout( timer );
-		};
-	}, [ inputValue, taxonomy, isServerSearch ] );
-
-	// Merge known items with current results so chips persist.
-	const items = useMemo( () => {
-		const baseItems = isServerSearch ? searchResults : allTerms;
-		const resultValues = new Set( baseItems.map( ( item ) => item.value ) );
-		const missingKnown = knownItems.filter(
-			( item ) => ! resultValues.has( item.value )
-		);
-		return [ ...missingKnown, ...baseItems ];
-	}, [ isServerSearch, searchResults, allTerms, knownItems ] );
-
-	return {
-		items,
-		isLoading: isLoading || isSearching,
-		isServerSearch,
-	};
-}
diff --git a/packages/js/experimental-products-app/src/fields/components/taxonomy-edit/use-elements.ts b/packages/js/experimental-products-app/src/fields/components/taxonomy-edit/use-elements.ts
deleted file mode 100644
index 859694f7790..00000000000
--- a/packages/js/experimental-products-app/src/fields/components/taxonomy-edit/use-elements.ts
+++ /dev/null
@@ -1,100 +0,0 @@
-/**
- * External dependencies
- */
-import { useState, useEffect, useMemo, useRef } from '@wordpress/element';
-/**
- * Internal dependencies
- */
-import type { Item } from './types';
-
-const EMPTY_ARRAY: Item[] = [];
-
-export function useElements( {
-	elements,
-	getElements,
-}: {
-	elements?: Item[];
-	getElements?: () => Promise< Item[] >;
-} ) {
-	const staticElements = useMemo(
-		() =>
-			Array.isArray( elements ) && elements.length > 0
-				? elements
-				: EMPTY_ARRAY,
-		[ elements ]
-	);
-	const [ records, setRecords ] = useState< Item[] >( staticElements );
-	const [ isLoading, setIsLoading ] = useState( false );
-	const [ refreshTrigger, setRefreshTrigger ] = useState( 0 );
-	const getElementsRef = useRef( getElements );
-
-	// Update ref when getElements changes
-	useEffect( () => {
-		getElementsRef.current = getElements;
-	}, [ getElements ] );
-
-	// Expose refresh function on window for abilities to call
-	useEffect( () => {
-		const handleRefresh = () => {
-			setRefreshTrigger( ( prev ) => prev + 1 );
-		};
-
-		window.addEventListener(
-			'woocommerce-refresh-product-taxonomies',
-			handleRefresh
-		);
-
-		return () => {
-			window.removeEventListener(
-				'woocommerce-refresh-product-taxonomies',
-				handleRefresh
-			);
-		};
-	}, [] );
-
-	useEffect( () => {
-		if ( ! getElementsRef.current ) {
-			setRecords( staticElements );
-			return;
-		}
-
-		let cancelled = false;
-		setIsLoading( true );
-		getElementsRef
-			.current()
-			.then( ( fetchedElements ) => {
-				if ( ! cancelled ) {
-					const dynamicElements =
-						Array.isArray( fetchedElements ) &&
-						fetchedElements.length > 0
-							? fetchedElements
-							: staticElements;
-					setRecords( dynamicElements );
-				}
-			} )
-			.catch( ( error: unknown ) => {
-				// eslint-disable-next-line no-console
-				console.error(
-					'[useElements] Failed to fetch elements:',
-					error
-				);
-				if ( ! cancelled ) {
-					setRecords( staticElements );
-				}
-			} )
-			.finally( () => {
-				if ( ! cancelled ) {
-					setIsLoading( false );
-				}
-			} );
-
-		return () => {
-			cancelled = true;
-		};
-	}, [ staticElements, refreshTrigger ] );
-
-	return {
-		elements: records,
-		isLoading,
-	};
-}
diff --git a/packages/js/experimental-products-app/src/fields/cost_of_goods_sold/field.tsx b/packages/js/experimental-products-app/src/fields/cost_of_goods_sold/field.tsx
deleted file mode 100644
index dde7d5a4341..00000000000
--- a/packages/js/experimental-products-app/src/fields/cost_of_goods_sold/field.tsx
+++ /dev/null
@@ -1,100 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-
-import type { DataFormControlProps, Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import { validatePrice, toNumberOrNaN } from '../price/utils';
-import { formatCurrency, getCurrencyObject } from '../utils/currency';
-import { CurrencyControl } from '../components/currency-input';
-
-import type { ProductEntityRecord } from '../types';
-import type { ProductBulkEditFormData } from '../../product-edit/bulk-edit';
-import { isBulkNumericPercentEdit } from '../../product-edit/bulk-edit';
-
-const fieldDefinition = {
-	type: 'text',
-	label: __( 'Cost of goods', 'woocommerce' ),
-	enableSorting: false,
-	enableHiding: false,
-	filterBy: false,
-	isVisible: ( item: ProductEntityRecord ) =>
-		item.cost_of_goods_sold !== undefined,
-} satisfies Partial< Field< ProductEntityRecord > >;
-
-function getDefinedCostValue( item: ProductEntityRecord ) {
-	return item.cost_of_goods_sold?.values?.[ 0 ]?.defined_value;
-}
-
-function CostOfGoodsSoldInput( {
-	data,
-	field,
-	hideLabelFromVision,
-	onChange,
-	validity,
-}: DataFormControlProps< ProductEntityRecord > ) {
-	const costOfGoodsSold = data.cost_of_goods_sold ?? {};
-	const disabled = field.isDisabled( { item: data, field } );
-	const [ firstValue = {}, ...remainingValues ] =
-		costOfGoodsSold.values ?? [];
-
-	return (
-		<CurrencyControl
-			id={ `currency-input-${ field.id }` }
-			label={ field.label }
-			hideLabelFromVision={ hideLabelFromVision }
-			value={ getDefinedCostValue( data ) ?? '' }
-			placeholder={ field.placeholder }
-			onChange={ ( newValue: string ) => {
-				onChange( {
-					cost_of_goods_sold: {
-						...costOfGoodsSold,
-						values:
-							newValue === ''
-								? []
-								: [
-										{
-											...firstValue,
-											defined_value: newValue,
-										},
-										...remainingValues,
-								  ],
-					},
-				} );
-			} }
-			customValidity={ validity?.custom }
-			disabled={ disabled }
-			showPercentAdornment={ isBulkNumericPercentEdit(
-				data as ProductBulkEditFormData,
-				field.id
-			) }
-		/>
-	);
-}
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	...fieldDefinition,
-	getValue: ( { item } ) => getDefinedCostValue( item ),
-	getValueFormatted: ( { item } ) => {
-		const value = getDefinedCostValue( item );
-		const numberValue = toNumberOrNaN( value );
-
-		if (
-			value === undefined ||
-			value === null ||
-			Number.isNaN( numberValue )
-		) {
-			return '\u2014';
-		}
-
-		return formatCurrency( numberValue, getCurrencyObject().code );
-	},
-	isValid: {
-		custom: ( item ) => validatePrice( getDefinedCostValue( item ) ),
-	},
-	Edit: CostOfGoodsSoldInput,
-};
diff --git a/packages/js/experimental-products-app/src/fields/cross_sell_ids/field.tsx b/packages/js/experimental-products-app/src/fields/cross_sell_ids/field.tsx
deleted file mode 100644
index 93515c38792..00000000000
--- a/packages/js/experimental-products-app/src/fields/cross_sell_ids/field.tsx
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord, ProductStatus } from '../types';
-
-import { ProductSelector } from '../components/product-selector';
-
-const LINKED_PRODUCT_STATUSES: ProductStatus[] = [ 'publish', 'draft' ];
-
-const fieldDefinition = {
-	label: __( 'Cross-sells', 'woocommerce' ),
-	description: __(
-		"Recommend related or complementary items to encourage additional purchases. These will be shown in the customer's shopping cart.",
-		'woocommerce'
-	),
-	enableSorting: false,
-	enableHiding: false,
-	filterBy: false,
-} satisfies Partial< Field< ProductEntityRecord > >;
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	...fieldDefinition,
-	Edit: ( { data, onChange, field } ) => (
-		<ProductSelector
-			label={ field.label }
-			selectedProductIds={
-				( data.cross_sell_ids as number[] | undefined ) ?? []
-			}
-			onSelectedProductIdsChange={ ( ids ) =>
-				onChange( { cross_sell_ids: ids } )
-			}
-			excludeProductIds={ data.id ? [ data.id ] : undefined }
-			includeProductStatuses={ LINKED_PRODUCT_STATUSES }
-		/>
-	),
-};
diff --git a/packages/js/experimental-products-app/src/fields/date/field.tsx b/packages/js/experimental-products-app/src/fields/date/field.tsx
deleted file mode 100644
index 6028f7750f2..00000000000
--- a/packages/js/experimental-products-app/src/fields/date/field.tsx
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-
-const fieldDefinition = {
-	type: 'text',
-	label: __( 'Date', 'woocommerce' ),
-	enableSorting: false,
-	filterBy: false,
-} satisfies Partial< Field< ProductEntityRecord > >;
-
-const dateFormatter = new Intl.DateTimeFormat( undefined, {
-	dateStyle: 'medium',
-} );
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	...fieldDefinition,
-	getValue: ( { item } ) => item.date_created ?? '',
-	render: ( { item } ) => {
-		const value = item.date_created;
-
-		if ( ! value ) {
-			return <span>{ '—' }</span>;
-		}
-
-		const parsed = new Date( value );
-
-		if ( Number.isNaN( parsed.getTime() ) ) {
-			return <span>{ value }</span>;
-		}
-
-		return <span>{ dateFormatter.format( parsed ) }</span>;
-	},
-};
diff --git a/packages/js/experimental-products-app/src/fields/date_on_sale_from/field.tsx b/packages/js/experimental-products-app/src/fields/date_on_sale_from/field.tsx
deleted file mode 100644
index 9319d5526ba..00000000000
--- a/packages/js/experimental-products-app/src/fields/date_on_sale_from/field.tsx
+++ /dev/null
@@ -1,89 +0,0 @@
-/**
- * External dependencies
- */
-import { useCallback, useMemo } from '@wordpress/element';
-
-import { __ } from '@wordpress/i18n';
-
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-
-import {
-	DatePicker,
-	parseDateTimeLocal,
-	formatDateTimeLocal,
-} from '../components/date-picker';
-
-const fieldDefinition = {
-	type: 'datetime',
-	label: __( 'Start sale on', 'woocommerce' ),
-	enableSorting: false,
-	enableHiding: false,
-	filterBy: false,
-} satisfies Partial< Field< ProductEntityRecord > >;
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	...fieldDefinition,
-	isVisible: ( product ) => {
-		return !! product.date_on_sale_to || !! product.date_on_sale_from;
-	},
-	Edit: ( { data, onChange, field } ) => {
-		const today = useMemo( () => {
-			const d = new Date();
-			d.setHours( 0, 0, 0, 0 );
-			return d;
-		}, [] );
-
-		const handleChange = useCallback(
-			( value: { date_on_sale_from?: string | null } ) => {
-				const newStart = value.date_on_sale_from;
-				const currentEnd = data.date_on_sale_to;
-
-				if (
-					typeof newStart !== 'string' ||
-					! newStart ||
-					typeof currentEnd !== 'string' ||
-					! currentEnd
-				) {
-					onChange( value );
-					return;
-				}
-
-				const startDate = parseDateTimeLocal( newStart );
-				const endDate = parseDateTimeLocal( currentEnd );
-
-				if (
-					startDate &&
-					endDate &&
-					startDate.getTime() >= endDate.getTime()
-				) {
-					const newEndDate = new Date( startDate );
-					newEndDate.setDate( newEndDate.getDate() + 1 );
-
-					onChange( {
-						...value,
-						date_on_sale_to: formatDateTimeLocal( newEndDate ),
-					} );
-					return;
-				}
-
-				onChange( value );
-			},
-			[ data.date_on_sale_to, onChange ]
-		);
-
-		return (
-			<DatePicker
-				data={ data }
-				onChange={ handleChange }
-				field={ field }
-				fieldKey="date_on_sale_from"
-				min={ today }
-			/>
-		);
-	},
-};
diff --git a/packages/js/experimental-products-app/src/fields/date_on_sale_to/field.tsx b/packages/js/experimental-products-app/src/fields/date_on_sale_to/field.tsx
deleted file mode 100644
index 9048db2083f..00000000000
--- a/packages/js/experimental-products-app/src/fields/date_on_sale_to/field.tsx
+++ /dev/null
@@ -1,61 +0,0 @@
-/**
- * External dependencies
- */
-import { useMemo } from '@wordpress/element';
-
-import { __ } from '@wordpress/i18n';
-
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-
-import { DatePicker, parseDateTimeLocal } from '../components/date-picker';
-
-const fieldDefinition = {
-	type: 'datetime',
-	label: __( 'End sale on', 'woocommerce' ),
-	enableSorting: false,
-	enableHiding: false,
-	filterBy: false,
-} satisfies Partial< Field< ProductEntityRecord > >;
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	...fieldDefinition,
-	isVisible: ( product ) => {
-		return !! product.date_on_sale_to || !! product.date_on_sale_from;
-	},
-	Edit: ( { data, onChange, field } ) => {
-		const dateOnSaleFrom = useMemo(
-			() =>
-				typeof data?.date_on_sale_from === 'string' &&
-				data.date_on_sale_from
-					? parseDateTimeLocal( data.date_on_sale_from )
-					: null,
-			[ data?.date_on_sale_from ]
-		);
-
-		const minDate = useMemo( () => {
-			if ( dateOnSaleFrom ) {
-				const min = new Date( dateOnSaleFrom );
-				min.setMinutes( min.getMinutes() + 1 );
-				return min;
-			}
-			const today = new Date();
-			today.setHours( 0, 0, 0, 0 );
-			return today;
-		}, [ dateOnSaleFrom ] );
-
-		return (
-			<DatePicker
-				data={ data }
-				onChange={ onChange }
-				field={ field }
-				fieldKey="date_on_sale_to"
-				min={ minDate }
-			/>
-		);
-	},
-};
diff --git a/packages/js/experimental-products-app/src/fields/description/field.tsx b/packages/js/experimental-products-app/src/fields/description/field.tsx
deleted file mode 100644
index a803c802e69..00000000000
--- a/packages/js/experimental-products-app/src/fields/description/field.tsx
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-import { TextareaControl } from '@wordpress/components';
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-
-import type { ProductEntityRecord } from '../types';
-import { convertHtmlToPlainText } from '../../utilites';
-
-const fieldDefinition = {
-	type: 'text',
-	label: __( 'Description', 'woocommerce' ),
-	description: __(
-		'Share the full story—include product details, features, and benefits to help customers decide.',
-		'woocommerce'
-	),
-	enableSorting: false,
-	enableHiding: false,
-	filterBy: false,
-} satisfies Partial< Field< ProductEntityRecord > >;
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	...fieldDefinition,
-	getValue: ( { item } ) => convertHtmlToPlainText( item.description ),
-	Edit: ( { data, onChange, field } ) => {
-		return (
-			<TextareaControl
-				label={ field.label }
-				rows={ 10 }
-				value={ convertHtmlToPlainText( data.description || '' ) }
-				onChange={ ( value ) => onChange( { description: value } ) }
-			/>
-		);
-	},
-};
diff --git a/packages/js/experimental-products-app/src/fields/downloadable/field.test.tsx b/packages/js/experimental-products-app/src/fields/downloadable/field.test.tsx
deleted file mode 100644
index b5351dfe1f1..00000000000
--- a/packages/js/experimental-products-app/src/fields/downloadable/field.test.tsx
+++ /dev/null
@@ -1,232 +0,0 @@
-/**
- * External dependencies
- */
-import { act, fireEvent, render, screen } from '@testing-library/react';
-import type { DataFormControlProps } from '@wordpress/dataviews';
-import React from 'react';
-
-const mockUploadMedia = jest.fn();
-
-jest.mock( '@wordpress/components', () => {
-	const ReactActual = jest.requireActual( 'react' );
-
-	return {
-		FormFileUpload: ( {
-			children,
-			className,
-			onChange,
-		}: {
-			children?: React.ReactNode;
-			className?: string;
-			onChange?: React.ChangeEventHandler< HTMLInputElement >;
-		} ) =>
-			ReactActual.createElement(
-				'label',
-				null,
-				ReactActual.createElement( 'input', {
-					className,
-					onChange,
-					type: 'file',
-				} ),
-				children
-			),
-		Button: ( {
-			children,
-			onClick,
-			'aria-label': ariaLabel,
-		}: {
-			children?: React.ReactNode;
-			onClick?: React.MouseEventHandler< HTMLButtonElement >;
-			'aria-label'?: string;
-		} ) =>
-			ReactActual.createElement(
-				'button',
-				{
-					'aria-label': ariaLabel,
-					onClick,
-					type: 'button',
-				},
-				children
-			),
-	};
-} );
-
-jest.mock( '@wordpress/media-utils', () => ( {
-	uploadMedia: ( args: unknown ) => mockUploadMedia( args ),
-} ) );
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-
-import { fieldExtensions } from './field';
-
-describe( 'downloadable field', () => {
-	const buildProduct = (
-		overrides: Partial< ProductEntityRecord > = {}
-	): ProductEntityRecord =>
-		( {
-			id: 12,
-			name: 'Beanie',
-			downloadable: true,
-			downloads: [],
-			...overrides,
-		} ) as ProductEntityRecord;
-
-	const renderEdit = ( data: ProductEntityRecord, onChange = jest.fn() ) => {
-		if ( ! fieldExtensions.Edit ) {
-			throw new Error( 'downloadable edit not implemented' );
-		}
-
-		const Edit = fieldExtensions.Edit as React.ComponentType<
-			DataFormControlProps< ProductEntityRecord >
-		>;
-
-		const view = render(
-			<Edit
-				data={ data }
-				field={
-					{
-						...fieldExtensions,
-						id: 'downloadable',
-						label: 'Downloadable',
-					} as DataFormControlProps< ProductEntityRecord >[ 'field' ]
-				}
-				onChange={ onChange }
-			/>
-		);
-
-		return {
-			...view,
-			onChange,
-		};
-	};
-
-	beforeEach( () => {
-		jest.clearAllMocks();
-		Object.defineProperty( URL, 'createObjectURL', {
-			writable: true,
-			value: jest.fn( () => 'blob:download-file' ),
-		} );
-		Object.defineProperty( URL, 'revokeObjectURL', {
-			writable: true,
-			value: jest.fn(),
-		} );
-	} );
-
-	it( 'uploads selected files to the media library before saving them as downloads', () => {
-		const { container, onChange } = renderEdit( buildProduct() );
-		const file = new File( [ 'manual' ], 'manual.pdf', {
-			type: 'application/pdf',
-		} );
-		const fileInput = container.querySelector(
-			'input[type="file"]'
-		) as HTMLInputElement;
-
-		fireEvent.change( fileInput, {
-			target: {
-				files: [ file ],
-			},
-		} );
-
-		expect( screen.getByText( /manual\.pdf/ ) ).toHaveTextContent(
-			'manual.pdf - uploading…'
-		);
-		expect( onChange ).not.toHaveBeenCalled();
-		expect( mockUploadMedia ).toHaveBeenCalledWith(
-			expect.objectContaining( {
-				filesList: [ file ],
-				onFileChange: expect.any( Function ),
-				onError: expect.any( Function ),
-			} )
-		);
-
-		act( () => {
-			mockUploadMedia.mock.calls[ 0 ][ 0 ].onFileChange( [
-				{
-					id: 34,
-					url: 'https://example.com/wp-content/uploads/manual.pdf',
-					title: 'Product manual',
-				},
-			] );
-		} );
-
-		expect( URL.revokeObjectURL ).toHaveBeenCalledWith(
-			'blob:download-file'
-		);
-		expect( onChange ).toHaveBeenCalledTimes( 1 );
-		expect( onChange ).toHaveBeenCalledWith( {
-			downloads: [
-				{
-					id: '34',
-					file: 'https://example.com/wp-content/uploads/manual.pdf',
-					name: 'Product manual',
-				},
-			],
-		} );
-		expect( screen.getByText( 'Product manual' ) ).toBeInTheDocument();
-	} );
-
-	it( 'removes the temporary download when upload fails', () => {
-		const { container, onChange } = renderEdit( buildProduct() );
-		const file = new File( [ 'manual' ], 'manual.pdf', {
-			type: 'application/pdf',
-		} );
-		const fileInput = container.querySelector(
-			'input[type="file"]'
-		) as HTMLInputElement;
-
-		fireEvent.change( fileInput, {
-			target: {
-				files: [ file ],
-			},
-		} );
-
-		act( () => {
-			mockUploadMedia.mock.calls[ 0 ][ 0 ].onError();
-		} );
-
-		expect( URL.revokeObjectURL ).toHaveBeenCalledWith(
-			'blob:download-file'
-		);
-		expect( onChange ).not.toHaveBeenCalled();
-		expect( screen.queryByText( /manual\.pdf/ ) ).not.toBeInTheDocument();
-	} );
-
-	it.each( [
-		[ 'missing media ID', { url: 'https://example.com/manual.pdf' } ],
-		[ 'missing media URL', { id: 34 } ],
-	] )(
-		'removes the temporary download when uploaded attachment has a %s',
-		( _name, attachment ) => {
-			const { container, onChange } = renderEdit( buildProduct() );
-			const file = new File( [ 'manual' ], 'manual.pdf', {
-				type: 'application/pdf',
-			} );
-			const fileInput = container.querySelector(
-				'input[type="file"]'
-			) as HTMLInputElement;
-
-			fireEvent.change( fileInput, {
-				target: {
-					files: [ file ],
-				},
-			} );
-
-			act( () => {
-				mockUploadMedia.mock.calls[ 0 ][ 0 ].onFileChange( [
-					attachment,
-				] );
-			} );
-
-			expect( URL.revokeObjectURL ).toHaveBeenCalledWith(
-				'blob:download-file'
-			);
-			expect( onChange ).not.toHaveBeenCalled();
-			expect(
-				screen.queryByText( /manual\.pdf/ )
-			).not.toBeInTheDocument();
-		}
-	);
-} );
diff --git a/packages/js/experimental-products-app/src/fields/downloadable/field.tsx b/packages/js/experimental-products-app/src/fields/downloadable/field.tsx
deleted file mode 100644
index 293ec1550c7..00000000000
--- a/packages/js/experimental-products-app/src/fields/downloadable/field.tsx
+++ /dev/null
@@ -1,253 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-import { FormFileUpload } from '@wordpress/components';
-import {
-	useCallback,
-	useEffect,
-	useMemo,
-	useRef,
-	useState,
-} from '@wordpress/element';
-import type { Field } from '@wordpress/dataviews';
-import { uploadMedia } from '@wordpress/media-utils';
-import type { Attachment } from '@wordpress/media-utils';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-
-import { ListItem } from '../components/list-item';
-
-import {
-	GenericThumbnail,
-	getLastPathFromUrl,
-	isImageFromLink,
-	isItemToUpload,
-	isUploadedItem,
-	type ItemToUpload,
-	type UploadedItem,
-} from './utils';
-
-const uploadingLabel = __( 'uploading…', 'woocommerce' );
-
-const getAttachmentTextValue = ( value: unknown ) => {
-	return typeof value === 'string' ? value : '';
-};
-
-const toUploadedDownload = (
-	attachment: Attachment,
-	fallbackFile: File
-): UploadedItem | undefined => {
-	const file = getAttachmentTextValue( attachment.url );
-
-	if ( ! file ) {
-		return undefined;
-	}
-
-	return {
-		id: attachment.id ? String( attachment.id ) : undefined,
-		file,
-		name:
-			getAttachmentTextValue( attachment.title ) ||
-			getAttachmentTextValue( attachment.alt ) ||
-			getAttachmentTextValue( attachment.caption ) ||
-			fallbackFile.name ||
-			getLastPathFromUrl( file ),
-	};
-};
-
-const fieldDefinition = {
-	type: 'boolean',
-	label: __( 'Downloadable', 'woocommerce' ),
-	enableSorting: false,
-	enableHiding: false,
-	filterBy: false,
-} satisfies Partial< Field< ProductEntityRecord > >;
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	...fieldDefinition,
-	type: 'boolean',
-	isVisible: ( item ) =>
-		item.downloadable === true && item.type !== 'variable',
-	getValue: ( { item } ) => item.downloadable,
-	Edit: ( { data, onChange } ) => {
-		const dataDownloads = useMemo(
-			() =>
-				( data.downloads ?? [] ) as Array<
-					UploadedItem | ItemToUpload
-				>,
-			[ data.downloads ]
-		);
-		const [ downloads, setDownloads ] = useState( dataDownloads );
-		const downloadsRef = useRef( dataDownloads );
-
-		useEffect( () => {
-			downloadsRef.current = dataDownloads;
-			setDownloads( dataDownloads );
-		}, [ dataDownloads ] );
-
-		const setVisibleDownloads = useCallback(
-			( nextDownloads: Array< UploadedItem | ItemToUpload > ) => {
-				downloadsRef.current = nextDownloads;
-				setDownloads( nextDownloads );
-			},
-			[]
-		);
-
-		const commitDownloads = useCallback(
-			( nextDownloads: Array< UploadedItem | ItemToUpload > ) => {
-				setVisibleDownloads( nextDownloads );
-				onChange( {
-					downloads: nextDownloads,
-				} );
-			},
-			[ onChange, setVisibleDownloads ]
-		);
-
-		const filesToUpload = downloads.filter( isItemToUpload );
-		const uploadedFiles = downloads.filter( isUploadedItem );
-
-		const handleRemoveDownload = useCallback(
-			( fileId: string | number ) => {
-				commitDownloads(
-					downloadsRef.current.filter(
-						( download ) => download.file !== fileId
-					)
-				);
-			},
-			[ commitDownloads ]
-		);
-
-		const handleAddDownload = useCallback(
-			( file: File ) => {
-				const objectUrl = URL.createObjectURL( file );
-				const placeholderDownload: ItemToUpload = {
-					file: objectUrl,
-					name: file.name,
-					type: file.type,
-				};
-
-				setVisibleDownloads( [
-					...downloadsRef.current,
-					placeholderDownload,
-				] );
-
-				uploadMedia( {
-					filesList: [ file ],
-					onFileChange( attachments ) {
-						const attachment = attachments[ 0 ] as
-							| Attachment
-							| undefined;
-
-						const uploadedDownload = attachment?.id
-							? toUploadedDownload( attachment, file )
-							: undefined;
-
-						if ( ! uploadedDownload ) {
-							URL.revokeObjectURL( objectUrl );
-							setVisibleDownloads(
-								downloadsRef.current.filter(
-									( download ) => download.file !== objectUrl
-								)
-							);
-							return;
-						}
-
-						const hasPlaceholder = downloadsRef.current.some(
-							( download ) => download.file === objectUrl
-						);
-
-						if ( ! hasPlaceholder ) {
-							URL.revokeObjectURL( objectUrl );
-							return;
-						}
-
-						const currentDownloads = downloadsRef.current.filter(
-							( download ) => download.file !== objectUrl
-						);
-						const isAlreadyAdded = currentDownloads.some(
-							( download ) =>
-								download.file === uploadedDownload.file
-						);
-
-						URL.revokeObjectURL( objectUrl );
-						commitDownloads(
-							isAlreadyAdded
-								? currentDownloads
-								: [ ...currentDownloads, uploadedDownload ]
-						);
-					},
-					onError() {
-						URL.revokeObjectURL( objectUrl );
-						setVisibleDownloads(
-							downloadsRef.current.filter(
-								( download ) => download.file !== objectUrl
-							)
-						);
-					},
-				} );
-			},
-			[ commitDownloads, setVisibleDownloads ]
-		);
-
-		const items = [
-			...uploadedFiles.map( ( file ) => {
-				const thumbnail = isImageFromLink( file.file ) ? (
-					file.file
-				) : (
-					<GenericThumbnail />
-				);
-				return {
-					id: file.file,
-					title: file.name,
-					thumbnail,
-					meta: getLastPathFromUrl( file.file ),
-					altText: file.name,
-				};
-			} ),
-			...filesToUpload.map( ( file ) => {
-				const thumbnail = file.type?.startsWith( 'image/' ) ? (
-					file.file
-				) : (
-					<GenericThumbnail />
-				);
-				return {
-					id: file.file,
-					title: `${ file.name } - ${ uploadingLabel }`,
-					thumbnail,
-					meta: getLastPathFromUrl( file.file ),
-					altText: file.name,
-				};
-			} ),
-		];
-
-		return (
-			<div className="woocommerce-fields-field__downloadable">
-				{ items.length > 0 && (
-					<ListItem
-						items={ items }
-						onRemove={ ( item ) => handleRemoveDownload( item.id ) }
-						showRemoveButton={ true }
-					/>
-				) }
-				<FormFileUpload
-					__next40pxDefaultSize
-					className="woocommerce-fields-field__downloadable-upload-button"
-					onChange={ ( event ) => {
-						const file = event?.currentTarget.files?.[ 0 ];
-						if ( file ) {
-							handleAddDownload( file );
-						}
-					} }
-				>
-					<span>
-						{ __( '+ Upload another file', 'woocommerce' ) }
-					</span>
-				</FormFileUpload>
-			</div>
-		);
-	},
-};
diff --git a/packages/js/experimental-products-app/src/fields/downloadable/style.scss b/packages/js/experimental-products-app/src/fields/downloadable/style.scss
deleted file mode 100644
index ca21a95ed5b..00000000000
--- a/packages/js/experimental-products-app/src/fields/downloadable/style.scss
+++ /dev/null
@@ -1,7 +0,0 @@
-.woocommerce-fields-field__downloadable {
-	// Override the WordPress button styles.
-	button.woocommerce-fields-field__downloadable-upload-button.components-button {
-		color: #3858e9;
-		box-shadow: none;
-	}
-}
diff --git a/packages/js/experimental-products-app/src/fields/downloadable/utils.tsx b/packages/js/experimental-products-app/src/fields/downloadable/utils.tsx
deleted file mode 100644
index c278ee5bbfd..00000000000
--- a/packages/js/experimental-products-app/src/fields/downloadable/utils.tsx
+++ /dev/null
@@ -1,51 +0,0 @@
-/**
- * External dependencies
- */
-import { Icon } from '@wordpress/ui';
-import { file as FileIcon } from '@wordpress/icons';
-/**
- * Internal dependencies
- */
-import { ProductEntityRecord } from '../types';
-
-export type UploadedItem = Omit<
-	ProductEntityRecord[ 'downloads' ][ 0 ],
-	'id'
-> & {
-	id?: string;
-};
-
-export type ItemToUpload = UploadedItem & { type: string };
-
-export const getLastPathFromUrl = ( url: string ) => {
-	try {
-		const urlObj = new URL( url );
-		return urlObj.pathname.split( '/' ).pop() ?? url;
-	} catch {
-		const parts = url.split( '/' );
-		return parts[ parts.length - 1 ];
-	}
-};
-
-export const GenericThumbnail = () => (
-	<Icon style={ { width: '100%', height: '100%' } } icon={ FileIcon } />
-);
-
-export const isImageFromLink = ( link: string ) => {
-	const normalizedLink = link.toLowerCase();
-	return [ '.jpg', '.jpeg', '.png', '.gif', '.bmp', '.webp', '.svg' ].some(
-		( extension ) => normalizedLink.endsWith( extension )
-	);
-};
-
-export const isItemToUpload = (
-	download: UploadedItem | ItemToUpload
-): download is ItemToUpload => {
-	return 'type' in download;
-};
-
-export const isUploadedItem = (
-	download: UploadedItem | ItemToUpload
-): download is UploadedItem => {
-	return ! ( 'type' in download );
-};
diff --git a/packages/js/experimental-products-app/src/fields/downloadable_count/field.tsx b/packages/js/experimental-products-app/src/fields/downloadable_count/field.tsx
deleted file mode 100644
index e61dc380921..00000000000
--- a/packages/js/experimental-products-app/src/fields/downloadable_count/field.tsx
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * External dependencies
- */
-import { __, _n, sprintf } from '@wordpress/i18n';
-
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-
-const fieldDefinition = {
-	enableSorting: false,
-	enableHiding: false,
-	filterBy: false,
-} satisfies Partial< Field< ProductEntityRecord > >;
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	...fieldDefinition,
-	render: ( { item } ) => {
-		if ( ! item.downloadable ) {
-			return <span>{ __( 'Not downloadable', 'woocommerce' ) }</span>;
-		}
-
-		const downloads = Array.isArray( item.downloads ) ? item.downloads : [];
-		const count = downloads.length;
-
-		if ( count === 0 ) {
-			return <span>{ __( 'No files', 'woocommerce' ) }</span>;
-		}
-
-		const label = sprintf(
-			/* translators: %d: number of downloadable files */
-			_n( '%d file', '%d files', count, 'woocommerce' ),
-			count
-		);
-
-		return <span>{ label }</span>;
-	},
-};
diff --git a/packages/js/experimental-products-app/src/fields/external_url/field.tsx b/packages/js/experimental-products-app/src/fields/external_url/field.tsx
deleted file mode 100644
index ef6b95e76e7..00000000000
--- a/packages/js/experimental-products-app/src/fields/external_url/field.tsx
+++ /dev/null
@@ -1,27 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-
-const fieldDefinition = {
-	type: 'url',
-	label: __( 'External URL', 'woocommerce' ),
-	description: __(
-		'Add the affiliate link to the store where customers can buy this product.',
-		'woocommerce'
-	),
-	enableSorting: false,
-	enableHiding: false,
-	filterBy: false,
-} satisfies Partial< Field< ProductEntityRecord > >;
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	...fieldDefinition,
-};
diff --git a/packages/js/experimental-products-app/src/fields/featured/field.tsx b/packages/js/experimental-products-app/src/fields/featured/field.tsx
deleted file mode 100644
index 9ca09844fb6..00000000000
--- a/packages/js/experimental-products-app/src/fields/featured/field.tsx
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-
-const fieldDefinition = {
-	type: 'boolean',
-	label: __( 'Featured product', 'woocommerce' ),
-	enableSorting: false,
-	enableHiding: false,
-	filterBy: false,
-} satisfies Partial< Field< ProductEntityRecord > >;
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	...fieldDefinition,
-	type: 'boolean',
-	Edit: 'checkbox',
-	getValue: ( { item } ) => !! item.featured,
-	setValue: ( { value } ) => ( {
-		featured: !! value,
-	} ),
-};
diff --git a/packages/js/experimental-products-app/src/fields/global_unique_id/field.tsx b/packages/js/experimental-products-app/src/fields/global_unique_id/field.tsx
deleted file mode 100644
index 1aea8192671..00000000000
--- a/packages/js/experimental-products-app/src/fields/global_unique_id/field.tsx
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-
-const fieldDefinition = {
-	type: 'text',
-	label: __( 'GTIN, UPC, EAN, ISBN', 'woocommerce' ),
-	enableSorting: false,
-	filterBy: false,
-} satisfies Partial< Field< ProductEntityRecord > >;
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	...fieldDefinition,
-	getValue: ( { item } ) => item.global_unique_id ?? '',
-	render: ( { item } ) => {
-		const value = item.global_unique_id;
-
-		if ( ! value ) {
-			return <span>{ '—' }</span>;
-		}
-
-		return <span>{ value }</span>;
-	},
-};
diff --git a/packages/js/experimental-products-app/src/fields/grouped_products/field.tsx b/packages/js/experimental-products-app/src/fields/grouped_products/field.tsx
deleted file mode 100644
index 6b5a9fc4fe6..00000000000
--- a/packages/js/experimental-products-app/src/fields/grouped_products/field.tsx
+++ /dev/null
@@ -1,290 +0,0 @@
-/**
- * External dependencies
- */
-import { Combobox as BaseCombobox } from '@base-ui/react/combobox';
-import { Spinner } from '@wordpress/components';
-import { store as coreStore } from '@wordpress/core-data';
-import { resolveSelect } from '@wordpress/data';
-import type { DataFormControlProps, Field } from '@wordpress/dataviews';
-import { useEffect, useMemo, useRef, useState } from '@wordpress/element';
-import { decodeEntities } from '@wordpress/html-entities';
-import { __ } from '@wordpress/i18n';
-import type { Product } from '@woocommerce/data';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-import {
-	Combobox,
-	SearchableChipSelectControl,
-	type SearchableChipSelectItem,
-} from '../components/searchable-chip-select';
-
-const SEARCH_DEBOUNCE_MS = 300;
-const SEARCH_PER_PAGE = 20;
-
-type Item = SearchableChipSelectItem & {
-	image?: { src: string; alt: string };
-};
-
-function productToItem(
-	product: Pick< Product, 'id' | 'name' > & {
-		images?: { src: string; alt: string }[];
-	}
-): Item {
-	const thumbnail = product.images?.[ 0 ];
-	return {
-		value: product.id.toString(),
-		label:
-			decodeEntities( product.name ?? '' ) ||
-			__( '(Untitled product)', 'woocommerce' ),
-		image: thumbnail?.src
-			? { src: thumbnail.src, alt: thumbnail.alt ?? '' }
-			: undefined,
-	};
-}
-
-function GroupedProductsEdit( {
-	data,
-	field,
-	onChange,
-}: DataFormControlProps< ProductEntityRecord > ) {
-	const selectedIds = useMemo( () => {
-		const ids = data?.grouped_products;
-		return Array.isArray( ids ) ? ids : [];
-	}, [ data?.grouped_products ] );
-
-	const [ inputValue, setInputValue ] = useState( '' );
-	const [ selectedProducts, setSelectedProducts ] = useState< Item[] >( [] );
-	const [ suggestions, setSuggestions ] = useState< Item[] >( [] );
-	const [ isLoadingSelected, setIsLoadingSelected ] = useState( false );
-	const [ isSearching, setIsSearching ] = useState( false );
-	const searchRequestIdRef = useRef( 0 );
-
-	// Load full records for the currently selected ids so we can show their
-	// names and thumbnails in the chips.
-	useEffect( () => {
-		if ( selectedIds.length === 0 ) {
-			setSelectedProducts( [] );
-			return;
-		}
-
-		let cancelled = false;
-		setIsLoadingSelected( true );
-
-		void resolveSelect( coreStore )
-			.getEntityRecords( 'root', 'product', {
-				include: selectedIds,
-				per_page: selectedIds.length,
-			} )
-			.then( ( records: unknown ) => {
-				if ( cancelled || ! Array.isArray( records ) ) {
-					return;
-				}
-				const byId = new Map(
-					( records as Product[] ).map( ( p ) => [ p.id, p ] )
-				);
-				setSelectedProducts(
-					selectedIds
-						.map( ( id ) => byId.get( id ) )
-						.filter( ( p ): p is Product => p !== undefined )
-						.map( productToItem )
-				);
-			} )
-			.finally( () => {
-				if ( ! cancelled ) {
-					setIsLoadingSelected( false );
-				}
-			} );
-
-		return () => {
-			cancelled = true;
-		};
-	}, [ selectedIds ] );
-
-	// Browseable list of products in the dropdown. Empty input loads the
-	// first page of the catalog; typing debounces a server-side search.
-	useEffect( () => {
-		const query = inputValue.trim();
-
-		setIsSearching( true );
-		const requestId = ++searchRequestIdRef.current;
-
-		// Exclude only the current product itself; already-selected products
-		// stay in the dropdown so the chip-select can mark them as selected
-		// (checkmark + highlight), matching the categories treatment.
-		const excludeIds = data?.id ? [ data.id ] : [];
-
-		const queryParams: Record< string, unknown > = {
-			per_page: SEARCH_PER_PAGE,
-			orderby: 'title',
-			order: 'asc',
-		};
-		if ( excludeIds.length > 0 ) {
-			queryParams.exclude = excludeIds;
-		}
-		if ( query ) {
-			queryParams.search = query;
-		}
-
-		const delay = query ? SEARCH_DEBOUNCE_MS : 0;
-		const timer = window.setTimeout( () => {
-			void resolveSelect( coreStore )
-				.getEntityRecords( 'root', 'product', queryParams )
-				.then( ( records: unknown ) => {
-					if ( requestId !== searchRequestIdRef.current ) {
-						return;
-					}
-					setSuggestions(
-						Array.isArray( records )
-							? ( records as Product[] ).map( productToItem )
-							: []
-					);
-				} )
-				.finally( () => {
-					if ( requestId === searchRequestIdRef.current ) {
-						setIsSearching( false );
-					}
-				} );
-		}, delay );
-
-		return () => {
-			window.clearTimeout( timer );
-		};
-	}, [ inputValue, selectedIds, data?.id ] );
-
-	// Browseable catalog first, then
-	// selected products appended so the chips can resolve their labels.
-	const items = useMemo( () => {
-		const byValue = new Map< string, Item >();
-		for ( const item of suggestions ) {
-			byValue.set( item.value, item );
-		}
-		for ( const item of selectedProducts ) {
-			if ( ! byValue.has( item.value ) ) {
-				byValue.set( item.value, item );
-			}
-		}
-		return Array.from( byValue.values() );
-	}, [ selectedProducts, suggestions ] );
-
-	const value = useMemo( () => {
-		const byValue = new Map(
-			items.map( ( item ) => [ item.value, item ] )
-		);
-		return selectedIds
-			.map( ( id ) => byValue.get( id.toString() ) )
-			.filter( ( item ): item is Item => item !== undefined );
-	}, [ items, selectedIds ] );
-
-	const handleValueChange = ( newItems: Item[] ) => {
-		const newIds = newItems
-			.map( ( item ) => parseInt( item.value, 10 ) )
-			.filter( ( id ) => ! Number.isNaN( id ) );
-		onChange( { grouped_products: newIds } );
-	};
-
-	const emptyContent = isSearching ? (
-		<Spinner />
-	) : (
-		__( 'No products found.', 'woocommerce' )
-	);
-
-	return (
-		<SearchableChipSelectControl
-			label={ field.label }
-			description={ field.description }
-			items={ items }
-			value={ value }
-			onValueChange={ handleValueChange }
-			inputValue={ inputValue }
-			onInputValueChange={ setInputValue }
-			searchPlaceholder={ __( 'Search', 'woocommerce' ) }
-			disabled={ isLoadingSelected }
-			emptyContent={ emptyContent }
-			placeholderChip={
-				value.length === 0 ? field.placeholder : undefined
-			}
-			// Always server-side search.
-			filter={ null }
-			chipsContent={ ( selectedItems: Item[] ) =>
-				selectedItems.map( ( item ) => (
-					<Combobox.ChipWithRemove
-						key={ item.value }
-						prefix={
-							item.image?.src ? (
-								<img
-									src={ item.image.src }
-									alt={ item.image.alt ?? '' }
-									className="woocommerce-grouped-products-edit__chip-thumbnail"
-								/>
-							) : (
-								<span className="woocommerce-grouped-products-edit__chip-thumbnail woocommerce-grouped-products-edit__chip-thumbnail--empty" />
-							)
-						}
-					>
-						{ item.label }
-					</Combobox.ChipWithRemove>
-				) )
-			}
-		>
-			{ ( item: Item ) => (
-				<Combobox.Item
-					key={ item.value }
-					value={ item }
-					disabled={ item.disabled }
-				>
-					<div className="woocommerce-grouped-products-edit__option">
-						<span
-							className="woocommerce-grouped-products-edit__option-indicator"
-							aria-hidden="true"
-						>
-							<BaseCombobox.ItemIndicator>
-								<svg
-									width="16"
-									height="16"
-									viewBox="0 0 24 24"
-									fill="none"
-									xmlns="http://www.w3.org/2000/svg"
-								>
-									<path
-										d="M5 13l4 4L19 7"
-										stroke="currentColor"
-										strokeWidth="2"
-										strokeLinecap="round"
-										strokeLinejoin="round"
-									/>
-								</svg>
-							</BaseCombobox.ItemIndicator>
-						</span>
-						{ item.image?.src ? (
-							<img
-								src={ item.image.src }
-								alt={ item.image.alt ?? '' }
-								className="woocommerce-grouped-products-edit__option-thumbnail"
-							/>
-						) : (
-							<span className="woocommerce-grouped-products-edit__option-thumbnail woocommerce-grouped-products-edit__option-thumbnail--empty" />
-						) }
-						<span className="woocommerce-grouped-products-edit__option-label">
-							{ item.label }
-						</span>
-					</div>
-				</Combobox.Item>
-			) }
-		</SearchableChipSelectControl>
-	);
-}
-
-const fieldDefinition = {
-	label: __( 'Grouped products', 'woocommerce' ),
-	enableSorting: false,
-	enableHiding: false,
-	filterBy: false,
-} satisfies Partial< Field< ProductEntityRecord > >;
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	...fieldDefinition,
-	Edit: GroupedProductsEdit,
-};
diff --git a/packages/js/experimental-products-app/src/fields/grouped_products/style.scss b/packages/js/experimental-products-app/src/fields/grouped_products/style.scss
deleted file mode 100644
index e70d64bc1d9..00000000000
--- a/packages/js/experimental-products-app/src/fields/grouped_products/style.scss
+++ /dev/null
@@ -1,54 +0,0 @@
-.woocommerce-grouped-products-edit {
-	&__chip-thumbnail {
-		width: 19px;
-		height: 19px;
-		border-radius: 50%;
-		object-fit: cover;
-		margin-left: 1px;
-
-		&--empty {
-			background-color: var(--wp-components-color-gray-100);
-		}
-	}
-
-	&__option {
-		display: flex;
-		align-items: center;
-		gap: 12px;
-		width: 100%;
-		// Override the base searchable-chip-select rule that bolds selected
-		// items; grouped products should keep regular weight across all rows.
-		font-weight: var(--wpds-typography-font-weight-regular, 400);
-	}
-
-	// Always-present placeholder that reserves space for the checkmark, so the
-	// thumbnail / label columns stay aligned whether or not the row is
-	// selected. base-ui's <ItemIndicator> only renders its DOM when selected,
-	// so the placeholder wrapper handles the slot layout.
-	&__option-indicator {
-		display: inline-flex;
-		flex-shrink: 0;
-		align-items: center;
-		justify-content: center;
-		width: 16px;
-		height: 16px;
-		color: var(--wp-components-color-foreground, #1e1e1e);
-	}
-
-	&__option-thumbnail {
-		width: 32px;
-		height: 32px;
-		flex-shrink: 0;
-		border-radius: 4px;
-		object-fit: cover;
-		background-color: var(--wp-components-color-gray-100);
-	}
-
-	&__option-label {
-		flex: 1 1 auto;
-		min-width: 0;
-		overflow: hidden;
-		text-overflow: ellipsis;
-		white-space: nowrap;
-	}
-}
diff --git a/packages/js/experimental-products-app/src/fields/height/field.tsx b/packages/js/experimental-products-app/src/fields/height/field.tsx
deleted file mode 100644
index dca06c38211..00000000000
--- a/packages/js/experimental-products-app/src/fields/height/field.tsx
+++ /dev/null
@@ -1,26 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-
-import { createDimensionField } from '../components/dimension';
-
-const fieldDefinition = {
-	type: 'text',
-	label: __( 'Height', 'woocommerce' ),
-	enableSorting: false,
-	enableHiding: false,
-	filterBy: false,
-} satisfies Partial< Field< ProductEntityRecord > >;
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	...fieldDefinition,
-	...createDimensionField( 'height' ),
-};
diff --git a/packages/js/experimental-products-app/src/fields/images/field.test.tsx b/packages/js/experimental-products-app/src/fields/images/field.test.tsx
deleted file mode 100644
index 529640cd1b3..00000000000
--- a/packages/js/experimental-products-app/src/fields/images/field.test.tsx
+++ /dev/null
@@ -1,262 +0,0 @@
-/**
- * External dependencies
- */
-import { act, fireEvent, render, screen } from '@testing-library/react';
-import type { DataFormControlProps } from '@wordpress/dataviews';
-import React from 'react';
-
-type MockMediaUploadProps = {
-	allowedTypes?: string[];
-	multiple?: boolean | string;
-	onSelect: ( attachments: unknown ) => void;
-	render: ( args: { open: () => void } ) => React.ReactNode;
-	title?: string;
-	value?: number[];
-};
-
-const mockOpenMediaUploadModal = jest.fn();
-const mockMediaUpload = jest.fn( ( props: MockMediaUploadProps ) =>
-	props.render( { open: mockOpenMediaUploadModal } )
-);
-
-jest.mock( '@wordpress/media-utils', () => ( {
-	MediaUpload: ( props: MockMediaUploadProps ) => mockMediaUpload( props ),
-} ) );
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-
-import { fieldExtensions } from './field';
-
-jest.mock( '@dnd-kit/react', () => ( {
-	DragDropProvider: ( { children }: { children: React.ReactNode } ) =>
-		children,
-} ) );
-
-jest.mock( '@dnd-kit/react/sortable', () => ( {
-	isSortable: () => false,
-	useSortable: () => ( {
-		ref: () => undefined,
-		handleRef: () => undefined,
-		isDragging: false,
-	} ),
-} ) );
-
-describe( 'images field', () => {
-	const buildProduct = (
-		overrides: Partial< ProductEntityRecord > = {}
-	): ProductEntityRecord =>
-		( {
-			id: 12,
-			name: 'Beanie',
-			images: [],
-			...overrides,
-		} ) as ProductEntityRecord;
-
-	const renderImagesEdit = (
-		data: ProductEntityRecord,
-		onChange = jest.fn()
-	) => {
-		if ( ! fieldExtensions.Edit ) {
-			throw new Error( 'images edit not implemented' );
-		}
-
-		const Edit = fieldExtensions.Edit as React.ComponentType<
-			DataFormControlProps< ProductEntityRecord >
-		>;
-
-		render(
-			<Edit
-				data={ data }
-				field={
-					{
-						...fieldExtensions,
-						id: 'images',
-						label: 'Images',
-					} as DataFormControlProps< ProductEntityRecord >[ 'field' ]
-				}
-				onChange={ onChange }
-			/>
-		);
-
-		return onChange;
-	};
-
-	afterEach( () => {
-		jest.clearAllMocks();
-	} );
-
-	it( 'replaces the current images with the selected media attachments', () => {
-		const attachments = [
-			{
-				id: 34,
-				url: 'new-image.jpg',
-				alt: 'New image',
-				title: 'New image title',
-				sizes: {
-					thumbnail: {
-						url: 'new-image-thumbnail.jpg',
-					},
-				},
-			},
-		];
-		const onChange = jest.fn();
-
-		renderImagesEdit(
-			buildProduct( {
-				images: [
-					{
-						id: 15,
-						src: 'old-image.jpg',
-						alt: 'Old image',
-					} as ProductEntityRecord[ 'images' ][ number ],
-				],
-			} ),
-			onChange
-		);
-
-		expect( mockMediaUpload ).toHaveBeenCalledWith(
-			expect.objectContaining( {
-				allowedTypes: [ 'image' ],
-				multiple: 'add',
-				title: 'Add images',
-				value: [ 15 ],
-			} )
-		);
-
-		fireEvent.click(
-			screen.getByRole( 'button', {
-				name: 'Add images',
-			} )
-		);
-		expect( mockOpenMediaUploadModal ).toHaveBeenCalled();
-
-		act( () => {
-			mockMediaUpload.mock.calls[ 0 ][ 0 ].onSelect( attachments );
-		} );
-
-		expect(
-			screen.getByRole( 'img', {
-				name: 'New image',
-			} )
-		).toBeInTheDocument();
-		expect(
-			screen.queryByRole( 'img', {
-				name: 'Old image',
-			} )
-		).not.toBeInTheDocument();
-		expect( onChange ).toHaveBeenCalledWith( {
-			images: [
-				expect.objectContaining( {
-					id: 34,
-					src: 'new-image.jpg',
-					alt: 'New image',
-					name: 'New image title',
-					thumbnail: 'new-image-thumbnail.jpg',
-				} ),
-			],
-		} );
-	} );
-
-	it( 'limits variations to a single selected image', () => {
-		const attachments = [
-			{
-				id: 34,
-				url: 'new-variation-image.jpg',
-				alt: 'New variation image',
-				title: 'New variation image title',
-				sizes: {
-					thumbnail: {
-						url: 'new-variation-image-thumbnail.jpg',
-					},
-				},
-			},
-			{
-				id: 35,
-				url: 'extra-variation-image.jpg',
-				alt: 'Extra variation image',
-				title: 'Extra variation image title',
-			},
-		];
-		const onChange = jest.fn();
-
-		renderImagesEdit(
-			buildProduct( {
-				type: 'variation',
-				images: [
-					{
-						id: 15,
-						src: 'old-variation-image.jpg',
-						alt: 'Old variation image',
-					} as ProductEntityRecord[ 'images' ][ number ],
-					{
-						id: 16,
-						src: 'second-variation-image.jpg',
-						alt: 'Second variation image',
-					} as ProductEntityRecord[ 'images' ][ number ],
-				],
-			} ),
-			onChange
-		);
-
-		expect( mockMediaUpload ).toHaveBeenCalledWith(
-			expect.objectContaining( {
-				allowedTypes: [ 'image' ],
-				multiple: false,
-				title: 'Add image',
-				value: [ 15 ],
-			} )
-		);
-
-		expect(
-			screen.getByRole( 'img', {
-				name: 'Old variation image',
-			} )
-		).toBeInTheDocument();
-		expect(
-			screen.queryByRole( 'img', {
-				name: 'Second variation image',
-			} )
-		).not.toBeInTheDocument();
-		expect(
-			screen.queryByRole( 'button', {
-				name: 'Drag to reorder',
-			} )
-		).not.toBeInTheDocument();
-
-		fireEvent.click(
-			screen.getByRole( 'button', {
-				name: 'Add image',
-			} )
-		);
-		expect( mockOpenMediaUploadModal ).toHaveBeenCalled();
-
-		act( () => {
-			mockMediaUpload.mock.calls[ 0 ][ 0 ].onSelect( attachments );
-		} );
-
-		expect(
-			screen.getByRole( 'img', {
-				name: 'New variation image',
-			} )
-		).toBeInTheDocument();
-		expect(
-			screen.queryByRole( 'img', {
-				name: 'Extra variation image',
-			} )
-		).not.toBeInTheDocument();
-		expect( onChange ).toHaveBeenCalledWith( {
-			images: [
-				expect.objectContaining( {
-					id: 34,
-					src: 'new-variation-image.jpg',
-					alt: 'New variation image',
-					name: 'New variation image title',
-					thumbnail: 'new-variation-image-thumbnail.jpg',
-				} ),
-			],
-		} );
-	} );
-} );
diff --git a/packages/js/experimental-products-app/src/fields/images/field.tsx b/packages/js/experimental-products-app/src/fields/images/field.tsx
deleted file mode 100644
index 6799747622e..00000000000
--- a/packages/js/experimental-products-app/src/fields/images/field.tsx
+++ /dev/null
@@ -1,295 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-import { useMemo, useCallback, useEffect, useState } from '@wordpress/element';
-import { Fieldset, IconButton } from '@wordpress/ui';
-import clsx from 'clsx';
-import type { Field } from '@wordpress/dataviews';
-import { upload, closeSmall, dragHandle } from '@wordpress/icons';
-import { MediaUpload } from '@wordpress/media-utils';
-import { DragDropProvider, type DragEndEvent } from '@dnd-kit/react';
-import { isSortable, useSortable } from '@dnd-kit/react/sortable';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-
-type Attachment = {
-	id: number;
-	url?: string;
-	alt?: string;
-	title?: string;
-	date?: string;
-	date_gmt?: string;
-	modified?: string;
-	modified_gmt?: string;
-	sizes?: Record< string, { source_url?: string; url?: string } >;
-	media_details?: {
-		sizes?: Record< string, { source_url?: string; url?: string } >;
-	};
-};
-
-const toProductImage = (
-	att: Attachment
-): ProductEntityRecord[ 'images' ][ number ] => {
-	const sizes = att.media_details?.sizes || att.sizes;
-	const thumbnailUrl =
-		sizes?.woocommerce_thumbnail?.source_url ||
-		sizes?.woocommerce_thumbnail?.url ||
-		sizes?.thumbnail?.source_url ||
-		sizes?.thumbnail?.url ||
-		'';
-
-	return {
-		id: att.id,
-		src: att.url || '',
-		alt: att.alt || '',
-		name: att.title || '',
-		thumbnail: thumbnailUrl,
-		date_created: att.date || '',
-		date_created_gmt: att.date_gmt || '',
-		date_modified: att.modified || '',
-		date_modified_gmt: att.modified_gmt || '',
-	};
-};
-
-interface SortableImageProps {
-	image: ProductEntityRecord[ 'images' ][ number ];
-	index: number;
-	alt: string;
-	onRemove: () => void;
-	showDragHandle: boolean;
-}
-
-function SortableImage( {
-	image,
-	index,
-	alt,
-	onRemove,
-	showDragHandle,
-}: SortableImageProps ) {
-	const previewSrc = image.thumbnail || image.src;
-	const { ref, handleRef, isDragging } = useSortable( {
-		id: image.id,
-		index,
-		disabled: ! showDragHandle,
-	} );
-
-	const stopPropagation = useCallback( ( event: React.SyntheticEvent ) => {
-		event.stopPropagation();
-	}, [] );
-
-	return (
-		<div
-			ref={ ref }
-			role="group"
-			aria-label={ image.name }
-			className={ clsx( 'woocommerce-fields-controls__image-wrapper', {
-				'is-dragging': isDragging,
-			} ) }
-		>
-			<img className="product-image" src={ previewSrc } alt={ alt } />
-			<div className="woocommerce-fields-controls__image-overlay" />
-			{ showDragHandle && (
-				<div className="woocommerce-fields-controls__image-drag-handle-container">
-					<IconButton
-						ref={ handleRef }
-						icon={ dragHandle }
-						label={ __( 'Drag to reorder', 'woocommerce' ) }
-						className="woocommerce-fields-controls__image-drag-handle"
-						variant="minimal"
-						size="small"
-						tone="neutral"
-					/>
-				</div>
-			) }
-			{ ! isDragging && (
-				<IconButton
-					icon={ closeSmall }
-					label={ __( 'Remove image', 'woocommerce' ) }
-					onClick={ onRemove }
-					onPointerDown={ stopPropagation }
-					onKeyDown={ stopPropagation }
-					className="woocommerce-fields-controls__image-remove-button"
-					variant="minimal"
-					size="small"
-					tone="neutral"
-				/>
-			) }
-		</div>
-	);
-}
-
-const fieldDefinition = {
-	label: __( 'Images', 'woocommerce' ),
-	enableSorting: false,
-	filterBy: false,
-} satisfies Partial< Field< ProductEntityRecord > >;
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	...fieldDefinition,
-	render: ( { item } ) => {
-		const featuredImage = item.images?.at( 0 );
-
-		if ( ! featuredImage ) {
-			return null;
-		}
-
-		return (
-			<img
-				className="product-image"
-				src={ featuredImage.src }
-				alt={ featuredImage.alt || featuredImage.name || item.name }
-				style={ {
-					objectFit: 'cover',
-					borderRadius: 8,
-				} }
-			/>
-		);
-	},
-	Edit: ( { data, onChange } ) => {
-		const isVariation = data.type === 'variation';
-		const dataImages = useMemo( () => {
-			const nextImages = data.images ?? [];
-
-			return isVariation ? nextImages.slice( 0, 1 ) : nextImages;
-		}, [ data.images, isVariation ] );
-		const [ images, setImages ] = useState( dataImages );
-		const uploadLabel = isVariation
-			? __( 'Add image', 'woocommerce' )
-			: __( 'Add images', 'woocommerce' );
-
-		useEffect( () => {
-			setImages( dataImages );
-		}, [ dataImages ] );
-
-		const commitImages = useCallback(
-			( nextImages: ProductEntityRecord[ 'images' ] ) => {
-				setImages( nextImages );
-				onChange( {
-					images: nextImages,
-				} );
-			},
-			[ onChange ]
-		);
-
-		const handleSelect = useCallback(
-			( selection: Attachment | Attachment[] ) => {
-				const attachments = Array.isArray( selection )
-					? selection
-					: [ selection ];
-				const mappedImages = attachments.map( toProductImage );
-
-				commitImages(
-					isVariation ? mappedImages.slice( 0, 1 ) : mappedImages
-				);
-			},
-			[ commitImages, isVariation ]
-		);
-
-		const handleRemoveImage = useCallback(
-			( imageToRemove: ProductEntityRecord[ 'images' ][ number ] ) => {
-				commitImages(
-					images.filter( ( image ) => image.id !== imageToRemove.id )
-				);
-			},
-			[ commitImages, images ]
-		);
-
-		const handleDragEnd = useCallback(
-			( event: DragEndEvent ) => {
-				if ( event.canceled ) {
-					return;
-				}
-
-				const { source } = event.operation;
-
-				if ( ! isSortable( source ) ) {
-					return;
-				}
-
-				const { initialIndex, index } = source;
-
-				if (
-					initialIndex === index ||
-					initialIndex < 0 ||
-					index < 0 ||
-					initialIndex >= images.length ||
-					index >= images.length
-				) {
-					return;
-				}
-
-				const reorderedImages = [ ...images ];
-				const [ movedImage ] = reorderedImages.splice(
-					initialIndex,
-					1
-				);
-				reorderedImages.splice( index, 0, movedImage );
-
-				commitImages( reorderedImages );
-			},
-			[ commitImages, images ]
-		);
-
-		const removeCallbacks = useMemo( () => {
-			const callbacks = new Map< number | string, () => void >();
-			images.forEach( ( image ) => {
-				callbacks.set( image.id, () => handleRemoveImage( image ) );
-			} );
-			return callbacks;
-		}, [ images, handleRemoveImage ] );
-
-		return (
-			<Fieldset.Root>
-				<DragDropProvider onDragEnd={ handleDragEnd }>
-					<div className="woocommerce-fields-control__featured-image">
-						<div className="woocommerce-fields-controls__featured-image-uploaded-images">
-							{ images.map( ( image, index ) => {
-								const onRemove = removeCallbacks.get(
-									image.id
-								);
-
-								if ( ! onRemove ) {
-									return null;
-								}
-
-								return (
-									<SortableImage
-										key={ image.id }
-										image={ image }
-										index={ index }
-										alt={ image.alt || data.name }
-										onRemove={ onRemove }
-										showDragHandle={
-											! isVariation && images.length > 1
-										}
-									/>
-								);
-							} ) }
-						</div>
-						<div className="woocommerce-fields-control__featured-image-actions">
-							<MediaUpload
-								allowedTypes={ [ 'image' ] }
-								multiple={ isVariation ? false : 'add' }
-								onSelect={ handleSelect }
-								title={ uploadLabel }
-								value={ images.map( ( image ) => image.id ) }
-								render={ ( { open }: { open: () => void } ) => (
-									<IconButton
-										variant="minimal"
-										icon={ upload }
-										label={ uploadLabel }
-										onClick={ open }
-									/>
-								) }
-							/>
-						</div>
-					</div>
-				</DragDropProvider>
-			</Fieldset.Root>
-		);
-	},
-};
diff --git a/packages/js/experimental-products-app/src/fields/images/style.scss b/packages/js/experimental-products-app/src/fields/images/style.scss
deleted file mode 100644
index 47d84ad7992..00000000000
--- a/packages/js/experimental-products-app/src/fields/images/style.scss
+++ /dev/null
@@ -1,151 +0,0 @@
-.woocommerce-fields-control__images-fieldset {
-	gap: 8px;
-}
-
-.woocommerce-fields-control__featured-image {
-	display: grid;
-	gap: 8px;
-	grid-template-columns: repeat( auto-fill, 72px );
-	grid-auto-rows: 72px;
-}
-
-.woocommerce-fields-controls__featured-image-uploaded-images {
-	display: contents;
-}
-
-.woocommerce-fields-controls__image-wrapper {
-	position: relative;
-	width: 72px;
-	height: 72px;
-	border-radius: var( --wpds-border-radius-lg );
-	display: flex;
-	box-sizing: border-box;
-	transform-origin: 0 0;
-	touch-action: manipulation;
-
-	&:has( .woocommerce-fields-controls__image-drag-handle-container ) {
-		cursor: grab;
-
-		&:active {
-			cursor: grabbing;
-		}
-	}
-}
-
-.woocommerce-fields-controls__image-wrapper.is-dragging {
-	transform-origin: 50% 50%;
-
-	.is-keyboard-dragging & {
-		transform-origin: 0 0;
-	}
-
-	.woocommerce-fields-controls__image-drag-handle-container {
-		opacity: 1;
-		z-index: 2;
-	}
-
-	.woocommerce-fields-controls__image-overlay {
-		opacity: 1;
-		background-color: rgba( 0, 0, 0, 0.5 );
-	}
-}
-
-.woocommerce-fields-controls__image-overlay {
-	position: absolute;
-	top: 0;
-	left: 0;
-	right: 0;
-	bottom: 0;
-	background-color: rgba( 0, 0, 0, 0.3 );
-	border-radius: var( --wpds-border-radius-lg );
-	z-index: 1;
-	opacity: 0;
-	transition: opacity 0.2s ease-in-out;
-	pointer-events: none;
-}
-
-.woocommerce-fields-controls__image-drag-handle-container {
-	position: absolute;
-	top: 50%;
-	left: 50%;
-	transform: translate( -50%, -50% );
-	display: flex;
-	align-items: center;
-	justify-content: center;
-	opacity: 0;
-	transition: opacity 0.2s ease-in-out;
-	z-index: 1;
-}
-
-.woocommerce-fields-controls__image-drag-handle {
-	cursor: grab;
-	color: #fff;
-	border-radius: 3px;
-	background: transparent;
-
-	svg {
-		fill: #fff;
-	}
-
-	&:active {
-		cursor: grabbing;
-	}
-
-	&:hover {
-		border: none;
-	}
-}
-
-.woocommerce-fields-controls__image-remove-button {
-	position: absolute;
-	top: calc( var( --wpds-dimension-base ) );
-	right: calc( var( --wpds-dimension-base ) );
-	border-radius: 50%;
-	border: 1px solid var( --wpds-color-stroke-interactive-neutral );
-	background-color: var( --wpds-color-bg-surface-neutral-strong );
-	overflow: hidden;
-	width: $button-size-small;
-	height: $button-size-small;
-	opacity: 0;
-	transition: opacity 0.2s ease-in-out;
-	z-index: 2;
-}
-
-.woocommerce-fields-controls__image-wrapper {
-	&:hover,
-	&:focus-within {
-		.woocommerce-fields-controls__image-drag-handle-container,
-		.woocommerce-fields-controls__image-remove-button {
-			opacity: 1;
-		}
-
-		.woocommerce-fields-controls__image-overlay {
-			opacity: 1;
-		}
-	}
-}
-
-.woocommerce-fields-controls__image-wrapper img {
-	position: relative;
-	object-fit: cover;
-	border-radius: var( --wpds-border-radius-lg );
-	width: 100%;
-	height: 100%;
-	pointer-events: none;
-	-webkit-user-drag: none;
-	user-drag: none;
-}
-
-.woocommerce-fields-control__featured-image-actions {
-	width: 72px;
-	height: 72px;
-	border: 1px dashed var( --wpds-color-stroke-interactive-neutral );
-	border-radius: var( --wpds-border-radius-lg );
-
-	button {
-		width: 100%;
-		height: 100%;
-		cursor: pointer;
-		border-radius: var( --wpds-border-radius-lg );
-	}
-}
diff --git a/packages/js/experimental-products-app/src/fields/images_count/field.test.tsx b/packages/js/experimental-products-app/src/fields/images_count/field.test.tsx
deleted file mode 100644
index 9d52d62788c..00000000000
--- a/packages/js/experimental-products-app/src/fields/images_count/field.test.tsx
+++ /dev/null
@@ -1,45 +0,0 @@
-/**
- * External dependencies
- */
-import { render, screen } from '@testing-library/react';
-
-import React from 'react';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-
-import { fieldExtensions } from './field';
-
-const renderSummary = ( item: Partial< ProductEntityRecord > ) => {
-	if ( ! fieldExtensions.render ) {
-		throw new Error( 'images_count render not implemented' );
-	}
-
-	const Render = fieldExtensions.render as React.ComponentType< {
-		item: Partial< ProductEntityRecord >;
-	} >;
-
-	return render( React.createElement( Render, { item } ) );
-};
-
-describe( 'images_count field', () => {
-	it( 'renders the total number of images when present', () => {
-		renderSummary( {
-			images: [
-				{ id: 1 } as ProductEntityRecord[ 'images' ][ number ],
-				{ id: 2 } as ProductEntityRecord[ 'images' ][ number ],
-				{ id: 3 } as ProductEntityRecord[ 'images' ][ number ],
-			],
-		} );
-
-		expect( screen.getByText( '3' ) ).toBeInTheDocument();
-	} );
-
-	it( 'renders nothing when there are no images', () => {
-		const { container } = renderSummary( { images: [] } );
-
-		expect( container ).toBeEmptyDOMElement();
-	} );
-} );
diff --git a/packages/js/experimental-products-app/src/fields/images_count/field.tsx b/packages/js/experimental-products-app/src/fields/images_count/field.tsx
deleted file mode 100644
index 24e42e7ad5e..00000000000
--- a/packages/js/experimental-products-app/src/fields/images_count/field.tsx
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * External dependencies
- */
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-
-const fieldDefinition = {
-	enableSorting: false,
-	enableHiding: false,
-	filterBy: false,
-} satisfies Partial< Field< ProductEntityRecord > >;
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	...fieldDefinition,
-	render: ( { item } ) => {
-		const images = Array.isArray( item.images ) ? item.images : [];
-		const count = images.length;
-
-		if ( count === 0 ) {
-			return null;
-		}
-
-		return <span>{ count }</span>;
-	},
-};
diff --git a/packages/js/experimental-products-app/src/fields/inventory_summary/field.tsx b/packages/js/experimental-products-app/src/fields/inventory_summary/field.tsx
deleted file mode 100644
index 585f8229297..00000000000
--- a/packages/js/experimental-products-app/src/fields/inventory_summary/field.tsx
+++ /dev/null
@@ -1,61 +0,0 @@
-/**
- * External dependencies
- */
-import { __, sprintf } from '@wordpress/i18n';
-
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-
-const fieldDefinition = {
-	enableSorting: false,
-	enableHiding: false,
-	filterBy: false,
-	elements: [
-		{ label: __( 'In stock', 'woocommerce' ), value: 'instock' },
-		{ label: __( 'Out of stock', 'woocommerce' ), value: 'outofstock' },
-		{ label: __( 'On backorder', 'woocommerce' ), value: 'onbackorder' },
-	],
-} satisfies Partial< Field< ProductEntityRecord > >;
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	...fieldDefinition,
-	render: ( { item, field } ) => {
-		const status = item.stock_status?.toLowerCase?.() ?? 'instock';
-		const match = field.elements?.find(
-			( element: { value: string } ) => element.value === status
-		);
-
-		if ( item.manage_stock ) {
-			if (
-				! Number.isFinite( item.stock_quantity ) ||
-				item.stock_quantity === null ||
-				item.stock_quantity === undefined
-			) {
-				return (
-					<div className="woocommerce-fields-field__inventory-summary">
-						{ __( 'No stock quantity set', 'woocommerce' ) }
-					</div>
-				);
-			}
-
-			return (
-				<div className="woocommerce-fields-field__inventory-summary">
-					{ sprintf(
-						/* translators: %d: stock quantity */
-						__( '%d available in stock', 'woocommerce' ),
-						item.stock_quantity
-					) }
-				</div>
-			);
-		}
-		return (
-			<div className="woocommerce-fields-field__inventory-summary">
-				{ match?.label ?? item.stock_status }
-			</div>
-		);
-	},
-};
diff --git a/packages/js/experimental-products-app/src/fields/length/field.tsx b/packages/js/experimental-products-app/src/fields/length/field.tsx
deleted file mode 100644
index 7cba4ce2c45..00000000000
--- a/packages/js/experimental-products-app/src/fields/length/field.tsx
+++ /dev/null
@@ -1,26 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-
-import { createDimensionField } from '../components/dimension';
-
-const fieldDefinition = {
-	type: 'text',
-	label: __( 'Length', 'woocommerce' ),
-	enableSorting: false,
-	enableHiding: false,
-	filterBy: false,
-} satisfies Partial< Field< ProductEntityRecord > >;
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	...fieldDefinition,
-	...createDimensionField( 'length' ),
-};
diff --git a/packages/js/experimental-products-app/src/fields/linked_products_count/field.tsx b/packages/js/experimental-products-app/src/fields/linked_products_count/field.tsx
deleted file mode 100644
index 61eeba18989..00000000000
--- a/packages/js/experimental-products-app/src/fields/linked_products_count/field.tsx
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * External dependencies
- */
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-
-const fieldDefinition = {
-	enableSorting: false,
-	enableHiding: false,
-	filterBy: false,
-} satisfies Partial< Field< ProductEntityRecord > >;
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	...fieldDefinition,
-	render: ( { item } ) => {
-		const upsellCount = item.upsell_ids?.length || 0;
-		const crossSellCount = item.cross_sell_ids?.length || 0;
-		const total = upsellCount + crossSellCount;
-		if ( total === 0 ) {
-			return null;
-		}
-		return <span>{ total }</span>;
-	},
-};
diff --git a/packages/js/experimental-products-app/src/fields/manage_stock/field.tsx b/packages/js/experimental-products-app/src/fields/manage_stock/field.tsx
deleted file mode 100644
index 7957550a2e3..00000000000
--- a/packages/js/experimental-products-app/src/fields/manage_stock/field.tsx
+++ /dev/null
@@ -1,25 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-
-const fieldDefinition = {
-	type: 'boolean',
-	label: __( 'Track inventory', 'woocommerce' ),
-	enableSorting: false,
-	enableHiding: false,
-	filterBy: false,
-} satisfies Partial< Field< ProductEntityRecord > >;
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	...fieldDefinition,
-	type: 'boolean',
-	Edit: 'checkbox',
-};
diff --git a/packages/js/experimental-products-app/src/fields/name/field.tsx b/packages/js/experimental-products-app/src/fields/name/field.tsx
deleted file mode 100644
index d1d125fa752..00000000000
--- a/packages/js/experimental-products-app/src/fields/name/field.tsx
+++ /dev/null
@@ -1,27 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import { type ProductEntityRecord } from '../types';
-
-const fieldDefinition = {
-	type: 'text',
-	label: __( 'Name', 'woocommerce' ),
-	enableSorting: false,
-	filterBy: false,
-	enableHiding: false,
-} satisfies Partial< Field< ProductEntityRecord > >;
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	...fieldDefinition,
-	header: <span>{ __( 'Product', 'woocommerce' ) }</span>,
-	isValid: {
-		required: true,
-	},
-};
diff --git a/packages/js/experimental-products-app/src/fields/on_sale/field.tsx b/packages/js/experimental-products-app/src/fields/on_sale/field.tsx
deleted file mode 100644
index ec4b96b8590..00000000000
--- a/packages/js/experimental-products-app/src/fields/on_sale/field.tsx
+++ /dev/null
@@ -1,35 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-
-const fieldDefinition = {
-	type: 'boolean',
-	label: __( 'On sale', 'woocommerce' ),
-	enableSorting: false,
-	enableHiding: false,
-	filterBy: false,
-} satisfies Partial< Field< ProductEntityRecord > >;
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	...fieldDefinition,
-	type: 'boolean',
-	Edit: 'toggle',
-	getValue: ( { item } ) => !! item.on_sale || !! item.sale_price,
-	setValue: ( { value } ) =>
-		value
-			? { on_sale: true }
-			: {
-					on_sale: false,
-					sale_price: '',
-					date_on_sale_from: null,
-					date_on_sale_to: null,
-			  },
-};
diff --git a/packages/js/experimental-products-app/src/fields/organization_summary/field.tsx b/packages/js/experimental-products-app/src/fields/organization_summary/field.tsx
deleted file mode 100644
index b5831ce1ef3..00000000000
--- a/packages/js/experimental-products-app/src/fields/organization_summary/field.tsx
+++ /dev/null
@@ -1,77 +0,0 @@
-/**
- * External dependencies
- */
-import { useSelect } from '@wordpress/data';
-
-import { store as coreStore, type Term } from '@wordpress/core-data';
-
-import { decodeEntities } from '@wordpress/html-entities';
-
-import { useMemo } from '@wordpress/element';
-
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-
-const OrganizationSummary = ( { item }: { item: ProductEntityRecord } ) => {
-	const ids = useMemo(
-		() =>
-			( item.categories ?? [] )
-				.map( ( { id } ) => {
-					const numericId = Number( id );
-					return Number.isFinite( numericId ) ? numericId : null;
-				} )
-				.filter( ( idValue ): idValue is number => idValue !== null ),
-		[ item.categories ]
-	);
-	const terms = useSelect(
-		( select ) => {
-			if ( ids.length === 0 ) {
-				return [];
-			}
-			return (
-				select( coreStore ).getEntityRecords(
-					'taxonomy',
-					'product_cat',
-					{
-						include: ids,
-						per_page: ids.length,
-					}
-				) ?? []
-			);
-		},
-		[ ids ]
-	) as Term[];
-
-	if ( ! terms || terms.length === 0 ) {
-		return null;
-	}
-
-	const termNamesById = new Map(
-		terms.map( ( term ) => [ term.id, decodeEntities( term.name ) ] )
-	);
-
-	const orderedNames = ids
-		.map( ( termId ) => termNamesById.get( termId ) )
-		.filter( ( label ): label is string => Boolean( label ) );
-
-	if ( orderedNames.length === 0 ) {
-		return null;
-	}
-
-	return <span>{ orderedNames.join( ', ' ) }</span>;
-};
-
-const fieldDefinition = {
-	enableSorting: false,
-	enableHiding: false,
-	filterBy: false,
-} satisfies Partial< Field< ProductEntityRecord > >;
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	...fieldDefinition,
-	render: ( props ) => <OrganizationSummary { ...props } />,
-};
diff --git a/packages/js/experimental-products-app/src/fields/price/field.tsx b/packages/js/experimental-products-app/src/fields/price/field.tsx
deleted file mode 100644
index ea4e3da87a2..00000000000
--- a/packages/js/experimental-products-app/src/fields/price/field.tsx
+++ /dev/null
@@ -1,191 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-import { useCallback } from '@wordpress/element';
-import type { Field } from '@wordpress/dataviews';
-import { InputControl, Stack, InputLayout } from '@wordpress/ui';
-
-/**
- * Internal dependencies
- */
-
-import { formatCurrency, getCurrencyObject } from '../utils/currency';
-
-import type { ProductEntityRecord } from '../types';
-
-import { toNumberOrNaN } from './utils';
-
-type PriceRange = [ number | string, number | string ];
-type PriceFilterData = Omit< ProductEntityRecord, 'price' > & {
-	price: string | PriceRange;
-};
-
-const isLeftPositioned = ( position: string ) =>
-	position === 'left' || position === 'left_space';
-
-const isRightPositioned = ( position: string ) =>
-	position === 'right' || position === 'right_space';
-
-const CurrencyPrefixSlot = () => {
-	const currency = getCurrencyObject();
-
-	if ( ! isLeftPositioned( currency.symbolPosition ) ) {
-		return null;
-	}
-
-	return (
-		<InputLayout.Slot padding="minimal">
-			{ currency.symbol }
-		</InputLayout.Slot>
-	);
-};
-
-const CurrencySuffixSlot = () => {
-	const currency = getCurrencyObject();
-
-	if ( ! isRightPositioned( currency.symbolPosition ) ) {
-		return null;
-	}
-
-	return (
-		<InputLayout.Slot padding="minimal">
-			{ currency.symbol }
-		</InputLayout.Slot>
-	);
-};
-
-const fieldDefinition = {
-	label: __( 'Price', 'woocommerce' ),
-	enableSorting: false,
-	filterBy: {
-		operators: [ 'is', 'between', 'greaterThanOrEqual', 'lessThanOrEqual' ],
-	},
-} satisfies Partial< Field< PriceFilterData > >;
-
-export const fieldExtensions: Partial< Field< PriceFilterData > > = {
-	...fieldDefinition,
-	getValueFormatted: ( { item, field } ) => {
-		const value: unknown = field.getValue( { item } );
-		if ( value === null || value === undefined || value === '' ) {
-			// Return em-dash for empty values to prevent DataViews fallback to "undefined"
-			return '\u2014';
-		}
-		const num = toNumberOrNaN( value );
-		if ( Number.isNaN( num ) ) {
-			// Return em-dash for NaN values to prevent DataViews fallback to "NaN"
-			return '\u2014';
-		}
-		const currency = getCurrencyObject();
-		return formatCurrency( num, currency.code );
-	},
-	render: ( { item } ) => {
-		const rawPrice = item.price;
-		const price = toNumberOrNaN( rawPrice );
-
-		// Show an em dash when no sale price is provided instead of leaving the cell blank.
-		if (
-			rawPrice === undefined ||
-			rawPrice === null ||
-			rawPrice === '' ||
-			Number.isNaN( price )
-		) {
-			return <span>{ '\u2014' }</span>;
-		}
-
-		const currency = getCurrencyObject();
-		const regularPrice = toNumberOrNaN( item.regular_price );
-
-		// Only render the strikethrough when the regular price is a valid number,
-		// since partially saved products may send empty or NaN-like values here.
-		if ( item.on_sale && Number.isFinite( regularPrice ) ) {
-			return (
-				<Stack direction="row" gap="xs">
-					<s>{ formatCurrency( regularPrice, currency.code ) }</s>
-					<span>{ formatCurrency( price, currency.code ) }</span>
-				</Stack>
-			);
-		}
-
-		return <span>{ formatCurrency( price, currency.code ) }</span>;
-	},
-	Edit: ( { data, onChange, hideLabelFromVision, operator, field } ) => {
-		const currency = getCurrencyObject();
-		const step = Math.pow( 10, -currency.precision );
-		const [ minValue = '', maxValue = '' ] = Array.isArray( data.price )
-			? data.price
-			: [];
-		const min = String( minValue );
-		const max = String( maxValue );
-
-		const onChangeMin = useCallback(
-			( newValue: string | undefined ) => {
-				onChange( {
-					price: [ parseFloat( newValue || '' ), max ] as [
-						number | string,
-						number | string,
-					],
-				} );
-			},
-			[ onChange, max ]
-		);
-
-		const onChangeMax = useCallback(
-			( newValue: string | undefined ) => {
-				onChange( {
-					price: [ min, parseFloat( newValue || '' ) ] as [
-						number | string,
-						number | string,
-					],
-				} );
-			},
-			[ onChange, min ]
-		);
-
-		if ( operator === 'between' ) {
-			return (
-				<Stack direction="row" gap="sm">
-					<InputControl
-						label={ __( 'From', 'woocommerce' ) }
-						type="number"
-						step={ step }
-						value={ min }
-						prefix={ <CurrencyPrefixSlot /> }
-						suffix={ <CurrencySuffixSlot /> }
-						onChange={ ( event ) =>
-							onChangeMin( event.target.value )
-						}
-					/>
-					<InputControl
-						label={ __( 'To', 'woocommerce' ) }
-						type="number"
-						step={ step }
-						value={ max }
-						prefix={ <CurrencyPrefixSlot /> }
-						suffix={ <CurrencySuffixSlot /> }
-						onChange={ ( event ) =>
-							onChangeMax( event.target.value )
-						}
-					/>
-				</Stack>
-			);
-		}
-
-		const singleValue = typeof data.price === 'string' ? data.price : '';
-
-		return (
-			<InputControl
-				label={ field.label }
-				hideLabelFromVision={ hideLabelFromVision }
-				type="number"
-				step={ step }
-				value={ singleValue }
-				prefix={ <CurrencyPrefixSlot /> }
-				suffix={ <CurrencySuffixSlot /> }
-				onChange={ ( event ) =>
-					onChange( { price: event.target.value } )
-				}
-			/>
-		);
-	},
-};
diff --git a/packages/js/experimental-products-app/src/fields/price/utils.ts b/packages/js/experimental-products-app/src/fields/price/utils.ts
deleted file mode 100644
index e7b27b729a6..00000000000
--- a/packages/js/experimental-products-app/src/fields/price/utils.ts
+++ /dev/null
@@ -1,54 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-
-export const getLocalDefaultSaleStart = () => {
-	const tomorrow = new Date();
-	tomorrow.setDate( tomorrow.getDate() + 1 );
-	tomorrow.setHours( 7, 0, 0, 0 );
-	tomorrow.setMinutes( tomorrow.getMinutes() - tomorrow.getTimezoneOffset() );
-	return tomorrow.toISOString().slice( 0, 16 );
-};
-
-export const toNumberOrNaN = ( value: unknown ) => {
-	if ( typeof value === 'number' ) {
-		return value;
-	}
-
-	if ( typeof value === 'string' && value.trim() !== '' ) {
-		return Number.parseFloat( value );
-	}
-
-	return Number.NaN;
-};
-
-/**
- * Validates that a price value is either empty or a valid non-negative number.
- * Temporary: will be obsolete when price fields switch to the number field type.
- *
- * @param value The price value to validate.
- * @return Null if valid, or an error message string if invalid.
- */
-export function validatePrice( value: unknown ): string | null {
-	// Empty values are allowed (not required).
-	if (
-		value === undefined ||
-		value === null ||
-		( typeof value === 'string' && value.trim() === '' )
-	) {
-		return null;
-	}
-
-	const parsed = toNumberOrNaN( value );
-
-	if ( Number.isNaN( parsed ) ) {
-		return __( 'Please enter a valid price.', 'woocommerce' );
-	}
-
-	if ( parsed < 0 ) {
-		return __( 'Price must not be negative.', 'woocommerce' );
-	}
-
-	return null;
-}
diff --git a/packages/js/experimental-products-app/src/fields/price_summary/field.tsx b/packages/js/experimental-products-app/src/fields/price_summary/field.tsx
deleted file mode 100644
index 5872950d30d..00000000000
--- a/packages/js/experimental-products-app/src/fields/price_summary/field.tsx
+++ /dev/null
@@ -1,60 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import { getCurrencyObject } from '../utils/currency';
-
-import type { ProductEntityRecord } from '../types';
-
-import { toNumberOrNaN } from '../price/utils';
-
-const formatPrice = ( amount: number, currencyCode: string ) => {
-	const locale = document.documentElement.lang || 'en-US';
-	return new Intl.NumberFormat( locale, {
-		style: 'currency',
-		currency: currencyCode,
-	} ).format( amount );
-};
-
-const fieldDefinition = {
-	enableSorting: false,
-	enableHiding: false,
-	filterBy: false,
-} satisfies Partial< Field< ProductEntityRecord > >;
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	...fieldDefinition,
-	render: ( { item } ) => {
-		const salePrice = toNumberOrNaN( item.sale_price );
-		const regularPrice = toNumberOrNaN( item.regular_price );
-		const hasSalePrice =
-			Boolean( item.on_sale ) && Number.isFinite( salePrice );
-
-		const priceToDisplay = hasSalePrice ? salePrice : regularPrice;
-
-		if ( ! Number.isFinite( priceToDisplay ) ) {
-			return null;
-		}
-
-		const currency = getCurrencyObject();
-		const priceText = formatPrice( priceToDisplay, currency.code );
-
-		if ( hasSalePrice ) {
-			return (
-				<span>
-					{ priceText }
-					{ ' · ' }
-					{ __( 'On sale', 'woocommerce' ) }
-				</span>
-			);
-		}
-
-		return <span>{ priceText }</span>;
-	},
-};
diff --git a/packages/js/experimental-products-app/src/fields/product_status/field.test.tsx b/packages/js/experimental-products-app/src/fields/product_status/field.test.tsx
deleted file mode 100644
index 6c7eef0d36b..00000000000
--- a/packages/js/experimental-products-app/src/fields/product_status/field.test.tsx
+++ /dev/null
@@ -1,116 +0,0 @@
-/**
- * External dependencies
- */
-import { render, screen } from '@testing-library/react';
-import React from 'react';
-
-jest.mock( '@wordpress/ui', () => {
-	const ReactActual = jest.requireActual( 'react' );
-
-	return {
-		Badge: ( {
-			children,
-			intent,
-		}: {
-			children?: React.ReactNode;
-			intent?: string;
-		} ) =>
-			ReactActual.createElement(
-				'span',
-				{ 'data-intent': intent },
-				children
-			),
-		SelectControl: () => null,
-	};
-} );
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-import { fieldExtensions } from './field';
-
-const buildProduct = (
-	overrides: Partial< ProductEntityRecord > = {}
-): ProductEntityRecord =>
-	( {
-		id: 12,
-		type: 'simple',
-		status: 'publish',
-		price: '12',
-		images: [],
-		categories: [],
-		tags: [],
-		...overrides,
-	} ) as ProductEntityRecord;
-
-const renderStatus = ( item: ProductEntityRecord ) => {
-	if ( ! fieldExtensions.render ) {
-		throw new Error( 'product_status render not implemented' );
-	}
-
-	const Render = fieldExtensions.render as React.ComponentType< {
-		item: ProductEntityRecord;
-	} >;
-
-	return render( <Render item={ item } /> );
-};
-
-describe( 'product_status field', () => {
-	it( 'renders product post statuses for products', () => {
-		renderStatus( buildProduct( { status: 'draft' } ) );
-
-		expect( screen.getByText( 'Draft' ) ).toBeInTheDocument();
-		expect(
-			fieldExtensions.getValue?.( {
-				item: buildProduct( { status: 'draft' } ),
-			} as never )
-		).toBe( 'draft' );
-	} );
-
-	it( 'renders active status for variation rows in DataViews tables', () => {
-		renderStatus(
-			buildProduct( {
-				parent_id: 12,
-				type: 'variation',
-				status: 'publish',
-				price: '12',
-			} )
-		);
-
-		expect( screen.getByText( 'Active' ) ).toBeInTheDocument();
-		expect(
-			fieldExtensions.getValue?.( {
-				item: buildProduct( {
-					parent_id: 12,
-					type: 'variation',
-					status: 'publish',
-					price: '12',
-				} ),
-			} as never )
-		).toBe( 'active' );
-	} );
-
-	it( 'renders inactive status for variation rows without a price', () => {
-		renderStatus(
-			buildProduct( {
-				parent_id: 12,
-				type: 'variation',
-				status: 'publish',
-				price: '',
-			} )
-		);
-
-		expect( screen.getByText( 'Inactive' ) ).toBeInTheDocument();
-		expect(
-			fieldExtensions.getValue?.( {
-				item: buildProduct( {
-					parent_id: 12,
-					type: 'variation',
-					status: 'publish',
-					price: '',
-				} ),
-			} as never )
-		).toBe( 'inactive' );
-	} );
-} );
diff --git a/packages/js/experimental-products-app/src/fields/product_status/field.tsx b/packages/js/experimental-products-app/src/fields/product_status/field.tsx
deleted file mode 100644
index 12bbf4f464e..00000000000
--- a/packages/js/experimental-products-app/src/fields/product_status/field.tsx
+++ /dev/null
@@ -1,84 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-import { SelectControl } from '@wordpress/ui';
-
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-import { ProductStatusBadge } from '../components/product-status-badge';
-import {
-	getVariationActiveValue,
-	VariationActiveBadge,
-} from '../variation_active/field';
-
-function isVariation( item: ProductEntityRecord ) {
-	return item.type === 'variation' || Boolean( item.parent_id );
-}
-
-function isValidStatus( value: string ) {
-	return (
-		value === 'draft' ||
-		value === 'pending' ||
-		value === 'publish' ||
-		value === 'trash'
-	);
-}
-
-const fieldDefinition = {
-	type: 'text',
-	label: __( 'Status', 'woocommerce' ),
-	enableSorting: false,
-	filterBy: false,
-	elements: [
-		{ value: 'publish', label: __( 'Published', 'woocommerce' ) },
-		{ value: 'draft', label: __( 'Draft', 'woocommerce' ) },
-		{ value: 'pending', label: __( 'Pending review', 'woocommerce' ) },
-		{ value: 'trash', label: __( 'Trash', 'woocommerce' ) },
-	],
-} satisfies Partial< Field< ProductEntityRecord > >;
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	...fieldDefinition,
-	getValue: ( { item } ) =>
-		isVariation( item ) ? getVariationActiveValue( item ) : item.status,
-	render: ( { item }: { item: ProductEntityRecord } ) =>
-		isVariation( item ) ? (
-			<VariationActiveBadge value={ getVariationActiveValue( item ) } />
-		) : (
-			<ProductStatusBadge status={ item.status } />
-		),
-	Edit: ( { data, onChange, field } ) => {
-		const options =
-			field.elements?.filter(
-				( element: { label: string; value: string } ) =>
-					element.value !== 'trash'
-			) ?? [];
-		const selectedOption =
-			field.placeholder && ! data.status
-				? undefined
-				: options.find( ( option ) => option.value === data.status );
-
-		return (
-			<SelectControl
-				label={ field.label }
-				placeholder={ field.placeholder }
-				value={ selectedOption }
-				items={ options }
-				onValueChange={ ( option ) => {
-					const value = option?.value;
-
-					if ( typeof value === 'string' && isValidStatus( value ) ) {
-						onChange( {
-							status: value,
-						} );
-					}
-				} }
-			/>
-		);
-	},
-};
diff --git a/packages/js/experimental-products-app/src/fields/registry.tsx b/packages/js/experimental-products-app/src/fields/registry.tsx
deleted file mode 100644
index 84104e3172c..00000000000
--- a/packages/js/experimental-products-app/src/fields/registry.tsx
+++ /dev/null
@@ -1,174 +0,0 @@
-/**
- * External dependencies
- */
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import { fieldExtensions as brandsFieldExtensions } from './brands/field';
-import { fieldExtensions as buttonTextFieldExtensions } from './button_text/field';
-import { fieldExtensions as catalogVisibilityFieldExtensions } from './catalog_visibility/field';
-import { fieldExtensions as categoriesFieldExtensions } from './categories/field';
-import { fieldExtensions as costOfGoodsSoldFieldExtensions } from './cost_of_goods_sold/field';
-import { fieldExtensions as crossSellIdsFieldExtensions } from './cross_sell_ids/field';
-import { fieldExtensions as dateFieldExtensions } from './date/field';
-import { fieldExtensions as dateOnSaleFromFieldExtensions } from './date_on_sale_from/field';
-import { fieldExtensions as dateOnSaleToFieldExtensions } from './date_on_sale_to/field';
-import { fieldExtensions as descriptionFieldExtensions } from './description/field';
-import { fieldExtensions as globalUniqueIdFieldExtensions } from './global_unique_id/field';
-import { fieldExtensions as groupedProductsFieldExtensions } from './grouped_products/field';
-import { fieldExtensions as downloadableFieldExtensions } from './downloadable/field';
-import { fieldExtensions as downloadableCountFieldExtensions } from './downloadable_count/field';
-import { fieldExtensions as externalUrlFieldExtensions } from './external_url/field';
-import { fieldExtensions as featuredFieldExtensions } from './featured/field';
-import { fieldExtensions as heightFieldExtensions } from './height/field';
-import { fieldExtensions as imagesFieldExtensions } from './images/field';
-import { fieldExtensions as imagesCountFieldExtensions } from './images_count/field';
-import { fieldExtensions as inventorySummaryFieldExtensions } from './inventory_summary/field';
-import { fieldExtensions as lengthFieldExtensions } from './length/field';
-import { fieldExtensions as linkedProductsCountFieldExtensions } from './linked_products_count/field';
-import { fieldExtensions as manageStockFieldExtensions } from './manage_stock/field';
-import { fieldExtensions as nameFieldExtensions } from './name/field';
-import { fieldExtensions as onSaleFieldExtensions } from './on_sale/field';
-import { fieldExtensions as organizationSummaryFieldExtensions } from './organization_summary/field';
-import { fieldExtensions as priceFieldExtensions } from './price/field';
-import { fieldExtensions as priceSummaryFieldExtensions } from './price_summary/field';
-import { fieldExtensions as productStatusFieldExtensions } from './product_status/field';
-import { fieldExtensions as regularPriceFieldExtensions } from './regular_price/field';
-import { fieldExtensions as salePriceFieldExtensions } from './sale_price/field';
-import { fieldExtensions as scheduleSaleFieldExtensions } from './schedule_sale/field';
-import { fieldExtensions as shippingClassFieldExtensions } from './shipping_class/field';
-import { fieldExtensions as shippingSummaryFieldExtensions } from './shipping_summary/field';
-import { fieldExtensions as shortDescriptionFieldExtensions } from './short_description/field';
-import { fieldExtensions as skuFieldExtensions } from './sku/field';
-import { fieldExtensions as stockFieldExtensions } from './stock/field';
-import { fieldExtensions as stockQuantityFieldExtensions } from './stock_quantity/field';
-import { fieldExtensions as tagsFieldExtensions } from './tags/field';
-import { fieldExtensions as taxStatusFieldExtensions } from './tax_status/field';
-import type { ProductEntityRecord } from './types';
-import { fieldExtensions as typeFieldExtensions } from './type/field';
-import { fieldExtensions as upsellIdsFieldExtensions } from './upsell_ids/field';
-import { fieldExtensions as variationActiveFieldExtensions } from './variation_active/field';
-import { fieldExtensions as visibilitySummaryFieldExtensions } from './visibility_summary/field';
-import { fieldExtensions as weightFieldExtensions } from './weight/field';
-import { fieldExtensions as widthFieldExtensions } from './width/field';
-
-type ProductField = Field< ProductEntityRecord >;
-type ProductFieldExtensions = Partial< ProductField >;
-
-export const PRODUCT_FIELD_IDS = [
-	'name',
-	'short_description',
-	'description',
-	'images',
-	'images_count',
-	'product_status',
-	'variation_active',
-	'sku',
-	'price',
-	'regular_price',
-	'on_sale',
-	'sale_price',
-	'schedule_sale',
-	'date_on_sale_from',
-	'date_on_sale_to',
-	'cost_of_goods_sold',
-	'price_summary',
-	'stock',
-	'stock_quantity',
-	'manage_stock',
-	'inventory_summary',
-	'categories',
-	'tags',
-	'brands',
-	'date',
-	'global_unique_id',
-	'grouped_products',
-	'organization_summary',
-	'type',
-	'featured',
-	'catalog_visibility',
-	'visibility_summary',
-	'downloadable',
-	'downloadable_count',
-	'external_url',
-	'button_text',
-	'weight',
-	'length',
-	'width',
-	'height',
-	'shipping_class',
-	'shipping_summary',
-	'tax_status',
-	'upsell_ids',
-	'cross_sell_ids',
-	'linked_products_count',
-] as const;
-
-export type ProductFieldId = ( typeof PRODUCT_FIELD_IDS )[ number ];
-
-const PRODUCT_FIELD_EXTENSIONS: Record<
-	ProductFieldId,
-	ProductFieldExtensions
-> = {
-	name: nameFieldExtensions,
-	short_description: shortDescriptionFieldExtensions,
-	description: descriptionFieldExtensions,
-	images: imagesFieldExtensions,
-	images_count: imagesCountFieldExtensions,
-	product_status: productStatusFieldExtensions,
-	variation_active: variationActiveFieldExtensions,
-	sku: skuFieldExtensions,
-	price: priceFieldExtensions as ProductFieldExtensions,
-	regular_price: regularPriceFieldExtensions,
-	sale_price: salePriceFieldExtensions,
-	schedule_sale: scheduleSaleFieldExtensions,
-	date_on_sale_from: dateOnSaleFromFieldExtensions,
-	date_on_sale_to: dateOnSaleToFieldExtensions,
-	cost_of_goods_sold: costOfGoodsSoldFieldExtensions,
-	on_sale: onSaleFieldExtensions,
-	price_summary: priceSummaryFieldExtensions,
-	stock: stockFieldExtensions,
-	stock_quantity: stockQuantityFieldExtensions,
-	manage_stock: manageStockFieldExtensions,
-	inventory_summary: inventorySummaryFieldExtensions,
-	categories: categoriesFieldExtensions,
-	tags: tagsFieldExtensions,
-	brands: brandsFieldExtensions,
-	date: dateFieldExtensions,
-	global_unique_id: globalUniqueIdFieldExtensions,
-	grouped_products: groupedProductsFieldExtensions,
-	organization_summary: organizationSummaryFieldExtensions,
-	type: typeFieldExtensions,
-	featured: featuredFieldExtensions,
-	catalog_visibility: catalogVisibilityFieldExtensions,
-	visibility_summary: visibilitySummaryFieldExtensions,
-	downloadable: downloadableFieldExtensions,
-	downloadable_count: downloadableCountFieldExtensions,
-	external_url: externalUrlFieldExtensions,
-	button_text: buttonTextFieldExtensions,
-	weight: weightFieldExtensions,
-	length: lengthFieldExtensions,
-	width: widthFieldExtensions,
-	height: heightFieldExtensions,
-	shipping_class: shippingClassFieldExtensions,
-	shipping_summary: shippingSummaryFieldExtensions,
-	tax_status: taxStatusFieldExtensions,
-	upsell_ids: upsellIdsFieldExtensions,
-	cross_sell_ids: crossSellIdsFieldExtensions,
-	linked_products_count: linkedProductsCountFieldExtensions,
-};
-
-export function createProductField( id: ProductFieldId ): ProductField {
-	return {
-		id,
-		...PRODUCT_FIELD_EXTENSIONS[ id ],
-	};
-}
-
-export function createProductFields(
-	fieldIds: readonly ProductFieldId[]
-): ProductField[] {
-	return fieldIds.map( createProductField );
-}
diff --git a/packages/js/experimental-products-app/src/fields/regular_price/field.tsx b/packages/js/experimental-products-app/src/fields/regular_price/field.tsx
deleted file mode 100644
index 2561525b1b1..00000000000
--- a/packages/js/experimental-products-app/src/fields/regular_price/field.tsx
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import { type ProductEntityRecord } from '../types';
-
-import { CurrencyInput } from '../components/currency-input';
-
-import { validatePrice } from '../price/utils';
-
-const fieldDefinition = {
-	type: 'text',
-	label: __( 'Regular Price', 'woocommerce' ),
-	enableSorting: false,
-	enableHiding: false,
-	filterBy: false,
-} satisfies Partial< Field< ProductEntityRecord > >;
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	...fieldDefinition,
-	isValid: {
-		custom: ( item ) => validatePrice( item.regular_price ),
-	},
-	Edit: CurrencyInput,
-};
diff --git a/packages/js/experimental-products-app/src/fields/sale_price/field.tsx b/packages/js/experimental-products-app/src/fields/sale_price/field.tsx
deleted file mode 100644
index 6bc99bcc875..00000000000
--- a/packages/js/experimental-products-app/src/fields/sale_price/field.tsx
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import { type ProductEntityRecord } from '../types';
-
-import { CurrencyInput } from '../components/currency-input';
-
-import { validateSalePrice } from './validation';
-
-const fieldDefinition = {
-	type: 'text',
-	label: __( 'Sale Price', 'woocommerce' ),
-	enableSorting: false,
-	enableHiding: false,
-	filterBy: false,
-} satisfies Partial< Field< ProductEntityRecord > >;
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	...fieldDefinition,
-	isValid: {
-		custom: ( item ) => validateSalePrice( item ),
-	},
-	Edit: CurrencyInput,
-};
diff --git a/packages/js/experimental-products-app/src/fields/sale_price/test/field.test.ts b/packages/js/experimental-products-app/src/fields/sale_price/test/field.test.ts
deleted file mode 100644
index 1d14fe35f60..00000000000
--- a/packages/js/experimental-products-app/src/fields/sale_price/test/field.test.ts
+++ /dev/null
@@ -1,110 +0,0 @@
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../../types';
-
-import { validatePrice } from '../../price/utils';
-
-import { validateSalePrice } from '../validation';
-
-function makeItem(
-	overrides: Partial< ProductEntityRecord > = {}
-): ProductEntityRecord {
-	return {
-		regular_price: '',
-		sale_price: '',
-		on_sale: false,
-		...overrides,
-	} as ProductEntityRecord;
-}
-
-describe( 'validatePrice', () => {
-	it( 'returns null for empty string', () => {
-		expect( validatePrice( '' ) ).toBeNull();
-	} );
-
-	it( 'returns null for whitespace-only string', () => {
-		expect( validatePrice( '  ' ) ).toBeNull();
-	} );
-
-	it( 'returns null for undefined', () => {
-		expect( validatePrice( undefined ) ).toBeNull();
-	} );
-
-	it( 'returns null for null', () => {
-		expect( validatePrice( null ) ).toBeNull();
-	} );
-
-	it( 'returns null for valid integer', () => {
-		expect( validatePrice( '10' ) ).toBeNull();
-	} );
-
-	it( 'returns null for valid decimal', () => {
-		expect( validatePrice( '9.99' ) ).toBeNull();
-	} );
-
-	it( 'returns null for zero', () => {
-		expect( validatePrice( '0' ) ).toBeNull();
-	} );
-
-	it( 'returns error for non-numeric string', () => {
-		expect( validatePrice( 'abc' ) ).toBe( 'Please enter a valid price.' );
-	} );
-
-	it( 'returns error for negative number', () => {
-		expect( validatePrice( '-5' ) ).toBe( 'Price must not be negative.' );
-	} );
-} );
-
-describe( 'validateSalePrice', () => {
-	it( 'returns null when both prices are empty', () => {
-		expect( validateSalePrice( makeItem() ) ).toBeNull();
-	} );
-
-	it( 'returns null when sale price is empty', () => {
-		const item = makeItem( { regular_price: '10' } );
-		expect( validateSalePrice( item ) ).toBeNull();
-	} );
-
-	it( 'returns null when regular price is empty', () => {
-		const item = makeItem( { sale_price: '5' } );
-		expect( validateSalePrice( item ) ).toBeNull();
-	} );
-
-	it( 'returns null when sale price is lower than regular price', () => {
-		const item = makeItem( { regular_price: '20', sale_price: '15' } );
-		expect( validateSalePrice( item ) ).toBeNull();
-	} );
-
-	it( 'returns error when sale price equals regular price', () => {
-		const item = makeItem( { regular_price: '20', sale_price: '20' } );
-		expect( validateSalePrice( item ) ).toBe(
-			'Sale price must be lower than the regular price.'
-		);
-	} );
-
-	it( 'returns error when sale price exceeds regular price', () => {
-		const item = makeItem( { regular_price: '10', sale_price: '15' } );
-		expect( validateSalePrice( item ) ).toBe(
-			'Sale price must be lower than the regular price.'
-		);
-	} );
-
-	it( 'handles decimal prices correctly', () => {
-		const item = makeItem( {
-			regular_price: '9.99',
-			sale_price: '9.98',
-		} );
-		expect( validateSalePrice( item ) ).toBeNull();
-	} );
-
-	it( 'returns error for equal decimal prices', () => {
-		const item = makeItem( {
-			regular_price: '9.99',
-			sale_price: '9.99',
-		} );
-		expect( validateSalePrice( item ) ).toBe(
-			'Sale price must be lower than the regular price.'
-		);
-	} );
-} );
diff --git a/packages/js/experimental-products-app/src/fields/sale_price/validation.ts b/packages/js/experimental-products-app/src/fields/sale_price/validation.ts
deleted file mode 100644
index 95ec9d659f4..00000000000
--- a/packages/js/experimental-products-app/src/fields/sale_price/validation.ts
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-
-import { toNumberOrNaN, validatePrice } from '../price/utils';
-
-export function validateSalePrice( item: ProductEntityRecord ): string | null {
-	// First check if sale price is a valid number.
-	const numericError = validatePrice( item.sale_price );
-	if ( numericError ) {
-		return numericError;
-	}
-
-	const regularPrice = toNumberOrNaN( item.regular_price );
-
-	// Only compare when regular price is also numeric.
-	if ( Number.isNaN( regularPrice ) ) {
-		return null;
-	}
-
-	const salePrice = toNumberOrNaN( item.sale_price );
-	if ( salePrice >= regularPrice ) {
-		return __(
-			'Sale price must be lower than the regular price.',
-			'woocommerce'
-		);
-	}
-
-	return null;
-}
diff --git a/packages/js/experimental-products-app/src/fields/schedule_sale/field.tsx b/packages/js/experimental-products-app/src/fields/schedule_sale/field.tsx
deleted file mode 100644
index 8cb68928296..00000000000
--- a/packages/js/experimental-products-app/src/fields/schedule_sale/field.tsx
+++ /dev/null
@@ -1,190 +0,0 @@
-/**
- * External dependencies
- */
-import { CheckboxControl } from '@wordpress/components';
-
-import { useCallback, useMemo, useState } from '@wordpress/element';
-
-import { __ } from '@wordpress/i18n';
-
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-
-import { getLocalDefaultSaleStart } from '../price/utils';
-import {
-	DatePicker,
-	formatDateTimeLocal,
-	parseDateTimeLocal,
-} from '../components/date-picker';
-
-const fieldDefinition = {
-	type: 'boolean',
-	label: __( 'Schedule sale', 'woocommerce' ),
-	enableSorting: false,
-	enableHiding: false,
-	filterBy: false,
-} satisfies Partial< Field< ProductEntityRecord > >;
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	...fieldDefinition,
-	Edit: ( { data, onChange, field } ) => {
-		const [ tempDateOnSaleFrom, setTempDateOnSaleFrom ] = useState(
-			data.date_on_sale_from || ''
-		);
-		const [ tempDateOnSaleTo, setTempDateOnSaleTo ] = useState(
-			data.date_on_sale_to || ''
-		);
-		const checked = !! data.date_on_sale_to || !! data.date_on_sale_from;
-		const today = useMemo( () => {
-			const d = new Date();
-			d.setHours( 0, 0, 0, 0 );
-			return d;
-		}, [] );
-		const dateOnSaleFrom = useMemo(
-			() =>
-				typeof data.date_on_sale_from === 'string' &&
-				data.date_on_sale_from
-					? parseDateTimeLocal( data.date_on_sale_from )
-					: null,
-			[ data.date_on_sale_from ]
-		);
-		const minDateOnSaleTo = useMemo( () => {
-			if ( dateOnSaleFrom ) {
-				const min = new Date( dateOnSaleFrom );
-				min.setMinutes( min.getMinutes() + 1 );
-				return min;
-			}
-
-			return today;
-		}, [ dateOnSaleFrom, today ] );
-		const handleScheduleChange = useCallback(
-			( value: boolean ) => {
-				if ( ! value ) {
-					setTempDateOnSaleFrom( data.date_on_sale_from || '' );
-					setTempDateOnSaleTo( data.date_on_sale_to || '' );
-					onChange( {
-						date_on_sale_from: '',
-						date_on_sale_to: '',
-					} );
-					return;
-				}
-
-				let nextDateOnSaleFrom =
-					data.date_on_sale_from || tempDateOnSaleFrom;
-				const nextDateOnSaleTo =
-					data.date_on_sale_to || tempDateOnSaleTo;
-
-				if ( ! nextDateOnSaleFrom && ! nextDateOnSaleTo ) {
-					nextDateOnSaleFrom = getLocalDefaultSaleStart();
-				}
-
-				onChange( {
-					date_on_sale_from: nextDateOnSaleFrom,
-					date_on_sale_to: nextDateOnSaleTo,
-				} );
-			},
-			[
-				data.date_on_sale_from,
-				data.date_on_sale_to,
-				onChange,
-				tempDateOnSaleFrom,
-				tempDateOnSaleTo,
-			]
-		);
-		const handleDateOnSaleFromChange = useCallback(
-			( value: { date_on_sale_from?: string | null } ) => {
-				const newStart = value.date_on_sale_from;
-				const currentEnd = data.date_on_sale_to;
-
-				if (
-					typeof newStart !== 'string' ||
-					! newStart ||
-					typeof currentEnd !== 'string' ||
-					! currentEnd
-				) {
-					onChange( value );
-					return;
-				}
-
-				const startDate = parseDateTimeLocal( newStart );
-				const endDate = parseDateTimeLocal( currentEnd );
-
-				if (
-					startDate &&
-					endDate &&
-					startDate.getTime() >= endDate.getTime()
-				) {
-					const newEndDate = new Date( startDate );
-					newEndDate.setDate( newEndDate.getDate() + 1 );
-
-					onChange( {
-						...value,
-						date_on_sale_to: formatDateTimeLocal( newEndDate ),
-					} );
-					return;
-				}
-
-				onChange( value );
-			},
-			[ data.date_on_sale_to, onChange ]
-		);
-
-		return (
-			<div className="woocommerce-schedule-sale-control">
-				<CheckboxControl
-					label={ field.label }
-					checked={ checked }
-					onChange={ handleScheduleChange }
-				/>
-				{ checked && (
-					<div className="woocommerce-schedule-sale-control__dates">
-						<DatePicker
-							data={ data }
-							onChange={ handleDateOnSaleFromChange }
-							field={ {
-								label: __( 'Start sale on', 'woocommerce' ),
-							} }
-							fieldKey="date_on_sale_from"
-							min={ today }
-						/>
-						<DatePicker
-							data={ data }
-							onChange={ onChange }
-							field={ {
-								label: __( 'End sale on', 'woocommerce' ),
-							} }
-							fieldKey="date_on_sale_to"
-							min={ minDateOnSaleTo }
-						/>
-					</div>
-				) }
-			</div>
-		);
-	},
-	getValue: ( { item } ) =>
-		!! item.date_on_sale_to || !! item.date_on_sale_from,
-	setValue: ( { item, value } ) => {
-		if ( ! value ) {
-			return {
-				date_on_sale_from: '',
-				date_on_sale_to: '',
-			};
-		}
-
-		let dateOnSaleFrom = item.date_on_sale_from || '';
-		const dateOnSaleTo = item.date_on_sale_to || '';
-
-		if ( ! dateOnSaleFrom && ! dateOnSaleTo ) {
-			dateOnSaleFrom = getLocalDefaultSaleStart();
-		}
-
-		return {
-			date_on_sale_from: dateOnSaleFrom,
-			date_on_sale_to: dateOnSaleTo,
-		};
-	},
-};
diff --git a/packages/js/experimental-products-app/src/fields/schedule_sale/style.scss b/packages/js/experimental-products-app/src/fields/schedule_sale/style.scss
deleted file mode 100644
index 4c5d879e56f..00000000000
--- a/packages/js/experimental-products-app/src/fields/schedule_sale/style.scss
+++ /dev/null
@@ -1,11 +0,0 @@
-.woocommerce-schedule-sale-control {
-	display: flex;
-	flex-direction: column;
-	gap: 12px;
-}
-
-.woocommerce-schedule-sale-control__dates {
-	display: grid;
-	grid-template-columns: repeat(2, minmax(0, 1fr));
-	gap: 16px;
-}
diff --git a/packages/js/experimental-products-app/src/fields/shipping_class/field.tsx b/packages/js/experimental-products-app/src/fields/shipping_class/field.tsx
deleted file mode 100644
index c0f30c104d2..00000000000
--- a/packages/js/experimental-products-app/src/fields/shipping_class/field.tsx
+++ /dev/null
@@ -1,88 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-import { useSelect } from '@wordpress/data';
-import { SelectControl } from '@wordpress/ui';
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-
-import type { ProductEntityRecord } from '../types';
-
-interface ProductShippingClass {
-	id: number;
-	slug: string;
-	name: string;
-	description: string;
-	count: number;
-}
-
-const fieldDefinition = {
-	type: 'text',
-	label: __( 'Shipping Class', 'woocommerce' ),
-	enableSorting: false,
-	enableHiding: false,
-	filterBy: false,
-} satisfies Partial< Field< ProductEntityRecord > >;
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	...fieldDefinition,
-	id: 'shipping_class',
-	label: __( 'Shipping Class', 'woocommerce' ),
-	enableSorting: false,
-	type: 'text',
-	getValue: ( { item } ) =>
-		item.shipping_class_id ? item.shipping_class_id.toString() : '',
-	render: ( { item } ) => item.shipping_class ?? '',
-	isVisible: ( item ) => ! item.virtual,
-	Edit: ( { data, onChange, field } ) => {
-		const { shippingClasses } = useSelect( ( select ) => {
-			// TODO: Register shipping class entity and use it instead.
-			// eslint-disable-next-line @wordpress/data-no-store-string-literals
-			const { getProductShippingClasses } = select(
-				'experimental/wc/admin/products/shipping-classes'
-			);
-			return {
-				shippingClasses:
-					getProductShippingClasses() as ProductShippingClass[],
-			};
-		}, [] );
-
-		const shippingClassOptions = [
-			{
-				label: __( 'No shipping class', 'woocommerce' ),
-				value: '',
-			},
-			...( shippingClasses?.length
-				? shippingClasses.map( ( shippingClass ) => ( {
-						label: shippingClass.name,
-						value: shippingClass.slug,
-				  } ) )
-				: [] ),
-		];
-		const selectedOption =
-			field.placeholder && ! data.shipping_class
-				? undefined
-				: shippingClassOptions.find(
-						( option ) =>
-							option.value === ( data.shipping_class ?? '' )
-				  );
-
-		return (
-			<SelectControl
-				label={ field.label }
-				placeholder={ field.placeholder }
-				value={ selectedOption }
-				items={ shippingClassOptions }
-				onValueChange={ ( option ) =>
-					onChange( {
-						shipping_class: option?.value ?? '',
-					} )
-				}
-			/>
-		);
-	},
-};
diff --git a/packages/js/experimental-products-app/src/fields/shipping_summary/field.tsx b/packages/js/experimental-products-app/src/fields/shipping_summary/field.tsx
deleted file mode 100644
index bc26afa8f7c..00000000000
--- a/packages/js/experimental-products-app/src/fields/shipping_summary/field.tsx
+++ /dev/null
@@ -1,64 +0,0 @@
-/**
- * External dependencies
- */
-import { useEntityRecord } from '@wordpress/core-data';
-
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord, SettingsEntityRecord } from '../types';
-
-const ShippingSummaryRender = ( { item }: { item: ProductEntityRecord } ) => {
-	const {
-		record: storeProductsSettings,
-		isResolving: storeProductsSettingsResolving,
-	} = useEntityRecord< SettingsEntityRecord >(
-		'root',
-		'settings',
-		'products'
-	);
-
-	if ( storeProductsSettingsResolving ) {
-		return null;
-	}
-
-	const length = item.dimensions?.length;
-	const width = item.dimensions?.width;
-	const height = item.dimensions?.height;
-	const weight = item.weight;
-	const weightUnit = storeProductsSettings?.values?.woocommerce_weight_unit;
-	const dimensionUnit =
-		storeProductsSettings?.values?.woocommerce_dimension_unit;
-
-	// Return null if no shipping info available
-	if ( ! length && ! width && ! height && ! weight ) {
-		return null;
-	}
-
-	const parts: string[] = [];
-
-	if ( length && width && height ) {
-		parts.push(
-			`${ length } ${ dimensionUnit } x ${ width } ${ dimensionUnit } x ${ height } ${ dimensionUnit }`
-		);
-	}
-
-	if ( weight ) {
-		parts.push( `${ weight } ${ weightUnit }` );
-	}
-
-	return <span>{ parts.join( ' · ' ) }</span>;
-};
-
-const fieldDefinition = {
-	enableSorting: false,
-	enableHiding: false,
-	filterBy: false,
-} satisfies Partial< Field< ProductEntityRecord > >;
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	...fieldDefinition,
-	render: ( { item } ) => <ShippingSummaryRender item={ item } />,
-};
diff --git a/packages/js/experimental-products-app/src/fields/short_description/field.tsx b/packages/js/experimental-products-app/src/fields/short_description/field.tsx
deleted file mode 100644
index e34e48fc403..00000000000
--- a/packages/js/experimental-products-app/src/fields/short_description/field.tsx
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-import type { Field } from '@wordpress/dataviews';
-import { TextareaControl } from '@wordpress/components';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-import { convertHtmlToPlainText } from '../../utilites';
-
-const fieldDefinition = {
-	type: 'text',
-	label: __( 'Summary', 'woocommerce' ),
-	description: __(
-		'Give customers a quick overview of your product. This appears above the full description.',
-		'woocommerce'
-	),
-	enableSorting: false,
-	filterBy: false,
-} satisfies Partial< Field< ProductEntityRecord > >;
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	...fieldDefinition,
-	getValue: ( { item } ) => convertHtmlToPlainText( item.short_description ),
-	Edit: ( { data, onChange, field } ) => {
-		return (
-			<TextareaControl
-				label={ field.label }
-				value={ convertHtmlToPlainText( data.short_description || '' ) }
-				onChange={ ( value ) =>
-					onChange( { short_description: value } )
-				}
-			/>
-		);
-	},
-};
diff --git a/packages/js/experimental-products-app/src/fields/sku/field.tsx b/packages/js/experimental-products-app/src/fields/sku/field.tsx
deleted file mode 100644
index 6191a8129d3..00000000000
--- a/packages/js/experimental-products-app/src/fields/sku/field.tsx
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-
-const fieldDefinition = {
-	type: 'text',
-	label: __( 'SKU', 'woocommerce' ),
-	enableSorting: false,
-	filterBy: false,
-} satisfies Partial< Field< ProductEntityRecord > >;
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	...fieldDefinition,
-	render: ( { item } ) => {
-		const sku = item.sku;
-
-		if ( sku === undefined || sku === null || sku === '' ) {
-			return <span>{ '\u2014' }</span>;
-		}
-
-		return <span>{ sku }</span>;
-	},
-};
diff --git a/packages/js/experimental-products-app/src/fields/stock/field.tsx b/packages/js/experimental-products-app/src/fields/stock/field.tsx
deleted file mode 100644
index 8d180793348..00000000000
--- a/packages/js/experimental-products-app/src/fields/stock/field.tsx
+++ /dev/null
@@ -1,102 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-import { Badge, SelectControl } from '@wordpress/ui';
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-
-type StockStatus = 'instock' | 'outofstock' | 'onbackorder';
-
-function isValidStockStatus( value: string ): value is StockStatus {
-	return (
-		value === 'instock' || value === 'outofstock' || value === 'onbackorder'
-	);
-}
-
-const stockStatusBadgeIntent: Record<
-	StockStatus,
-	React.ComponentProps< typeof Badge >[ 'intent' ]
-> = {
-	instock: 'none',
-	outofstock: 'high',
-	onbackorder: 'draft',
-};
-
-const fieldDefinition = {
-	label: __( 'Stock', 'woocommerce' ),
-	enableSorting: false,
-	enableHiding: false,
-	filterBy: {
-		operators: [ 'isAny' ],
-	},
-	elements: [
-		{ label: __( 'In stock', 'woocommerce' ), value: 'instock' },
-		{ label: __( 'Out of stock', 'woocommerce' ), value: 'outofstock' },
-		{ label: __( 'On backorder', 'woocommerce' ), value: 'onbackorder' },
-	],
-} satisfies Partial< Field< ProductEntityRecord > >;
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	...fieldDefinition,
-	isVisible: ( item ) => {
-		return ! item.manage_stock;
-	},
-	getValue: ( { item } ) => item.stock_status,
-	render: ( { item, field } ) => {
-		const match = field?.elements?.find(
-			( status ) => status.value === item.stock_status
-		);
-
-		if ( ! match || ! isValidStockStatus( match.value ) ) {
-			return item.stock_status;
-		}
-
-		const stockLabel =
-			item.stock_quantity && item.stock_quantity > 0
-				? `${ match.label } (${ item.stock_quantity })`
-				: match.label;
-
-		return (
-			<div className="woocommerce-fields-field__stock">
-				<Badge intent={ stockStatusBadgeIntent[ match.value ] }>
-					{ stockLabel }
-				</Badge>
-			</div>
-		);
-	},
-	Edit: ( { data, onChange, field } ) => {
-		const options = field?.elements ?? [];
-		const selectedOption =
-			field.placeholder && ! data.stock_status
-				? undefined
-				: options.find(
-						( option ) => option.value === data.stock_status
-				  );
-
-		return (
-			<SelectControl
-				label={ __( 'Stock status', 'woocommerce' ) }
-				placeholder={ field.placeholder }
-				value={ selectedOption }
-				items={ options }
-				onValueChange={ ( option ) => {
-					const value = option?.value;
-
-					if (
-						typeof value === 'string' &&
-						isValidStockStatus( value )
-					) {
-						onChange( {
-							stock_status: value,
-						} );
-					}
-				} }
-			/>
-		);
-	},
-};
diff --git a/packages/js/experimental-products-app/src/fields/stock/style.scss b/packages/js/experimental-products-app/src/fields/stock/style.scss
deleted file mode 100644
index ca907cc1359..00000000000
--- a/packages/js/experimental-products-app/src/fields/stock/style.scss
+++ /dev/null
@@ -1,5 +0,0 @@
-.woocommerce-fields-field__stock {
-	display: flex;
-	align-items: center;
-	gap: 5px;
-}
diff --git a/packages/js/experimental-products-app/src/fields/stock_quantity/field.tsx b/packages/js/experimental-products-app/src/fields/stock_quantity/field.tsx
deleted file mode 100644
index 9e554df6f43..00000000000
--- a/packages/js/experimental-products-app/src/fields/stock_quantity/field.tsx
+++ /dev/null
@@ -1,139 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-import { InputControl, Stack } from '@wordpress/ui';
-import type { DataFormControlProps, Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-import { getBulkNumericOperationFieldId } from '../../product-edit/bulk-edit';
-
-type StockQuantityRange = [ number | string, number | string ];
-type StockQuantityFilterRecord = Omit<
-	ProductEntityRecord,
-	'stock_quantity'
-> & {
-	stock_quantity?: number | string | null | StockQuantityRange;
-};
-
-const castValueToString = (
-	value: number | string | null | StockQuantityRange | undefined
-): string => {
-	if ( typeof value === 'number' ) {
-		return String( value );
-	} else if ( typeof value === 'string' ) {
-		return value;
-	}
-	return '';
-};
-
-const isBulkStockQuantityEdit = ( data: ProductEntityRecord ) =>
-	getBulkNumericOperationFieldId( 'stock_quantity' ) in data;
-
-const fieldDefinition = {
-	type: 'integer',
-	label: __( 'Stock quantity', 'woocommerce' ),
-	enableSorting: false,
-	enableHiding: false,
-	filterBy: {
-		operators: [
-			'is',
-			'greaterThan',
-			'greaterThanOrEqual',
-			'lessThan',
-			'lessThanOrEqual',
-			'between',
-		],
-	},
-} satisfies Partial< Field< ProductEntityRecord > >;
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	...fieldDefinition,
-	isVisible: ( item ) => {
-		return !! item.manage_stock;
-	},
-	Edit: ( {
-		data,
-		onChange,
-		hideLabelFromVision,
-		operator,
-		field,
-	}: DataFormControlProps< ProductEntityRecord > ) => {
-		const onChangeBetween = onChange as (
-			data: Partial< StockQuantityFilterRecord >
-		) => void;
-		const onChangeStockQuantity = onChange as (
-			data: Partial< StockQuantityFilterRecord >
-		) => void;
-		const raw = ( data as StockQuantityFilterRecord ).stock_quantity;
-		const disabled = field.isDisabled( { item: data, field } );
-
-		if ( operator === 'between' ) {
-			const [ minRaw = '', maxRaw = '' ] = Array.isArray( raw )
-				? raw
-				: [];
-			const min = String( minRaw );
-			const max = String( maxRaw );
-
-			return (
-				<Stack direction="row">
-					<InputControl
-						label={ __( 'From', 'woocommerce' ) }
-						type="number"
-						step={ 1 }
-						value={ min }
-						onChange={ ( event ) => {
-							const next = event.target.value;
-							const nextMin = next === '' ? '' : Number( next );
-							onChangeBetween( {
-								stock_quantity: [ nextMin, max ],
-							} );
-						} }
-					/>
-					<InputControl
-						label={ __( 'To', 'woocommerce' ) }
-						type="number"
-						step={ 1 }
-						value={ max }
-						onChange={ ( event ) => {
-							const next = event.target.value;
-							const nextMax = next === '' ? '' : Number( next );
-							onChangeBetween( {
-								stock_quantity: [ min, nextMax ],
-							} );
-						} }
-					/>
-				</Stack>
-			);
-		}
-
-		const value = castValueToString( raw );
-		const isBulkEdit = isBulkStockQuantityEdit( data );
-
-		return (
-			<InputControl
-				label={ field.label }
-				hideLabelFromVision={ hideLabelFromVision }
-				type="number"
-				step={ 1 }
-				value={ value }
-				placeholder={ field.placeholder }
-				disabled={ disabled }
-				onChange={ ( event ) => {
-					const next = event.target.value;
-					let stockQuantity: StockQuantityFilterRecord[ 'stock_quantity' ] =
-						next === '' ? null : Number( next );
-
-					if ( isBulkEdit ) {
-						stockQuantity = next;
-					}
-
-					onChangeStockQuantity( { stock_quantity: stockQuantity } );
-				} }
-			/>
-		);
-	},
-};
diff --git a/packages/js/experimental-products-app/src/fields/tags/field.test.tsx b/packages/js/experimental-products-app/src/fields/tags/field.test.tsx
deleted file mode 100644
index 46f49d10b4d..00000000000
--- a/packages/js/experimental-products-app/src/fields/tags/field.test.tsx
+++ /dev/null
@@ -1,37 +0,0 @@
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-
-import { fieldExtensions } from './field';
-
-const renderTags = ( item: Partial< ProductEntityRecord > ) => {
-	if ( ! fieldExtensions.render ) {
-		throw new Error( 'tags render not implemented' );
-	}
-
-	const render = fieldExtensions.render as ( props: {
-		item: ProductEntityRecord;
-	} ) => unknown;
-
-	return render( {
-		item: item as ProductEntityRecord,
-	} );
-};
-
-describe( 'tags field', () => {
-	it( 'renders tag names instead of tag IDs', () => {
-		expect(
-			renderTags( {
-				tags: [
-					{ id: 12, name: 'Summer' },
-					{ id: 34, name: 'Sale &amp; clearance' },
-				],
-			} )
-		).toBe( 'Summer, Sale & clearance' );
-	} );
-
-	it( 'renders nothing when there are no tags', () => {
-		expect( renderTags( { tags: [] } ) ).toBe( '' );
-	} );
-} );
diff --git a/packages/js/experimental-products-app/src/fields/tags/field.tsx b/packages/js/experimental-products-app/src/fields/tags/field.tsx
deleted file mode 100644
index ea08fafceb6..00000000000
--- a/packages/js/experimental-products-app/src/fields/tags/field.tsx
+++ /dev/null
@@ -1,66 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-import { decodeEntities } from '@wordpress/html-entities';
-import { resolveSelect } from '@wordpress/data';
-import { store as coreStore } from '@wordpress/core-data';
-
-import type { DataFormControlProps, Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-
-import { TaxonomyEdit } from '../components/taxonomy-edit';
-
-const fieldDefinition = {
-	type: 'array',
-	label: __( 'Tags', 'woocommerce' ),
-	enableSorting: false,
-	filterBy: {
-		operators: [ 'isAny', 'isNone' ],
-	},
-} satisfies Partial< Field< ProductEntityRecord > >;
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	...fieldDefinition,
-	getValue: ( { item } ) => {
-		return item.tags.map( ( { id } ) => id.toString() );
-	},
-	setValue: ( { value }: { value: string[] } ) => {
-		return {
-			tags: value.map( ( v ) => ( {
-				id: parseInt( v, 10 ),
-			} ) ),
-		};
-	},
-	getElements: async () => {
-		const records = ( await resolveSelect( coreStore ).getEntityRecords(
-			'taxonomy',
-			'product_tag',
-			{ per_page: -1 }
-		) ) as Array< { id: number; name: string } > | null;
-		return ( records ?? [] ).map( ( { id, name } ) => ( {
-			value: id.toString(),
-			label: decodeEntities( name ),
-		} ) );
-	},
-	render: ( { item } ) => {
-		return ( item.tags ?? [] )
-			.map( ( { name } ) => decodeEntities( name ?? '' ) )
-			.join( ', ' );
-	},
-	Edit: ( props: DataFormControlProps< ProductEntityRecord > ) => (
-		<TaxonomyEdit
-			{ ...props }
-			taxonomy="product_tag"
-			fieldProperty="tags"
-			searchPlaceholder={ __( 'Search or create tags', 'woocommerce' ) }
-			serverSearchThreshold={ 100 }
-			// @ts-expect-error wcSettings is a global variable injected by Woo core, and it doesn't have proper typings.
-			termCount={ window.wcSettings?.tagCount }
-		/>
-	),
-};
diff --git a/packages/js/experimental-products-app/src/fields/tax_status/field.tsx b/packages/js/experimental-products-app/src/fields/tax_status/field.tsx
deleted file mode 100644
index a21630fa28d..00000000000
--- a/packages/js/experimental-products-app/src/fields/tax_status/field.tsx
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-import { CheckboxControl } from '@wordpress/components';
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-
-import type { ProductEntityRecord } from '../types';
-
-const fieldDefinition = {
-	label: __( 'Tax Status', 'woocommerce' ),
-	enableSorting: false,
-	enableHiding: false,
-	filterBy: false,
-} satisfies Partial< Field< ProductEntityRecord > >;
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	...fieldDefinition,
-	enableSorting: false,
-	Edit: ( { data, onChange, field } ) => {
-		return (
-			<CheckboxControl
-				label={ field.label }
-				checked={ data.tax_status === 'taxable' }
-				onChange={ () =>
-					onChange( {
-						tax_status:
-							data.tax_status === 'taxable' ? 'none' : 'taxable',
-					} )
-				}
-			/>
-		);
-	},
-};
diff --git a/packages/js/experimental-products-app/src/fields/type/field.tsx b/packages/js/experimental-products-app/src/fields/type/field.tsx
deleted file mode 100644
index a0aceae702e..00000000000
--- a/packages/js/experimental-products-app/src/fields/type/field.tsx
+++ /dev/null
@@ -1,37 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-
-const fieldDefinition = {
-	type: 'text',
-	label: __( 'Product type', 'woocommerce' ),
-	enableSorting: false,
-	filterBy: {
-		operators: [ 'isAny', 'isNone' ],
-	},
-	elements: [
-		{ label: __( 'Simple', 'woocommerce' ), value: 'simple' },
-		{ label: __( 'Variable', 'woocommerce' ), value: 'variable' },
-		{ label: __( 'Grouped', 'woocommerce' ), value: 'grouped' },
-		{ label: __( 'Affiliate', 'woocommerce' ), value: 'external' },
-		{ label: __( 'Variation', 'woocommerce' ), value: 'variation' },
-	],
-} satisfies Partial< Field< ProductEntityRecord > >;
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	...fieldDefinition,
-	getValue: ( { item } ) => item.type,
-	render: ( { item }: { item: ProductEntityRecord } ) => {
-		const match = fieldDefinition.elements.find(
-			( element ) => element.value === item.type
-		);
-		return match ? match.label : item.type;
-	},
-};
diff --git a/packages/js/experimental-products-app/src/fields/types.ts b/packages/js/experimental-products-app/src/fields/types.ts
deleted file mode 100644
index 13dd0ed1ee9..00000000000
--- a/packages/js/experimental-products-app/src/fields/types.ts
+++ /dev/null
@@ -1,89 +0,0 @@
-/**
- * External dependencies
- */
-import type {
-	Product,
-	ProductStatus as WooProductStatus,
-} from '@woocommerce/data';
-
-export type ProductEntityAttribute = {
-	id: number;
-	name: string;
-	slug: string;
-	position: number;
-	visible: boolean;
-	variation: boolean;
-	options: string[];
-};
-
-export type ProductEntityDefaultAttribute = {
-	id: number;
-	name: string;
-	option: string;
-};
-
-export type ProductEntityRecord = Omit<
-	Product,
-	'attributes' | 'categories' | 'default_attributes' | 'tags'
-> & {
-	attributes: ProductEntityAttribute[];
-	default_attributes: ProductEntityDefaultAttribute[];
-	cost_of_goods_sold?: {
-		values?: Array< {
-			defined_value?: number | string | null;
-			effective_value?: number | string | null;
-		} >;
-		defined_value_is_additive?: boolean;
-		total_value?: number | string | null;
-	};
-	categories: Array< {
-		id: number;
-		name?: string;
-		image?: {
-			src?: string;
-			alt?: string;
-		};
-	} >;
-	tags: Array< {
-		id: number;
-		name?: string;
-	} >;
-	brands?: Array< {
-		id: number;
-		name?: string;
-		slug?: string;
-	} >;
-	global_unique_id?: string;
-	cross_sell_ids?: number[];
-	upsell_ids?: number[];
-	grouped_products?: number[];
-	date_on_sale_from?: string | null;
-	date_on_sale_to?: string | null;
-	parent_id?: number;
-	_embedded?: {
-		variations?: ProductEntityRecord[];
-	};
-	seo_title?: string;
-	seo_description?: string;
-	visible_in_pos?: boolean;
-	images: Array< {
-		alt: string;
-		date_created: string;
-		date_created_gmt: string;
-		date_modified: string;
-		date_modified_gmt: string;
-		id: number;
-		name: string;
-		src: string;
-		thumbnail: string;
-	} >;
-};
-
-export type ProductStatus = WooProductStatus;
-
-export type SettingsEntityRecord = {
-	values?: {
-		woocommerce_dimension_unit?: string;
-		woocommerce_weight_unit?: string;
-	};
-};
diff --git a/packages/js/experimental-products-app/src/fields/upsell_ids/field.tsx b/packages/js/experimental-products-app/src/fields/upsell_ids/field.tsx
deleted file mode 100644
index 2c57482ca2f..00000000000
--- a/packages/js/experimental-products-app/src/fields/upsell_ids/field.tsx
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord, ProductStatus } from '../types';
-
-import { ProductSelector } from '../components/product-selector';
-
-const LINKED_PRODUCT_STATUSES: ProductStatus[] = [ 'publish', 'draft' ];
-
-const fieldDefinition = {
-	label: __( 'Upsells', 'woocommerce' ),
-	description: __(
-		'Suggest higher-value or premium versions of this item to encourage upgrades. These will be shown on the same page as this product.',
-		'woocommerce'
-	),
-	enableSorting: false,
-	enableHiding: false,
-	filterBy: false,
-} satisfies Partial< Field< ProductEntityRecord > >;
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	...fieldDefinition,
-	Edit: ( { data, onChange, field } ) => (
-		<ProductSelector
-			label={ field.label }
-			selectedProductIds={
-				( data.upsell_ids as number[] | undefined ) ?? []
-			}
-			onSelectedProductIdsChange={ ( ids ) =>
-				onChange( { upsell_ids: ids } )
-			}
-			excludeProductIds={ data.id ? [ data.id ] : undefined }
-			includeProductStatuses={ LINKED_PRODUCT_STATUSES }
-		/>
-	),
-};
diff --git a/packages/js/experimental-products-app/src/fields/utils/currency.ts b/packages/js/experimental-products-app/src/fields/utils/currency.ts
deleted file mode 100644
index 97438f35890..00000000000
--- a/packages/js/experimental-products-app/src/fields/utils/currency.ts
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * External dependencies
- */
-import { CURRENCY } from '@woocommerce/settings';
-
-type CurrencyObject = {
-	code: string;
-	symbol: string;
-	symbolPosition: string;
-	precision: number;
-	decimalSeparator?: string;
-	thousandSeparator?: string;
-};
-
-export function getCurrencyObject(): CurrencyObject {
-	return {
-		code: CURRENCY.code || 'USD',
-		symbol: CURRENCY.symbol || '$',
-		symbolPosition: CURRENCY.symbolPosition || 'left',
-		precision: Number( CURRENCY.precision ?? 2 ),
-		decimalSeparator: CURRENCY.decimalSeparator,
-		thousandSeparator: CURRENCY.thousandSeparator,
-	};
-}
-
-export function formatCurrency(
-	value: number | string,
-	currencyCode = getCurrencyObject().code
-) {
-	const amount = typeof value === 'number' ? value : Number( value );
-	const locale =
-		typeof document !== 'undefined'
-			? document.documentElement.lang || 'en-US'
-			: 'en-US';
-	const { precision } = getCurrencyObject();
-
-	return new Intl.NumberFormat( locale, {
-		style: 'currency',
-		currency: currencyCode,
-		minimumFractionDigits: precision,
-		maximumFractionDigits: precision,
-	} ).format( amount );
-}
diff --git a/packages/js/experimental-products-app/src/fields/variation_active/field.test.tsx b/packages/js/experimental-products-app/src/fields/variation_active/field.test.tsx
deleted file mode 100644
index b33380ccce6..00000000000
--- a/packages/js/experimental-products-app/src/fields/variation_active/field.test.tsx
+++ /dev/null
@@ -1,206 +0,0 @@
-/**
- * External dependencies
- */
-import { fireEvent, render, screen } from '@testing-library/react';
-import type { DataFormControlProps } from '@wordpress/dataviews';
-import React from 'react';
-
-jest.mock( '@wordpress/ui', () => {
-	const ReactActual = jest.requireActual( 'react' );
-
-	return {
-		Badge: ( {
-			children,
-			intent,
-		}: {
-			children?: React.ReactNode;
-			intent?: string;
-		} ) =>
-			ReactActual.createElement(
-				'span',
-				{ 'data-intent': intent },
-				children
-			),
-		SelectControl: ( {
-			items,
-			label,
-			onValueChange,
-			placeholder,
-			value,
-		}: {
-			items: Array< { label: string; value: string } >;
-			label: string;
-			onValueChange: ( option: { value: string } ) => void;
-			placeholder?: string;
-			value?: { label: string; value: string };
-		} ) =>
-			ReactActual.createElement(
-				'fieldset',
-				null,
-				ReactActual.createElement( 'legend', null, label ),
-				ReactActual.createElement(
-					'div',
-					{ 'data-testid': 'selected-option' },
-					value?.label ?? placeholder ?? ''
-				),
-				items.map( ( item ) =>
-					ReactActual.createElement(
-						'button',
-						{
-							key: item.value,
-							onClick: () => onValueChange( item ),
-							type: 'button',
-						},
-						item.label
-					)
-				)
-			),
-	};
-} );
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-import {
-	fieldExtensions,
-	getVariationActiveValue,
-	isVariationActive,
-} from './field';
-
-const buildVariation = (
-	overrides: Partial< ProductEntityRecord > = {}
-): ProductEntityRecord =>
-	( {
-		id: 34,
-		parent_id: 12,
-		type: 'variation',
-		status: 'publish',
-		price: '12',
-		images: [],
-		categories: [],
-		tags: [],
-		...overrides,
-	} ) as ProductEntityRecord;
-
-describe( 'variation_active field', () => {
-	it.each( [
-		[ 'active', { status: 'publish', price: '12' }, true ],
-		[ 'active with a zero price', { status: 'publish', price: '0' }, true ],
-		[ 'inactive when private', { status: 'private', price: '12' }, false ],
-		[ 'inactive without a price', { status: 'publish', price: '' }, false ],
-	] as const )(
-		'identifies an %s variation',
-		( _label, overrides, expected ) => {
-			expect( isVariationActive( buildVariation( overrides ) ) ).toBe(
-				expected
-			);
-		}
-	);
-
-	it( 'returns active and inactive values for DataViews cells', () => {
-		expect(
-			fieldExtensions.getValue?.( {
-				item: buildVariation( { status: 'publish', price: '12' } ),
-			} as never )
-		).toBe( 'active' );
-		expect(
-			fieldExtensions.getValue?.( {
-				item: buildVariation( { status: 'publish', price: '' } ),
-			} as never )
-		).toBe( 'inactive' );
-		expect(
-			getVariationActiveValue(
-				buildVariation( { status: 'private', price: '12' } )
-			)
-		).toBe( 'inactive' );
-	} );
-
-	it( 'renders active and inactive badges for the table', () => {
-		if ( ! fieldExtensions.render ) {
-			throw new Error( 'variation_active render not implemented' );
-		}
-
-		const Render = fieldExtensions.render as React.ComponentType< {
-			item: ProductEntityRecord;
-		} >;
-		const { rerender } = render(
-			<Render
-				item={ buildVariation( { status: 'publish', price: '12' } ) }
-			/>
-		);
-
-		expect( screen.getByText( 'Active' ) ).toBeInTheDocument();
-
-		rerender(
-			<Render
-				item={ buildVariation( { status: 'publish', price: '' } ) }
-			/>
-		);
-
-		expect( screen.getByText( 'Inactive' ) ).toBeInTheDocument();
-	} );
-
-	it( 'maps active and inactive edits to variation post statuses', () => {
-		if ( ! fieldExtensions.Edit ) {
-			throw new Error( 'variation_active edit not implemented' );
-		}
-
-		const onChange = jest.fn();
-		const Edit = fieldExtensions.Edit as React.ComponentType<
-			DataFormControlProps< ProductEntityRecord >
-		>;
-
-		render(
-			<Edit
-				data={ buildVariation( { status: 'publish', price: '' } ) }
-				field={
-					{
-						...fieldExtensions,
-						id: 'variation_active',
-					} as DataFormControlProps< ProductEntityRecord >[ 'field' ]
-				}
-				onChange={ onChange }
-			/>
-		);
-
-		fireEvent.click( screen.getByRole( 'button', { name: 'Active' } ) );
-		expect( onChange ).toHaveBeenCalledWith( { status: 'publish' } );
-
-		fireEvent.click( screen.getByRole( 'button', { name: 'Inactive' } ) );
-		expect( onChange ).toHaveBeenCalledWith( { status: 'private' } );
-	} );
-
-	it( 'shows the mixed placeholder for bulk edits with different active values', () => {
-		if ( ! fieldExtensions.Edit ) {
-			throw new Error( 'variation_active edit not implemented' );
-		}
-
-		const Edit = fieldExtensions.Edit as React.ComponentType<
-			DataFormControlProps< ProductEntityRecord >
-		>;
-
-		render(
-			<Edit
-				data={
-					{
-						...buildVariation(),
-						variation_active: undefined,
-					} as ProductEntityRecord & Record< string, unknown >
-				}
-				field={
-					{
-						...fieldExtensions,
-						id: 'variation_active',
-						placeholder: 'Mixed',
-					} as DataFormControlProps< ProductEntityRecord >[ 'field' ]
-				}
-				onChange={ jest.fn() }
-			/>
-		);
-
-		expect( screen.getByTestId( 'selected-option' ) ).toHaveTextContent(
-			'Mixed'
-		);
-	} );
-} );
diff --git a/packages/js/experimental-products-app/src/fields/variation_active/field.tsx b/packages/js/experimental-products-app/src/fields/variation_active/field.tsx
deleted file mode 100644
index b03f6cd2fa1..00000000000
--- a/packages/js/experimental-products-app/src/fields/variation_active/field.tsx
+++ /dev/null
@@ -1,126 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-import { Badge, SelectControl } from '@wordpress/ui';
-
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord, ProductStatus } from '../types';
-
-type VariationActiveValue = 'active' | 'inactive';
-
-const ACTIVE_VALUE: VariationActiveValue = 'active';
-const INACTIVE_VALUE: VariationActiveValue = 'inactive';
-
-function isVariationActiveValue(
-	value: unknown
-): value is VariationActiveValue {
-	return value === ACTIVE_VALUE || value === INACTIVE_VALUE;
-}
-
-function hasPrice( item: Pick< ProductEntityRecord, 'price' > ) {
-	return item.price !== undefined && item.price !== null && item.price !== '';
-}
-
-export function isVariationActive(
-	item: Pick< ProductEntityRecord, 'price' | 'status' >
-) {
-	return item.status === 'publish' && hasPrice( item );
-}
-
-export function getVariationActiveValue(
-	item: Pick< ProductEntityRecord, 'price' | 'status' >
-): VariationActiveValue {
-	return isVariationActive( item ) ? ACTIVE_VALUE : INACTIVE_VALUE;
-}
-
-function getVariationActiveFormValue(
-	data: ProductEntityRecord & Record< string, unknown >
-): VariationActiveValue | undefined {
-	if ( isVariationActiveValue( data.variation_active ) ) {
-		return data.variation_active;
-	}
-
-	return getVariationActiveValue( data );
-}
-
-function getVariationActiveStatus(
-	value: VariationActiveValue
-): ProductStatus {
-	return value === ACTIVE_VALUE ? 'publish' : 'private';
-}
-
-export function getVariationActiveLabel( value: VariationActiveValue ) {
-	return value === ACTIVE_VALUE
-		? __( 'Active', 'woocommerce' )
-		: __( 'Inactive', 'woocommerce' );
-}
-
-export function VariationActiveBadge( {
-	value,
-}: {
-	value: VariationActiveValue;
-} ) {
-	return value === ACTIVE_VALUE ? (
-		<Badge intent="stable">{ getVariationActiveLabel( value ) }</Badge>
-	) : (
-		<Badge intent="draft">{ getVariationActiveLabel( value ) }</Badge>
-	);
-}
-
-const fieldDefinition = {
-	type: 'text',
-	label: __( 'Status', 'woocommerce' ),
-	enableSorting: false,
-	filterBy: false,
-	elements: [
-		{ value: ACTIVE_VALUE, label: __( 'Active', 'woocommerce' ) },
-		{ value: INACTIVE_VALUE, label: __( 'Inactive', 'woocommerce' ) },
-	],
-} satisfies Partial< Field< ProductEntityRecord > >;
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	...fieldDefinition,
-	getValue: ( { item } ) => getVariationActiveValue( item ),
-	render: ( { item }: { item: ProductEntityRecord } ) => (
-		<VariationActiveBadge value={ getVariationActiveValue( item ) } />
-	),
-	Edit: ( { data, onChange, field } ) => {
-		const options = field.elements ?? [];
-		const formData = data as ProductEntityRecord &
-			Record< string, unknown >;
-		const formValue =
-			field.placeholder &&
-			! isVariationActiveValue( formData.variation_active )
-				? undefined
-				: getVariationActiveFormValue( formData );
-		const selectedOption = options.find(
-			( option ) => option.value === formValue
-		);
-
-		return (
-			<SelectControl
-				label={ field.label }
-				placeholder={ field.placeholder }
-				value={ selectedOption }
-				items={ options }
-				onValueChange={ ( option ) => {
-					const selectedValue = option?.value;
-
-					if (
-						selectedValue === ACTIVE_VALUE ||
-						selectedValue === INACTIVE_VALUE
-					) {
-						onChange( {
-							status: getVariationActiveStatus( selectedValue ),
-						} );
-					}
-				} }
-			/>
-		);
-	},
-};
diff --git a/packages/js/experimental-products-app/src/fields/visibility_summary/field.tsx b/packages/js/experimental-products-app/src/fields/visibility_summary/field.tsx
deleted file mode 100644
index eebb82ae165..00000000000
--- a/packages/js/experimental-products-app/src/fields/visibility_summary/field.tsx
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * External dependencies
- */
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-
-import { ProductStatusBadge } from '../components/product-status-badge';
-
-const fieldDefinition = {
-	enableSorting: false,
-	enableHiding: false,
-	filterBy: false,
-} satisfies Partial< Field< ProductEntityRecord > >;
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	...fieldDefinition,
-	render: ( { item } ) => (
-		<div className="woocommerce-fields-field__visibility-summary">
-			<ProductStatusBadge
-				status={ item.status as ProductEntityRecord[ 'status' ] }
-			/>
-		</div>
-	),
-};
diff --git a/packages/js/experimental-products-app/src/fields/visibility_summary/style.scss b/packages/js/experimental-products-app/src/fields/visibility_summary/style.scss
deleted file mode 100644
index 2a8302a0a66..00000000000
--- a/packages/js/experimental-products-app/src/fields/visibility_summary/style.scss
+++ /dev/null
@@ -1,4 +0,0 @@
-.woocommerce-fields-field__visibility-summary .woocommerce-status-badge {
-	background: transparent;
-	padding-right: 0;
-}
diff --git a/packages/js/experimental-products-app/src/fields/weight/field.tsx b/packages/js/experimental-products-app/src/fields/weight/field.tsx
deleted file mode 100644
index b63c88a5a10..00000000000
--- a/packages/js/experimental-products-app/src/fields/weight/field.tsx
+++ /dev/null
@@ -1,64 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-import { useEntityRecord } from '@wordpress/core-data';
-import { InputControl, InputLayout } from '@wordpress/ui';
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-
-import type { ProductEntityRecord, SettingsEntityRecord } from '../types';
-import { isDimensionVisible } from '../components/dimension';
-
-const fieldDefinition = {
-	type: 'text',
-	label: __( 'Weight', 'woocommerce' ),
-	enableSorting: false,
-	enableHiding: false,
-	filterBy: false,
-} satisfies Partial< Field< ProductEntityRecord > >;
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	...fieldDefinition,
-	label: __( 'Weight', 'woocommerce' ),
-	isVisible: isDimensionVisible,
-	Edit: ( { data, onChange, field } ) => {
-		const {
-			record: storeProductsSettings,
-			isResolving: storeProductsSettingsResolving,
-		} = useEntityRecord< SettingsEntityRecord >(
-			'root',
-			'settings',
-			'products'
-		);
-
-		if ( storeProductsSettingsResolving ) {
-			return null;
-		}
-
-		const weightUnit =
-			storeProductsSettings?.values?.woocommerce_weight_unit;
-
-		return (
-			<InputControl
-				label={ field.label }
-				placeholder={ field.placeholder }
-				value={ data.weight }
-				onChange={ ( event ) =>
-					onChange( { weight: event.target.value } )
-				}
-				type="number"
-				min={ 0 }
-				step="any"
-				suffix={
-					<InputLayout.Slot padding="minimal">
-						{ weightUnit }
-					</InputLayout.Slot>
-				}
-			/>
-		);
-	},
-};
diff --git a/packages/js/experimental-products-app/src/fields/width/field.tsx b/packages/js/experimental-products-app/src/fields/width/field.tsx
deleted file mode 100644
index 1b72dc4f440..00000000000
--- a/packages/js/experimental-products-app/src/fields/width/field.tsx
+++ /dev/null
@@ -1,26 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-
-import { createDimensionField } from '../components/dimension';
-
-const fieldDefinition = {
-	type: 'text',
-	label: __( 'Width', 'woocommerce' ),
-	enableSorting: false,
-	enableHiding: false,
-	filterBy: false,
-} satisfies Partial< Field< ProductEntityRecord > >;
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	...fieldDefinition,
-	...createDimensionField( 'width' ),
-};
diff --git a/packages/js/experimental-products-app/src/index.ts b/packages/js/experimental-products-app/src/index.ts
deleted file mode 100644
index 56858c6c385..00000000000
--- a/packages/js/experimental-products-app/src/index.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-export * from './products';
-export { ProductsApp } from './app';
-export {
-	initializeProductAttributesView,
-	initializeVariationView,
-} from './variation-view-app';
diff --git a/packages/js/experimental-products-app/src/layout.tsx b/packages/js/experimental-products-app/src/layout.tsx
deleted file mode 100644
index 99a8d4d1038..00000000000
--- a/packages/js/experimental-products-app/src/layout.tsx
+++ /dev/null
@@ -1,108 +0,0 @@
-/**
- * External dependencies
- */
-import {
-	useViewportMatch,
-	useResizeObserver,
-	useReducedMotion,
-} from '@wordpress/compose';
-import { __ } from '@wordpress/i18n';
-import { privateApis as editorPrivateApis } from '@wordpress/editor';
-import {
-	__unstableMotion as motion,
-	__unstableAnimatePresence as AnimatePresence,
-} from '@wordpress/components';
-// @ts-expect-error - This component isn't available in WordPress 6.9. Given that it's an experimental project, it's okay to use it here. Remove the check below when WordPress 7.0 is the minimum supported version.
-import { SnackbarNotices } from '@wordpress/notices';
-
-/**
- * Internal dependencies
- */
-import SidebarContent from './sidebar';
-import { Route } from './router';
-import { unlock } from './lock-unlock';
-
-const { NavigableRegion } = unlock( editorPrivateApis );
-
-const ANIMATION_DURATION = 0.3;
-
-type LayoutProps = {
-	route: Route;
-	showNewNavigation: boolean;
-};
-
-export function Layout( { route, showNewNavigation = false }: LayoutProps ) {
-	const [ fullResizer ] = useResizeObserver();
-	const isMobileViewport = useViewportMatch( 'medium', '<' );
-	const disableMotion = useReducedMotion();
-
-	const { key: routeKey, areas, widths } = route;
-	const mobileArea = areas.mobile === true ? areas.content : areas.mobile;
-
-	return (
-		<>
-			{ fullResizer }
-			<div className="edit-site-layout">
-				<div className="edit-site-layout__content">
-					{ /*
-						The NavigableRegion must always be rendered and not use
-						`inert` otherwise `useNavigateRegions` will fail.
-					*/ }
-					{ ( ! isMobileViewport || ! areas.mobile ) &&
-						showNewNavigation && (
-							<NavigableRegion
-								ariaLabel={ __( 'Navigation', 'woocommerce' ) }
-								className="edit-site-layout__sidebar-region"
-							>
-								<AnimatePresence>
-									<motion.div
-										initial={ { opacity: 0 } }
-										animate={ { opacity: 1 } }
-										exit={ { opacity: 0 } }
-										transition={ {
-											type: 'tween',
-											duration:
-												// Disable transition in mobile to emulate a full page transition.
-												disableMotion ||
-												isMobileViewport
-													? 0
-													: ANIMATION_DURATION,
-											ease: 'easeOut',
-										} }
-										className="edit-site-layout__sidebar"
-									>
-										<SidebarContent routeKey={ routeKey }>
-											{ areas.sidebar }
-										</SidebarContent>
-									</motion.div>
-								</AnimatePresence>
-							</NavigableRegion>
-						) }
-
-					{ SnackbarNotices && (
-						<SnackbarNotices className="product_page_woocommerce-products-dashboard-snackbar" />
-					) }
-
-					{ ! isMobileViewport && areas.content && (
-						<div
-							className="edit-site-layout__area"
-							style={ {
-								maxWidth: widths?.content,
-							} }
-						>
-							{ areas.content }
-						</div>
-					) }
-
-					{ isMobileViewport && mobileArea && (
-						<div className="edit-site-layout__area">
-							{ mobileArea }
-						</div>
-					) }
-
-					{ ! isMobileViewport && areas.edit }
-				</div>
-			</div>
-		</>
-	);
-}
diff --git a/packages/js/experimental-products-app/src/lock-unlock.ts b/packages/js/experimental-products-app/src/lock-unlock.ts
deleted file mode 100644
index 7946db24871..00000000000
--- a/packages/js/experimental-products-app/src/lock-unlock.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-/**
- * External dependencies
- */
-import { __dangerousOptInToUnstableAPIsOnlyForCoreModules } from '@wordpress/private-apis';
-
-const { lock, unlock } = __dangerousOptInToUnstableAPIsOnlyForCoreModules(
-	'I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.',
-	'@wordpress/edit-site'
-);
-
-export { lock, unlock };
diff --git a/packages/js/experimental-products-app/src/product-edit/bulk-edit.ts b/packages/js/experimental-products-app/src/product-edit/bulk-edit.ts
deleted file mode 100644
index 211e9fe8e44..00000000000
--- a/packages/js/experimental-products-app/src/product-edit/bulk-edit.ts
+++ /dev/null
@@ -1,463 +0,0 @@
-/**
- * External dependencies
- */
-import type { Field } from '@wordpress/dataviews';
-import { __ } from '@wordpress/i18n';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../fields/types';
-import { getCurrencyObject } from '../fields/utils/currency';
-import { validatePrice } from '../fields/price/utils';
-import { validateSalePrice } from '../fields/sale_price/validation';
-import { buildMergedProductEditData } from './utils';
-
-type ProductField = Field< ProductEntityRecord >;
-type DimensionFieldId = keyof ProductEntityRecord[ 'dimensions' ];
-
-export type ProductBulkEditFieldState = {
-	isEmpty: boolean;
-	isMixed: boolean;
-	value: unknown;
-	placeholder?: string;
-};
-export type ProductBulkEditData = {
-	data: ProductEntityRecord;
-	fieldStates: Record< string, ProductBulkEditFieldState >;
-};
-export type BulkNumericFieldId =
-	| 'regular_price'
-	| 'sale_price'
-	| 'cost_of_goods_sold'
-	| 'stock_quantity';
-export type BulkNumericOperation =
-	| 'dont_change'
-	| 'set'
-	| 'increase'
-	| 'decrease'
-	| 'increase_percent'
-	| 'decrease_percent';
-export type BulkNumericEdit = {
-	operation: BulkNumericOperation;
-	value: string;
-};
-export type ProductBulkEditFormData = ProductEntityRecord &
-	Record< string, unknown >;
-
-export const BULK_EDIT_MIXED_LABEL = __( 'Mixed', 'woocommerce' );
-
-export const DEFAULT_BULK_NUMERIC_EDIT: BulkNumericEdit = {
-	operation: 'dont_change',
-	value: '',
-};
-
-const BULK_NUMERIC_OPERATION_FIELD_SUFFIX = '__bulk_operation';
-
-const BULK_NUMERIC_FIELD_ID_SET = new Set< BulkNumericFieldId >( [
-	'regular_price',
-	'sale_price',
-	'cost_of_goods_sold',
-	'stock_quantity',
-] );
-
-const BULK_MONEY_FIELD_ID_SET = new Set< BulkNumericFieldId >( [
-	'regular_price',
-	'sale_price',
-	'cost_of_goods_sold',
-] );
-
-const FIELD_DATA_KEYS: Record< string, string > = {
-	product_status: 'status',
-	stock: 'stock_status',
-};
-
-const DIMENSION_FIELD_ID_SET = new Set< DimensionFieldId >( [
-	'length',
-	'width',
-	'height',
-] );
-
-export function getBulkNumericOperationFieldId( fieldId: BulkNumericFieldId ) {
-	return `${ fieldId }${ BULK_NUMERIC_OPERATION_FIELD_SUFFIX }`;
-}
-
-export function isBulkNumericOperationFieldId( fieldId: string ) {
-	return fieldId.endsWith( BULK_NUMERIC_OPERATION_FIELD_SUFFIX );
-}
-
-function normalizeValue( value: unknown ) {
-	if ( value === undefined ) {
-		return '__undefined__';
-	}
-
-	return JSON.stringify( value );
-}
-
-function getFieldDataKey( fieldId: string ) {
-	return FIELD_DATA_KEYS[ fieldId ] ?? fieldId;
-}
-
-function getDefinedCostValue( product: ProductEntityRecord ) {
-	return product.cost_of_goods_sold?.values?.[ 0 ]?.defined_value;
-}
-
-function isDimensionFieldId( fieldId: string ): fieldId is DimensionFieldId {
-	return DIMENSION_FIELD_ID_SET.has( fieldId as DimensionFieldId );
-}
-
-function getProductFieldValue(
-	product: ProductEntityRecord,
-	field: ProductField
-) {
-	if ( field.id === 'cost_of_goods_sold' ) {
-		return getDefinedCostValue( product );
-	}
-
-	if ( isDimensionFieldId( field.id ) ) {
-		return product.dimensions?.[ field.id ] ?? '';
-	}
-
-	if ( field.getValue ) {
-		return field.getValue( { item: product } );
-	}
-
-	const dataKey = getFieldDataKey( field.id );
-
-	return product[ dataKey as keyof ProductEntityRecord ];
-}
-
-function isEmptyBulkValue( value: unknown ) {
-	if ( value === undefined || value === null || value === '' ) {
-		return true;
-	}
-
-	if ( Array.isArray( value ) ) {
-		return value.length === 0;
-	}
-
-	return false;
-}
-
-function getBulkNumericValue(
-	product: ProductEntityRecord,
-	fieldId: BulkNumericFieldId
-) {
-	if ( fieldId === 'cost_of_goods_sold' ) {
-		return getDefinedCostValue( product );
-	}
-
-	return product[ fieldId ];
-}
-
-function toFiniteNumber( value: unknown ) {
-	if ( value === '' || value === null || value === undefined ) {
-		return undefined;
-	}
-
-	const numberValue = Number( value );
-
-	return Number.isFinite( numberValue ) ? numberValue : undefined;
-}
-
-function getPrecisionMultiplier() {
-	return Math.pow( 10, getCurrencyObject().precision );
-}
-
-function roundMoneyValue( value: number ) {
-	const multiplier = getPrecisionMultiplier();
-
-	return Math.round( value * multiplier ) / multiplier;
-}
-
-function formatMoneyValue( value: number ) {
-	return roundMoneyValue( value ).toFixed( getCurrencyObject().precision );
-}
-
-function formatStockQuantityValue( value: number ) {
-	return Math.round( value );
-}
-
-function clampBulkNumericValue( value: number ) {
-	return Math.max( 0, value );
-}
-
-export function buildProductBulkEditData(
-	products: ProductEntityRecord[],
-	fields: ProductField[]
-): ProductBulkEditData {
-	const data = buildMergedProductEditData( products );
-	const fieldStates = fields.reduce<
-		Record< string, ProductBulkEditFieldState >
-	>( ( states, field ) => {
-		const values = products.map( ( product ) =>
-			getProductFieldValue( product, field )
-		);
-		const firstValue = values[ 0 ];
-		const areValuesEqual = values.every(
-			( value ) =>
-				normalizeValue( value ) === normalizeValue( firstValue )
-		);
-		const isEmpty = areValuesEqual && isEmptyBulkValue( firstValue );
-
-		states[ field.id ] = {
-			isEmpty,
-			isMixed: ! areValuesEqual,
-			value: areValuesEqual ? firstValue : undefined,
-			placeholder: ! areValuesEqual ? BULK_EDIT_MIXED_LABEL : undefined,
-		};
-
-		return states;
-	}, {} );
-
-	return {
-		data,
-		fieldStates,
-	};
-}
-
-export function isBulkNumericFieldId(
-	fieldId: string
-): fieldId is BulkNumericFieldId {
-	return BULK_NUMERIC_FIELD_ID_SET.has( fieldId as BulkNumericFieldId );
-}
-
-export function isBulkNumericEditPending( edit?: BulkNumericEdit ) {
-	return Boolean( edit && edit.operation !== 'dont_change' );
-}
-
-export function getBulkNumericOperations(
-	fieldId: BulkNumericFieldId
-): BulkNumericOperation[] {
-	const baseOperations: BulkNumericOperation[] = [
-		'dont_change',
-		'set',
-		'increase',
-		'decrease',
-	];
-
-	if ( fieldId === 'stock_quantity' ) {
-		return baseOperations;
-	}
-
-	return [ ...baseOperations, 'increase_percent', 'decrease_percent' ];
-}
-
-export function isBulkNumericEditValid(
-	fieldId: BulkNumericFieldId,
-	edit?: BulkNumericEdit
-) {
-	if ( ! isBulkNumericEditPending( edit ) ) {
-		return true;
-	}
-
-	const numberValue = toFiniteNumber( edit?.value );
-
-	if ( numberValue === undefined || numberValue < 0 ) {
-		return false;
-	}
-
-	if ( fieldId === 'stock_quantity' && ! Number.isInteger( numberValue ) ) {
-		return false;
-	}
-
-	return true;
-}
-
-function getBulkNumericOperationFromData(
-	data: ProductBulkEditFormData,
-	fieldId: BulkNumericFieldId
-): BulkNumericOperation {
-	const operation =
-		data[ getBulkNumericOperationFieldId( fieldId ) ] ??
-		DEFAULT_BULK_NUMERIC_EDIT.operation;
-
-	return typeof operation === 'string' &&
-		getBulkNumericOperations( fieldId ).includes(
-			operation as BulkNumericOperation
-		)
-		? ( operation as BulkNumericOperation )
-		: DEFAULT_BULK_NUMERIC_EDIT.operation;
-}
-
-export function getBulkNumericEditFromData(
-	data: ProductBulkEditFormData,
-	fieldId: BulkNumericFieldId
-): BulkNumericEdit {
-	const value =
-		fieldId === 'cost_of_goods_sold'
-			? getDefinedCostValue( data )
-			: data[ fieldId ];
-
-	return {
-		operation: getBulkNumericOperationFromData( data, fieldId ),
-		value: value === undefined || value === null ? '' : String( value ),
-	};
-}
-
-export function isBulkNumericPercentOperation( operation: unknown ) {
-	return operation === 'increase_percent' || operation === 'decrease_percent';
-}
-
-export function isBulkNumericPercentEdit(
-	data: ProductBulkEditFormData,
-	fieldId: string
-) {
-	if ( ! isBulkNumericFieldId( fieldId ) ) {
-		return false;
-	}
-
-	return isBulkNumericPercentOperation(
-		getBulkNumericEditFromData( data, fieldId ).operation
-	);
-}
-
-export function getBulkNumericEditsFromData(
-	data: ProductBulkEditFormData
-): Partial< Record< BulkNumericFieldId, BulkNumericEdit > > {
-	return Array.from( BULK_NUMERIC_FIELD_ID_SET ).reduce<
-		Partial< Record< BulkNumericFieldId, BulkNumericEdit > >
-	>( ( edits, fieldId ) => {
-		edits[ fieldId ] = getBulkNumericEditFromData( data, fieldId );
-		return edits;
-	}, {} );
-}
-
-function calculateBulkNumericValue(
-	currentValue: unknown,
-	edit: BulkNumericEdit
-) {
-	const editValue = toFiniteNumber( edit.value );
-
-	if ( editValue === undefined ) {
-		return undefined;
-	}
-
-	if ( edit.operation === 'set' ) {
-		return editValue;
-	}
-
-	const currentNumber = toFiniteNumber( currentValue );
-
-	if ( currentNumber === undefined ) {
-		return undefined;
-	}
-
-	switch ( edit.operation ) {
-		case 'increase':
-			return currentNumber + editValue;
-		case 'decrease':
-			return currentNumber - editValue;
-		case 'increase_percent':
-			return currentNumber + currentNumber * ( editValue / 100 );
-		case 'decrease_percent':
-			return currentNumber - currentNumber * ( editValue / 100 );
-		default:
-			return undefined;
-	}
-}
-
-function getUpdatedCostOfGoodsSold(
-	product: ProductEntityRecord,
-	value: string
-): ProductEntityRecord[ 'cost_of_goods_sold' ] {
-	const costOfGoodsSold = product.cost_of_goods_sold ?? {};
-	const [ firstValue = {}, ...remainingValues ] =
-		costOfGoodsSold.values ?? [];
-
-	return {
-		...costOfGoodsSold,
-		values: [
-			{
-				...firstValue,
-				defined_value: value,
-			},
-			...remainingValues,
-		],
-	};
-}
-
-export function getBulkNumericChangesForProduct(
-	product: ProductEntityRecord,
-	edits: Partial< Record< BulkNumericFieldId, BulkNumericEdit > >
-): Partial< ProductEntityRecord > {
-	const changes: Partial< ProductEntityRecord > = {};
-
-	Object.entries( edits ).forEach( ( [ fieldId, edit ] ) => {
-		if (
-			! edit ||
-			! isBulkNumericFieldId( fieldId ) ||
-			! isBulkNumericEditPending( edit ) ||
-			! isBulkNumericEditValid( fieldId, edit )
-		) {
-			return;
-		}
-
-		const calculatedValue = calculateBulkNumericValue(
-			getBulkNumericValue( product, fieldId ),
-			edit
-		);
-
-		if ( calculatedValue === undefined ) {
-			return;
-		}
-
-		const clampedValue = clampBulkNumericValue( calculatedValue );
-
-		if ( fieldId === 'stock_quantity' ) {
-			changes.stock_quantity = formatStockQuantityValue( clampedValue );
-			return;
-		}
-
-		const nextValue = BULK_MONEY_FIELD_ID_SET.has( fieldId )
-			? formatMoneyValue( clampedValue )
-			: String( clampedValue );
-
-		if ( fieldId === 'cost_of_goods_sold' ) {
-			changes.cost_of_goods_sold = getUpdatedCostOfGoodsSold(
-				product,
-				nextValue
-			);
-			return;
-		}
-
-		changes[ fieldId ] = nextValue;
-	} );
-
-	return changes;
-}
-
-export function validateBulkNumericEdits(
-	products: ProductEntityRecord[],
-	edits: Partial< Record< BulkNumericFieldId, BulkNumericEdit > >
-) {
-	for ( const product of products ) {
-		const projectedProduct = {
-			...product,
-			...getBulkNumericChangesForProduct( product, edits ),
-		};
-		const regularPriceError = validatePrice(
-			projectedProduct.regular_price
-		);
-
-		if ( regularPriceError ) {
-			return regularPriceError;
-		}
-
-		const salePriceError = validateSalePrice( projectedProduct );
-
-		if ( salePriceError ) {
-			return salePriceError;
-		}
-
-		const costOfGoodsSoldError = validatePrice(
-			getDefinedCostValue( projectedProduct )
-		);
-
-		if ( costOfGoodsSoldError ) {
-			return costOfGoodsSoldError;
-		}
-	}
-
-	return null;
-}
diff --git a/packages/js/experimental-products-app/src/product-edit/bulk-numeric-control.tsx b/packages/js/experimental-products-app/src/product-edit/bulk-numeric-control.tsx
deleted file mode 100644
index 2337777e90d..00000000000
--- a/packages/js/experimental-products-app/src/product-edit/bulk-numeric-control.tsx
+++ /dev/null
@@ -1,77 +0,0 @@
-/**
- * External dependencies
- */
-import { SelectControl } from '@wordpress/ui';
-import type { DataFormControlProps, Field } from '@wordpress/dataviews';
-import { __ } from '@wordpress/i18n';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../fields/types';
-import type {
-	BulkNumericFieldId,
-	BulkNumericOperation,
-	ProductBulkEditFormData,
-} from './bulk-edit';
-import {
-	DEFAULT_BULK_NUMERIC_EDIT,
-	getBulkNumericOperationFieldId,
-	getBulkNumericOperations,
-} from './bulk-edit';
-
-const OPERATION_LABELS: Record< BulkNumericOperation, string > = {
-	dont_change: __( 'Don’t change', 'woocommerce' ),
-	set: __( 'Set to', 'woocommerce' ),
-	increase: __( 'Increase by amount', 'woocommerce' ),
-	decrease: __( 'Decrease by amount', 'woocommerce' ),
-	increase_percent: __( 'Increase by %', 'woocommerce' ),
-	decrease_percent: __( 'Decrease by %', 'woocommerce' ),
-};
-
-function BulkNumericOperationControl( {
-	data,
-	field,
-	onChange,
-}: DataFormControlProps< ProductEntityRecord > ) {
-	const items = field.elements ?? [];
-	const value =
-		( data as ProductBulkEditFormData )[ field.id ] ??
-		DEFAULT_BULK_NUMERIC_EDIT.operation;
-	const selectedOption =
-		items.find( ( option ) => option.value === value ) ?? items[ 0 ];
-
-	return (
-		<SelectControl
-			label={ field.label }
-			hideLabelFromVision
-			value={ selectedOption }
-			items={ items }
-			onValueChange={ ( option ) => {
-				onChange( {
-					[ field.id ]:
-						option?.value ?? DEFAULT_BULK_NUMERIC_EDIT.operation,
-				} as Partial< ProductEntityRecord > );
-			} }
-		/>
-	);
-}
-
-export function createBulkNumericOperationField(
-	field: Field< ProductEntityRecord >,
-	fieldId: BulkNumericFieldId
-): Field< ProductEntityRecord > {
-	return {
-		id: getBulkNumericOperationFieldId( fieldId ),
-		label: field.label,
-		type: 'text',
-		enableHiding: false,
-		enableSorting: false,
-		filterBy: false,
-		elements: getBulkNumericOperations( fieldId ).map( ( operation ) => ( {
-			label: OPERATION_LABELS[ operation ],
-			value: operation,
-		} ) ),
-		Edit: BulkNumericOperationControl,
-	};
-}
diff --git a/packages/js/experimental-products-app/src/product-edit/index.tsx b/packages/js/experimental-products-app/src/product-edit/index.tsx
deleted file mode 100644
index d971b264e0e..00000000000
--- a/packages/js/experimental-products-app/src/product-edit/index.tsx
+++ /dev/null
@@ -1,924 +0,0 @@
-/**
- * External dependencies
- */
-import { Button, CheckboxControl, Spinner } from '@wordpress/components';
-import { store as coreStore } from '@wordpress/core-data';
-import { select as wpSelect, useDispatch, useSelect } from '@wordpress/data';
-import {
-	DataForm,
-	type DataFormControlProps,
-	type FormField,
-} from '@wordpress/dataviews';
-import { useCallback, useEffect, useMemo, useState } from '@wordpress/element';
-import { __, sprintf } from '@wordpress/i18n';
-import { store as noticesStore } from '@wordpress/notices';
-import { privateApis as routerPrivateApis } from '@wordpress/router';
-import { Drawer } from '@wordpress/ui';
-
-/**
- * Internal dependencies
- */
-import { productFields } from '../product-list/fields';
-import {
-	getProductListNavigationPath,
-	getSelectionFromPostId,
-} from '../product-list/utils';
-import type { ProductEntityRecord } from '../fields/types';
-import { unlock } from '../lock-unlock';
-import {
-	findProductInList,
-	getProductEditRecord,
-	getProductWithUpdatedVariation,
-	getProductEditFields,
-	getProductTypeFormFields,
-	getVisibleProductEditFields,
-	isProductVariation,
-} from './utils';
-import {
-	buildProductBulkEditData,
-	DEFAULT_BULK_NUMERIC_EDIT,
-	getBulkNumericEditFromData,
-	getBulkNumericEditsFromData,
-	getBulkNumericChangesForProduct,
-	getBulkNumericOperationFieldId,
-	isBulkNumericEditPending,
-	isBulkNumericEditValid,
-	isBulkNumericFieldId,
-	isBulkNumericOperationFieldId,
-	validateBulkNumericEdits,
-} from './bulk-edit';
-import type {
-	BulkNumericEdit,
-	BulkNumericFieldId,
-	ProductBulkEditFormData,
-	ProductBulkEditFieldState,
-} from './bulk-edit';
-import { saveSelectedProducts } from './save';
-import { createBulkNumericOperationField } from './bulk-numeric-control';
-
-const { useHistory, useLocation } = unlock( routerPrivateApis );
-
-type ProductEditFormProps = {
-	bulkEditData: ProductBulkEditFormData;
-	editableFields: ReturnType< typeof getProductEditFields >;
-	onChange: ( changes: Partial< ProductEntityRecord > ) => void;
-	selectedProducts: ProductEntityRecord[];
-};
-
-type ProductEditProps = {
-	products: ProductEntityRecord[];
-	isOpen: boolean;
-};
-
-type ProductEditField = ReturnType< typeof getProductEditFields >[ number ];
-
-function BulkBooleanControl( {
-	data,
-	field,
-	onChange,
-}: DataFormControlProps< ProductEntityRecord > ) {
-	return (
-		<CheckboxControl
-			label={ field.label }
-			checked={ false }
-			indeterminate
-			onChange={ ( value ) => {
-				onChange(
-					field.setValue( {
-						item: data,
-						value,
-					} )
-				);
-			} }
-		/>
-	);
-}
-
-function getBulkNumericPlaceholder(
-	fieldState: ProductBulkEditFieldState | undefined
-) {
-	if ( fieldState?.placeholder ) {
-		return fieldState.placeholder;
-	}
-
-	if ( ! fieldState || fieldState.isEmpty ) {
-		return undefined;
-	}
-
-	return String( fieldState.value ?? '' );
-}
-
-function getCostOfGoodsSoldDataWithValue(
-	data: ProductEntityRecord,
-	value: string
-) {
-	const costOfGoodsSold = data.cost_of_goods_sold ?? {};
-	const [ firstValue = {}, ...remainingValues ] =
-		costOfGoodsSold.values ?? [];
-
-	return {
-		...costOfGoodsSold,
-		values: [
-			{
-				...firstValue,
-				defined_value: value,
-			},
-			...remainingValues,
-		],
-	};
-}
-
-function isDimensionChanges(
-	value: unknown
-): value is Partial< ProductEntityRecord[ 'dimensions' ] > {
-	return (
-		Boolean( value ) &&
-		typeof value === 'object' &&
-		! Array.isArray( value )
-	);
-}
-
-function mergeProductChangesForProduct(
-	product: ProductEntityRecord,
-	changes: Partial< ProductEntityRecord >
-): Partial< ProductEntityRecord > {
-	const { dimensions, ...remainingChanges } = changes;
-
-	if ( ! isDimensionChanges( dimensions ) ) {
-		return changes;
-	}
-
-	return {
-		...remainingChanges,
-		dimensions: {
-			...product.dimensions,
-			...dimensions,
-		} as ProductEntityRecord[ 'dimensions' ],
-	};
-}
-
-function getBulkEditFormData(
-	mergedData: ProductEntityRecord,
-	bulkEditData: ProductBulkEditFormData,
-	fieldStates: Record< string, ProductBulkEditFieldState >
-): ProductBulkEditFormData {
-	const data: ProductBulkEditFormData = {
-		...mergedData,
-		...bulkEditData,
-	};
-
-	if ( isDimensionChanges( bulkEditData.dimensions ) ) {
-		data.dimensions = {
-			...( isDimensionChanges( mergedData.dimensions )
-				? mergedData.dimensions
-				: {} ),
-			...bulkEditData.dimensions,
-		} as ProductEntityRecord[ 'dimensions' ];
-	}
-
-	Object.keys( fieldStates ).forEach( ( fieldId ) => {
-		if ( fieldId === 'stock' && fieldStates[ fieldId ].isMixed ) {
-			( data as Record< string, unknown > ).stock_status = '';
-			return;
-		}
-
-		if ( fieldId === 'variation_active' ) {
-			( data as Record< string, unknown > ).variation_active =
-				fieldStates[ fieldId ].isMixed
-					? undefined
-					: fieldStates[ fieldId ].value;
-			return;
-		}
-
-		if ( ! isBulkNumericFieldId( fieldId ) ) {
-			return;
-		}
-
-		const operationFieldId = getBulkNumericOperationFieldId( fieldId );
-		data[ operationFieldId ] =
-			bulkEditData[ operationFieldId ] ??
-			DEFAULT_BULK_NUMERIC_EDIT.operation;
-
-		if ( fieldId === 'cost_of_goods_sold' ) {
-			const editValue = getBulkNumericEditFromData(
-				bulkEditData,
-				fieldId
-			).value;
-
-			data.cost_of_goods_sold = getCostOfGoodsSoldDataWithValue(
-				mergedData,
-				editValue
-			);
-			return;
-		}
-
-		( data as Record< string, unknown > )[ fieldId ] =
-			bulkEditData[ fieldId ] ?? DEFAULT_BULK_NUMERIC_EDIT.value;
-	} );
-
-	return data;
-}
-
-function getBulkEnhancedProductEditFields( {
-	fieldStates,
-	isBulkEdit,
-	visibleFields,
-}: {
-	fieldStates: Record< string, ProductBulkEditFieldState >;
-	isBulkEdit: boolean;
-	visibleFields: ProductEditField[];
-} ) {
-	if ( ! isBulkEdit ) {
-		return visibleFields;
-	}
-
-	return visibleFields
-		.map( ( field ) => {
-			const fieldState = fieldStates[ field.id ];
-			const enhancedField = {
-				...field,
-				placeholder: fieldState?.placeholder ?? field.placeholder,
-				...( field.id === 'name'
-					? {
-							isValid: {
-								...field.isValid,
-								required: false,
-							},
-					  }
-					: {} ),
-			};
-
-			if ( isBulkNumericFieldId( field.id ) ) {
-				const fieldId = field.id;
-
-				return [
-					createBulkNumericOperationField( enhancedField, fieldId ),
-					{
-						...enhancedField,
-						placeholder: getBulkNumericPlaceholder( fieldState ),
-						isDisabled: ( {
-							item,
-						}: {
-							item: ProductEntityRecord;
-						} ) =>
-							getBulkNumericEditFromData(
-								item as ProductBulkEditFormData,
-								fieldId
-							).operation === DEFAULT_BULK_NUMERIC_EDIT.operation,
-					},
-				];
-			}
-
-			if (
-				fieldState?.isMixed &&
-				( field.type === 'boolean' || field.Edit === 'toggle' )
-			) {
-				return {
-					...enhancedField,
-					Edit: BulkBooleanControl,
-				};
-			}
-
-			return [ enhancedField ];
-		} )
-		.flat();
-}
-
-function injectBulkNumericOperationFormFields(
-	formFields: Array< FormField | string >,
-	fieldLabels: Map< string, string | undefined >
-): Array< FormField | string > {
-	return formFields.map( ( formField ) => {
-		if ( typeof formField === 'string' ) {
-			if ( ! isBulkNumericFieldId( formField ) ) {
-				return formField;
-			}
-
-			return {
-				id: `${ formField }-bulk-edit-fields`,
-				label: fieldLabels.get( formField ),
-				layout: { type: 'row' as const },
-				children: [
-					{
-						id: getBulkNumericOperationFieldId( formField ),
-						layout: {
-							type: 'regular' as const,
-							labelPosition: 'none' as const,
-						},
-					},
-					{
-						id: formField,
-						layout: {
-							type: 'regular' as const,
-							labelPosition: 'none' as const,
-						},
-					},
-				],
-			};
-		}
-
-		return {
-			...formField,
-			children: formField.children
-				? injectBulkNumericOperationFormFields(
-						formField.children as Array< FormField | string >,
-						fieldLabels
-				  )
-				: formField.children,
-		};
-	} );
-}
-
-function getSaveNoticeMessage( successCount: number, failedCount: number ) {
-	if ( failedCount === 0 ) {
-		if ( successCount === 1 ) {
-			return __( 'Product saved.', 'woocommerce' );
-		}
-
-		return sprintf(
-			/* translators: %d number of saved products. */
-			__( '%d products saved.', 'woocommerce' ),
-			successCount
-		);
-	}
-
-	if ( successCount === 0 ) {
-		if ( failedCount === 1 ) {
-			return __( 'Failed to save product.', 'woocommerce' );
-		}
-
-		return sprintf(
-			/* translators: %d number of products that could not be saved. */
-			__( 'Failed to save %d products.', 'woocommerce' ),
-			failedCount
-		);
-	}
-
-	return sprintf(
-		/* translators: 1: successful products count, 2: failed products count. */
-		__(
-			'Saved %1$d products. %2$d products could not be saved.',
-			'woocommerce'
-		),
-		successCount,
-		failedCount
-	);
-}
-
-function ProductEditForm( {
-	bulkEditData,
-	editableFields,
-	onChange,
-	selectedProducts,
-}: ProductEditFormProps ) {
-	const visibleFields = getVisibleProductEditFields(
-		editableFields,
-		selectedProducts
-	);
-	const { data: mergedData, fieldStates } = buildProductBulkEditData(
-		selectedProducts,
-		visibleFields
-	);
-	const enhancedFields = getBulkEnhancedProductEditFields( {
-		fieldStates,
-		isBulkEdit: selectedProducts.length > 1,
-		visibleFields,
-	} );
-	const formFields = getProductTypeFormFields(
-		selectedProducts,
-		enhancedFields
-	);
-	const fieldLabels = new Map(
-		visibleFields.map( ( field ) => [ field.id, field.label ] )
-	);
-	const data =
-		selectedProducts.length > 1
-			? getBulkEditFormData( mergedData, bulkEditData, fieldStates )
-			: mergedData;
-
-	const form = {
-		type: 'regular' as const,
-		labelPosition: 'top' as const,
-		fields:
-			selectedProducts.length > 1
-				? injectBulkNumericOperationFormFields(
-						formFields,
-						fieldLabels
-				  )
-				: formFields,
-	};
-
-	return (
-		<div className="woocommerce-product-edit__form">
-			<DataForm
-				data={ data }
-				fields={ enhancedFields }
-				form={ form }
-				onChange={ onChange }
-			/>
-		</div>
-	);
-}
-
-export default function ProductEdit( { products, isOpen }: ProductEditProps ) {
-	const { navigate } = useHistory();
-	const { path, query = {} } = useLocation();
-	const requestedProductIdsFromRoute = getSelectionFromPostId( query.postId )
-		.map( ( postId ) => Number( postId ) )
-		.filter( ( postId ) => Number.isSafeInteger( postId ) && postId > 0 );
-	const requestedProductIds = Array.from(
-		new Set( requestedProductIdsFromRoute )
-	);
-	const requestedProductIdsKey = requestedProductIds.join( ',' );
-
-	const [ isSaving, setIsSaving ] = useState( false );
-	const [ bulkEditData, setBulkEditData ] =
-		useState< ProductBulkEditFormData >( {} as ProductBulkEditFormData );
-
-	const editableFields = getProductEditFields( productFields );
-	const {
-		selectedProducts,
-		isResolving,
-		hasResolved,
-		hasMissingProducts,
-		hasEdits,
-	} = useSelect(
-		( select ) => {
-			if ( requestedProductIds.length === 0 ) {
-				return {
-					selectedProducts: [],
-					isResolving: false,
-					hasResolved: true,
-					hasMissingProducts: false,
-					hasEdits: false,
-				};
-			}
-
-			const coreSelect = select( coreStore );
-			const productResults = requestedProductIds.map( ( productId ) => {
-				const resolutionArgs = [ 'root', 'product', productId ];
-				const rootRecord = coreSelect.getEditedEntityRecord(
-					'root',
-					'product',
-					productId
-				) as unknown as ProductEntityRecord | false | undefined;
-				const rootRecordEdits = coreSelect.getEntityRecordEdits(
-					'root',
-					'product',
-					productId
-				) as Partial< ProductEntityRecord > | undefined;
-				const listedProduct = findProductInList( products, productId );
-				const product = getProductEditRecord(
-					listedProduct,
-					rootRecord,
-					rootRecordEdits
-				);
-				let record: ProductEntityRecord | false | undefined =
-					product ?? rootRecord;
-
-				if (
-					product &&
-					isProductVariation( product ) &&
-					product.parent_id
-				) {
-					const parentProduct = coreSelect.getEditedEntityRecord(
-						'root',
-						'product',
-						product.parent_id
-					) as unknown as ProductEntityRecord | false | undefined;
-					const editedParentProduct =
-						parentProduct !== false ? parentProduct : undefined;
-					const editedVariation =
-						editedParentProduct?._embedded?.variations?.find(
-							( variation ) => variation.id === product.id
-						);
-
-					record = editedVariation || product;
-				}
-
-				return {
-					productId,
-					record,
-					isResolving: listedProduct
-						? false
-						: coreSelect.isResolving(
-								'getEditedEntityRecord',
-								resolutionArgs
-						  ),
-					hasFinishedResolution: listedProduct
-						? true
-						: coreSelect.hasFinishedResolution(
-								'getEditedEntityRecord',
-								resolutionArgs
-						  ),
-				};
-			} );
-			const resolvedProducts = productResults
-				.map( ( { record } ) => record )
-				.filter(
-					( product ): product is ProductEntityRecord =>
-						product !== undefined && product !== false
-				);
-			const editedProductIds = Array.from(
-				new Set(
-					resolvedProducts.map( ( product ) =>
-						isProductVariation( product ) && product.parent_id
-							? product.parent_id
-							: product.id
-					)
-				)
-			);
-
-			return {
-				selectedProducts: resolvedProducts,
-				isResolving: productResults.some(
-					( result ) =>
-						result.isResolving || ! result.hasFinishedResolution
-				),
-				hasResolved: productResults.every(
-					( result ) => result.hasFinishedResolution
-				),
-				hasMissingProducts: productResults.some(
-					( result ) =>
-						result.hasFinishedResolution && result.record === false
-				),
-				hasEdits: editedProductIds.some( ( productId ) =>
-					coreSelect.hasEditsForEntityRecord(
-						'root',
-						'product',
-						productId
-					)
-				),
-			};
-		},
-		[ products, requestedProductIds ]
-	);
-
-	const { clearEntityRecordEdits, editEntityRecord, saveEditedEntityRecord } =
-		useDispatch( coreStore );
-
-	const { createSuccessNotice, createErrorNotice } =
-		useDispatch( noticesStore );
-
-	useEffect( () => {
-		setBulkEditData( {} as ProductBulkEditFormData );
-	}, [ requestedProductIdsKey ] );
-
-	const activeBulkNumericEdits = useMemo(
-		() =>
-			Object.fromEntries(
-				Object.entries(
-					getBulkNumericEditsFromData( bulkEditData )
-				).filter(
-					( [ fieldId, edit ] ) =>
-						isBulkNumericFieldId( fieldId ) &&
-						isBulkNumericEditPending( edit ) &&
-						isBulkNumericEditValid( fieldId, edit )
-				)
-			) as Partial< Record< BulkNumericFieldId, BulkNumericEdit > >,
-		[ bulkEditData ]
-	);
-	const hasValidBulkNumericEdits =
-		Object.keys( activeBulkNumericEdits ).length > 0;
-	const hasInvalidBulkNumericEdits = Object.entries(
-		getBulkNumericEditsFromData( bulkEditData )
-	).some(
-		( [ fieldId, edit ] ) =>
-			isBulkNumericFieldId( fieldId ) &&
-			isBulkNumericEditPending( edit ) &&
-			! isBulkNumericEditValid( fieldId, edit )
-	);
-
-	const hasNoRequestedProducts = requestedProductIds.length === 0;
-	const isReady =
-		hasResolved &&
-		! isResolving &&
-		! hasMissingProducts &&
-		selectedProducts.length === requestedProductIds.length &&
-		selectedProducts.length > 0;
-
-	let title = __( 'Quick edit', 'woocommerce' );
-
-	if ( isReady ) {
-		if ( selectedProducts.length === 1 ) {
-			// @ts-expect-error This code is a POC. It needs to be refactored.
-			title = selectedProducts[ 0 ]?.name || title;
-		} else {
-			// @ts-expect-error This code is a POC. It needs to be refactored.
-			title = sprintf(
-				/* translators: %d number of selected products. */
-				__( 'Edit %d products', 'woocommerce' ),
-				selectedProducts.length
-			);
-		}
-	}
-
-	const applySelectedProductChanges = useCallback(
-		(
-			getChangesForProduct: (
-				product: ProductEntityRecord
-			) => Partial< ProductEntityRecord >
-		) => {
-			const updatedParentProductsById = new Map<
-				number,
-				ProductEntityRecord
-			>();
-
-			selectedProducts.forEach( ( product ) => {
-				const changes = getChangesForProduct( product );
-
-				if ( Object.keys( changes ).length === 0 ) {
-					return;
-				}
-
-				if ( ! isProductVariation( product ) ) {
-					editEntityRecord( 'root', 'product', product.id, changes );
-					return;
-				}
-
-				if ( ! product.parent_id ) {
-					return;
-				}
-
-				const parentProduct =
-					updatedParentProductsById.get( product.parent_id ) ??
-					( wpSelect( coreStore ).getEditedEntityRecord(
-						'root',
-						'product',
-						product.parent_id
-					) as ProductEntityRecord | false | undefined );
-
-				if ( ! parentProduct ) {
-					return;
-				}
-
-				updatedParentProductsById.set(
-					product.parent_id,
-					getProductWithUpdatedVariation( parentProduct, {
-						...product,
-						...changes,
-					} )
-				);
-			} );
-
-			updatedParentProductsById.forEach( ( parentProduct ) => {
-				editEntityRecord( 'root', 'product', parentProduct.id, {
-					_embedded: parentProduct._embedded,
-				} );
-			} );
-		},
-		[ editEntityRecord, selectedProducts ]
-	);
-
-	const onChange = useCallback(
-		( changes: Partial< ProductEntityRecord > ) => {
-			if ( selectedProducts.length <= 1 ) {
-				applySelectedProductChanges( ( product ) =>
-					mergeProductChangesForProduct( product, changes )
-				);
-				return;
-			}
-
-			const bulkChanges: Record< string, unknown > = {};
-			const productChanges: Partial< ProductEntityRecord > = {};
-
-			Object.entries( changes ).forEach( ( [ fieldId, value ] ) => {
-				if (
-					isBulkNumericOperationFieldId( fieldId ) ||
-					isBulkNumericFieldId( fieldId )
-				) {
-					bulkChanges[ fieldId ] = value;
-					return;
-				}
-
-				if ( fieldId === 'dimensions' && isDimensionChanges( value ) ) {
-					bulkChanges[ fieldId ] = value;
-				}
-
-				productChanges[ fieldId as keyof ProductEntityRecord ] =
-					value as never;
-			} );
-
-			if ( Object.keys( bulkChanges ).length > 0 ) {
-				setBulkEditData( ( currentData ) => ( {
-					...currentData,
-					...bulkChanges,
-					...( isDimensionChanges( bulkChanges.dimensions )
-						? {
-								dimensions: {
-									...( isDimensionChanges(
-										currentData.dimensions
-									)
-										? currentData.dimensions
-										: {} ),
-									...bulkChanges.dimensions,
-								} as ProductEntityRecord[ 'dimensions' ],
-						  }
-						: {} ),
-				} ) );
-			}
-
-			if ( Object.keys( productChanges ).length > 0 ) {
-				applySelectedProductChanges( ( product ) =>
-					mergeProductChangesForProduct( product, productChanges )
-				);
-			}
-		},
-		[ applySelectedProductChanges, selectedProducts.length ]
-	);
-
-	const closeDrawer = useCallback( () => {
-		const editedProductIds = new Set(
-			selectedProducts.map( ( product ) =>
-				isProductVariation( product ) && product.parent_id
-					? product.parent_id
-					: product.id
-			)
-		);
-		const nextQuery = {
-			...query,
-			quickEdit: undefined,
-		} as Record< string, string | undefined >;
-
-		editedProductIds.forEach( ( productId ) => {
-			clearEntityRecordEdits( 'root', 'product', productId );
-		} );
-
-		setBulkEditData( {} as ProductBulkEditFormData );
-
-		navigate( getProductListNavigationPath( path, nextQuery ) );
-	}, [ clearEntityRecordEdits, navigate, path, query, selectedProducts ] );
-
-	const onSave = useCallback( async () => {
-		if ( selectedProducts.length === 0 || isSaving ) {
-			return;
-		}
-
-		if ( hasInvalidBulkNumericEdits ) {
-			createErrorNotice(
-				__( 'Please enter a valid value.', 'woocommerce' ),
-				{
-					type: 'snackbar',
-				}
-			);
-			return;
-		}
-
-		const bulkNumericValidationError = validateBulkNumericEdits(
-			selectedProducts,
-			activeBulkNumericEdits
-		);
-
-		if ( bulkNumericValidationError ) {
-			createErrorNotice( bulkNumericValidationError, {
-				type: 'snackbar',
-			} );
-			return;
-		}
-
-		if ( hasValidBulkNumericEdits ) {
-			applySelectedProductChanges( ( product ) =>
-				getBulkNumericChangesForProduct(
-					product,
-					activeBulkNumericEdits
-				)
-			);
-			setBulkEditData( {} as ProductBulkEditFormData );
-		}
-
-		setIsSaving( true );
-
-		try {
-			const results = await saveSelectedProducts( {
-				selectedProducts,
-				editEntityRecord,
-				saveEditedEntityRecord,
-			} );
-
-			const successfulCount = results.filter(
-				( result ) => result.status === 'fulfilled'
-			).length;
-			const failedCount = results.length - successfulCount;
-			const message = getSaveNoticeMessage(
-				successfulCount,
-				failedCount
-			);
-
-			if ( failedCount > 0 ) {
-				createErrorNotice( message, {
-					type: 'snackbar',
-				} );
-				return;
-			}
-
-			if ( successfulCount > 0 ) {
-				createSuccessNotice( message, {
-					type: 'snackbar',
-				} );
-			}
-
-			closeDrawer();
-		} finally {
-			setIsSaving( false );
-		}
-	}, [
-		closeDrawer,
-		activeBulkNumericEdits,
-		applySelectedProductChanges,
-		createErrorNotice,
-		createSuccessNotice,
-		editEntityRecord,
-		hasInvalidBulkNumericEdits,
-		hasValidBulkNumericEdits,
-		isSaving,
-		saveEditedEntityRecord,
-		selectedProducts,
-	] );
-
-	return (
-		<Drawer.Root open={ isOpen } swipeDirection="right">
-			<Drawer.Popup
-				className="woocommerce-product-edit__drawer"
-				portal={
-					<Drawer.Portal className="woocommerce-product-edit__drawer-portal" />
-				}
-				style={ { width: 450 } }
-			>
-				<Drawer.Header className="woocommerce-product-edit__header">
-					<Drawer.Title className="woocommerce-product-edit__title">
-						{ title }
-					</Drawer.Title>
-					<Drawer.CloseIcon
-						onClick={ closeDrawer }
-						label={ __( 'Close quick edit', 'woocommerce' ) }
-					/>
-				</Drawer.Header>
-
-				<Drawer.Content className="woocommerce-product-edit">
-					{ hasNoRequestedProducts && (
-						<div className="woocommerce-product-edit__empty-state">
-							<p>
-								{ __(
-									'Select one or more products to edit them here.',
-									'woocommerce'
-								) }
-							</p>
-						</div>
-					) }
-
-					{ ! hasNoRequestedProducts && isResolving && (
-						<div className="woocommerce-product-edit__loading">
-							<Spinner />
-						</div>
-					) }
-
-					{ ! hasNoRequestedProducts &&
-						! isResolving &&
-						hasMissingProducts && (
-							<div className="woocommerce-product-edit__empty-state">
-								<p>
-									{ __(
-										'Select one or more products to edit them here.',
-										'woocommerce'
-									) }
-								</p>
-							</div>
-						) }
-
-					{ isReady && (
-						<ProductEditForm
-							bulkEditData={ bulkEditData }
-							editableFields={ editableFields }
-							onChange={ onChange }
-							selectedProducts={ selectedProducts }
-						/>
-					) }
-				</Drawer.Content>
-
-				{ isReady && (
-					<Drawer.Footer className="woocommerce-product-edit__footer">
-						<Button
-							variant="tertiary"
-							onClick={ closeDrawer }
-							disabled={ isSaving }
-						>
-							{ __( 'Cancel', 'woocommerce' ) }
-						</Button>
-						<Button
-							variant="primary"
-							onClick={ onSave }
-							isBusy={ isSaving }
-							disabled={
-								isSaving ||
-								hasInvalidBulkNumericEdits ||
-								( ! hasEdits && ! hasValidBulkNumericEdits )
-							}
-						>
-							{ __( 'Save', 'woocommerce' ) }
-						</Button>
-					</Drawer.Footer>
-				) }
-			</Drawer.Popup>
-		</Drawer.Root>
-	);
-}
diff --git a/packages/js/experimental-products-app/src/product-edit/save.test.ts b/packages/js/experimental-products-app/src/product-edit/save.test.ts
deleted file mode 100644
index d5cb772ed70..00000000000
--- a/packages/js/experimental-products-app/src/product-edit/save.test.ts
+++ /dev/null
@@ -1,341 +0,0 @@
-/**
- * External dependencies
- */
-import apiFetch from '@wordpress/api-fetch';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../fields/types';
-import { saveSelectedProducts } from './save';
-
-const mockGetEditedEntityRecord = jest.fn();
-const mockGetEntityRecord = jest.fn();
-
-jest.mock( '@wordpress/api-fetch', () => jest.fn() );
-
-jest.mock( '@wordpress/core-data', () => ( {
-	store: {},
-} ) );
-
-jest.mock( '@wordpress/data', () => ( {
-	select: jest.fn( () => ( {
-		getEditedEntityRecord: mockGetEditedEntityRecord,
-		getEntityRecord: mockGetEntityRecord,
-	} ) ),
-} ) );
-
-describe( 'saveSelectedProducts', () => {
-	const buildProduct = (
-		overrides: Partial< ProductEntityRecord > = {}
-	): ProductEntityRecord =>
-		( {
-			id: 10,
-			name: 'Hoodie',
-			status: 'draft',
-			type: 'simple',
-			virtual: false,
-			downloadable: false,
-			on_sale: false,
-			categories: [],
-			tags: [],
-			images: [],
-			...overrides,
-		} ) as unknown as ProductEntityRecord;
-
-	const buildVariation = (
-		overrides: Partial< ProductEntityRecord > = {}
-	): ProductEntityRecord =>
-		buildProduct( {
-			id: 100,
-			parent_id: 10,
-			name: 'Blue',
-			type: 'variation',
-			...overrides,
-		} );
-
-	beforeEach( () => {
-		jest.clearAllMocks();
-	} );
-
-	it( 'sends variation image updates using the variation REST image field', async () => {
-		const editedVariation = buildVariation( {
-			id: 101,
-			images: [
-				{
-					id: 55,
-					src: 'https://example.com/blue.jpg',
-					alt: 'Blue',
-					name: 'Blue image',
-					thumbnail: 'https://example.com/blue-thumbnail.jpg',
-					date_created: '',
-					date_created_gmt: '',
-					date_modified: '',
-					date_modified_gmt: '',
-				},
-			],
-		} );
-		const editedParent = buildProduct( {
-			id: 10,
-			type: 'variable',
-			_embedded: {
-				variations: [ editedVariation ],
-			},
-		} );
-		const editEntityRecord = jest.fn(
-			(
-				_kind,
-				_name,
-				_recordId,
-				edits: Partial< ProductEntityRecord >
-			) => {
-				Object.assign( editedParent, edits );
-			}
-		);
-		const saveEditedEntityRecord = jest.fn( async () => editedParent );
-
-		mockGetEditedEntityRecord.mockImplementation( ( _kind, _name, id ) =>
-			id === editedParent.id ? editedParent : undefined
-		);
-		( apiFetch as unknown as jest.Mock ).mockResolvedValueOnce( {
-			id: 101,
-			parent_id: 10,
-			name: 'Blue saved',
-			image: {
-				id: 55,
-				src: 'https://example.com/blue.jpg',
-				alt: 'Blue',
-				name: 'Blue image',
-			},
-			manage_stock: false,
-		} );
-
-		await saveSelectedProducts( {
-			selectedProducts: [ editedVariation ],
-			editEntityRecord,
-			saveEditedEntityRecord,
-		} );
-
-		const request = ( apiFetch as unknown as jest.Mock ).mock
-			.calls[ 0 ][ 0 ];
-
-		expect( request ).toEqual(
-			expect.objectContaining( {
-				path: '/wc/v3/products/10/variations/101',
-				method: 'PUT',
-				data: expect.objectContaining( {
-					image: expect.objectContaining( {
-						id: 55,
-						src: 'https://example.com/blue.jpg',
-						alt: 'Blue',
-						name: 'Blue image',
-					} ),
-				} ),
-			} )
-		);
-		expect( request.data.images ).toBeUndefined();
-		expect( request.data.image.thumbnail ).toBeUndefined();
-	} );
-
-	it( 'sends an empty variation image object when removing a variation image', async () => {
-		const editedVariation = buildVariation( {
-			id: 101,
-			images: [],
-		} );
-		const editedParent = buildProduct( {
-			id: 10,
-			type: 'variable',
-			_embedded: {
-				variations: [ editedVariation ],
-			},
-		} );
-		const editEntityRecord = jest.fn(
-			(
-				_kind,
-				_name,
-				_recordId,
-				edits: Partial< ProductEntityRecord >
-			) => {
-				Object.assign( editedParent, edits );
-			}
-		);
-		const saveEditedEntityRecord = jest.fn( async () => editedParent );
-
-		mockGetEditedEntityRecord.mockImplementation( ( _kind, _name, id ) =>
-			id === editedParent.id ? editedParent : undefined
-		);
-		( apiFetch as unknown as jest.Mock ).mockResolvedValueOnce( {
-			id: 101,
-			parent_id: 10,
-			name: 'Blue saved',
-			image: null,
-			manage_stock: false,
-		} );
-
-		await saveSelectedProducts( {
-			selectedProducts: [ editedVariation ],
-			editEntityRecord,
-			saveEditedEntityRecord,
-		} );
-
-		const request = ( apiFetch as unknown as jest.Mock ).mock
-			.calls[ 0 ][ 0 ];
-
-		expect( request.data ).toEqual(
-			expect.objectContaining( {
-				image: {},
-			} )
-		);
-		expect( request.data.images ).toBeUndefined();
-	} );
-
-	it( 'omits variation cost of goods when the defined value is null', async () => {
-		const editedVariation = buildVariation( {
-			id: 101,
-			cost_of_goods_sold: {
-				values: [
-					{
-						defined_value: null,
-						effective_value: '5.00',
-					},
-				],
-			},
-		} );
-		const editedParent = buildProduct( {
-			id: 10,
-			type: 'variable',
-			_embedded: {
-				variations: [ editedVariation ],
-			},
-		} );
-		const editEntityRecord = jest.fn(
-			(
-				_kind,
-				_name,
-				_recordId,
-				edits: Partial< ProductEntityRecord >
-			) => {
-				Object.assign( editedParent, edits );
-			}
-		);
-		const saveEditedEntityRecord = jest.fn( async () => editedParent );
-
-		mockGetEditedEntityRecord.mockImplementation( ( _kind, _name, id ) =>
-			id === editedParent.id ? editedParent : undefined
-		);
-		( apiFetch as unknown as jest.Mock ).mockResolvedValueOnce( {
-			id: 101,
-			parent_id: 10,
-			name: 'Blue saved',
-			manage_stock: false,
-		} );
-
-		await saveSelectedProducts( {
-			selectedProducts: [ editedVariation ],
-			editEntityRecord,
-			saveEditedEntityRecord,
-		} );
-
-		const request = ( apiFetch as unknown as jest.Mock ).mock
-			.calls[ 0 ][ 0 ];
-
-		expect( request.data.cost_of_goods_sold ).toBeUndefined();
-	} );
-
-	it( 'keeps edits for selected variations that failed after another variation saved', async () => {
-		const originalSavedVariation = buildVariation( {
-			id: 101,
-			name: 'Blue original',
-		} );
-		const originalFailedVariation = buildVariation( {
-			id: 102,
-			name: 'Green original',
-		} );
-		const originalUnselectedVariation = buildVariation( {
-			id: 103,
-			name: 'Red original',
-		} );
-		const editedSavedVariation = {
-			...originalSavedVariation,
-			name: 'Blue edited',
-		};
-		const editedFailedVariation = {
-			...originalFailedVariation,
-			name: 'Green edited',
-		};
-		const editedParent = buildProduct( {
-			id: 10,
-			type: 'variable',
-			_embedded: {
-				variations: [
-					editedSavedVariation,
-					editedFailedVariation,
-					originalUnselectedVariation,
-				],
-			},
-		} );
-		const saveError = new Error( 'Variation save failed.' );
-		const editEntityRecord = jest.fn(
-			(
-				_kind,
-				_name,
-				_recordId,
-				edits: Partial< ProductEntityRecord >
-			) => {
-				Object.assign( editedParent, edits );
-			}
-		);
-		const saveEditedEntityRecord = jest.fn( async () => editedParent );
-
-		mockGetEditedEntityRecord.mockImplementation( ( _kind, _name, id ) =>
-			id === editedParent.id ? editedParent : undefined
-		);
-		mockGetEntityRecord.mockReturnValue( undefined );
-		( apiFetch as unknown as jest.Mock )
-			.mockResolvedValueOnce( {
-				id: 101,
-				parent_id: 10,
-				name: 'Blue saved',
-				manage_stock: false,
-			} )
-			.mockRejectedValueOnce( saveError );
-
-		const results = await saveSelectedProducts( {
-			selectedProducts: [ editedSavedVariation, editedFailedVariation ],
-			editEntityRecord,
-			saveEditedEntityRecord,
-		} );
-
-		expect( saveEditedEntityRecord ).toHaveBeenCalledWith(
-			'root',
-			'product',
-			10,
-			{
-				throwOnError: true,
-			}
-		);
-		expect( editedParent._embedded?.variations ).toEqual( [
-			expect.objectContaining( {
-				id: 101,
-				name: 'Blue saved',
-			} ),
-			expect.objectContaining( {
-				id: 102,
-				name: 'Green edited',
-			} ),
-			expect.objectContaining( {
-				id: 103,
-				name: 'Red original',
-			} ),
-		] );
-		expect( results ).toEqual( [
-			expect.objectContaining( {
-				status: 'fulfilled',
-			} ),
-			{
-				status: 'rejected',
-				reason: saveError,
-			},
-		] );
-	} );
-} );
diff --git a/packages/js/experimental-products-app/src/product-edit/save.ts b/packages/js/experimental-products-app/src/product-edit/save.ts
deleted file mode 100644
index 4083eaa98e1..00000000000
--- a/packages/js/experimental-products-app/src/product-edit/save.ts
+++ /dev/null
@@ -1,242 +0,0 @@
-/**
- * External dependencies
- */
-import apiFetch from '@wordpress/api-fetch';
-import { store as coreStore } from '@wordpress/core-data';
-import { select } from '@wordpress/data';
-import type { ProductVariation } from '@woocommerce/data';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../fields/types';
-import { normalizeVariation } from '../variation-view/normalization';
-import {
-	getProductWithUpdatedVariation,
-	getProductVariationUpdatePath,
-	isProductVariation,
-} from './utils';
-
-type ProductVariationEntityRecord = ProductEntityRecord & {
-	parent_id: number;
-};
-
-type ProductVariationSaveData = Omit<
-	Partial< ProductEntityRecord >,
-	'images'
-> & {
-	image?:
-		| NonNullable< ProductVariation[ 'image' ] >
-		| Record< string, never >;
-};
-
-type ProductSaveResult = PromiseSettledResult<
-	ProductEntityRecord | ProductVariation
->;
-
-type EditProductRecord = (
-	kind: 'root',
-	name: 'product',
-	recordId: number,
-	edits: Partial< ProductEntityRecord >,
-	options?: { undoIgnore?: boolean }
-) => void;
-
-type SaveEditedProductRecord = (
-	kind: 'root',
-	name: 'product',
-	recordId: number,
-	options: { throwOnError: true }
-) => Promise< ProductEntityRecord >;
-
-function getEditedProduct( productId: number ) {
-	const product = select( coreStore ).getEditedEntityRecord(
-		'root',
-		'product',
-		productId
-	) as ProductEntityRecord | false | undefined;
-
-	return product !== false ? product : undefined;
-}
-
-function getVariationImageSaveData(
-	image: ProductEntityRecord[ 'images' ][ number ] | undefined
-) {
-	if ( ! image ) {
-		return {};
-	}
-
-	const { thumbnail, ...variationImage } = image;
-
-	return variationImage;
-}
-
-function getVariationSaveData(
-	variation: ProductEntityRecord
-): ProductVariationSaveData {
-	const { images, cost_of_goods_sold: costOfGoodsSold, ...data } = variation;
-	const hasNullCostOfGoodsSoldValue = costOfGoodsSold?.values?.some(
-		( value ) => value.defined_value === null
-	);
-
-	return {
-		...data,
-		...( ! hasNullCostOfGoodsSoldValue && costOfGoodsSold !== undefined
-			? { cost_of_goods_sold: costOfGoodsSold }
-			: {} ),
-		image: getVariationImageSaveData( images?.[ 0 ] ),
-	};
-}
-
-async function saveVariation(
-	product: ProductVariationEntityRecord,
-	editEntityRecord: EditProductRecord
-) {
-	const parentProduct = getEditedProduct( product.parent_id );
-	const editedVariation =
-		parentProduct?._embedded?.variations?.find(
-			( variation ) => variation.id === product.id
-		) ?? product;
-	const savedVariation = await apiFetch< ProductVariation >( {
-		path: getProductVariationUpdatePath( product ),
-		method: 'PUT',
-		data: getVariationSaveData( editedVariation ),
-	} );
-
-	if ( parentProduct ) {
-		const updatedParentProduct = getProductWithUpdatedVariation(
-			parentProduct,
-			normalizeVariation(
-				savedVariation
-			) as unknown as ProductEntityRecord
-		);
-
-		editEntityRecord(
-			'root',
-			'product',
-			parentProduct.id,
-			{
-				_embedded: updatedParentProduct._embedded,
-			},
-			{
-				undoIgnore: true,
-			}
-		);
-	}
-
-	return savedVariation;
-}
-
-async function saveVariationsSequentially(
-	selectedVariations: ProductVariationEntityRecord[],
-	editEntityRecord: EditProductRecord
-) {
-	const variationResults: ProductSaveResult[] = [];
-
-	for ( const product of selectedVariations ) {
-		try {
-			// Save variations one at a time because saveVariation merges each
-			// saved variation into the parent product's current embedded
-			// variations. Concurrent saves can merge against stale parent
-			// snapshots and overwrite another variation's just-saved update.
-			variationResults.push( {
-				status: 'fulfilled',
-				value: await saveVariation( product, editEntityRecord ),
-			} );
-		} catch ( error ) {
-			variationResults.push( {
-				status: 'rejected',
-				reason: error,
-			} );
-		}
-	}
-
-	return variationResults;
-}
-
-function getSelectedProductSaveResults(
-	selectedProducts: ProductEntityRecord[],
-	selectedVariations: ProductVariationEntityRecord[],
-	variationResults: ProductSaveResult[],
-	productSaveIds: number[],
-	productSaveResults: ProductSaveResult[]
-) {
-	const missingSaveResult: PromiseRejectedResult = {
-		status: 'rejected',
-		reason: new Error( 'Product save result is missing.' ),
-	};
-	const productSaveResultsById = new Map(
-		productSaveIds.map( ( productId, index ) => [
-			productId,
-			productSaveResults[ index ] ?? missingSaveResult,
-		] )
-	);
-	const variationResultsById = new Map(
-		selectedVariations.map( ( product, index ) => [
-			product.id,
-			variationResults[ index ] ?? missingSaveResult,
-		] )
-	);
-
-	return selectedProducts.map( ( product ) => {
-		if ( ! isProductVariation( product ) ) {
-			return (
-				productSaveResultsById.get( product.id ) ?? missingSaveResult
-			);
-		}
-
-		const variationResult = variationResultsById.get( product.id );
-
-		if ( variationResult?.status === 'rejected' ) {
-			return variationResult;
-		}
-
-		return (
-			productSaveResultsById.get( product.parent_id ) ?? missingSaveResult
-		);
-	} );
-}
-
-export async function saveSelectedProducts( {
-	selectedProducts,
-	editEntityRecord,
-	saveEditedEntityRecord,
-}: {
-	selectedProducts: ProductEntityRecord[];
-	editEntityRecord: EditProductRecord;
-	saveEditedEntityRecord: SaveEditedProductRecord;
-} ) {
-	const selectedVariations = selectedProducts.filter( isProductVariation );
-	const productIdsToSave = new Set(
-		selectedProducts
-			.filter( ( product ) => ! isProductVariation( product ) )
-			.map( ( product ) => product.id )
-	);
-	const variationResults = await saveVariationsSequentially(
-		selectedVariations,
-		editEntityRecord
-	);
-
-	variationResults.forEach( ( result, index ) => {
-		if ( result.status === 'fulfilled' ) {
-			productIdsToSave.add( selectedVariations[ index ].parent_id );
-		}
-	} );
-
-	const productSaveIds = Array.from( productIdsToSave );
-	const productSaveResults = await Promise.allSettled(
-		productSaveIds.map( ( productId ) =>
-			saveEditedEntityRecord( 'root', 'product', productId, {
-				throwOnError: true,
-			} )
-		)
-	);
-
-	return getSelectedProductSaveResults(
-		selectedProducts,
-		selectedVariations,
-		variationResults,
-		productSaveIds,
-		productSaveResults
-	);
-}
diff --git a/packages/js/experimental-products-app/src/product-edit/utils.test.ts b/packages/js/experimental-products-app/src/product-edit/utils.test.ts
deleted file mode 100644
index e8a0950b003..00000000000
--- a/packages/js/experimental-products-app/src/product-edit/utils.test.ts
+++ /dev/null
@@ -1,1726 +0,0 @@
-/**
- * External dependencies
- */
-import type { Field } from '@wordpress/dataviews';
-import { getSetting } from '@woocommerce/settings';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../fields/types';
-import { productFields } from '../product-list/fields';
-import {
-	buildMergedProductEditData,
-	EXCLUDED_PRODUCT_EDIT_FIELD_IDS,
-	getProductWithUpdatedVariation,
-	getProductEditFields,
-	getProductEditRecord,
-	getProductVariationUpdatePath,
-	getProductTypeFormFields,
-	getVisibleProductEditFields,
-	isProductVariation,
-} from './utils';
-import {
-	buildProductBulkEditData,
-	getBulkNumericEditsFromData,
-	getBulkNumericOperationFieldId,
-	getBulkNumericChangesForProduct,
-	validateBulkNumericEdits,
-} from './bulk-edit';
-
-jest.mock( '@dnd-kit/react', () => ( {
-	DragDropProvider: ( { children }: { children: React.ReactNode } ) =>
-		children,
-} ) );
-
-jest.mock( '@dnd-kit/react/sortable', () => ( {
-	isSortable: () => false,
-	useSortable: () => ( {
-		ref: () => undefined,
-		handleRef: () => undefined,
-		isDragging: false,
-	} ),
-} ) );
-
-jest.mock( '@woocommerce/settings', () => ( {
-	CURRENCY: {
-		code: 'USD',
-		symbol: '$',
-		symbolPosition: 'left',
-		precision: 2,
-	},
-	getSetting: jest.fn(),
-} ) );
-
-describe( 'product edit utils', () => {
-	const getSettingMock = getSetting as jest.Mock;
-	const mockCostOfGoodsSoldFeatureEnabled = ( isEnabled: boolean ) => {
-		getSettingMock.mockImplementation( ( name, fallback ) =>
-			name === 'admin'
-				? {
-						features: {
-							cost_of_goods_sold: {
-								is_enabled: isEnabled,
-							},
-						},
-				  }
-				: fallback
-		);
-	};
-	const buildProduct = (
-		overrides: Partial< ProductEntityRecord > = {}
-	): ProductEntityRecord =>
-		( {
-			id: 12,
-			name: 'Beanie',
-			status: 'draft',
-			type: 'simple',
-			virtual: false,
-			downloadable: false,
-			on_sale: false,
-			categories: [],
-			tags: [],
-			images: [],
-			...overrides,
-		} ) as unknown as ProductEntityRecord;
-	const buildCostOfGoodsSold = (
-		definedValue: number | string | null = 5
-	): ProductEntityRecord[ 'cost_of_goods_sold' ] => ( {
-		values: [
-			{
-				defined_value: definedValue,
-				effective_value: definedValue,
-			},
-		],
-		total_value: definedValue,
-	} );
-
-	beforeEach( () => {
-		mockCostOfGoodsSoldFeatureEnabled( true );
-	} );
-
-	it( 'returns the original values for a single selected product', () => {
-		const product = buildProduct( {
-			name: 'Hoodie',
-			categories: [ { id: 15, name: 'Clothing' } ],
-		} );
-
-		expect( buildMergedProductEditData( [ product ] ) ).toEqual(
-			expect.objectContaining( {
-				name: 'Hoodie',
-				categories: [ { id: 15, name: 'Clothing' } ],
-			} )
-		);
-	} );
-
-	it( 'preserves shared values in a bulk selection', () => {
-		const products = [
-			buildProduct( {
-				id: 1,
-				name: 'Beanie',
-				status: 'publish',
-			} ),
-			buildProduct( {
-				id: 2,
-				name: 'Beanie',
-				status: 'publish',
-			} ),
-		];
-
-		expect( buildMergedProductEditData( products ) ).toEqual(
-			expect.objectContaining( {
-				name: 'Beanie',
-				status: 'publish',
-			} )
-		);
-	} );
-
-	it( 'uses neutral empty values for mixed bulk field values', () => {
-		const products = [
-			buildProduct( {
-				id: 1,
-				name: 'Beanie',
-				categories: [ { id: 15, name: 'Clothing' } ],
-			} ),
-			buildProduct( {
-				id: 2,
-				name: 'Hoodie',
-				categories: [ { id: 22, name: 'Accessories' } ],
-			} ),
-		];
-
-		expect( buildMergedProductEditData( products ) ).toEqual(
-			expect.objectContaining( {
-				name: '',
-				categories: [],
-			} )
-		);
-	} );
-
-	it( 'merges bulk dimensions per dimension field', () => {
-		const products = [
-			buildProduct( {
-				id: 1,
-				dimensions: {
-					length: '12',
-					width: '4',
-					height: '3',
-				},
-			} ),
-			buildProduct( {
-				id: 2,
-				dimensions: {
-					length: '12',
-					width: '7',
-					height: '3',
-				},
-			} ),
-		];
-		const bulkData = buildProductBulkEditData(
-			products,
-			getProductEditFields( productFields )
-		);
-
-		expect( buildMergedProductEditData( products ) ).toEqual(
-			expect.objectContaining( {
-				dimensions: {
-					length: '12',
-					width: '',
-					height: '3',
-				},
-			} )
-		);
-		expect( bulkData.fieldStates.length ).toEqual( {
-			isEmpty: false,
-			isMixed: false,
-			placeholder: undefined,
-			value: '12',
-		} );
-		expect( bulkData.fieldStates.width ).toEqual( {
-			isEmpty: false,
-			isMixed: true,
-			placeholder: 'Mixed',
-			value: undefined,
-		} );
-		expect( bulkData.fieldStates.height ).toEqual( {
-			isEmpty: false,
-			isMixed: false,
-			placeholder: undefined,
-			value: '3',
-		} );
-	} );
-
-	it( 'returns bulk field state for mixed values', () => {
-		const products = [
-			buildProduct( {
-				id: 1,
-				name: 'Beanie',
-				status: 'publish',
-				weight: '1',
-			} ),
-			buildProduct( {
-				id: 2,
-				name: 'Hoodie',
-				status: 'draft',
-				weight: '2',
-			} ),
-		];
-
-		const bulkData = buildProductBulkEditData(
-			products,
-			getProductEditFields( productFields )
-		);
-
-		expect( bulkData.data.name ).toBe( '' );
-		expect( bulkData.fieldStates.name ).toEqual( {
-			isEmpty: false,
-			isMixed: true,
-			placeholder: 'Mixed',
-			value: undefined,
-		} );
-		expect( bulkData.fieldStates.product_status ).toEqual( {
-			isEmpty: false,
-			isMixed: true,
-			placeholder: 'Mixed',
-			value: undefined,
-		} );
-		expect( bulkData.fieldStates.weight ).toEqual( {
-			isEmpty: false,
-			isMixed: true,
-			placeholder: 'Mixed',
-			value: undefined,
-		} );
-	} );
-
-	it( 'returns bulk field state for variation active values', () => {
-		const activeVariation = buildProduct( {
-			id: 1,
-			parent_id: 12,
-			type: 'variation',
-			status: 'publish',
-			price: '12',
-		} );
-		const inactiveVariation = buildProduct( {
-			id: 2,
-			parent_id: 12,
-			type: 'variation',
-			status: 'private',
-			price: '12',
-		} );
-
-		expect(
-			buildProductBulkEditData(
-				[ activeVariation ],
-				getProductEditFields( productFields )
-			).fieldStates.variation_active
-		).toEqual( {
-			isEmpty: false,
-			isMixed: false,
-			placeholder: undefined,
-			value: 'active',
-		} );
-
-		expect(
-			buildProductBulkEditData(
-				[ activeVariation, inactiveVariation ],
-				getProductEditFields( productFields )
-			).fieldStates.variation_active
-		).toEqual( {
-			isEmpty: false,
-			isMixed: true,
-			placeholder: 'Mixed',
-			value: undefined,
-		} );
-	} );
-
-	it( 'returns a mixed bulk field state for different grouped products', () => {
-		const products = [
-			buildProduct( {
-				id: 1,
-				type: 'grouped',
-				grouped_products: [ 10, 11 ],
-			} ),
-			buildProduct( {
-				id: 2,
-				type: 'grouped',
-				grouped_products: [ 12 ],
-			} ),
-		];
-
-		const bulkData = buildProductBulkEditData(
-			products,
-			getProductEditFields( productFields )
-		);
-
-		expect( bulkData.data.grouped_products ).toEqual( [] );
-		expect( bulkData.fieldStates.grouped_products ).toEqual( {
-			isEmpty: false,
-			isMixed: true,
-			placeholder: 'Mixed',
-			value: undefined,
-		} );
-	} );
-
-	it( 'returns bulk field state for shared and empty values', () => {
-		const products = [
-			buildProduct( {
-				id: 1,
-				name: 'Beanie',
-				regular_price: '',
-			} ),
-			buildProduct( {
-				id: 2,
-				name: 'Beanie',
-				regular_price: '',
-			} ),
-		];
-
-		const bulkData = buildProductBulkEditData(
-			products,
-			getProductEditFields( productFields )
-		);
-
-		expect( bulkData.fieldStates.name ).toEqual( {
-			isEmpty: false,
-			isMixed: false,
-			placeholder: undefined,
-			value: 'Beanie',
-		} );
-		expect( bulkData.fieldStates.regular_price ).toEqual( {
-			isEmpty: true,
-			isMixed: false,
-			placeholder: undefined,
-			value: '',
-		} );
-	} );
-
-	describe( 'getBulkNumericChangesForProduct', () => {
-		it( 'returns no edits for the don’t change operation', () => {
-			expect(
-				getBulkNumericChangesForProduct(
-					buildProduct( { regular_price: '10' } ),
-					{
-						regular_price: {
-							operation: 'dont_change',
-							value: '',
-						},
-					}
-				)
-			).toEqual( {} );
-		} );
-
-		it( 'reads numeric edits from injected bulk operation fields', () => {
-			expect(
-				getBulkNumericEditsFromData( {
-					[ getBulkNumericOperationFieldId( 'regular_price' ) ]:
-						'increase',
-					regular_price: '5',
-					[ getBulkNumericOperationFieldId( 'stock_quantity' ) ]:
-						'set',
-					stock_quantity: 12,
-					cost_of_goods_sold: buildCostOfGoodsSold( '7' ),
-				} as unknown as ProductEntityRecord )
-			).toEqual(
-				expect.objectContaining( {
-					regular_price: {
-						operation: 'increase',
-						value: '5',
-					},
-					stock_quantity: {
-						operation: 'set',
-						value: '12',
-					},
-					cost_of_goods_sold: {
-						operation: 'dont_change',
-						value: '7',
-					},
-				} )
-			);
-		} );
-
-		it( 'sets, increases, and decreases money values', () => {
-			const product = buildProduct( { regular_price: '10' } );
-
-			expect(
-				getBulkNumericChangesForProduct( product, {
-					regular_price: { operation: 'set', value: '12' },
-				} )
-			).toEqual( { regular_price: '12.00' } );
-			expect(
-				getBulkNumericChangesForProduct( product, {
-					regular_price: { operation: 'increase', value: '5' },
-				} )
-			).toEqual( { regular_price: '15.00' } );
-			expect(
-				getBulkNumericChangesForProduct( product, {
-					regular_price: { operation: 'decrease', value: '20' },
-				} )
-			).toEqual( { regular_price: '0.00' } );
-		} );
-
-		it( 'applies percentage operations to money values', () => {
-			const product = buildProduct( { sale_price: '20' } );
-
-			expect(
-				getBulkNumericChangesForProduct( product, {
-					sale_price: {
-						operation: 'increase_percent',
-						value: '10',
-					},
-				} )
-			).toEqual( { sale_price: '22.00' } );
-			expect(
-				getBulkNumericChangesForProduct( product, {
-					sale_price: {
-						operation: 'decrease_percent',
-						value: '25',
-					},
-				} )
-			).toEqual( { sale_price: '15.00' } );
-		} );
-
-		it( 'sets, increases, and decreases stock quantity as integers', () => {
-			const product = buildProduct( { stock_quantity: 10 } );
-
-			expect(
-				getBulkNumericChangesForProduct( product, {
-					stock_quantity: { operation: 'set', value: '7' },
-				} )
-			).toEqual( { stock_quantity: 7 } );
-			expect(
-				getBulkNumericChangesForProduct( product, {
-					stock_quantity: { operation: 'increase', value: '3' },
-				} )
-			).toEqual( { stock_quantity: 13 } );
-			expect(
-				getBulkNumericChangesForProduct( product, {
-					stock_quantity: { operation: 'decrease', value: '20' },
-				} )
-			).toEqual( { stock_quantity: 0 } );
-		} );
-
-		it( 'updates the nested cost of goods value', () => {
-			const product = buildProduct( {
-				cost_of_goods_sold: buildCostOfGoodsSold( '5' ),
-			} );
-
-			expect(
-				getBulkNumericChangesForProduct( product, {
-					cost_of_goods_sold: {
-						operation: 'increase',
-						value: '2',
-					},
-				} )
-			).toEqual( {
-				cost_of_goods_sold: {
-					values: [
-						{
-							defined_value: '7.00',
-							effective_value: '5',
-						},
-					],
-					total_value: '5',
-				},
-			} );
-		} );
-
-		it( 'validates projected sale prices before save', () => {
-			expect(
-				validateBulkNumericEdits(
-					[
-						buildProduct( {
-							regular_price: '10',
-							sale_price: '9',
-						} ),
-					],
-					{
-						regular_price: {
-							operation: 'decrease',
-							value: '2',
-						},
-					}
-				)
-			).toBe( 'Sale price must be lower than the regular price.' );
-		} );
-	} );
-
-	it( 'excludes summary and count fields from the edit field list', () => {
-		const editFieldIds = getProductEditFields( [
-			{ id: 'name' },
-			{ id: 'images_count' },
-			{ id: 'price_summary' },
-			{ id: 'linked_products_count' },
-			{ id: 'sku' },
-		] as Field< ProductEntityRecord >[] ).map( ( field ) => field.id );
-
-		expect( editFieldIds ).not.toEqual(
-			expect.arrayContaining( [
-				'images_count',
-				'price_summary',
-				'inventory_summary',
-				'organization_summary',
-				'visibility_summary',
-				'downloadable_count',
-				'shipping_summary',
-				'linked_products_count',
-			] )
-		);
-	} );
-
-	it( 'identifies variations and builds their update endpoint path', () => {
-		const variation = buildProduct( {
-			id: 34,
-			parent_id: 12,
-			type: 'variation',
-		} );
-
-		expect( isProductVariation( variation ) ).toBe( true );
-
-		if ( isProductVariation( variation ) ) {
-			expect( getProductVariationUpdatePath( variation ) ).toBe(
-				'/wc/v3/products/12/variations/34'
-			);
-		}
-
-		expect(
-			isProductVariation( buildProduct( { id: 12, parent_id: 0 } ) )
-		).toBe( false );
-		expect(
-			isProductVariation(
-				buildProduct( {
-					id: 34,
-					parent_id: 0,
-					type: 'variation',
-				} )
-			)
-		).toBe( true );
-		const orphanVariation = buildProduct( {
-			id: 34,
-			parent_id: 0,
-			type: 'variation',
-		} );
-
-		if ( isProductVariation( orphanVariation ) ) {
-			expect( () =>
-				getProductVariationUpdatePath( orphanVariation )
-			).toThrow( 'Variation parent ID is required' );
-		}
-	} );
-
-	it( 'updates an embedded variation in a product record', () => {
-		const variation = buildProduct( {
-			id: 34,
-			parent_id: 12,
-			name: 'Blue',
-			type: 'variation',
-		} );
-		const updatedVariation = {
-			...variation,
-			name: 'Green',
-		};
-		const parent = buildProduct( {
-			id: 12,
-			_embedded: {
-				variations: [ variation ],
-			},
-		} );
-
-		expect(
-			getProductWithUpdatedVariation( parent, updatedVariation )
-		).toEqual(
-			expect.objectContaining( {
-				id: 12,
-				_embedded: {
-					variations: [ updatedVariation ],
-				},
-			} )
-		);
-	} );
-
-	it( 'uses edited product values over the listed product values', () => {
-		const listedProduct = buildProduct( {
-			id: 12,
-			name: 'Beanie',
-			on_sale: false,
-			regular_price: '15',
-			categories: [ { id: 22, name: 'Accessories' } ],
-		} );
-		const editedProduct = {
-			on_sale: true,
-			sale_price: '12',
-		};
-
-		expect(
-			getProductEditRecord( listedProduct, undefined, editedProduct )
-		).toEqual(
-			expect.objectContaining( {
-				on_sale: true,
-				sale_price: '12',
-				regular_price: '15',
-				categories: [ { id: 22, name: 'Accessories' } ],
-			} )
-		);
-	} );
-
-	it( 'falls back to the listed product when the root record is unavailable', () => {
-		const listedProduct = buildProduct( {
-			id: 12,
-			name: 'Beanie',
-		} );
-
-		expect( getProductEditRecord( listedProduct, false ) ).toBe(
-			listedProduct
-		);
-		expect( getProductEditRecord( listedProduct, undefined ) ).toBe(
-			listedProduct
-		);
-	} );
-
-	describe( 'getVisibleProductEditFields', () => {
-		const getVisibleFieldIds = ( products: ProductEntityRecord[] ) =>
-			getVisibleProductEditFields(
-				getProductEditFields( productFields ),
-				products
-			).map( ( field ) => field.id );
-
-		const getVisibleField = (
-			products: ProductEntityRecord[],
-			fieldId: string
-		) =>
-			getVisibleProductEditFields(
-				getProductEditFields( productFields ),
-				products
-			).find( ( field ) => field.id === fieldId );
-
-		const expectFieldsHidden = (
-			fieldIds: string[],
-			hiddenFieldIds: string[]
-		) => {
-			hiddenFieldIds.forEach( ( fieldId ) => {
-				expect( fieldIds ).not.toContain( fieldId );
-			} );
-		};
-		const expectFieldOrder = (
-			fieldIds: string[],
-			orderedFieldIds: string[]
-		) => {
-			orderedFieldIds.forEach( ( fieldId, index ) => {
-				const previousFieldId = orderedFieldIds[ index - 1 ];
-
-				if ( previousFieldId ) {
-					expect( fieldIds.indexOf( previousFieldId ) ).toBeLessThan(
-						fieldIds.indexOf( fieldId )
-					);
-				}
-			} );
-		};
-		const parentOwnedFieldIds = [
-			'name',
-			'short_description',
-			'description',
-			'catalog_visibility',
-			'categories',
-			'brands',
-			'tags',
-			'type',
-			'featured',
-			'upsell_ids',
-			'cross_sell_ids',
-			'external_url',
-			'button_text',
-		];
-		const priceFieldIds = [
-			'price',
-			'regular_price',
-			'sale_price',
-			'schedule_sale',
-			'cost_of_goods_sold',
-		];
-		const basePriceFieldIds = [ 'regular_price', 'sale_price' ];
-		const managedStockFieldIds = [ 'manage_stock', 'stock_quantity' ];
-		const stockStatusFieldIds = [ 'manage_stock', 'stock' ];
-		const shippingFieldIds = [
-			'weight',
-			'length',
-			'width',
-			'height',
-			'shipping_class',
-		];
-		const sellableInstanceFieldIds = [
-			'images',
-			'sku',
-			...managedStockFieldIds,
-		];
-		const bulkSellableInstanceFieldIds = sellableInstanceFieldIds.filter(
-			( fieldId ) => fieldId !== 'sku'
-		);
-
-		it( 'shows simple product fields in quick edit order', () => {
-			const fieldIds = getVisibleFieldIds( [
-				buildProduct( {
-					type: 'simple',
-					virtual: false,
-					downloadable: false,
-					on_sale: true,
-					sale_price: '12',
-					date_on_sale_from: '2026-05-06T00:00:00',
-					cost_of_goods_sold: buildCostOfGoodsSold(),
-				} ),
-			] );
-
-			expect( fieldIds ).toEqual( [
-				'name',
-				'product_status',
-				'catalog_visibility',
-				'regular_price',
-				'sale_price',
-				'schedule_sale',
-				'cost_of_goods_sold',
-				'images',
-				'sku',
-				'manage_stock',
-				'stock',
-				'categories',
-				'brands',
-				'tags',
-				'featured',
-				'shipping_class',
-				'length',
-				'width',
-				'height',
-				'weight',
-			] );
-			expectFieldsHidden( fieldIds, [
-				'price',
-				'downloadable',
-				'external_url',
-				'button_text',
-				'tax_status',
-				'upsell_ids',
-				'cross_sell_ids',
-			] );
-		} );
-
-		it( 'does not include excluded fields in product type compatibility', () => {
-			const fieldIds = getVisibleProductEditFields( productFields, [
-				buildProduct( {
-					type: 'simple',
-				} ),
-			] ).map( ( field ) => field.id );
-
-			expect( fieldIds ).not.toEqual(
-				expect.arrayContaining( [ ...EXCLUDED_PRODUCT_EDIT_FIELD_IDS ] )
-			);
-		} );
-
-		it( 'orders pricing fields for the quick edit form', () => {
-			const fieldIds = getVisibleFieldIds( [
-				buildProduct( {
-					type: 'simple',
-					on_sale: true,
-					sale_price: '12',
-					date_on_sale_from: '2026-05-06T00:00:00',
-					cost_of_goods_sold: buildCostOfGoodsSold(),
-				} ),
-			] );
-
-			expectFieldOrder( fieldIds, [
-				'regular_price',
-				'sale_price',
-				'schedule_sale',
-				'cost_of_goods_sold',
-			] );
-		} );
-
-		it( 'hides cost of goods when the API data is unavailable', () => {
-			const fieldIds = getVisibleFieldIds( [
-				buildProduct( {
-					type: 'simple',
-				} ),
-			] );
-
-			expectFieldsHidden( fieldIds, [ 'cost_of_goods_sold' ] );
-		} );
-
-		it( 'hides cost of goods when the feature is disabled', () => {
-			mockCostOfGoodsSoldFeatureEnabled( false );
-
-			const fieldIds = getVisibleFieldIds( [
-				buildProduct( {
-					type: 'simple',
-					cost_of_goods_sold: buildCostOfGoodsSold(),
-				} ),
-			] );
-
-			expectFieldsHidden( fieldIds, [ 'cost_of_goods_sold' ] );
-		} );
-
-		it( 'hides shipping fields for virtual simple products', () => {
-			const fieldIds = getVisibleFieldIds( [
-				buildProduct( {
-					type: 'simple',
-					virtual: true,
-					downloadable: false,
-				} ),
-			] );
-
-			expect( fieldIds ).toEqual(
-				expect.arrayContaining( [
-					'regular_price',
-					'categories',
-					'brands',
-					'tags',
-				] )
-			);
-			expectFieldsHidden( fieldIds, [
-				...shippingFieldIds,
-				'external_url',
-				'button_text',
-				'upsell_ids',
-				'cross_sell_ids',
-			] );
-		} );
-
-		it( 'shows downloads for simple downloadable products', () => {
-			const fieldIds = getVisibleFieldIds( [
-				buildProduct( {
-					type: 'simple',
-					virtual: false,
-					downloadable: true,
-				} ),
-			] );
-
-			expect( fieldIds ).toContain( 'downloadable' );
-			expect( fieldIds ).toEqual(
-				expect.arrayContaining( [
-					'weight',
-					'length',
-					'width',
-					'height',
-					'shipping_class',
-				] )
-			);
-			expectFieldOrder( fieldIds, [ 'images', 'downloadable', 'sku' ] );
-		} );
-
-		it( 'shows grouped product fields in quick edit order', () => {
-			const fieldIds = getVisibleFieldIds( [
-				buildProduct( {
-					type: 'grouped',
-				} ),
-			] );
-
-			expect( fieldIds ).toEqual( [
-				'name',
-				'product_status',
-				'catalog_visibility',
-				'grouped_products',
-				'images',
-				'sku',
-				'categories',
-				'brands',
-				'tags',
-				'featured',
-			] );
-			expectFieldsHidden( fieldIds, [
-				'price',
-				'regular_price',
-				'sale_price',
-				'schedule_sale',
-				'date_on_sale_from',
-				'date_on_sale_to',
-				'downloadable',
-				'cross_sell_ids',
-				'external_url',
-				'button_text',
-				...shippingFieldIds,
-				...stockStatusFieldIds,
-				'stock_quantity',
-				'tax_status',
-			] );
-		} );
-
-		it( 'shows external fields for external products', () => {
-			const fieldIds = getVisibleFieldIds( [
-				buildProduct( {
-					type: 'external',
-				} ),
-			] );
-
-			expect( fieldIds ).toEqual( [
-				'name',
-				'product_status',
-				'catalog_visibility',
-				'regular_price',
-				'sale_price',
-				'schedule_sale',
-				'images',
-				'external_url',
-				'button_text',
-				'sku',
-				'categories',
-				'brands',
-				'tags',
-				'featured',
-			] );
-			expectFieldsHidden( fieldIds, [
-				'price',
-				'date_on_sale_from',
-				'date_on_sale_to',
-				'cross_sell_ids',
-				'downloadable',
-				'upsell_ids',
-				'weight',
-				'length',
-				'width',
-				'height',
-				'shipping_class',
-				...stockStatusFieldIds,
-				'stock_quantity',
-			] );
-		} );
-
-		it( 'shows variable parent fields in quick edit order', () => {
-			const fieldIds = getVisibleFieldIds( [
-				buildProduct( {
-					type: 'variable',
-				} ),
-			] );
-
-			expectFieldsHidden( fieldIds, [
-				'price',
-				'regular_price',
-				'sale_price',
-				'schedule_sale',
-				'date_on_sale_from',
-				'date_on_sale_to',
-				'downloadable',
-			] );
-			expect( fieldIds ).toEqual( [
-				'name',
-				'product_status',
-				'catalog_visibility',
-				'images',
-				'sku',
-				'manage_stock',
-				'stock',
-				'categories',
-				'brands',
-				'tags',
-				'featured',
-				'shipping_class',
-				'length',
-				'width',
-				'height',
-				'weight',
-			] );
-			expectFieldsHidden( fieldIds, [
-				'short_description',
-				'description',
-				'stock_quantity',
-				'tax_status',
-				'upsell_ids',
-				'cross_sell_ids',
-			] );
-		} );
-
-		it( 'shows parent-owned and universal fields for simple and variable products', () => {
-			const fieldIds = getVisibleFieldIds( [
-				buildProduct( {
-					id: 1,
-					type: 'simple',
-					virtual: false,
-					downloadable: false,
-					manage_stock: true,
-				} ),
-				buildProduct( {
-					id: 2,
-					type: 'variable',
-					manage_stock: true,
-				} ),
-			] );
-
-			expectFieldsHidden( fieldIds, priceFieldIds );
-			expectFieldsHidden( fieldIds, [ 'sku' ] );
-			expect( fieldIds ).toEqual(
-				expect.arrayContaining( [
-					'name',
-					'product_status',
-					'catalog_visibility',
-					'categories',
-					'brands',
-					'tags',
-					'featured',
-					'images',
-					'manage_stock',
-					'shipping_class',
-					'weight',
-					'length',
-					'width',
-					'height',
-				] )
-			);
-			expectFieldsHidden( fieldIds, [
-				'upsell_ids',
-				'cross_sell_ids',
-				'tax_status',
-				'stock_quantity',
-			] );
-		} );
-
-		it( 'shows sale fields but not SKU when bulk editing simple products', () => {
-			const fieldIds = getVisibleFieldIds( [
-				buildProduct( {
-					id: 1,
-					type: 'simple',
-					regular_price: '12',
-					price: '12',
-					on_sale: false,
-				} ),
-				buildProduct( {
-					id: 2,
-					type: 'simple',
-					regular_price: '15',
-					price: '15',
-					on_sale: true,
-					sale_price: '12',
-				} ),
-			] );
-
-			expect( fieldIds ).toEqual(
-				expect.arrayContaining( basePriceFieldIds )
-			);
-			expectFieldsHidden( fieldIds, [
-				'date_on_sale_from',
-				'date_on_sale_to',
-			] );
-			expect( fieldIds ).toContain( 'schedule_sale' );
-			expectFieldsHidden( fieldIds, [ 'sku' ] );
-		} );
-
-		it( 'shows sellable instance fields for variations', () => {
-			const fieldIds = getVisibleFieldIds( [
-				buildProduct( {
-					id: 34,
-					parent_id: 12,
-					type: 'variation',
-					manage_stock: true,
-					on_sale: true,
-					sale_price: '12',
-					date_on_sale_from: '2026-05-06T00:00:00',
-					cost_of_goods_sold: buildCostOfGoodsSold(),
-				} ),
-			] );
-
-			expect( fieldIds ).toEqual(
-				expect.arrayContaining( [
-					'variation_active',
-					'regular_price',
-					'sale_price',
-					'schedule_sale',
-					'cost_of_goods_sold',
-					'images',
-					'sku',
-					'manage_stock',
-					'stock_quantity',
-					'shipping_class',
-					'weight',
-					'length',
-					'width',
-					'height',
-				] )
-			);
-			expectFieldsHidden( fieldIds, [
-				...parentOwnedFieldIds,
-				'stock',
-				'downloadable',
-				'price',
-				'tax_status',
-			] );
-		} );
-
-		it( 'computes variation fields from parent IDs even when type differs', () => {
-			const fieldIds = getVisibleFieldIds( [
-				buildProduct( {
-					id: 34,
-					parent_id: 12,
-					type: 'simple',
-					on_sale: true,
-					sale_price: '12',
-					date_on_sale_from: '2026-05-06T00:00:00',
-					cost_of_goods_sold: buildCostOfGoodsSold(),
-				} ),
-			] );
-
-			expect( fieldIds ).toEqual(
-				expect.arrayContaining( [
-					'images',
-					'sku',
-					'regular_price',
-					'sale_price',
-					'schedule_sale',
-					'cost_of_goods_sold',
-					'stock',
-					'manage_stock',
-					'variation_active',
-					'shipping_class',
-					'weight',
-					'length',
-					'width',
-					'height',
-				] )
-			);
-			expectFieldsHidden( fieldIds, parentOwnedFieldIds );
-			expectFieldsHidden( fieldIds, [ 'price', 'tax_status' ] );
-		} );
-
-		it( 'hides shipping fields for virtual variations', () => {
-			const fieldIds = getVisibleFieldIds( [
-				buildProduct( {
-					id: 34,
-					parent_id: 12,
-					type: 'variation',
-					virtual: true,
-					downloadable: true,
-				} ),
-			] );
-
-			expect( fieldIds ).toContain( 'downloadable' );
-			expectFieldsHidden( fieldIds, shippingFieldIds );
-		} );
-
-		it( 'shows shipping and dimensions for physical variations', () => {
-			const fieldIds = getVisibleFieldIds( [
-				buildProduct( {
-					id: 34,
-					parent_id: 12,
-					type: 'variation',
-					virtual: false,
-				} ),
-			] );
-
-			expect( fieldIds ).toEqual(
-				expect.arrayContaining( [
-					'shipping_class',
-					'weight',
-					'length',
-					'width',
-					'height',
-				] )
-			);
-		} );
-
-		it( 'shows shared sellable instance fields for simple products and variations', () => {
-			const fieldIds = getVisibleFieldIds( [
-				buildProduct( {
-					id: 1,
-					type: 'simple',
-					manage_stock: true,
-					on_sale: true,
-					sale_price: '12',
-					date_on_sale_from: '2026-05-06T00:00:00',
-					cost_of_goods_sold: buildCostOfGoodsSold(),
-				} ),
-				buildProduct( {
-					id: 34,
-					parent_id: 12,
-					type: 'variation',
-					manage_stock: true,
-					on_sale: true,
-					sale_price: '12',
-					date_on_sale_from: '2026-05-06T00:00:00',
-					cost_of_goods_sold: buildCostOfGoodsSold(),
-				} ),
-			] );
-
-			expect( fieldIds ).toEqual(
-				expect.arrayContaining( [
-					'regular_price',
-					'sale_price',
-					'schedule_sale',
-					'cost_of_goods_sold',
-					...bulkSellableInstanceFieldIds,
-				] )
-			);
-			expectFieldsHidden( fieldIds, [
-				...parentOwnedFieldIds,
-				'downloadable',
-				'sku',
-				'price',
-			] );
-		} );
-
-		it( 'hides shipping fields when a bulk variation selection includes virtual items', () => {
-			const fieldIds = getVisibleFieldIds( [
-				buildProduct( {
-					id: 1,
-					type: 'simple',
-					virtual: false,
-					manage_stock: true,
-				} ),
-				buildProduct( {
-					id: 34,
-					parent_id: 12,
-					type: 'variation',
-					virtual: true,
-					manage_stock: true,
-				} ),
-			] );
-
-			expect( fieldIds ).toEqual(
-				expect.arrayContaining( [
-					...basePriceFieldIds,
-					'images',
-					...managedStockFieldIds,
-				] )
-			);
-			expectFieldsHidden( fieldIds, [
-				...shippingFieldIds,
-				'tax_status',
-				'sku',
-			] );
-		} );
-
-		it( 'shows downloadable fields for simple product and variation selections', () => {
-			const fieldIds = getVisibleFieldIds( [
-				buildProduct( {
-					id: 1,
-					type: 'simple',
-					downloadable: true,
-				} ),
-				buildProduct( {
-					id: 34,
-					parent_id: 12,
-					type: 'variation',
-					downloadable: true,
-				} ),
-			] );
-
-			expect( fieldIds ).toContain( 'downloadable' );
-		} );
-
-		it( 'hides downloadable fields unless every bulk item supports downloads', () => {
-			const fieldIds = getVisibleFieldIds( [
-				buildProduct( {
-					id: 1,
-					type: 'simple',
-					downloadable: true,
-				} ),
-				buildProduct( {
-					id: 2,
-					type: 'simple',
-					downloadable: false,
-				} ),
-			] );
-
-			expectFieldsHidden( fieldIds, [ 'downloadable' ] );
-		} );
-
-		it( 'shows only universal fields for variable products and variations', () => {
-			const fieldIds = getVisibleFieldIds( [
-				buildProduct( {
-					id: 12,
-					type: 'variable',
-					manage_stock: true,
-				} ),
-				buildProduct( {
-					id: 34,
-					parent_id: 12,
-					type: 'variation',
-					manage_stock: true,
-					on_sale: true,
-					sale_price: '12',
-					date_on_sale_from: '2026-05-06T00:00:00',
-				} ),
-			] );
-
-			expect( fieldIds ).toEqual(
-				expect.arrayContaining( [
-					'images',
-					'manage_stock',
-					'shipping_class',
-					'weight',
-					'length',
-					'width',
-					'height',
-				] )
-			);
-			expectFieldsHidden( fieldIds, [
-				...parentOwnedFieldIds,
-				...priceFieldIds,
-				'product_status',
-				'variation_active',
-				'downloadable',
-				'sku',
-				'stock',
-				'stock_quantity',
-				'tax_status',
-			] );
-		} );
-
-		it( 'shows only universal fields for simple, variable, and variation selections', () => {
-			const fieldIds = getVisibleFieldIds( [
-				buildProduct( {
-					id: 1,
-					type: 'simple',
-					manage_stock: true,
-					on_sale: true,
-					sale_price: '12',
-					date_on_sale_from: '2026-05-06T00:00:00',
-				} ),
-				buildProduct( {
-					id: 12,
-					type: 'variable',
-					manage_stock: true,
-				} ),
-				buildProduct( {
-					id: 34,
-					parent_id: 12,
-					type: 'variation',
-					manage_stock: true,
-					on_sale: true,
-					sale_price: '12',
-					date_on_sale_from: '2026-05-06T00:00:00',
-				} ),
-			] );
-
-			expect( fieldIds ).toEqual(
-				expect.arrayContaining( [
-					'images',
-					'manage_stock',
-					'shipping_class',
-					'weight',
-					'length',
-					'width',
-					'height',
-				] )
-			);
-			expectFieldsHidden( fieldIds, [
-				...parentOwnedFieldIds,
-				...priceFieldIds,
-				'product_status',
-				'variation_active',
-				'downloadable',
-				'sku',
-				'stock',
-				'stock_quantity',
-				'tax_status',
-			] );
-		} );
-
-		it( 'does not return visibility predicates after checking selected products', () => {
-			const field = getVisibleField(
-				[
-					buildProduct( {
-						id: 1,
-						type: 'simple',
-						on_sale: true,
-					} ),
-					buildProduct( {
-						id: 2,
-						type: 'simple',
-						sale_price: '12',
-					} ),
-				],
-				'sale_price'
-			);
-
-			expect( field ).toBeDefined();
-			expect( field?.isVisible ).toBeUndefined();
-		} );
-	} );
-
-	describe( 'getProductTypeFormFields', () => {
-		const getFormFields = ( products: ProductEntityRecord[] ) =>
-			getProductTypeFormFields(
-				products,
-				getVisibleProductEditFields(
-					getProductEditFields( productFields ),
-					products
-				)
-			);
-
-		it( 'uses grouped simple product form config', () => {
-			const product = buildProduct( {
-				type: 'simple',
-				virtual: false,
-				downloadable: true,
-				manage_stock: true,
-				cost_of_goods_sold: buildCostOfGoodsSold(),
-			} );
-
-			expect( getFormFields( [ product ] ) ).toEqual( [
-				{
-					id: 'general-fields',
-					label: 'General',
-					children: [
-						'name',
-						'product_status',
-						'catalog_visibility',
-					],
-				},
-				{
-					id: 'price-fields',
-					label: 'Price',
-					children: [
-						'regular_price',
-						'sale_price',
-						'schedule_sale',
-						'cost_of_goods_sold',
-					],
-				},
-				{
-					id: 'image-fields',
-					label: 'Images',
-					children: [ 'images' ],
-				},
-				{
-					id: 'downloadable-files-fields',
-					label: 'Downloadable files',
-					children: [ 'downloadable' ],
-				},
-				{
-					id: 'inventory-fields',
-					label: 'Inventory',
-					children: [ 'sku', 'manage_stock', 'stock_quantity' ],
-				},
-				{
-					id: 'product-organization-fields',
-					label: 'Product organization',
-					children: [ 'categories', 'brands', 'tags', 'featured' ],
-				},
-				{
-					id: 'shipping-fields',
-					label: 'Shipping',
-					children: [
-						'shipping_class',
-						{
-							id: 'dimensions',
-							layout: { type: 'row' },
-							children: [ 'length', 'width', 'height' ],
-						},
-						'weight',
-					],
-				},
-			] );
-		} );
-
-		it.each( [
-			[ 'simple product', 'simple' ],
-			[ 'variation product', 'variation' ],
-		] as const )(
-			'uses schedule sale as a compound price field for %s',
-			( _label, productType ) => {
-				const product = buildProduct( {
-					type: productType,
-					date_on_sale_from: '2026-05-06T00:00:00',
-					cost_of_goods_sold: buildCostOfGoodsSold(),
-				} );
-
-				const priceGroup = getFormFields( [ product ] ).find(
-					( formField ) =>
-						typeof formField !== 'string' &&
-						formField.id === 'price-fields'
-				);
-
-				expect( priceGroup ).toEqual( {
-					id: 'price-fields',
-					label: 'Price',
-					children: [
-						'regular_price',
-						'sale_price',
-						'schedule_sale',
-						'cost_of_goods_sold',
-					],
-				} );
-			}
-		);
-
-		it( 'omits the price section from grouped product form config', () => {
-			const product = buildProduct( {
-				type: 'grouped',
-			} );
-
-			expect( getFormFields( [ product ] ) ).toEqual( [
-				{
-					id: 'general-fields',
-					label: 'General',
-					children: [
-						'name',
-						'product_status',
-						'catalog_visibility',
-						'grouped_products',
-					],
-				},
-				{
-					id: 'image-fields',
-					label: 'Images',
-					children: [ 'images' ],
-				},
-				{
-					id: 'inventory-fields',
-					label: 'Inventory',
-					children: [ 'sku' ],
-				},
-				{
-					id: 'product-organization-fields',
-					label: 'Product organization',
-					children: [ 'categories', 'brands', 'tags', 'featured' ],
-				},
-			] );
-		} );
-
-		it( 'uses grouped external product form config', () => {
-			const product = buildProduct( {
-				type: 'external',
-			} );
-
-			expect( getFormFields( [ product ] ) ).toEqual( [
-				{
-					id: 'general-fields',
-					label: 'General',
-					children: [
-						'name',
-						'product_status',
-						'catalog_visibility',
-					],
-				},
-				{
-					id: 'price-fields',
-					label: 'Price',
-					children: [
-						'regular_price',
-						'sale_price',
-						'schedule_sale',
-					],
-				},
-				{
-					id: 'image-fields',
-					label: 'Images',
-					children: [ 'images' ],
-				},
-				{
-					id: 'buy-button-fields',
-					label: 'Buy button',
-					children: [ 'external_url', 'button_text' ],
-				},
-				{
-					id: 'inventory-fields',
-					label: 'Inventory',
-					children: [ 'sku' ],
-				},
-				{
-					id: 'product-organization-fields',
-					label: 'Product organization',
-					children: [ 'categories', 'brands', 'tags', 'featured' ],
-				},
-			] );
-		} );
-
-		it( 'uses grouped variable parent form config', () => {
-			const product = buildProduct( {
-				type: 'variable',
-				virtual: false,
-			} );
-
-			expect( getFormFields( [ product ] ) ).toEqual( [
-				{
-					id: 'general-fields',
-					label: 'General',
-					children: [
-						'name',
-						'product_status',
-						'catalog_visibility',
-					],
-				},
-				{
-					id: 'image-fields',
-					label: 'Images',
-					children: [ 'images' ],
-				},
-				{
-					id: 'inventory-fields',
-					label: 'Inventory',
-					children: [ 'sku', 'manage_stock', 'stock' ],
-				},
-				{
-					id: 'product-organization-fields',
-					label: 'Product organization',
-					children: [ 'categories', 'brands', 'tags', 'featured' ],
-				},
-				{
-					id: 'shipping-fields',
-					label: 'Shipping',
-					children: [
-						'shipping_class',
-						{
-							id: 'dimensions',
-							layout: { type: 'row' },
-							children: [ 'length', 'width', 'height' ],
-						},
-						'weight',
-					],
-				},
-			] );
-		} );
-
-		it( 'uses grouped variation product form config', () => {
-			const product = buildProduct( {
-				id: 34,
-				parent_id: 12,
-				type: 'variation',
-				virtual: false,
-				downloadable: true,
-				manage_stock: true,
-			} );
-
-			expect( getFormFields( [ product ] ) ).toEqual( [
-				{
-					id: 'general-fields',
-					label: 'General',
-					children: [ 'variation_active' ],
-				},
-				{
-					id: 'price-fields',
-					label: 'Price',
-					children: [
-						'regular_price',
-						'sale_price',
-						'schedule_sale',
-					],
-				},
-				{
-					id: 'image-fields',
-					label: 'Images',
-					children: [ 'images' ],
-				},
-				{
-					id: 'downloadable-files-fields',
-					label: 'Downloadable files',
-					children: [ 'downloadable' ],
-				},
-				{
-					id: 'inventory-fields',
-					label: 'Inventory',
-					children: [ 'sku', 'manage_stock', 'stock_quantity' ],
-				},
-				{
-					id: 'shipping-fields',
-					label: 'Shipping',
-					children: [
-						'shipping_class',
-						{
-							id: 'dimensions',
-							layout: { type: 'row' },
-							children: [ 'length', 'width', 'height' ],
-						},
-						'weight',
-					],
-				},
-			] );
-		} );
-
-		it( 'prunes empty groups when all descendants are hidden', () => {
-			const product = buildProduct( {
-				type: 'simple',
-				virtual: true,
-			} );
-
-			expect( getFormFields( [ product ] ) ).toEqual( [
-				{
-					id: 'general-fields',
-					label: 'General',
-					children: [
-						'name',
-						'product_status',
-						'catalog_visibility',
-					],
-				},
-				{
-					id: 'price-fields',
-					label: 'Price',
-					children: [
-						'regular_price',
-						'sale_price',
-						'schedule_sale',
-					],
-				},
-				{
-					id: 'image-fields',
-					label: 'Images',
-					children: [ 'images' ],
-				},
-				{
-					id: 'inventory-fields',
-					label: 'Inventory',
-					children: [ 'sku', 'manage_stock', 'stock' ],
-				},
-				{
-					id: 'product-organization-fields',
-					label: 'Product organization',
-					children: [ 'categories', 'brands', 'tags', 'featured' ],
-				},
-			] );
-		} );
-	} );
-} );
diff --git a/packages/js/experimental-products-app/src/product-edit/utils.ts b/packages/js/experimental-products-app/src/product-edit/utils.ts
deleted file mode 100644
index 0b772069c2c..00000000000
--- a/packages/js/experimental-products-app/src/product-edit/utils.ts
+++ /dev/null
@@ -1,711 +0,0 @@
-/**
- * External dependencies
- */
-import type { Field, FormField } from '@wordpress/dataviews';
-import { __ } from '@wordpress/i18n';
-import { getSetting } from '@woocommerce/settings';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../fields/types';
-
-export const EXCLUDED_PRODUCT_EDIT_FIELD_IDS = [
-	'images_count',
-	'price_summary',
-	'inventory_summary',
-	'organization_summary',
-	'visibility_summary',
-	'downloadable_count',
-	'shipping_summary',
-	'linked_products_count',
-] as const;
-
-const EXCLUDED_PRODUCT_EDIT_FIELD_ID_SET = new Set(
-	EXCLUDED_PRODUCT_EDIT_FIELD_IDS
-);
-
-type ProductField = Field< ProductEntityRecord >;
-type ProductEditFieldId = ( typeof PRODUCT_EDIT_FIELD_IDS )[ number ];
-type ProductEditFormField = ProductEditFieldId | FormField;
-type ProductType = 'simple' | 'variation' | 'variable' | 'grouped' | 'external';
-type ProductVariationEntityRecord = ProductEntityRecord & {
-	parent_id: number;
-};
-type DimensionKey = keyof ProductEntityRecord[ 'dimensions' ];
-type Feature = {
-	is_enabled?: boolean;
-};
-type AdminSettings = {
-	features?: Record< string, Feature >;
-};
-
-const PRODUCT_EDIT_FIELD_IDS = [
-	'name',
-	'short_description',
-	'description',
-	'images',
-	'images_count',
-	'product_status',
-	'variation_active',
-	'sku',
-	'price',
-	'regular_price',
-	'on_sale',
-	'sale_price',
-	'schedule_sale',
-	'date_on_sale_from',
-	'date_on_sale_to',
-	'cost_of_goods_sold',
-	'price_summary',
-	'stock',
-	'stock_quantity',
-	'manage_stock',
-	'inventory_summary',
-	'categories',
-	'brands',
-	'tags',
-	'organization_summary',
-	'type',
-	'featured',
-	'catalog_visibility',
-	'visibility_summary',
-	'downloadable',
-	'downloadable_count',
-	'external_url',
-	'button_text',
-	'weight',
-	'length',
-	'width',
-	'height',
-	'shipping_class',
-	'shipping_summary',
-	'tax_status',
-	'upsell_ids',
-	'cross_sell_ids',
-	'grouped_products',
-	'linked_products_count',
-] as const;
-
-const DIMENSION_KEYS: DimensionKey[] = [ 'length', 'width', 'height' ];
-
-const DIMENSIONS_FORM_FIELD: ProductEditFormField = {
-	id: 'dimensions',
-	layout: { type: 'row' as const },
-	children: [ 'length', 'width', 'height' ],
-};
-
-function createProductEditFormGroup(
-	id: string,
-	label: string,
-	children: ProductEditFormField[]
-): ProductEditFormField {
-	return {
-		id,
-		label,
-		children,
-	};
-}
-
-const DOWNLOADABLE_FILES_FORM_FIELD: ProductEditFormField =
-	createProductEditFormGroup(
-		'downloadable-files-fields',
-		__( 'Downloadable files', 'woocommerce' ),
-		[ 'downloadable' ]
-	);
-
-const SIMPLE_PRODUCT_EDIT_FORM_FIELDS = [
-	createProductEditFormGroup(
-		'general-fields',
-		__( 'General', 'woocommerce' ),
-		[ 'name', 'product_status', 'catalog_visibility' ]
-	),
-	createProductEditFormGroup( 'price-fields', __( 'Price', 'woocommerce' ), [
-		'regular_price',
-		'sale_price',
-		'schedule_sale',
-		'cost_of_goods_sold',
-	] ),
-	createProductEditFormGroup( 'image-fields', __( 'Images', 'woocommerce' ), [
-		'images',
-	] ),
-	DOWNLOADABLE_FILES_FORM_FIELD,
-	createProductEditFormGroup(
-		'inventory-fields',
-		__( 'Inventory', 'woocommerce' ),
-		[ 'sku', 'manage_stock', 'stock', 'stock_quantity' ]
-	),
-	createProductEditFormGroup(
-		'product-organization-fields',
-		__( 'Product organization', 'woocommerce' ),
-		[ 'categories', 'brands', 'tags', 'featured' ]
-	),
-	createProductEditFormGroup(
-		'shipping-fields',
-		__( 'Shipping', 'woocommerce' ),
-		[ 'shipping_class', DIMENSIONS_FORM_FIELD, 'weight' ]
-	),
-] satisfies ProductEditFormField[];
-
-const VARIATION_PRODUCT_EDIT_FORM_FIELDS = [
-	createProductEditFormGroup(
-		'general-fields',
-		__( 'General', 'woocommerce' ),
-		[ 'variation_active' ]
-	),
-	createProductEditFormGroup( 'price-fields', __( 'Price', 'woocommerce' ), [
-		'regular_price',
-		'sale_price',
-		'schedule_sale',
-		'cost_of_goods_sold',
-	] ),
-	createProductEditFormGroup( 'image-fields', __( 'Images', 'woocommerce' ), [
-		'images',
-	] ),
-	DOWNLOADABLE_FILES_FORM_FIELD,
-	createProductEditFormGroup(
-		'inventory-fields',
-		__( 'Inventory', 'woocommerce' ),
-		[ 'sku', 'manage_stock', 'stock', 'stock_quantity' ]
-	),
-	createProductEditFormGroup(
-		'shipping-fields',
-		__( 'Shipping', 'woocommerce' ),
-		[ 'shipping_class', DIMENSIONS_FORM_FIELD, 'weight' ]
-	),
-] satisfies ProductEditFormField[];
-
-const VARIABLE_PRODUCT_EDIT_FORM_FIELDS = [
-	createProductEditFormGroup(
-		'general-fields',
-		__( 'General', 'woocommerce' ),
-		[ 'name', 'product_status', 'catalog_visibility' ]
-	),
-	createProductEditFormGroup( 'image-fields', __( 'Images', 'woocommerce' ), [
-		'images',
-	] ),
-	createProductEditFormGroup(
-		'inventory-fields',
-		__( 'Inventory', 'woocommerce' ),
-		[ 'sku', 'manage_stock', 'stock' ]
-	),
-	createProductEditFormGroup(
-		'product-organization-fields',
-		__( 'Product organization', 'woocommerce' ),
-		[ 'categories', 'brands', 'tags', 'featured' ]
-	),
-	createProductEditFormGroup(
-		'shipping-fields',
-		__( 'Shipping', 'woocommerce' ),
-		[ 'shipping_class', DIMENSIONS_FORM_FIELD, 'weight' ]
-	),
-] satisfies ProductEditFormField[];
-
-const EXTERNAL_PRODUCT_EDIT_FORM_FIELDS = [
-	createProductEditFormGroup(
-		'general-fields',
-		__( 'General', 'woocommerce' ),
-		[ 'name', 'product_status', 'catalog_visibility' ]
-	),
-	createProductEditFormGroup( 'price-fields', __( 'Price', 'woocommerce' ), [
-		'regular_price',
-		'sale_price',
-		'schedule_sale',
-	] ),
-	createProductEditFormGroup( 'image-fields', __( 'Images', 'woocommerce' ), [
-		'images',
-	] ),
-	createProductEditFormGroup(
-		'buy-button-fields',
-		__( 'Buy button', 'woocommerce' ),
-		[ 'external_url', 'button_text' ]
-	),
-	createProductEditFormGroup(
-		'inventory-fields',
-		__( 'Inventory', 'woocommerce' ),
-		[ 'sku' ]
-	),
-	createProductEditFormGroup(
-		'product-organization-fields',
-		__( 'Product organization', 'woocommerce' ),
-		[ 'categories', 'brands', 'tags', 'featured' ]
-	),
-] satisfies ProductEditFormField[];
-
-const GROUPED_PRODUCT_EDIT_FORM_FIELDS = [
-	createProductEditFormGroup(
-		'general-fields',
-		__( 'General', 'woocommerce' ),
-		[ 'name', 'product_status', 'catalog_visibility', 'grouped_products' ]
-	),
-	createProductEditFormGroup( 'image-fields', __( 'Images', 'woocommerce' ), [
-		'images',
-	] ),
-	createProductEditFormGroup(
-		'inventory-fields',
-		__( 'Inventory', 'woocommerce' ),
-		[ 'sku' ]
-	),
-	createProductEditFormGroup(
-		'product-organization-fields',
-		__( 'Product organization', 'woocommerce' ),
-		[ 'categories', 'brands', 'tags', 'featured' ]
-	),
-] satisfies ProductEditFormField[];
-
-const PRODUCT_TYPE_FORM_FIELDS = {
-	simple: SIMPLE_PRODUCT_EDIT_FORM_FIELDS,
-	variation: VARIATION_PRODUCT_EDIT_FORM_FIELDS,
-	variable: VARIABLE_PRODUCT_EDIT_FORM_FIELDS,
-	grouped: GROUPED_PRODUCT_EDIT_FORM_FIELDS,
-	external: EXTERNAL_PRODUCT_EDIT_FORM_FIELDS,
-} satisfies Record< ProductType, readonly ProductEditFormField[] >;
-
-const PARENT_OWNED_PRODUCT_EDIT_FIELD_ID_SET = new Set< ProductEditFieldId >( [
-	'name',
-	'short_description',
-	'description',
-	'catalog_visibility',
-	'categories',
-	'brands',
-	'tags',
-	'type',
-	'featured',
-	'upsell_ids',
-	'cross_sell_ids',
-	'grouped_products',
-	'external_url',
-	'button_text',
-] );
-
-const SELLABLE_PRODUCT_EDIT_FIELD_ID_SET = new Set< ProductEditFieldId >( [
-	'price',
-	'regular_price',
-	'on_sale',
-	'sale_price',
-	'schedule_sale',
-	'date_on_sale_from',
-	'date_on_sale_to',
-	'cost_of_goods_sold',
-] );
-
-const BULK_UNSUPPORTED_PRODUCT_EDIT_FIELD_ID_SET =
-	new Set< ProductEditFieldId >( [ 'sku' ] );
-
-function isCostOfGoodsSoldFeatureEnabled() {
-	const adminSettings = getSetting< AdminSettings >( 'admin', {} );
-	return Boolean( adminSettings.features?.cost_of_goods_sold?.is_enabled );
-}
-
-function normalizeValue( value: unknown ) {
-	if ( value === undefined ) {
-		return '__undefined__';
-	}
-
-	return JSON.stringify( value );
-}
-
-function getMixedValueFallback( sample: unknown ) {
-	if ( Array.isArray( sample ) ) {
-		return [];
-	}
-
-	if ( sample === null ) {
-		return null;
-	}
-
-	if ( typeof sample === 'string' ) {
-		return '';
-	}
-
-	return undefined;
-}
-
-function isRecord( value: unknown ): value is Record< string, unknown > {
-	return (
-		Boolean( value ) &&
-		typeof value === 'object' &&
-		! Array.isArray( value )
-	);
-}
-
-function buildMergedDimensions(
-	values: unknown[]
-): ProductEntityRecord[ 'dimensions' ] | undefined {
-	const hasDimensionValue = values.some( isRecord );
-
-	if ( ! hasDimensionValue ) {
-		return undefined;
-	}
-
-	const dimensions: Partial< ProductEntityRecord[ 'dimensions' ] > = {};
-
-	DIMENSION_KEYS.forEach( ( dimensionKey ) => {
-		const dimensionValues = values.map( ( value ) =>
-			isRecord( value ) ? value[ dimensionKey ] : undefined
-		);
-		const firstDefinedValue = dimensionValues.find(
-			( value ) => value !== undefined
-		);
-		const areValuesEqual = dimensionValues.every(
-			( value ) =>
-				normalizeValue( value ) ===
-				normalizeValue( dimensionValues[ 0 ] )
-		);
-
-		dimensions[ dimensionKey ] = (
-			areValuesEqual
-				? dimensionValues[ 0 ]
-				: getMixedValueFallback( firstDefinedValue )
-		) as string | undefined;
-	} );
-
-	return dimensions as ProductEntityRecord[ 'dimensions' ];
-}
-
-function isVariableProductParent( product: ProductEntityRecord ) {
-	return product.type === 'variable' && ! product.parent_id;
-}
-
-function isProductType( type: string | undefined ): type is ProductType {
-	return (
-		type === 'simple' ||
-		type === 'variation' ||
-		type === 'variable' ||
-		type === 'grouped' ||
-		type === 'external'
-	);
-}
-
-export function isProductVariation(
-	product: ProductEntityRecord
-): product is ProductVariationEntityRecord {
-	return product.type === 'variation' || Boolean( product.parent_id );
-}
-
-function getProductEditFormFieldIds(
-	formField: ProductEditFormField
-): ProductEditFieldId[] {
-	if ( typeof formField === 'string' ) {
-		return [ formField ];
-	}
-
-	return ( formField.children ?? [] ).flatMap( ( child ) =>
-		getProductEditFormFieldIds( child as ProductEditFormField )
-	);
-}
-
-function getProductType( product: ProductEntityRecord ): ProductType {
-	if ( isProductVariation( product ) ) {
-		return 'variation';
-	}
-
-	return isProductType( product.type ) ? product.type : 'simple';
-}
-
-function getProductTypeFieldIds(
-	product: ProductEntityRecord
-): ProductEditFieldId[] {
-	return PRODUCT_TYPE_FORM_FIELDS[ getProductType( product ) ].flatMap(
-		getProductEditFormFieldIds
-	);
-}
-
-function isFieldVisibleForProductRelationships(
-	fieldId: string,
-	products: ProductEntityRecord[]
-) {
-	if ( ! PRODUCT_EDIT_FIELD_IDS.includes( fieldId as ProductEditFieldId ) ) {
-		return true;
-	}
-
-	const productEditFieldId = fieldId as ProductEditFieldId;
-	const hasVariation = products.some( isProductVariation );
-
-	if (
-		hasVariation &&
-		PARENT_OWNED_PRODUCT_EDIT_FIELD_ID_SET.has( productEditFieldId )
-	) {
-		return false;
-	}
-
-	const hasVariableParent = products.some( isVariableProductParent );
-
-	if (
-		SELLABLE_PRODUCT_EDIT_FIELD_ID_SET.has( productEditFieldId ) &&
-		hasVariableParent
-	) {
-		return false;
-	}
-
-	return true;
-}
-
-export function getProductVariationUpdatePath(
-	product: ProductVariationEntityRecord
-) {
-	if ( ! product.parent_id ) {
-		throw new Error(
-			'Variation parent ID is required to update a variation.'
-		);
-	}
-
-	return `/wc/v3/products/${ product.parent_id }/variations/${ product.id }`;
-}
-
-export function getProductWithUpdatedVariation(
-	product: ProductEntityRecord,
-	variation: ProductEntityRecord
-): ProductEntityRecord {
-	const embeddedVariations = product._embedded?.variations ?? [];
-	const hasEmbeddedVariation = embeddedVariations.some(
-		( embeddedVariation ) => embeddedVariation.id === variation.id
-	);
-
-	return {
-		...product,
-		_embedded: {
-			...product._embedded,
-			variations: hasEmbeddedVariation
-				? embeddedVariations.map( ( embeddedVariation ) =>
-						embeddedVariation.id === variation.id
-							? variation
-							: embeddedVariation
-				  )
-				: [ ...embeddedVariations, variation ],
-		},
-	};
-}
-
-export function findProductInList(
-	products: ProductEntityRecord[],
-	productId: number
-) {
-	for ( const product of products ) {
-		if ( product.id === productId ) {
-			return product;
-		}
-
-		const variation = product._embedded?.variations?.find(
-			( embeddedVariation ) => embeddedVariation.id === productId
-		);
-
-		if ( variation ) {
-			return variation;
-		}
-	}
-}
-
-export function getProductEditRecord(
-	listedProduct: ProductEntityRecord | undefined,
-	rootRecord: ProductEntityRecord | false | undefined,
-	rootRecordEdits?: Partial< ProductEntityRecord >
-) {
-	const editedRootRecord = rootRecord !== false ? rootRecord : undefined;
-	const hasRootRecordEdits =
-		rootRecordEdits && Object.keys( rootRecordEdits ).length > 0;
-
-	if ( listedProduct && hasRootRecordEdits ) {
-		return {
-			...listedProduct,
-			...rootRecordEdits,
-		};
-	}
-
-	if ( listedProduct && editedRootRecord ) {
-		return {
-			...listedProduct,
-			...editedRootRecord,
-		};
-	}
-
-	return listedProduct ?? editedRootRecord;
-}
-
-function getCommonProductTypeCompatibleFieldIds(
-	products: ProductEntityRecord[]
-) {
-	if ( products.length === 0 ) {
-		return [];
-	}
-
-	const [ firstProduct, ...remainingProducts ] = products;
-	const remainingCompatibleFieldIdSets = remainingProducts.map(
-		( product ) => new Set( getProductTypeFieldIds( product ) )
-	);
-
-	return getProductTypeFieldIds( firstProduct ).filter( ( fieldId ) =>
-		remainingCompatibleFieldIdSets.every( ( compatibleFieldIds ) =>
-			compatibleFieldIds.has( fieldId )
-		)
-	);
-}
-
-export function getProductEditFields( fields: ProductField[] ): ProductField[] {
-	return fields.filter(
-		( field ) =>
-			! EXCLUDED_PRODUCT_EDIT_FIELD_ID_SET.has(
-				field.id as ( typeof EXCLUDED_PRODUCT_EDIT_FIELD_IDS )[ number ]
-			)
-	);
-}
-
-export function buildMergedProductEditData(
-	products: ProductEntityRecord[]
-): ProductEntityRecord {
-	if ( products.length === 0 ) {
-		return {} as ProductEntityRecord;
-	}
-
-	const mergedData: Record< string, unknown > = {};
-	const keys = Array.from(
-		new Set( products.flatMap( ( product ) => Object.keys( product ) ) )
-	);
-
-	keys.forEach( ( key ) => {
-		const values = products.map(
-			( product ) => product[ key as keyof ProductEntityRecord ]
-		);
-
-		if ( key === 'dimensions' ) {
-			mergedData[ key ] = buildMergedDimensions( values );
-			return;
-		}
-
-		const firstDefinedValue = values.find(
-			( value ) => value !== undefined
-		);
-		const areValuesEqual = values.every(
-			( value ) =>
-				normalizeValue( value ) === normalizeValue( values[ 0 ] )
-		);
-
-		mergedData[ key ] = areValuesEqual
-			? values[ 0 ]
-			: getMixedValueFallback( firstDefinedValue );
-	} );
-
-	return mergedData as ProductEntityRecord;
-}
-
-export function getVisibleProductEditFields(
-	fields: ProductField[],
-	products: ProductEntityRecord[]
-) {
-	const compatibleFieldIds =
-		getCommonProductTypeCompatibleFieldIds( products );
-	const isBulkEdit = products.length > 1;
-	const fieldsById = new Map(
-		fields.map( ( field ) => [ field.id, field ] )
-	);
-
-	return compatibleFieldIds.reduce< ProductField[] >(
-		( visibleFields, fieldId ) => {
-			const field = fieldsById.get( fieldId );
-
-			if ( ! field ) {
-				return visibleFields;
-			}
-
-			if (
-				field.id === 'cost_of_goods_sold' &&
-				! isCostOfGoodsSoldFeatureEnabled()
-			) {
-				return visibleFields;
-			}
-
-			if (
-				isBulkEdit &&
-				BULK_UNSUPPORTED_PRODUCT_EDIT_FIELD_ID_SET.has(
-					field.id as ProductEditFieldId
-				)
-			) {
-				return visibleFields;
-			}
-
-			if (
-				! isFieldVisibleForProductRelationships( field.id, products )
-			) {
-				return visibleFields;
-			}
-
-			const { isVisible } = field;
-
-			if ( typeof isVisible !== 'function' ) {
-				visibleFields.push( field );
-				return visibleFields;
-			}
-
-			if ( products.every( ( product ) => isVisible( product ) ) ) {
-				visibleFields.push( {
-					...field,
-					isVisible: undefined,
-				} );
-			}
-
-			return visibleFields;
-		},
-		[]
-	);
-}
-
-function pruneProductEditFormField(
-	formField: ProductEditFormField,
-	visibleFieldIds: Set< string >
-): ProductEditFormField | undefined {
-	if ( typeof formField === 'string' ) {
-		return visibleFieldIds.has( formField ) ? formField : undefined;
-	}
-
-	const children = ( formField.children ?? [] )
-		.map( ( child ) =>
-			pruneProductEditFormField(
-				child as ProductEditFormField,
-				visibleFieldIds
-			)
-		)
-		.filter(
-			( child ): child is ProductEditFormField => child !== undefined
-		);
-
-	if ( children.length === 0 ) {
-		return undefined;
-	}
-
-	return {
-		...formField,
-		children,
-	};
-}
-
-export function getProductTypeFormFields(
-	products: ProductEntityRecord[],
-	visibleFields?: ProductField[]
-): Array< FormField | string > {
-	const [ firstProduct ] = products;
-
-	if ( ! firstProduct ) {
-		return [];
-	}
-
-	const formFields = [
-		...PRODUCT_TYPE_FORM_FIELDS[ getProductType( firstProduct ) ],
-	];
-
-	if ( ! visibleFields ) {
-		return formFields;
-	}
-
-	const visibleFieldIds = new Set(
-		visibleFields.map( ( field ) => field.id )
-	);
-
-	return formFields
-		.map( ( formField ) =>
-			pruneProductEditFormField( formField, visibleFieldIds )
-		)
-		.filter(
-			( formField ): formField is ProductEditFormField =>
-				formField !== undefined
-		);
-}
diff --git a/packages/js/experimental-products-app/src/product-list/constants.ts b/packages/js/experimental-products-app/src/product-list/constants.ts
deleted file mode 100644
index a87a430cee9..00000000000
--- a/packages/js/experimental-products-app/src/product-list/constants.ts
+++ /dev/null
@@ -1,63 +0,0 @@
-/**
- * External dependencies
- */
-import type { View } from '@wordpress/dataviews';
-import { __ } from '@wordpress/i18n';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../fields/types';
-import {
-	DEFAULT_PRODUCT_TABLE_LAYOUT,
-	DEFAULT_PRODUCT_TABLE_VIEW,
-} from './layouts';
-
-export const PAGE_SIZE = 20;
-
-export const EMPTY_ARRAY: ProductEntityRecord[] = [];
-
-export const DEFAULT_LAYOUTS = {
-	table: DEFAULT_PRODUCT_TABLE_LAYOUT,
-};
-
-export const DEFAULT_VIEW: View = {
-	...DEFAULT_PRODUCT_TABLE_VIEW,
-	page: 1,
-};
-
-export const PRODUCT_LIST_TAB_VALUES = [
-	'all',
-	'publish',
-	'draft',
-	'pending',
-	'trash',
-] as const;
-
-export type StatusTab = ( typeof PRODUCT_LIST_TAB_VALUES )[ number ];
-
-export const PRODUCT_LIST_TABS: Array< {
-	value: StatusTab;
-	label: string;
-} > = [
-	{
-		value: 'all',
-		label: __( 'All', 'woocommerce' ),
-	},
-	{
-		value: 'publish',
-		label: __( 'Published', 'woocommerce' ),
-	},
-	{
-		value: 'draft',
-		label: __( 'Draft', 'woocommerce' ),
-	},
-	{
-		value: 'pending',
-		label: __( 'Pending review', 'woocommerce' ),
-	},
-	{
-		value: 'trash',
-		label: __( 'Trash', 'woocommerce' ),
-	},
-];
diff --git a/packages/js/experimental-products-app/src/product-list/empty-state/icon.tsx b/packages/js/experimental-products-app/src/product-list/empty-state/icon.tsx
deleted file mode 100644
index 9e6e67f9089..00000000000
--- a/packages/js/experimental-products-app/src/product-list/empty-state/icon.tsx
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-
-export function ProductListEmptyStateIcon() {
-	return (
-		<svg
-			width="48"
-			height="48"
-			viewBox="0 0 48 48"
-			fill="none"
-			xmlns="http://www.w3.org/2000/svg"
-			role="img"
-			aria-label={ __( 'No products', 'woocommerce' ) }
-		>
-			<g style={ { mixBlendMode: 'multiply' } }>
-				<g clipPath="url(#products-empty-state-clip)">
-					<path
-						d="M31.9489 8.0315H25.014V4.69394H23.6479C22.7194 4.69394 22.3285 4.22477 22.3285 3.35313C22.3285 2.48149 22.7194 2.01232 23.6479 2.01232C24.1122 2.01232 26.0292 1.99676 26.0292 1.99676V0L23.2059 0.0155649C21.2001 0.0155649 20.0361 1.36304 20.0361 3.35313C20.0361 5.34322 21.1379 6.62176 23.0393 6.69514V8.0315H16.0489C16.0489 8.0315 8.03223 11.7804 8.03223 12.0117H40.0189C40.0189 11.7804 31.9467 8.0315 31.9467 8.0315H31.9489Z"
-						fill="#F0F0F0"
-					/>
-					<path
-						d="M48 18.0133C48 18.0133 40.1144 10.4243 38.8838 9.47037C37.8242 8.64988 36.5292 8.01172 34.0103 8.01172H31.9489C31.6335 12.1987 28.266 15.494 23.9989 15.494C19.7318 15.494 16.3643 12.1987 16.0489 8.01172H13.9875C11.4686 8.01172 10.1735 8.64766 9.11398 9.47037C7.8856 10.4243 0 18.0133 0 18.0133L2.72553 26.0181H9.95807L9.95141 48.0025H38.0508L38.0442 26.0181H45.2767L48.0022 18.0133H48Z"
-						fill="#E0E0E0"
-					/>
-				</g>
-			</g>
-			<defs>
-				<clipPath id="products-empty-state-clip">
-					<rect width="48" height="48" fill="white" />
-				</clipPath>
-			</defs>
-		</svg>
-	);
-}
diff --git a/packages/js/experimental-products-app/src/product-list/empty-state/index.tsx b/packages/js/experimental-products-app/src/product-list/empty-state/index.tsx
deleted file mode 100644
index 1307071df42..00000000000
--- a/packages/js/experimental-products-app/src/product-list/empty-state/index.tsx
+++ /dev/null
@@ -1,111 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-import { Button, EmptyState } from '@wordpress/ui';
-
-/**
- * Internal dependencies
- */
-import type { StatusTab } from '../constants';
-import { ProductListEmptyStateIcon } from './icon';
-
-type EmptyStateCopy = {
-	title: string;
-	description: string;
-};
-
-function getEmptyStateCopy(
-	tab: StatusTab,
-	isSearchOrFilterResult: boolean
-): EmptyStateCopy {
-	if ( isSearchOrFilterResult ) {
-		return {
-			title: __( 'No products match your filters', 'woocommerce' ),
-			description: __(
-				'Try clearing some filters or adjusting your search query.',
-				'woocommerce'
-			),
-		};
-	}
-
-	switch ( tab ) {
-		case 'publish':
-			return {
-				title: __( 'No products published yet', 'woocommerce' ),
-				description: __(
-					'Check your drafts or add a new product to start selling.',
-					'woocommerce'
-				),
-			};
-		case 'draft':
-			return {
-				title: __( 'No draft products yet', 'woocommerce' ),
-				description: __(
-					'Any products you save as drafts will be listed here.',
-					'woocommerce'
-				),
-			};
-		case 'pending':
-			return {
-				title: __( 'No products awaiting review', 'woocommerce' ),
-				description: __(
-					'Products submitted for review will appear here.',
-					'woocommerce'
-				),
-			};
-		case 'trash':
-			return {
-				title: __( 'No products in trash', 'woocommerce' ),
-				description: __(
-					'Deleted products will move here, where you can restore or remove them permanently.',
-					'woocommerce'
-				),
-			};
-		case 'all':
-		default:
-			return {
-				title: __( 'No products yet', 'woocommerce' ),
-				description: __(
-					'All your products will appear here.',
-					'woocommerce'
-				),
-			};
-	}
-}
-
-type ProductListEmptyStateProps = {
-	isSearchOrFilterResult?: boolean;
-	onClearFilters?: () => void;
-	tab: StatusTab;
-};
-
-export function ProductListEmptyState( {
-	isSearchOrFilterResult = false,
-	onClearFilters,
-	tab,
-}: ProductListEmptyStateProps ) {
-	const { title, description } = getEmptyStateCopy(
-		tab,
-		isSearchOrFilterResult
-	);
-
-	return (
-		<EmptyState.Root className="woocommerce-product-list__empty-state">
-			<EmptyState.Visual>
-				<ProductListEmptyStateIcon />
-			</EmptyState.Visual>
-			<EmptyState.Title>{ title }</EmptyState.Title>
-			<EmptyState.Description className="woocommerce-product-list__empty-state-description">
-				{ description }
-			</EmptyState.Description>
-			{ isSearchOrFilterResult && onClearFilters && (
-				<EmptyState.Actions>
-					<Button variant="outline" onClick={ onClearFilters }>
-						{ __( 'Clear filters', 'woocommerce' ) }
-					</Button>
-				</EmptyState.Actions>
-			) }
-		</EmptyState.Root>
-	);
-}
diff --git a/packages/js/experimental-products-app/src/product-list/empty-state/style.scss b/packages/js/experimental-products-app/src/product-list/empty-state/style.scss
deleted file mode 100644
index bf660a4f95f..00000000000
--- a/packages/js/experimental-products-app/src/product-list/empty-state/style.scss
+++ /dev/null
@@ -1,3 +0,0 @@
-.woocommerce-product-list__empty-state-description {
-	width: max-content;
-}
diff --git a/packages/js/experimental-products-app/src/product-list/fields.tsx b/packages/js/experimental-products-app/src/product-list/fields.tsx
deleted file mode 100644
index c876dd5a394..00000000000
--- a/packages/js/experimental-products-app/src/product-list/fields.tsx
+++ /dev/null
@@ -1,9 +0,0 @@
-/**
- * Internal dependencies
- */
-import {
-	PRODUCT_FIELD_IDS as PRODUCT_LIST_FIELD_IDS,
-	createProductFields,
-} from '../fields/registry';
-
-export const productFields = createProductFields( PRODUCT_LIST_FIELD_IDS );
diff --git a/packages/js/experimental-products-app/src/product-list/index.tsx b/packages/js/experimental-products-app/src/product-list/index.tsx
deleted file mode 100644
index 40c1df7c8ec..00000000000
--- a/packages/js/experimental-products-app/src/product-list/index.tsx
+++ /dev/null
@@ -1,346 +0,0 @@
-/**
- * External dependencies
- */
-import { DataViews, View } from '@wordpress/dataviews';
-import { useState, useMemo, useCallback, useEffect } from '@wordpress/element';
-import { privateApis as routerPrivateApis } from '@wordpress/router';
-import { store as coreStore } from '@wordpress/core-data';
-import { useSelect } from '@wordpress/data';
-import clsx from 'clsx';
-import { Button, Stack, Tabs } from '@wordpress/ui';
-import { privateApis as editorPrivateApis } from '@wordpress/editor';
-import { addQueryArgs } from '@wordpress/url';
-import { getAdminLink } from '@woocommerce/settings';
-import { __ } from '@wordpress/i18n';
-
-/**
- * Internal dependencies
- */
-import { unlock } from '../lock-unlock';
-import type { ProductEntityRecord } from '../fields/types';
-import {
-	DEFAULT_LAYOUTS,
-	EMPTY_ARRAY,
-	PAGE_SIZE,
-	PRODUCT_LIST_TABS,
-	type StatusTab,
-} from './constants';
-import { productFields } from './fields';
-import {
-	getItemId,
-	getProductEditPostId,
-	getProductListNavigationPath,
-	getProductListTab,
-	getProductsWithEmbeddedVariations,
-	getSelectionFromPostId,
-	hasActiveProductListSearchOrFilters,
-	isProductEditorAccessible,
-} from './utils';
-import { useProductActions } from '../dataviews-actions';
-import { ProductListEmptyState } from './empty-state';
-import { ProductListPage, ProductListPageHeader } from './page';
-
-const { usePostActions } = unlock( editorPrivateApis );
-const { useHistory, useLocation } = unlock( routerPrivateApis );
-
-export type ProductListProps = {
-	subTitle?: string;
-	className?: string;
-	hideTitleFromUI?: boolean;
-	postType?: string;
-	hasResolved: boolean;
-	isLoading: boolean;
-	records?: ProductEntityRecord[] | null;
-	selectedTab: StatusTab;
-	setSelectedTab: ( selectedTab: StatusTab ) => void;
-	setView: ( view: View ) => void;
-	totalCount?: number | null;
-	view: View;
-};
-
-export default function ProductList( {
-	className,
-	hasResolved,
-	isLoading,
-	records,
-	selectedTab,
-	setSelectedTab,
-	setView,
-	totalCount,
-	view,
-	postType = 'product',
-}: ProductListProps ) {
-	const { navigate } = useHistory();
-	const location = useLocation();
-	const currentQuery = useMemo(
-		() =>
-			( location.query || {} ) as {
-				postId?: string;
-				activeView?: string;
-				postType?: string;
-			},
-		[ location.query ]
-	);
-	const { postId, activeView = 'all' } = currentQuery;
-	const [ selection, setSelection ] = useState( () =>
-		getSelectionFromPostId( postId )
-	);
-
-	useEffect( () => {
-		setSelection( getSelectionFromPostId( postId ) );
-	}, [ postId ] );
-
-	const onChangeSelection = useCallback(
-		( items: string[] ) => {
-			setSelection( items );
-
-			const nextParams = { ...currentQuery };
-
-			if ( items.length > 0 ) {
-				nextParams.postId = items.join( ',' );
-			} else {
-				nextParams.postId = undefined;
-			}
-
-			navigate(
-				getProductListNavigationPath( location.path, nextParams )
-			);
-		},
-		[ currentQuery, navigate, location.path ]
-	);
-
-	const onChangeTab = useCallback(
-		( value: string | null ) => {
-			if ( ! value ) {
-				return;
-			}
-
-			const nextTab = getProductListTab( value );
-
-			if ( nextTab === selectedTab ) {
-				return;
-			}
-
-			setSelectedTab( nextTab );
-			setSelection( [] );
-
-			const nextParams = {
-				...currentQuery,
-				activeView: nextTab,
-				postId: undefined,
-			};
-
-			navigate(
-				getProductListNavigationPath( location.path, nextParams )
-			);
-		},
-		[ currentQuery, navigate, location.path, selectedTab, setSelectedTab ]
-	);
-
-	const paginationInfo = useMemo(
-		() => ( {
-			totalItems: totalCount ?? 0,
-			totalPages: Math.ceil(
-				( totalCount ?? 0 ) / ( view.perPage || PAGE_SIZE )
-			),
-		} ),
-		[ totalCount, view.perPage ]
-	);
-
-	const data = useMemo(
-		() => getProductsWithEmbeddedVariations( records || EMPTY_ARRAY ),
-		[ records ]
-	);
-	const hasActiveSearchOrFilters =
-		hasActiveProductListSearchOrFilters( view );
-
-	const onClearSearchOrFilters = useCallback( () => {
-		setView( {
-			...view,
-			filters: [],
-			page: 1,
-			search: '',
-		} );
-	}, [ setView, view ] );
-
-	const getItemParentId = useCallback(
-		( item: ProductEntityRecord ) =>
-			item.parent_id && item.parent_id > 0 ? item.parent_id : undefined,
-		[]
-	);
-
-	const { canCreateRecord } = useSelect(
-		( select ) => {
-			const { canUser } = select( coreStore );
-			return {
-				canCreateRecord: canUser( 'create', {
-					kind: 'postType',
-					name: postType,
-				} ),
-			};
-		},
-		[ postType ]
-	);
-
-	const postTypeActions = usePostActions( {
-		postType,
-		context: 'list',
-	} );
-	const productActions = useProductActions();
-	const actions = useMemo(
-		() => [
-			...productActions,
-			...postTypeActions.filter(
-				( { id }: { id: string } ) =>
-					! [
-						'edit-post',
-						'view-post',
-						'duplicate-post',
-						'delete-post',
-						'move-to-trash',
-						'permanently-delete-post',
-					].includes( id )
-			),
-		],
-		[ postTypeActions, productActions ]
-	);
-
-	const classes = clsx( 'woocommerce-product-list', className );
-
-	const pageActions = (
-		<Stack gap="lg">
-			<Button
-				size="compact"
-				variant="outline"
-				onClick={ () =>
-					( window.location.href = getAdminLink(
-						addQueryArgs( 'edit.php', {
-							post_type: 'product',
-							page: 'product_exporter',
-						} )
-					) )
-				}
-			>
-				{ __( 'Export', 'woocommerce' ) }
-			</Button>
-			<Button
-				size="compact"
-				onClick={ () =>
-					( window.location.href = getAdminLink(
-						addQueryArgs( 'edit.php', {
-							post_type: 'product',
-							page: 'product_importer',
-						} )
-					) )
-				}
-				variant="outline"
-			>
-				{ __( 'Import', 'woocommerce' ) }
-			</Button>
-			<Button
-				disabled={ canCreateRecord === false }
-				size="compact"
-				variant="solid"
-				onClick={ () =>
-					( window.location.href = getAdminLink(
-						addQueryArgs( 'post-new.php', {
-							post_type: 'product',
-						} )
-					) )
-				}
-			>
-				{ __( 'Add new product', 'woocommerce' ) }
-			</Button>
-		</Stack>
-	);
-
-	const toolbar = (
-		<Stack
-			direction="row"
-			align="center"
-			justify="space-between"
-			gap="sm"
-			className="woocommerce-product-list__toolbar"
-		>
-			{ /* Tabs component should not be used: https://github.com/woocommerce/woocommerce/issues/64478 */ }
-			<Tabs.Root value={ selectedTab } onValueChange={ onChangeTab }>
-				<Tabs.List
-					variant="minimal"
-					aria-label={ __(
-						'Filter products by status',
-						'woocommerce'
-					) }
-				>
-					{ PRODUCT_LIST_TABS.map( ( tab ) => (
-						<Tabs.Tab key={ tab.value } value={ tab.value }>
-							{ tab.label }
-						</Tabs.Tab>
-					) ) }
-				</Tabs.List>
-			</Tabs.Root>
-			<Stack direction="row" align="center" gap="xs">
-				<DataViews.Search label={ __( 'Search', 'woocommerce' ) } />
-				<DataViews.FiltersToggle />
-				<DataViews.LayoutSwitcher />
-				<DataViews.ViewConfig />
-			</Stack>
-		</Stack>
-	);
-
-	return (
-		<ProductListPage
-			className={ classes }
-			ariaLabel={ __( 'Products', 'woocommerce' ) }
-		>
-			<DataViews
-				key={ activeView }
-				paginationInfo={ paginationInfo }
-				fields={ productFields }
-				data={ data }
-				isLoading={ isLoading || ! hasResolved }
-				view={ view }
-				actions={ actions }
-				onChangeView={ setView }
-				onChangeSelection={ onChangeSelection }
-				getItemId={ getItemId }
-				getItemParentId={ getItemParentId }
-				selection={ selection }
-				defaultLayouts={ DEFAULT_LAYOUTS }
-				isItemClickable={ isProductEditorAccessible }
-				empty={
-					<ProductListEmptyState
-						isSearchOrFilterResult={ hasActiveSearchOrFilters }
-						onClearFilters={ onClearSearchOrFilters }
-						tab={ selectedTab }
-					/>
-				}
-				renderItemLink={ ( { item, ...props } ) => (
-					<a
-						{ ...props }
-						href={ getAdminLink(
-							addQueryArgs( 'post.php', {
-								post: getProductEditPostId( item ),
-								action: 'edit',
-							} )
-						) }
-					>
-						{ props.children }
-					</a>
-				) }
-			>
-				<ProductListPageHeader
-					title={ __( 'Products', 'woocommerce' ) }
-					subTitle={ __(
-						'Add, edit, and manage the products you sell in your store.',
-						'woocommerce'
-					) }
-					actions={ pageActions }
-					toolbar={ toolbar }
-				/>
-				<DataViews.FiltersToggled className="woocommerce-product-list__filters" />
-				<DataViews.Layout />
-				<DataViews.Footer />
-			</DataViews>
-		</ProductListPage>
-	);
-}
diff --git a/packages/js/experimental-products-app/src/product-list/layouts.ts b/packages/js/experimental-products-app/src/product-list/layouts.ts
deleted file mode 100644
index 2d18e5e402c..00000000000
--- a/packages/js/experimental-products-app/src/product-list/layouts.ts
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * External dependencies
- */
-import type { SupportedLayouts, ViewTable } from '@wordpress/dataviews';
-
-export const DEFAULT_PRODUCT_TABLE_TITLE_FIELD = 'name';
-export const DEFAULT_PRODUCT_TABLE_MEDIA_FIELD = 'images';
-
-export const DEFAULT_PRODUCT_TABLE_FIELDS = [
-	'product_status',
-	'type',
-	'sku',
-	'stock',
-	'categories',
-	'price',
-] as const;
-
-export const DEFAULT_PRODUCT_TABLE_LAYOUT: NonNullable<
-	SupportedLayouts[ 'table' ]
-> = {
-	fields: [ ...DEFAULT_PRODUCT_TABLE_FIELDS ],
-	layout: {
-		styles: {
-			price: {
-				align: 'end',
-			},
-		},
-		hierarchyStyle: 'tree',
-	},
-};
-
-export const DEFAULT_PRODUCT_TABLE_VIEW: ViewTable = {
-	type: 'table',
-	filters: [],
-	perPage: 20,
-	mediaField: DEFAULT_PRODUCT_TABLE_MEDIA_FIELD,
-	titleField: DEFAULT_PRODUCT_TABLE_TITLE_FIELD,
-	fields: [ ...DEFAULT_PRODUCT_TABLE_FIELDS ],
-	showLevels: true,
-	showMedia: true,
-	layout: DEFAULT_PRODUCT_TABLE_LAYOUT.layout,
-};
diff --git a/packages/js/experimental-products-app/src/product-list/page/README.md b/packages/js/experimental-products-app/src/product-list/page/README.md
deleted file mode 100644
index 90f10746364..00000000000
--- a/packages/js/experimental-products-app/src/product-list/page/README.md
+++ /dev/null
@@ -1,7 +0,0 @@
-# Product List Page
-
-This is a temporary wrapper around `@wordpress/admin-ui`'s `Page` for the experimental product list.
-
-The product list prototype uses a compact two-line header: title and actions in the first row, subtitle in the second row, then the DataViews toolbar immediately below. The current `Page` component does not expose a public option for this compact header spacing, so this wrapper lets the product list own the header markup without changing `@wordpress/admin-ui`.
-
-Remove this wrapper once `Page` supports this layout directly.
diff --git a/packages/js/experimental-products-app/src/product-list/page/index.tsx b/packages/js/experimental-products-app/src/product-list/page/index.tsx
deleted file mode 100644
index 803e8b76d42..00000000000
--- a/packages/js/experimental-products-app/src/product-list/page/index.tsx
+++ /dev/null
@@ -1,82 +0,0 @@
-/**
- * External dependencies
- */
-import { Page } from '@wordpress/admin-ui';
-import { Badge, Stack } from '@wordpress/ui';
-import { __ } from '@wordpress/i18n';
-
-/**
- * Internal dependencies
- */
-import { FEEDBACK_URL } from '../../constants';
-
-type ProductListPageProps = {
-	ariaLabel: string;
-	children: React.ReactNode;
-	className?: string;
-};
-
-type ProductListPageHeaderProps = {
-	actions?: React.ReactNode;
-	subTitle?: React.ReactNode;
-	title: React.ReactNode;
-	toolbar?: React.ReactNode;
-};
-
-export function ProductListPage( {
-	ariaLabel,
-	children,
-	className,
-}: ProductListPageProps ) {
-	return (
-		<Page className={ className } ariaLabel={ ariaLabel }>
-			{ children }
-		</Page>
-	);
-}
-
-export function ProductListPageHeader( {
-	actions,
-	subTitle,
-	title,
-	toolbar,
-}: ProductListPageHeaderProps ) {
-	return (
-		<header className="woocommerce-product-list-page__header">
-			<Stack direction="row" justify="space-between" gap="sm">
-				<Stack direction="row" gap="sm" align="center" justify="start">
-					<h2 className="woocommerce-product-list-page__header-title">
-						{ title }
-					</h2>
-					<a
-						className="woocommerce-product-list-page__feedback-link"
-						href={ FEEDBACK_URL }
-						target="_blank"
-						rel="noopener noreferrer"
-					>
-						<Badge intent="none">
-							{ __(
-								'Experimental · Share feedback',
-								'woocommerce'
-							) }
-						</Badge>
-					</a>
-				</Stack>
-				<Stack
-					direction="row"
-					gap="sm"
-					className="woocommerce-product-list-page__header-actions"
-					align="center"
-				>
-					{ actions }
-				</Stack>
-			</Stack>
-			{ subTitle && (
-				<p className="woocommerce-product-list-page__header-subtitle">
-					{ subTitle }
-				</p>
-			) }
-			{ toolbar }
-		</header>
-	);
-}
diff --git a/packages/js/experimental-products-app/src/product-list/query.test.ts b/packages/js/experimental-products-app/src/product-list/query.test.ts
deleted file mode 100644
index 46ee45e7204..00000000000
--- a/packages/js/experimental-products-app/src/product-list/query.test.ts
+++ /dev/null
@@ -1,390 +0,0 @@
-/**
- * External dependencies
- */
-import type { View } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import { buildProductListQuery } from './query';
-
-describe( 'buildProductListQuery', () => {
-	const baseView = {
-		type: 'table',
-		page: 3,
-		perPage: 25,
-		search: 'hoodie',
-		sort: {
-			field: 'name',
-			direction: 'asc',
-		},
-		filters: [],
-	} as View;
-
-	it( 'maps the base view query params', () => {
-		expect( buildProductListQuery( baseView ) ).toEqual(
-			expect.objectContaining( {
-				per_page: 25,
-				page: 3,
-				_embed: 1,
-				search_name_or_sku: 'hoodie',
-			} )
-		);
-	} );
-
-	it( 'does not map disabled sort fields to query params', () => {
-		const nameSortQuery = buildProductListQuery( baseView );
-		const priceSortQuery = buildProductListQuery( {
-			...baseView,
-			sort: {
-				field: 'price',
-				direction: 'desc',
-			},
-		} as View );
-
-		expect( nameSortQuery.order ).toBeUndefined();
-		expect( nameSortQuery.orderby ).toBeUndefined();
-		expect( priceSortQuery.order ).toBeUndefined();
-		expect( priceSortQuery.orderby ).toBeUndefined();
-	} );
-
-	it( 'maps supported filters to the v4 product query', () => {
-		const query = buildProductListQuery( {
-			...baseView,
-			filters: [
-				{
-					field: 'product_status',
-					operator: 'is',
-					value: 'draft',
-				},
-				{
-					field: 'type',
-					operator: 'isAny',
-					value: [ 'simple', 'variable' ],
-				},
-				{
-					field: 'categories',
-					operator: 'isAny',
-					value: [ '12', 13 ],
-				},
-				{
-					field: 'stock',
-					operator: 'is',
-					value: 'outofstock',
-				},
-				{
-					field: 'price',
-					operator: 'between',
-					value: [ 10, 25 ],
-				},
-			],
-		} as View );
-
-		expect( query ).toEqual(
-			expect.objectContaining( {
-				status: 'draft',
-				include_types: [ 'simple', 'variable' ],
-				category: '12,13',
-				stock_status: 'outofstock',
-				min_price: '10',
-				max_price: '25',
-			} )
-		);
-	} );
-
-	it( 'maps exclusion filters for supported types and categories', () => {
-		const query = buildProductListQuery( {
-			...baseView,
-			filters: [
-				{
-					field: 'type',
-					operator: 'isNone',
-					value: [ 'grouped' ],
-				},
-				{
-					field: 'categories',
-					operator: 'isNone',
-					value: [ '9', 11 ],
-				},
-			],
-		} as View );
-
-		expect( query.exclude_types ).toEqual( [ 'grouped' ] );
-		expect( query.exclude_category ).toEqual( [ 9, 11 ] );
-	} );
-
-	it( 'maps an exact price filter to both min and max price', () => {
-		const query = buildProductListQuery( {
-			...baseView,
-			filters: [
-				{
-					field: 'price',
-					operator: 'is',
-					value: '15',
-				},
-			],
-		} as View );
-
-		expect( query.min_price ).toBe( '15' );
-		expect( query.max_price ).toBe( '15' );
-	} );
-
-	it( 'maps one-sided price filters', () => {
-		const minimumOnlyQuery = buildProductListQuery( {
-			...baseView,
-			filters: [
-				{
-					field: 'price',
-					operator: 'greaterThanOrEqual',
-					value: '15',
-				},
-			],
-		} as View );
-
-		const maximumOnlyQuery = buildProductListQuery( {
-			...baseView,
-			filters: [
-				{
-					field: 'price',
-					operator: 'lessThanOrEqual',
-					value: 25,
-				},
-			],
-		} as View );
-
-		expect( minimumOnlyQuery.min_price ).toBe( '15' );
-		expect( minimumOnlyQuery.max_price ).toBeUndefined();
-		expect( maximumOnlyQuery.min_price ).toBeUndefined();
-		expect( maximumOnlyQuery.max_price ).toBe( '25' );
-	} );
-
-	it( 'maps stock filters from a selected stock status', () => {
-		const query = buildProductListQuery( {
-			...baseView,
-			filters: [
-				{
-					field: 'stock',
-					operator: 'is',
-					value: 'onbackorder',
-				},
-			],
-		} as View );
-
-		expect( query.stock_status ).toBe( 'onbackorder' );
-	} );
-
-	it( 'maps stock filters from multiple selected stock statuses', () => {
-		const query = buildProductListQuery( {
-			...baseView,
-			filters: [
-				{
-					field: 'stock',
-					operator: 'isAny',
-					value: [ 'instock', 'onbackorder' ],
-				},
-			],
-		} as View );
-
-		expect( query.stock_status ).toEqual( [ 'instock', 'onbackorder' ] );
-	} );
-
-	it( 'ignores empty stock filters until a value is selected', () => {
-		const query = buildProductListQuery( {
-			...baseView,
-			filters: [
-				{
-					field: 'stock',
-					operator: 'isAny',
-					value: [],
-				},
-			],
-		} as View );
-
-		expect( query.stock_status ).toBeUndefined();
-	} );
-
-	it( 'ignores empty taxonomy filters until a value is selected', () => {
-		const query = buildProductListQuery( {
-			...baseView,
-			filters: [
-				{
-					field: 'brands',
-					operator: 'isAny',
-					value: undefined,
-				},
-				{
-					field: 'categories',
-					operator: 'isAny',
-					value: '',
-				},
-				{
-					field: 'tags',
-					operator: 'isAny',
-					value: [],
-				},
-			],
-		} as View );
-
-		expect( query.brand ).toBeUndefined();
-		expect( query.category ).toBeUndefined();
-		expect( query.tag ).toBeUndefined();
-	} );
-
-	it( 'maps the tags isAny filter to the tag query param', () => {
-		const query = buildProductListQuery( {
-			...baseView,
-			filters: [
-				{
-					field: 'tags',
-					operator: 'isAny',
-					value: [ '5', 7 ],
-				},
-			],
-		} as View );
-
-		expect( query.tag ).toEqual( '5,7' );
-	} );
-
-	it( 'maps the tags isNone filter to exclude_tag', () => {
-		const query = buildProductListQuery( {
-			...baseView,
-			filters: [
-				{
-					field: 'tags',
-					operator: 'isNone',
-					value: [ '5', 7 ],
-				},
-			],
-		} as View );
-
-		expect( query.exclude_tag ).toEqual( [ 5, 7 ] );
-	} );
-
-	it( 'maps the brands isAny filter to the brand query param', () => {
-		const query = buildProductListQuery( {
-			...baseView,
-			filters: [
-				{
-					field: 'brands',
-					operator: 'isAny',
-					value: [ '8', 9 ],
-				},
-			],
-		} as View );
-
-		expect( query.brand ).toEqual( '8,9' );
-	} );
-
-	it( 'ignores shipping_class filters', () => {
-		const query = buildProductListQuery( {
-			...baseView,
-			filters: [
-				{
-					field: 'shipping_class',
-					operator: 'isAny',
-					value: [ '3', 4 ],
-				},
-			],
-		} as View );
-
-		expect( query.shipping_class ).toBeUndefined();
-	} );
-
-	it( 'maps the stock_quantity is filter to both min and max', () => {
-		const query = buildProductListQuery( {
-			...baseView,
-			filters: [ { field: 'stock_quantity', operator: 'is', value: 5 } ],
-		} as View );
-
-		expect( query.min_stock_quantity ).toEqual( '5' );
-		expect( query.max_stock_quantity ).toEqual( '5' );
-	} );
-
-	it( 'maps the stock_quantity greaterThan filter to min_stock_quantity + 1', () => {
-		const query = buildProductListQuery( {
-			...baseView,
-			filters: [
-				{ field: 'stock_quantity', operator: 'greaterThan', value: 5 },
-			],
-		} as View );
-
-		expect( query.min_stock_quantity ).toEqual( '6' );
-		expect( query.max_stock_quantity ).toBeUndefined();
-	} );
-
-	it( 'maps the stock_quantity greaterThanOrEqual filter to min_stock_quantity', () => {
-		const query = buildProductListQuery( {
-			...baseView,
-			filters: [
-				{
-					field: 'stock_quantity',
-					operator: 'greaterThanOrEqual',
-					value: 5,
-				},
-			],
-		} as View );
-
-		expect( query.min_stock_quantity ).toEqual( '5' );
-		expect( query.max_stock_quantity ).toBeUndefined();
-	} );
-
-	it( 'maps the stock_quantity lessThan filter to max_stock_quantity - 1', () => {
-		const query = buildProductListQuery( {
-			...baseView,
-			filters: [
-				{ field: 'stock_quantity', operator: 'lessThan', value: 20 },
-			],
-		} as View );
-
-		expect( query.max_stock_quantity ).toEqual( '19' );
-		expect( query.min_stock_quantity ).toBeUndefined();
-	} );
-
-	it( 'maps the stock_quantity lessThanOrEqual filter to max_stock_quantity', () => {
-		const query = buildProductListQuery( {
-			...baseView,
-			filters: [
-				{
-					field: 'stock_quantity',
-					operator: 'lessThanOrEqual',
-					value: 20,
-				},
-			],
-		} as View );
-
-		expect( query.max_stock_quantity ).toEqual( '20' );
-		expect( query.min_stock_quantity ).toBeUndefined();
-	} );
-
-	it( 'maps the stock_quantity between filter to both min and max', () => {
-		const query = buildProductListQuery( {
-			...baseView,
-			filters: [
-				{
-					field: 'stock_quantity',
-					operator: 'between',
-					value: [ 5, 20 ],
-				},
-			],
-		} as View );
-
-		expect( query.min_stock_quantity ).toEqual( '5' );
-		expect( query.max_stock_quantity ).toEqual( '20' );
-	} );
-
-	it( 'leaves stock_quantity bounds unset for the isNot operator (no server-side support)', () => {
-		const query = buildProductListQuery( {
-			...baseView,
-			filters: [
-				{
-					field: 'stock_quantity',
-					operator: 'isNot',
-					value: 5,
-				},
-			],
-		} as View );
-
-		expect( query.min_stock_quantity ).toBeUndefined();
-		expect( query.max_stock_quantity ).toBeUndefined();
-	} );
-} );
diff --git a/packages/js/experimental-products-app/src/product-list/query.ts b/packages/js/experimental-products-app/src/product-list/query.ts
deleted file mode 100644
index bb906442bba..00000000000
--- a/packages/js/experimental-products-app/src/product-list/query.ts
+++ /dev/null
@@ -1,284 +0,0 @@
-/**
- * External dependencies
- */
-import type { Filter, View } from '@wordpress/dataviews';
-import type {
-	ProductQuery,
-	ProductStatus,
-	ProductType,
-} from '@woocommerce/data';
-
-type ProductStockStatus = 'instock' | 'outofstock' | 'onbackorder';
-
-export type ProductListQuery = Omit<
-	ProductQuery,
-	'status' | 'stock_status'
-> & {
-	status?: ProductStatus | ProductStatus[];
-	stock_status?: ProductStockStatus | ProductStockStatus[];
-	_embed?: number;
-	search_name_or_sku?: string;
-	exclude_status?: ProductStatus[];
-	include_types?: ProductType[];
-	exclude_types?: ProductType[];
-	exclude_category?: number[];
-	exclude_tag?: number[];
-	min_stock_quantity?: string;
-	max_stock_quantity?: string;
-	brand?: string;
-};
-
-const SUPPORTED_STATUS_FILTER_FIELDS = [ 'status', 'product_status' ];
-const DISABLED_SORT_FIELDS = [ 'name', 'price' ];
-
-function isStringArray( value: unknown ): value is string[] {
-	return (
-		Array.isArray( value ) &&
-		value.every( ( item ) => typeof item === 'string' )
-	);
-}
-
-function getStringValues( value: unknown ): string[] {
-	if ( isStringArray( value ) ) {
-		return value.filter( Boolean );
-	}
-
-	if ( typeof value === 'string' && value ) {
-		return [ value ];
-	}
-
-	return [];
-}
-
-function getNumericValues( value: unknown ): number[] {
-	const values = Array.isArray( value ) ? value : [ value ];
-	return values
-		.map( ( item ) => {
-			if ( typeof item === 'number' ) {
-				return item;
-			}
-			if ( typeof item === 'string' && item.trim() !== '' ) {
-				return Number( item );
-			}
-			return Number.NaN;
-		} )
-		.filter( Number.isFinite );
-}
-
-function getPriceValue( value: unknown ): string | undefined {
-	if ( typeof value === 'number' && Number.isFinite( value ) ) {
-		return String( value );
-	}
-
-	if ( typeof value === 'string' && value !== '' ) {
-		return value;
-	}
-
-	return undefined;
-}
-
-function applyStatusFilter( query: ProductListQuery, filter: Filter ) {
-	const values = getStringValues( filter.value ) as ProductStatus[];
-
-	if ( values.length === 0 ) {
-		return;
-	}
-
-	if ( filter.operator === 'isNot' || filter.operator === 'isNone' ) {
-		query.exclude_status = values;
-		return;
-	}
-
-	query.status = values.length === 1 ? values[ 0 ] : values;
-}
-
-function applyTypeFilter( query: ProductListQuery, filter: Filter ) {
-	const values = getStringValues( filter.value ) as ProductType[];
-
-	if ( values.length === 0 ) {
-		return;
-	}
-
-	if ( filter.operator === 'isNot' || filter.operator === 'isNone' ) {
-		query.exclude_types = values;
-		return;
-	}
-
-	query.include_types = values;
-}
-
-function applyCategoryFilter( query: ProductListQuery, filter: Filter ) {
-	const values = getNumericValues( filter.value );
-
-	if ( values.length === 0 ) {
-		return;
-	}
-
-	if ( filter.operator === 'isNone' ) {
-		query.exclude_category = values;
-		return;
-	}
-
-	query.category = values.join( ',' );
-}
-
-function applyTagFilter( query: ProductListQuery, filter: Filter ) {
-	const values = getNumericValues( filter.value );
-
-	if ( values.length === 0 ) {
-		return;
-	}
-
-	if ( filter.operator === 'isNone' ) {
-		query.exclude_tag = values;
-		return;
-	}
-
-	query.tag = values.join( ',' );
-}
-
-function applyBrandFilter( query: ProductListQuery, filter: Filter ) {
-	const values = getNumericValues( filter.value );
-
-	if ( values.length === 0 ) {
-		return;
-	}
-
-	query.brand = values.join( ',' );
-}
-
-function applyStockFilter( query: ProductListQuery, filter: Filter ) {
-	const stockStatuses = getStringValues(
-		filter.value
-	) as ProductStockStatus[];
-
-	if ( stockStatuses.length > 0 ) {
-		query.stock_status =
-			stockStatuses.length === 1 ? stockStatuses[ 0 ] : stockStatuses;
-	}
-}
-
-function applyPriceFilter( query: ProductListQuery, filter: Filter ) {
-	if ( filter.operator === 'between' && Array.isArray( filter.value ) ) {
-		const [ minPrice, maxPrice ] = filter.value;
-		query.min_price = getPriceValue( minPrice );
-		query.max_price = getPriceValue( maxPrice );
-		return;
-	}
-
-	const price = getPriceValue( filter.value );
-
-	if ( ! price ) {
-		return;
-	}
-
-	if ( filter.operator === 'greaterThanOrEqual' ) {
-		query.min_price = price;
-		return;
-	}
-
-	if ( filter.operator === 'lessThanOrEqual' ) {
-		query.max_price = price;
-		return;
-	}
-
-	query.min_price = price;
-	query.max_price = price;
-}
-
-function applyStockQuantityFilter( query: ProductListQuery, filter: Filter ) {
-	if ( filter.operator === 'between' && Array.isArray( filter.value ) ) {
-		const [ min, max ] = filter.value;
-		query.min_stock_quantity = getPriceValue( min );
-		query.max_stock_quantity = getPriceValue( max );
-		return;
-	}
-
-	if ( filter.operator === 'isNot' ) {
-		// No WC REST param for stock_quantity exclusion; intentionally
-		// unsupported server-side. The operator is exposed because the user
-		// explicitly asked for it in the UI.
-		return;
-	}
-
-	const raw = getPriceValue( filter.value );
-
-	if ( ! raw ) {
-		return;
-	}
-
-	const numeric = Number( raw );
-
-	if ( ! Number.isFinite( numeric ) ) {
-		return;
-	}
-
-	switch ( filter.operator ) {
-		case 'is':
-			query.min_stock_quantity = raw;
-			query.max_stock_quantity = raw;
-			return;
-		case 'greaterThan':
-			query.min_stock_quantity = String( numeric + 1 );
-			return;
-		case 'greaterThanOrEqual':
-			query.min_stock_quantity = raw;
-			return;
-		case 'lessThan':
-			query.max_stock_quantity = String( numeric - 1 );
-			return;
-		case 'lessThanOrEqual':
-			query.max_stock_quantity = raw;
-	}
-}
-
-export function buildProductListQuery( view: View ): ProductListQuery {
-	const sort =
-		view.sort && ! DISABLED_SORT_FIELDS.includes( view.sort.field )
-			? view.sort
-			: undefined;
-	const query: ProductListQuery = {
-		_embed: 1,
-		per_page: view.perPage,
-		page: view.page,
-		order: sort?.direction,
-		orderby:
-			sort?.field === 'name'
-				? 'title'
-				: ( sort?.field as ProductQuery[ 'orderby' ] ),
-		search_name_or_sku: view.search || undefined,
-	};
-
-	view.filters?.forEach( ( filter ) => {
-		if ( SUPPORTED_STATUS_FILTER_FIELDS.includes( filter.field ) ) {
-			applyStatusFilter( query, filter );
-			return;
-		}
-
-		switch ( filter.field ) {
-			case 'type':
-				applyTypeFilter( query, filter );
-				break;
-			case 'categories':
-				applyCategoryFilter( query, filter );
-				break;
-			case 'tags':
-				applyTagFilter( query, filter );
-				break;
-			case 'brands':
-				applyBrandFilter( query, filter );
-				break;
-			case 'stock':
-				applyStockFilter( query, filter );
-				break;
-			case 'price':
-				applyPriceFilter( query, filter );
-				break;
-			case 'stock_quantity':
-				applyStockQuantityFilter( query, filter );
-				break;
-		}
-	} );
-
-	return query;
-}
diff --git a/packages/js/experimental-products-app/src/product-list/utils.test.ts b/packages/js/experimental-products-app/src/product-list/utils.test.ts
deleted file mode 100644
index d0614da8d12..00000000000
--- a/packages/js/experimental-products-app/src/product-list/utils.test.ts
+++ /dev/null
@@ -1,172 +0,0 @@
-/**
- * External dependencies
- */
-import type { View } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../fields/types';
-import {
-	getProductEditPostId,
-	hasActiveProductListSearchOrFilters,
-	getProductListNavigationPath,
-	getProductsWithEmbeddedVariations,
-} from './utils';
-
-function createProduct(
-	id: number,
-	parentId?: number,
-	variations?: ProductEntityRecord[]
-): ProductEntityRecord {
-	return {
-		id,
-		parent_id: parentId,
-		_embedded: variations ? { variations } : undefined,
-	} as ProductEntityRecord;
-}
-
-describe( 'product list utils', () => {
-	describe( 'getProductListNavigationPath', () => {
-		it( 'preserves existing query args when adding new params', () => {
-			expect(
-				getProductListNavigationPath(
-					'woocommerce-products-dashboard?post_type=product',
-					{
-						activeView: 'draft',
-					}
-				)
-			).toBe(
-				'woocommerce-products-dashboard?post_type=product&activeView=draft'
-			);
-		} );
-
-		it( 'removes invalid undefined params from the existing query and new params', () => {
-			expect(
-				getProductListNavigationPath(
-					'woocommerce-products-dashboard?undefined=%2F&post_type=product',
-					{
-						undefined: '/',
-						activeView: 'draft',
-					}
-				)
-			).toBe(
-				'woocommerce-products-dashboard?post_type=product&activeView=draft'
-			);
-		} );
-
-		it( 'removes existing query args when a param is set to undefined', () => {
-			expect(
-				getProductListNavigationPath(
-					'woocommerce-products-dashboard?post_type=product&postId=12&quickEdit=true',
-					{
-						postId: undefined,
-						quickEdit: undefined,
-					}
-				)
-			).toBe( 'woocommerce-products-dashboard?post_type=product' );
-		} );
-	} );
-
-	describe( 'getProductEditPostId', () => {
-		it( 'returns the product ID for parent products', () => {
-			expect( getProductEditPostId( createProduct( 1 ) ) ).toBe( 1 );
-		} );
-
-		it( 'returns the parent product ID for variations', () => {
-			expect( getProductEditPostId( createProduct( 2, 1 ) ) ).toBe( 1 );
-		} );
-
-		it( 'falls back to the variation ID when a parent ID is missing', () => {
-			expect( getProductEditPostId( createProduct( 2, 0 ) ) ).toBe( 2 );
-		} );
-	} );
-
-	describe( 'getProductsWithEmbeddedVariations', () => {
-		it( 'adds embedded variations after their parent product', () => {
-			const variation = createProduct( 2, 1 );
-			const parent = createProduct( 1, undefined, [ variation ] );
-			const otherProduct = createProduct( 3 );
-
-			expect(
-				getProductsWithEmbeddedVariations( [ parent, otherProduct ] )
-			).toEqual( [ parent, variation, otherProduct ] );
-		} );
-
-		it( 'does not duplicate embedded variations already present in the list', () => {
-			const variation = createProduct( 2, 1 );
-			const parent = createProduct( 1, undefined, [ variation ] );
-
-			expect(
-				getProductsWithEmbeddedVariations( [ parent, variation ] )
-			).toEqual( [ parent, variation ] );
-		} );
-
-		it( 'keeps top-level variation data when available', () => {
-			const embeddedVariation = createProduct( 2, 1 );
-			const listedVariation = {
-				...embeddedVariation,
-				name: 'Listed variation',
-			} as ProductEntityRecord;
-			const parent = createProduct( 1, undefined, [ embeddedVariation ] );
-
-			expect(
-				getProductsWithEmbeddedVariations( [ parent, listedVariation ] )
-			).toEqual( [ parent, listedVariation ] );
-		} );
-	} );
-
-	describe( 'hasActiveProductListSearchOrFilters', () => {
-		const baseView = {
-			type: 'table',
-			page: 1,
-			perPage: 20,
-			filters: [],
-		} as View;
-
-		it( 'returns true when the view has a search query', () => {
-			expect(
-				hasActiveProductListSearchOrFilters( {
-					...baseView,
-					search: ' hoodie ',
-				} )
-			).toBe( true );
-		} );
-
-		it( 'returns true when the view has a filter value', () => {
-			expect(
-				hasActiveProductListSearchOrFilters( {
-					...baseView,
-					filters: [
-						{
-							field: 'stock_quantity',
-							operator: 'is',
-							value: 0,
-						},
-					],
-				} as View )
-			).toBe( true );
-		} );
-
-		it( 'ignores empty search and filter values', () => {
-			expect(
-				hasActiveProductListSearchOrFilters( {
-					...baseView,
-					search: ' ',
-					filters: [
-						{
-							field: 'categories',
-							operator: 'isAny',
-							value: [],
-						},
-						{
-							field: 'tags',
-							operator: 'isAny',
-							value: [ '', undefined ],
-						},
-					],
-				} as View )
-			).toBe( false );
-		} );
-	} );
-} );
diff --git a/packages/js/experimental-products-app/src/product-list/utils.ts b/packages/js/experimental-products-app/src/product-list/utils.ts
deleted file mode 100644
index eabdcb3aee9..00000000000
--- a/packages/js/experimental-products-app/src/product-list/utils.ts
+++ /dev/null
@@ -1,121 +0,0 @@
-/**
- * External dependencies
- */
-import { addQueryArgs, getQueryArgs } from '@wordpress/url';
-import { Filter, View } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord, ProductStatus } from '../fields/types';
-import { PRODUCT_LIST_TAB_VALUES, type StatusTab } from './constants';
-
-export function getProductListNavigationPath(
-	path: string,
-	params: Record< string, string | undefined >
-) {
-	const [ pathname = '/' ] = path.split( '?' );
-	const query = {
-		...getQueryArgs( path ),
-		...params,
-	};
-	const sanitizedQuery = Object.fromEntries(
-		Object.entries( query ).filter(
-			( [ key, value ] ) =>
-				key !== 'undefined' && typeof value !== 'undefined'
-		)
-	);
-
-	return addQueryArgs( pathname, sanitizedQuery );
-}
-
-export function getItemId( item: ProductEntityRecord ) {
-	return item.id.toString();
-}
-
-export function getProductEditPostId( item: ProductEntityRecord ) {
-	return item.parent_id && item.parent_id > 0 ? item.parent_id : item.id;
-}
-
-export function getProductsWithEmbeddedVariations(
-	items: ProductEntityRecord[]
-): ProductEntityRecord[] {
-	const itemsById = new Map( items.map( ( item ) => [ item.id, item ] ) );
-	const productsWithVariations = new Map< number, ProductEntityRecord >();
-
-	function addItem( item: ProductEntityRecord ) {
-		if ( productsWithVariations.has( item.id ) ) {
-			return;
-		}
-
-		productsWithVariations.set( item.id, item );
-	}
-
-	items.forEach( ( item ) => {
-		if ( item.parent_id && itemsById.has( item.parent_id ) ) {
-			return;
-		}
-
-		addItem( item );
-
-		item._embedded?.variations?.forEach( ( variation ) => {
-			addItem( itemsById.get( variation.id ) ?? variation );
-		} );
-	} );
-
-	return Array.from( productsWithVariations.values() );
-}
-
-function isProductListTabValue( value: string ): value is StatusTab {
-	return PRODUCT_LIST_TAB_VALUES.includes( value as StatusTab );
-}
-
-export function getProductListTab( value?: string ): StatusTab {
-	if ( value && isProductListTabValue( value ) ) {
-		return value;
-	}
-
-	return 'all';
-}
-
-export function getStatusForProductListTab(
-	tab: StatusTab
-): ProductStatus | undefined {
-	switch ( tab ) {
-		case 'publish':
-		case 'draft':
-		case 'pending':
-		case 'trash':
-			return tab;
-		default:
-			return undefined;
-	}
-}
-
-export function getSelectionFromPostId( postId?: string ) {
-	return postId?.split( ',' ).filter( Boolean ) ?? [];
-}
-
-export function isProductEditorAccessible( item: ProductEntityRecord ) {
-	return item.status !== 'trash';
-}
-
-function hasFilterValue( value: Filter[ 'value' ] ): boolean {
-	if ( Array.isArray( value ) ) {
-		return value.some( hasFilterValue );
-	}
-
-	if ( typeof value === 'string' ) {
-		return value.trim() !== '';
-	}
-
-	return value !== undefined && value !== null;
-}
-
-export function hasActiveProductListSearchOrFilters( view: View ) {
-	return (
-		( typeof view.search === 'string' && view.search.trim() !== '' ) ||
-		view.filters?.some( ( filter ) => hasFilterValue( filter.value ) ) ===
-			true
-	);
-}
diff --git a/packages/js/experimental-products-app/src/products.tsx b/packages/js/experimental-products-app/src/products.tsx
deleted file mode 100644
index 6130635765c..00000000000
--- a/packages/js/experimental-products-app/src/products.tsx
+++ /dev/null
@@ -1,47 +0,0 @@
-/**
- * External dependencies
- */
-import { StrictMode, Suspense, createRoot, lazy } from '@wordpress/element';
-import {
-	Root,
-	// @ts-expect-error missing types.
-} from 'react-dom/client';
-
-/**
- * Internal dependencies
- */
-import { AppErrorBoundary } from './app-error-boundary';
-
-const ProductsApp = lazy( () =>
-	import( './app' ).then( ( module ) => ( {
-		default: module.ProductsApp,
-	} ) )
-);
-
-/**
- * Initializes the "Products Dashboard".
- *
- * @param {string} id DOM element id.
- */
-export function initializeProductsDashboard( id: string ): Root {
-	const target = document.getElementById( id );
-
-	if ( ! target ) {
-		throw new Error(
-			`Could not initialize products dashboard: element with id "${ id }" was not found.`
-		);
-	}
-
-	const root = createRoot( target );
-	root.render(
-		<StrictMode>
-			<AppErrorBoundary>
-				<Suspense fallback={ null }>
-					<ProductsApp />
-				</Suspense>
-			</AppErrorBoundary>
-		</StrictMode>
-	);
-
-	return root;
-}
diff --git a/packages/js/experimental-products-app/src/router.tsx b/packages/js/experimental-products-app/src/router.tsx
deleted file mode 100644
index 297d69ea1d0..00000000000
--- a/packages/js/experimental-products-app/src/router.tsx
+++ /dev/null
@@ -1,142 +0,0 @@
-/**
- * External dependencies
- */
-import { privateApis as routerPrivateApis } from '@wordpress/router';
-import { store as coreStore } from '@wordpress/core-data';
-import { useSelect } from '@wordpress/data';
-import { useEffect, useMemo, useState } from '@wordpress/element';
-import type { View } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import { unlock } from './lock-unlock';
-import ProductList from './product-list';
-import ProductEdit from './product-edit';
-import type { ProductEntityRecord } from './fields/types';
-import { DEFAULT_VIEW } from './product-list/constants';
-import { buildProductListQuery } from './product-list/query';
-import {
-	getProductListTab,
-	getStatusForProductListTab,
-} from './product-list/utils';
-
-const { useLocation } = unlock( routerPrivateApis );
-
-export type Route = {
-	key: string;
-	areas: {
-		sidebar?: React.JSX.Element;
-		content?: React.JSX.Element;
-		edit?: React.JSX.Element;
-		mobile?: React.JSX.Element | boolean;
-		preview?: boolean;
-	};
-	widths?: {
-		content?: number;
-		edit?: number;
-		sidebar?: number;
-	};
-};
-
-export default function useLayoutAreas() {
-	const { params = {}, query = {} } = useLocation();
-	const postType = params.postType ?? query.postType ?? 'product';
-	const activeView = query.activeView as string | undefined;
-	const selectedTabFromLocation = getProductListTab( activeView );
-	const [ selectedTab, setSelectedTab ] = useState( selectedTabFromLocation );
-	const [ view, setView ] = useState< View >( DEFAULT_VIEW );
-	const showQuickEdit =
-		params.quickEdit === 'true' ||
-		query.quickEdit === 'true' ||
-		params.quickEdit === true ||
-		query.quickEdit === true;
-
-	useEffect( () => {
-		setSelectedTab( selectedTabFromLocation );
-	}, [ selectedTabFromLocation ] );
-
-	useEffect( () => {
-		setView( DEFAULT_VIEW );
-	}, [ activeView ] );
-
-	const queryParams = useMemo( () => {
-		const productListQuery = buildProductListQuery( view );
-		const productStatus = getStatusForProductListTab( selectedTab );
-
-		if ( productStatus ) {
-			productListQuery.status = productStatus;
-		}
-
-		return productListQuery;
-	}, [ selectedTab, view ] );
-
-	const {
-		records,
-		totalItems: totalCount,
-		isResolving: isLoading,
-		hasResolved,
-	} = useSelect(
-		( select ) => {
-			const {
-				getEntityRecords,
-				isResolving,
-				hasFinishedResolution,
-				getEntityRecordsTotalItems,
-			} = select( coreStore );
-
-			return {
-				records: getEntityRecords< ProductEntityRecord >(
-					'root',
-					'product',
-					queryParams
-				),
-				totalItems: getEntityRecordsTotalItems( 'root', 'product', {
-					...queryParams,
-				} ),
-				isResolving: isResolving( 'getEntityRecords', [
-					'root',
-					'product',
-					queryParams,
-				] ),
-				hasResolved: hasFinishedResolution( 'getEntityRecords', [
-					'root',
-					'product',
-					queryParams,
-				] ),
-			};
-		},
-		[ queryParams ]
-	);
-
-	const productListProps = {
-		hasResolved,
-		isLoading,
-		records,
-		selectedTab,
-		setSelectedTab,
-		setView,
-		totalCount,
-		view,
-	};
-
-	return {
-		key: 'products-list',
-		areas: {
-			content: <ProductList { ...productListProps } />,
-			edit: (
-				<ProductEdit
-					products={ records ?? [] }
-					isOpen={ showQuickEdit }
-				/>
-			),
-			preview: false,
-			mobile: (
-				<ProductList postType={ postType } { ...productListProps } />
-			),
-		},
-		widths: {
-			edit: 380,
-		},
-	};
-}
diff --git a/packages/js/experimental-products-app/src/sidebar/index.tsx b/packages/js/experimental-products-app/src/sidebar/index.tsx
deleted file mode 100644
index d1b2b751c72..00000000000
--- a/packages/js/experimental-products-app/src/sidebar/index.tsx
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * External dependencies
- */
-import { useRef } from '@wordpress/element';
-
-function SidebarContentWrapper( { children }: { children: React.ReactNode } ) {
-	const wrapperRef = useRef< HTMLDivElement | null >( null );
-	const wrapperCls = 'edit-site-sidebar__screen-wrapper';
-
-	return (
-		<div ref={ wrapperRef } className={ wrapperCls }>
-			{ children }
-		</div>
-	);
-}
-
-export default function SidebarContent( {
-	routeKey,
-	children,
-}: {
-	routeKey: string;
-	children: React.ReactNode;
-} ) {
-	return (
-		<div className="edit-site-sidebar__content">
-			<SidebarContentWrapper key={ routeKey }>
-				{ children }
-			</SidebarContentWrapper>
-		</div>
-	);
-}
diff --git a/packages/js/experimental-products-app/src/style.scss b/packages/js/experimental-products-app/src/style.scss
deleted file mode 100644
index ddd6d2466dc..00000000000
--- a/packages/js/experimental-products-app/src/style.scss
+++ /dev/null
@@ -1,217 +0,0 @@
-@import "../node_modules/@wordpress/theme/src/prebuilt/css/design-tokens.css";
-@import "@wordpress/components/build-style/style.css";
-@import "@wordpress/dataviews/build-style/style.css";
-@import "@wordpress/base-styles/mixins";
-
-.product_page_woocommerce-products-dashboard {
-	background-color: unset;
-}
-
-.product_page_woocommerce-products-dashboard #wpcontent {
-	padding: 0;
-}
-
-.product_page_woocommerce-products-dashboard #wpbody-content {
-	padding-bottom: 0;
-}
-
-.product_page_woocommerce-products-dashboard #wpfooter {
-	display: none;
-}
-
-.product_page_woocommerce-products-dashboard,
-#woocommerce-variations-classic-root,
-.woocommerce-product-edit__drawer-portal {
-	@import "./fields/grouped_products/style.scss";
-	@import "./fields/components/list-item/style.scss";
-	@import "./fields/components/searchable-chip-select/style.scss";
-	@import "./fields/components/taxonomy-edit/style.scss";
-	@import "./fields/downloadable/style.scss";
-	@import "./fields/images/style.scss";
-	@import "./fields/schedule_sale/style.scss";
-	@import "./fields/stock/style.scss";
-	@import "./fields/visibility_summary/style.scss";
-	--wp-ui-drawer-z-index: 100000;
-	--wp-ui-select-z-index: 100001;
-}
-
-.product_page_woocommerce-products-dashboard-snackbar {
-	@include snackbar-container;
-	z-index: 100002;
-}
-
-.woocommerce-experimental-products-app-error {
-	box-sizing: border-box;
-	min-height: calc(100vh - var(--wp-admin--admin-bar--height, 32px));
-	padding: var(--wpds-dimension-padding-2xl, 24px);
-}
-
-.woocommerce-experimental-products-app-error__description {
-	max-width: 520px;
-}
-
-.product_page_woocommerce-products-dashboard .edit-site-layout__content {
-	display: flex;
-	align-items: stretch;
-}
-
-.product_page_woocommerce-products-dashboard
-	.edit-site-layout__area:not(.woocommerce-product-edit-layout__region) {
-	flex: 1 1 auto;
-	min-width: 0;
-}
-
-.product_page_woocommerce-products-dashboard .woocommerce-product-list {
-	height: calc(100vh - var(--wp-admin--admin-bar--height, 32px));
-}
-
-.woocommerce-product-list__toolbar {
-	margin: var(--wpds-dimension-padding-xs, 4px)
-		calc(var(--wpds-dimension-padding-2xl, 24px) * -1) 0;
-	padding: 0 var(--wpds-dimension-padding-2xl, 24px);
-}
-
-.woocommerce-product-list .dataviews-wrapper {
-	height: 100%;
-}
-
-.woocommerce-product-list-page__header {
-	position: sticky;
-	top: 0;
-	z-index: 1;
-	padding: var(--wpds-dimension-padding-lg, 16px)
-		var(--wpds-dimension-padding-2xl, 24px)
-		0;
-	border-bottom: var(--wpds-border-width-xs, 1px) solid
-		var(--wpds-color-stroke-surface-neutral-weak, #ddd);
-}
-
-.woocommerce-product-list-page__header-title {
-	margin: 0;
-	overflow: hidden;
-	color: var(--wpds-color-fg-content-neutral, #1e1e1e);
-	font-family: var(--wpds-typography-font-family-heading);
-	font-size: var(--wpds-typography-font-size-lg, 15px);
-	font-weight: var(--wpds-typography-font-weight-medium, 500);
-	text-overflow: ellipsis;
-	white-space: nowrap;
-}
-
-.woocommerce-product-list-page__header-actions {
-	width: auto;
-	flex-shrink: 0;
-}
-
-// Wrap the Beta feedback Badge in a link without inheriting the default
-// underlined anchor styling — the Badge already provides its own affordance.
-.woocommerce-product-list-page__feedback-link {
-	display: inline-flex;
-	text-decoration: none;
-	color: inherit;
-
-	&:hover,
-	&:focus-visible {
-		text-decoration: none;
-	}
-}
-
-.woocommerce-product-list-page__header-subtitle {
-	margin: 0;
-	color: var(--wpds-color-fg-content-neutral-weak, #707070);
-	font-size: var(--wpds-typography-font-size-md, 13px);
-	line-height: var(--wpds-typography-line-height-md, 24px);
-}
-
-// Temporary override until DataViews supports title links without default underlines.
-#woocommerce-products-dashboard a.dataviews-title-field {
-	text-decoration: none;
-
-	&:hover {
-		text-decoration: underline;
-	}
-}
-
-.woocommerce-product-edit {
-	display: flex;
-	flex-direction: column;
-	height: 100%;
-	padding-top: var(--wpds-dimension-padding-2xl, 24px);
-}
-
-.woocommerce-product-edit__header {
-	display: flex;
-	align-items: center;
-	justify-content: space-between;
-	gap: 12px;
-	padding: 12px var(--wpds-dimension-padding-2xl, 24px);
-	border-bottom: 1px solid var(--wp-components-color-gray-300, #ddd);
-}
-
-// Qualified to beat `@wordpress/ui`'s unlayered `:is(h1-h6).heading` defense rule.
-// Matches the design-system Drawer header treatment (heading-xl, 20px).
-.woocommerce-product-edit__drawer .woocommerce-product-edit__title {
-	margin: 0;
-	font-size: 20px;
-	font-weight: 500;
-	line-height: 28px;
-	color: var(--wp-components-color-foreground, #1e1e1e);
-	overflow: hidden;
-	text-overflow: ellipsis;
-	white-space: nowrap;
-}
-
-.woocommerce-product-edit__loading,
-.woocommerce-product-edit__empty-state {
-	display: flex;
-	min-height: 100%;
-	align-items: center;
-	justify-content: center;
-	padding: var(--wpds-dimension-padding-xl, 20px);
-}
-
-.woocommerce-product-edit__form {
-	flex: 1;
-
-	// TODO: Improve grouped DataForm section spacing at the DataViews library level.
-	> .dataforms-layouts__wrapper {
-		gap: 0 !important;
-	}
-
-	.dataforms-layouts-regular__header :is(h1, h2, h3, h4, h5, h6) {
-		margin: 0 !important;
-		font-size: 15px !important;
-	}
-
-	.dataforms-layouts-row__header {
-		gap: 0 !important;
-		margin-bottom: 8px;
-
-		:is(h1, h2, h3, h4, h5, h6) {
-			margin: 0 !important;
-			color: var(--wpds-color-fg-content-neutral, #1e1e1e);
-			font-family: var(--wpds-typography-font-family-body);
-			font-size: 11px !important;
-			font-weight: 500;
-			line-height: 1.4;
-			text-transform: uppercase;
-		}
-	}
-
-	.dataforms-layouts-regular__header + .dataforms-layouts__wrapper {
-		gap: 16px !important;
-		margin-top: 16px;
-	}
-
-	.dataforms-layouts__wrapper + .dataforms-layouts-regular__header {
-		margin-top: 32px;
-	}
-}
-
-.woocommerce-product-edit__footer {
-	display: flex;
-	justify-content: flex-end;
-	gap: 8px;
-}
-
-@import "./product-list/empty-state/style.scss";
-@import "./variation-view/style.scss";
diff --git a/packages/js/experimental-products-app/src/tsconfig.json b/packages/js/experimental-products-app/src/tsconfig.json
deleted file mode 100644
index aff0ee2bd03..00000000000
--- a/packages/js/experimental-products-app/src/tsconfig.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
-	"extends": "../tsconfig.json",
-	"compilerOptions": {
-		"noEmit": true,
-		"types": [ "jest", "@testing-library/jest-dom" ]
-	},
-	"include": [
-		"../typings/**/*",
-		"./**/*.test.ts",
-		"./**/*.test.tsx"
-	],
-	"exclude": []
-}
diff --git a/packages/js/experimental-products-app/src/utilites/convert-html-to-plain-text.ts b/packages/js/experimental-products-app/src/utilites/convert-html-to-plain-text.ts
deleted file mode 100644
index b951c6381a7..00000000000
--- a/packages/js/experimental-products-app/src/utilites/convert-html-to-plain-text.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-/**
- * Converts HTML string to plain text by stripping HTML tags
- *
- * @param htmlString - The HTML string to convert
- * @return Plain text content without HTML tags
- */
-export function convertHtmlToPlainText( htmlString: string ): string {
-	const tempDiv = document.createElement( 'div' );
-	tempDiv.innerHTML = htmlString;
-	return tempDiv.textContent || tempDiv.innerText || '';
-}
diff --git a/packages/js/experimental-products-app/src/utilites/index.ts b/packages/js/experimental-products-app/src/utilites/index.ts
deleted file mode 100644
index a508568be43..00000000000
--- a/packages/js/experimental-products-app/src/utilites/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { convertHtmlToPlainText } from './convert-html-to-plain-text';
diff --git a/packages/js/experimental-products-app/src/utilites/new-navigation.tsx b/packages/js/experimental-products-app/src/utilites/new-navigation.tsx
deleted file mode 100644
index 2e527015673..00000000000
--- a/packages/js/experimental-products-app/src/utilites/new-navigation.tsx
+++ /dev/null
@@ -1,35 +0,0 @@
-/**
- * External dependencies
- */
-import { createContext, useState, useContext } from '@wordpress/element';
-
-type NewNavigationContextType = {
-	showNewNavigation: boolean;
-	setShowNewNavigation: ( nav: boolean ) => void;
-};
-const NewNavigationContext = createContext< NewNavigationContextType | null >(
-	null
-);
-
-export function NewNavigationProvider( {
-	children,
-}: {
-	children?: React.ReactNode;
-} ) {
-	const [ showNewNavigation, setShowNewNavigation ] = useState( false );
-	return (
-		<NewNavigationContext.Provider
-			value={ { showNewNavigation, setShowNewNavigation } }
-		>
-			{ children }
-		</NewNavigationContext.Provider>
-	);
-}
-export function useNewNavigation(): [ boolean, ( nav: boolean ) => void ] {
-	const context = useContext( NewNavigationContext );
-	if ( context ) {
-		const { showNewNavigation, setShowNewNavigation } = context;
-		return [ showNewNavigation, setShowNewNavigation ];
-	}
-	return [ false, () => {} ];
-}
diff --git a/packages/js/experimental-products-app/src/variation-view-app.tsx b/packages/js/experimental-products-app/src/variation-view-app.tsx
deleted file mode 100644
index 343b0e39005..00000000000
--- a/packages/js/experimental-products-app/src/variation-view-app.tsx
+++ /dev/null
@@ -1,89 +0,0 @@
-/**
- * External dependencies
- */
-import { StrictMode, Suspense, createRoot, lazy } from '@wordpress/element';
-import { privateApis as routerPrivateApis } from '@wordpress/router';
-import { ThemeProvider } from '@wordpress/theme';
-
-/**
- * Internal dependencies
- */
-import { unlock } from './lock-unlock';
-
-const { RouterProvider } = unlock( routerPrivateApis );
-
-const VariationView = lazy( () =>
-	import(
-		/* webpackChunkName: "experimental-products-app-variation-view-main" */
-		'./variation-view'
-	).then( ( module ) => ( {
-		default: module.VariationView,
-	} ) )
-);
-
-const ProductAttributes = lazy( () =>
-	import(
-		/* webpackChunkName: "experimental-products-app-variation-view-main" */
-		'./variation-view'
-	).then( ( module ) => ( {
-		default: module.ProductAttributes,
-	} ) )
-);
-
-// The variations redesign mounts into separate PHP-provided metabox roots,
-// but each root needs the same app providers.
-function renderWithProviders(
-	containerId: string,
-	children: JSX.Element
-): void {
-	const target = document.getElementById( containerId );
-
-	if ( ! target ) {
-		return undefined;
-	}
-
-	const root = createRoot( target );
-	root.render(
-		<StrictMode>
-			<Suspense fallback={ null }>
-				<RouterProvider>
-					<ThemeProvider>{ children }</ThemeProvider>
-				</RouterProvider>
-			</Suspense>
-		</StrictMode>
-	);
-}
-
-/**
- * Initializes the classic product editor variation view.
- *
- * @param {string} containerId DOM element ID.
- * @param {number} productId   Parent product ID.
- */
-export function initializeVariationView(
-	containerId: string,
-	productId: number
-): void {
-	renderWithProviders(
-		containerId,
-		<VariationView productId={ productId } />
-	);
-}
-
-/**
- * Initializes the product data attributes panel for the variations redesign.
- * This is mounted separately from the variations view because the attributes
- * panel has its own metabox DOM root.
- *
- * @param {string} containerId DOM element ID.
- * @param {number} productId   Parent product ID.
- */
-export function initializeProductAttributesView(
-	containerId: string,
-	productId: number
-): void {
-	renderWithProviders(
-		containerId,
-		<ProductAttributes productId={ productId } />
-	);
-}
diff --git a/packages/js/experimental-products-app/src/variation-view/constants.ts b/packages/js/experimental-products-app/src/variation-view/constants.ts
deleted file mode 100644
index dab893696ee..00000000000
--- a/packages/js/experimental-products-app/src/variation-view/constants.ts
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * External dependencies
- */
-import type { SupportedLayouts, ViewTable } from '@wordpress/dataviews';
-
-export const PAGE_SIZE = 20;
-
-export const DEFAULT_VARIATION_TABLE_TITLE_FIELD = 'name';
-export const DEFAULT_VARIATION_TABLE_MEDIA_FIELD = 'images';
-
-export const DEFAULT_VARIATION_TABLE_FIELDS = [
-	'variation_options',
-	'variation_active',
-	'price',
-	'stock',
-] as const;
-
-export const DEFAULT_LAYOUTS = {
-	table: {
-		fields: [ ...DEFAULT_VARIATION_TABLE_FIELDS ],
-		layout: {
-			density: 'compact',
-			styles: {
-				price: {
-					align: 'end',
-				},
-			},
-		},
-	} satisfies NonNullable< SupportedLayouts[ 'table' ] >,
-};
-
-export const DEFAULT_VIEW: ViewTable = {
-	type: 'table',
-	page: 1,
-	perPage: PAGE_SIZE,
-	search: '',
-	filters: [],
-	titleField: DEFAULT_VARIATION_TABLE_TITLE_FIELD,
-	mediaField: DEFAULT_VARIATION_TABLE_MEDIA_FIELD,
-	fields: [ ...DEFAULT_VARIATION_TABLE_FIELDS ],
-	showMedia: true,
-	layout: DEFAULT_LAYOUTS.table.layout,
-};
diff --git a/packages/js/experimental-products-app/src/variation-view/edit/drawer.tsx b/packages/js/experimental-products-app/src/variation-view/edit/drawer.tsx
deleted file mode 100644
index 5e80eec3db2..00000000000
--- a/packages/js/experimental-products-app/src/variation-view/edit/drawer.tsx
+++ /dev/null
@@ -1,456 +0,0 @@
-/**
- * External dependencies
- */
-import { Button, Spinner } from '@wordpress/components';
-import { store as coreStore } from '@wordpress/core-data';
-import { select as wpSelect, useDispatch, useSelect } from '@wordpress/data';
-import { useCallback, useState } from '@wordpress/element';
-import { __, sprintf } from '@wordpress/i18n';
-import { store as noticesStore } from '@wordpress/notices';
-import { privateApis as routerPrivateApis } from '@wordpress/router';
-import { Drawer } from '@wordpress/ui';
-
-/**
- * Internal dependencies
- */
-import { unlock } from '../../lock-unlock';
-import { getSelectionFromPostId } from '../../product-list/utils';
-import {
-	findProductInList,
-	getProductEditRecord,
-	getProductEditFields,
-	getProductWithUpdatedVariation,
-	isProductVariation,
-} from '../../product-edit/utils';
-import { saveSelectedProducts } from '../../product-edit/save';
-import { buildVariationViewQuery } from '../query';
-import type { ProductEntityRecord } from '../fields/types';
-import { variationEditFields } from '../fields/registry';
-import { VariationEditForm } from './form';
-
-const { useLocation } = unlock( routerPrivateApis );
-
-type VariationEditDrawerProps = {
-	products: ProductEntityRecord[];
-	isOpen: boolean;
-	productId: number;
-	onClose: () => void;
-};
-
-function getSaveNoticeMessage( successCount: number, failedCount: number ) {
-	if ( failedCount === 0 ) {
-		if ( successCount === 1 ) {
-			return __( 'Variation saved.', 'woocommerce' );
-		}
-
-		return sprintf(
-			/* translators: %d number of saved variations. */
-			__( '%d variations saved.', 'woocommerce' ),
-			successCount
-		);
-	}
-
-	if ( successCount === 0 ) {
-		if ( failedCount === 1 ) {
-			return __( 'Failed to save variation.', 'woocommerce' );
-		}
-
-		return sprintf(
-			/* translators: %d number of variations that could not be saved. */
-			__( 'Failed to save %d variations.', 'woocommerce' ),
-			failedCount
-		);
-	}
-
-	return sprintf(
-		/* translators: 1: successful variation count, 2: failed variation count. */
-		__(
-			'Saved %1$d variations. %2$d variations could not be saved.',
-			'woocommerce'
-		),
-		successCount,
-		failedCount
-	);
-}
-
-export function VariationEditDrawer( {
-	products,
-	isOpen,
-	productId,
-	onClose,
-}: VariationEditDrawerProps ) {
-	const { query = {} } = useLocation();
-	const requestedProductIdsFromRoute = getSelectionFromPostId( query.postId )
-		.map( ( postId ) => Number( postId ) )
-		.filter( ( postId ) => Number.isSafeInteger( postId ) && postId > 0 );
-	const requestedProductIds = Array.from(
-		new Set( requestedProductIdsFromRoute )
-	);
-
-	const [ isSaving, setIsSaving ] = useState( false );
-
-	const editableFields = getProductEditFields( variationEditFields );
-	const {
-		selectedProducts,
-		isResolving,
-		hasResolved,
-		hasMissingProducts,
-		hasEdits,
-	} = useSelect(
-		( select ) => {
-			if ( requestedProductIds.length === 0 ) {
-				return {
-					selectedProducts: [],
-					isResolving: false,
-					hasResolved: true,
-					hasMissingProducts: false,
-					hasEdits: false,
-				};
-			}
-
-			const coreSelect = select( coreStore );
-			const productResults = requestedProductIds.map(
-				( reqProductId ) => {
-					const resolutionArgs = [ 'root', 'product', reqProductId ];
-					const rootRecord = coreSelect.getEditedEntityRecord(
-						'root',
-						'product',
-						reqProductId
-					) as unknown as ProductEntityRecord | false | undefined;
-					const rootRecordEdits = coreSelect.getEntityRecordEdits(
-						'root',
-						'product',
-						reqProductId
-					) as Partial< ProductEntityRecord > | undefined;
-					const listedProduct = findProductInList(
-						products,
-						reqProductId
-					);
-					const product = getProductEditRecord(
-						listedProduct,
-						rootRecord,
-						rootRecordEdits
-					);
-					let record: ProductEntityRecord | false | undefined =
-						product ?? rootRecord;
-
-					if (
-						product &&
-						isProductVariation( product ) &&
-						product.parent_id
-					) {
-						const parentProduct = coreSelect.getEditedEntityRecord(
-							'root',
-							'product',
-							product.parent_id
-						) as unknown as ProductEntityRecord | false | undefined;
-						const editedParentProduct =
-							parentProduct !== false ? parentProduct : undefined;
-						const editedVariation =
-							editedParentProduct?._embedded?.variations?.find(
-								( variation ) => variation.id === product.id
-							);
-
-						record = editedVariation || product;
-					}
-
-					return {
-						productId: reqProductId,
-						record,
-						isResolving: listedProduct
-							? false
-							: coreSelect.isResolving(
-									'getEditedEntityRecord',
-									resolutionArgs
-							  ),
-						hasFinishedResolution: listedProduct
-							? true
-							: coreSelect.hasFinishedResolution(
-									'getEditedEntityRecord',
-									resolutionArgs
-							  ),
-					};
-				}
-			);
-			const resolvedProducts = productResults
-				.map( ( { record } ) => record )
-				.filter(
-					( product ): product is ProductEntityRecord =>
-						product !== undefined && product !== false
-				);
-			const editedProductIds = Array.from(
-				new Set(
-					resolvedProducts.map( ( product ) =>
-						isProductVariation( product ) && product.parent_id
-							? product.parent_id
-							: product.id
-					)
-				)
-			);
-
-			return {
-				selectedProducts: resolvedProducts,
-				isResolving: productResults.some(
-					( result ) =>
-						result.isResolving || ! result.hasFinishedResolution
-				),
-				hasResolved: productResults.every(
-					( result ) => result.hasFinishedResolution
-				),
-				hasMissingProducts: productResults.some(
-					( result ) =>
-						result.hasFinishedResolution && result.record === false
-				),
-				hasEdits: editedProductIds.some( ( editedProductId ) =>
-					coreSelect.hasEditsForEntityRecord(
-						'root',
-						'product',
-						editedProductId
-					)
-				),
-			};
-		},
-		[ products, requestedProductIds ]
-	);
-
-	const {
-		clearEntityRecordEdits,
-		editEntityRecord,
-		saveEditedEntityRecord,
-		invalidateResolution,
-	} = useDispatch( coreStore );
-
-	const { createSuccessNotice, createErrorNotice } =
-		useDispatch( noticesStore );
-
-	const hasNoRequestedProducts = requestedProductIds.length === 0;
-	const isReady =
-		hasResolved &&
-		! isResolving &&
-		! hasMissingProducts &&
-		selectedProducts.length === requestedProductIds.length &&
-		selectedProducts.length > 0;
-
-	let title = __( 'Edit variation', 'woocommerce' );
-
-	if ( isReady ) {
-		if ( selectedProducts.length === 1 ) {
-			// @ts-expect-error This code is a POC. It needs to be refactored.
-			title = selectedProducts[ 0 ]?.name || title;
-		} else {
-			// @ts-expect-error This code is a POC. It needs to be refactored.
-			title = sprintf(
-				/* translators: %d number of selected variations. */
-				__( 'Edit %d variations', 'woocommerce' ),
-				selectedProducts.length
-			);
-		}
-	}
-
-	const onChange = useCallback(
-		( changes: Partial< ProductEntityRecord > ) => {
-			const updatedParentProductsById = new Map<
-				number,
-				ProductEntityRecord
-			>();
-
-			selectedProducts.forEach( ( product ) => {
-				if ( ! product.parent_id ) {
-					return;
-				}
-
-				const parentProduct =
-					updatedParentProductsById.get( product.parent_id ) ??
-					( wpSelect( coreStore ).getEditedEntityRecord(
-						'root',
-						'product',
-						product.parent_id
-					) as ProductEntityRecord | false | undefined );
-
-				if ( ! parentProduct ) {
-					return;
-				}
-
-				updatedParentProductsById.set(
-					product.parent_id,
-					getProductWithUpdatedVariation( parentProduct, {
-						...product,
-						...changes,
-					} )
-				);
-			} );
-
-			updatedParentProductsById.forEach( ( parentProduct ) => {
-				editEntityRecord( 'root', 'product', parentProduct.id, {
-					_embedded: parentProduct._embedded,
-				} );
-			} );
-		},
-		[ editEntityRecord, selectedProducts ]
-	);
-
-	// Discard unsaved edits and close (Cancel / X button).
-	const closeDrawer = useCallback( () => {
-		const editedProductIds = new Set(
-			selectedProducts.map( ( product ) =>
-				isProductVariation( product ) && product.parent_id
-					? product.parent_id
-					: product.id
-			)
-		);
-
-		editedProductIds.forEach( ( editedProductId ) => {
-			clearEntityRecordEdits( 'root', 'product', editedProductId );
-		} );
-
-		onClose();
-	}, [ clearEntityRecordEdits, onClose, selectedProducts ] );
-
-	const onSave = useCallback( async () => {
-		if ( selectedProducts.length === 0 || isSaving ) {
-			return;
-		}
-
-		setIsSaving( true );
-
-		try {
-			const results = await saveSelectedProducts( {
-				selectedProducts,
-				editEntityRecord,
-				saveEditedEntityRecord,
-			} );
-
-			const successfulCount = results.filter(
-				( result ) => result.status === 'fulfilled'
-			).length;
-			const failedCount = results.length - successfulCount;
-			const message = getSaveNoticeMessage(
-				successfulCount,
-				failedCount
-			);
-
-			if ( failedCount > 0 ) {
-				createErrorNotice( message, {
-					type: 'snackbar',
-				} );
-				return;
-			}
-
-			if ( successfulCount > 0 ) {
-				createSuccessNotice( message, {
-					type: 'snackbar',
-				} );
-			}
-
-			// Invalidate the entity records cache so that VariationView
-			// re-fetches fresh data (including updated _embedded.variations)
-			// the next time the drawer is opened.
-			invalidateResolution( 'getEntityRecords', [
-				'root',
-				'product',
-				buildVariationViewQuery( productId ),
-			] );
-
-			// Navigate without clearing entity record edits. The edits set
-			// by saveVariation hold the fresh server-saved state. Clearing
-			// them here would revert to the stale base state before the
-			// re-fetch completes, making the next drawer open appear to show
-			// unsaved data (e.g. downloads missing).
-			onClose();
-		} finally {
-			setIsSaving( false );
-		}
-	}, [
-		createErrorNotice,
-		createSuccessNotice,
-		editEntityRecord,
-		invalidateResolution,
-		isSaving,
-		onClose,
-		productId,
-		saveEditedEntityRecord,
-		selectedProducts,
-	] );
-
-	return (
-		<Drawer.Root open={ isOpen } swipeDirection="right">
-			<Drawer.Popup
-				className="woocommerce-product-edit__drawer"
-				portal={
-					<Drawer.Portal className="woocommerce-product-edit__drawer-portal" />
-				}
-				style={ { width: 450 } }
-			>
-				<Drawer.Header className="woocommerce-product-edit__header">
-					<Drawer.Title className="woocommerce-product-edit__title">
-						{ title }
-					</Drawer.Title>
-					<Drawer.CloseIcon
-						onClick={ closeDrawer }
-						label={ __( 'Close', 'woocommerce' ) }
-					/>
-				</Drawer.Header>
-
-				<Drawer.Content className="woocommerce-product-edit">
-					{ hasNoRequestedProducts && (
-						<div className="woocommerce-product-edit__empty-state">
-							<p>
-								{ __(
-									'Select one or more variations to edit them here.',
-									'woocommerce'
-								) }
-							</p>
-						</div>
-					) }
-
-					{ ! hasNoRequestedProducts && isResolving && (
-						<div className="woocommerce-product-edit__loading">
-							<Spinner />
-						</div>
-					) }
-
-					{ ! hasNoRequestedProducts &&
-						! isResolving &&
-						hasMissingProducts && (
-							<div className="woocommerce-product-edit__empty-state">
-								<p>
-									{ __(
-										'Select one or more variations to edit them here.',
-										'woocommerce'
-									) }
-								</p>
-							</div>
-						) }
-
-					{ isReady && (
-						<VariationEditForm
-							editableFields={ editableFields }
-							onChange={ onChange }
-							selectedVariations={ selectedProducts }
-						/>
-					) }
-				</Drawer.Content>
-
-				{ isReady && (
-					<Drawer.Footer className="woocommerce-product-edit__footer">
-						<Button
-							variant="tertiary"
-							onClick={ closeDrawer }
-							disabled={ isSaving }
-						>
-							{ __( 'Cancel', 'woocommerce' ) }
-						</Button>
-						<Button
-							variant="primary"
-							onClick={ onSave }
-							isBusy={ isSaving }
-							disabled={ isSaving || ! hasEdits }
-						>
-							{ __( 'Save', 'woocommerce' ) }
-						</Button>
-					</Drawer.Footer>
-				) }
-			</Drawer.Popup>
-		</Drawer.Root>
-	);
-}
diff --git a/packages/js/experimental-products-app/src/variation-view/edit/form-fields.ts b/packages/js/experimental-products-app/src/variation-view/edit/form-fields.ts
deleted file mode 100644
index 653f078c296..00000000000
--- a/packages/js/experimental-products-app/src/variation-view/edit/form-fields.ts
+++ /dev/null
@@ -1,90 +0,0 @@
-/**
- * External dependencies
- */
-import type { FormField } from '@wordpress/dataviews';
-import { __ } from '@wordpress/i18n';
-
-/**
- * Internal dependencies
- */
-import type { VariationEditFieldId } from '../fields/registry';
-
-type VariationFormField = VariationEditFieldId | FormField;
-
-function createFormGroup(
-	id: string,
-	label: string,
-	children: VariationFormField[]
-): FormField {
-	return { id, label, children };
-}
-
-const SALE_SCHEDULE_DATES: FormField = {
-	id: 'sale-schedule-dates',
-	layout: { type: 'row' as const },
-	children: [ 'date_on_sale_from', 'date_on_sale_to' ],
-};
-
-const DIMENSIONS: FormField = {
-	id: 'dimensions',
-	layout: { type: 'row' as const },
-	children: [ 'length', 'width', 'height' ],
-};
-
-const BACKORDERS_ROW: FormField = {
-	id: 'backorders-row',
-	layout: { type: 'row' as const },
-	children: [ 'allow_backorders', 'low_stock_amount' ],
-};
-
-// Unlabeled groups render children in a nested wrapper without a section header,
-// allowing CSS to tighten the gap specifically for that inner wrapper.
-const GENERAL_CHECKBOXES: FormField = {
-	id: 'general-checkboxes',
-	children: [ 'downloadable', 'virtual' ],
-};
-
-const DOWNLOAD_OPTIONS: FormField = {
-	id: 'download-options',
-	children: [ 'download_limit', 'download_expiry' ],
-};
-
-export const VARIATION_FORM_FIELDS: VariationFormField[] = [
-	createFormGroup( 'general-fields', __( 'General', 'woocommerce' ), [
-		'variation_active',
-		GENERAL_CHECKBOXES,
-	] ),
-	createFormGroup( 'price-fields', __( 'Price', 'woocommerce' ), [
-		'regular_price',
-		'sale_price',
-		'schedule_sale',
-		SALE_SCHEDULE_DATES,
-		'cost_of_goods_sold',
-		'tax_class',
-	] ),
-	createFormGroup( 'details-fields', __( 'Details', 'woocommerce' ), [
-		'images',
-		'description',
-	] ),
-	createFormGroup(
-		'downloadable-files-fields',
-		__( 'Downloadable files', 'woocommerce' ),
-		[ 'downloadable_files', DOWNLOAD_OPTIONS ]
-	),
-	createFormGroup( 'inventory-fields', __( 'Inventory', 'woocommerce' ), [
-		'sku',
-		'global_unique_id',
-		'manage_stock',
-		'stock_quantity',
-		'stock',
-		BACKORDERS_ROW,
-	] ),
-	createFormGroup( 'shipping-fields', __( 'Shipping', 'woocommerce' ), [
-		'shipping_class',
-		DIMENSIONS,
-		'weight',
-	] ),
-	createFormGroup( 'attributes-fields', __( 'Attributes', 'woocommerce' ), [
-		'attributes',
-	] ),
-];
diff --git a/packages/js/experimental-products-app/src/variation-view/edit/form.tsx b/packages/js/experimental-products-app/src/variation-view/edit/form.tsx
deleted file mode 100644
index 70d16c052e8..00000000000
--- a/packages/js/experimental-products-app/src/variation-view/edit/form.tsx
+++ /dev/null
@@ -1,93 +0,0 @@
-/**
- * External dependencies
- */
-import { DataForm } from '@wordpress/dataviews';
-import type { FormField } from '@wordpress/dataviews';
-import { getSetting } from '@woocommerce/settings';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../fields/types';
-import {
-	buildMergedProductEditData,
-	getProductEditFields,
-} from '../../product-edit/utils';
-import { VARIATION_FORM_FIELDS } from './form-fields';
-import type { VariationEditFieldId } from '../fields/registry';
-
-type VariationFormField = VariationEditFieldId | FormField;
-
-type VariationEditFormProps = {
-	editableFields: ReturnType< typeof getProductEditFields >;
-	onChange: ( changes: Partial< ProductEntityRecord > ) => void;
-	selectedVariations: ProductEntityRecord[];
-};
-
-function pruneFormFields(
-	fields: VariationFormField[],
-	visibleIds: Set< string >
-): VariationFormField[] {
-	return fields.reduce< VariationFormField[] >( ( acc, field ) => {
-		if ( typeof field === 'string' ) {
-			if ( visibleIds.has( field ) ) {
-				acc.push( field );
-			}
-			return acc;
-		}
-		const prunedChildren = pruneFormFields(
-			( field.children ?? [] ) as VariationFormField[],
-			visibleIds
-		);
-		if ( prunedChildren.length > 0 ) {
-			acc.push( { ...field, children: prunedChildren } );
-		}
-		return acc;
-	}, [] );
-}
-
-export function VariationEditForm( {
-	editableFields,
-	onChange,
-	selectedVariations,
-}: VariationEditFormProps ) {
-	const mergedData = buildMergedProductEditData( selectedVariations );
-	const isBulkEdit = selectedVariations.length > 1;
-	const adminSettings = getSetting( 'admin', {} );
-	const isCostOfGoodsSoldFeatureEnabled =
-		// @ts-expect-error - This setting is not typed yet.
-		adminSettings?.wcAdminFeatures?.includes( 'cost-of-goods-sold' );
-	const visibleFields = editableFields.filter( ( field ) => {
-		if (
-			field.id === 'cost_of_goods_sold' &&
-			! isCostOfGoodsSoldFeatureEnabled
-		) {
-			return false;
-		}
-		if ( isBulkEdit && field.id === 'sku' ) {
-			return false;
-		}
-		if ( typeof field.isVisible !== 'function' ) {
-			return true;
-		}
-		return selectedVariations.every( ( v ) => field.isVisible!( v ) );
-	} );
-	const visibleFieldIds = new Set( visibleFields.map( ( f ) => f.id ) );
-
-	const form = {
-		type: 'regular' as const,
-		labelPosition: 'top' as const,
-		fields: pruneFormFields( VARIATION_FORM_FIELDS, visibleFieldIds ),
-	};
-
-	return (
-		<div className="woocommerce-product-edit__form">
-			<DataForm
-				data={ mergedData }
-				fields={ visibleFields }
-				form={ form }
-				onChange={ onChange }
-			/>
-		</div>
-	);
-}
diff --git a/packages/js/experimental-products-app/src/variation-view/fields.tsx b/packages/js/experimental-products-app/src/variation-view/fields.tsx
deleted file mode 100644
index bf76fd56cea..00000000000
--- a/packages/js/experimental-products-app/src/variation-view/fields.tsx
+++ /dev/null
@@ -1,58 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-import { Badge } from '@wordpress/ui';
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import { createProductField, type ProductFieldId } from '../fields/registry';
-import type { VariationEntityRecord } from './types';
-
-const REUSED_VARIATION_FIELD_IDS = [
-	'name',
-	'sku',
-	'price',
-	'regular_price',
-	'sale_price',
-	'stock',
-	'stock_quantity',
-	'manage_stock',
-	'variation_active',
-	'images',
-	'downloadable',
-	'weight',
-	'length',
-	'width',
-	'height',
-	'shipping_class',
-	'tax_status',
-] as const satisfies readonly ProductFieldId[];
-
-export const variationFields = REUSED_VARIATION_FIELD_IDS.map( ( id ) => {
-	const field = createProductField( id ) as Field< VariationEntityRecord >;
-
-	if ( id === 'name' ) {
-		return {
-			...field,
-			render( { item }: { item: VariationEntityRecord } ) {
-				return (
-					<span className="woocommerce-variation-name">
-						<span className="woocommerce-variation-name__label">
-							{ item.name }
-						</span>
-						{ item.status === 'private' && (
-							<Badge intent="none">
-								{ __( 'Inactive', 'woocommerce' ) }
-							</Badge>
-						) }
-					</span>
-				);
-			},
-		};
-	}
-
-	return field;
-} );
diff --git a/packages/js/experimental-products-app/src/variation-view/fields/allow_backorders/field.tsx b/packages/js/experimental-products-app/src/variation-view/fields/allow_backorders/field.tsx
deleted file mode 100644
index 3c3f493ffa8..00000000000
--- a/packages/js/experimental-products-app/src/variation-view/fields/allow_backorders/field.tsx
+++ /dev/null
@@ -1,47 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-import { SelectControl } from '@wordpress/ui';
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	type: 'text',
-	label: __( 'Allow backorders', 'woocommerce' ),
-	enableSorting: false,
-	filterBy: false,
-	isVisible: ( item ) => !! item.manage_stock,
-	getValue: ( { item } ) => item.backorders ?? 'no',
-	Edit: ( { data, onChange, field } ) => {
-		const options = [
-			{ value: 'no', label: __( 'Do not allow', 'woocommerce' ) },
-			{
-				value: 'notify',
-				label: __( 'Allow but notify customer', 'woocommerce' ),
-			},
-			{ value: 'yes', label: __( 'Allow', 'woocommerce' ) },
-		];
-		const selected = options.find(
-			( o ) => o.value === ( data.backorders ?? 'no' )
-		);
-		return (
-			<SelectControl
-				label={ field.label }
-				value={ selected }
-				items={ options }
-				onValueChange={ ( option ) => {
-					if ( option ) {
-						onChange( {
-							backorders: option.value as 'no' | 'notify' | 'yes',
-						} );
-					}
-				} }
-			/>
-		);
-	},
-};
diff --git a/packages/js/experimental-products-app/src/variation-view/fields/attributes/field.tsx b/packages/js/experimental-products-app/src/variation-view/fields/attributes/field.tsx
deleted file mode 100644
index 885c0075c03..00000000000
--- a/packages/js/experimental-products-app/src/variation-view/fields/attributes/field.tsx
+++ /dev/null
@@ -1,137 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-import { SelectControl } from '@wordpress/components';
-import { store as coreStore } from '@wordpress/core-data';
-import { useSelect } from '@wordpress/data';
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-
-type VariationAttribute = { id: number; name: string; option: string };
-type ParentAttribute = {
-	id: number;
-	name: string;
-	options: string[];
-	variation?: boolean;
-};
-
-// Match by ID for taxonomy attributes (id > 0), by name for local attributes (id === 0).
-function findVariationAttr(
-	variationAttrs: VariationAttribute[],
-	parentAttr: ParentAttribute
-): VariationAttribute | undefined {
-	if ( parentAttr.id !== 0 ) {
-		return variationAttrs.find( ( va ) => va.id === parentAttr.id );
-	}
-	return variationAttrs.find(
-		( va ) => va.name.toLowerCase() === parentAttr.name.toLowerCase()
-	);
-}
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	label: __( 'Attributes', 'woocommerce' ),
-	enableSorting: false,
-	filterBy: false,
-	isVisible: ( item ) => !! item.parent_id,
-	getValue: ( { item } ) => item.attributes,
-	Edit: ( { data, onChange } ) => {
-		const parentProduct = useSelect(
-			( select ) => {
-				if ( ! data.parent_id ) {
-					return null;
-				}
-				return select( coreStore ).getEditedEntityRecord(
-					'root',
-					'product',
-					data.parent_id
-				) as ProductEntityRecord | false | undefined;
-			},
-			[ data.parent_id ]
-		);
-
-		const allParentAttributes = parentProduct
-			? ( ( parentProduct.attributes ??
-					[] ) as unknown as ParentAttribute[] )
-			: [];
-
-		// Only show attributes marked as variation attributes.
-		const parentAttributes = allParentAttributes.filter(
-			( attr ) => attr.variation !== false
-		);
-
-		const variationAttributes = ( data.attributes ??
-			[] ) as unknown as VariationAttribute[];
-
-		if ( parentAttributes.length === 0 ) {
-			return null;
-		}
-
-		const handleChange = (
-			attrId: number,
-			attrName: string,
-			newOption: string
-		) => {
-			const updated = variationAttributes.map( ( attr ) => {
-				const matches =
-					attrId !== 0
-						? attr.id === attrId
-						: attr.name.toLowerCase() === attrName.toLowerCase();
-				return matches ? { ...attr, option: newOption } : attr;
-			} );
-			onChange( {
-				attributes:
-					updated as unknown as ProductEntityRecord[ 'attributes' ],
-			} );
-		};
-
-		const isOdd = parentAttributes.length % 2 !== 0;
-
-		return (
-			<div
-				style={ {
-					display: 'grid',
-					gridTemplateColumns: '1fr 1fr',
-					gap: '16px',
-				} }
-			>
-				{ parentAttributes.map( ( attr, index ) => {
-					const selected = findVariationAttr(
-						variationAttributes,
-						attr
-					);
-					const isLastOdd =
-						isOdd && index === parentAttributes.length - 1;
-					const options = attr.options.map( ( opt ) => ( {
-						label: opt,
-						value: opt,
-					} ) );
-
-					return (
-						<div
-							key={ `${ attr.id }-${ attr.name }` }
-							style={
-								isLastOdd ? { gridColumn: '1 / -1' } : undefined
-							}
-						>
-							<SelectControl
-								__nextHasNoMarginBottom
-								__next40pxDefaultSize
-								label={ attr.name }
-								value={ selected?.option ?? '' }
-								options={ options }
-								onChange={ ( value ) =>
-									handleChange( attr.id, attr.name, value )
-								}
-							/>
-						</div>
-					);
-				} ) }
-			</div>
-		);
-	},
-};
diff --git a/packages/js/experimental-products-app/src/variation-view/fields/components/currency-input.tsx b/packages/js/experimental-products-app/src/variation-view/fields/components/currency-input.tsx
deleted file mode 100644
index 51be9972f3f..00000000000
--- a/packages/js/experimental-products-app/src/variation-view/fields/components/currency-input.tsx
+++ /dev/null
@@ -1,119 +0,0 @@
-/* eslint-disable @wordpress/no-unsafe-wp-apis -- Currency inputs use wrappers for the private ValidatedInputControl API. */
-/**
- * External dependencies
- */
-import {
-	privateApis,
-	__experimentalInputControlPrefixWrapper as InputControlPrefixWrapper,
-	__experimentalInputControlSuffixWrapper as InputControlSuffixWrapper,
-} from '@wordpress/components';
-
-import type { DataFormControlProps } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import { unlock } from '../../../lock-unlock';
-
-import type { ProductEntityRecord } from '../types';
-
-import { getCurrencyObject } from '../utils/currency';
-
-const { ValidatedInputControl } = unlock( privateApis );
-
-const { symbol, symbolPosition, precision } = getCurrencyObject();
-const isCurrencyLeft =
-	symbolPosition === 'left' || symbolPosition === 'left_space';
-// Step matches store decimal precision (e.g. precision=2 → step=0.01).
-const step = Math.pow( 10, -precision );
-
-type CurrencyField = 'regular_price' | 'sale_price';
-
-type CurrencyControlProps = {
-	id: string;
-	label: string;
-	value: string | number;
-	onChange: ( newValue: string ) => void;
-	customValidity?: NonNullable<
-		DataFormControlProps< ProductEntityRecord >[ 'validity' ]
-	>[ 'custom' ];
-	hideLabelFromVision?: boolean;
-	placeholder?: string;
-	disabled?: boolean;
-};
-
-export function CurrencyControl( {
-	id,
-	label,
-	value,
-	onChange,
-	customValidity,
-	hideLabelFromVision,
-	placeholder,
-	disabled,
-}: CurrencyControlProps ) {
-	return (
-		// eslint-disable-next-line @typescript-eslint/no-unsafe-call -- ValidatedInputControl is a private API
-		<ValidatedInputControl
-			id={ id }
-			label={ label }
-			hideLabelFromVision={ hideLabelFromVision }
-			value={ value }
-			placeholder={ placeholder }
-			disabled={ disabled }
-			onChange={ onChange }
-			type="number"
-			min={ 0 }
-			step={ step }
-			customValidity={ customValidity }
-			prefix={
-				isCurrencyLeft ? (
-					<InputControlPrefixWrapper>
-						{ symbol }
-					</InputControlPrefixWrapper>
-				) : undefined
-			}
-			suffix={
-				! isCurrencyLeft ? (
-					<InputControlSuffixWrapper>
-						{ symbol }
-					</InputControlSuffixWrapper>
-				) : undefined
-			}
-		/>
-	);
-}
-
-/**
- * Shared Edit component for currency fields.
- * Renders a number input with min=0 and currency prefix/suffix.
- *
- * @param root0          Props from DataForm.
- * @param root0.data     Current product entity record.
- * @param root0.field    Normalized field definition.
- * @param root0.onChange Callback to update entity values.
- * @param root0.validity Per-rule validation state from useFormValidity.
- */
-export function CurrencyInput( {
-	data,
-	field,
-	onChange,
-	validity,
-}: DataFormControlProps< ProductEntityRecord > ) {
-	if ( field.id !== 'regular_price' && field.id !== 'sale_price' ) {
-		return null;
-	}
-	const fieldId: CurrencyField = field.id;
-
-	return (
-		<CurrencyControl
-			id={ `currency-input-${ fieldId }` }
-			label={ field.label }
-			value={ data[ fieldId ] ?? '' }
-			onChange={ ( newValue: string ) => {
-				onChange( { [ fieldId ]: newValue } );
-			} }
-			customValidity={ validity?.custom }
-		/>
-	);
-}
diff --git a/packages/js/experimental-products-app/src/variation-view/fields/components/date-picker.tsx b/packages/js/experimental-products-app/src/variation-view/fields/components/date-picker.tsx
deleted file mode 100644
index ef2a5896217..00000000000
--- a/packages/js/experimental-products-app/src/variation-view/fields/components/date-picker.tsx
+++ /dev/null
@@ -1,67 +0,0 @@
-/**
- * External dependencies
- */
-import { InputControl } from '@wordpress/ui';
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-
-type DateFieldKey = 'date_on_sale_from' | 'date_on_sale_to';
-
-type DatePickerProps = {
-	data: ProductEntityRecord;
-	onChange: ( value: Partial< ProductEntityRecord > ) => void;
-	field: {
-		id?: string;
-		label?: string;
-	};
-	fieldKey: DateFieldKey;
-	min?: Date;
-};
-
-export function parseDateTimeLocal( value: string ) {
-	if ( ! value ) {
-		return null;
-	}
-
-	const parsedDate = new Date( value );
-
-	if ( Number.isNaN( parsedDate.getTime() ) ) {
-		return null;
-	}
-
-	return parsedDate;
-}
-
-export function formatDateTimeLocal( date: Date ) {
-	const year = date.getFullYear();
-	const month = String( date.getMonth() + 1 ).padStart( 2, '0' );
-	const day = String( date.getDate() ).padStart( 2, '0' );
-	const hours = String( date.getHours() ).padStart( 2, '0' );
-	const minutes = String( date.getMinutes() ).padStart( 2, '0' );
-
-	return `${ year }-${ month }-${ day }T${ hours }:${ minutes }`;
-}
-
-export function DatePicker( {
-	data,
-	onChange,
-	field,
-	fieldKey,
-	min,
-}: DatePickerProps ) {
-	return (
-		<InputControl
-			label={ field.label ?? '' }
-			type="datetime-local"
-			value={ data[ fieldKey ] || '' }
-			min={ min ? formatDateTimeLocal( min ) : undefined }
-			onChange={ ( event ) =>
-				onChange( {
-					[ fieldKey ]: event.target.value || null,
-				} as Partial< ProductEntityRecord > )
-			}
-		/>
-	);
-}
diff --git a/packages/js/experimental-products-app/src/variation-view/fields/components/dimension.tsx b/packages/js/experimental-products-app/src/variation-view/fields/components/dimension.tsx
deleted file mode 100644
index 23982bbe7a6..00000000000
--- a/packages/js/experimental-products-app/src/variation-view/fields/components/dimension.tsx
+++ /dev/null
@@ -1,195 +0,0 @@
-/**
- * External dependencies
- */
-import { useEntityRecord, store as coreStore } from '@wordpress/core-data';
-import { useSelect } from '@wordpress/data';
-import type { Field } from '@wordpress/dataviews';
-import { InputControl, InputLayout } from '@wordpress/ui';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord, SettingsEntityRecord } from '../types';
-
-export type DimensionKey = 'height' | 'width' | 'length';
-
-export function isDimensionVisible( item: ProductEntityRecord ) {
-	const isSellableInstance =
-		( item.type === 'simple' && ! item.parent_id ) ||
-		( item.type === 'variable' && ! item.parent_id ) ||
-		item.type === 'variation' ||
-		Boolean( item.parent_id );
-
-	return ! item.virtual && ( isSellableInstance || item.downloadable );
-}
-
-export const createVariationDimensionField = (
-	key: DimensionKey
-): Partial< Field< ProductEntityRecord > > => {
-	return {
-		Edit: ( { data, onChange, field } ) => {
-			const {
-				record: storeProductsSettings,
-				isResolving: storeProductsSettingsResolving,
-			} = useEntityRecord< SettingsEntityRecord >(
-				'root',
-				'settings',
-				'products'
-			);
-
-			const parentProduct = useSelect(
-				( select ) => {
-					if ( ! data.parent_id ) {
-						return undefined;
-					}
-					return select( coreStore ).getEditedEntityRecord(
-						'root',
-						'product',
-						data.parent_id
-					) as unknown as ProductEntityRecord | undefined;
-				},
-				[ data.parent_id ]
-			);
-
-			if ( storeProductsSettingsResolving ) {
-				return null;
-			}
-
-			const dimensionUnit =
-				storeProductsSettings?.values?.woocommerce_dimension_unit;
-			const parentValue = parentProduct?.dimensions?.[ key ];
-			const placeholder = parentValue ? String( parentValue ) : undefined;
-
-			return (
-				<InputControl
-					label={ field.label }
-					value={ data.dimensions?.[ key ] ?? '' }
-					placeholder={ placeholder }
-					onChange={ ( event ) => {
-						onChange( {
-							dimensions: {
-								...( data.dimensions ?? {} ),
-								[ key ]: event.target.value,
-							},
-						} );
-					} }
-					type="number"
-					min={ 0 }
-					step="any"
-					suffix={
-						<InputLayout.Slot padding="minimal">
-							{ dimensionUnit }
-						</InputLayout.Slot>
-					}
-				/>
-			);
-		},
-	};
-};
-
-export const createVariationWeightField = (): Partial<
-	Field< ProductEntityRecord >
-> => {
-	return {
-		Edit: ( { data, onChange, field } ) => {
-			const {
-				record: storeProductsSettings,
-				isResolving: storeProductsSettingsResolving,
-			} = useEntityRecord< SettingsEntityRecord >(
-				'root',
-				'settings',
-				'products'
-			);
-
-			const parentProduct = useSelect(
-				( select ) => {
-					if ( ! data.parent_id ) {
-						return undefined;
-					}
-					return select( coreStore ).getEditedEntityRecord(
-						'root',
-						'product',
-						data.parent_id
-					) as unknown as ProductEntityRecord | undefined;
-				},
-				[ data.parent_id ]
-			);
-
-			if ( storeProductsSettingsResolving ) {
-				return null;
-			}
-
-			const weightUnit =
-				storeProductsSettings?.values?.woocommerce_weight_unit;
-			const parentValue = parentProduct?.weight;
-			const placeholder = parentValue ? String( parentValue ) : undefined;
-
-			return (
-				<InputControl
-					label={ field.label }
-					value={ data.weight }
-					placeholder={ placeholder }
-					onChange={ ( event ) =>
-						onChange( { weight: event.target.value } )
-					}
-					type="number"
-					min={ 0 }
-					step="any"
-					suffix={
-						<InputLayout.Slot padding="minimal">
-							{ weightUnit }
-						</InputLayout.Slot>
-					}
-				/>
-			);
-		},
-	};
-};
-
-export const createDimensionField = (
-	key: DimensionKey
-): Partial< Field< ProductEntityRecord > > => {
-	return {
-		isVisible: isDimensionVisible,
-		Edit: ( { data, onChange, field } ) => {
-			const {
-				record: storeProductsSettings,
-				isResolving: storeProductsSettingsResolving,
-			} = useEntityRecord< SettingsEntityRecord >(
-				'root',
-				'settings',
-				'products'
-			);
-
-			if ( storeProductsSettingsResolving ) {
-				return null;
-			}
-
-			const dimensionUnit =
-				storeProductsSettings?.values?.woocommerce_dimension_unit;
-
-			return (
-				<InputControl
-					label={ field.label }
-					value={ data.dimensions?.[ key ] ?? '' }
-					onChange={ ( event ) => {
-						onChange( {
-							dimensions: {
-								...( data.dimensions ?? {} ),
-								[ key ]: event.target.value,
-							},
-						} );
-					} }
-					type="number"
-					min={ 0 }
-					step="any"
-					suffix={
-						<InputLayout.Slot padding="minimal">
-							{ dimensionUnit }
-						</InputLayout.Slot>
-					}
-				/>
-			);
-		},
-	};
-};
diff --git a/packages/js/experimental-products-app/src/variation-view/fields/components/list-item/index.tsx b/packages/js/experimental-products-app/src/variation-view/fields/components/list-item/index.tsx
deleted file mode 100644
index a21ce73ec11..00000000000
--- a/packages/js/experimental-products-app/src/variation-view/fields/components/list-item/index.tsx
+++ /dev/null
@@ -1,80 +0,0 @@
-/**
- * External dependencies
- */
-import { Button } from '@wordpress/components';
-import { close } from '@wordpress/icons';
-import { __ } from '@wordpress/i18n';
-import { isValidElement } from '@wordpress/element';
-import { Stack } from '@wordpress/ui';
-
-type Item = {
-	id: number | string;
-	title: string;
-	thumbnail?: string | JSX.Element;
-	meta?: string;
-	altText?: string;
-};
-
-interface ListItemProps {
-	items: Item[];
-	onRemove?: ( item: Item ) => void;
-	showRemoveButton?: boolean;
-}
-
-export const ListItem = ( {
-	items,
-	onRemove,
-	showRemoveButton = true,
-}: ListItemProps ) => {
-	return (
-		<Stack direction="column">
-			{ items.map( ( item ) => (
-				<Stack
-					key={ item.id }
-					direction="row"
-					align="center"
-					justify="space-between"
-					className="woocommerce-list-item"
-					gap={ 'md' }
-				>
-					{ item.thumbnail && (
-						<div className="woocommerce-list-item__thumbnail">
-							{ typeof item.thumbnail === 'string' && (
-								<img
-									src={ item.thumbnail }
-									alt={ item.altText ?? '' }
-									className="woocommerce-list-item__thumbnail-image"
-								/>
-							) }
-							{ isValidElement( item.thumbnail ) &&
-								item.thumbnail }
-						</div>
-					) }
-					<Stack
-						className="woocommerce-list-item__info"
-						direction="column"
-					>
-						<div className="woocommerce-list-item__title">
-							{ item.title }
-						</div>
-						{ item.meta && (
-							<div className="woocommerce-list-item__meta">
-								{ item.meta }
-							</div>
-						) }
-					</Stack>
-					{ showRemoveButton && onRemove && (
-						<Button
-							icon={ close }
-							variant="tertiary"
-							iconSize={ 16 }
-							onClick={ () => onRemove( item ) }
-							aria-label={ __( 'Remove item', 'woocommerce' ) }
-							className="woocommerce-list-item__remove-button"
-						/>
-					) }
-				</Stack>
-			) ) }
-		</Stack>
-	);
-};
diff --git a/packages/js/experimental-products-app/src/variation-view/fields/components/list-item/style.scss b/packages/js/experimental-products-app/src/variation-view/fields/components/list-item/style.scss
deleted file mode 100644
index 888194ea7fc..00000000000
--- a/packages/js/experimental-products-app/src/variation-view/fields/components/list-item/style.scss
+++ /dev/null
@@ -1,46 +0,0 @@
-.woocommerce-list-item {
-	padding: 12px 0;
-	border-bottom: 1px solid #e0e0e0;
-	width: 100%;
-
-	&:last-of-type {
-		border-bottom: none;
-	}
-
-	&__thumbnail {
-		width: 48px;
-		height: 48px;
-		border-radius: 4px;
-		flex-shrink: 0;
-
-		&-image {
-			width: 100%;
-			height: 100%;
-			object-fit: cover;
-			border-radius: 4px;
-		}
-	}
-
-	&__info {
-		flex: 1;
-		min-width: 0;
-	}
-
-	&__title {
-		font-size: 14px;
-		font-weight: 500;
-		color: #1e1e1e;
-	}
-
-	&__meta {
-		font-size: 12px;
-		color: #757575;
-		font-weight: 500;
-	}
-
-	&__remove-button {
-		color: #757575;
-		padding: 8px;
-		min-width: auto;
-	}
-}
diff --git a/packages/js/experimental-products-app/src/variation-view/fields/components/product-status-badge.tsx b/packages/js/experimental-products-app/src/variation-view/fields/components/product-status-badge.tsx
deleted file mode 100644
index 4eae8aed9c4..00000000000
--- a/packages/js/experimental-products-app/src/variation-view/fields/components/product-status-badge.tsx
+++ /dev/null
@@ -1,60 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-import { Badge } from '@wordpress/ui';
-import type { ProductStatus } from '@woocommerce/data';
-
-type BadgeStatusConfig = {
-	label: string;
-	intent?: React.ComponentProps< typeof Badge >[ 'intent' ];
-};
-
-const statuses = {
-	draft: {
-		label: __( 'Draft', 'woocommerce' ),
-		intent: 'draft',
-	},
-	publish: {
-		label: __( 'Published', 'woocommerce' ),
-		intent: 'stable',
-	},
-	trash: {
-		label: __( 'Trash', 'woocommerce' ),
-		intent: 'none',
-	},
-	'auto-draft': {
-		label: __( 'Draft', 'woocommerce' ),
-		intent: 'draft',
-	},
-	deleted: {
-		label: __( 'Deleted', 'woocommerce' ),
-		intent: 'none',
-	},
-	pending: {
-		label: __( 'Pending review', 'woocommerce' ),
-		intent: 'informational',
-	},
-	private: {
-		label: __( 'Private', 'woocommerce' ),
-		intent: 'none',
-	},
-	future: {
-		label: __( 'Scheduled', 'woocommerce' ),
-		intent: 'none',
-	},
-	any: {
-		label: __( 'Any', 'woocommerce' ),
-		intent: 'none',
-	},
-} satisfies Record< ProductStatus, BadgeStatusConfig >;
-
-export const ProductStatusBadge = ( { status }: { status: ProductStatus } ) => {
-	const statusData = statuses[ status ];
-
-	if ( ! statusData ) {
-		return <Badge intent="none">{ __( 'Unknown', 'woocommerce' ) }</Badge>;
-	}
-
-	return <Badge intent={ statusData.intent }>{ statusData.label }</Badge>;
-};
diff --git a/packages/js/experimental-products-app/src/variation-view/fields/cost_of_goods_sold/field.tsx b/packages/js/experimental-products-app/src/variation-view/fields/cost_of_goods_sold/field.tsx
deleted file mode 100644
index d698f2daf1d..00000000000
--- a/packages/js/experimental-products-app/src/variation-view/fields/cost_of_goods_sold/field.tsx
+++ /dev/null
@@ -1,92 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-import type { DataFormControlProps, Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-import { validatePrice, toNumberOrNaN } from '../utils/price';
-import { formatCurrency, getCurrencyObject } from '../utils/currency';
-import { CurrencyControl } from '../components/currency-input';
-
-const fieldDefinition = {
-	type: 'text',
-	label: __( 'Cost of goods', 'woocommerce' ),
-	enableSorting: false,
-	enableHiding: false,
-	filterBy: false,
-	isVisible: ( item: ProductEntityRecord ) =>
-		item.cost_of_goods_sold !== undefined,
-} satisfies Partial< Field< ProductEntityRecord > >;
-
-function getDefinedCostValue( item: ProductEntityRecord ) {
-	return item.cost_of_goods_sold?.values?.[ 0 ]?.defined_value;
-}
-
-function CostOfGoodsSoldInput( {
-	data,
-	field,
-	hideLabelFromVision,
-	onChange,
-	validity,
-}: DataFormControlProps< ProductEntityRecord > ) {
-	const costOfGoodsSold = data.cost_of_goods_sold ?? {};
-	const disabled = field.isDisabled( { item: data, field } );
-	const [ firstValue = {}, ...remainingValues ] =
-		costOfGoodsSold.values ?? [];
-
-	return (
-		<CurrencyControl
-			id={ `currency-input-${ field.id }` }
-			label={ field.label }
-			hideLabelFromVision={ hideLabelFromVision }
-			value={ getDefinedCostValue( data ) ?? '' }
-			placeholder={ field.placeholder }
-			onChange={ ( newValue: string ) => {
-				onChange( {
-					cost_of_goods_sold: {
-						...costOfGoodsSold,
-						values:
-							newValue === ''
-								? []
-								: [
-										{
-											...firstValue,
-											defined_value: newValue,
-										},
-										...remainingValues,
-								  ],
-					},
-				} );
-			} }
-			customValidity={ validity?.custom }
-			disabled={ disabled }
-		/>
-	);
-}
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	...fieldDefinition,
-	getValue: ( { item } ) => getDefinedCostValue( item ),
-	getValueFormatted: ( { item } ) => {
-		const value = getDefinedCostValue( item );
-		const numberValue = toNumberOrNaN( value );
-
-		if (
-			value === undefined ||
-			value === null ||
-			Number.isNaN( numberValue )
-		) {
-			return '—';
-		}
-
-		return formatCurrency( numberValue, getCurrencyObject().code );
-	},
-	isValid: {
-		custom: ( item ) => validatePrice( getDefinedCostValue( item ) ),
-	},
-	Edit: CostOfGoodsSoldInput,
-};
diff --git a/packages/js/experimental-products-app/src/variation-view/fields/date_on_sale_from/field.tsx b/packages/js/experimental-products-app/src/variation-view/fields/date_on_sale_from/field.tsx
deleted file mode 100644
index 342f1eaace4..00000000000
--- a/packages/js/experimental-products-app/src/variation-view/fields/date_on_sale_from/field.tsx
+++ /dev/null
@@ -1,86 +0,0 @@
-/**
- * External dependencies
- */
-import { useCallback, useMemo } from '@wordpress/element';
-import { __ } from '@wordpress/i18n';
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-import {
-	DatePicker,
-	parseDateTimeLocal,
-	formatDateTimeLocal,
-} from '../components/date-picker';
-
-const fieldDefinition = {
-	type: 'datetime',
-	label: __( 'Start sale on', 'woocommerce' ),
-	enableSorting: false,
-	enableHiding: false,
-	filterBy: false,
-} satisfies Partial< Field< ProductEntityRecord > >;
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	...fieldDefinition,
-	isVisible: ( product ) => {
-		return !! product.date_on_sale_to || !! product.date_on_sale_from;
-	},
-	Edit: ( { data, onChange, field } ) => {
-		const today = useMemo( () => {
-			const d = new Date();
-			d.setHours( 0, 0, 0, 0 );
-			return d;
-		}, [] );
-
-		const handleChange = useCallback(
-			( value: { date_on_sale_from?: string | null } ) => {
-				const newStart = value.date_on_sale_from;
-				const currentEnd = data.date_on_sale_to;
-
-				if (
-					typeof newStart !== 'string' ||
-					! newStart ||
-					typeof currentEnd !== 'string' ||
-					! currentEnd
-				) {
-					onChange( value );
-					return;
-				}
-
-				const startDate = parseDateTimeLocal( newStart );
-				const endDate = parseDateTimeLocal( currentEnd );
-
-				if (
-					startDate &&
-					endDate &&
-					startDate.getTime() >= endDate.getTime()
-				) {
-					const newEndDate = new Date( startDate );
-					newEndDate.setDate( newEndDate.getDate() + 1 );
-
-					onChange( {
-						...value,
-						date_on_sale_to: formatDateTimeLocal( newEndDate ),
-					} );
-					return;
-				}
-
-				onChange( value );
-			},
-			[ data.date_on_sale_to, onChange ]
-		);
-
-		return (
-			<DatePicker
-				data={ data }
-				onChange={ handleChange }
-				field={ field }
-				fieldKey="date_on_sale_from"
-				min={ today }
-			/>
-		);
-	},
-};
diff --git a/packages/js/experimental-products-app/src/variation-view/fields/date_on_sale_to/field.tsx b/packages/js/experimental-products-app/src/variation-view/fields/date_on_sale_to/field.tsx
deleted file mode 100644
index 2780ace531a..00000000000
--- a/packages/js/experimental-products-app/src/variation-view/fields/date_on_sale_to/field.tsx
+++ /dev/null
@@ -1,58 +0,0 @@
-/**
- * External dependencies
- */
-import { useMemo } from '@wordpress/element';
-import { __ } from '@wordpress/i18n';
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-import { DatePicker, parseDateTimeLocal } from '../components/date-picker';
-
-const fieldDefinition = {
-	type: 'datetime',
-	label: __( 'End sale on', 'woocommerce' ),
-	enableSorting: false,
-	enableHiding: false,
-	filterBy: false,
-} satisfies Partial< Field< ProductEntityRecord > >;
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	...fieldDefinition,
-	isVisible: ( product ) => {
-		return !! product.date_on_sale_to || !! product.date_on_sale_from;
-	},
-	Edit: ( { data, onChange, field } ) => {
-		const dateOnSaleFrom = useMemo(
-			() =>
-				typeof data?.date_on_sale_from === 'string' &&
-				data.date_on_sale_from
-					? parseDateTimeLocal( data.date_on_sale_from )
-					: null,
-			[ data?.date_on_sale_from ]
-		);
-
-		const minDate = useMemo( () => {
-			if ( dateOnSaleFrom ) {
-				const min = new Date( dateOnSaleFrom );
-				min.setMinutes( min.getMinutes() + 1 );
-				return min;
-			}
-			const today = new Date();
-			today.setHours( 0, 0, 0, 0 );
-			return today;
-		}, [ dateOnSaleFrom ] );
-
-		return (
-			<DatePicker
-				data={ data }
-				onChange={ onChange }
-				field={ field }
-				fieldKey="date_on_sale_to"
-				min={ minDate }
-			/>
-		);
-	},
-};
diff --git a/packages/js/experimental-products-app/src/variation-view/fields/description/field.tsx b/packages/js/experimental-products-app/src/variation-view/fields/description/field.tsx
deleted file mode 100644
index 823c647f552..00000000000
--- a/packages/js/experimental-products-app/src/variation-view/fields/description/field.tsx
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-import { TextareaControl } from '@wordpress/components';
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-import { convertHtmlToPlainText } from '../../../utilites';
-
-const fieldDefinition = {
-	type: 'text',
-	label: __( 'Description', 'woocommerce' ),
-	description: __(
-		'Share the full story—include product details, features, and benefits to help customers decide.',
-		'woocommerce'
-	),
-	enableSorting: false,
-	enableHiding: false,
-	filterBy: false,
-} satisfies Partial< Field< ProductEntityRecord > >;
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	...fieldDefinition,
-	getValue: ( { item } ) => convertHtmlToPlainText( item.description ),
-	Edit: ( { data, onChange, field } ) => {
-		return (
-			<TextareaControl
-				label={ field.label }
-				rows={ 4 }
-				value={ convertHtmlToPlainText( data.description || '' ) }
-				onChange={ ( value ) => onChange( { description: value } ) }
-			/>
-		);
-	},
-};
diff --git a/packages/js/experimental-products-app/src/variation-view/fields/download_expiry/field.tsx b/packages/js/experimental-products-app/src/variation-view/fields/download_expiry/field.tsx
deleted file mode 100644
index 83606978633..00000000000
--- a/packages/js/experimental-products-app/src/variation-view/fields/download_expiry/field.tsx
+++ /dev/null
@@ -1,67 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-import { CheckboxControl } from '@wordpress/components';
-import { InputControl, InputLayout } from '@wordpress/ui';
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	type: 'integer',
-	label: __( 'Download expiry', 'woocommerce' ),
-	enableSorting: false,
-	filterBy: false,
-	isVisible: ( item ) => !! item.downloadable,
-	getValue: ( { item } ) => item.download_expiry ?? -1,
-	Edit: ( { data, onChange, field } ) => {
-		const hasExpiry = ( data.download_expiry ?? -1 ) !== -1;
-		return (
-			<div
-				className="woocommerce-fields-field__download-expiry"
-				style={ {
-					display: 'flex',
-					flexDirection: 'column',
-					gap: '12px',
-				} }
-			>
-				<CheckboxControl
-					__nextHasNoMarginBottom
-					label={ __( 'Expire download link', 'woocommerce' ) }
-					checked={ hasExpiry }
-					onChange={ ( checked ) => {
-						onChange( {
-							download_expiry: checked ? 1 : -1,
-						} );
-					} }
-				/>
-				{ hasExpiry && (
-					<InputControl
-						label={ field.label }
-						type="number"
-						min={ 1 }
-						value={ String( data.download_expiry ) }
-						onChange={ ( event ) => {
-							const parsed = parseInt( event.target.value, 10 );
-							onChange( {
-								download_expiry:
-									Number.isNaN( parsed ) || parsed < 1
-										? 1
-										: parsed,
-							} );
-						} }
-						suffix={
-							<InputLayout.Slot padding="minimal">
-								{ __( 'days', 'woocommerce' ) }
-							</InputLayout.Slot>
-						}
-					/>
-				) }
-			</div>
-		);
-	},
-};
diff --git a/packages/js/experimental-products-app/src/variation-view/fields/download_limit/field.tsx b/packages/js/experimental-products-app/src/variation-view/fields/download_limit/field.tsx
deleted file mode 100644
index 55ed074a82b..00000000000
--- a/packages/js/experimental-products-app/src/variation-view/fields/download_limit/field.tsx
+++ /dev/null
@@ -1,66 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-import { CheckboxControl, TextControl } from '@wordpress/components';
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	type: 'integer',
-	label: __( 'Download limit', 'woocommerce' ),
-	enableSorting: false,
-	filterBy: false,
-	isVisible: ( item ) => !! item.downloadable,
-	getValue: ( { item } ) => item.download_limit ?? -1,
-	Edit: ( { data, onChange, field } ) => {
-		const isLimited = ( data.download_limit ?? -1 ) !== -1;
-		return (
-			<div
-				className="woocommerce-fields-field__download-limit"
-				style={ {
-					display: 'flex',
-					flexDirection: 'column',
-					gap: '12px',
-					marginBottom: isLimited ? '8px' : 0,
-				} }
-			>
-				<CheckboxControl
-					__nextHasNoMarginBottom
-					label={ __(
-						'Limit downloads per customer',
-						'woocommerce'
-					) }
-					checked={ isLimited }
-					onChange={ ( checked ) => {
-						onChange( {
-							download_limit: checked ? 1 : -1,
-						} );
-					} }
-				/>
-				{ isLimited && (
-					<TextControl
-						__nextHasNoMarginBottom
-						__next40pxDefaultSize
-						label={ field.label }
-						type="number"
-						min={ 1 }
-						value={ String( data.download_limit ) }
-						onChange={ ( next ) => {
-							const parsed = parseInt( next, 10 );
-							onChange( {
-								download_limit: Number.isNaN( parsed )
-									? 1
-									: parsed,
-							} );
-						} }
-					/>
-				) }
-			</div>
-		);
-	},
-};
diff --git a/packages/js/experimental-products-app/src/variation-view/fields/downloadable/field.tsx b/packages/js/experimental-products-app/src/variation-view/fields/downloadable/field.tsx
deleted file mode 100644
index c4e5f929340..00000000000
--- a/packages/js/experimental-products-app/src/variation-view/fields/downloadable/field.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	type: 'boolean',
-	label: __( 'Downloadable', 'woocommerce' ),
-	enableSorting: false,
-	enableHiding: false,
-	filterBy: false,
-	getValue: ( { item } ) => item.downloadable ?? false,
-	Edit: 'checkbox',
-};
diff --git a/packages/js/experimental-products-app/src/variation-view/fields/downloadable_files/field.tsx b/packages/js/experimental-products-app/src/variation-view/fields/downloadable_files/field.tsx
deleted file mode 100644
index a265b293731..00000000000
--- a/packages/js/experimental-products-app/src/variation-view/fields/downloadable_files/field.tsx
+++ /dev/null
@@ -1,207 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-import { Button, TextControl } from '@wordpress/components';
-import { trash } from '@wordpress/icons';
-import { useCallback, useRef, useState } from '@wordpress/element';
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-import type { UploadedItem } from './utils';
-
-declare global {
-	interface Window {
-		wp?: {
-			media?: ( config: {
-				title?: string;
-				button?: { text?: string };
-				multiple?: boolean;
-			} ) => WPMediaFrame;
-		};
-	}
-}
-
-interface WPMediaFrame {
-	on( event: 'select', callback: () => void ): WPMediaFrame;
-	open(): void;
-	state(): {
-		get( key: 'selection' ): {
-			first(): {
-				toJSON(): {
-					url: string;
-					title: string;
-					filename: string;
-					id: number;
-				};
-			};
-		};
-	};
-}
-
-function openMediaLibrary(
-	onSelect: ( url: string, name: string, id?: string ) => void
-) {
-	if ( ! window.wp?.media ) {
-		return;
-	}
-	const frame = window.wp.media( {
-		title: __( 'Choose a file', 'woocommerce' ),
-		button: { text: __( 'Choose file', 'woocommerce' ) },
-		multiple: false,
-	} );
-	frame.on( 'select', () => {
-		const attachment = frame.state().get( 'selection' ).first().toJSON();
-		onSelect(
-			attachment.url,
-			attachment.title || attachment.filename || '',
-			attachment.id ? String( attachment.id ) : undefined
-		);
-	} );
-	frame.open();
-}
-
-function DownloadableFilesEdit( {
-	data,
-	onChange,
-}: {
-	data: ProductEntityRecord;
-	onChange: ( changes: Partial< ProductEntityRecord > ) => void;
-} ) {
-	type KeyedItem = UploadedItem & { _key: number };
-
-	const savedDownloads = ( data.downloads ?? [] ) as UploadedItem[];
-	const keyCounter = useRef( Math.max( savedDownloads.length, 1 ) );
-
-	// State is initialised from saved data once per mount.
-	// The drawer unmounts on close/cancel, so re-opening always starts fresh.
-	const [ downloads, setDownloads ] = useState< KeyedItem[] >(
-		savedDownloads.length > 0
-			? savedDownloads.map( ( d, i ) => ( { ...d, _key: i } ) )
-			: [ { file: '', name: '', _key: 0 } ]
-	);
-
-	const commit = useCallback(
-		( next: KeyedItem[] ) => {
-			setDownloads( next );
-			// Only persist entries that have a URL.
-			onChange( {
-				downloads: next
-					.filter( ( d ) => d.file.trim() !== '' )
-					.map( ( { _key: _, ...d } ) => ( {
-						...d,
-						id: d.id ?? '',
-					} ) ),
-			} );
-		},
-		[ onChange ]
-	);
-
-	const updateEntry = ( index: number, changes: Partial< KeyedItem > ) => {
-		commit(
-			downloads.map( ( d, i ) =>
-				i === index ? { ...d, ...changes } : d
-			)
-		);
-	};
-
-	const removeEntry = ( index: number ) => {
-		commit( downloads.filter( ( _, i ) => i !== index ) );
-	};
-
-	const canDelete = downloads.length > 1;
-
-	return (
-		<div className="woocommerce-fields-downloadable-files">
-			{ downloads.map( ( download, index ) => (
-				<div
-					key={ download._key }
-					className="woocommerce-fields-downloadable-files__entry"
-				>
-					{ index > 0 && (
-						<hr className="woocommerce-fields-downloadable-files__separator" />
-					) }
-
-					<div className="woocommerce-fields-downloadable-files__url-row">
-						<TextControl
-							__nextHasNoMarginBottom
-							__next40pxDefaultSize
-							label={ __( 'URL', 'woocommerce' ) }
-							type="url"
-							placeholder="https://"
-							value={ download.file }
-							onChange={ ( val ) =>
-								updateEntry( index, { file: val } )
-							}
-						/>
-						<Button
-							className="woocommerce-fields-downloadable-files__choose-button"
-							variant="secondary"
-							__next40pxDefaultSize
-							onClick={ () =>
-								openMediaLibrary( ( url, name, id ) => {
-									updateEntry( index, {
-										file: url,
-										name: download.name || name,
-										...( id ? { id } : {} ),
-									} );
-								} )
-							}
-						>
-							{ __( 'Choose file', 'woocommerce' ) }
-						</Button>
-					</div>
-
-					<div className="woocommerce-fields-downloadable-files__name-row">
-						<TextControl
-							__nextHasNoMarginBottom
-							__next40pxDefaultSize
-							label={ __( 'Name', 'woocommerce' ) }
-							value={ download.name }
-							onChange={ ( val ) =>
-								updateEntry( index, { name: val } )
-							}
-						/>
-						{ canDelete && (
-							<Button
-								className="woocommerce-fields-downloadable-files__delete-button"
-								variant="secondary"
-								__next40pxDefaultSize
-								icon={ trash }
-								label={ __( 'Remove file', 'woocommerce' ) }
-								onClick={ () => removeEntry( index ) }
-							/>
-						) }
-					</div>
-				</div>
-			) ) }
-
-			<Button
-				className="woocommerce-fields-downloadable-files__add-button"
-				variant="tertiary"
-				__next40pxDefaultSize
-				onClick={ () =>
-					commit( [
-						...downloads,
-						{ file: '', name: '', _key: keyCounter.current++ },
-					] )
-				}
-			>
-				{ __( '+ Add file', 'woocommerce' ) }
-			</Button>
-		</div>
-	);
-}
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	label: __( 'Downloadable files', 'woocommerce' ),
-	enableSorting: false,
-	enableHiding: false,
-	filterBy: false,
-	isVisible: ( item ) => !! item.downloadable,
-	getValue: ( { item } ) => item.downloads ?? [],
-	Edit: DownloadableFilesEdit,
-};
diff --git a/packages/js/experimental-products-app/src/variation-view/fields/downloadable_files/style.scss b/packages/js/experimental-products-app/src/variation-view/fields/downloadable_files/style.scss
deleted file mode 100644
index de47013e48e..00000000000
--- a/packages/js/experimental-products-app/src/variation-view/fields/downloadable_files/style.scss
+++ /dev/null
@@ -1,56 +0,0 @@
-.woocommerce-fields-field__download-limit,
-.woocommerce-fields-field__download-expiry {
-	display: flex;
-	flex-direction: column;
-	gap: 8px;
-}
-
-.woocommerce-fields-downloadable-files {
-	display: flex;
-	flex-direction: column;
-
-	&__entry {
-		display: flex;
-		flex-direction: column;
-		gap: 16px;
-	}
-
-	&__separator {
-		border: none;
-		border-top: 1px solid var(--wpds-color-stroke-surface-neutral-weak, #ddd);
-		margin: 24px 0 8px;
-	}
-
-	&__url-row,
-	&__name-row {
-		display: flex;
-		align-items: flex-end;
-		gap: var(--wpds-dimension-gap-lg, 16px);
-
-		// The TextControl wrapper takes all available space.
-		> *:first-child {
-			flex: 1;
-			min-width: 0;
-		}
-	}
-
-	&__choose-button.components-button {
-		flex-shrink: 0;
-		align-self: flex-end;
-	}
-
-	&__delete-button.components-button {
-		flex-shrink: 0;
-		align-self: flex-end;
-		width: 40px;
-		justify-content: center;
-		// Override the accent color so the secondary button uses black instead of blue.
-		--wp-components-color-accent: var(--wp-components-color-foreground, #1e1e1e);
-		--wp-components-color-accent-darker-10: #000;
-	}
-
-	&__add-button.components-button {
-		align-self: flex-start;
-		margin-top: 8px;
-	}
-}
diff --git a/packages/js/experimental-products-app/src/variation-view/fields/downloadable_files/utils.tsx b/packages/js/experimental-products-app/src/variation-view/fields/downloadable_files/utils.tsx
deleted file mode 100644
index c278ee5bbfd..00000000000
--- a/packages/js/experimental-products-app/src/variation-view/fields/downloadable_files/utils.tsx
+++ /dev/null
@@ -1,51 +0,0 @@
-/**
- * External dependencies
- */
-import { Icon } from '@wordpress/ui';
-import { file as FileIcon } from '@wordpress/icons';
-/**
- * Internal dependencies
- */
-import { ProductEntityRecord } from '../types';
-
-export type UploadedItem = Omit<
-	ProductEntityRecord[ 'downloads' ][ 0 ],
-	'id'
-> & {
-	id?: string;
-};
-
-export type ItemToUpload = UploadedItem & { type: string };
-
-export const getLastPathFromUrl = ( url: string ) => {
-	try {
-		const urlObj = new URL( url );
-		return urlObj.pathname.split( '/' ).pop() ?? url;
-	} catch {
-		const parts = url.split( '/' );
-		return parts[ parts.length - 1 ];
-	}
-};
-
-export const GenericThumbnail = () => (
-	<Icon style={ { width: '100%', height: '100%' } } icon={ FileIcon } />
-);
-
-export const isImageFromLink = ( link: string ) => {
-	const normalizedLink = link.toLowerCase();
-	return [ '.jpg', '.jpeg', '.png', '.gif', '.bmp', '.webp', '.svg' ].some(
-		( extension ) => normalizedLink.endsWith( extension )
-	);
-};
-
-export const isItemToUpload = (
-	download: UploadedItem | ItemToUpload
-): download is ItemToUpload => {
-	return 'type' in download;
-};
-
-export const isUploadedItem = (
-	download: UploadedItem | ItemToUpload
-): download is UploadedItem => {
-	return ! ( 'type' in download );
-};
diff --git a/packages/js/experimental-products-app/src/variation-view/fields/global_unique_id/field.tsx b/packages/js/experimental-products-app/src/variation-view/fields/global_unique_id/field.tsx
deleted file mode 100644
index 1aea8192671..00000000000
--- a/packages/js/experimental-products-app/src/variation-view/fields/global_unique_id/field.tsx
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-
-const fieldDefinition = {
-	type: 'text',
-	label: __( 'GTIN, UPC, EAN, ISBN', 'woocommerce' ),
-	enableSorting: false,
-	filterBy: false,
-} satisfies Partial< Field< ProductEntityRecord > >;
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	...fieldDefinition,
-	getValue: ( { item } ) => item.global_unique_id ?? '',
-	render: ( { item } ) => {
-		const value = item.global_unique_id;
-
-		if ( ! value ) {
-			return <span>{ '—' }</span>;
-		}
-
-		return <span>{ value }</span>;
-	},
-};
diff --git a/packages/js/experimental-products-app/src/variation-view/fields/height/field.tsx b/packages/js/experimental-products-app/src/variation-view/fields/height/field.tsx
deleted file mode 100644
index cefcb7f0090..00000000000
--- a/packages/js/experimental-products-app/src/variation-view/fields/height/field.tsx
+++ /dev/null
@@ -1,24 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-import { createVariationDimensionField } from '../components/dimension';
-
-const fieldDefinition = {
-	type: 'text',
-	label: __( 'Height', 'woocommerce' ),
-	enableSorting: false,
-	enableHiding: false,
-	filterBy: false,
-} satisfies Partial< Field< ProductEntityRecord > >;
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	...fieldDefinition,
-	...createVariationDimensionField( 'height' ),
-};
diff --git a/packages/js/experimental-products-app/src/variation-view/fields/images/field.tsx b/packages/js/experimental-products-app/src/variation-view/fields/images/field.tsx
deleted file mode 100644
index b2068b9ba46..00000000000
--- a/packages/js/experimental-products-app/src/variation-view/fields/images/field.tsx
+++ /dev/null
@@ -1,299 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-import { useMemo, useCallback, useEffect, useState } from '@wordpress/element';
-import { BaseControl } from '@wordpress/components';
-import { IconButton } from '@wordpress/ui';
-import clsx from 'clsx';
-import type { Field } from '@wordpress/dataviews';
-import { upload, closeSmall, dragHandle } from '@wordpress/icons';
-import { MediaUpload } from '@wordpress/media-utils';
-import { DragDropProvider, type DragEndEvent } from '@dnd-kit/react';
-import { isSortable, useSortable } from '@dnd-kit/react/sortable';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-
-type Attachment = {
-	id: number;
-	url?: string;
-	alt?: string;
-	title?: string;
-	date?: string;
-	date_gmt?: string;
-	modified?: string;
-	modified_gmt?: string;
-	sizes?: Record< string, { source_url?: string; url?: string } >;
-	media_details?: {
-		sizes?: Record< string, { source_url?: string; url?: string } >;
-	};
-};
-
-const toProductImage = (
-	att: Attachment
-): ProductEntityRecord[ 'images' ][ number ] => {
-	const sizes = att.media_details?.sizes || att.sizes;
-	const thumbnailUrl =
-		sizes?.woocommerce_thumbnail?.source_url ||
-		sizes?.woocommerce_thumbnail?.url ||
-		sizes?.thumbnail?.source_url ||
-		sizes?.thumbnail?.url ||
-		'';
-
-	return {
-		id: att.id,
-		src: att.url || '',
-		alt: att.alt || '',
-		name: att.title || '',
-		thumbnail: thumbnailUrl,
-		date_created: att.date || '',
-		date_created_gmt: att.date_gmt || '',
-		date_modified: att.modified || '',
-		date_modified_gmt: att.modified_gmt || '',
-	};
-};
-
-interface SortableImageProps {
-	image: ProductEntityRecord[ 'images' ][ number ];
-	index: number;
-	alt: string;
-	onRemove: () => void;
-	showDragHandle: boolean;
-}
-
-function SortableImage( {
-	image,
-	index,
-	alt,
-	onRemove,
-	showDragHandle,
-}: SortableImageProps ) {
-	const previewSrc = image.thumbnail || image.src;
-	const { ref, handleRef, isDragging } = useSortable( {
-		id: image.id,
-		index,
-		disabled: ! showDragHandle,
-	} );
-
-	const stopPropagation = useCallback( ( event: React.SyntheticEvent ) => {
-		event.stopPropagation();
-	}, [] );
-
-	return (
-		<div
-			ref={ ref }
-			role="group"
-			aria-label={ image.name }
-			className={ clsx( 'woocommerce-fields-controls__image-wrapper', {
-				'is-dragging': isDragging,
-			} ) }
-		>
-			<img className="product-image" src={ previewSrc } alt={ alt } />
-			<div className="woocommerce-fields-controls__image-overlay" />
-			{ showDragHandle && (
-				<div className="woocommerce-fields-controls__image-drag-handle-container">
-					<IconButton
-						ref={ handleRef }
-						icon={ dragHandle }
-						label={ __( 'Drag to reorder', 'woocommerce' ) }
-						className="woocommerce-fields-controls__image-drag-handle"
-						variant="minimal"
-						size="small"
-						tone="neutral"
-					/>
-				</div>
-			) }
-			{ ! isDragging && (
-				<IconButton
-					icon={ closeSmall }
-					label={ __( 'Remove image', 'woocommerce' ) }
-					onClick={ onRemove }
-					onPointerDown={ stopPropagation }
-					onKeyDown={ stopPropagation }
-					className="woocommerce-fields-controls__image-remove-button"
-					variant="minimal"
-					size="small"
-					tone="neutral"
-				/>
-			) }
-		</div>
-	);
-}
-
-const fieldDefinition = {
-	label: __( 'Images', 'woocommerce' ),
-	enableSorting: false,
-	filterBy: false,
-} satisfies Partial< Field< ProductEntityRecord > >;
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	...fieldDefinition,
-	render: ( { item } ) => {
-		const featuredImage = item.images?.at( 0 );
-
-		if ( ! featuredImage ) {
-			return null;
-		}
-
-		return (
-			<img
-				className="product-image"
-				src={ featuredImage.src }
-				alt={ featuredImage.alt || featuredImage.name || item.name }
-				style={ {
-					objectFit: 'cover',
-					borderRadius: 8,
-				} }
-			/>
-		);
-	},
-	Edit: ( { data, onChange, field } ) => {
-		const isVariation = data.type === 'variation';
-		const dataImages = useMemo( () => {
-			const nextImages = data.images ?? [];
-
-			return isVariation ? nextImages.slice( 0, 1 ) : nextImages;
-		}, [ data.images, isVariation ] );
-		const [ images, setImages ] = useState( dataImages );
-		const uploadLabel = isVariation
-			? __( 'Add image', 'woocommerce' )
-			: __( 'Add images', 'woocommerce' );
-
-		useEffect( () => {
-			setImages( dataImages );
-		}, [ dataImages ] );
-
-		const commitImages = useCallback(
-			( nextImages: ProductEntityRecord[ 'images' ] ) => {
-				setImages( nextImages );
-				onChange( {
-					images: nextImages,
-				} );
-			},
-			[ onChange ]
-		);
-
-		const handleSelect = useCallback(
-			( selection: Attachment | Attachment[] ) => {
-				const attachments = Array.isArray( selection )
-					? selection
-					: [ selection ];
-				const mappedImages = attachments.map( toProductImage );
-
-				commitImages(
-					isVariation ? mappedImages.slice( 0, 1 ) : mappedImages
-				);
-			},
-			[ commitImages, isVariation ]
-		);
-
-		const handleRemoveImage = useCallback(
-			( imageToRemove: ProductEntityRecord[ 'images' ][ number ] ) => {
-				commitImages(
-					images.filter( ( image ) => image.id !== imageToRemove.id )
-				);
-			},
-			[ commitImages, images ]
-		);
-
-		const handleDragEnd = useCallback(
-			( event: DragEndEvent ) => {
-				if ( event.canceled ) {
-					return;
-				}
-
-				const { source } = event.operation;
-
-				if ( ! isSortable( source ) ) {
-					return;
-				}
-
-				const { initialIndex, index } = source;
-
-				if (
-					initialIndex === index ||
-					initialIndex < 0 ||
-					index < 0 ||
-					initialIndex >= images.length ||
-					index >= images.length
-				) {
-					return;
-				}
-
-				const reorderedImages = [ ...images ];
-				const [ movedImage ] = reorderedImages.splice(
-					initialIndex,
-					1
-				);
-				reorderedImages.splice( index, 0, movedImage );
-
-				commitImages( reorderedImages );
-			},
-			[ commitImages, images ]
-		);
-
-		const removeCallbacks = useMemo( () => {
-			const callbacks = new Map< number | string, () => void >();
-			images.forEach( ( image ) => {
-				callbacks.set( image.id, () => handleRemoveImage( image ) );
-			} );
-			return callbacks;
-		}, [ images, handleRemoveImage ] );
-
-		return (
-			<div className="woocommerce-fields-control__images">
-				<BaseControl.VisualLabel>
-					{ field.label }
-				</BaseControl.VisualLabel>
-				<DragDropProvider onDragEnd={ handleDragEnd }>
-					<div className="woocommerce-fields-control__featured-image">
-						<div className="woocommerce-fields-controls__featured-image-uploaded-images">
-							{ images.map( ( image, index ) => {
-								const onRemove = removeCallbacks.get(
-									image.id
-								);
-
-								if ( ! onRemove ) {
-									return null;
-								}
-
-								return (
-									<SortableImage
-										key={ image.id }
-										image={ image }
-										index={ index }
-										alt={ image.alt || data.name }
-										onRemove={ onRemove }
-										showDragHandle={
-											! isVariation && images.length > 1
-										}
-									/>
-								);
-							} ) }
-						</div>
-						<div className="woocommerce-fields-control__featured-image-actions">
-							<MediaUpload
-								allowedTypes={ [ 'image' ] }
-								multiple={ isVariation ? false : 'add' }
-								onSelect={ handleSelect }
-								title={ uploadLabel }
-								value={ images.map( ( image ) => image.id ) }
-								render={ ( { open }: { open: () => void } ) => (
-									<IconButton
-										variant="minimal"
-										icon={ upload }
-										label={ uploadLabel }
-										onClick={ open }
-									/>
-								) }
-							/>
-						</div>
-					</div>
-				</DragDropProvider>
-			</div>
-		);
-	},
-};
diff --git a/packages/js/experimental-products-app/src/variation-view/fields/length/field.tsx b/packages/js/experimental-products-app/src/variation-view/fields/length/field.tsx
deleted file mode 100644
index 31b86967db3..00000000000
--- a/packages/js/experimental-products-app/src/variation-view/fields/length/field.tsx
+++ /dev/null
@@ -1,24 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-import { createVariationDimensionField } from '../components/dimension';
-
-const fieldDefinition = {
-	type: 'text',
-	label: __( 'Length', 'woocommerce' ),
-	enableSorting: false,
-	enableHiding: false,
-	filterBy: false,
-} satisfies Partial< Field< ProductEntityRecord > >;
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	...fieldDefinition,
-	...createVariationDimensionField( 'length' ),
-};
diff --git a/packages/js/experimental-products-app/src/variation-view/fields/low_stock_amount/field.tsx b/packages/js/experimental-products-app/src/variation-view/fields/low_stock_amount/field.tsx
deleted file mode 100644
index 84f848fd612..00000000000
--- a/packages/js/experimental-products-app/src/variation-view/fields/low_stock_amount/field.tsx
+++ /dev/null
@@ -1,44 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-import { TextControl } from '@wordpress/components';
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	type: 'integer',
-	label: __( 'Low stock threshold', 'woocommerce' ),
-	enableSorting: false,
-	filterBy: false,
-	isVisible: ( item ) => !! item.manage_stock,
-	getValue: ( { item } ) => item.low_stock_amount ?? '',
-	Edit: ( { data, onChange, field } ) => {
-		const value = data.low_stock_amount;
-		return (
-			<TextControl
-				__nextHasNoMarginBottom
-				label={ field.label }
-				type="number"
-				min={ 0 }
-				value={
-					value === null || value === undefined ? '' : String( value )
-				}
-				placeholder={ __( 'Store wide threshold', 'woocommerce' ) }
-				onChange={ ( next ) => {
-					const parsed =
-						next === '' ? undefined : parseInt( next, 10 );
-					onChange( {
-						low_stock_amount: Number.isNaN( parsed )
-							? undefined
-							: parsed,
-					} );
-				} }
-			/>
-		);
-	},
-};
diff --git a/packages/js/experimental-products-app/src/variation-view/fields/manage_stock/field.tsx b/packages/js/experimental-products-app/src/variation-view/fields/manage_stock/field.tsx
deleted file mode 100644
index d4766052054..00000000000
--- a/packages/js/experimental-products-app/src/variation-view/fields/manage_stock/field.tsx
+++ /dev/null
@@ -1,24 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-
-const fieldDefinition = {
-	type: 'boolean',
-	label: __( 'Track inventory', 'woocommerce' ),
-	enableSorting: false,
-	enableHiding: false,
-	filterBy: false,
-} satisfies Partial< Field< ProductEntityRecord > >;
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	...fieldDefinition,
-	type: 'boolean',
-	Edit: 'checkbox',
-};
diff --git a/packages/js/experimental-products-app/src/variation-view/fields/product_status/field.tsx b/packages/js/experimental-products-app/src/variation-view/fields/product_status/field.tsx
deleted file mode 100644
index e449a717379..00000000000
--- a/packages/js/experimental-products-app/src/variation-view/fields/product_status/field.tsx
+++ /dev/null
@@ -1,70 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-import { SelectControl } from '@wordpress/ui';
-
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-import { ProductStatusBadge } from '../components/product-status-badge';
-
-function isValidStatus( value: string ) {
-	return (
-		value === 'draft' ||
-		value === 'pending' ||
-		value === 'publish' ||
-		value === 'trash'
-	);
-}
-
-const fieldDefinition = {
-	type: 'text',
-	label: __( 'Status', 'woocommerce' ),
-	enableSorting: false,
-	filterBy: false,
-	elements: [
-		{ value: 'publish', label: __( 'Published', 'woocommerce' ) },
-		{ value: 'draft', label: __( 'Draft', 'woocommerce' ) },
-		{ value: 'pending', label: __( 'Pending review', 'woocommerce' ) },
-		{ value: 'trash', label: __( 'Trash', 'woocommerce' ) },
-	],
-} satisfies Partial< Field< ProductEntityRecord > >;
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	...fieldDefinition,
-	getValue: ( { item } ) => item.status,
-	render: ( { item }: { item: ProductEntityRecord } ) => (
-		<ProductStatusBadge status={ item.status } />
-	),
-	Edit: ( { data, onChange, field } ) => {
-		const options =
-			field.elements?.filter(
-				( element: { label: string; value: string } ) =>
-					element.value !== 'trash'
-			) ?? [];
-		const selectedOption = options.find(
-			( option ) => option.value === data.status
-		);
-
-		return (
-			<SelectControl
-				label={ field.label }
-				value={ selectedOption }
-				items={ options }
-				onValueChange={ ( option ) => {
-					const value = option?.value;
-
-					if ( typeof value === 'string' && isValidStatus( value ) ) {
-						onChange( {
-							status: value,
-						} );
-					}
-				} }
-			/>
-		);
-	},
-};
diff --git a/packages/js/experimental-products-app/src/variation-view/fields/registry.tsx b/packages/js/experimental-products-app/src/variation-view/fields/registry.tsx
deleted file mode 100644
index 02e84a097e5..00000000000
--- a/packages/js/experimental-products-app/src/variation-view/fields/registry.tsx
+++ /dev/null
@@ -1,126 +0,0 @@
-/**
- * External dependencies
- */
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from './types';
-import { fieldExtensions as allowBackordersFieldExtensions } from './allow_backorders/field';
-import { fieldExtensions as attributesFieldExtensions } from './attributes/field';
-import { fieldExtensions as costOfGoodsSoldFieldExtensions } from './cost_of_goods_sold/field';
-import { fieldExtensions as dateOnSaleFromFieldExtensions } from './date_on_sale_from/field';
-import { fieldExtensions as dateOnSaleToFieldExtensions } from './date_on_sale_to/field';
-import { fieldExtensions as descriptionFieldExtensions } from './description/field';
-import { fieldExtensions as downloadableFieldExtensions } from './downloadable/field';
-import { fieldExtensions as downloadableFilesFieldExtensions } from './downloadable_files/field';
-import { fieldExtensions as downloadExpiryFieldExtensions } from './download_expiry/field';
-import { fieldExtensions as downloadLimitFieldExtensions } from './download_limit/field';
-import { fieldExtensions as globalUniqueIdFieldExtensions } from './global_unique_id/field';
-import { fieldExtensions as heightFieldExtensions } from './height/field';
-import { fieldExtensions as imagesFieldExtensions } from './images/field';
-import { fieldExtensions as lengthFieldExtensions } from './length/field';
-import { fieldExtensions as lowStockAmountFieldExtensions } from './low_stock_amount/field';
-import { fieldExtensions as manageStockFieldExtensions } from './manage_stock/field';
-import { fieldExtensions as regularPriceFieldExtensions } from './regular_price/field';
-import { fieldExtensions as salePriceFieldExtensions } from './sale_price/field';
-import { fieldExtensions as scheduleSaleFieldExtensions } from './schedule_sale/field';
-import { fieldExtensions as shippingClassFieldExtensions } from './shipping_class/field';
-import { fieldExtensions as skuFieldExtensions } from './sku/field';
-import { fieldExtensions as stockFieldExtensions } from './stock/field';
-import { fieldExtensions as stockQuantityFieldExtensions } from './stock_quantity/field';
-import { fieldExtensions as taxClassFieldExtensions } from './tax_class/field';
-import { fieldExtensions as taxStatusFieldExtensions } from './tax_status/field';
-import { fieldExtensions as variationActiveFieldExtensions } from './variation_active/field';
-import { fieldExtensions as virtualFieldExtensions } from './virtual/field';
-import { fieldExtensions as weightFieldExtensions } from './weight/field';
-import { fieldExtensions as widthFieldExtensions } from './width/field';
-
-type VariationEditField = Field< ProductEntityRecord >;
-
-// TODO: Move all product field definitions into a common fields folder once
-// the product list/edit pages and variation edit drawer standardize their
-// UI/UX. The current page-specific designs require separate field
-// implementations even when the underlying product data is the same.
-
-function withVirtualGuard( field: VariationEditField ): VariationEditField {
-	const existing = field.isVisible;
-	return {
-		...field,
-		isVisible: ( item: ProductEntityRecord ) =>
-			! item.virtual && ( existing === undefined || existing( item ) ),
-	};
-}
-
-const SHARED_FIELDS: Array< {
-	id: string;
-	extensions: Partial< VariationEditField >;
-} > = [
-	{ id: 'description', extensions: descriptionFieldExtensions },
-	{ id: 'sku', extensions: skuFieldExtensions },
-	{ id: 'global_unique_id', extensions: globalUniqueIdFieldExtensions },
-	{ id: 'regular_price', extensions: regularPriceFieldExtensions },
-	{ id: 'sale_price', extensions: salePriceFieldExtensions },
-	{ id: 'schedule_sale', extensions: scheduleSaleFieldExtensions },
-	{ id: 'date_on_sale_from', extensions: dateOnSaleFromFieldExtensions },
-	{ id: 'date_on_sale_to', extensions: dateOnSaleToFieldExtensions },
-	{ id: 'cost_of_goods_sold', extensions: costOfGoodsSoldFieldExtensions },
-	{ id: 'images', extensions: imagesFieldExtensions },
-	{ id: 'manage_stock', extensions: manageStockFieldExtensions },
-	{ id: 'stock', extensions: stockFieldExtensions },
-	{ id: 'stock_quantity', extensions: stockQuantityFieldExtensions },
-	{ id: 'tax_status', extensions: taxStatusFieldExtensions },
-	{ id: 'variation_active', extensions: variationActiveFieldExtensions },
-];
-
-const SHIPPING_FIELDS: Array< {
-	id: string;
-	extensions: Partial< VariationEditField >;
-} > = [
-	{ id: 'shipping_class', extensions: shippingClassFieldExtensions },
-	{ id: 'weight', extensions: weightFieldExtensions },
-	{ id: 'length', extensions: lengthFieldExtensions },
-	{ id: 'width', extensions: widthFieldExtensions },
-	{ id: 'height', extensions: heightFieldExtensions },
-];
-
-const VARIATION_ONLY_FIELDS: Array< {
-	id: string;
-	extensions: Partial< VariationEditField >;
-} > = [
-	{ id: 'downloadable', extensions: downloadableFieldExtensions },
-	{ id: 'tax_class', extensions: taxClassFieldExtensions },
-	{ id: 'virtual', extensions: virtualFieldExtensions },
-	{ id: 'allow_backorders', extensions: allowBackordersFieldExtensions },
-	{ id: 'low_stock_amount', extensions: lowStockAmountFieldExtensions },
-	{ id: 'downloadable_files', extensions: downloadableFilesFieldExtensions },
-	{ id: 'download_limit', extensions: downloadLimitFieldExtensions },
-	{ id: 'download_expiry', extensions: downloadExpiryFieldExtensions },
-	{ id: 'attributes', extensions: attributesFieldExtensions },
-];
-
-const sharedFields: VariationEditField[] = SHARED_FIELDS.map(
-	( { id, extensions } ) => ( { id, ...extensions } ) as VariationEditField
-);
-
-const shippingFields: VariationEditField[] = SHIPPING_FIELDS.map(
-	( { id, extensions } ) =>
-		withVirtualGuard( { id, ...extensions } as VariationEditField )
-);
-
-const variationOnlyFields: VariationEditField[] = VARIATION_ONLY_FIELDS.map(
-	( { id, extensions } ) => ( { id, ...extensions } ) as VariationEditField
-);
-
-// The full field list used by the variation edit drawer.
-export const variationEditFields: VariationEditField[] = [
-	...sharedFields,
-	...shippingFields,
-	...variationOnlyFields,
-];
-
-export type VariationEditFieldId =
-	| ( typeof SHARED_FIELDS )[ number ][ 'id' ]
-	| ( typeof SHIPPING_FIELDS )[ number ][ 'id' ]
-	| ( typeof VARIATION_ONLY_FIELDS )[ number ][ 'id' ];
diff --git a/packages/js/experimental-products-app/src/variation-view/fields/regular_price/field.tsx b/packages/js/experimental-products-app/src/variation-view/fields/regular_price/field.tsx
deleted file mode 100644
index a9a250229f3..00000000000
--- a/packages/js/experimental-products-app/src/variation-view/fields/regular_price/field.tsx
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-import { CurrencyInput } from '../components/currency-input';
-import { validatePrice } from '../utils/price';
-
-const fieldDefinition = {
-	type: 'text',
-	label: __( 'Regular Price', 'woocommerce' ),
-	enableSorting: false,
-	enableHiding: false,
-	filterBy: false,
-} satisfies Partial< Field< ProductEntityRecord > >;
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	...fieldDefinition,
-	isValid: {
-		custom: ( item ) => validatePrice( item.regular_price ),
-	},
-	Edit: CurrencyInput,
-};
diff --git a/packages/js/experimental-products-app/src/variation-view/fields/sale_price/field.tsx b/packages/js/experimental-products-app/src/variation-view/fields/sale_price/field.tsx
deleted file mode 100644
index 2c360ecefe2..00000000000
--- a/packages/js/experimental-products-app/src/variation-view/fields/sale_price/field.tsx
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-import { CurrencyInput } from '../components/currency-input';
-import { validateSalePrice } from './validation';
-
-const fieldDefinition = {
-	type: 'text',
-	label: __( 'Sale Price', 'woocommerce' ),
-	enableSorting: false,
-	enableHiding: false,
-	filterBy: false,
-} satisfies Partial< Field< ProductEntityRecord > >;
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	...fieldDefinition,
-	isValid: {
-		custom: ( item ) => validateSalePrice( item ),
-	},
-	Edit: CurrencyInput,
-};
diff --git a/packages/js/experimental-products-app/src/variation-view/fields/sale_price/validation.ts b/packages/js/experimental-products-app/src/variation-view/fields/sale_price/validation.ts
deleted file mode 100644
index 7460f62bf80..00000000000
--- a/packages/js/experimental-products-app/src/variation-view/fields/sale_price/validation.ts
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-import { toNumberOrNaN, validatePrice } from '../utils/price';
-
-export function validateSalePrice( item: ProductEntityRecord ): string | null {
-	const numericError = validatePrice( item.sale_price );
-	if ( numericError ) {
-		return numericError;
-	}
-
-	const regularPrice = toNumberOrNaN( item.regular_price );
-
-	if ( Number.isNaN( regularPrice ) ) {
-		return null;
-	}
-
-	const salePrice = toNumberOrNaN( item.sale_price );
-	if ( salePrice >= regularPrice ) {
-		return __(
-			'Sale price must be lower than the regular price.',
-			'woocommerce'
-		);
-	}
-
-	return null;
-}
diff --git a/packages/js/experimental-products-app/src/variation-view/fields/schedule_sale/field.tsx b/packages/js/experimental-products-app/src/variation-view/fields/schedule_sale/field.tsx
deleted file mode 100644
index f033b1ac37d..00000000000
--- a/packages/js/experimental-products-app/src/variation-view/fields/schedule_sale/field.tsx
+++ /dev/null
@@ -1,186 +0,0 @@
-/**
- * External dependencies
- */
-import { CheckboxControl } from '@wordpress/components';
-import { useCallback, useMemo, useState } from '@wordpress/element';
-import { __ } from '@wordpress/i18n';
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-import { getLocalDefaultSaleStart } from '../utils/price';
-import {
-	DatePicker,
-	formatDateTimeLocal,
-	parseDateTimeLocal,
-} from '../components/date-picker';
-
-const fieldDefinition = {
-	type: 'boolean',
-	label: __( 'Schedule sale', 'woocommerce' ),
-	enableSorting: false,
-	enableHiding: false,
-	filterBy: false,
-} satisfies Partial< Field< ProductEntityRecord > >;
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	...fieldDefinition,
-	Edit: ( { data, onChange, field } ) => {
-		const [ tempDateOnSaleFrom, setTempDateOnSaleFrom ] = useState(
-			data.date_on_sale_from || ''
-		);
-		const [ tempDateOnSaleTo, setTempDateOnSaleTo ] = useState(
-			data.date_on_sale_to || ''
-		);
-		const checked = !! data.date_on_sale_to || !! data.date_on_sale_from;
-		const today = useMemo( () => {
-			const d = new Date();
-			d.setHours( 0, 0, 0, 0 );
-			return d;
-		}, [] );
-		const dateOnSaleFrom = useMemo(
-			() =>
-				typeof data.date_on_sale_from === 'string' &&
-				data.date_on_sale_from
-					? parseDateTimeLocal( data.date_on_sale_from )
-					: null,
-			[ data.date_on_sale_from ]
-		);
-		const minDateOnSaleTo = useMemo( () => {
-			if ( dateOnSaleFrom ) {
-				const min = new Date( dateOnSaleFrom );
-				min.setMinutes( min.getMinutes() + 1 );
-				return min;
-			}
-
-			return today;
-		}, [ dateOnSaleFrom, today ] );
-		const handleScheduleChange = useCallback(
-			( value: boolean ) => {
-				if ( ! value ) {
-					setTempDateOnSaleFrom( data.date_on_sale_from || '' );
-					setTempDateOnSaleTo( data.date_on_sale_to || '' );
-					onChange( {
-						date_on_sale_from: '',
-						date_on_sale_to: '',
-					} );
-					return;
-				}
-
-				let nextDateOnSaleFrom =
-					data.date_on_sale_from || tempDateOnSaleFrom;
-				const nextDateOnSaleTo =
-					data.date_on_sale_to || tempDateOnSaleTo;
-
-				if ( ! nextDateOnSaleFrom && ! nextDateOnSaleTo ) {
-					nextDateOnSaleFrom = getLocalDefaultSaleStart();
-				}
-
-				onChange( {
-					date_on_sale_from: nextDateOnSaleFrom,
-					date_on_sale_to: nextDateOnSaleTo,
-				} );
-			},
-			[
-				data.date_on_sale_from,
-				data.date_on_sale_to,
-				onChange,
-				tempDateOnSaleFrom,
-				tempDateOnSaleTo,
-			]
-		);
-		const handleDateOnSaleFromChange = useCallback(
-			( value: { date_on_sale_from?: string | null } ) => {
-				const newStart = value.date_on_sale_from;
-				const currentEnd = data.date_on_sale_to;
-
-				if (
-					typeof newStart !== 'string' ||
-					! newStart ||
-					typeof currentEnd !== 'string' ||
-					! currentEnd
-				) {
-					onChange( value );
-					return;
-				}
-
-				const startDate = parseDateTimeLocal( newStart );
-				const endDate = parseDateTimeLocal( currentEnd );
-
-				if (
-					startDate &&
-					endDate &&
-					startDate.getTime() >= endDate.getTime()
-				) {
-					const newEndDate = new Date( startDate );
-					newEndDate.setDate( newEndDate.getDate() + 1 );
-
-					onChange( {
-						...value,
-						date_on_sale_to: formatDateTimeLocal( newEndDate ),
-					} );
-					return;
-				}
-
-				onChange( value );
-			},
-			[ data.date_on_sale_to, onChange ]
-		);
-
-		return (
-			<div className="woocommerce-schedule-sale-control">
-				<CheckboxControl
-					label={ field.label }
-					checked={ checked }
-					onChange={ handleScheduleChange }
-				/>
-				{ checked && (
-					<div className="woocommerce-schedule-sale-control__dates">
-						<DatePicker
-							data={ data }
-							onChange={ handleDateOnSaleFromChange }
-							field={ {
-								label: __( 'Start sale on', 'woocommerce' ),
-							} }
-							fieldKey="date_on_sale_from"
-							min={ today }
-						/>
-						<DatePicker
-							data={ data }
-							onChange={ onChange }
-							field={ {
-								label: __( 'End sale on', 'woocommerce' ),
-							} }
-							fieldKey="date_on_sale_to"
-							min={ minDateOnSaleTo }
-						/>
-					</div>
-				) }
-			</div>
-		);
-	},
-	getValue: ( { item } ) =>
-		!! item.date_on_sale_to || !! item.date_on_sale_from,
-	setValue: ( { item, value } ) => {
-		if ( ! value ) {
-			return {
-				date_on_sale_from: '',
-				date_on_sale_to: '',
-			};
-		}
-
-		let dateOnSaleFrom = item.date_on_sale_from || '';
-		const dateOnSaleTo = item.date_on_sale_to || '';
-
-		if ( ! dateOnSaleFrom && ! dateOnSaleTo ) {
-			dateOnSaleFrom = getLocalDefaultSaleStart();
-		}
-
-		return {
-			date_on_sale_from: dateOnSaleFrom,
-			date_on_sale_to: dateOnSaleTo,
-		};
-	},
-};
diff --git a/packages/js/experimental-products-app/src/variation-view/fields/shipping_class/field.tsx b/packages/js/experimental-products-app/src/variation-view/fields/shipping_class/field.tsx
deleted file mode 100644
index 62eb3915dbe..00000000000
--- a/packages/js/experimental-products-app/src/variation-view/fields/shipping_class/field.tsx
+++ /dev/null
@@ -1,73 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-import { useSelect } from '@wordpress/data';
-import { SelectControl } from '@wordpress/ui';
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-
-interface ProductShippingClass {
-	id: number;
-	slug: string;
-	name: string;
-	description: string;
-	count: number;
-}
-
-// Radix UI (used by @wordpress/ui SelectControl) rejects empty-string values.
-// We use 'parent' as a UI sentinel for the '' API value ("Same as parent").
-const SAME_AS_PARENT = 'parent';
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	Edit: ( { data, onChange, field } ) => {
-		const { shippingClasses } = useSelect( ( select ) => {
-			// eslint-disable-next-line @wordpress/data-no-store-string-literals
-			const store = select(
-				'experimental/wc/admin/products/shipping-classes'
-			);
-			return {
-				shippingClasses: ( store?.getProductShippingClasses?.() ??
-					[] ) as ProductShippingClass[],
-			};
-		}, [] );
-
-		const options = [
-			{
-				label: __( 'Same as parent', 'woocommerce' ),
-				value: SAME_AS_PARENT,
-			},
-			...( shippingClasses?.length
-				? shippingClasses.map( ( shippingClass ) => ( {
-						label: shippingClass.name,
-						value: shippingClass.slug,
-				  } ) )
-				: [] ),
-		];
-
-		const apiValue = data.shipping_class ?? '';
-		const uiValue = apiValue === '' ? SAME_AS_PARENT : apiValue;
-		const selectedOption = options.find( ( o ) => o.value === uiValue );
-
-		return (
-			<SelectControl
-				label={ field.label }
-				value={ selectedOption }
-				items={ options }
-				onValueChange={ ( option ) => {
-					if ( option !== null && option !== undefined ) {
-						const apiVal =
-							option.value === SAME_AS_PARENT
-								? ''
-								: option.value ?? '';
-						onChange( { shipping_class: apiVal } );
-					}
-				} }
-			/>
-		);
-	},
-};
diff --git a/packages/js/experimental-products-app/src/variation-view/fields/sku/field.tsx b/packages/js/experimental-products-app/src/variation-view/fields/sku/field.tsx
deleted file mode 100644
index 3f6169cde9c..00000000000
--- a/packages/js/experimental-products-app/src/variation-view/fields/sku/field.tsx
+++ /dev/null
@@ -1,30 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-
-const fieldDefinition = {
-	type: 'text',
-	label: __( 'SKU', 'woocommerce' ),
-	enableSorting: false,
-	filterBy: false,
-} satisfies Partial< Field< ProductEntityRecord > >;
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	...fieldDefinition,
-	render: ( { item } ) => {
-		const sku = item.sku;
-
-		if ( sku === undefined || sku === null || sku === '' ) {
-			return <span>{ '—' }</span>;
-		}
-
-		return <span>{ sku }</span>;
-	},
-};
diff --git a/packages/js/experimental-products-app/src/variation-view/fields/stock/field.tsx b/packages/js/experimental-products-app/src/variation-view/fields/stock/field.tsx
deleted file mode 100644
index 8d180793348..00000000000
--- a/packages/js/experimental-products-app/src/variation-view/fields/stock/field.tsx
+++ /dev/null
@@ -1,102 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-import { Badge, SelectControl } from '@wordpress/ui';
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-
-type StockStatus = 'instock' | 'outofstock' | 'onbackorder';
-
-function isValidStockStatus( value: string ): value is StockStatus {
-	return (
-		value === 'instock' || value === 'outofstock' || value === 'onbackorder'
-	);
-}
-
-const stockStatusBadgeIntent: Record<
-	StockStatus,
-	React.ComponentProps< typeof Badge >[ 'intent' ]
-> = {
-	instock: 'none',
-	outofstock: 'high',
-	onbackorder: 'draft',
-};
-
-const fieldDefinition = {
-	label: __( 'Stock', 'woocommerce' ),
-	enableSorting: false,
-	enableHiding: false,
-	filterBy: {
-		operators: [ 'isAny' ],
-	},
-	elements: [
-		{ label: __( 'In stock', 'woocommerce' ), value: 'instock' },
-		{ label: __( 'Out of stock', 'woocommerce' ), value: 'outofstock' },
-		{ label: __( 'On backorder', 'woocommerce' ), value: 'onbackorder' },
-	],
-} satisfies Partial< Field< ProductEntityRecord > >;
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	...fieldDefinition,
-	isVisible: ( item ) => {
-		return ! item.manage_stock;
-	},
-	getValue: ( { item } ) => item.stock_status,
-	render: ( { item, field } ) => {
-		const match = field?.elements?.find(
-			( status ) => status.value === item.stock_status
-		);
-
-		if ( ! match || ! isValidStockStatus( match.value ) ) {
-			return item.stock_status;
-		}
-
-		const stockLabel =
-			item.stock_quantity && item.stock_quantity > 0
-				? `${ match.label } (${ item.stock_quantity })`
-				: match.label;
-
-		return (
-			<div className="woocommerce-fields-field__stock">
-				<Badge intent={ stockStatusBadgeIntent[ match.value ] }>
-					{ stockLabel }
-				</Badge>
-			</div>
-		);
-	},
-	Edit: ( { data, onChange, field } ) => {
-		const options = field?.elements ?? [];
-		const selectedOption =
-			field.placeholder && ! data.stock_status
-				? undefined
-				: options.find(
-						( option ) => option.value === data.stock_status
-				  );
-
-		return (
-			<SelectControl
-				label={ __( 'Stock status', 'woocommerce' ) }
-				placeholder={ field.placeholder }
-				value={ selectedOption }
-				items={ options }
-				onValueChange={ ( option ) => {
-					const value = option?.value;
-
-					if (
-						typeof value === 'string' &&
-						isValidStockStatus( value )
-					) {
-						onChange( {
-							stock_status: value,
-						} );
-					}
-				} }
-			/>
-		);
-	},
-};
diff --git a/packages/js/experimental-products-app/src/variation-view/fields/stock_quantity/field.tsx b/packages/js/experimental-products-app/src/variation-view/fields/stock_quantity/field.tsx
deleted file mode 100644
index a96cb84cbf8..00000000000
--- a/packages/js/experimental-products-app/src/variation-view/fields/stock_quantity/field.tsx
+++ /dev/null
@@ -1,129 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-import { InputControl, Stack } from '@wordpress/ui';
-import type { DataFormControlProps, Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-
-type StockQuantityRange = [ number | string, number | string ];
-type StockQuantityFilterRecord = Omit<
-	ProductEntityRecord,
-	'stock_quantity'
-> & {
-	stock_quantity?: number | string | null | StockQuantityRange;
-};
-
-const castValueToString = (
-	value: number | string | null | StockQuantityRange | undefined
-): string => {
-	if ( typeof value === 'number' ) {
-		return String( value );
-	} else if ( typeof value === 'string' ) {
-		return value;
-	}
-	return '';
-};
-
-const fieldDefinition = {
-	type: 'integer',
-	label: __( 'Stock quantity', 'woocommerce' ),
-	enableSorting: false,
-	enableHiding: false,
-	filterBy: {
-		operators: [
-			'is',
-			'greaterThan',
-			'greaterThanOrEqual',
-			'lessThan',
-			'lessThanOrEqual',
-			'between',
-		],
-	},
-} satisfies Partial< Field< ProductEntityRecord > >;
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	...fieldDefinition,
-	isVisible: ( item ) => {
-		return !! item.manage_stock;
-	},
-	Edit: ( {
-		data,
-		onChange,
-		hideLabelFromVision,
-		operator,
-		field,
-	}: DataFormControlProps< ProductEntityRecord > ) => {
-		const onChangeBetween = onChange as (
-			data: Partial< StockQuantityFilterRecord >
-		) => void;
-		const onChangeStockQuantity = onChange as (
-			data: Partial< StockQuantityFilterRecord >
-		) => void;
-		const raw = ( data as StockQuantityFilterRecord ).stock_quantity;
-		const disabled = field.isDisabled( { item: data, field } );
-
-		if ( operator === 'between' ) {
-			const [ minRaw = '', maxRaw = '' ] = Array.isArray( raw )
-				? raw
-				: [];
-			const min = String( minRaw );
-			const max = String( maxRaw );
-
-			return (
-				<Stack direction="row">
-					<InputControl
-						label={ __( 'From', 'woocommerce' ) }
-						type="number"
-						step={ 1 }
-						value={ min }
-						onChange={ ( event ) => {
-							const next = event.target.value;
-							const nextMin = next === '' ? '' : Number( next );
-							onChangeBetween( {
-								stock_quantity: [ nextMin, max ],
-							} );
-						} }
-					/>
-					<InputControl
-						label={ __( 'To', 'woocommerce' ) }
-						type="number"
-						step={ 1 }
-						value={ max }
-						onChange={ ( event ) => {
-							const next = event.target.value;
-							const nextMax = next === '' ? '' : Number( next );
-							onChangeBetween( {
-								stock_quantity: [ min, nextMax ],
-							} );
-						} }
-					/>
-				</Stack>
-			);
-		}
-
-		const value = castValueToString( raw );
-
-		return (
-			<InputControl
-				label={ field.label }
-				hideLabelFromVision={ hideLabelFromVision }
-				type="number"
-				step={ 1 }
-				value={ value }
-				placeholder={ field.placeholder }
-				disabled={ disabled }
-				onChange={ ( event ) => {
-					const next = event.target.value;
-					const stockQuantity: StockQuantityFilterRecord[ 'stock_quantity' ] =
-						next === '' ? null : Number( next );
-					onChangeStockQuantity( { stock_quantity: stockQuantity } );
-				} }
-			/>
-		);
-	},
-};
diff --git a/packages/js/experimental-products-app/src/variation-view/fields/tax_class/field.tsx b/packages/js/experimental-products-app/src/variation-view/fields/tax_class/field.tsx
deleted file mode 100644
index ec4f7536bc6..00000000000
--- a/packages/js/experimental-products-app/src/variation-view/fields/tax_class/field.tsx
+++ /dev/null
@@ -1,59 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-import { SelectControl } from '@wordpress/ui';
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-
-// Radix UI (used by @wordpress/ui SelectControl) rejects empty-string values.
-// We use 'parent' as a UI sentinel for the '' API value ("Same as parent").
-const SAME_AS_PARENT = 'parent';
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	type: 'text',
-	label: __( 'Tax class', 'woocommerce' ),
-	enableSorting: false,
-	filterBy: false,
-	getValue: ( { item } ) => item.tax_class ?? '',
-	Edit: ( { data, onChange, field } ) => {
-		const options = [
-			{
-				value: SAME_AS_PARENT,
-				label: __( 'Same as parent', 'woocommerce' ),
-			},
-			{ value: 'standard', label: __( 'Standard', 'woocommerce' ) },
-			{
-				value: 'reduced-rate',
-				label: __( 'Reduced rate', 'woocommerce' ),
-			},
-			{ value: 'zero-rate', label: __( 'Zero rate', 'woocommerce' ) },
-		];
-
-		const apiValue = data.tax_class ?? '';
-		const uiValue = apiValue === '' ? SAME_AS_PARENT : apiValue;
-		const selected = options.find( ( o ) => o.value === uiValue );
-
-		return (
-			<SelectControl
-				label={ field.label }
-				value={ selected }
-				items={ options }
-				onValueChange={ ( option ) => {
-					if ( option !== null && option !== undefined ) {
-						const apiVal =
-							option.value === SAME_AS_PARENT ? '' : option.value;
-						onChange( {
-							tax_class:
-								apiVal as ProductEntityRecord[ 'tax_class' ],
-						} );
-					}
-				} }
-			/>
-		);
-	},
-};
diff --git a/packages/js/experimental-products-app/src/variation-view/fields/tax_status/field.tsx b/packages/js/experimental-products-app/src/variation-view/fields/tax_status/field.tsx
deleted file mode 100644
index 55722c3aa30..00000000000
--- a/packages/js/experimental-products-app/src/variation-view/fields/tax_status/field.tsx
+++ /dev/null
@@ -1,37 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-import { CheckboxControl } from '@wordpress/components';
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-
-const fieldDefinition = {
-	label: __( 'Tax Status', 'woocommerce' ),
-	enableSorting: false,
-	enableHiding: false,
-	filterBy: false,
-} satisfies Partial< Field< ProductEntityRecord > >;
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	...fieldDefinition,
-	enableSorting: false,
-	Edit: ( { data, onChange, field } ) => {
-		return (
-			<CheckboxControl
-				label={ field.label }
-				checked={ data.tax_status === 'taxable' }
-				onChange={ () =>
-					onChange( {
-						tax_status:
-							data.tax_status === 'taxable' ? 'none' : 'taxable',
-					} )
-				}
-			/>
-		);
-	},
-};
diff --git a/packages/js/experimental-products-app/src/variation-view/fields/types.ts b/packages/js/experimental-products-app/src/variation-view/fields/types.ts
deleted file mode 100644
index 2356e484226..00000000000
--- a/packages/js/experimental-products-app/src/variation-view/fields/types.ts
+++ /dev/null
@@ -1,67 +0,0 @@
-/**
- * External dependencies
- */
-import type {
-	Product,
-	ProductStatus as WooProductStatus,
-} from '@woocommerce/data';
-
-export type ProductEntityRecord = Omit< Product, 'categories' | 'tags' > & {
-	cost_of_goods_sold?: {
-		values?: Array< {
-			defined_value?: number | string | null;
-			effective_value?: number | string | null;
-		} >;
-		defined_value_is_additive?: boolean;
-		total_value?: number | string | null;
-	};
-	categories: Array< {
-		id: number;
-		name?: string;
-		image?: {
-			src?: string;
-			alt?: string;
-		};
-	} >;
-	tags: Array< {
-		id: number;
-		name?: string;
-	} >;
-	brands?: Array< {
-		id: number;
-		name?: string;
-		slug?: string;
-	} >;
-	global_unique_id?: string;
-	cross_sell_ids?: number[];
-	upsell_ids?: number[];
-	date_on_sale_from?: string | null;
-	date_on_sale_to?: string | null;
-	parent_id?: number;
-	_embedded?: {
-		variations?: ProductEntityRecord[];
-	};
-	seo_title?: string;
-	seo_description?: string;
-	visible_in_pos?: boolean;
-	images: Array< {
-		alt: string;
-		date_created: string;
-		date_created_gmt: string;
-		date_modified: string;
-		date_modified_gmt: string;
-		id: number;
-		name: string;
-		src: string;
-		thumbnail: string;
-	} >;
-};
-
-export type ProductStatus = WooProductStatus;
-
-export type SettingsEntityRecord = {
-	values?: {
-		woocommerce_dimension_unit?: string;
-		woocommerce_weight_unit?: string;
-	};
-};
diff --git a/packages/js/experimental-products-app/src/variation-view/fields/utils/currency.test.ts b/packages/js/experimental-products-app/src/variation-view/fields/utils/currency.test.ts
deleted file mode 100644
index db5428fde12..00000000000
--- a/packages/js/experimental-products-app/src/variation-view/fields/utils/currency.test.ts
+++ /dev/null
@@ -1,90 +0,0 @@
-/**
- * Internal dependencies
- */
-import { getCurrencyObject, formatCurrency } from './currency';
-
-jest.mock( '@woocommerce/settings', () => ( {
-	CURRENCY: {
-		code: 'USD',
-		symbol: '$',
-		symbolPosition: 'left',
-		precision: '2',
-		decimalSeparator: '.',
-		thousandSeparator: ',',
-	},
-} ) );
-
-const getCurrencyMock = () =>
-	jest.requireMock( '@woocommerce/settings' ).CURRENCY;
-
-describe( 'getCurrencyObject', () => {
-	afterEach( () => {
-		const mock = getCurrencyMock();
-		mock.code = 'USD';
-		mock.symbol = '$';
-		mock.symbolPosition = 'left';
-		mock.precision = '2';
-	} );
-
-	it( 'returns currency settings from CURRENCY global', () => {
-		const result = getCurrencyObject();
-		expect( result.code ).toBe( 'USD' );
-		expect( result.symbol ).toBe( '$' );
-		expect( result.precision ).toBe( 2 );
-	} );
-
-	it( 'falls back to USD when code is empty', () => {
-		getCurrencyMock().code = '';
-		expect( getCurrencyObject().code ).toBe( 'USD' );
-	} );
-
-	it( 'falls back to $ when symbol is empty', () => {
-		getCurrencyMock().symbol = '';
-		expect( getCurrencyObject().symbol ).toBe( '$' );
-	} );
-
-	it( 'falls back to precision 2 when precision is invalid', () => {
-		getCurrencyMock().precision = 'invalid';
-		expect( getCurrencyObject().precision ).toBe( 2 );
-	} );
-
-	it( 'falls back to precision 2 when precision is negative', () => {
-		getCurrencyMock().precision = '-1';
-		expect( getCurrencyObject().precision ).toBe( 2 );
-	} );
-} );
-
-describe( 'formatCurrency', () => {
-	it( 'formats a number as currency', () => {
-		const result = formatCurrency( 9.99 );
-		expect( result ).toContain( '9.99' );
-	} );
-
-	it( 'formats a string number as currency', () => {
-		const result = formatCurrency( '19.99' );
-		expect( result ).toContain( '19.99' );
-	} );
-
-	it( 'returns empty string for NaN input', () => {
-		expect( formatCurrency( 'not-a-number' ) ).toBe( '' );
-	} );
-
-	it( 'returns empty string for Infinity input', () => {
-		expect( formatCurrency( Infinity ) ).toBe( '' );
-	} );
-
-	it( 'handles zero correctly', () => {
-		const result = formatCurrency( 0 );
-		expect( result ).toContain( '0.00' );
-	} );
-
-	it( 'accepts a custom currency code', () => {
-		const result = formatCurrency( 10, 'EUR' );
-		expect( result ).toContain( '10.00' );
-	} );
-
-	it( 'falls back to USD formatting when currency code is invalid', () => {
-		const result = formatCurrency( 10, 'INVALID' );
-		expect( result ).toContain( '10.00' );
-	} );
-} );
diff --git a/packages/js/experimental-products-app/src/variation-view/fields/utils/currency.ts b/packages/js/experimental-products-app/src/variation-view/fields/utils/currency.ts
deleted file mode 100644
index 8316d9b28e4..00000000000
--- a/packages/js/experimental-products-app/src/variation-view/fields/utils/currency.ts
+++ /dev/null
@@ -1,60 +0,0 @@
-/**
- * External dependencies
- */
-import { CURRENCY } from '@woocommerce/settings';
-
-type CurrencyObject = {
-	code: string;
-	symbol: string;
-	symbolPosition: string;
-	precision: number;
-	decimalSeparator?: string;
-	thousandSeparator?: string;
-};
-
-export function getCurrencyObject(): CurrencyObject {
-	const parsedPrecision = Number( CURRENCY.precision );
-	return {
-		code: CURRENCY.code || 'USD',
-		symbol: CURRENCY.symbol || '$',
-		symbolPosition: CURRENCY.symbolPosition || 'left',
-		precision:
-			Number.isFinite( parsedPrecision ) && parsedPrecision >= 0
-				? parsedPrecision
-				: 2,
-		decimalSeparator: CURRENCY.decimalSeparator,
-		thousandSeparator: CURRENCY.thousandSeparator,
-	};
-}
-
-export function formatCurrency(
-	value: number | string,
-	currencyCode = getCurrencyObject().code
-) {
-	const amount = typeof value === 'number' ? value : Number( value );
-	if ( ! Number.isFinite( amount ) ) {
-		return '';
-	}
-	const locale =
-		typeof document !== 'undefined'
-			? document.documentElement.lang || 'en-US'
-			: 'en-US';
-	const { precision } = getCurrencyObject();
-	const safeCurrencyCode = currencyCode || 'USD';
-
-	try {
-		return new Intl.NumberFormat( locale, {
-			style: 'currency',
-			currency: safeCurrencyCode,
-			minimumFractionDigits: precision,
-			maximumFractionDigits: precision,
-		} ).format( amount );
-	} catch {
-		return new Intl.NumberFormat( 'en-US', {
-			style: 'currency',
-			currency: 'USD',
-			minimumFractionDigits: 2,
-			maximumFractionDigits: 2,
-		} ).format( amount );
-	}
-}
diff --git a/packages/js/experimental-products-app/src/variation-view/fields/utils/price.ts b/packages/js/experimental-products-app/src/variation-view/fields/utils/price.ts
deleted file mode 100644
index 2afa8ddd4b7..00000000000
--- a/packages/js/experimental-products-app/src/variation-view/fields/utils/price.ts
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-
-export const getLocalDefaultSaleStart = () => {
-	const tomorrow = new Date();
-	tomorrow.setDate( tomorrow.getDate() + 1 );
-	tomorrow.setHours( 7, 0, 0, 0 );
-	tomorrow.setMinutes( tomorrow.getMinutes() - tomorrow.getTimezoneOffset() );
-	return tomorrow.toISOString().slice( 0, 16 );
-};
-
-export const toNumberOrNaN = ( value: unknown ) => {
-	if ( typeof value === 'number' ) {
-		return value;
-	}
-
-	if ( typeof value === 'string' && value.trim() !== '' ) {
-		return Number.parseFloat( value );
-	}
-
-	return Number.NaN;
-};
-
-export function validatePrice( value: unknown ): string | null {
-	if (
-		value === undefined ||
-		value === null ||
-		( typeof value === 'string' && value.trim() === '' )
-	) {
-		return null;
-	}
-
-	const parsed = toNumberOrNaN( value );
-
-	if ( Number.isNaN( parsed ) ) {
-		return __( 'Please enter a valid price.', 'woocommerce' );
-	}
-
-	if ( parsed < 0 ) {
-		return __( 'Price must not be negative.', 'woocommerce' );
-	}
-
-	return null;
-}
diff --git a/packages/js/experimental-products-app/src/variation-view/fields/variation_active/field.tsx b/packages/js/experimental-products-app/src/variation-view/fields/variation_active/field.tsx
deleted file mode 100644
index 030699da6c8..00000000000
--- a/packages/js/experimental-products-app/src/variation-view/fields/variation_active/field.tsx
+++ /dev/null
@@ -1,125 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-import { Badge, SelectControl } from '@wordpress/ui';
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord, ProductStatus } from '../types';
-
-type VariationActiveValue = 'active' | 'inactive';
-
-const ACTIVE_VALUE: VariationActiveValue = 'active';
-const INACTIVE_VALUE: VariationActiveValue = 'inactive';
-
-function isVariationActiveValue(
-	value: unknown
-): value is VariationActiveValue {
-	return value === ACTIVE_VALUE || value === INACTIVE_VALUE;
-}
-
-function hasPrice( item: Pick< ProductEntityRecord, 'price' > ) {
-	return item.price !== undefined && item.price !== null && item.price !== '';
-}
-
-export function isVariationActive(
-	item: Pick< ProductEntityRecord, 'price' | 'status' >
-) {
-	return item.status === 'publish' && hasPrice( item );
-}
-
-export function getVariationActiveValue(
-	item: Pick< ProductEntityRecord, 'price' | 'status' >
-): VariationActiveValue {
-	return isVariationActive( item ) ? ACTIVE_VALUE : INACTIVE_VALUE;
-}
-
-function getVariationActiveFormValue(
-	data: ProductEntityRecord & Record< string, unknown >
-): VariationActiveValue | undefined {
-	if ( isVariationActiveValue( data.variation_active ) ) {
-		return data.variation_active;
-	}
-
-	return getVariationActiveValue( data );
-}
-
-function getVariationActiveStatus(
-	value: VariationActiveValue
-): ProductStatus {
-	return value === ACTIVE_VALUE ? 'publish' : 'private';
-}
-
-export function getVariationActiveLabel( value: VariationActiveValue ) {
-	return value === ACTIVE_VALUE
-		? __( 'Active', 'woocommerce' )
-		: __( 'Inactive', 'woocommerce' );
-}
-
-export function VariationActiveBadge( {
-	value,
-}: {
-	value: VariationActiveValue;
-} ) {
-	return value === ACTIVE_VALUE ? (
-		<Badge intent="stable">{ getVariationActiveLabel( value ) }</Badge>
-	) : (
-		<Badge intent="draft">{ getVariationActiveLabel( value ) }</Badge>
-	);
-}
-
-const fieldDefinition = {
-	type: 'text',
-	label: __( 'Status', 'woocommerce' ),
-	enableSorting: false,
-	filterBy: false,
-	elements: [
-		{ value: ACTIVE_VALUE, label: __( 'Active', 'woocommerce' ) },
-		{ value: INACTIVE_VALUE, label: __( 'Inactive', 'woocommerce' ) },
-	],
-} satisfies Partial< Field< ProductEntityRecord > >;
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	...fieldDefinition,
-	getValue: ( { item } ) => getVariationActiveValue( item ),
-	render: ( { item }: { item: ProductEntityRecord } ) => (
-		<VariationActiveBadge value={ getVariationActiveValue( item ) } />
-	),
-	Edit: ( { data, onChange, field } ) => {
-		const options = field.elements ?? [];
-		const formData = data as ProductEntityRecord &
-			Record< string, unknown >;
-		const formValue =
-			field.placeholder &&
-			! isVariationActiveValue( formData.variation_active )
-				? undefined
-				: getVariationActiveFormValue( formData );
-		const selectedOption = options.find(
-			( option ) => option.value === formValue
-		);
-
-		return (
-			<SelectControl
-				label={ field.label }
-				placeholder={ field.placeholder }
-				value={ selectedOption }
-				items={ options }
-				onValueChange={ ( option ) => {
-					const selectedValue = option?.value;
-
-					if (
-						selectedValue === ACTIVE_VALUE ||
-						selectedValue === INACTIVE_VALUE
-					) {
-						onChange( {
-							status: getVariationActiveStatus( selectedValue ),
-						} );
-					}
-				} }
-			/>
-		);
-	},
-};
diff --git a/packages/js/experimental-products-app/src/variation-view/fields/virtual/field.tsx b/packages/js/experimental-products-app/src/variation-view/fields/virtual/field.tsx
deleted file mode 100644
index 6e433858848..00000000000
--- a/packages/js/experimental-products-app/src/variation-view/fields/virtual/field.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	type: 'boolean',
-	label: __( 'Virtual', 'woocommerce' ),
-	enableSorting: false,
-	enableHiding: false,
-	filterBy: false,
-	getValue: ( { item } ) => item.virtual ?? false,
-	Edit: 'checkbox',
-};
diff --git a/packages/js/experimental-products-app/src/variation-view/fields/weight/field.tsx b/packages/js/experimental-products-app/src/variation-view/fields/weight/field.tsx
deleted file mode 100644
index 923cfc1f007..00000000000
--- a/packages/js/experimental-products-app/src/variation-view/fields/weight/field.tsx
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-import {
-	createVariationWeightField,
-	isDimensionVisible,
-} from '../components/dimension';
-
-const fieldDefinition = {
-	type: 'text',
-	label: __( 'Weight', 'woocommerce' ),
-	enableSorting: false,
-	enableHiding: false,
-	filterBy: false,
-} satisfies Partial< Field< ProductEntityRecord > >;
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	...fieldDefinition,
-	isVisible: isDimensionVisible,
-	...createVariationWeightField(),
-};
diff --git a/packages/js/experimental-products-app/src/variation-view/fields/width/field.tsx b/packages/js/experimental-products-app/src/variation-view/fields/width/field.tsx
deleted file mode 100644
index 1e1fe2706e9..00000000000
--- a/packages/js/experimental-products-app/src/variation-view/fields/width/field.tsx
+++ /dev/null
@@ -1,24 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-import type { Field } from '@wordpress/dataviews';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../types';
-import { createVariationDimensionField } from '../components/dimension';
-
-const fieldDefinition = {
-	type: 'text',
-	label: __( 'Width', 'woocommerce' ),
-	enableSorting: false,
-	enableHiding: false,
-	filterBy: false,
-} satisfies Partial< Field< ProductEntityRecord > >;
-
-export const fieldExtensions: Partial< Field< ProductEntityRecord > > = {
-	...fieldDefinition,
-	...createVariationDimensionField( 'width' ),
-};
diff --git a/packages/js/experimental-products-app/src/variation-view/index.tsx b/packages/js/experimental-products-app/src/variation-view/index.tsx
deleted file mode 100644
index 8a48e27b080..00000000000
--- a/packages/js/experimental-products-app/src/variation-view/index.tsx
+++ /dev/null
@@ -1,369 +0,0 @@
-/**
- * External dependencies
- */
-import { DataViews, type Action, type View } from '@wordpress/dataviews';
-import { DropdownMenu, MenuGroup, MenuItem } from '@wordpress/components';
-import { Stack } from '@wordpress/ui';
-import { __ } from '@wordpress/i18n';
-import { moreVertical } from '@wordpress/icons';
-import { useMemo, useState, useCallback, useEffect } from '@wordpress/element';
-import { useSelect } from '@wordpress/data';
-import { store as coreStore } from '@wordpress/core-data';
-import { privateApis as routerPrivateApis } from '@wordpress/router';
-
-/**
- * Internal dependencies
- */
-import { DEFAULT_LAYOUTS, DEFAULT_VIEW, PAGE_SIZE } from './constants';
-import { buildVariationViewQuery } from './query';
-import { normalizeVariation } from './normalization';
-import { variationFields } from './fields';
-import type { VariationEntityRecord } from './types';
-import { VariationEditDrawer } from './edit/drawer';
-import { getProductWithUpdatedVariation } from '../product-edit/utils';
-import type { ProductEntityRecord } from '../fields/types';
-import { unlock } from '../lock-unlock';
-import { VariationAttributes } from './variation-attributes';
-import {
-	getProductListNavigationPath,
-	getSelectionFromPostId,
-} from '../product-list/utils';
-
-export { ProductAttributes } from './variation-attributes';
-
-const EMPTY_ARRAY: VariationEntityRecord[] = [];
-const EMPTY_PRODUCT_RECORDS: ProductEntityRecord[] = [];
-const { useHistory, useLocation } = unlock( routerPrivateApis );
-
-type VariationViewProps = {
-	productId: number;
-};
-
-type VariationMoreActionsProps = {
-	disabled: boolean;
-	onEditSelected: () => void;
-};
-
-function variationMatchesSearch(
-	variation: VariationEntityRecord,
-	search: string
-) {
-	const value = search.trim().toLowerCase();
-
-	if ( ! value ) {
-		return true;
-	}
-
-	const searchableValues = [
-		variation.name,
-		variation.sku,
-		...( variation.attributes?.map( ( attribute ) => attribute.option ) ??
-			[] ),
-	];
-
-	return searchableValues.some(
-		( searchableValue ) => searchableValue?.toLowerCase().includes( value )
-	);
-}
-
-function sortVariations( variations: VariationEntityRecord[], view: View ) {
-	const { field, direction = 'asc' } = view.sort ?? {};
-
-	if ( ! field ) {
-		return variations;
-	}
-
-	const directionModifier = direction === 'desc' ? -1 : 1;
-
-	return [ ...variations ].sort( ( first, second ) => {
-		if ( field === 'name' ) {
-			return first.name.localeCompare( second.name ) * directionModifier;
-		}
-
-		return (
-			( ( first.menu_order ?? 0 ) - ( second.menu_order ?? 0 ) ) *
-			directionModifier
-		);
-	} );
-}
-
-function VariationMoreActions( {
-	disabled,
-	onEditSelected,
-}: VariationMoreActionsProps ) {
-	return (
-		<DropdownMenu
-			icon={ moreVertical }
-			label={ __( 'More actions', 'woocommerce' ) }
-			className="woocommerce-variation-view__more-actions"
-			popoverProps={ {
-				placement: 'bottom-end',
-			} }
-			toggleProps={ {
-				size: 'compact',
-			} }
-		>
-			{ ( { onClose } ) => (
-				<MenuGroup>
-					<MenuItem
-						disabled={ disabled }
-						onClick={ () => {
-							onEditSelected();
-							onClose();
-						} }
-					>
-						{ __( 'Edit', 'woocommerce' ) }
-					</MenuItem>
-					<MenuItem
-						disabled={ disabled }
-						isDestructive
-						onClick={ onClose }
-					>
-						{ __( 'Delete variation', 'woocommerce' ) }
-					</MenuItem>
-				</MenuGroup>
-			) }
-		</DropdownMenu>
-	);
-}
-
-export function VariationView( { productId }: VariationViewProps ) {
-	const { navigate } = useHistory();
-	const location = useLocation();
-	const currentQuery = useMemo(
-		() =>
-			( location.query || {} ) as {
-				postId?: string;
-				quickEdit?: string;
-			},
-		[ location.query ]
-	);
-	const { postId } = currentQuery;
-	const [ view, setView ] = useState< View >( DEFAULT_VIEW );
-	const [ selection, setSelection ] = useState( () =>
-		getSelectionFromPostId( postId )
-	);
-	const showQuickEdit = currentQuery.quickEdit === 'true';
-
-	const query = useMemo(
-		() => buildVariationViewQuery( productId ),
-		[ productId ]
-	);
-
-	const { records, parentProduct, hasResolved } = useSelect(
-		( select ) => {
-			const coreSelect = select( coreStore );
-			const resolutionArgs = [ 'root', 'product', query ];
-			const products = coreSelect.getEntityRecords< ProductEntityRecord >(
-				'root',
-				'product',
-				query
-			);
-
-			return {
-				hasResolved: coreSelect.hasFinishedResolution(
-					'getEntityRecords',
-					resolutionArgs
-				),
-				parentProduct: products?.[ 0 ],
-				records: products
-					? products[ 0 ]?._embedded?.variations ??
-					  EMPTY_PRODUCT_RECORDS
-					: undefined,
-			};
-		},
-		[ query ]
-	);
-
-	const allVariations = useMemo< VariationEntityRecord[] >(
-		() => records?.map( normalizeVariation ) || EMPTY_ARRAY,
-		[ records ]
-	);
-	const filteredVariations = useMemo(
-		() =>
-			sortVariations(
-				allVariations.filter( ( variation ) =>
-					variationMatchesSearch( variation, view.search ?? '' )
-				),
-				view
-			),
-		[ allVariations, view ]
-	);
-	const productWithVariations = useMemo( () => {
-		if ( ! parentProduct ) {
-			return undefined;
-		}
-
-		return allVariations.reduce< ProductEntityRecord >(
-			( product, variation ) =>
-				getProductWithUpdatedVariation(
-					product,
-					variation as unknown as ProductEntityRecord
-				),
-			parentProduct
-		);
-	}, [ allVariations, parentProduct ] );
-	const perPage = view.perPage || PAGE_SIZE;
-	const variations = useMemo< VariationEntityRecord[] >( () => {
-		const page = view.page ?? 1;
-		const offset = ( page - 1 ) * perPage;
-
-		return filteredVariations.slice( offset, offset + perPage );
-	}, [ filteredVariations, perPage, view.page ] );
-
-	const paginationInfo = useMemo(
-		() => ( {
-			totalItems: filteredVariations.length,
-			totalPages: Math.ceil( filteredVariations.length / perPage ),
-		} ),
-		[ filteredVariations.length, perPage ]
-	);
-
-	useEffect( () => {
-		setSelection( getSelectionFromPostId( postId ) );
-	}, [ postId ] );
-
-	const onChangeSelection = useCallback(
-		( items: string[] ) => {
-			setSelection( items );
-
-			const nextQuery = { ...currentQuery };
-
-			if ( items.length > 0 ) {
-				nextQuery.postId = items.join( ',' );
-			} else {
-				nextQuery.postId = undefined;
-			}
-
-			navigate(
-				getProductListNavigationPath( location.path, nextQuery )
-			);
-		},
-		[ currentQuery, location.path, navigate ]
-	);
-
-	const handleEditSelectedVariations = useCallback(
-		( selectedIds: string[] ) => {
-			if ( selectedIds.length === 0 ) {
-				return;
-			}
-
-			navigate(
-				getProductListNavigationPath( location.path, {
-					...currentQuery,
-					postId: selectedIds.join( ',' ),
-					quickEdit: 'true',
-				} )
-			);
-		},
-		[ currentQuery, location.path, navigate ]
-	);
-
-	const handleEditVariation = useCallback(
-		( variation: VariationEntityRecord ) => {
-			handleEditSelectedVariations( [ String( variation.id ) ] );
-		},
-		[ handleEditSelectedVariations ]
-	);
-
-	const handleCloseDrawer = useCallback( () => {
-		navigate(
-			getProductListNavigationPath( location.path, {
-				...currentQuery,
-				quickEdit: undefined,
-			} )
-		);
-	}, [ currentQuery, location.path, navigate ] );
-
-	const actions: Action< VariationEntityRecord >[] = useMemo(
-		() => [
-			{
-				id: 'edit',
-				label: __( 'Edit', 'woocommerce' ),
-				isPrimary: true,
-				supportsBulk: true,
-				callback: ( items ) =>
-					handleEditSelectedVariations(
-						items.map( ( item ) => String( item.id ) )
-					),
-			},
-			{
-				id: 'delete-variation',
-				label: __( 'Delete variation', 'woocommerce' ),
-				supportsBulk: true,
-				callback: () => {},
-			},
-		],
-		[ handleEditSelectedVariations ]
-	);
-
-	return (
-		<div className="woocommerce-variation-view">
-			<VariationAttributes productId={ productId } />
-			<h3 className="woocommerce-variation-view__title">
-				{ __( 'Variations', 'woocommerce' ) }
-			</h3>
-			<DataViews
-				data={ variations }
-				fields={ variationFields }
-				view={ view }
-				onClickItem={ handleEditVariation }
-				onChangeView={ setView }
-				isLoading={ ! hasResolved }
-				paginationInfo={ paginationInfo }
-				getItemId={ ( item: VariationEntityRecord ) =>
-					String( item.id )
-				}
-				defaultLayouts={ DEFAULT_LAYOUTS }
-				actions={ actions }
-				selection={ selection }
-				onChangeSelection={ onChangeSelection }
-			>
-				<Stack
-					direction="row"
-					align="center"
-					justify="space-between"
-					gap="sm"
-					className="woocommerce-variation-view__toolbar"
-				>
-					<Stack
-						direction="row"
-						align="center"
-						gap="xs"
-						className="woocommerce-variation-view__toolbar-search"
-					>
-						<DataViews.Search
-							label={ __( 'Search variations', 'woocommerce' ) }
-						/>
-						<DataViews.FiltersToggle />
-					</Stack>
-					<Stack
-						direction="row"
-						align="center"
-						gap="xs"
-						className="woocommerce-variation-view__toolbar-actions"
-					>
-						<DataViews.ViewConfig />
-						<VariationMoreActions
-							disabled={ selection.length === 0 }
-							onEditSelected={ () =>
-								handleEditSelectedVariations( selection )
-							}
-						/>
-					</Stack>
-				</Stack>
-				<DataViews.FiltersToggled className="woocommerce-variation-view__filters" />
-				<DataViews.Layout />
-				<DataViews.Footer />
-			</DataViews>
-			{ productWithVariations && (
-				<VariationEditDrawer
-					products={ [ productWithVariations ] }
-					isOpen={ showQuickEdit }
-					productId={ productId }
-					onClose={ handleCloseDrawer }
-				/>
-			) }
-		</div>
-	);
-}
diff --git a/packages/js/experimental-products-app/src/variation-view/normalization.test.ts b/packages/js/experimental-products-app/src/variation-view/normalization.test.ts
deleted file mode 100644
index c352e43d9d5..00000000000
--- a/packages/js/experimental-products-app/src/variation-view/normalization.test.ts
+++ /dev/null
@@ -1,89 +0,0 @@
-/**
- * External dependencies
- */
-import type { ProductVariation } from '@woocommerce/data';
-
-/**
- * Internal dependencies
- */
-import { normalizeVariation } from './normalization';
-
-describe( 'normalizeVariation', () => {
-	it( 'maps variation image and product fields for reusable field renderers', () => {
-		const variation = {
-			id: 11,
-			parent_id: 99,
-			name: '',
-			attributes: [
-				{
-					id: 1,
-					name: 'Color',
-					slug: 'pa_color',
-					option: 'Blue',
-				},
-			],
-			image: {
-				id: 5,
-				src: 'https://example.com/blue.jpg',
-				name: 'Blue image',
-				alt: 'Blue',
-			},
-			manage_stock: 'parent',
-		} as ProductVariation;
-
-		const normalized = normalizeVariation( variation );
-
-		expect( normalized.name ).toBe( 'Blue' );
-		expect( normalized.type ).toBe( 'variation' );
-		expect( normalized.categories ).toEqual( [] );
-		expect( normalized.tags ).toEqual( [] );
-		expect( normalized.manage_stock ).toBe( false );
-		expect( normalized.images ).toEqual( [
-			expect.objectContaining( {
-				id: 5,
-				src: 'https://example.com/blue.jpg',
-				alt: 'Blue',
-				name: 'Blue image',
-			} ),
-		] );
-	} );
-
-	it( 'falls back to the variation ID when there are no attributes', () => {
-		const normalized = normalizeVariation( {
-			id: 12,
-			parent_id: 99,
-			name: '',
-			attributes: [],
-			manage_stock: false,
-		} as unknown as ProductVariation );
-
-		expect( normalized.name ).toBe( 'Variation #12' );
-	} );
-
-	it( 'keeps product-style images from embedded variations', () => {
-		const images = [
-			{
-				id: 6,
-				src: 'https://example.com/red.jpg',
-				alt: 'Red',
-				name: 'Red image',
-				thumbnail: 'https://example.com/red-thumbnail.jpg',
-				date_created: '',
-				date_created_gmt: '',
-				date_modified: '',
-				date_modified_gmt: '',
-			},
-		];
-
-		const normalized = normalizeVariation( {
-			id: 13,
-			parent_id: 99,
-			name: 'Red',
-			attributes: [],
-			images,
-			manage_stock: true,
-		} as unknown as ProductVariation );
-
-		expect( normalized.images ).toBe( images );
-	} );
-} );
diff --git a/packages/js/experimental-products-app/src/variation-view/normalization.ts b/packages/js/experimental-products-app/src/variation-view/normalization.ts
deleted file mode 100644
index 534490b67c2..00000000000
--- a/packages/js/experimental-products-app/src/variation-view/normalization.ts
+++ /dev/null
@@ -1,87 +0,0 @@
-/**
- * External dependencies
- */
-import type { ProductVariation } from '@woocommerce/data';
-import { __, sprintf } from '@wordpress/i18n';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../fields/types';
-import type { VariationEntityRecord } from './types';
-
-type VariationSource = Pick< ProductVariation, 'id' > & {
-	attributes?: Array< {
-		option?: string;
-		options?: string[];
-	} >;
-	categories?: ProductEntityRecord[ 'categories' ];
-	image?: ProductVariation[ 'image' ] | null;
-	images?: ProductEntityRecord[ 'images' ];
-	manage_stock?: ProductVariation[ 'manage_stock' ];
-	name?: string;
-	parent_id?: number;
-	slug?: string;
-	tags?: ProductEntityRecord[ 'tags' ];
-};
-
-function getVariationName( variation: VariationSource ) {
-	if ( variation.name ) {
-		return variation.name;
-	}
-
-	const attributes = variation.attributes ?? [];
-
-	if ( attributes.length > 0 ) {
-		return attributes
-			.flatMap( ( attr ) => attr.option ?? attr.options ?? [] )
-			.join( ', ' );
-	}
-
-	return sprintf(
-		/* translators: %d: variation ID. */
-		__( 'Variation #%d', 'woocommerce' ),
-		variation.id
-	);
-}
-
-function getVariationImages(
-	variation: VariationSource
-): ProductEntityRecord[ 'images' ] {
-	if ( variation.images ) {
-		return variation.images;
-	}
-
-	if ( ! variation.image ) {
-		return [];
-	}
-
-	return [
-		{
-			id: variation.image.id,
-			src: variation.image.src,
-			alt: variation.image.alt,
-			name: variation.image.name,
-			thumbnail: variation.image.src,
-			date_created: variation.image.date_created || '',
-			date_created_gmt: variation.image.date_created_gmt || '',
-			date_modified: variation.image.date_modified || '',
-			date_modified_gmt: variation.image.date_modified_gmt || '',
-		},
-	];
-}
-
-export function normalizeVariation(
-	variation: VariationSource
-): VariationEntityRecord {
-	return {
-		...variation,
-		categories: variation.categories ?? [],
-		tags: variation.tags ?? [],
-		images: getVariationImages( variation ),
-		name: getVariationName( variation ),
-		slug: variation.slug ?? String( variation.id ),
-		type: 'variation',
-		manage_stock: variation.manage_stock === true,
-	} as unknown as VariationEntityRecord;
-}
diff --git a/packages/js/experimental-products-app/src/variation-view/query.test.ts b/packages/js/experimental-products-app/src/variation-view/query.test.ts
deleted file mode 100644
index ec3596dc934..00000000000
--- a/packages/js/experimental-products-app/src/variation-view/query.test.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-/**
- * Internal dependencies
- */
-import { buildVariationViewQuery } from './query';
-
-describe( 'buildVariationViewQuery', () => {
-	it( 'uses the product list query to fetch the parent product with embedded variations', () => {
-		const query = buildVariationViewQuery( 99 );
-
-		expect( query ).toEqual(
-			expect.objectContaining( {
-				_embed: 1,
-				include: [ 99 ],
-				page: 1,
-				per_page: 1,
-			} )
-		);
-	} );
-} );
diff --git a/packages/js/experimental-products-app/src/variation-view/query.ts b/packages/js/experimental-products-app/src/variation-view/query.ts
deleted file mode 100644
index f4bc126be1d..00000000000
--- a/packages/js/experimental-products-app/src/variation-view/query.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-/**
- * Internal dependencies
- */
-import { DEFAULT_VIEW as DEFAULT_PRODUCT_LIST_VIEW } from '../product-list/constants';
-import {
-	buildProductListQuery,
-	type ProductListQuery,
-} from '../product-list/query';
-
-export type VariationViewQuery = ProductListQuery & {
-	include: number[];
-};
-
-export function buildVariationViewQuery(
-	productId: number
-): VariationViewQuery {
-	return {
-		...buildProductListQuery( DEFAULT_PRODUCT_LIST_VIEW ),
-		include: [ productId ],
-		page: 1,
-		per_page: 1,
-	};
-}
diff --git a/packages/js/experimental-products-app/src/variation-view/style.scss b/packages/js/experimental-products-app/src/variation-view/style.scss
deleted file mode 100644
index 8e66717096d..00000000000
--- a/packages/js/experimental-products-app/src/variation-view/style.scss
+++ /dev/null
@@ -1,193 +0,0 @@
-@use "@wordpress/base-styles/colors";
-
-// overflow: hidden on .panel-wrap creates a scroll container that prevents
-// position: sticky on .dataviews-footer from working relative to the viewport.
-// overflow: clip preserves the float-clearfix BFC without creating a scroll
-// container, so the footer can stick to the browser bottom.
-#woocommerce-product-data .panel-wrap:has(#woocommerce-variations-classic-root),
-#woocommerce-product-data .panel-wrap:has(#woocommerce-product-attributes-classic-root) {
-	overflow: clip;
-}
-
-.woocommerce-variation-attributes {
-	&--has-separator {
-		border-bottom: 1px solid colors.$gray-100;
-	}
-
-	&__notice.components-notice {
-		margin: 32px 16px 16px;
-		border-left-color: var(--wpds-color-stroke-surface-info-strong);
-		background: linear-gradient(
-			90deg,
-			var(--wpds-color-bg-surface-info) 0%,
-			var(--wpds-color-bg-surface-info-weak) 100%
-		);
-		color: var(--wpds-color-fg-content-neutral);
-
-		a {
-			color: var(--wpds-color-fg-interactive-brand);
-		}
-
-		.components-notice__dismiss {
-			color: var(--wpds-color-fg-content-neutral-weak);
-		}
-	}
-
-	&__header {
-		padding: 16px 24px;
-	}
-
-	&__title {
-		margin: 0;
-		color: var(--wpds-color-fg-content-neutral);
-		font-size: 15px;
-		font-weight: 600;
-		line-height: 20px;
-	}
-
-	&__title-group {
-		min-width: 0;
-	}
-
-	&__help {
-		display: inline-flex;
-		align-items: center;
-		justify-content: center;
-		color: var(--wpds-color-fg-content-neutral-weak);
-		cursor: help;
-		outline: none;
-
-		&:hover,
-		&:focus-visible {
-			color: var(--wpds-color-fg-content-neutral);
-		}
-
-		svg {
-			fill: currentColor;
-		}
-	}
-
-	&__body {
-		padding: 0;
-	}
-
-	&__pill-list {
-		min-width: 0;
-	}
-
-	&__pill {
-		border: 1px solid var(--wpds-color-stroke-surface-neutral);
-		border-radius: 8px;
-		background: var(--wpds-color-bg-surface-neutral-strong);
-		color: var(--wpds-color-fg-content-neutral);
-		font-size: 13px;
-		line-height: 20px;
-	}
-
-	&__muted {
-		color: var(--wpds-color-fg-content-neutral-weak);
-	}
-
-	&__global-link {
-		display: inline-flex;
-		align-items: center;
-		gap: 3px;
-		color: inherit;
-		text-decoration: none;
-
-		&:hover {
-			color: var(--wpds-color-fg-interactive-brand);
-			text-decoration: underline;
-		}
-
-		svg {
-			flex-shrink: 0;
-			opacity: 0.6;
-		}
-
-		&:hover svg {
-			opacity: 1;
-		}
-	}
-
-}
-
-.woocommerce-product-list__filters {
-	padding: var(--wpds-dimension-padding-sm, 8px) var(--wpds-dimension-padding-2xl, 24px);
-}
-
-.woocommerce-variation-view {
-	&__title {
-		margin: 0;
-		padding: 16px 24px 0;
-		color: var(--wpds-color-fg-content-neutral);
-		font-size: 15px;
-		font-weight: 600;
-		line-height: 20px;
-	}
-
-	&__toolbar {
-		padding: 16px 24px 24px;
-	}
-
-	&__toolbar-search,
-	&__toolbar-actions {
-		min-width: 0;
-	}
-
-	&__filters {
-		padding: 0 24px 16px;
-	}
-
-	&__variation-options--empty {
-		color: var(--wpds-color-fg-content-neutral-weak);
-	}
-
-	&__variation-options-cell {
-		position: relative;
-		width: 100%;
-		min-width: 0;
-	}
-
-	&__variation-options-row {
-		flex-wrap: nowrap;
-		overflow: hidden;
-		min-width: 0;
-	}
-
-	&__variation-options-measure {
-		position: absolute;
-		inset-block-start: 0;
-		inset-inline-start: 0;
-		visibility: hidden;
-		pointer-events: none;
-		height: 0;
-		overflow: hidden;
-		white-space: nowrap;
-	}
-}
-
-.woocommerce-variation-name {
-	display: inline-flex;
-	align-items: center;
-	gap: var(--wpds-dimension-padding-xs, 8px);
-	min-width: 0;
-}
-
-.woocommerce-variation-name__label {
-	overflow: hidden;
-	text-overflow: ellipsis;
-	white-space: nowrap;
-}
-
-.woocommerce-variation-status-option {
-	display: flex;
-	flex-direction: column;
-	gap: var(--wpds-dimension-padding-3xs, 2px);
-}
-
-.woocommerce-variation-status-option__description {
-	color: var(--wpds-color-fg-content-neutral-weak, #757575);
-	font-size: var(--wpds-typography-font-size-sm, 12px);
-	line-height: var(--wpds-typography-line-height-sm, 16px);
-}
diff --git a/packages/js/experimental-products-app/src/variation-view/types.ts b/packages/js/experimental-products-app/src/variation-view/types.ts
deleted file mode 100644
index 9cb933bed54..00000000000
--- a/packages/js/experimental-products-app/src/variation-view/types.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-/**
- * External dependencies
- */
-import type { ProductVariation } from '@woocommerce/data';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../fields/types';
-
-export type VariationEntityRecord = Omit<
-	ProductEntityRecord,
-	'attributes' | 'images' | 'manage_stock' | 'type'
-> &
-	Omit< ProductVariation, 'manage_stock' | 'type' > & {
-		attributes: ProductVariation[ 'attributes' ];
-		images: ProductEntityRecord[ 'images' ];
-		image?: ProductVariation[ 'image' ] | null;
-		manage_stock: boolean;
-		parent_id: number;
-		slug: string;
-		type: 'variation';
-	};
diff --git a/packages/js/experimental-products-app/src/variation-view/variation-attributes/attribute-rows.test.ts b/packages/js/experimental-products-app/src/variation-view/variation-attributes/attribute-rows.test.ts
deleted file mode 100644
index c53a36809fd..00000000000
--- a/packages/js/experimental-products-app/src/variation-view/variation-attributes/attribute-rows.test.ts
+++ /dev/null
@@ -1,209 +0,0 @@
-/**
- * Internal dependencies
- */
-import {
-	getProductAttributeRows,
-	getVariationAttributeRows,
-} from './attribute-rows';
-import type { ProductEntityRecord } from '../../fields/types';
-
-function getProduct(
-	overrides: Partial< ProductEntityRecord >
-): ProductEntityRecord {
-	return {
-		attributes: [],
-		default_attributes: [],
-		...overrides,
-	} as ProductEntityRecord;
-}
-
-describe( 'getVariationAttributeRows', () => {
-	it( 'returns only attributes used for variations in product order', () => {
-		const rows = getVariationAttributeRows(
-			getProduct( {
-				attributes: [
-					{
-						id: 0,
-						name: 'Pattern',
-						slug: 'pattern',
-						options: [ 'Dots' ],
-						position: 3,
-						variation: false,
-						visible: true,
-					},
-					{
-						id: 2,
-						name: 'Color',
-						slug: 'pa_color',
-						options: [ 'Yellow', 'Blue' ],
-						position: 2,
-						variation: true,
-						visible: true,
-					},
-					{
-						id: 1,
-						name: 'Theme',
-						slug: 'pa_theme',
-						options: [ 'Unicorn', 'Pirate' ],
-						position: 1,
-						variation: true,
-						visible: true,
-					},
-				],
-			} )
-		);
-
-		expect( rows ).toEqual( [
-			expect.objectContaining( {
-				attributeId: 1,
-				id: 'pa_theme',
-				isGlobal: true,
-				name: 'Theme',
-				slug: 'pa_theme',
-				values: [ 'Unicorn', 'Pirate' ],
-			} ),
-			expect.objectContaining( {
-				attributeId: 2,
-				id: 'pa_color',
-				isGlobal: true,
-				name: 'Color',
-				slug: 'pa_color',
-				values: [ 'Yellow', 'Blue' ],
-			} ),
-		] );
-	} );
-
-	it( 'maps default values by attribute ID, name, and slug', () => {
-		const rows = getVariationAttributeRows(
-			getProduct( {
-				attributes: [
-					{
-						id: 10,
-						name: 'Theme',
-						slug: 'pa_theme',
-						options: [ 'Unicorn' ],
-						position: 1,
-						variation: true,
-						visible: true,
-					},
-					{
-						id: 0,
-						name: 'Material',
-						slug: 'material',
-						options: [ 'Cotton' ],
-						position: 2,
-						variation: true,
-						visible: true,
-					},
-					{
-						id: 11,
-						name: 'Color',
-						slug: 'pa_color',
-						options: [ 'Yellow' ],
-						position: 3,
-						variation: true,
-						visible: true,
-					},
-				],
-				default_attributes: [
-					{ id: 10, name: 'Theme', option: 'Unicorn' },
-					{ id: 0, name: 'Material', option: 'Cotton' },
-					{ id: 0, name: 'pa_color', option: 'Yellow' },
-				],
-			} )
-		);
-
-		expect( rows.map( ( row ) => row.defaultValue ) ).toEqual( [
-			'Unicorn',
-			'Cotton',
-			'Yellow',
-		] );
-	} );
-
-	it( 'marks custom attributes as local', () => {
-		const rows = getVariationAttributeRows(
-			getProduct( {
-				attributes: [
-					{
-						id: 0,
-						name: 'Material',
-						slug: 'material',
-						options: [ 'Cotton' ],
-						position: 1,
-						variation: true,
-						visible: true,
-					},
-				],
-			} )
-		);
-
-		expect( rows[ 0 ] ).toEqual(
-			expect.objectContaining( {
-				attributeId: 0,
-				id: 'material',
-				isGlobal: false,
-				name: 'Material',
-				slug: 'material',
-			} )
-		);
-	} );
-} );
-
-describe( 'getProductAttributeRows', () => {
-	it( 'returns only attributes not used for variations in product order', () => {
-		const rows = getProductAttributeRows(
-			getProduct( {
-				attributes: [
-					{
-						id: 2,
-						name: 'Color',
-						slug: 'pa_color',
-						options: [ 'Yellow', 'Blue' ],
-						position: 2,
-						variation: true,
-						visible: true,
-					},
-					{
-						id: 0,
-						name: 'Pattern',
-						slug: 'pattern',
-						options: [ 'Dots' ],
-						position: 3,
-						variation: false,
-						visible: true,
-					},
-					{
-						id: 1,
-						name: 'Material',
-						slug: 'pa_material',
-						options: [ 'Cotton' ],
-						position: 1,
-						variation: false,
-						visible: false,
-					},
-				],
-			} )
-		);
-
-		expect( rows ).toEqual( [
-			expect.objectContaining( {
-				attributeId: 1,
-				id: 'pa_material',
-				isGlobal: true,
-				isVisible: false,
-				name: 'Material',
-				slug: 'pa_material',
-				values: [ 'Cotton' ],
-			} ),
-			expect.objectContaining( {
-				attributeId: 0,
-				id: 'pattern',
-				isGlobal: false,
-				isVisible: true,
-				name: 'Pattern',
-				slug: 'pattern',
-				values: [ 'Dots' ],
-			} ),
-		] );
-	} );
-} );
diff --git a/packages/js/experimental-products-app/src/variation-view/variation-attributes/attribute-rows.ts b/packages/js/experimental-products-app/src/variation-view/variation-attributes/attribute-rows.ts
deleted file mode 100644
index 6b65eb16f23..00000000000
--- a/packages/js/experimental-products-app/src/variation-view/variation-attributes/attribute-rows.ts
+++ /dev/null
@@ -1,93 +0,0 @@
-/**
- * Internal dependencies
- */
-import type {
-	ProductEntityAttribute,
-	ProductEntityDefaultAttribute,
-	ProductEntityRecord,
-} from '../../fields/types';
-
-export type VariationAttributeRow = {
-	attributeId: number;
-	defaultValue: string;
-	id: string;
-	isGlobal: boolean;
-	isVisible: boolean;
-	name: string;
-	position: number;
-	slug: string;
-	values: string[];
-};
-
-type AttributeFilter = 'product' | 'variation';
-
-function getAttributeDefaultValue(
-	attribute: ProductEntityAttribute,
-	defaultAttributes: ProductEntityDefaultAttribute[]
-): string {
-	const matchingDefault = defaultAttributes.find( ( defaultAttribute ) => {
-		return (
-			( attribute.id > 0 && defaultAttribute.id === attribute.id ) ||
-			defaultAttribute.name === attribute.name ||
-			defaultAttribute.name === attribute.slug
-		);
-	} );
-
-	return matchingDefault?.option ?? '';
-}
-
-function getAttributeRows(
-	product:
-		| Pick< ProductEntityRecord, 'attributes' | 'default_attributes' >
-		| undefined,
-	filter: AttributeFilter
-): VariationAttributeRow[] {
-	if ( ! product?.attributes ) {
-		return [];
-	}
-
-	const defaultAttributes = product.default_attributes ?? [];
-	const isVariationAttribute = filter === 'variation';
-
-	return product.attributes
-		.map( ( attribute, index ) => ( {
-			attribute,
-			index,
-		} ) )
-		.filter(
-			( { attribute } ) =>
-				Boolean( attribute.variation ) === isVariationAttribute
-		)
-		.sort( ( first, second ) => {
-			return (
-				first.attribute.position - second.attribute.position ||
-				first.index - second.index
-			);
-		} )
-		.map( ( { attribute } ) => ( {
-			attributeId: attribute.id,
-			defaultValue: getAttributeDefaultValue(
-				attribute,
-				defaultAttributes
-			),
-			id: attribute.slug,
-			isGlobal: attribute.id > 0,
-			isVisible: Boolean( attribute.visible ),
-			name: attribute.name,
-			position: attribute.position,
-			slug: attribute.slug,
-			values: attribute.options ?? [],
-		} ) );
-}
-
-export function getProductAttributeRows(
-	product?: Pick< ProductEntityRecord, 'attributes' | 'default_attributes' >
-): VariationAttributeRow[] {
-	return getAttributeRows( product, 'product' );
-}
-
-export function getVariationAttributeRows(
-	product?: Pick< ProductEntityRecord, 'attributes' | 'default_attributes' >
-): VariationAttributeRow[] {
-	return getAttributeRows( product, 'variation' );
-}
diff --git a/packages/js/experimental-products-app/src/variation-view/variation-attributes/dataviews.tsx b/packages/js/experimental-products-app/src/variation-view/variation-attributes/dataviews.tsx
deleted file mode 100644
index f665be91ab5..00000000000
--- a/packages/js/experimental-products-app/src/variation-view/variation-attributes/dataviews.tsx
+++ /dev/null
@@ -1,205 +0,0 @@
-/**
- * External dependencies
- */
-import { DataViews, type View, type ViewTable } from '@wordpress/dataviews';
-import { Tooltip } from '@wordpress/components';
-import { useSelect } from '@wordpress/data';
-import { store as coreStore } from '@wordpress/core-data';
-import { useMemo, useState } from '@wordpress/element';
-import { __ } from '@wordpress/i18n';
-import { Button, Stack } from '@wordpress/ui';
-import { help, Icon } from '@wordpress/icons';
-
-/**
- * Internal dependencies
- */
-import type { ProductEntityRecord } from '../../fields/types';
-import { getAttributeTableFields, type AttributeTableColumn } from './fields';
-import type { VariationAttributeRow } from './attribute-rows';
-
-const EMPTY_ARRAY: VariationAttributeRow[] = [];
-const ATTRIBUTE_PAGE_SIZE = 50;
-const noop = () => undefined;
-
-type AttributeTableLayoutStyles = NonNullable<
-	ViewTable[ 'layout' ]
->[ 'styles' ];
-type AttributeRowGetter = (
-	product?: Pick< ProductEntityRecord, 'attributes' | 'default_attributes' >
-) => VariationAttributeRow[];
-
-function getAttributeTableView(
-	columns: AttributeTableColumn[],
-	styles: AttributeTableLayoutStyles
-): View {
-	return {
-		type: 'table',
-		page: 1,
-		perPage: ATTRIBUTE_PAGE_SIZE,
-		titleField: 'name',
-		fields: columns,
-		layout: {
-			styles,
-		},
-	};
-}
-
-export const DEFAULT_VARIATION_ATTRIBUTE_COLUMNS: AttributeTableColumn[] = [
-	'values',
-	'defaultValue',
-	'isGlobal',
-];
-
-export const DEFAULT_PRODUCT_ATTRIBUTE_COLUMNS: AttributeTableColumn[] = [
-	'values',
-	'isVisible',
-	'isGlobal',
-];
-
-export const DEFAULT_VARIATION_ATTRIBUTE_LAYOUT_STYLES = {
-	name: { width: '160px' },
-	values: { width: '100%' },
-	defaultValue: { width: '180px', minWidth: '180px' },
-	isGlobal: { width: '120px', minWidth: '120px' },
-};
-
-export const DEFAULT_PRODUCT_ATTRIBUTE_LAYOUT_STYLES = {
-	name: { width: '220px' },
-	values: { width: '100%' },
-	isVisible: { width: '240px', minWidth: '240px' },
-	isGlobal: { width: '120px', minWidth: '120px' },
-};
-
-type AttributeTableProps = {
-	columns: AttributeTableColumn[];
-	getRows: AttributeRowGetter;
-	hasSeparator?: boolean;
-	helpText: string;
-	hideWhenEmpty?: boolean;
-	nameLabel: string;
-	notice?: JSX.Element;
-	productId: number;
-	styles: AttributeTableLayoutStyles;
-	title: string;
-};
-
-export function AttributeTable( {
-	columns,
-	getRows,
-	hasSeparator = false,
-	helpText,
-	hideWhenEmpty = false,
-	nameLabel,
-	notice,
-	productId,
-	styles,
-	title,
-}: AttributeTableProps ) {
-	const [ view, setView ] = useState< View >( () =>
-		getAttributeTableView( columns, styles )
-	);
-	const fields = useMemo(
-		() => getAttributeTableFields( nameLabel ),
-		[ nameLabel ]
-	);
-	const { product, hasResolved } = useSelect(
-		( select ) => {
-			const coreSelect = select( coreStore );
-			const resolutionArgs = [ 'root', 'product', productId ];
-
-			return {
-				hasResolved: coreSelect.hasFinishedResolution(
-					'getEntityRecord',
-					resolutionArgs
-				),
-				product: coreSelect.getEditedEntityRecord(
-					'root',
-					'product',
-					productId
-				) as unknown as ProductEntityRecord | undefined,
-			};
-		},
-		[ productId ]
-	);
-
-	const rows = useMemo(
-		() => ( hasResolved ? getRows( product ) : EMPTY_ARRAY ),
-		[ getRows, hasResolved, product ]
-	);
-	const perPage = view.perPage || ATTRIBUTE_PAGE_SIZE;
-	const pageRows = useMemo< VariationAttributeRow[] >( () => {
-		const page = view.page ?? 1;
-		const offset = ( page - 1 ) * perPage;
-
-		return rows.slice( offset, offset + perPage );
-	}, [ perPage, rows, view.page ] );
-	const paginationInfo = useMemo(
-		() => ( {
-			totalItems: rows.length,
-			totalPages: Math.ceil( rows.length / perPage ),
-		} ),
-		[ perPage, rows.length ]
-	);
-
-	if ( hideWhenEmpty && hasResolved && rows.length === 0 ) {
-		return null;
-	}
-
-	return (
-		<section
-			className={
-				hasSeparator
-					? 'woocommerce-variation-attributes woocommerce-variation-attributes--has-separator'
-					: 'woocommerce-variation-attributes'
-			}
-		>
-			{ notice }
-			<Stack
-				direction="row"
-				align="center"
-				justify="space-between"
-				className="woocommerce-variation-attributes__header"
-			>
-				<Stack
-					direction="row"
-					align="center"
-					gap="xs"
-					className="woocommerce-variation-attributes__title-group"
-				>
-					<h3 className="woocommerce-variation-attributes__title">
-						{ title }
-					</h3>
-					<Tooltip text={ helpText }>
-						<span
-							className="woocommerce-variation-attributes__help"
-							tabIndex={ 0 }
-							aria-label={ __( 'Help', 'woocommerce' ) }
-						>
-							<Icon icon={ help } size={ 20 } />
-						</span>
-					</Tooltip>
-				</Stack>
-				<Button variant="outline" onClick={ noop }>
-					{ __( 'Edit', 'woocommerce' ) }
-				</Button>
-			</Stack>
-			<div className="woocommerce-variation-attributes__body">
-				<div className="woocommerce-variation-attributes__dataview">
-					<DataViews
-						data={ pageRows }
-						fields={ fields }
-						view={ view }
-						onChangeView={ setView }
-						paginationInfo={ paginationInfo }
-						defaultLayouts={ { table: {} } }
-						getItemId={ ( item ) => item.id }
-						search={ false }
-						isLoading={ ! hasResolved }
-					>
-						<DataViews.Layout />
-					</DataViews>
-				</div>
-			</div>
-		</section>
-	);
-}
diff --git a/packages/js/experimental-products-app/src/variation-view/variation-attributes/fields.tsx b/packages/js/experimental-products-app/src/variation-view/variation-attributes/fields.tsx
deleted file mode 100644
index 682ed0eb4fd..00000000000
--- a/packages/js/experimental-products-app/src/variation-view/variation-attributes/fields.tsx
+++ /dev/null
@@ -1,159 +0,0 @@
-/**
- * External dependencies
- */
-import type { Field } from '@wordpress/dataviews';
-import { Tooltip } from '@wordpress/components';
-import { addQueryArgs } from '@wordpress/url';
-import { getAdminLink } from '@woocommerce/settings';
-import { __ } from '@wordpress/i18n';
-import { Badge, Stack } from '@wordpress/ui';
-import { Icon, link as linkIcon } from '@wordpress/icons';
-
-/**
- * Internal dependencies
- */
-import type { VariationAttributeRow } from './attribute-rows';
-
-export type AttributeTableColumn =
-	| 'values'
-	| 'defaultValue'
-	| 'isVisible'
-	| 'isGlobal';
-
-function getGlobalAttributeTermsLink( attributeSlug: string ): string {
-	return getAdminLink(
-		addQueryArgs( 'edit-tags.php', {
-			taxonomy: attributeSlug,
-			post_type: 'product',
-		} )
-	);
-}
-
-function getBooleanLabel( value: boolean ) {
-	return value ? __( 'Yes', 'woocommerce' ) : __( 'No', 'woocommerce' );
-}
-
-function EmptyDefaultValue() {
-	return (
-		<span className="woocommerce-variation-attributes__muted">&mdash;</span>
-	);
-}
-
-function BooleanValue( { value }: { value: boolean } ) {
-	const label = getBooleanLabel( value );
-
-	if ( value ) {
-		return <>{ label }</>;
-	}
-
-	return (
-		<span className="woocommerce-variation-attributes__muted">
-			{ label }
-		</span>
-	);
-}
-
-function AttributeValuePills( { values }: { values: string[] } ) {
-	if ( values.length === 0 ) {
-		return <EmptyDefaultValue />;
-	}
-
-	return (
-		<Stack
-			direction="row"
-			gap="xs"
-			wrap="wrap"
-			className="woocommerce-variation-attributes__pill-list"
-		>
-			{ values.map( ( value ) => (
-				<Badge
-					key={ value }
-					intent="none"
-					className="woocommerce-variation-attributes__pill"
-				>
-					{ value }
-				</Badge>
-			) ) }
-		</Stack>
-	);
-}
-
-export function getAttributeTableFields(
-	nameLabel: string
-): Field< VariationAttributeRow >[] {
-	return [
-		{
-			id: 'name',
-			label: nameLabel,
-			enableHiding: false,
-			enableSorting: false,
-			enableGlobalSearch: false,
-			getValue: ( { item } ) => item.name,
-		},
-		{
-			id: 'values',
-			label: __( 'Values', 'woocommerce' ),
-			enableSorting: false,
-			enableGlobalSearch: false,
-			getValue: ( { item } ) => item.values.join( ' ' ),
-			render: ( { item } ) => (
-				<AttributeValuePills values={ item.values } />
-			),
-		},
-		{
-			id: 'defaultValue',
-			label: __( 'Default value', 'woocommerce' ),
-			enableSorting: false,
-			enableGlobalSearch: false,
-			getValue: ( { item } ) => item.defaultValue,
-			render: ( { item } ) =>
-				item.defaultValue ? (
-					<Badge
-						intent="none"
-						className="woocommerce-variation-attributes__pill"
-					>
-						{ item.defaultValue }
-					</Badge>
-				) : (
-					<EmptyDefaultValue />
-				),
-		},
-		{
-			id: 'isVisible',
-			label: __( 'Visible on product page', 'woocommerce' ),
-			enableSorting: false,
-			enableGlobalSearch: false,
-			getValue: ( { item } ) => getBooleanLabel( item.isVisible ),
-			render: ( { item } ) => <BooleanValue value={ item.isVisible } />,
-		},
-		{
-			id: 'isGlobal',
-			label: __( 'Global', 'woocommerce' ),
-			enableSorting: false,
-			enableGlobalSearch: false,
-			getValue: ( { item } ) => getBooleanLabel( item.isGlobal ),
-			render: ( { item } ) =>
-				item.isGlobal ? (
-					<Tooltip
-						text={ __(
-							'Available across all products. Customers can filter your catalog by this attribute.',
-							'woocommerce'
-						) }
-					>
-						<a
-							className="woocommerce-variation-attributes__global-link"
-							href={ getGlobalAttributeTermsLink( item.slug ) }
-							target="_blank"
-							rel="noreferrer"
-							onClick={ ( event ) => event.stopPropagation() }
-						>
-							{ __( 'Yes', 'woocommerce' ) }
-							<Icon icon={ linkIcon } size={ 16 } />
-						</a>
-					</Tooltip>
-				) : (
-					<BooleanValue value={ item.isGlobal } />
-				),
-		},
-	];
-}
diff --git a/packages/js/experimental-products-app/src/variation-view/variation-attributes/index.tsx b/packages/js/experimental-products-app/src/variation-view/variation-attributes/index.tsx
deleted file mode 100644
index 39aa1c0a8f3..00000000000
--- a/packages/js/experimental-products-app/src/variation-view/variation-attributes/index.tsx
+++ /dev/null
@@ -1,205 +0,0 @@
-/**
- * External dependencies
- */
-import { Notice } from '@wordpress/components';
-import { useSelect } from '@wordpress/data';
-import { store as coreStore } from '@wordpress/core-data';
-import {
-	createInterpolateElement,
-	useEffect,
-	useState,
-} from '@wordpress/element';
-import { __ } from '@wordpress/i18n';
-
-/**
- * Internal dependencies
- */
-import {
-	getProductAttributeRows,
-	getVariationAttributeRows,
-} from './attribute-rows';
-import type { ProductEntityRecord } from '../../fields/types';
-import {
-	AttributeTable,
-	DEFAULT_PRODUCT_ATTRIBUTE_COLUMNS,
-	DEFAULT_PRODUCT_ATTRIBUTE_LAYOUT_STYLES,
-	DEFAULT_VARIATION_ATTRIBUTE_COLUMNS,
-	DEFAULT_VARIATION_ATTRIBUTE_LAYOUT_STYLES,
-} from './dataviews';
-
-const VARIATIONS_PANEL_SELECTOR = '#variable_product_options';
-const VARIATIONS_TAB_SELECTOR =
-	'#woocommerce-product-data ul.product_data_tabs a[href="#variable_product_options"]';
-
-function openVariationsTab() {
-	const tabLink = document.querySelector< HTMLAnchorElement >(
-		VARIATIONS_TAB_SELECTOR
-	);
-	const panel = document.querySelector< HTMLElement >(
-		VARIATIONS_PANEL_SELECTOR
-	);
-	const tab = tabLink?.closest< HTMLElement >( 'li' );
-
-	if ( ! tabLink || ! panel || ! tab ) {
-		return;
-	}
-
-	if ( getComputedStyle( tab ).display === 'none' ) {
-		return;
-	}
-
-	tabLink.click();
-
-	if (
-		tab.classList.contains( 'active' ) &&
-		getComputedStyle( panel ).display !== 'none'
-	) {
-		return;
-	}
-
-	const panelWrap = tabLink.closest< HTMLElement >( 'div.panel-wrap' );
-
-	if ( ! panelWrap ) {
-		return;
-	}
-
-	panelWrap
-		.querySelectorAll( 'ul.wc-tabs li' )
-		.forEach( ( item ) => item.classList.remove( 'active' ) );
-	tab.classList.add( 'active' );
-
-	panelWrap
-		.querySelectorAll< HTMLElement >( 'div.panel' )
-		.forEach( ( item ) => {
-			item.style.display = item === panel ? 'block' : 'none';
-		} );
-	panel.dispatchEvent( new Event( 'woocommerce_tab_shown' ) );
-}
-
-function ProductAttributesNotice() {
-	const [ isVisible, setIsVisible ] = useState( true );
-
-	useEffect( () => {
-		function handleVariationsLinkClick( event: MouseEvent ) {
-			const target = event.target;
-
-			if ( ! ( target instanceof Element ) ) {
-				return;
-			}
-
-			const link = target.closest< HTMLAnchorElement >(
-				'.woocommerce-variation-attributes__notice a[href="#variable_product_options"]'
-			);
-
-			if ( ! link ) {
-				return;
-			}
-
-			event.preventDefault();
-			openVariationsTab();
-		}
-
-		document.addEventListener( 'click', handleVariationsLinkClick, true );
-
-		return () => {
-			document.removeEventListener(
-				'click',
-				handleVariationsLinkClick,
-				true
-			);
-		};
-	}, [] );
-
-	if ( ! isVisible ) {
-		return null;
-	}
-
-	return (
-		<Notice
-			status="info"
-			isDismissible
-			className="woocommerce-variation-attributes__notice"
-			onRemove={ () => setIsVisible( false ) }
-		>
-			{ createInterpolateElement(
-				__(
-					'Attributes used for variations have moved to the <variationsLink />.',
-					'woocommerce'
-				),
-				{
-					variationsLink: (
-						<a href="#variable_product_options">
-							{ __( 'Variations tab', 'woocommerce' ) }
-						</a>
-					),
-				}
-			) }
-		</Notice>
-	);
-}
-
-type VariationAttributesProps = {
-	productId: number;
-};
-
-export function ProductAttributes( { productId }: VariationAttributesProps ) {
-	const { product, hasResolved } = useSelect(
-		( select ) => {
-			const coreSelect = select( coreStore );
-			const resolutionArgs = [ 'root', 'product', productId ];
-
-			return {
-				hasResolved: coreSelect.hasFinishedResolution(
-					'getEntityRecord',
-					resolutionArgs
-				),
-				product: coreSelect.getEditedEntityRecord(
-					'root',
-					'product',
-					productId
-				) as unknown as ProductEntityRecord | undefined,
-			};
-		},
-		[ productId ]
-	);
-
-	const notice =
-		hasResolved && product?.type === 'variable' ? (
-			<ProductAttributesNotice />
-		) : undefined;
-
-	return (
-		<AttributeTable
-			columns={ DEFAULT_PRODUCT_ATTRIBUTE_COLUMNS }
-			getRows={ getProductAttributeRows }
-			helpText={ __(
-				'Product attributes describe details customers can use to search, filter, and compare products.',
-				'woocommerce'
-			) }
-			nameLabel={ __( 'Name', 'woocommerce' ) }
-			notice={ notice }
-			productId={ productId }
-			styles={ DEFAULT_PRODUCT_ATTRIBUTE_LAYOUT_STYLES }
-			title={ __( 'Product attributes', 'woocommerce' ) }
-		/>
-	);
-}
-
-export function VariationAttributes( { productId }: VariationAttributesProps ) {
-	return (
-		<AttributeTable
-			columns={ DEFAULT_VARIATION_ATTRIBUTE_COLUMNS }
-			getRows={ getVariationAttributeRows }
-			hasSeparator
-			helpText={ __(
-				'Edit attribute values to update combinations. Customers see attributes in the order shown, with the default value pre-selected on the product page.',
-				'woocommerce'
-			) }
-			hideWhenEmpty
-			nameLabel={ __( 'Attribute', 'woocommerce' ) }
-			productId={ productId }
-			styles={ DEFAULT_VARIATION_ATTRIBUTE_LAYOUT_STYLES }
-			title={ __( 'Variation attributes', 'woocommerce' ) }
-		/>
-	);
-}
diff --git a/packages/js/experimental-products-app/src/variation-view/variation-edit-modal.tsx b/packages/js/experimental-products-app/src/variation-view/variation-edit-modal.tsx
deleted file mode 100644
index d6dc6873c7c..00000000000
--- a/packages/js/experimental-products-app/src/variation-view/variation-edit-modal.tsx
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * External dependencies
- */
-import { __, sprintf } from '@wordpress/i18n';
-import { Modal } from '@wordpress/components';
-
-/**
- * Internal dependencies
- */
-import type { VariationEntityRecord } from './types';
-
-type VariationEditModalProps = {
-	variation: VariationEntityRecord;
-	onClose: () => void;
-};
-
-export function VariationEditModal( {
-	variation,
-	onClose,
-}: VariationEditModalProps ) {
-	return (
-		// @ts-expect-error missing types.
-		<Modal
-			title={ sprintf(
-				/* translators: %d: variation ID. */
-				__( 'Edit variation #%d', 'woocommerce' ),
-				variation.id
-			) }
-			onRequestClose={ onClose }
-		>
-			{ /* TODO: variation edit form */ }
-		</Modal>
-	);
-}
diff --git a/packages/js/experimental-products-app/tsconfig.json b/packages/js/experimental-products-app/tsconfig.json
deleted file mode 100644
index f0fa036ac32..00000000000
--- a/packages/js/experimental-products-app/tsconfig.json
+++ /dev/null
@@ -1,35 +0,0 @@
-{
-	"extends": "@woocommerce/internal-build/configs/tsconfig.json",
-	"compilerOptions": {
-		"rootDir": "src",
-		"noCheck": false,
-		"outDir": "build-module",
-		"declaration": true,
-		"declarationMap": true,
-		"declarationDir": "./build-types",
-		"resolveJsonModule": true,
-		"jsx": "react-jsx",
-		"jsxFactory": null,
-		"jsxFragmentFactory": null,
-		"typeRoots": [
-			"./typings",
-			"./node_modules/@types"
-		],
-		"composite": true
-	},
-	"include": [
-		"typings/**/*",
-		"src/**/*"
-	],
-	"exclude": [
-		"**/test/**",
-		"**/stories/**",
-		"**/*.test.ts",
-		"**/*.test.tsx"
-	],
-	"references": [
-		{
-			"path": "../data"
-		}
-	]
-}
diff --git a/packages/js/experimental-products-app/typings/index.d.ts b/packages/js/experimental-products-app/typings/index.d.ts
deleted file mode 100644
index b6c5371ee04..00000000000
--- a/packages/js/experimental-products-app/typings/index.d.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-/// <reference path="./wordpress-data.d.ts" />
-/// <reference path="./wordpress-core-data.d.ts" />
-/// <reference path="./woocommerce-settings.d.ts" />
-/// <reference path="./wordpress-notices.d.ts" />
diff --git a/packages/js/experimental-products-app/typings/woocommerce-settings.d.ts b/packages/js/experimental-products-app/typings/woocommerce-settings.d.ts
deleted file mode 100644
index 6c9a0270236..00000000000
--- a/packages/js/experimental-products-app/typings/woocommerce-settings.d.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-declare module '@woocommerce/settings' {
-	export declare const CURRENCY: {
-		code: string;
-		precision: number;
-		symbol: string;
-		symbolPosition: string;
-		decimalSeparator?: string;
-		thousandSeparator?: string;
-	};
-	export declare function getAdminLink( path: string ): string;
-	export function getSetting< T >(
-		name: string,
-		fallback?: unknown,
-		filter?: ( val: unknown, fb: unknown ) => unknown
-	): T;
-}
diff --git a/packages/js/experimental-products-app/typings/wordpress-core-data.d.ts b/packages/js/experimental-products-app/typings/wordpress-core-data.d.ts
deleted file mode 100644
index c29b106a992..00000000000
--- a/packages/js/experimental-products-app/typings/wordpress-core-data.d.ts
+++ /dev/null
@@ -1,308 +0,0 @@
-/**
- * Type declarations to extend WordPress core-data types.
- *
- * These augmentations add DataViews-related settings that are returned for
- * post types in the Next Admin API responses.
- */
-
-import type {
-	CurriedSelectorsOf,
-	DataRegistry,
-	DispatchReturn,
-	PromisifyActionCreator,
-	UseDispatchReturn,
-} from '@wordpress/data';
-import type {
-	finishResolution,
-	invalidateResolution,
-	invalidateResolutionForStore,
-	invalidateResolutionForStoreSelector,
-	startResolution,
-} from '@wordpress/data/build-types/redux-store/metadata/actions';
-import type { isResolving as metadataIsResolving } from '@wordpress/data/build-types/redux-store/metadata/selectors';
-import type { Context, store } from '@wordpress/core-data';
-import type { SupportedLayouts, View, Form } from '@wordpress/dataviews';
-
-interface ViewPreset {
-	slug: string;
-	label: string;
-	view: View;
-}
-
-interface PostTypeVisibility {
-	/**
-	 * Whether to generate a default UI for managing this post type.
-	 */
-	show_ui: boolean;
-}
-
-type PostTypeDataViewsFields< C extends Context = 'edit' > = {
-	/**
-	 * DataViews configuration for the post type. Contains default view settings
-	 * like layout, filters, sorting, etc.
-	 */
-	default_view?: View;
-
-	/**
-	 * Default layouts for the post type.
-	 */
-	default_layouts?: SupportedLayouts;
-
-	/**
-	 * An array of views that are alternative presets to the default_view.
-	 */
-	views?: ViewPreset[];
-
-	/**
-	 * Default form for the quick edit form.
-	 */
-	quick_edit_form?: Form;
-
-	/**
-	 * The visibility settings for the post type.
-	 */
-	visibility?: PostTypeVisibility;
-
-	/**
-	 * Whether the post type is hierarchical.
-	 */
-	hierarchical?: boolean;
-};
-
-type PostAugmentation< C extends Context = 'edit' > = {
-	/**
-	 * The number of comments on the post.
-	 */
-	comment_count: number | undefined;
-};
-
-type UserAugmentation< C extends Context = 'edit' > = {
-	/**
-	 * The number of posts by the user.
-	 */
-	post_count?: number;
-
-	/**
-	 * Whether syntax highlighting is enabled for the user.
-	 */
-	syntax_highlighting?: boolean;
-};
-
-type PluginAugmentation< C extends Context = 'edit' > = {
-	/**
-	 * Plugin tags.
-	 */
-	tags: string[];
-	/**
-	 * Plugin rating.
-	 */
-	rating: number;
-	/**
-	 * The date/time when the plugin was last updated.
-	 * Format is a date-time string as returned by the REST API.
-	 */
-	last_updated: string;
-	/**
-	 * Whether the plugin has been recently active.
-	 */
-	recently_active?: boolean;
-	/**
-	 * Whether the plugin is set to auto-update.
-	 */
-	auto_update: boolean;
-	/**
-	 * Whether an update is available for the plugin.
-	 */
-	update_available: boolean;
-};
-
-type ThemeAutoUpdates = {
-	/**
-	 * Whether the theme is set to auto-update.
-	 */
-	enabled: boolean;
-
-	/**
-	 * Whether the theme is forced to auto-update.
-	 */
-	forced: boolean | null;
-
-	/**
-	 * Whether the theme supports auto-updates.
-	 */
-	supported: boolean;
-};
-
-type ThemeUpdateAvailable = {
-	/**
-	 * Indicates that there is an update available for the theme.
-	 */
-	has_update: true;
-
-	/**
-	 * The current version of the theme.
-	 */
-	current_version: string;
-
-	/**
-	 * The new version of the theme.
-	 */
-	new_version: string;
-
-	/**
-	 * The URL to the update.
-	 */
-	update_url: string;
-
-	/**
-	 * The package URL for the update.
-	 */
-	package: string;
-};
-
-type ThemeUpdateNotAvailable = {
-	/**
-	 * Indicates that there is no update available for the theme.
-	 */
-	has_update: false;
-
-	/**
-	 * The current version of the theme.
-	 */
-	current_version: string;
-
-	/**
-	 * The new version of the theme, if available.
-	 */
-	new_version: null;
-
-	/**
-	 * The URL to the update, if available.
-	 */
-	update_url: null;
-
-	/**
-	 * The package URL for the update, if available.
-	 */
-	package: null;
-};
-
-type ThemeAugmentation< C extends Context = 'edit' > = {
-	/**
-	 * Auto-update settings for the theme.
-	 */
-	auto_updates: ThemeAutoUpdates;
-
-	/**
-	 * Version update information for the theme.
-	 */
-	update_info: ThemeUpdateAvailable | ThemeUpdateNotAvailable;
-
-	/**
-	 * The permissions for the theme.
-	 */
-	permissions: {
-		update?: boolean;
-	};
-};
-
-declare module '@wordpress/core-data' {
-	export namespace BaseEntityRecords {
-		export interface Type< C extends Context = 'edit' >
-			extends PostTypeDataViewsFields< C > {}
-
-		export interface Post< C extends Context = 'edit' >
-			extends PostAugmentation< C > {}
-
-		export interface User< C extends Context = 'edit' >
-			extends UserAugmentation< C > {}
-
-		export interface Plugin< C extends Context = 'edit' >
-			extends PluginAugmentation< C > {}
-
-		export interface Theme< C extends Context = 'edit' >
-			extends ThemeAugmentation< C > {}
-	}
-
-	export interface TypeVisibility extends PostTypeVisibility {}
-}
-
-/**
- * Ensure the type extensions are visible when the underlying BaseEntityRecords
- * namespace is imported directly inside @wordpress/core-data's build types.
- */
-declare module '@wordpress/core-data/build-types/entity-types/base-entity-records' {
-	export namespace BaseEntityRecords {
-		export interface Type< C extends Context = 'edit' >
-			extends PostTypeDataViewsFields< C > {}
-
-		export interface Post< C extends Context = 'edit' >
-			extends PostAugmentation< C > {}
-
-		export interface User< C extends Context = 'edit' >
-			extends UserAugmentation< C > {}
-
-		export interface Plugin< C extends Context = 'edit' >
-			extends PluginAugmentation< C > {}
-
-		export interface Theme< C extends Context = 'edit' >
-			extends ThemeAugmentation< C > {}
-	}
-}
-
-type IsResolvingArgs =
-	| Parameters< typeof metadataIsResolving >[ 2 ]
-	| ReadonlyArray< unknown >;
-
-type MetadataSelectors = {
-	isResolving: (
-		selectorName: Parameters< typeof metadataIsResolving >[ 1 ],
-		args?: IsResolvingArgs
-	) => ReturnType< typeof metadataIsResolving >;
-};
-
-type CoreDataSelectFunction = {
-	(
-		storeNameOrDescriptor: typeof store
-	): CurriedSelectorsOf< typeof store > & MetadataSelectors;
-	< S >( storeNameOrDescriptor: S ): CurriedSelectorsOf< S >;
-};
-
-type MetadataActions = {
-	startResolution: typeof startResolution;
-	finishResolution: typeof finishResolution;
-	invalidateResolution: typeof invalidateResolution;
-	invalidateResolutionForStore: typeof invalidateResolutionForStore;
-	invalidateResolutionForStoreSelector: typeof invalidateResolutionForStoreSelector;
-};
-
-export type WPDataActions = {
-	[ Action in keyof MetadataActions ]: PromisifyActionCreator<
-		MetadataActions[ Action ]
-	>;
-};
-
-declare module '@wordpress/data' {
-	/**
-	 * Add resolver metadata helpers to the dispatch/useDispatch return type for the core-data store.
-	 */
-	export function dispatch(
-		storeNameOrDescriptor: typeof store
-	): DispatchReturn< typeof store > & WPDataActions;
-	export function useDispatch(
-		storeNameOrDescriptor: typeof store
-	): UseDispatchReturn< typeof store > & WPDataActions;
-	export function select(
-		storeNameOrDescriptor: typeof store
-	): CurriedSelectorsOf< typeof store > & MetadataSelectors;
-	export function useSelect< TResult >(
-		mapSelect: (
-			select: CoreDataSelectFunction,
-			registry?: DataRegistry
-		) => TResult,
-		deps?: unknown[]
-	): TResult;
-	export function useSelect(
-		storeNameOrDescriptor: typeof store
-	): CurriedSelectorsOf< typeof store > & MetadataSelectors;
-}
diff --git a/packages/js/experimental-products-app/typings/wordpress-data.d.ts b/packages/js/experimental-products-app/typings/wordpress-data.d.ts
deleted file mode 100644
index 679d5dda598..00000000000
--- a/packages/js/experimental-products-app/typings/wordpress-data.d.ts
+++ /dev/null
@@ -1,24 +0,0 @@
-import type {
-	AnyConfig,
-	StoreDescriptor,
-	UseDispatchReturn,
-} from '@wordpress/data';
-
-/**
- * Generic fallback overload for `useDispatch()`.
- *
- * Store-specific overloads (notices, core-data, preferences) are declared in
- * their own type files. This file must be referenced first in `types/index.d.ts`
- * so the fallback has the lowest overload priority — in TypeScript's declaration
- * merging, later `declare module` blocks' overloads are tried first.
- */
-declare module '@wordpress/data' {
-	export function useDispatch<
-		StoreNameOrDescriptor extends
-			| undefined
-			| string
-			| StoreDescriptor< AnyConfig >
-	>(
-		storeNameOrDescriptor?: StoreNameOrDescriptor
-	): UseDispatchReturn< StoreNameOrDescriptor >;
-}
diff --git a/packages/js/experimental-products-app/typings/wordpress-notices.d.ts b/packages/js/experimental-products-app/typings/wordpress-notices.d.ts
deleted file mode 100644
index 3201508dd7b..00000000000
--- a/packages/js/experimental-products-app/typings/wordpress-notices.d.ts
+++ /dev/null
@@ -1,40 +0,0 @@
-import type { store } from '@wordpress/notices';
-import type { ReactElement } from 'react';
-/**
- * Fix WordPress notices store types.
- * createSuccessNotice and createErrorNotice return void, not Promise.
- */
-
-interface NoticeOptions {
-	id?: string;
-	type?: 'default' | 'snackbar' | 'plain';
-	isDismissible?: boolean;
-	duration?: number;
-	actions?: Array< {
-		label: string | ReactElement;
-		onClick?: () => void;
-		url?: string;
-	} >;
-	icon?: ReactElement;
-	explicitDismiss?: boolean;
-	onDismiss?: () => void;
-	speak?: boolean;
-	__unstableHTML?: string;
-}
-
-declare module '@wordpress/data' {
-	export function useDispatch( storeNameOrDescriptor: typeof store ): {
-		createSuccessNotice: (
-			content: string,
-			options?: NoticeOptions
-		) => void;
-		createErrorNotice: ( content: string, options?: NoticeOptions ) => void;
-		createWarningNotice: (
-			content: string,
-			options?: NoticeOptions
-		) => void;
-		createInfoNotice: ( content: string, options?: NoticeOptions ) => void;
-		removeNotice: ( id: string, context?: string ) => void;
-		removeAllNotices: ( status?: string, context?: string ) => void;
-	};
-}
diff --git a/packages/js/experimental-products-app/webpack.config.js b/packages/js/experimental-products-app/webpack.config.js
deleted file mode 100644
index 29e8b19870d..00000000000
--- a/packages/js/experimental-products-app/webpack.config.js
+++ /dev/null
@@ -1,54 +0,0 @@
-/**
- * External dependencies
- */
-const RemoveEmptyScriptsPlugin = require( 'webpack-remove-empty-scripts' );
-const path = require( 'path' );
-
-/**
- * Internal dependencies
- */
-const {
-	webpackConfig,
-	plugin,
-	StyleAssetPlugin,
-	WebpackRTLPlugin
-} = require( '@woocommerce/internal-build/style-build' );
-
-const NODE_ENV = process.env.NODE_ENV || 'development';
-
-module.exports = {
-	mode: NODE_ENV,
-	cache: ( process.env.CI && { type: 'memory' } ) || {
-		type: 'filesystem',
-		cacheDirectory: path.resolve(
-			__dirname,
-			'node_modules/.cache/webpack'
-		),
-		buildDependencies: {
-			config: [
-				__filename,
-				path.resolve( __dirname, '../../../pnpm-lock.yaml' ),
-				require.resolve( '@woocommerce/internal-build/style-build' ),
-			],
-		},
-	},
-	entry: {
-		'build-style': __dirname + '/src/style.scss',
-	},
-	output: {
-		path: __dirname,
-	},
-	module: {
-		parser: webpackConfig.parser,
-		rules: webpackConfig.rules,
-	},
-	plugins: [
-		new RemoveEmptyScriptsPlugin(),
-		new plugin( {
-			filename: '[name]/style.css',
-			chunkFilename: 'chunks/[id].style.css',
-		} ),
-		new WebpackRTLPlugin(),
-		new StyleAssetPlugin(),
-	],
-};
diff --git a/plugins/woocommerce/changelog/remove-experimental-products-features b/plugins/woocommerce/changelog/remove-experimental-products-features
new file mode 100644
index 00000000000..8b3a13685a0
--- /dev/null
+++ b/plugins/woocommerce/changelog/remove-experimental-products-features
@@ -0,0 +1,4 @@
+Significance: patch
+Type: dev
+
+Remove the experimental product DataViews and classic variations redesign features.
diff --git a/plugins/woocommerce/client/admin/client/typings/global.d.ts b/plugins/woocommerce/client/admin/client/typings/global.d.ts
index 1cf666dbe7e..ace9d9b9249 100644
--- a/plugins/woocommerce/client/admin/client/typings/global.d.ts
+++ b/plugins/woocommerce/client/admin/client/typings/global.d.ts
@@ -112,14 +112,12 @@ declare global {
 			};
 		};
 		wcAdminFeatures: DeprecatedWcAdminFeatureFlags & {
-			'product-data-views': boolean;
 			'experimental-blocks': boolean;
 			'minified-js': boolean;
 			'settings-ui': boolean;
 			'store-alerts': boolean;
 			'rest-api-v4': boolean;
 			'order-detail-redesign': boolean;
-			'product-variations-classic-redesign': boolean;
 		};
 		wp: {
 			updates?: {
diff --git a/plugins/woocommerce/client/admin/config/core.json b/plugins/woocommerce/client/admin/config/core.json
index ff38978a764..7cf91055adc 100644
--- a/plugins/woocommerce/client/admin/config/core.json
+++ b/plugins/woocommerce/client/admin/config/core.json
@@ -1,12 +1,10 @@
 {
 	"features": {
-		"product-data-views": false,
 		"experimental-blocks": false,
 		"minified-js": false,
 		"settings-ui": false,
 		"store-alerts": true,
 		"rest-api-v4": false,
-		"order-detail-redesign": false,
-		"product-variations-classic-redesign": false
+		"order-detail-redesign": false
 	}
 }
diff --git a/plugins/woocommerce/client/admin/config/development.json b/plugins/woocommerce/client/admin/config/development.json
index 5bf4274537f..1572eacdf8b 100644
--- a/plugins/woocommerce/client/admin/config/development.json
+++ b/plugins/woocommerce/client/admin/config/development.json
@@ -1,12 +1,10 @@
 {
 	"features": {
-		"product-data-views": false,
 		"experimental-blocks": true,
 		"minified-js": true,
 		"settings-ui": false,
 		"store-alerts": true,
 		"rest-api-v4": false,
-		"order-detail-redesign": false,
-		"product-variations-classic-redesign": false
+		"order-detail-redesign": false
 	}
 }
diff --git a/plugins/woocommerce/client/admin/package.json b/plugins/woocommerce/client/admin/package.json
index 99dfc90a408..5ed44bf7fd1 100644
--- a/plugins/woocommerce/client/admin/package.json
+++ b/plugins/woocommerce/client/admin/package.json
@@ -162,7 +162,6 @@
 		"@woocommerce/dependency-extraction-webpack-plugin": "workspace:*",
 		"@woocommerce/eslint-config": "workspace:*",
 		"@woocommerce/eslint-plugin": "workspace:*",
-		"@woocommerce/experimental-products-app": "workspace:*",
 		"@woocommerce/internal-build": "workspace:*",
 		"@woocommerce/internal-js-tests": "workspace:*",
 		"@woocommerce/notices": "workspace:*",
diff --git a/plugins/woocommerce/client/admin/webpack.config.js b/plugins/woocommerce/client/admin/webpack.config.js
index 1e744da91e3..e9369435b91 100644
--- a/plugins/woocommerce/client/admin/webpack.config.js
+++ b/plugins/woocommerce/client/admin/webpack.config.js
@@ -97,7 +97,6 @@ const wcAdminPackages = [
 	'currency',
 	'customer-effort-score',
 	'date',
-	'experimental-products-app',
 	'experimental',
 	'explat',
 	'navigation',
diff --git a/plugins/woocommerce/includes/admin/meta-boxes/views/html-product-data-attributes.php b/plugins/woocommerce/includes/admin/meta-boxes/views/html-product-data-attributes.php
index 5716ddbf412..37364e47cf8 100644
--- a/plugins/woocommerce/includes/admin/meta-boxes/views/html-product-data-attributes.php
+++ b/plugins/woocommerce/includes/admin/meta-boxes/views/html-product-data-attributes.php
@@ -5,23 +5,12 @@
  * @package WooCommerce\Admin
  */

-use Automattic\WooCommerce\Admin\Features\Features;
-use Automattic\WooCommerce\Admin\Features\ProductVariationsClassicRedesign;
 use Automattic\WooCommerce\Internal\ProductAttributes\VisualAttributeTermAdmin;

 if ( ! defined( 'ABSPATH' ) ) {
 	exit;
 }

-if ( Features::exists( ProductVariationsClassicRedesign::FEATURE_ID ) ) {
-	?>
-	<div id="product_attributes" class="panel wc-metaboxes-wrapper hidden">
-		<div id="<?php echo esc_attr( ProductVariationsClassicRedesign::ATTRIBUTES_ROOT_ID ); ?>"></div>
-	</div>
-	<?php
-	return;
-}
-
 global $wc_product_attributes;
 // Array of defined attribute taxonomies.
 $attribute_taxonomies = wc_get_attribute_taxonomies();
diff --git a/plugins/woocommerce/includes/admin/meta-boxes/views/html-product-data-variations.php b/plugins/woocommerce/includes/admin/meta-boxes/views/html-product-data-variations.php
index 381b8a9a6dd..3051dc95ae3 100644
--- a/plugins/woocommerce/includes/admin/meta-boxes/views/html-product-data-variations.php
+++ b/plugins/woocommerce/includes/admin/meta-boxes/views/html-product-data-variations.php
@@ -5,25 +5,12 @@
  * @package WooCommerce\Admin\Metaboxes\Views
  */

-use Automattic\WooCommerce\Admin\Features\Features;
-use Automattic\WooCommerce\Admin\Features\ProductVariationsClassicRedesign;
 use Automattic\WooCommerce\Internal\CostOfGoodsSold\CostOfGoodsSoldController;

 if ( ! defined( 'ABSPATH' ) ) {
 	exit;
 }

-if ( Features::exists( ProductVariationsClassicRedesign::FEATURE_ID ) ) {
-	?>
-	<div id="variable_product_options" class="panel wc-metaboxes-wrapper hidden">
-		<div id="variable_product_options_inner">
-			<div id="<?php echo esc_attr( ProductVariationsClassicRedesign::ROOT_ID ); ?>"></div>
-		</div>
-	</div>
-	<?php
-	return;
-}
-
 $add_attributes_img_url = WC_ADMIN_IMAGES_FOLDER_URL . '/icons/info.svg';
 $background_img_url     = WC_ADMIN_IMAGES_FOLDER_URL . '/product_data/no-variation-background-image.svg';
 $arrow_img_url          = WC_ADMIN_IMAGES_FOLDER_URL . '/product_data/no-variation-arrow.svg';
diff --git a/plugins/woocommerce/phpstan-baseline.neon b/plugins/woocommerce/phpstan-baseline.neon
index e42684ffa17..1425b170337 100644
--- a/plugins/woocommerce/phpstan-baseline.neon
+++ b/plugins/woocommerce/phpstan-baseline.neon
@@ -46713,42 +46713,6 @@ parameters:
 			count: 1
 			path: src/Admin/Features/PaymentGatewaySuggestions/PaymentGatewaysController.php

-		-
-			message: '#^Cannot access property \$labels on WP_Post_Type\|null\.$#'
-			identifier: property.nonObject
-			count: 1
-			path: src/Admin/Features/ProductDataViews/Init.php
-
-		-
-			message: '#^Method Automattic\\WooCommerce\\Admin\\Features\\ProductDataViews\\Init\:\:enqueue_scripts\(\) has no return type specified\.$#'
-			identifier: missingType.return
-			count: 1
-			path: src/Admin/Features/ProductDataViews/Init.php
-
-		-
-			message: '#^Method Automattic\\WooCommerce\\Admin\\Features\\ProductDataViews\\Init\:\:enqueue_styles\(\) has no return type specified\.$#'
-			identifier: missingType.return
-			count: 1
-			path: src/Admin/Features/ProductDataViews/Init.php
-
-		-
-			message: '#^Method Automattic\\WooCommerce\\Admin\\Features\\ProductDataViews\\Init\:\:is_product_data_view_page\(\) has no return type specified\.$#'
-			identifier: missingType.return
-			count: 1
-			path: src/Admin/Features/ProductDataViews/Init.php
-
-		-
-			message: '#^Method Automattic\\WooCommerce\\Admin\\Features\\ProductDataViews\\Init\:\:woocommerce_add_new_products_dashboard\(\) has no return type specified\.$#'
-			identifier: missingType.return
-			count: 1
-			path: src/Admin/Features/ProductDataViews/Init.php
-
-		-
-			message: '#^Method Automattic\\WooCommerce\\Admin\\Features\\ProductDataViews\\Init\:\:woocommerce_products_dashboard\(\) has no return type specified\.$#'
-			identifier: missingType.return
-			count: 1
-			path: src/Admin/Features/ProductDataViews/Init.php
-
 		-
 			message: '#^Method Automattic\\WooCommerce\\Admin\\Features\\ShippingPartnerSuggestions\\ShippingPartnerSuggestions\:\:get_specs\(\) has no return type specified\.$#'
 			identifier: missingType.return
diff --git a/plugins/woocommerce/src/Admin/Features/ProductDataViews/Init.php b/plugins/woocommerce/src/Admin/Features/ProductDataViews/Init.php
deleted file mode 100644
index 363dd104d5a..00000000000
--- a/plugins/woocommerce/src/Admin/Features/ProductDataViews/Init.php
+++ /dev/null
@@ -1,118 +0,0 @@
-<?php
-/**
- * WooCommerce Product Data Views
- */
-
-declare( strict_types = 1 );
-
-namespace Automattic\WooCommerce\Admin\Features\ProductDataViews;
-
-/**
- * Loads assets related to product data views.
- */
-class Init {
-	/**
-	 * Constructor
-	 */
-	public function __construct() {
-		add_action( 'admin_menu', array( $this, 'woocommerce_add_new_products_dashboard' ) );
-		add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_styles' ), 20 );
-		add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts' ), 20 );
-
-		if ( $this->is_product_data_view_page() ) {
-			add_filter(
-				'admin_body_class',
-				static function ( $classes ) {
-					return "$classes";
-				}
-			);
-
-			add_filter( 'admin_footer_text', '__return_empty_string', 20 );
-			add_filter( 'update_footer', '__return_empty_string', 20 );
-		}
-	}
-
-	/**
-	 * Returns true if we are on a JS powered admin page.
-	 */
-	public static function is_product_data_view_page() {
-		// phpcs:disable WordPress.Security.NonceVerification
-		return isset( $_GET['page'] ) && 'woocommerce-products-dashboard' === $_GET['page'];
-		// phpcs:enable WordPress.Security.NonceVerification
-	}
-
-	/**
-	 * Enqueue styles needed for the rich text editor.
-	 */
-	public function enqueue_styles() {
-		if ( ! $this->is_product_data_view_page() ) {
-			return;
-		}
-
-		wp_enqueue_style( 'wc-experimental-products-app' );
-	}
-
-	/**
-	 * Enqueue scripts needed for the product form block editor.
-	 */
-	public function enqueue_scripts() {
-		if ( ! $this->is_product_data_view_page() ) {
-			return;
-		}
-		wp_enqueue_script( 'wc-experimental-products-app' );
-		wp_add_inline_script( 'wc-experimental-products-app', 'window.wc.experimentalProductsApp.initializeProductsDashboard( "woocommerce-products-dashboard" );', 'after' );
-
-		$script_handle = 'wc-admin-edit-product';
-		wp_register_script( $script_handle, '', array( 'wp-blocks' ), '0.1.0', true );
-		wp_enqueue_script( $script_handle );
-		wp_enqueue_media();
-		wp_register_style( 'wc-global-presets', false ); // phpcs:ignore
-		wp_add_inline_style( 'wc-global-presets', wp_get_global_stylesheet( array( 'presets' ) ) );
-		wp_enqueue_style( 'wc-global-presets' );
-	}
-
-	/**
-	 * Replaces the default posts menu item with the new posts dashboard.
-	 */
-	public function woocommerce_add_new_products_dashboard() {
-		$gutenberg_experiments = get_option( 'gutenberg-experiments' );
-		if ( ! $gutenberg_experiments ) {
-			return;
-		}
-		$ptype_obj = get_post_type_object( 'product' );
-		add_submenu_page(
-			'edit.php?post_type=product',
-			$ptype_obj->labels->name,
-			esc_html__( 'All Products ( new )', 'woocommerce' ),
-			'manage_woocommerce',
-			'woocommerce-products-dashboard',
-			array( $this, 'woocommerce_products_dashboard' ),
-			1
-		);
-	}
-
-	/**
-	 * Renders the new posts dashboard page.
-	 */
-	public function woocommerce_products_dashboard() {
-		if ( function_exists( 'gutenberg_url' ) ) {
-			// phpcs:disable WordPress.WP.EnqueuedResourceParameters.MissingVersion
-			wp_register_style(
-				'wp-gutenberg-posts-dashboard',
-				gutenberg_url( 'build/edit-site/posts.css', __FILE__ ),
-				array( 'wp-components' ),
-			);
-			// phpcs:enable WordPress.WP.EnqueuedResourceParameters.MissingVersion
-			wp_enqueue_style( 'wp-gutenberg-posts-dashboard' );
-		}
-
-		if ( ! wp_script_is( 'wc-experimental-products-app', 'enqueued' ) ) {
-			printf(
-				'<div class="notice notice-error"><p>%s</p></div>',
-				esc_html__( 'The experimental products app assets are not available yet. Rebuild the admin assets and reload this page.', 'woocommerce' )
-			);
-		}
-
-		echo '<div id="woocommerce-products-dashboard"></div>';
-	}
-}
diff --git a/plugins/woocommerce/src/Admin/Features/ProductVariationsClassicRedesign.php b/plugins/woocommerce/src/Admin/Features/ProductVariationsClassicRedesign.php
deleted file mode 100644
index 5796b28d34c..00000000000
--- a/plugins/woocommerce/src/Admin/Features/ProductVariationsClassicRedesign.php
+++ /dev/null
@@ -1,99 +0,0 @@
-<?php
-/**
- * WooCommerce Product Variations Classic Redesign
- */
-
-declare( strict_types = 1 );
-
-namespace Automattic\WooCommerce\Admin\Features;
-
-/**
- * Loads assets for the product variations classic redesign feature.
- */
-class ProductVariationsClassicRedesign {
-	const FEATURE_ID         = 'product-variations-classic-redesign';
-	const SCRIPT_HANDLE      = 'wc-experimental-products-app';
-	const SCRIPT_PATH        = 'experimental-products-app';
-	const ROOT_ID            = 'woocommerce-variations-classic-root';
-	const ATTRIBUTES_ROOT_ID = 'woocommerce-product-attributes-classic-root';
-
-	/**
-	 * Constructor
-	 */
-	public function __construct() {
-		if ( ! is_admin() ) {
-			return;
-		}
-
-		add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts' ), 20 );
-		add_filter( 'woocommerce_product_data_tabs', array( $this, 'handle_woocommerce_product_data_tabs' ), 5 );
-	}
-
-	/**
-	 * Returns true if we are on a product edit screen.
-	 */
-	public static function is_product_edit_page(): bool {
-		$screen = get_current_screen();
-		return $screen && 'product' === $screen->post_type && 'post' === $screen->base;
-	}
-
-	/**
-	 * Returns true if the user has requested legacy editing for a specific variation.
-	 */
-	public static function is_legacy_variation_edit(): bool {
-		// phpcs:disable WordPress.Security.NonceVerification
-		return isset( $_GET['edit_variation'] ) && is_numeric( $_GET['edit_variation'] );
-		// phpcs:enable WordPress.Security.NonceVerification
-	}
-
-	/**
-	 * Handle the woocommerce_product_data_tabs filter.
-	 *
-	 * @internal
-	 *
-	 * @param array $tabs Product data tabs.
-	 * @return array Product data tabs.
-	 */
-	public function handle_woocommerce_product_data_tabs( array $tabs ): array {
-		if ( isset( $tabs['variations'] ) && is_array( $tabs['variations'] ) ) {
-			$tabs['variations']['priority'] = 40;
-		}
-
-		if ( isset( $tabs['linked_product'] ) && is_array( $tabs['linked_product'] ) ) {
-			$tabs['linked_product']['priority'] = 60;
-		}
-
-		return $tabs;
-	}
-
-	/**
-	 * Enqueue scripts and styles for the variations table.
-	 */
-	public function enqueue_scripts(): void {
-		if ( ! self::is_product_edit_page() || self::is_legacy_variation_edit() ) {
-			return;
-		}
-
-		wp_enqueue_script( self::SCRIPT_HANDLE );
-		wp_enqueue_style( self::SCRIPT_HANDLE );
-
-		global $post;
-		$product_id = $post ? $post->ID : 0;
-		$script     = sprintf(
-			'window.wc.experimentalProductsApp.initializeVariationView( %s, %d );',
-			wp_json_encode( self::ROOT_ID ),
-			$product_id
-		);
-		$script    .= sprintf(
-			' window.wc.experimentalProductsApp.initializeProductAttributesView( %s, %d );',
-			wp_json_encode( self::ATTRIBUTES_ROOT_ID ),
-			$product_id
-		);
-
-		wp_add_inline_script(
-			self::SCRIPT_HANDLE,
-			$script,
-			'after'
-		);
-	}
-}
diff --git a/plugins/woocommerce/src/Internal/Admin/WCAdminAssets.php b/plugins/woocommerce/src/Internal/Admin/WCAdminAssets.php
index 13152fc147e..cb6e8f6c644 100644
--- a/plugins/woocommerce/src/Internal/Admin/WCAdminAssets.php
+++ b/plugins/woocommerce/src/Internal/Admin/WCAdminAssets.php
@@ -318,7 +318,6 @@ class WCAdminAssets {
 			'wc-store-data',
 			'wc-currency',
 			'wc-navigation',
-			'wc-experimental-products-app',
 			'wc-settings-ui',
 			'wc-remote-logging',
 			'wc-sanitize',
@@ -335,7 +334,6 @@ class WCAdminAssets {
 			'wc-date',
 			'wc-components',
 			'wc-customer-effort-score',
-			'wc-experimental-products-app',
 			'wc-experimental',
 			'wc-navigation',
 			'wc-settings-ui',
@@ -388,9 +386,6 @@ class WCAdminAssets {
 			array(
 				'handle' => 'wc-components',
 			),
-			array(
-				'handle' => 'wc-experimental-products-app',
-			),
 			array(
 				'handle' => 'wc-customer-effort-score',
 			),
@@ -486,7 +481,6 @@ class WCAdminAssets {
 				'wc-csv',
 				'wc-currency',
 				'wc-customer-effort-score',
-				'wc-experimental-products-app',
 				'wc-navigation',
 				// NOTE: This should be removed when Gutenberg is updated and
 				// the notices package is removed from WooCommerce Admin.
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 06e540ee6a7..cde8305d883 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -293,7 +293,7 @@ importers:
         version: 1.15.0
       postcss-loader:
         specifier: 4.3.x
-        version: 4.3.0(postcss@8.5.26)(webpack@5.97.1)
+        version: 4.3.0(postcss@8.5.26)(webpack@5.97.1(@swc/core@1.15.24))
       prettier:
         specifier: npm:wp-prettier@3.0.3
         version: wp-prettier@3.0.3
@@ -363,7 +363,7 @@ importers:
         version: 29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3))
       postcss-loader:
         specifier: 4.3.x
-        version: 4.3.0(postcss@8.5.26)(webpack@5.97.1)
+        version: 4.3.0(postcss@8.5.26)(webpack@5.97.1(@swc/core@1.15.24))
       react:
         specifier: 18.3.x
         version: 18.3.1
@@ -459,7 +459,7 @@ importers:
         version: 30.6.5(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@wordpress/compose':
         specifier: catalog:wp-min
-        version: 7.33.1(react@18.3.1)
+        version: 7.33.1(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/core-data':
         specifier: catalog:wp-min
         version: 7.33.9(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
@@ -489,7 +489,7 @@ importers:
         version: 6.6.1
       '@wordpress/icons':
         specifier: catalog:wp-bundled
-        version: 11.0.1(react@18.3.1)
+        version: 11.0.1(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/keyboard-shortcuts':
         specifier: catalog:wp-min
         version: 5.33.1(@types/react@18.3.28)(react@18.3.1)
@@ -661,7 +661,7 @@ importers:
         version: 8.5.26
       postcss-loader:
         specifier: 4.3.x
-        version: 4.3.0(postcss@8.5.26)(webpack@5.97.1)
+        version: 4.3.0(postcss@8.5.26)(webpack@5.97.1(@swc/core@1.15.24))
       qrcode.react:
         specifier: ^3.1.0
         version: 3.2.0(react@18.3.1)
@@ -821,7 +821,7 @@ importers:
         version: 30.6.5(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@wordpress/compose':
         specifier: catalog:wp-min
-        version: 7.33.1(react@18.3.1)
+        version: 7.33.1(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/data':
         specifier: ^10.19.0
         version: 10.44.0(@types/react@18.3.28)(react@18.3.1)
@@ -906,7 +906,7 @@ importers:
         version: 8.5.26
       postcss-loader:
         specifier: 4.3.x
-        version: 4.3.0(postcss@8.5.26)(webpack@5.97.1)
+        version: 4.3.0(postcss@8.5.26)(webpack@5.97.1(@swc/core@1.15.24))
       react:
         specifier: 18.3.x
         version: 18.3.1
@@ -948,7 +948,7 @@ importers:
         version: 7.33.1
       '@wordpress/compose':
         specifier: catalog:wp-min
-        version: 7.33.1(react@18.3.1)
+        version: 7.33.1(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/core-data':
         specifier: catalog:wp-min
         version: 7.33.9(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
@@ -1246,7 +1246,7 @@ importers:
         version: 30.6.5(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@wordpress/compose':
         specifier: catalog:wp-min
-        version: 7.33.1(react@18.3.1)
+        version: 7.33.1(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/core-data':
         specifier: catalog:wp-min
         version: 7.33.9(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
@@ -1261,7 +1261,7 @@ importers:
         version: 4.33.1
       '@wordpress/editor':
         specifier: catalog:wp-min
-        version: 14.33.11(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
+        version: 14.33.11(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
       '@wordpress/element':
         specifier: catalog:wp-min
         version: 6.33.1
@@ -1270,7 +1270,7 @@ importers:
         version: 5.33.9(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
       '@wordpress/global-styles-engine':
         specifier: ^1.3.0
-        version: 1.11.0(react@18.3.1)
+        version: 1.11.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/hooks':
         specifier: catalog:wp-min
         version: 4.33.1
@@ -1282,7 +1282,7 @@ importers:
         version: 6.6.1
       '@wordpress/icons':
         specifier: catalog:wp-bundled
-        version: 11.0.1(react@18.3.1)
+        version: 11.0.1(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/interface':
         specifier: catalog:wp-bundled
         version: 9.18.5(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
@@ -1376,7 +1376,7 @@ importers:
         version: 12.5.18(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@types/wordpress__edit-post':
         specifier: catalog:wp-min
-        version: 8.4.2(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
+        version: 8.4.2(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
       '@woocommerce/eslint-config':
         specifier: workspace:*
         version: link:../../../tools/eslint-config
@@ -1482,7 +1482,7 @@ importers:
         version: 6.6.1
       '@wordpress/icons':
         specifier: catalog:wp-bundled
-        version: 11.0.1(react@18.3.1)
+        version: 11.0.1(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/keycodes':
         specifier: catalog:wp-min
         version: 4.33.1
@@ -1570,7 +1570,7 @@ importers:
         version: 8.5.26
       postcss-loader:
         specifier: 4.3.x
-        version: 4.3.0(postcss@8.5.26)(webpack@5.97.1)
+        version: 4.3.0(postcss@8.5.26)(webpack@5.97.1(@swc/core@1.15.24))
       react:
         specifier: 18.3.x
         version: 18.3.1
@@ -1596,175 +1596,6 @@ importers:
         specifier: 5.1.x
         version: 5.1.4(webpack-dev-server@4.15.2)(webpack@5.97.1)

-  packages/js/experimental-products-app:
-    dependencies:
-      '@base-ui/react':
-        specifier: 1.4.1
-        version: 1.4.1(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
-      '@dnd-kit/react':
-        specifier: 0.4.0
-        version: 0.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
-      '@types/lodash':
-        specifier: ^4.14.202
-        version: 4.17.24
-      '@woocommerce/data':
-        specifier: workspace:*
-        version: link:../data
-      '@woocommerce/settings':
-        specifier: 1.0.0
-        version: 1.0.0
-      '@wordpress/admin-ui':
-        specifier: catalog:wp-bundled
-        version: 2.4.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(date-fns@4.1.0)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
-      '@wordpress/api-fetch':
-        specifier: catalog:wp-min
-        version: 7.33.1
-      '@wordpress/base-styles':
-        specifier: 6.20.0
-        version: 6.20.0
-      '@wordpress/components':
-        specifier: catalog:wp-min
-        version: 30.6.5(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
-      '@wordpress/compose':
-        specifier: catalog:wp-min
-        version: 7.33.1(react@18.3.1)
-      '@wordpress/core-data':
-        specifier: catalog:wp-min
-        version: 7.33.9(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
-      '@wordpress/data':
-        specifier: catalog:wp-min
-        version: 10.33.1(@types/react@18.3.28)(react@18.3.1)
-      '@wordpress/dataviews':
-        specifier: https://github.com/gigitux/gutenberg/releases/download/%40wordpress%2Fdataviews-hierarchy/wordpress-dataviews-14.2.0.tgz
-        version: https://github.com/gigitux/gutenberg/releases/download/%40wordpress%2Fdataviews-hierarchy/wordpress-dataviews-14.2.0.tgz(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
-      '@wordpress/editor':
-        specifier: catalog:wp-min
-        version: 14.33.11(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
-      '@wordpress/element':
-        specifier: catalog:wp-min
-        version: 6.33.1
-      '@wordpress/html-entities':
-        specifier: catalog:wp-min
-        version: 4.33.1
-      '@wordpress/i18n':
-        specifier: catalog:wp-min
-        version: 6.6.1
-      '@wordpress/icons':
-        specifier: 10.6.0
-        version: 10.6.0(react@18.3.1)
-      '@wordpress/media-utils':
-        specifier: catalog:wp-min
-        version: 5.33.1
-      '@wordpress/notices':
-        specifier: catalog:wp-min
-        version: 5.33.1(@types/react@18.3.28)(react@18.3.1)
-      '@wordpress/private-apis':
-        specifier: ^1.33.1
-        version: 1.48.1
-      '@wordpress/router':
-        specifier: 1.11.0
-        version: 1.11.0(react@18.3.1)
-      '@wordpress/theme':
-        specifier: 0.17.0
-        version: 0.17.0(@types/react@18.3.28)(esbuild@0.18.20)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
-      '@wordpress/ui':
-        specifier: catalog:wp-bundled
-        version: 0.17.0(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@4.1.0)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
-      '@wordpress/url':
-        specifier: catalog:wp-min
-        version: 4.33.1
-      clsx:
-        specifier: 2.1.x
-        version: 2.1.1
-      react:
-        specifier: 18.3.x
-        version: 18.3.1
-      react-dom:
-        specifier: 18.3.x
-        version: 18.3.1(react@18.3.1)
-    devDependencies:
-      '@babel/core':
-        specifier: catalog:tooling
-        version: 7.25.7
-      '@babel/runtime':
-        specifier: catalog:tooling
-        version: 7.25.7
-      '@testing-library/dom':
-        specifier: ^10.4.x
-        version: 10.4.1
-      '@testing-library/jest-dom':
-        specifier: ^6.x.x
-        version: 6.4.5(@jest/globals@29.7.0)(@types/jest@29.5.14)(jest@29.5.0(@types/node@24.12.2)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))
-      '@testing-library/react':
-        specifier: ^16.x.x
-        version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
-      '@testing-library/user-event':
-        specifier: 13.5.0
-        version: 13.5.0(@testing-library/dom@10.4.1)
-      '@types/jest':
-        specifier: 29.5.x
-        version: 29.5.14
-      '@types/react':
-        specifier: 18.3.x
-        version: 18.3.28
-      '@types/testing-library__jest-dom':
-        specifier: ^5.14.9
-        version: 5.14.9
-      '@woocommerce/eslint-config':
-        specifier: workspace:*
-        version: link:../../../tools/eslint-config
-      '@woocommerce/eslint-plugin':
-        specifier: workspace:*
-        version: link:../eslint-plugin
-      '@woocommerce/internal-build':
-        specifier: workspace:*
-        version: link:../internal-build
-      '@woocommerce/internal-js-tests':
-        specifier: workspace:*
-        version: link:../internal-js-tests
-      css-loader:
-        specifier: 6.11.x
-        version: 6.11.0(webpack@5.97.1(@swc/core@1.15.24))
-      eslint:
-        specifier: ^10.0.0
-        version: 10.7.0(jiti@2.6.1)
-      jest:
-        specifier: 29.5.x
-        version: 29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3))
-      jest-cli:
-        specifier: 29.5.x
-        version: 29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3))
-      jest-environment-jsdom:
-        specifier: 29.5.x
-        version: 29.5.0
-      postcss:
-        specifier: catalog:tooling
-        version: 8.5.26
-      postcss-loader:
-        specifier: 4.3.x
-        version: 4.3.0(postcss@8.5.26)(webpack@5.97.1)
-      rimraf:
-        specifier: 5.0.5
-        version: 5.0.5
-      sass-loader:
-        specifier: 10.5.x
-        version: 10.5.2(sass@1.69.5)(webpack@5.97.1(@swc/core@1.15.24))
-      ts-jest:
-        specifier: 29.1.x
-        version: 29.1.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(jest@29.5.0(@types/node@24.12.2)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))(typescript@5.7.3)
-      typescript:
-        specifier: 5.7.x
-        version: 5.7.3
-      webpack:
-        specifier: catalog:tooling
-        version: 5.97.1(@swc/core@1.15.24)(webpack-cli@5.1.4)
-      webpack-cli:
-        specifier: 5.1.x
-        version: 5.1.4(webpack@5.97.1)
-      webpack-remove-empty-scripts:
-        specifier: 1.0.x
-        version: 1.0.4(webpack@5.97.1)
-
   packages/js/explat:
     dependencies:
       '@automattic/explat-client':
@@ -1942,13 +1773,13 @@ importers:
         version: link:../eslint-plugin
       '@wordpress/core-data':
         specifier: 7.33.9
-        version: 7.33.9(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
+        version: 7.33.9(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
       '@wordpress/data':
         specifier: 10.33.1
         version: 10.33.1(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/editor':
         specifier: 14.33.11
-        version: 14.33.11(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
+        version: 14.33.11(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(esbuild@0.24.2)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
       '@wordpress/notices':
         specifier: 5.33.1
         version: 5.33.1(@types/react@18.3.28)(react@18.3.1)
@@ -2042,7 +1873,7 @@ importers:
         version: 30.6.5(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@wordpress/compose':
         specifier: catalog:wp-min
-        version: 7.33.1(react@18.3.1)
+        version: 7.33.1(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/element':
         specifier: catalog:wp-min
         version: 6.33.1
@@ -2255,7 +2086,7 @@ importers:
         version: 30.6.5(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@wordpress/compose':
         specifier: catalog:wp-min
-        version: 7.33.1(react@18.3.1)
+        version: 7.33.1(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/element':
         specifier: catalog:wp-min
         version: 6.33.1
@@ -2325,7 +2156,7 @@ importers:
         version: 8.5.26
       postcss-loader:
         specifier: 4.3.x
-        version: 4.3.0(postcss@8.5.26)(webpack@5.97.1)
+        version: 4.3.0(postcss@8.5.26)(webpack@5.97.1(@swc/core@1.15.24))
       rimraf:
         specifier: 5.0.5
         version: 5.0.5
@@ -2811,7 +2642,7 @@ importers:
         version: 30.6.5(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@wordpress/compose':
         specifier: catalog:wp-min
-        version: 7.33.1(react@18.3.1)
+        version: 7.33.1(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/core-data':
         specifier: catalog:wp-min
         version: 7.33.9(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
@@ -2832,7 +2663,7 @@ importers:
         version: 6.6.1
       '@wordpress/icons':
         specifier: catalog:wp-bundled
-        version: 11.0.1(react@18.3.1)
+        version: 11.0.1(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/plugins':
         specifier: catalog:wp-min
         version: 7.33.5(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@@ -2980,7 +2811,7 @@ importers:
         version: 4.33.1
       '@wordpress/admin-ui':
         specifier: catalog:wp-bundled
-        version: 2.4.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(date-fns@4.1.0)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
+        version: 2.4.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(date-fns@3.6.0)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
       '@wordpress/api-fetch':
         specifier: catalog:wp-min
         version: 7.33.1
@@ -2998,10 +2829,10 @@ importers:
         version: 30.6.5(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@wordpress/compose':
         specifier: catalog:wp-min
-        version: 7.33.1(react@18.3.1)
+        version: 7.33.1(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/core-data':
         specifier: catalog:wp-min
-        version: 7.33.9(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
+        version: 7.33.9(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
       '@wordpress/data-controls':
         specifier: catalog:wp-min
         version: 4.33.1(@types/react@18.3.28)(react@18.3.1)
@@ -3025,7 +2856,7 @@ importers:
         version: 5.15.0(patch_hash=63381743e38412fb89154386a5d169639ca10f8315407527829db669201fce9b)(@babel/helper-module-imports@7.28.6)(@babel/types@7.29.0)(@emotion/is-prop-valid@1.4.0)(@preact/signals-core@1.14.1)(@types/react@18.3.28)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@wordpress/editor':
         specifier: catalog:wp-min
-        version: 14.33.11(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
+        version: 14.33.11(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
       '@wordpress/element':
         specifier: catalog:wp-min
         version: 6.33.1
@@ -3040,10 +2871,10 @@ importers:
         version: 6.6.1
       '@wordpress/icons':
         specifier: catalog:wp-bundled
-        version: 11.0.1(react@18.3.1)
+        version: 11.0.1(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/interface':
         specifier: catalog:wp-bundled
-        version: 9.18.5(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
+        version: 9.18.5(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
       '@wordpress/keyboard-shortcuts':
         specifier: catalog:wp-min
         version: 5.33.1(@types/react@18.3.28)(react@18.3.1)
@@ -3070,7 +2901,7 @@ importers:
         version: 0.17.0(@types/react@18.3.28)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
       '@wordpress/ui':
         specifier: catalog:wp-bundled
-        version: 0.17.0(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@4.1.0)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
+        version: 0.17.0(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@3.6.0)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
       '@wordpress/url':
         specifier: catalog:wp-min
         version: 4.33.1
@@ -3167,7 +2998,7 @@ importers:
         version: 7.25.7
       '@pmmmwh/react-refresh-webpack-plugin':
         specifier: ^0.5.11
-        version: 0.5.17(@types/webpack@4.41.40)(react-refresh@0.14.2)(type-fest@4.41.0)(webpack-dev-server@4.15.2)(webpack-hot-middleware@2.26.1)(webpack@5.97.1)
+        version: 0.5.17(@types/webpack@4.41.40)(react-refresh@0.14.2)(type-fest@4.41.0)(webpack-dev-server@4.15.2(webpack@5.97.1(@swc/core@1.15.24)))(webpack-hot-middleware@2.26.1)(webpack@5.97.1(@swc/core@1.15.24))
       '@statelyai/inspect':
         specifier: ^0.3.1
         version: 0.3.1(ws@8.20.0)(xstate@4.37.1)
@@ -3240,9 +3071,6 @@ importers:
       '@woocommerce/eslint-plugin':
         specifier: workspace:*
         version: link:../../../../packages/js/eslint-plugin
-      '@woocommerce/experimental-products-app':
-        specifier: workspace:*
-        version: link:../../../../packages/js/experimental-products-app
       '@woocommerce/internal-build':
         specifier: workspace:*
         version: link:../../../../packages/js/internal-build
@@ -3359,7 +3187,7 @@ importers:
         version: 4.1.0
       postcss-loader:
         specifier: 4.3.x
-        version: 4.3.0(postcss@8.5.26)(webpack@5.97.1)
+        version: 4.3.0(postcss@8.5.26)(webpack@5.97.1(@swc/core@1.15.24))
       prettier:
         specifier: npm:wp-prettier@3.0.3
         version: wp-prettier@3.0.3
@@ -3464,13 +3292,13 @@ importers:
         version: 3.16.0
       '@wordpress/compose':
         specifier: catalog:wp-min
-        version: 7.33.1(react@18.3.1)
+        version: 7.33.1(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/deprecated':
         specifier: catalog:wp-min
         version: 4.33.1
       '@wordpress/icons':
         specifier: catalog:wp-bundled
-        version: 11.0.1(react@18.3.1)
+        version: 11.0.1(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/notices':
         specifier: catalog:wp-min
         version: 5.33.1(@types/react@18.3.28)(react@18.3.1)
@@ -3738,7 +3566,7 @@ importers:
         version: 1.33.2(patch_hash=0a3df7448f0a035981fcb1ecddf9c699450bcfe7c1f6c334d6cdfea5db1e0d52)(@playwright/test@1.61.1)
       '@wordpress/editor':
         specifier: catalog:wp-min
-        version: 14.33.11(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
+        version: 14.33.11(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(esbuild@0.18.20)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
       '@wordpress/element':
         specifier: catalog:wp-min
         version: 6.33.1
@@ -3912,7 +3740,7 @@ importers:
         version: 4.1.0
       postcss-loader:
         specifier: 4.3.x
-        version: 4.3.0(postcss@8.5.26)(webpack@5.97.1)
+        version: 4.3.0(postcss@8.5.26)(webpack@5.97.1(@swc/core@1.15.24))
       prettier:
         specifier: npm:wp-prettier@3.0.3
         version: wp-prettier@3.0.3
@@ -4556,14 +4384,14 @@ packages:
     hasBin: true

   '@ampproject/remapping@2.3.0':
-    resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
+    resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==, tarball: https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz}
     engines: {node: '>=6.0.0'}

   '@ariakit/components@0.1.5':
     resolution: {integrity: sha512-LnvU9bcOU2IkQS3jCFm2rxcULNtG55+M+fh66mFf4EEBHJnDoTdN7zNRtm1dyzcFn6hAn/AoLl3Hyg95RIGUOA==}

   '@ariakit/core@0.3.11':
-    resolution: {integrity: sha512-+MnOeqnA4FLI/7vqsZLbZQHHN4ofd9kvkNjz44fNi0gqmD+ZbMWiDkFAvZII75dYnxYw5ZPpWjA4waK22VBWig==}
+    resolution: {integrity: sha512-+MnOeqnA4FLI/7vqsZLbZQHHN4ofd9kvkNjz44fNi0gqmD+ZbMWiDkFAvZII75dYnxYw5ZPpWjA4waK22VBWig==, tarball: https://registry.npmjs.org/@ariakit/core/-/core-0.3.11.tgz}

   '@ariakit/core@0.4.19':
     resolution: {integrity: sha512-PUj/J1eX/b+DkcYwP6m7/tzDUiX1SVST89coljTN6BdQwLYMSkhg71jXcZwmTX19jQmqV9VqhVkKeabLnvciQQ==}
@@ -4575,7 +4403,7 @@ packages:
       react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0

   '@ariakit/react-core@0.3.14':
-    resolution: {integrity: sha512-16Qj6kDPglpdWtU5roY9q+G66naOjauTY5HvUIaL2aLY0187ATaRrABIKoMMzTtJyhvsud4jFlzivz+/zCQ8yw==}
+    resolution: {integrity: sha512-16Qj6kDPglpdWtU5roY9q+G66naOjauTY5HvUIaL2aLY0187ATaRrABIKoMMzTtJyhvsud4jFlzivz+/zCQ8yw==, tarball: https://registry.npmjs.org/@ariakit/react-core/-/react-core-0.3.14.tgz}
     peerDependencies:
       react: ^17.0.0 || ^18.0.0
       react-dom: ^17.0.0 || ^18.0.0
@@ -4597,7 +4425,7 @@ packages:
       react: ^17.0.0 || ^18.0.0 || ^19.0.0

   '@ariakit/react@0.3.14':
-    resolution: {integrity: sha512-h71BPMZ2eW+E2ESbdYxSAEMR1DozYzd5eHE5IOzGd9Egi5u7EZxqmuW4CXVXZ1Y6vbaDMV3SudgPh7iHS/ArFw==}
+    resolution: {integrity: sha512-h71BPMZ2eW+E2ESbdYxSAEMR1DozYzd5eHE5IOzGd9Egi5u7EZxqmuW4CXVXZ1Y6vbaDMV3SudgPh7iHS/ArFw==, tarball: https://registry.npmjs.org/@ariakit/react/-/react-0.3.14.tgz}
     peerDependencies:
       react: ^17.0.0 || ^18.0.0
       react-dom: ^17.0.0 || ^18.0.0
@@ -4703,7 +4531,7 @@ packages:
     hasBin: true

   '@babel/cli@7.25.7':
-    resolution: {integrity: sha512-vQw4QjrqjLSuL0Tt3gfVXbxEHOfsCcHN8tKyTclpSMYLq3Bp0BTzWYZfMKBs3PQ+to8q3BnumBIAsMdOqDJ6nw==}
+    resolution: {integrity: sha512-vQw4QjrqjLSuL0Tt3gfVXbxEHOfsCcHN8tKyTclpSMYLq3Bp0BTzWYZfMKBs3PQ+to8q3BnumBIAsMdOqDJ6nw==, tarball: https://registry.npmjs.org/@babel/cli/-/cli-7.25.7.tgz}
     engines: {node: '>=6.9.0'}
     hasBin: true
     peerDependencies:
@@ -4714,15 +4542,15 @@ packages:
     engines: {node: '>=6.9.0'}

   '@babel/compat-data@7.29.0':
-    resolution: {integrity: sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==}
+    resolution: {integrity: sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==, tarball: https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz}
     engines: {node: '>=6.9.0'}

   '@babel/core@7.12.9':
-    resolution: {integrity: sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==}
+    resolution: {integrity: sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==, tarball: https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz}
     engines: {node: '>=6.9.0'}

   '@babel/core@7.25.7':
-    resolution: {integrity: sha512-yJ474Zv3cwiSOO9nXJuqzvwEeM+chDuQ8GJirw+pZ91sCGCyOZ3dJkVE09fTV0VEVzXyLWhh3G/AolYTPX7Mow==}
+    resolution: {integrity: sha512-yJ474Zv3cwiSOO9nXJuqzvwEeM+chDuQ8GJirw+pZ91sCGCyOZ3dJkVE09fTV0VEVzXyLWhh3G/AolYTPX7Mow==, tarball: https://registry.npmjs.org/@babel/core/-/core-7.25.7.tgz}
     engines: {node: '>=6.9.0'}

   '@babel/eslint-parser@7.28.6':
@@ -4733,7 +4561,7 @@ packages:
       eslint: ^7.5.0 || ^8.0.0 || ^9.0.0

   '@babel/generator@7.29.1':
-    resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==}
+    resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==, tarball: https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz}
     engines: {node: '>=6.9.0'}

   '@babel/helper-annotate-as-pure@7.27.3':
@@ -4741,7 +4569,7 @@ packages:
     engines: {node: '>=6.9.0'}

   '@babel/helper-compilation-targets@7.28.6':
-    resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==}
+    resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==, tarball: https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz}
     engines: {node: '>=6.9.0'}

   '@babel/helper-create-class-features-plugin@7.28.6':
@@ -4751,23 +4579,23 @@ packages:
       '@babel/core': ^7.0.0

   '@babel/helper-create-regexp-features-plugin@7.28.5':
-    resolution: {integrity: sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw==}
+    resolution: {integrity: sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw==, tarball: https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.28.5.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0

   '@babel/helper-define-polyfill-provider@0.1.5':
-    resolution: {integrity: sha512-nXuzCSwlJ/WKr8qxzW816gwyT6VZgiJG17zR40fou70yfAcqjoNyTLl/DQ+FExw5Hx5KNqshmN8Ldl/r2N7cTg==}
+    resolution: {integrity: sha512-nXuzCSwlJ/WKr8qxzW816gwyT6VZgiJG17zR40fou70yfAcqjoNyTLl/DQ+FExw5Hx5KNqshmN8Ldl/r2N7cTg==, tarball: https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.1.5.tgz}
     peerDependencies:
       '@babel/core': ^7.4.0-0

   '@babel/helper-define-polyfill-provider@0.6.8':
-    resolution: {integrity: sha512-47UwBLPpQi1NoWzLuHNjRoHlYXMwIJoBf7MFou6viC/sIHWYygpvr0B6IAyh5sBdA2nr2LPIRww8lfaUVQINBA==}
+    resolution: {integrity: sha512-47UwBLPpQi1NoWzLuHNjRoHlYXMwIJoBf7MFou6viC/sIHWYygpvr0B6IAyh5sBdA2nr2LPIRww8lfaUVQINBA==, tarball: https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.8.tgz}
     peerDependencies:
       '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0

   '@babel/helper-globals@7.28.0':
-    resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==}
+    resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==, tarball: https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz}
     engines: {node: '>=6.9.0'}

   '@babel/helper-member-expression-to-functions@7.28.5':
@@ -4779,7 +4607,7 @@ packages:
     engines: {node: '>=6.9.0'}

   '@babel/helper-module-transforms@7.28.6':
-    resolution: {integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==}
+    resolution: {integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==, tarball: https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0
@@ -4789,20 +4617,20 @@ packages:
     engines: {node: '>=6.9.0'}

   '@babel/helper-plugin-utils@7.10.4':
-    resolution: {integrity: sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==}
+    resolution: {integrity: sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==, tarball: https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz}

   '@babel/helper-plugin-utils@7.28.6':
     resolution: {integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==}
     engines: {node: '>=6.9.0'}

   '@babel/helper-remap-async-to-generator@7.27.1':
-    resolution: {integrity: sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==}
+    resolution: {integrity: sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==, tarball: https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0

   '@babel/helper-replace-supers@7.28.6':
-    resolution: {integrity: sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==}
+    resolution: {integrity: sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==, tarball: https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.28.6.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0
@@ -4812,7 +4640,7 @@ packages:
     engines: {node: '>=6.9.0'}

   '@babel/helper-string-parser@7.27.1':
-    resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
+    resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==, tarball: https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz}
     engines: {node: '>=6.9.0'}

   '@babel/helper-validator-identifier@7.28.5':
@@ -4820,48 +4648,48 @@ packages:
     engines: {node: '>=6.9.0'}

   '@babel/helper-validator-option@7.27.1':
-    resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==}
+    resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==, tarball: https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz}
     engines: {node: '>=6.9.0'}

   '@babel/helper-wrap-function@7.28.6':
-    resolution: {integrity: sha512-z+PwLziMNBeSQJonizz2AGnndLsP2DeGHIxDAn+wdHOGuo4Fo1x1HBPPXeE9TAOPHNNWQKCSlA2VZyYyyibDnQ==}
+    resolution: {integrity: sha512-z+PwLziMNBeSQJonizz2AGnndLsP2DeGHIxDAn+wdHOGuo4Fo1x1HBPPXeE9TAOPHNNWQKCSlA2VZyYyyibDnQ==, tarball: https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.28.6.tgz}
     engines: {node: '>=6.9.0'}

   '@babel/helpers@7.29.2':
-    resolution: {integrity: sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==}
+    resolution: {integrity: sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==, tarball: https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz}
     engines: {node: '>=6.9.0'}

   '@babel/parser@7.29.2':
-    resolution: {integrity: sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==}
+    resolution: {integrity: sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==, tarball: https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz}
     engines: {node: '>=6.0.0'}
     hasBin: true

   '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5':
-    resolution: {integrity: sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q==}
+    resolution: {integrity: sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q==, tarball: https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.28.5.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0

   '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1':
-    resolution: {integrity: sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==}
+    resolution: {integrity: sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==, tarball: https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0

   '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1':
-    resolution: {integrity: sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==}
+    resolution: {integrity: sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==, tarball: https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0

   '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1':
-    resolution: {integrity: sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==}
+    resolution: {integrity: sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==, tarball: https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.13.0

   '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.6':
-    resolution: {integrity: sha512-a0aBScVTlNaiUe35UtfxAN7A/tehvvG4/ByO6+46VPKTRSlfnAFsgKy0FUh+qAkQrDTmhDkT+IBOKlOoMUxQ0g==}
+    resolution: {integrity: sha512-a0aBScVTlNaiUe35UtfxAN7A/tehvvG4/ByO6+46VPKTRSlfnAFsgKy0FUh+qAkQrDTmhDkT+IBOKlOoMUxQ0g==, tarball: https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.6.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0
@@ -4920,13 +4748,13 @@ packages:
       '@babel/core': ^7.0.0-0

   '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2':
-    resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==}
+    resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==, tarball: https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0

   '@babel/plugin-proposal-private-property-in-object@7.21.11':
-    resolution: {integrity: sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==}
+    resolution: {integrity: sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==, tarball: https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.11.tgz}
     engines: {node: '>=6.9.0'}
     deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-property-in-object instead.
     peerDependencies:
@@ -4960,12 +4788,12 @@ packages:
       '@babel/core': ^7.0.0-0

   '@babel/plugin-syntax-dynamic-import@7.8.3':
-    resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==}
+    resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==, tarball: https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz}
     peerDependencies:
       '@babel/core': ^7.0.0-0

   '@babel/plugin-syntax-export-namespace-from@7.8.3':
-    resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==}
+    resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==, tarball: https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz}
     peerDependencies:
       '@babel/core': ^7.0.0-0

@@ -4976,7 +4804,7 @@ packages:
       '@babel/core': ^7.0.0-0

   '@babel/plugin-syntax-import-assertions@7.28.6':
-    resolution: {integrity: sha512-pSJUpFHdx9z5nqTSirOCMtYVP2wFgoWhP0p3g8ONK/4IHhLIBd0B9NYqAvIUAhq+OkhO4VM1tENCt0cjlsNShw==}
+    resolution: {integrity: sha512-pSJUpFHdx9z5nqTSirOCMtYVP2wFgoWhP0p3g8ONK/4IHhLIBd0B9NYqAvIUAhq+OkhO4VM1tENCt0cjlsNShw==, tarball: https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.28.6.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
@@ -5004,18 +4832,18 @@ packages:
       '@babel/core': ^7.0.0-0

   '@babel/plugin-syntax-jsx@7.12.1':
-    resolution: {integrity: sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==}
+    resolution: {integrity: sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==, tarball: https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz}
     peerDependencies:
       '@babel/core': ^7.0.0-0

   '@babel/plugin-syntax-jsx@7.25.7':
-    resolution: {integrity: sha512-ruZOnKO+ajVL/MVx+PwNBPOkrnXTXoWMtte1MBpegfCArhqOe3Bj52avVj1huLLxNKYKXYaSxZ2F+woK1ekXfw==}
+    resolution: {integrity: sha512-ruZOnKO+ajVL/MVx+PwNBPOkrnXTXoWMtte1MBpegfCArhqOe3Bj52avVj1huLLxNKYKXYaSxZ2F+woK1ekXfw==, tarball: https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.7.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0

   '@babel/plugin-syntax-jsx@7.28.6':
-    resolution: {integrity: sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==}
+    resolution: {integrity: sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==, tarball: https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.28.6.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
@@ -5069,103 +4897,103 @@ packages:
       '@babel/core': ^7.0.0-0

   '@babel/plugin-syntax-unicode-sets-regex@7.18.6':
-    resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==}
+    resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==, tarball: https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0

   '@babel/plugin-transform-arrow-functions@7.27.1':
-    resolution: {integrity: sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==}
+    resolution: {integrity: sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==, tarball: https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0

   '@babel/plugin-transform-async-generator-functions@7.29.0':
-    resolution: {integrity: sha512-va0VdWro4zlBr2JsXC+ofCPB2iG12wPtVGTWFx2WLDOM3nYQZZIGP82qku2eW/JR83sD+k2k+CsNtyEbUqhU6w==}
+    resolution: {integrity: sha512-va0VdWro4zlBr2JsXC+ofCPB2iG12wPtVGTWFx2WLDOM3nYQZZIGP82qku2eW/JR83sD+k2k+CsNtyEbUqhU6w==, tarball: https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.29.0.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0

   '@babel/plugin-transform-async-to-generator@7.28.6':
-    resolution: {integrity: sha512-ilTRcmbuXjsMmcZ3HASTe4caH5Tpo93PkTxF9oG2VZsSWsahydmcEHhix9Ik122RcTnZnUzPbmux4wh1swfv7g==}
+    resolution: {integrity: sha512-ilTRcmbuXjsMmcZ3HASTe4caH5Tpo93PkTxF9oG2VZsSWsahydmcEHhix9Ik122RcTnZnUzPbmux4wh1swfv7g==, tarball: https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.28.6.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0

   '@babel/plugin-transform-block-scoped-functions@7.27.1':
-    resolution: {integrity: sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==}
+    resolution: {integrity: sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==, tarball: https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0

   '@babel/plugin-transform-block-scoping@7.28.6':
-    resolution: {integrity: sha512-tt/7wOtBmwHPNMPu7ax4pdPz6shjFrmHDghvNC+FG9Qvj7D6mJcoRQIF5dy4njmxR941l6rgtvfSB2zX3VlUIw==}
+    resolution: {integrity: sha512-tt/7wOtBmwHPNMPu7ax4pdPz6shjFrmHDghvNC+FG9Qvj7D6mJcoRQIF5dy4njmxR941l6rgtvfSB2zX3VlUIw==, tarball: https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.6.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0

   '@babel/plugin-transform-class-properties@7.28.6':
-    resolution: {integrity: sha512-dY2wS3I2G7D697VHndN91TJr8/AAfXQNt5ynCTI/MpxMsSzHp+52uNivYT5wCPax3whc47DR8Ba7cmlQMg24bw==}
+    resolution: {integrity: sha512-dY2wS3I2G7D697VHndN91TJr8/AAfXQNt5ynCTI/MpxMsSzHp+52uNivYT5wCPax3whc47DR8Ba7cmlQMg24bw==, tarball: https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.28.6.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0

   '@babel/plugin-transform-class-static-block@7.28.6':
-    resolution: {integrity: sha512-rfQ++ghVwTWTqQ7w8qyDxL1XGihjBss4CmTgGRCTAC9RIbhVpyp4fOeZtta0Lbf+dTNIVJer6ych2ibHwkZqsQ==}
+    resolution: {integrity: sha512-rfQ++ghVwTWTqQ7w8qyDxL1XGihjBss4CmTgGRCTAC9RIbhVpyp4fOeZtta0Lbf+dTNIVJer6ych2ibHwkZqsQ==, tarball: https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.6.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.12.0

   '@babel/plugin-transform-classes@7.28.6':
-    resolution: {integrity: sha512-EF5KONAqC5zAqT783iMGuM2ZtmEBy+mJMOKl2BCvPZ2lVrwvXnB6o+OBWCS+CoeCCpVRF2sA2RBKUxvT8tQT5Q==}
+    resolution: {integrity: sha512-EF5KONAqC5zAqT783iMGuM2ZtmEBy+mJMOKl2BCvPZ2lVrwvXnB6o+OBWCS+CoeCCpVRF2sA2RBKUxvT8tQT5Q==, tarball: https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.6.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0

   '@babel/plugin-transform-computed-properties@7.28.6':
-    resolution: {integrity: sha512-bcc3k0ijhHbc2lEfpFHgx7eYw9KNXqOerKWfzbxEHUGKnS3sz9C4CNL9OiFN1297bDNfUiSO7DaLzbvHQQQ1BQ==}
+    resolution: {integrity: sha512-bcc3k0ijhHbc2lEfpFHgx7eYw9KNXqOerKWfzbxEHUGKnS3sz9C4CNL9OiFN1297bDNfUiSO7DaLzbvHQQQ1BQ==, tarball: https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.28.6.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0

   '@babel/plugin-transform-destructuring@7.28.5':
-    resolution: {integrity: sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw==}
+    resolution: {integrity: sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw==, tarball: https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.5.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0

   '@babel/plugin-transform-dotall-regex@7.28.6':
-    resolution: {integrity: sha512-SljjowuNKB7q5Oayv4FoPzeB74g3QgLt8IVJw9ADvWy3QnUb/01aw8I4AVv8wYnPvQz2GDDZ/g3GhcNyDBI4Bg==}
+    resolution: {integrity: sha512-SljjowuNKB7q5Oayv4FoPzeB74g3QgLt8IVJw9ADvWy3QnUb/01aw8I4AVv8wYnPvQz2GDDZ/g3GhcNyDBI4Bg==, tarball: https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.28.6.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0

   '@babel/plugin-transform-duplicate-keys@7.27.1':
-    resolution: {integrity: sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==}
+    resolution: {integrity: sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==, tarball: https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0

   '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.29.0':
-    resolution: {integrity: sha512-zBPcW2lFGxdiD8PUnPwJjag2J9otbcLQzvbiOzDxpYXyCuYX9agOwMPGn1prVH0a4qzhCKu24rlH4c1f7yA8rw==}
+    resolution: {integrity: sha512-zBPcW2lFGxdiD8PUnPwJjag2J9otbcLQzvbiOzDxpYXyCuYX9agOwMPGn1prVH0a4qzhCKu24rlH4c1f7yA8rw==, tarball: https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.29.0.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0

   '@babel/plugin-transform-dynamic-import@7.27.1':
-    resolution: {integrity: sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==}
+    resolution: {integrity: sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==, tarball: https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0

   '@babel/plugin-transform-exponentiation-operator@7.28.6':
-    resolution: {integrity: sha512-WitabqiGjV/vJ0aPOLSFfNY1u9U3R7W36B03r5I2KoNix+a3sOhJ3pKFB3R5It9/UiK78NiO0KE9P21cMhlPkw==}
+    resolution: {integrity: sha512-WitabqiGjV/vJ0aPOLSFfNY1u9U3R7W36B03r5I2KoNix+a3sOhJ3pKFB3R5It9/UiK78NiO0KE9P21cMhlPkw==, tarball: https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.28.6.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0

   '@babel/plugin-transform-export-namespace-from@7.27.1':
-    resolution: {integrity: sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==}
+    resolution: {integrity: sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==, tarball: https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
@@ -5177,43 +5005,43 @@ packages:
       '@babel/core': ^7.0.0-0

   '@babel/plugin-transform-for-of@7.27.1':
-    resolution: {integrity: sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==}
+    resolution: {integrity: sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==, tarball: https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0

   '@babel/plugin-transform-function-name@7.27.1':
-    resolution: {integrity: sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==}
+    resolution: {integrity: sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==, tarball: https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0

   '@babel/plugin-transform-json-strings@7.28.6':
-    resolution: {integrity: sha512-Nr+hEN+0geQkzhbdgQVPoqr47lZbm+5fCUmO70722xJZd0Mvb59+33QLImGj6F+DkK3xgDi1YVysP8whD6FQAw==}
+    resolution: {integrity: sha512-Nr+hEN+0geQkzhbdgQVPoqr47lZbm+5fCUmO70722xJZd0Mvb59+33QLImGj6F+DkK3xgDi1YVysP8whD6FQAw==, tarball: https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.28.6.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0

   '@babel/plugin-transform-literals@7.27.1':
-    resolution: {integrity: sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==}
+    resolution: {integrity: sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==, tarball: https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0

   '@babel/plugin-transform-logical-assignment-operators@7.28.6':
-    resolution: {integrity: sha512-+anKKair6gpi8VsM/95kmomGNMD0eLz1NQ8+Pfw5sAwWH9fGYXT50E55ZpV0pHUHWf6IUTWPM+f/7AAff+wr9A==}
+    resolution: {integrity: sha512-+anKKair6gpi8VsM/95kmomGNMD0eLz1NQ8+Pfw5sAwWH9fGYXT50E55ZpV0pHUHWf6IUTWPM+f/7AAff+wr9A==, tarball: https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.28.6.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0

   '@babel/plugin-transform-member-expression-literals@7.27.1':
-    resolution: {integrity: sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==}
+    resolution: {integrity: sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==, tarball: https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0

   '@babel/plugin-transform-modules-amd@7.27.1':
-    resolution: {integrity: sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==}
+    resolution: {integrity: sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==, tarball: https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
@@ -5225,85 +5053,85 @@ packages:
       '@babel/core': ^7.0.0-0

   '@babel/plugin-transform-modules-systemjs@7.29.0':
-    resolution: {integrity: sha512-PrujnVFbOdUpw4UHiVwKvKRLMMic8+eC0CuNlxjsyZUiBjhFdPsewdXCkveh2KqBA9/waD0W1b4hXSOBQJezpQ==}
+    resolution: {integrity: sha512-PrujnVFbOdUpw4UHiVwKvKRLMMic8+eC0CuNlxjsyZUiBjhFdPsewdXCkveh2KqBA9/waD0W1b4hXSOBQJezpQ==, tarball: https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.0.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0

   '@babel/plugin-transform-modules-umd@7.27.1':
-    resolution: {integrity: sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==}
+    resolution: {integrity: sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==, tarball: https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0

   '@babel/plugin-transform-named-capturing-groups-regex@7.29.0':
-    resolution: {integrity: sha512-1CZQA5KNAD6ZYQLPw7oi5ewtDNxH/2vuCh+6SmvgDfhumForvs8a1o9n0UrEoBD8HU4djO2yWngTQlXl1NDVEQ==}
+    resolution: {integrity: sha512-1CZQA5KNAD6ZYQLPw7oi5ewtDNxH/2vuCh+6SmvgDfhumForvs8a1o9n0UrEoBD8HU4djO2yWngTQlXl1NDVEQ==, tarball: https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.29.0.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0

   '@babel/plugin-transform-new-target@7.27.1':
-    resolution: {integrity: sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==}
+    resolution: {integrity: sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==, tarball: https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0

   '@babel/plugin-transform-nullish-coalescing-operator@7.28.6':
-    resolution: {integrity: sha512-3wKbRgmzYbw24mDJXT7N+ADXw8BC/imU9yo9c9X9NKaLF1fW+e5H1U5QjMUBe4Qo4Ox/o++IyUkl1sVCLgevKg==}
+    resolution: {integrity: sha512-3wKbRgmzYbw24mDJXT7N+ADXw8BC/imU9yo9c9X9NKaLF1fW+e5H1U5QjMUBe4Qo4Ox/o++IyUkl1sVCLgevKg==, tarball: https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.28.6.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0

   '@babel/plugin-transform-numeric-separator@7.28.6':
-    resolution: {integrity: sha512-SJR8hPynj8outz+SlStQSwvziMN4+Bq99it4tMIf5/Caq+3iOc0JtKyse8puvyXkk3eFRIA5ID/XfunGgO5i6w==}
+    resolution: {integrity: sha512-SJR8hPynj8outz+SlStQSwvziMN4+Bq99it4tMIf5/Caq+3iOc0JtKyse8puvyXkk3eFRIA5ID/XfunGgO5i6w==, tarball: https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.28.6.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0

   '@babel/plugin-transform-object-rest-spread@7.28.6':
-    resolution: {integrity: sha512-5rh+JR4JBC4pGkXLAcYdLHZjXudVxWMXbB6u6+E9lRL5TrGVbHt1TjxGbZ8CkmYw9zjkB7jutzOROArsqtncEA==}
+    resolution: {integrity: sha512-5rh+JR4JBC4pGkXLAcYdLHZjXudVxWMXbB6u6+E9lRL5TrGVbHt1TjxGbZ8CkmYw9zjkB7jutzOROArsqtncEA==, tarball: https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.6.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0

   '@babel/plugin-transform-object-super@7.27.1':
-    resolution: {integrity: sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==}
+    resolution: {integrity: sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==, tarball: https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0

   '@babel/plugin-transform-optional-catch-binding@7.28.6':
-    resolution: {integrity: sha512-R8ja/Pyrv0OGAvAXQhSTmWyPJPml+0TMqXlO5w+AsMEiwb2fg3WkOvob7UxFSL3OIttFSGSRFKQsOhJ/X6HQdQ==}
+    resolution: {integrity: sha512-R8ja/Pyrv0OGAvAXQhSTmWyPJPml+0TMqXlO5w+AsMEiwb2fg3WkOvob7UxFSL3OIttFSGSRFKQsOhJ/X6HQdQ==, tarball: https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.28.6.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0

   '@babel/plugin-transform-optional-chaining@7.28.6':
-    resolution: {integrity: sha512-A4zobikRGJTsX9uqVFdafzGkqD30t26ck2LmOzAuLL8b2x6k3TIqRiT2xVvA9fNmFeTX484VpsdgmKNA0bS23w==}
+    resolution: {integrity: sha512-A4zobikRGJTsX9uqVFdafzGkqD30t26ck2LmOzAuLL8b2x6k3TIqRiT2xVvA9fNmFeTX484VpsdgmKNA0bS23w==, tarball: https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.28.6.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0

   '@babel/plugin-transform-parameters@7.27.7':
-    resolution: {integrity: sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==}
+    resolution: {integrity: sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==, tarball: https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0

   '@babel/plugin-transform-private-methods@7.28.6':
-    resolution: {integrity: sha512-piiuapX9CRv7+0st8lmuUlRSmX6mBcVeNQ1b4AYzJxfCMuBfB0vBXDiGSmm03pKJw1v6cZ8KSeM+oUnM6yAExg==}
+    resolution: {integrity: sha512-piiuapX9CRv7+0st8lmuUlRSmX6mBcVeNQ1b4AYzJxfCMuBfB0vBXDiGSmm03pKJw1v6cZ8KSeM+oUnM6yAExg==, tarball: https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.28.6.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0

   '@babel/plugin-transform-private-property-in-object@7.28.6':
-    resolution: {integrity: sha512-b97jvNSOb5+ehyQmBpmhOCiUC5oVK4PMnpRvO7+ymFBoqYjeDHIU9jnrNUuwHOiL9RpGDoKBpSViarV+BU+eVA==}
+    resolution: {integrity: sha512-b97jvNSOb5+ehyQmBpmhOCiUC5oVK4PMnpRvO7+ymFBoqYjeDHIU9jnrNUuwHOiL9RpGDoKBpSViarV+BU+eVA==, tarball: https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.28.6.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0

   '@babel/plugin-transform-property-literals@7.27.1':
-    resolution: {integrity: sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==}
+    resolution: {integrity: sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==, tarball: https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
@@ -5315,13 +5143,13 @@ packages:
       '@babel/core': ^7.0.0-0

   '@babel/plugin-transform-react-display-name@7.28.0':
-    resolution: {integrity: sha512-D6Eujc2zMxKjfa4Zxl4GHMsmhKKZ9VpcqIchJLvwTxad9zWIYulwYItBovpDOoNLISpcZSXoDJ5gaGbQUDqViA==}
+    resolution: {integrity: sha512-D6Eujc2zMxKjfa4Zxl4GHMsmhKKZ9VpcqIchJLvwTxad9zWIYulwYItBovpDOoNLISpcZSXoDJ5gaGbQUDqViA==, tarball: https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.28.0.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0

   '@babel/plugin-transform-react-jsx-development@7.27.1':
-    resolution: {integrity: sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==}
+    resolution: {integrity: sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==, tarball: https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.27.1.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
@@ -5339,19 +5167,19 @@ packages:
       '@babel/core': ^7.0.0-0

   '@babel/plugin-transform-react-pure-annotations@7.27.1':
-    resolution: {integrity: sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA==}
+    resolution: {integrity: sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA==, tarball: https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.27.1.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0

   '@babel/plugin-transform-regenerator@7.29.0':
-    resolution: {integrity: sha512-FijqlqMA7DmRdg/aINBSs04y8XNTYw/lr1gJ2WsmBnnaNw1iS43EPkJW+zK7z65auG3AWRFXWj+NcTQwYptUog==}
+    resolution: {integrity: sha512-FijqlqMA7DmRdg/aINBSs04y8XNTYw/lr1gJ2WsmBnnaNw1iS43EPkJW+zK7z65auG3AWRFXWj+NcTQwYptUog==, tarball: https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.29.0.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0

   '@babel/plugin-transform-reserved-words@7.27.1':
-    resolution: {integrity: sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==}
+    resolution: {integrity: sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==, tarball: https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
@@ -5369,67 +5197,67 @@ packages:
       '@babel/core': ^7.0.0-0

   '@babel/plugin-transform-shorthand-properties@7.27.1':
-    resolution: {integrity: sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==}
+    resolution: {integrity: sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==, tarball: https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0

   '@babel/plugin-transform-spread@7.28.6':
-    resolution: {integrity: sha512-9U4QObUC0FtJl05AsUcodau/RWDytrU6uKgkxu09mLR9HLDAtUMoPuuskm5huQsoktmsYpI+bGmq+iapDcriKA==}
+    resolution: {integrity: sha512-9U4QObUC0FtJl05AsUcodau/RWDytrU6uKgkxu09mLR9HLDAtUMoPuuskm5huQsoktmsYpI+bGmq+iapDcriKA==, tarball: https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.28.6.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0

   '@babel/plugin-transform-sticky-regex@7.27.1':
-    resolution: {integrity: sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==}
+    resolution: {integrity: sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==, tarball: https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0

   '@babel/plugin-transform-template-literals@7.27.1':
-    resolution: {integrity: sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==}
+    resolution: {integrity: sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==, tarball: https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0

   '@babel/plugin-transform-typeof-symbol@7.27.1':
-    resolution: {integrity: sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==}
+    resolution: {integrity: sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==, tarball: https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0

   '@babel/plugin-transform-typescript@7.28.6':
-    resolution: {integrity: sha512-0YWL2RFxOqEm9Efk5PvreamxPME8OyY0wM5wh5lHjF+VtVhdneCWGzZeSqzOfiobVqQaNCd2z0tQvnI9DaPWPw==}
+    resolution: {integrity: sha512-0YWL2RFxOqEm9Efk5PvreamxPME8OyY0wM5wh5lHjF+VtVhdneCWGzZeSqzOfiobVqQaNCd2z0tQvnI9DaPWPw==, tarball: https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.6.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0

   '@babel/plugin-transform-unicode-escapes@7.27.1':
-    resolution: {integrity: sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==}
+    resolution: {integrity: sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==, tarball: https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0

   '@babel/plugin-transform-unicode-property-regex@7.28.6':
-    resolution: {integrity: sha512-4Wlbdl/sIZjzi/8St0evF0gEZrgOswVO6aOzqxh1kDZOl9WmLrHq2HtGhnOJZmHZYKP8WZ1MDLCt5DAWwRo57A==}
+    resolution: {integrity: sha512-4Wlbdl/sIZjzi/8St0evF0gEZrgOswVO6aOzqxh1kDZOl9WmLrHq2HtGhnOJZmHZYKP8WZ1MDLCt5DAWwRo57A==, tarball: https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.28.6.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0

   '@babel/plugin-transform-unicode-regex@7.27.1':
-    resolution: {integrity: sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==}
+    resolution: {integrity: sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==, tarball: https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0

   '@babel/plugin-transform-unicode-sets-regex@7.28.6':
-    resolution: {integrity: sha512-/wHc/paTUmsDYN7SZkpWxogTOBNnlx7nBQYfy6JJlCT7G3mVhltk3e++N7zV0XfgGsrqBxd4rJQt9H16I21Y1Q==}
+    resolution: {integrity: sha512-/wHc/paTUmsDYN7SZkpWxogTOBNnlx7nBQYfy6JJlCT7G3mVhltk3e++N7zV0XfgGsrqBxd4rJQt9H16I21Y1Q==, tarball: https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.28.6.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0

   '@babel/preset-env@7.25.7':
-    resolution: {integrity: sha512-Gibz4OUdyNqqLj+7OAvBZxOD7CklCtMA5/j0JgUEwOnaRULsPDXmic2iKxL2DX2vQduPR5wH2hjZas/Vr/Oc0g==}
+    resolution: {integrity: sha512-Gibz4OUdyNqqLj+7OAvBZxOD7CklCtMA5/j0JgUEwOnaRULsPDXmic2iKxL2DX2vQduPR5wH2hjZas/Vr/Oc0g==, tarball: https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.7.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
@@ -5441,18 +5269,18 @@ packages:
       '@babel/core': ^7.0.0-0

   '@babel/preset-modules@0.1.6-no-external-plugins':
-    resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==}
+    resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==, tarball: https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz}
     peerDependencies:
       '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0

   '@babel/preset-react@7.25.7':
-    resolution: {integrity: sha512-GjV0/mUEEXpi1U5ZgDprMRRgajGMRW3G5FjMr5KLKD8nT2fTG8+h/klV3+6Dm5739QE+K5+2e91qFKAYI3pmRg==}
+    resolution: {integrity: sha512-GjV0/mUEEXpi1U5ZgDprMRRgajGMRW3G5FjMr5KLKD8nT2fTG8+h/klV3+6Dm5739QE+K5+2e91qFKAYI3pmRg==, tarball: https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.25.7.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0

   '@babel/preset-typescript@7.25.7':
-    resolution: {integrity: sha512-rkkpaXJZOFN45Fb+Gki0c+KMIglk4+zZXOoMJuyEK8y8Kkc8Jd3BDmP7qPsz0zQMJj+UD7EprF+AqAXcILnexw==}
+    resolution: {integrity: sha512-rkkpaXJZOFN45Fb+Gki0c+KMIglk4+zZXOoMJuyEK8y8Kkc8Jd3BDmP7qPsz0zQMJj+UD7EprF+AqAXcILnexw==, tarball: https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.25.7.tgz}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
@@ -5463,52 +5291,32 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0

-  '@babel/runtime-corejs2@7.5.5':
-    resolution: {integrity: sha512-FYATQVR00NSNi7mUfpPDp7E8RYMXDuO8gaix7u/w3GekfUinKgX1AcTxs7SoiEmoEW9mbpjrwqWSW6zCmw5h8A==}
-
   '@babel/runtime@7.25.7':
-    resolution: {integrity: sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==}
+    resolution: {integrity: sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==, tarball: https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz}
     engines: {node: '>=6.9.0'}

   '@babel/runtime@7.29.2':
-    resolution: {integrity: sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==}
+    resolution: {integrity: sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==, tarball: https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.2.tgz}
     engines: {node: '>=6.9.0'}

   '@babel/template@7.28.6':
-    resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==}
+    resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==, tarball: https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz}
     engines: {node: '>=6.9.0'}

   '@babel/traverse@7.29.0':
-    resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==}
+    resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==, tarball: https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz}
     engines: {node: '>=6.9.0'}

   '@babel/types@7.29.0':
-    resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==}
+    resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==, tarball: https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz}
     engines: {node: '>=6.9.0'}

   '@bartekbp/typescript-checkstyle@5.0.0':
     resolution: {integrity: sha512-c4HUbr7V/6M5W7dGpEkLtjfAM6scvGr2/9OLw1Hv7ohfsnrtd7X43bjcHjX1AmRH27PmTpv1YjihbwU72MTPcw==}
     hasBin: true

-  '@base-ui/react@1.4.1':
-    resolution: {integrity: sha512-Ab5/LIhcmL8BQcsBUYiOfkSDRdLpvgUBzMK30cu684JPcLclYlztharvCZyNNgzJtbAiREzI9q0pI5erHCMgCw==}
-    engines: {node: '>=14.0.0'}
-    peerDependencies:
-      '@date-fns/tz': ^1.2.0
-      '@types/react': 18.3.x
-      date-fns: ^4.0.0
-      react: ^17 || ^18 || ^19
-      react-dom: ^17 || ^18 || ^19
-    peerDependenciesMeta:
-      '@date-fns/tz':
-        optional: true
-      '@types/react':
-        optional: true
-      date-fns:
-        optional: true
-
   '@base-ui/react@1.5.0':
-    resolution: {integrity: sha512-z1gSAlced1yY+iM+mHDEtIkD8UI3Ebs52MuBPxvV6f5hRutk+xvCH/wuB7hDqDzK9JG5FoMz5nhrqtSs1wjt1A==}
+    resolution: {integrity: sha512-z1gSAlced1yY+iM+mHDEtIkD8UI3Ebs52MuBPxvV6f5hRutk+xvCH/wuB7hDqDzK9JG5FoMz5nhrqtSs1wjt1A==, tarball: https://registry.npmjs.org/@base-ui/react/-/react-1.5.0.tgz}
     engines: {node: '>=14.0.0'}
     peerDependencies:
       '@date-fns/tz': ^1.2.0
@@ -5524,18 +5332,8 @@ packages:
       date-fns:
         optional: true

-  '@base-ui/utils@0.2.8':
-    resolution: {integrity: sha512-jvOi+c+ftGlGotNcKnzPVg2IhCaDTB6/6R3JeqdjdXktuAJi3wKH9T7+svuaKh1mmfVU11UWzUZVH74JDfi/wQ==}
-    peerDependencies:
-      '@types/react': 18.3.x
-      react: ^17 || ^18 || ^19
-      react-dom: ^17 || ^18 || ^19
-    peerDependenciesMeta:
-      '@types/react':
-        optional: true
-
   '@base-ui/utils@0.2.9':
-    resolution: {integrity: sha512-x/PDDCYzoqPpjrdyb3VcyylTI2IjUXEtYDGi5foh7KsnmNJIIaVwA2GLgDH1dps1GgXiJbA60hM+AyuTfQzIvw==}
+    resolution: {integrity: sha512-x/PDDCYzoqPpjrdyb3VcyylTI2IjUXEtYDGi5foh7KsnmNJIIaVwA2GLgDH1dps1GgXiJbA60hM+AyuTfQzIvw==, tarball: https://registry.npmjs.org/@base-ui/utils/-/utils-0.2.9.tgz}
     peerDependencies:
       '@types/react': 18.3.x
       react: ^17 || ^18 || ^19
@@ -5662,29 +5460,17 @@ packages:
     resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==}
     engines: {node: '>=10.0.0'}

-  '@dnd-kit/abstract@0.4.0':
-    resolution: {integrity: sha512-loEEJxKT5oLOLeRBJVTO9qpgvvW/Qq902xO20v1JMbpANuN/NLurUdpxIwNpVz+RtOSyzznnbc7lO7psmOhc9A==}
-
   '@dnd-kit/accessibility@3.1.1':
     resolution: {integrity: sha512-2P+YgaXF+gRsIihwwY1gCsQSYnu9Zyj2py8kY5fFvUM1qm2WA2u639R6YNVfU4GWr+ZM5mqEsfHZZLoRONbemw==}
     peerDependencies:
       react: '>=16.8.0'

-  '@dnd-kit/collision@0.4.0':
-    resolution: {integrity: sha512-oOHHUkH1h9Vl2m8TwLw/mPHA7Blf+s0PYcRoLNWNBVxDzugJKZo8WdpU58EMu9qkqyQGrR/YTOozGiMPhlqZ5Q==}
-
   '@dnd-kit/core@6.1.0':
     resolution: {integrity: sha512-J3cQBClB4TVxwGo3KEjssGEXNJqGVWx17aRTZ1ob0FliR5IjYgTxl5YJbKTzA6IzrtelotH19v6y7uoIRUZPSg==}
     peerDependencies:
       react: '>=16.8.0'
       react-dom: '>=16.8.0'

-  '@dnd-kit/dom@0.4.0':
-    resolution: {integrity: sha512-mJDKt0BtlHXetZyrvZXh6++aycleIbYWH/OVC4nlszDh8NvW7q8dfsxFllR5RtLKLcykLaI4o545Figfks/HZQ==}
-
-  '@dnd-kit/geometry@0.4.0':
-    resolution: {integrity: sha512-d1n+CU54V/qF/g792bmJK2oR4f5jOL7Pls2IfC+j9f5UBECpjsYbcPZ/krom/z8LgieqvMh1qrUkdcBjJJ7vpg==}
-
   '@dnd-kit/modifiers@6.0.1':
     resolution: {integrity: sha512-rbxcsg3HhzlcMHVHWDuh9LCjpOVAgqbV78wLGI8tziXY3+qcMQ61qVXIvNKQFuhj75dSfD+o+PYZQ/NUk2A23A==}
     peerDependencies:
@@ -5697,12 +5483,6 @@ packages:
       '@dnd-kit/core': ^6.1.0
       react: '>=16.8.0'

-  '@dnd-kit/react@0.4.0':
-    resolution: {integrity: sha512-J2/N4CpQf98zJBZhMljDNsc+QR4VtUKU9BRO1+Di4OGaB1qafMC4qZ11xKXOkjw+d7h82FRSXmXCo0c8+VWaWg==}
-    peerDependencies:
-      react: ^18.0.0 || ^19.0.0
-      react-dom: ^18.0.0 || ^19.0.0
-
   '@dnd-kit/sortable@7.0.2':
     resolution: {integrity: sha512-wDkBHHf9iCi1veM834Gbk1429bd4lHX4RpAwT0y2cHLf246GAvU2sVw/oxWNpPKQNQRQaeGXhAVgrOl1IT+iyA==}
     peerDependencies:
@@ -5715,9 +5495,6 @@ packages:
       '@dnd-kit/core': ^6.1.0
       react: '>=16.8.0'

-  '@dnd-kit/state@0.4.0':
-    resolution: {integrity: sha512-vVdwOY9VsYdMNa7Z0xQhTXlzHqCcCugGuoM1kzvZhnZ0tYVPRdmIhWfeO6Y2ZoN92JwYAyJRRNl4ICkEe2mneg==}
-
   '@dnd-kit/utilities@3.2.2':
     resolution: {integrity: sha512-+MKAJEOfaBe5SmV6t34p80MMKhjvUz0vRrvVJbPT0WElzaOJ/1xs+D+KDv+tD/NE5ujfrChEcshd4fLn0wpiqg==}
     peerDependencies:
@@ -6156,7 +5933,7 @@ packages:
       react-dom: '>=16.8.0'

   '@floating-ui/react-dom@2.1.8':
-    resolution: {integrity: sha512-cC52bHwM/n/CxS87FH0yWdngEZrjdtLW/qVruo68qg+prK7ZQ4YGdut2GyDVpoGeAYe/h899rVeOVm6Oi40k2A==}
+    resolution: {integrity: sha512-cC52bHwM/n/CxS87FH0yWdngEZrjdtLW/qVruo68qg+prK7ZQ4YGdut2GyDVpoGeAYe/h899rVeOVm6Oi40k2A==, tarball: https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.8.tgz}
     peerDependencies:
       react: '>=16.8.0'
       react-dom: '>=16.8.0'
@@ -6165,19 +5942,19 @@ packages:
     resolution: {integrity: sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==}

   '@formatjs/ecma402-abstract@2.3.6':
-    resolution: {integrity: sha512-HJnTFeRM2kVFVr5gr5kH1XP6K0JcJtE7Lzvtr3FS/so5f1kpsqqqxy5JF+FRaO6H2qmcMfAUIox7AJteieRtVw==}
+    resolution: {integrity: sha512-HJnTFeRM2kVFVr5gr5kH1XP6K0JcJtE7Lzvtr3FS/so5f1kpsqqqxy5JF+FRaO6H2qmcMfAUIox7AJteieRtVw==, tarball: https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-2.3.6.tgz}

   '@formatjs/fast-memoize@2.2.7':
-    resolution: {integrity: sha512-Yabmi9nSvyOMrlSeGGWDiH7rf3a7sIwplbvo/dlz9WCIjzIQAfy1RMf4S0X3yG724n5Ghu2GmEl5NJIV6O9sZQ==}
+    resolution: {integrity: sha512-Yabmi9nSvyOMrlSeGGWDiH7rf3a7sIwplbvo/dlz9WCIjzIQAfy1RMf4S0X3yG724n5Ghu2GmEl5NJIV6O9sZQ==, tarball: https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-2.2.7.tgz}

   '@formatjs/icu-messageformat-parser@2.11.4':
-    resolution: {integrity: sha512-7kR78cRrPNB4fjGFZg3Rmj5aah8rQj9KPzuLsmcSn4ipLXQvC04keycTI1F7kJYDwIXtT2+7IDEto842CfZBtw==}
+    resolution: {integrity: sha512-7kR78cRrPNB4fjGFZg3Rmj5aah8rQj9KPzuLsmcSn4ipLXQvC04keycTI1F7kJYDwIXtT2+7IDEto842CfZBtw==, tarball: https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.11.4.tgz}

   '@formatjs/icu-skeleton-parser@1.8.16':
-    resolution: {integrity: sha512-H13E9Xl+PxBd8D5/6TVUluSpxGNvFSlN/b3coUp0e0JpuWXXnQDiavIpY3NnvSp4xhEMoXyyBvVfdFX8jglOHQ==}
+    resolution: {integrity: sha512-H13E9Xl+PxBd8D5/6TVUluSpxGNvFSlN/b3coUp0e0JpuWXXnQDiavIpY3NnvSp4xhEMoXyyBvVfdFX8jglOHQ==, tarball: https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.8.16.tgz}

   '@formatjs/intl-localematcher@0.6.2':
-    resolution: {integrity: sha512-XOMO2Hupl0wdd172Y06h6kLpBz6Dv+J4okPLl4LPtzbr8f66WbIoy4ev98EBuZ6ZK4h5ydTN6XneT4QVpD7cdA==}
+    resolution: {integrity: sha512-XOMO2Hupl0wdd172Y06h6kLpBz6Dv+J4okPLl4LPtzbr8f66WbIoy4ev98EBuZ6ZK4h5ydTN6XneT4QVpD7cdA==, tarball: https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.6.2.tgz}

   '@gar/promisify@1.1.3':
     resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==}
@@ -6472,7 +6249,7 @@ packages:
     engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}

   '@jridgewell/gen-mapping@0.3.13':
-    resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
+    resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==, tarball: https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz}

   '@jridgewell/resolve-uri@3.1.2':
     resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
@@ -6917,189 +6694,189 @@ packages:
     resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==}

   '@opentelemetry/api-logs@0.57.2':
-    resolution: {integrity: sha512-uIX52NnTM0iBh84MShlpouI7UKqkZ7MrUszTmaypHBu4r7NofznSnQRfJ+uUeDtQDj6w8eFGg5KBLDAwAPz1+A==}
+    resolution: {integrity: sha512-uIX52NnTM0iBh84MShlpouI7UKqkZ7MrUszTmaypHBu4r7NofznSnQRfJ+uUeDtQDj6w8eFGg5KBLDAwAPz1+A==, tarball: https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.57.2.tgz}
     engines: {node: '>=14'}

   '@opentelemetry/api@1.9.1':
-    resolution: {integrity: sha512-gLyJlPHPZYdAk1JENA9LeHejZe1Ti77/pTeFm/nMXmQH/HFZlcS/O2XJB+L8fkbrNSqhdtlvjBVjxwUYanNH5Q==}
+    resolution: {integrity: sha512-gLyJlPHPZYdAk1JENA9LeHejZe1Ti77/pTeFm/nMXmQH/HFZlcS/O2XJB+L8fkbrNSqhdtlvjBVjxwUYanNH5Q==, tarball: https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.1.tgz}
     engines: {node: '>=8.0.0'}

   '@opentelemetry/context-async-hooks@1.30.1':
-    resolution: {integrity: sha512-s5vvxXPVdjqS3kTLKMeBMvop9hbWkwzBpu+mUO2M7sZtlkyDJGwFe33wRKnbaYDo8ExRVBIIdwIGrqpxHuKttA==}
+    resolution: {integrity: sha512-s5vvxXPVdjqS3kTLKMeBMvop9hbWkwzBpu+mUO2M7sZtlkyDJGwFe33wRKnbaYDo8ExRVBIIdwIGrqpxHuKttA==, tarball: https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-1.30.1.tgz}
     engines: {node: '>=14'}
     peerDependencies:
       '@opentelemetry/api': '>=1.0.0 <1.10.0'

   '@opentelemetry/core@1.30.1':
-    resolution: {integrity: sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==}
+    resolution: {integrity: sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==, tarball: https://registry.npmjs.org/@opentelemetry/core/-/core-1.30.1.tgz}
     engines: {node: '>=14'}
     peerDependencies:
       '@opentelemetry/api': '>=1.0.0 <1.10.0'

   '@opentelemetry/instrumentation-amqplib@0.46.1':
-    resolution: {integrity: sha512-AyXVnlCf/xV3K/rNumzKxZqsULyITJH6OVLiW6730JPRqWA7Zc9bvYoVNpN6iOpTU8CasH34SU/ksVJmObFibQ==}
+    resolution: {integrity: sha512-AyXVnlCf/xV3K/rNumzKxZqsULyITJH6OVLiW6730JPRqWA7Zc9bvYoVNpN6iOpTU8CasH34SU/ksVJmObFibQ==, tarball: https://registry.npmjs.org/@opentelemetry/instrumentation-amqplib/-/instrumentation-amqplib-0.46.1.tgz}
     engines: {node: '>=14'}
     peerDependencies:
       '@opentelemetry/api': ^1.3.0

   '@opentelemetry/instrumentation-connect@0.43.1':
-    resolution: {integrity: sha512-ht7YGWQuV5BopMcw5Q2hXn3I8eG8TH0J/kc/GMcW4CuNTgiP6wCu44BOnucJWL3CmFWaRHI//vWyAhaC8BwePw==}
+    resolution: {integrity: sha512-ht7YGWQuV5BopMcw5Q2hXn3I8eG8TH0J/kc/GMcW4CuNTgiP6wCu44BOnucJWL3CmFWaRHI//vWyAhaC8BwePw==, tarball: https://registry.npmjs.org/@opentelemetry/instrumentation-connect/-/instrumentation-connect-0.43.1.tgz}
     engines: {node: '>=14'}
     peerDependencies:
       '@opentelemetry/api': ^1.3.0

   '@opentelemetry/instrumentation-dataloader@0.16.1':
-    resolution: {integrity: sha512-K/qU4CjnzOpNkkKO4DfCLSQshejRNAJtd4esgigo/50nxCB6XCyi1dhAblUHM9jG5dRm8eu0FB+t87nIo99LYQ==}
+    resolution: {integrity: sha512-K/qU4CjnzOpNkkKO4DfCLSQshejRNAJtd4esgigo/50nxCB6XCyi1dhAblUHM9jG5dRm8eu0FB+t87nIo99LYQ==, tarball: https://registry.npmjs.org/@opentelemetry/instrumentation-dataloader/-/instrumentation-dataloader-0.16.1.tgz}
     engines: {node: '>=14'}
     peerDependencies:
       '@opentelemetry/api': ^1.3.0

   '@opentelemetry/instrumentation-express@0.47.1':
-    resolution: {integrity: sha512-QNXPTWteDclR2B4pDFpz0TNghgB33UMjUt14B+BZPmtH1MwUFAfLHBaP5If0Z5NZC+jaH8oF2glgYjrmhZWmSw==}
+    resolution: {integrity: sha512-QNXPTWteDclR2B4pDFpz0TNghgB33UMjUt14B+BZPmtH1MwUFAfLHBaP5If0Z5NZC+jaH8oF2glgYjrmhZWmSw==, tarball: https://registry.npmjs.org/@opentelemetry/instrumentation-express/-/instrumentation-express-0.47.1.tgz}
     engines: {node: '>=14'}
     peerDependencies:
       '@opentelemetry/api': ^1.3.0

   '@opentelemetry/instrumentation-fs@0.19.1':
-    resolution: {integrity: sha512-6g0FhB3B9UobAR60BGTcXg4IHZ6aaYJzp0Ki5FhnxyAPt8Ns+9SSvgcrnsN2eGmk3RWG5vYycUGOEApycQL24A==}
+    resolution: {integrity: sha512-6g0FhB3B9UobAR60BGTcXg4IHZ6aaYJzp0Ki5FhnxyAPt8Ns+9SSvgcrnsN2eGmk3RWG5vYycUGOEApycQL24A==, tarball: https://registry.npmjs.org/@opentelemetry/instrumentation-fs/-/instrumentation-fs-0.19.1.tgz}
     engines: {node: '>=14'}
     peerDependencies:
       '@opentelemetry/api': ^1.3.0

   '@opentelemetry/instrumentation-generic-pool@0.43.1':
-    resolution: {integrity: sha512-M6qGYsp1cURtvVLGDrPPZemMFEbuMmCXgQYTReC/IbimV5sGrLBjB+/hANUpRZjX67nGLdKSVLZuQQAiNz+sww==}
+    resolution: {integrity: sha512-M6qGYsp1cURtvVLGDrPPZemMFEbuMmCXgQYTReC/IbimV5sGrLBjB+/hANUpRZjX67nGLdKSVLZuQQAiNz+sww==, tarball: https://registry.npmjs.org/@opentelemetry/instrumentation-generic-pool/-/instrumentation-generic-pool-0.43.1.tgz}
     engines: {node: '>=14'}
     peerDependencies:
       '@opentelemetry/api': ^1.3.0

   '@opentelemetry/instrumentation-graphql@0.47.1':
-    resolution: {integrity: sha512-EGQRWMGqwiuVma8ZLAZnExQ7sBvbOx0N/AE/nlafISPs8S+QtXX+Viy6dcQwVWwYHQPAcuY3bFt3xgoAwb4ZNQ==}
+    resolution: {integrity: sha512-EGQRWMGqwiuVma8ZLAZnExQ7sBvbOx0N/AE/nlafISPs8S+QtXX+Viy6dcQwVWwYHQPAcuY3bFt3xgoAwb4ZNQ==, tarball: https://registry.npmjs.org/@opentelemetry/instrumentation-graphql/-/instrumentation-graphql-0.47.1.tgz}
     engines: {node: '>=14'}
     peerDependencies:
       '@opentelemetry/api': ^1.3.0

   '@opentelemetry/instrumentation-hapi@0.45.2':
-    resolution: {integrity: sha512-7Ehow/7Wp3aoyCrZwQpU7a2CnoMq0XhIcioFuKjBb0PLYfBfmTsFTUyatlHu0fRxhwcRsSQRTvEhmZu8CppBpQ==}
+    resolution: {integrity: sha512-7Ehow/7Wp3aoyCrZwQpU7a2CnoMq0XhIcioFuKjBb0PLYfBfmTsFTUyatlHu0fRxhwcRsSQRTvEhmZu8CppBpQ==, tarball: https://registry.npmjs.org/@opentelemetry/instrumentation-hapi/-/instrumentation-hapi-0.45.2.tgz}
     engines: {node: '>=14'}
     peerDependencies:
       '@opentelemetry/api': ^1.3.0

   '@opentelemetry/instrumentation-http@0.57.2':
-    resolution: {integrity: sha512-1Uz5iJ9ZAlFOiPuwYg29Bf7bJJc/GeoeJIFKJYQf67nTVKFe8RHbEtxgkOmK4UGZNHKXcpW4P8cWBYzBn1USpg==}
+    resolution: {integrity: sha512-1Uz5iJ9ZAlFOiPuwYg29Bf7bJJc/GeoeJIFKJYQf67nTVKFe8RHbEtxgkOmK4UGZNHKXcpW4P8cWBYzBn1USpg==, tarball: https://registry.npmjs.org/@opentelemetry/instrumentation-http/-/instrumentation-http-0.57.2.tgz}
     engines: {node: '>=14'}
     peerDependencies:
       '@opentelemetry/api': ^1.3.0

   '@opentelemetry/instrumentation-ioredis@0.47.1':
-    resolution: {integrity: sha512-OtFGSN+kgk/aoKgdkKQnBsQFDiG8WdCxu+UrHr0bXScdAmtSzLSraLo7wFIb25RVHfRWvzI5kZomqJYEg/l1iA==}
+    resolution: {integrity: sha512-OtFGSN+kgk/aoKgdkKQnBsQFDiG8WdCxu+UrHr0bXScdAmtSzLSraLo7wFIb25RVHfRWvzI5kZomqJYEg/l1iA==, tarball: https://registry.npmjs.org/@opentelemetry/instrumentation-ioredis/-/instrumentation-ioredis-0.47.1.tgz}
     engines: {node: '>=14'}
     peerDependencies:
       '@opentelemetry/api': ^1.3.0

   '@opentelemetry/instrumentation-kafkajs@0.7.1':
-    resolution: {integrity: sha512-OtjaKs8H7oysfErajdYr1yuWSjMAectT7Dwr+axIoZqT9lmEOkD/H/3rgAs8h/NIuEi2imSXD+vL4MZtOuJfqQ==}
+    resolution: {integrity: sha512-OtjaKs8H7oysfErajdYr1yuWSjMAectT7Dwr+axIoZqT9lmEOkD/H/3rgAs8h/NIuEi2imSXD+vL4MZtOuJfqQ==, tarball: https://registry.npmjs.org/@opentelemetry/instrumentation-kafkajs/-/instrumentation-kafkajs-0.7.1.tgz}
     engines: {node: '>=14'}
     peerDependencies:
       '@opentelemetry/api': ^1.3.0

   '@opentelemetry/instrumentation-knex@0.44.1':
-    resolution: {integrity: sha512-U4dQxkNhvPexffjEmGwCq68FuftFK15JgUF05y/HlK3M6W/G2iEaACIfXdSnwVNe9Qh0sPfw8LbOPxrWzGWGMQ==}
+    resolution: {integrity: sha512-U4dQxkNhvPexffjEmGwCq68FuftFK15JgUF05y/HlK3M6W/G2iEaACIfXdSnwVNe9Qh0sPfw8LbOPxrWzGWGMQ==, tarball: https://registry.npmjs.org/@opentelemetry/instrumentation-knex/-/instrumentation-knex-0.44.1.tgz}
     engines: {node: '>=14'}
     peerDependencies:
       '@opentelemetry/api': ^1.3.0

   '@opentelemetry/instrumentation-koa@0.47.1':
-    resolution: {integrity: sha512-l/c+Z9F86cOiPJUllUCt09v+kICKvT+Vg1vOAJHtHPsJIzurGayucfCMq2acd/A/yxeNWunl9d9eqZ0G+XiI6A==}
+    resolution: {integrity: sha512-l/c+Z9F86cOiPJUllUCt09v+kICKvT+Vg1vOAJHtHPsJIzurGayucfCMq2acd/A/yxeNWunl9d9eqZ0G+XiI6A==, tarball: https://registry.npmjs.org/@opentelemetry/instrumentation-koa/-/instrumentation-koa-0.47.1.tgz}
     engines: {node: '>=14'}
     peerDependencies:
       '@opentelemetry/api': ^1.3.0

   '@opentelemetry/instrumentation-lru-memoizer@0.44.1':
-    resolution: {integrity: sha512-5MPkYCvG2yw7WONEjYj5lr5JFehTobW7wX+ZUFy81oF2lr9IPfZk9qO+FTaM0bGEiymwfLwKe6jE15nHn1nmHg==}
+    resolution: {integrity: sha512-5MPkYCvG2yw7WONEjYj5lr5JFehTobW7wX+ZUFy81oF2lr9IPfZk9qO+FTaM0bGEiymwfLwKe6jE15nHn1nmHg==, tarball: https://registry.npmjs.org/@opentelemetry/instrumentation-lru-memoizer/-/instrumentation-lru-memoizer-0.44.1.tgz}
     engines: {node: '>=14'}
     peerDependencies:
       '@opentelemetry/api': ^1.3.0

   '@opentelemetry/instrumentation-mongodb@0.52.0':
-    resolution: {integrity: sha512-1xmAqOtRUQGR7QfJFfGV/M2kC7wmI2WgZdpru8hJl3S0r4hW0n3OQpEHlSGXJAaNFyvT+ilnwkT+g5L4ljHR6g==}
+    resolution: {integrity: sha512-1xmAqOtRUQGR7QfJFfGV/M2kC7wmI2WgZdpru8hJl3S0r4hW0n3OQpEHlSGXJAaNFyvT+ilnwkT+g5L4ljHR6g==, tarball: https://registry.npmjs.org/@opentelemetry/instrumentation-mongodb/-/instrumentation-mongodb-0.52.0.tgz}
     engines: {node: '>=14'}
     peerDependencies:
       '@opentelemetry/api': ^1.3.0

   '@opentelemetry/instrumentation-mongoose@0.46.1':
-    resolution: {integrity: sha512-3kINtW1LUTPkiXFRSSBmva1SXzS/72we/jL22N+BnF3DFcoewkdkHPYOIdAAk9gSicJ4d5Ojtt1/HeibEc5OQg==}
+    resolution: {integrity: sha512-3kINtW1LUTPkiXFRSSBmva1SXzS/72we/jL22N+BnF3DFcoewkdkHPYOIdAAk9gSicJ4d5Ojtt1/HeibEc5OQg==, tarball: https://registry.npmjs.org/@opentelemetry/instrumentation-mongoose/-/instrumentation-mongoose-0.46.1.tgz}
     engines: {node: '>=14'}
     peerDependencies:
       '@opentelemetry/api': ^1.3.0

   '@opentelemetry/instrumentation-mysql2@0.45.2':
-    resolution: {integrity: sha512-h6Ad60FjCYdJZ5DTz1Lk2VmQsShiViKe0G7sYikb0GHI0NVvApp2XQNRHNjEMz87roFttGPLHOYVPlfy+yVIhQ==}
+    resolution: {integrity: sha512-h6Ad60FjCYdJZ5DTz1Lk2VmQsShiViKe0G7sYikb0GHI0NVvApp2XQNRHNjEMz87roFttGPLHOYVPlfy+yVIhQ==, tarball: https://registry.npmjs.org/@opentelemetry/instrumentation-mysql2/-/instrumentation-mysql2-0.45.2.tgz}
     engines: {node: '>=14'}
     peerDependencies:
       '@opentelemetry/api': ^1.3.0

   '@opentelemetry/instrumentation-mysql@0.45.1':
-    resolution: {integrity: sha512-TKp4hQ8iKQsY7vnp/j0yJJ4ZsP109Ht6l4RHTj0lNEG1TfgTrIH5vJMbgmoYXWzNHAqBH2e7fncN12p3BP8LFg==}
+    resolution: {integrity: sha512-TKp4hQ8iKQsY7vnp/j0yJJ4ZsP109Ht6l4RHTj0lNEG1TfgTrIH5vJMbgmoYXWzNHAqBH2e7fncN12p3BP8LFg==, tarball: https://registry.npmjs.org/@opentelemetry/instrumentation-mysql/-/instrumentation-mysql-0.45.1.tgz}
     engines: {node: '>=14'}
     peerDependencies:
       '@opentelemetry/api': ^1.3.0

   '@opentelemetry/instrumentation-pg@0.51.1':
-    resolution: {integrity: sha512-QxgjSrxyWZc7Vk+qGSfsejPVFL1AgAJdSBMYZdDUbwg730D09ub3PXScB9d04vIqPriZ+0dqzjmQx0yWKiCi2Q==}
+    resolution: {integrity: sha512-QxgjSrxyWZc7Vk+qGSfsejPVFL1AgAJdSBMYZdDUbwg730D09ub3PXScB9d04vIqPriZ+0dqzjmQx0yWKiCi2Q==, tarball: https://registry.npmjs.org/@opentelemetry/instrumentation-pg/-/instrumentation-pg-0.51.1.tgz}
     engines: {node: '>=14'}
     peerDependencies:
       '@opentelemetry/api': ^1.3.0

   '@opentelemetry/instrumentation-redis-4@0.46.1':
-    resolution: {integrity: sha512-UMqleEoabYMsWoTkqyt9WAzXwZ4BlFZHO40wr3d5ZvtjKCHlD4YXLm+6OLCeIi/HkX7EXvQaz8gtAwkwwSEvcQ==}
+    resolution: {integrity: sha512-UMqleEoabYMsWoTkqyt9WAzXwZ4BlFZHO40wr3d5ZvtjKCHlD4YXLm+6OLCeIi/HkX7EXvQaz8gtAwkwwSEvcQ==, tarball: https://registry.npmjs.org/@opentelemetry/instrumentation-redis-4/-/instrumentation-redis-4-0.46.1.tgz}
     engines: {node: '>=14'}
     peerDependencies:
       '@opentelemetry/api': ^1.3.0

   '@opentelemetry/instrumentation-tedious@0.18.1':
-    resolution: {integrity: sha512-5Cuy/nj0HBaH+ZJ4leuD7RjgvA844aY2WW+B5uLcWtxGjRZl3MNLuxnNg5DYWZNPO+NafSSnra0q49KWAHsKBg==}
+    resolution: {integrity: sha512-5Cuy/nj0HBaH+ZJ4leuD7RjgvA844aY2WW+B5uLcWtxGjRZl3MNLuxnNg5DYWZNPO+NafSSnra0q49KWAHsKBg==, tarball: https://registry.npmjs.org/@opentelemetry/instrumentation-tedious/-/instrumentation-tedious-0.18.1.tgz}
     engines: {node: '>=14'}
     peerDependencies:
       '@opentelemetry/api': ^1.3.0

   '@opentelemetry/instrumentation-undici@0.10.1':
-    resolution: {integrity: sha512-rkOGikPEyRpMCmNu9AQuV5dtRlDmJp2dK5sw8roVshAGoB6hH/3QjDtRhdwd75SsJwgynWUNRUYe0wAkTo16tQ==}
+    resolution: {integrity: sha512-rkOGikPEyRpMCmNu9AQuV5dtRlDmJp2dK5sw8roVshAGoB6hH/3QjDtRhdwd75SsJwgynWUNRUYe0wAkTo16tQ==, tarball: https://registry.npmjs.org/@opentelemetry/instrumentation-undici/-/instrumentation-undici-0.10.1.tgz}
     engines: {node: '>=14'}
     peerDependencies:
       '@opentelemetry/api': ^1.7.0

   '@opentelemetry/instrumentation@0.57.2':
-    resolution: {integrity: sha512-BdBGhQBh8IjZ2oIIX6F2/Q3LKm/FDDKi6ccYKcBTeilh6SNdNKveDOLk73BkSJjQLJk6qe4Yh+hHw1UPhCDdrg==}
+    resolution: {integrity: sha512-BdBGhQBh8IjZ2oIIX6F2/Q3LKm/FDDKi6ccYKcBTeilh6SNdNKveDOLk73BkSJjQLJk6qe4Yh+hHw1UPhCDdrg==, tarball: https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.57.2.tgz}
     engines: {node: '>=14'}
     peerDependencies:
       '@opentelemetry/api': ^1.3.0

   '@opentelemetry/redis-common@0.36.2':
-    resolution: {integrity: sha512-faYX1N0gpLhej/6nyp6bgRjzAKXn5GOEMYY7YhciSfCoITAktLUtQ36d24QEWNA1/WA1y6qQunCe0OhHRkVl9g==}
+    resolution: {integrity: sha512-faYX1N0gpLhej/6nyp6bgRjzAKXn5GOEMYY7YhciSfCoITAktLUtQ36d24QEWNA1/WA1y6qQunCe0OhHRkVl9g==, tarball: https://registry.npmjs.org/@opentelemetry/redis-common/-/redis-common-0.36.2.tgz}
     engines: {node: '>=14'}

   '@opentelemetry/resources@1.30.1':
-    resolution: {integrity: sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA==}
+    resolution: {integrity: sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA==, tarball: https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.30.1.tgz}
     engines: {node: '>=14'}
     peerDependencies:
       '@opentelemetry/api': '>=1.0.0 <1.10.0'

   '@opentelemetry/sdk-trace-base@1.30.1':
-    resolution: {integrity: sha512-jVPgBbH1gCy2Lb7X0AVQ8XAfgg0pJ4nvl8/IiQA6nxOsPvS+0zMJaFSs2ltXe0J6C8dqjcnpyqINDJmU30+uOg==}
+    resolution: {integrity: sha512-jVPgBbH1gCy2Lb7X0AVQ8XAfgg0pJ4nvl8/IiQA6nxOsPvS+0zMJaFSs2ltXe0J6C8dqjcnpyqINDJmU30+uOg==, tarball: https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.30.1.tgz}
     engines: {node: '>=14'}
     peerDependencies:
       '@opentelemetry/api': '>=1.0.0 <1.10.0'

   '@opentelemetry/semantic-conventions@1.28.0':
-    resolution: {integrity: sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==}
+    resolution: {integrity: sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==, tarball: https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz}
     engines: {node: '>=14'}

   '@opentelemetry/semantic-conventions@1.40.0':
-    resolution: {integrity: sha512-cifvXDhcqMwwTlTK04GBNeIe7yyo28Mfby85QXFe1Yk8nmi36Ab/5UQwptOx84SsoGNRg+EVSjwzfSZMy6pmlw==}
+    resolution: {integrity: sha512-cifvXDhcqMwwTlTK04GBNeIe7yyo28Mfby85QXFe1Yk8nmi36Ab/5UQwptOx84SsoGNRg+EVSjwzfSZMy6pmlw==, tarball: https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.40.0.tgz}
     engines: {node: '>=14'}

   '@opentelemetry/sql-common@0.40.1':
-    resolution: {integrity: sha512-nSDlnHSqzC3pXn/wZEZVLuAuJ1MYMXPBwtv2qAbCa3847SaHItdE7SzUq/Jtb0KZmh1zfAbNi3AAMjztTT4Ugg==}
+    resolution: {integrity: sha512-nSDlnHSqzC3pXn/wZEZVLuAuJ1MYMXPBwtv2qAbCa3847SaHItdE7SzUq/Jtb0KZmh1zfAbNi3AAMjztTT4Ugg==, tarball: https://registry.npmjs.org/@opentelemetry/sql-common/-/sql-common-0.40.1.tgz}
     engines: {node: '>=14'}
     peerDependencies:
       '@opentelemetry/api': ^1.1.0
@@ -7216,7 +6993,7 @@ packages:
     resolution: {integrity: sha512-XO7cAxhnTZl0Yggq6jOgjiOHhbgcO4NqFqwSmQpjK3b6TEE6Uj/jfSk6wzYyemh3+I0sHirKSetjQwn5cZktFw==}

   '@paulirish/trace_engine@0.0.59':
-    resolution: {integrity: sha512-439NUzQGmH+9Y017/xCchBP9571J4bzhpcNhrxorf7r37wcyJZkgUfrUsRL3xl+JDcZ6ORhoFCzCw98c6S3YHw==}
+    resolution: {integrity: sha512-439NUzQGmH+9Y017/xCchBP9571J4bzhpcNhrxorf7r37wcyJZkgUfrUsRL3xl+JDcZ6ORhoFCzCw98c6S3YHw==, tarball: https://registry.npmjs.org/@paulirish/trace_engine/-/trace_engine-0.0.59.tgz}

   '@paypal/paypal-js@9.6.0':
     resolution: {integrity: sha512-XVUC/2iUFcnz4cOgzTRPB0AltF2VHbALToClefCS7ehnINSx7UWKpShQbs3IIdALCaqtUDciQI8iFaBw12wM0g==}
@@ -7355,12 +7132,12 @@ packages:
       preact: 10.x

   '@prisma/instrumentation@6.11.1':
-    resolution: {integrity: sha512-mrZOev24EDhnefmnZX7WVVT7v+r9LttPRqf54ONvj6re4XMF7wFTpK2tLJi4XHB7fFp/6xhYbgRel8YV7gQiyA==}
+    resolution: {integrity: sha512-mrZOev24EDhnefmnZX7WVVT7v+r9LttPRqf54ONvj6re4XMF7wFTpK2tLJi4XHB7fFp/6xhYbgRel8YV7gQiyA==, tarball: https://registry.npmjs.org/@prisma/instrumentation/-/instrumentation-6.11.1.tgz}
     peerDependencies:
       '@opentelemetry/api': ^1.8

   '@puppeteer/browsers@2.13.0':
-    resolution: {integrity: sha512-46BZJYJjc/WwmKjsvDFykHtXrtomsCIrwYQPOP7VfMJoZY2bsDF9oROBABR3paDjDcmkUye1Pb1BqdcdiipaWA==}
+    resolution: {integrity: sha512-46BZJYJjc/WwmKjsvDFykHtXrtomsCIrwYQPOP7VfMJoZY2bsDF9oROBABR3paDjDcmkUye1Pb1BqdcdiipaWA==, tarball: https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.13.0.tgz}
     engines: {node: '>=18'}
     hasBin: true

@@ -7473,7 +7250,7 @@ packages:
       react-dom: ^16.8 || ^17.0 || ^18.0

   '@radix-ui/react-dialog@1.1.15':
-    resolution: {integrity: sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==}
+    resolution: {integrity: sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==, tarball: https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.15.tgz}
     peerDependencies:
       '@types/react': 18.3.x
       '@types/react-dom': '*'
@@ -7523,7 +7300,7 @@ packages:
         optional: true

   '@radix-ui/react-dismissable-layer@1.1.11':
-    resolution: {integrity: sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==}
+    resolution: {integrity: sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==, tarball: https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.11.tgz}
     peerDependencies:
       '@types/react': 18.3.x
       '@types/react-dom': '*'
@@ -7550,7 +7327,7 @@ packages:
         optional: true

   '@radix-ui/react-focus-guards@1.1.3':
-    resolution: {integrity: sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==}
+    resolution: {integrity: sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==, tarball: https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.3.tgz}
     peerDependencies:
       '@types/react': 18.3.x
       react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
@@ -7578,7 +7355,7 @@ packages:
         optional: true

   '@radix-ui/react-focus-scope@1.1.7':
-    resolution: {integrity: sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==}
+    resolution: {integrity: sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==, tarball: https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.7.tgz}
     peerDependencies:
       '@types/react': 18.3.x
       '@types/react-dom': '*'
@@ -7646,7 +7423,7 @@ packages:
         optional: true

   '@radix-ui/react-portal@1.1.9':
-    resolution: {integrity: sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==}
+    resolution: {integrity: sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==, tarball: https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.9.tgz}
     peerDependencies:
       '@types/react': 18.3.x
       '@types/react-dom': '*'
@@ -7665,7 +7442,7 @@ packages:
       react-dom: ^16.8 || ^17.0 || ^18.0

   '@radix-ui/react-presence@1.1.5':
-    resolution: {integrity: sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==}
+    resolution: {integrity: sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==, tarball: https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.5.tgz}
     peerDependencies:
       '@types/react': 18.3.x
       '@types/react-dom': '*'
@@ -7710,7 +7487,7 @@ packages:
         optional: true

   '@radix-ui/react-primitive@2.1.4':
-    resolution: {integrity: sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg==}
+    resolution: {integrity: sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg==, tarball: https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.4.tgz}
     peerDependencies:
       '@types/react': 18.3.x
       '@types/react-dom': '*'
@@ -7785,7 +7562,7 @@ packages:
         optional: true

   '@radix-ui/react-slot@1.2.4':
-    resolution: {integrity: sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA==}
+    resolution: {integrity: sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA==, tarball: https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.4.tgz}
     peerDependencies:
       '@types/react': 18.3.x
       react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
@@ -7902,7 +7679,7 @@ packages:
         optional: true

   '@radix-ui/react-use-escape-keydown@1.1.1':
-    resolution: {integrity: sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==}
+    resolution: {integrity: sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==, tarball: https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.1.tgz}
     peerDependencies:
       '@types/react': 18.3.x
       react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
@@ -8011,11 +7788,11 @@ packages:
     resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==}

   '@sentry/core@9.47.1':
-    resolution: {integrity: sha512-KX62+qIt4xgy8eHKHiikfhz2p5fOciXd0Cl+dNzhgPFq8klq4MGMNaf148GB3M/vBqP4nw/eFvRMAayFCgdRQw==}
+    resolution: {integrity: sha512-KX62+qIt4xgy8eHKHiikfhz2p5fOciXd0Cl+dNzhgPFq8klq4MGMNaf148GB3M/vBqP4nw/eFvRMAayFCgdRQw==, tarball: https://registry.npmjs.org/@sentry/core/-/core-9.47.1.tgz}
     engines: {node: '>=18'}

   '@sentry/node-core@9.47.1':
-    resolution: {integrity: sha512-7TEOiCGkyShJ8CKtsri9lbgMCbB+qNts2Xq37itiMPN2m+lIukK3OX//L8DC5nfKYZlgikrefS63/vJtm669hQ==}
+    resolution: {integrity: sha512-7TEOiCGkyShJ8CKtsri9lbgMCbB+qNts2Xq37itiMPN2m+lIukK3OX//L8DC5nfKYZlgikrefS63/vJtm669hQ==, tarball: https://registry.npmjs.org/@sentry/node-core/-/node-core-9.47.1.tgz}
     engines: {node: '>=18'}
     peerDependencies:
       '@opentelemetry/api': ^1.9.0
@@ -8027,11 +7804,11 @@ packages:
       '@opentelemetry/semantic-conventions': ^1.34.0

   '@sentry/node@9.47.1':
-    resolution: {integrity: sha512-CDbkasBz3fnWRKSFs6mmaRepM2pa+tbZkrqhPWifFfIkJDidtVW40p6OnquTvPXyPAszCnDZRnZT14xyvNmKPQ==}
+    resolution: {integrity: sha512-CDbkasBz3fnWRKSFs6mmaRepM2pa+tbZkrqhPWifFfIkJDidtVW40p6OnquTvPXyPAszCnDZRnZT14xyvNmKPQ==, tarball: https://registry.npmjs.org/@sentry/node/-/node-9.47.1.tgz}
     engines: {node: '>=18'}

   '@sentry/opentelemetry@9.47.1':
-    resolution: {integrity: sha512-STtFpjF7lwzeoedDJV+5XA6P89BfmFwFftmHSGSe3UTI8z8IoiR5yB6X2vCjSPvXlfeOs13qCNNCEZyznxM8Xw==}
+    resolution: {integrity: sha512-STtFpjF7lwzeoedDJV+5XA6P89BfmFwFftmHSGSe3UTI8z8IoiR5yB6X2vCjSPvXlfeOs13qCNNCEZyznxM8Xw==, tarball: https://registry.npmjs.org/@sentry/opentelemetry/-/opentelemetry-9.47.1.tgz}
     engines: {node: '>=18'}
     peerDependencies:
       '@opentelemetry/api': ^1.9.0
@@ -8961,44 +8738,44 @@ packages:
     engines: {node: '>=16.0.0'}

   '@tannin/compile@1.1.0':
-    resolution: {integrity: sha512-n8m9eNDfoNZoxdvWiTfW/hSPhehzLJ3zW7f8E7oT6mCROoMNWCB4TYtv041+2FMAxweiE0j7i1jubQU4MEC/Gg==}
+    resolution: {integrity: sha512-n8m9eNDfoNZoxdvWiTfW/hSPhehzLJ3zW7f8E7oT6mCROoMNWCB4TYtv041+2FMAxweiE0j7i1jubQU4MEC/Gg==, tarball: https://registry.npmjs.org/@tannin/compile/-/compile-1.1.0.tgz}

   '@tannin/evaluate@1.2.0':
-    resolution: {integrity: sha512-3ioXvNowbO/wSrxsDG5DKIMxC81P0QrQTYai8zFNY+umuoHWRPbQ/TuuDEOju9E+jQDXmj6yI5GyejNuh8I+eg==}
+    resolution: {integrity: sha512-3ioXvNowbO/wSrxsDG5DKIMxC81P0QrQTYai8zFNY+umuoHWRPbQ/TuuDEOju9E+jQDXmj6yI5GyejNuh8I+eg==, tarball: https://registry.npmjs.org/@tannin/evaluate/-/evaluate-1.2.0.tgz}

   '@tannin/plural-forms@1.1.0':
-    resolution: {integrity: sha512-xl9R2mDZO/qiHam1AgMnAES6IKIg7OBhcXqy6eDsRCdXuxAFPcjrej9HMjyCLE0DJ/8cHf0i5OQTstuBRhpbHw==}
+    resolution: {integrity: sha512-xl9R2mDZO/qiHam1AgMnAES6IKIg7OBhcXqy6eDsRCdXuxAFPcjrej9HMjyCLE0DJ/8cHf0i5OQTstuBRhpbHw==, tarball: https://registry.npmjs.org/@tannin/plural-forms/-/plural-forms-1.1.0.tgz}

   '@tannin/postfix@1.1.0':
-    resolution: {integrity: sha512-oocsqY7g0cR+Gur5jRQLSrX2OtpMLMse1I10JQBm8CdGMrDkh1Mg2gjsiquMHRtBs4Qwu5wgEp5GgIYHk4SNPw==}
+    resolution: {integrity: sha512-oocsqY7g0cR+Gur5jRQLSrX2OtpMLMse1I10JQBm8CdGMrDkh1Mg2gjsiquMHRtBs4Qwu5wgEp5GgIYHk4SNPw==, tarball: https://registry.npmjs.org/@tannin/postfix/-/postfix-1.1.0.tgz}

   '@tannin/sprintf@1.3.3':
-    resolution: {integrity: sha512-RwARl+hFwhzy0tg9atWcchLFvoQiOh4rrP7uG2N5E4W80BPCUX0ElcUR9St43fxB9EfjsW2df9Qp+UsTbvQDjA==}
+    resolution: {integrity: sha512-RwARl+hFwhzy0tg9atWcchLFvoQiOh4rrP7uG2N5E4W80BPCUX0ElcUR9St43fxB9EfjsW2df9Qp+UsTbvQDjA==, tarball: https://registry.npmjs.org/@tannin/sprintf/-/sprintf-1.3.3.tgz}

   '@tanstack/history@1.161.6':
-    resolution: {integrity: sha512-NaOGLRrddszbQj9upGat6HG/4TKvXLvu+osAIgfxPYA+eIvYKv8GKDJOrY2D3/U9MRnKfMWD7bU4jeD4xmqyIg==}
+    resolution: {integrity: sha512-NaOGLRrddszbQj9upGat6HG/4TKvXLvu+osAIgfxPYA+eIvYKv8GKDJOrY2D3/U9MRnKfMWD7bU4jeD4xmqyIg==, tarball: https://registry.npmjs.org/@tanstack/history/-/history-1.161.6.tgz}
     engines: {node: '>=20.19'}

   '@tanstack/react-router@1.168.21':
-    resolution: {integrity: sha512-slnitYiHHmU52eMWtW8JbV9EMT5q6mRMbTA5yepBmJAnj5WZDrDRsLY/TuUrdD97A4W7/25tEQRoqc1G2X0oCw==}
+    resolution: {integrity: sha512-slnitYiHHmU52eMWtW8JbV9EMT5q6mRMbTA5yepBmJAnj5WZDrDRsLY/TuUrdD97A4W7/25tEQRoqc1G2X0oCw==, tarball: https://registry.npmjs.org/@tanstack/react-router/-/react-router-1.168.21.tgz}
     engines: {node: '>=20.19'}
     peerDependencies:
       react: '>=18.0.0 || >=19.0.0'
       react-dom: '>=18.0.0 || >=19.0.0'

   '@tanstack/react-store@0.9.3':
-    resolution: {integrity: sha512-y2iHd/N9OkoQbFJLUX1T9vbc2O9tjH0pQRgTcx1/Nz4IlwLvkgpuglXUx+mXt0g5ZDFrEeDnONPqkbfxXJKwRg==}
+    resolution: {integrity: sha512-y2iHd/N9OkoQbFJLUX1T9vbc2O9tjH0pQRgTcx1/Nz4IlwLvkgpuglXUx+mXt0g5ZDFrEeDnONPqkbfxXJKwRg==, tarball: https://registry.npmjs.org/@tanstack/react-store/-/react-store-0.9.3.tgz}
     peerDependencies:
       react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
       react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0

   '@tanstack/router-core@1.168.15':
-    resolution: {integrity: sha512-Wr0424NDtD8fT/uALobMZ9DdcfsTyXtW5IPR++7zvW8/7RaIOeaqXpVDId8ywaGtqPWLWOfaUg2zUtYtukoXYA==}
+    resolution: {integrity: sha512-Wr0424NDtD8fT/uALobMZ9DdcfsTyXtW5IPR++7zvW8/7RaIOeaqXpVDId8ywaGtqPWLWOfaUg2zUtYtukoXYA==, tarball: https://registry.npmjs.org/@tanstack/router-core/-/router-core-1.168.15.tgz}
     engines: {node: '>=20.19'}
     hasBin: true

   '@tanstack/store@0.9.3':
-    resolution: {integrity: sha512-8reSzl/qGWGGVKhBoxXPMWzATSbZLZFWhwBAFO9NAyp0TxzfBP0mIrGb8CP8KrQTmvzXlR/vFPPUrHTLBGyFyw==}
+    resolution: {integrity: sha512-8reSzl/qGWGGVKhBoxXPMWzATSbZLZFWhwBAFO9NAyp0TxzfBP0mIrGb8CP8KrQTmvzXlR/vFPPUrHTLBGyFyw==, tarball: https://registry.npmjs.org/@tanstack/store/-/store-0.9.3.tgz}

   '@testing-library/dom@10.4.1':
     resolution: {integrity: sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==}
@@ -9203,10 +8980,10 @@ packages:
     resolution: {integrity: sha512-AjwI4MvWx3HAOaZqYsjKWyEObT9lcVV0Y0V8nXo6cXzN8ZiMxVhf6F3d/UNvXVGKrEzL/Dluc5p+y9GkzlTWig==}

   '@types/eslint-scope@3.7.7':
-    resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==}
+    resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==, tarball: https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz}

   '@types/eslint@9.6.1':
-    resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==}
+    resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==, tarball: https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz}

   '@types/esrecurse@4.3.1':
     resolution: {integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==}
@@ -9246,7 +9023,7 @@ packages:
     resolution: {integrity: sha512-XDbrTSBlQV9nxE1GiDL3FaOPy4G/KaJkhDutBX48Kg8CYZMBARyyDFGCWfWJn4pobmInmwud1xxH7VJMAr0CKQ==}

   '@types/gradient-parser@1.1.0':
-    resolution: {integrity: sha512-SaEcbgQscHtGJ1QL+ajgDTmmqU2f6T+00jZRcFlVHUW2Asivc84LNUev/UQFyu117AsdyrtI+qpwLvgjJXJxmw==}
+    resolution: {integrity: sha512-SaEcbgQscHtGJ1QL+ajgDTmmqU2f6T+00jZRcFlVHUW2Asivc84LNUev/UQFyu117AsdyrtI+qpwLvgjJXJxmw==, tarball: https://registry.npmjs.org/@types/gradient-parser/-/gradient-parser-1.1.0.tgz}

   '@types/gtag.js@0.0.10':
     resolution: {integrity: sha512-98Hy7woUb3jMAMXkZQwfIOYNyfxmI0+U4m0PpCGdnd/FHk0tDpQFCqgXdNkdEoXsKkcGya/2Gew1cAJjKJspVw==}
@@ -9364,7 +9141,7 @@ packages:
     resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==}

   '@types/mysql@2.15.26':
-    resolution: {integrity: sha512-DSLCOXhkvfS5WNNPbfn2KdICAmk8lLc+/PNvnPnF7gOdMZCxopXduqv0OQ13y/yA/zXTSikZZqVgybUxOEg6YQ==}
+    resolution: {integrity: sha512-DSLCOXhkvfS5WNNPbfn2KdICAmk8lLc+/PNvnPnF7gOdMZCxopXduqv0OQ13y/yA/zXTSikZZqVgybUxOEg6YQ==, tarball: https://registry.npmjs.org/@types/mysql/-/mysql-2.15.26.tgz}

   '@types/node-fetch@2.6.13':
     resolution: {integrity: sha512-QGpRVpzSaUs30JBSGPjOg4Uveu384erbHBoT1zeONvyCfwQxIkUshLAOqN/k9EjGviPRmWTTe6aH2qySWKTVSw==}
@@ -9400,10 +9177,10 @@ packages:
     resolution: {integrity: sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==}

   '@types/pg-pool@2.0.6':
-    resolution: {integrity: sha512-TaAUE5rq2VQYxab5Ts7WZhKNmuN78Q6PiFonTDdpbx8a1H0M1vhy3rhiMjl+e2iHmogyMw7jZF4FrE6eJUy5HQ==}
+    resolution: {integrity: sha512-TaAUE5rq2VQYxab5Ts7WZhKNmuN78Q6PiFonTDdpbx8a1H0M1vhy3rhiMjl+e2iHmogyMw7jZF4FrE6eJUy5HQ==, tarball: https://registry.npmjs.org/@types/pg-pool/-/pg-pool-2.0.6.tgz}

   '@types/pg@8.6.1':
-    resolution: {integrity: sha512-1Kc4oAGzAl7uqUStZCDvaLFqZrW9qWSjXOmBfdgyBP5La7Us6Mg4GBvRlSoaZMhQF/zSj1C8CtKMBkoiT8eL8w==}
+    resolution: {integrity: sha512-1Kc4oAGzAl7uqUStZCDvaLFqZrW9qWSjXOmBfdgyBP5La7Us6Mg4GBvRlSoaZMhQF/zSj1C8CtKMBkoiT8eL8w==, tarball: https://registry.npmjs.org/@types/pg/-/pg-8.6.1.tgz}

   '@types/pretty-hrtime@1.0.3':
     resolution: {integrity: sha512-nj39q0wAIdhwn7DGUyT9irmsKK1tV0bd5WFEhgpqNTMFZ8cE+jieuTphCW0tfdm47S2zVT5mr09B28b1chmQMA==}
@@ -9418,7 +9195,7 @@ packages:
     resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==}

   '@types/react-dom@16.9.25':
-    resolution: {integrity: sha512-ZK//eAPhwft9Ul2/Zj+6O11YR6L4JX0J2sVeBC9Ft7x7HFN7xk7yUV/zDxqV6rjvqgl6r8Dq7oQImxtyf/Mzcw==}
+    resolution: {integrity: sha512-ZK//eAPhwft9Ul2/Zj+6O11YR6L4JX0J2sVeBC9Ft7x7HFN7xk7yUV/zDxqV6rjvqgl6r8Dq7oQImxtyf/Mzcw==, tarball: https://registry.npmjs.org/@types/react-dom/-/react-dom-16.9.25.tgz}
     peerDependencies:
       '@types/react': 18.3.x

@@ -9475,7 +9252,7 @@ packages:
     resolution: {integrity: sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==}

   '@types/shimmer@1.2.0':
-    resolution: {integrity: sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg==}
+    resolution: {integrity: sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg==, tarball: https://registry.npmjs.org/@types/shimmer/-/shimmer-1.2.0.tgz}

   '@types/simple-peer@9.11.9':
     resolution: {integrity: sha512-6Gdl7TSS5oh9nuwKD4Pl8cSmaxWycYeZz9HLnJBNvIwWjZuGVsmHe9RwW3+9RxfhC1aIR9Z83DvaJoMw6rhkbg==}
@@ -9502,7 +9279,7 @@ packages:
     resolution: {integrity: sha512-bTHG8fcxEqv1M9+TD14P8ok8hjxoOCkfKc8XXLaaD05kI7ohpeI956jtDOD3XHKBQrlyPughUtzm1jtVhHpA5Q==}

   '@types/tedious@4.0.14':
-    resolution: {integrity: sha512-KHPsfX/FoVbUGbyYvk1q9MMQHLPeRZhRJZdO45Q4YjvFkv4hMNghCWTvy7rdKessBsmtz4euWCWAB6/tVpI1Iw==}
+    resolution: {integrity: sha512-KHPsfX/FoVbUGbyYvk1q9MMQHLPeRZhRJZdO45Q4YjvFkv4hMNghCWTvy7rdKessBsmtz4euWCWAB6/tVpI1Iw==, tarball: https://registry.npmjs.org/@types/tedious/-/tedious-4.0.14.tgz}

   '@types/testing-library__jest-dom@5.14.9':
     resolution: {integrity: sha512-FSYhIjFlfOpGSRyVoMBMuS3ws5ehFQODymf3vlI7U1K8c7PHwWwFY7VREfmsuzHSOnoKs/9/Y983ayOs7eRzqw==}
@@ -9544,16 +9321,16 @@ packages:
     resolution: {integrity: sha512-XDc596rkiNLOg0SZRONHojDRd7oE/+96nCBTQq51fJpAfgtHCPXQUs5hYJNaImxqWeuNrqYGpBgU5fFS7ZqRHw==}

   '@types/wordpress__block-library@2.6.3':
-    resolution: {integrity: sha512-Rr5iO7k1j6B0d5N6ZSZjspE/Ko9fBrfTsytw8v2VgR4kGs8Z3KM/lg0Nb5UNqTBjbdv7eIvsuNvQcTzlc+IlJA==}
+    resolution: {integrity: sha512-Rr5iO7k1j6B0d5N6ZSZjspE/Ko9fBrfTsytw8v2VgR4kGs8Z3KM/lg0Nb5UNqTBjbdv7eIvsuNvQcTzlc+IlJA==, tarball: https://registry.npmjs.org/@types/wordpress__block-library/-/wordpress__block-library-2.6.3.tgz}

   '@types/wordpress__blocks@12.5.18':
-    resolution: {integrity: sha512-KDugvZn2fEd1mIyYSE4j0QS4vkXOyz1r4akFrnUyJBoIBVQNqDopqXW2qX7kIrTXk9MydWZpdReNDg2Me02s4g==}
+    resolution: {integrity: sha512-KDugvZn2fEd1mIyYSE4j0QS4vkXOyz1r4akFrnUyJBoIBVQNqDopqXW2qX7kIrTXk9MydWZpdReNDg2Me02s4g==, tarball: https://registry.npmjs.org/@types/wordpress__blocks/-/wordpress__blocks-12.5.18.tgz}

   '@types/wordpress__edit-post@8.4.2':
-    resolution: {integrity: sha512-rH+ut+I4eedDTvwXnJOrH9jEyi+PhJZQ+KZ31k3BYb8Cmd1qdRK2hJ+kdZu0QJp4XP3HA0/Q6troqYfpkF8B+A==}
+    resolution: {integrity: sha512-rH+ut+I4eedDTvwXnJOrH9jEyi+PhJZQ+KZ31k3BYb8Cmd1qdRK2hJ+kdZu0QJp4XP3HA0/Q6troqYfpkF8B+A==, tarball: https://registry.npmjs.org/@types/wordpress__edit-post/-/wordpress__edit-post-8.4.2.tgz}

   '@types/wordpress__viewport@5.5.3':
-    resolution: {integrity: sha512-ZVCNZ4LccDf8nYa9y7nI1cmKpNxDy28WieKpmj3pxXhjVyXzKQ4VM/otqHAo7NMckMVDoLXaZLvKUtaLDZ+QwQ==}
+    resolution: {integrity: sha512-ZVCNZ4LccDf8nYa9y7nI1cmKpNxDy28WieKpmj3pxXhjVyXzKQ4VM/otqHAo7NMckMVDoLXaZLvKUtaLDZ+QwQ==, tarball: https://registry.npmjs.org/@types/wordpress__viewport/-/wordpress__viewport-5.5.3.tgz}

   '@types/ws@8.18.1':
     resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==}
@@ -9775,28 +9552,28 @@ packages:
       react: '>= 16.8.0'

   '@webassemblyjs/ast@1.14.1':
-    resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==}
+    resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==, tarball: https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz}

   '@webassemblyjs/ast@1.9.0':
-    resolution: {integrity: sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==}
+    resolution: {integrity: sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==, tarball: https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz}

   '@webassemblyjs/floating-point-hex-parser@1.13.2':
-    resolution: {integrity: sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==}
+    resolution: {integrity: sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==, tarball: https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz}

   '@webassemblyjs/floating-point-hex-parser@1.9.0':
     resolution: {integrity: sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==}

   '@webassemblyjs/helper-api-error@1.13.2':
-    resolution: {integrity: sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==}
+    resolution: {integrity: sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==, tarball: https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz}

   '@webassemblyjs/helper-api-error@1.9.0':
-    resolution: {integrity: sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==}
+    resolution: {integrity: sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==, tarball: https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz}

   '@webassemblyjs/helper-buffer@1.14.1':
-    resolution: {integrity: sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==}
+    resolution: {integrity: sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==, tarball: https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz}

   '@webassemblyjs/helper-buffer@1.9.0':
-    resolution: {integrity: sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==}
+    resolution: {integrity: sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==, tarball: https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz}

   '@webassemblyjs/helper-code-frame@1.9.0':
     resolution: {integrity: sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==}
@@ -9808,70 +9585,70 @@ packages:
     resolution: {integrity: sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==}

   '@webassemblyjs/helper-numbers@1.13.2':
-    resolution: {integrity: sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==}
+    resolution: {integrity: sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==, tarball: https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz}

   '@webassemblyjs/helper-wasm-bytecode@1.13.2':
-    resolution: {integrity: sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==}
+    resolution: {integrity: sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==, tarball: https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz}

   '@webassemblyjs/helper-wasm-bytecode@1.9.0':
-    resolution: {integrity: sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==}
+    resolution: {integrity: sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==, tarball: https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz}

   '@webassemblyjs/helper-wasm-section@1.14.1':
-    resolution: {integrity: sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==}
+    resolution: {integrity: sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==, tarball: https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz}

   '@webassemblyjs/helper-wasm-section@1.9.0':
-    resolution: {integrity: sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==}
+    resolution: {integrity: sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==, tarball: https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz}

   '@webassemblyjs/ieee754@1.13.2':
-    resolution: {integrity: sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==}
+    resolution: {integrity: sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==, tarball: https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz}

   '@webassemblyjs/ieee754@1.9.0':
-    resolution: {integrity: sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==}
+    resolution: {integrity: sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==, tarball: https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz}

   '@webassemblyjs/leb128@1.13.2':
-    resolution: {integrity: sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==}
+    resolution: {integrity: sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==, tarball: https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz}

   '@webassemblyjs/leb128@1.9.0':
-    resolution: {integrity: sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==}
+    resolution: {integrity: sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==, tarball: https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz}

   '@webassemblyjs/utf8@1.13.2':
-    resolution: {integrity: sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==}
+    resolution: {integrity: sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==, tarball: https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz}

   '@webassemblyjs/utf8@1.9.0':
-    resolution: {integrity: sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==}
+    resolution: {integrity: sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==, tarball: https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz}

   '@webassemblyjs/wasm-edit@1.14.1':
-    resolution: {integrity: sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==}
+    resolution: {integrity: sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==, tarball: https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz}

   '@webassemblyjs/wasm-edit@1.9.0':
-    resolution: {integrity: sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==}
+    resolution: {integrity: sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==, tarball: https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz}

   '@webassemblyjs/wasm-gen@1.14.1':
-    resolution: {integrity: sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==}
+    resolution: {integrity: sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==, tarball: https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz}

   '@webassemblyjs/wasm-gen@1.9.0':
-    resolution: {integrity: sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==}
+    resolution: {integrity: sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==, tarball: https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz}

   '@webassemblyjs/wasm-opt@1.14.1':
-    resolution: {integrity: sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==}
+    resolution: {integrity: sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==, tarball: https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz}

   '@webassemblyjs/wasm-opt@1.9.0':
-    resolution: {integrity: sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==}
+    resolution: {integrity: sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==, tarball: https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz}

   '@webassemblyjs/wasm-parser@1.14.1':
-    resolution: {integrity: sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==}
+    resolution: {integrity: sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==, tarball: https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz}

   '@webassemblyjs/wasm-parser@1.9.0':
-    resolution: {integrity: sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==}
+    resolution: {integrity: sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==, tarball: https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz}

   '@webassemblyjs/wast-parser@1.9.0':
     resolution: {integrity: sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==}

   '@webassemblyjs/wast-printer@1.14.1':
-    resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==}
+    resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==, tarball: https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz}

   '@webassemblyjs/wast-printer@1.9.0':
-    resolution: {integrity: sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==}
+    resolution: {integrity: sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==, tarball: https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz}

   '@webpack-cli/configtest@2.1.1':
     resolution: {integrity: sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==}
@@ -9902,44 +9679,30 @@ packages:
     resolution: {integrity: sha512-BgYZfL2ADCXKOw2wJtkM3slhHotawWkgIRRxq4wEybnZQPjvAp71SPX35xepMykTw8gXlzWcWPTY31hlbnRsDA==, tarball: https://registry.npmjs.org/@wolfy1339/lru-cache/-/lru-cache-11.0.2-patch.1.tgz}
     engines: {node: 18 >=18.20 || 20 || >=22}

-  '@woocommerce/settings@1.0.0':
-    resolution: {integrity: sha512-BjrT56Cz8XTRHw2JNPmANRkYh2rzdF33wOa56lah1qb/MjHUKuVJ0PTSZ19S5Trb92IkxfcIVB26CSdxXnf5Og==}
-    deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.
-
   '@wordpress/a11y@3.58.0':
-    resolution: {integrity: sha512-7NnJKl4+pxP6kV/jvXaJcZZCGzW7zaj6YeMnyjUd96cH4ta1ykBIveWgejerFOGsbK+88FnStcxSFj+dbDXs/w==}
+    resolution: {integrity: sha512-7NnJKl4+pxP6kV/jvXaJcZZCGzW7zaj6YeMnyjUd96cH4ta1ykBIveWgejerFOGsbK+88FnStcxSFj+dbDXs/w==, tarball: https://registry.npmjs.org/@wordpress/a11y/-/a11y-3.58.0.tgz}
     engines: {node: '>=12'}

   '@wordpress/a11y@4.33.1':
-    resolution: {integrity: sha512-W/MeUMZPSsgYnF6/0cXTYq1JBnCd22dBsWtYJw+Ujgx7s4h52LMnx/dIGE1Xi3XzT4nPUD1DvSw0U3lIMWW5Fg==}
+    resolution: {integrity: sha512-W/MeUMZPSsgYnF6/0cXTYq1JBnCd22dBsWtYJw+Ujgx7s4h52LMnx/dIGE1Xi3XzT4nPUD1DvSw0U3lIMWW5Fg==, tarball: https://registry.npmjs.org/@wordpress/a11y/-/a11y-4.33.1.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}

   '@wordpress/a11y@4.45.0':
     resolution: {integrity: sha512-KOgdBsZP34nAi+UfrhIAZDt2I1ZDb3DXAgIeQk7QxTIc9OlQKMNfrYwPG0jidgfKwmjFxh8vV8HbZcBzTD29Rw==}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}

-  '@wordpress/a11y@4.48.1':
-    resolution: {integrity: sha512-BPU7wRoz2XRmP3ZgVtENPKS4iO5/+bKNid/xLrvD6cP1qMhIGowQsBNqmkP1V5+q71hQM/ID6tpFjeLhmogfPg==}
-    engines: {node: '>=18.12.0', npm: '>=8.19.2'}
-
   '@wordpress/a11y@4.50.0':
-    resolution: {integrity: sha512-c/1EeqliArkmxSlRmDzbRoNGGMmhsAiCgenWmvJzpWwF3rVoyjF/DClps5GagAO1sbg+6Q1bsxgg3svCEhLdAg==}
+    resolution: {integrity: sha512-c/1EeqliArkmxSlRmDzbRoNGGMmhsAiCgenWmvJzpWwF3rVoyjF/DClps5GagAO1sbg+6Q1bsxgg3svCEhLdAg==, tarball: https://registry.npmjs.org/@wordpress/a11y/-/a11y-4.50.0.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}

   '@wordpress/admin-ui@1.12.0':
-    resolution: {integrity: sha512-CVTvE2jLTP71vBliAhOrvlMoOG1o1TdyoCL5gmw0Uswuj/qhqK3f1Y1adz7hAWiR9o7H9SoPYf+qg6pbZJVyaQ==}
-    engines: {node: '>=18.12.0', npm: '>=8.19.2'}
-    peerDependencies:
-      react: ^18.0.0
-
-  '@wordpress/admin-ui@2.3.1':
-    resolution: {integrity: sha512-bmC2OqpXNPqMBZkVMXy4DNZC0Td8hM5Z2dH13a+F6j2NeeftkfduGofEJiONFgqFMzw3zEt3tz/JdaQ+ydRSyA==}
+    resolution: {integrity: sha512-CVTvE2jLTP71vBliAhOrvlMoOG1o1TdyoCL5gmw0Uswuj/qhqK3f1Y1adz7hAWiR9o7H9SoPYf+qg6pbZJVyaQ==, tarball: https://registry.npmjs.org/@wordpress/admin-ui/-/admin-ui-1.12.0.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       react: ^18.0.0

   '@wordpress/admin-ui@2.4.1':
-    resolution: {integrity: sha512-mLveSQCtKHXwRaLtWQa47Dlm3tH/39Oi4x1zSXsoN+0nZbks8iiqg8dvGRoFcev+NV5DAt8VX0Kfc84a3Iatqw==}
+    resolution: {integrity: sha512-mLveSQCtKHXwRaLtWQa47Dlm3tH/39Oi4x1zSXsoN+0nZbks8iiqg8dvGRoFcev+NV5DAt8VX0Kfc84a3Iatqw==, tarball: https://registry.npmjs.org/@wordpress/admin-ui/-/admin-ui-2.4.1.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       '@types/react': 18.3.x
@@ -9949,15 +9712,15 @@ packages:
         optional: true

   '@wordpress/api-fetch@6.55.0':
-    resolution: {integrity: sha512-1HrCUsJdeRY5Y0IjplotINwqMRO81e7O7VhBScuKk7iOuDm/E1ioKv2uLGnPNWziYu+Zf025byxOqVzXDyM2gw==}
+    resolution: {integrity: sha512-1HrCUsJdeRY5Y0IjplotINwqMRO81e7O7VhBScuKk7iOuDm/E1ioKv2uLGnPNWziYu+Zf025byxOqVzXDyM2gw==, tarball: https://registry.npmjs.org/@wordpress/api-fetch/-/api-fetch-6.55.0.tgz}
     engines: {node: '>=12'}

   '@wordpress/api-fetch@7.33.1':
-    resolution: {integrity: sha512-kxk7Og2CZLOMUZtDfOXSGapem4ToP15JB24PfixJLS0dKfrlUBci4ShjJ3z3jdIx01gf1gfP4NFjqzicJKb+Rg==}
+    resolution: {integrity: sha512-kxk7Og2CZLOMUZtDfOXSGapem4ToP15JB24PfixJLS0dKfrlUBci4ShjJ3z3jdIx01gf1gfP4NFjqzicJKb+Rg==, tarball: https://registry.npmjs.org/@wordpress/api-fetch/-/api-fetch-7.33.1.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}

   '@wordpress/api-fetch@7.48.1':
-    resolution: {integrity: sha512-RyEEY5C1XGLxJnluYFGVz4xFiw0jFjwL9Oiu4rDZjCGcxyu0sD6HPBcG6sIRpFKv062cwLccwpCeD8rc8U6Ctg==}
+    resolution: {integrity: sha512-RyEEY5C1XGLxJnluYFGVz4xFiw0jFjwL9Oiu4rDZjCGcxyu0sD6HPBcG6sIRpFKv062cwLccwpCeD8rc8U6Ctg==, tarball: https://registry.npmjs.org/@wordpress/api-fetch/-/api-fetch-7.48.1.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}

   '@wordpress/autop@3.16.0':
@@ -9965,7 +9728,7 @@ packages:
     engines: {node: '>=12'}

   '@wordpress/autop@3.58.0':
-    resolution: {integrity: sha512-RsdUV57A+DTJGU3slq/S9vTOtVkatnT1YyGIK3UDKaEhXkvBPtLTWwd3WR13GCfjFZ5XupH9FAGUQFkOve0eKQ==}
+    resolution: {integrity: sha512-RsdUV57A+DTJGU3slq/S9vTOtVkatnT1YyGIK3UDKaEhXkvBPtLTWwd3WR13GCfjFZ5XupH9FAGUQFkOve0eKQ==, tarball: https://registry.npmjs.org/@wordpress/autop/-/autop-3.58.0.tgz}
     engines: {node: '>=12'}

   '@wordpress/autop@4.48.1':
@@ -9981,60 +9744,60 @@ packages:
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}

   '@wordpress/base-styles@10.2.0':
-    resolution: {integrity: sha512-iDPbyyeUnxLFq4ec+03x87jT8lRoBzK2rDoEg24l2KNAR9ZJ2kwI0z2E/wW0fOZC37A7qr377KJslPHKLtMgyQ==}
+    resolution: {integrity: sha512-iDPbyyeUnxLFq4ec+03x87jT8lRoBzK2rDoEg24l2KNAR9ZJ2kwI0z2E/wW0fOZC37A7qr377KJslPHKLtMgyQ==, tarball: https://registry.npmjs.org/@wordpress/base-styles/-/base-styles-10.2.0.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}

   '@wordpress/base-styles@11.0.0':
-    resolution: {integrity: sha512-w+n/AWSNfDx5RhPIpKCi7Iptn+8+Sll8uJhyx6X62zkkHDX51H2vZTU2XaXOQGx5U7xQcaVTbHjVDgYBwkU4Vg==}
+    resolution: {integrity: sha512-w+n/AWSNfDx5RhPIpKCi7Iptn+8+Sll8uJhyx6X62zkkHDX51H2vZTU2XaXOQGx5U7xQcaVTbHjVDgYBwkU4Vg==, tarball: https://registry.npmjs.org/@wordpress/base-styles/-/base-styles-11.0.0.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}

   '@wordpress/base-styles@4.49.0':
-    resolution: {integrity: sha512-yFRYqNtd26ULZ0oAHhCu/IcaA0XHI3E7kRCKajZqUvyRQj7YprXnpD3o0/pnwvF6ZFTXzCX8pXHjUc2TIv97ig==}
+    resolution: {integrity: sha512-yFRYqNtd26ULZ0oAHhCu/IcaA0XHI3E7kRCKajZqUvyRQj7YprXnpD3o0/pnwvF6ZFTXzCX8pXHjUc2TIv97ig==, tarball: https://registry.npmjs.org/@wordpress/base-styles/-/base-styles-4.49.0.tgz}

   '@wordpress/base-styles@5.23.0':
-    resolution: {integrity: sha512-1mtX3jA9el2ZDkAJp7YEN1bX+DzfX0h496uxpRk+evmQJLZxBMPeu5datJFtwkWbVitOsR88WCDvUoNoKJMSuw==}
+    resolution: {integrity: sha512-1mtX3jA9el2ZDkAJp7YEN1bX+DzfX0h496uxpRk+evmQJLZxBMPeu5datJFtwkWbVitOsR88WCDvUoNoKJMSuw==, tarball: https://registry.npmjs.org/@wordpress/base-styles/-/base-styles-5.23.0.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}

   '@wordpress/base-styles@6.20.0':
-    resolution: {integrity: sha512-Dsug4Zxz2xOFtK6CGThKYXwCqC9Yztw2STKQzwztrX4yW+o6iDbzkxpcwdDhsaVJs0Jt9A4LmJpZPh+pUozzLA==}
+    resolution: {integrity: sha512-Dsug4Zxz2xOFtK6CGThKYXwCqC9Yztw2STKQzwztrX4yW+o6iDbzkxpcwdDhsaVJs0Jt9A4LmJpZPh+pUozzLA==, tarball: https://registry.npmjs.org/@wordpress/base-styles/-/base-styles-6.20.0.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}

   '@wordpress/base-styles@6.9.1':
-    resolution: {integrity: sha512-UCtTANAdym5jpTEZS17WHrKLu7R52gQRgKuwsRm5uZWUb4g4Vq8NX52CBIesF1viFyKfM++HpmteFkrL7p0SMg==}
+    resolution: {integrity: sha512-UCtTANAdym5jpTEZS17WHrKLu7R52gQRgKuwsRm5uZWUb4g4Vq8NX52CBIesF1viFyKfM++HpmteFkrL7p0SMg==, tarball: https://registry.npmjs.org/@wordpress/base-styles/-/base-styles-6.9.1.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}

   '@wordpress/base-styles@7.0.0':
-    resolution: {integrity: sha512-Q0BbZzfeYbQZKHnyNT4RF8RGVugN5jStGtpRKhBYQW7ut7sS61LbbpP7jR0D0sDPYoEEC8jKZQSZwSM23B4jow==}
+    resolution: {integrity: sha512-Q0BbZzfeYbQZKHnyNT4RF8RGVugN5jStGtpRKhBYQW7ut7sS61LbbpP7jR0D0sDPYoEEC8jKZQSZwSM23B4jow==, tarball: https://registry.npmjs.org/@wordpress/base-styles/-/base-styles-7.0.0.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}

   '@wordpress/blob@3.58.0':
-    resolution: {integrity: sha512-6L3WqbOWEGFOSs3vLMwJ83YScggCiJ9NvZj1kC7mgeiP302UP2Fxkt4KlfjeTsD350XcvakkD/57wRkHXd819Q==}
+    resolution: {integrity: sha512-6L3WqbOWEGFOSs3vLMwJ83YScggCiJ9NvZj1kC7mgeiP302UP2Fxkt4KlfjeTsD350XcvakkD/57wRkHXd819Q==, tarball: https://registry.npmjs.org/@wordpress/blob/-/blob-3.58.0.tgz}
     engines: {node: '>=12'}

   '@wordpress/blob@4.33.1':
-    resolution: {integrity: sha512-3a0gY6+f1UcF82mbviSFzRDzQ8dEACwISkXNrwvV7Y70ke5F1UHWWkux4S15f7OcaeTs/L4SWTqZ0y5ufzHioA==}
+    resolution: {integrity: sha512-3a0gY6+f1UcF82mbviSFzRDzQ8dEACwISkXNrwvV7Y70ke5F1UHWWkux4S15f7OcaeTs/L4SWTqZ0y5ufzHioA==, tarball: https://registry.npmjs.org/@wordpress/blob/-/blob-4.33.1.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}

   '@wordpress/blob@4.48.1':
-    resolution: {integrity: sha512-iK3dtZu/UtnYpKfQ2aGZM2xrLXK5ff88QNU77XlraipaGV/C7zK2M0+sWY6cVL50TfMR7VX9prZ2XCpE5aRzSg==}
+    resolution: {integrity: sha512-iK3dtZu/UtnYpKfQ2aGZM2xrLXK5ff88QNU77XlraipaGV/C7zK2M0+sWY6cVL50TfMR7VX9prZ2XCpE5aRzSg==, tarball: https://registry.npmjs.org/@wordpress/blob/-/blob-4.48.1.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}

   '@wordpress/block-editor@12.26.0':
-    resolution: {integrity: sha512-wkBP37hB6Fb1AaUIjry6S3LlFrjnVq3Seg8ktZPLozDv2cyODs/ym8+wjv8TR/aiuSWdk0dZZywYMNc+vHEfEg==}
+    resolution: {integrity: sha512-wkBP37hB6Fb1AaUIjry6S3LlFrjnVq3Seg8ktZPLozDv2cyODs/ym8+wjv8TR/aiuSWdk0dZZywYMNc+vHEfEg==, tarball: https://registry.npmjs.org/@wordpress/block-editor/-/block-editor-12.26.0.tgz}
     engines: {node: '>=12'}
     peerDependencies:
       react: ^18.0.0
       react-dom: ^18.0.0

   '@wordpress/block-editor@15.21.1':
-    resolution: {integrity: sha512-LCHp/NoYsR7MV0e7vPNBAgtjHqK3ST4VtduxF5nOgxl0K0zuyvDvanb14EQtY4KmR2Gjndgo72/aZ/kfdQbddg==}
+    resolution: {integrity: sha512-LCHp/NoYsR7MV0e7vPNBAgtjHqK3ST4VtduxF5nOgxl0K0zuyvDvanb14EQtY4KmR2Gjndgo72/aZ/kfdQbddg==, tarball: https://registry.npmjs.org/@wordpress/block-editor/-/block-editor-15.21.1.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       react: ^18.0.0
       react-dom: ^18.0.0

   '@wordpress/block-editor@15.6.9':
-    resolution: {integrity: sha512-X5S7oWsTCpNIUHbsx/ZMN+2AXnILn3EeotUWAj8DsHtFFgfiDnbo2kKPaWANgGtHJ+GNWZPr0RUyS9Gmtdwn1A==}
+    resolution: {integrity: sha512-X5S7oWsTCpNIUHbsx/ZMN+2AXnILn3EeotUWAj8DsHtFFgfiDnbo2kKPaWANgGtHJ+GNWZPr0RUyS9Gmtdwn1A==, tarball: https://registry.npmjs.org/@wordpress/block-editor/-/block-editor-15.6.9.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       react: ^18.0.0
@@ -10048,14 +9811,14 @@ packages:
       react-dom: ^18.0.0

   '@wordpress/block-library@9.33.10':
-    resolution: {integrity: sha512-9qrBXTc1BR539L78KuMCZ7PHt4US822NSKKVNcgVTkPH2qHyUDvr6t680HRHCI7VYWq1NXp9teZo7PEZNVfhVA==}
+    resolution: {integrity: sha512-9qrBXTc1BR539L78KuMCZ7PHt4US822NSKKVNcgVTkPH2qHyUDvr6t680HRHCI7VYWq1NXp9teZo7PEZNVfhVA==, tarball: https://registry.npmjs.org/@wordpress/block-library/-/block-library-9.33.10.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       react: ^18.0.0
       react-dom: ^18.0.0

   '@wordpress/block-serialization-default-parser@4.58.0':
-    resolution: {integrity: sha512-++fowmFEJC+1SwiCGuLPO9k+g3rgI2SCAA/p8/Bc1rNgnKB+rowzmQvSIIlRpcUkmOxHOrH5uruOEX27Ksg6uw==}
+    resolution: {integrity: sha512-++fowmFEJC+1SwiCGuLPO9k+g3rgI2SCAA/p8/Bc1rNgnKB+rowzmQvSIIlRpcUkmOxHOrH5uruOEX27Ksg6uw==, tarball: https://registry.npmjs.org/@wordpress/block-serialization-default-parser/-/block-serialization-default-parser-4.58.0.tgz}
     engines: {node: '>=12'}

   '@wordpress/block-serialization-default-parser@5.48.1':
@@ -10063,7 +9826,7 @@ packages:
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}

   '@wordpress/blocks@12.35.0':
-    resolution: {integrity: sha512-BwjMca4aGuttu3C0nLLpt6MBg6IBCogA6ulGTyg+0YdKnwac52k+2wfersqAem8AFgG0hTDwrIpLsWLxpF9dtg==}
+    resolution: {integrity: sha512-BwjMca4aGuttu3C0nLLpt6MBg6IBCogA6ulGTyg+0YdKnwac52k+2wfersqAem8AFgG0hTDwrIpLsWLxpF9dtg==, tarball: https://registry.npmjs.org/@wordpress/blocks/-/blocks-12.35.0.tgz}
     engines: {node: '>=12'}
     peerDependencies:
       react: ^18.0.0
@@ -10075,7 +9838,7 @@ packages:
       react: ^18.0.0

   '@wordpress/blocks@15.6.3':
-    resolution: {integrity: sha512-AFYre+06ZVtyv0KSVwCOUY+HSEdAaQRxFrRZnSsZ5FEs0pMMIsulFYay8QvlVVTtBUKbYlxKEDi8kD1DI+8jxA==}
+    resolution: {integrity: sha512-AFYre+06ZVtyv0KSVwCOUY+HSEdAaQRxFrRZnSsZ5FEs0pMMIsulFYay8QvlVVTtBUKbYlxKEDi8kD1DI+8jxA==, tarball: https://registry.npmjs.org/@wordpress/blocks/-/blocks-15.6.3.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       react: ^18.0.0
@@ -10089,7 +9852,7 @@ packages:
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}

   '@wordpress/commands@0.29.0':
-    resolution: {integrity: sha512-HqTrYfQw/5cdT2hPgmuKW6gugnt1Pqtg9zjRHUa+D4ME7mjR4dYQoHRgnFM+hm8OOuEZRVBsa1kYO3t3041Jew==}
+    resolution: {integrity: sha512-HqTrYfQw/5cdT2hPgmuKW6gugnt1Pqtg9zjRHUa+D4ME7mjR4dYQoHRgnFM+hm8OOuEZRVBsa1kYO3t3041Jew==, tarball: https://registry.npmjs.org/@wordpress/commands/-/commands-0.29.0.tgz}
     engines: {node: '>=12'}
     peerDependencies:
       react: ^18.0.0
@@ -10102,14 +9865,14 @@ packages:
       react: ^18.0.0

   '@wordpress/commands@1.33.5':
-    resolution: {integrity: sha512-m8a/9ahGzEVYj77EfS6crzjq2Gq97DOXbeSqRSHrpePE/NSXPh6AAABRP/dKCI/0AysjJ0v/bKKTVnsFgkk0YA==}
+    resolution: {integrity: sha512-m8a/9ahGzEVYj77EfS6crzjq2Gq97DOXbeSqRSHrpePE/NSXPh6AAABRP/dKCI/0AysjJ0v/bKKTVnsFgkk0YA==, tarball: https://registry.npmjs.org/@wordpress/commands/-/commands-1.33.5.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       react: ^18.0.0
       react-dom: ^18.0.0

   '@wordpress/commands@1.48.1':
-    resolution: {integrity: sha512-yFmQ2yB4tOWPqhO+tE8uYyFqcGwxtOJ9uc1yHYfH40oMls3p+TswktsdbBM2gEmoYxfD+d3Nhp/mXGS38pdTdw==}
+    resolution: {integrity: sha512-yFmQ2yB4tOWPqhO+tE8uYyFqcGwxtOJ9uc1yHYfH40oMls3p+TswktsdbBM2gEmoYxfD+d3Nhp/mXGS38pdTdw==, tarball: https://registry.npmjs.org/@wordpress/commands/-/commands-1.48.1.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       react: ^18.0.0
@@ -10122,28 +9885,28 @@ packages:
       reakit-utils: ^0.15.1

   '@wordpress/components@25.16.0':
-    resolution: {integrity: sha512-voQuMsO5JbH+JW33TnWurwwvpSb8IQ4XU5wyVMubX4TUwadt+/2ToNJbZIDXoaJPei7vbM81Ft+pH+zGlN8CyA==}
+    resolution: {integrity: sha512-voQuMsO5JbH+JW33TnWurwwvpSb8IQ4XU5wyVMubX4TUwadt+/2ToNJbZIDXoaJPei7vbM81Ft+pH+zGlN8CyA==, tarball: https://registry.npmjs.org/@wordpress/components/-/components-25.16.0.tgz}
     engines: {node: '>=12'}
     peerDependencies:
       react: ^18.0.0
       react-dom: ^18.0.0

   '@wordpress/components@27.6.0':
-    resolution: {integrity: sha512-f+fXENkgrPs5GLo2yu9fEAdVX0KriEatRcjDUyw0+DbNbJR62sCdDtGdhJRW4jPUUoUowxaGO0y4+jvQWxnbyg==}
+    resolution: {integrity: sha512-f+fXENkgrPs5GLo2yu9fEAdVX0KriEatRcjDUyw0+DbNbJR62sCdDtGdhJRW4jPUUoUowxaGO0y4+jvQWxnbyg==, tarball: https://registry.npmjs.org/@wordpress/components/-/components-27.6.0.tgz}
     engines: {node: '>=12'}
     peerDependencies:
       react: ^18.0.0
       react-dom: ^18.0.0

   '@wordpress/components@28.13.0':
-    resolution: {integrity: sha512-JaGcXYtFCvHqa62dtxMAMhu6afvefFOuwfUTNiLYg60CA4UDITt6gf+qhpvKNOzVg4qQRw10o/nryrOMoMAEEg==}
+    resolution: {integrity: sha512-JaGcXYtFCvHqa62dtxMAMhu6afvefFOuwfUTNiLYg60CA4UDITt6gf+qhpvKNOzVg4qQRw10o/nryrOMoMAEEg==, tarball: https://registry.npmjs.org/@wordpress/components/-/components-28.13.0.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       react: ^18.0.0
       react-dom: ^18.0.0

   '@wordpress/components@29.12.0':
-    resolution: {integrity: sha512-jE96pUj84OZya54VusRdEIdTiLjbe2Qst3GbHZcQpA5GiSkPBmGjKWpO6FxR7kRDT4GMnZoVxgtV6xJk4IaNQw==}
+    resolution: {integrity: sha512-jE96pUj84OZya54VusRdEIdTiLjbe2Qst3GbHZcQpA5GiSkPBmGjKWpO6FxR7kRDT4GMnZoVxgtV6xJk4IaNQw==, tarball: https://registry.npmjs.org/@wordpress/components/-/components-29.12.0.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       react: ^18.0.0
@@ -10157,7 +9920,7 @@ packages:
       react-dom: ^18.0.0

   '@wordpress/components@30.6.5':
-    resolution: {integrity: sha512-jSDpUz1BBQvpWUGwqZUlI22PMGMtiN5ooKS4GlQqjUmEBJH4llwiRblkZBKgdznv+5KDYyDiRNIGCz/hLSdwZw==}
+    resolution: {integrity: sha512-jSDpUz1BBQvpWUGwqZUlI22PMGMtiN5ooKS4GlQqjUmEBJH4llwiRblkZBKgdznv+5KDYyDiRNIGCz/hLSdwZw==, tarball: https://registry.npmjs.org/@wordpress/components/-/components-30.6.5.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       react: ^18.0.0
@@ -10171,28 +9934,28 @@ packages:
       react-dom: ^18.0.0

   '@wordpress/components@32.6.0':
-    resolution: {integrity: sha512-MpOr0mGTkKDRjxK5LKm86Uoj9p9Z6KkrvhkNVi5zVKCftyHVMK+tun7wL2Qn/JZVLbxZpB1kW5sJ5aMf3T2ToA==}
+    resolution: {integrity: sha512-MpOr0mGTkKDRjxK5LKm86Uoj9p9Z6KkrvhkNVi5zVKCftyHVMK+tun7wL2Qn/JZVLbxZpB1kW5sJ5aMf3T2ToA==, tarball: https://registry.npmjs.org/@wordpress/components/-/components-32.6.0.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       react: ^18.0.0
       react-dom: ^18.0.0

   '@wordpress/components@33.0.0':
-    resolution: {integrity: sha512-VeLDtfz8612bdRqgQiSMtIIEGDi4ZByj0XUvjT7E6RVLgczQyV9DTpGOPyL6PbTyAluIx6hjt9bzsaC+bM6G+w==}
+    resolution: {integrity: sha512-VeLDtfz8612bdRqgQiSMtIIEGDi4ZByj0XUvjT7E6RVLgczQyV9DTpGOPyL6PbTyAluIx6hjt9bzsaC+bM6G+w==, tarball: https://registry.npmjs.org/@wordpress/components/-/components-33.0.0.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       react: ^18.0.0
       react-dom: ^18.0.0

   '@wordpress/components@35.0.1':
-    resolution: {integrity: sha512-EiTeufX2spZ09kjI8Aa4c7dG6A3WyRSGyHTcCsVnIoE/ykOnAjtGSxnVRAT1KefrJ9RGI8JaTld48wjrB/CS5A==}
+    resolution: {integrity: sha512-EiTeufX2spZ09kjI8Aa4c7dG6A3WyRSGyHTcCsVnIoE/ykOnAjtGSxnVRAT1KefrJ9RGI8JaTld48wjrB/CS5A==, tarball: https://registry.npmjs.org/@wordpress/components/-/components-35.0.1.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       react: ^18.0.0
       react-dom: ^18.0.0

   '@wordpress/components@36.1.0':
-    resolution: {integrity: sha512-EapV2VXhNIDhWA+yTukQz++IfpqY8gVDvQ9bU8g1RKJqK3dhaVJ9NG2Rqk3TPsFxrmEGNHJwdb+SRUdLFAr3Zg==}
+    resolution: {integrity: sha512-EapV2VXhNIDhWA+yTukQz++IfpqY8gVDvQ9bU8g1RKJqK3dhaVJ9NG2Rqk3TPsFxrmEGNHJwdb+SRUdLFAr3Zg==, tarball: https://registry.npmjs.org/@wordpress/components/-/components-36.1.0.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       '@types/react': 18.3.x
@@ -10203,29 +9966,29 @@ packages:
         optional: true

   '@wordpress/compose@4.2.0':
-    resolution: {integrity: sha512-8CJ4wzTXT9ZP+uIvN1d2cPBv06ZmhUh+UKzSf7v1o7T28SaYRcoZbsvDD2dnXbS2ZwWPIYAD9waNLWjCBq/izA==}
+    resolution: {integrity: sha512-8CJ4wzTXT9ZP+uIvN1d2cPBv06ZmhUh+UKzSf7v1o7T28SaYRcoZbsvDD2dnXbS2ZwWPIYAD9waNLWjCBq/izA==, tarball: https://registry.npmjs.org/@wordpress/compose/-/compose-4.2.0.tgz}
     engines: {node: '>=12'}

   '@wordpress/compose@6.35.0':
-    resolution: {integrity: sha512-PfruhCxxxJokDQHc2YBgerEiHV7BIxQk9g5vU4/f9X/0PBQWUTuxOzSFcAba03vnjfAgtPTSMp50T50hcJwXfA==}
+    resolution: {integrity: sha512-PfruhCxxxJokDQHc2YBgerEiHV7BIxQk9g5vU4/f9X/0PBQWUTuxOzSFcAba03vnjfAgtPTSMp50T50hcJwXfA==, tarball: https://registry.npmjs.org/@wordpress/compose/-/compose-6.35.0.tgz}
     engines: {node: '>=12'}
     peerDependencies:
       react: ^18.0.0

   '@wordpress/compose@7.20.0':
-    resolution: {integrity: sha512-L84QUGXbXPdCAgNDNmmH+4tJuAl1MwH5an6CaQ+NaSXk4kM4xAc42znHo0n5LfsRmWxOPrtlGikxMXCaejvoyw==}
+    resolution: {integrity: sha512-L84QUGXbXPdCAgNDNmmH+4tJuAl1MwH5an6CaQ+NaSXk4kM4xAc42znHo0n5LfsRmWxOPrtlGikxMXCaejvoyw==, tarball: https://registry.npmjs.org/@wordpress/compose/-/compose-7.20.0.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       react: ^18.0.0

   '@wordpress/compose@7.33.1':
-    resolution: {integrity: sha512-1satS+7EKlzZOCR++uP8mAy3BJPKX2eeTZHVW3669n0xM1xdmzl9JXyEbtEqaFVYhI3dHTq5kLwrm+aSpn0zag==}
+    resolution: {integrity: sha512-1satS+7EKlzZOCR++uP8mAy3BJPKX2eeTZHVW3669n0xM1xdmzl9JXyEbtEqaFVYhI3dHTq5kLwrm+aSpn0zag==, tarball: https://registry.npmjs.org/@wordpress/compose/-/compose-7.33.1.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       react: ^18.0.0

   '@wordpress/compose@7.45.0':
-    resolution: {integrity: sha512-/keWdRFUe7bnzh2ZtOYLexknpj0K0G56WFw7RLZehl54a9EmzjYjAODBOF9DB3c07pJuNuy7c5QgqMPi0cqLlw==}
+    resolution: {integrity: sha512-/keWdRFUe7bnzh2ZtOYLexknpj0K0G56WFw7RLZehl54a9EmzjYjAODBOF9DB3c07pJuNuy7c5QgqMPi0cqLlw==, tarball: https://registry.npmjs.org/@wordpress/compose/-/compose-7.45.0.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       react: ^18.0.0
@@ -10247,34 +10010,34 @@ packages:
       react: ^18.0.0

   '@wordpress/core-data@6.35.0':
-    resolution: {integrity: sha512-VnESF55nkAkKHQVwj0Oo8AU6w/yWjg/RQb+wKqJRnDuHEKHDAF5PI+9lYmcAsbXdnAc2yyf3lwBGk4w8m4uxlA==}
+    resolution: {integrity: sha512-VnESF55nkAkKHQVwj0Oo8AU6w/yWjg/RQb+wKqJRnDuHEKHDAF5PI+9lYmcAsbXdnAc2yyf3lwBGk4w8m4uxlA==, tarball: https://registry.npmjs.org/@wordpress/core-data/-/core-data-6.35.0.tgz}
     engines: {node: '>=12'}
     peerDependencies:
       react: ^18.0.0
       react-dom: ^18.0.0

   '@wordpress/core-data@7.33.9':
-    resolution: {integrity: sha512-1tYiHamRDvopG9cLFTR+SdUKroTLQRof25vquI5OlXEzBgRmn/ksWlOKM6nFxGUBK6JmdlczBoa0QhBJdXBK0Q==}
+    resolution: {integrity: sha512-1tYiHamRDvopG9cLFTR+SdUKroTLQRof25vquI5OlXEzBgRmn/ksWlOKM6nFxGUBK6JmdlczBoa0QhBJdXBK0Q==, tarball: https://registry.npmjs.org/@wordpress/core-data/-/core-data-7.33.9.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       react: ^18.0.0
       react-dom: ^18.0.0

   '@wordpress/core-data@7.48.1':
-    resolution: {integrity: sha512-ITnh9M8RStzvl4+zSlz0ORPWih3VXChN5X+hYEHj80KlB+pBBOuE+JghTPF3wYEH/VmYxDV1IJmsuOC2luor+w==}
+    resolution: {integrity: sha512-ITnh9M8RStzvl4+zSlz0ORPWih3VXChN5X+hYEHj80KlB+pBBOuE+JghTPF3wYEH/VmYxDV1IJmsuOC2luor+w==, tarball: https://registry.npmjs.org/@wordpress/core-data/-/core-data-7.48.1.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       react: ^18.0.0
       react-dom: ^18.0.0

   '@wordpress/data-controls@4.33.1':
-    resolution: {integrity: sha512-+gD47q6WuZ2MYMxwUBwBTYACMayrZoyG6W6OR1Q2ggOfkmoQb4OlxEWJPdCIC8GxJJwVh8ej9HjzzI3S/tDsJg==}
+    resolution: {integrity: sha512-+gD47q6WuZ2MYMxwUBwBTYACMayrZoyG6W6OR1Q2ggOfkmoQb4OlxEWJPdCIC8GxJJwVh8ej9HjzzI3S/tDsJg==, tarball: https://registry.npmjs.org/@wordpress/data-controls/-/data-controls-4.33.1.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       react: ^18.0.0

   '@wordpress/data@10.33.1':
-    resolution: {integrity: sha512-Y+GlNYFds2ICgkAfwT3UsLCXlagibtUFADBf/UXmTgEvc07/O/lOBHeIW72BiRkb/O4oCqf2ZeXgGkNgJLlyiQ==}
+    resolution: {integrity: sha512-Y+GlNYFds2ICgkAfwT3UsLCXlagibtUFADBf/UXmTgEvc07/O/lOBHeIW72BiRkb/O4oCqf2ZeXgGkNgJLlyiQ==, tarball: https://registry.npmjs.org/@wordpress/data/-/data-10.33.1.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       react: ^18.0.0
@@ -10285,12 +10048,6 @@ packages:
     peerDependencies:
       react: ^18.0.0

-  '@wordpress/data@10.45.0':
-    resolution: {integrity: sha512-OR/uMpcEbCh1aBkbzateXffNrL829M+N92qtuD+Gt08Mey129WIEVR9kBC2Tf02VtXs644OKZD6cz77KlxH8XA==}
-    engines: {node: '>=18.12.0', npm: '>=8.19.2'}
-    peerDependencies:
-      react: ^18.0.0
-
   '@wordpress/data@10.48.1':
     resolution: {integrity: sha512-74p4PiDLxS0SAd4tdkPEUF5rtHVtdRzoXExfhkZaumviE56tEceG07YbLjQWpZ+Vl1tZCvkyqLbMHK+Wj6ZerQ==}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
@@ -10308,40 +10065,40 @@ packages:
         optional: true

   '@wordpress/data@5.2.0':
-    resolution: {integrity: sha512-NlPIC8PdKnPly9CnynQS1di59Af3eiCZrQgZm1VssfA620NDoJA5p3dlDYj/Ts4Ryzp78HCi7wjhkmbsHpnd6g==}
+    resolution: {integrity: sha512-NlPIC8PdKnPly9CnynQS1di59Af3eiCZrQgZm1VssfA620NDoJA5p3dlDYj/Ts4Ryzp78HCi7wjhkmbsHpnd6g==, tarball: https://registry.npmjs.org/@wordpress/data/-/data-5.2.0.tgz}
     engines: {node: '>=12'}
     peerDependencies:
       redux: ^4.1.0

   '@wordpress/data@9.28.0':
-    resolution: {integrity: sha512-EDPpZdkngdoW7EMzPpGj0BmNcr7syJO67pgTODtN/4XFIdYL2RKzFyn3nlLBKhX17UsE/ALq9WdijacH4QJ9qw==}
+    resolution: {integrity: sha512-EDPpZdkngdoW7EMzPpGj0BmNcr7syJO67pgTODtN/4XFIdYL2RKzFyn3nlLBKhX17UsE/ALq9WdijacH4QJ9qw==, tarball: https://registry.npmjs.org/@wordpress/data/-/data-9.28.0.tgz}
     engines: {node: '>=12'}
     peerDependencies:
       react: ^18.0.0

   '@wordpress/dataviews@10.1.7':
-    resolution: {integrity: sha512-Zz9aWvuOkZCfTNHEh7r3HFCSgjpGjcuHb8Cn0kzTy3O+ViL4V25Ny0l9spqqOanELRF/L4Eboj1agTgg/OhKNA==}
+    resolution: {integrity: sha512-Zz9aWvuOkZCfTNHEh7r3HFCSgjpGjcuHb8Cn0kzTy3O+ViL4V25Ny0l9spqqOanELRF/L4Eboj1agTgg/OhKNA==, tarball: https://registry.npmjs.org/@wordpress/dataviews/-/dataviews-10.1.7.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       react: ^18.0.0
       react-dom: ^18.0.0

   '@wordpress/dataviews@10.3.0':
-    resolution: {integrity: sha512-7mBcW4Vris+8Be3ESUPkhe85AwAbwO+2ocvi4UDF6jEzeyH7GQxq+1k4Lq4vAc+pNBf0IehZV598+qs8nk9j2w==}
+    resolution: {integrity: sha512-7mBcW4Vris+8Be3ESUPkhe85AwAbwO+2ocvi4UDF6jEzeyH7GQxq+1k4Lq4vAc+pNBf0IehZV598+qs8nk9j2w==, tarball: https://registry.npmjs.org/@wordpress/dataviews/-/dataviews-10.3.0.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       react: ^18.0.0
       react-dom: ^18.0.0

   '@wordpress/dataviews@14.2.0':
-    resolution: {integrity: sha512-jTsXH3fDEQbvtK7N/giZJtE/NdDYN/LOlf6dkbfh89GyJmvwuikQZjpX10DexqOjc8AcNPUd1hU2b1sL8d99HA==}
+    resolution: {integrity: sha512-jTsXH3fDEQbvtK7N/giZJtE/NdDYN/LOlf6dkbfh89GyJmvwuikQZjpX10DexqOjc8AcNPUd1hU2b1sL8d99HA==, tarball: https://registry.npmjs.org/@wordpress/dataviews/-/dataviews-14.2.0.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       react: ^18.0.0
       react-dom: ^18.0.0

   '@wordpress/dataviews@16.0.1':
-    resolution: {integrity: sha512-OyDOPvtCIL0AV4wTGSrFHhBVEYwkBJvmfleSjXzGWc09u3BPIiefazoGN4GvtJPJbvieSyelXuVyN+JARIRUug==}
+    resolution: {integrity: sha512-OyDOPvtCIL0AV4wTGSrFHhBVEYwkBJvmfleSjXzGWc09u3BPIiefazoGN4GvtJPJbvieSyelXuVyN+JARIRUug==, tarball: https://registry.npmjs.org/@wordpress/dataviews/-/dataviews-16.0.1.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       react: ^18.0.0
@@ -10358,34 +10115,16 @@ packages:
       '@types/react':
         optional: true

-  '@wordpress/dataviews@https://github.com/gigitux/gutenberg/releases/download/%40wordpress%2Fdataviews-hierarchy/wordpress-dataviews-14.2.0.tgz':
-    resolution: {integrity: sha512-shvtD6fKtiNxBtNzHV1tj9AfQcv2KnicSjJOiikfr7e//uJDh4MzFEaAUR2m9YBEVirvfG1dlsyGcWGVEws0HQ==, tarball: https://github.com/gigitux/gutenberg/releases/download/%40wordpress%2Fdataviews-hierarchy/wordpress-dataviews-14.2.0.tgz}
-    version: 14.2.0
-    engines: {node: '>=18.12.0', npm: '>=8.19.2'}
-    peerDependencies:
-      react: ^18.0.0
-      react-dom: ^18.0.0
-    bundledDependencies:
-      - '@wordpress/base-styles'
-
   '@wordpress/date@4.58.0':
-    resolution: {integrity: sha512-yFT7DU0H9W0lsDytMaVMmjho08X1LeBMIQMppxdtKB04Ujx58hVh7gtunOsstUQ7pVg23nE2eLaVfx5JOdjzAw==}
+    resolution: {integrity: sha512-yFT7DU0H9W0lsDytMaVMmjho08X1LeBMIQMppxdtKB04Ujx58hVh7gtunOsstUQ7pVg23nE2eLaVfx5JOdjzAw==, tarball: https://registry.npmjs.org/@wordpress/date/-/date-4.58.0.tgz}
     engines: {node: '>=12'}

   '@wordpress/date@5.20.0':
-    resolution: {integrity: sha512-V34zSLveuXTe8wvnIpUXroP7dP9FK1HzMmGNB5JtoPhrqJeNvP4fzju8RJwBGpU1sFaqO3w+EZoNdTV9k0hqxA==}
+    resolution: {integrity: sha512-V34zSLveuXTe8wvnIpUXroP7dP9FK1HzMmGNB5JtoPhrqJeNvP4fzju8RJwBGpU1sFaqO3w+EZoNdTV9k0hqxA==, tarball: https://registry.npmjs.org/@wordpress/date/-/date-5.20.0.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}

   '@wordpress/date@5.33.1':
-    resolution: {integrity: sha512-8M25DKrC39v3IgjWScy722NiNYdlodjUawjLJBjdtaO73ZEtPXrWVocT+HKFqDVAoTGqF/J43IFxxW020+udXA==}
-    engines: {node: '>=18.12.0', npm: '>=8.19.2'}
-
-  '@wordpress/date@5.45.0':
-    resolution: {integrity: sha512-34v3hCxn68kYzWs8bhuAt8cfMxdFX9ukKn3a3FB+tAJXpxafnPCcZoWfJHn4I8hepCbreFrf3UiGdA+id2kQ4A==}
-    engines: {node: '>=18.12.0', npm: '>=8.19.2'}
-
-  '@wordpress/date@5.48.1':
-    resolution: {integrity: sha512-SD6AzzmxtsrTbSkZFV6nklYzYgZFDuCxX41kxRmIQGTBNP0f4DvLjwlUCpLN/lHEerctx4XdkZAghvGOHOKvbg==}
+    resolution: {integrity: sha512-8M25DKrC39v3IgjWScy722NiNYdlodjUawjLJBjdtaO73ZEtPXrWVocT+HKFqDVAoTGqF/J43IFxxW020+udXA==, tarball: https://registry.npmjs.org/@wordpress/date/-/date-5.33.1.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}

   '@wordpress/date@5.50.0':
@@ -10405,19 +10144,11 @@ packages:
       webpack: ^5.0.0

   '@wordpress/deprecated@3.58.0':
-    resolution: {integrity: sha512-knweE2lLEUxWRr6A48sHiO0ww5pPybGe2NVIZVq/y7EaYCMdpy6gYA0ZdVqMKZvtxKKqicJfwigcn+hinsTvUQ==}
+    resolution: {integrity: sha512-knweE2lLEUxWRr6A48sHiO0ww5pPybGe2NVIZVq/y7EaYCMdpy6gYA0ZdVqMKZvtxKKqicJfwigcn+hinsTvUQ==, tarball: https://registry.npmjs.org/@wordpress/deprecated/-/deprecated-3.58.0.tgz}
     engines: {node: '>=12'}

   '@wordpress/deprecated@4.33.1':
-    resolution: {integrity: sha512-dDOGfYtebSj0iSmOAJD7HiqXacx6lLJZkhRKPeffXG8e990EBVa2qgcRt2jcQHaSO/h9gmOsGmC7trEG66YzMA==}
-    engines: {node: '>=18.12.0', npm: '>=8.19.2'}
-
-  '@wordpress/deprecated@4.45.0':
-    resolution: {integrity: sha512-qer/fk/lgmmisb8/hj1xZtsbJbZhCoOblhyxI2k7RRul7rQDdk+fm28LJYV+eIF0ldSVX30f4dmz1pvcVHQEEg==}
-    engines: {node: '>=18.12.0', npm: '>=8.19.2'}
-
-  '@wordpress/deprecated@4.48.1':
-    resolution: {integrity: sha512-ZfJSCxWr4Ss5qGja9W7L6+8vcrbX0n+tKDe2TrYvTq6GiqEc+0MrajIl4vi/58jhceHbSze1ITX/ocC3Ed3NLg==}
+    resolution: {integrity: sha512-dDOGfYtebSj0iSmOAJD7HiqXacx6lLJZkhRKPeffXG8e990EBVa2qgcRt2jcQHaSO/h9gmOsGmC7trEG66YzMA==, tarball: https://registry.npmjs.org/@wordpress/deprecated/-/deprecated-4.33.1.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}

   '@wordpress/deprecated@4.50.0':
@@ -10425,45 +10156,37 @@ packages:
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}

   '@wordpress/dom-ready@3.58.0':
-    resolution: {integrity: sha512-sDgRPjNBToRKgYrpwvMRv2Yc7/17+sp8hm/rRnbubwb+d/DbGkK4Tc/r4sNLSZCqUAtcBXq9uk1lzvhge3QUSg==}
+    resolution: {integrity: sha512-sDgRPjNBToRKgYrpwvMRv2Yc7/17+sp8hm/rRnbubwb+d/DbGkK4Tc/r4sNLSZCqUAtcBXq9uk1lzvhge3QUSg==, tarball: https://registry.npmjs.org/@wordpress/dom-ready/-/dom-ready-3.58.0.tgz}
     engines: {node: '>=12'}

   '@wordpress/dom-ready@4.33.1':
-    resolution: {integrity: sha512-jrHN/arTKp2iuYj24byFgabBhZsZ3WUXCSKT16d/1MZUXGQt876XXu6r5rwpLtnVsX2gFiZ/DzdRKCL4RV9Wpg==}
-    engines: {node: '>=18.12.0', npm: '>=8.19.2'}
-
-  '@wordpress/dom-ready@4.48.1':
-    resolution: {integrity: sha512-EYd2H8cYSk8H3wSnTK1wTtuC+hOCmMmZrCEBWzgHevs1n3B9g0nwBafSiRWpzc0vA2vculkNNtlSfy3ByJ2hag==}
+    resolution: {integrity: sha512-jrHN/arTKp2iuYj24byFgabBhZsZ3WUXCSKT16d/1MZUXGQt876XXu6r5rwpLtnVsX2gFiZ/DzdRKCL4RV9Wpg==, tarball: https://registry.npmjs.org/@wordpress/dom-ready/-/dom-ready-4.33.1.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}

   '@wordpress/dom-ready@4.50.0':
-    resolution: {integrity: sha512-y+nZ8/gm91cV+F6DP1hoQTtYIy+3/YYGQui0lRRgTMOywrlZLt7rDbKBsEsznPOsDo0880LspEOTDX12Qrps8A==}
+    resolution: {integrity: sha512-y+nZ8/gm91cV+F6DP1hoQTtYIy+3/YYGQui0lRRgTMOywrlZLt7rDbKBsEsznPOsDo0880LspEOTDX12Qrps8A==, tarball: https://registry.npmjs.org/@wordpress/dom-ready/-/dom-ready-4.50.0.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}

   '@wordpress/dom@3.58.0':
-    resolution: {integrity: sha512-t3xSr/nqekj2qwUGRAqSeGx6116JOBxzI+VBiUfZrjGEnuyKdLelXDEeYtcwbb7etMkj/6F60/NB7GTl5IwizQ==}
+    resolution: {integrity: sha512-t3xSr/nqekj2qwUGRAqSeGx6116JOBxzI+VBiUfZrjGEnuyKdLelXDEeYtcwbb7etMkj/6F60/NB7GTl5IwizQ==, tarball: https://registry.npmjs.org/@wordpress/dom/-/dom-3.58.0.tgz}
     engines: {node: '>=12'}

   '@wordpress/dom@4.33.1':
-    resolution: {integrity: sha512-1ow6ikYbE+p2xMCykZecGqRmZBqz0Z90KQ06EbKFr9tJ9tSgp05Jm6J7Op3VclJxJ+6as5js+28ppps3eVzGcg==}
-    engines: {node: '>=18.12.0', npm: '>=8.19.2'}
-
-  '@wordpress/dom@4.48.1':
-    resolution: {integrity: sha512-UmouS3KAAUf6q90adAM37FZ3Tq+w+5UfNVUEKRtZjzbH3gMZJTKmYXpG9dkYyLLmicXgOrcG1GQ0qTX91MjAuA==}
+    resolution: {integrity: sha512-1ow6ikYbE+p2xMCykZecGqRmZBqz0Z90KQ06EbKFr9tJ9tSgp05Jm6J7Op3VclJxJ+6as5js+28ppps3eVzGcg==, tarball: https://registry.npmjs.org/@wordpress/dom/-/dom-4.33.1.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}

   '@wordpress/dom@4.50.0':
-    resolution: {integrity: sha512-2Mognc1rwe1+tlIfbSeZPqbuAh6vJagELzw9cLasObiVayWhaG+LCIp0sJz2pPG9ppz8L31gGUgna7zrSRu85Q==}
+    resolution: {integrity: sha512-2Mognc1rwe1+tlIfbSeZPqbuAh6vJagELzw9cLasObiVayWhaG+LCIp0sJz2pPG9ppz8L31gGUgna7zrSRu85Q==, tarball: https://registry.npmjs.org/@wordpress/dom/-/dom-4.50.0.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}

   '@wordpress/e2e-test-utils-playwright@1.33.2':
-    resolution: {integrity: sha512-lKC7VPxeT17605GtKYTUIBGG1a/m9V0CmCEbcjaAfWjxFKUVgaAGELWsgaUICipUUInQuHZJO6wUsdZOXZnc5w==}
+    resolution: {integrity: sha512-lKC7VPxeT17605GtKYTUIBGG1a/m9V0CmCEbcjaAfWjxFKUVgaAGELWsgaUICipUUInQuHZJO6wUsdZOXZnc5w==, tarball: https://registry.npmjs.org/@wordpress/e2e-test-utils-playwright/-/e2e-test-utils-playwright-1.33.2.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       '@playwright/test': '>=1'

   '@wordpress/e2e-test-utils-playwright@1.51.0':
-    resolution: {integrity: sha512-ekxMfC8MUTf0fKjAQd2IO4m/l1jXC9NznveRf7r8ntmx9nXqd9IHOiYJcH2SBo20C53nWdA4w8+Mbqedf0qzEw==}
+    resolution: {integrity: sha512-ekxMfC8MUTf0fKjAQd2IO4m/l1jXC9NznveRf7r8ntmx9nXqd9IHOiYJcH2SBo20C53nWdA4w8+Mbqedf0qzEw==, tarball: https://registry.npmjs.org/@wordpress/e2e-test-utils-playwright/-/e2e-test-utils-playwright-1.51.0.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       '@playwright/test': '>=1'
@@ -10477,41 +10200,37 @@ packages:
       react-dom: ^18.0.0

   '@wordpress/editor@13.35.0':
-    resolution: {integrity: sha512-AngLr3JrZ62efsmSHi6+drQPlbifnSr86VLr69fKWzOL2xTOcr+kpwN+HdhmPmgrnrKfxhxsVBLZ2SXp7zXAWg==}
+    resolution: {integrity: sha512-AngLr3JrZ62efsmSHi6+drQPlbifnSr86VLr69fKWzOL2xTOcr+kpwN+HdhmPmgrnrKfxhxsVBLZ2SXp7zXAWg==, tarball: https://registry.npmjs.org/@wordpress/editor/-/editor-13.35.0.tgz}
     engines: {node: '>=12'}
     peerDependencies:
       react: ^18.0.0
       react-dom: ^18.0.0

   '@wordpress/editor@14.33.11':
-    resolution: {integrity: sha512-yGSMcsya/9OADD+xgfewVwnHvRUpMsKGh865WkWm2uy0XbCap5IoDMNeKgsM/nYXrCy8y5sbO4b9bzDUhHcsdA==}
+    resolution: {integrity: sha512-yGSMcsya/9OADD+xgfewVwnHvRUpMsKGh865WkWm2uy0XbCap5IoDMNeKgsM/nYXrCy8y5sbO4b9bzDUhHcsdA==, tarball: https://registry.npmjs.org/@wordpress/editor/-/editor-14.33.11.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       react: ^18.0.0
       react-dom: ^18.0.0

   '@wordpress/element@3.2.0':
-    resolution: {integrity: sha512-YXJhtBF8FnFYwA9X6Dvs4k6yJf5wy1lhU04VNJVzoUDwCt/pK747RGePIPDdUWVd3X/TlyNH2yLRtcCyOC/SzQ==}
+    resolution: {integrity: sha512-YXJhtBF8FnFYwA9X6Dvs4k6yJf5wy1lhU04VNJVzoUDwCt/pK747RGePIPDdUWVd3X/TlyNH2yLRtcCyOC/SzQ==, tarball: https://registry.npmjs.org/@wordpress/element/-/element-3.2.0.tgz}
     engines: {node: '>=12'}

   '@wordpress/element@5.35.0':
-    resolution: {integrity: sha512-puswpGcIdS+0A2g28uHriMkZqqRCmzFczue5Tk99VNtzBdehyk7Ae+DZ4xw5yT6GqYai8NTqv6MRwCB78uh5Mw==}
+    resolution: {integrity: sha512-puswpGcIdS+0A2g28uHriMkZqqRCmzFczue5Tk99VNtzBdehyk7Ae+DZ4xw5yT6GqYai8NTqv6MRwCB78uh5Mw==, tarball: https://registry.npmjs.org/@wordpress/element/-/element-5.35.0.tgz}
     engines: {node: '>=12'}

   '@wordpress/element@6.33.1':
-    resolution: {integrity: sha512-8Y2TEkduT1cAGVfh5HoERpJIVvCcfHI1k+PGgG3wzy85me6hjgA/P7l90yBt/9i9Omt5+buGfnklobstECR8zg==}
+    resolution: {integrity: sha512-8Y2TEkduT1cAGVfh5HoERpJIVvCcfHI1k+PGgG3wzy85me6hjgA/P7l90yBt/9i9Omt5+buGfnklobstECR8zg==, tarball: https://registry.npmjs.org/@wordpress/element/-/element-6.33.1.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}

   '@wordpress/element@6.45.0':
     resolution: {integrity: sha512-WFrGNPEnj8uE+XhFW9NVbxvqraYpConaEokLv9IszFYVfyg8juXSQcHOAfEnxjC08HBPfVcayr2igu/XUgGOAw==}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}

-  '@wordpress/element@8.0.1':
-    resolution: {integrity: sha512-otYhxfm6ZKkcLCl/tI1rB70z6MVDvTL+RiPOWXi4qm0niJf4isSXCcB91ffj1gzJXKbEpszHfysIoU9L2gCSGQ==}
-    engines: {node: '>=18.12.0', npm: '>=8.19.2'}
-
   '@wordpress/element@8.2.0':
-    resolution: {integrity: sha512-cTnKRHUdZbYAd4RaJiUwhDKdQDDWY7VoGiwektCmhiBQF6WTFYlhsxl/dmHE0Sok3q7PJQwAg538XEb8WuTaew==}
+    resolution: {integrity: sha512-cTnKRHUdZbYAd4RaJiUwhDKdQDDWY7VoGiwektCmhiBQF6WTFYlhsxl/dmHE0Sok3q7PJQwAg538XEb8WuTaew==, tarball: https://registry.npmjs.org/@wordpress/element/-/element-8.2.0.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}

   '@wordpress/env@11.9.0':
@@ -10532,7 +10251,7 @@ packages:
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}

   '@wordpress/escape-html@3.50.0':
-    resolution: {integrity: sha512-EECt++WB1RNPQBwBS7/6rKO4eUNq2xe6nb6Guv6uT+F74DgtM3+aZtNs7JhKFxRMORPtu7T0LhlAOBa4H5CsPQ==}
+    resolution: {integrity: sha512-EECt++WB1RNPQBwBS7/6rKO4eUNq2xe6nb6Guv6uT+F74DgtM3+aZtNs7JhKFxRMORPtu7T0LhlAOBa4H5CsPQ==, tarball: https://registry.npmjs.org/@wordpress/escape-html/-/escape-html-3.50.0.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}

   '@wordpress/eslint-plugin@25.6.0':
@@ -10550,13 +10269,13 @@ packages:
         optional: true

   '@wordpress/fields@0.25.11':
-    resolution: {integrity: sha512-jNNG14L0FWUif95kVUVm53mT4ItOBm3yN9I2mElm/aznHZh3rheRJ96vT2nyTuJ1/J79Xt2DerqkvcWP4R6R3Q==}
+    resolution: {integrity: sha512-jNNG14L0FWUif95kVUVm53mT4ItOBm3yN9I2mElm/aznHZh3rheRJ96vT2nyTuJ1/J79Xt2DerqkvcWP4R6R3Q==, tarball: https://registry.npmjs.org/@wordpress/fields/-/fields-0.25.11.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       react: ^18.0.0

   '@wordpress/format-library@5.33.9':
-    resolution: {integrity: sha512-9RTyCFuaXSSF4Rz4rnz0Elge71nSn7UWyvskMQtZNN5nMGjH9D5NK5JoYKANpt1v0Cx/vfUkLTywBrU0v2+pLA==}
+    resolution: {integrity: sha512-9RTyCFuaXSSF4Rz4rnz0Elge71nSn7UWyvskMQtZNN5nMGjH9D5NK5JoYKANpt1v0Cx/vfUkLTywBrU0v2+pLA==, tarball: https://registry.npmjs.org/@wordpress/format-library/-/format-library-5.33.9.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       react: ^18.0.0
@@ -10571,109 +10290,81 @@ packages:
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}

   '@wordpress/hooks@3.58.0':
-    resolution: {integrity: sha512-9LB0ZHnZRQlORttux9t/xbAskF+dk2ujqzPGsVzc92mSKpQP3K2a5Wy74fUnInguB1vLUNHT6nrNdkVom5qX1Q==}
+    resolution: {integrity: sha512-9LB0ZHnZRQlORttux9t/xbAskF+dk2ujqzPGsVzc92mSKpQP3K2a5Wy74fUnInguB1vLUNHT6nrNdkVom5qX1Q==, tarball: https://registry.npmjs.org/@wordpress/hooks/-/hooks-3.58.0.tgz}
     engines: {node: '>=12'}

   '@wordpress/hooks@4.33.1':
-    resolution: {integrity: sha512-p9RbNsZJnsGY45MEV3QfYHS4dMmKe0B1f/RUXEL8ZLa36aUWZrUX7PJxvmmpeuPrboHQwT4MDps9kwHO4V6GVg==}
-    engines: {node: '>=18.12.0', npm: '>=8.19.2'}
-
-  '@wordpress/hooks@4.48.1':
-    resolution: {integrity: sha512-QZh3Cv9TMJkrCQikuZSsDKTgX+6BBzYJe0MFKp7yP8drj/dtRpkqo5+eYmovBq3pk+HoyP7UJ1vTOb3GPJeU6Q==}
+    resolution: {integrity: sha512-p9RbNsZJnsGY45MEV3QfYHS4dMmKe0B1f/RUXEL8ZLa36aUWZrUX7PJxvmmpeuPrboHQwT4MDps9kwHO4V6GVg==, tarball: https://registry.npmjs.org/@wordpress/hooks/-/hooks-4.33.1.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}

   '@wordpress/hooks@4.50.0':
-    resolution: {integrity: sha512-dV/AeP9iH1UydVWoUoCPuM8FUx2XvL1i65dhiwRHmZxK/zz8nR5Rq75WISpwFzRYfsyRThjl4LwUxhFAQnHrDw==}
+    resolution: {integrity: sha512-dV/AeP9iH1UydVWoUoCPuM8FUx2XvL1i65dhiwRHmZxK/zz8nR5Rq75WISpwFzRYfsyRThjl4LwUxhFAQnHrDw==, tarball: https://registry.npmjs.org/@wordpress/hooks/-/hooks-4.50.0.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}

   '@wordpress/html-entities@3.58.0':
-    resolution: {integrity: sha512-FU7b6QZdwTCuLKq6wCl0IZqqOMcMRxMcekVVytzTse7hYk9dvL1qQL/U4eQ/CNyKqiT9u7fb5NKTQILOzoolVQ==}
+    resolution: {integrity: sha512-FU7b6QZdwTCuLKq6wCl0IZqqOMcMRxMcekVVytzTse7hYk9dvL1qQL/U4eQ/CNyKqiT9u7fb5NKTQILOzoolVQ==, tarball: https://registry.npmjs.org/@wordpress/html-entities/-/html-entities-3.58.0.tgz}
     engines: {node: '>=12'}

   '@wordpress/html-entities@4.20.0':
-    resolution: {integrity: sha512-ZOQ9zsfs5p32K+uAEy2vbY7rnAG5KjMdXwOn4v2FPeXF6A6jWQudK/smV7nRB3ZMaSZnzQ54tiUXbuSpCmmGYA==}
+    resolution: {integrity: sha512-ZOQ9zsfs5p32K+uAEy2vbY7rnAG5KjMdXwOn4v2FPeXF6A6jWQudK/smV7nRB3ZMaSZnzQ54tiUXbuSpCmmGYA==, tarball: https://registry.npmjs.org/@wordpress/html-entities/-/html-entities-4.20.0.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}

   '@wordpress/html-entities@4.33.1':
-    resolution: {integrity: sha512-HdpnRRvTMstX58U4Yr+UisIrFLcG97PGegAczMxeq9Q1n3ol5FCkEegBTQIJffAZ5IadBsPZ77fjoVtLK7RViQ==}
-    engines: {node: '>=18.12.0', npm: '>=8.19.2'}
-
-  '@wordpress/html-entities@4.48.1':
-    resolution: {integrity: sha512-Gq6j3yl+m0pc0989jFjAgYbtdwHyUS/5PR39zg+hQfq1IWiqCwfhFlJAqc8ymwx/gSklrxf9mmyhBwmUPWtMcw==}
+    resolution: {integrity: sha512-HdpnRRvTMstX58U4Yr+UisIrFLcG97PGegAczMxeq9Q1n3ol5FCkEegBTQIJffAZ5IadBsPZ77fjoVtLK7RViQ==, tarball: https://registry.npmjs.org/@wordpress/html-entities/-/html-entities-4.33.1.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}

   '@wordpress/html-entities@4.50.0':
-    resolution: {integrity: sha512-RWoT58IXeX82fC7zBLiTNEDdKN/fTAHWlMJbEwMH65UTzJt5jNWtmVdbtTZP248ceyAK3lUsWaXei2t1bqAyNA==}
+    resolution: {integrity: sha512-RWoT58IXeX82fC7zBLiTNEDdKN/fTAHWlMJbEwMH65UTzJt5jNWtmVdbtTZP248ceyAK3lUsWaXei2t1bqAyNA==, tarball: https://registry.npmjs.org/@wordpress/html-entities/-/html-entities-4.50.0.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}

   '@wordpress/i18n@4.58.0':
-    resolution: {integrity: sha512-VfvS3BWv/RDjRKD6PscIcvYfWKnGJcI/DEqyDgUMhxCM6NRwoL478CsUKTiGJIymeyRodNRfprdcF086DpGKYw==}
+    resolution: {integrity: sha512-VfvS3BWv/RDjRKD6PscIcvYfWKnGJcI/DEqyDgUMhxCM6NRwoL478CsUKTiGJIymeyRodNRfprdcF086DpGKYw==, tarball: https://registry.npmjs.org/@wordpress/i18n/-/i18n-4.58.0.tgz}
     engines: {node: '>=12'}
     hasBin: true

   '@wordpress/i18n@5.26.0':
-    resolution: {integrity: sha512-YHzaUWlCuN2ynl47qbsdMkTGtP52+E1giDOdWBgUaSexUYjbeFxKFUzRMB0Wuh1psL80+VzvJOH/mU440KAJnA==}
-    engines: {node: '>=18.12.0', npm: '>=8.19.2'}
-    hasBin: true
-
-  '@wordpress/i18n@6.18.0':
-    resolution: {integrity: sha512-6dYCih4wUwi7Csu4RNfHiAKkgWhpSQdl8YthvQUF59Sfsoia3RCdtd4K2l7W4f18ldFA/RXjShMjvSexWy6OyQ==}
-    engines: {node: '>=18.12.0', npm: '>=8.19.2'}
-    hasBin: true
-
-  '@wordpress/i18n@6.21.1':
-    resolution: {integrity: sha512-qBbDJTRCtMfEzTVtzOa/fZf8XlU/JY3nI4MSdxyRQKduFanbXvzTRqJSSEIpZS4ACJTyUqafZX8zEZIH5CrNHQ==}
+    resolution: {integrity: sha512-YHzaUWlCuN2ynl47qbsdMkTGtP52+E1giDOdWBgUaSexUYjbeFxKFUzRMB0Wuh1psL80+VzvJOH/mU440KAJnA==, tarball: https://registry.npmjs.org/@wordpress/i18n/-/i18n-5.26.0.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     hasBin: true

   '@wordpress/i18n@6.23.0':
-    resolution: {integrity: sha512-avuywVdBpOeHm9cghFcNXCKi/VlJhbJ6KN6LydQOy/NqdRbqyRc59/XlKk1Ks+Vb+dWTGKr5gjiSzm9QJETGmA==}
+    resolution: {integrity: sha512-avuywVdBpOeHm9cghFcNXCKi/VlJhbJ6KN6LydQOy/NqdRbqyRc59/XlKk1Ks+Vb+dWTGKr5gjiSzm9QJETGmA==, tarball: https://registry.npmjs.org/@wordpress/i18n/-/i18n-6.23.0.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     hasBin: true

   '@wordpress/i18n@6.6.1':
-    resolution: {integrity: sha512-aEFSF+5dp0UhdMGHyNUwhcL0Sg/kp0NtCSMrfcQrXRM6uD/+y8ih0mHeULww5V919NUrzXIZSZGfOaOIiQVXXg==}
+    resolution: {integrity: sha512-aEFSF+5dp0UhdMGHyNUwhcL0Sg/kp0NtCSMrfcQrXRM6uD/+y8ih0mHeULww5V919NUrzXIZSZGfOaOIiQVXXg==, tarball: https://registry.npmjs.org/@wordpress/i18n/-/i18n-6.6.1.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     hasBin: true

   '@wordpress/icons@10.32.0':
-    resolution: {integrity: sha512-1WvJdT361X1LnetYBpBWUjAVXZzl+pBdIwHbYRAp8ej47EI/igPmNxmq81nFd40s8fer/9qtipielcqSI6H2rA==}
-    engines: {node: '>=18.12.0', npm: '>=8.19.2'}
-
-  '@wordpress/icons@10.6.0':
-    resolution: {integrity: sha512-dy58bQFVee2izXA65Ptar1f8mVhL1hilOJI3BWbLWmxHr9H4VjI0ohjW4ZkAhahBG2yIvKZja/HaFMTs5O/7Xg==}
+    resolution: {integrity: sha512-1WvJdT361X1LnetYBpBWUjAVXZzl+pBdIwHbYRAp8ej47EI/igPmNxmq81nFd40s8fer/9qtipielcqSI6H2rA==, tarball: https://registry.npmjs.org/@wordpress/icons/-/icons-10.32.0.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}

   '@wordpress/icons@11.0.1':
-    resolution: {integrity: sha512-vXkWiAxwDjWBcj72oXbJyuDtIvNvk1JnnmYzQUpIjKjvScRPcj+Kt40nFYk/5kPnNAhBqVNcZ7tWK7NctSslJA==}
+    resolution: {integrity: sha512-vXkWiAxwDjWBcj72oXbJyuDtIvNvk1JnnmYzQUpIjKjvScRPcj+Kt40nFYk/5kPnNAhBqVNcZ7tWK7NctSslJA==, tarball: https://registry.npmjs.org/@wordpress/icons/-/icons-11.0.1.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}

   '@wordpress/icons@11.8.0':
-    resolution: {integrity: sha512-ZMNHApHMmPLpNnNLfPLRf6XWoPhZFNKFKdpMlhA6Lx04J1hLVyLRz8PuM+1o3ByxD2ZiExfSRhdmI+7VvEg6DA==}
+    resolution: {integrity: sha512-ZMNHApHMmPLpNnNLfPLRf6XWoPhZFNKFKdpMlhA6Lx04J1hLVyLRz8PuM+1o3ByxD2ZiExfSRhdmI+7VvEg6DA==, tarball: https://registry.npmjs.org/@wordpress/icons/-/icons-11.8.0.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       react: ^18.0.0

   '@wordpress/icons@12.2.0':
-    resolution: {integrity: sha512-Fiw7bmfHDNPjTdCrBF23/9K0VN/GUi73d2ZPZaeWdXhTmIX62T9KYvb1c+WnlBkX7GpXgJO6Q8mypQCY9mw5SQ==}
-    engines: {node: '>=18.12.0', npm: '>=8.19.2'}
-    peerDependencies:
-      react: ^18.0.0
-
-  '@wordpress/icons@13.0.0':
-    resolution: {integrity: sha512-+CLbvNdzMUHxQK5I6gFdHb3X6EVAH6SOSIj0xtMWm6PZO+Nnf7tXHfNBuxqTnGfxT5grtfb6D3A9ZMBU+Tpv+Q==}
+    resolution: {integrity: sha512-Fiw7bmfHDNPjTdCrBF23/9K0VN/GUi73d2ZPZaeWdXhTmIX62T9KYvb1c+WnlBkX7GpXgJO6Q8mypQCY9mw5SQ==, tarball: https://registry.npmjs.org/@wordpress/icons/-/icons-12.2.0.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       react: ^18.0.0

   '@wordpress/icons@13.3.0':
-    resolution: {integrity: sha512-Y/iE3aeHQ4XkX0fffiTPCUfjT8wNw1I7hDJkKqpaLmkD+C5NKWixRrDVfRnaJqU/MxY8RdyVC/nGng2MLPNH0A==}
+    resolution: {integrity: sha512-Y/iE3aeHQ4XkX0fffiTPCUfjT8wNw1I7hDJkKqpaLmkD+C5NKWixRrDVfRnaJqU/MxY8RdyVC/nGng2MLPNH0A==, tarball: https://registry.npmjs.org/@wordpress/icons/-/icons-13.3.0.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       react: ^18.0.0

   '@wordpress/icons@14.0.1':
-    resolution: {integrity: sha512-Vf3wXrS8JWwozKGQ3vS8WQBwmzZyk0ih3W92kE+xPDK2K5QPrlW4MjbSV8gYbNAHC6NECPSWrEGI3DmbgvAP3w==}
+    resolution: {integrity: sha512-Vf3wXrS8JWwozKGQ3vS8WQBwmzZyk0ih3W92kE+xPDK2K5QPrlW4MjbSV8gYbNAHC6NECPSWrEGI3DmbgvAP3w==, tarball: https://registry.npmjs.org/@wordpress/icons/-/icons-14.0.1.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       react: ^18.0.0
@@ -10689,79 +10380,75 @@ packages:
         optional: true

   '@wordpress/icons@4.1.0':
-    resolution: {integrity: sha512-1FpEjT9kJbr0cWbgdgIwd2DoeerWijcVx3qCZ/WMFKNElBH9lfZLuWPI1hpX102HGWFcEi3VlbVpdBGeCeYQWg==}
+    resolution: {integrity: sha512-1FpEjT9kJbr0cWbgdgIwd2DoeerWijcVx3qCZ/WMFKNElBH9lfZLuWPI1hpX102HGWFcEi3VlbVpdBGeCeYQWg==, tarball: https://registry.npmjs.org/@wordpress/icons/-/icons-4.1.0.tgz}
     engines: {node: '>=12'}

   '@wordpress/icons@9.49.0':
-    resolution: {integrity: sha512-Z8F+ledkfkcKDuS1c/RkM0dEWdfv2AXs6bCgey89p0atJSscf7qYbMJR9zE5rZ5aqXyFfV0DAFKJEgayNqneNQ==}
+    resolution: {integrity: sha512-Z8F+ledkfkcKDuS1c/RkM0dEWdfv2AXs6bCgey89p0atJSscf7qYbMJR9zE5rZ5aqXyFfV0DAFKJEgayNqneNQ==, tarball: https://registry.npmjs.org/@wordpress/icons/-/icons-9.49.0.tgz}
     engines: {node: '>=12'}

   '@wordpress/image-cropper@1.12.1':
-    resolution: {integrity: sha512-r7t5fzUGzeCt2Pkkp6lgh/a2UKsgW+okeR7Ldw29snE96JZcjYJHyJfRfqOGFZVxrCcoDe2XaEy+Q6PdL+aJhw==}
+    resolution: {integrity: sha512-r7t5fzUGzeCt2Pkkp6lgh/a2UKsgW+okeR7Ldw29snE96JZcjYJHyJfRfqOGFZVxrCcoDe2XaEy+Q6PdL+aJhw==, tarball: https://registry.npmjs.org/@wordpress/image-cropper/-/image-cropper-1.12.1.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       react: ^18.0.0
       react-dom: ^18.0.0

   '@wordpress/interactivity-router@1.8.0':
-    resolution: {integrity: sha512-i2Lb9008DmPyh/DyCWhvVkwUha2zhLqPfBtMAUQuwes2prDLyl8FnWVS6bwXXYpu6qKkLhFz6hzXt3O988u53Q==}
+    resolution: {integrity: sha512-i2Lb9008DmPyh/DyCWhvVkwUha2zhLqPfBtMAUQuwes2prDLyl8FnWVS6bwXXYpu6qKkLhFz6hzXt3O988u53Q==, tarball: https://registry.npmjs.org/@wordpress/interactivity-router/-/interactivity-router-1.8.0.tgz}
     engines: {node: '>=12'}

   '@wordpress/interactivity-router@2.33.3':
-    resolution: {integrity: sha512-sQBbpSnzOsYFaEoF+SLsKFHb+5grgmdhfMrLlJEIP/HK063W053ipfWsj1IUmv2dz/mNVgB0+EoY7oBbws1axA==}
+    resolution: {integrity: sha512-sQBbpSnzOsYFaEoF+SLsKFHb+5grgmdhfMrLlJEIP/HK063W053ipfWsj1IUmv2dz/mNVgB0+EoY7oBbws1axA==, tarball: https://registry.npmjs.org/@wordpress/interactivity-router/-/interactivity-router-2.33.3.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}

   '@wordpress/interactivity-router@2.44.0':
-    resolution: {integrity: sha512-lpq1y1dPzgh5FjxAhsEYp9QcBED+eWOwUyQCKio+WE0dGBRnFf5Sghr2d+e99TDvhrQvB11Zal7pNCnPps9iWw==}
+    resolution: {integrity: sha512-lpq1y1dPzgh5FjxAhsEYp9QcBED+eWOwUyQCKio+WE0dGBRnFf5Sghr2d+e99TDvhrQvB11Zal7pNCnPps9iWw==, tarball: https://registry.npmjs.org/@wordpress/interactivity-router/-/interactivity-router-2.44.0.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}

   '@wordpress/interactivity@5.7.0':
-    resolution: {integrity: sha512-zB2CZwj4TWpE5OJtFfpma1OYvrsLTMgWpRJ2ojRuNqBruZfQAUqOXsn6JyTTWs6bgyd4dr/WOZay4Wr4isleUw==}
+    resolution: {integrity: sha512-zB2CZwj4TWpE5OJtFfpma1OYvrsLTMgWpRJ2ojRuNqBruZfQAUqOXsn6JyTTWs6bgyd4dr/WOZay4Wr4isleUw==, tarball: https://registry.npmjs.org/@wordpress/interactivity/-/interactivity-5.7.0.tgz}
     engines: {node: '>=12'}

   '@wordpress/interactivity@6.33.3':
-    resolution: {integrity: sha512-IOklCB4RiIK8os1XvJojTb+7d8gN3kTi9MxDZDe/M+yzbOvzK2zDZAtg4KHpRJdADfZmHvZgY8lLFXPsiX+F8A==}
+    resolution: {integrity: sha512-IOklCB4RiIK8os1XvJojTb+7d8gN3kTi9MxDZDe/M+yzbOvzK2zDZAtg4KHpRJdADfZmHvZgY8lLFXPsiX+F8A==, tarball: https://registry.npmjs.org/@wordpress/interactivity/-/interactivity-6.33.3.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}

   '@wordpress/interactivity@6.48.1':
-    resolution: {integrity: sha512-Qc+VoBt2XNoOuVMZwjQtZJ8iQfh7mJsSjPlxzSMyYRHGPa+WqfWO50LY/vyXYPs5s5FoMsb3S64ty/p//1DI2w==}
+    resolution: {integrity: sha512-Qc+VoBt2XNoOuVMZwjQtZJ8iQfh7mJsSjPlxzSMyYRHGPa+WqfWO50LY/vyXYPs5s5FoMsb3S64ty/p//1DI2w==, tarball: https://registry.npmjs.org/@wordpress/interactivity/-/interactivity-6.48.1.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}

   '@wordpress/interface@5.35.0':
-    resolution: {integrity: sha512-ClRQQVZQ6dpMwlcFLigdtqLdc8rXRwW4c2MUQTHctnU4Y9Lean+PV4ZhX/QN32gS/vhseCDzO0hg+gjQY6cdjQ==}
+    resolution: {integrity: sha512-ClRQQVZQ6dpMwlcFLigdtqLdc8rXRwW4c2MUQTHctnU4Y9Lean+PV4ZhX/QN32gS/vhseCDzO0hg+gjQY6cdjQ==, tarball: https://registry.npmjs.org/@wordpress/interface/-/interface-5.35.0.tgz}
     engines: {node: '>=12'}
     peerDependencies:
       react: ^18.0.0
       react-dom: ^18.0.0

   '@wordpress/interface@9.18.5':
-    resolution: {integrity: sha512-OCNCTogPS/kHPVjIAHtQ2y9WaX1fm1oK1cXQs6RezKtO1y/+nFH2L5pjzF7ifG1ECe5KL7REX4kJXgDTIwDV9g==}
+    resolution: {integrity: sha512-OCNCTogPS/kHPVjIAHtQ2y9WaX1fm1oK1cXQs6RezKtO1y/+nFH2L5pjzF7ifG1ECe5KL7REX4kJXgDTIwDV9g==, tarball: https://registry.npmjs.org/@wordpress/interface/-/interface-9.18.5.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       react: ^18.0.0
       react-dom: ^18.0.0

   '@wordpress/interface@9.33.1':
-    resolution: {integrity: sha512-ZXpdEpzrEtiPPxe2FFIIHL0+12T7CS6Ci8gp3rU0LdpvkGEzGps1lL0+hXuAboZkOUPmtcebRZ4QXmafdHvQbw==}
+    resolution: {integrity: sha512-ZXpdEpzrEtiPPxe2FFIIHL0+12T7CS6Ci8gp3rU0LdpvkGEzGps1lL0+hXuAboZkOUPmtcebRZ4QXmafdHvQbw==, tarball: https://registry.npmjs.org/@wordpress/interface/-/interface-9.33.1.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       react: ^18.0.0
       react-dom: ^18.0.0

   '@wordpress/is-shallow-equal@4.58.0':
-    resolution: {integrity: sha512-NH2lbXo/6ix1t4Zu9UBXpXNtoLwSaYmIRSyDH34XNb0ic8a7yjEOhYWVW3LTfSCv9dJVyxlM5TJPtL85q7LdeQ==}
+    resolution: {integrity: sha512-NH2lbXo/6ix1t4Zu9UBXpXNtoLwSaYmIRSyDH34XNb0ic8a7yjEOhYWVW3LTfSCv9dJVyxlM5TJPtL85q7LdeQ==, tarball: https://registry.npmjs.org/@wordpress/is-shallow-equal/-/is-shallow-equal-4.58.0.tgz}
     engines: {node: '>=12'}

   '@wordpress/is-shallow-equal@5.33.1':
-    resolution: {integrity: sha512-QMOwATwFjFr6Z9geS8EjuEVGN0gkpANypjqIBE8iTDtfKhY99LTtxbTaguviqKfVP7l73v1B0GJfHtkPExhJkA==}
-    engines: {node: '>=18.12.0', npm: '>=8.19.2'}
-
-  '@wordpress/is-shallow-equal@5.48.1':
-    resolution: {integrity: sha512-qOn4doqp8Xr5vOdF7kni5BThkMLxFA9fZIUVZo/lzs+/rwV7rwdQQXtq/PXnHcOWDOqHSXBVlUciV7clDE6aeA==}
+    resolution: {integrity: sha512-QMOwATwFjFr6Z9geS8EjuEVGN0gkpANypjqIBE8iTDtfKhY99LTtxbTaguviqKfVP7l73v1B0GJfHtkPExhJkA==, tarball: https://registry.npmjs.org/@wordpress/is-shallow-equal/-/is-shallow-equal-5.33.1.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}

   '@wordpress/is-shallow-equal@5.50.0':
-    resolution: {integrity: sha512-Cq1brW/OhGVNnCqSztHgmKQ1DsNUtEq4F1xIo1awBKVmXDWFggJRxzaWZHWC+sDZmBp7pu03jWqq2u/s+hazSQ==}
+    resolution: {integrity: sha512-Cq1brW/OhGVNnCqSztHgmKQ1DsNUtEq4F1xIo1awBKVmXDWFggJRxzaWZHWC+sDZmBp7pu03jWqq2u/s+hazSQ==, tarball: https://registry.npmjs.org/@wordpress/is-shallow-equal/-/is-shallow-equal-5.50.0.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}

   '@wordpress/jest-console@5.4.0':
@@ -10797,33 +10484,29 @@ packages:
       jest: '>=29'

   '@wordpress/keyboard-shortcuts@4.35.0':
-    resolution: {integrity: sha512-DR+fWhHt67GQT6PlrfMBpSmEYNCep+XvMYA55cnxoQ80LIFN5N5bkr4VeYdbrSatuOSRACm+6cfoQSIMQbdmjw==}
+    resolution: {integrity: sha512-DR+fWhHt67GQT6PlrfMBpSmEYNCep+XvMYA55cnxoQ80LIFN5N5bkr4VeYdbrSatuOSRACm+6cfoQSIMQbdmjw==, tarball: https://registry.npmjs.org/@wordpress/keyboard-shortcuts/-/keyboard-shortcuts-4.35.0.tgz}
     engines: {node: '>=12'}
     peerDependencies:
       react: ^18.0.0

   '@wordpress/keyboard-shortcuts@5.33.1':
-    resolution: {integrity: sha512-ql+qQ+AW9rnaS6jBv3J5MT8ku0qijAYCq6rIvfEiA1W84i5+LB9JYxxzrFH8v5uGU4ZjqqRQEmcDd+lorlT4Vg==}
+    resolution: {integrity: sha512-ql+qQ+AW9rnaS6jBv3J5MT8ku0qijAYCq6rIvfEiA1W84i5+LB9JYxxzrFH8v5uGU4ZjqqRQEmcDd+lorlT4Vg==, tarball: https://registry.npmjs.org/@wordpress/keyboard-shortcuts/-/keyboard-shortcuts-5.33.1.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       react: ^18.0.0

   '@wordpress/keyboard-shortcuts@5.48.1':
-    resolution: {integrity: sha512-HYm/Q52G5UvF4rOleWWJaRvsRjWBOyqhcCdlXXtVAWn7qEq5V2Lm5RSdI4L66EVFqRAHAPsz9ouwwiU98N5NFQ==}
+    resolution: {integrity: sha512-HYm/Q52G5UvF4rOleWWJaRvsRjWBOyqhcCdlXXtVAWn7qEq5V2Lm5RSdI4L66EVFqRAHAPsz9ouwwiU98N5NFQ==, tarball: https://registry.npmjs.org/@wordpress/keyboard-shortcuts/-/keyboard-shortcuts-5.48.1.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       react: ^18.0.0

   '@wordpress/keycodes@3.58.0':
-    resolution: {integrity: sha512-Q/LRKpx8ndzuHlkxSQ2BD+NTYYKQPIneNNMng8hTAfyU7RFwXpqj06HpeOFGh4XIdPKCs/8hmucoLJRmmLmZJA==}
+    resolution: {integrity: sha512-Q/LRKpx8ndzuHlkxSQ2BD+NTYYKQPIneNNMng8hTAfyU7RFwXpqj06HpeOFGh4XIdPKCs/8hmucoLJRmmLmZJA==, tarball: https://registry.npmjs.org/@wordpress/keycodes/-/keycodes-3.58.0.tgz}
     engines: {node: '>=12'}

   '@wordpress/keycodes@4.33.1':
-    resolution: {integrity: sha512-acuH0ogiY92ClslUpezZyEzfm1Ubx2bftevn/PxbsVq52UCOu14CAKgnO9sYqVuMpXT+zXveRMySixyKHB1wnA==}
-    engines: {node: '>=18.12.0', npm: '>=8.19.2'}
-
-  '@wordpress/keycodes@4.45.0':
-    resolution: {integrity: sha512-N+Wp572xZovLM45cYo6HfUNTQNDfEqakAYIOcY8bUqA2iFelN6AUkNfUIkIxmrE0EqkQAQ5odES03g8ym7e1IA==}
+    resolution: {integrity: sha512-acuH0ogiY92ClslUpezZyEzfm1Ubx2bftevn/PxbsVq52UCOu14CAKgnO9sYqVuMpXT+zXveRMySixyKHB1wnA==, tarball: https://registry.npmjs.org/@wordpress/keycodes/-/keycodes-4.33.1.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}

   '@wordpress/keycodes@4.48.1':
@@ -10840,31 +10523,31 @@ packages:
         optional: true

   '@wordpress/latex-to-mathml@1.16.0':
-    resolution: {integrity: sha512-WEXC9GKgMLXXqbezKZWw9cwozS4/dM23VDresod1nqfvgMSpvtgHsFP98wJWg2iQyA6SIksSuD/SROSaBCZ17A==}
+    resolution: {integrity: sha512-WEXC9GKgMLXXqbezKZWw9cwozS4/dM23VDresod1nqfvgMSpvtgHsFP98wJWg2iQyA6SIksSuD/SROSaBCZ17A==, tarball: https://registry.npmjs.org/@wordpress/latex-to-mathml/-/latex-to-mathml-1.16.0.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}

   '@wordpress/media-fields@0.9.0':
-    resolution: {integrity: sha512-rtDDXY2r1XFGdmcZ5TMOJF84k2y5vbLM+8deWxGBDzSYMFJEbV24rCaV1HzM91nqPlIv0LKoQB2D3rlhU8f1Qg==}
+    resolution: {integrity: sha512-rtDDXY2r1XFGdmcZ5TMOJF84k2y5vbLM+8deWxGBDzSYMFJEbV24rCaV1HzM91nqPlIv0LKoQB2D3rlhU8f1Qg==, tarball: https://registry.npmjs.org/@wordpress/media-fields/-/media-fields-0.9.0.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       react: ^18.0.0

   '@wordpress/media-utils@4.49.0':
-    resolution: {integrity: sha512-6xfkK3ehy2siAvQXnF9ZiEiPJHmQr6tOlwnFML7dSrnNzOyWxprTxvsdXMP51O2r/kLozdc/gr60fnQAMs70vw==}
+    resolution: {integrity: sha512-6xfkK3ehy2siAvQXnF9ZiEiPJHmQr6tOlwnFML7dSrnNzOyWxprTxvsdXMP51O2r/kLozdc/gr60fnQAMs70vw==, tarball: https://registry.npmjs.org/@wordpress/media-utils/-/media-utils-4.49.0.tgz}
     engines: {node: '>=12'}

   '@wordpress/media-utils@5.33.1':
-    resolution: {integrity: sha512-Ty4gPDoKesy3nTu6b2nU2bee1Vqk90Cf1MHsoalo+6lw/UDlvX+RsogUzTVwUH9n2jG4rYQFPZY1KI/1pxj1rg==}
+    resolution: {integrity: sha512-Ty4gPDoKesy3nTu6b2nU2bee1Vqk90Cf1MHsoalo+6lw/UDlvX+RsogUzTVwUH9n2jG4rYQFPZY1KI/1pxj1rg==, tarball: https://registry.npmjs.org/@wordpress/media-utils/-/media-utils-5.33.1.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}

   '@wordpress/media-utils@5.44.0':
-    resolution: {integrity: sha512-bd8r5absa9tCB/b0xgIe13UnXEwgup76zD5xd8mSkYtI+e/UZGsOTfOOyz4I39lzTN9wJtCUGwQHa+ODCN8oaA==}
+    resolution: {integrity: sha512-bd8r5absa9tCB/b0xgIe13UnXEwgup76zD5xd8mSkYtI+e/UZGsOTfOOyz4I39lzTN9wJtCUGwQHa+ODCN8oaA==, tarball: https://registry.npmjs.org/@wordpress/media-utils/-/media-utils-5.44.0.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       react: ^18.0.0

   '@wordpress/notices@4.26.0':
-    resolution: {integrity: sha512-Lu98xQdtZHgC3d32IFalZbOiIu8aRFWlEQXXfRutD7EhXXp6FIXvnvc054700/Dk1mg9P/bWd0zm/cigkXgfkA==}
+    resolution: {integrity: sha512-Lu98xQdtZHgC3d32IFalZbOiIu8aRFWlEQXXfRutD7EhXXp6FIXvnvc054700/Dk1mg9P/bWd0zm/cigkXgfkA==, tarball: https://registry.npmjs.org/@wordpress/notices/-/notices-4.26.0.tgz}
     engines: {node: '>=12'}
     peerDependencies:
       react: ^18.0.0
@@ -10876,7 +10559,7 @@ packages:
       react: ^18.0.0

   '@wordpress/notices@5.48.1':
-    resolution: {integrity: sha512-igkUhvyvp+C61HcE7OBiCPkPYMae8k0BQBZblepXghkX82zlqVe5NiueepWTwY7pFDDEsZlxl9sYF2DWf6HF3w==}
+    resolution: {integrity: sha512-igkUhvyvp+C61HcE7OBiCPkPYMae8k0BQBZblepXghkX82zlqVe5NiueepWTwY7pFDDEsZlxl9sYF2DWf6HF3w==, tarball: https://registry.npmjs.org/@wordpress/notices/-/notices-5.48.1.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       react: ^18.0.0
@@ -10888,49 +10571,49 @@ packages:
       npm-package-json-lint: '>=6.0.0'

   '@wordpress/patterns@1.19.0':
-    resolution: {integrity: sha512-L0NhNn6P2YuZRgZNlZP0IFYKoVjQI5Vf/4edgG8yjYwuXLkanJvBZWglswu4Z8jzlsBN72o0n3K37FO8VzcnmA==}
+    resolution: {integrity: sha512-L0NhNn6P2YuZRgZNlZP0IFYKoVjQI5Vf/4edgG8yjYwuXLkanJvBZWglswu4Z8jzlsBN72o0n3K37FO8VzcnmA==, tarball: https://registry.npmjs.org/@wordpress/patterns/-/patterns-1.19.0.tgz}
     engines: {node: '>=16.0.0'}
     peerDependencies:
       react: ^18.0.0
       react-dom: ^18.0.0

   '@wordpress/patterns@2.33.9':
-    resolution: {integrity: sha512-CqSMtixhEA0pT/WQUmlfF6zovPCqw/+qnom5nvezipdtTMZNmehFnGwoSmyegADH56zIzkGJRnjWT6WoPLfeOg==}
+    resolution: {integrity: sha512-CqSMtixhEA0pT/WQUmlfF6zovPCqw/+qnom5nvezipdtTMZNmehFnGwoSmyegADH56zIzkGJRnjWT6WoPLfeOg==, tarball: https://registry.npmjs.org/@wordpress/patterns/-/patterns-2.33.9.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       react: ^18.0.0
       react-dom: ^18.0.0

   '@wordpress/patterns@2.44.0':
-    resolution: {integrity: sha512-uSuqad6hfCJ2vEj9OfGNy65zovgQaNBHCE8249pk8WJMW9Sg8FfCBcGZWpCs2AdRD9re8gWPGuq6DLpPv8RbBw==}
+    resolution: {integrity: sha512-uSuqad6hfCJ2vEj9OfGNy65zovgQaNBHCE8249pk8WJMW9Sg8FfCBcGZWpCs2AdRD9re8gWPGuq6DLpPv8RbBw==, tarball: https://registry.npmjs.org/@wordpress/patterns/-/patterns-2.44.0.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       react: ^18.0.0
       react-dom: ^18.0.0

   '@wordpress/plugins@6.26.0':
-    resolution: {integrity: sha512-GsV9mSlHF+Tn3BHCLR+nM+7FmyWDOcxHHSBwHUVNbghrmLM4Hy/Jvs8vcirTZivGEbQSB6EBJO7QIFRrXk0PpQ==}
+    resolution: {integrity: sha512-GsV9mSlHF+Tn3BHCLR+nM+7FmyWDOcxHHSBwHUVNbghrmLM4Hy/Jvs8vcirTZivGEbQSB6EBJO7QIFRrXk0PpQ==, tarball: https://registry.npmjs.org/@wordpress/plugins/-/plugins-6.26.0.tgz}
     engines: {node: '>=12'}
     peerDependencies:
       react: ^18.0.0
       react-dom: ^18.0.0

   '@wordpress/plugins@7.33.5':
-    resolution: {integrity: sha512-kTNhyX1FKTSWBmxfHWoqEo5+iM96ThHXGqFGzeAFt+W35EeHzt9a/H++9yfcxMqDyjR1IRjoB261bX+oLPuw9Q==}
+    resolution: {integrity: sha512-kTNhyX1FKTSWBmxfHWoqEo5+iM96ThHXGqFGzeAFt+W35EeHzt9a/H++9yfcxMqDyjR1IRjoB261bX+oLPuw9Q==, tarball: https://registry.npmjs.org/@wordpress/plugins/-/plugins-7.33.5.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       react: ^18.0.0
       react-dom: ^18.0.0

   '@wordpress/plugins@7.48.1':
-    resolution: {integrity: sha512-4U/q79mG8D65/x/uktv60X2NjbkLZcMo0OErZujfMKbjni2ugbjhEpuV/lF3mVhWoKX8c1nhgEEH7SNdQnRA5Q==}
+    resolution: {integrity: sha512-4U/q79mG8D65/x/uktv60X2NjbkLZcMo0OErZujfMKbjni2ugbjhEpuV/lF3mVhWoKX8c1nhgEEH7SNdQnRA5Q==, tarball: https://registry.npmjs.org/@wordpress/plugins/-/plugins-7.48.1.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       react: ^18.0.0
       react-dom: ^18.0.0

   '@wordpress/postcss-plugins-preset@5.33.1':
-    resolution: {integrity: sha512-mlxJflCUP3An6UXCQY137HajhQTKxPn+lL+p2PgeAtv6PVhwc8Gmv1RJP2QiGIPxrmI/KzrmHubSMjK1LYA12A==}
+    resolution: {integrity: sha512-mlxJflCUP3An6UXCQY137HajhQTKxPn+lL+p2PgeAtv6PVhwc8Gmv1RJP2QiGIPxrmI/KzrmHubSMjK1LYA12A==, tarball: https://registry.npmjs.org/@wordpress/postcss-plugins-preset/-/postcss-plugins-preset-5.33.1.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       postcss: ^8.0.0
@@ -10942,7 +10625,7 @@ packages:
       postcss: ^8.0.0

   '@wordpress/postcss-plugins-preset@5.51.0':
-    resolution: {integrity: sha512-+OhYELBraJdZE16ynT0HlQxuwwQTi+meKTWOa6VV/sFm2E3h9ZnwedbULphTPFTR5bTbTk462cXXQtnevO52oQ==}
+    resolution: {integrity: sha512-+OhYELBraJdZE16ynT0HlQxuwwQTi+meKTWOa6VV/sFm2E3h9ZnwedbULphTPFTR5bTbTk462cXXQtnevO52oQ==, tarball: https://registry.npmjs.org/@wordpress/postcss-plugins-preset/-/postcss-plugins-preset-5.51.0.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       postcss: ^8.0.0
@@ -10961,14 +10644,14 @@ packages:
       react-dom: ^18.0.0

   '@wordpress/preferences@4.33.5':
-    resolution: {integrity: sha512-5tPfWv5Kw/+KAfFzsZKojK3FHNDiMVwj8GusXAqbsCSy9YsyAxifaEXeul684RYFdizLK3gWqe4S0K6GaLs0CA==}
+    resolution: {integrity: sha512-5tPfWv5Kw/+KAfFzsZKojK3FHNDiMVwj8GusXAqbsCSy9YsyAxifaEXeul684RYFdizLK3gWqe4S0K6GaLs0CA==, tarball: https://registry.npmjs.org/@wordpress/preferences/-/preferences-4.33.5.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       react: ^18.0.0
       react-dom: ^18.0.0

   '@wordpress/preferences@4.48.1':
-    resolution: {integrity: sha512-ETRFHFXRJ80UYXwjy5FQlAHlVZQjC3PUqvrW6KT8aJT/nsy8+uMLV0FUE1e37QqeAwdwMDj9jC/MNz0m3eRmOw==}
+    resolution: {integrity: sha512-ETRFHFXRJ80UYXwjy5FQlAHlVZQjC3PUqvrW6KT8aJT/nsy8+uMLV0FUE1e37QqeAwdwMDj9jC/MNz0m3eRmOw==, tarball: https://registry.npmjs.org/@wordpress/preferences/-/preferences-4.48.1.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       react: ^18.0.0
@@ -10993,27 +10676,15 @@ packages:
       prettier: '>=3'

   '@wordpress/primitives@2.2.0':
-    resolution: {integrity: sha512-WupgR+tt6fKGZE1UKy2gz3wDdpRL9MWQbVuetXv/7TPAz2ofOS2fZIsXNrl4D0HkA82gYh8w8s2TXK0XNyAAow==}
+    resolution: {integrity: sha512-WupgR+tt6fKGZE1UKy2gz3wDdpRL9MWQbVuetXv/7TPAz2ofOS2fZIsXNrl4D0HkA82gYh8w8s2TXK0XNyAAow==, tarball: https://registry.npmjs.org/@wordpress/primitives/-/primitives-2.2.0.tgz}
     engines: {node: '>=12'}

   '@wordpress/primitives@3.56.0':
-    resolution: {integrity: sha512-NXBq1ODjl6inMWx/l7KCbATcjdoeIOqYeL9i9alqdAfWeKx1EH9PIvKWylIkqZk7erXxCxldiRkuyjTtwjNBxw==}
+    resolution: {integrity: sha512-NXBq1ODjl6inMWx/l7KCbATcjdoeIOqYeL9i9alqdAfWeKx1EH9PIvKWylIkqZk7erXxCxldiRkuyjTtwjNBxw==, tarball: https://registry.npmjs.org/@wordpress/primitives/-/primitives-3.56.0.tgz}
     engines: {node: '>=12'}

   '@wordpress/primitives@4.33.1':
-    resolution: {integrity: sha512-CVdk+tyyGVB4ube6O/uS9BgdDly2imImqE6SM/Aa5N4O6BI6mIgLhLQoKqj7WBKIdI0qTMndyGHfqqoUWBD5wA==}
-    engines: {node: '>=18.12.0', npm: '>=8.19.2'}
-    peerDependencies:
-      react: ^18.0.0
-
-  '@wordpress/primitives@4.45.0':
-    resolution: {integrity: sha512-x+i6EKUvz96EkUb2KuBTLNGm8d5+ZS0FYjUEnIhp5dtWxjMe8dJT6LS+n363vg+K28LVvjptiTAaByccnNKc9w==}
-    engines: {node: '>=18.12.0', npm: '>=8.19.2'}
-    peerDependencies:
-      react: ^18.0.0
-
-  '@wordpress/primitives@4.48.1':
-    resolution: {integrity: sha512-nzAcsXhBxw9x2q/ImVa45Ft80TO+e/WgCDmWaU3Zb2trogwThxZTezkE0oeQ6PSxSeGYM6nBgk+qqFCG8wyMhQ==}
+    resolution: {integrity: sha512-CVdk+tyyGVB4ube6O/uS9BgdDly2imImqE6SM/Aa5N4O6BI6mIgLhLQoKqj7WBKIdI0qTMndyGHfqqoUWBD5wA==, tarball: https://registry.npmjs.org/@wordpress/primitives/-/primitives-4.33.1.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       react: ^18.0.0
@@ -11029,11 +10700,11 @@ packages:
         optional: true

   '@wordpress/priority-queue@2.58.0':
-    resolution: {integrity: sha512-W+qCS8HJWsXG8gE6yK/H/IObowcghPrQMM3cQHtfd/U05yFNU1Bd/fbj3AO1fVRztktS47lIpi9m3ll1evPEHA==}
+    resolution: {integrity: sha512-W+qCS8HJWsXG8gE6yK/H/IObowcghPrQMM3cQHtfd/U05yFNU1Bd/fbj3AO1fVRztktS47lIpi9m3ll1evPEHA==, tarball: https://registry.npmjs.org/@wordpress/priority-queue/-/priority-queue-2.58.0.tgz}
     engines: {node: '>=12'}

   '@wordpress/priority-queue@3.33.1':
-    resolution: {integrity: sha512-m3S+bfVIGmDHVrCzTdQu5oHP6aBIM0pf5AYVpfdA2addJHLICtAMrPYdD+4MXekh8a38DzPekZa03vGv3ws3zQ==}
+    resolution: {integrity: sha512-m3S+bfVIGmDHVrCzTdQu5oHP6aBIM0pf5AYVpfdA2addJHLICtAMrPYdD+4MXekh8a38DzPekZa03vGv3ws3zQ==, tarball: https://registry.npmjs.org/@wordpress/priority-queue/-/priority-queue-3.33.1.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}

   '@wordpress/priority-queue@3.48.1':
@@ -11041,7 +10712,7 @@ packages:
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}

   '@wordpress/priority-queue@3.50.0':
-    resolution: {integrity: sha512-OyuAplepKQpNYr8z+nGGGNXWK2v2u9Bqnawkg7V5YkvOKYj/iBJNCiUxiWXOBMeLF1ze36RDR5LEcNDmXRev2Q==}
+    resolution: {integrity: sha512-OyuAplepKQpNYr8z+nGGGNXWK2v2u9Bqnawkg7V5YkvOKYj/iBJNCiUxiWXOBMeLF1ze36RDR5LEcNDmXRev2Q==, tarball: https://registry.npmjs.org/@wordpress/priority-queue/-/priority-queue-3.50.0.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}

   '@wordpress/private-apis@1.48.1':
@@ -11057,7 +10728,7 @@ packages:
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}

   '@wordpress/redux-routine@4.58.0':
-    resolution: {integrity: sha512-r0mMWFeJr93yPy2uY/M5+gdUUYj0Zu8+21OFFb5hyQ0z7UHIa3IdgQxzCaTbV1LDA1ZYJrjHeCnA6s4gNHjA2Q==}
+    resolution: {integrity: sha512-r0mMWFeJr93yPy2uY/M5+gdUUYj0Zu8+21OFFb5hyQ0z7UHIa3IdgQxzCaTbV1LDA1ZYJrjHeCnA6s4gNHjA2Q==, tarball: https://registry.npmjs.org/@wordpress/redux-routine/-/redux-routine-4.58.0.tgz}
     engines: {node: '>=12'}
     peerDependencies:
       redux: '>=4'
@@ -11082,36 +10753,30 @@ packages:
       react-dom: ^18.0.0

   '@wordpress/reusable-blocks@5.44.0':
-    resolution: {integrity: sha512-9dpae0P0sZiCjsJz9Zk+MhjHIllURzD3e72XLzjnRh0r/tmoQt1OJKUyAfDZCM1YS7SgvMkTPlpCgiB+M9c3jw==}
+    resolution: {integrity: sha512-9dpae0P0sZiCjsJz9Zk+MhjHIllURzD3e72XLzjnRh0r/tmoQt1OJKUyAfDZCM1YS7SgvMkTPlpCgiB+M9c3jw==, tarball: https://registry.npmjs.org/@wordpress/reusable-blocks/-/reusable-blocks-5.44.0.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       react: ^18.0.0
       react-dom: ^18.0.0

   '@wordpress/rich-text@4.2.0':
-    resolution: {integrity: sha512-e+wfrkKtZIcFZJZLxkrikiXbxlr6nuGg+V94uKMLrzJEWdw7w/8l3dNhWHRGPkldXIEGrF/mV40ibjUa2p3Sfg==}
+    resolution: {integrity: sha512-e+wfrkKtZIcFZJZLxkrikiXbxlr6nuGg+V94uKMLrzJEWdw7w/8l3dNhWHRGPkldXIEGrF/mV40ibjUa2p3Sfg==, tarball: https://registry.npmjs.org/@wordpress/rich-text/-/rich-text-4.2.0.tgz}
     engines: {node: '>=12'}

   '@wordpress/rich-text@6.35.0':
-    resolution: {integrity: sha512-h6/XftSqo9UQZebuNZyLfOVu+ButBLITW/BILsKeJhSpmM19VNdz8UhVGLp+xQPE+/GPCIMJrhhqipISDfc2Ig==}
+    resolution: {integrity: sha512-h6/XftSqo9UQZebuNZyLfOVu+ButBLITW/BILsKeJhSpmM19VNdz8UhVGLp+xQPE+/GPCIMJrhhqipISDfc2Ig==, tarball: https://registry.npmjs.org/@wordpress/rich-text/-/rich-text-6.35.0.tgz}
     engines: {node: '>=12'}
     peerDependencies:
       react: ^18.0.0

   '@wordpress/rich-text@7.33.2':
-    resolution: {integrity: sha512-jy8DPBN6f0WeQM1jL+yGX29xHgzDdyrGoXYEGrGt2ngpGYMca2ZrG9ZLcpQlU6S3sLV/n1jtjZntWrFFYRzgQA==}
-    engines: {node: '>=18.12.0', npm: '>=8.19.2'}
-    peerDependencies:
-      react: ^18.0.0
-
-  '@wordpress/rich-text@7.48.1':
-    resolution: {integrity: sha512-pj+S2d2p4EUJ03V/tOhlvb9qGPixft7v1zj9KEyM70VY6nHD5mmVp95Q5ALtlioyDFWYhzSo609PEd9fJ8FTsQ==}
+    resolution: {integrity: sha512-jy8DPBN6f0WeQM1jL+yGX29xHgzDdyrGoXYEGrGt2ngpGYMca2ZrG9ZLcpQlU6S3sLV/n1jtjZntWrFFYRzgQA==, tarball: https://registry.npmjs.org/@wordpress/rich-text/-/rich-text-7.33.2.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       react: ^18.0.0

   '@wordpress/rich-text@7.50.0':
-    resolution: {integrity: sha512-i3lFUjzeIx+0xWoWUWKIcr5pWyT6D75JlMnB0wgLE5hyaI1NUryUziOohW9b1j6xKvY1CS0j6JJVmnJAmHXHsQ==}
+    resolution: {integrity: sha512-i3lFUjzeIx+0xWoWUWKIcr5pWyT6D75JlMnB0wgLE5hyaI1NUryUziOohW9b1j6xKvY1CS0j6JJVmnJAmHXHsQ==, tarball: https://registry.npmjs.org/@wordpress/rich-text/-/rich-text-7.50.0.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       '@types/react': 18.3.x
@@ -11121,19 +10786,13 @@ packages:
         optional: true

   '@wordpress/route@0.10.0':
-    resolution: {integrity: sha512-rNXo4cq+yPlkFzC/bQjZW8qQpaNgh1nAeUVefc4Si079C79pC0JhnXKqPOq4Iy28oJZyRjfdLdFV1FdLhHfmzA==}
-    engines: {node: '>=18.12.0', npm: '>=8.19.2'}
-    peerDependencies:
-      react: ^18.0.0
-
-  '@wordpress/route@0.14.1':
-    resolution: {integrity: sha512-hJjvydtzSCyDGn822zsd5vxuyUqribJAWLEOb3wZGtp1H2X+OuN1MVrR4FUexlrr7tz8S8MqryBxGt0dj9L4Yg==}
+    resolution: {integrity: sha512-rNXo4cq+yPlkFzC/bQjZW8qQpaNgh1nAeUVefc4Si079C79pC0JhnXKqPOq4Iy28oJZyRjfdLdFV1FdLhHfmzA==, tarball: https://registry.npmjs.org/@wordpress/route/-/route-0.10.0.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       react: ^18.0.0

   '@wordpress/route@0.15.0':
-    resolution: {integrity: sha512-lkktJdVVWsXZACrplhRjUoOMHKV0lq7tIWxERAA8nr8BmPMNG8HGKVJ+mXi82n2TI0/nfFXV0p8g7DcX59+pbw==}
+    resolution: {integrity: sha512-lkktJdVVWsXZACrplhRjUoOMHKV0lq7tIWxERAA8nr8BmPMNG8HGKVJ+mXi82n2TI0/nfFXV0p8g7DcX59+pbw==, tarball: https://registry.npmjs.org/@wordpress/route/-/route-0.15.0.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       react: ^18.0.0
@@ -11144,14 +10803,8 @@ packages:
     peerDependencies:
       react: ^18.0.0

-  '@wordpress/router@1.11.0':
-    resolution: {integrity: sha512-sPcJ0uLXNmMW0hi+zpzvZkOXHbh//U32ZbZs6EHVmpjOk4CD2QNXkEPctFiU8UwOucMOZdkdB2WJcLE4GRkGCA==}
-    engines: {node: '>=18.12.0', npm: '>=8.19.2'}
-    peerDependencies:
-      react: ^18.0.0
-
   '@wordpress/router@1.44.0':
-    resolution: {integrity: sha512-o7ksSoxHMhX+hHyTSHbJtr4jJep7fuwNU0jRwfmGTLNGWb8m1/wB7l+WcP/KNwcM/jomi2aa/ggsm9bT+yAypw==}
+    resolution: {integrity: sha512-o7ksSoxHMhX+hHyTSHbJtr4jJep7fuwNU0jRwfmGTLNGWb8m1/wB7l+WcP/KNwcM/jomi2aa/ggsm9bT+yAypw==, tarball: https://registry.npmjs.org/@wordpress/router/-/router-1.44.0.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       react: ^18.0.0
@@ -11170,28 +10823,28 @@ packages:
         optional: true

   '@wordpress/server-side-render@4.35.0':
-    resolution: {integrity: sha512-yTbq31iGFc9VaRMtdCLlyZtbwCN+WdiECEqY6MsMXf31/TDmUcdZPxRTORy3Rz2HxEpFfUMjpRz7A8wn1QZmzA==}
+    resolution: {integrity: sha512-yTbq31iGFc9VaRMtdCLlyZtbwCN+WdiECEqY6MsMXf31/TDmUcdZPxRTORy3Rz2HxEpFfUMjpRz7A8wn1QZmzA==, tarball: https://registry.npmjs.org/@wordpress/server-side-render/-/server-side-render-4.35.0.tgz}
     engines: {node: '>=12'}
     peerDependencies:
       react: ^18.0.0
       react-dom: ^18.0.0

   '@wordpress/server-side-render@6.20.0':
-    resolution: {integrity: sha512-89QVTA0SlftdgGtqfFQWxja7/ocMPJtcJbeiPbfzULWom0DxuwUt3CG1/vTs+SOYtzWSaxM3PJZJLI/ZXyCtdQ==}
+    resolution: {integrity: sha512-89QVTA0SlftdgGtqfFQWxja7/ocMPJtcJbeiPbfzULWom0DxuwUt3CG1/vTs+SOYtzWSaxM3PJZJLI/ZXyCtdQ==, tarball: https://registry.npmjs.org/@wordpress/server-side-render/-/server-side-render-6.20.0.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       react: ^18.0.0
       react-dom: ^18.0.0

   '@wordpress/server-side-render@6.9.5':
-    resolution: {integrity: sha512-/69swIXXWg4+bvd6nL6N9xLy6JE2YgtduyVSjaBE4Z1Ri0VKXLK3c3j6PBp39QlhgSUpN2TJnLb22R4GMOw52w==}
+    resolution: {integrity: sha512-/69swIXXWg4+bvd6nL6N9xLy6JE2YgtduyVSjaBE4Z1Ri0VKXLK3c3j6PBp39QlhgSUpN2TJnLb22R4GMOw52w==, tarball: https://registry.npmjs.org/@wordpress/server-side-render/-/server-side-render-6.9.5.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       react: ^18.0.0
       react-dom: ^18.0.0

   '@wordpress/shortcode@3.58.0':
-    resolution: {integrity: sha512-yM3Y25XqLfz/X6xXowXbrTvk+tslKeALNNESI5nGt1X7wWPsYQDOqyBb1HT9TglSLFgWYlQlNtgEbz07dEiDgQ==}
+    resolution: {integrity: sha512-yM3Y25XqLfz/X6xXowXbrTvk+tslKeALNNESI5nGt1X7wWPsYQDOqyBb1HT9TglSLFgWYlQlNtgEbz07dEiDgQ==, tarball: https://registry.npmjs.org/@wordpress/shortcode/-/shortcode-3.58.0.tgz}
     engines: {node: '>=12'}

   '@wordpress/shortcode@4.48.1':
@@ -11211,15 +10864,15 @@ packages:
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}

   '@wordpress/style-runtime@0.4.1':
-    resolution: {integrity: sha512-guZ0p9a5ZQyyCFPwVqDkhDNVXdXAhIqNkPGSNIGguEtt3OtSOskEMwYJHyXZYX8nlbH0FyKflGJhE4G6QlIWlw==}
+    resolution: {integrity: sha512-guZ0p9a5ZQyyCFPwVqDkhDNVXdXAhIqNkPGSNIGguEtt3OtSOskEMwYJHyXZYX8nlbH0FyKflGJhE4G6QlIWlw==, tarball: https://registry.npmjs.org/@wordpress/style-runtime/-/style-runtime-0.4.1.tgz}
     engines: {node: '>=20.10.0', npm: '>=10.2.3'}

   '@wordpress/style-runtime@0.5.0':
-    resolution: {integrity: sha512-hrXvdDUJpOzT1KIomgtysysgbc5bkkwAuJyEUAXiOCgVBXBeMkZlgfN19W0PuNY51j53K7VQ42txfayxgVmfgA==}
+    resolution: {integrity: sha512-hrXvdDUJpOzT1KIomgtysysgbc5bkkwAuJyEUAXiOCgVBXBeMkZlgfN19W0PuNY51j53K7VQ42txfayxgVmfgA==, tarball: https://registry.npmjs.org/@wordpress/style-runtime/-/style-runtime-0.5.0.tgz}
     engines: {node: '>=20.10.0', npm: '>=10.2.3'}

   '@wordpress/style-runtime@0.6.0':
-    resolution: {integrity: sha512-PSNzFecFRJ7gmah5YxHFv0a0ZUwZOdeO9/B8GNyv2LgC/ZLXS8CtsAblOKVRO3W7ExwazbHwexaTAOzU/+7Mug==}
+    resolution: {integrity: sha512-PSNzFecFRJ7gmah5YxHFv0a0ZUwZOdeO9/B8GNyv2LgC/ZLXS8CtsAblOKVRO3W7ExwazbHwexaTAOzU/+7Mug==, tarball: https://registry.npmjs.org/@wordpress/style-runtime/-/style-runtime-0.6.0.tgz}
     engines: {node: '>=20.10.0', npm: '>=10.2.3'}

   '@wordpress/stylelint-config@21.41.0':
@@ -11243,15 +10896,15 @@ packages:
       stylelint-scss: ^6.4.0

   '@wordpress/sync@0.20.0':
-    resolution: {integrity: sha512-nEB2UHiSF0PoU5irAmeuljt4OQbqKHpOlJOb0WMiydbDBGTzquxF6I61ax2mFTbSDntL0AUt8pxi6eT9con1sQ==}
+    resolution: {integrity: sha512-nEB2UHiSF0PoU5irAmeuljt4OQbqKHpOlJOb0WMiydbDBGTzquxF6I61ax2mFTbSDntL0AUt8pxi6eT9con1sQ==, tarball: https://registry.npmjs.org/@wordpress/sync/-/sync-0.20.0.tgz}
     engines: {node: '>=12'}

   '@wordpress/sync@1.48.1':
-    resolution: {integrity: sha512-RLPTX9f7KdGPyzYDyxwMdnPTEqcAskjOt6AVEb/XJ0gzBmbtqxnoQVrBk/cVcKjaIPTAg2lJkM82RnvnopmoQw==}
+    resolution: {integrity: sha512-RLPTX9f7KdGPyzYDyxwMdnPTEqcAskjOt6AVEb/XJ0gzBmbtqxnoQVrBk/cVcKjaIPTAg2lJkM82RnvnopmoQw==, tarball: https://registry.npmjs.org/@wordpress/sync/-/sync-1.48.1.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}

   '@wordpress/theme@0.11.0':
-    resolution: {integrity: sha512-jXilt+3codfAEFRHvLpnULeOaaycwJByyv+m/TIlspZ4r0l4X9iA1KL7GkXOHz2AJWWvS7FUnS/GHBuIrUgAWg==}
+    resolution: {integrity: sha512-jXilt+3codfAEFRHvLpnULeOaaycwJByyv+m/TIlspZ4r0l4X9iA1KL7GkXOHz2AJWWvS7FUnS/GHBuIrUgAWg==, tarball: https://registry.npmjs.org/@wordpress/theme/-/theme-0.11.0.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       react: ^18.0.0
@@ -11262,7 +10915,7 @@ packages:
         optional: true

   '@wordpress/theme@0.12.0':
-    resolution: {integrity: sha512-AmEVO0B+kI9tsxkLnna/S+7yi+EPCMTuaPqagje7pnlXeDfykVQfeDeWJfU+QvhcqHXCySn89vvw1Ihep0rj7w==}
+    resolution: {integrity: sha512-AmEVO0B+kI9tsxkLnna/S+7yi+EPCMTuaPqagje7pnlXeDfykVQfeDeWJfU+QvhcqHXCySn89vvw1Ihep0rj7w==, tarball: https://registry.npmjs.org/@wordpress/theme/-/theme-0.12.0.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       react: ^18.0.0
@@ -11273,7 +10926,7 @@ packages:
         optional: true

   '@wordpress/theme@0.15.1':
-    resolution: {integrity: sha512-0SqH40Sd4pKH8YkDjQ4JM2NJzdhliO19QTPHAOAGA+tXuh+YwHOwFxX8Mg0v/vvI4XJD11zuiKGr+grBI7icTQ==}
+    resolution: {integrity: sha512-0SqH40Sd4pKH8YkDjQ4JM2NJzdhliO19QTPHAOAGA+tXuh+YwHOwFxX8Mg0v/vvI4XJD11zuiKGr+grBI7icTQ==, tarball: https://registry.npmjs.org/@wordpress/theme/-/theme-0.15.1.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       react: ^18.0.0
@@ -11284,7 +10937,7 @@ packages:
         optional: true

   '@wordpress/theme@0.17.0':
-    resolution: {integrity: sha512-BU+PLBLxMBM4WJYrd1QEwy+IA64vUP+8IEEB9lLx2NfB+3/45vvuvXx9o3qPKRDHvtMtEaRArld4Kn05UIW9IA==}
+    resolution: {integrity: sha512-BU+PLBLxMBM4WJYrd1QEwy+IA64vUP+8IEEB9lLx2NfB+3/45vvuvXx9o3qPKRDHvtMtEaRArld4Kn05UIW9IA==, tarball: https://registry.npmjs.org/@wordpress/theme/-/theme-0.17.0.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       '@types/react': 18.3.x
@@ -11307,36 +10960,36 @@ packages:
         optional: true

   '@wordpress/token-list@2.58.0':
-    resolution: {integrity: sha512-xzNGzAZ87GERq7rZvZjMv742nj37tSLFBb8+c7oaLdpUpfn8YTaXQacvphdN2jmtfHvEZHivW7hErwqF9eQW/A==}
+    resolution: {integrity: sha512-xzNGzAZ87GERq7rZvZjMv742nj37tSLFBb8+c7oaLdpUpfn8YTaXQacvphdN2jmtfHvEZHivW7hErwqF9eQW/A==, tarball: https://registry.npmjs.org/@wordpress/token-list/-/token-list-2.58.0.tgz}
     engines: {node: '>=12'}

   '@wordpress/token-list@3.48.1':
-    resolution: {integrity: sha512-hFAqE8xmTpq/4IVs3AHXxVA2FTrQ2BcOQHsdXJ9kELfcazTZWZsPU2hampfIGYZzyzLnTX06dUubuuy2++LUSQ==}
+    resolution: {integrity: sha512-hFAqE8xmTpq/4IVs3AHXxVA2FTrQ2BcOQHsdXJ9kELfcazTZWZsPU2hampfIGYZzyzLnTX06dUubuuy2++LUSQ==, tarball: https://registry.npmjs.org/@wordpress/token-list/-/token-list-3.48.1.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}

   '@wordpress/ui@0.11.0':
-    resolution: {integrity: sha512-V1R3CTQ8MltuajZ53PCHGe9mmRwyx1RpjHA2wWOv+79dV0qQ1Y/psL0YTMY4eteL4SNAlBcjJVP66zD5O6yF8Q==}
+    resolution: {integrity: sha512-V1R3CTQ8MltuajZ53PCHGe9mmRwyx1RpjHA2wWOv+79dV0qQ1Y/psL0YTMY4eteL4SNAlBcjJVP66zD5O6yF8Q==, tarball: https://registry.npmjs.org/@wordpress/ui/-/ui-0.11.0.tgz}
     engines: {node: '>=20.10.0', npm: '>=10.2.3'}
     peerDependencies:
       react: ^18.0.0
       react-dom: ^18.0.0

   '@wordpress/ui@0.12.0':
-    resolution: {integrity: sha512-n/xfyagM90CcikLtlvNcjsFZtpt1wTpboOZPyCp9wqF6akAyJ4SUg9hXb/UA7pC8JqGe1Dg/hXJnFn/td8pvRA==}
+    resolution: {integrity: sha512-n/xfyagM90CcikLtlvNcjsFZtpt1wTpboOZPyCp9wqF6akAyJ4SUg9hXb/UA7pC8JqGe1Dg/hXJnFn/td8pvRA==, tarball: https://registry.npmjs.org/@wordpress/ui/-/ui-0.12.0.tgz}
     engines: {node: '>=20.10.0', npm: '>=10.2.3'}
     peerDependencies:
       react: ^18.0.0
       react-dom: ^18.0.0

   '@wordpress/ui@0.15.1':
-    resolution: {integrity: sha512-zFErzf84zc7dGXrCa9fPKUpMhYx86B8n5GeshC7Ut/nfE7yp09g/Bono5S7KhY1OJx7Z1Jur9t+4vnv5cocBbA==}
+    resolution: {integrity: sha512-zFErzf84zc7dGXrCa9fPKUpMhYx86B8n5GeshC7Ut/nfE7yp09g/Bono5S7KhY1OJx7Z1Jur9t+4vnv5cocBbA==, tarball: https://registry.npmjs.org/@wordpress/ui/-/ui-0.15.1.tgz}
     engines: {node: '>=20.10.0', npm: '>=10.2.3'}
     peerDependencies:
       react: ^18.0.0
       react-dom: ^18.0.0

   '@wordpress/ui@0.16.1':
-    resolution: {integrity: sha512-kJw2wcFTpQ3NcebbKiXqwFTSLgKwt0ZTukcaxWgsYRVdb2bAmCSEpq8qpLvEN6bqg4JUkuHNlqRguQNdIsXGZg==}
+    resolution: {integrity: sha512-kJw2wcFTpQ3NcebbKiXqwFTSLgKwt0ZTukcaxWgsYRVdb2bAmCSEpq8qpLvEN6bqg4JUkuHNlqRguQNdIsXGZg==, tarball: https://registry.npmjs.org/@wordpress/ui/-/ui-0.16.1.tgz}
     engines: {node: '>=20.10.0', npm: '>=10.2.3'}
     peerDependencies:
       '@types/react': 18.3.x
@@ -11347,7 +11000,7 @@ packages:
         optional: true

   '@wordpress/ui@0.17.0':
-    resolution: {integrity: sha512-+mMnJmkvFjTk7veIioU/idaPfb6HJCcBV408v1gKsbpLa+dxG+rLdlrpzJILLlZmHUyCrJXk9EmYZi6MkFoL9A==}
+    resolution: {integrity: sha512-+mMnJmkvFjTk7veIioU/idaPfb6HJCcBV408v1gKsbpLa+dxG+rLdlrpzJILLlZmHUyCrJXk9EmYZi6MkFoL9A==, tarball: https://registry.npmjs.org/@wordpress/ui/-/ui-0.17.0.tgz}
     engines: {node: '>=20.10.0', npm: '>=10.2.3'}
     peerDependencies:
       '@types/react': 18.3.x
@@ -11358,83 +11011,71 @@ packages:
         optional: true

   '@wordpress/undo-manager@0.18.0':
-    resolution: {integrity: sha512-upbzPEToa095XG+2JXLHaolF1LfXEMFS0lNMYV37myoUS+eZ7/tl9Gx+yU2+OqWy57TMwx33NlWUX/n+ynzPRw==}
+    resolution: {integrity: sha512-upbzPEToa095XG+2JXLHaolF1LfXEMFS0lNMYV37myoUS+eZ7/tl9Gx+yU2+OqWy57TMwx33NlWUX/n+ynzPRw==, tarball: https://registry.npmjs.org/@wordpress/undo-manager/-/undo-manager-0.18.0.tgz}
     engines: {node: '>=12'}

-  '@wordpress/undo-manager@1.48.1':
-    resolution: {integrity: sha512-i/yHiUQ5S47yong7FXxIRpJgO1MbItEKfcyp1a3rRe66rw1RVPmAlJxyeKaQg9eZbCXOmmDz5cLzZNPyUDN6uA==}
-    engines: {node: '>=18.12.0', npm: '>=8.19.2'}
-
   '@wordpress/undo-manager@1.50.0':
     resolution: {integrity: sha512-599I3GPXSMpmAE2jqzHteqypI7rdt5HPDAw8GrHMkDWR1T9gK2L3gObv8I1Hs4eSDM88wgAB0Ifnqpy7zPn5rw==}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}

   '@wordpress/upload-media@0.18.5':
-    resolution: {integrity: sha512-4u+mMPicEuw7tMPIgCtgI5BWckWODjYayA7aOP0sQWdG90Vq1z7nGDlxHeeb/PkQxnZPh+3oA6V79OWV5ZS/Fg==}
+    resolution: {integrity: sha512-4u+mMPicEuw7tMPIgCtgI5BWckWODjYayA7aOP0sQWdG90Vq1z7nGDlxHeeb/PkQxnZPh+3oA6V79OWV5ZS/Fg==, tarball: https://registry.npmjs.org/@wordpress/upload-media/-/upload-media-0.18.5.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       react: ^18.0.0
       react-dom: ^18.0.0

   '@wordpress/upload-media@0.33.1':
-    resolution: {integrity: sha512-FjHJGZh7tjUyMbHXiPPHT8oRpM24ENwCOYG7OEoWRGP3NSU5v9Ff4TCksI25Ws420TkrNCFnHlU+xmALQAu30w==}
+    resolution: {integrity: sha512-FjHJGZh7tjUyMbHXiPPHT8oRpM24ENwCOYG7OEoWRGP3NSU5v9Ff4TCksI25Ws420TkrNCFnHlU+xmALQAu30w==, tarball: https://registry.npmjs.org/@wordpress/upload-media/-/upload-media-0.33.1.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       react: ^18.0.0
       react-dom: ^18.0.0

   '@wordpress/url@3.59.0':
-    resolution: {integrity: sha512-GxvoMjYCav0w4CiX0i0h3qflrE/9rhLIZg5aPCQjbrBdwTxYR3Exfw0IJYcmVaTKXQOUU8fOxlDxULsbLmKe9w==}
+    resolution: {integrity: sha512-GxvoMjYCav0w4CiX0i0h3qflrE/9rhLIZg5aPCQjbrBdwTxYR3Exfw0IJYcmVaTKXQOUU8fOxlDxULsbLmKe9w==, tarball: https://registry.npmjs.org/@wordpress/url/-/url-3.59.0.tgz}
     engines: {node: '>=12'}

   '@wordpress/url@4.33.1':
-    resolution: {integrity: sha512-t4MKPofYLHTIVE+NV36WBmlnzHsnZFkXsACdu/InF0u5pmyc/ZgXmq44qi6h/PmbGoUKnRQisulMIvGfEVBTeA==}
+    resolution: {integrity: sha512-t4MKPofYLHTIVE+NV36WBmlnzHsnZFkXsACdu/InF0u5pmyc/ZgXmq44qi6h/PmbGoUKnRQisulMIvGfEVBTeA==, tarball: https://registry.npmjs.org/@wordpress/url/-/url-4.33.1.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}

   '@wordpress/url@4.48.1':
-    resolution: {integrity: sha512-EiTMmEwotXY4Cu6casJ10HEe0ocsdVujkm1iZyA0vvu2qtR5IIQqlSVGxDx96cJBP6cB2b8x2ebGLWfnwow4/Q==}
+    resolution: {integrity: sha512-EiTMmEwotXY4Cu6casJ10HEe0ocsdVujkm1iZyA0vvu2qtR5IIQqlSVGxDx96cJBP6cB2b8x2ebGLWfnwow4/Q==, tarball: https://registry.npmjs.org/@wordpress/url/-/url-4.48.1.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}

   '@wordpress/viewport@5.35.0':
-    resolution: {integrity: sha512-iCIVbFcA1CzGXEVu5COoi6DRdh3m3zEMWOYKKqF1C7W/LhZnTNRsHOZbHq0tv7MOkwx0Nl7+hDJlPRM0B3fb7A==}
+    resolution: {integrity: sha512-iCIVbFcA1CzGXEVu5COoi6DRdh3m3zEMWOYKKqF1C7W/LhZnTNRsHOZbHq0tv7MOkwx0Nl7+hDJlPRM0B3fb7A==, tarball: https://registry.npmjs.org/@wordpress/viewport/-/viewport-5.35.0.tgz}
     engines: {node: '>=12'}
     peerDependencies:
       react: ^18.0.0

   '@wordpress/viewport@6.33.1':
-    resolution: {integrity: sha512-UmXx/UhJZqRYYCj+ZbG2XpObUa/UP2ydxC7hAVj3uc/xYrB8M3OOcYnQ+WQejAoyNs4sTe6VpzDZRn/rdcExMw==}
+    resolution: {integrity: sha512-UmXx/UhJZqRYYCj+ZbG2XpObUa/UP2ydxC7hAVj3uc/xYrB8M3OOcYnQ+WQejAoyNs4sTe6VpzDZRn/rdcExMw==, tarball: https://registry.npmjs.org/@wordpress/viewport/-/viewport-6.33.1.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       react: ^18.0.0

   '@wordpress/viewport@6.48.1':
-    resolution: {integrity: sha512-W/bpuh4ndoNUdH2Cfuq2N+vBWU5mSyPdG5bQOaHeK31c2YQfti/3sQTbGZ9h+wHCoUGfI1az87kimPMbqr9GqQ==}
+    resolution: {integrity: sha512-W/bpuh4ndoNUdH2Cfuq2N+vBWU5mSyPdG5bQOaHeK31c2YQfti/3sQTbGZ9h+wHCoUGfI1az87kimPMbqr9GqQ==, tarball: https://registry.npmjs.org/@wordpress/viewport/-/viewport-6.48.1.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}
     peerDependencies:
       react: ^18.0.0

   '@wordpress/views@1.11.0':
-    resolution: {integrity: sha512-6Lqw+XDOZfBBawWDCpJP3mKdxpcWSXyVfRnpHJWMsEcXm067m9MXEmZv21nRsqVGi6D6bzOeLGF5fvlD1arqag==}
+    resolution: {integrity: sha512-6Lqw+XDOZfBBawWDCpJP3mKdxpcWSXyVfRnpHJWMsEcXm067m9MXEmZv21nRsqVGi6D6bzOeLGF5fvlD1arqag==, tarball: https://registry.npmjs.org/@wordpress/views/-/views-1.11.0.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}

   '@wordpress/vips@2.1.1':
-    resolution: {integrity: sha512-3NvM0Bk4xrNhYI8Xgn9+dphE3FbJANhe9aNoU1J/Wqmqt3EpUJY5KoykFkfpHJWbdiLohSMkKIyVylGMdHpP7g==}
+    resolution: {integrity: sha512-3NvM0Bk4xrNhYI8Xgn9+dphE3FbJANhe9aNoU1J/Wqmqt3EpUJY5KoykFkfpHJWbdiLohSMkKIyVylGMdHpP7g==, tarball: https://registry.npmjs.org/@wordpress/vips/-/vips-2.1.1.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}

   '@wordpress/warning@2.58.0':
-    resolution: {integrity: sha512-9bZlORhyMY2nbWozeyC5kqJsFzEPP4DCLhGmjtbv+YWGHttUrxUZEfrKdqO+rUODA8rP5zeIly1nCQOUnkw4Lg==}
+    resolution: {integrity: sha512-9bZlORhyMY2nbWozeyC5kqJsFzEPP4DCLhGmjtbv+YWGHttUrxUZEfrKdqO+rUODA8rP5zeIly1nCQOUnkw4Lg==, tarball: https://registry.npmjs.org/@wordpress/warning/-/warning-2.58.0.tgz}
     engines: {node: '>=12'}

   '@wordpress/warning@3.33.1':
-    resolution: {integrity: sha512-ciDPM0AEu1s3xjDUwiTRxWiY0sTKTXI4R8NYO57g9+RuP4M5JnLK5/mdLVFCiWNo27tkUPFAgzHop7ssj3inew==}
-    engines: {node: '>=18.12.0', npm: '>=8.19.2'}
-
-  '@wordpress/warning@3.45.0':
-    resolution: {integrity: sha512-NQ9tAhPdwhfceVIzWra1rbumvgAFAEDTgZlWsX880zLiq1F8JTwBouwW6wfIhA3XLcY6Yj7cBBYLa8vnNiDZDw==}
-    engines: {node: '>=18.12.0', npm: '>=8.19.2'}
-
-  '@wordpress/warning@3.48.1':
-    resolution: {integrity: sha512-5YyMCOHycuHG+AjsVEUafpTqV4b4qjVv/tel5m1L8k8g8dUW5T/XKguFo1nhCqQc4HqoGBrJtKjaf6dMmg8uWg==}
+    resolution: {integrity: sha512-ciDPM0AEu1s3xjDUwiTRxWiY0sTKTXI4R8NYO57g9+RuP4M5JnLK5/mdLVFCiWNo27tkUPFAgzHop7ssj3inew==, tarball: https://registry.npmjs.org/@wordpress/warning/-/warning-3.33.1.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}

   '@wordpress/warning@3.51.0':
@@ -11452,15 +11093,15 @@ packages:
     engines: {node: '>=12'}

   '@wordpress/wordcount@4.33.1':
-    resolution: {integrity: sha512-Qg9+Ah9rEH8vOZAThF8CQS+TrWOmpKbGtRy+ZgLghc+mr2FGpyal3hwsoS3yFW6CUSf23YTWw2k2osEeTf2erQ==}
+    resolution: {integrity: sha512-Qg9+Ah9rEH8vOZAThF8CQS+TrWOmpKbGtRy+ZgLghc+mr2FGpyal3hwsoS3yFW6CUSf23YTWw2k2osEeTf2erQ==, tarball: https://registry.npmjs.org/@wordpress/wordcount/-/wordcount-4.33.1.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}

   '@wordpress/wordcount@4.48.1':
-    resolution: {integrity: sha512-/IdYqxbvAFgAf3O72lUj5ybeWMglG2dYwL8wz17koSHqH5XKlbIQrNGvz4XIvQueiewd4MvLOqIFt2TVHHU6/A==}
+    resolution: {integrity: sha512-/IdYqxbvAFgAf3O72lUj5ybeWMglG2dYwL8wz17koSHqH5XKlbIQrNGvz4XIvQueiewd4MvLOqIFt2TVHHU6/A==, tarball: https://registry.npmjs.org/@wordpress/wordcount/-/wordcount-4.48.1.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}

   '@wordpress/worker-threads@1.8.1':
-    resolution: {integrity: sha512-xrVypgVxciFPyc704/0fdQ6bf5BZrf2EXtTPQ4BSU0ylnvfSvgvTCYWdVzlI4VySq+FNfHgLHTCxKiKT23CrSQ==}
+    resolution: {integrity: sha512-xrVypgVxciFPyc704/0fdQ6bf5BZrf2EXtTPQ4BSU0ylnvfSvgvTCYWdVzlI4VySq+FNfHgLHTCxKiKT23CrSQ==, tarball: https://registry.npmjs.org/@wordpress/worker-threads/-/worker-threads-1.8.1.tgz}
     engines: {node: '>=18.12.0', npm: '>=8.19.2'}

   '@wp-playground/blueprints@3.1.19':
@@ -11529,10 +11170,10 @@ packages:
       xstate: ^4.29.0

   '@xtuc/ieee754@1.2.0':
-    resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==}
+    resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==, tarball: https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz}

   '@xtuc/long@4.2.2':
-    resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==}
+    resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==, tarball: https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz}

   '@yarnpkg/esbuild-plugin-pnp@3.0.0-rc.15':
     resolution: {integrity: sha512-kYzDJO5CA9sy+on/s2aIW0411AklfCi8Ck/4QDivOqsMKpStZA2SsR+X27VTggGwpStWaLrjJcDcdDMowtG8MA==}
@@ -11575,7 +11216,7 @@ packages:
     resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==}

   acorn-import-attributes@1.9.5:
-    resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==}
+    resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==, tarball: https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz}
     peerDependencies:
       acorn: ^8

@@ -11593,7 +11234,7 @@ packages:
     engines: {node: '>=0.4.0'}

   acorn@6.4.2:
-    resolution: {integrity: sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==}
+    resolution: {integrity: sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==, tarball: https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz}
     engines: {node: '>=0.4.0'}
     hasBin: true

@@ -12046,7 +11687,7 @@ packages:
     hasBin: true

   atomically@2.1.1:
-    resolution: {integrity: sha512-P4w9o2dqARji6P7MHprklbfiArZAWvo07yW7qs3pdljb3BWr12FIB7W+p0zJiuiVsUpRO0iZn1kFFcpPegg0tQ==}
+    resolution: {integrity: sha512-P4w9o2dqARji6P7MHprklbfiArZAWvo07yW7qs3pdljb3BWr12FIB7W+p0zJiuiVsUpRO0iZn1kFFcpPegg0tQ==, tarball: https://registry.npmjs.org/atomically/-/atomically-2.1.1.tgz}

   autoprefixer@10.4.14:
     resolution: {integrity: sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==}
@@ -12164,27 +11805,27 @@ packages:
     engines: {node: '>=10', npm: '>=6'}

   babel-plugin-polyfill-corejs2@0.4.17:
-    resolution: {integrity: sha512-aTyf30K/rqAsNwN76zYrdtx8obu0E4KoUME29B1xj+B3WxgvWkp943vYQ+z8Mv3lw9xHXMHpvSPOBxzAkIa94w==}
+    resolution: {integrity: sha512-aTyf30K/rqAsNwN76zYrdtx8obu0E4KoUME29B1xj+B3WxgvWkp943vYQ+z8Mv3lw9xHXMHpvSPOBxzAkIa94w==, tarball: https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.17.tgz}
     peerDependencies:
       '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0

   babel-plugin-polyfill-corejs3@0.1.7:
-    resolution: {integrity: sha512-u+gbS9bbPhZWEeyy1oR/YaaSpod/KDT07arZHb80aTpl8H5ZBq+uN1nN9/xtX7jQyfLdPfoqI4Rue/MQSWJquw==}
+    resolution: {integrity: sha512-u+gbS9bbPhZWEeyy1oR/YaaSpod/KDT07arZHb80aTpl8H5ZBq+uN1nN9/xtX7jQyfLdPfoqI4Rue/MQSWJquw==, tarball: https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.1.7.tgz}
     peerDependencies:
       '@babel/core': ^7.0.0-0

   babel-plugin-polyfill-corejs3@0.10.6:
-    resolution: {integrity: sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==}
+    resolution: {integrity: sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==, tarball: https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz}
     peerDependencies:
       '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0

   babel-plugin-polyfill-corejs3@0.13.0:
-    resolution: {integrity: sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==}
+    resolution: {integrity: sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==, tarball: https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz}
     peerDependencies:
       '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0

   babel-plugin-polyfill-regenerator@0.6.8:
-    resolution: {integrity: sha512-M762rNHfSF1EV3SLtnCJXFoQbbIIz0OyRwnCmV0KPC7qosSfCO0QLTSuJX3ayAebubhE6oYBAYPrBA5ljowaZg==}
+    resolution: {integrity: sha512-M762rNHfSF1EV3SLtnCJXFoQbbIIz0OyRwnCmV0KPC7qosSfCO0QLTSuJX3ayAebubhE6oYBAYPrBA5ljowaZg==, tarball: https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.8.tgz}
     peerDependencies:
       '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0

@@ -12679,7 +12320,7 @@ packages:
     resolution: {integrity: sha512-mak+5ooX5cDFBBIhsR+NqxoQ9+JQRqupr49G2PiUYXKn8OntoI9osjhECaScrzqq1l4phuRmK1VlMdxHdpwZvg==}

   chokidar@2.1.8:
-    resolution: {integrity: sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==}
+    resolution: {integrity: sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==, tarball: https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz}

   chokidar@3.6.0:
     resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
@@ -12693,12 +12334,12 @@ packages:
     engines: {node: '>=10'}

   chrome-launcher@1.2.1:
-    resolution: {integrity: sha512-qmFR5PLMzHyuNJHwOloHPAHhbaNglkfeV/xDtt5b7xiFFyU1I+AZZX0PYseMuhenJSSirgxELYIbswcoc+5H4A==}
+    resolution: {integrity: sha512-qmFR5PLMzHyuNJHwOloHPAHhbaNglkfeV/xDtt5b7xiFFyU1I+AZZX0PYseMuhenJSSirgxELYIbswcoc+5H4A==, tarball: https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-1.2.1.tgz}
     engines: {node: '>=12.13.0'}
     hasBin: true

   chrome-trace-event@1.0.4:
-    resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==}
+    resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==, tarball: https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz}
     engines: {node: '>=6.0'}

   chromium-bidi@0.11.0:
@@ -12707,7 +12348,7 @@ packages:
       devtools-protocol: '*'

   chromium-bidi@14.0.0:
-    resolution: {integrity: sha512-9gYlLtS6tStdRWzrtXaTMnqcM4dudNegMXJxkR0I/CXObHalYeYcAMPrL19eroNZHtJ8DQmu1E+ZNOYu/IXMXw==}
+    resolution: {integrity: sha512-9gYlLtS6tStdRWzrtXaTMnqcM4dudNegMXJxkR0I/CXObHalYeYcAMPrL19eroNZHtJ8DQmu1E+ZNOYu/IXMXw==, tarball: https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-14.0.0.tgz}
     peerDependencies:
       devtools-protocol: '*'

@@ -12809,10 +12450,10 @@ packages:
     engines: {node: '>= 12'}

   client-zip@2.5.0:
-    resolution: {integrity: sha512-ydG4nDZesbFurnNq0VVCp/yyomIBh+X/1fZPI/P24zbnG4dtC4tQAfI5uQsomigsUMeiRO2wiTPizLWQh+IAyQ==}
+    resolution: {integrity: sha512-ydG4nDZesbFurnNq0VVCp/yyomIBh+X/1fZPI/P24zbnG4dtC4tQAfI5uQsomigsUMeiRO2wiTPizLWQh+IAyQ==, tarball: https://registry.npmjs.org/client-zip/-/client-zip-2.5.0.tgz}

   clipboard@2.0.11:
-    resolution: {integrity: sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw==}
+    resolution: {integrity: sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw==, tarball: https://registry.npmjs.org/clipboard/-/clipboard-2.0.11.tgz}

   cliui@3.2.0:
     resolution: {integrity: sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==}
@@ -12868,13 +12509,13 @@ packages:
     engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}

   cmdk@0.2.1:
-    resolution: {integrity: sha512-U6//9lQ6JvT47+6OF6Gi8BvkxYQ8SCRRSKIJkthIMsFsLZRG0cKvTtuTaefyIKMQb8rvvXy0wGdpTNq/jPtm+g==}
+    resolution: {integrity: sha512-U6//9lQ6JvT47+6OF6Gi8BvkxYQ8SCRRSKIJkthIMsFsLZRG0cKvTtuTaefyIKMQb8rvvXy0wGdpTNq/jPtm+g==, tarball: https://registry.npmjs.org/cmdk/-/cmdk-0.2.1.tgz}
     peerDependencies:
       react: ^18.0.0
       react-dom: ^18.0.0

   cmdk@1.1.1:
-    resolution: {integrity: sha512-Vsv7kFaXm+ptHDMZ7izaRsP70GgrW9NBNGswt9OZaVBLlE0SNpDq8eu/VGXyF9r7M0azK3Wy7OlYXsuyYLFzHg==}
+    resolution: {integrity: sha512-Vsv7kFaXm+ptHDMZ7izaRsP70GgrW9NBNGswt9OZaVBLlE0SNpDq8eu/VGXyF9r7M0azK3Wy7OlYXsuyYLFzHg==, tarball: https://registry.npmjs.org/cmdk/-/cmdk-1.1.1.tgz}
     peerDependencies:
       react: ^18 || ^19 || ^19.0.0-rc
       react-dom: ^18 || ^19 || ^19.0.0-rc
@@ -12933,7 +12574,7 @@ packages:
     resolution: {integrity: sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==, tarball: https://registry.npmjs.org/colorjs.io/-/colorjs.io-0.5.2.tgz}

   colorjs.io@0.6.1:
-    resolution: {integrity: sha512-8lyR2wHzuIykCpqHKgluGsqQi5iDm3/a2IgP2GBZrasn2sBRkE4NOGsglZxWLs/jZQoNkmA/KM/8NV16rLUdBg==}
+    resolution: {integrity: sha512-8lyR2wHzuIykCpqHKgluGsqQi5iDm3/a2IgP2GBZrasn2sBRkE4NOGsglZxWLs/jZQoNkmA/KM/8NV16rLUdBg==, tarball: https://registry.npmjs.org/colorjs.io/-/colorjs.io-0.6.1.tgz}

   colors@1.0.3:
     resolution: {integrity: sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==}
@@ -12951,7 +12592,7 @@ packages:
     engines: {node: '>= 0.8'}

   comctx@1.6.1:
-    resolution: {integrity: sha512-ZMRGAYASYRdVfEoB7oxH8Nqu5Ay8I+YvAsQni+td0pYV9eww/PrtSFVyvc2JkNQyHXGDknCB4wJfxFYP6fuqZg==}
+    resolution: {integrity: sha512-ZMRGAYASYRdVfEoB7oxH8Nqu5Ay8I+YvAsQni+td0pYV9eww/PrtSFVyvc2JkNQyHXGDknCB4wJfxFYP6fuqZg==, tarball: https://registry.npmjs.org/comctx/-/comctx-1.6.1.tgz}

   comma-separated-tokens@1.0.8:
     resolution: {integrity: sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==}
@@ -12961,7 +12602,7 @@ packages:
     engines: {node: '>=14'}

   commander@12.1.0:
-    resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==}
+    resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==, tarball: https://registry.npmjs.org/commander/-/commander-12.1.0.tgz}
     engines: {node: '>=18'}

   commander@14.0.3:
@@ -12995,11 +12636,11 @@ packages:
     engines: {node: '>= 10'}

   commander@8.3.0:
-    resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==}
+    resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==, tarball: https://registry.npmjs.org/commander/-/commander-8.3.0.tgz}
     engines: {node: '>= 12'}

   commander@9.0.0:
-    resolution: {integrity: sha512-JJfP2saEKbQqvW+FI93OYUB4ByV5cizMpFMiiJI8xDbBvQvSkIk0VvQdn1CZ8mqAO8Loq2h0gYTYtDFUZUeERw==}
+    resolution: {integrity: sha512-JJfP2saEKbQqvW+FI93OYUB4ByV5cizMpFMiiJI8xDbBvQvSkIk0VvQdn1CZ8mqAO8Loq2h0gYTYtDFUZUeERw==, tarball: https://registry.npmjs.org/commander/-/commander-9.0.0.tgz}
     engines: {node: ^12.20.0 || >=14}

   commander@9.4.0:
@@ -13077,7 +12718,7 @@ packages:
     engines: {node: '>=4'}

   configstore@7.1.0:
-    resolution: {integrity: sha512-N4oog6YJWbR9kGyXvS7jEykLDXIE2C0ILYqNBZBp9iwiJpoCBWYsuAdW6PPFn6w06jjnC+3JstVvWHO4cZqvRg==}
+    resolution: {integrity: sha512-N4oog6YJWbR9kGyXvS7jEykLDXIE2C0ILYqNBZBp9iwiJpoCBWYsuAdW6PPFn6w06jjnC+3JstVvWHO4cZqvRg==, tarball: https://registry.npmjs.org/configstore/-/configstore-7.1.0.tgz}
     engines: {node: '>=18'}

   connect-history-api-fallback@2.0.0:
@@ -13118,10 +12759,10 @@ packages:
     resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==}

   convert-source-map@2.0.0:
-    resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
+    resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==, tarball: https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz}

   cookie-es@3.1.1:
-    resolution: {integrity: sha512-UaXxwISYJPTr9hwQxMFYZ7kNhSXboMXP+Z3TRX6f1/NyaGPfuNUZOWP1pUEb75B2HjfklIYLVRfWiFZJyC6Npg==}
+    resolution: {integrity: sha512-UaXxwISYJPTr9hwQxMFYZ7kNhSXboMXP+Z3TRX6f1/NyaGPfuNUZOWP1pUEb75B2HjfklIYLVRfWiFZJyC6Npg==, tarball: https://registry.npmjs.org/cookie-es/-/cookie-es-3.1.1.tgz}

   cookie-signature@1.0.7:
     resolution: {integrity: sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==}
@@ -13165,15 +12806,11 @@ packages:
       webpack: ^5.1.0

   core-js-compat@3.49.0:
-    resolution: {integrity: sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA==}
+    resolution: {integrity: sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA==, tarball: https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.49.0.tgz}

   core-js-pure@3.49.0:
     resolution: {integrity: sha512-XM4RFka59xATyJv/cS3O3Kml72hQXUeGRuuTmMYFxwzc9/7C8OYTaIR/Ji+Yt8DXzsFLNhat15cE/JP15HrCgw==}

-  core-js@2.6.12:
-    resolution: {integrity: sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==}
-    deprecated: core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.
-
   core-js@3.25.0:
     resolution: {integrity: sha512-CVU1xvJEfJGhyCpBrzzzU1kjCfgsGUxhEvwUV2e/cOedYWHdmluamx+knDnmhqALddMG16fZvIqvs9aijsHHaA==}

@@ -13278,7 +12915,7 @@ packages:
     engines: {node: '>=8'}

   csp_evaluator@1.1.5:
-    resolution: {integrity: sha512-EL/iN9etCTzw/fBnp0/uj0f5BOOGvZut2mzsiiBZ/FdT6gFQCKRO/tmcKOxn5drWZ2Ndm/xBb1SI4zwWbGtmIw==}
+    resolution: {integrity: sha512-EL/iN9etCTzw/fBnp0/uj0f5BOOGvZut2mzsiiBZ/FdT6gFQCKRO/tmcKOxn5drWZ2Ndm/xBb1SI4zwWbGtmIw==, tarball: https://registry.npmjs.org/csp_evaluator/-/csp_evaluator-1.1.5.tgz}

   css-color-function@1.3.3:
     resolution: {integrity: sha512-YD/WhiRZIYgadwFJ48X5QmlOQ/w8Me4yQI6/eSUoiE8spIFp+S/rGpsAH48iyq/0ZWkCDWqVQKUlQmUzn7BQ9w==}
@@ -13696,7 +13333,7 @@ packages:
     engines: {node: '>=0.4.0'}

   delegate@3.2.0:
-    resolution: {integrity: sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==}
+    resolution: {integrity: sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==, tarball: https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz}

   delegates@1.0.0:
     resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==}
@@ -13757,10 +13394,10 @@ packages:
     resolution: {integrity: sha512-XxtPuC3PGakY6PD7dG66/o8KwJ/LkH2/EKe19Dcw58w53dv4/vSQEkn/SzuyhHE2q4zPgCkxQBxus3VV4ql+Pg==}

   devtools-protocol@0.0.1507524:
-    resolution: {integrity: sha512-OjaNE7qpk6GRTXtqQjAE5bGx6+c4F1zZH0YXtpZQLM92HNXx4zMAaqlKhP4T52DosG6hDW8gPMNhGOF8xbwk/w==}
+    resolution: {integrity: sha512-OjaNE7qpk6GRTXtqQjAE5bGx6+c4F1zZH0YXtpZQLM92HNXx4zMAaqlKhP4T52DosG6hDW8gPMNhGOF8xbwk/w==, tarball: https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1507524.tgz}

   devtools-protocol@0.0.1581282:
-    resolution: {integrity: sha512-nv7iKtNZQshSW2hKzYNr46nM/Cfh5SEvE2oV0/SEGgc9XupIY5ggf84Cz8eJIkBce7S3bmTAauFD6aysMpnqsQ==}
+    resolution: {integrity: sha512-nv7iKtNZQshSW2hKzYNr46nM/Cfh5SEvE2oV0/SEGgc9XupIY5ggf84Cz8eJIkBce7S3bmTAauFD6aysMpnqsQ==, tarball: https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1581282.tgz}

   dezalgo@1.0.4:
     resolution: {integrity: sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==}
@@ -13792,7 +13429,7 @@ packages:
     engines: {node: '>=0.3.1'}

   diff@8.0.4:
-    resolution: {integrity: sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==}
+    resolution: {integrity: sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==, tarball: https://registry.npmjs.org/diff/-/diff-8.0.4.tgz}
     engines: {node: '>=0.3.1'}

   diffie-hellman@5.0.3:
@@ -13897,7 +13534,7 @@ packages:
     engines: {node: '>=4'}

   dot-prop@9.0.0:
-    resolution: {integrity: sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==}
+    resolution: {integrity: sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==, tarball: https://registry.npmjs.org/dot-prop/-/dot-prop-9.0.0.tgz}
     engines: {node: '>=18'}

   dotenv-expand@10.0.0:
@@ -14015,7 +13652,7 @@ packages:
     engines: {node: '>= 0.8'}

   encoding@0.1.13:
-    resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==}
+    resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==, tarball: https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz}

   end-of-stream@1.4.5:
     resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==}
@@ -14028,7 +13665,7 @@ packages:
     engines: {node: '>=0.6'}

   enhanced-resolve@4.5.0:
-    resolution: {integrity: sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==}
+    resolution: {integrity: sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==, tarball: https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz}
     engines: {node: '>=6.9.0'}

   enhanced-resolve@5.20.1:
@@ -14346,11 +13983,11 @@ packages:
     engines: {node: '>=4.0'}

   eslint-scope@4.0.3:
-    resolution: {integrity: sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==}
+    resolution: {integrity: sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==, tarball: https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz}
     engines: {node: '>=4.0.0'}

   eslint-scope@5.1.1:
-    resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==}
+    resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==, tarball: https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz}
     engines: {node: '>=8.0.0'}

   eslint-scope@9.1.2:
@@ -14410,7 +14047,7 @@ packages:
     engines: {node: '>=4.0'}

   estraverse@4.3.0:
-    resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==}
+    resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==, tarball: https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz}
     engines: {node: '>=4.0'}

   estraverse@5.3.0:
@@ -14454,7 +14091,7 @@ packages:
     engines: {node: '>=0.4.x'}

   events@3.3.0:
-    resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
+    resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==, tarball: https://registry.npmjs.org/events/-/events-3.3.0.tgz}
     engines: {node: '>=0.8.x'}

   evp_bytestokey@1.0.3:
@@ -14546,7 +14183,7 @@ packages:
     engines: {'0': node >=0.6.0}

   fast-average-color@9.5.2:
-    resolution: {integrity: sha512-FbaU8iPTPljP7tmnVhXbCyASNw/zxnmaNDf88gn5pTXlNvejl9w4FapeWMh6UNDwIjhJJU28EPfQWwW032YgPA==}
+    resolution: {integrity: sha512-FbaU8iPTPljP7tmnVhXbCyASNw/zxnmaNDf88gn5pTXlNvejl9w4FapeWMh6UNDwIjhJJU28EPfQWwW032YgPA==, tarball: https://registry.npmjs.org/fast-average-color/-/fast-average-color-9.5.2.tgz}
     engines: {node: '>= 12'}

   fast-deep-equal@1.1.0:
@@ -14892,10 +14529,6 @@ packages:
     resolution: {integrity: sha512-jqdObeR2rxZZbPSGL+3VckHMYtu+f9//KXBsVny6JSX/pa38Fy+bGjuG8eW/H6USNQWhLi8Num++cU2yOCNz4A==}
     engines: {node: '>= 0.12'}

-  form-data@4.0.5:
-    resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==}
-    engines: {node: '>= 6'}
-
   form-data@4.0.6:
     resolution: {integrity: sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==}
     engines: {node: '>= 6'}
@@ -14913,7 +14546,7 @@ packages:
     resolution: {integrity: sha512-Oz5Hwvwak/DCaXVVUtPn4oLMLLy1CdclLKO1LFgU7XzDpVMUU5UjlSLpGMocyQNNk8F6IJW9M/YdooSn2MRI+Q==}

   forwarded-parse@2.1.2:
-    resolution: {integrity: sha512-alTFZZQDKMporBH77856pXgzhEzaUVmLCDk+egLgIgHst3Tpndzz8MnKe+GzRJRfvVdn69HhpW7cmXzvtLvJAw==}
+    resolution: {integrity: sha512-alTFZZQDKMporBH77856pXgzhEzaUVmLCDk+egLgIgHst3Tpndzz8MnKe+GzRJRfvVdn69HhpW7cmXzvtLvJAw==, tarball: https://registry.npmjs.org/forwarded-parse/-/forwarded-parse-2.1.2.tgz}

   forwarded@0.2.0:
     resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==}
@@ -14930,7 +14563,7 @@ packages:
     engines: {node: '>=0.10.0'}

   framer-motion@10.18.0:
-    resolution: {integrity: sha512-oGlDh1Q1XqYPksuTD/usb0I70hq95OUzmL9+6Zd+Hs4XV0oaISBa/UUMSjYiq6m8EUF32132mOJ8xVZS+I0S6w==}
+    resolution: {integrity: sha512-oGlDh1Q1XqYPksuTD/usb0I70hq95OUzmL9+6Zd+Hs4XV0oaISBa/UUMSjYiq6m8EUF32132mOJ8xVZS+I0S6w==, tarball: https://registry.npmjs.org/framer-motion/-/framer-motion-10.18.0.tgz}
     peerDependencies:
       react: ^18.0.0
       react-dom: ^18.0.0
@@ -15003,7 +14636,7 @@ packages:
     resolution: {integrity: sha512-QMUezzXWII9EV5aTFXW1UBVUO77wYPpjqIF8/AviUCThNeSYZykpoTixUeaNNBwmCev0AMDWMAni+f8Hxb1IFw==}

   fs-readdir-recursive@1.1.0:
-    resolution: {integrity: sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==}
+    resolution: {integrity: sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==, tarball: https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz}

   fs-write-stream-atomic@1.0.10:
     resolution: {integrity: sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA==}
@@ -15053,7 +14686,7 @@ packages:
     engines: {node: '>= 0.4'}

   gensync@1.0.0-beta.2:
-    resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
+    resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==, tarball: https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz}
     engines: {node: '>=6.9.0'}

   get-browser-rtc@1.1.0:
@@ -15137,7 +14770,7 @@ packages:
     resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==}

   gettext-parser@1.4.0:
-    resolution: {integrity: sha512-sedZYLHlHeBop/gZ1jdg59hlUEcpcZJofLq2JFwJT1zTqAU3l2wFv6IsuwFHGqbiT9DWzMUW4/em2+hspnmMMA==}
+    resolution: {integrity: sha512-sedZYLHlHeBop/gZ1jdg59hlUEcpcZJofLq2JFwJT1zTqAU3l2wFv6IsuwFHGqbiT9DWzMUW4/em2+hspnmMMA==, tarball: https://registry.npmjs.org/gettext-parser/-/gettext-parser-1.4.0.tgz}

   gh-pages@5.0.0:
     resolution: {integrity: sha512-Nqp1SjkPIB94Xw/3yYNTUL+G2dxlhjvv1zeN/4kMC1jfViTEqhtVz/Ba1zSXHuvXCN9ADNS1dN4r5/J/nZWEQQ==}
@@ -15173,10 +14806,10 @@ packages:
       glob: '*'

   glob-to-regexp@0.3.0:
-    resolution: {integrity: sha512-Iozmtbqv0noj0uDDqoL0zNq0VBEfK2YFoMAZoxJe4cwphvLR+JskfF30QhXHOR4m3KrE6NLRYw+U9MRXvifyig==}
+    resolution: {integrity: sha512-Iozmtbqv0noj0uDDqoL0zNq0VBEfK2YFoMAZoxJe4cwphvLR+JskfF30QhXHOR4m3KrE6NLRYw+U9MRXvifyig==, tarball: https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz}

   glob-to-regexp@0.4.1:
-    resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==}
+    resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==, tarball: https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz}

   glob@10.5.0:
     resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==}
@@ -15192,7 +14825,7 @@ packages:
     deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me

   glob@8.1.0:
-    resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==}
+    resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==, tarball: https://registry.npmjs.org/glob/-/glob-8.1.0.tgz}
     engines: {node: '>=12'}
     deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me

@@ -15267,7 +14900,7 @@ packages:
     resolution: {integrity: sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==}

   good-listener@1.2.2:
-    resolution: {integrity: sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==}
+    resolution: {integrity: sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==, tarball: https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz}

   gopd@1.2.0:
     resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
@@ -15289,11 +14922,11 @@ packages:
     engines: {node: '>=0.10.0'}

   gradient-parser@1.0.2:
-    resolution: {integrity: sha512-gR6nY33xC9yJoH4wGLQtZQMXDi6RI3H37ERu7kQCVUzlXjNedpZM7xcA489Opwbq0BSGohtWGsWsntupmxelMg==}
+    resolution: {integrity: sha512-gR6nY33xC9yJoH4wGLQtZQMXDi6RI3H37ERu7kQCVUzlXjNedpZM7xcA489Opwbq0BSGohtWGsWsntupmxelMg==, tarball: https://registry.npmjs.org/gradient-parser/-/gradient-parser-1.0.2.tgz}
     engines: {node: '>=0.10.0'}

   gradient-parser@1.1.1:
-    resolution: {integrity: sha512-Hu0YfNU+38EsTmnUfLXUKFMXq9yz7htGYpF4x+dlbBhUCvIvzLt0yVLT/gJRmvLKFJdqNFrz4eKkIUjIXSr7Tw==}
+    resolution: {integrity: sha512-Hu0YfNU+38EsTmnUfLXUKFMXq9yz7htGYpF4x+dlbBhUCvIvzLt0yVLT/gJRmvLKFJdqNFrz4eKkIUjIXSr7Tw==, tarball: https://registry.npmjs.org/gradient-parser/-/gradient-parser-1.1.1.tgz}
     engines: {node: '>=0.10.0'}

   grapheme-splitter@1.0.4:
@@ -15701,7 +15334,7 @@ packages:
     engines: {node: '>= 0.8'}

   http-link-header@1.1.3:
-    resolution: {integrity: sha512-3cZ0SRL8fb9MUlU3mKM61FcQvPfXx2dBrZW3Vbg5CXa8jFlK8OaEpePenLe1oEXQduhz8b0QjsqfS59QP4AJDQ==}
+    resolution: {integrity: sha512-3cZ0SRL8fb9MUlU3mKM61FcQvPfXx2dBrZW3Vbg5CXa8jFlK8OaEpePenLe1oEXQduhz8b0QjsqfS59QP4AJDQ==, tarball: https://registry.npmjs.org/http-link-header/-/http-link-header-1.1.3.tgz}
     engines: {node: '>=6.0.0'}

   http-parser-js@0.5.10:
@@ -15843,7 +15476,7 @@ packages:
     engines: {node: '>= 4'}

   image-ssim@0.2.0:
-    resolution: {integrity: sha512-W7+sO6/yhxy83L0G7xR8YAc5Z5QFtYEXXRV6EaE8tuYBZJnA3gVgp3q7X7muhLZVodeb9UfvjSbwt9VJwjIYAg==}
+    resolution: {integrity: sha512-W7+sO6/yhxy83L0G7xR8YAc5Z5QFtYEXXRV6EaE8tuYBZJnA3gVgp3q7X7muhLZVodeb9UfvjSbwt9VJwjIYAg==, tarball: https://registry.npmjs.org/image-ssim/-/image-ssim-0.2.0.tgz}

   immutable@4.3.8:
     resolution: {integrity: sha512-d/Ld9aLbKpNwyl0KiM2CT1WYvkitQ1TSvmRtkcV8FKStiDoA7Slzgjmb/1G2yhKM1p0XeNOieaTbFZmU1d3Xuw==}
@@ -15856,7 +15489,7 @@ packages:
     engines: {node: '>=6'}

   import-in-the-middle@1.15.0:
-    resolution: {integrity: sha512-bpQy+CrsRmYmoPMAE/0G33iwRqwW4ouqdRg8jgbH3aKuCtOc8lxgmYXg2dMM92CRiGP660EtBcymH/eVUpCSaA==}
+    resolution: {integrity: sha512-bpQy+CrsRmYmoPMAE/0G33iwRqwW4ouqdRg8jgbH3aKuCtOc8lxgmYXg2dMM92CRiGP660EtBcymH/eVUpCSaA==, tarball: https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.15.0.tgz}

   import-lazy@2.1.0:
     resolution: {integrity: sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==}
@@ -15944,7 +15577,7 @@ packages:
     engines: {node: '>=10.13.0'}

   intl-messageformat@10.7.18:
-    resolution: {integrity: sha512-m3Ofv/X/tV8Y3tHXLohcuVuhWKo7BBq62cqY15etqmLxg2DZ34AGGgQDeR+SCta2+zICb1NX83af0GJmbQ1++g==}
+    resolution: {integrity: sha512-m3Ofv/X/tV8Y3tHXLohcuVuhWKo7BBq62cqY15etqmLxg2DZ34AGGgQDeR+SCta2+zICb1NX83af0GJmbQ1++g==, tarball: https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-10.7.18.tgz}

   invert-kv@1.0.0:
     resolution: {integrity: sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==}
@@ -16361,7 +15994,7 @@ packages:
     engines: {node: '>= 18.0.0'}

   isbot@5.1.38:
-    resolution: {integrity: sha512-Cus2702JamTNMEY4zTP+TShgq/3qzjvGcBC4XMOV45BLaxD4iUFENkqu7ZhFeSzwNsCSZLjnGlihDQznnpnEEA==}
+    resolution: {integrity: sha512-Cus2702JamTNMEY4zTP+TShgq/3qzjvGcBC4XMOV45BLaxD4iUFENkqu7ZhFeSzwNsCSZLjnGlihDQznnpnEEA==, tarball: https://registry.npmjs.org/isbot/-/isbot-5.1.38.tgz}
     engines: {node: '>=18'}

   isexe@2.0.0:
@@ -16669,7 +16302,7 @@ packages:
     engines: {node: '>= 20'}

   jpeg-js@0.4.4:
-    resolution: {integrity: sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==}
+    resolution: {integrity: sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==, tarball: https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.4.tgz}

   js-beautify@1.15.4:
     resolution: {integrity: sha512-9/KXeZUKKJwqCXUdBxFJ3vPh467OCckSBmYDwSK/EtV090K+iMJ7zx2S3HLVDIWFQdqMIsZWbnaGiba18aWhaA==}
@@ -16681,7 +16314,7 @@ packages:
     engines: {node: '>=14'}

   js-library-detector@6.7.0:
-    resolution: {integrity: sha512-c80Qupofp43y4cJ7+8TTDN/AsDwLi5oOm/plBrWI+iQt485vKXCco+yVmOwEgdo9VOdsYTuV0UlTeetVPTriXA==}
+    resolution: {integrity: sha512-c80Qupofp43y4cJ7+8TTDN/AsDwLi5oOm/plBrWI+iQt485vKXCco+yVmOwEgdo9VOdsYTuV0UlTeetVPTriXA==, tarball: https://registry.npmjs.org/js-library-detector/-/js-library-detector-6.7.0.tgz}
     engines: {node: '>=12'}

   js-string-escape@1.0.1:
@@ -16748,7 +16381,7 @@ packages:
         optional: true

   jsesc@3.1.0:
-    resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
+    resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==, tarball: https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz}
     engines: {node: '>=6'}
     hasBin: true

@@ -16759,10 +16392,10 @@ packages:
     resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==}

   json-parse-even-better-errors@2.3.1:
-    resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
+    resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==, tarball: https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz}

   json-parse-even-better-errors@3.0.2:
-    resolution: {integrity: sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==}
+    resolution: {integrity: sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==, tarball: https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz}
     engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}

   json-refs@3.0.15:
@@ -16804,7 +16437,7 @@ packages:
     resolution: {integrity: sha512-fQMYwvPsQt8hxRnCGyg1r2JVi6yL8Um0DIIawiKiMK9yhAAkcRNj5UsBWoaFvFzPpcWbgw9L6wzj+UMYA702Mw==}

   json5@1.0.2:
-    resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+    resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==, tarball: https://registry.npmjs.org/json5/-/json5-1.0.2.tgz}
     hasBin: true

   json5@2.2.3:
@@ -16958,13 +16591,13 @@ packages:
     engines: {node: '>=10'}

   lighthouse-logger@2.0.2:
-    resolution: {integrity: sha512-vWl2+u5jgOQuZR55Z1WM0XDdrJT6mzMP8zHUct7xTlWhuQs+eV0g+QL0RQdFjT54zVmbhLCP8vIVpy1wGn/gCg==}
+    resolution: {integrity: sha512-vWl2+u5jgOQuZR55Z1WM0XDdrJT6mzMP8zHUct7xTlWhuQs+eV0g+QL0RQdFjT54zVmbhLCP8vIVpy1wGn/gCg==, tarball: https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-2.0.2.tgz}

   lighthouse-stack-packs@1.12.2:
-    resolution: {integrity: sha512-Ug8feS/A+92TMTCK6yHYLwaFMuelK/hAKRMdldYkMNwv+d9PtWxjXEg6rwKtsUXTADajhdrhXyuNCJ5/sfmPFw==}
+    resolution: {integrity: sha512-Ug8feS/A+92TMTCK6yHYLwaFMuelK/hAKRMdldYkMNwv+d9PtWxjXEg6rwKtsUXTADajhdrhXyuNCJ5/sfmPFw==, tarball: https://registry.npmjs.org/lighthouse-stack-packs/-/lighthouse-stack-packs-1.12.2.tgz}

   lighthouse@12.8.2:
-    resolution: {integrity: sha512-+5SKYzVaTFj22MgoYDPNrP9tlD2/Ay7j3SxPSFD9FpPyVxGr4UtOQGKyrdZ7wCmcnBaFk0mCkPfARU3CsE0nvA==}
+    resolution: {integrity: sha512-+5SKYzVaTFj22MgoYDPNrP9tlD2/Ay7j3SxPSFD9FpPyVxGr4UtOQGKyrdZ7wCmcnBaFk0mCkPfARU3CsE0nvA==, tarball: https://registry.npmjs.org/lighthouse/-/lighthouse-12.8.2.tgz}
     engines: {node: '>=18.16'}
     hasBin: true

@@ -17038,11 +16671,11 @@ packages:
     engines: {node: '>=6'}

   loader-runner@2.4.0:
-    resolution: {integrity: sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==}
+    resolution: {integrity: sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==, tarball: https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz}
     engines: {node: '>=4.3.0 <5.0.0 || >=5.10'}

   loader-runner@4.3.1:
-    resolution: {integrity: sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==}
+    resolution: {integrity: sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==, tarball: https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.1.tgz}
     engines: {node: '>=6.11.5'}

   loader-utils@1.4.2:
@@ -17074,7 +16707,7 @@ packages:
     engines: {node: '>= 22', yarn: '>= 1'}

   lodash-es@4.18.1:
-    resolution: {integrity: sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==}
+    resolution: {integrity: sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==, tarball: https://registry.npmjs.org/lodash-es/-/lodash-es-4.18.1.tgz}

   lodash._basecallback@3.3.1:
     resolution: {integrity: sha512-LQffghuO63ufDY33KKO1ezGKbcFZK3ngYV7JpxaUomoM5acf0YeXU3Pm8csVE0girVs50TXzfNibl69Co3ggJA==}
@@ -17202,7 +16835,7 @@ packages:
     engines: {node: '>= 0.6.0'}

   lookup-closest-locale@6.2.0:
-    resolution: {integrity: sha512-/c2kL+Vnp1jnV6K6RpDTHK3dgg0Tu2VVp+elEiJpjfS1UyY7AjOYHohRug6wT0OpoX2qFgNORndE9RqesfVxWQ==}
+    resolution: {integrity: sha512-/c2kL+Vnp1jnV6K6RpDTHK3dgg0Tu2VVp+elEiJpjfS1UyY7AjOYHohRug6wT0OpoX2qFgNORndE9RqesfVxWQ==, tarball: https://registry.npmjs.org/lookup-closest-locale/-/lookup-closest-locale-6.2.0.tgz}

   loose-envify@1.4.0:
     resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
@@ -17239,10 +16872,10 @@ packages:
     resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==, tarball: https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz}

   lru-cache@5.1.1:
-    resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
+    resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==, tarball: https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz}

   lru-cache@6.0.0:
-    resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
+    resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==, tarball: https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz}
     engines: {node: '>=10'}

   lru-cache@7.18.3:
@@ -17265,11 +16898,11 @@ packages:
     resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}

   make-dir@1.3.0:
-    resolution: {integrity: sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==}
+    resolution: {integrity: sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==, tarball: https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz}
     engines: {node: '>=4'}

   make-dir@2.1.0:
-    resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==}
+    resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==, tarball: https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz}
     engines: {node: '>=6'}

   make-dir@3.1.0:
@@ -17357,7 +16990,7 @@ packages:
     engines: {node: '>=12'}

   marky@1.3.0:
-    resolution: {integrity: sha512-ocnPZQLNpvbedwTy9kNrQEsknEfgvcLMvOtz3sFeWApDq1MXH1TqkCIx58xlpESsfwQOnuBO9beyQuNGzVvuhQ==}
+    resolution: {integrity: sha512-ocnPZQLNpvbedwTy9kNrQEsknEfgvcLMvOtz3sFeWApDq1MXH1TqkCIx58xlpESsfwQOnuBO9beyQuNGzVvuhQ==, tarball: https://registry.npmjs.org/marky/-/marky-1.3.0.tgz}

   math-intrinsics@1.1.0:
     resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
@@ -17487,7 +17120,7 @@ packages:
     engines: {node: '>= 8'}

   metaviewport-parser@0.3.0:
-    resolution: {integrity: sha512-EoYJ8xfjQ6kpe9VbVHvZTZHiOl4HL1Z18CrZ+qahvLXT7ZO4YTC2JMyt5FaUp9JJp6J4Ybb/z7IsCXZt86/QkQ==}
+    resolution: {integrity: sha512-EoYJ8xfjQ6kpe9VbVHvZTZHiOl4HL1Z18CrZ+qahvLXT7ZO4YTC2JMyt5FaUp9JJp6J4Ybb/z7IsCXZt86/QkQ==, tarball: https://registry.npmjs.org/metaviewport-parser/-/metaviewport-parser-0.3.0.tgz}

   methods@1.1.2:
     resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==}
@@ -17531,7 +17164,7 @@ packages:
     hasBin: true

   mime@3.0.0:
-    resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==}
+    resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==, tarball: https://registry.npmjs.org/mime/-/mime-3.0.0.tgz}
     engines: {node: '>=10.0.0'}
     hasBin: true

@@ -17687,7 +17320,7 @@ packages:
     resolution: {integrity: sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==}

   module-details-from-path@1.0.4:
-    resolution: {integrity: sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==}
+    resolution: {integrity: sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==, tarball: https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.4.tgz}

   moment-timezone@0.5.48:
     resolution: {integrity: sha512-f22b8LV1gbTO2ms2j2z13MuPogNoh5UzxL3nzNAYKGraILnbGc9NEE6dyiiiLv46DGRb8A4kg8UKWLjPthxBHw==}
@@ -17746,13 +17379,8 @@ packages:
   nan@2.26.2:
     resolution: {integrity: sha512-0tTvBTYkt3tdGw22nrAy50x7gpbGCCFH3AFcyS5WiUu7Eu4vWlri1woE6qHBSfy11vksDqkiwjOnlR7WV8G1Hw==}

-  nanoid@3.3.11:
-    resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
-    engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
-    hasBin: true
-
   nanoid@3.3.18:
-    resolution: {integrity: sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==}
+    resolution: {integrity: sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==, tarball: https://registry.npmjs.org/nanoid/-/nanoid-3.3.18.tgz}
     engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
     hasBin: true

@@ -17913,7 +17541,7 @@ packages:
     engines: {node: '>=10'}

   normalize-wheel@1.0.1:
-    resolution: {integrity: sha512-1OnlAPZ3zgrk8B91HyRj+eVv+kS5u+Z0SCsak6Xil/kmgEia50ga7zfkumayonZrImffAxPU/5WcyGhzetHNPA==}
+    resolution: {integrity: sha512-1OnlAPZ3zgrk8B91HyRj+eVv+kS5u+Z0SCsak6Xil/kmgEia50ga7zfkumayonZrImffAxPU/5WcyGhzetHNPA==, tarball: https://registry.npmjs.org/normalize-wheel/-/normalize-wheel-1.0.1.tgz}

   npm-bundled@1.1.2:
     resolution: {integrity: sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==}
@@ -18316,7 +17944,7 @@ packages:
     engines: {node: '>= 0.10'}

   parse-cache-control@1.0.1:
-    resolution: {integrity: sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==}
+    resolution: {integrity: sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==, tarball: https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz}

   parse-conflict-json@2.0.2:
     resolution: {integrity: sha512-jDbRGb00TAPFsKWCpZZOT93SxVP9nONOSgES3AevqRq/CHvavEBvKAjxX9p5Y5F0RZLxH9Ufd9+RwtCsa+lFDA==}
@@ -18358,7 +17986,7 @@ packages:
     resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==}

   parsel-js@1.2.2:
-    resolution: {integrity: sha512-AVJMlwQ4bL2Y0VvYJGk+Fp7eX4SCH2uFoNApmn4yKWACUewZ+alwW3tyoe1r5Z3aLYQTuAuPZIyGghMfO/Tlxw==}
+    resolution: {integrity: sha512-AVJMlwQ4bL2Y0VvYJGk+Fp7eX4SCH2uFoNApmn4yKWACUewZ+alwW3tyoe1r5Z3aLYQTuAuPZIyGghMfO/Tlxw==, tarball: https://registry.npmjs.org/parsel-js/-/parsel-js-1.2.2.tgz}

   parseurl@1.3.3:
     resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
@@ -18456,7 +18084,7 @@ packages:
     resolution: {integrity: sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA==}

   path-to-regexp@6.3.0:
-    resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==}
+    resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==, tarball: https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz}

   path-type@1.1.0:
     resolution: {integrity: sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==}
@@ -18492,14 +18120,14 @@ packages:
     resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==}

   pg-int8@1.0.1:
-    resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==}
+    resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==, tarball: https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz}
     engines: {node: '>=4.0.0'}

   pg-protocol@1.13.0:
-    resolution: {integrity: sha512-zzdvXfS6v89r6v7OcFCHfHlyG/wvry1ALxZo4LqgUoy7W9xhBDMaqOuMiF3qEV45VqsN6rdlcehHrfDtlCPc8w==}
+    resolution: {integrity: sha512-zzdvXfS6v89r6v7OcFCHfHlyG/wvry1ALxZo4LqgUoy7W9xhBDMaqOuMiF3qEV45VqsN6rdlcehHrfDtlCPc8w==, tarball: https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.13.0.tgz}

   pg-types@2.2.0:
-    resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==}
+    resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==, tarball: https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz}
     engines: {node: '>=4'}

   photon@4.1.1:
@@ -18537,7 +18165,7 @@ packages:
     engines: {node: '>=0.10.0'}

   pify@3.0.0:
-    resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==}
+    resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==, tarball: https://registry.npmjs.org/pify/-/pify-3.0.0.tgz}
     engines: {node: '>=4'}

   pify@4.0.1:
@@ -18959,7 +18587,7 @@ packages:
       postcss: ^8.4.31

   postcss-prefix-selector@1.16.1:
-    resolution: {integrity: sha512-Umxu+FvKMwlY6TyDzGFoSUnzW+NOfMBLyC1tAkIjgX+Z/qGspJeRjVC903D7mx7TuBpJlwti2ibXtWuA7fKMeQ==}
+    resolution: {integrity: sha512-Umxu+FvKMwlY6TyDzGFoSUnzW+NOfMBLyC1tAkIjgX+Z/qGspJeRjVC903D7mx7TuBpJlwti2ibXtWuA7fKMeQ==, tarball: https://registry.npmjs.org/postcss-prefix-selector/-/postcss-prefix-selector-1.16.1.tgz}
     peerDependencies:
       postcss: '>4 <9'

@@ -19046,7 +18674,7 @@ packages:
       postcss: ^8.4.31

   postcss-urlrebase@1.4.0:
-    resolution: {integrity: sha512-rRaxMmWvXrn8Rk1PqsxmaJwldRHsr0WbbASKKCZYxXwotHkM/5X/6IrwaEe8pdzpbNGCEY86yhYMN0MhgOkADA==}
+    resolution: {integrity: sha512-rRaxMmWvXrn8Rk1PqsxmaJwldRHsr0WbbASKKCZYxXwotHkM/5X/6IrwaEe8pdzpbNGCEY86yhYMN0MhgOkADA==, tarball: https://registry.npmjs.org/postcss-urlrebase/-/postcss-urlrebase-1.4.0.tgz}
     peerDependencies:
       postcss: ^8.3.0

@@ -19057,7 +18685,7 @@ packages:
     resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}

   postcss@6.0.23:
-    resolution: {integrity: sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==}
+    resolution: {integrity: sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==, tarball: https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz}
     engines: {node: '>=4.0.0'}

   postcss@7.0.39:
@@ -19065,23 +18693,23 @@ packages:
     engines: {node: '>=6.0.0'}

   postcss@8.5.26:
-    resolution: {integrity: sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==}
+    resolution: {integrity: sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==, tarball: https://registry.npmjs.org/postcss/-/postcss-8.5.26.tgz}
     engines: {node: ^10 || ^12 || >=14}

   postgres-array@2.0.0:
-    resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==}
+    resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==, tarball: https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz}
     engines: {node: '>=4'}

   postgres-bytea@1.0.1:
-    resolution: {integrity: sha512-5+5HqXnsZPE65IJZSMkZtURARZelel2oXUEO8rH83VS/hxH5vv1uHquPg5wZs8yMAfdv971IU+kcPUczi7NVBQ==}
+    resolution: {integrity: sha512-5+5HqXnsZPE65IJZSMkZtURARZelel2oXUEO8rH83VS/hxH5vv1uHquPg5wZs8yMAfdv971IU+kcPUczi7NVBQ==, tarball: https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.1.tgz}
     engines: {node: '>=0.10.0'}

   postgres-date@1.0.7:
-    resolution: {integrity: sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==}
+    resolution: {integrity: sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==, tarball: https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz}
     engines: {node: '>=0.10.0'}

   postgres-interval@1.2.0:
-    resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==}
+    resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==, tarball: https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz}
     engines: {node: '>=0.10.0'}

   preact@10.29.1:
@@ -19290,7 +18918,7 @@ packages:
     engines: {node: '>=18'}

   puppeteer-core@24.40.0:
-    resolution: {integrity: sha512-MWL3XbUCfVgGR0gRsidzT6oKJT2QydPLhMITU6HoVWiiv4gkb6gJi3pcdAa8q4HwjBTbqISOWVP4aJiiyUJvag==}
+    resolution: {integrity: sha512-MWL3XbUCfVgGR0gRsidzT6oKJT2QydPLhMITU6HoVWiiv4gkb6gJi3pcdAa8q4HwjBTbqISOWVP4aJiiyUJvag==, tarball: https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.40.0.tgz}
     engines: {node: '>=18'}

   pure-rand@6.1.0:
@@ -19441,7 +19069,7 @@ packages:
     engines: {node: '>=16.14.0'}

   react-dom@17.0.2:
-    resolution: {integrity: sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==}
+    resolution: {integrity: sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==, tarball: https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz}
     peerDependencies:
       react: 17.0.2

@@ -19451,7 +19079,7 @@ packages:
       react: ^18.3.1

   react-easy-crop@5.5.7:
-    resolution: {integrity: sha512-kYo4NtMeXFQB7h1U+h5yhUkE46WQbQdq7if54uDlbMdZHdRgNehfvaFrXnFw5NR1PNoUOJIfTwLnWmEx/MaZnA==}
+    resolution: {integrity: sha512-kYo4NtMeXFQB7h1U+h5yhUkE46WQbQdq7if54uDlbMdZHdRgNehfvaFrXnFw5NR1PNoUOJIfTwLnWmEx/MaZnA==, tarball: https://registry.npmjs.org/react-easy-crop/-/react-easy-crop-5.5.7.tgz}
     peerDependencies:
       react: '>=16.4.0'
       react-dom: '>=16.4.0'
@@ -19592,7 +19220,7 @@ packages:
         optional: true

   react-remove-scroll@2.7.2:
-    resolution: {integrity: sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==}
+    resolution: {integrity: sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==, tarball: https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.7.2.tgz}
     engines: {node: '>=10'}
     peerDependencies:
       '@types/react': 18.3.x
@@ -19728,7 +19356,7 @@ packages:
       react-with-direction: ^1.3.1

   react@17.0.2:
-    resolution: {integrity: sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==}
+    resolution: {integrity: sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==, tarball: https://registry.npmjs.org/react/-/react-17.0.2.tgz}
     engines: {node: '>=0.10.0'}

   react@18.3.1:
@@ -19870,17 +19498,17 @@ packages:
     resolution: {integrity: sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA==}

   regenerate-unicode-properties@10.2.2:
-    resolution: {integrity: sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==}
+    resolution: {integrity: sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==, tarball: https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz}
     engines: {node: '>=4'}

   regenerate@1.4.2:
-    resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==}
+    resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==, tarball: https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz}

   regenerator-runtime@0.13.11:
     resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==}

   regenerator-runtime@0.14.1:
-    resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
+    resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==, tarball: https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz}

   regex-not@1.0.2:
     resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==}
@@ -19891,7 +19519,7 @@ packages:
     engines: {node: '>= 0.4'}

   regexpu-core@6.4.0:
-    resolution: {integrity: sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==}
+    resolution: {integrity: sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==, tarball: https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.4.0.tgz}
     engines: {node: '>=4'}

   registry-auth-token@3.4.0:
@@ -19902,10 +19530,10 @@ packages:
     engines: {node: '>=0.10.0'}

   regjsgen@0.8.0:
-    resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==}
+    resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==, tarball: https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz}

   regjsparser@0.13.1:
-    resolution: {integrity: sha512-dLsljMd9sqwRkby8zhO1gSg3PnJIBFid8f4CQj/sXx+7cKx+E7u0PKhZ+U4wmhx7EfmtvnA318oVaIkAB1lRJw==}
+    resolution: {integrity: sha512-dLsljMd9sqwRkby8zhO1gSg3PnJIBFid8f4CQj/sXx+7cKx+E7u0PKhZ+U4wmhx7EfmtvnA318oVaIkAB1lRJw==, tarball: https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.1.tgz}
     hasBin: true

   relateurl@0.2.7:
@@ -20006,7 +19634,7 @@ packages:
     engines: {node: '>=0.10.0'}

   require-in-the-middle@7.5.2:
-    resolution: {integrity: sha512-gAZ+kLqBdHarXB64XpAe2VCjB7rIRv+mU8tfRWziHRJ5umKsIHN2tLLv6EtMw7WCdP19S0ERVMldNvxYCHnhSQ==}
+    resolution: {integrity: sha512-gAZ+kLqBdHarXB64XpAe2VCjB7rIRv+mU8tfRWziHRJ5umKsIHN2tLLv6EtMw7WCdP19S0ERVMldNvxYCHnhSQ==, tarball: https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-7.5.2.tgz}
     engines: {node: '>=8.6.0'}

   require-main-filename@1.0.1:
@@ -20023,7 +19651,7 @@ packages:
     resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==}

   reselect@5.1.1:
-    resolution: {integrity: sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==}
+    resolution: {integrity: sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==, tarball: https://registry.npmjs.org/reselect/-/reselect-5.1.1.tgz}

   resize-observer-polyfill@1.5.1:
     resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==}
@@ -20134,11 +19762,11 @@ packages:
     engines: {node: '>= 0.8'}

   robots-parser@3.0.1:
-    resolution: {integrity: sha512-s+pyvQeIKIZ0dx5iJiQk1tPLJAWln39+MI5jtM8wnyws+G5azk+dMnMX0qfbqNetKKNgcWWOdi0sfm+FbQbgdQ==}
+    resolution: {integrity: sha512-s+pyvQeIKIZ0dx5iJiQk1tPLJAWln39+MI5jtM8wnyws+G5azk+dMnMX0qfbqNetKKNgcWWOdi0sfm+FbQbgdQ==, tarball: https://registry.npmjs.org/robots-parser/-/robots-parser-3.0.1.tgz}
     engines: {node: '>=10.0.0'}

   route-recognizer@0.3.4:
-    resolution: {integrity: sha512-2+MhsfPhvauN1O8KaXpXAOfR/fwe8dnUXVM+xw7yt40lJRfPVQxV6yryZm0cgRvAj5fMF/mdRZbL2ptwbs5i2g==}
+    resolution: {integrity: sha512-2+MhsfPhvauN1O8KaXpXAOfR/fwe8dnUXVM+xw7yt40lJRfPVQxV6yryZm0cgRvAj5fMF/mdRZbL2ptwbs5i2g==, tarball: https://registry.npmjs.org/route-recognizer/-/route-recognizer-0.3.4.tgz}

   rrweb-cssom@0.8.0:
     resolution: {integrity: sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==}
@@ -20381,15 +20009,15 @@ packages:
     resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==}

   schema-utils@1.0.0:
-    resolution: {integrity: sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==}
+    resolution: {integrity: sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==, tarball: https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz}
     engines: {node: '>= 4'}

   schema-utils@2.7.0:
-    resolution: {integrity: sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==}
+    resolution: {integrity: sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==, tarball: https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz}
     engines: {node: '>= 8.9.0'}

   schema-utils@2.7.1:
-    resolution: {integrity: sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==}
+    resolution: {integrity: sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==, tarball: https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz}
     engines: {node: '>= 8.9.0'}

   schema-utils@3.3.0:
@@ -20415,7 +20043,7 @@ packages:
     resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==}

   select@1.1.2:
-    resolution: {integrity: sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==}
+    resolution: {integrity: sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==, tarball: https://registry.npmjs.org/select/-/select-1.1.2.tgz}

   selfsigned@2.4.1:
     resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==}
@@ -20430,7 +20058,7 @@ packages:
     hasBin: true

   semver@6.3.1:
-    resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
+    resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==, tarball: https://registry.npmjs.org/semver/-/semver-6.3.1.tgz}
     hasBin: true

   semver@7.7.4:
@@ -20458,13 +20086,13 @@ packages:
     resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==}

   seroval-plugins@1.5.2:
-    resolution: {integrity: sha512-qpY0Cl+fKYFn4GOf3cMiq6l72CpuVaawb6ILjubOQ+diJ54LfOWaSSPsaswN8DRPIPW4Yq+tE1k5aKd7ILyaFg==}
+    resolution: {integrity: sha512-qpY0Cl+fKYFn4GOf3cMiq6l72CpuVaawb6ILjubOQ+diJ54LfOWaSSPsaswN8DRPIPW4Yq+tE1k5aKd7ILyaFg==, tarball: https://registry.npmjs.org/seroval-plugins/-/seroval-plugins-1.5.2.tgz}
     engines: {node: '>=10'}
     peerDependencies:
       seroval: ^1.0

   seroval@1.5.2:
-    resolution: {integrity: sha512-xcRN39BdsnO9Tf+VzsE7b3JyTJASItIV1FVFewJKCFcW4s4haIKS3e6vj8PGB9qBwC7tnuOywQMdv5N4qkzi7Q==}
+    resolution: {integrity: sha512-xcRN39BdsnO9Tf+VzsE7b3JyTJASItIV1FVFewJKCFcW4s4haIKS3e6vj8PGB9qBwC7tnuOywQMdv5N4qkzi7Q==, tarball: https://registry.npmjs.org/seroval/-/seroval-1.5.2.tgz}
     engines: {node: '>=10'}

   serve-favicon@2.5.1:
@@ -20546,7 +20174,7 @@ packages:
     resolution: {integrity: sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==, tarball: https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz}

   shimmer@1.2.1:
-    resolution: {integrity: sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==}
+    resolution: {integrity: sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==, tarball: https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz}

   showdown@1.9.1:
     resolution: {integrity: sha512-9cGuS382HcvExtf5AHk7Cb4pAeQQ+h0eTr33V1mu+crYWV4KvWAw6el92bDrqGEk5d46Ai/fhbEUwqJ/mTCNEA==}
@@ -20608,7 +20236,7 @@ packages:
     resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==}

   slash@2.0.0:
-    resolution: {integrity: sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==}
+    resolution: {integrity: sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==, tarball: https://registry.npmjs.org/slash/-/slash-2.0.0.tgz}
     engines: {node: '>=6'}

   slash@3.0.0:
@@ -20616,7 +20244,7 @@ packages:
     engines: {node: '>=8'}

   slash@4.0.0:
-    resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==}
+    resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==, tarball: https://registry.npmjs.org/slash/-/slash-4.0.0.tgz}
     engines: {node: '>=12'}

   slice-ansi@3.0.0:
@@ -20760,7 +20388,7 @@ packages:
     engines: {node: '>=6.0.0'}

   speedline-core@1.4.3:
-    resolution: {integrity: sha512-DI7/OuAUD+GMpR6dmu8lliO2Wg5zfeh+/xsdyJZCzd8o5JgFUjCeLsBDuZjIQJdwXS3J0L/uZYrELKYqx+PXog==}
+    resolution: {integrity: sha512-DI7/OuAUD+GMpR6dmu8lliO2Wg5zfeh+/xsdyJZCzd8o5JgFUjCeLsBDuZjIQJdwXS3J0L/uZYrELKYqx+PXog==, tarball: https://registry.npmjs.org/speedline-core/-/speedline-core-1.4.3.tgz}
     engines: {node: '>=8.0'}

   split-string@3.1.0:
@@ -21032,10 +20660,10 @@ packages:
     resolution: {integrity: sha512-oKx6RUCuHfT3oyVjtnrmn19H1SiCqgJSg+54XqURKp5aCMbrXrhLjRN9TjuwMjiYstZ0MzDrHqkGZ5dFTKd+zg==}

   stubborn-fs@2.0.0:
-    resolution: {integrity: sha512-Y0AvSwDw8y+nlSNFXMm2g6L51rBGdAQT20J3YSOqxC53Lo3bjWRtr2BKcfYoAf352WYpsZSTURrA0tqhfgudPA==}
+    resolution: {integrity: sha512-Y0AvSwDw8y+nlSNFXMm2g6L51rBGdAQT20J3YSOqxC53Lo3bjWRtr2BKcfYoAf352WYpsZSTURrA0tqhfgudPA==, tarball: https://registry.npmjs.org/stubborn-fs/-/stubborn-fs-2.0.0.tgz}

   stubborn-utils@1.0.2:
-    resolution: {integrity: sha512-zOh9jPYI+xrNOyisSelgym4tolKTJCQd5GBhK0+0xJvcYDcwlOoxF/rnFKQ2KRZknXSG9jWAp66fwP6AxN9STg==}
+    resolution: {integrity: sha512-zOh9jPYI+xrNOyisSelgym4tolKTJCQd5GBhK0+0xJvcYDcwlOoxF/rnFKQ2KRZknXSG9jWAp66fwP6AxN9STg==, tarball: https://registry.npmjs.org/stubborn-utils/-/stubborn-utils-1.0.2.tgz}

   style-loader@1.3.0:
     resolution: {integrity: sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q==}
@@ -21254,7 +20882,7 @@ packages:
     hasBin: true

   tabbable@6.4.0:
-    resolution: {integrity: sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==}
+    resolution: {integrity: sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==, tarball: https://registry.npmjs.org/tabbable/-/tabbable-6.4.0.tgz}

   table@6.9.0:
     resolution: {integrity: sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==}
@@ -21264,14 +20892,14 @@ packages:
     resolution: {integrity: sha512-kS7E53It6HA8S1FVFBWP7HDwgTiJtkmYk7TsowGlizzVrivR1Mf9mgjXHY1k7rOfozRVMZSfwjB3bevO4QEqpg==}

   tannin@1.2.0:
-    resolution: {integrity: sha512-U7GgX/RcSeUETbV7gYgoz8PD7Ni4y95pgIP/Z6ayI3CfhSujwKEBlGFTCRN+Aqnuyf4AN2yHL+L8x+TCGjb9uA==}
+    resolution: {integrity: sha512-U7GgX/RcSeUETbV7gYgoz8PD7Ni4y95pgIP/Z6ayI3CfhSujwKEBlGFTCRN+Aqnuyf4AN2yHL+L8x+TCGjb9uA==, tarball: https://registry.npmjs.org/tannin/-/tannin-1.2.0.tgz}

   tapable@0.1.10:
     resolution: {integrity: sha512-jX8Et4hHg57mug1/079yitEKWGB3LCwoxByLsNim89LABq8NqgiX+6iYVOsq0vX8uJHkU+DZ5fnq95f800bEsQ==}
     engines: {node: '>=0.6'}

   tapable@1.1.3:
-    resolution: {integrity: sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==}
+    resolution: {integrity: sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==, tarball: https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz}
     engines: {node: '>=6'}

   tapable@2.3.2:
@@ -21306,7 +20934,7 @@ packages:
     resolution: {integrity: sha512-1QTEcJkJEhc8OnStBx/ILRu5J2p0GjvWsBx56bmZRqnrkdBMUe+nX92jxV+p3dB4CP6PZCdJMQJwCggkNBMzkQ==}

   temml@0.10.34:
-    resolution: {integrity: sha512-f3b5CaPwPvMviA+CtHy0qoIGWvzpRrNpXmGRc/Y1jc9gAYy+xOlndJFyn7Vfcz7cBcS8QRvv8z0EEH59sHCQxg==}
+    resolution: {integrity: sha512-f3b5CaPwPvMviA+CtHy0qoIGWvzpRrNpXmGRc/Y1jc9gAYy+xOlndJFyn7Vfcz7cBcS8QRvv8z0EEH59sHCQxg==, tarball: https://registry.npmjs.org/temml/-/temml-0.10.34.tgz}
     engines: {node: '>=18.13.0'}

   temp-dir@2.0.0:
@@ -21326,13 +20954,13 @@ packages:
     engines: {node: '>=4'}

   terser-webpack-plugin@1.4.6:
-    resolution: {integrity: sha512-2lBVf/VMVIddjSn3GqbT90GvIJ/eYXJkt8cTzU7NbjKqK8fwv18Ftr4PlbF46b/e88743iZFL5Dtr/rC4hjIeA==}
+    resolution: {integrity: sha512-2lBVf/VMVIddjSn3GqbT90GvIJ/eYXJkt8cTzU7NbjKqK8fwv18Ftr4PlbF46b/e88743iZFL5Dtr/rC4hjIeA==, tarball: https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.6.tgz}
     engines: {node: '>= 6.9.0'}
     peerDependencies:
       webpack: ^4.0.0

   terser-webpack-plugin@4.2.3:
-    resolution: {integrity: sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ==}
+    resolution: {integrity: sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ==, tarball: https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-4.2.3.tgz}
     engines: {node: '>= 10.13.0'}
     peerDependencies:
       webpack: ^4.0.0 || ^5.0.0
@@ -21382,7 +21010,7 @@ packages:
     engines: {node: '>=0.8.0'}

   third-party-web@0.27.0:
-    resolution: {integrity: sha512-h0JYX+dO2Zr3abCQpS6/uFjujaOjA1DyDzGQ41+oFn9VW/ARiq9g5ln7qEP9+BTzDpOMyIfsfj4OvfgXAsMUSA==}
+    resolution: {integrity: sha512-h0JYX+dO2Zr3abCQpS6/uFjujaOjA1DyDzGQ41+oFn9VW/ARiq9g5ln7qEP9+BTzDpOMyIfsfj4OvfgXAsMUSA==, tarball: https://registry.npmjs.org/third-party-web/-/third-party-web-0.27.0.tgz}

   third-party-web@0.29.2:
     resolution: {integrity: sha512-fegtha91tq2DHphyoiBXVHjVi2YG9zFaRnboT9C28tO1en9Y3wJsfspuy40F+u5wl3hHVbw7cnd1b67kEGHb8g==, tarball: https://registry.npmjs.org/third-party-web/-/third-party-web-0.29.2.tgz}
@@ -21405,7 +21033,7 @@ packages:
     engines: {node: '>=0.6.0'}

   tiny-emitter@2.1.0:
-    resolution: {integrity: sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==}
+    resolution: {integrity: sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==, tarball: https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz}

   tiny-invariant@1.3.3:
     resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==}
@@ -21427,10 +21055,10 @@ packages:
     resolution: {integrity: sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==}

   tldts-core@7.0.28:
-    resolution: {integrity: sha512-7W5Efjhsc3chVdFhqtaU0KtK32J37Zcr9RKtID54nG+tIpcY79CQK/veYPODxtD/LJ4Lue66jvrQzIX2Z2/pUQ==}
+    resolution: {integrity: sha512-7W5Efjhsc3chVdFhqtaU0KtK32J37Zcr9RKtID54nG+tIpcY79CQK/veYPODxtD/LJ4Lue66jvrQzIX2Z2/pUQ==, tarball: https://registry.npmjs.org/tldts-core/-/tldts-core-7.0.28.tgz}

   tldts-icann@7.0.28:
-    resolution: {integrity: sha512-brkN3yIgYTzBpSxB71XYBwUMDgutmKmA+6TWzgGD/EPcvCc6LHMTRaYj9ik1u3BxhSW53qIK/7cgjA2rF7BgbA==}
+    resolution: {integrity: sha512-brkN3yIgYTzBpSxB71XYBwUMDgutmKmA+6TWzgGD/EPcvCc6LHMTRaYj9ik1u3BxhSW53qIK/7cgjA2rF7BgbA==, tarball: https://registry.npmjs.org/tldts-icann/-/tldts-icann-7.0.28.tgz}

   tldts@6.1.86:
     resolution: {integrity: sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==}
@@ -21783,19 +21411,19 @@ packages:
     resolution: {integrity: sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==}

   unicode-canonical-property-names-ecmascript@2.0.1:
-    resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==}
+    resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==, tarball: https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz}
     engines: {node: '>=4'}

   unicode-match-property-ecmascript@2.0.0:
-    resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==}
+    resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==, tarball: https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz}
     engines: {node: '>=4'}

   unicode-match-property-value-ecmascript@2.2.1:
-    resolution: {integrity: sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==}
+    resolution: {integrity: sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==, tarball: https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz}
     engines: {node: '>=4'}

   unicode-property-aliases-ecmascript@2.2.0:
-    resolution: {integrity: sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==}
+    resolution: {integrity: sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==, tarball: https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.2.0.tgz}
     engines: {node: '>=4'}

   unified@9.2.0:
@@ -22207,17 +21835,17 @@ packages:
     resolution: {integrity: sha512-zksaLKM2fVlnB5jQQDqKXXwYHLQUVH9es+5TOOHwGOVJOCeRBCiPjwSg+3tN2AdTCzjgli4jijCH290kXb/zWQ==}

   wasm-vips@0.0.17:
-    resolution: {integrity: sha512-nhkqUNJDUymImoXGrVfImC4wzIFTb9KfBpAngb7dcEQNPP1gVTx4+WL3VVVDSXQpMsyeacsQDOx0+DM33Rpurg==}
+    resolution: {integrity: sha512-nhkqUNJDUymImoXGrVfImC4wzIFTb9KfBpAngb7dcEQNPP1gVTx4+WL3VVVDSXQpMsyeacsQDOx0+DM33Rpurg==, tarball: https://registry.npmjs.org/wasm-vips/-/wasm-vips-0.0.17.tgz}
     engines: {node: '>=16.4.0'}

   watchpack-chokidar2@2.0.1:
     resolution: {integrity: sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==, tarball: https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz}

   watchpack@1.7.5:
-    resolution: {integrity: sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==}
+    resolution: {integrity: sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==, tarball: https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz}

   watchpack@2.5.1:
-    resolution: {integrity: sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==}
+    resolution: {integrity: sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==, tarball: https://registry.npmjs.org/watchpack/-/watchpack-2.5.1.tgz}
     engines: {node: '>=10.13.0'}

   wbuf@1.7.3:
@@ -22230,10 +21858,10 @@ packages:
     resolution: {integrity: sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==}

   web-vitals@4.2.4:
-    resolution: {integrity: sha512-r4DIlprAGwJ7YM11VZp4R884m0Vmgr6EAKe3P+kO0PPj3Unqyvv59rczf6UiGcb9Z8QxZVcqKNwv/g0WNdWwsw==}
+    resolution: {integrity: sha512-r4DIlprAGwJ7YM11VZp4R884m0Vmgr6EAKe3P+kO0PPj3Unqyvv59rczf6UiGcb9Z8QxZVcqKNwv/g0WNdWwsw==, tarball: https://registry.npmjs.org/web-vitals/-/web-vitals-4.2.4.tgz}

   webdriver-bidi-protocol@0.4.1:
-    resolution: {integrity: sha512-ARrjNjtWRRs2w4Tk7nqrf2gBI0QXWuOmMCx2hU+1jUt6d00MjMxURrhxhGbrsoiZKJrhTSTzbIrc554iKI10qw==}
+    resolution: {integrity: sha512-ARrjNjtWRRs2w4Tk7nqrf2gBI0QXWuOmMCx2hU+1jUt6d00MjMxURrhxhGbrsoiZKJrhTSTzbIrc554iKI10qw==, tarball: https://registry.npmjs.org/webdriver-bidi-protocol/-/webdriver-bidi-protocol-0.4.1.tgz}

   webidl-conversions@3.0.1:
     resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
@@ -22325,10 +21953,10 @@ packages:
       webpack: '>=5.32.0'

   webpack-sources@1.4.3:
-    resolution: {integrity: sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==}
+    resolution: {integrity: sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==, tarball: https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz}

   webpack-sources@3.3.4:
-    resolution: {integrity: sha512-7tP1PdV4vF+lYPnkMR0jMY5/la2ub5Fc/8VQrrU+lXkiM6C4TjVfGw7iKfyhnTQOsD+6Q/iKw0eFciziRgD58Q==}
+    resolution: {integrity: sha512-7tP1PdV4vF+lYPnkMR0jMY5/la2ub5Fc/8VQrrU+lXkiM6C4TjVfGw7iKfyhnTQOsD+6Q/iKw0eFciziRgD58Q==, tarball: https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.4.tgz}
     engines: {node: '>=10.13.0'}

   webpack-virtual-modules@0.2.2:
@@ -22341,7 +21969,7 @@ packages:
     resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==}

   webpack@4.47.0:
-    resolution: {integrity: sha512-td7fYwgLSrky3fI1EuU5cneU4+pbH6GgOfuKNS1tNPcfdGinGELAqsb/BP4nnvZyKSG2i/xFGU7+n2PvZA8HJQ==}
+    resolution: {integrity: sha512-td7fYwgLSrky3fI1EuU5cneU4+pbH6GgOfuKNS1tNPcfdGinGELAqsb/BP4nnvZyKSG2i/xFGU7+n2PvZA8HJQ==, tarball: https://registry.npmjs.org/webpack/-/webpack-4.47.0.tgz}
     engines: {node: '>=6.11.5'}
     hasBin: true
     peerDependencies:
@@ -22354,7 +21982,7 @@ packages:
         optional: true

   webpack@5.97.1:
-    resolution: {integrity: sha512-EksG6gFY3L1eFMROS/7Wzgrii5mBAFe4rIr3r2BTfo7bcc+DWwFZ4OJ/miOuHJO/A85HwyI4eQ0F6IKXesO7Fg==}
+    resolution: {integrity: sha512-EksG6gFY3L1eFMROS/7Wzgrii5mBAFe4rIr3r2BTfo7bcc+DWwFZ4OJ/miOuHJO/A85HwyI4eQ0F6IKXesO7Fg==, tarball: https://registry.npmjs.org/webpack/-/webpack-5.97.1.tgz}
     engines: {node: '>=10.13.0'}
     hasBin: true
     peerDependencies:
@@ -22404,7 +22032,7 @@ packages:
     resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}

   when-exit@2.1.5:
-    resolution: {integrity: sha512-VGkKJ564kzt6Ms1dbgPP/yuIoQCrsFAnRbptpC5wOEsDaNsbCB2bnfnaA8i/vRs5tjUSEOtIuvl9/MyVsvQZCg==}
+    resolution: {integrity: sha512-VGkKJ564kzt6Ms1dbgPP/yuIoQCrsFAnRbptpC5wOEsDaNsbCB2bnfnaA8i/vRs5tjUSEOtIuvl9/MyVsvQZCg==, tarball: https://registry.npmjs.org/when-exit/-/when-exit-2.1.5.tgz}

   which-boxed-primitive@1.1.1:
     resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==}
@@ -22586,7 +22214,7 @@ packages:
     engines: {node: '>=4'}

   xdg-basedir@5.1.0:
-    resolution: {integrity: sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==}
+    resolution: {integrity: sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==, tarball: https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz}
     engines: {node: '>=12'}

   xml-escape@1.1.0:
@@ -22632,7 +22260,7 @@ packages:
       yjs: ^13.0.0

   y-protocols@1.0.7:
-    resolution: {integrity: sha512-YSVsLoXxO67J6eE/nV4AtFtT3QEotZf5sK5BHxFBXso7VDUT3Tx07IfA6hsu5Q5OmBdMkQVmFZ9QOA7fikWvnw==}
+    resolution: {integrity: sha512-YSVsLoXxO67J6eE/nV4AtFtT3QEotZf5sK5BHxFBXso7VDUT3Tx07IfA6hsu5Q5OmBdMkQVmFZ9QOA7fikWvnw==, tarball: https://registry.npmjs.org/y-protocols/-/y-protocols-1.0.7.tgz}
     engines: {node: '>=16.0.0', npm: '>=8.0.0'}
     peerDependencies:
       yjs: ^13.0.0
@@ -22658,7 +22286,7 @@ packages:
     resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==}

   yallist@3.1.1:
-    resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
+    resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==, tarball: https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz}

   yallist@4.0.0:
     resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
@@ -22925,7 +22553,7 @@ snapshots:
       '@wordpress/html-entities': 4.20.0
       '@wordpress/i18n': 5.26.0
       '@wordpress/icons': 10.32.0(@types/react@18.3.28)(react@18.3.1)
-      '@wordpress/primitives': 4.48.1(react@18.3.1)
+      '@wordpress/primitives': 4.50.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/react-i18n': 4.44.0
       '@wordpress/url': 4.48.1
       canvas-confetti: 1.9.4
@@ -22969,7 +22597,7 @@ snapshots:
       '@wordpress/html-entities': 4.20.0
       '@wordpress/i18n': 5.26.0
       '@wordpress/icons': 10.32.0(@types/react@18.3.28)(react@18.3.1)
-      '@wordpress/primitives': 4.48.1(react@18.3.1)
+      '@wordpress/primitives': 4.50.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/react-i18n': 4.44.0
       '@wordpress/url': 4.48.1
       canvas-confetti: 1.9.4
@@ -23032,7 +22660,7 @@ snapshots:

   '@automattic/load-script@1.0.0':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       debug: 3.2.7
     transitivePeerDependencies:
       - supports-color
@@ -23169,7 +22797,7 @@ snapshots:
     dependencies:
       '@babel/compat-data': 7.29.0
       '@babel/helper-validator-option': 7.27.1
-      browserslist: 4.28.2
+      browserslist: 4.28.6
       lru-cache: 5.1.1
       semver: 6.3.1

@@ -23374,7 +23002,7 @@ snapshots:
   '@babel/plugin-proposal-object-rest-spread@7.12.1(@babel/core@7.12.9)':
     dependencies:
       '@babel/core': 7.12.9
-      '@babel/helper-plugin-utils': 7.10.4
+      '@babel/helper-plugin-utils': 7.28.6
       '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.12.9)
       '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.12.9)

@@ -23846,7 +23474,7 @@ snapshots:
       '@babel/helper-annotate-as-pure': 7.27.3
       '@babel/helper-module-imports': 7.28.6
       '@babel/helper-plugin-utils': 7.28.6
-      '@babel/plugin-syntax-jsx': 7.25.7(@babel/core@7.25.7)
+      '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.25.7)
       '@babel/types': 7.29.0
     transitivePeerDependencies:
       - supports-color
@@ -24084,7 +23712,7 @@ snapshots:
       '@babel/core': 7.25.7
       '@babel/helper-plugin-utils': 7.28.6
       '@babel/helper-validator-option': 7.27.1
-      '@babel/plugin-syntax-jsx': 7.25.7(@babel/core@7.25.7)
+      '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.25.7)
       '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.25.7)
       '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.25.7)
     transitivePeerDependencies:
@@ -24099,11 +23727,6 @@ snapshots:
       pirates: 4.0.7
       source-map-support: 0.5.21

-  '@babel/runtime-corejs2@7.5.5':
-    dependencies:
-      core-js: 2.6.12
-      regenerator-runtime: 0.13.11
-
   '@babel/runtime@7.25.7':
     dependencies:
       regenerator-runtime: 0.14.1
@@ -24141,34 +23764,6 @@ snapshots:
       lodash: 4.18.1
       yargs: 16.2.0

-  '@base-ui/react@1.4.1(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
-    dependencies:
-      '@babel/runtime': 7.29.2
-      '@base-ui/utils': 0.2.8(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
-      '@floating-ui/react-dom': 2.1.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
-      '@floating-ui/utils': 0.2.11
-      react: 18.3.1
-      react-dom: 18.3.1(react@18.3.1)
-      use-sync-external-store: 1.6.0(react@18.3.1)
-    optionalDependencies:
-      '@date-fns/tz': 1.4.1
-      '@types/react': 18.3.28
-      date-fns: 3.6.0
-
-  '@base-ui/react@1.4.1(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
-    dependencies:
-      '@babel/runtime': 7.29.2
-      '@base-ui/utils': 0.2.8(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
-      '@floating-ui/react-dom': 2.1.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
-      '@floating-ui/utils': 0.2.11
-      react: 18.3.1
-      react-dom: 18.3.1(react@18.3.1)
-      use-sync-external-store: 1.6.0(react@18.3.1)
-    optionalDependencies:
-      '@date-fns/tz': 1.4.1
-      '@types/react': 18.3.28
-      date-fns: 4.1.0
-
   '@base-ui/react@1.5.0(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
     dependencies:
       '@babel/runtime': 7.29.2
@@ -24197,17 +23792,6 @@ snapshots:
       '@types/react': 18.3.28
       date-fns: 4.1.0

-  '@base-ui/utils@0.2.8(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
-    dependencies:
-      '@babel/runtime': 7.29.2
-      '@floating-ui/utils': 0.2.11
-      react: 18.3.1
-      react-dom: 18.3.1(react@18.3.1)
-      reselect: 5.1.1
-      use-sync-external-store: 1.6.0(react@18.3.1)
-    optionalDependencies:
-      '@types/react': 18.3.28
-
   '@base-ui/utils@0.2.9(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
     dependencies:
       '@babel/runtime': 7.29.2
@@ -24322,23 +23906,11 @@ snapshots:

   '@discoveryjs/json-ext@0.5.7': {}

-  '@dnd-kit/abstract@0.4.0':
-    dependencies:
-      '@dnd-kit/geometry': 0.4.0
-      '@dnd-kit/state': 0.4.0
-      tslib: 2.8.1
-
   '@dnd-kit/accessibility@3.1.1(react@18.3.1)':
     dependencies:
       react: 18.3.1
       tslib: 2.8.1

-  '@dnd-kit/collision@0.4.0':
-    dependencies:
-      '@dnd-kit/abstract': 0.4.0
-      '@dnd-kit/geometry': 0.4.0
-      tslib: 2.8.1
-
   '@dnd-kit/core@6.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
     dependencies:
       '@dnd-kit/accessibility': 3.1.1(react@18.3.1)
@@ -24347,19 +23919,6 @@ snapshots:
       react-dom: 18.3.1(react@18.3.1)
       tslib: 2.8.1

-  '@dnd-kit/dom@0.4.0':
-    dependencies:
-      '@dnd-kit/abstract': 0.4.0
-      '@dnd-kit/collision': 0.4.0
-      '@dnd-kit/geometry': 0.4.0
-      '@dnd-kit/state': 0.4.0
-      tslib: 2.8.1
-
-  '@dnd-kit/geometry@0.4.0':
-    dependencies:
-      '@dnd-kit/state': 0.4.0
-      tslib: 2.8.1
-
   '@dnd-kit/modifiers@6.0.1(@dnd-kit/core@6.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)':
     dependencies:
       '@dnd-kit/core': 6.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@@ -24374,15 +23933,6 @@ snapshots:
       react: 18.3.1
       tslib: 2.8.1

-  '@dnd-kit/react@0.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
-    dependencies:
-      '@dnd-kit/abstract': 0.4.0
-      '@dnd-kit/dom': 0.4.0
-      '@dnd-kit/state': 0.4.0
-      react: 18.3.1
-      react-dom: 18.3.1(react@18.3.1)
-      tslib: 2.8.1
-
   '@dnd-kit/sortable@7.0.2(@dnd-kit/core@6.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)':
     dependencies:
       '@dnd-kit/core': 6.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@@ -24397,11 +23947,6 @@ snapshots:
       react: 18.3.1
       tslib: 2.8.1

-  '@dnd-kit/state@0.4.0':
-    dependencies:
-      '@preact/signals-core': 1.14.1
-      tslib: 2.8.1
-
   '@dnd-kit/utilities@3.2.2(react@18.3.1)':
     dependencies:
       react: 18.3.1
@@ -24428,7 +23973,7 @@ snapshots:
   '@emotion/babel-plugin@11.13.5':
     dependencies:
       '@babel/helper-module-imports': 7.28.6
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@emotion/hash': 0.9.2
       '@emotion/memoize': 0.9.0
       '@emotion/serialize': 1.3.3
@@ -24503,7 +24048,7 @@ snapshots:

   '@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@18.3.28)(react@18.3.1))(@types/react@18.3.28)(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@emotion/babel-plugin': 11.13.5
       '@emotion/is-prop-valid': 1.4.0
       '@emotion/react': 11.14.0(@types/react@18.3.28)(react@18.3.1)
@@ -26456,7 +26001,7 @@ snapshots:
       webpack-dev-server: 4.15.2(webpack-cli@5.1.4)(webpack@5.97.1)
       webpack-hot-middleware: 2.26.1

-  '@pmmmwh/react-refresh-webpack-plugin@0.5.17(@types/webpack@4.41.40)(react-refresh@0.14.2)(type-fest@4.41.0)(webpack-dev-server@4.15.2)(webpack-hot-middleware@2.26.1)(webpack@5.97.1)':
+  '@pmmmwh/react-refresh-webpack-plugin@0.5.17(@types/webpack@4.41.40)(react-refresh@0.14.2)(type-fest@4.41.0)(webpack-dev-server@4.15.2(webpack@5.97.1(@swc/core@1.15.24)))(webpack-hot-middleware@2.26.1)(webpack@5.97.1(@swc/core@1.15.24))':
     dependencies:
       ansi-html: 0.0.9
       core-js-pure: 3.49.0
@@ -26524,21 +26069,21 @@ snapshots:

   '@radix-ui/number@1.0.1':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2

   '@radix-ui/primitive@1.0.0':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2

   '@radix-ui/primitive@1.0.1':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2

   '@radix-ui/primitive@1.1.3': {}

   '@radix-ui/react-arrow@1.0.3(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       react: 18.3.1
       react-dom: 18.3.1(react@18.3.1)
@@ -26548,7 +26093,7 @@ snapshots:

   '@radix-ui/react-collection@1.0.3(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.28)(react@18.3.1)
       '@radix-ui/react-context': 1.0.1(@types/react@18.3.28)(react@18.3.1)
       '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@@ -26573,12 +26118,12 @@ snapshots:

   '@radix-ui/react-compose-refs@1.0.0(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       react: 18.3.1

   '@radix-ui/react-compose-refs@1.0.1(@types/react@18.3.28)(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       react: 18.3.1
     optionalDependencies:
       '@types/react': 18.3.28
@@ -26591,12 +26136,12 @@ snapshots:

   '@radix-ui/react-context@1.0.0(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       react: 18.3.1

   '@radix-ui/react-context@1.0.1(@types/react@18.3.28)(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       react: 18.3.1
     optionalDependencies:
       '@types/react': 18.3.28
@@ -26609,7 +26154,7 @@ snapshots:

   '@radix-ui/react-dialog@1.0.0(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@radix-ui/primitive': 1.0.0
       '@radix-ui/react-compose-refs': 1.0.0(react@18.3.1)
       '@radix-ui/react-context': 1.0.0(react@18.3.1)
@@ -26653,7 +26198,7 @@ snapshots:

   '@radix-ui/react-direction@1.0.1(@types/react@18.3.28)(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       react: 18.3.1
     optionalDependencies:
       '@types/react': 18.3.28
@@ -26666,7 +26211,7 @@ snapshots:

   '@radix-ui/react-dismissable-layer@1.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@radix-ui/primitive': 1.0.0
       '@radix-ui/react-compose-refs': 1.0.0(react@18.3.1)
       '@radix-ui/react-primitive': 1.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@@ -26677,7 +26222,7 @@ snapshots:

   '@radix-ui/react-dismissable-layer@1.0.4(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@radix-ui/primitive': 1.0.1
       '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.28)(react@18.3.1)
       '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@@ -26704,12 +26249,12 @@ snapshots:

   '@radix-ui/react-focus-guards@1.0.0(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       react: 18.3.1

   '@radix-ui/react-focus-guards@1.0.1(@types/react@18.3.28)(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       react: 18.3.1
     optionalDependencies:
       '@types/react': 18.3.28
@@ -26722,7 +26267,7 @@ snapshots:

   '@radix-ui/react-focus-scope@1.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@radix-ui/react-compose-refs': 1.0.0(react@18.3.1)
       '@radix-ui/react-primitive': 1.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@radix-ui/react-use-callback-ref': 1.0.0(react@18.3.1)
@@ -26731,7 +26276,7 @@ snapshots:

   '@radix-ui/react-focus-scope@1.0.3(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.28)(react@18.3.1)
       '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.28)(react@18.3.1)
@@ -26754,13 +26299,13 @@ snapshots:

   '@radix-ui/react-id@1.0.0(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@radix-ui/react-use-layout-effect': 1.0.0(react@18.3.1)
       react: 18.3.1

   '@radix-ui/react-id@1.0.1(@types/react@18.3.28)(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.28)(react@18.3.1)
       react: 18.3.1
     optionalDependencies:
@@ -26775,7 +26320,7 @@ snapshots:

   '@radix-ui/react-popper@1.1.2(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@floating-ui/react-dom': 2.1.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.28)(react@18.3.1)
@@ -26794,14 +26339,14 @@ snapshots:

   '@radix-ui/react-portal@1.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@radix-ui/react-primitive': 1.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       react: 18.3.1
       react-dom: 18.3.1(react@18.3.1)

   '@radix-ui/react-portal@1.0.3(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       react: 18.3.1
       react-dom: 18.3.1(react@18.3.1)
@@ -26821,7 +26366,7 @@ snapshots:

   '@radix-ui/react-presence@1.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@radix-ui/react-compose-refs': 1.0.0(react@18.3.1)
       '@radix-ui/react-use-layout-effect': 1.0.0(react@18.3.1)
       react: 18.3.1
@@ -26839,14 +26384,14 @@ snapshots:

   '@radix-ui/react-primitive@1.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@radix-ui/react-slot': 1.0.0(react@18.3.1)
       react: 18.3.1
       react-dom: 18.3.1(react@18.3.1)

   '@radix-ui/react-primitive@1.0.3(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@radix-ui/react-slot': 1.0.2(@types/react@18.3.28)(react@18.3.1)
       react: 18.3.1
       react-dom: 18.3.1(react@18.3.1)
@@ -26891,7 +26436,7 @@ snapshots:

   '@radix-ui/react-select@1.2.2(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@radix-ui/number': 1.0.1
       '@radix-ui/primitive': 1.0.1
       '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@@ -26930,13 +26475,13 @@ snapshots:

   '@radix-ui/react-slot@1.0.0(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@radix-ui/react-compose-refs': 1.0.0(react@18.3.1)
       react: 18.3.1

   '@radix-ui/react-slot@1.0.2(@types/react@18.3.28)(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.28)(react@18.3.1)
       react: 18.3.1
     optionalDependencies:
@@ -26999,12 +26544,12 @@ snapshots:

   '@radix-ui/react-use-callback-ref@1.0.0(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       react: 18.3.1

   '@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.3.28)(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       react: 18.3.1
     optionalDependencies:
       '@types/react': 18.3.28
@@ -27017,13 +26562,13 @@ snapshots:

   '@radix-ui/react-use-controllable-state@1.0.0(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@radix-ui/react-use-callback-ref': 1.0.0(react@18.3.1)
       react: 18.3.1

   '@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.3.28)(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.28)(react@18.3.1)
       react: 18.3.1
     optionalDependencies:
@@ -27046,13 +26591,13 @@ snapshots:

   '@radix-ui/react-use-escape-keydown@1.0.0(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@radix-ui/react-use-callback-ref': 1.0.0(react@18.3.1)
       react: 18.3.1

   '@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.3.28)(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.28)(react@18.3.1)
       react: 18.3.1
     optionalDependencies:
@@ -27067,12 +26612,12 @@ snapshots:

   '@radix-ui/react-use-layout-effect@1.0.0(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       react: 18.3.1

   '@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.3.28)(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       react: 18.3.1
     optionalDependencies:
       '@types/react': 18.3.28
@@ -27085,14 +26630,14 @@ snapshots:

   '@radix-ui/react-use-previous@1.0.1(@types/react@18.3.28)(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       react: 18.3.1
     optionalDependencies:
       '@types/react': 18.3.28

   '@radix-ui/react-use-rect@1.0.1(@types/react@18.3.28)(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@radix-ui/rect': 1.0.1
       react: 18.3.1
     optionalDependencies:
@@ -27100,7 +26645,7 @@ snapshots:

   '@radix-ui/react-use-size@1.0.1(@types/react@18.3.28)(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.28)(react@18.3.1)
       react: 18.3.1
     optionalDependencies:
@@ -27108,7 +26653,7 @@ snapshots:

   '@radix-ui/react-visually-hidden@1.0.3(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       react: 18.3.1
       react-dom: 18.3.1(react@18.3.1)
@@ -27118,7 +26663,7 @@ snapshots:

   '@radix-ui/rect@1.0.1':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2

   '@react-spring/animated@9.7.5(react@18.3.1)':
     dependencies:
@@ -27286,6 +26831,7 @@ snapshots:
       p-retry: 4.6.2
     transitivePeerDependencies:
       - debug
+      - supports-color

   '@standard-schema/spec@1.1.0': {}

@@ -28789,7 +28335,7 @@ snapshots:
     dependencies:
       '@babel/preset-flow': 7.27.1(@babel/core@7.25.7)
       '@babel/preset-react': 7.25.7(@babel/core@7.25.7)
-      '@pmmmwh/react-refresh-webpack-plugin': 0.5.17(@types/webpack@4.41.40)(react-refresh@0.14.2)(type-fest@4.41.0)(webpack-dev-server@4.15.2)(webpack-hot-middleware@2.26.1)(webpack@5.97.1)
+      '@pmmmwh/react-refresh-webpack-plugin': 0.5.17(@types/webpack@4.41.40)(react-refresh@0.14.2)(type-fest@4.41.0)(webpack-dev-server@4.15.2(webpack@5.97.1(@swc/core@1.15.24)))(webpack-hot-middleware@2.26.1)(webpack@5.97.1(@swc/core@1.15.24))
       '@storybook/core-webpack': 7.6.19(encoding@0.1.13)
       '@storybook/docs-tools': 7.6.19(encoding@0.1.13)
       '@storybook/node-logger': 7.6.19
@@ -28827,7 +28373,7 @@ snapshots:
     dependencies:
       '@babel/preset-flow': 7.27.1(@babel/core@7.25.7)
       '@babel/preset-react': 7.25.7(@babel/core@7.25.7)
-      '@pmmmwh/react-refresh-webpack-plugin': 0.5.17(@types/webpack@4.41.40)(react-refresh@0.14.2)(type-fest@4.41.0)(webpack-dev-server@4.15.2)(webpack-hot-middleware@2.26.1)(webpack@5.97.1)
+      '@pmmmwh/react-refresh-webpack-plugin': 0.5.17(@types/webpack@4.41.40)(react-refresh@0.14.2)(type-fest@4.41.0)(webpack-dev-server@4.15.2(webpack@5.97.1(@swc/core@1.15.24)))(webpack-hot-middleware@2.26.1)(webpack@5.97.1(@swc/core@1.15.24))
       '@storybook/core-webpack': 7.6.19(encoding@0.1.13)
       '@storybook/docs-tools': 7.6.19(encoding@0.1.13)
       '@storybook/node-logger': 7.6.19
@@ -29245,7 +28791,7 @@ snapshots:
       fs-extra: 9.1.0
       global: 4.4.0
       isomorphic-unfetch: 3.1.0(encoding@0.1.13)
-      nanoid: 3.3.11
+      nanoid: 3.3.18
       read-pkg-up: 7.0.1
       regenerator-runtime: 0.13.11
     transitivePeerDependencies:
@@ -29564,7 +29110,7 @@ snapshots:
   '@testing-library/dom@10.4.1':
     dependencies:
       '@babel/code-frame': 7.29.0
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@types/aria-query': 5.0.4
       aria-query: 5.3.0
       dom-accessibility-api: 0.5.16
@@ -29575,7 +29121,7 @@ snapshots:
   '@testing-library/dom@8.11.3':
     dependencies:
       '@babel/code-frame': 7.29.0
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@types/aria-query': 4.2.2
       aria-query: 5.3.2
       chalk: 4.1.2
@@ -29586,7 +29132,7 @@ snapshots:
   '@testing-library/dom@9.3.3':
     dependencies:
       '@babel/code-frame': 7.29.0
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@types/aria-query': 5.0.4
       aria-query: 5.1.3
       chalk: 4.1.2
@@ -29597,7 +29143,7 @@ snapshots:
   '@testing-library/jest-dom@6.4.5(@jest/globals@29.7.0)(@types/jest@29.5.14)(jest@29.5.0(@types/node@24.12.2)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))':
     dependencies:
       '@adobe/css-tools': 4.4.4
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       aria-query: 5.3.2
       chalk: 3.0.0
       css.escape: 1.5.1
@@ -29611,7 +29157,7 @@ snapshots:

   '@testing-library/react-hooks@7.0.2(react-dom@18.3.1(react@18.3.1))(react-test-renderer@18.3.1(react@18.3.1))(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@types/react': 18.3.28
       '@types/react-dom': 18.3.7(@types/react@18.3.28)
       '@types/react-test-renderer': 19.1.0
@@ -29623,7 +29169,7 @@ snapshots:

   '@testing-library/react@15.0.7(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@testing-library/dom': 10.4.1
       '@types/react-dom': 18.3.7(@types/react@18.3.28)
       react: 18.3.1
@@ -29633,7 +29179,7 @@ snapshots:

   '@testing-library/react@16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@testing-library/dom': 10.4.1
       react: 18.3.1
       react-dom: 18.3.1(react@18.3.1)
@@ -29643,7 +29189,7 @@ snapshots:

   '@testing-library/react@16.3.2(@testing-library/dom@8.11.3)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@testing-library/dom': 8.11.3
       react: 18.3.1
       react-dom: 18.3.1(react@18.3.1)
@@ -29653,12 +29199,12 @@ snapshots:

   '@testing-library/user-event@13.5.0(@testing-library/dom@10.4.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@testing-library/dom': 10.4.1

   '@testing-library/user-event@13.5.0(@testing-library/dom@8.11.3)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@testing-library/dom': 8.11.3

   '@testing-library/user-event@14.5.2(@testing-library/dom@9.3.3)':
@@ -30178,21 +29724,24 @@ snapshots:
       - react-dom
       - supports-color

-  '@types/wordpress__edit-post@8.4.2(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)':
+  '@types/wordpress__edit-post@8.4.2(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)':
     dependencies:
       '@types/react': 18.3.28
       '@wordpress/components': 28.13.0(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@wordpress/data': 10.33.1(@types/react@18.3.28)(react@18.3.1)
-      '@wordpress/editor': 14.33.11(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
+      '@wordpress/editor': 14.33.11(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
       '@wordpress/element': 6.45.0
     transitivePeerDependencies:
       - '@date-fns/tz'
       - '@emotion/is-prop-valid'
       - '@types/react-dom'
+      - esbuild
+      - postcss
       - react
       - react-dom
       - stylelint
       - supports-color
+      - vite

   '@types/wordpress__viewport@5.5.3(react@18.3.1)':
     dependencies:
@@ -30615,35 +30164,46 @@ snapshots:

   '@wolfy1339/lru-cache@11.0.2-patch.1': {}

-  '@woocommerce/settings@1.0.0':
-    dependencies:
-      '@babel/runtime-corejs2': 7.5.5
-
   '@wordpress/a11y@3.58.0':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@wordpress/dom-ready': 3.58.0
       '@wordpress/i18n': 4.58.0

   '@wordpress/a11y@4.33.1':
     dependencies:
-      '@wordpress/dom-ready': 4.48.1
-      '@wordpress/i18n': 6.21.1
+      '@wordpress/dom-ready': 4.50.0
+      '@wordpress/i18n': 6.23.0

   '@wordpress/a11y@4.45.0':
     dependencies:
-      '@wordpress/dom-ready': 4.48.1
+      '@wordpress/dom-ready': 4.50.0
       '@wordpress/i18n': 6.23.0

-  '@wordpress/a11y@4.48.1':
+  '@wordpress/a11y@4.50.0':
     dependencies:
-      '@wordpress/dom-ready': 4.48.1
+      '@wordpress/dom-ready': 4.50.0
       '@wordpress/i18n': 6.23.0

-  '@wordpress/a11y@4.50.0':
+  '@wordpress/admin-ui@1.12.0(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)':
     dependencies:
-      '@wordpress/dom-ready': 4.50.0
+      '@wordpress/base-styles': 6.20.0
+      '@wordpress/components': 32.6.0(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+      '@wordpress/element': 6.45.0
       '@wordpress/i18n': 6.23.0
+      '@wordpress/private-apis': 1.48.1
+      '@wordpress/route': 0.10.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+      '@wordpress/ui': 0.11.0(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
+      clsx: 2.1.1
+      react: 18.3.1
+    transitivePeerDependencies:
+      - '@date-fns/tz'
+      - '@emotion/is-prop-valid'
+      - '@types/react'
+      - date-fns
+      - react-dom
+      - stylelint
+      - supports-color

   '@wordpress/admin-ui@1.12.0(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)':
     dependencies:
@@ -30665,47 +30225,55 @@ snapshots:
       - stylelint
       - supports-color

-  '@wordpress/admin-ui@2.3.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)':
+  '@wordpress/admin-ui@2.4.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(date-fns@3.6.0)(esbuild@0.18.20)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))':
     dependencies:
-      '@types/react': 18.3.28
-      '@wordpress/components': 35.0.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
+      '@wordpress/components': 36.1.0(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(esbuild@0.18.20)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
       '@wordpress/element': 8.2.0
       '@wordpress/i18n': 6.23.0
       '@wordpress/private-apis': 1.48.1
-      '@wordpress/route': 0.14.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
-      '@wordpress/style-runtime': 0.4.1
-      '@wordpress/ui': 0.15.1(@date-fns/tz@1.4.1)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
+      '@wordpress/route': 0.15.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+      '@wordpress/style-runtime': 0.5.0
+      '@wordpress/ui': 0.16.1(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@3.6.0)(esbuild@0.18.20)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
       clsx: 2.1.1
       react: 18.3.1
+    optionalDependencies:
+      '@types/react': 18.3.28
     transitivePeerDependencies:
       - '@date-fns/tz'
       - '@emotion/is-prop-valid'
       - date-fns
+      - esbuild
+      - postcss
       - react-dom
       - stylelint
       - supports-color
+      - vite

-  '@wordpress/admin-ui@2.3.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))':
+  '@wordpress/admin-ui@2.4.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(date-fns@3.6.0)(esbuild@0.24.2)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))':
     dependencies:
-      '@types/react': 18.3.28
-      '@wordpress/components': 35.0.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
+      '@wordpress/components': 36.1.0(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(esbuild@0.24.2)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
       '@wordpress/element': 8.2.0
       '@wordpress/i18n': 6.23.0
       '@wordpress/private-apis': 1.48.1
-      '@wordpress/route': 0.14.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
-      '@wordpress/style-runtime': 0.4.1
-      '@wordpress/ui': 0.15.1(@date-fns/tz@1.4.1)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
+      '@wordpress/route': 0.15.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+      '@wordpress/style-runtime': 0.5.0
+      '@wordpress/ui': 0.16.1(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@3.6.0)(esbuild@0.24.2)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
       clsx: 2.1.1
       react: 18.3.1
+    optionalDependencies:
+      '@types/react': 18.3.28
     transitivePeerDependencies:
       - '@date-fns/tz'
       - '@emotion/is-prop-valid'
       - date-fns
+      - esbuild
+      - postcss
       - react-dom
       - stylelint
       - supports-color
+      - vite

-  '@wordpress/admin-ui@2.4.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(date-fns@4.1.0)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)':
+  '@wordpress/admin-ui@2.4.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(date-fns@3.6.0)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)':
     dependencies:
       '@wordpress/components': 36.1.0(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
       '@wordpress/element': 8.2.0
@@ -30713,7 +30281,7 @@ snapshots:
       '@wordpress/private-apis': 1.48.1
       '@wordpress/route': 0.15.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@wordpress/style-runtime': 0.5.0
-      '@wordpress/ui': 0.16.1(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@4.1.0)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
+      '@wordpress/ui': 0.16.1(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@3.6.0)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
       clsx: 2.1.1
       react: 18.3.1
     optionalDependencies:
@@ -30731,7 +30299,7 @@ snapshots:

   '@wordpress/admin-ui@2.4.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(date-fns@4.1.0)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))':
     dependencies:
-      '@wordpress/components': 36.1.0(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
+      '@wordpress/components': 36.1.0(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(esbuild@0.18.20)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
       '@wordpress/element': 8.2.0
       '@wordpress/i18n': 6.23.0
       '@wordpress/private-apis': 1.48.1
@@ -30755,13 +30323,13 @@ snapshots:

   '@wordpress/api-fetch@6.55.0':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@wordpress/i18n': 4.58.0
       '@wordpress/url': 3.59.0

   '@wordpress/api-fetch@7.33.1':
     dependencies:
-      '@wordpress/i18n': 6.21.1
+      '@wordpress/i18n': 6.23.0
       '@wordpress/url': 4.48.1

   '@wordpress/api-fetch@7.48.1':
@@ -30772,11 +30340,11 @@ snapshots:

   '@wordpress/autop@3.16.0':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2

   '@wordpress/autop@3.58.0':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2

   '@wordpress/autop@4.48.1': {}

@@ -30789,7 +30357,7 @@ snapshots:
       '@babel/preset-env': 7.25.7(@babel/core@7.25.7)
       '@babel/preset-typescript': 7.25.7(@babel/core@7.25.7)
       '@wordpress/browserslist-config': 6.43.1-next.v.202604091042.0
-      '@wordpress/warning': 3.48.1
+      '@wordpress/warning': 3.51.0
       browserslist: 4.28.2
       core-js: 3.49.0
       react: 18.3.1
@@ -30828,7 +30396,7 @@ snapshots:

   '@wordpress/blob@3.58.0':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2

   '@wordpress/blob@4.33.1': {}

@@ -30836,7 +30404,7 @@ snapshots:

   '@wordpress/block-editor@12.26.0(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@emotion/react': 11.14.0(@types/react@18.3.28)(react@18.3.1)
       '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@18.3.28)(react@18.3.1))(@types/react@18.3.28)(react@18.3.1)
       '@react-spring/web': 9.7.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@@ -30893,7 +30461,7 @@ snapshots:
     dependencies:
       '@react-spring/web': 9.7.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@types/react': 18.3.28
-      '@wordpress/a11y': 4.48.1
+      '@wordpress/a11y': 4.50.0
       '@wordpress/base-styles': 10.2.0
       '@wordpress/blob': 4.48.1
       '@wordpress/block-serialization-default-parser': 5.48.1
@@ -30907,10 +30475,10 @@ snapshots:
       '@wordpress/deprecated': 4.50.0
       '@wordpress/dom': 4.50.0
       '@wordpress/element': 8.2.0
-      '@wordpress/escape-html': 3.48.1
+      '@wordpress/escape-html': 3.50.0
       '@wordpress/global-styles-engine': 1.15.1(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/hooks': 4.50.0
-      '@wordpress/html-entities': 4.48.1
+      '@wordpress/html-entities': 4.50.0
       '@wordpress/i18n': 6.23.0
       '@wordpress/icons': 14.0.1(react@18.3.1)
       '@wordpress/image-cropper': 1.12.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
@@ -30922,7 +30490,7 @@ snapshots:
       '@wordpress/preferences': 4.48.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
       '@wordpress/priority-queue': 3.50.0
       '@wordpress/private-apis': 1.48.1
-      '@wordpress/rich-text': 7.48.1(react@18.3.1)
+      '@wordpress/rich-text': 7.50.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/style-engine': 2.48.1
       '@wordpress/token-list': 3.48.1
       '@wordpress/ui': 0.15.1(@date-fns/tz@1.4.1)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
@@ -30958,7 +30526,7 @@ snapshots:
     dependencies:
       '@react-spring/web': 9.7.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@types/react': 18.3.28
-      '@wordpress/a11y': 4.48.1
+      '@wordpress/a11y': 4.50.0
       '@wordpress/base-styles': 10.2.0
       '@wordpress/blob': 4.48.1
       '@wordpress/block-serialization-default-parser': 5.48.1
@@ -30972,10 +30540,10 @@ snapshots:
       '@wordpress/deprecated': 4.50.0
       '@wordpress/dom': 4.50.0
       '@wordpress/element': 8.2.0
-      '@wordpress/escape-html': 3.48.1
+      '@wordpress/escape-html': 3.50.0
       '@wordpress/global-styles-engine': 1.15.1(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/hooks': 4.50.0
-      '@wordpress/html-entities': 4.48.1
+      '@wordpress/html-entities': 4.50.0
       '@wordpress/i18n': 6.23.0
       '@wordpress/icons': 14.0.1(react@18.3.1)
       '@wordpress/image-cropper': 1.12.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
@@ -30987,7 +30555,7 @@ snapshots:
       '@wordpress/preferences': 4.48.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
       '@wordpress/priority-queue': 3.50.0
       '@wordpress/private-apis': 1.48.1
-      '@wordpress/rich-text': 7.48.1(react@18.3.1)
+      '@wordpress/rich-text': 7.50.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/style-engine': 2.48.1
       '@wordpress/token-list': 3.48.1
       '@wordpress/ui': 0.15.1(@date-fns/tz@1.4.1)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
@@ -31023,7 +30591,7 @@ snapshots:
     dependencies:
       '@react-spring/web': 9.7.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@types/react': 18.3.28
-      '@wordpress/a11y': 4.48.1
+      '@wordpress/a11y': 4.50.0
       '@wordpress/base-styles': 10.2.0
       '@wordpress/blob': 4.48.1
       '@wordpress/block-serialization-default-parser': 5.48.1
@@ -31037,10 +30605,10 @@ snapshots:
       '@wordpress/deprecated': 4.50.0
       '@wordpress/dom': 4.50.0
       '@wordpress/element': 8.2.0
-      '@wordpress/escape-html': 3.48.1
+      '@wordpress/escape-html': 3.50.0
       '@wordpress/global-styles-engine': 1.15.1(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/hooks': 4.50.0
-      '@wordpress/html-entities': 4.48.1
+      '@wordpress/html-entities': 4.50.0
       '@wordpress/i18n': 6.23.0
       '@wordpress/icons': 14.0.1(react@18.3.1)
       '@wordpress/image-cropper': 1.12.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
@@ -31052,7 +30620,7 @@ snapshots:
       '@wordpress/preferences': 4.48.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
       '@wordpress/priority-queue': 3.50.0
       '@wordpress/private-apis': 1.48.1
-      '@wordpress/rich-text': 7.48.1(react@18.3.1)
+      '@wordpress/rich-text': 7.50.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/style-engine': 2.48.1
       '@wordpress/token-list': 3.48.1
       '@wordpress/ui': 0.15.1(@date-fns/tz@1.4.1)(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
@@ -31088,7 +30656,7 @@ snapshots:
     dependencies:
       '@react-spring/web': 9.7.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@types/react': 18.3.28
-      '@wordpress/a11y': 4.48.1
+      '@wordpress/a11y': 4.50.0
       '@wordpress/base-styles': 10.2.0
       '@wordpress/blob': 4.48.1
       '@wordpress/block-serialization-default-parser': 5.48.1
@@ -31102,10 +30670,10 @@ snapshots:
       '@wordpress/deprecated': 4.50.0
       '@wordpress/dom': 4.50.0
       '@wordpress/element': 8.2.0
-      '@wordpress/escape-html': 3.48.1
+      '@wordpress/escape-html': 3.50.0
       '@wordpress/global-styles-engine': 1.15.1(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/hooks': 4.50.0
-      '@wordpress/html-entities': 4.48.1
+      '@wordpress/html-entities': 4.50.0
       '@wordpress/i18n': 6.23.0
       '@wordpress/icons': 14.0.1(react@18.3.1)
       '@wordpress/image-cropper': 1.12.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
@@ -31117,7 +30685,7 @@ snapshots:
       '@wordpress/preferences': 4.48.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
       '@wordpress/priority-queue': 3.50.0
       '@wordpress/private-apis': 1.48.1
-      '@wordpress/rich-text': 7.48.1(react@18.3.1)
+      '@wordpress/rich-text': 7.50.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/style-engine': 2.48.1
       '@wordpress/token-list': 3.48.1
       '@wordpress/ui': 0.15.1(@date-fns/tz@1.4.1)(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
@@ -31154,7 +30722,7 @@ snapshots:
       '@emotion/react': 11.14.0(@types/react@18.3.28)(react@18.3.1)
       '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@18.3.28)(react@18.3.1))(@types/react@18.3.28)(react@18.3.1)
       '@react-spring/web': 9.7.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
-      '@wordpress/a11y': 4.48.1
+      '@wordpress/a11y': 4.50.0
       '@wordpress/api-fetch': 7.48.1
       '@wordpress/base-styles': 6.20.0
       '@wordpress/blob': 4.48.1
@@ -31164,29 +30732,29 @@ snapshots:
       '@wordpress/components': 30.9.0(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@wordpress/compose': 7.45.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/data': 10.33.1(@types/react@18.3.28)(react@18.3.1)
-      '@wordpress/date': 5.48.1
-      '@wordpress/deprecated': 4.48.1
-      '@wordpress/dom': 4.48.1
+      '@wordpress/date': 5.50.0
+      '@wordpress/deprecated': 4.50.0
+      '@wordpress/dom': 4.50.0
       '@wordpress/element': 6.45.0
-      '@wordpress/escape-html': 3.48.1
-      '@wordpress/hooks': 4.48.1
-      '@wordpress/html-entities': 4.48.1
-      '@wordpress/i18n': 6.21.1
+      '@wordpress/escape-html': 3.50.0
+      '@wordpress/hooks': 4.50.0
+      '@wordpress/html-entities': 4.50.0
+      '@wordpress/i18n': 6.23.0
       '@wordpress/icons': 11.8.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/interactivity': 6.48.1
-      '@wordpress/is-shallow-equal': 5.48.1
+      '@wordpress/is-shallow-equal': 5.50.0
       '@wordpress/keyboard-shortcuts': 5.48.1(react@18.3.1)
-      '@wordpress/keycodes': 4.48.1
+      '@wordpress/keycodes': 4.50.0(@types/react@18.3.28)
       '@wordpress/notices': 5.33.1(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/preferences': 4.48.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
-      '@wordpress/priority-queue': 3.48.1
+      '@wordpress/priority-queue': 3.50.0
       '@wordpress/private-apis': 1.48.1
-      '@wordpress/rich-text': 7.48.1(react@18.3.1)
+      '@wordpress/rich-text': 7.50.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/style-engine': 2.48.1
       '@wordpress/token-list': 3.48.1
       '@wordpress/upload-media': 0.18.5(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
       '@wordpress/url': 4.48.1
-      '@wordpress/warning': 3.48.1
+      '@wordpress/warning': 3.51.0
       '@wordpress/wordcount': 4.48.1
       change-case: 4.1.2
       clsx: 2.1.1
@@ -31217,7 +30785,7 @@ snapshots:
       '@emotion/react': 11.14.0(@types/react@18.3.28)(react@18.3.1)
       '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@18.3.28)(react@18.3.1))(@types/react@18.3.28)(react@18.3.1)
       '@react-spring/web': 9.7.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
-      '@wordpress/a11y': 4.48.1
+      '@wordpress/a11y': 4.50.0
       '@wordpress/api-fetch': 7.48.1
       '@wordpress/base-styles': 6.20.0
       '@wordpress/blob': 4.48.1
@@ -31227,29 +30795,29 @@ snapshots:
       '@wordpress/components': 30.9.0(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@wordpress/compose': 7.45.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/data': 10.33.1(@types/react@18.3.28)(react@18.3.1)
-      '@wordpress/date': 5.48.1
-      '@wordpress/deprecated': 4.48.1
-      '@wordpress/dom': 4.48.1
+      '@wordpress/date': 5.50.0
+      '@wordpress/deprecated': 4.50.0
+      '@wordpress/dom': 4.50.0
       '@wordpress/element': 6.45.0
-      '@wordpress/escape-html': 3.48.1
-      '@wordpress/hooks': 4.48.1
-      '@wordpress/html-entities': 4.48.1
-      '@wordpress/i18n': 6.21.1
+      '@wordpress/escape-html': 3.50.0
+      '@wordpress/hooks': 4.50.0
+      '@wordpress/html-entities': 4.50.0
+      '@wordpress/i18n': 6.23.0
       '@wordpress/icons': 11.8.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/interactivity': 6.48.1
-      '@wordpress/is-shallow-equal': 5.48.1
+      '@wordpress/is-shallow-equal': 5.50.0
       '@wordpress/keyboard-shortcuts': 5.48.1(react@18.3.1)
-      '@wordpress/keycodes': 4.48.1
+      '@wordpress/keycodes': 4.50.0(@types/react@18.3.28)
       '@wordpress/notices': 5.33.1(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/preferences': 4.48.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
-      '@wordpress/priority-queue': 3.48.1
+      '@wordpress/priority-queue': 3.50.0
       '@wordpress/private-apis': 1.48.1
-      '@wordpress/rich-text': 7.48.1(react@18.3.1)
+      '@wordpress/rich-text': 7.50.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/style-engine': 2.48.1
       '@wordpress/token-list': 3.48.1
       '@wordpress/upload-media': 0.18.5(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
       '@wordpress/url': 4.48.1
-      '@wordpress/warning': 3.48.1
+      '@wordpress/warning': 3.51.0
       '@wordpress/wordcount': 4.48.1
       change-case: 4.1.2
       clsx: 2.1.1
@@ -31277,7 +30845,7 @@ snapshots:

   '@wordpress/block-library@8.35.0(@emotion/is-prop-valid@1.4.0)(@preact/signals-core@1.14.1)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@wordpress/a11y': 3.58.0
       '@wordpress/api-fetch': 6.55.0
       '@wordpress/autop': 3.58.0
@@ -31333,7 +30901,7 @@ snapshots:

   '@wordpress/block-library@9.33.10(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)':
     dependencies:
-      '@wordpress/a11y': 4.48.1
+      '@wordpress/a11y': 4.50.0
       '@wordpress/api-fetch': 7.48.1
       '@wordpress/autop': 4.48.1
       '@wordpress/base-styles': 6.20.0
@@ -31344,26 +30912,26 @@ snapshots:
       '@wordpress/compose': 7.45.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/core-data': 7.33.9(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
       '@wordpress/data': 10.33.1(@types/react@18.3.28)(react@18.3.1)
-      '@wordpress/date': 5.48.1
-      '@wordpress/deprecated': 4.48.1
-      '@wordpress/dom': 4.48.1
+      '@wordpress/date': 5.50.0
+      '@wordpress/deprecated': 4.50.0
+      '@wordpress/dom': 4.50.0
       '@wordpress/element': 6.45.0
-      '@wordpress/escape-html': 3.48.1
-      '@wordpress/hooks': 4.48.1
-      '@wordpress/html-entities': 4.48.1
-      '@wordpress/i18n': 6.21.1
+      '@wordpress/escape-html': 3.50.0
+      '@wordpress/hooks': 4.50.0
+      '@wordpress/html-entities': 4.50.0
+      '@wordpress/i18n': 6.23.0
       '@wordpress/icons': 11.8.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/interactivity': 6.48.1
       '@wordpress/interactivity-router': 2.44.0
       '@wordpress/keyboard-shortcuts': 5.48.1(react@18.3.1)
-      '@wordpress/keycodes': 4.48.1
+      '@wordpress/keycodes': 4.50.0(@types/react@18.3.28)
       '@wordpress/latex-to-mathml': 1.16.0
       '@wordpress/notices': 5.33.1(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/patterns': 2.44.0(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
-      '@wordpress/primitives': 4.48.1(react@18.3.1)
+      '@wordpress/primitives': 4.50.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/private-apis': 1.48.1
       '@wordpress/reusable-blocks': 5.44.0(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
-      '@wordpress/rich-text': 7.48.1(react@18.3.1)
+      '@wordpress/rich-text': 7.50.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/server-side-render': 6.20.0(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@wordpress/url': 4.48.1
       '@wordpress/viewport': 6.48.1(react@18.3.1)
@@ -31390,7 +30958,7 @@ snapshots:

   '@wordpress/block-library@9.33.10(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))':
     dependencies:
-      '@wordpress/a11y': 4.48.1
+      '@wordpress/a11y': 4.50.0
       '@wordpress/api-fetch': 7.48.1
       '@wordpress/autop': 4.48.1
       '@wordpress/base-styles': 6.20.0
@@ -31401,26 +30969,26 @@ snapshots:
       '@wordpress/compose': 7.45.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/core-data': 7.33.9(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
       '@wordpress/data': 10.33.1(@types/react@18.3.28)(react@18.3.1)
-      '@wordpress/date': 5.48.1
-      '@wordpress/deprecated': 4.48.1
-      '@wordpress/dom': 4.48.1
+      '@wordpress/date': 5.50.0
+      '@wordpress/deprecated': 4.50.0
+      '@wordpress/dom': 4.50.0
       '@wordpress/element': 6.45.0
-      '@wordpress/escape-html': 3.48.1
-      '@wordpress/hooks': 4.48.1
-      '@wordpress/html-entities': 4.48.1
-      '@wordpress/i18n': 6.21.1
+      '@wordpress/escape-html': 3.50.0
+      '@wordpress/hooks': 4.50.0
+      '@wordpress/html-entities': 4.50.0
+      '@wordpress/i18n': 6.23.0
       '@wordpress/icons': 11.8.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/interactivity': 6.48.1
       '@wordpress/interactivity-router': 2.44.0
       '@wordpress/keyboard-shortcuts': 5.48.1(react@18.3.1)
-      '@wordpress/keycodes': 4.48.1
+      '@wordpress/keycodes': 4.50.0(@types/react@18.3.28)
       '@wordpress/latex-to-mathml': 1.16.0
       '@wordpress/notices': 5.33.1(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/patterns': 2.44.0(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
-      '@wordpress/primitives': 4.48.1(react@18.3.1)
+      '@wordpress/primitives': 4.50.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/private-apis': 1.48.1
       '@wordpress/reusable-blocks': 5.44.0(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
-      '@wordpress/rich-text': 7.48.1(react@18.3.1)
+      '@wordpress/rich-text': 7.50.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/server-side-render': 6.20.0(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@wordpress/url': 4.48.1
       '@wordpress/viewport': 6.48.1(react@18.3.1)
@@ -31447,13 +31015,13 @@ snapshots:

   '@wordpress/block-serialization-default-parser@4.58.0':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2

   '@wordpress/block-serialization-default-parser@5.48.1': {}

   '@wordpress/blocks@12.35.0(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@wordpress/autop': 3.58.0
       '@wordpress/blob': 3.58.0
       '@wordpress/block-serialization-default-parser': 4.58.0
@@ -31493,11 +31061,11 @@ snapshots:
       '@wordpress/dom': 4.50.0
       '@wordpress/element': 8.2.0
       '@wordpress/hooks': 4.50.0
-      '@wordpress/html-entities': 4.48.1
+      '@wordpress/html-entities': 4.50.0
       '@wordpress/i18n': 6.23.0
       '@wordpress/is-shallow-equal': 5.50.0
       '@wordpress/private-apis': 1.48.1
-      '@wordpress/rich-text': 7.48.1(react@18.3.1)
+      '@wordpress/rich-text': 7.50.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/shortcode': 4.48.1
       '@wordpress/warning': 3.51.0
       change-case: 4.1.2
@@ -31519,17 +31087,17 @@ snapshots:
       '@wordpress/blob': 4.48.1
       '@wordpress/block-serialization-default-parser': 5.48.1
       '@wordpress/data': 10.33.1(@types/react@18.3.28)(react@18.3.1)
-      '@wordpress/deprecated': 4.48.1
-      '@wordpress/dom': 4.48.1
+      '@wordpress/deprecated': 4.50.0
+      '@wordpress/dom': 4.50.0
       '@wordpress/element': 6.45.0
-      '@wordpress/hooks': 4.48.1
-      '@wordpress/html-entities': 4.48.1
-      '@wordpress/i18n': 6.21.1
-      '@wordpress/is-shallow-equal': 5.48.1
+      '@wordpress/hooks': 4.50.0
+      '@wordpress/html-entities': 4.50.0
+      '@wordpress/i18n': 6.23.0
+      '@wordpress/is-shallow-equal': 5.50.0
       '@wordpress/private-apis': 1.48.1
-      '@wordpress/rich-text': 7.48.1(react@18.3.1)
+      '@wordpress/rich-text': 7.50.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/shortcode': 4.48.1
-      '@wordpress/warning': 3.48.1
+      '@wordpress/warning': 3.51.0
       change-case: 4.1.2
       colord: 2.9.3
       fast-deep-equal: 3.1.3
@@ -31551,7 +31119,7 @@ snapshots:

   '@wordpress/commands@0.29.0(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@wordpress/components': 27.6.0(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@wordpress/data': 9.28.0(react@18.3.1)
       '@wordpress/element': 5.35.0
@@ -31570,7 +31138,7 @@ snapshots:

   '@wordpress/commands@0.9.0(@babel/helper-module-imports@7.28.6)(@babel/types@7.29.0)(@types/react@18.3.28)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@wordpress/components': 25.16.0(@babel/helper-module-imports@7.28.6)(@babel/types@7.29.0)(@types/react@18.3.28)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@wordpress/data': 9.28.0(react@18.3.1)
       '@wordpress/element': 5.35.0
@@ -31597,7 +31165,7 @@ snapshots:
       '@wordpress/components': 30.9.0(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@wordpress/data': 10.33.1(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/element': 6.45.0
-      '@wordpress/i18n': 6.21.1
+      '@wordpress/i18n': 6.23.0
       '@wordpress/icons': 11.8.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/keyboard-shortcuts': 5.48.1(react@18.3.1)
       '@wordpress/private-apis': 1.48.1
@@ -31661,7 +31229,7 @@ snapshots:

   '@wordpress/components@14.2.0(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react-with-direction@1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(reakit-utils@0.15.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(redux@4.2.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@emotion/cache': 11.14.0
       '@emotion/css': 11.13.5
       '@emotion/react': 11.14.0(@types/react@18.3.28)(react@18.3.1)
@@ -31710,7 +31278,7 @@ snapshots:
   '@wordpress/components@25.16.0(@babel/helper-module-imports@7.28.6)(@babel/types@7.29.0)(@types/react@18.3.28)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
     dependencies:
       '@ariakit/react': 0.3.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@emotion/cache': 11.14.0
       '@emotion/css': 11.13.5
       '@emotion/react': 11.14.0(@types/react@18.3.28)(react@18.3.1)
@@ -31773,7 +31341,7 @@ snapshots:
   '@wordpress/components@27.6.0(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
     dependencies:
       '@ariakit/react': 0.3.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@emotion/cache': 11.14.0
       '@emotion/css': 11.13.5
       '@emotion/react': 11.14.0(@types/react@18.3.28)(react@18.3.1)
@@ -31850,7 +31418,7 @@ snapshots:
       '@wordpress/hooks': 4.50.0
       '@wordpress/html-entities': 4.50.0
       '@wordpress/i18n': 6.23.0
-      '@wordpress/icons': 10.6.0(react@18.3.1)
+      '@wordpress/icons': 15.1.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/is-shallow-equal': 5.50.0
       '@wordpress/keycodes': 4.50.0(@types/react@18.3.28)
       '@wordpress/primitives': 4.50.0(@types/react@18.3.28)(react@18.3.1)
@@ -31948,23 +31516,23 @@ snapshots:
       '@types/gradient-parser': 0.1.3
       '@types/highlight-words-core': 1.2.1
       '@use-gesture/react': 10.3.1(react@18.3.1)
-      '@wordpress/a11y': 4.48.1
+      '@wordpress/a11y': 4.50.0
       '@wordpress/compose': 7.45.0(@types/react@18.3.28)(react@18.3.1)
-      '@wordpress/date': 5.48.1
-      '@wordpress/deprecated': 4.48.1
-      '@wordpress/dom': 4.48.1
+      '@wordpress/date': 5.50.0
+      '@wordpress/deprecated': 4.50.0
+      '@wordpress/dom': 4.50.0
       '@wordpress/element': 6.45.0
       '@wordpress/escape-html': 3.45.0
-      '@wordpress/hooks': 4.48.1
-      '@wordpress/html-entities': 4.48.1
+      '@wordpress/hooks': 4.50.0
+      '@wordpress/html-entities': 4.50.0
       '@wordpress/i18n': 5.26.0
       '@wordpress/icons': 10.32.0(@types/react@18.3.28)(react@18.3.1)
-      '@wordpress/is-shallow-equal': 5.48.1
-      '@wordpress/keycodes': 4.48.1
-      '@wordpress/primitives': 4.48.1(react@18.3.1)
+      '@wordpress/is-shallow-equal': 5.50.0
+      '@wordpress/keycodes': 4.50.0(@types/react@18.3.28)
+      '@wordpress/primitives': 4.50.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/private-apis': 1.48.1
-      '@wordpress/rich-text': 7.48.1(react@18.3.1)
-      '@wordpress/warning': 3.48.1
+      '@wordpress/rich-text': 7.50.0(@types/react@18.3.28)(react@18.3.1)
+      '@wordpress/warning': 3.51.0
       change-case: 4.1.2
       clsx: 2.1.1
       colord: 2.9.3
@@ -31990,7 +31558,7 @@ snapshots:

   '@wordpress/components@30.6.5(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
     dependencies:
-      '@ariakit/react': 0.4.25(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+      '@ariakit/react': 0.4.32(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@emotion/cache': 11.14.0
       '@emotion/css': 11.13.5
       '@emotion/react': 11.14.0(@types/react@18.3.28)(react@18.3.1)
@@ -32001,24 +31569,24 @@ snapshots:
       '@types/gradient-parser': 1.1.0
       '@types/highlight-words-core': 1.2.1
       '@use-gesture/react': 10.3.1(react@18.3.1)
-      '@wordpress/a11y': 4.48.1
+      '@wordpress/a11y': 4.50.0
       '@wordpress/base-styles': 6.20.0
       '@wordpress/compose': 7.45.0(@types/react@18.3.28)(react@18.3.1)
-      '@wordpress/date': 5.48.1
-      '@wordpress/deprecated': 4.48.1
-      '@wordpress/dom': 4.48.1
+      '@wordpress/date': 5.50.0
+      '@wordpress/deprecated': 4.50.0
+      '@wordpress/dom': 4.50.0
       '@wordpress/element': 6.45.0
-      '@wordpress/escape-html': 3.48.1
-      '@wordpress/hooks': 4.48.1
-      '@wordpress/html-entities': 4.48.1
-      '@wordpress/i18n': 6.21.1
+      '@wordpress/escape-html': 3.50.0
+      '@wordpress/hooks': 4.50.0
+      '@wordpress/html-entities': 4.50.0
+      '@wordpress/i18n': 6.23.0
       '@wordpress/icons': 11.8.0(@types/react@18.3.28)(react@18.3.1)
-      '@wordpress/is-shallow-equal': 5.48.1
-      '@wordpress/keycodes': 4.48.1
-      '@wordpress/primitives': 4.48.1(react@18.3.1)
+      '@wordpress/is-shallow-equal': 5.50.0
+      '@wordpress/keycodes': 4.50.0(@types/react@18.3.28)
+      '@wordpress/primitives': 4.50.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/private-apis': 1.48.1
-      '@wordpress/rich-text': 7.48.1(react@18.3.1)
-      '@wordpress/warning': 3.48.1
+      '@wordpress/rich-text': 7.50.0(@types/react@18.3.28)(react@18.3.1)
+      '@wordpress/warning': 3.51.0
       change-case: 4.1.2
       clsx: 2.1.1
       colord: 2.9.3
@@ -32057,7 +31625,7 @@ snapshots:
       '@types/gradient-parser': 1.1.0
       '@types/highlight-words-core': 1.2.1
       '@use-gesture/react': 10.3.1(react@18.3.1)
-      '@wordpress/a11y': 4.48.1
+      '@wordpress/a11y': 4.50.0
       '@wordpress/base-styles': 6.20.0
       '@wordpress/compose': 7.45.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/date': 5.50.0
@@ -32066,14 +31634,14 @@ snapshots:
       '@wordpress/element': 6.45.0
       '@wordpress/escape-html': 3.48.1
       '@wordpress/hooks': 4.50.0
-      '@wordpress/html-entities': 4.48.1
+      '@wordpress/html-entities': 4.50.0
       '@wordpress/i18n': 6.23.0
       '@wordpress/icons': 11.8.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/is-shallow-equal': 5.50.0
       '@wordpress/keycodes': 4.50.0(@types/react@18.3.28)
       '@wordpress/primitives': 4.50.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/private-apis': 1.48.1
-      '@wordpress/rich-text': 7.48.1(react@18.3.1)
+      '@wordpress/rich-text': 7.50.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/warning': 3.51.0
       change-case: 4.1.2
       clsx: 2.1.1
@@ -32335,7 +31903,7 @@ snapshots:
       - stylelint
       - supports-color

-  '@wordpress/components@36.1.0(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)':
+  '@wordpress/components@36.1.0(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(esbuild@0.18.20)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))':
     dependencies:
       '@ariakit/react': 0.4.32(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@date-fns/utc': 2.1.1
@@ -32367,7 +31935,7 @@ snapshots:
       '@wordpress/private-apis': 1.48.1
       '@wordpress/rich-text': 7.50.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/style-runtime': 0.6.0
-      '@wordpress/ui': 0.17.0(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@4.1.0)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
+      '@wordpress/ui': 0.17.0(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@4.1.0)(esbuild@0.18.20)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
       '@wordpress/warning': 3.51.0
       change-case: 4.1.2
       clsx: 2.1.1
@@ -32400,7 +31968,7 @@ snapshots:
       - supports-color
       - vite

-  '@wordpress/components@36.1.0(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))':
+  '@wordpress/components@36.1.0(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(esbuild@0.24.2)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))':
     dependencies:
       '@ariakit/react': 0.4.32(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@date-fns/utc': 2.1.1
@@ -32432,7 +32000,72 @@ snapshots:
       '@wordpress/private-apis': 1.48.1
       '@wordpress/rich-text': 7.50.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/style-runtime': 0.6.0
-      '@wordpress/ui': 0.17.0(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@4.1.0)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
+      '@wordpress/ui': 0.17.0(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@4.1.0)(esbuild@0.24.2)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
+      '@wordpress/warning': 3.51.0
+      change-case: 4.1.2
+      clsx: 2.1.1
+      colord: 2.9.3
+      csstype: 3.2.3
+      date-fns: 4.1.0
+      deepmerge: 4.3.1
+      fast-deep-equal: 3.1.3
+      framer-motion: 11.18.2(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+      gradient-parser: 1.1.1
+      highlight-words-core: 1.2.3
+      is-plain-object: 5.0.0
+      memize: 2.1.1
+      path-to-regexp: 6.3.0
+      re-resizable: 6.11.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+      react: 18.3.1
+      react-colorful: 5.6.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+      react-day-picker: 9.14.0(react@18.3.1)
+      react-dom: 18.3.1(react@18.3.1)
+      remove-accents: 0.5.0
+      uuid: 14.0.0
+    optionalDependencies:
+      '@types/react': 18.3.28
+    transitivePeerDependencies:
+      - '@date-fns/tz'
+      - '@emotion/is-prop-valid'
+      - esbuild
+      - postcss
+      - stylelint
+      - supports-color
+      - vite
+
+  '@wordpress/components@36.1.0(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)':
+    dependencies:
+      '@ariakit/react': 0.4.32(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+      '@date-fns/utc': 2.1.1
+      '@emotion/cache': 11.14.0
+      '@emotion/css': 11.13.5
+      '@emotion/react': 11.14.0(@types/react@18.3.28)(react@18.3.1)
+      '@emotion/serialize': 1.3.3
+      '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@18.3.28)(react@18.3.1))(@types/react@18.3.28)(react@18.3.1)
+      '@emotion/utils': 1.4.2
+      '@floating-ui/react-dom': 2.1.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+      '@types/gradient-parser': 1.1.0
+      '@types/highlight-words-core': 1.2.1
+      '@use-gesture/react': 10.3.1(react@18.3.1)
+      '@wordpress/a11y': 4.50.0
+      '@wordpress/base-styles': 10.2.0
+      '@wordpress/compose': 8.3.0(@types/react@18.3.28)(react@18.3.1)
+      '@wordpress/date': 5.50.0
+      '@wordpress/deprecated': 4.50.0
+      '@wordpress/dom': 4.50.0
+      '@wordpress/element': 8.2.0
+      '@wordpress/escape-html': 3.50.0
+      '@wordpress/hooks': 4.50.0
+      '@wordpress/html-entities': 4.50.0
+      '@wordpress/i18n': 6.23.0
+      '@wordpress/icons': 15.1.0(@types/react@18.3.28)(react@18.3.1)
+      '@wordpress/is-shallow-equal': 5.50.0
+      '@wordpress/keycodes': 4.50.0(@types/react@18.3.28)
+      '@wordpress/primitives': 4.50.0(@types/react@18.3.28)(react@18.3.1)
+      '@wordpress/private-apis': 1.48.1
+      '@wordpress/rich-text': 7.50.0(@types/react@18.3.28)(react@18.3.1)
+      '@wordpress/style-runtime': 0.6.0
+      '@wordpress/ui': 0.17.0(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@4.1.0)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
       '@wordpress/warning': 3.51.0
       change-case: 4.1.2
       clsx: 2.1.1
@@ -32467,7 +32100,7 @@ snapshots:

   '@wordpress/compose@4.2.0(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@types/lodash': 4.14.149
       '@types/mousetrap': 1.6.15
       '@wordpress/deprecated': 3.58.0
@@ -32486,7 +32119,7 @@ snapshots:

   '@wordpress/compose@6.35.0(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@types/mousetrap': 1.6.15
       '@wordpress/deprecated': 3.58.0
       '@wordpress/dom': 3.58.0
@@ -32520,21 +32153,23 @@ snapshots:
     transitivePeerDependencies:
       - '@types/react'

-  '@wordpress/compose@7.33.1(react@18.3.1)':
+  '@wordpress/compose@7.33.1(@types/react@18.3.28)(react@18.3.1)':
     dependencies:
       '@types/mousetrap': 1.6.15
-      '@wordpress/deprecated': 4.48.1
-      '@wordpress/dom': 4.48.1
+      '@wordpress/deprecated': 4.50.0
+      '@wordpress/dom': 4.50.0
       '@wordpress/element': 6.45.0
-      '@wordpress/is-shallow-equal': 5.48.1
-      '@wordpress/keycodes': 4.48.1
-      '@wordpress/priority-queue': 3.48.1
-      '@wordpress/undo-manager': 1.48.1
+      '@wordpress/is-shallow-equal': 5.50.0
+      '@wordpress/keycodes': 4.50.0(@types/react@18.3.28)
+      '@wordpress/priority-queue': 3.50.0
+      '@wordpress/undo-manager': 1.50.0
       change-case: 4.1.2
       clipboard: 2.0.11
       mousetrap: 1.6.5
       react: 18.3.1
       use-memo-one: 1.1.3(react@18.3.1)
+    transitivePeerDependencies:
+      - '@types/react'

   '@wordpress/compose@7.45.0(@types/react@18.3.28)(react@18.3.1)':
     dependencies:
@@ -32573,7 +32208,7 @@ snapshots:

   '@wordpress/core-commands@0.7.0(@babel/helper-module-imports@7.28.6)(@babel/types@7.29.0)(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@wordpress/commands': 0.9.0(@babel/helper-module-imports@7.28.6)(@babel/types@7.29.0)(@types/react@18.3.28)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@wordpress/core-data': 6.35.0(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@wordpress/data': 9.28.0(react@18.3.1)
@@ -32599,7 +32234,7 @@ snapshots:

   '@wordpress/core-data@6.35.0(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@wordpress/api-fetch': 6.55.0
       '@wordpress/block-editor': 12.26.0(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@wordpress/blocks': 12.35.0(react@18.3.1)
@@ -32636,17 +32271,17 @@ snapshots:
       '@wordpress/blocks': 15.21.1(react@18.3.1)
       '@wordpress/compose': 7.45.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/data': 10.33.1(@types/react@18.3.28)(react@18.3.1)
-      '@wordpress/deprecated': 4.48.1
+      '@wordpress/deprecated': 4.50.0
       '@wordpress/element': 6.45.0
-      '@wordpress/html-entities': 4.48.1
-      '@wordpress/i18n': 6.21.1
-      '@wordpress/is-shallow-equal': 5.48.1
+      '@wordpress/html-entities': 4.50.0
+      '@wordpress/i18n': 6.23.0
+      '@wordpress/is-shallow-equal': 5.50.0
       '@wordpress/private-apis': 1.48.1
-      '@wordpress/rich-text': 7.48.1(react@18.3.1)
+      '@wordpress/rich-text': 7.50.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/sync': 1.48.1
-      '@wordpress/undo-manager': 1.48.1
+      '@wordpress/undo-manager': 1.50.0
       '@wordpress/url': 4.48.1
-      '@wordpress/warning': 3.48.1
+      '@wordpress/warning': 3.51.0
       change-case: 4.1.2
       equivalent-key-map: 0.2.2
       fast-deep-equal: 3.1.3
@@ -32670,17 +32305,17 @@ snapshots:
       '@wordpress/blocks': 15.21.1(react@18.3.1)
       '@wordpress/compose': 7.45.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/data': 10.33.1(@types/react@18.3.28)(react@18.3.1)
-      '@wordpress/deprecated': 4.48.1
+      '@wordpress/deprecated': 4.50.0
       '@wordpress/element': 6.45.0
-      '@wordpress/html-entities': 4.48.1
-      '@wordpress/i18n': 6.21.1
-      '@wordpress/is-shallow-equal': 5.48.1
+      '@wordpress/html-entities': 4.50.0
+      '@wordpress/i18n': 6.23.0
+      '@wordpress/is-shallow-equal': 5.50.0
       '@wordpress/private-apis': 1.48.1
-      '@wordpress/rich-text': 7.48.1(react@18.3.1)
+      '@wordpress/rich-text': 7.50.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/sync': 1.48.1
-      '@wordpress/undo-manager': 1.48.1
+      '@wordpress/undo-manager': 1.50.0
       '@wordpress/url': 4.48.1
-      '@wordpress/warning': 3.48.1
+      '@wordpress/warning': 3.51.0
       change-case: 4.1.2
       equivalent-key-map: 0.2.2
       fast-deep-equal: 3.1.3
@@ -32704,17 +32339,17 @@ snapshots:
       '@wordpress/blocks': 15.21.1(react@18.3.1)
       '@wordpress/compose': 7.45.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/data': 10.33.1(@types/react@18.3.28)(react@18.3.1)
-      '@wordpress/deprecated': 4.48.1
+      '@wordpress/deprecated': 4.50.0
       '@wordpress/element': 6.45.0
-      '@wordpress/html-entities': 4.48.1
-      '@wordpress/i18n': 6.21.1
-      '@wordpress/is-shallow-equal': 5.48.1
+      '@wordpress/html-entities': 4.50.0
+      '@wordpress/i18n': 6.23.0
+      '@wordpress/is-shallow-equal': 5.50.0
       '@wordpress/private-apis': 1.48.1
-      '@wordpress/rich-text': 7.48.1(react@18.3.1)
+      '@wordpress/rich-text': 7.50.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/sync': 1.48.1
-      '@wordpress/undo-manager': 1.48.1
+      '@wordpress/undo-manager': 1.50.0
       '@wordpress/url': 4.48.1
-      '@wordpress/warning': 3.48.1
+      '@wordpress/warning': 3.51.0
       change-case: 4.1.2
       equivalent-key-map: 0.2.2
       fast-deep-equal: 3.1.3
@@ -32738,17 +32373,17 @@ snapshots:
       '@wordpress/blocks': 15.21.1(react@18.3.1)
       '@wordpress/compose': 7.45.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/data': 10.33.1(@types/react@18.3.28)(react@18.3.1)
-      '@wordpress/deprecated': 4.48.1
+      '@wordpress/deprecated': 4.50.0
       '@wordpress/element': 6.45.0
-      '@wordpress/html-entities': 4.48.1
-      '@wordpress/i18n': 6.21.1
-      '@wordpress/is-shallow-equal': 5.48.1
+      '@wordpress/html-entities': 4.50.0
+      '@wordpress/i18n': 6.23.0
+      '@wordpress/is-shallow-equal': 5.50.0
       '@wordpress/private-apis': 1.48.1
-      '@wordpress/rich-text': 7.48.1(react@18.3.1)
+      '@wordpress/rich-text': 7.50.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/sync': 1.48.1
-      '@wordpress/undo-manager': 1.48.1
+      '@wordpress/undo-manager': 1.50.0
       '@wordpress/url': 4.48.1
-      '@wordpress/warning': 3.48.1
+      '@wordpress/warning': 3.51.0
       change-case: 4.1.2
       equivalent-key-map: 0.2.2
       fast-deep-equal: 3.1.3
@@ -32905,7 +32540,7 @@ snapshots:
     dependencies:
       '@wordpress/api-fetch': 7.33.1
       '@wordpress/data': 10.33.1(@types/react@18.3.28)(react@18.3.1)
-      '@wordpress/deprecated': 4.48.1
+      '@wordpress/deprecated': 4.50.0
       react: 18.3.1
     transitivePeerDependencies:
       - '@types/react'
@@ -32913,12 +32548,12 @@ snapshots:
   '@wordpress/data@10.33.1(@types/react@18.3.28)(react@18.3.1)':
     dependencies:
       '@wordpress/compose': 7.45.0(@types/react@18.3.28)(react@18.3.1)
-      '@wordpress/deprecated': 4.48.1
+      '@wordpress/deprecated': 4.50.0
       '@wordpress/element': 6.45.0
-      '@wordpress/is-shallow-equal': 5.48.1
-      '@wordpress/priority-queue': 3.48.1
+      '@wordpress/is-shallow-equal': 5.50.0
+      '@wordpress/priority-queue': 3.50.0
       '@wordpress/private-apis': 1.48.1
-      '@wordpress/redux-routine': 5.48.1(redux@5.0.1)
+      '@wordpress/redux-routine': 5.50.0(redux@5.0.1)
       deepmerge: 4.3.1
       equivalent-key-map: 0.2.2
       is-plain-object: 5.0.0
@@ -32931,34 +32566,14 @@ snapshots:
       - '@types/react'

   '@wordpress/data@10.44.0(@types/react@18.3.28)(react@18.3.1)':
-    dependencies:
-      '@wordpress/compose': 7.45.0(@types/react@18.3.28)(react@18.3.1)
-      '@wordpress/deprecated': 4.48.1
-      '@wordpress/element': 6.45.0
-      '@wordpress/is-shallow-equal': 5.48.1
-      '@wordpress/priority-queue': 3.48.1
-      '@wordpress/private-apis': 1.48.1
-      '@wordpress/redux-routine': 5.48.1(redux@5.0.1)
-      deepmerge: 4.3.1
-      equivalent-key-map: 0.2.2
-      is-plain-object: 5.0.0
-      is-promise: 4.0.0
-      react: 18.3.1
-      redux: 5.0.1
-      rememo: 4.0.2
-      use-memo-one: 1.1.3(react@18.3.1)
-    transitivePeerDependencies:
-      - '@types/react'
-
-  '@wordpress/data@10.45.0(@types/react@18.3.28)(react@18.3.1)':
     dependencies:
       '@wordpress/compose': 7.45.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/deprecated': 4.50.0
       '@wordpress/element': 6.45.0
       '@wordpress/is-shallow-equal': 5.50.0
-      '@wordpress/priority-queue': 3.50.0
+      '@wordpress/priority-queue': 3.48.1
       '@wordpress/private-apis': 1.48.1
-      '@wordpress/redux-routine': 5.50.0(redux@5.0.1)
+      '@wordpress/redux-routine': 5.48.1(redux@5.0.1)
       deepmerge: 4.3.1
       equivalent-key-map: 0.2.2
       is-plain-object: 5.0.0
@@ -33011,7 +32626,7 @@ snapshots:

   '@wordpress/data@5.2.0(react@18.3.1)(redux@4.2.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@wordpress/compose': 4.2.0(react@18.3.1)
       '@wordpress/deprecated': 3.58.0
       '@wordpress/element': 3.2.0
@@ -33030,7 +32645,7 @@ snapshots:

   '@wordpress/data@9.28.0(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@wordpress/compose': 6.35.0(react@18.3.1)
       '@wordpress/deprecated': 3.58.0
       '@wordpress/element': 5.35.0
@@ -33049,20 +32664,20 @@ snapshots:

   '@wordpress/dataviews@10.1.7(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
     dependencies:
-      '@ariakit/react': 0.4.25(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+      '@ariakit/react': 0.4.32(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@wordpress/base-styles': 6.20.0
       '@wordpress/components': 30.9.0(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@wordpress/compose': 7.45.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/data': 10.33.1(@types/react@18.3.28)(react@18.3.1)
-      '@wordpress/date': 5.48.1
+      '@wordpress/date': 5.50.0
       '@wordpress/element': 6.45.0
-      '@wordpress/i18n': 6.21.1
+      '@wordpress/i18n': 6.23.0
       '@wordpress/icons': 11.8.0(@types/react@18.3.28)(react@18.3.1)
-      '@wordpress/keycodes': 4.48.1
-      '@wordpress/primitives': 4.48.1(react@18.3.1)
+      '@wordpress/keycodes': 4.50.0(@types/react@18.3.28)
+      '@wordpress/primitives': 4.50.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/private-apis': 1.48.1
       '@wordpress/url': 4.48.1
-      '@wordpress/warning': 3.48.1
+      '@wordpress/warning': 3.51.0
       clsx: 2.1.1
       colord: 2.9.3
       date-fns: 4.1.0
@@ -33238,7 +32853,7 @@ snapshots:
     dependencies:
       '@ariakit/react': 0.4.32(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@wordpress/base-styles': 10.2.0
-      '@wordpress/components': 36.1.0(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
+      '@wordpress/components': 36.1.0(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(esbuild@0.18.20)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
       '@wordpress/compose': 8.3.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/data': 10.50.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/date': 5.50.0
@@ -33249,7 +32864,7 @@ snapshots:
       '@wordpress/keycodes': 4.50.0(@types/react@18.3.28)
       '@wordpress/primitives': 4.50.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/private-apis': 1.48.1
-      '@wordpress/ui': 0.17.0(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@4.1.0)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
+      '@wordpress/ui': 0.17.0(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@4.1.0)(esbuild@0.18.20)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
       '@wordpress/warning': 3.51.0
       clsx: 2.1.1
       colord: 2.9.3
@@ -33270,40 +32885,9 @@ snapshots:
       - supports-color
       - vite

-  '@wordpress/dataviews@https://github.com/gigitux/gutenberg/releases/download/%40wordpress%2Fdataviews-hierarchy/wordpress-dataviews-14.2.0.tgz(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))':
-    dependencies:
-      '@ariakit/react': 0.4.25(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
-      '@wordpress/components': 33.0.0(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
-      '@wordpress/compose': 7.45.0(@types/react@18.3.28)(react@18.3.1)
-      '@wordpress/data': 10.45.0(@types/react@18.3.28)(react@18.3.1)
-      '@wordpress/date': 5.45.0
-      '@wordpress/deprecated': 4.45.0
-      '@wordpress/element': 6.45.0
-      '@wordpress/i18n': 6.18.0
-      '@wordpress/icons': 13.0.0(@types/react@18.3.28)(react@18.3.1)
-      '@wordpress/keycodes': 4.45.0
-      '@wordpress/primitives': 4.45.0(react@18.3.1)
-      '@wordpress/private-apis': 1.48.1
-      '@wordpress/ui': 0.12.0(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
-      '@wordpress/warning': 3.45.0
-      clsx: 2.1.1
-      colord: 2.9.3
-      date-fns: 4.1.0
-      deepmerge: 4.3.1
-      fast-deep-equal: 3.1.3
-      react: 18.3.1
-      react-dom: 18.3.1(react@18.3.1)
-      remove-accents: 0.5.0
-    transitivePeerDependencies:
-      - '@date-fns/tz'
-      - '@emotion/is-prop-valid'
-      - '@types/react'
-      - stylelint
-      - supports-color
-
   '@wordpress/date@4.58.0':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@wordpress/deprecated': 3.58.0
       moment: 2.30.1
       moment-timezone: 0.5.48
@@ -33316,18 +32900,6 @@ snapshots:
       moment-timezone: 0.5.48

   '@wordpress/date@5.33.1':
-    dependencies:
-      '@wordpress/deprecated': 4.48.1
-      moment: 2.30.1
-      moment-timezone: 0.5.48
-
-  '@wordpress/date@5.45.0':
-    dependencies:
-      '@wordpress/deprecated': 4.50.0
-      moment: 2.30.1
-      moment-timezone: 0.5.48
-
-  '@wordpress/date@5.48.1':
     dependencies:
       '@wordpress/deprecated': 4.50.0
       moment: 2.30.1
@@ -33351,18 +32923,10 @@ snapshots:

   '@wordpress/deprecated@3.58.0':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@wordpress/hooks': 3.58.0

   '@wordpress/deprecated@4.33.1':
-    dependencies:
-      '@wordpress/hooks': 4.48.1
-
-  '@wordpress/deprecated@4.45.0':
-    dependencies:
-      '@wordpress/hooks': 4.50.0
-
-  '@wordpress/deprecated@4.48.1':
     dependencies:
       '@wordpress/hooks': 4.50.0

@@ -33372,24 +32936,18 @@ snapshots:

   '@wordpress/dom-ready@3.58.0':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2

   '@wordpress/dom-ready@4.33.1': {}

-  '@wordpress/dom-ready@4.48.1': {}
-
   '@wordpress/dom-ready@4.50.0': {}

   '@wordpress/dom@3.58.0':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@wordpress/deprecated': 3.58.0

   '@wordpress/dom@4.33.1':
-    dependencies:
-      '@wordpress/deprecated': 4.48.1
-
-  '@wordpress/dom@4.48.1':
     dependencies:
       '@wordpress/deprecated': 4.50.0

@@ -33401,7 +32959,7 @@ snapshots:
     dependencies:
       '@playwright/test': 1.61.1
       change-case: 4.1.2
-      form-data: 4.0.5
+      form-data: 4.0.6
       get-port: 5.1.1
       lighthouse: 12.8.2
       mime: 3.0.0
@@ -33433,7 +32991,7 @@ snapshots:

   '@wordpress/edit-site@5.15.0(patch_hash=63381743e38412fb89154386a5d169639ca10f8315407527829db669201fce9b)(@babel/helper-module-imports@7.28.6)(@babel/types@7.29.0)(@emotion/is-prop-valid@1.4.0)(@preact/signals-core@1.14.1)(@types/react@18.3.28)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@wordpress/a11y': 3.58.0
       '@wordpress/api-fetch': 6.55.0
       '@wordpress/block-editor': 12.26.0(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@@ -33500,7 +33058,7 @@ snapshots:

   '@wordpress/editor@13.35.0(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@wordpress/a11y': 3.58.0
       '@wordpress/api-fetch': 6.55.0
       '@wordpress/blob': 3.58.0
@@ -33550,44 +33108,44 @@ snapshots:
       - supports-color
       - utf-8-validate

-  '@wordpress/editor@14.33.11(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)':
+  '@wordpress/editor@14.33.11(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(esbuild@0.18.20)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))':
     dependencies:
       '@floating-ui/react-dom': 2.0.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
-      '@wordpress/a11y': 4.48.1
+      '@wordpress/a11y': 4.50.0
       '@wordpress/api-fetch': 7.48.1
       '@wordpress/base-styles': 6.20.0
       '@wordpress/blob': 4.48.1
-      '@wordpress/block-editor': 15.21.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
+      '@wordpress/block-editor': 15.21.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
       '@wordpress/blocks': 15.21.1(react@18.3.1)
-      '@wordpress/commands': 1.48.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
+      '@wordpress/commands': 1.48.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
       '@wordpress/components': 30.9.0(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@wordpress/compose': 7.45.0(@types/react@18.3.28)(react@18.3.1)
-      '@wordpress/core-data': 7.33.9(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
+      '@wordpress/core-data': 7.33.9(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
       '@wordpress/data': 10.33.1(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/dataviews': 10.3.0(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
-      '@wordpress/date': 5.48.1
-      '@wordpress/deprecated': 4.48.1
-      '@wordpress/dom': 4.48.1
+      '@wordpress/date': 5.50.0
+      '@wordpress/deprecated': 4.50.0
+      '@wordpress/dom': 4.50.0
       '@wordpress/element': 6.45.0
-      '@wordpress/fields': 0.25.11(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
-      '@wordpress/hooks': 4.48.1
-      '@wordpress/html-entities': 4.48.1
-      '@wordpress/i18n': 6.21.1
+      '@wordpress/fields': 0.25.11(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
+      '@wordpress/hooks': 4.50.0
+      '@wordpress/html-entities': 4.50.0
+      '@wordpress/i18n': 6.23.0
       '@wordpress/icons': 11.8.0(@types/react@18.3.28)(react@18.3.1)
-      '@wordpress/interface': 9.33.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
+      '@wordpress/interface': 9.33.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(date-fns@3.6.0)(esbuild@0.18.20)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
       '@wordpress/keyboard-shortcuts': 5.48.1(react@18.3.1)
-      '@wordpress/keycodes': 4.48.1
-      '@wordpress/media-utils': 5.44.0(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
+      '@wordpress/keycodes': 4.50.0(@types/react@18.3.28)
+      '@wordpress/media-utils': 5.44.0(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
       '@wordpress/notices': 5.33.1(@types/react@18.3.28)(react@18.3.1)
-      '@wordpress/patterns': 2.44.0(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
-      '@wordpress/plugins': 7.48.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
-      '@wordpress/preferences': 4.48.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
+      '@wordpress/patterns': 2.44.0(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
+      '@wordpress/plugins': 7.48.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
+      '@wordpress/preferences': 4.48.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
       '@wordpress/private-apis': 1.48.1
-      '@wordpress/reusable-blocks': 5.44.0(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
-      '@wordpress/rich-text': 7.48.1(react@18.3.1)
+      '@wordpress/reusable-blocks': 5.44.0(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
+      '@wordpress/rich-text': 7.50.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/server-side-render': 6.20.0(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@wordpress/url': 4.48.1
-      '@wordpress/warning': 3.48.1
+      '@wordpress/warning': 3.51.0
       '@wordpress/wordcount': 4.48.1
       change-case: 4.1.2
       client-zip: 2.5.0
@@ -33607,47 +33165,50 @@ snapshots:
       - '@emotion/is-prop-valid'
       - '@types/react'
       - '@types/react-dom'
+      - esbuild
+      - postcss
       - stylelint
       - supports-color
+      - vite

-  '@wordpress/editor@14.33.11(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))':
+  '@wordpress/editor@14.33.11(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)':
     dependencies:
       '@floating-ui/react-dom': 2.0.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
-      '@wordpress/a11y': 4.48.1
+      '@wordpress/a11y': 4.50.0
       '@wordpress/api-fetch': 7.48.1
       '@wordpress/base-styles': 6.20.0
       '@wordpress/blob': 4.48.1
-      '@wordpress/block-editor': 15.21.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
+      '@wordpress/block-editor': 15.21.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
       '@wordpress/blocks': 15.21.1(react@18.3.1)
-      '@wordpress/commands': 1.48.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
+      '@wordpress/commands': 1.48.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
       '@wordpress/components': 30.9.0(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@wordpress/compose': 7.45.0(@types/react@18.3.28)(react@18.3.1)
-      '@wordpress/core-data': 7.33.9(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
+      '@wordpress/core-data': 7.33.9(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
       '@wordpress/data': 10.33.1(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/dataviews': 10.3.0(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
-      '@wordpress/date': 5.48.1
-      '@wordpress/deprecated': 4.48.1
-      '@wordpress/dom': 4.48.1
+      '@wordpress/date': 5.50.0
+      '@wordpress/deprecated': 4.50.0
+      '@wordpress/dom': 4.50.0
       '@wordpress/element': 6.45.0
-      '@wordpress/fields': 0.25.11(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
-      '@wordpress/hooks': 4.48.1
-      '@wordpress/html-entities': 4.48.1
-      '@wordpress/i18n': 6.21.1
+      '@wordpress/fields': 0.25.11(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
+      '@wordpress/hooks': 4.50.0
+      '@wordpress/html-entities': 4.50.0
+      '@wordpress/i18n': 6.23.0
       '@wordpress/icons': 11.8.0(@types/react@18.3.28)(react@18.3.1)
-      '@wordpress/interface': 9.33.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
+      '@wordpress/interface': 9.33.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(date-fns@3.6.0)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
       '@wordpress/keyboard-shortcuts': 5.48.1(react@18.3.1)
-      '@wordpress/keycodes': 4.48.1
-      '@wordpress/media-utils': 5.44.0(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
+      '@wordpress/keycodes': 4.50.0(@types/react@18.3.28)
+      '@wordpress/media-utils': 5.44.0(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
       '@wordpress/notices': 5.33.1(@types/react@18.3.28)(react@18.3.1)
-      '@wordpress/patterns': 2.44.0(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
-      '@wordpress/plugins': 7.48.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
-      '@wordpress/preferences': 4.48.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
+      '@wordpress/patterns': 2.44.0(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
+      '@wordpress/plugins': 7.48.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
+      '@wordpress/preferences': 4.48.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
       '@wordpress/private-apis': 1.48.1
-      '@wordpress/reusable-blocks': 5.44.0(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
-      '@wordpress/rich-text': 7.48.1(react@18.3.1)
+      '@wordpress/reusable-blocks': 5.44.0(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
+      '@wordpress/rich-text': 7.50.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/server-side-render': 6.20.0(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@wordpress/url': 4.48.1
-      '@wordpress/warning': 3.48.1
+      '@wordpress/warning': 3.51.0
       '@wordpress/wordcount': 4.48.1
       change-case: 4.1.2
       client-zip: 2.5.0
@@ -33667,13 +33228,16 @@ snapshots:
       - '@emotion/is-prop-valid'
       - '@types/react'
       - '@types/react-dom'
+      - esbuild
+      - postcss
       - stylelint
       - supports-color
+      - vite

-  '@wordpress/editor@14.33.11(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))':
+  '@wordpress/editor@14.33.11(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(esbuild@0.24.2)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))':
     dependencies:
       '@floating-ui/react-dom': 2.0.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
-      '@wordpress/a11y': 4.48.1
+      '@wordpress/a11y': 4.50.0
       '@wordpress/api-fetch': 7.48.1
       '@wordpress/base-styles': 6.20.0
       '@wordpress/blob': 4.48.1
@@ -33685,18 +33249,18 @@ snapshots:
       '@wordpress/core-data': 7.33.9(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
       '@wordpress/data': 10.33.1(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/dataviews': 10.3.0(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
-      '@wordpress/date': 5.48.1
-      '@wordpress/deprecated': 4.48.1
-      '@wordpress/dom': 4.48.1
+      '@wordpress/date': 5.50.0
+      '@wordpress/deprecated': 4.50.0
+      '@wordpress/dom': 4.50.0
       '@wordpress/element': 6.45.0
       '@wordpress/fields': 0.25.11(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
-      '@wordpress/hooks': 4.48.1
-      '@wordpress/html-entities': 4.48.1
-      '@wordpress/i18n': 6.21.1
+      '@wordpress/hooks': 4.50.0
+      '@wordpress/html-entities': 4.50.0
+      '@wordpress/i18n': 6.23.0
       '@wordpress/icons': 11.8.0(@types/react@18.3.28)(react@18.3.1)
-      '@wordpress/interface': 9.33.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
+      '@wordpress/interface': 9.33.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(date-fns@3.6.0)(esbuild@0.24.2)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
       '@wordpress/keyboard-shortcuts': 5.48.1(react@18.3.1)
-      '@wordpress/keycodes': 4.48.1
+      '@wordpress/keycodes': 4.50.0(@types/react@18.3.28)
       '@wordpress/media-utils': 5.44.0(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
       '@wordpress/notices': 5.33.1(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/patterns': 2.44.0(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
@@ -33704,10 +33268,10 @@ snapshots:
       '@wordpress/preferences': 4.48.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
       '@wordpress/private-apis': 1.48.1
       '@wordpress/reusable-blocks': 5.44.0(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
-      '@wordpress/rich-text': 7.48.1(react@18.3.1)
+      '@wordpress/rich-text': 7.50.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/server-side-render': 6.20.0(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@wordpress/url': 4.48.1
-      '@wordpress/warning': 3.48.1
+      '@wordpress/warning': 3.51.0
       '@wordpress/wordcount': 4.48.1
       change-case: 4.1.2
       client-zip: 2.5.0
@@ -33727,12 +33291,15 @@ snapshots:
       - '@emotion/is-prop-valid'
       - '@types/react'
       - '@types/react-dom'
+      - esbuild
+      - postcss
       - stylelint
       - supports-color
+      - vite

   '@wordpress/element@3.2.0':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@types/react': 18.3.28
       '@types/react-dom': 16.9.25(@types/react@18.3.28)
       '@wordpress/escape-html': 2.58.0
@@ -33742,7 +33309,7 @@ snapshots:

   '@wordpress/element@5.35.0':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@types/react': 18.3.28
       '@types/react-dom': 18.3.7(@types/react@18.3.28)
       '@wordpress/escape-html': 2.58.0
@@ -33755,7 +33322,7 @@ snapshots:
     dependencies:
       '@types/react': 18.3.28
       '@types/react-dom': 18.3.7(@types/react@18.3.28)
-      '@wordpress/escape-html': 3.48.1
+      '@wordpress/escape-html': 3.50.0
       change-case: 4.1.2
       is-plain-object: 5.0.0
       react: 18.3.1
@@ -33771,17 +33338,6 @@ snapshots:
       react: 18.3.1
       react-dom: 18.3.1(react@18.3.1)

-  '@wordpress/element@8.0.1':
-    dependencies:
-      '@types/react': 18.3.28
-      '@types/react-dom': 18.3.7(@types/react@18.3.28)
-      '@wordpress/deprecated': 4.50.0
-      '@wordpress/escape-html': 3.50.0
-      change-case: 4.1.2
-      is-plain-object: 5.0.0
-      react: 18.3.1
-      react-dom: 18.3.1(react@18.3.1)
-
   '@wordpress/element@8.2.0':
     dependencies:
       '@types/react': 18.3.28
@@ -33816,7 +33372,7 @@ snapshots:

   '@wordpress/escape-html@2.58.0':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2

   '@wordpress/escape-html@3.45.0': {}

@@ -33832,7 +33388,7 @@ snapshots:
       '@eslint/compat': 2.1.0(eslint@10.7.0(jiti@2.6.1))
       '@wordpress/babel-preset-default': 8.51.0
       '@wordpress/prettier-config': 4.51.0(wp-prettier@3.0.3)
-      '@wordpress/theme': 0.17.0(@types/react@18.3.28)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
+      '@wordpress/theme': 0.17.0(@types/react@18.3.28)(esbuild@0.18.20)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
       cosmiconfig: 7.1.0
       eslint: 10.7.0(jiti@2.6.1)
       eslint-config-prettier: 10.1.8(eslint@10.7.0(jiti@2.6.1))
@@ -33918,7 +33474,7 @@ snapshots:
       '@eslint/compat': 2.1.0(eslint@10.7.0(jiti@2.6.1))
       '@wordpress/babel-preset-default': 8.51.0
       '@wordpress/prettier-config': 4.51.0(wp-prettier@3.0.3)
-      '@wordpress/theme': 0.17.0(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
+      '@wordpress/theme': 0.17.0(@types/react@18.3.28)(esbuild@0.24.2)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
       cosmiconfig: 7.1.0
       eslint: 10.7.0(jiti@2.6.1)
       eslint-config-prettier: 10.1.8(eslint@10.7.0(jiti@2.6.1))
@@ -33968,7 +33524,7 @@ snapshots:
       '@wordpress/date': 5.50.0
       '@wordpress/element': 6.45.0
       '@wordpress/hooks': 4.50.0
-      '@wordpress/html-entities': 4.48.1
+      '@wordpress/html-entities': 4.50.0
       '@wordpress/i18n': 6.23.0
       '@wordpress/icons': 11.8.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/media-utils': 5.44.0(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
@@ -34009,7 +33565,7 @@ snapshots:
       '@wordpress/date': 5.50.0
       '@wordpress/element': 6.45.0
       '@wordpress/hooks': 4.50.0
-      '@wordpress/html-entities': 4.48.1
+      '@wordpress/html-entities': 4.50.0
       '@wordpress/i18n': 6.23.0
       '@wordpress/icons': 11.8.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/media-utils': 5.44.0(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
@@ -34050,7 +33606,7 @@ snapshots:
       '@wordpress/date': 5.50.0
       '@wordpress/element': 6.45.0
       '@wordpress/hooks': 4.50.0
-      '@wordpress/html-entities': 4.48.1
+      '@wordpress/html-entities': 4.50.0
       '@wordpress/i18n': 6.23.0
       '@wordpress/icons': 11.8.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/media-utils': 5.44.0(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
@@ -34078,18 +33634,18 @@ snapshots:

   '@wordpress/format-library@5.33.9(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)':
     dependencies:
-      '@wordpress/a11y': 4.48.1
+      '@wordpress/a11y': 4.50.0
       '@wordpress/block-editor': 15.21.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
       '@wordpress/components': 30.9.0(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@wordpress/compose': 7.45.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/data': 10.33.1(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/element': 6.45.0
-      '@wordpress/html-entities': 4.48.1
-      '@wordpress/i18n': 6.21.1
+      '@wordpress/html-entities': 4.50.0
+      '@wordpress/i18n': 6.23.0
       '@wordpress/icons': 11.8.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/latex-to-mathml': 1.16.0
       '@wordpress/private-apis': 1.48.1
-      '@wordpress/rich-text': 7.48.1(react@18.3.1)
+      '@wordpress/rich-text': 7.50.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/url': 4.48.1
       react: 18.3.1
       react-dom: 18.3.1(react@18.3.1)
@@ -34104,18 +33660,18 @@ snapshots:

   '@wordpress/format-library@5.33.9(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))':
     dependencies:
-      '@wordpress/a11y': 4.48.1
+      '@wordpress/a11y': 4.50.0
       '@wordpress/block-editor': 15.21.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
       '@wordpress/components': 30.9.0(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@wordpress/compose': 7.45.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/data': 10.33.1(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/element': 6.45.0
-      '@wordpress/html-entities': 4.48.1
-      '@wordpress/i18n': 6.21.1
+      '@wordpress/html-entities': 4.50.0
+      '@wordpress/i18n': 6.23.0
       '@wordpress/icons': 11.8.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/latex-to-mathml': 1.16.0
       '@wordpress/private-apis': 1.48.1
-      '@wordpress/rich-text': 7.48.1(react@18.3.1)
+      '@wordpress/rich-text': 7.50.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/url': 4.48.1
       react: 18.3.1
       react-dom: 18.3.1(react@18.3.1)
@@ -34128,11 +33684,11 @@ snapshots:
       - stylelint
       - supports-color

-  '@wordpress/global-styles-engine@1.11.0(react@18.3.1)':
+  '@wordpress/global-styles-engine@1.11.0(@types/react@18.3.28)(react@18.3.1)':
     dependencies:
       '@wordpress/blocks': 15.21.1(react@18.3.1)
-      '@wordpress/data': 10.48.1(react@18.3.1)
-      '@wordpress/i18n': 6.21.1
+      '@wordpress/data': 10.50.0(@types/react@18.3.28)(react@18.3.1)
+      '@wordpress/i18n': 6.23.0
       '@wordpress/style-engine': 2.44.0
       colord: 2.9.3
       deepmerge: 4.3.1
@@ -34140,6 +33696,7 @@ snapshots:
       is-plain-object: 5.0.0
       memize: 2.1.1
     transitivePeerDependencies:
+      - '@types/react'
       - react

   '@wordpress/global-styles-engine@1.15.1(@types/react@18.3.28)(react@18.3.1)':
@@ -34159,17 +33716,15 @@ snapshots:

   '@wordpress/hooks@3.58.0':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2

   '@wordpress/hooks@4.33.1': {}

-  '@wordpress/hooks@4.48.1': {}
-
   '@wordpress/hooks@4.50.0': {}

   '@wordpress/html-entities@3.58.0':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2

   '@wordpress/html-entities@4.20.0':
     dependencies:
@@ -34177,13 +33732,11 @@ snapshots:

   '@wordpress/html-entities@4.33.1': {}

-  '@wordpress/html-entities@4.48.1': {}
-
   '@wordpress/html-entities@4.50.0': {}

   '@wordpress/i18n@4.58.0':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@wordpress/hooks': 3.58.0
       gettext-parser: 1.4.0
       memize: 2.1.1
@@ -34199,22 +33752,6 @@ snapshots:
       sprintf-js: 1.1.3
       tannin: 1.2.0

-  '@wordpress/i18n@6.18.0':
-    dependencies:
-      '@tannin/sprintf': 1.3.3
-      '@wordpress/hooks': 4.50.0
-      gettext-parser: 1.4.0
-      memize: 2.1.1
-      tannin: 1.2.0
-
-  '@wordpress/i18n@6.21.1':
-    dependencies:
-      '@tannin/sprintf': 1.3.3
-      '@wordpress/hooks': 4.50.0
-      gettext-parser: 1.4.0
-      memize: 2.1.1
-      tannin: 1.2.0
-
   '@wordpress/i18n@6.23.0':
     dependencies:
       '@tannin/sprintf': 1.3.3
@@ -34226,7 +33763,7 @@ snapshots:
   '@wordpress/i18n@6.6.1':
     dependencies:
       '@tannin/sprintf': 1.3.3
-      '@wordpress/hooks': 4.48.1
+      '@wordpress/hooks': 4.50.0
       gettext-parser: 1.4.0
       memize: 2.1.1
       tannin: 1.2.0
@@ -34240,19 +33777,12 @@ snapshots:
       - '@types/react'
       - react

-  '@wordpress/icons@10.6.0(react@18.3.1)':
+  '@wordpress/icons@11.0.1(@types/react@18.3.28)(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
       '@wordpress/element': 6.45.0
-      '@wordpress/primitives': 4.48.1(react@18.3.1)
-    transitivePeerDependencies:
-      - react
-
-  '@wordpress/icons@11.0.1(react@18.3.1)':
-    dependencies:
-      '@wordpress/element': 6.45.0
-      '@wordpress/primitives': 4.48.1(react@18.3.1)
+      '@wordpress/primitives': 4.50.0(@types/react@18.3.28)(react@18.3.1)
     transitivePeerDependencies:
+      - '@types/react'
       - react

   '@wordpress/icons@11.8.0(@types/react@18.3.28)(react@18.3.1)':
@@ -34273,15 +33803,6 @@ snapshots:
     transitivePeerDependencies:
       - '@types/react'

-  '@wordpress/icons@13.0.0(@types/react@18.3.28)(react@18.3.1)':
-    dependencies:
-      '@wordpress/element': 6.45.0
-      '@wordpress/primitives': 4.50.0(@types/react@18.3.28)(react@18.3.1)
-      change-case: 4.1.2
-      react: 18.3.1
-    transitivePeerDependencies:
-      - '@types/react'
-
   '@wordpress/icons@13.3.0(@types/react@18.3.28)(react@18.3.1)':
     dependencies:
       '@wordpress/element': 8.2.0
@@ -34310,13 +33831,13 @@ snapshots:

   '@wordpress/icons@4.1.0':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@wordpress/element': 3.2.0
       '@wordpress/primitives': 2.2.0

   '@wordpress/icons@9.49.0':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@wordpress/element': 5.35.0
       '@wordpress/primitives': 3.56.0

@@ -34363,7 +33884,7 @@ snapshots:

   '@wordpress/interactivity-router@2.33.3':
     dependencies:
-      '@wordpress/a11y': 4.48.1
+      '@wordpress/a11y': 4.50.0
       '@wordpress/interactivity': 6.48.1
       es-module-lexer: 1.7.0

@@ -34394,7 +33915,7 @@ snapshots:

   '@wordpress/interface@5.35.0(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@wordpress/a11y': 3.58.0
       '@wordpress/components': 27.6.0(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@wordpress/compose': 6.35.0(react@18.3.1)
@@ -34415,16 +33936,41 @@ snapshots:
       - '@types/react'
       - supports-color

+  '@wordpress/interface@9.18.5(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)':
+    dependencies:
+      '@wordpress/a11y': 4.50.0
+      '@wordpress/admin-ui': 1.12.0(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
+      '@wordpress/components': 30.9.0(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+      '@wordpress/compose': 7.45.0(@types/react@18.3.28)(react@18.3.1)
+      '@wordpress/data': 10.33.1(@types/react@18.3.28)(react@18.3.1)
+      '@wordpress/deprecated': 4.50.0
+      '@wordpress/element': 6.45.0
+      '@wordpress/i18n': 6.23.0
+      '@wordpress/icons': 11.8.0(@types/react@18.3.28)(react@18.3.1)
+      '@wordpress/plugins': 7.48.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
+      '@wordpress/preferences': 4.48.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
+      '@wordpress/viewport': 6.48.1(react@18.3.1)
+      clsx: 2.1.1
+      react: 18.3.1
+      react-dom: 18.3.1(react@18.3.1)
+    transitivePeerDependencies:
+      - '@date-fns/tz'
+      - '@emotion/is-prop-valid'
+      - '@types/react'
+      - date-fns
+      - stylelint
+      - supports-color
+
   '@wordpress/interface@9.18.5(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)':
     dependencies:
-      '@wordpress/a11y': 4.48.1
+      '@wordpress/a11y': 4.50.0
       '@wordpress/admin-ui': 1.12.0(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
       '@wordpress/components': 30.9.0(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@wordpress/compose': 7.45.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/data': 10.33.1(@types/react@18.3.28)(react@18.3.1)
-      '@wordpress/deprecated': 4.48.1
+      '@wordpress/deprecated': 4.50.0
       '@wordpress/element': 6.45.0
-      '@wordpress/i18n': 6.21.1
+      '@wordpress/i18n': 6.23.0
       '@wordpress/icons': 11.8.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/plugins': 7.48.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
       '@wordpress/preferences': 4.48.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
@@ -34440,20 +33986,20 @@ snapshots:
       - stylelint
       - supports-color

-  '@wordpress/interface@9.33.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)':
+  '@wordpress/interface@9.33.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(date-fns@3.6.0)(esbuild@0.18.20)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))':
     dependencies:
-      '@wordpress/a11y': 4.48.1
-      '@wordpress/admin-ui': 2.3.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
+      '@wordpress/a11y': 4.50.0
+      '@wordpress/admin-ui': 2.4.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(date-fns@3.6.0)(esbuild@0.18.20)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
       '@wordpress/base-styles': 10.2.0
-      '@wordpress/components': 35.0.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
+      '@wordpress/components': 35.0.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
       '@wordpress/compose': 8.3.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/data': 10.50.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/deprecated': 4.50.0
       '@wordpress/element': 8.2.0
       '@wordpress/i18n': 6.23.0
       '@wordpress/icons': 14.0.1(react@18.3.1)
-      '@wordpress/plugins': 7.48.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
-      '@wordpress/preferences': 4.48.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
+      '@wordpress/plugins': 7.48.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
+      '@wordpress/preferences': 4.48.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
       '@wordpress/viewport': 6.48.1(react@18.3.1)
       clsx: 2.1.1
       react: 18.3.1
@@ -34463,13 +34009,16 @@ snapshots:
       - '@emotion/is-prop-valid'
       - '@types/react'
       - date-fns
+      - esbuild
+      - postcss
       - stylelint
       - supports-color
+      - vite

-  '@wordpress/interface@9.33.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))':
+  '@wordpress/interface@9.33.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(date-fns@3.6.0)(esbuild@0.24.2)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))':
     dependencies:
-      '@wordpress/a11y': 4.48.1
-      '@wordpress/admin-ui': 2.3.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
+      '@wordpress/a11y': 4.50.0
+      '@wordpress/admin-ui': 2.4.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(date-fns@3.6.0)(esbuild@0.24.2)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
       '@wordpress/base-styles': 10.2.0
       '@wordpress/components': 35.0.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
       '@wordpress/compose': 8.3.0(@types/react@18.3.28)(react@18.3.1)
@@ -34489,22 +34038,52 @@ snapshots:
       - '@emotion/is-prop-valid'
       - '@types/react'
       - date-fns
+      - esbuild
+      - postcss
       - stylelint
       - supports-color
+      - vite
+
+  '@wordpress/interface@9.33.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(date-fns@3.6.0)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)':
+    dependencies:
+      '@wordpress/a11y': 4.50.0
+      '@wordpress/admin-ui': 2.4.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(date-fns@3.6.0)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
+      '@wordpress/base-styles': 10.2.0
+      '@wordpress/components': 35.0.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
+      '@wordpress/compose': 8.3.0(@types/react@18.3.28)(react@18.3.1)
+      '@wordpress/data': 10.50.0(@types/react@18.3.28)(react@18.3.1)
+      '@wordpress/deprecated': 4.50.0
+      '@wordpress/element': 8.2.0
+      '@wordpress/i18n': 6.23.0
+      '@wordpress/icons': 14.0.1(react@18.3.1)
+      '@wordpress/plugins': 7.48.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
+      '@wordpress/preferences': 4.48.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
+      '@wordpress/viewport': 6.48.1(react@18.3.1)
+      clsx: 2.1.1
+      react: 18.3.1
+      react-dom: 18.3.1(react@18.3.1)
+    transitivePeerDependencies:
+      - '@date-fns/tz'
+      - '@emotion/is-prop-valid'
+      - '@types/react'
+      - date-fns
+      - esbuild
+      - postcss
+      - stylelint
+      - supports-color
+      - vite

   '@wordpress/is-shallow-equal@4.58.0':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2

   '@wordpress/is-shallow-equal@5.33.1': {}

-  '@wordpress/is-shallow-equal@5.48.1': {}
-
   '@wordpress/is-shallow-equal@5.50.0': {}

   '@wordpress/jest-console@5.4.0(jest@29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3)))':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       jest: 29.5.0(@types/node@24.12.2)(babel-plugin-macros@3.1.0)(node-notifier@8.0.2)(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3))
       jest-matcher-utils: 27.5.1

@@ -34541,7 +34120,7 @@ snapshots:

   '@wordpress/keyboard-shortcuts@4.35.0(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@wordpress/data': 9.28.0(react@18.3.1)
       '@wordpress/element': 5.35.0
       '@wordpress/keycodes': 3.58.0
@@ -34551,7 +34130,7 @@ snapshots:
     dependencies:
       '@wordpress/data': 10.33.1(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/element': 6.45.0
-      '@wordpress/keycodes': 4.48.1
+      '@wordpress/keycodes': 4.50.0(@types/react@18.3.28)
       react: 18.3.1
     transitivePeerDependencies:
       - '@types/react'
@@ -34566,14 +34145,10 @@ snapshots:

   '@wordpress/keycodes@3.58.0':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@wordpress/i18n': 4.58.0

   '@wordpress/keycodes@4.33.1':
-    dependencies:
-      '@wordpress/i18n': 6.21.1
-
-  '@wordpress/keycodes@4.45.0':
     dependencies:
       '@wordpress/i18n': 6.23.0

@@ -34646,7 +34221,7 @@ snapshots:

   '@wordpress/media-utils@4.49.0':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@wordpress/api-fetch': 6.55.0
       '@wordpress/blob': 3.58.0
       '@wordpress/element': 5.35.0
@@ -34657,7 +34232,7 @@ snapshots:
       '@wordpress/api-fetch': 7.48.1
       '@wordpress/blob': 4.48.1
       '@wordpress/element': 6.45.0
-      '@wordpress/i18n': 6.21.1
+      '@wordpress/i18n': 6.23.0
       '@wordpress/private-apis': 1.48.1

   '@wordpress/media-utils@5.44.0(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)':
@@ -34749,7 +34324,7 @@ snapshots:

   '@wordpress/notices@4.26.0(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@wordpress/a11y': 3.58.0
       '@wordpress/data': 9.28.0(react@18.3.1)
       react: 18.3.1
@@ -34798,7 +34373,7 @@ snapshots:

   '@wordpress/patterns@1.19.0(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@wordpress/a11y': 3.58.0
       '@wordpress/block-editor': 12.26.0(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@wordpress/blocks': 12.35.0(react@18.3.1)
@@ -34824,7 +34399,7 @@ snapshots:

   '@wordpress/patterns@2.33.9(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))':
     dependencies:
-      '@wordpress/a11y': 4.48.1
+      '@wordpress/a11y': 4.50.0
       '@wordpress/base-styles': 6.20.0
       '@wordpress/block-editor': 15.21.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
       '@wordpress/blocks': 15.21.1(react@18.3.1)
@@ -34833,8 +34408,8 @@ snapshots:
       '@wordpress/core-data': 7.33.9(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
       '@wordpress/data': 10.33.1(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/element': 6.45.0
-      '@wordpress/html-entities': 4.48.1
-      '@wordpress/i18n': 6.21.1
+      '@wordpress/html-entities': 4.50.0
+      '@wordpress/i18n': 6.23.0
       '@wordpress/icons': 11.8.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/notices': 5.33.1(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/private-apis': 1.48.1
@@ -34852,7 +34427,7 @@ snapshots:

   '@wordpress/patterns@2.44.0(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)':
     dependencies:
-      '@wordpress/a11y': 4.48.1
+      '@wordpress/a11y': 4.50.0
       '@wordpress/base-styles': 6.20.0
       '@wordpress/block-editor': 15.21.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
       '@wordpress/blocks': 15.21.1(react@18.3.1)
@@ -34861,7 +34436,7 @@ snapshots:
       '@wordpress/core-data': 7.48.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
       '@wordpress/data': 10.50.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/element': 6.45.0
-      '@wordpress/html-entities': 4.48.1
+      '@wordpress/html-entities': 4.50.0
       '@wordpress/i18n': 6.23.0
       '@wordpress/icons': 12.2.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/notices': 5.48.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
@@ -34880,7 +34455,7 @@ snapshots:

   '@wordpress/patterns@2.44.0(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))':
     dependencies:
-      '@wordpress/a11y': 4.48.1
+      '@wordpress/a11y': 4.50.0
       '@wordpress/base-styles': 6.20.0
       '@wordpress/block-editor': 15.21.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
       '@wordpress/blocks': 15.21.1(react@18.3.1)
@@ -34889,7 +34464,7 @@ snapshots:
       '@wordpress/core-data': 7.48.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
       '@wordpress/data': 10.50.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/element': 6.45.0
-      '@wordpress/html-entities': 4.48.1
+      '@wordpress/html-entities': 4.50.0
       '@wordpress/i18n': 6.23.0
       '@wordpress/icons': 12.2.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/notices': 5.48.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
@@ -34908,7 +34483,7 @@ snapshots:

   '@wordpress/patterns@2.44.0(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)':
     dependencies:
-      '@wordpress/a11y': 4.48.1
+      '@wordpress/a11y': 4.50.0
       '@wordpress/base-styles': 6.20.0
       '@wordpress/block-editor': 15.21.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
       '@wordpress/blocks': 15.21.1(react@18.3.1)
@@ -34917,7 +34492,7 @@ snapshots:
       '@wordpress/core-data': 7.48.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
       '@wordpress/data': 10.50.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/element': 6.45.0
-      '@wordpress/html-entities': 4.48.1
+      '@wordpress/html-entities': 4.50.0
       '@wordpress/i18n': 6.23.0
       '@wordpress/icons': 12.2.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/notices': 5.48.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
@@ -34936,7 +34511,7 @@ snapshots:

   '@wordpress/patterns@2.44.0(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))':
     dependencies:
-      '@wordpress/a11y': 4.48.1
+      '@wordpress/a11y': 4.50.0
       '@wordpress/base-styles': 6.20.0
       '@wordpress/block-editor': 15.21.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
       '@wordpress/blocks': 15.21.1(react@18.3.1)
@@ -34945,7 +34520,7 @@ snapshots:
       '@wordpress/core-data': 7.48.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@18.3.7(@types/react@18.3.28))(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
       '@wordpress/data': 10.50.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/element': 6.45.0
-      '@wordpress/html-entities': 4.48.1
+      '@wordpress/html-entities': 4.50.0
       '@wordpress/i18n': 6.23.0
       '@wordpress/icons': 12.2.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/notices': 5.48.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
@@ -34964,7 +34539,7 @@ snapshots:

   '@wordpress/plugins@6.26.0(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@wordpress/components': 27.6.0(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@wordpress/compose': 6.35.0(react@18.3.1)
       '@wordpress/element': 5.35.0
@@ -34983,11 +34558,11 @@ snapshots:
     dependencies:
       '@wordpress/components': 30.9.0(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@wordpress/compose': 7.45.0(@types/react@18.3.28)(react@18.3.1)
-      '@wordpress/deprecated': 4.48.1
+      '@wordpress/deprecated': 4.50.0
       '@wordpress/element': 6.45.0
-      '@wordpress/hooks': 4.48.1
+      '@wordpress/hooks': 4.50.0
       '@wordpress/icons': 11.8.0(@types/react@18.3.28)(react@18.3.1)
-      '@wordpress/is-shallow-equal': 5.48.1
+      '@wordpress/is-shallow-equal': 5.50.0
       memize: 2.1.1
       react: 18.3.1
       react-dom: 18.3.1(react@18.3.1)
@@ -35062,7 +34637,7 @@ snapshots:

   '@wordpress/preferences@3.35.0(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@wordpress/a11y': 3.58.0
       '@wordpress/components': 27.6.0(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@wordpress/compose': 6.35.0(react@18.3.1)
@@ -35082,14 +34657,14 @@ snapshots:

   '@wordpress/preferences@4.33.5(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
     dependencies:
-      '@wordpress/a11y': 4.48.1
+      '@wordpress/a11y': 4.50.0
       '@wordpress/base-styles': 6.20.0
       '@wordpress/components': 30.9.0(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@wordpress/compose': 7.45.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/data': 10.33.1(@types/react@18.3.28)(react@18.3.1)
-      '@wordpress/deprecated': 4.48.1
+      '@wordpress/deprecated': 4.50.0
       '@wordpress/element': 6.45.0
-      '@wordpress/i18n': 6.21.1
+      '@wordpress/i18n': 6.23.0
       '@wordpress/icons': 11.8.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/private-apis': 1.48.1
       clsx: 2.1.1
@@ -35103,7 +34678,7 @@ snapshots:
   '@wordpress/preferences@4.48.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)':
     dependencies:
       '@types/react': 18.3.28
-      '@wordpress/a11y': 4.48.1
+      '@wordpress/a11y': 4.50.0
       '@wordpress/base-styles': 10.2.0
       '@wordpress/components': 35.0.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
       '@wordpress/compose': 8.3.0(@types/react@18.3.28)(react@18.3.1)
@@ -35125,7 +34700,7 @@ snapshots:
   '@wordpress/preferences@4.48.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))':
     dependencies:
       '@types/react': 18.3.28
-      '@wordpress/a11y': 4.48.1
+      '@wordpress/a11y': 4.50.0
       '@wordpress/base-styles': 10.2.0
       '@wordpress/components': 35.0.1(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
       '@wordpress/compose': 8.3.0(@types/react@18.3.28)(react@18.3.1)
@@ -35158,13 +34733,13 @@ snapshots:

   '@wordpress/primitives@2.2.0':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@wordpress/element': 3.2.0
       classnames: 2.5.1

   '@wordpress/primitives@3.56.0':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@wordpress/element': 5.35.0
       clsx: 2.1.1

@@ -35174,19 +34749,6 @@ snapshots:
       clsx: 2.1.1
       react: 18.3.1

-  '@wordpress/primitives@4.45.0(react@18.3.1)':
-    dependencies:
-      '@wordpress/element': 6.45.0
-      clsx: 2.1.1
-      react: 18.3.1
-
-  '@wordpress/primitives@4.48.1(react@18.3.1)':
-    dependencies:
-      '@types/react': 18.3.28
-      '@wordpress/element': 8.2.0
-      clsx: 2.1.1
-      react: 18.3.1
-
   '@wordpress/primitives@4.50.0(@types/react@18.3.28)(react@18.3.1)':
     dependencies:
       '@wordpress/element': 8.2.0
@@ -35197,7 +34759,7 @@ snapshots:

   '@wordpress/priority-queue@2.58.0':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       requestidlecallback: 0.3.0

   '@wordpress/priority-queue@3.33.1':
@@ -35216,7 +34778,7 @@ snapshots:

   '@wordpress/react-i18n@3.56.0':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@wordpress/element': 5.35.0
       '@wordpress/i18n': 4.58.0
       utility-types: 3.10.0
@@ -35229,7 +34791,7 @@ snapshots:

   '@wordpress/redux-routine@4.58.0(redux@4.2.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       is-plain-object: 5.0.0
       is-promise: 4.0.0
       redux: 4.2.1
@@ -35251,7 +34813,7 @@ snapshots:

   '@wordpress/reusable-blocks@4.35.0(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@wordpress/block-editor': 12.26.0(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@wordpress/blocks': 12.35.0(react@18.3.1)
       '@wordpress/components': 27.6.0(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@@ -35374,7 +34936,7 @@ snapshots:

   '@wordpress/rich-text@4.2.0(react@18.3.1)(redux@4.2.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@wordpress/compose': 4.2.0(react@18.3.1)
       '@wordpress/data': 5.2.0(react@18.3.1)(redux@4.2.1)
       '@wordpress/dom': 3.58.0
@@ -35392,7 +34954,7 @@ snapshots:

   '@wordpress/rich-text@6.35.0(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@wordpress/a11y': 3.58.0
       '@wordpress/compose': 6.35.0(react@18.3.1)
       '@wordpress/data': 9.28.0(react@18.3.1)
@@ -35406,36 +34968,19 @@ snapshots:

   '@wordpress/rich-text@7.33.2(@types/react@18.3.28)(react@18.3.1)':
     dependencies:
-      '@wordpress/a11y': 4.48.1
+      '@wordpress/a11y': 4.50.0
       '@wordpress/compose': 7.45.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/data': 10.33.1(@types/react@18.3.28)(react@18.3.1)
-      '@wordpress/deprecated': 4.48.1
-      '@wordpress/element': 6.45.0
-      '@wordpress/escape-html': 3.48.1
-      '@wordpress/i18n': 6.21.1
-      '@wordpress/keycodes': 4.48.1
-      colord: 2.9.3
-      memize: 2.1.1
-      react: 18.3.1
-    transitivePeerDependencies:
-      - '@types/react'
-
-  '@wordpress/rich-text@7.48.1(react@18.3.1)':
-    dependencies:
-      '@types/react': 18.3.28
-      '@wordpress/a11y': 4.48.1
-      '@wordpress/compose': 8.3.0(@types/react@18.3.28)(react@18.3.1)
-      '@wordpress/data': 10.50.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/deprecated': 4.50.0
-      '@wordpress/dom': 4.50.0
-      '@wordpress/element': 8.2.0
-      '@wordpress/escape-html': 3.48.1
+      '@wordpress/element': 6.45.0
+      '@wordpress/escape-html': 3.50.0
       '@wordpress/i18n': 6.23.0
       '@wordpress/keycodes': 4.50.0(@types/react@18.3.28)
-      '@wordpress/private-apis': 1.48.1
       colord: 2.9.3
       memize: 2.1.1
       react: 18.3.1
+    transitivePeerDependencies:
+      - '@types/react'

   '@wordpress/rich-text@7.50.0(@types/react@18.3.28)(react@18.3.1)':
     dependencies:
@@ -35464,15 +35009,6 @@ snapshots:
     transitivePeerDependencies:
       - react-dom

-  '@wordpress/route@0.14.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
-    dependencies:
-      '@tanstack/history': 1.161.6
-      '@tanstack/react-router': 1.168.21(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
-      '@wordpress/private-apis': 1.48.1
-      react: 18.3.1
-    transitivePeerDependencies:
-      - react-dom
-
   '@wordpress/route@0.15.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
     dependencies:
       '@tanstack/history': 1.161.6
@@ -35484,22 +35020,13 @@ snapshots:

   '@wordpress/router@0.7.0(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@wordpress/element': 5.35.0
       '@wordpress/private-apis': 1.48.1
       '@wordpress/url': 3.59.0
       history: 5.3.0
       react: 18.3.1

-  '@wordpress/router@1.11.0(react@18.3.1)':
-    dependencies:
-      '@babel/runtime': 7.25.7
-      '@wordpress/element': 8.0.1
-      '@wordpress/private-apis': 1.48.1
-      '@wordpress/url': 4.48.1
-      history: 5.3.0
-      react: 18.3.1
-
   '@wordpress/router@1.44.0(@types/react@18.3.28)(react@18.3.1)':
     dependencies:
       '@wordpress/compose': 7.45.0(@types/react@18.3.28)(react@18.3.1)
@@ -35516,7 +35043,7 @@ snapshots:
     dependencies:
       '@babel/core': 7.25.7
       '@playwright/test': 1.61.1
-      '@pmmmwh/react-refresh-webpack-plugin': 0.5.17(@types/webpack@4.41.40)(react-refresh@0.14.2)(type-fest@4.41.0)(webpack-dev-server@4.15.2)(webpack-hot-middleware@2.26.1)(webpack@5.97.1)
+      '@pmmmwh/react-refresh-webpack-plugin': 0.5.17(@types/webpack@4.41.40)(react-refresh@0.14.2)(type-fest@4.41.0)(webpack-dev-server@4.15.2(webpack@5.97.1(@swc/core@1.15.24)))(webpack-hot-middleware@2.26.1)(webpack@5.97.1(@swc/core@1.15.24))
       '@svgr/webpack': 8.1.0(typescript@5.7.3)
       '@wordpress/babel-preset-default': 8.51.0
       '@wordpress/browserslist-config': 6.51.0
@@ -35619,7 +35146,7 @@ snapshots:
     dependencies:
       '@babel/core': 7.25.7
       '@playwright/test': 1.61.1
-      '@pmmmwh/react-refresh-webpack-plugin': 0.5.17(@types/webpack@4.41.40)(react-refresh@0.14.2)(type-fest@4.41.0)(webpack-dev-server@4.15.2)(webpack-hot-middleware@2.26.1)(webpack@5.97.1)
+      '@pmmmwh/react-refresh-webpack-plugin': 0.5.17(@types/webpack@4.41.40)(react-refresh@0.14.2)(type-fest@4.41.0)(webpack-dev-server@4.15.2(webpack@5.97.1(@swc/core@1.15.24)))(webpack-hot-middleware@2.26.1)(webpack@5.97.1(@swc/core@1.15.24))
       '@svgr/webpack': 8.1.0(typescript@5.7.3)
       '@wordpress/babel-preset-default': 8.51.0
       '@wordpress/browserslist-config': 6.51.0
@@ -35722,7 +35249,7 @@ snapshots:
     dependencies:
       '@babel/core': 7.25.7
       '@playwright/test': 1.61.1
-      '@pmmmwh/react-refresh-webpack-plugin': 0.5.17(@types/webpack@4.41.40)(react-refresh@0.14.2)(type-fest@4.41.0)(webpack-dev-server@4.15.2)(webpack-hot-middleware@2.26.1)(webpack@5.97.1)
+      '@pmmmwh/react-refresh-webpack-plugin': 0.5.17(@types/webpack@4.41.40)(react-refresh@0.14.2)(type-fest@4.41.0)(webpack-dev-server@4.15.2(webpack@5.97.1(@swc/core@1.15.24)))(webpack-hot-middleware@2.26.1)(webpack@5.97.1(@swc/core@1.15.24))
       '@svgr/webpack': 8.1.0(typescript@5.7.3)
       '@wordpress/babel-preset-default': 8.51.0
       '@wordpress/browserslist-config': 6.51.0
@@ -35823,7 +35350,7 @@ snapshots:

   '@wordpress/server-side-render@4.35.0(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@wordpress/api-fetch': 6.55.0
       '@wordpress/blocks': 12.35.0(react@18.3.1)
       '@wordpress/components': 27.6.0(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@@ -35866,9 +35393,9 @@ snapshots:
       '@wordpress/components': 30.9.0(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@wordpress/compose': 7.45.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/data': 10.33.1(@types/react@18.3.28)(react@18.3.1)
-      '@wordpress/deprecated': 4.48.1
+      '@wordpress/deprecated': 4.50.0
       '@wordpress/element': 6.45.0
-      '@wordpress/i18n': 6.21.1
+      '@wordpress/i18n': 6.23.0
       '@wordpress/url': 4.48.1
       react: 18.3.1
       react-dom: 18.3.1(react@18.3.1)
@@ -35879,7 +35406,7 @@ snapshots:

   '@wordpress/shortcode@3.58.0':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       memize: 2.1.1

   '@wordpress/shortcode@4.48.1':
@@ -35888,7 +35415,7 @@ snapshots:

   '@wordpress/style-engine@1.41.0':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       change-case: 4.1.2

   '@wordpress/style-engine@2.44.0':
@@ -35946,7 +35473,7 @@ snapshots:
   '@wordpress/stylelint-config@23.42.0(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint-scss@6.14.0(stylelint@14.16.1))(stylelint@16.26.1(typescript@5.7.3))':
     dependencies:
       '@stylistic/stylelint-plugin': 3.1.3(stylelint@16.26.1(typescript@5.7.3))
-      '@wordpress/theme': 0.17.0(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
+      '@wordpress/theme': 0.17.0(@types/react@18.3.28)(esbuild@0.24.2)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
       stylelint: 16.26.1(typescript@5.7.3)
       stylelint-config-recommended: 14.0.1(stylelint@16.26.1(typescript@5.7.3))
       stylelint-config-recommended-scss: 14.1.0(postcss@8.5.26)(stylelint@16.26.1(typescript@5.7.3))
@@ -35961,7 +35488,7 @@ snapshots:

   '@wordpress/sync@0.20.0':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@types/simple-peer': 9.11.9
       '@wordpress/url': 3.59.0
       import-locals: 2.0.0
@@ -36075,23 +35602,7 @@ snapshots:
       postcss: 8.5.26
       stylelint: 16.26.1(typescript@5.7.3)

-  '@wordpress/theme@0.17.0(@types/react@18.3.28)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)':
-    dependencies:
-      '@wordpress/compose': 8.3.0(@types/react@18.3.28)(react@18.3.1)
-      '@wordpress/deprecated': 4.50.0
-      '@wordpress/element': 8.2.0
-      '@wordpress/private-apis': 1.48.1
-      '@wordpress/style-runtime': 0.5.0
-      colorjs.io: 0.6.1
-      memize: 2.1.1
-      react: 18.3.1
-      react-dom: 18.3.1(react@18.3.1)
-    optionalDependencies:
-      '@types/react': 18.3.28
-      postcss: 8.5.26
-      stylelint: 14.16.1
-
-  '@wordpress/theme@0.17.0(@types/react@18.3.28)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))':
+  '@wordpress/theme@0.17.0(@types/react@18.3.28)(esbuild@0.24.2)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))':
     dependencies:
       '@wordpress/compose': 8.3.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/deprecated': 4.50.0
@@ -36104,10 +35615,11 @@ snapshots:
       react-dom: 18.3.1(react@18.3.1)
     optionalDependencies:
       '@types/react': 18.3.28
+      esbuild: 0.24.2
       postcss: 8.5.26
       stylelint: 16.26.1(typescript@5.7.3)

-  '@wordpress/theme@0.17.0(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))':
+  '@wordpress/theme@0.17.0(@types/react@18.3.28)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)':
     dependencies:
       '@wordpress/compose': 8.3.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/deprecated': 4.50.0
@@ -36119,18 +35631,19 @@ snapshots:
       react: 18.3.1
       react-dom: 18.3.1(react@18.3.1)
     optionalDependencies:
+      '@types/react': 18.3.28
       postcss: 8.5.26
-      stylelint: 16.26.1(typescript@5.7.3)
+      stylelint: 14.16.1

   '@wordpress/token-list@2.58.0':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2

   '@wordpress/token-list@3.48.1': {}

   '@wordpress/ui@0.11.0(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)':
     dependencies:
-      '@base-ui/react': 1.4.1(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+      '@base-ui/react': 1.5.0(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@wordpress/a11y': 4.50.0
       '@wordpress/compose': 7.45.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/element': 6.45.0
@@ -36152,7 +35665,7 @@ snapshots:

   '@wordpress/ui@0.11.0(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))':
     dependencies:
-      '@base-ui/react': 1.4.1(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+      '@base-ui/react': 1.5.0(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@wordpress/a11y': 4.50.0
       '@wordpress/compose': 7.45.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/element': 6.45.0
@@ -36174,7 +35687,7 @@ snapshots:

   '@wordpress/ui@0.11.0(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)':
     dependencies:
-      '@base-ui/react': 1.4.1(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+      '@base-ui/react': 1.5.0(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@wordpress/a11y': 4.50.0
       '@wordpress/compose': 7.45.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/element': 6.45.0
@@ -36196,7 +35709,7 @@ snapshots:

   '@wordpress/ui@0.12.0(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)':
     dependencies:
-      '@base-ui/react': 1.4.1(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+      '@base-ui/react': 1.5.0(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@wordpress/a11y': 4.50.0
       '@wordpress/compose': 7.45.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/element': 6.45.0
@@ -36218,7 +35731,7 @@ snapshots:

   '@wordpress/ui@0.12.0(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))':
     dependencies:
-      '@base-ui/react': 1.4.1(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+      '@base-ui/react': 1.5.0(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@wordpress/a11y': 4.50.0
       '@wordpress/compose': 7.45.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/element': 6.45.0
@@ -36330,9 +35843,63 @@ snapshots:
       - date-fns
       - stylelint

-  '@wordpress/ui@0.16.1(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@4.1.0)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)':
+  '@wordpress/ui@0.16.1(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@3.6.0)(esbuild@0.18.20)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))':
     dependencies:
-      '@base-ui/react': 1.5.0(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+      '@base-ui/react': 1.5.0(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+      '@wordpress/a11y': 4.50.0
+      '@wordpress/compose': 8.3.0(@types/react@18.3.28)(react@18.3.1)
+      '@wordpress/element': 8.2.0
+      '@wordpress/i18n': 6.23.0
+      '@wordpress/icons': 15.1.0(@types/react@18.3.28)(react@18.3.1)
+      '@wordpress/keycodes': 4.50.0(@types/react@18.3.28)
+      '@wordpress/primitives': 4.50.0(@types/react@18.3.28)(react@18.3.1)
+      '@wordpress/private-apis': 1.48.1
+      '@wordpress/style-runtime': 0.5.0
+      '@wordpress/theme': 0.17.0(@types/react@18.3.28)(esbuild@0.18.20)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
+      clsx: 2.1.1
+      react: 18.3.1
+      react-dom: 18.3.1(react@18.3.1)
+      tabbable: 6.4.0
+    optionalDependencies:
+      '@types/react': 18.3.28
+    transitivePeerDependencies:
+      - '@date-fns/tz'
+      - date-fns
+      - esbuild
+      - postcss
+      - stylelint
+      - vite
+
+  '@wordpress/ui@0.16.1(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@3.6.0)(esbuild@0.24.2)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))':
+    dependencies:
+      '@base-ui/react': 1.5.0(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+      '@wordpress/a11y': 4.50.0
+      '@wordpress/compose': 8.3.0(@types/react@18.3.28)(react@18.3.1)
+      '@wordpress/element': 8.2.0
+      '@wordpress/i18n': 6.23.0
+      '@wordpress/icons': 15.1.0(@types/react@18.3.28)(react@18.3.1)
+      '@wordpress/keycodes': 4.50.0(@types/react@18.3.28)
+      '@wordpress/primitives': 4.50.0(@types/react@18.3.28)(react@18.3.1)
+      '@wordpress/private-apis': 1.48.1
+      '@wordpress/style-runtime': 0.5.0
+      '@wordpress/theme': 0.17.0(@types/react@18.3.28)(esbuild@0.24.2)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
+      clsx: 2.1.1
+      react: 18.3.1
+      react-dom: 18.3.1(react@18.3.1)
+      tabbable: 6.4.0
+    optionalDependencies:
+      '@types/react': 18.3.28
+    transitivePeerDependencies:
+      - '@date-fns/tz'
+      - date-fns
+      - esbuild
+      - postcss
+      - stylelint
+      - vite
+
+  '@wordpress/ui@0.16.1(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@3.6.0)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)':
+    dependencies:
+      '@base-ui/react': 1.5.0(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@wordpress/a11y': 4.50.0
       '@wordpress/compose': 8.3.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/element': 8.2.0
@@ -36369,7 +35936,7 @@ snapshots:
       '@wordpress/primitives': 4.50.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/private-apis': 1.48.1
       '@wordpress/style-runtime': 0.5.0
-      '@wordpress/theme': 0.17.0(@types/react@18.3.28)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
+      '@wordpress/theme': 0.17.0(@types/react@18.3.28)(esbuild@0.18.20)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
       clsx: 2.1.1
       react: 18.3.1
       react-dom: 18.3.1(react@18.3.1)
@@ -36384,9 +35951,9 @@ snapshots:
       - stylelint
       - vite

-  '@wordpress/ui@0.17.0(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@4.1.0)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)':
+  '@wordpress/ui@0.17.0(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@3.6.0)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)':
     dependencies:
-      '@base-ui/react': 1.5.0(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+      '@base-ui/react': 1.5.0(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@3.6.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@wordpress/a11y': 4.50.0
       '@wordpress/compose': 8.3.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/element': 8.2.0
@@ -36411,7 +35978,7 @@ snapshots:
       - stylelint
       - vite

-  '@wordpress/ui@0.17.0(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@4.1.0)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))':
+  '@wordpress/ui@0.17.0(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@4.1.0)(esbuild@0.18.20)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))':
     dependencies:
       '@base-ui/react': 1.5.0(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@wordpress/a11y': 4.50.0
@@ -36423,7 +35990,7 @@ snapshots:
       '@wordpress/primitives': 4.50.0(@types/react@18.3.28)(react@18.3.1)
       '@wordpress/private-apis': 1.48.1
       '@wordpress/style-runtime': 0.6.0
-      '@wordpress/theme': 0.17.0(@types/react@18.3.28)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
+      '@wordpress/theme': 0.17.0(@types/react@18.3.28)(esbuild@0.18.20)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
       clsx: 2.1.1
       react: 18.3.1
       react-dom: 18.3.1(react@18.3.1)
@@ -36438,14 +36005,64 @@ snapshots:
       - stylelint
       - vite

-  '@wordpress/undo-manager@0.18.0':
+  '@wordpress/ui@0.17.0(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@4.1.0)(esbuild@0.24.2)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))':
     dependencies:
-      '@babel/runtime': 7.25.7
-      '@wordpress/is-shallow-equal': 4.58.0
+      '@base-ui/react': 1.5.0(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+      '@wordpress/a11y': 4.50.0
+      '@wordpress/compose': 8.3.0(@types/react@18.3.28)(react@18.3.1)
+      '@wordpress/element': 8.2.0
+      '@wordpress/i18n': 6.23.0
+      '@wordpress/icons': 15.1.0(@types/react@18.3.28)(react@18.3.1)
+      '@wordpress/keycodes': 4.50.0(@types/react@18.3.28)
+      '@wordpress/primitives': 4.50.0(@types/react@18.3.28)(react@18.3.1)
+      '@wordpress/private-apis': 1.48.1
+      '@wordpress/style-runtime': 0.6.0
+      '@wordpress/theme': 0.17.0(@types/react@18.3.28)(esbuild@0.24.2)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.7.3))
+      clsx: 2.1.1
+      react: 18.3.1
+      react-dom: 18.3.1(react@18.3.1)
+      tabbable: 6.4.0
+    optionalDependencies:
+      '@types/react': 18.3.28
+    transitivePeerDependencies:
+      - '@date-fns/tz'
+      - date-fns
+      - esbuild
+      - postcss
+      - stylelint
+      - vite

-  '@wordpress/undo-manager@1.48.1':
+  '@wordpress/ui@0.17.0(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@4.1.0)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)':
     dependencies:
-      '@wordpress/is-shallow-equal': 5.50.0
+      '@base-ui/react': 1.5.0(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+      '@wordpress/a11y': 4.50.0
+      '@wordpress/compose': 8.3.0(@types/react@18.3.28)(react@18.3.1)
+      '@wordpress/element': 8.2.0
+      '@wordpress/i18n': 6.23.0
+      '@wordpress/icons': 15.1.0(@types/react@18.3.28)(react@18.3.1)
+      '@wordpress/keycodes': 4.50.0(@types/react@18.3.28)
+      '@wordpress/primitives': 4.50.0(@types/react@18.3.28)(react@18.3.1)
+      '@wordpress/private-apis': 1.48.1
+      '@wordpress/style-runtime': 0.6.0
+      '@wordpress/theme': 0.17.0(@types/react@18.3.28)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@14.16.1)
+      clsx: 2.1.1
+      react: 18.3.1
+      react-dom: 18.3.1(react@18.3.1)
+      tabbable: 6.4.0
+    optionalDependencies:
+      '@types/react': 18.3.28
+    transitivePeerDependencies:
+      - '@date-fns/tz'
+      - date-fns
+      - esbuild
+      - postcss
+      - stylelint
+      - vite
+
+  '@wordpress/undo-manager@0.18.0':
+    dependencies:
+      '@babel/runtime': 7.29.2
+      '@wordpress/is-shallow-equal': 4.58.0

   '@wordpress/undo-manager@1.50.0':
     dependencies:
@@ -36537,7 +36154,7 @@ snapshots:

   '@wordpress/url@3.59.0':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       remove-accents: 0.5.0

   '@wordpress/url@4.33.1':
@@ -36550,7 +36167,7 @@ snapshots:

   '@wordpress/viewport@5.35.0(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@wordpress/compose': 6.35.0(react@18.3.1)
       '@wordpress/data': 9.28.0(react@18.3.1)
       '@wordpress/element': 5.35.0
@@ -36622,15 +36239,11 @@ snapshots:

   '@wordpress/warning@3.33.1': {}

-  '@wordpress/warning@3.45.0': {}
-
-  '@wordpress/warning@3.48.1': {}
-
   '@wordpress/warning@3.51.0': {}

   '@wordpress/widgets@3.35.0(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       '@wordpress/api-fetch': 6.55.0
       '@wordpress/block-editor': 12.26.0(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@wordpress/blocks': 12.35.0(react@18.3.1)
@@ -36654,7 +36267,7 @@ snapshots:

   '@wordpress/wordcount@3.58.0':
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2

   '@wordpress/wordcount@4.33.1': {}

@@ -37547,7 +37160,7 @@ snapshots:

   babel-plugin-macros@3.1.0:
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       cosmiconfig: 7.1.0
       resolve: 1.22.12

@@ -38776,12 +38389,10 @@ snapshots:

   core-js-compat@3.49.0:
     dependencies:
-      browserslist: 4.28.2
+      browserslist: 4.28.6

   core-js-pure@3.49.0: {}

-  core-js@2.6.12: {}
-
   core-js@3.25.0: {}

   core-js@3.49.0: {}
@@ -39255,7 +38866,7 @@ snapshots:

   date-fns@2.30.0:
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2

   date-fns@3.6.0: {}

@@ -39538,7 +39149,7 @@ snapshots:

   dom-helpers@5.2.1:
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       csstype: 3.2.3

   dom-scroll-into-view@1.2.1: {}
@@ -39623,7 +39234,7 @@ snapshots:

   downshift@6.1.12(react@18.3.1):
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       compute-scroll-into-view: 1.0.20
       prop-types: 15.8.1
       react: 18.3.1
@@ -39632,7 +39243,7 @@ snapshots:

   downshift@6.1.7(react@18.3.1):
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       compute-scroll-into-view: 1.0.20
       prop-types: 15.8.1
       react: 18.3.1
@@ -41012,14 +40623,6 @@ snapshots:
       mime-types: 2.1.35
       safe-buffer: 5.2.1

-  form-data@4.0.5:
-    dependencies:
-      asynckit: 0.4.0
-      combined-stream: 1.0.8
-      es-set-tostringtag: 2.1.0
-      hasown: 2.0.2
-      mime-types: 2.1.35
-
   form-data@4.0.6:
     dependencies:
       asynckit: 0.4.0
@@ -41846,7 +41449,7 @@ snapshots:

   history@5.3.0:
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2

   hjson@1.8.4: {}

@@ -42881,6 +42484,7 @@ snapshots:
       wait-on: 8.0.5
     transitivePeerDependencies:
       - debug
+      - supports-color

   jest-diff@27.5.1:
     dependencies:
@@ -43115,7 +42719,7 @@ snapshots:
     dependencies:
       '@babel/core': 7.25.7
       '@babel/generator': 7.29.1
-      '@babel/plugin-syntax-jsx': 7.25.7(@babel/core@7.25.7)
+      '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.25.7)
       '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.25.7)
       '@babel/types': 7.29.0
       '@jest/expect-utils': 29.7.0
@@ -43578,7 +43182,7 @@ snapshots:

   lazy-universal-dotenv@3.0.1:
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       app-root-dir: 1.0.2
       core-js: 3.49.0
       dotenv: 8.6.0
@@ -44607,8 +44211,6 @@ snapshots:

   nan@2.26.2: {}

-  nanoid@3.3.11: {}
-
   nanoid@3.3.18: {}

   nanomatch@1.2.13:
@@ -45704,7 +45306,7 @@ snapshots:

   polished@4.3.1:
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2

   posix-character-classes@0.1.1: {}

@@ -45824,7 +45426,7 @@ snapshots:
       semver: 7.7.4
       webpack: 5.97.1(@swc/core@1.15.24)(esbuild@0.24.2)

-  postcss-loader@4.3.0(postcss@8.5.26)(webpack@5.97.1):
+  postcss-loader@4.3.0(postcss@8.5.26)(webpack@5.97.1(@swc/core@1.15.24)):
     dependencies:
       cosmiconfig: 7.1.0
       klona: 2.0.6
@@ -46643,7 +46245,7 @@ snapshots:
     dependencies:
       '@babel/core': 7.25.7
       '@babel/generator': 7.29.1
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       ast-types: 0.14.2
       commander: 2.20.3
       doctrine: 3.0.0
@@ -46707,14 +46309,14 @@ snapshots:

   react-error-boundary@3.1.4(react@18.3.1):
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       react: 18.3.1

   react-fast-compare@3.2.2: {}

   react-inspector@5.1.1(react@18.3.1):
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       is-dom: 1.1.0
       prop-types: 15.8.1
       react: 18.3.1
@@ -46878,7 +46480,7 @@ snapshots:

   react-spring@8.0.27(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       prop-types: 15.8.1
       react: 18.3.1
       react-dom: 18.3.1(react@18.3.1)
@@ -46893,7 +46495,7 @@ snapshots:

   react-syntax-highlighter@15.6.6(react@18.3.1):
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       highlight.js: 10.7.3
       highlightjs-vue: 1.0.0
       lowlight: 1.20.0
@@ -46911,7 +46513,7 @@ snapshots:

   react-transition-group@4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       dom-helpers: 5.2.1
       loose-envify: 1.4.0
       prop-types: 15.8.1
@@ -46930,7 +46532,7 @@ snapshots:

   react-window@1.8.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2
       memoize-one: 5.2.1
       react: 18.3.1
       react-dom: 18.3.1(react@18.3.1)
@@ -47156,7 +46758,7 @@ snapshots:

   redux@4.2.1:
     dependencies:
-      '@babel/runtime': 7.25.7
+      '@babel/runtime': 7.29.2

   redux@5.0.1: {}

@@ -49881,6 +49483,7 @@ snapshots:
       rxjs: 7.8.2
     transitivePeerDependencies:
       - debug
+      - supports-color

   walk-up-path@1.0.0: {}

@@ -50205,11 +49808,6 @@ snapshots:
       ansis: 1.5.2
       webpack: 5.97.1(@swc/core@1.15.24)(esbuild@0.24.2)

-  webpack-remove-empty-scripts@1.0.4(webpack@5.97.1):
-    dependencies:
-      ansis: 1.5.2
-      webpack: 5.97.1(@swc/core@1.15.24)(webpack-cli@5.1.4)
-
   webpack-sources@1.4.3:
     dependencies:
       source-list-map: 2.0.1
@@ -50265,7 +49863,7 @@ snapshots:
       '@webassemblyjs/wasm-edit': 1.14.1
       '@webassemblyjs/wasm-parser': 1.14.1
       acorn: 8.16.0
-      browserslist: 4.28.2
+      browserslist: 4.28.6
       chrome-trace-event: 1.0.4
       enhanced-resolve: 5.20.1
       es-module-lexer: 1.7.0
@@ -50297,7 +49895,7 @@ snapshots:
       '@webassemblyjs/wasm-edit': 1.14.1
       '@webassemblyjs/wasm-parser': 1.14.1
       acorn: 8.16.0
-      browserslist: 4.28.2
+      browserslist: 4.28.6
       chrome-trace-event: 1.0.4
       enhanced-resolve: 5.20.1
       es-module-lexer: 1.7.0
@@ -50327,7 +49925,7 @@ snapshots:
       '@webassemblyjs/wasm-edit': 1.14.1
       '@webassemblyjs/wasm-parser': 1.14.1
       acorn: 8.16.0
-      browserslist: 4.28.2
+      browserslist: 4.28.6
       chrome-trace-event: 1.0.4
       enhanced-resolve: 5.20.1
       es-module-lexer: 1.7.0
@@ -50359,7 +49957,7 @@ snapshots:
       '@webassemblyjs/wasm-edit': 1.14.1
       '@webassemblyjs/wasm-parser': 1.14.1
       acorn: 8.16.0
-      browserslist: 4.28.2
+      browserslist: 4.28.6
       chrome-trace-event: 1.0.4
       enhanced-resolve: 5.20.1
       es-module-lexer: 1.7.0