@wordpress/block-editor 12.3.3 → 12.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/README.md +4 -0
  2. package/build/components/block-edit/edit.js +25 -13
  3. package/build/components/block-edit/edit.js.map +1 -1
  4. package/build/components/block-mobile-toolbar/block-actions-menu.native.js +3 -6
  5. package/build/components/block-mobile-toolbar/block-actions-menu.native.js.map +1 -1
  6. package/build/components/block-parent-selector/index.js +8 -5
  7. package/build/components/block-parent-selector/index.js.map +1 -1
  8. package/build/components/block-removal-warning-modal/index.js +5 -2
  9. package/build/components/block-removal-warning-modal/index.js.map +1 -1
  10. package/build/components/block-tools/block-contextual-toolbar.js +7 -11
  11. package/build/components/block-tools/block-contextual-toolbar.js.map +1 -1
  12. package/build/components/global-styles/filters-panel.js +1 -1
  13. package/build/components/global-styles/filters-panel.js.map +1 -1
  14. package/build/components/index.js +10 -1
  15. package/build/components/index.js.map +1 -1
  16. package/build/components/inserter/block-patterns-explorer/patterns-list.js +2 -2
  17. package/build/components/inserter/block-patterns-explorer/patterns-list.js.map +1 -1
  18. package/build/components/inserter/block-patterns-tab.js +7 -35
  19. package/build/components/inserter/block-patterns-tab.js.map +1 -1
  20. package/build/components/inserter/hooks/use-block-types-state.js +3 -4
  21. package/build/components/inserter/hooks/use-block-types-state.js.map +1 -1
  22. package/build/components/inserter/hooks/use-patterns-state.js +9 -3
  23. package/build/components/inserter/hooks/use-patterns-state.js.map +1 -1
  24. package/build/components/inserter/reusable-block-rename-hint.js +62 -0
  25. package/build/components/inserter/reusable-block-rename-hint.js.map +1 -0
  26. package/build/components/inserter/reusable-blocks-tab.js +6 -2
  27. package/build/components/inserter/reusable-blocks-tab.js.map +1 -1
  28. package/build/components/list-view/use-list-view-client-ids.js +2 -2
  29. package/build/components/list-view/use-list-view-client-ids.js.map +1 -1
  30. package/build/store/private-selectors.js +5 -6
  31. package/build/store/private-selectors.js.map +1 -1
  32. package/build/store/selectors.js +33 -15
  33. package/build/store/selectors.js.map +1 -1
  34. package/build-module/components/block-edit/edit.js +27 -10
  35. package/build-module/components/block-edit/edit.js.map +1 -1
  36. package/build-module/components/block-mobile-toolbar/block-actions-menu.native.js +4 -6
  37. package/build-module/components/block-mobile-toolbar/block-actions-menu.native.js.map +1 -1
  38. package/build-module/components/block-parent-selector/index.js +7 -5
  39. package/build-module/components/block-parent-selector/index.js.map +1 -1
  40. package/build-module/components/block-removal-warning-modal/index.js +6 -3
  41. package/build-module/components/block-removal-warning-modal/index.js.map +1 -1
  42. package/build-module/components/block-tools/block-contextual-toolbar.js +8 -11
  43. package/build-module/components/block-tools/block-contextual-toolbar.js.map +1 -1
  44. package/build-module/components/global-styles/filters-panel.js +2 -2
  45. package/build-module/components/global-styles/filters-panel.js.map +1 -1
  46. package/build-module/components/index.js +5 -0
  47. package/build-module/components/index.js.map +1 -1
  48. package/build-module/components/inserter/block-patterns-explorer/patterns-list.js +2 -2
  49. package/build-module/components/inserter/block-patterns-explorer/patterns-list.js.map +1 -1
  50. package/build-module/components/inserter/block-patterns-tab.js +7 -33
  51. package/build-module/components/inserter/block-patterns-tab.js.map +1 -1
  52. package/build-module/components/inserter/hooks/use-block-types-state.js +3 -4
  53. package/build-module/components/inserter/hooks/use-block-types-state.js.map +1 -1
  54. package/build-module/components/inserter/hooks/use-patterns-state.js +9 -3
  55. package/build-module/components/inserter/hooks/use-patterns-state.js.map +1 -1
  56. package/build-module/components/inserter/reusable-block-rename-hint.js +48 -0
  57. package/build-module/components/inserter/reusable-block-rename-hint.js.map +1 -0
  58. package/build-module/components/inserter/reusable-blocks-tab.js +5 -2
  59. package/build-module/components/inserter/reusable-blocks-tab.js.map +1 -1
  60. package/build-module/components/list-view/use-list-view-client-ids.js +2 -2
  61. package/build-module/components/list-view/use-list-view-client-ids.js.map +1 -1
  62. package/build-module/store/private-selectors.js +3 -3
  63. package/build-module/store/private-selectors.js.map +1 -1
  64. package/build-module/store/selectors.js +33 -15
  65. package/build-module/store/selectors.js.map +1 -1
  66. package/build-style/content-rtl.css +3 -0
  67. package/build-style/content.css +3 -0
  68. package/build-style/style-rtl.css +72 -22
  69. package/build-style/style.css +72 -22
  70. package/package.json +9 -9
  71. package/src/components/block-edit/edit.js +26 -9
  72. package/src/components/block-edit/test/edit.js +1 -1
  73. package/src/components/block-mobile-toolbar/block-actions-menu.native.js +4 -8
  74. package/src/components/block-parent-selector/index.js +13 -8
  75. package/src/components/block-removal-warning-modal/index.js +7 -6
  76. package/src/components/block-tools/block-contextual-toolbar.js +5 -11
  77. package/src/components/block-tools/style.scss +69 -26
  78. package/src/components/default-block-appender/content.scss +11 -0
  79. package/src/components/global-styles/filters-panel.js +2 -2
  80. package/src/components/index.js +5 -0
  81. package/src/components/inserter/block-patterns-explorer/patterns-list.js +8 -2
  82. package/src/components/inserter/block-patterns-tab.js +8 -56
  83. package/src/components/inserter/hooks/use-block-types-state.js +3 -4
  84. package/src/components/inserter/hooks/use-patterns-state.js +35 -19
  85. package/src/components/inserter/reusable-block-rename-hint.js +52 -0
  86. package/src/components/inserter/reusable-blocks-tab.js +5 -1
  87. package/src/components/inserter/style.scss +28 -0
  88. package/src/components/list-view/style.scss +1 -2
  89. package/src/components/list-view/use-list-view-client-ids.js +2 -2
  90. package/src/store/private-selectors.js +3 -6
  91. package/src/store/selectors.js +54 -20
  92. package/src/store/test/private-selectors.js +5 -5
@@ -1945,7 +1945,6 @@ const buildBlockTypeItem =
1945
1945
  *
1946
1946
  * @param {Object} state Editor state.
1947
1947
  * @param {?string} rootClientId Optional root client ID of block list.
1948
- * @param {?string} syncStatus Optional sync status to filter pattern blocks by.
1949
1948
  *
1950
1949
  * @return {WPEditorInserterItem[]} Items that appear in inserter.
1951
1950
  *
@@ -1962,11 +1961,7 @@ const buildBlockTypeItem =
1962
1961
  * @property {number} frecency Heuristic that combines frequency and recency.
1963
1962
  */
1964
1963
  export const getInserterItems = createSelector(
1965
- ( state, rootClientId = null, syncStatus ) => {
1966
- const buildBlockTypeInserterItem = buildBlockTypeItem( state, {
1967
- buildScope: 'inserter',
1968
- } );
1969
-
1964
+ ( state, rootClientId = null ) => {
1970
1965
  /*
1971
1966
  * Matches block comment delimiters amid serialized content.
1972
1967
  *
@@ -2031,13 +2026,7 @@ export const getInserterItems = createSelector(
2031
2026
  };
2032
2027
  };
2033
2028
 
2034
- const blockTypeInserterItems = getBlockTypes()
2035
- .filter( ( blockType ) =>
2036
- canIncludeBlockTypeInInserter( state, blockType, rootClientId )
2037
- )
2038
- .map( buildBlockTypeInserterItem );
2039
-
2040
- const reusableBlockInserterItems = canInsertBlockTypeUnmemoized(
2029
+ const syncedPatternInserterItems = canInsertBlockTypeUnmemoized(
2041
2030
  state,
2042
2031
  'core/block',
2043
2032
  rootClientId
@@ -2045,13 +2034,27 @@ export const getInserterItems = createSelector(
2045
2034
  ? getReusableBlocks( state )
2046
2035
  .filter(
2047
2036
  ( reusableBlock ) =>
2048
- syncStatus === reusableBlock.meta?.sync_status ||
2049
- ( ! syncStatus &&
2050
- reusableBlock.meta?.sync_status === '' )
2037
+ // Reusable blocks that are fully synced should have no sync status set
2038
+ // for backwards compat between patterns and old reusable blocks, but
2039
+ // some in release 16.1 may have had sync status inadvertantly set to
2040
+ // 'fully' if created in the site editor.
2041
+ reusableBlock.wp_pattern_sync_status === 'fully' ||
2042
+ reusableBlock.wp_pattern_sync_status === '' ||
2043
+ ! reusableBlock.wp_pattern_sync_status
2051
2044
  )
2052
2045
  .map( buildReusableBlockInserterItem )
2053
2046
  : [];
2054
2047
 
2048
+ const buildBlockTypeInserterItem = buildBlockTypeItem( state, {
2049
+ buildScope: 'inserter',
2050
+ } );
2051
+
2052
+ const blockTypeInserterItems = getBlockTypes()
2053
+ .filter( ( blockType ) =>
2054
+ canIncludeBlockTypeInInserter( state, blockType, rootClientId )
2055
+ )
2056
+ .map( buildBlockTypeInserterItem );
2057
+
2055
2058
  const items = blockTypeInserterItems.reduce( ( accumulator, item ) => {
2056
2059
  const { variations = [] } = item;
2057
2060
  // Exclude any block type item that is to be replaced by a default variation.
@@ -2082,7 +2085,7 @@ export const getInserterItems = createSelector(
2082
2085
  { core: [], noncore: [] }
2083
2086
  );
2084
2087
  const sortedBlockTypes = [ ...coreItems, ...nonCoreItems ];
2085
- return [ ...sortedBlockTypes, ...reusableBlockInserterItems ];
2088
+ return [ ...sortedBlockTypes, ...syncedPatternInserterItems ];
2086
2089
  },
2087
2090
  ( state, rootClientId ) => [
2088
2091
  state.blockListSettings[ rootClientId ],
@@ -2306,10 +2309,33 @@ const checkAllowListRecursive = ( blocks, allowedBlockTypes ) => {
2306
2309
  return true;
2307
2310
  };
2308
2311
 
2312
+ function getUnsyncedPatterns( state ) {
2313
+ const reusableBlocks =
2314
+ state?.settings?.__experimentalReusableBlocks ?? EMPTY_ARRAY;
2315
+
2316
+ return reusableBlocks
2317
+ .filter(
2318
+ ( reusableBlock ) =>
2319
+ reusableBlock.wp_pattern_sync_status === 'unsynced'
2320
+ )
2321
+ .map( ( reusableBlock ) => {
2322
+ return {
2323
+ name: `core/block/${ reusableBlock.id }`,
2324
+ title: reusableBlock.title.raw,
2325
+ categories: [ 'custom' ],
2326
+ content: reusableBlock.content.raw,
2327
+ };
2328
+ } );
2329
+ }
2330
+
2309
2331
  export const __experimentalGetParsedPattern = createSelector(
2310
2332
  ( state, patternName ) => {
2311
2333
  const patterns = state.settings.__experimentalBlockPatterns;
2312
- const pattern = patterns.find( ( { name } ) => name === patternName );
2334
+ const unsyncedPatterns = getUnsyncedPatterns( state );
2335
+
2336
+ const pattern = [ ...patterns, ...unsyncedPatterns ].find(
2337
+ ( { name } ) => name === patternName
2338
+ );
2313
2339
  if ( ! pattern ) {
2314
2340
  return null;
2315
2341
  }
@@ -2320,14 +2346,20 @@ export const __experimentalGetParsedPattern = createSelector(
2320
2346
  } ),
2321
2347
  };
2322
2348
  },
2323
- ( state ) => [ state.settings.__experimentalBlockPatterns ]
2349
+ ( state ) => [
2350
+ state.settings.__experimentalBlockPatterns,
2351
+ state.settings.__experimentalReusableBlocks,
2352
+ ]
2324
2353
  );
2325
2354
 
2326
2355
  const getAllAllowedPatterns = createSelector(
2327
2356
  ( state ) => {
2328
2357
  const patterns = state.settings.__experimentalBlockPatterns;
2358
+ const unsyncedPatterns = getUnsyncedPatterns( state );
2359
+
2329
2360
  const { allowedBlockTypes } = getSettings( state );
2330
- const parsedPatterns = patterns
2361
+
2362
+ const parsedPatterns = [ ...patterns, ...unsyncedPatterns ]
2331
2363
  .filter( ( { inserter = true } ) => !! inserter )
2332
2364
  .map( ( { name } ) =>
2333
2365
  __experimentalGetParsedPattern( state, name )
@@ -2339,6 +2371,7 @@ const getAllAllowedPatterns = createSelector(
2339
2371
  },
2340
2372
  ( state ) => [
2341
2373
  state.settings.__experimentalBlockPatterns,
2374
+ state.settings.__experimentalReusableBlocks,
2342
2375
  state.settings.allowedBlockTypes,
2343
2376
  ]
2344
2377
  );
@@ -2365,6 +2398,7 @@ export const __experimentalGetAllowedPatterns = createSelector(
2365
2398
  },
2366
2399
  ( state, rootClientId ) => [
2367
2400
  state.settings.__experimentalBlockPatterns,
2401
+ state.settings.__experimentalReusableBlocks,
2368
2402
  state.settings.allowedBlockTypes,
2369
2403
  state.settings.templateLock,
2370
2404
  state.blockListSettings[ rootClientId ],
@@ -11,7 +11,7 @@ import {
11
11
  getLastInsertedBlocksClientIds,
12
12
  getBlockEditingMode,
13
13
  isBlockSubtreeDisabled,
14
- getListViewClientIdsTree,
14
+ getEnabledClientIdsTree,
15
15
  getEnabledBlockParents,
16
16
  } from '../private-selectors';
17
17
 
@@ -391,7 +391,7 @@ describe( 'private selectors', () => {
391
391
  } );
392
392
  } );
393
393
 
394
- describe( 'getListViewClientIdsTree', () => {
394
+ describe( 'getEnabledClientIdsTree', () => {
395
395
  const baseState = {
396
396
  settings: {},
397
397
  blocks: {
@@ -462,7 +462,7 @@ describe( 'private selectors', () => {
462
462
  ...baseState,
463
463
  blockEditingModes: new Map( [] ),
464
464
  };
465
- expect( getListViewClientIdsTree( state ) ).toEqual( [
465
+ expect( getEnabledClientIdsTree( state ) ).toEqual( [
466
466
  {
467
467
  clientId: '6cf70164-9097-4460-bcbf-200560546988',
468
468
  innerBlocks: [],
@@ -500,7 +500,7 @@ describe( 'private selectors', () => {
500
500
  blockEditingModes: new Map( [] ),
501
501
  };
502
502
  expect(
503
- getListViewClientIdsTree(
503
+ getEnabledClientIdsTree(
504
504
  state,
505
505
  'ef45d5fd-5234-4fd5-ac4f-c3736c7f9337'
506
506
  )
@@ -534,7 +534,7 @@ describe( 'private selectors', () => {
534
534
  [ '9b9c5c3f-2e46-4f02-9e14-9fe9515b958f', 'contentOnly' ],
535
535
  ] ),
536
536
  };
537
- expect( getListViewClientIdsTree( state ) ).toEqual( [
537
+ expect( getEnabledClientIdsTree( state ) ).toEqual( [
538
538
  {
539
539
  clientId: 'b26fc763-417d-4f01-b81c-2ec61e14a972',
540
540
  innerBlocks: [],