@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
@@ -124,16 +124,16 @@ export const isBlockSubtreeDisabled = createSelector((state, clientId) => {
124
124
  * @return {Object[]} Tree of block objects with only clientID and innerBlocks set.
125
125
  */
126
126
 
127
- export const getListViewClientIdsTree = createSelector((state, rootClientId = '') => {
127
+ export const getEnabledClientIdsTree = createSelector((state, rootClientId = '') => {
128
128
  return getBlockOrder(state, rootClientId).flatMap(clientId => {
129
129
  if (getBlockEditingMode(state, clientId) !== 'disabled') {
130
130
  return [{
131
131
  clientId,
132
- innerBlocks: getListViewClientIdsTree(state, clientId)
132
+ innerBlocks: getEnabledClientIdsTree(state, clientId)
133
133
  }];
134
134
  }
135
135
 
136
- return getListViewClientIdsTree(state, clientId);
136
+ return getEnabledClientIdsTree(state, clientId);
137
137
  });
138
138
  }, state => [state.blocks.order, state.blockEditingModes, state.settings.templateLock, state.blockListSettings]);
139
139
  /**
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/store/private-selectors.js"],"names":["createSelector","select","store","blocksStore","getBlockRootClientId","getTemplateLock","getBlockName","getBlockOrder","getBlockParents","isBlockInterfaceHidden","state","getLastInsertedBlocksClientIds","lastBlockInserted","clientIds","getBlockEditingMode","clientId","blockEditingModes","has","get","rootClientId","templateLock","name","isContent","__experimentalHasContentRoleAttribute","parentMode","isBlockSubtreeDisabled","isChildSubtreeDisabled","childClientId","mode","undefined","every","blocks","parents","getListViewClientIdsTree","flatMap","innerBlocks","order","settings","blockListSettings","getEnabledBlockParents","ascending","filter","parent","getRemovalPromptData","removalPromptData","isRemovalPromptSupported"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport createSelector from 'rememo';\n\n/**\n * WordPress dependencies\n */\nimport { select } from '@wordpress/data';\nimport { store as blocksStore } from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport {\n\tgetBlockRootClientId,\n\tgetTemplateLock,\n\tgetBlockName,\n\tgetBlockOrder,\n\tgetBlockParents,\n} from './selectors';\n\n/**\n * Returns true if the block interface is hidden, or false otherwise.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether the block toolbar is hidden.\n */\nexport function isBlockInterfaceHidden( state ) {\n\treturn state.isBlockInterfaceHidden;\n}\n\n/**\n * Gets the client ids of the last inserted blocks.\n *\n * @param {Object} state Global application state.\n * @return {Array|undefined} Client Ids of the last inserted block(s).\n */\nexport function getLastInsertedBlocksClientIds( state ) {\n\treturn state?.lastBlockInserted?.clientIds;\n}\n\n/**\n * @typedef {import('../components/block-editing-mode').BlockEditingMode} BlockEditingMode\n */\n\n/**\n * Returns the block editing mode for a given block.\n *\n * The mode can be one of three options:\n *\n * - `'disabled'`: Prevents editing the block entirely, i.e. it cannot be\n * selected.\n * - `'contentOnly'`: Hides all non-content UI, e.g. auxiliary controls in the\n * toolbar, the block movers, block settings.\n * - `'default'`: Allows editing the block as normal.\n *\n * Blocks can set a mode using the `useBlockEditingMode` hook.\n *\n * The mode is inherited by all of the block's inner blocks, unless they have\n * their own mode.\n *\n * A template lock can also set a mode. If the template lock is `'contentOnly'`,\n * the block's mode is overridden to `'contentOnly'` if the block has a content\n * role attribute, or `'disabled'` otherwise.\n *\n * @see useBlockEditingMode\n *\n * @param {Object} state Global application state.\n * @param {string} clientId The block client ID, or `''` for the root container.\n *\n * @return {BlockEditingMode} The block editing mode. One of `'disabled'`,\n * `'contentOnly'`, or `'default'`.\n */\nexport function getBlockEditingMode( state, clientId = '' ) {\n\tif ( state.blockEditingModes.has( clientId ) ) {\n\t\treturn state.blockEditingModes.get( clientId );\n\t}\n\tif ( ! clientId ) {\n\t\treturn 'default';\n\t}\n\tconst rootClientId = getBlockRootClientId( state, clientId );\n\tconst templateLock = getTemplateLock( state, rootClientId );\n\tif ( templateLock === 'contentOnly' ) {\n\t\tconst name = getBlockName( state, clientId );\n\t\t// TODO: Terrible hack! We're calling the global select() function\n\t\t// here instead of using createRegistrySelector(). The problem with\n\t\t// using createRegistrySelector() is that then the public\n\t\t// block-editor selectors (e.g. canInsertBlockTypeUnmemoized) can't\n\t\t// call this private block-editor selector due to a bug in\n\t\t// @wordpress/data. See\n\t\t// https://github.com/WordPress/gutenberg/pull/50985.\n\t\tconst isContent =\n\t\t\tselect( blocksStore ).__experimentalHasContentRoleAttribute( name );\n\t\treturn isContent ? 'contentOnly' : 'disabled';\n\t}\n\tconst parentMode = getBlockEditingMode( state, rootClientId );\n\treturn parentMode === 'contentOnly' ? 'default' : parentMode;\n}\n\n/**\n * Returns true if the block with the given client ID and all of its descendants\n * have an editing mode of 'disabled', or false otherwise.\n *\n * @param {Object} state Global application state.\n * @param {string} clientId The block client ID.\n *\n * @return {boolean} Whether the block and its descendants are disabled.\n */\nexport const isBlockSubtreeDisabled = createSelector(\n\t( state, clientId ) => {\n\t\tconst isChildSubtreeDisabled = ( childClientId ) => {\n\t\t\tconst mode = state.blockEditingModes.get( childClientId );\n\t\t\treturn (\n\t\t\t\t( mode === undefined || mode === 'disabled' ) &&\n\t\t\t\tgetBlockOrder( state, childClientId ).every(\n\t\t\t\t\tisChildSubtreeDisabled\n\t\t\t\t)\n\t\t\t);\n\t\t};\n\t\treturn (\n\t\t\tgetBlockEditingMode( state, clientId ) === 'disabled' &&\n\t\t\tgetBlockOrder( state, clientId ).every( isChildSubtreeDisabled )\n\t\t);\n\t},\n\t( state ) => [ state.blockEditingModes, state.blocks.parents ]\n);\n\n/**\n * Returns a tree of block objects with only clientID and innerBlocks set.\n * Blocks with a 'disabled' editing mode are not included.\n *\n * @param {Object} state Global application state.\n * @param {?string} rootClientId Optional root client ID of block list.\n *\n * @return {Object[]} Tree of block objects with only clientID and innerBlocks set.\n */\nexport const getListViewClientIdsTree = createSelector(\n\t( state, rootClientId = '' ) => {\n\t\treturn getBlockOrder( state, rootClientId ).flatMap( ( clientId ) => {\n\t\t\tif ( getBlockEditingMode( state, clientId ) !== 'disabled' ) {\n\t\t\t\treturn [\n\t\t\t\t\t{\n\t\t\t\t\t\tclientId,\n\t\t\t\t\t\tinnerBlocks: getListViewClientIdsTree(\n\t\t\t\t\t\t\tstate,\n\t\t\t\t\t\t\tclientId\n\t\t\t\t\t\t),\n\t\t\t\t\t},\n\t\t\t\t];\n\t\t\t}\n\t\t\treturn getListViewClientIdsTree( state, clientId );\n\t\t} );\n\t},\n\t( state ) => [\n\t\tstate.blocks.order,\n\t\tstate.blockEditingModes,\n\t\tstate.settings.templateLock,\n\t\tstate.blockListSettings,\n\t]\n);\n\n/**\n * Returns a list of a given block's ancestors, from top to bottom. Blocks with\n * a 'disabled' editing mode are excluded.\n *\n * @see getBlockParents\n *\n * @param {Object} state Global application state.\n * @param {string} clientId The block client ID.\n * @param {boolean} ascending Order results from bottom to top (true) or top\n * to bottom (false).\n */\nexport const getEnabledBlockParents = createSelector(\n\t( state, clientId, ascending = false ) => {\n\t\treturn getBlockParents( state, clientId, ascending ).filter(\n\t\t\t( parent ) => getBlockEditingMode( state, parent ) !== 'disabled'\n\t\t);\n\t},\n\t( state ) => [\n\t\tstate.blocks.parents,\n\t\tstate.blockEditingModes,\n\t\tstate.settings.templateLock,\n\t\tstate.blockListSettings,\n\t]\n);\n\n/**\n * Selector that returns the data needed to display a prompt when certain\n * blocks are removed, or `false` if no such prompt is requested.\n *\n * @param {Object} state Global application state.\n *\n * @return {Object|false} Data for removal prompt display, if any.\n */\nexport function getRemovalPromptData( state ) {\n\treturn state.removalPromptData;\n}\n\n/**\n * Returns true if removal prompt exists, or false otherwise.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether removal prompt exists.\n */\nexport function isRemovalPromptSupported( state ) {\n\treturn state.isRemovalPromptSupported;\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/block-editor/src/store/private-selectors.js"],"names":["createSelector","select","store","blocksStore","getBlockRootClientId","getTemplateLock","getBlockName","getBlockOrder","getBlockParents","isBlockInterfaceHidden","state","getLastInsertedBlocksClientIds","lastBlockInserted","clientIds","getBlockEditingMode","clientId","blockEditingModes","has","get","rootClientId","templateLock","name","isContent","__experimentalHasContentRoleAttribute","parentMode","isBlockSubtreeDisabled","isChildSubtreeDisabled","childClientId","mode","undefined","every","blocks","parents","getEnabledClientIdsTree","flatMap","innerBlocks","order","settings","blockListSettings","getEnabledBlockParents","ascending","filter","parent","getRemovalPromptData","removalPromptData","isRemovalPromptSupported"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport createSelector from 'rememo';\n\n/**\n * WordPress dependencies\n */\nimport { select } from '@wordpress/data';\nimport { store as blocksStore } from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport {\n\tgetBlockRootClientId,\n\tgetTemplateLock,\n\tgetBlockName,\n\tgetBlockOrder,\n\tgetBlockParents,\n} from './selectors';\n\n/**\n * Returns true if the block interface is hidden, or false otherwise.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether the block toolbar is hidden.\n */\nexport function isBlockInterfaceHidden( state ) {\n\treturn state.isBlockInterfaceHidden;\n}\n\n/**\n * Gets the client ids of the last inserted blocks.\n *\n * @param {Object} state Global application state.\n * @return {Array|undefined} Client Ids of the last inserted block(s).\n */\nexport function getLastInsertedBlocksClientIds( state ) {\n\treturn state?.lastBlockInserted?.clientIds;\n}\n\n/**\n * @typedef {import('../components/block-editing-mode').BlockEditingMode} BlockEditingMode\n */\n\n/**\n * Returns the block editing mode for a given block.\n *\n * The mode can be one of three options:\n *\n * - `'disabled'`: Prevents editing the block entirely, i.e. it cannot be\n * selected.\n * - `'contentOnly'`: Hides all non-content UI, e.g. auxiliary controls in the\n * toolbar, the block movers, block settings.\n * - `'default'`: Allows editing the block as normal.\n *\n * Blocks can set a mode using the `useBlockEditingMode` hook.\n *\n * The mode is inherited by all of the block's inner blocks, unless they have\n * their own mode.\n *\n * A template lock can also set a mode. If the template lock is `'contentOnly'`,\n * the block's mode is overridden to `'contentOnly'` if the block has a content\n * role attribute, or `'disabled'` otherwise.\n *\n * @see useBlockEditingMode\n *\n * @param {Object} state Global application state.\n * @param {string} clientId The block client ID, or `''` for the root container.\n *\n * @return {BlockEditingMode} The block editing mode. One of `'disabled'`,\n * `'contentOnly'`, or `'default'`.\n */\nexport function getBlockEditingMode( state, clientId = '' ) {\n\tif ( state.blockEditingModes.has( clientId ) ) {\n\t\treturn state.blockEditingModes.get( clientId );\n\t}\n\tif ( ! clientId ) {\n\t\treturn 'default';\n\t}\n\tconst rootClientId = getBlockRootClientId( state, clientId );\n\tconst templateLock = getTemplateLock( state, rootClientId );\n\tif ( templateLock === 'contentOnly' ) {\n\t\tconst name = getBlockName( state, clientId );\n\t\t// TODO: Terrible hack! We're calling the global select() function\n\t\t// here instead of using createRegistrySelector(). The problem with\n\t\t// using createRegistrySelector() is that then the public\n\t\t// block-editor selectors (e.g. canInsertBlockTypeUnmemoized) can't\n\t\t// call this private block-editor selector due to a bug in\n\t\t// @wordpress/data. See\n\t\t// https://github.com/WordPress/gutenberg/pull/50985.\n\t\tconst isContent =\n\t\t\tselect( blocksStore ).__experimentalHasContentRoleAttribute( name );\n\t\treturn isContent ? 'contentOnly' : 'disabled';\n\t}\n\tconst parentMode = getBlockEditingMode( state, rootClientId );\n\treturn parentMode === 'contentOnly' ? 'default' : parentMode;\n}\n\n/**\n * Returns true if the block with the given client ID and all of its descendants\n * have an editing mode of 'disabled', or false otherwise.\n *\n * @param {Object} state Global application state.\n * @param {string} clientId The block client ID.\n *\n * @return {boolean} Whether the block and its descendants are disabled.\n */\nexport const isBlockSubtreeDisabled = createSelector(\n\t( state, clientId ) => {\n\t\tconst isChildSubtreeDisabled = ( childClientId ) => {\n\t\t\tconst mode = state.blockEditingModes.get( childClientId );\n\t\t\treturn (\n\t\t\t\t( mode === undefined || mode === 'disabled' ) &&\n\t\t\t\tgetBlockOrder( state, childClientId ).every(\n\t\t\t\t\tisChildSubtreeDisabled\n\t\t\t\t)\n\t\t\t);\n\t\t};\n\t\treturn (\n\t\t\tgetBlockEditingMode( state, clientId ) === 'disabled' &&\n\t\t\tgetBlockOrder( state, clientId ).every( isChildSubtreeDisabled )\n\t\t);\n\t},\n\t( state ) => [ state.blockEditingModes, state.blocks.parents ]\n);\n\n/**\n * Returns a tree of block objects with only clientID and innerBlocks set.\n * Blocks with a 'disabled' editing mode are not included.\n *\n * @param {Object} state Global application state.\n * @param {?string} rootClientId Optional root client ID of block list.\n *\n * @return {Object[]} Tree of block objects with only clientID and innerBlocks set.\n */\nexport const getEnabledClientIdsTree = createSelector(\n\t( state, rootClientId = '' ) => {\n\t\treturn getBlockOrder( state, rootClientId ).flatMap( ( clientId ) => {\n\t\t\tif ( getBlockEditingMode( state, clientId ) !== 'disabled' ) {\n\t\t\t\treturn [\n\t\t\t\t\t{\n\t\t\t\t\t\tclientId,\n\t\t\t\t\t\tinnerBlocks: getEnabledClientIdsTree( state, clientId ),\n\t\t\t\t\t},\n\t\t\t\t];\n\t\t\t}\n\t\t\treturn getEnabledClientIdsTree( state, clientId );\n\t\t} );\n\t},\n\t( state ) => [\n\t\tstate.blocks.order,\n\t\tstate.blockEditingModes,\n\t\tstate.settings.templateLock,\n\t\tstate.blockListSettings,\n\t]\n);\n\n/**\n * Returns a list of a given block's ancestors, from top to bottom. Blocks with\n * a 'disabled' editing mode are excluded.\n *\n * @see getBlockParents\n *\n * @param {Object} state Global application state.\n * @param {string} clientId The block client ID.\n * @param {boolean} ascending Order results from bottom to top (true) or top\n * to bottom (false).\n */\nexport const getEnabledBlockParents = createSelector(\n\t( state, clientId, ascending = false ) => {\n\t\treturn getBlockParents( state, clientId, ascending ).filter(\n\t\t\t( parent ) => getBlockEditingMode( state, parent ) !== 'disabled'\n\t\t);\n\t},\n\t( state ) => [\n\t\tstate.blocks.parents,\n\t\tstate.blockEditingModes,\n\t\tstate.settings.templateLock,\n\t\tstate.blockListSettings,\n\t]\n);\n\n/**\n * Selector that returns the data needed to display a prompt when certain\n * blocks are removed, or `false` if no such prompt is requested.\n *\n * @param {Object} state Global application state.\n *\n * @return {Object|false} Data for removal prompt display, if any.\n */\nexport function getRemovalPromptData( state ) {\n\treturn state.removalPromptData;\n}\n\n/**\n * Returns true if removal prompt exists, or false otherwise.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether removal prompt exists.\n */\nexport function isRemovalPromptSupported( state ) {\n\treturn state.isRemovalPromptSupported;\n}\n"]}
@@ -1765,7 +1765,6 @@ const buildBlockTypeItem = (state, {
1765
1765
  *
1766
1766
  * @param {Object} state Editor state.
1767
1767
  * @param {?string} rootClientId Optional root client ID of block list.
1768
- * @param {?string} syncStatus Optional sync status to filter pattern blocks by.
1769
1768
  *
1770
1769
  * @return {WPEditorInserterItem[]} Items that appear in inserter.
1771
1770
  *
@@ -1783,10 +1782,7 @@ const buildBlockTypeItem = (state, {
1783
1782
  */
1784
1783
 
1785
1784
 
1786
- export const getInserterItems = createSelector((state, rootClientId = null, syncStatus) => {
1787
- const buildBlockTypeInserterItem = buildBlockTypeItem(state, {
1788
- buildScope: 'inserter'
1789
- });
1785
+ export const getInserterItems = createSelector((state, rootClientId = null) => {
1790
1786
  /*
1791
1787
  * Matches block comment delimiters amid serialized content.
1792
1788
  *
@@ -1800,7 +1796,6 @@ export const getInserterItems = createSelector((state, rootClientId = null, sync
1800
1796
  * - prepended ^\s*
1801
1797
  *
1802
1798
  */
1803
-
1804
1799
  const blockParserTokenizer = /^\s*<!--\s+(\/)?wp:([a-z][a-z0-9_-]*\/)?([a-z][a-z0-9_-]*)\s+({(?:(?=([^}]+|}+(?=})|(?!}\s+\/?-->)[^])*)\5|[^]*?)}\s+)?(\/)?-->/;
1805
1800
 
1806
1801
  const buildReusableBlockInserterItem = reusableBlock => {
@@ -1852,8 +1847,15 @@ export const getInserterItems = createSelector((state, rootClientId = null, sync
1852
1847
  };
1853
1848
  };
1854
1849
 
1850
+ const syncedPatternInserterItems = canInsertBlockTypeUnmemoized(state, 'core/block', rootClientId) ? getReusableBlocks(state).filter(reusableBlock => // Reusable blocks that are fully synced should have no sync status set
1851
+ // for backwards compat between patterns and old reusable blocks, but
1852
+ // some in release 16.1 may have had sync status inadvertantly set to
1853
+ // 'fully' if created in the site editor.
1854
+ reusableBlock.wp_pattern_sync_status === 'fully' || reusableBlock.wp_pattern_sync_status === '' || !reusableBlock.wp_pattern_sync_status).map(buildReusableBlockInserterItem) : [];
1855
+ const buildBlockTypeInserterItem = buildBlockTypeItem(state, {
1856
+ buildScope: 'inserter'
1857
+ });
1855
1858
  const blockTypeInserterItems = getBlockTypes().filter(blockType => canIncludeBlockTypeInInserter(state, blockType, rootClientId)).map(buildBlockTypeInserterItem);
1856
- const reusableBlockInserterItems = canInsertBlockTypeUnmemoized(state, 'core/block', rootClientId) ? getReusableBlocks(state).filter(reusableBlock => syncStatus === reusableBlock.meta?.sync_status || !syncStatus && reusableBlock.meta?.sync_status === '').map(buildReusableBlockInserterItem) : [];
1857
1859
  const items = blockTypeInserterItems.reduce((accumulator, item) => {
1858
1860
  const {
1859
1861
  variations = []
@@ -1895,7 +1897,7 @@ export const getInserterItems = createSelector((state, rootClientId = null, sync
1895
1897
  noncore: []
1896
1898
  });
1897
1899
  const sortedBlockTypes = [...coreItems, ...nonCoreItems];
1898
- return [...sortedBlockTypes, ...reusableBlockInserterItems];
1900
+ return [...sortedBlockTypes, ...syncedPatternInserterItems];
1899
1901
  }, (state, rootClientId) => [state.blockListSettings[rootClientId], state.blocks.byClientId, state.blocks.order, state.preferences.insertUsage, state.settings.allowedBlockTypes, state.settings.templateLock, getReusableBlocks(state), getBlockTypes()]);
1900
1902
  /**
1901
1903
  * Determines the items that appear in the available block transforms list.
@@ -2039,9 +2041,24 @@ const checkAllowListRecursive = (blocks, allowedBlockTypes) => {
2039
2041
  return true;
2040
2042
  };
2041
2043
 
2044
+ function getUnsyncedPatterns(state) {
2045
+ var _state$settings$__exp;
2046
+
2047
+ const reusableBlocks = (_state$settings$__exp = state?.settings?.__experimentalReusableBlocks) !== null && _state$settings$__exp !== void 0 ? _state$settings$__exp : EMPTY_ARRAY;
2048
+ return reusableBlocks.filter(reusableBlock => reusableBlock.wp_pattern_sync_status === 'unsynced').map(reusableBlock => {
2049
+ return {
2050
+ name: `core/block/${reusableBlock.id}`,
2051
+ title: reusableBlock.title.raw,
2052
+ categories: ['custom'],
2053
+ content: reusableBlock.content.raw
2054
+ };
2055
+ });
2056
+ }
2057
+
2042
2058
  export const __experimentalGetParsedPattern = createSelector((state, patternName) => {
2043
2059
  const patterns = state.settings.__experimentalBlockPatterns;
2044
- const pattern = patterns.find(({
2060
+ const unsyncedPatterns = getUnsyncedPatterns(state);
2061
+ const pattern = [...patterns, ...unsyncedPatterns].find(({
2045
2062
  name
2046
2063
  }) => name === patternName);
2047
2064
 
@@ -2054,13 +2071,14 @@ export const __experimentalGetParsedPattern = createSelector((state, patternName
2054
2071
  __unstableSkipMigrationLogs: true
2055
2072
  })
2056
2073
  };
2057
- }, state => [state.settings.__experimentalBlockPatterns]);
2074
+ }, state => [state.settings.__experimentalBlockPatterns, state.settings.__experimentalReusableBlocks]);
2058
2075
  const getAllAllowedPatterns = createSelector(state => {
2059
2076
  const patterns = state.settings.__experimentalBlockPatterns;
2077
+ const unsyncedPatterns = getUnsyncedPatterns(state);
2060
2078
  const {
2061
2079
  allowedBlockTypes
2062
2080
  } = getSettings(state);
2063
- const parsedPatterns = patterns.filter(({
2081
+ const parsedPatterns = [...patterns, ...unsyncedPatterns].filter(({
2064
2082
  inserter = true
2065
2083
  }) => !!inserter).map(({
2066
2084
  name
@@ -2069,7 +2087,7 @@ const getAllAllowedPatterns = createSelector(state => {
2069
2087
  blocks
2070
2088
  }) => checkAllowListRecursive(blocks, allowedBlockTypes));
2071
2089
  return allowedPatterns;
2072
- }, state => [state.settings.__experimentalBlockPatterns, state.settings.allowedBlockTypes]);
2090
+ }, state => [state.settings.__experimentalBlockPatterns, state.settings.__experimentalReusableBlocks, state.settings.allowedBlockTypes]);
2073
2091
  /**
2074
2092
  * Returns the list of allowed patterns for inner blocks children.
2075
2093
  *
@@ -2087,7 +2105,7 @@ export const __experimentalGetAllowedPatterns = createSelector((state, rootClien
2087
2105
  name
2088
2106
  }) => canInsertBlockType(state, name, rootClientId)));
2089
2107
  return patternsAllowed;
2090
- }, (state, rootClientId) => [state.settings.__experimentalBlockPatterns, state.settings.allowedBlockTypes, state.settings.templateLock, state.blockListSettings[rootClientId], state.blocks.byClientId.get(rootClientId)]);
2108
+ }, (state, rootClientId) => [state.settings.__experimentalBlockPatterns, state.settings.__experimentalReusableBlocks, state.settings.allowedBlockTypes, state.settings.templateLock, state.blockListSettings[rootClientId], state.blocks.byClientId.get(rootClientId)]);
2091
2109
  /**
2092
2110
  * Returns the list of patterns based on their declared `blockTypes`
2093
2111
  * and a block's name.
@@ -2311,9 +2329,9 @@ export function __experimentalGetLastBlockAttributeChanges(state) {
2311
2329
  */
2312
2330
 
2313
2331
  function getReusableBlocks(state) {
2314
- var _state$settings$__exp;
2332
+ var _state$settings$__exp2;
2315
2333
 
2316
- return (_state$settings$__exp = state?.settings?.__experimentalReusableBlocks) !== null && _state$settings$__exp !== void 0 ? _state$settings$__exp : EMPTY_ARRAY;
2334
+ return (_state$settings$__exp2 = state?.settings?.__experimentalReusableBlocks) !== null && _state$settings$__exp2 !== void 0 ? _state$settings$__exp2 : EMPTY_ARRAY;
2317
2335
  }
2318
2336
  /**
2319
2337
  * Returns whether the navigation mode is enabled.