diff --git a/package-lock.json b/package-lock.json
index 6a4bce23f84734..f85199349bb086 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -16364,6 +16364,7 @@
"@wordpress/media-utils": "file:packages/media-utils",
"@wordpress/notices": "file:packages/notices",
"@wordpress/plugins": "file:packages/plugins",
+ "@wordpress/preferences": "file:packages/preferences",
"@wordpress/reusable-blocks": "file:packages/reusable-blocks",
"@wordpress/url": "file:packages/url",
"@wordpress/widgets": "file:packages/widgets",
@@ -21453,6 +21454,11 @@
"integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==",
"dev": true
},
+ "follow-redirects": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz",
+ "integrity": "sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg=="
+ },
"forever-agent": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
@@ -21544,7 +21550,8 @@
"function-bind": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
- "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+ "dev": true
},
"gauge": {
"version": "2.7.4",
@@ -21680,6 +21687,7 @@
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
"integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dev": true,
"requires": {
"function-bind": "^1.1.1"
}
@@ -21811,7 +21819,8 @@
"interpret": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
- "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA=="
+ "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==",
+ "dev": true
},
"invert-kv": {
"version": "2.0.0",
@@ -21859,6 +21868,7 @@
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.5.0.tgz",
"integrity": "sha512-TXCMSDsEHMEEZ6eCA8rwRDbLu55MRGmrctljsBX/2v1d9/GzqHOxW5c5oPSgrUt2vBFXebu9rGqckXGPWOlYpg==",
+ "dev": true,
"requires": {
"has": "^1.0.3"
}
@@ -22817,7 +22827,8 @@
"path-parse": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
- "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+ "dev": true
},
"path-to-regexp": {
"version": "0.1.7",
@@ -23109,6 +23120,7 @@
"version": "0.6.2",
"resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
"integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
+ "dev": true,
"requires": {
"resolve": "^1.1.6"
}
@@ -23209,6 +23221,7 @@
"version": "1.20.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
"integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
+ "dev": true,
"requires": {
"is-core-module": "^2.2.0",
"path-parse": "^1.0.6"
@@ -23500,6 +23513,17 @@
"integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==",
"dev": true
},
+ "shelljs": {
+ "version": "0.8.4",
+ "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz",
+ "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.0.0",
+ "interpret": "^1.0.0",
+ "rechoir": "^0.6.2"
+ }
+ },
"shimmer": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz",
@@ -34187,9 +34211,9 @@
}
},
"follow-redirects": {
- "version": "1.14.9",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.9.tgz",
- "integrity": "sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==",
+ "version": "1.14.8",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.8.tgz",
+ "integrity": "sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA==",
"dev": true
},
"for-in": {
@@ -50362,15 +50386,6 @@
}
}
},
- "rechoir": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
- "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
- "dev": true,
- "requires": {
- "resolve": "^1.1.6"
- }
- },
"recursive-readdir": {
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz",
@@ -52120,25 +52135,6 @@
}
}
},
- "shelljs": {
- "version": "0.8.5",
- "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz",
- "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==",
- "dev": true,
- "requires": {
- "glob": "^7.0.0",
- "interpret": "^1.0.0",
- "rechoir": "^0.6.2"
- },
- "dependencies": {
- "interpret": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
- "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==",
- "dev": true
- }
- }
- },
"showdown": {
"version": "1.9.1",
"resolved": "https://registry.npmjs.org/showdown/-/showdown-1.9.1.tgz",
diff --git a/packages/base-styles/_z-index.scss b/packages/base-styles/_z-index.scss
index 1cfbd51d5566c9..7011be7ea3b056 100644
--- a/packages/base-styles/_z-index.scss
+++ b/packages/base-styles/_z-index.scss
@@ -155,8 +155,7 @@ $z-layers: (
".components-popover.customize-widgets-more-menu__content": 99998,
".components-popover.edit-post-more-menu__content": 99998,
".components-popover.edit-site-more-menu__content": 99998,
- ".components-popover.edit-widgets-more-menu__content": 99998,
- ".components-popover.preferences-more-menu__content": 99998,
+ ".components-popover.interface-more-menu__content": 99998,
".components-popover.block-editor-rich-text__inline-format-toolbar": 99998,
".components-popover.block-editor-warning__dropdown": 99998,
".components-popover.edit-navigation-menu-actions__switcher-dropdown": 99998,
diff --git a/packages/data/src/plugins/persistence/index.js b/packages/data/src/plugins/persistence/index.js
index 24baf115aa1dcc..158a016ad68272 100644
--- a/packages/data/src/plugins/persistence/index.js
+++ b/packages/data/src/plugins/persistence/index.js
@@ -222,6 +222,80 @@ function persistencePlugin( registry, pluginOptions ) {
};
}
+/**
+ * Move the 'features' object in local storage from the sourceStoreName to the
+ * preferences store.
+ *
+ * @param {Object} persistence The persistence interface.
+ * @param {string} sourceStoreName The name of the store that has persisted
+ * preferences to migrate to the preferences
+ * package.
+ */
+export function migrateFeaturePreferencesToPreferencesStore(
+ persistence,
+ sourceStoreName
+) {
+ const preferencesStoreName = 'core/preferences';
+ const interfaceStoreName = 'core/interface';
+
+ const state = persistence.get();
+
+ // Features most recently (and briefly) lived in the interface package.
+ // If data exists there, prioritize using that for the migration. If not
+ // also check the original package as the user may have updated from an
+ // older block editor version.
+ const interfaceFeatures =
+ state[ interfaceStoreName ]?.preferences?.features?.[ sourceStoreName ];
+ const sourceFeatures = state[ sourceStoreName ]?.preferences?.features;
+ const featuresToMigrate = interfaceFeatures
+ ? interfaceFeatures
+ : sourceFeatures;
+
+ if ( featuresToMigrate ) {
+ const targetFeatures = state[ preferencesStoreName ]?.preferences;
+
+ // Avoid migrating features again if they've previously been migrated.
+ if ( ! targetFeatures?.[ sourceStoreName ] ) {
+ // Set the feature values in the interface store, the features
+ // object is keyed by 'scope', which matches the store name for
+ // the source.
+ persistence.set( preferencesStoreName, {
+ preferences: {
+ ...targetFeatures,
+ [ sourceStoreName ]: featuresToMigrate,
+ },
+ } );
+
+ // Remove migrated feature preferences from `interface`.
+ if ( interfaceFeatures ) {
+ const otherInterfaceFeatures =
+ state[ interfaceStoreName ]?.preferences?.features;
+
+ persistence.set( interfaceStoreName, {
+ preferences: {
+ features: {
+ ...otherInterfaceFeatures,
+ [ sourceStoreName ]: undefined,
+ },
+ },
+ } );
+ }
+
+ // Remove migrated feature preferences from the source.
+ if ( sourceFeatures ) {
+ const sourcePreferences = state[ sourceStoreName ]?.preferences;
+
+ persistence.set( sourceStoreName, {
+ preferences: {
+ ...sourcePreferences,
+ features: undefined,
+ },
+ } );
+ }
+ }
+ }
+}
+
/**
* Move the 'features' object in local storage from the sourceStoreName to the
* interface store.
@@ -277,7 +351,7 @@ export function migrateFeaturePreferencesToInterfaceStore(
persistencePlugin.__unstableMigrate = ( pluginOptions ) => {
const persistence = createPersistenceInterface( pluginOptions );
- migrateFeaturePreferencesToInterfaceStore(
+ migrateFeaturePreferencesToPreferencesStore(
persistence,
'core/edit-widgets'
);
diff --git a/packages/data/src/plugins/persistence/test/index.js b/packages/data/src/plugins/persistence/test/index.js
index 562c11d81b7764..ee34b97fb09bf5 100644
--- a/packages/data/src/plugins/persistence/test/index.js
+++ b/packages/data/src/plugins/persistence/test/index.js
@@ -10,6 +10,7 @@ import plugin, {
createPersistenceInterface,
withLazySameState,
migrateFeaturePreferencesToInterfaceStore,
+ migrateFeaturePreferencesToPreferencesStore,
} from '../';
import objectStorage from '../storage/object';
import { createRegistry } from '../../../';
@@ -492,4 +493,278 @@ describe( 'migrateFeaturePreferencesToInterfaceStore', () => {
},
} );
} );
+
+ describe( 'migrateFeaturePreferencesToPreferencesStore', () => {
+ it( 'migrates multiple preferences from persisted source stores to preferences', () => {
+ const persistenceInterface = createPersistenceInterface( {
+ storageKey: 'test-username',
+ } );
+
+ const sourceStateA = {
+ preferences: {
+ features: {
+ featureA: true,
+ featureB: false,
+ featureC: true,
+ },
+ },
+ };
+
+ const sourceStateB = {
+ preferences: {
+ features: {
+ featureD: true,
+ featureE: false,
+ featureF: true,
+ },
+ },
+ };
+
+ persistenceInterface.set( 'core/test-a', sourceStateA );
+ persistenceInterface.set( 'core/test-b', sourceStateB );
+
+ migrateFeaturePreferencesToPreferencesStore(
+ persistenceInterface,
+ 'core/test-a'
+ );
+
+ migrateFeaturePreferencesToPreferencesStore(
+ persistenceInterface,
+ 'core/test-b'
+ );
+
+ expect( persistenceInterface.get() ).toEqual( {
+ 'core/preferences': {
+ preferences: {
+ 'core/test-a': {
+ featureA: true,
+ featureB: false,
+ featureC: true,
+ },
+ 'core/test-b': {
+ featureD: true,
+ featureE: false,
+ featureF: true,
+ },
+ },
+ },
+ 'core/test-a': {
+ preferences: {
+ features: undefined,
+ },
+ },
+ 'core/test-b': {
+ preferences: {
+ features: undefined,
+ },
+ },
+ } );
+ } );
+
+ it( 'migrates multiple preferences from the persisted interface store to preferences, with interface state taking precedence over source stores', () => {
+ const persistenceInterface = createPersistenceInterface( {
+ storageKey: 'test-username',
+ } );
+
+ const sourceStateA = {
+ preferences: {
+ features: {
+ featureA: true,
+ featureB: false,
+ featureC: true,
+ },
+ },
+ };
+
+ const sourceStateB = {
+ preferences: {
+ features: {
+ featureD: true,
+ featureE: false,
+ featureF: true,
+ },
+ },
+ };
+
+ const interfaceState = {
+ preferences: {
+ features: {
+ 'core/test-a': {
+ featureG: true,
+ featureH: false,
+ featureI: true,
+ },
+ 'core/test-b': {
+ featureJ: true,
+ featureK: false,
+ featureL: true,
+ },
+ },
+ },
+ };
+
+ persistenceInterface.set( 'core/test-a', sourceStateA );
+ persistenceInterface.set( 'core/test-b', sourceStateB );
+ persistenceInterface.set( 'core/interface', interfaceState );
+
+ migrateFeaturePreferencesToPreferencesStore(
+ persistenceInterface,
+ 'core/test-a'
+ );
+
+ migrateFeaturePreferencesToPreferencesStore(
+ persistenceInterface,
+ 'core/test-b'
+ );
+
+ expect( persistenceInterface.get() ).toEqual( {
+ 'core/preferences': {
+ preferences: {
+ 'core/test-a': {
+ featureG: true,
+ featureH: false,
+ featureI: true,
+ },
+ 'core/test-b': {
+ featureJ: true,
+ featureK: false,
+ featureL: true,
+ },
+ },
+ },
+ 'core/interface': {
+ preferences: {
+ features: {
+ 'core/test-a': undefined,
+ 'core/test-b': undefined,
+ },
+ },
+ },
+ 'core/test-a': {
+ preferences: {
+ features: undefined,
+ },
+ },
+ 'core/test-b': {
+ preferences: {
+ features: undefined,
+ },
+ },
+ } );
+ } );
+
+ it( 'only migrates persisted data for the source name from source stores', () => {
+ const persistenceInterface = createPersistenceInterface( {
+ storageKey: 'test-username',
+ } );
+
+ const sourceStateA = {
+ preferences: {
+ features: {
+ featureA: true,
+ featureB: false,
+ featureC: true,
+ },
+ },
+ };
+
+ const sourceStateB = {
+ preferences: {
+ features: {
+ featureD: true,
+ featureE: false,
+ featureF: true,
+ },
+ },
+ };
+
+ persistenceInterface.set( 'core/test-a', sourceStateA );
+ persistenceInterface.set( 'core/test-b', sourceStateB );
+
+ migrateFeaturePreferencesToPreferencesStore(
+ persistenceInterface,
+ 'core/test-a'
+ );
+
+ expect( persistenceInterface.get() ).toEqual( {
+ 'core/preferences': {
+ preferences: {
+ 'core/test-a': {
+ featureA: true,
+ featureB: false,
+ featureC: true,
+ },
+ },
+ },
+ 'core/test-a': {
+ preferences: {
+ features: undefined,
+ },
+ },
+ 'core/test-b': {
+ preferences: {
+ features: {
+ featureD: true,
+ featureE: false,
+ featureF: true,
+ },
+ },
+ },
+ } );
+ } );
+
+ it( 'only migrates persisted data for the source name from interface', () => {
+ const persistenceInterface = createPersistenceInterface( {
+ storageKey: 'test-username',
+ } );
+
+ const interfaceState = {
+ preferences: {
+ features: {
+ 'core/test-a': {
+ featureG: true,
+ featureH: false,
+ featureI: true,
+ },
+ 'core/test-b': {
+ featureJ: true,
+ featureK: false,
+ featureL: true,
+ },
+ },
+ },
+ };
+
+ persistenceInterface.set( 'core/interface', interfaceState );
+
+ migrateFeaturePreferencesToPreferencesStore(
+ persistenceInterface,
+ 'core/test-a'
+ );
+
+ expect( persistenceInterface.get() ).toEqual( {
+ 'core/preferences': {
+ preferences: {
+ 'core/test-a': {
+ featureG: true,
+ featureH: false,
+ featureI: true,
+ },
+ },
+ },
+ 'core/interface': {
+ preferences: {
+ features: {
+ 'core/test-a': undefined,
+ 'core/test-b': {
+ featureJ: true,
+ featureK: false,
+ featureL: true,
+ },
+ },
+ },
+ },
+ } );
+ } );
+ } );
} );
diff --git a/packages/e2e-tests/specs/widgets/editing-widgets.test.js b/packages/e2e-tests/specs/widgets/editing-widgets.test.js
index 3214ba01e85a2c..c577717d8f3f6b 100644
--- a/packages/e2e-tests/specs/widgets/editing-widgets.test.js
+++ b/packages/e2e-tests/specs/widgets/editing-widgets.test.js
@@ -31,16 +31,17 @@ describe( 'Widgets screen', () => {
await visitWidgetsScreen();
// Disable welcome guide if it is enabled.
- const isWelcomeGuideActive = await page.evaluate( () =>
- wp.data
- .select( 'core/interface' )
- .isFeatureActive( 'core/edit-widgets', 'welcomeGuide' )
+ const isWelcomeGuideActive = await page.evaluate(
+ () =>
+ !! wp.data
+ .select( 'core/preferences' )
+ .get( 'core/edit-widgets', 'welcomeGuide' )
);
if ( isWelcomeGuideActive ) {
await page.evaluate( () =>
wp.data
- .dispatch( 'core/interface' )
- .toggleFeature( 'core/edit-widgets', 'welcomeGuide' )
+ .dispatch( 'core/preferences' )
+ .toggle( 'core/edit-widgets', 'welcomeGuide' )
);
}
diff --git a/packages/edit-widgets/package.json b/packages/edit-widgets/package.json
index 60b447e20d5f28..958dd66aa07fc9 100644
--- a/packages/edit-widgets/package.json
+++ b/packages/edit-widgets/package.json
@@ -46,6 +46,7 @@
"@wordpress/media-utils": "file:../media-utils",
"@wordpress/notices": "file:../notices",
"@wordpress/plugins": "file:../plugins",
+ "@wordpress/preferences": "file:../preferences",
"@wordpress/reusable-blocks": "file:../reusable-blocks",
"@wordpress/url": "file:../url",
"@wordpress/widgets": "file:../widgets",
diff --git a/packages/edit-widgets/src/components/layout/interface.js b/packages/edit-widgets/src/components/layout/interface.js
index b578323d2a754a..579a38fe23502c 100644
--- a/packages/edit-widgets/src/components/layout/interface.js
+++ b/packages/edit-widgets/src/components/layout/interface.js
@@ -12,6 +12,7 @@ import {
} from '@wordpress/interface';
import { __ } from '@wordpress/i18n';
import { store as keyboardShortcutsStore } from '@wordpress/keyboard-shortcuts';
+import { store as preferencesStore } from '@wordpress/preferences';
/**
* Internal dependencies
@@ -54,9 +55,10 @@ function Interface( { blockEditorSettings } ) {
).getActiveComplementaryArea( editWidgetsStore.name ),
isInserterOpened: !! select( editWidgetsStore ).isInserterOpened(),
isListViewOpened: !! select( editWidgetsStore ).isListViewOpened(),
- hasBlockBreadCrumbsEnabled: select(
- interfaceStore
- ).isFeatureActive( 'core/edit-widgets', 'showBlockBreadcrumbs' ),
+ hasBlockBreadCrumbsEnabled: !! select( preferencesStore ).get(
+ 'core/edit-widgets',
+ 'showBlockBreadcrumbs'
+ ),
previousShortcut: select(
keyboardShortcutsStore
).getAllShortcutKeyCombinations(
diff --git a/packages/edit-widgets/src/components/more-menu/index.js b/packages/edit-widgets/src/components/more-menu/index.js
index 3817f10a84bcf1..ee13c959a7a57d 100644
--- a/packages/edit-widgets/src/components/more-menu/index.js
+++ b/packages/edit-widgets/src/components/more-menu/index.js
@@ -5,7 +5,8 @@ import { MenuGroup, MenuItem, VisuallyHidden } from '@wordpress/components';
import { useState } from '@wordpress/element';
import { __, _x } from '@wordpress/i18n';
import { external } from '@wordpress/icons';
-import { MoreMenuDropdown, MoreMenuFeatureToggle } from '@wordpress/interface';
+import { MoreMenuDropdown } from '@wordpress/interface';
+import { PreferenceToggleMenuItem } from '@wordpress/preferences';
import { displayShortcut } from '@wordpress/keycodes';
import { useShortcut } from '@wordpress/keyboard-shortcuts';
import { useViewportMatch } from '@wordpress/compose';
@@ -38,9 +39,9 @@ export default function MoreMenu() {
<>
{ isLargeViewport && (
-
{ __( 'Keyboard shortcuts' ) }
-
-
-
{ isLargeViewport && (
-
- select( interfaceStore ).isFeatureActive(
+ !! select( preferencesStore ).get(
'core/edit-widgets',
'welcomeGuide'
),
[]
);
- const { toggleFeature } = useDispatch( interfaceStore );
+ const { toggle } = useDispatch( preferencesStore );
const widgetAreas = useSelect(
( select ) =>
@@ -52,9 +52,7 @@ export default function WelcomeGuide() {
className="edit-widgets-welcome-guide"
contentLabel={ __( 'Welcome to block Widgets' ) }
finishButtonText={ __( 'Get started' ) }
- onFinish={ () =>
- toggleFeature( 'core/edit-widgets', 'welcomeGuide' )
- }
+ onFinish={ () => toggle( 'core/edit-widgets', 'welcomeGuide' ) }
pages={ [
{
image: (
diff --git a/packages/edit-widgets/src/components/widget-areas-block-editor-content/index.js b/packages/edit-widgets/src/components/widget-areas-block-editor-content/index.js
index 845367855adb82..386d4730e4dab4 100644
--- a/packages/edit-widgets/src/components/widget-areas-block-editor-content/index.js
+++ b/packages/edit-widgets/src/components/widget-areas-block-editor-content/index.js
@@ -11,7 +11,7 @@ import {
} from '@wordpress/block-editor';
import { useSelect } from '@wordpress/data';
import { useMemo } from '@wordpress/element';
-import { store as interfaceStore } from '@wordpress/interface';
+import { store as preferencesStore } from '@wordpress/preferences';
/**
* Internal dependencies
@@ -24,7 +24,7 @@ export default function WidgetAreasBlockEditorContent( {
} ) {
const hasThemeStyles = useSelect(
( select ) =>
- select( interfaceStore ).isFeatureActive(
+ !! select( preferencesStore ).get(
'core/edit-widgets',
'themeStyles'
),
diff --git a/packages/edit-widgets/src/components/widget-areas-block-editor-provider/index.js b/packages/edit-widgets/src/components/widget-areas-block-editor-provider/index.js
index fa33e73b01c65e..f8fd745a3bbdfe 100644
--- a/packages/edit-widgets/src/components/widget-areas-block-editor-provider/index.js
+++ b/packages/edit-widgets/src/components/widget-areas-block-editor-provider/index.js
@@ -16,8 +16,8 @@ import {
CopyHandler,
} from '@wordpress/block-editor';
import { ReusableBlocksMenuItems } from '@wordpress/reusable-blocks';
-import { store as interfaceStore } from '@wordpress/interface';
import { ShortcutProvider } from '@wordpress/keyboard-shortcuts';
+import { store as preferencesStore } from '@wordpress/preferences';
/**
* Internal dependencies
@@ -50,11 +50,11 @@ export default function WidgetAreasBlockEditorProvider( {
reusableBlocks: ALLOW_REUSABLE_BLOCKS
? select( coreStore ).getEntityRecords( 'postType', 'wp_block' )
: [],
- isFixedToolbarActive: select( interfaceStore ).isFeatureActive(
+ isFixedToolbarActive: !! select( preferencesStore ).get(
'core/edit-widgets',
'fixedToolbar'
),
- keepCaretInsideBlock: select( interfaceStore ).isFeatureActive(
+ keepCaretInsideBlock: !! select( preferencesStore ).get(
'core/edit-widgets',
'keepCaretInsideBlock'
),
diff --git a/packages/edit-widgets/src/index.js b/packages/edit-widgets/src/index.js
index 5495ed11dff9df..9fa62f7909f163 100644
--- a/packages/edit-widgets/src/index.js
+++ b/packages/edit-widgets/src/index.js
@@ -20,7 +20,7 @@ import {
registerLegacyWidgetVariations,
registerWidgetGroupBlock,
} from '@wordpress/widgets';
-import { store as interfaceStore } from '@wordpress/interface';
+import { store as preferencesStore } from '@wordpress/preferences';
/**
* Internal dependencies
@@ -78,7 +78,7 @@ export function initialize( id, settings ) {
);
} );
- dispatch( interfaceStore ).setFeatureDefaults( 'core/edit-widgets', {
+ dispatch( preferencesStore ).setDefaults( 'core/edit-widgets', {
fixedToolbar: false,
welcomeGuide: true,
showBlockBreadcrumbs: true,
diff --git a/packages/edit-widgets/src/store/index.js b/packages/edit-widgets/src/store/index.js
index 3ef48b186d3ab3..b8542b2fa5cf19 100644
--- a/packages/edit-widgets/src/store/index.js
+++ b/packages/edit-widgets/src/store/index.js
@@ -2,7 +2,7 @@
* WordPress dependencies
*/
import apiFetch from '@wordpress/api-fetch';
-import { createReduxStore, registerStore } from '@wordpress/data';
+import { createReduxStore, register } from '@wordpress/data';
/**
* Internal dependencies
@@ -16,7 +16,7 @@ import { STORE_NAME } from './constants';
/**
* Block editor data store configuration.
*
- * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/data/README.md#registerStore
+ * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/data/README.md#register
*
* @type {Object}
*/
@@ -35,10 +35,7 @@ const storeConfig = {
* @type {Object}
*/
export const store = createReduxStore( STORE_NAME, storeConfig );
-
-// Once we build a more generic persistence plugin that works across types of stores
-// we'd be able to replace this with a register call.
-registerStore( STORE_NAME, storeConfig );
+register( store );
// This package uses a few in-memory post types as wrappers for convenience.
// This middleware prevents any network requests related to these types as they are
diff --git a/packages/interface/src/components/more-menu-dropdown/style.scss b/packages/interface/src/components/more-menu-dropdown/style.scss
index 0e09685f9587f3..0e98b90de6c062 100644
--- a/packages/interface/src/components/more-menu-dropdown/style.scss
+++ b/packages/interface/src/components/more-menu-dropdown/style.scss
@@ -31,5 +31,5 @@
}
.components-popover.interface-more-menu-dropdown__content {
- z-index: z-index(".components-popover.edit-widgets-more-menu__content");
+ z-index: z-index(".components-popover.interface-more-menu__content");
}