@wordpress/block-editor 15.3.1-next.836ecdcae.0 → 15.3.1-next.a730c9c8c.0
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.
- package/build/autocompleters/block.js +2 -4
- package/build/autocompleters/block.js.map +1 -1
- package/build/components/block-card/index.js +4 -2
- package/build/components/block-card/index.js.map +1 -1
- package/build/components/block-inspector/edit-contents-button.js +54 -0
- package/build/components/block-inspector/edit-contents-button.js.map +1 -0
- package/build/components/block-inspector/index.js +5 -1
- package/build/components/block-inspector/index.js.map +1 -1
- package/build/components/block-list/index.js +3 -1
- package/build/components/block-list/index.js.map +1 -1
- package/build/components/block-popover/use-popover-scroll.js +11 -2
- package/build/components/block-popover/use-popover-scroll.js.map +1 -1
- package/build/components/block-switcher/index.js +13 -8
- package/build/components/block-switcher/index.js.map +1 -1
- package/build/components/block-toolbar/index.js +5 -2
- package/build/components/block-toolbar/index.js.map +1 -1
- package/build/components/block-tools/insertion-point.js +10 -0
- package/build/components/block-tools/insertion-point.js.map +1 -1
- package/build/components/block-variation-transforms/index.js +10 -6
- package/build/components/block-variation-transforms/index.js.map +1 -1
- package/build/components/border-radius-control/utils.js.map +1 -1
- package/build/components/global-styles/border-panel.js +6 -6
- package/build/components/global-styles/border-panel.js.map +1 -1
- package/build/components/link-control/search-item.js +30 -12
- package/build/components/link-control/search-item.js.map +1 -1
- package/build/components/url-popover/image-url-input-ui.js +7 -2
- package/build/components/url-popover/image-url-input-ui.js.map +1 -1
- package/build/components/writing-flow/use-clipboard-handler.js +6 -1
- package/build/components/writing-flow/use-clipboard-handler.js.map +1 -1
- package/build/store/private-selectors.js +9 -21
- package/build/store/private-selectors.js.map +1 -1
- package/build/store/reducer.js +114 -0
- package/build/store/reducer.js.map +1 -1
- package/build/store/selectors.js +16 -30
- package/build/store/selectors.js.map +1 -1
- package/build/store/utils.js +18 -0
- package/build/store/utils.js.map +1 -1
- package/build/utils/block-bindings.js +1 -1
- package/build/utils/block-bindings.js.map +1 -1
- package/build-module/autocompleters/block.js +3 -5
- package/build-module/autocompleters/block.js.map +1 -1
- package/build-module/components/block-card/index.js +4 -2
- package/build-module/components/block-card/index.js.map +1 -1
- package/build-module/components/block-inspector/edit-contents-button.js +47 -0
- package/build-module/components/block-inspector/edit-contents-button.js.map +1 -0
- package/build-module/components/block-inspector/index.js +5 -1
- package/build-module/components/block-inspector/index.js.map +1 -1
- package/build-module/components/block-list/index.js +3 -1
- package/build-module/components/block-list/index.js.map +1 -1
- package/build-module/components/block-popover/use-popover-scroll.js +11 -2
- package/build-module/components/block-popover/use-popover-scroll.js.map +1 -1
- package/build-module/components/block-switcher/index.js +13 -8
- package/build-module/components/block-switcher/index.js.map +1 -1
- package/build-module/components/block-toolbar/index.js +5 -2
- package/build-module/components/block-toolbar/index.js.map +1 -1
- package/build-module/components/block-tools/insertion-point.js +11 -1
- package/build-module/components/block-tools/insertion-point.js.map +1 -1
- package/build-module/components/block-variation-transforms/index.js +10 -6
- package/build-module/components/block-variation-transforms/index.js.map +1 -1
- package/build-module/components/border-radius-control/utils.js.map +1 -1
- package/build-module/components/global-styles/border-panel.js +6 -6
- package/build-module/components/global-styles/border-panel.js.map +1 -1
- package/build-module/components/link-control/search-item.js +30 -12
- package/build-module/components/link-control/search-item.js.map +1 -1
- package/build-module/components/url-popover/image-url-input-ui.js +9 -4
- package/build-module/components/url-popover/image-url-input-ui.js.map +1 -1
- package/build-module/components/writing-flow/use-clipboard-handler.js +6 -1
- package/build-module/components/writing-flow/use-clipboard-handler.js.map +1 -1
- package/build-module/store/private-selectors.js +9 -21
- package/build-module/store/private-selectors.js.map +1 -1
- package/build-module/store/reducer.js +114 -0
- package/build-module/store/reducer.js.map +1 -1
- package/build-module/store/selectors.js +16 -30
- package/build-module/store/selectors.js.map +1 -1
- package/build-module/store/utils.js +17 -0
- package/build-module/store/utils.js.map +1 -1
- package/build-module/utils/block-bindings.js +1 -1
- package/build-module/utils/block-bindings.js.map +1 -1
- package/build-style/style-rtl.css +9 -5
- package/build-style/style.css +9 -5
- package/package.json +34 -34
- package/src/autocompleters/block.js +6 -11
- package/src/components/block-card/index.js +11 -1
- package/src/components/block-inspector/edit-contents-button.js +46 -0
- package/src/components/block-inspector/index.js +6 -1
- package/src/components/block-inspector/style.scss +5 -0
- package/src/components/block-list/index.js +7 -1
- package/src/components/block-popover/use-popover-scroll.js +10 -2
- package/src/components/block-switcher/index.js +13 -4
- package/src/components/block-toolbar/index.js +11 -5
- package/src/components/block-toolbar/style.scss +3 -5
- package/src/components/block-tools/insertion-point.js +19 -1
- package/src/components/block-variation-transforms/index.js +39 -27
- package/src/components/border-radius-control/test/utils.js +71 -0
- package/src/components/border-radius-control/utils.js +1 -0
- package/src/components/global-styles/border-panel.js +7 -6
- package/src/components/link-control/search-item.js +31 -12
- package/src/components/link-control/style.scss +0 -1
- package/src/components/link-control/test/index.js +14 -2
- package/src/components/url-popover/image-url-input-ui.js +18 -2
- package/src/components/writing-flow/use-clipboard-handler.js +6 -0
- package/src/store/private-selectors.js +12 -24
- package/src/store/reducer.js +188 -0
- package/src/store/selectors.js +38 -59
- package/src/store/test/reducer.js +398 -0
- package/src/store/test/selectors.js +65 -192
- package/src/store/utils.js +21 -0
- package/src/utils/block-bindings.js +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_es","_interopRequireDefault","require","_compose","_data","_deprecated","_blocks","_defaults","_array","_privateKeys","_lockUnlock","isContentBlock","unlock","blocksPrivateApis","identity","x","mapBlockOrder","blocks","rootClientId","result","Map","current","set","forEach","block","clientId","innerBlocks","push","order","subClientId","mapBlockParents","stack","length","parent","currentBlocks","shift","flattenBlocks","transform","getFlattenedClientIds","getFlattenedBlocksWithoutAttributes","attributes","restBlock","getFlattenedBlockAttributes","hasSameKeys","a","b","fastDeepEqual","Object","keys","isUpdatingSameBlockAttribute","action","lastAction","type","undefined","clientIds","updateBlockTreeForBlocks","state","treeToUpdate","tree","flattenedBlocks","assign","get","byClientId","map","subBlock","updateParentInnerBlocksInTree","updatedClientIds","updateChildrenOfUpdatedClientIds","uncontrolledParents","Set","controlledParents","parents","controlledInnerBlocks","add","withBlockTree","reducer","newState","inserterClientIds","replacedClientIds","delete","parentsOfRemovedBlocks","parentId","removedClientIds","updatedBlockUids","fromRootClientId","toRootClientId","name","ref","updatedId","withPersistentBlockChange","markNextChangeAsNotPersistent","explicitPersistent","nextState","nextIsPersistentChange","_state$isPersistentCh","isPersistentChange","isExplicitPersistentChange","_state$isPersistentCh2","withIgnoredBlockChange","IGNORED_ACTION_TYPES","isIgnoredChange","has","withInnerBlocksRemoveCascade","getAllChildren","i","keepControlledInnerBlocks","withBlockReset","withReplaceInnerBlocks","nestedControllers","stateAfterBlocksRemoval","stateAfterInsert","index","stateAfterInsertOrder","key","_key","withSaveReusableBlock","id","withResetControlledBlocks","tempState","exports","pipe","combineReducers","value","changes","updates","values","every","hasChange","_action$attributes","updatedAttributeEntries","entries","options","uniqueByBlock","hasUpdatedAttributes","existingAttributes","newAttributes","_state$get","blockOrder","concat","subState","mappedBlocks","insertAt","_state$get$filter","fromIndex","indexOf","moveTo","filter","includes","firstClientId","firstIndex","lastClientId","newSubOrder","reduce","_order$filter","hasControlledInnerBlocks","isBlockInterfaceHidden","isTyping","isDragging","draggedBlocks","blockVisibility","selectionHelper","updateSelection","blockToSelect","indexToSelect","selection","selectionStart","attributeKey","offset","startOffset","selectionEnd","endOffset","start","end","startClientId","endClientId","some","isMultiSelecting","isSelectionEnabled","removalPromptData","selectPrevious","message","blockRemovalRules","rules","initialPosition","blocksMode","insertionCue","__unstableWithInserter","operation","nearestSide","template","isValid","settings","SETTINGS_DEFAULTS","updatedSettings","reset","defineProperty","deprecated","since","alternative","isPreviewMode","preferences","PREFERENCES_DEFAULTS","nextInsertUsage","prevUsage","blockName","match","select","blocksStore","getActiveBlockVariation","time","count","insertUsage","blockListSettings","fromEntries","merged","lastBlockAttributesChange","accumulator","highlightedBlock","isHighlighted","expandedBlock","lastBlockInserted","source","meta","temporarilyEditingAsBlocks","temporarilyEditingFocusModeRevert","focusModeToRevert","blockEditingModes","mode","openedBlockSettingsMenu","_action$clientId","styleOverrides","style","registeredInserterMediaCategories","category","lastFocus","zoomLevel","zoom","insertionPoint","combinedReducers","getBlockTreeBlock","rootBlock","controlledTree","regularTree","traverseBlockTree","callback","innerBlock","findParentInClientIdsList","hasBindings","metadata","bindings","getDerivedBlockEditingModesForTree","isNavMode","treeClientId","isZoomedOut","derivedBlockEditingModes","sectionRootClientId","sectionRootClientIdKey","sectionClientIds","hasDisabledBlocks","Array","from","templatePartClientIds","syncedPatternClientIds","ancestorBlockEditingMode","isInSection","isInTemplatePart","parentPatternClientId","getDerivedBlockEditingModesUpdates","prevState","addedBlocks","prevDerivedBlockEditingModes","derivedNavModeBlockEditingModes","nextDerivedBlockEditingModes","addedBlock","size","withDerivedBlockEditingModes","_state$derivedBlockEd","_state$derivedNavMode","nextDerivedNavModeBlockEditingModes","updatedBlock","withAutomaticChangeReset","automaticChangeStatus","_default","default"],"sources":["@wordpress/block-editor/src/store/reducer.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport fastDeepEqual from 'fast-deep-equal/es6';\n\n/**\n * WordPress dependencies\n */\nimport { pipe } from '@wordpress/compose';\nimport { combineReducers, select } from '@wordpress/data';\nimport deprecated from '@wordpress/deprecated';\nimport {\n\tstore as blocksStore,\n\tprivateApis as blocksPrivateApis,\n} from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport { PREFERENCES_DEFAULTS, SETTINGS_DEFAULTS } from './defaults';\nimport { insertAt, moveTo } from './array';\nimport { sectionRootClientIdKey } from './private-keys';\nimport { unlock } from '../lock-unlock';\n\nconst { isContentBlock } = unlock( blocksPrivateApis );\n\nconst identity = ( x ) => x;\n\n/**\n * Given an array of blocks, returns an object where each key is a nesting\n * context, the value of which is an array of block client IDs existing within\n * that nesting context.\n *\n * @param {Array} blocks Blocks to map.\n * @param {?string} rootClientId Assumed root client ID.\n *\n * @return {Object} Block order map object.\n */\nfunction mapBlockOrder( blocks, rootClientId = '' ) {\n\tconst result = new Map();\n\tconst current = [];\n\tresult.set( rootClientId, current );\n\tblocks.forEach( ( block ) => {\n\t\tconst { clientId, innerBlocks } = block;\n\t\tcurrent.push( clientId );\n\t\tmapBlockOrder( innerBlocks, clientId ).forEach(\n\t\t\t( order, subClientId ) => {\n\t\t\t\tresult.set( subClientId, order );\n\t\t\t}\n\t\t);\n\t} );\n\treturn result;\n}\n\n/**\n * Given an array of blocks, returns an object where each key contains\n * the clientId of the block and the value is the parent of the block.\n *\n * @param {Array} blocks Blocks to map.\n * @param {?string} rootClientId Assumed root client ID.\n *\n * @return {Object} Block order map object.\n */\nfunction mapBlockParents( blocks, rootClientId = '' ) {\n\tconst result = [];\n\tconst stack = [ [ rootClientId, blocks ] ];\n\twhile ( stack.length ) {\n\t\tconst [ parent, currentBlocks ] = stack.shift();\n\t\tcurrentBlocks.forEach( ( { innerBlocks, ...block } ) => {\n\t\t\tresult.push( [ block.clientId, parent ] );\n\t\t\tif ( innerBlocks?.length ) {\n\t\t\t\tstack.push( [ block.clientId, innerBlocks ] );\n\t\t\t}\n\t\t} );\n\t}\n\treturn result;\n}\n\n/**\n * Helper method to iterate through all blocks, recursing into inner blocks,\n * applying a transformation function to each one.\n * Returns a flattened object with the transformed blocks.\n *\n * @param {Array} blocks Blocks to flatten.\n * @param {Function} transform Transforming function to be applied to each block.\n *\n * @return {Array} Flattened object.\n */\nfunction flattenBlocks( blocks, transform = identity ) {\n\tconst result = [];\n\n\tconst stack = [ ...blocks ];\n\twhile ( stack.length ) {\n\t\tconst { innerBlocks, ...block } = stack.shift();\n\t\tstack.push( ...innerBlocks );\n\t\tresult.push( [ block.clientId, transform( block ) ] );\n\t}\n\n\treturn result;\n}\n\nfunction getFlattenedClientIds( blocks ) {\n\tconst result = {};\n\tconst stack = [ ...blocks ];\n\twhile ( stack.length ) {\n\t\tconst { innerBlocks, ...block } = stack.shift();\n\t\tstack.push( ...innerBlocks );\n\t\tresult[ block.clientId ] = true;\n\t}\n\n\treturn result;\n}\n\n/**\n * Given an array of blocks, returns an object containing all blocks, without\n * attributes, recursing into inner blocks. Keys correspond to the block client\n * ID, the value of which is the attributes object.\n *\n * @param {Array} blocks Blocks to flatten.\n *\n * @return {Array} Flattened block attributes object.\n */\nfunction getFlattenedBlocksWithoutAttributes( blocks ) {\n\treturn flattenBlocks( blocks, ( block ) => {\n\t\tconst { attributes, ...restBlock } = block;\n\t\treturn restBlock;\n\t} );\n}\n\n/**\n * Given an array of blocks, returns an object containing all block attributes,\n * recursing into inner blocks. Keys correspond to the block client ID, the\n * value of which is the attributes object.\n *\n * @param {Array} blocks Blocks to flatten.\n *\n * @return {Array} Flattened block attributes object.\n */\nfunction getFlattenedBlockAttributes( blocks ) {\n\treturn flattenBlocks( blocks, ( block ) => block.attributes );\n}\n\n/**\n * Returns true if the two object arguments have the same keys, or false\n * otherwise.\n *\n * @param {Object} a First object.\n * @param {Object} b Second object.\n *\n * @return {boolean} Whether the two objects have the same keys.\n */\nexport function hasSameKeys( a, b ) {\n\treturn fastDeepEqual( Object.keys( a ), Object.keys( b ) );\n}\n\n/**\n * Returns true if, given the currently dispatching action and the previously\n * dispatched action, the two actions are updating the same block attribute, or\n * false otherwise.\n *\n * @param {Object} action Currently dispatching action.\n * @param {Object} lastAction Previously dispatched action.\n *\n * @return {boolean} Whether actions are updating the same block attribute.\n */\nexport function isUpdatingSameBlockAttribute( action, lastAction ) {\n\treturn (\n\t\taction.type === 'UPDATE_BLOCK_ATTRIBUTES' &&\n\t\tlastAction !== undefined &&\n\t\tlastAction.type === 'UPDATE_BLOCK_ATTRIBUTES' &&\n\t\tfastDeepEqual( action.clientIds, lastAction.clientIds ) &&\n\t\thasSameKeys( action.attributes, lastAction.attributes )\n\t);\n}\n\nfunction updateBlockTreeForBlocks( state, blocks ) {\n\tconst treeToUpdate = state.tree;\n\tconst stack = [ ...blocks ];\n\tconst flattenedBlocks = [ ...blocks ];\n\twhile ( stack.length ) {\n\t\tconst block = stack.shift();\n\t\tstack.push( ...block.innerBlocks );\n\t\tflattenedBlocks.push( ...block.innerBlocks );\n\t}\n\t// Create objects before mutating them, that way it's always defined.\n\tfor ( const block of flattenedBlocks ) {\n\t\ttreeToUpdate.set( block.clientId, {} );\n\t}\n\tfor ( const block of flattenedBlocks ) {\n\t\ttreeToUpdate.set(\n\t\t\tblock.clientId,\n\t\t\tObject.assign( treeToUpdate.get( block.clientId ), {\n\t\t\t\t...state.byClientId.get( block.clientId ),\n\t\t\t\tattributes: state.attributes.get( block.clientId ),\n\t\t\t\tinnerBlocks: block.innerBlocks.map( ( subBlock ) =>\n\t\t\t\t\ttreeToUpdate.get( subBlock.clientId )\n\t\t\t\t),\n\t\t\t} )\n\t\t);\n\t}\n}\n\nfunction updateParentInnerBlocksInTree(\n\tstate,\n\tupdatedClientIds,\n\tupdateChildrenOfUpdatedClientIds = false\n) {\n\tconst treeToUpdate = state.tree;\n\tconst uncontrolledParents = new Set( [] );\n\tconst controlledParents = new Set();\n\tfor ( const clientId of updatedClientIds ) {\n\t\tlet current = updateChildrenOfUpdatedClientIds\n\t\t\t? clientId\n\t\t\t: state.parents.get( clientId );\n\t\tdo {\n\t\t\tif ( state.controlledInnerBlocks[ current ] ) {\n\t\t\t\t// Should stop on controlled blocks.\n\t\t\t\t// If we reach a controlled parent, break out of the loop.\n\t\t\t\tcontrolledParents.add( current );\n\t\t\t\tbreak;\n\t\t\t} else {\n\t\t\t\t// Else continue traversing up through parents.\n\t\t\t\tuncontrolledParents.add( current );\n\t\t\t\tcurrent = state.parents.get( current );\n\t\t\t}\n\t\t} while ( current !== undefined );\n\t}\n\n\t// To make sure the order of assignments doesn't matter,\n\t// we first create empty objects and mutates the inner blocks later.\n\tfor ( const clientId of uncontrolledParents ) {\n\t\ttreeToUpdate.set( clientId, { ...treeToUpdate.get( clientId ) } );\n\t}\n\tfor ( const clientId of uncontrolledParents ) {\n\t\ttreeToUpdate.get( clientId ).innerBlocks = (\n\t\t\tstate.order.get( clientId ) || []\n\t\t).map( ( subClientId ) => treeToUpdate.get( subClientId ) );\n\t}\n\n\t// Controlled parent blocks, need a dedicated key for their inner blocks\n\t// to be used when doing getBlocks( controlledBlockClientId ).\n\tfor ( const clientId of controlledParents ) {\n\t\ttreeToUpdate.set( 'controlled||' + clientId, {\n\t\t\tinnerBlocks: ( state.order.get( clientId ) || [] ).map(\n\t\t\t\t( subClientId ) => treeToUpdate.get( subClientId )\n\t\t\t),\n\t\t} );\n\t}\n}\n\n/**\n * Higher-order reducer intended to compute full block objects key for each block in the post.\n * This is a denormalization to optimize the performance of the getBlock selectors and avoid\n * recomputing the block objects and avoid heavy memoization.\n *\n * @param {Function} reducer Original reducer function.\n *\n * @return {Function} Enhanced reducer function.\n */\nconst withBlockTree =\n\t( reducer ) =>\n\t( state = {}, action ) => {\n\t\tconst newState = reducer( state, action );\n\n\t\tif ( newState === state ) {\n\t\t\treturn state;\n\t\t}\n\n\t\tnewState.tree = state.tree ? state.tree : new Map();\n\t\tswitch ( action.type ) {\n\t\t\tcase 'RECEIVE_BLOCKS':\n\t\t\tcase 'INSERT_BLOCKS': {\n\t\t\t\tnewState.tree = new Map( newState.tree );\n\t\t\t\tupdateBlockTreeForBlocks( newState, action.blocks );\n\t\t\t\tupdateParentInnerBlocksInTree(\n\t\t\t\t\tnewState,\n\t\t\t\t\taction.rootClientId ? [ action.rootClientId ] : [ '' ],\n\t\t\t\t\ttrue\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'UPDATE_BLOCK':\n\t\t\t\tnewState.tree = new Map( newState.tree );\n\t\t\t\tnewState.tree.set( action.clientId, {\n\t\t\t\t\t...newState.tree.get( action.clientId ),\n\t\t\t\t\t...newState.byClientId.get( action.clientId ),\n\t\t\t\t\tattributes: newState.attributes.get( action.clientId ),\n\t\t\t\t} );\n\t\t\t\tupdateParentInnerBlocksInTree(\n\t\t\t\t\tnewState,\n\t\t\t\t\t[ action.clientId ],\n\t\t\t\t\tfalse\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase 'SYNC_DERIVED_BLOCK_ATTRIBUTES':\n\t\t\tcase 'UPDATE_BLOCK_ATTRIBUTES': {\n\t\t\t\tnewState.tree = new Map( newState.tree );\n\t\t\t\taction.clientIds.forEach( ( clientId ) => {\n\t\t\t\t\tnewState.tree.set( clientId, {\n\t\t\t\t\t\t...newState.tree.get( clientId ),\n\t\t\t\t\t\tattributes: newState.attributes.get( clientId ),\n\t\t\t\t\t} );\n\t\t\t\t} );\n\t\t\t\tupdateParentInnerBlocksInTree(\n\t\t\t\t\tnewState,\n\t\t\t\t\taction.clientIds,\n\t\t\t\t\tfalse\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'REPLACE_BLOCKS_AUGMENTED_WITH_CHILDREN': {\n\t\t\t\tconst inserterClientIds = getFlattenedClientIds(\n\t\t\t\t\taction.blocks\n\t\t\t\t);\n\t\t\t\tnewState.tree = new Map( newState.tree );\n\t\t\t\taction.replacedClientIds.forEach( ( clientId ) => {\n\t\t\t\t\tnewState.tree.delete( clientId );\n\t\t\t\t\t// Controlled inner blocks are only removed\n\t\t\t\t\t// if the block doesn't move to another position\n\t\t\t\t\t// otherwise their content will be lost.\n\t\t\t\t\tif ( ! inserterClientIds[ clientId ] ) {\n\t\t\t\t\t\tnewState.tree.delete( 'controlled||' + clientId );\n\t\t\t\t\t}\n\t\t\t\t} );\n\n\t\t\t\tupdateBlockTreeForBlocks( newState, action.blocks );\n\t\t\t\tupdateParentInnerBlocksInTree(\n\t\t\t\t\tnewState,\n\t\t\t\t\taction.blocks.map( ( b ) => b.clientId ),\n\t\t\t\t\tfalse\n\t\t\t\t);\n\n\t\t\t\t// If there are no replaced blocks, it means we're removing blocks so we need to update their parent.\n\t\t\t\tconst parentsOfRemovedBlocks = [];\n\t\t\t\tfor ( const clientId of action.clientIds ) {\n\t\t\t\t\tconst parentId = state.parents.get( clientId );\n\t\t\t\t\tif (\n\t\t\t\t\t\tparentId !== undefined &&\n\t\t\t\t\t\t( parentId === '' ||\n\t\t\t\t\t\t\tnewState.byClientId.get( parentId ) )\n\t\t\t\t\t) {\n\t\t\t\t\t\tparentsOfRemovedBlocks.push( parentId );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tupdateParentInnerBlocksInTree(\n\t\t\t\t\tnewState,\n\t\t\t\t\tparentsOfRemovedBlocks,\n\t\t\t\t\ttrue\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'REMOVE_BLOCKS_AUGMENTED_WITH_CHILDREN':\n\t\t\t\tconst parentsOfRemovedBlocks = [];\n\t\t\t\tfor ( const clientId of action.clientIds ) {\n\t\t\t\t\tconst parentId = state.parents.get( clientId );\n\t\t\t\t\tif (\n\t\t\t\t\t\tparentId !== undefined &&\n\t\t\t\t\t\t( parentId === '' ||\n\t\t\t\t\t\t\tnewState.byClientId.get( parentId ) )\n\t\t\t\t\t) {\n\t\t\t\t\t\tparentsOfRemovedBlocks.push( parentId );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tnewState.tree = new Map( newState.tree );\n\t\t\t\taction.removedClientIds.forEach( ( clientId ) => {\n\t\t\t\t\tnewState.tree.delete( clientId );\n\t\t\t\t\tnewState.tree.delete( 'controlled||' + clientId );\n\t\t\t\t} );\n\t\t\t\tupdateParentInnerBlocksInTree(\n\t\t\t\t\tnewState,\n\t\t\t\t\tparentsOfRemovedBlocks,\n\t\t\t\t\ttrue\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase 'MOVE_BLOCKS_TO_POSITION': {\n\t\t\t\tconst updatedBlockUids = [];\n\t\t\t\tif ( action.fromRootClientId ) {\n\t\t\t\t\tupdatedBlockUids.push( action.fromRootClientId );\n\t\t\t\t} else {\n\t\t\t\t\tupdatedBlockUids.push( '' );\n\t\t\t\t}\n\t\t\t\tif ( action.toRootClientId ) {\n\t\t\t\t\tupdatedBlockUids.push( action.toRootClientId );\n\t\t\t\t}\n\t\t\t\tnewState.tree = new Map( newState.tree );\n\t\t\t\tupdateParentInnerBlocksInTree(\n\t\t\t\t\tnewState,\n\t\t\t\t\tupdatedBlockUids,\n\t\t\t\t\ttrue\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'MOVE_BLOCKS_UP':\n\t\t\tcase 'MOVE_BLOCKS_DOWN': {\n\t\t\t\tconst updatedBlockUids = [\n\t\t\t\t\taction.rootClientId ? action.rootClientId : '',\n\t\t\t\t];\n\t\t\t\tnewState.tree = new Map( newState.tree );\n\t\t\t\tupdateParentInnerBlocksInTree(\n\t\t\t\t\tnewState,\n\t\t\t\t\tupdatedBlockUids,\n\t\t\t\t\ttrue\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'SAVE_REUSABLE_BLOCK_SUCCESS': {\n\t\t\t\tconst updatedBlockUids = [];\n\t\t\t\tnewState.attributes.forEach( ( attributes, clientId ) => {\n\t\t\t\t\tif (\n\t\t\t\t\t\tnewState.byClientId.get( clientId ).name ===\n\t\t\t\t\t\t\t'core/block' &&\n\t\t\t\t\t\tattributes.ref === action.updatedId\n\t\t\t\t\t) {\n\t\t\t\t\t\tupdatedBlockUids.push( clientId );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\tnewState.tree = new Map( newState.tree );\n\t\t\t\tupdatedBlockUids.forEach( ( clientId ) => {\n\t\t\t\t\tnewState.tree.set( clientId, {\n\t\t\t\t\t\t...newState.byClientId.get( clientId ),\n\t\t\t\t\t\tattributes: newState.attributes.get( clientId ),\n\t\t\t\t\t\tinnerBlocks: newState.tree.get( clientId ).innerBlocks,\n\t\t\t\t\t} );\n\t\t\t\t} );\n\t\t\t\tupdateParentInnerBlocksInTree(\n\t\t\t\t\tnewState,\n\t\t\t\t\tupdatedBlockUids,\n\t\t\t\t\tfalse\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\treturn newState;\n\t};\n\n/**\n * Higher-order reducer intended to augment the blocks reducer, assigning an\n * `isPersistentChange` property value corresponding to whether a change in\n * state can be considered as persistent. All changes are considered persistent\n * except when updating the same block attribute as in the previous action.\n *\n * @param {Function} reducer Original reducer function.\n *\n * @return {Function} Enhanced reducer function.\n */\nfunction withPersistentBlockChange( reducer ) {\n\tlet lastAction;\n\tlet markNextChangeAsNotPersistent = false;\n\tlet explicitPersistent;\n\n\treturn ( state, action ) => {\n\t\tlet nextState = reducer( state, action );\n\n\t\tlet nextIsPersistentChange;\n\t\tif ( action.type === 'SET_EXPLICIT_PERSISTENT' ) {\n\t\t\texplicitPersistent = action.isPersistentChange;\n\t\t\tnextIsPersistentChange = state.isPersistentChange ?? true;\n\t\t}\n\n\t\tif ( explicitPersistent !== undefined ) {\n\t\t\tnextIsPersistentChange = explicitPersistent;\n\t\t\treturn nextIsPersistentChange === nextState.isPersistentChange\n\t\t\t\t? nextState\n\t\t\t\t: {\n\t\t\t\t\t\t...nextState,\n\t\t\t\t\t\tisPersistentChange: nextIsPersistentChange,\n\t\t\t\t };\n\t\t}\n\n\t\tconst isExplicitPersistentChange =\n\t\t\taction.type === 'MARK_LAST_CHANGE_AS_PERSISTENT' ||\n\t\t\tmarkNextChangeAsNotPersistent;\n\n\t\t// Defer to previous state value (or default) unless changing or\n\t\t// explicitly marking as persistent.\n\t\tif ( state === nextState && ! isExplicitPersistentChange ) {\n\t\t\tmarkNextChangeAsNotPersistent =\n\t\t\t\taction.type === 'MARK_NEXT_CHANGE_AS_NOT_PERSISTENT';\n\n\t\t\tnextIsPersistentChange = state?.isPersistentChange ?? true;\n\t\t\tif ( state.isPersistentChange === nextIsPersistentChange ) {\n\t\t\t\treturn state;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\t...nextState,\n\t\t\t\tisPersistentChange: nextIsPersistentChange,\n\t\t\t};\n\t\t}\n\n\t\tnextState = {\n\t\t\t...nextState,\n\t\t\tisPersistentChange: isExplicitPersistentChange\n\t\t\t\t? ! markNextChangeAsNotPersistent\n\t\t\t\t: ! isUpdatingSameBlockAttribute( action, lastAction ),\n\t\t};\n\n\t\t// In comparing against the previous action, consider only those which\n\t\t// would have qualified as one which would have been ignored or not\n\t\t// have resulted in a changed state.\n\t\tlastAction = action;\n\t\tmarkNextChangeAsNotPersistent =\n\t\t\taction.type === 'MARK_NEXT_CHANGE_AS_NOT_PERSISTENT';\n\n\t\treturn nextState;\n\t};\n}\n\n/**\n * Higher-order reducer intended to augment the blocks reducer, assigning an\n * `isIgnoredChange` property value corresponding to whether a change in state\n * can be considered as ignored. A change is considered ignored when the result\n * of an action not incurred by direct user interaction.\n *\n * @param {Function} reducer Original reducer function.\n *\n * @return {Function} Enhanced reducer function.\n */\nfunction withIgnoredBlockChange( reducer ) {\n\t/**\n\t * Set of action types for which a blocks state change should be ignored.\n\t *\n\t * @type {Set}\n\t */\n\tconst IGNORED_ACTION_TYPES = new Set( [ 'RECEIVE_BLOCKS' ] );\n\n\treturn ( state, action ) => {\n\t\tconst nextState = reducer( state, action );\n\n\t\tif ( nextState !== state ) {\n\t\t\tnextState.isIgnoredChange = IGNORED_ACTION_TYPES.has( action.type );\n\t\t}\n\n\t\treturn nextState;\n\t};\n}\n\n/**\n * Higher-order reducer targeting the combined blocks reducer, augmenting\n * block client IDs in remove action to include cascade of inner blocks.\n *\n * @param {Function} reducer Original reducer function.\n *\n * @return {Function} Enhanced reducer function.\n */\nconst withInnerBlocksRemoveCascade = ( reducer ) => ( state, action ) => {\n\t// Gets all children which need to be removed.\n\tconst getAllChildren = ( clientIds ) => {\n\t\tlet result = clientIds;\n\t\tfor ( let i = 0; i < result.length; i++ ) {\n\t\t\tif (\n\t\t\t\t! state.order.get( result[ i ] ) ||\n\t\t\t\t( action.keepControlledInnerBlocks &&\n\t\t\t\t\taction.keepControlledInnerBlocks[ result[ i ] ] )\n\t\t\t) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif ( result === clientIds ) {\n\t\t\t\tresult = [ ...result ];\n\t\t\t}\n\n\t\t\tresult.push( ...state.order.get( result[ i ] ) );\n\t\t}\n\t\treturn result;\n\t};\n\n\tif ( state ) {\n\t\tswitch ( action.type ) {\n\t\t\tcase 'REMOVE_BLOCKS':\n\t\t\t\taction = {\n\t\t\t\t\t...action,\n\t\t\t\t\ttype: 'REMOVE_BLOCKS_AUGMENTED_WITH_CHILDREN',\n\t\t\t\t\tremovedClientIds: getAllChildren( action.clientIds ),\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase 'REPLACE_BLOCKS':\n\t\t\t\taction = {\n\t\t\t\t\t...action,\n\t\t\t\t\ttype: 'REPLACE_BLOCKS_AUGMENTED_WITH_CHILDREN',\n\t\t\t\t\treplacedClientIds: getAllChildren( action.clientIds ),\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn reducer( state, action );\n};\n\n/**\n * Higher-order reducer which targets the combined blocks reducer and handles\n * the `RESET_BLOCKS` action. When dispatched, this action will replace all\n * blocks that exist in the post, leaving blocks that exist only in state (e.g.\n * reusable blocks and blocks controlled by inner blocks controllers) alone.\n *\n * @param {Function} reducer Original reducer function.\n *\n * @return {Function} Enhanced reducer function.\n */\nconst withBlockReset = ( reducer ) => ( state, action ) => {\n\tif ( action.type === 'RESET_BLOCKS' ) {\n\t\tconst newState = {\n\t\t\t...state,\n\t\t\tbyClientId: new Map(\n\t\t\t\tgetFlattenedBlocksWithoutAttributes( action.blocks )\n\t\t\t),\n\t\t\tattributes: new Map( getFlattenedBlockAttributes( action.blocks ) ),\n\t\t\torder: mapBlockOrder( action.blocks ),\n\t\t\tparents: new Map( mapBlockParents( action.blocks ) ),\n\t\t\tcontrolledInnerBlocks: {},\n\t\t};\n\n\t\tnewState.tree = new Map( state?.tree );\n\t\tupdateBlockTreeForBlocks( newState, action.blocks );\n\t\tnewState.tree.set( '', {\n\t\t\tinnerBlocks: action.blocks.map( ( subBlock ) =>\n\t\t\t\tnewState.tree.get( subBlock.clientId )\n\t\t\t),\n\t\t} );\n\n\t\treturn newState;\n\t}\n\n\treturn reducer( state, action );\n};\n\n/**\n * Higher-order reducer which targets the combined blocks reducer and handles\n * the `REPLACE_INNER_BLOCKS` action. When dispatched, this action the state\n * should become equivalent to the execution of a `REMOVE_BLOCKS` action\n * containing all the child's of the root block followed by the execution of\n * `INSERT_BLOCKS` with the new blocks.\n *\n * @param {Function} reducer Original reducer function.\n *\n * @return {Function} Enhanced reducer function.\n */\nconst withReplaceInnerBlocks = ( reducer ) => ( state, action ) => {\n\tif ( action.type !== 'REPLACE_INNER_BLOCKS' ) {\n\t\treturn reducer( state, action );\n\t}\n\n\t// Finds every nested inner block controller. We must check the action blocks\n\t// and not just the block parent state because some inner block controllers\n\t// should be deleted if specified, whereas others should not be deleted. If\n\t// a controlled should not be deleted, then we need to avoid deleting its\n\t// inner blocks from the block state because its inner blocks will not be\n\t// attached to the block in the action.\n\tconst nestedControllers = {};\n\tif ( Object.keys( state.controlledInnerBlocks ).length ) {\n\t\tconst stack = [ ...action.blocks ];\n\t\twhile ( stack.length ) {\n\t\t\tconst { innerBlocks, ...block } = stack.shift();\n\t\t\tstack.push( ...innerBlocks );\n\t\t\tif ( !! state.controlledInnerBlocks[ block.clientId ] ) {\n\t\t\t\tnestedControllers[ block.clientId ] = true;\n\t\t\t}\n\t\t}\n\t}\n\n\t// The `keepControlledInnerBlocks` prop will keep the inner blocks of the\n\t// marked block in the block state so that they can be reattached to the\n\t// marked block when we re-insert everything a few lines below.\n\tlet stateAfterBlocksRemoval = state;\n\tif ( state.order.get( action.rootClientId ) ) {\n\t\tstateAfterBlocksRemoval = reducer( stateAfterBlocksRemoval, {\n\t\t\ttype: 'REMOVE_BLOCKS',\n\t\t\tkeepControlledInnerBlocks: nestedControllers,\n\t\t\tclientIds: state.order.get( action.rootClientId ),\n\t\t} );\n\t}\n\tlet stateAfterInsert = stateAfterBlocksRemoval;\n\tif ( action.blocks.length ) {\n\t\tstateAfterInsert = reducer( stateAfterInsert, {\n\t\t\t...action,\n\t\t\ttype: 'INSERT_BLOCKS',\n\t\t\tindex: 0,\n\t\t} );\n\n\t\t// We need to re-attach the controlled inner blocks to the blocks tree and\n\t\t// preserve their block order. Otherwise, an inner block controller's blocks\n\t\t// will be deleted entirely from its entity.\n\t\tconst stateAfterInsertOrder = new Map( stateAfterInsert.order );\n\t\tObject.keys( nestedControllers ).forEach( ( key ) => {\n\t\t\tif ( state.order.get( key ) ) {\n\t\t\t\tstateAfterInsertOrder.set( key, state.order.get( key ) );\n\t\t\t}\n\t\t} );\n\t\tstateAfterInsert.order = stateAfterInsertOrder;\n\t\tstateAfterInsert.tree = new Map( stateAfterInsert.tree );\n\t\tObject.keys( nestedControllers ).forEach( ( _key ) => {\n\t\t\tconst key = `controlled||${ _key }`;\n\t\t\tif ( state.tree.has( key ) ) {\n\t\t\t\tstateAfterInsert.tree.set( key, state.tree.get( key ) );\n\t\t\t}\n\t\t} );\n\t}\n\treturn stateAfterInsert;\n};\n\n/**\n * Higher-order reducer which targets the combined blocks reducer and handles\n * the `SAVE_REUSABLE_BLOCK_SUCCESS` action. This action can't be handled by\n * regular reducers and needs a higher-order reducer since it needs access to\n * both `byClientId` and `attributes` simultaneously.\n *\n * @param {Function} reducer Original reducer function.\n *\n * @return {Function} Enhanced reducer function.\n */\nconst withSaveReusableBlock = ( reducer ) => ( state, action ) => {\n\tif ( state && action.type === 'SAVE_REUSABLE_BLOCK_SUCCESS' ) {\n\t\tconst { id, updatedId } = action;\n\n\t\t// If a temporary reusable block is saved, we swap the temporary id with the final one.\n\t\tif ( id === updatedId ) {\n\t\t\treturn state;\n\t\t}\n\n\t\tstate = { ...state };\n\t\tstate.attributes = new Map( state.attributes );\n\t\tstate.attributes.forEach( ( attributes, clientId ) => {\n\t\t\tconst { name } = state.byClientId.get( clientId );\n\t\t\tif ( name === 'core/block' && attributes.ref === id ) {\n\t\t\t\tstate.attributes.set( clientId, {\n\t\t\t\t\t...attributes,\n\t\t\t\t\tref: updatedId,\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t}\n\n\treturn reducer( state, action );\n};\n/**\n * Higher-order reducer which removes blocks from state when switching parent block controlled state.\n *\n * @param {Function} reducer Original reducer function.\n *\n * @return {Function} Enhanced reducer function.\n */\nconst withResetControlledBlocks = ( reducer ) => ( state, action ) => {\n\tif ( action.type === 'SET_HAS_CONTROLLED_INNER_BLOCKS' ) {\n\t\t// when switching a block from controlled to uncontrolled or inverse,\n\t\t// we need to remove its content first.\n\t\tconst tempState = reducer( state, {\n\t\t\ttype: 'REPLACE_INNER_BLOCKS',\n\t\t\trootClientId: action.clientId,\n\t\t\tblocks: [],\n\t\t} );\n\t\treturn reducer( tempState, action );\n\t}\n\n\treturn reducer( state, action );\n};\n\n/**\n * Reducer returning the blocks state.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport const blocks = pipe(\n\tcombineReducers,\n\twithSaveReusableBlock, // Needs to be before withBlockCache.\n\twithBlockTree, // Needs to be before withInnerBlocksRemoveCascade.\n\twithInnerBlocksRemoveCascade,\n\twithReplaceInnerBlocks, // Needs to be after withInnerBlocksRemoveCascade.\n\twithBlockReset,\n\twithPersistentBlockChange,\n\twithIgnoredBlockChange,\n\twithResetControlledBlocks\n)( {\n\t// The state is using a Map instead of a plain object for performance reasons.\n\t// You can run the \"./test/performance.js\" unit test to check the impact\n\t// code changes can have on this reducer.\n\tbyClientId( state = new Map(), action ) {\n\t\tswitch ( action.type ) {\n\t\t\tcase 'RECEIVE_BLOCKS':\n\t\t\tcase 'INSERT_BLOCKS': {\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\tgetFlattenedBlocksWithoutAttributes( action.blocks ).forEach(\n\t\t\t\t\t( [ key, value ] ) => {\n\t\t\t\t\t\tnewState.set( key, value );\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\treturn newState;\n\t\t\t}\n\t\t\tcase 'UPDATE_BLOCK': {\n\t\t\t\t// Ignore updates if block isn't known.\n\t\t\t\tif ( ! state.has( action.clientId ) ) {\n\t\t\t\t\treturn state;\n\t\t\t\t}\n\n\t\t\t\t// Do nothing if only attributes change.\n\t\t\t\tconst { attributes, ...changes } = action.updates;\n\t\t\t\tif ( Object.values( changes ).length === 0 ) {\n\t\t\t\t\treturn state;\n\t\t\t\t}\n\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\tnewState.set( action.clientId, {\n\t\t\t\t\t...state.get( action.clientId ),\n\t\t\t\t\t...changes,\n\t\t\t\t} );\n\t\t\t\treturn newState;\n\t\t\t}\n\n\t\t\tcase 'REPLACE_BLOCKS_AUGMENTED_WITH_CHILDREN': {\n\t\t\t\tif ( ! action.blocks ) {\n\t\t\t\t\treturn state;\n\t\t\t\t}\n\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\taction.replacedClientIds.forEach( ( clientId ) => {\n\t\t\t\t\tnewState.delete( clientId );\n\t\t\t\t} );\n\n\t\t\t\tgetFlattenedBlocksWithoutAttributes( action.blocks ).forEach(\n\t\t\t\t\t( [ key, value ] ) => {\n\t\t\t\t\t\tnewState.set( key, value );\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\treturn newState;\n\t\t\t}\n\n\t\t\tcase 'REMOVE_BLOCKS_AUGMENTED_WITH_CHILDREN': {\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\taction.removedClientIds.forEach( ( clientId ) => {\n\t\t\t\t\tnewState.delete( clientId );\n\t\t\t\t} );\n\t\t\t\treturn newState;\n\t\t\t}\n\t\t}\n\n\t\treturn state;\n\t},\n\n\t// The state is using a Map instead of a plain object for performance reasons.\n\t// You can run the \"./test/performance.js\" unit test to check the impact\n\t// code changes can have on this reducer.\n\tattributes( state = new Map(), action ) {\n\t\tswitch ( action.type ) {\n\t\t\tcase 'RECEIVE_BLOCKS':\n\t\t\tcase 'INSERT_BLOCKS': {\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\tgetFlattenedBlockAttributes( action.blocks ).forEach(\n\t\t\t\t\t( [ key, value ] ) => {\n\t\t\t\t\t\tnewState.set( key, value );\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\treturn newState;\n\t\t\t}\n\n\t\t\tcase 'UPDATE_BLOCK': {\n\t\t\t\t// Ignore updates if block isn't known or there are no attribute changes.\n\t\t\t\tif (\n\t\t\t\t\t! state.get( action.clientId ) ||\n\t\t\t\t\t! action.updates.attributes\n\t\t\t\t) {\n\t\t\t\t\treturn state;\n\t\t\t\t}\n\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\tnewState.set( action.clientId, {\n\t\t\t\t\t...state.get( action.clientId ),\n\t\t\t\t\t...action.updates.attributes,\n\t\t\t\t} );\n\t\t\t\treturn newState;\n\t\t\t}\n\n\t\t\tcase 'SYNC_DERIVED_BLOCK_ATTRIBUTES':\n\t\t\tcase 'UPDATE_BLOCK_ATTRIBUTES': {\n\t\t\t\t// Avoid a state change if none of the block IDs are known.\n\t\t\t\tif ( action.clientIds.every( ( id ) => ! state.get( id ) ) ) {\n\t\t\t\t\treturn state;\n\t\t\t\t}\n\n\t\t\t\tlet hasChange = false;\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\tfor ( const clientId of action.clientIds ) {\n\t\t\t\t\tconst updatedAttributeEntries = Object.entries(\n\t\t\t\t\t\t!! action.options?.uniqueByBlock\n\t\t\t\t\t\t\t? action.attributes[ clientId ]\n\t\t\t\t\t\t\t: action.attributes ?? {}\n\t\t\t\t\t);\n\t\t\t\t\tif ( updatedAttributeEntries.length === 0 ) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tlet hasUpdatedAttributes = false;\n\t\t\t\t\tconst existingAttributes = state.get( clientId );\n\t\t\t\t\tconst newAttributes = {};\n\t\t\t\t\tupdatedAttributeEntries.forEach( ( [ key, value ] ) => {\n\t\t\t\t\t\tif ( existingAttributes[ key ] !== value ) {\n\t\t\t\t\t\t\thasUpdatedAttributes = true;\n\t\t\t\t\t\t\tnewAttributes[ key ] = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t\thasChange = hasChange || hasUpdatedAttributes;\n\t\t\t\t\tif ( hasUpdatedAttributes ) {\n\t\t\t\t\t\tnewState.set( clientId, {\n\t\t\t\t\t\t\t...existingAttributes,\n\t\t\t\t\t\t\t...newAttributes,\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn hasChange ? newState : state;\n\t\t\t}\n\n\t\t\tcase 'REPLACE_BLOCKS_AUGMENTED_WITH_CHILDREN': {\n\t\t\t\tif ( ! action.blocks ) {\n\t\t\t\t\treturn state;\n\t\t\t\t}\n\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\taction.replacedClientIds.forEach( ( clientId ) => {\n\t\t\t\t\tnewState.delete( clientId );\n\t\t\t\t} );\n\t\t\t\tgetFlattenedBlockAttributes( action.blocks ).forEach(\n\t\t\t\t\t( [ key, value ] ) => {\n\t\t\t\t\t\tnewState.set( key, value );\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\treturn newState;\n\t\t\t}\n\n\t\t\tcase 'REMOVE_BLOCKS_AUGMENTED_WITH_CHILDREN': {\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\taction.removedClientIds.forEach( ( clientId ) => {\n\t\t\t\t\tnewState.delete( clientId );\n\t\t\t\t} );\n\t\t\t\treturn newState;\n\t\t\t}\n\t\t}\n\n\t\treturn state;\n\t},\n\n\t// The state is using a Map instead of a plain object for performance reasons.\n\t// You can run the \"./test/performance.js\" unit test to check the impact\n\t// code changes can have on this reducer.\n\torder( state = new Map(), action ) {\n\t\tswitch ( action.type ) {\n\t\t\tcase 'RECEIVE_BLOCKS': {\n\t\t\t\tconst blockOrder = mapBlockOrder( action.blocks );\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\tblockOrder.forEach( ( order, clientId ) => {\n\t\t\t\t\tif ( clientId !== '' ) {\n\t\t\t\t\t\tnewState.set( clientId, order );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\tnewState.set(\n\t\t\t\t\t'',\n\t\t\t\t\t( state.get( '' ) ?? [] ).concat( blockOrder[ '' ] )\n\t\t\t\t);\n\t\t\t\treturn newState;\n\t\t\t}\n\t\t\tcase 'INSERT_BLOCKS': {\n\t\t\t\tconst { rootClientId = '' } = action;\n\t\t\t\tconst subState = state.get( rootClientId ) || [];\n\t\t\t\tconst mappedBlocks = mapBlockOrder(\n\t\t\t\t\taction.blocks,\n\t\t\t\t\trootClientId\n\t\t\t\t);\n\t\t\t\tconst { index = subState.length } = action;\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\tmappedBlocks.forEach( ( order, clientId ) => {\n\t\t\t\t\tnewState.set( clientId, order );\n\t\t\t\t} );\n\t\t\t\tnewState.set(\n\t\t\t\t\trootClientId,\n\t\t\t\t\tinsertAt(\n\t\t\t\t\t\tsubState,\n\t\t\t\t\t\tmappedBlocks.get( rootClientId ),\n\t\t\t\t\t\tindex\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t\treturn newState;\n\t\t\t}\n\n\t\t\tcase 'MOVE_BLOCKS_TO_POSITION': {\n\t\t\t\tconst {\n\t\t\t\t\tfromRootClientId = '',\n\t\t\t\t\ttoRootClientId = '',\n\t\t\t\t\tclientIds,\n\t\t\t\t} = action;\n\t\t\t\tconst { index = state.get( toRootClientId ).length } = action;\n\n\t\t\t\t// Moving inside the same parent block.\n\t\t\t\tif ( fromRootClientId === toRootClientId ) {\n\t\t\t\t\tconst subState = state.get( toRootClientId );\n\t\t\t\t\tconst fromIndex = subState.indexOf( clientIds[ 0 ] );\n\t\t\t\t\tconst newState = new Map( state );\n\t\t\t\t\tnewState.set(\n\t\t\t\t\t\ttoRootClientId,\n\t\t\t\t\t\tmoveTo(\n\t\t\t\t\t\t\tstate.get( toRootClientId ),\n\t\t\t\t\t\t\tfromIndex,\n\t\t\t\t\t\t\tindex,\n\t\t\t\t\t\t\tclientIds.length\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t\treturn newState;\n\t\t\t\t}\n\n\t\t\t\t// Moving from a parent block to another.\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\tnewState.set(\n\t\t\t\t\tfromRootClientId,\n\t\t\t\t\tstate\n\t\t\t\t\t\t.get( fromRootClientId )\n\t\t\t\t\t\t?.filter( ( id ) => ! clientIds.includes( id ) ) ?? []\n\t\t\t\t);\n\t\t\t\tnewState.set(\n\t\t\t\t\ttoRootClientId,\n\t\t\t\t\tinsertAt( state.get( toRootClientId ), clientIds, index )\n\t\t\t\t);\n\t\t\t\treturn newState;\n\t\t\t}\n\n\t\t\tcase 'MOVE_BLOCKS_UP': {\n\t\t\t\tconst { clientIds, rootClientId = '' } = action;\n\t\t\t\tconst firstClientId = clientIds[ 0 ];\n\t\t\t\tconst subState = state.get( rootClientId );\n\n\t\t\t\tif ( ! subState.length || firstClientId === subState[ 0 ] ) {\n\t\t\t\t\treturn state;\n\t\t\t\t}\n\n\t\t\t\tconst firstIndex = subState.indexOf( firstClientId );\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\tnewState.set(\n\t\t\t\t\trootClientId,\n\t\t\t\t\tmoveTo(\n\t\t\t\t\t\tsubState,\n\t\t\t\t\t\tfirstIndex,\n\t\t\t\t\t\tfirstIndex - 1,\n\t\t\t\t\t\tclientIds.length\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t\treturn newState;\n\t\t\t}\n\n\t\t\tcase 'MOVE_BLOCKS_DOWN': {\n\t\t\t\tconst { clientIds, rootClientId = '' } = action;\n\t\t\t\tconst firstClientId = clientIds[ 0 ];\n\t\t\t\tconst lastClientId = clientIds[ clientIds.length - 1 ];\n\t\t\t\tconst subState = state.get( rootClientId );\n\n\t\t\t\tif (\n\t\t\t\t\t! subState.length ||\n\t\t\t\t\tlastClientId === subState[ subState.length - 1 ]\n\t\t\t\t) {\n\t\t\t\t\treturn state;\n\t\t\t\t}\n\n\t\t\t\tconst firstIndex = subState.indexOf( firstClientId );\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\tnewState.set(\n\t\t\t\t\trootClientId,\n\t\t\t\t\tmoveTo(\n\t\t\t\t\t\tsubState,\n\t\t\t\t\t\tfirstIndex,\n\t\t\t\t\t\tfirstIndex + 1,\n\t\t\t\t\t\tclientIds.length\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t\treturn newState;\n\t\t\t}\n\n\t\t\tcase 'REPLACE_BLOCKS_AUGMENTED_WITH_CHILDREN': {\n\t\t\t\tconst { clientIds } = action;\n\t\t\t\tif ( ! action.blocks ) {\n\t\t\t\t\treturn state;\n\t\t\t\t}\n\n\t\t\t\tconst mappedBlocks = mapBlockOrder( action.blocks );\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\taction.replacedClientIds.forEach( ( clientId ) => {\n\t\t\t\t\tnewState.delete( clientId );\n\t\t\t\t} );\n\t\t\t\tmappedBlocks.forEach( ( order, clientId ) => {\n\t\t\t\t\tif ( clientId !== '' ) {\n\t\t\t\t\t\tnewState.set( clientId, order );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\tnewState.forEach( ( order, clientId ) => {\n\t\t\t\t\tconst newSubOrder = Object.values( order ).reduce(\n\t\t\t\t\t\t( result, subClientId ) => {\n\t\t\t\t\t\t\tif ( subClientId === clientIds[ 0 ] ) {\n\t\t\t\t\t\t\t\treturn [ ...result, ...mappedBlocks.get( '' ) ];\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( clientIds.indexOf( subClientId ) === -1 ) {\n\t\t\t\t\t\t\t\tresult.push( subClientId );\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t},\n\t\t\t\t\t\t[]\n\t\t\t\t\t);\n\t\t\t\t\tnewState.set( clientId, newSubOrder );\n\t\t\t\t} );\n\t\t\t\treturn newState;\n\t\t\t}\n\n\t\t\tcase 'REMOVE_BLOCKS_AUGMENTED_WITH_CHILDREN': {\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\t// Remove inner block ordering for removed blocks.\n\t\t\t\taction.removedClientIds.forEach( ( clientId ) => {\n\t\t\t\t\tnewState.delete( clientId );\n\t\t\t\t} );\n\t\t\t\tnewState.forEach( ( order, clientId ) => {\n\t\t\t\t\tconst newSubOrder =\n\t\t\t\t\t\torder?.filter(\n\t\t\t\t\t\t\t( id ) => ! action.removedClientIds.includes( id )\n\t\t\t\t\t\t) ?? [];\n\t\t\t\t\tif ( newSubOrder.length !== order.length ) {\n\t\t\t\t\t\tnewState.set( clientId, newSubOrder );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn newState;\n\t\t\t}\n\t\t}\n\n\t\treturn state;\n\t},\n\n\t// While technically redundant data as the inverse of `order`, it serves as\n\t// an optimization for the selectors which derive the ancestry of a block.\n\tparents( state = new Map(), action ) {\n\t\tswitch ( action.type ) {\n\t\t\tcase 'RECEIVE_BLOCKS': {\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\tmapBlockParents( action.blocks ).forEach(\n\t\t\t\t\t( [ key, value ] ) => {\n\t\t\t\t\t\tnewState.set( key, value );\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\treturn newState;\n\t\t\t}\n\t\t\tcase 'INSERT_BLOCKS': {\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\tmapBlockParents(\n\t\t\t\t\taction.blocks,\n\t\t\t\t\taction.rootClientId || ''\n\t\t\t\t).forEach( ( [ key, value ] ) => {\n\t\t\t\t\tnewState.set( key, value );\n\t\t\t\t} );\n\t\t\t\treturn newState;\n\t\t\t}\n\t\t\tcase 'MOVE_BLOCKS_TO_POSITION': {\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\taction.clientIds.forEach( ( id ) => {\n\t\t\t\t\tnewState.set( id, action.toRootClientId || '' );\n\t\t\t\t} );\n\t\t\t\treturn newState;\n\t\t\t}\n\n\t\t\tcase 'REPLACE_BLOCKS_AUGMENTED_WITH_CHILDREN': {\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\taction.replacedClientIds.forEach( ( clientId ) => {\n\t\t\t\t\tnewState.delete( clientId );\n\t\t\t\t} );\n\t\t\t\tmapBlockParents(\n\t\t\t\t\taction.blocks,\n\t\t\t\t\tstate.get( action.clientIds[ 0 ] )\n\t\t\t\t).forEach( ( [ key, value ] ) => {\n\t\t\t\t\tnewState.set( key, value );\n\t\t\t\t} );\n\t\t\t\treturn newState;\n\t\t\t}\n\t\t\tcase 'REMOVE_BLOCKS_AUGMENTED_WITH_CHILDREN': {\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\taction.removedClientIds.forEach( ( clientId ) => {\n\t\t\t\t\tnewState.delete( clientId );\n\t\t\t\t} );\n\t\t\t\treturn newState;\n\t\t\t}\n\t\t}\n\n\t\treturn state;\n\t},\n\n\tcontrolledInnerBlocks(\n\t\tstate = {},\n\t\t{ type, clientId, hasControlledInnerBlocks }\n\t) {\n\t\tif ( type === 'SET_HAS_CONTROLLED_INNER_BLOCKS' ) {\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ clientId ]: hasControlledInnerBlocks,\n\t\t\t};\n\t\t}\n\t\treturn state;\n\t},\n} );\n\n/**\n * Reducer returning visibility status of block interface.\n *\n * @param {boolean} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {boolean} Updated state.\n */\nexport function isBlockInterfaceHidden( state = false, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'HIDE_BLOCK_INTERFACE':\n\t\t\treturn true;\n\n\t\tcase 'SHOW_BLOCK_INTERFACE':\n\t\t\treturn false;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning typing state.\n *\n * @param {boolean} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {boolean} Updated state.\n */\nexport function isTyping( state = false, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'START_TYPING':\n\t\t\treturn true;\n\n\t\tcase 'STOP_TYPING':\n\t\t\treturn false;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning dragging state. It is possible for a user to be dragging\n * data from outside of the editor, so this state is separate from `draggedBlocks`.\n *\n * @param {boolean} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {boolean} Updated state.\n */\nexport function isDragging( state = false, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'START_DRAGGING':\n\t\t\treturn true;\n\n\t\tcase 'STOP_DRAGGING':\n\t\t\treturn false;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning dragged block client id.\n *\n * @param {string[]} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {string[]} Updated state.\n */\nexport function draggedBlocks( state = [], action ) {\n\tswitch ( action.type ) {\n\t\tcase 'START_DRAGGING_BLOCKS':\n\t\t\treturn action.clientIds;\n\n\t\tcase 'STOP_DRAGGING_BLOCKS':\n\t\t\treturn [];\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer tracking the visible blocks.\n *\n * @param {Record<string,boolean>} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Record<string,boolean>} Block visibility.\n */\nexport function blockVisibility( state = {}, action ) {\n\tif ( action.type === 'SET_BLOCK_VISIBILITY' ) {\n\t\treturn {\n\t\t\t...state,\n\t\t\t...action.updates,\n\t\t};\n\t}\n\n\treturn state;\n}\n\n/**\n * Internal helper reducer for selectionStart and selectionEnd. Can hold a block\n * selection, represented by an object with property clientId.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nfunction selectionHelper( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'CLEAR_SELECTED_BLOCK': {\n\t\t\tif ( state.clientId ) {\n\t\t\t\treturn {};\n\t\t\t}\n\n\t\t\treturn state;\n\t\t}\n\t\tcase 'SELECT_BLOCK':\n\t\t\tif ( action.clientId === state.clientId ) {\n\t\t\t\treturn state;\n\t\t\t}\n\n\t\t\treturn { clientId: action.clientId };\n\t\tcase 'REPLACE_INNER_BLOCKS':\n\t\tcase 'INSERT_BLOCKS': {\n\t\t\tif ( ! action.updateSelection || ! action.blocks.length ) {\n\t\t\t\treturn state;\n\t\t\t}\n\n\t\t\treturn { clientId: action.blocks[ 0 ].clientId };\n\t\t}\n\t\tcase 'REMOVE_BLOCKS':\n\t\t\tif (\n\t\t\t\t! action.clientIds ||\n\t\t\t\t! action.clientIds.length ||\n\t\t\t\taction.clientIds.indexOf( state.clientId ) === -1\n\t\t\t) {\n\t\t\t\treturn state;\n\t\t\t}\n\n\t\t\treturn {};\n\t\tcase 'REPLACE_BLOCKS': {\n\t\t\tif ( action.clientIds.indexOf( state.clientId ) === -1 ) {\n\t\t\t\treturn state;\n\t\t\t}\n\n\t\t\tconst blockToSelect =\n\t\t\t\taction.blocks[ action.indexToSelect ] ||\n\t\t\t\taction.blocks[ action.blocks.length - 1 ];\n\n\t\t\tif ( ! blockToSelect ) {\n\t\t\t\treturn {};\n\t\t\t}\n\n\t\t\tif ( blockToSelect.clientId === state.clientId ) {\n\t\t\t\treturn state;\n\t\t\t}\n\n\t\t\treturn { clientId: blockToSelect.clientId };\n\t\t}\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning the selection state.\n *\n * @param {boolean} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {boolean} Updated state.\n */\nexport function selection( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'SELECTION_CHANGE':\n\t\t\tif ( action.clientId ) {\n\t\t\t\treturn {\n\t\t\t\t\tselectionStart: {\n\t\t\t\t\t\tclientId: action.clientId,\n\t\t\t\t\t\tattributeKey: action.attributeKey,\n\t\t\t\t\t\toffset: action.startOffset,\n\t\t\t\t\t},\n\t\t\t\t\tselectionEnd: {\n\t\t\t\t\t\tclientId: action.clientId,\n\t\t\t\t\t\tattributeKey: action.attributeKey,\n\t\t\t\t\t\toffset: action.endOffset,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tselectionStart: action.start || state.selectionStart,\n\t\t\t\tselectionEnd: action.end || state.selectionEnd,\n\t\t\t};\n\t\tcase 'RESET_SELECTION':\n\t\t\tconst { selectionStart, selectionEnd } = action;\n\t\t\treturn {\n\t\t\t\tselectionStart,\n\t\t\t\tselectionEnd,\n\t\t\t};\n\t\tcase 'MULTI_SELECT':\n\t\t\tconst { start, end } = action;\n\n\t\t\tif (\n\t\t\t\tstart === state.selectionStart?.clientId &&\n\t\t\t\tend === state.selectionEnd?.clientId\n\t\t\t) {\n\t\t\t\treturn state;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tselectionStart: { clientId: start },\n\t\t\t\tselectionEnd: { clientId: end },\n\t\t\t};\n\t\tcase 'RESET_BLOCKS':\n\t\t\tconst startClientId = state?.selectionStart?.clientId;\n\t\t\tconst endClientId = state?.selectionEnd?.clientId;\n\n\t\t\t// Do nothing if there's no selected block.\n\t\t\tif ( ! startClientId && ! endClientId ) {\n\t\t\t\treturn state;\n\t\t\t}\n\n\t\t\t// If the start of the selection won't exist after reset, remove selection.\n\t\t\tif (\n\t\t\t\t! action.blocks.some(\n\t\t\t\t\t( block ) => block.clientId === startClientId\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\treturn {\n\t\t\t\t\tselectionStart: {},\n\t\t\t\t\tselectionEnd: {},\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// If the end of the selection won't exist after reset, collapse selection.\n\t\t\tif (\n\t\t\t\t! action.blocks.some(\n\t\t\t\t\t( block ) => block.clientId === endClientId\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\treturn {\n\t\t\t\t\t...state,\n\t\t\t\t\tselectionEnd: state.selectionStart,\n\t\t\t\t};\n\t\t\t}\n\t}\n\n\tconst selectionStart = selectionHelper( state.selectionStart, action );\n\tconst selectionEnd = selectionHelper( state.selectionEnd, action );\n\n\tif (\n\t\tselectionStart === state.selectionStart &&\n\t\tselectionEnd === state.selectionEnd\n\t) {\n\t\treturn state;\n\t}\n\n\treturn {\n\t\tselectionStart,\n\t\tselectionEnd,\n\t};\n}\n\n/**\n * Reducer returning whether the user is multi-selecting.\n *\n * @param {boolean} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {boolean} Updated state.\n */\nexport function isMultiSelecting( state = false, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'START_MULTI_SELECT':\n\t\t\treturn true;\n\n\t\tcase 'STOP_MULTI_SELECT':\n\t\t\treturn false;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning whether selection is enabled.\n *\n * @param {boolean} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {boolean} Updated state.\n */\nexport function isSelectionEnabled( state = true, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'TOGGLE_SELECTION':\n\t\t\treturn action.isSelectionEnabled;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning the data needed to display a prompt when certain blocks\n * are removed, or `false` if no such prompt is requested.\n *\n * @param {boolean} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object|false} Data for removal prompt display, if any.\n */\nfunction removalPromptData( state = false, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'DISPLAY_BLOCK_REMOVAL_PROMPT':\n\t\t\tconst { clientIds, selectPrevious, message } = action;\n\t\t\treturn {\n\t\t\t\tclientIds,\n\t\t\t\tselectPrevious,\n\t\t\t\tmessage,\n\t\t\t};\n\t\tcase 'CLEAR_BLOCK_REMOVAL_PROMPT':\n\t\t\treturn false;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning any rules that a block editor may provide in order to\n * prevent a user from accidentally removing certain blocks. These rules are\n * then used to display a confirmation prompt to the user. For instance, in the\n * Site Editor, the Query Loop block is important enough to warrant such\n * confirmation.\n *\n * The data is a record whose keys are block types (e.g. 'core/query') and\n * whose values are the explanation to be shown to users (e.g. 'Query Loop\n * displays a list of posts or pages.').\n *\n * @param {boolean} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Record<string,string>} Updated state.\n */\nfunction blockRemovalRules( state = false, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'SET_BLOCK_REMOVAL_RULES':\n\t\t\treturn action.rules;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning the initial block selection.\n *\n * Currently this in only used to restore the selection after block deletion and\n * pasting new content.This reducer should eventually be removed in favour of setting\n * selection directly.\n *\n * @param {boolean} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {number|null} Initial position: 0, -1 or null.\n */\nexport function initialPosition( state = null, action ) {\n\tif (\n\t\taction.type === 'REPLACE_BLOCKS' &&\n\t\taction.initialPosition !== undefined\n\t) {\n\t\treturn action.initialPosition;\n\t} else if (\n\t\t[\n\t\t\t'MULTI_SELECT',\n\t\t\t'SELECT_BLOCK',\n\t\t\t'RESET_SELECTION',\n\t\t\t'INSERT_BLOCKS',\n\t\t\t'REPLACE_INNER_BLOCKS',\n\t\t].includes( action.type )\n\t) {\n\t\treturn action.initialPosition;\n\t}\n\n\treturn state;\n}\n\nexport function blocksMode( state = {}, action ) {\n\tif ( action.type === 'TOGGLE_BLOCK_MODE' ) {\n\t\tconst { clientId } = action;\n\t\treturn {\n\t\t\t...state,\n\t\t\t[ clientId ]:\n\t\t\t\tstate[ clientId ] && state[ clientId ] === 'html'\n\t\t\t\t\t? 'visual'\n\t\t\t\t\t: 'html',\n\t\t};\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning the block insertion point visibility, either null if there\n * is not an explicit insertion point assigned, or an object of its `index` and\n * `rootClientId`.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function insertionCue( state = null, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'SHOW_INSERTION_POINT': {\n\t\t\tconst {\n\t\t\t\trootClientId,\n\t\t\t\tindex,\n\t\t\t\t__unstableWithInserter,\n\t\t\t\toperation,\n\t\t\t\tnearestSide,\n\t\t\t} = action;\n\t\t\tconst nextState = {\n\t\t\t\trootClientId,\n\t\t\t\tindex,\n\t\t\t\t__unstableWithInserter,\n\t\t\t\toperation,\n\t\t\t\tnearestSide,\n\t\t\t};\n\n\t\t\t// Bail out updates if the states are the same.\n\t\t\treturn fastDeepEqual( state, nextState ) ? state : nextState;\n\t\t}\n\n\t\tcase 'HIDE_INSERTION_POINT':\n\t\t\treturn null;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning whether the post blocks match the defined template or not.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {boolean} Updated state.\n */\nexport function template( state = { isValid: true }, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'SET_TEMPLATE_VALIDITY':\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tisValid: action.isValid,\n\t\t\t};\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning the editor setting.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function settings( state = SETTINGS_DEFAULTS, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'UPDATE_SETTINGS': {\n\t\t\tconst updatedSettings = action.reset\n\t\t\t\t? {\n\t\t\t\t\t\t...SETTINGS_DEFAULTS,\n\t\t\t\t\t\t...action.settings,\n\t\t\t\t }\n\t\t\t\t: {\n\t\t\t\t\t\t...state,\n\t\t\t\t\t\t...action.settings,\n\t\t\t\t };\n\n\t\t\tObject.defineProperty( updatedSettings, '__unstableIsPreviewMode', {\n\t\t\t\tget() {\n\t\t\t\t\tdeprecated( '__unstableIsPreviewMode', {\n\t\t\t\t\t\tsince: '6.8',\n\t\t\t\t\t\talternative: 'isPreviewMode',\n\t\t\t\t\t} );\n\n\t\t\t\t\treturn this.isPreviewMode;\n\t\t\t\t},\n\t\t\t} );\n\n\t\t\treturn updatedSettings;\n\t\t}\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning the user preferences.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {string} Updated state.\n */\nexport function preferences( state = PREFERENCES_DEFAULTS, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'INSERT_BLOCKS':\n\t\tcase 'REPLACE_BLOCKS': {\n\t\t\tconst nextInsertUsage = action.blocks.reduce(\n\t\t\t\t( prevUsage, block ) => {\n\t\t\t\t\tconst { attributes, name: blockName } = block;\n\t\t\t\t\tlet id = blockName;\n\t\t\t\t\t// If a block variation match is found change the name to be the same with the\n\t\t\t\t\t// one that is used for block variations in the Inserter (`getItemFromVariation`).\n\t\t\t\t\tconst match = select( blocksStore ).getActiveBlockVariation(\n\t\t\t\t\t\tblockName,\n\t\t\t\t\t\tattributes\n\t\t\t\t\t);\n\t\t\t\t\tif ( match?.name ) {\n\t\t\t\t\t\tid += '/' + match.name;\n\t\t\t\t\t}\n\t\t\t\t\tif ( blockName === 'core/block' ) {\n\t\t\t\t\t\tid += '/' + attributes.ref;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...prevUsage,\n\t\t\t\t\t\t[ id ]: {\n\t\t\t\t\t\t\ttime: action.time,\n\t\t\t\t\t\t\tcount: prevUsage[ id ]\n\t\t\t\t\t\t\t\t? prevUsage[ id ].count + 1\n\t\t\t\t\t\t\t\t: 1,\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t\tstate.insertUsage\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tinsertUsage: nextInsertUsage,\n\t\t\t};\n\t\t}\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning an object where each key is a block client ID, its value\n * representing the settings for its nested blocks.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport const blockListSettings = ( state = {}, action ) => {\n\tswitch ( action.type ) {\n\t\t// Even if the replaced blocks have the same client ID, our logic\n\t\t// should correct the state.\n\t\tcase 'REPLACE_BLOCKS':\n\t\tcase 'REMOVE_BLOCKS': {\n\t\t\treturn Object.fromEntries(\n\t\t\t\tObject.entries( state ).filter(\n\t\t\t\t\t( [ id ] ) => ! action.clientIds.includes( id )\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t\tcase 'UPDATE_BLOCK_LIST_SETTINGS': {\n\t\t\tconst updates =\n\t\t\t\ttypeof action.clientId === 'string'\n\t\t\t\t\t? { [ action.clientId ]: action.settings }\n\t\t\t\t\t: action.clientId;\n\n\t\t\t// Remove settings that are the same as the current state.\n\t\t\tfor ( const clientId in updates ) {\n\t\t\t\tif ( ! updates[ clientId ] ) {\n\t\t\t\t\tif ( ! state[ clientId ] ) {\n\t\t\t\t\t\tdelete updates[ clientId ];\n\t\t\t\t\t}\n\t\t\t\t} else if (\n\t\t\t\t\tfastDeepEqual( state[ clientId ], updates[ clientId ] )\n\t\t\t\t) {\n\t\t\t\t\tdelete updates[ clientId ];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( Object.keys( updates ).length === 0 ) {\n\t\t\t\treturn state;\n\t\t\t}\n\n\t\t\tconst merged = { ...state, ...updates };\n\n\t\t\tfor ( const clientId in updates ) {\n\t\t\t\tif ( ! updates[ clientId ] ) {\n\t\t\t\t\tdelete merged[ clientId ];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn merged;\n\t\t}\n\t}\n\treturn state;\n};\n\n/**\n * Reducer return an updated state representing the most recent block attribute\n * update. The state is structured as an object where the keys represent the\n * client IDs of blocks, the values a subset of attributes from the most recent\n * block update. The state is always reset to null if the last action is\n * anything other than an attributes update.\n *\n * @param {Object<string,Object>} state Current state.\n * @param {Object} action Action object.\n *\n * @return {[string,Object]} Updated state.\n */\nexport function lastBlockAttributesChange( state = null, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'UPDATE_BLOCK':\n\t\t\tif ( ! action.updates.attributes ) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\treturn { [ action.clientId ]: action.updates.attributes };\n\n\t\tcase 'UPDATE_BLOCK_ATTRIBUTES':\n\t\t\treturn action.clientIds.reduce(\n\t\t\t\t( accumulator, id ) => ( {\n\t\t\t\t\t...accumulator,\n\t\t\t\t\t[ id ]: !! action.options?.uniqueByBlock\n\t\t\t\t\t\t? action.attributes[ id ]\n\t\t\t\t\t\t: action.attributes,\n\t\t\t\t} ),\n\t\t\t\t{}\n\t\t\t);\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning current highlighted block.\n *\n * @param {boolean} state Current highlighted block.\n * @param {Object} action Dispatched action.\n *\n * @return {string} Updated state.\n */\nexport function highlightedBlock( state, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'TOGGLE_BLOCK_HIGHLIGHT':\n\t\t\tconst { clientId, isHighlighted } = action;\n\n\t\t\tif ( isHighlighted ) {\n\t\t\t\treturn clientId;\n\t\t\t} else if ( state === clientId ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\treturn state;\n\t\tcase 'SELECT_BLOCK':\n\t\t\tif ( action.clientId !== state ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning current expanded block in the list view.\n *\n * @param {string|null} state Current expanded block.\n * @param {Object} action Dispatched action.\n *\n * @return {string|null} Updated state.\n */\nexport function expandedBlock( state = null, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'SET_BLOCK_EXPANDED_IN_LIST_VIEW':\n\t\t\treturn action.clientId;\n\t\tcase 'SELECT_BLOCK':\n\t\t\tif ( action.clientId !== state ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning the block insertion event list state.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function lastBlockInserted( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'INSERT_BLOCKS':\n\t\tcase 'REPLACE_BLOCKS':\n\t\t\tif ( ! action.blocks.length ) {\n\t\t\t\treturn state;\n\t\t\t}\n\n\t\t\tconst clientIds = action.blocks.map( ( block ) => {\n\t\t\t\treturn block.clientId;\n\t\t\t} );\n\n\t\t\tconst source = action.meta?.source;\n\n\t\t\treturn { clientIds, source };\n\t\tcase 'RESET_BLOCKS':\n\t\t\treturn {};\n\t}\n\treturn state;\n}\n\n/**\n * Reducer returning the block that is eding temporarily edited as blocks.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function temporarilyEditingAsBlocks( state = '', action ) {\n\tif ( action.type === 'SET_TEMPORARILY_EDITING_AS_BLOCKS' ) {\n\t\treturn action.temporarilyEditingAsBlocks;\n\t}\n\treturn state;\n}\n\n/**\n * Reducer returning the focus mode that should be used when temporarily edit as blocks finishes.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function temporarilyEditingFocusModeRevert( state = '', action ) {\n\tif ( action.type === 'SET_TEMPORARILY_EDITING_AS_BLOCKS' ) {\n\t\treturn action.focusModeToRevert;\n\t}\n\treturn state;\n}\n\n/**\n * Reducer returning a map of block client IDs to block editing modes.\n *\n * @param {Map} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Map} Updated state.\n */\nexport function blockEditingModes( state = new Map(), action ) {\n\tswitch ( action.type ) {\n\t\tcase 'SET_BLOCK_EDITING_MODE':\n\t\t\tif ( state.get( action.clientId ) === action.mode ) {\n\t\t\t\treturn state;\n\t\t\t}\n\t\t\treturn new Map( state ).set( action.clientId, action.mode );\n\t\tcase 'UNSET_BLOCK_EDITING_MODE': {\n\t\t\tif ( ! state.has( action.clientId ) ) {\n\t\t\t\treturn state;\n\t\t\t}\n\t\t\tconst newState = new Map( state );\n\t\t\tnewState.delete( action.clientId );\n\t\t\treturn newState;\n\t\t}\n\t\tcase 'RESET_BLOCKS': {\n\t\t\treturn state.has( '' )\n\t\t\t\t? new Map().set( '', state.get( '' ) )\n\t\t\t\t: state;\n\t\t}\n\t}\n\treturn state;\n}\n\n/**\n * Reducer returning the clientId of the block settings menu that is currently open.\n *\n * @param {string|null} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {string|null} Updated state.\n */\nexport function openedBlockSettingsMenu( state = null, action ) {\n\tif ( 'SET_OPENED_BLOCK_SETTINGS_MENU' === action.type ) {\n\t\treturn action?.clientId ?? null;\n\t}\n\treturn state;\n}\n\n/**\n * Reducer returning a map of style IDs to style overrides.\n *\n * @param {Map} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Map} Updated state.\n */\nexport function styleOverrides( state = new Map(), action ) {\n\tswitch ( action.type ) {\n\t\tcase 'SET_STYLE_OVERRIDE':\n\t\t\treturn new Map( state ).set( action.id, action.style );\n\t\tcase 'DELETE_STYLE_OVERRIDE': {\n\t\t\tconst newState = new Map( state );\n\t\t\tnewState.delete( action.id );\n\t\t\treturn newState;\n\t\t}\n\t}\n\treturn state;\n}\n\n/**\n * Reducer returning a map of the registered inserter media categories.\n *\n * @param {Array} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Array} Updated state.\n */\nexport function registeredInserterMediaCategories( state = [], action ) {\n\tswitch ( action.type ) {\n\t\tcase 'REGISTER_INSERTER_MEDIA_CATEGORY':\n\t\t\treturn [ ...state, action.category ];\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer setting last focused element\n *\n * @param {boolean} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {boolean} Updated state.\n */\nexport function lastFocus( state = false, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'LAST_FOCUS':\n\t\t\treturn action.lastFocus;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer setting zoom out state.\n *\n * @param {boolean} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {number} Updated state.\n */\nexport function zoomLevel( state = 100, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'SET_ZOOM_LEVEL':\n\t\t\treturn action.zoom;\n\t\tcase 'RESET_ZOOM_LEVEL':\n\t\t\treturn 100;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer setting the insertion point\n *\n * @param {boolean} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function insertionPoint( state = null, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'SET_INSERTION_POINT':\n\t\t\treturn action.value;\n\t\tcase 'SELECT_BLOCK':\n\t\t\treturn null;\n\t}\n\n\treturn state;\n}\n\nconst combinedReducers = combineReducers( {\n\tblocks,\n\tisDragging,\n\tisTyping,\n\tisBlockInterfaceHidden,\n\tdraggedBlocks,\n\tselection,\n\tisMultiSelecting,\n\tisSelectionEnabled,\n\tinitialPosition,\n\tblocksMode,\n\tblockListSettings,\n\tinsertionPoint,\n\tinsertionCue,\n\ttemplate,\n\tsettings,\n\tpreferences,\n\tlastBlockAttributesChange,\n\tlastFocus,\n\texpandedBlock,\n\thighlightedBlock,\n\tlastBlockInserted,\n\ttemporarilyEditingAsBlocks,\n\ttemporarilyEditingFocusModeRevert,\n\tblockVisibility,\n\tblockEditingModes,\n\tstyleOverrides,\n\tremovalPromptData,\n\tblockRemovalRules,\n\topenedBlockSettingsMenu,\n\tregisteredInserterMediaCategories,\n\tzoomLevel,\n} );\n\n/**\n * Retrieves a block's tree structure, handling both controlled and uncontrolled inner blocks.\n *\n * @param {Object} state The current state object.\n * @param {string} clientId The client ID of the block to retrieve.\n *\n * @return {Object|undefined} The block tree object, or undefined if not found. For controlled blocks,\n * returns a merged tree with controlled inner blocks.\n */\nfunction getBlockTreeBlock( state, clientId ) {\n\tif ( clientId === '' ) {\n\t\tconst rootBlock = state.blocks.tree.get( clientId );\n\n\t\tif ( ! rootBlock ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Patch the root block to have a clientId property.\n\t\t// TODO - consider updating the blocks reducer so that the root block has this property.\n\t\treturn {\n\t\t\tclientId: '',\n\t\t\t...rootBlock,\n\t\t};\n\t}\n\n\tif ( ! state.blocks.controlledInnerBlocks[ clientId ] ) {\n\t\treturn state.blocks.tree.get( clientId );\n\t}\n\n\tconst controlledTree = state.blocks.tree.get( `controlled||${ clientId }` );\n\tconst regularTree = state.blocks.tree.get( clientId );\n\n\treturn {\n\t\t...regularTree,\n\t\tinnerBlocks: controlledTree?.innerBlocks,\n\t};\n}\n\n/**\n * Recursively traverses through a block tree of a given block and executes a callback for each block.\n *\n * @param {Object} state The store state.\n * @param {string} clientId The clientId of the block to start traversing from.\n * @param {Function} callback Function to execute for each block encountered during traversal.\n * The callback receives the current block as its argument.\n */\nfunction traverseBlockTree( state, clientId, callback ) {\n\tconst tree = getBlockTreeBlock( state, clientId );\n\tif ( ! tree ) {\n\t\treturn;\n\t}\n\n\tcallback( tree );\n\n\tif ( ! tree?.innerBlocks?.length ) {\n\t\treturn;\n\t}\n\n\tfor ( const innerBlock of tree?.innerBlocks ) {\n\t\ttraverseBlockTree( state, innerBlock.clientId, callback );\n\t}\n}\n\n/**\n * Checks if a block has a parent in a list of client IDs, and if so returns the client ID of the parent.\n *\n * @param {Object} state The current state object.\n * @param {string} clientId The client ID of the block to search the parents of.\n * @param {Array} clientIds The client IDs of the blocks to check.\n *\n * @return {string|undefined} The client ID of the parent block if found, undefined otherwise.\n */\nfunction findParentInClientIdsList( state, clientId, clientIds ) {\n\tif ( ! clientIds.length ) {\n\t\treturn;\n\t}\n\n\tlet parent = state.blocks.parents.get( clientId );\n\twhile ( parent !== undefined ) {\n\t\tif ( clientIds.includes( parent ) ) {\n\t\t\treturn parent;\n\t\t}\n\t\tparent = state.blocks.parents.get( parent );\n\t}\n}\n\n/**\n * Checks if a block has any bindings in its metadata attributes.\n *\n * @param {Object} block The block object to check for bindings.\n * @return {boolean} True if the block has bindings, false otherwise.\n */\nfunction hasBindings( block ) {\n\treturn (\n\t\tblock?.attributes?.metadata?.bindings &&\n\t\tObject.keys( block?.attributes?.metadata?.bindings ).length\n\t);\n}\n\n/**\n * Computes and returns derived block editing modes for a given block tree.\n *\n * This function calculates the editing modes for each block in the tree, taking into account\n * various factors such as zoom level, navigation mode, sections, and synced patterns.\n *\n * @param {Object} state The current state object.\n * @param {boolean} isNavMode Whether the navigation mode is active.\n * @param {string} treeClientId The client ID of the root block for the tree. Defaults to an empty string.\n * @return {Map} A Map containing the derived block editing modes, keyed by block client ID.\n */\nfunction getDerivedBlockEditingModesForTree(\n\tstate,\n\tisNavMode = false,\n\ttreeClientId = ''\n) {\n\tconst isZoomedOut =\n\t\tstate?.zoomLevel < 100 || state?.zoomLevel === 'auto-scaled';\n\tconst derivedBlockEditingModes = new Map();\n\n\t// When there are sections, the majority of blocks are disabled,\n\t// so the default block editing mode is set to disabled.\n\tconst sectionRootClientId = state.settings?.[ sectionRootClientIdKey ];\n\tconst sectionClientIds = state.blocks.order.get( sectionRootClientId );\n\tconst hasDisabledBlocks = Array.from( state.blockEditingModes ).some(\n\t\t( [ , mode ] ) => mode === 'disabled'\n\t);\n\tconst templatePartClientIds = [];\n\tconst syncedPatternClientIds = [];\n\n\tObject.keys( state.blocks.controlledInnerBlocks ).forEach( ( clientId ) => {\n\t\tconst block = state.blocks.byClientId?.get( clientId );\n\n\t\tif ( block?.name === 'core/template-part' ) {\n\t\t\ttemplatePartClientIds.push( clientId );\n\t\t}\n\n\t\tif ( block?.name === 'core/block' ) {\n\t\t\tsyncedPatternClientIds.push( clientId );\n\t\t}\n\t} );\n\n\ttraverseBlockTree( state, treeClientId, ( block ) => {\n\t\tconst { clientId, name: blockName } = block;\n\n\t\t// If the block already has an explicit block editing mode set,\n\t\t// don't override it.\n\t\tif ( state.blockEditingModes.has( clientId ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Disabled explicit block editing modes are inherited by children.\n\t\t// It's an expensive calculation, so only do it if there are disabled blocks.\n\t\tif ( hasDisabledBlocks ) {\n\t\t\t// Look through parents to find one with an explicit block editing mode.\n\t\t\tlet ancestorBlockEditingMode;\n\t\t\tlet parent = state.blocks.parents.get( clientId );\n\t\t\twhile ( parent !== undefined ) {\n\t\t\t\t// There's a chance we only just calculated this for the parent,\n\t\t\t\t// if so we can return that value for a faster lookup.\n\t\t\t\tif ( derivedBlockEditingModes.has( parent ) ) {\n\t\t\t\t\tancestorBlockEditingMode =\n\t\t\t\t\t\tderivedBlockEditingModes.get( parent );\n\t\t\t\t} else if ( state.blockEditingModes.has( parent ) ) {\n\t\t\t\t\t// Checking the explicit block editing mode will be slower,\n\t\t\t\t\t// as the block editing mode is more likely to be set on a\n\t\t\t\t\t// distant ancestor.\n\t\t\t\t\tancestorBlockEditingMode =\n\t\t\t\t\t\tstate.blockEditingModes.get( parent );\n\t\t\t\t}\n\t\t\t\tif ( ancestorBlockEditingMode ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tparent = state.blocks.parents.get( parent );\n\t\t\t}\n\n\t\t\t// If the ancestor block editing mode is disabled, it's inherited by the child.\n\t\t\tif ( ancestorBlockEditingMode === 'disabled' ) {\n\t\t\t\tderivedBlockEditingModes.set( clientId, 'disabled' );\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tif ( isZoomedOut || isNavMode ) {\n\t\t\t// If the root block is the section root set its editing mode to contentOnly.\n\t\t\tif ( clientId === sectionRootClientId ) {\n\t\t\t\tderivedBlockEditingModes.set( clientId, 'contentOnly' );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// There are no sections, so everything else is disabled.\n\t\t\tif ( ! sectionClientIds?.length ) {\n\t\t\t\tderivedBlockEditingModes.set( clientId, 'disabled' );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( sectionClientIds.includes( clientId ) ) {\n\t\t\t\tderivedBlockEditingModes.set( clientId, 'contentOnly' );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If zoomed out, all blocks that aren't sections or the section root are\n\t\t\t// disabled.\n\t\t\tif ( isZoomedOut ) {\n\t\t\t\tderivedBlockEditingModes.set( clientId, 'disabled' );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst isInSection = !! findParentInClientIdsList(\n\t\t\t\tstate,\n\t\t\t\tclientId,\n\t\t\t\tsectionClientIds\n\t\t\t);\n\t\t\tif ( ! isInSection ) {\n\t\t\t\tif ( clientId === '' ) {\n\t\t\t\t\tderivedBlockEditingModes.set( clientId, 'disabled' );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Allow selection of template parts outside of sections.\n\t\t\t\tif ( blockName === 'core/template-part' ) {\n\t\t\t\t\tderivedBlockEditingModes.set( clientId, 'contentOnly' );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst isInTemplatePart = !! findParentInClientIdsList(\n\t\t\t\t\tstate,\n\t\t\t\t\tclientId,\n\t\t\t\t\ttemplatePartClientIds\n\t\t\t\t);\n\t\t\t\t// Allow contentOnly blocks in template parts outside of sections\n\t\t\t\t// to be editable. Only disable blocks that don't fit this criteria.\n\t\t\t\tif ( ! isInTemplatePart && ! isContentBlock( blockName ) ) {\n\t\t\t\t\tderivedBlockEditingModes.set( clientId, 'disabled' );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Handle synced pattern content so the inner blocks of a synced pattern are\n\t\t\t// properly disabled.\n\t\t\tif ( syncedPatternClientIds.length ) {\n\t\t\t\tconst parentPatternClientId = findParentInClientIdsList(\n\t\t\t\t\tstate,\n\t\t\t\t\tclientId,\n\t\t\t\t\tsyncedPatternClientIds\n\t\t\t\t);\n\n\t\t\t\tif ( parentPatternClientId ) {\n\t\t\t\t\t// This is a pattern nested in another pattern, it should be disabled.\n\t\t\t\t\tif (\n\t\t\t\t\t\tfindParentInClientIdsList(\n\t\t\t\t\t\t\tstate,\n\t\t\t\t\t\t\tparentPatternClientId,\n\t\t\t\t\t\t\tsyncedPatternClientIds\n\t\t\t\t\t\t)\n\t\t\t\t\t) {\n\t\t\t\t\t\tderivedBlockEditingModes.set( clientId, 'disabled' );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hasBindings( block ) ) {\n\t\t\t\t\t\tderivedBlockEditingModes.set( clientId, 'contentOnly' );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Synced pattern content without a binding isn't editable\n\t\t\t\t\t// from the instance, the user has to edit the pattern source,\n\t\t\t\t\t// so return 'disabled'.\n\t\t\t\t\tderivedBlockEditingModes.set( clientId, 'disabled' );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( blockName && isContentBlock( blockName ) ) {\n\t\t\t\tderivedBlockEditingModes.set( clientId, 'contentOnly' );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tderivedBlockEditingModes.set( clientId, 'disabled' );\n\t\t\treturn;\n\t\t}\n\n\t\tif ( syncedPatternClientIds.length ) {\n\t\t\t// Synced pattern blocks (core/block).\n\t\t\tif ( syncedPatternClientIds.includes( clientId ) ) {\n\t\t\t\t// This is a pattern nested in another pattern, it should be disabled.\n\t\t\t\tif (\n\t\t\t\t\tfindParentInClientIdsList(\n\t\t\t\t\t\tstate,\n\t\t\t\t\t\tclientId,\n\t\t\t\t\t\tsyncedPatternClientIds\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\tderivedBlockEditingModes.set( clientId, 'disabled' );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Else do nothing, use the default block editing mode.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Inner blocks of synced patterns.\n\t\t\tconst parentPatternClientId = findParentInClientIdsList(\n\t\t\t\tstate,\n\t\t\t\tclientId,\n\t\t\t\tsyncedPatternClientIds\n\t\t\t);\n\t\t\tif ( parentPatternClientId ) {\n\t\t\t\t// This is a pattern nested in another pattern, it should be disabled.\n\t\t\t\tif (\n\t\t\t\t\tfindParentInClientIdsList(\n\t\t\t\t\t\tstate,\n\t\t\t\t\t\tparentPatternClientId,\n\t\t\t\t\t\tsyncedPatternClientIds\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\tderivedBlockEditingModes.set( clientId, 'disabled' );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif ( hasBindings( block ) ) {\n\t\t\t\t\tderivedBlockEditingModes.set( clientId, 'contentOnly' );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Synced pattern content without a binding isn't editable\n\t\t\t\t// from the instance, the user has to edit the pattern source,\n\t\t\t\t// so return 'disabled'.\n\t\t\t\tderivedBlockEditingModes.set( clientId, 'disabled' );\n\t\t\t}\n\t\t}\n\t} );\n\n\treturn derivedBlockEditingModes;\n}\n\n/**\n * Updates the derived block editing modes based on added and removed blocks.\n *\n * This function handles the updating of block editing modes when blocks are added,\n * removed, or moved within the editor.\n *\n * It only returns a value when modifications are made to the block editing modes.\n *\n * @param {Object} options The options for updating derived block editing modes.\n * @param {Object} options.prevState The previous state object.\n * @param {Object} options.nextState The next state object.\n * @param {Array} [options.addedBlocks] An array of blocks that were added.\n * @param {Array} [options.removedClientIds] An array of client IDs of blocks that were removed.\n * @param {boolean} [options.isNavMode] Whether the navigation mode is active.\n * @return {Map|undefined} The updated derived block editing modes, or undefined if no changes were made.\n */\nfunction getDerivedBlockEditingModesUpdates( {\n\tprevState,\n\tnextState,\n\taddedBlocks,\n\tremovedClientIds,\n\tisNavMode = false,\n} ) {\n\tconst prevDerivedBlockEditingModes = isNavMode\n\t\t? prevState.derivedNavModeBlockEditingModes\n\t\t: prevState.derivedBlockEditingModes;\n\tlet nextDerivedBlockEditingModes;\n\n\t// Perform removals before additions to handle cases like the `MOVE_BLOCKS_TO_POSITION` action.\n\t// That action removes a set of clientIds, but adds the same blocks back in a different location.\n\t// If removals were performed after additions, those moved clientIds would be removed incorrectly.\n\tremovedClientIds?.forEach( ( clientId ) => {\n\t\t// The actions only receive parent block IDs for removal.\n\t\t// Recurse through the block tree to ensure all blocks are removed.\n\t\t// Specifically use the previous state, before the blocks were removed.\n\t\ttraverseBlockTree( prevState, clientId, ( block ) => {\n\t\t\tif ( prevDerivedBlockEditingModes.has( block.clientId ) ) {\n\t\t\t\tif ( ! nextDerivedBlockEditingModes ) {\n\t\t\t\t\tnextDerivedBlockEditingModes = new Map(\n\t\t\t\t\t\tprevDerivedBlockEditingModes\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tnextDerivedBlockEditingModes.delete( block.clientId );\n\t\t\t}\n\t\t} );\n\t} );\n\n\taddedBlocks?.forEach( ( addedBlock ) => {\n\t\ttraverseBlockTree( nextState, addedBlock.clientId, ( block ) => {\n\t\t\tconst updates = getDerivedBlockEditingModesForTree(\n\t\t\t\tnextState,\n\t\t\t\tisNavMode,\n\t\t\t\tblock.clientId\n\t\t\t);\n\n\t\t\tif ( updates.size ) {\n\t\t\t\tif ( ! nextDerivedBlockEditingModes ) {\n\t\t\t\t\tnextDerivedBlockEditingModes = new Map( [\n\t\t\t\t\t\t...( prevDerivedBlockEditingModes?.size\n\t\t\t\t\t\t\t? prevDerivedBlockEditingModes\n\t\t\t\t\t\t\t: [] ),\n\t\t\t\t\t\t...updates,\n\t\t\t\t\t] );\n\t\t\t\t} else {\n\t\t\t\t\tnextDerivedBlockEditingModes = new Map( [\n\t\t\t\t\t\t...( nextDerivedBlockEditingModes?.size\n\t\t\t\t\t\t\t? nextDerivedBlockEditingModes\n\t\t\t\t\t\t\t: [] ),\n\t\t\t\t\t\t...updates,\n\t\t\t\t\t] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t} );\n\n\treturn nextDerivedBlockEditingModes;\n}\n\n/**\n * Higher-order reducer that adds derived block editing modes to the state.\n *\n * This function wraps a reducer and enhances it to handle actions that affect\n * block editing modes. It updates the derivedBlockEditingModes in the state\n * based on various actions such as adding, removing, or moving blocks, or changing\n * the editor mode.\n *\n * @param {Function} reducer The original reducer function to be wrapped.\n * @return {Function} A new reducer function that includes derived block editing modes handling.\n */\nexport function withDerivedBlockEditingModes( reducer ) {\n\treturn ( state, action ) => {\n\t\tconst nextState = reducer( state, action );\n\n\t\t// An exception is needed here to still recompute the block editing modes when\n\t\t// the editor mode changes since the editor mode isn't stored within the\n\t\t// block editor state and changing it won't trigger an altered new state.\n\t\tif ( action.type !== 'SET_EDITOR_MODE' && nextState === state ) {\n\t\t\treturn state;\n\t\t}\n\n\t\tswitch ( action.type ) {\n\t\t\tcase 'REMOVE_BLOCKS': {\n\t\t\t\tconst nextDerivedBlockEditingModes =\n\t\t\t\t\tgetDerivedBlockEditingModesUpdates( {\n\t\t\t\t\t\tprevState: state,\n\t\t\t\t\t\tnextState,\n\t\t\t\t\t\tremovedClientIds: action.clientIds,\n\t\t\t\t\t\tisNavMode: false,\n\t\t\t\t\t} );\n\t\t\t\tconst nextDerivedNavModeBlockEditingModes =\n\t\t\t\t\tgetDerivedBlockEditingModesUpdates( {\n\t\t\t\t\t\tprevState: state,\n\t\t\t\t\t\tnextState,\n\t\t\t\t\t\tremovedClientIds: action.clientIds,\n\t\t\t\t\t\tisNavMode: true,\n\t\t\t\t\t} );\n\n\t\t\t\tif (\n\t\t\t\t\tnextDerivedBlockEditingModes ||\n\t\t\t\t\tnextDerivedNavModeBlockEditingModes\n\t\t\t\t) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...nextState,\n\t\t\t\t\t\tderivedBlockEditingModes:\n\t\t\t\t\t\t\tnextDerivedBlockEditingModes ??\n\t\t\t\t\t\t\tstate.derivedBlockEditingModes,\n\t\t\t\t\t\tderivedNavModeBlockEditingModes:\n\t\t\t\t\t\t\tnextDerivedNavModeBlockEditingModes ??\n\t\t\t\t\t\t\tstate.derivedNavModeBlockEditingModes,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'RECEIVE_BLOCKS':\n\t\t\tcase 'INSERT_BLOCKS': {\n\t\t\t\tconst nextDerivedBlockEditingModes =\n\t\t\t\t\tgetDerivedBlockEditingModesUpdates( {\n\t\t\t\t\t\tprevState: state,\n\t\t\t\t\t\tnextState,\n\t\t\t\t\t\taddedBlocks: action.blocks,\n\t\t\t\t\t\tisNavMode: false,\n\t\t\t\t\t} );\n\t\t\t\tconst nextDerivedNavModeBlockEditingModes =\n\t\t\t\t\tgetDerivedBlockEditingModesUpdates( {\n\t\t\t\t\t\tprevState: state,\n\t\t\t\t\t\tnextState,\n\t\t\t\t\t\taddedBlocks: action.blocks,\n\t\t\t\t\t\tisNavMode: true,\n\t\t\t\t\t} );\n\n\t\t\t\tif (\n\t\t\t\t\tnextDerivedBlockEditingModes ||\n\t\t\t\t\tnextDerivedNavModeBlockEditingModes\n\t\t\t\t) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...nextState,\n\t\t\t\t\t\tderivedBlockEditingModes:\n\t\t\t\t\t\t\tnextDerivedBlockEditingModes ??\n\t\t\t\t\t\t\tstate.derivedBlockEditingModes,\n\t\t\t\t\t\tderivedNavModeBlockEditingModes:\n\t\t\t\t\t\t\tnextDerivedNavModeBlockEditingModes ??\n\t\t\t\t\t\t\tstate.derivedNavModeBlockEditingModes,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'SET_BLOCK_EDITING_MODE':\n\t\t\tcase 'UNSET_BLOCK_EDITING_MODE':\n\t\t\tcase 'SET_HAS_CONTROLLED_INNER_BLOCKS': {\n\t\t\t\tconst updatedBlock = getBlockTreeBlock(\n\t\t\t\t\tnextState,\n\t\t\t\t\taction.clientId\n\t\t\t\t);\n\n\t\t\t\t// The block might have been removed in which case it'll be\n\t\t\t\t// handled by the `REMOVE_BLOCKS` action.\n\t\t\t\tif ( ! updatedBlock ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tconst nextDerivedBlockEditingModes =\n\t\t\t\t\tgetDerivedBlockEditingModesUpdates( {\n\t\t\t\t\t\tprevState: state,\n\t\t\t\t\t\tnextState,\n\t\t\t\t\t\tremovedClientIds: [ action.clientId ],\n\t\t\t\t\t\taddedBlocks: [ updatedBlock ],\n\t\t\t\t\t\tisNavMode: false,\n\t\t\t\t\t} );\n\t\t\t\tconst nextDerivedNavModeBlockEditingModes =\n\t\t\t\t\tgetDerivedBlockEditingModesUpdates( {\n\t\t\t\t\t\tprevState: state,\n\t\t\t\t\t\tnextState,\n\t\t\t\t\t\tremovedClientIds: [ action.clientId ],\n\t\t\t\t\t\taddedBlocks: [ updatedBlock ],\n\t\t\t\t\t\tisNavMode: true,\n\t\t\t\t\t} );\n\n\t\t\t\tif (\n\t\t\t\t\tnextDerivedBlockEditingModes ||\n\t\t\t\t\tnextDerivedNavModeBlockEditingModes\n\t\t\t\t) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...nextState,\n\t\t\t\t\t\tderivedBlockEditingModes:\n\t\t\t\t\t\t\tnextDerivedBlockEditingModes ??\n\t\t\t\t\t\t\tstate.derivedBlockEditingModes,\n\t\t\t\t\t\tderivedNavModeBlockEditingModes:\n\t\t\t\t\t\t\tnextDerivedNavModeBlockEditingModes ??\n\t\t\t\t\t\t\tstate.derivedNavModeBlockEditingModes,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'REPLACE_BLOCKS': {\n\t\t\t\tconst nextDerivedBlockEditingModes =\n\t\t\t\t\tgetDerivedBlockEditingModesUpdates( {\n\t\t\t\t\t\tprevState: state,\n\t\t\t\t\t\tnextState,\n\t\t\t\t\t\taddedBlocks: action.blocks,\n\t\t\t\t\t\tremovedClientIds: action.clientIds,\n\t\t\t\t\t\tisNavMode: false,\n\t\t\t\t\t} );\n\t\t\t\tconst nextDerivedNavModeBlockEditingModes =\n\t\t\t\t\tgetDerivedBlockEditingModesUpdates( {\n\t\t\t\t\t\tprevState: state,\n\t\t\t\t\t\tnextState,\n\t\t\t\t\t\taddedBlocks: action.blocks,\n\t\t\t\t\t\tremovedClientIds: action.clientIds,\n\t\t\t\t\t\tisNavMode: true,\n\t\t\t\t\t} );\n\n\t\t\t\tif (\n\t\t\t\t\tnextDerivedBlockEditingModes ||\n\t\t\t\t\tnextDerivedNavModeBlockEditingModes\n\t\t\t\t) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...nextState,\n\t\t\t\t\t\tderivedBlockEditingModes:\n\t\t\t\t\t\t\tnextDerivedBlockEditingModes ??\n\t\t\t\t\t\t\tstate.derivedBlockEditingModes,\n\t\t\t\t\t\tderivedNavModeBlockEditingModes:\n\t\t\t\t\t\t\tnextDerivedNavModeBlockEditingModes ??\n\t\t\t\t\t\t\tstate.derivedNavModeBlockEditingModes,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'REPLACE_INNER_BLOCKS': {\n\t\t\t\t// Get the clientIds of the blocks that are being replaced\n\t\t\t\t// from the old state, before they were removed.\n\t\t\t\tconst removedClientIds = state.blocks.order.get(\n\t\t\t\t\taction.rootClientId\n\t\t\t\t);\n\t\t\t\tconst nextDerivedBlockEditingModes =\n\t\t\t\t\tgetDerivedBlockEditingModesUpdates( {\n\t\t\t\t\t\tprevState: state,\n\t\t\t\t\t\tnextState,\n\t\t\t\t\t\taddedBlocks: action.blocks,\n\t\t\t\t\t\tremovedClientIds,\n\t\t\t\t\t\tisNavMode: false,\n\t\t\t\t\t} );\n\t\t\t\tconst nextDerivedNavModeBlockEditingModes =\n\t\t\t\t\tgetDerivedBlockEditingModesUpdates( {\n\t\t\t\t\t\tprevState: state,\n\t\t\t\t\t\tnextState,\n\t\t\t\t\t\taddedBlocks: action.blocks,\n\t\t\t\t\t\tremovedClientIds,\n\t\t\t\t\t\tisNavMode: true,\n\t\t\t\t\t} );\n\n\t\t\t\tif (\n\t\t\t\t\tnextDerivedBlockEditingModes ||\n\t\t\t\t\tnextDerivedNavModeBlockEditingModes\n\t\t\t\t) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...nextState,\n\t\t\t\t\t\tderivedBlockEditingModes:\n\t\t\t\t\t\t\tnextDerivedBlockEditingModes ??\n\t\t\t\t\t\t\tstate.derivedBlockEditingModes,\n\t\t\t\t\t\tderivedNavModeBlockEditingModes:\n\t\t\t\t\t\t\tnextDerivedNavModeBlockEditingModes ??\n\t\t\t\t\t\t\tstate.derivedNavModeBlockEditingModes,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'MOVE_BLOCKS_TO_POSITION': {\n\t\t\t\tconst addedBlocks = action.clientIds.map( ( clientId ) => {\n\t\t\t\t\treturn nextState.blocks.byClientId.get( clientId );\n\t\t\t\t} );\n\t\t\t\tconst nextDerivedBlockEditingModes =\n\t\t\t\t\tgetDerivedBlockEditingModesUpdates( {\n\t\t\t\t\t\tprevState: state,\n\t\t\t\t\t\tnextState,\n\t\t\t\t\t\taddedBlocks,\n\t\t\t\t\t\tremovedClientIds: action.clientIds,\n\t\t\t\t\t\tisNavMode: false,\n\t\t\t\t\t} );\n\t\t\t\tconst nextDerivedNavModeBlockEditingModes =\n\t\t\t\t\tgetDerivedBlockEditingModesUpdates( {\n\t\t\t\t\t\tprevState: state,\n\t\t\t\t\t\tnextState,\n\t\t\t\t\t\taddedBlocks,\n\t\t\t\t\t\tremovedClientIds: action.clientIds,\n\t\t\t\t\t\tisNavMode: true,\n\t\t\t\t\t} );\n\n\t\t\t\tif (\n\t\t\t\t\tnextDerivedBlockEditingModes ||\n\t\t\t\t\tnextDerivedNavModeBlockEditingModes\n\t\t\t\t) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...nextState,\n\t\t\t\t\t\tderivedBlockEditingModes:\n\t\t\t\t\t\t\tnextDerivedBlockEditingModes ??\n\t\t\t\t\t\t\tstate.derivedBlockEditingModes,\n\t\t\t\t\t\tderivedNavModeBlockEditingModes:\n\t\t\t\t\t\t\tnextDerivedNavModeBlockEditingModes ??\n\t\t\t\t\t\t\tstate.derivedNavModeBlockEditingModes,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'UPDATE_SETTINGS': {\n\t\t\t\t// Recompute the entire tree if the section root changes.\n\t\t\t\tif (\n\t\t\t\t\tstate?.settings?.[ sectionRootClientIdKey ] !==\n\t\t\t\t\tnextState?.settings?.[ sectionRootClientIdKey ]\n\t\t\t\t) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...nextState,\n\t\t\t\t\t\tderivedBlockEditingModes:\n\t\t\t\t\t\t\tgetDerivedBlockEditingModesForTree(\n\t\t\t\t\t\t\t\tnextState,\n\t\t\t\t\t\t\t\tfalse /* Nav mode off */\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\tderivedNavModeBlockEditingModes:\n\t\t\t\t\t\t\tgetDerivedBlockEditingModesForTree(\n\t\t\t\t\t\t\t\tnextState,\n\t\t\t\t\t\t\t\ttrue /* Nav mode on */\n\t\t\t\t\t\t\t),\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'RESET_BLOCKS':\n\t\t\tcase 'SET_EDITOR_MODE':\n\t\t\tcase 'RESET_ZOOM_LEVEL':\n\t\t\tcase 'SET_ZOOM_LEVEL': {\n\t\t\t\t// Recompute the entire tree if the editor mode or zoom level changes,\n\t\t\t\t// or if all the blocks are reset.\n\t\t\t\treturn {\n\t\t\t\t\t...nextState,\n\t\t\t\t\tderivedBlockEditingModes:\n\t\t\t\t\t\tgetDerivedBlockEditingModesForTree(\n\t\t\t\t\t\t\tnextState,\n\t\t\t\t\t\t\tfalse /* Nav mode off */\n\t\t\t\t\t\t),\n\t\t\t\t\tderivedNavModeBlockEditingModes:\n\t\t\t\t\t\tgetDerivedBlockEditingModesForTree(\n\t\t\t\t\t\t\tnextState,\n\t\t\t\t\t\t\ttrue /* Nav mode on */\n\t\t\t\t\t\t),\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\t// If there's no change, the derivedBlockEditingModes from the previous\n\t\t// state need to be preserved.\n\t\tnextState.derivedBlockEditingModes =\n\t\t\tstate?.derivedBlockEditingModes ?? new Map();\n\t\tnextState.derivedNavModeBlockEditingModes =\n\t\t\tstate?.derivedNavModeBlockEditingModes ?? new Map();\n\n\t\treturn nextState;\n\t};\n}\n\nfunction withAutomaticChangeReset( reducer ) {\n\treturn ( state, action ) => {\n\t\tconst nextState = reducer( state, action );\n\n\t\tif ( ! state ) {\n\t\t\treturn nextState;\n\t\t}\n\n\t\t// Take over the last value without creating a new reference.\n\t\tnextState.automaticChangeStatus = state.automaticChangeStatus;\n\n\t\tif ( action.type === 'MARK_AUTOMATIC_CHANGE' ) {\n\t\t\treturn {\n\t\t\t\t...nextState,\n\t\t\t\tautomaticChangeStatus: 'pending',\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\taction.type === 'MARK_AUTOMATIC_CHANGE_FINAL' &&\n\t\t\tstate.automaticChangeStatus === 'pending'\n\t\t) {\n\t\t\treturn {\n\t\t\t\t...nextState,\n\t\t\t\tautomaticChangeStatus: 'final',\n\t\t\t};\n\t\t}\n\n\t\t// If there's a change that doesn't affect blocks or selection, maintain\n\t\t// the current status.\n\t\tif (\n\t\t\tnextState.blocks === state.blocks &&\n\t\t\tnextState.selection === state.selection\n\t\t) {\n\t\t\treturn nextState;\n\t\t}\n\n\t\t// As long as the state is not final, ignore any selection changes.\n\t\tif (\n\t\t\tnextState.automaticChangeStatus !== 'final' &&\n\t\t\tnextState.selection !== state.selection\n\t\t) {\n\t\t\treturn nextState;\n\t\t}\n\n\t\t// Reset the status if blocks change or selection changes (when status is final).\n\t\treturn {\n\t\t\t...nextState,\n\t\t\tautomaticChangeStatus: undefined,\n\t\t};\n\t};\n}\n\nexport default pipe(\n\twithDerivedBlockEditingModes,\n\twithAutomaticChangeReset\n)( combinedReducers );\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_es","_interopRequireDefault","require","_compose","_data","_deprecated","_blocks","_defaults","_array","_privateKeys","_lockUnlock","isContentBlock","unlock","blocksPrivateApis","identity","x","mapBlockOrder","blocks","rootClientId","result","Map","current","set","forEach","block","clientId","innerBlocks","push","order","subClientId","mapBlockParents","stack","length","parent","currentBlocks","shift","flattenBlocks","transform","getFlattenedClientIds","getFlattenedBlocksWithoutAttributes","attributes","restBlock","getFlattenedBlockAttributes","hasSameKeys","a","b","fastDeepEqual","Object","keys","isUpdatingSameBlockAttribute","action","lastAction","type","undefined","clientIds","updateBlockTreeForBlocks","state","treeToUpdate","tree","flattenedBlocks","assign","get","byClientId","map","subBlock","updateParentInnerBlocksInTree","updatedClientIds","updateChildrenOfUpdatedClientIds","uncontrolledParents","Set","controlledParents","parents","controlledInnerBlocks","add","withBlockTree","reducer","newState","inserterClientIds","replacedClientIds","delete","parentsOfRemovedBlocks","parentId","removedClientIds","updatedBlockUids","fromRootClientId","toRootClientId","name","ref","updatedId","withPersistentBlockChange","markNextChangeAsNotPersistent","explicitPersistent","nextState","nextIsPersistentChange","_state$isPersistentCh","isPersistentChange","isExplicitPersistentChange","_state$isPersistentCh2","withIgnoredBlockChange","IGNORED_ACTION_TYPES","isIgnoredChange","has","withInnerBlocksRemoveCascade","getAllChildren","i","keepControlledInnerBlocks","withBlockReset","withReplaceInnerBlocks","nestedControllers","stateAfterBlocksRemoval","stateAfterInsert","index","stateAfterInsertOrder","key","_key","withSaveReusableBlock","id","withResetControlledBlocks","tempState","exports","pipe","combineReducers","value","changes","updates","values","every","hasChange","_action$attributes","updatedAttributeEntries","entries","options","uniqueByBlock","hasUpdatedAttributes","existingAttributes","newAttributes","_state$get","blockOrder","concat","subState","mappedBlocks","insertAt","_state$get$filter","fromIndex","indexOf","moveTo","filter","includes","firstClientId","firstIndex","lastClientId","newSubOrder","reduce","_order$filter","hasControlledInnerBlocks","isBlockInterfaceHidden","isTyping","isDragging","draggedBlocks","blockVisibility","selectionHelper","updateSelection","blockToSelect","indexToSelect","selection","selectionStart","attributeKey","offset","startOffset","selectionEnd","endOffset","start","end","startClientId","endClientId","some","isMultiSelecting","isSelectionEnabled","removalPromptData","selectPrevious","message","blockRemovalRules","rules","initialPosition","blocksMode","insertionCue","__unstableWithInserter","operation","nearestSide","template","isValid","settings","SETTINGS_DEFAULTS","updatedSettings","reset","defineProperty","deprecated","since","alternative","isPreviewMode","preferences","PREFERENCES_DEFAULTS","nextInsertUsage","prevUsage","blockName","match","select","blocksStore","getActiveBlockVariation","time","count","insertUsage","blockListSettings","fromEntries","merged","lastBlockAttributesChange","accumulator","highlightedBlock","isHighlighted","expandedBlock","lastBlockInserted","source","meta","temporarilyEditingAsBlocks","temporarilyEditingFocusModeRevert","focusModeToRevert","blockEditingModes","mode","openedBlockSettingsMenu","_action$clientId","styleOverrides","style","registeredInserterMediaCategories","category","lastFocus","zoomLevel","zoom","insertionPoint","combinedReducers","getBlockTreeBlock","rootBlock","controlledTree","regularTree","traverseBlockTree","callback","innerBlock","findParentInClientIdsList","hasBindings","metadata","bindings","getDerivedBlockEditingModesForTree","isNavMode","treeClientId","isZoomedOut","derivedBlockEditingModes","sectionRootClientId","sectionRootClientIdKey","sectionClientIds","hasDisabledBlocks","Array","from","templatePartClientIds","syncedPatternClientIds","contentOnlyTemplateLockedClientIds","templateLock","unsyncedPatternClientIds","window","__experimentalContentOnlyPatternInsertion","patternName","contentOnlyParents","ancestorBlockEditingMode","isInSection","isInTemplatePart","parentPatternClientId","hasContentOnlyParent","getDerivedBlockEditingModesUpdates","prevState","addedBlocks","prevDerivedBlockEditingModes","derivedNavModeBlockEditingModes","nextDerivedBlockEditingModes","addedBlock","size","withDerivedBlockEditingModes","_state$derivedBlockEd","_state$derivedNavMode","nextDerivedNavModeBlockEditingModes","isNewContentOnlyBlock","wasContentOnlyBlock","updatedBlock","withAutomaticChangeReset","automaticChangeStatus","_default","default"],"sources":["@wordpress/block-editor/src/store/reducer.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport fastDeepEqual from 'fast-deep-equal/es6';\n\n/**\n * WordPress dependencies\n */\nimport { pipe } from '@wordpress/compose';\nimport { combineReducers, select } from '@wordpress/data';\nimport deprecated from '@wordpress/deprecated';\nimport {\n\tstore as blocksStore,\n\tprivateApis as blocksPrivateApis,\n} from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport { PREFERENCES_DEFAULTS, SETTINGS_DEFAULTS } from './defaults';\nimport { insertAt, moveTo } from './array';\nimport { sectionRootClientIdKey } from './private-keys';\nimport { unlock } from '../lock-unlock';\n\nconst { isContentBlock } = unlock( blocksPrivateApis );\n\nconst identity = ( x ) => x;\n\n/**\n * Given an array of blocks, returns an object where each key is a nesting\n * context, the value of which is an array of block client IDs existing within\n * that nesting context.\n *\n * @param {Array} blocks Blocks to map.\n * @param {?string} rootClientId Assumed root client ID.\n *\n * @return {Object} Block order map object.\n */\nfunction mapBlockOrder( blocks, rootClientId = '' ) {\n\tconst result = new Map();\n\tconst current = [];\n\tresult.set( rootClientId, current );\n\tblocks.forEach( ( block ) => {\n\t\tconst { clientId, innerBlocks } = block;\n\t\tcurrent.push( clientId );\n\t\tmapBlockOrder( innerBlocks, clientId ).forEach(\n\t\t\t( order, subClientId ) => {\n\t\t\t\tresult.set( subClientId, order );\n\t\t\t}\n\t\t);\n\t} );\n\treturn result;\n}\n\n/**\n * Given an array of blocks, returns an object where each key contains\n * the clientId of the block and the value is the parent of the block.\n *\n * @param {Array} blocks Blocks to map.\n * @param {?string} rootClientId Assumed root client ID.\n *\n * @return {Object} Block order map object.\n */\nfunction mapBlockParents( blocks, rootClientId = '' ) {\n\tconst result = [];\n\tconst stack = [ [ rootClientId, blocks ] ];\n\twhile ( stack.length ) {\n\t\tconst [ parent, currentBlocks ] = stack.shift();\n\t\tcurrentBlocks.forEach( ( { innerBlocks, ...block } ) => {\n\t\t\tresult.push( [ block.clientId, parent ] );\n\t\t\tif ( innerBlocks?.length ) {\n\t\t\t\tstack.push( [ block.clientId, innerBlocks ] );\n\t\t\t}\n\t\t} );\n\t}\n\treturn result;\n}\n\n/**\n * Helper method to iterate through all blocks, recursing into inner blocks,\n * applying a transformation function to each one.\n * Returns a flattened object with the transformed blocks.\n *\n * @param {Array} blocks Blocks to flatten.\n * @param {Function} transform Transforming function to be applied to each block.\n *\n * @return {Array} Flattened object.\n */\nfunction flattenBlocks( blocks, transform = identity ) {\n\tconst result = [];\n\n\tconst stack = [ ...blocks ];\n\twhile ( stack.length ) {\n\t\tconst { innerBlocks, ...block } = stack.shift();\n\t\tstack.push( ...innerBlocks );\n\t\tresult.push( [ block.clientId, transform( block ) ] );\n\t}\n\n\treturn result;\n}\n\nfunction getFlattenedClientIds( blocks ) {\n\tconst result = {};\n\tconst stack = [ ...blocks ];\n\twhile ( stack.length ) {\n\t\tconst { innerBlocks, ...block } = stack.shift();\n\t\tstack.push( ...innerBlocks );\n\t\tresult[ block.clientId ] = true;\n\t}\n\n\treturn result;\n}\n\n/**\n * Given an array of blocks, returns an object containing all blocks, without\n * attributes, recursing into inner blocks. Keys correspond to the block client\n * ID, the value of which is the attributes object.\n *\n * @param {Array} blocks Blocks to flatten.\n *\n * @return {Array} Flattened block attributes object.\n */\nfunction getFlattenedBlocksWithoutAttributes( blocks ) {\n\treturn flattenBlocks( blocks, ( block ) => {\n\t\tconst { attributes, ...restBlock } = block;\n\t\treturn restBlock;\n\t} );\n}\n\n/**\n * Given an array of blocks, returns an object containing all block attributes,\n * recursing into inner blocks. Keys correspond to the block client ID, the\n * value of which is the attributes object.\n *\n * @param {Array} blocks Blocks to flatten.\n *\n * @return {Array} Flattened block attributes object.\n */\nfunction getFlattenedBlockAttributes( blocks ) {\n\treturn flattenBlocks( blocks, ( block ) => block.attributes );\n}\n\n/**\n * Returns true if the two object arguments have the same keys, or false\n * otherwise.\n *\n * @param {Object} a First object.\n * @param {Object} b Second object.\n *\n * @return {boolean} Whether the two objects have the same keys.\n */\nexport function hasSameKeys( a, b ) {\n\treturn fastDeepEqual( Object.keys( a ), Object.keys( b ) );\n}\n\n/**\n * Returns true if, given the currently dispatching action and the previously\n * dispatched action, the two actions are updating the same block attribute, or\n * false otherwise.\n *\n * @param {Object} action Currently dispatching action.\n * @param {Object} lastAction Previously dispatched action.\n *\n * @return {boolean} Whether actions are updating the same block attribute.\n */\nexport function isUpdatingSameBlockAttribute( action, lastAction ) {\n\treturn (\n\t\taction.type === 'UPDATE_BLOCK_ATTRIBUTES' &&\n\t\tlastAction !== undefined &&\n\t\tlastAction.type === 'UPDATE_BLOCK_ATTRIBUTES' &&\n\t\tfastDeepEqual( action.clientIds, lastAction.clientIds ) &&\n\t\thasSameKeys( action.attributes, lastAction.attributes )\n\t);\n}\n\nfunction updateBlockTreeForBlocks( state, blocks ) {\n\tconst treeToUpdate = state.tree;\n\tconst stack = [ ...blocks ];\n\tconst flattenedBlocks = [ ...blocks ];\n\twhile ( stack.length ) {\n\t\tconst block = stack.shift();\n\t\tstack.push( ...block.innerBlocks );\n\t\tflattenedBlocks.push( ...block.innerBlocks );\n\t}\n\t// Create objects before mutating them, that way it's always defined.\n\tfor ( const block of flattenedBlocks ) {\n\t\ttreeToUpdate.set( block.clientId, {} );\n\t}\n\tfor ( const block of flattenedBlocks ) {\n\t\ttreeToUpdate.set(\n\t\t\tblock.clientId,\n\t\t\tObject.assign( treeToUpdate.get( block.clientId ), {\n\t\t\t\t...state.byClientId.get( block.clientId ),\n\t\t\t\tattributes: state.attributes.get( block.clientId ),\n\t\t\t\tinnerBlocks: block.innerBlocks.map( ( subBlock ) =>\n\t\t\t\t\ttreeToUpdate.get( subBlock.clientId )\n\t\t\t\t),\n\t\t\t} )\n\t\t);\n\t}\n}\n\nfunction updateParentInnerBlocksInTree(\n\tstate,\n\tupdatedClientIds,\n\tupdateChildrenOfUpdatedClientIds = false\n) {\n\tconst treeToUpdate = state.tree;\n\tconst uncontrolledParents = new Set( [] );\n\tconst controlledParents = new Set();\n\tfor ( const clientId of updatedClientIds ) {\n\t\tlet current = updateChildrenOfUpdatedClientIds\n\t\t\t? clientId\n\t\t\t: state.parents.get( clientId );\n\t\tdo {\n\t\t\tif ( state.controlledInnerBlocks[ current ] ) {\n\t\t\t\t// Should stop on controlled blocks.\n\t\t\t\t// If we reach a controlled parent, break out of the loop.\n\t\t\t\tcontrolledParents.add( current );\n\t\t\t\tbreak;\n\t\t\t} else {\n\t\t\t\t// Else continue traversing up through parents.\n\t\t\t\tuncontrolledParents.add( current );\n\t\t\t\tcurrent = state.parents.get( current );\n\t\t\t}\n\t\t} while ( current !== undefined );\n\t}\n\n\t// To make sure the order of assignments doesn't matter,\n\t// we first create empty objects and mutates the inner blocks later.\n\tfor ( const clientId of uncontrolledParents ) {\n\t\ttreeToUpdate.set( clientId, { ...treeToUpdate.get( clientId ) } );\n\t}\n\tfor ( const clientId of uncontrolledParents ) {\n\t\ttreeToUpdate.get( clientId ).innerBlocks = (\n\t\t\tstate.order.get( clientId ) || []\n\t\t).map( ( subClientId ) => treeToUpdate.get( subClientId ) );\n\t}\n\n\t// Controlled parent blocks, need a dedicated key for their inner blocks\n\t// to be used when doing getBlocks( controlledBlockClientId ).\n\tfor ( const clientId of controlledParents ) {\n\t\ttreeToUpdate.set( 'controlled||' + clientId, {\n\t\t\tinnerBlocks: ( state.order.get( clientId ) || [] ).map(\n\t\t\t\t( subClientId ) => treeToUpdate.get( subClientId )\n\t\t\t),\n\t\t} );\n\t}\n}\n\n/**\n * Higher-order reducer intended to compute full block objects key for each block in the post.\n * This is a denormalization to optimize the performance of the getBlock selectors and avoid\n * recomputing the block objects and avoid heavy memoization.\n *\n * @param {Function} reducer Original reducer function.\n *\n * @return {Function} Enhanced reducer function.\n */\nconst withBlockTree =\n\t( reducer ) =>\n\t( state = {}, action ) => {\n\t\tconst newState = reducer( state, action );\n\n\t\tif ( newState === state ) {\n\t\t\treturn state;\n\t\t}\n\n\t\tnewState.tree = state.tree ? state.tree : new Map();\n\t\tswitch ( action.type ) {\n\t\t\tcase 'RECEIVE_BLOCKS':\n\t\t\tcase 'INSERT_BLOCKS': {\n\t\t\t\tnewState.tree = new Map( newState.tree );\n\t\t\t\tupdateBlockTreeForBlocks( newState, action.blocks );\n\t\t\t\tupdateParentInnerBlocksInTree(\n\t\t\t\t\tnewState,\n\t\t\t\t\taction.rootClientId ? [ action.rootClientId ] : [ '' ],\n\t\t\t\t\ttrue\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'UPDATE_BLOCK':\n\t\t\t\tnewState.tree = new Map( newState.tree );\n\t\t\t\tnewState.tree.set( action.clientId, {\n\t\t\t\t\t...newState.tree.get( action.clientId ),\n\t\t\t\t\t...newState.byClientId.get( action.clientId ),\n\t\t\t\t\tattributes: newState.attributes.get( action.clientId ),\n\t\t\t\t} );\n\t\t\t\tupdateParentInnerBlocksInTree(\n\t\t\t\t\tnewState,\n\t\t\t\t\t[ action.clientId ],\n\t\t\t\t\tfalse\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase 'SYNC_DERIVED_BLOCK_ATTRIBUTES':\n\t\t\tcase 'UPDATE_BLOCK_ATTRIBUTES': {\n\t\t\t\tnewState.tree = new Map( newState.tree );\n\t\t\t\taction.clientIds.forEach( ( clientId ) => {\n\t\t\t\t\tnewState.tree.set( clientId, {\n\t\t\t\t\t\t...newState.tree.get( clientId ),\n\t\t\t\t\t\tattributes: newState.attributes.get( clientId ),\n\t\t\t\t\t} );\n\t\t\t\t} );\n\t\t\t\tupdateParentInnerBlocksInTree(\n\t\t\t\t\tnewState,\n\t\t\t\t\taction.clientIds,\n\t\t\t\t\tfalse\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'REPLACE_BLOCKS_AUGMENTED_WITH_CHILDREN': {\n\t\t\t\tconst inserterClientIds = getFlattenedClientIds(\n\t\t\t\t\taction.blocks\n\t\t\t\t);\n\t\t\t\tnewState.tree = new Map( newState.tree );\n\t\t\t\taction.replacedClientIds.forEach( ( clientId ) => {\n\t\t\t\t\tnewState.tree.delete( clientId );\n\t\t\t\t\t// Controlled inner blocks are only removed\n\t\t\t\t\t// if the block doesn't move to another position\n\t\t\t\t\t// otherwise their content will be lost.\n\t\t\t\t\tif ( ! inserterClientIds[ clientId ] ) {\n\t\t\t\t\t\tnewState.tree.delete( 'controlled||' + clientId );\n\t\t\t\t\t}\n\t\t\t\t} );\n\n\t\t\t\tupdateBlockTreeForBlocks( newState, action.blocks );\n\t\t\t\tupdateParentInnerBlocksInTree(\n\t\t\t\t\tnewState,\n\t\t\t\t\taction.blocks.map( ( b ) => b.clientId ),\n\t\t\t\t\tfalse\n\t\t\t\t);\n\n\t\t\t\t// If there are no replaced blocks, it means we're removing blocks so we need to update their parent.\n\t\t\t\tconst parentsOfRemovedBlocks = [];\n\t\t\t\tfor ( const clientId of action.clientIds ) {\n\t\t\t\t\tconst parentId = state.parents.get( clientId );\n\t\t\t\t\tif (\n\t\t\t\t\t\tparentId !== undefined &&\n\t\t\t\t\t\t( parentId === '' ||\n\t\t\t\t\t\t\tnewState.byClientId.get( parentId ) )\n\t\t\t\t\t) {\n\t\t\t\t\t\tparentsOfRemovedBlocks.push( parentId );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tupdateParentInnerBlocksInTree(\n\t\t\t\t\tnewState,\n\t\t\t\t\tparentsOfRemovedBlocks,\n\t\t\t\t\ttrue\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'REMOVE_BLOCKS_AUGMENTED_WITH_CHILDREN':\n\t\t\t\tconst parentsOfRemovedBlocks = [];\n\t\t\t\tfor ( const clientId of action.clientIds ) {\n\t\t\t\t\tconst parentId = state.parents.get( clientId );\n\t\t\t\t\tif (\n\t\t\t\t\t\tparentId !== undefined &&\n\t\t\t\t\t\t( parentId === '' ||\n\t\t\t\t\t\t\tnewState.byClientId.get( parentId ) )\n\t\t\t\t\t) {\n\t\t\t\t\t\tparentsOfRemovedBlocks.push( parentId );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tnewState.tree = new Map( newState.tree );\n\t\t\t\taction.removedClientIds.forEach( ( clientId ) => {\n\t\t\t\t\tnewState.tree.delete( clientId );\n\t\t\t\t\tnewState.tree.delete( 'controlled||' + clientId );\n\t\t\t\t} );\n\t\t\t\tupdateParentInnerBlocksInTree(\n\t\t\t\t\tnewState,\n\t\t\t\t\tparentsOfRemovedBlocks,\n\t\t\t\t\ttrue\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase 'MOVE_BLOCKS_TO_POSITION': {\n\t\t\t\tconst updatedBlockUids = [];\n\t\t\t\tif ( action.fromRootClientId ) {\n\t\t\t\t\tupdatedBlockUids.push( action.fromRootClientId );\n\t\t\t\t} else {\n\t\t\t\t\tupdatedBlockUids.push( '' );\n\t\t\t\t}\n\t\t\t\tif ( action.toRootClientId ) {\n\t\t\t\t\tupdatedBlockUids.push( action.toRootClientId );\n\t\t\t\t}\n\t\t\t\tnewState.tree = new Map( newState.tree );\n\t\t\t\tupdateParentInnerBlocksInTree(\n\t\t\t\t\tnewState,\n\t\t\t\t\tupdatedBlockUids,\n\t\t\t\t\ttrue\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'MOVE_BLOCKS_UP':\n\t\t\tcase 'MOVE_BLOCKS_DOWN': {\n\t\t\t\tconst updatedBlockUids = [\n\t\t\t\t\taction.rootClientId ? action.rootClientId : '',\n\t\t\t\t];\n\t\t\t\tnewState.tree = new Map( newState.tree );\n\t\t\t\tupdateParentInnerBlocksInTree(\n\t\t\t\t\tnewState,\n\t\t\t\t\tupdatedBlockUids,\n\t\t\t\t\ttrue\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'SAVE_REUSABLE_BLOCK_SUCCESS': {\n\t\t\t\tconst updatedBlockUids = [];\n\t\t\t\tnewState.attributes.forEach( ( attributes, clientId ) => {\n\t\t\t\t\tif (\n\t\t\t\t\t\tnewState.byClientId.get( clientId ).name ===\n\t\t\t\t\t\t\t'core/block' &&\n\t\t\t\t\t\tattributes.ref === action.updatedId\n\t\t\t\t\t) {\n\t\t\t\t\t\tupdatedBlockUids.push( clientId );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\tnewState.tree = new Map( newState.tree );\n\t\t\t\tupdatedBlockUids.forEach( ( clientId ) => {\n\t\t\t\t\tnewState.tree.set( clientId, {\n\t\t\t\t\t\t...newState.byClientId.get( clientId ),\n\t\t\t\t\t\tattributes: newState.attributes.get( clientId ),\n\t\t\t\t\t\tinnerBlocks: newState.tree.get( clientId ).innerBlocks,\n\t\t\t\t\t} );\n\t\t\t\t} );\n\t\t\t\tupdateParentInnerBlocksInTree(\n\t\t\t\t\tnewState,\n\t\t\t\t\tupdatedBlockUids,\n\t\t\t\t\tfalse\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\treturn newState;\n\t};\n\n/**\n * Higher-order reducer intended to augment the blocks reducer, assigning an\n * `isPersistentChange` property value corresponding to whether a change in\n * state can be considered as persistent. All changes are considered persistent\n * except when updating the same block attribute as in the previous action.\n *\n * @param {Function} reducer Original reducer function.\n *\n * @return {Function} Enhanced reducer function.\n */\nfunction withPersistentBlockChange( reducer ) {\n\tlet lastAction;\n\tlet markNextChangeAsNotPersistent = false;\n\tlet explicitPersistent;\n\n\treturn ( state, action ) => {\n\t\tlet nextState = reducer( state, action );\n\n\t\tlet nextIsPersistentChange;\n\t\tif ( action.type === 'SET_EXPLICIT_PERSISTENT' ) {\n\t\t\texplicitPersistent = action.isPersistentChange;\n\t\t\tnextIsPersistentChange = state.isPersistentChange ?? true;\n\t\t}\n\n\t\tif ( explicitPersistent !== undefined ) {\n\t\t\tnextIsPersistentChange = explicitPersistent;\n\t\t\treturn nextIsPersistentChange === nextState.isPersistentChange\n\t\t\t\t? nextState\n\t\t\t\t: {\n\t\t\t\t\t\t...nextState,\n\t\t\t\t\t\tisPersistentChange: nextIsPersistentChange,\n\t\t\t\t };\n\t\t}\n\n\t\tconst isExplicitPersistentChange =\n\t\t\taction.type === 'MARK_LAST_CHANGE_AS_PERSISTENT' ||\n\t\t\tmarkNextChangeAsNotPersistent;\n\n\t\t// Defer to previous state value (or default) unless changing or\n\t\t// explicitly marking as persistent.\n\t\tif ( state === nextState && ! isExplicitPersistentChange ) {\n\t\t\tmarkNextChangeAsNotPersistent =\n\t\t\t\taction.type === 'MARK_NEXT_CHANGE_AS_NOT_PERSISTENT';\n\n\t\t\tnextIsPersistentChange = state?.isPersistentChange ?? true;\n\t\t\tif ( state.isPersistentChange === nextIsPersistentChange ) {\n\t\t\t\treturn state;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\t...nextState,\n\t\t\t\tisPersistentChange: nextIsPersistentChange,\n\t\t\t};\n\t\t}\n\n\t\tnextState = {\n\t\t\t...nextState,\n\t\t\tisPersistentChange: isExplicitPersistentChange\n\t\t\t\t? ! markNextChangeAsNotPersistent\n\t\t\t\t: ! isUpdatingSameBlockAttribute( action, lastAction ),\n\t\t};\n\n\t\t// In comparing against the previous action, consider only those which\n\t\t// would have qualified as one which would have been ignored or not\n\t\t// have resulted in a changed state.\n\t\tlastAction = action;\n\t\tmarkNextChangeAsNotPersistent =\n\t\t\taction.type === 'MARK_NEXT_CHANGE_AS_NOT_PERSISTENT';\n\n\t\treturn nextState;\n\t};\n}\n\n/**\n * Higher-order reducer intended to augment the blocks reducer, assigning an\n * `isIgnoredChange` property value corresponding to whether a change in state\n * can be considered as ignored. A change is considered ignored when the result\n * of an action not incurred by direct user interaction.\n *\n * @param {Function} reducer Original reducer function.\n *\n * @return {Function} Enhanced reducer function.\n */\nfunction withIgnoredBlockChange( reducer ) {\n\t/**\n\t * Set of action types for which a blocks state change should be ignored.\n\t *\n\t * @type {Set}\n\t */\n\tconst IGNORED_ACTION_TYPES = new Set( [ 'RECEIVE_BLOCKS' ] );\n\n\treturn ( state, action ) => {\n\t\tconst nextState = reducer( state, action );\n\n\t\tif ( nextState !== state ) {\n\t\t\tnextState.isIgnoredChange = IGNORED_ACTION_TYPES.has( action.type );\n\t\t}\n\n\t\treturn nextState;\n\t};\n}\n\n/**\n * Higher-order reducer targeting the combined blocks reducer, augmenting\n * block client IDs in remove action to include cascade of inner blocks.\n *\n * @param {Function} reducer Original reducer function.\n *\n * @return {Function} Enhanced reducer function.\n */\nconst withInnerBlocksRemoveCascade = ( reducer ) => ( state, action ) => {\n\t// Gets all children which need to be removed.\n\tconst getAllChildren = ( clientIds ) => {\n\t\tlet result = clientIds;\n\t\tfor ( let i = 0; i < result.length; i++ ) {\n\t\t\tif (\n\t\t\t\t! state.order.get( result[ i ] ) ||\n\t\t\t\t( action.keepControlledInnerBlocks &&\n\t\t\t\t\taction.keepControlledInnerBlocks[ result[ i ] ] )\n\t\t\t) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif ( result === clientIds ) {\n\t\t\t\tresult = [ ...result ];\n\t\t\t}\n\n\t\t\tresult.push( ...state.order.get( result[ i ] ) );\n\t\t}\n\t\treturn result;\n\t};\n\n\tif ( state ) {\n\t\tswitch ( action.type ) {\n\t\t\tcase 'REMOVE_BLOCKS':\n\t\t\t\taction = {\n\t\t\t\t\t...action,\n\t\t\t\t\ttype: 'REMOVE_BLOCKS_AUGMENTED_WITH_CHILDREN',\n\t\t\t\t\tremovedClientIds: getAllChildren( action.clientIds ),\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tcase 'REPLACE_BLOCKS':\n\t\t\t\taction = {\n\t\t\t\t\t...action,\n\t\t\t\t\ttype: 'REPLACE_BLOCKS_AUGMENTED_WITH_CHILDREN',\n\t\t\t\t\treplacedClientIds: getAllChildren( action.clientIds ),\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn reducer( state, action );\n};\n\n/**\n * Higher-order reducer which targets the combined blocks reducer and handles\n * the `RESET_BLOCKS` action. When dispatched, this action will replace all\n * blocks that exist in the post, leaving blocks that exist only in state (e.g.\n * reusable blocks and blocks controlled by inner blocks controllers) alone.\n *\n * @param {Function} reducer Original reducer function.\n *\n * @return {Function} Enhanced reducer function.\n */\nconst withBlockReset = ( reducer ) => ( state, action ) => {\n\tif ( action.type === 'RESET_BLOCKS' ) {\n\t\tconst newState = {\n\t\t\t...state,\n\t\t\tbyClientId: new Map(\n\t\t\t\tgetFlattenedBlocksWithoutAttributes( action.blocks )\n\t\t\t),\n\t\t\tattributes: new Map( getFlattenedBlockAttributes( action.blocks ) ),\n\t\t\torder: mapBlockOrder( action.blocks ),\n\t\t\tparents: new Map( mapBlockParents( action.blocks ) ),\n\t\t\tcontrolledInnerBlocks: {},\n\t\t};\n\n\t\tnewState.tree = new Map( state?.tree );\n\t\tupdateBlockTreeForBlocks( newState, action.blocks );\n\t\tnewState.tree.set( '', {\n\t\t\tinnerBlocks: action.blocks.map( ( subBlock ) =>\n\t\t\t\tnewState.tree.get( subBlock.clientId )\n\t\t\t),\n\t\t} );\n\n\t\treturn newState;\n\t}\n\n\treturn reducer( state, action );\n};\n\n/**\n * Higher-order reducer which targets the combined blocks reducer and handles\n * the `REPLACE_INNER_BLOCKS` action. When dispatched, this action the state\n * should become equivalent to the execution of a `REMOVE_BLOCKS` action\n * containing all the child's of the root block followed by the execution of\n * `INSERT_BLOCKS` with the new blocks.\n *\n * @param {Function} reducer Original reducer function.\n *\n * @return {Function} Enhanced reducer function.\n */\nconst withReplaceInnerBlocks = ( reducer ) => ( state, action ) => {\n\tif ( action.type !== 'REPLACE_INNER_BLOCKS' ) {\n\t\treturn reducer( state, action );\n\t}\n\n\t// Finds every nested inner block controller. We must check the action blocks\n\t// and not just the block parent state because some inner block controllers\n\t// should be deleted if specified, whereas others should not be deleted. If\n\t// a controlled should not be deleted, then we need to avoid deleting its\n\t// inner blocks from the block state because its inner blocks will not be\n\t// attached to the block in the action.\n\tconst nestedControllers = {};\n\tif ( Object.keys( state.controlledInnerBlocks ).length ) {\n\t\tconst stack = [ ...action.blocks ];\n\t\twhile ( stack.length ) {\n\t\t\tconst { innerBlocks, ...block } = stack.shift();\n\t\t\tstack.push( ...innerBlocks );\n\t\t\tif ( !! state.controlledInnerBlocks[ block.clientId ] ) {\n\t\t\t\tnestedControllers[ block.clientId ] = true;\n\t\t\t}\n\t\t}\n\t}\n\n\t// The `keepControlledInnerBlocks` prop will keep the inner blocks of the\n\t// marked block in the block state so that they can be reattached to the\n\t// marked block when we re-insert everything a few lines below.\n\tlet stateAfterBlocksRemoval = state;\n\tif ( state.order.get( action.rootClientId ) ) {\n\t\tstateAfterBlocksRemoval = reducer( stateAfterBlocksRemoval, {\n\t\t\ttype: 'REMOVE_BLOCKS',\n\t\t\tkeepControlledInnerBlocks: nestedControllers,\n\t\t\tclientIds: state.order.get( action.rootClientId ),\n\t\t} );\n\t}\n\tlet stateAfterInsert = stateAfterBlocksRemoval;\n\tif ( action.blocks.length ) {\n\t\tstateAfterInsert = reducer( stateAfterInsert, {\n\t\t\t...action,\n\t\t\ttype: 'INSERT_BLOCKS',\n\t\t\tindex: 0,\n\t\t} );\n\n\t\t// We need to re-attach the controlled inner blocks to the blocks tree and\n\t\t// preserve their block order. Otherwise, an inner block controller's blocks\n\t\t// will be deleted entirely from its entity.\n\t\tconst stateAfterInsertOrder = new Map( stateAfterInsert.order );\n\t\tObject.keys( nestedControllers ).forEach( ( key ) => {\n\t\t\tif ( state.order.get( key ) ) {\n\t\t\t\tstateAfterInsertOrder.set( key, state.order.get( key ) );\n\t\t\t}\n\t\t} );\n\t\tstateAfterInsert.order = stateAfterInsertOrder;\n\t\tstateAfterInsert.tree = new Map( stateAfterInsert.tree );\n\t\tObject.keys( nestedControllers ).forEach( ( _key ) => {\n\t\t\tconst key = `controlled||${ _key }`;\n\t\t\tif ( state.tree.has( key ) ) {\n\t\t\t\tstateAfterInsert.tree.set( key, state.tree.get( key ) );\n\t\t\t}\n\t\t} );\n\t}\n\treturn stateAfterInsert;\n};\n\n/**\n * Higher-order reducer which targets the combined blocks reducer and handles\n * the `SAVE_REUSABLE_BLOCK_SUCCESS` action. This action can't be handled by\n * regular reducers and needs a higher-order reducer since it needs access to\n * both `byClientId` and `attributes` simultaneously.\n *\n * @param {Function} reducer Original reducer function.\n *\n * @return {Function} Enhanced reducer function.\n */\nconst withSaveReusableBlock = ( reducer ) => ( state, action ) => {\n\tif ( state && action.type === 'SAVE_REUSABLE_BLOCK_SUCCESS' ) {\n\t\tconst { id, updatedId } = action;\n\n\t\t// If a temporary reusable block is saved, we swap the temporary id with the final one.\n\t\tif ( id === updatedId ) {\n\t\t\treturn state;\n\t\t}\n\n\t\tstate = { ...state };\n\t\tstate.attributes = new Map( state.attributes );\n\t\tstate.attributes.forEach( ( attributes, clientId ) => {\n\t\t\tconst { name } = state.byClientId.get( clientId );\n\t\t\tif ( name === 'core/block' && attributes.ref === id ) {\n\t\t\t\tstate.attributes.set( clientId, {\n\t\t\t\t\t...attributes,\n\t\t\t\t\tref: updatedId,\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t}\n\n\treturn reducer( state, action );\n};\n/**\n * Higher-order reducer which removes blocks from state when switching parent block controlled state.\n *\n * @param {Function} reducer Original reducer function.\n *\n * @return {Function} Enhanced reducer function.\n */\nconst withResetControlledBlocks = ( reducer ) => ( state, action ) => {\n\tif ( action.type === 'SET_HAS_CONTROLLED_INNER_BLOCKS' ) {\n\t\t// when switching a block from controlled to uncontrolled or inverse,\n\t\t// we need to remove its content first.\n\t\tconst tempState = reducer( state, {\n\t\t\ttype: 'REPLACE_INNER_BLOCKS',\n\t\t\trootClientId: action.clientId,\n\t\t\tblocks: [],\n\t\t} );\n\t\treturn reducer( tempState, action );\n\t}\n\n\treturn reducer( state, action );\n};\n\n/**\n * Reducer returning the blocks state.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport const blocks = pipe(\n\tcombineReducers,\n\twithSaveReusableBlock, // Needs to be before withBlockCache.\n\twithBlockTree, // Needs to be before withInnerBlocksRemoveCascade.\n\twithInnerBlocksRemoveCascade,\n\twithReplaceInnerBlocks, // Needs to be after withInnerBlocksRemoveCascade.\n\twithBlockReset,\n\twithPersistentBlockChange,\n\twithIgnoredBlockChange,\n\twithResetControlledBlocks\n)( {\n\t// The state is using a Map instead of a plain object for performance reasons.\n\t// You can run the \"./test/performance.js\" unit test to check the impact\n\t// code changes can have on this reducer.\n\tbyClientId( state = new Map(), action ) {\n\t\tswitch ( action.type ) {\n\t\t\tcase 'RECEIVE_BLOCKS':\n\t\t\tcase 'INSERT_BLOCKS': {\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\tgetFlattenedBlocksWithoutAttributes( action.blocks ).forEach(\n\t\t\t\t\t( [ key, value ] ) => {\n\t\t\t\t\t\tnewState.set( key, value );\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\treturn newState;\n\t\t\t}\n\t\t\tcase 'UPDATE_BLOCK': {\n\t\t\t\t// Ignore updates if block isn't known.\n\t\t\t\tif ( ! state.has( action.clientId ) ) {\n\t\t\t\t\treturn state;\n\t\t\t\t}\n\n\t\t\t\t// Do nothing if only attributes change.\n\t\t\t\tconst { attributes, ...changes } = action.updates;\n\t\t\t\tif ( Object.values( changes ).length === 0 ) {\n\t\t\t\t\treturn state;\n\t\t\t\t}\n\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\tnewState.set( action.clientId, {\n\t\t\t\t\t...state.get( action.clientId ),\n\t\t\t\t\t...changes,\n\t\t\t\t} );\n\t\t\t\treturn newState;\n\t\t\t}\n\n\t\t\tcase 'REPLACE_BLOCKS_AUGMENTED_WITH_CHILDREN': {\n\t\t\t\tif ( ! action.blocks ) {\n\t\t\t\t\treturn state;\n\t\t\t\t}\n\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\taction.replacedClientIds.forEach( ( clientId ) => {\n\t\t\t\t\tnewState.delete( clientId );\n\t\t\t\t} );\n\n\t\t\t\tgetFlattenedBlocksWithoutAttributes( action.blocks ).forEach(\n\t\t\t\t\t( [ key, value ] ) => {\n\t\t\t\t\t\tnewState.set( key, value );\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\treturn newState;\n\t\t\t}\n\n\t\t\tcase 'REMOVE_BLOCKS_AUGMENTED_WITH_CHILDREN': {\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\taction.removedClientIds.forEach( ( clientId ) => {\n\t\t\t\t\tnewState.delete( clientId );\n\t\t\t\t} );\n\t\t\t\treturn newState;\n\t\t\t}\n\t\t}\n\n\t\treturn state;\n\t},\n\n\t// The state is using a Map instead of a plain object for performance reasons.\n\t// You can run the \"./test/performance.js\" unit test to check the impact\n\t// code changes can have on this reducer.\n\tattributes( state = new Map(), action ) {\n\t\tswitch ( action.type ) {\n\t\t\tcase 'RECEIVE_BLOCKS':\n\t\t\tcase 'INSERT_BLOCKS': {\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\tgetFlattenedBlockAttributes( action.blocks ).forEach(\n\t\t\t\t\t( [ key, value ] ) => {\n\t\t\t\t\t\tnewState.set( key, value );\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\treturn newState;\n\t\t\t}\n\n\t\t\tcase 'UPDATE_BLOCK': {\n\t\t\t\t// Ignore updates if block isn't known or there are no attribute changes.\n\t\t\t\tif (\n\t\t\t\t\t! state.get( action.clientId ) ||\n\t\t\t\t\t! action.updates.attributes\n\t\t\t\t) {\n\t\t\t\t\treturn state;\n\t\t\t\t}\n\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\tnewState.set( action.clientId, {\n\t\t\t\t\t...state.get( action.clientId ),\n\t\t\t\t\t...action.updates.attributes,\n\t\t\t\t} );\n\t\t\t\treturn newState;\n\t\t\t}\n\n\t\t\tcase 'SYNC_DERIVED_BLOCK_ATTRIBUTES':\n\t\t\tcase 'UPDATE_BLOCK_ATTRIBUTES': {\n\t\t\t\t// Avoid a state change if none of the block IDs are known.\n\t\t\t\tif ( action.clientIds.every( ( id ) => ! state.get( id ) ) ) {\n\t\t\t\t\treturn state;\n\t\t\t\t}\n\n\t\t\t\tlet hasChange = false;\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\tfor ( const clientId of action.clientIds ) {\n\t\t\t\t\tconst updatedAttributeEntries = Object.entries(\n\t\t\t\t\t\t!! action.options?.uniqueByBlock\n\t\t\t\t\t\t\t? action.attributes[ clientId ]\n\t\t\t\t\t\t\t: action.attributes ?? {}\n\t\t\t\t\t);\n\t\t\t\t\tif ( updatedAttributeEntries.length === 0 ) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tlet hasUpdatedAttributes = false;\n\t\t\t\t\tconst existingAttributes = state.get( clientId );\n\t\t\t\t\tconst newAttributes = {};\n\t\t\t\t\tupdatedAttributeEntries.forEach( ( [ key, value ] ) => {\n\t\t\t\t\t\tif ( existingAttributes[ key ] !== value ) {\n\t\t\t\t\t\t\thasUpdatedAttributes = true;\n\t\t\t\t\t\t\tnewAttributes[ key ] = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t\thasChange = hasChange || hasUpdatedAttributes;\n\t\t\t\t\tif ( hasUpdatedAttributes ) {\n\t\t\t\t\t\tnewState.set( clientId, {\n\t\t\t\t\t\t\t...existingAttributes,\n\t\t\t\t\t\t\t...newAttributes,\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn hasChange ? newState : state;\n\t\t\t}\n\n\t\t\tcase 'REPLACE_BLOCKS_AUGMENTED_WITH_CHILDREN': {\n\t\t\t\tif ( ! action.blocks ) {\n\t\t\t\t\treturn state;\n\t\t\t\t}\n\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\taction.replacedClientIds.forEach( ( clientId ) => {\n\t\t\t\t\tnewState.delete( clientId );\n\t\t\t\t} );\n\t\t\t\tgetFlattenedBlockAttributes( action.blocks ).forEach(\n\t\t\t\t\t( [ key, value ] ) => {\n\t\t\t\t\t\tnewState.set( key, value );\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\treturn newState;\n\t\t\t}\n\n\t\t\tcase 'REMOVE_BLOCKS_AUGMENTED_WITH_CHILDREN': {\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\taction.removedClientIds.forEach( ( clientId ) => {\n\t\t\t\t\tnewState.delete( clientId );\n\t\t\t\t} );\n\t\t\t\treturn newState;\n\t\t\t}\n\t\t}\n\n\t\treturn state;\n\t},\n\n\t// The state is using a Map instead of a plain object for performance reasons.\n\t// You can run the \"./test/performance.js\" unit test to check the impact\n\t// code changes can have on this reducer.\n\torder( state = new Map(), action ) {\n\t\tswitch ( action.type ) {\n\t\t\tcase 'RECEIVE_BLOCKS': {\n\t\t\t\tconst blockOrder = mapBlockOrder( action.blocks );\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\tblockOrder.forEach( ( order, clientId ) => {\n\t\t\t\t\tif ( clientId !== '' ) {\n\t\t\t\t\t\tnewState.set( clientId, order );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\tnewState.set(\n\t\t\t\t\t'',\n\t\t\t\t\t( state.get( '' ) ?? [] ).concat( blockOrder[ '' ] )\n\t\t\t\t);\n\t\t\t\treturn newState;\n\t\t\t}\n\t\t\tcase 'INSERT_BLOCKS': {\n\t\t\t\tconst { rootClientId = '' } = action;\n\t\t\t\tconst subState = state.get( rootClientId ) || [];\n\t\t\t\tconst mappedBlocks = mapBlockOrder(\n\t\t\t\t\taction.blocks,\n\t\t\t\t\trootClientId\n\t\t\t\t);\n\t\t\t\tconst { index = subState.length } = action;\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\tmappedBlocks.forEach( ( order, clientId ) => {\n\t\t\t\t\tnewState.set( clientId, order );\n\t\t\t\t} );\n\t\t\t\tnewState.set(\n\t\t\t\t\trootClientId,\n\t\t\t\t\tinsertAt(\n\t\t\t\t\t\tsubState,\n\t\t\t\t\t\tmappedBlocks.get( rootClientId ),\n\t\t\t\t\t\tindex\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t\treturn newState;\n\t\t\t}\n\n\t\t\tcase 'MOVE_BLOCKS_TO_POSITION': {\n\t\t\t\tconst {\n\t\t\t\t\tfromRootClientId = '',\n\t\t\t\t\ttoRootClientId = '',\n\t\t\t\t\tclientIds,\n\t\t\t\t} = action;\n\t\t\t\tconst { index = state.get( toRootClientId ).length } = action;\n\n\t\t\t\t// Moving inside the same parent block.\n\t\t\t\tif ( fromRootClientId === toRootClientId ) {\n\t\t\t\t\tconst subState = state.get( toRootClientId );\n\t\t\t\t\tconst fromIndex = subState.indexOf( clientIds[ 0 ] );\n\t\t\t\t\tconst newState = new Map( state );\n\t\t\t\t\tnewState.set(\n\t\t\t\t\t\ttoRootClientId,\n\t\t\t\t\t\tmoveTo(\n\t\t\t\t\t\t\tstate.get( toRootClientId ),\n\t\t\t\t\t\t\tfromIndex,\n\t\t\t\t\t\t\tindex,\n\t\t\t\t\t\t\tclientIds.length\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t\treturn newState;\n\t\t\t\t}\n\n\t\t\t\t// Moving from a parent block to another.\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\tnewState.set(\n\t\t\t\t\tfromRootClientId,\n\t\t\t\t\tstate\n\t\t\t\t\t\t.get( fromRootClientId )\n\t\t\t\t\t\t?.filter( ( id ) => ! clientIds.includes( id ) ) ?? []\n\t\t\t\t);\n\t\t\t\tnewState.set(\n\t\t\t\t\ttoRootClientId,\n\t\t\t\t\tinsertAt( state.get( toRootClientId ), clientIds, index )\n\t\t\t\t);\n\t\t\t\treturn newState;\n\t\t\t}\n\n\t\t\tcase 'MOVE_BLOCKS_UP': {\n\t\t\t\tconst { clientIds, rootClientId = '' } = action;\n\t\t\t\tconst firstClientId = clientIds[ 0 ];\n\t\t\t\tconst subState = state.get( rootClientId );\n\n\t\t\t\tif ( ! subState.length || firstClientId === subState[ 0 ] ) {\n\t\t\t\t\treturn state;\n\t\t\t\t}\n\n\t\t\t\tconst firstIndex = subState.indexOf( firstClientId );\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\tnewState.set(\n\t\t\t\t\trootClientId,\n\t\t\t\t\tmoveTo(\n\t\t\t\t\t\tsubState,\n\t\t\t\t\t\tfirstIndex,\n\t\t\t\t\t\tfirstIndex - 1,\n\t\t\t\t\t\tclientIds.length\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t\treturn newState;\n\t\t\t}\n\n\t\t\tcase 'MOVE_BLOCKS_DOWN': {\n\t\t\t\tconst { clientIds, rootClientId = '' } = action;\n\t\t\t\tconst firstClientId = clientIds[ 0 ];\n\t\t\t\tconst lastClientId = clientIds[ clientIds.length - 1 ];\n\t\t\t\tconst subState = state.get( rootClientId );\n\n\t\t\t\tif (\n\t\t\t\t\t! subState.length ||\n\t\t\t\t\tlastClientId === subState[ subState.length - 1 ]\n\t\t\t\t) {\n\t\t\t\t\treturn state;\n\t\t\t\t}\n\n\t\t\t\tconst firstIndex = subState.indexOf( firstClientId );\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\tnewState.set(\n\t\t\t\t\trootClientId,\n\t\t\t\t\tmoveTo(\n\t\t\t\t\t\tsubState,\n\t\t\t\t\t\tfirstIndex,\n\t\t\t\t\t\tfirstIndex + 1,\n\t\t\t\t\t\tclientIds.length\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t\treturn newState;\n\t\t\t}\n\n\t\t\tcase 'REPLACE_BLOCKS_AUGMENTED_WITH_CHILDREN': {\n\t\t\t\tconst { clientIds } = action;\n\t\t\t\tif ( ! action.blocks ) {\n\t\t\t\t\treturn state;\n\t\t\t\t}\n\n\t\t\t\tconst mappedBlocks = mapBlockOrder( action.blocks );\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\taction.replacedClientIds.forEach( ( clientId ) => {\n\t\t\t\t\tnewState.delete( clientId );\n\t\t\t\t} );\n\t\t\t\tmappedBlocks.forEach( ( order, clientId ) => {\n\t\t\t\t\tif ( clientId !== '' ) {\n\t\t\t\t\t\tnewState.set( clientId, order );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\tnewState.forEach( ( order, clientId ) => {\n\t\t\t\t\tconst newSubOrder = Object.values( order ).reduce(\n\t\t\t\t\t\t( result, subClientId ) => {\n\t\t\t\t\t\t\tif ( subClientId === clientIds[ 0 ] ) {\n\t\t\t\t\t\t\t\treturn [ ...result, ...mappedBlocks.get( '' ) ];\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( clientIds.indexOf( subClientId ) === -1 ) {\n\t\t\t\t\t\t\t\tresult.push( subClientId );\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t},\n\t\t\t\t\t\t[]\n\t\t\t\t\t);\n\t\t\t\t\tnewState.set( clientId, newSubOrder );\n\t\t\t\t} );\n\t\t\t\treturn newState;\n\t\t\t}\n\n\t\t\tcase 'REMOVE_BLOCKS_AUGMENTED_WITH_CHILDREN': {\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\t// Remove inner block ordering for removed blocks.\n\t\t\t\taction.removedClientIds.forEach( ( clientId ) => {\n\t\t\t\t\tnewState.delete( clientId );\n\t\t\t\t} );\n\t\t\t\tnewState.forEach( ( order, clientId ) => {\n\t\t\t\t\tconst newSubOrder =\n\t\t\t\t\t\torder?.filter(\n\t\t\t\t\t\t\t( id ) => ! action.removedClientIds.includes( id )\n\t\t\t\t\t\t) ?? [];\n\t\t\t\t\tif ( newSubOrder.length !== order.length ) {\n\t\t\t\t\t\tnewState.set( clientId, newSubOrder );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn newState;\n\t\t\t}\n\t\t}\n\n\t\treturn state;\n\t},\n\n\t// While technically redundant data as the inverse of `order`, it serves as\n\t// an optimization for the selectors which derive the ancestry of a block.\n\tparents( state = new Map(), action ) {\n\t\tswitch ( action.type ) {\n\t\t\tcase 'RECEIVE_BLOCKS': {\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\tmapBlockParents( action.blocks ).forEach(\n\t\t\t\t\t( [ key, value ] ) => {\n\t\t\t\t\t\tnewState.set( key, value );\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\treturn newState;\n\t\t\t}\n\t\t\tcase 'INSERT_BLOCKS': {\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\tmapBlockParents(\n\t\t\t\t\taction.blocks,\n\t\t\t\t\taction.rootClientId || ''\n\t\t\t\t).forEach( ( [ key, value ] ) => {\n\t\t\t\t\tnewState.set( key, value );\n\t\t\t\t} );\n\t\t\t\treturn newState;\n\t\t\t}\n\t\t\tcase 'MOVE_BLOCKS_TO_POSITION': {\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\taction.clientIds.forEach( ( id ) => {\n\t\t\t\t\tnewState.set( id, action.toRootClientId || '' );\n\t\t\t\t} );\n\t\t\t\treturn newState;\n\t\t\t}\n\n\t\t\tcase 'REPLACE_BLOCKS_AUGMENTED_WITH_CHILDREN': {\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\taction.replacedClientIds.forEach( ( clientId ) => {\n\t\t\t\t\tnewState.delete( clientId );\n\t\t\t\t} );\n\t\t\t\tmapBlockParents(\n\t\t\t\t\taction.blocks,\n\t\t\t\t\tstate.get( action.clientIds[ 0 ] )\n\t\t\t\t).forEach( ( [ key, value ] ) => {\n\t\t\t\t\tnewState.set( key, value );\n\t\t\t\t} );\n\t\t\t\treturn newState;\n\t\t\t}\n\t\t\tcase 'REMOVE_BLOCKS_AUGMENTED_WITH_CHILDREN': {\n\t\t\t\tconst newState = new Map( state );\n\t\t\t\taction.removedClientIds.forEach( ( clientId ) => {\n\t\t\t\t\tnewState.delete( clientId );\n\t\t\t\t} );\n\t\t\t\treturn newState;\n\t\t\t}\n\t\t}\n\n\t\treturn state;\n\t},\n\n\tcontrolledInnerBlocks(\n\t\tstate = {},\n\t\t{ type, clientId, hasControlledInnerBlocks }\n\t) {\n\t\tif ( type === 'SET_HAS_CONTROLLED_INNER_BLOCKS' ) {\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t[ clientId ]: hasControlledInnerBlocks,\n\t\t\t};\n\t\t}\n\t\treturn state;\n\t},\n} );\n\n/**\n * Reducer returning visibility status of block interface.\n *\n * @param {boolean} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {boolean} Updated state.\n */\nexport function isBlockInterfaceHidden( state = false, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'HIDE_BLOCK_INTERFACE':\n\t\t\treturn true;\n\n\t\tcase 'SHOW_BLOCK_INTERFACE':\n\t\t\treturn false;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning typing state.\n *\n * @param {boolean} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {boolean} Updated state.\n */\nexport function isTyping( state = false, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'START_TYPING':\n\t\t\treturn true;\n\n\t\tcase 'STOP_TYPING':\n\t\t\treturn false;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning dragging state. It is possible for a user to be dragging\n * data from outside of the editor, so this state is separate from `draggedBlocks`.\n *\n * @param {boolean} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {boolean} Updated state.\n */\nexport function isDragging( state = false, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'START_DRAGGING':\n\t\t\treturn true;\n\n\t\tcase 'STOP_DRAGGING':\n\t\t\treturn false;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning dragged block client id.\n *\n * @param {string[]} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {string[]} Updated state.\n */\nexport function draggedBlocks( state = [], action ) {\n\tswitch ( action.type ) {\n\t\tcase 'START_DRAGGING_BLOCKS':\n\t\t\treturn action.clientIds;\n\n\t\tcase 'STOP_DRAGGING_BLOCKS':\n\t\t\treturn [];\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer tracking the visible blocks.\n *\n * @param {Record<string,boolean>} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Record<string,boolean>} Block visibility.\n */\nexport function blockVisibility( state = {}, action ) {\n\tif ( action.type === 'SET_BLOCK_VISIBILITY' ) {\n\t\treturn {\n\t\t\t...state,\n\t\t\t...action.updates,\n\t\t};\n\t}\n\n\treturn state;\n}\n\n/**\n * Internal helper reducer for selectionStart and selectionEnd. Can hold a block\n * selection, represented by an object with property clientId.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nfunction selectionHelper( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'CLEAR_SELECTED_BLOCK': {\n\t\t\tif ( state.clientId ) {\n\t\t\t\treturn {};\n\t\t\t}\n\n\t\t\treturn state;\n\t\t}\n\t\tcase 'SELECT_BLOCK':\n\t\t\tif ( action.clientId === state.clientId ) {\n\t\t\t\treturn state;\n\t\t\t}\n\n\t\t\treturn { clientId: action.clientId };\n\t\tcase 'REPLACE_INNER_BLOCKS':\n\t\tcase 'INSERT_BLOCKS': {\n\t\t\tif ( ! action.updateSelection || ! action.blocks.length ) {\n\t\t\t\treturn state;\n\t\t\t}\n\n\t\t\treturn { clientId: action.blocks[ 0 ].clientId };\n\t\t}\n\t\tcase 'REMOVE_BLOCKS':\n\t\t\tif (\n\t\t\t\t! action.clientIds ||\n\t\t\t\t! action.clientIds.length ||\n\t\t\t\taction.clientIds.indexOf( state.clientId ) === -1\n\t\t\t) {\n\t\t\t\treturn state;\n\t\t\t}\n\n\t\t\treturn {};\n\t\tcase 'REPLACE_BLOCKS': {\n\t\t\tif ( action.clientIds.indexOf( state.clientId ) === -1 ) {\n\t\t\t\treturn state;\n\t\t\t}\n\n\t\t\tconst blockToSelect =\n\t\t\t\taction.blocks[ action.indexToSelect ] ||\n\t\t\t\taction.blocks[ action.blocks.length - 1 ];\n\n\t\t\tif ( ! blockToSelect ) {\n\t\t\t\treturn {};\n\t\t\t}\n\n\t\t\tif ( blockToSelect.clientId === state.clientId ) {\n\t\t\t\treturn state;\n\t\t\t}\n\n\t\t\treturn { clientId: blockToSelect.clientId };\n\t\t}\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning the selection state.\n *\n * @param {boolean} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {boolean} Updated state.\n */\nexport function selection( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'SELECTION_CHANGE':\n\t\t\tif ( action.clientId ) {\n\t\t\t\treturn {\n\t\t\t\t\tselectionStart: {\n\t\t\t\t\t\tclientId: action.clientId,\n\t\t\t\t\t\tattributeKey: action.attributeKey,\n\t\t\t\t\t\toffset: action.startOffset,\n\t\t\t\t\t},\n\t\t\t\t\tselectionEnd: {\n\t\t\t\t\t\tclientId: action.clientId,\n\t\t\t\t\t\tattributeKey: action.attributeKey,\n\t\t\t\t\t\toffset: action.endOffset,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tselectionStart: action.start || state.selectionStart,\n\t\t\t\tselectionEnd: action.end || state.selectionEnd,\n\t\t\t};\n\t\tcase 'RESET_SELECTION':\n\t\t\tconst { selectionStart, selectionEnd } = action;\n\t\t\treturn {\n\t\t\t\tselectionStart,\n\t\t\t\tselectionEnd,\n\t\t\t};\n\t\tcase 'MULTI_SELECT':\n\t\t\tconst { start, end } = action;\n\n\t\t\tif (\n\t\t\t\tstart === state.selectionStart?.clientId &&\n\t\t\t\tend === state.selectionEnd?.clientId\n\t\t\t) {\n\t\t\t\treturn state;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tselectionStart: { clientId: start },\n\t\t\t\tselectionEnd: { clientId: end },\n\t\t\t};\n\t\tcase 'RESET_BLOCKS':\n\t\t\tconst startClientId = state?.selectionStart?.clientId;\n\t\t\tconst endClientId = state?.selectionEnd?.clientId;\n\n\t\t\t// Do nothing if there's no selected block.\n\t\t\tif ( ! startClientId && ! endClientId ) {\n\t\t\t\treturn state;\n\t\t\t}\n\n\t\t\t// If the start of the selection won't exist after reset, remove selection.\n\t\t\tif (\n\t\t\t\t! action.blocks.some(\n\t\t\t\t\t( block ) => block.clientId === startClientId\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\treturn {\n\t\t\t\t\tselectionStart: {},\n\t\t\t\t\tselectionEnd: {},\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// If the end of the selection won't exist after reset, collapse selection.\n\t\t\tif (\n\t\t\t\t! action.blocks.some(\n\t\t\t\t\t( block ) => block.clientId === endClientId\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\treturn {\n\t\t\t\t\t...state,\n\t\t\t\t\tselectionEnd: state.selectionStart,\n\t\t\t\t};\n\t\t\t}\n\t}\n\n\tconst selectionStart = selectionHelper( state.selectionStart, action );\n\tconst selectionEnd = selectionHelper( state.selectionEnd, action );\n\n\tif (\n\t\tselectionStart === state.selectionStart &&\n\t\tselectionEnd === state.selectionEnd\n\t) {\n\t\treturn state;\n\t}\n\n\treturn {\n\t\tselectionStart,\n\t\tselectionEnd,\n\t};\n}\n\n/**\n * Reducer returning whether the user is multi-selecting.\n *\n * @param {boolean} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {boolean} Updated state.\n */\nexport function isMultiSelecting( state = false, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'START_MULTI_SELECT':\n\t\t\treturn true;\n\n\t\tcase 'STOP_MULTI_SELECT':\n\t\t\treturn false;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning whether selection is enabled.\n *\n * @param {boolean} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {boolean} Updated state.\n */\nexport function isSelectionEnabled( state = true, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'TOGGLE_SELECTION':\n\t\t\treturn action.isSelectionEnabled;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning the data needed to display a prompt when certain blocks\n * are removed, or `false` if no such prompt is requested.\n *\n * @param {boolean} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object|false} Data for removal prompt display, if any.\n */\nfunction removalPromptData( state = false, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'DISPLAY_BLOCK_REMOVAL_PROMPT':\n\t\t\tconst { clientIds, selectPrevious, message } = action;\n\t\t\treturn {\n\t\t\t\tclientIds,\n\t\t\t\tselectPrevious,\n\t\t\t\tmessage,\n\t\t\t};\n\t\tcase 'CLEAR_BLOCK_REMOVAL_PROMPT':\n\t\t\treturn false;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning any rules that a block editor may provide in order to\n * prevent a user from accidentally removing certain blocks. These rules are\n * then used to display a confirmation prompt to the user. For instance, in the\n * Site Editor, the Query Loop block is important enough to warrant such\n * confirmation.\n *\n * The data is a record whose keys are block types (e.g. 'core/query') and\n * whose values are the explanation to be shown to users (e.g. 'Query Loop\n * displays a list of posts or pages.').\n *\n * @param {boolean} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Record<string,string>} Updated state.\n */\nfunction blockRemovalRules( state = false, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'SET_BLOCK_REMOVAL_RULES':\n\t\t\treturn action.rules;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning the initial block selection.\n *\n * Currently this in only used to restore the selection after block deletion and\n * pasting new content.This reducer should eventually be removed in favour of setting\n * selection directly.\n *\n * @param {boolean} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {number|null} Initial position: 0, -1 or null.\n */\nexport function initialPosition( state = null, action ) {\n\tif (\n\t\taction.type === 'REPLACE_BLOCKS' &&\n\t\taction.initialPosition !== undefined\n\t) {\n\t\treturn action.initialPosition;\n\t} else if (\n\t\t[\n\t\t\t'MULTI_SELECT',\n\t\t\t'SELECT_BLOCK',\n\t\t\t'RESET_SELECTION',\n\t\t\t'INSERT_BLOCKS',\n\t\t\t'REPLACE_INNER_BLOCKS',\n\t\t].includes( action.type )\n\t) {\n\t\treturn action.initialPosition;\n\t}\n\n\treturn state;\n}\n\nexport function blocksMode( state = {}, action ) {\n\tif ( action.type === 'TOGGLE_BLOCK_MODE' ) {\n\t\tconst { clientId } = action;\n\t\treturn {\n\t\t\t...state,\n\t\t\t[ clientId ]:\n\t\t\t\tstate[ clientId ] && state[ clientId ] === 'html'\n\t\t\t\t\t? 'visual'\n\t\t\t\t\t: 'html',\n\t\t};\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning the block insertion point visibility, either null if there\n * is not an explicit insertion point assigned, or an object of its `index` and\n * `rootClientId`.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function insertionCue( state = null, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'SHOW_INSERTION_POINT': {\n\t\t\tconst {\n\t\t\t\trootClientId,\n\t\t\t\tindex,\n\t\t\t\t__unstableWithInserter,\n\t\t\t\toperation,\n\t\t\t\tnearestSide,\n\t\t\t} = action;\n\t\t\tconst nextState = {\n\t\t\t\trootClientId,\n\t\t\t\tindex,\n\t\t\t\t__unstableWithInserter,\n\t\t\t\toperation,\n\t\t\t\tnearestSide,\n\t\t\t};\n\n\t\t\t// Bail out updates if the states are the same.\n\t\t\treturn fastDeepEqual( state, nextState ) ? state : nextState;\n\t\t}\n\n\t\tcase 'HIDE_INSERTION_POINT':\n\t\t\treturn null;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning whether the post blocks match the defined template or not.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {boolean} Updated state.\n */\nexport function template( state = { isValid: true }, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'SET_TEMPLATE_VALIDITY':\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tisValid: action.isValid,\n\t\t\t};\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning the editor setting.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function settings( state = SETTINGS_DEFAULTS, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'UPDATE_SETTINGS': {\n\t\t\tconst updatedSettings = action.reset\n\t\t\t\t? {\n\t\t\t\t\t\t...SETTINGS_DEFAULTS,\n\t\t\t\t\t\t...action.settings,\n\t\t\t\t }\n\t\t\t\t: {\n\t\t\t\t\t\t...state,\n\t\t\t\t\t\t...action.settings,\n\t\t\t\t };\n\n\t\t\tObject.defineProperty( updatedSettings, '__unstableIsPreviewMode', {\n\t\t\t\tget() {\n\t\t\t\t\tdeprecated( '__unstableIsPreviewMode', {\n\t\t\t\t\t\tsince: '6.8',\n\t\t\t\t\t\talternative: 'isPreviewMode',\n\t\t\t\t\t} );\n\n\t\t\t\t\treturn this.isPreviewMode;\n\t\t\t\t},\n\t\t\t} );\n\n\t\t\treturn updatedSettings;\n\t\t}\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning the user preferences.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {string} Updated state.\n */\nexport function preferences( state = PREFERENCES_DEFAULTS, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'INSERT_BLOCKS':\n\t\tcase 'REPLACE_BLOCKS': {\n\t\t\tconst nextInsertUsage = action.blocks.reduce(\n\t\t\t\t( prevUsage, block ) => {\n\t\t\t\t\tconst { attributes, name: blockName } = block;\n\t\t\t\t\tlet id = blockName;\n\t\t\t\t\t// If a block variation match is found change the name to be the same with the\n\t\t\t\t\t// one that is used for block variations in the Inserter (`getItemFromVariation`).\n\t\t\t\t\tconst match = select( blocksStore ).getActiveBlockVariation(\n\t\t\t\t\t\tblockName,\n\t\t\t\t\t\tattributes\n\t\t\t\t\t);\n\t\t\t\t\tif ( match?.name ) {\n\t\t\t\t\t\tid += '/' + match.name;\n\t\t\t\t\t}\n\t\t\t\t\tif ( blockName === 'core/block' ) {\n\t\t\t\t\t\tid += '/' + attributes.ref;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...prevUsage,\n\t\t\t\t\t\t[ id ]: {\n\t\t\t\t\t\t\ttime: action.time,\n\t\t\t\t\t\t\tcount: prevUsage[ id ]\n\t\t\t\t\t\t\t\t? prevUsage[ id ].count + 1\n\t\t\t\t\t\t\t\t: 1,\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t\tstate.insertUsage\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tinsertUsage: nextInsertUsage,\n\t\t\t};\n\t\t}\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning an object where each key is a block client ID, its value\n * representing the settings for its nested blocks.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport const blockListSettings = ( state = {}, action ) => {\n\tswitch ( action.type ) {\n\t\t// Even if the replaced blocks have the same client ID, our logic\n\t\t// should correct the state.\n\t\tcase 'REPLACE_BLOCKS':\n\t\tcase 'REMOVE_BLOCKS': {\n\t\t\treturn Object.fromEntries(\n\t\t\t\tObject.entries( state ).filter(\n\t\t\t\t\t( [ id ] ) => ! action.clientIds.includes( id )\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t\tcase 'UPDATE_BLOCK_LIST_SETTINGS': {\n\t\t\tconst updates =\n\t\t\t\ttypeof action.clientId === 'string'\n\t\t\t\t\t? { [ action.clientId ]: action.settings }\n\t\t\t\t\t: action.clientId;\n\n\t\t\t// Remove settings that are the same as the current state.\n\t\t\tfor ( const clientId in updates ) {\n\t\t\t\tif ( ! updates[ clientId ] ) {\n\t\t\t\t\tif ( ! state[ clientId ] ) {\n\t\t\t\t\t\tdelete updates[ clientId ];\n\t\t\t\t\t}\n\t\t\t\t} else if (\n\t\t\t\t\tfastDeepEqual( state[ clientId ], updates[ clientId ] )\n\t\t\t\t) {\n\t\t\t\t\tdelete updates[ clientId ];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( Object.keys( updates ).length === 0 ) {\n\t\t\t\treturn state;\n\t\t\t}\n\n\t\t\tconst merged = { ...state, ...updates };\n\n\t\t\tfor ( const clientId in updates ) {\n\t\t\t\tif ( ! updates[ clientId ] ) {\n\t\t\t\t\tdelete merged[ clientId ];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn merged;\n\t\t}\n\t}\n\treturn state;\n};\n\n/**\n * Reducer return an updated state representing the most recent block attribute\n * update. The state is structured as an object where the keys represent the\n * client IDs of blocks, the values a subset of attributes from the most recent\n * block update. The state is always reset to null if the last action is\n * anything other than an attributes update.\n *\n * @param {Object<string,Object>} state Current state.\n * @param {Object} action Action object.\n *\n * @return {[string,Object]} Updated state.\n */\nexport function lastBlockAttributesChange( state = null, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'UPDATE_BLOCK':\n\t\t\tif ( ! action.updates.attributes ) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\treturn { [ action.clientId ]: action.updates.attributes };\n\n\t\tcase 'UPDATE_BLOCK_ATTRIBUTES':\n\t\t\treturn action.clientIds.reduce(\n\t\t\t\t( accumulator, id ) => ( {\n\t\t\t\t\t...accumulator,\n\t\t\t\t\t[ id ]: !! action.options?.uniqueByBlock\n\t\t\t\t\t\t? action.attributes[ id ]\n\t\t\t\t\t\t: action.attributes,\n\t\t\t\t} ),\n\t\t\t\t{}\n\t\t\t);\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning current highlighted block.\n *\n * @param {boolean} state Current highlighted block.\n * @param {Object} action Dispatched action.\n *\n * @return {string} Updated state.\n */\nexport function highlightedBlock( state, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'TOGGLE_BLOCK_HIGHLIGHT':\n\t\t\tconst { clientId, isHighlighted } = action;\n\n\t\t\tif ( isHighlighted ) {\n\t\t\t\treturn clientId;\n\t\t\t} else if ( state === clientId ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\treturn state;\n\t\tcase 'SELECT_BLOCK':\n\t\t\tif ( action.clientId !== state ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning current expanded block in the list view.\n *\n * @param {string|null} state Current expanded block.\n * @param {Object} action Dispatched action.\n *\n * @return {string|null} Updated state.\n */\nexport function expandedBlock( state = null, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'SET_BLOCK_EXPANDED_IN_LIST_VIEW':\n\t\t\treturn action.clientId;\n\t\tcase 'SELECT_BLOCK':\n\t\t\tif ( action.clientId !== state ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer returning the block insertion event list state.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function lastBlockInserted( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'INSERT_BLOCKS':\n\t\tcase 'REPLACE_BLOCKS':\n\t\t\tif ( ! action.blocks.length ) {\n\t\t\t\treturn state;\n\t\t\t}\n\n\t\t\tconst clientIds = action.blocks.map( ( block ) => {\n\t\t\t\treturn block.clientId;\n\t\t\t} );\n\n\t\t\tconst source = action.meta?.source;\n\n\t\t\treturn { clientIds, source };\n\t\tcase 'RESET_BLOCKS':\n\t\t\treturn {};\n\t}\n\treturn state;\n}\n\n/**\n * Reducer returning the block that is eding temporarily edited as blocks.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function temporarilyEditingAsBlocks( state = '', action ) {\n\tif ( action.type === 'SET_TEMPORARILY_EDITING_AS_BLOCKS' ) {\n\t\treturn action.temporarilyEditingAsBlocks;\n\t}\n\treturn state;\n}\n\n/**\n * Reducer returning the focus mode that should be used when temporarily edit as blocks finishes.\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function temporarilyEditingFocusModeRevert( state = '', action ) {\n\tif ( action.type === 'SET_TEMPORARILY_EDITING_AS_BLOCKS' ) {\n\t\treturn action.focusModeToRevert;\n\t}\n\treturn state;\n}\n\n/**\n * Reducer returning a map of block client IDs to block editing modes.\n *\n * @param {Map} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Map} Updated state.\n */\nexport function blockEditingModes( state = new Map(), action ) {\n\tswitch ( action.type ) {\n\t\tcase 'SET_BLOCK_EDITING_MODE':\n\t\t\tif ( state.get( action.clientId ) === action.mode ) {\n\t\t\t\treturn state;\n\t\t\t}\n\t\t\treturn new Map( state ).set( action.clientId, action.mode );\n\t\tcase 'UNSET_BLOCK_EDITING_MODE': {\n\t\t\tif ( ! state.has( action.clientId ) ) {\n\t\t\t\treturn state;\n\t\t\t}\n\t\t\tconst newState = new Map( state );\n\t\t\tnewState.delete( action.clientId );\n\t\t\treturn newState;\n\t\t}\n\t\tcase 'RESET_BLOCKS': {\n\t\t\treturn state.has( '' )\n\t\t\t\t? new Map().set( '', state.get( '' ) )\n\t\t\t\t: state;\n\t\t}\n\t}\n\treturn state;\n}\n\n/**\n * Reducer returning the clientId of the block settings menu that is currently open.\n *\n * @param {string|null} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {string|null} Updated state.\n */\nexport function openedBlockSettingsMenu( state = null, action ) {\n\tif ( 'SET_OPENED_BLOCK_SETTINGS_MENU' === action.type ) {\n\t\treturn action?.clientId ?? null;\n\t}\n\treturn state;\n}\n\n/**\n * Reducer returning a map of style IDs to style overrides.\n *\n * @param {Map} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Map} Updated state.\n */\nexport function styleOverrides( state = new Map(), action ) {\n\tswitch ( action.type ) {\n\t\tcase 'SET_STYLE_OVERRIDE':\n\t\t\treturn new Map( state ).set( action.id, action.style );\n\t\tcase 'DELETE_STYLE_OVERRIDE': {\n\t\t\tconst newState = new Map( state );\n\t\t\tnewState.delete( action.id );\n\t\t\treturn newState;\n\t\t}\n\t}\n\treturn state;\n}\n\n/**\n * Reducer returning a map of the registered inserter media categories.\n *\n * @param {Array} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Array} Updated state.\n */\nexport function registeredInserterMediaCategories( state = [], action ) {\n\tswitch ( action.type ) {\n\t\tcase 'REGISTER_INSERTER_MEDIA_CATEGORY':\n\t\t\treturn [ ...state, action.category ];\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer setting last focused element\n *\n * @param {boolean} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {boolean} Updated state.\n */\nexport function lastFocus( state = false, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'LAST_FOCUS':\n\t\t\treturn action.lastFocus;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer setting zoom out state.\n *\n * @param {boolean} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {number} Updated state.\n */\nexport function zoomLevel( state = 100, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'SET_ZOOM_LEVEL':\n\t\t\treturn action.zoom;\n\t\tcase 'RESET_ZOOM_LEVEL':\n\t\t\treturn 100;\n\t}\n\n\treturn state;\n}\n\n/**\n * Reducer setting the insertion point\n *\n * @param {boolean} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function insertionPoint( state = null, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'SET_INSERTION_POINT':\n\t\t\treturn action.value;\n\t\tcase 'SELECT_BLOCK':\n\t\t\treturn null;\n\t}\n\n\treturn state;\n}\n\nconst combinedReducers = combineReducers( {\n\tblocks,\n\tisDragging,\n\tisTyping,\n\tisBlockInterfaceHidden,\n\tdraggedBlocks,\n\tselection,\n\tisMultiSelecting,\n\tisSelectionEnabled,\n\tinitialPosition,\n\tblocksMode,\n\tblockListSettings,\n\tinsertionPoint,\n\tinsertionCue,\n\ttemplate,\n\tsettings,\n\tpreferences,\n\tlastBlockAttributesChange,\n\tlastFocus,\n\texpandedBlock,\n\thighlightedBlock,\n\tlastBlockInserted,\n\ttemporarilyEditingAsBlocks,\n\ttemporarilyEditingFocusModeRevert,\n\tblockVisibility,\n\tblockEditingModes,\n\tstyleOverrides,\n\tremovalPromptData,\n\tblockRemovalRules,\n\topenedBlockSettingsMenu,\n\tregisteredInserterMediaCategories,\n\tzoomLevel,\n} );\n\n/**\n * Retrieves a block's tree structure, handling both controlled and uncontrolled inner blocks.\n *\n * @param {Object} state The current state object.\n * @param {string} clientId The client ID of the block to retrieve.\n *\n * @return {Object|undefined} The block tree object, or undefined if not found. For controlled blocks,\n * returns a merged tree with controlled inner blocks.\n */\nfunction getBlockTreeBlock( state, clientId ) {\n\tif ( clientId === '' ) {\n\t\tconst rootBlock = state.blocks.tree.get( clientId );\n\n\t\tif ( ! rootBlock ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Patch the root block to have a clientId property.\n\t\t// TODO - consider updating the blocks reducer so that the root block has this property.\n\t\treturn {\n\t\t\tclientId: '',\n\t\t\t...rootBlock,\n\t\t};\n\t}\n\n\tif ( ! state.blocks.controlledInnerBlocks[ clientId ] ) {\n\t\treturn state.blocks.tree.get( clientId );\n\t}\n\n\tconst controlledTree = state.blocks.tree.get( `controlled||${ clientId }` );\n\tconst regularTree = state.blocks.tree.get( clientId );\n\n\treturn {\n\t\t...regularTree,\n\t\tinnerBlocks: controlledTree?.innerBlocks,\n\t};\n}\n\n/**\n * Recursively traverses through a block tree of a given block and executes a callback for each block.\n *\n * @param {Object} state The store state.\n * @param {string} clientId The clientId of the block to start traversing from.\n * @param {Function} callback Function to execute for each block encountered during traversal.\n * The callback receives the current block as its argument.\n */\nfunction traverseBlockTree( state, clientId, callback ) {\n\tconst tree = getBlockTreeBlock( state, clientId );\n\tif ( ! tree ) {\n\t\treturn;\n\t}\n\n\tcallback( tree );\n\n\tif ( ! tree?.innerBlocks?.length ) {\n\t\treturn;\n\t}\n\n\tfor ( const innerBlock of tree?.innerBlocks ) {\n\t\ttraverseBlockTree( state, innerBlock.clientId, callback );\n\t}\n}\n\n/**\n * Checks if a block has a parent in a list of client IDs, and if so returns the client ID of the parent.\n *\n * @param {Object} state The current state object.\n * @param {string} clientId The client ID of the block to search the parents of.\n * @param {Array} clientIds The client IDs of the blocks to check.\n *\n * @return {string|undefined} The client ID of the parent block if found, undefined otherwise.\n */\nfunction findParentInClientIdsList( state, clientId, clientIds ) {\n\tif ( ! clientIds.length ) {\n\t\treturn;\n\t}\n\n\tlet parent = state.blocks.parents.get( clientId );\n\twhile ( parent !== undefined ) {\n\t\tif ( clientIds.includes( parent ) ) {\n\t\t\treturn parent;\n\t\t}\n\t\tparent = state.blocks.parents.get( parent );\n\t}\n}\n\n/**\n * Checks if a block has any bindings in its metadata attributes.\n *\n * @param {Object} block The block object to check for bindings.\n * @return {boolean} True if the block has bindings, false otherwise.\n */\nfunction hasBindings( block ) {\n\treturn (\n\t\tblock?.attributes?.metadata?.bindings &&\n\t\tObject.keys( block?.attributes?.metadata?.bindings ).length\n\t);\n}\n\n/**\n * Computes and returns derived block editing modes for a given block tree.\n *\n * This function calculates the editing modes for each block in the tree, taking into account\n * various factors such as zoom level, navigation mode, sections, and synced patterns.\n *\n * @param {Object} state The current state object.\n * @param {boolean} isNavMode Whether the navigation mode is active.\n * @param {string} treeClientId The client ID of the root block for the tree. Defaults to an empty string.\n * @return {Map} A Map containing the derived block editing modes, keyed by block client ID.\n */\nfunction getDerivedBlockEditingModesForTree(\n\tstate,\n\tisNavMode = false,\n\ttreeClientId = ''\n) {\n\tconst isZoomedOut =\n\t\tstate?.zoomLevel < 100 || state?.zoomLevel === 'auto-scaled';\n\tconst derivedBlockEditingModes = new Map();\n\n\t// When there are sections, the majority of blocks are disabled,\n\t// so the default block editing mode is set to disabled.\n\tconst sectionRootClientId = state.settings?.[ sectionRootClientIdKey ];\n\tconst sectionClientIds = state.blocks.order.get( sectionRootClientId );\n\tconst hasDisabledBlocks = Array.from( state.blockEditingModes ).some(\n\t\t( [ , mode ] ) => mode === 'disabled'\n\t);\n\tconst templatePartClientIds = [];\n\tconst syncedPatternClientIds = [];\n\n\tObject.keys( state.blocks.controlledInnerBlocks ).forEach( ( clientId ) => {\n\t\tconst block = state.blocks.byClientId?.get( clientId );\n\n\t\tif ( block?.name === 'core/template-part' ) {\n\t\t\ttemplatePartClientIds.push( clientId );\n\t\t}\n\n\t\tif ( block?.name === 'core/block' ) {\n\t\t\tsyncedPatternClientIds.push( clientId );\n\t\t}\n\t} );\n\tconst contentOnlyTemplateLockedClientIds = Object.keys(\n\t\tstate.blockListSettings\n\t).filter(\n\t\t( clientId ) =>\n\t\t\tstate.blockListSettings[ clientId ]?.templateLock === 'contentOnly'\n\t);\n\t// Use array.from for better back compat. Older versions of the iterator returned\n\t// from `keys()` didn't have the `filter` method.\n\tconst unsyncedPatternClientIds =\n\t\t!! window?.__experimentalContentOnlyPatternInsertion\n\t\t\t? Array.from( state.blocks.attributes.keys() ).filter(\n\t\t\t\t\t( clientId ) =>\n\t\t\t\t\t\tstate.blocks.attributes.get( clientId )?.metadata\n\t\t\t\t\t\t\t?.patternName\n\t\t\t )\n\t\t\t: [];\n\tconst contentOnlyParents = [\n\t\t...contentOnlyTemplateLockedClientIds,\n\t\t...unsyncedPatternClientIds,\n\t\t...( window?.__experimentalContentOnlyPatternInsertion\n\t\t\t? templatePartClientIds\n\t\t\t: [] ),\n\t];\n\n\ttraverseBlockTree( state, treeClientId, ( block ) => {\n\t\tconst { clientId, name: blockName } = block;\n\n\t\t// If the block already has an explicit block editing mode set,\n\t\t// don't override it.\n\t\tif ( state.blockEditingModes.has( clientId ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Disabled explicit block editing modes are inherited by children.\n\t\t// It's an expensive calculation, so only do it if there are disabled blocks.\n\t\tif ( hasDisabledBlocks ) {\n\t\t\t// Look through parents to find one with an explicit block editing mode.\n\t\t\tlet ancestorBlockEditingMode;\n\t\t\tlet parent = state.blocks.parents.get( clientId );\n\t\t\twhile ( parent !== undefined ) {\n\t\t\t\t// There's a chance we only just calculated this for the parent,\n\t\t\t\t// if so we can return that value for a faster lookup.\n\t\t\t\tif ( derivedBlockEditingModes.has( parent ) ) {\n\t\t\t\t\tancestorBlockEditingMode =\n\t\t\t\t\t\tderivedBlockEditingModes.get( parent );\n\t\t\t\t} else if ( state.blockEditingModes.has( parent ) ) {\n\t\t\t\t\t// Checking the explicit block editing mode will be slower,\n\t\t\t\t\t// as the block editing mode is more likely to be set on a\n\t\t\t\t\t// distant ancestor.\n\t\t\t\t\tancestorBlockEditingMode =\n\t\t\t\t\t\tstate.blockEditingModes.get( parent );\n\t\t\t\t}\n\t\t\t\tif ( ancestorBlockEditingMode ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tparent = state.blocks.parents.get( parent );\n\t\t\t}\n\n\t\t\t// If the ancestor block editing mode is disabled, it's inherited by the child.\n\t\t\tif ( ancestorBlockEditingMode === 'disabled' ) {\n\t\t\t\tderivedBlockEditingModes.set( clientId, 'disabled' );\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tif ( isZoomedOut || isNavMode ) {\n\t\t\t// If the root block is the section root set its editing mode to contentOnly.\n\t\t\tif ( clientId === sectionRootClientId ) {\n\t\t\t\tderivedBlockEditingModes.set( clientId, 'contentOnly' );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// There are no sections, so everything else is disabled.\n\t\t\tif ( ! sectionClientIds?.length ) {\n\t\t\t\tderivedBlockEditingModes.set( clientId, 'disabled' );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( sectionClientIds.includes( clientId ) ) {\n\t\t\t\tderivedBlockEditingModes.set( clientId, 'contentOnly' );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If zoomed out, all blocks that aren't sections or the section root are\n\t\t\t// disabled.\n\t\t\tif ( isZoomedOut ) {\n\t\t\t\tderivedBlockEditingModes.set( clientId, 'disabled' );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst isInSection = !! findParentInClientIdsList(\n\t\t\t\tstate,\n\t\t\t\tclientId,\n\t\t\t\tsectionClientIds\n\t\t\t);\n\t\t\tif ( ! isInSection ) {\n\t\t\t\tif ( clientId === '' ) {\n\t\t\t\t\tderivedBlockEditingModes.set( clientId, 'disabled' );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Allow selection of template parts outside of sections.\n\t\t\t\tif ( blockName === 'core/template-part' ) {\n\t\t\t\t\tderivedBlockEditingModes.set( clientId, 'contentOnly' );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst isInTemplatePart = !! findParentInClientIdsList(\n\t\t\t\t\tstate,\n\t\t\t\t\tclientId,\n\t\t\t\t\ttemplatePartClientIds\n\t\t\t\t);\n\t\t\t\t// Allow contentOnly blocks in template parts outside of sections\n\t\t\t\t// to be editable. Only disable blocks that don't fit this criteria.\n\t\t\t\tif ( ! isInTemplatePart && ! isContentBlock( blockName ) ) {\n\t\t\t\t\tderivedBlockEditingModes.set( clientId, 'disabled' );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Handle synced pattern content so the inner blocks of a synced pattern are\n\t\t\t// properly disabled.\n\t\t\tif ( syncedPatternClientIds.length ) {\n\t\t\t\tconst parentPatternClientId = findParentInClientIdsList(\n\t\t\t\t\tstate,\n\t\t\t\t\tclientId,\n\t\t\t\t\tsyncedPatternClientIds\n\t\t\t\t);\n\n\t\t\t\tif ( parentPatternClientId ) {\n\t\t\t\t\t// This is a pattern nested in another pattern, it should be disabled.\n\t\t\t\t\tif (\n\t\t\t\t\t\tfindParentInClientIdsList(\n\t\t\t\t\t\t\tstate,\n\t\t\t\t\t\t\tparentPatternClientId,\n\t\t\t\t\t\t\tsyncedPatternClientIds\n\t\t\t\t\t\t)\n\t\t\t\t\t) {\n\t\t\t\t\t\tderivedBlockEditingModes.set( clientId, 'disabled' );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hasBindings( block ) ) {\n\t\t\t\t\t\tderivedBlockEditingModes.set( clientId, 'contentOnly' );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Synced pattern content without a binding isn't editable\n\t\t\t\t\t// from the instance, the user has to edit the pattern source,\n\t\t\t\t\t// so return 'disabled'.\n\t\t\t\t\tderivedBlockEditingModes.set( clientId, 'disabled' );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( blockName && isContentBlock( blockName ) ) {\n\t\t\t\tderivedBlockEditingModes.set( clientId, 'contentOnly' );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tderivedBlockEditingModes.set( clientId, 'disabled' );\n\t\t\treturn;\n\t\t}\n\n\t\tif ( syncedPatternClientIds.length ) {\n\t\t\t// Synced pattern blocks (core/block).\n\t\t\tif ( syncedPatternClientIds.includes( clientId ) ) {\n\t\t\t\t// This is a pattern nested in another pattern, it should be disabled.\n\t\t\t\tif (\n\t\t\t\t\tfindParentInClientIdsList(\n\t\t\t\t\t\tstate,\n\t\t\t\t\t\tclientId,\n\t\t\t\t\t\tsyncedPatternClientIds\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\tderivedBlockEditingModes.set( clientId, 'disabled' );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Else do nothing, use the default block editing mode.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Inner blocks of synced patterns.\n\t\t\tconst parentPatternClientId = findParentInClientIdsList(\n\t\t\t\tstate,\n\t\t\t\tclientId,\n\t\t\t\tsyncedPatternClientIds\n\t\t\t);\n\t\t\tif ( parentPatternClientId ) {\n\t\t\t\t// This is a pattern nested in another pattern, it should be disabled.\n\t\t\t\tif (\n\t\t\t\t\tfindParentInClientIdsList(\n\t\t\t\t\t\tstate,\n\t\t\t\t\t\tparentPatternClientId,\n\t\t\t\t\t\tsyncedPatternClientIds\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\tderivedBlockEditingModes.set( clientId, 'disabled' );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif ( hasBindings( block ) ) {\n\t\t\t\t\tderivedBlockEditingModes.set( clientId, 'contentOnly' );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Synced pattern content without a binding isn't editable\n\t\t\t\t// from the instance, the user has to edit the pattern source,\n\t\t\t\t// so return 'disabled'.\n\t\t\t\tderivedBlockEditingModes.set( clientId, 'disabled' );\n\t\t\t}\n\t\t}\n\n\t\t// Handle `templateLock=contentOnly` blocks and unsynced patterns.\n\t\tif ( contentOnlyParents.length ) {\n\t\t\tconst hasContentOnlyParent = !! findParentInClientIdsList(\n\t\t\t\tstate,\n\t\t\t\tclientId,\n\t\t\t\tcontentOnlyParents\n\t\t\t);\n\t\t\tif ( hasContentOnlyParent ) {\n\t\t\t\tif ( isContentBlock( blockName ) ) {\n\t\t\t\t\tderivedBlockEditingModes.set( clientId, 'contentOnly' );\n\t\t\t\t} else {\n\t\t\t\t\tderivedBlockEditingModes.set( clientId, 'disabled' );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} );\n\n\treturn derivedBlockEditingModes;\n}\n\n/**\n * Updates the derived block editing modes based on added and removed blocks.\n *\n * This function handles the updating of block editing modes when blocks are added,\n * removed, or moved within the editor.\n *\n * It only returns a value when modifications are made to the block editing modes.\n *\n * @param {Object} options The options for updating derived block editing modes.\n * @param {Object} options.prevState The previous state object.\n * @param {Object} options.nextState The next state object.\n * @param {Array} [options.addedBlocks] An array of blocks that were added.\n * @param {Array} [options.removedClientIds] An array of client IDs of blocks that were removed.\n * @param {boolean} [options.isNavMode] Whether the navigation mode is active.\n * @return {Map|undefined} The updated derived block editing modes, or undefined if no changes were made.\n */\nfunction getDerivedBlockEditingModesUpdates( {\n\tprevState,\n\tnextState,\n\taddedBlocks,\n\tremovedClientIds,\n\tisNavMode = false,\n} ) {\n\tconst prevDerivedBlockEditingModes = isNavMode\n\t\t? prevState.derivedNavModeBlockEditingModes\n\t\t: prevState.derivedBlockEditingModes;\n\tlet nextDerivedBlockEditingModes;\n\n\t// Perform removals before additions to handle cases like the `MOVE_BLOCKS_TO_POSITION` action.\n\t// That action removes a set of clientIds, but adds the same blocks back in a different location.\n\t// If removals were performed after additions, those moved clientIds would be removed incorrectly.\n\tremovedClientIds?.forEach( ( clientId ) => {\n\t\t// The actions only receive parent block IDs for removal.\n\t\t// Recurse through the block tree to ensure all blocks are removed.\n\t\t// Specifically use the previous state, before the blocks were removed.\n\t\ttraverseBlockTree( prevState, clientId, ( block ) => {\n\t\t\tif ( prevDerivedBlockEditingModes.has( block.clientId ) ) {\n\t\t\t\tif ( ! nextDerivedBlockEditingModes ) {\n\t\t\t\t\tnextDerivedBlockEditingModes = new Map(\n\t\t\t\t\t\tprevDerivedBlockEditingModes\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tnextDerivedBlockEditingModes.delete( block.clientId );\n\t\t\t}\n\t\t} );\n\t} );\n\n\taddedBlocks?.forEach( ( addedBlock ) => {\n\t\ttraverseBlockTree( nextState, addedBlock.clientId, ( block ) => {\n\t\t\tconst updates = getDerivedBlockEditingModesForTree(\n\t\t\t\tnextState,\n\t\t\t\tisNavMode,\n\t\t\t\tblock.clientId\n\t\t\t);\n\n\t\t\tif ( updates.size ) {\n\t\t\t\tif ( ! nextDerivedBlockEditingModes ) {\n\t\t\t\t\tnextDerivedBlockEditingModes = new Map( [\n\t\t\t\t\t\t...( prevDerivedBlockEditingModes?.size\n\t\t\t\t\t\t\t? prevDerivedBlockEditingModes\n\t\t\t\t\t\t\t: [] ),\n\t\t\t\t\t\t...updates,\n\t\t\t\t\t] );\n\t\t\t\t} else {\n\t\t\t\t\tnextDerivedBlockEditingModes = new Map( [\n\t\t\t\t\t\t...( nextDerivedBlockEditingModes?.size\n\t\t\t\t\t\t\t? nextDerivedBlockEditingModes\n\t\t\t\t\t\t\t: [] ),\n\t\t\t\t\t\t...updates,\n\t\t\t\t\t] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t} );\n\n\treturn nextDerivedBlockEditingModes;\n}\n\n/**\n * Higher-order reducer that adds derived block editing modes to the state.\n *\n * This function wraps a reducer and enhances it to handle actions that affect\n * block editing modes. It updates the derivedBlockEditingModes in the state\n * based on various actions such as adding, removing, or moving blocks, or changing\n * the editor mode.\n *\n * @param {Function} reducer The original reducer function to be wrapped.\n * @return {Function} A new reducer function that includes derived block editing modes handling.\n */\nexport function withDerivedBlockEditingModes( reducer ) {\n\treturn ( state, action ) => {\n\t\tconst nextState = reducer( state, action );\n\n\t\t// An exception is needed here to still recompute the block editing modes when\n\t\t// the editor mode changes since the editor mode isn't stored within the\n\t\t// block editor state and changing it won't trigger an altered new state.\n\t\tif ( action.type !== 'SET_EDITOR_MODE' && nextState === state ) {\n\t\t\treturn state;\n\t\t}\n\n\t\tswitch ( action.type ) {\n\t\t\tcase 'REMOVE_BLOCKS': {\n\t\t\t\tconst nextDerivedBlockEditingModes =\n\t\t\t\t\tgetDerivedBlockEditingModesUpdates( {\n\t\t\t\t\t\tprevState: state,\n\t\t\t\t\t\tnextState,\n\t\t\t\t\t\tremovedClientIds: action.clientIds,\n\t\t\t\t\t\tisNavMode: false,\n\t\t\t\t\t} );\n\t\t\t\tconst nextDerivedNavModeBlockEditingModes =\n\t\t\t\t\tgetDerivedBlockEditingModesUpdates( {\n\t\t\t\t\t\tprevState: state,\n\t\t\t\t\t\tnextState,\n\t\t\t\t\t\tremovedClientIds: action.clientIds,\n\t\t\t\t\t\tisNavMode: true,\n\t\t\t\t\t} );\n\n\t\t\t\tif (\n\t\t\t\t\tnextDerivedBlockEditingModes ||\n\t\t\t\t\tnextDerivedNavModeBlockEditingModes\n\t\t\t\t) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...nextState,\n\t\t\t\t\t\tderivedBlockEditingModes:\n\t\t\t\t\t\t\tnextDerivedBlockEditingModes ??\n\t\t\t\t\t\t\tstate.derivedBlockEditingModes,\n\t\t\t\t\t\tderivedNavModeBlockEditingModes:\n\t\t\t\t\t\t\tnextDerivedNavModeBlockEditingModes ??\n\t\t\t\t\t\t\tstate.derivedNavModeBlockEditingModes,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'RECEIVE_BLOCKS':\n\t\t\tcase 'INSERT_BLOCKS': {\n\t\t\t\tconst nextDerivedBlockEditingModes =\n\t\t\t\t\tgetDerivedBlockEditingModesUpdates( {\n\t\t\t\t\t\tprevState: state,\n\t\t\t\t\t\tnextState,\n\t\t\t\t\t\taddedBlocks: action.blocks,\n\t\t\t\t\t\tisNavMode: false,\n\t\t\t\t\t} );\n\t\t\t\tconst nextDerivedNavModeBlockEditingModes =\n\t\t\t\t\tgetDerivedBlockEditingModesUpdates( {\n\t\t\t\t\t\tprevState: state,\n\t\t\t\t\t\tnextState,\n\t\t\t\t\t\taddedBlocks: action.blocks,\n\t\t\t\t\t\tisNavMode: true,\n\t\t\t\t\t} );\n\n\t\t\t\tif (\n\t\t\t\t\tnextDerivedBlockEditingModes ||\n\t\t\t\t\tnextDerivedNavModeBlockEditingModes\n\t\t\t\t) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...nextState,\n\t\t\t\t\t\tderivedBlockEditingModes:\n\t\t\t\t\t\t\tnextDerivedBlockEditingModes ??\n\t\t\t\t\t\t\tstate.derivedBlockEditingModes,\n\t\t\t\t\t\tderivedNavModeBlockEditingModes:\n\t\t\t\t\t\t\tnextDerivedNavModeBlockEditingModes ??\n\t\t\t\t\t\t\tstate.derivedNavModeBlockEditingModes,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'UPDATE_BLOCK_ATTRIBUTES': {\n\t\t\t\t// Handle unsynced patterns which indicate their contentOnly-ness via\n\t\t\t\t// the `attributes.metadata.patternName` property.\n\t\t\t\t// Check when this is added or removed and update blockEditingModes.\n\t\t\t\tconst addedBlocks = [];\n\t\t\t\tconst removedClientIds = [];\n\n\t\t\t\tfor ( const clientId of action?.clientIds ) {\n\t\t\t\t\tconst attributes = action.options?.uniqueByBlock\n\t\t\t\t\t\t? action.attributes[ clientId ]\n\t\t\t\t\t\t: action.attributes;\n\n\t\t\t\t\tif ( ! attributes ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (\n\t\t\t\t\t\t// patternName is switching from falsy to truthy, indicating\n\t\t\t\t\t\t// this block is becoming an unsynced pattern.\n\t\t\t\t\t\tattributes.metadata?.patternName &&\n\t\t\t\t\t\t! state.blocks.attributes.get( clientId )?.metadata\n\t\t\t\t\t\t\t?.patternName\n\t\t\t\t\t) {\n\t\t\t\t\t\taddedBlocks.push(\n\t\t\t\t\t\t\tnextState.blocks.tree.get( clientId )\n\t\t\t\t\t\t);\n\t\t\t\t\t} else if (\n\t\t\t\t\t\t// patternName is switching from truthy to falsy, this block is becoming\n\t\t\t\t\t\t// a regular block but was an unsynced pattern.\n\t\t\t\t\t\t// Check that `metadata` is part of the included attributes, as\n\t\t\t\t\t\t// `updateBlockAttributes` merges attributes, if it isn't present\n\t\t\t\t\t\t// the previous `metadata` would be retained.\n\t\t\t\t\t\tattributes.metadata &&\n\t\t\t\t\t\t! attributes.metadata?.patternName &&\n\t\t\t\t\t\tstate.blocks.attributes.get( clientId )?.metadata\n\t\t\t\t\t\t\t?.patternName\n\t\t\t\t\t) {\n\t\t\t\t\t\t// Include it in 'removedClientIds'.\n\t\t\t\t\t\tremovedClientIds.push( clientId );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ( ! addedBlocks?.length && ! removedClientIds?.length ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tconst nextDerivedBlockEditingModes =\n\t\t\t\t\tgetDerivedBlockEditingModesUpdates( {\n\t\t\t\t\t\tprevState: state,\n\t\t\t\t\t\tnextState,\n\t\t\t\t\t\taddedBlocks,\n\t\t\t\t\t\tremovedClientIds,\n\t\t\t\t\t\tisNavMode: false,\n\t\t\t\t\t} );\n\t\t\t\tconst nextDerivedNavModeBlockEditingModes =\n\t\t\t\t\tgetDerivedBlockEditingModesUpdates( {\n\t\t\t\t\t\tprevState: state,\n\t\t\t\t\t\tnextState,\n\t\t\t\t\t\taddedBlocks,\n\t\t\t\t\t\tremovedClientIds,\n\t\t\t\t\t\tisNavMode: true,\n\t\t\t\t\t} );\n\n\t\t\t\tif (\n\t\t\t\t\tnextDerivedBlockEditingModes ||\n\t\t\t\t\tnextDerivedNavModeBlockEditingModes\n\t\t\t\t) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...nextState,\n\t\t\t\t\t\tderivedBlockEditingModes:\n\t\t\t\t\t\t\tnextDerivedBlockEditingModes ??\n\t\t\t\t\t\t\tstate.derivedBlockEditingModes,\n\t\t\t\t\t\tderivedNavModeBlockEditingModes:\n\t\t\t\t\t\t\tnextDerivedNavModeBlockEditingModes ??\n\t\t\t\t\t\t\tstate.derivedNavModeBlockEditingModes,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'UPDATE_BLOCK_LIST_SETTINGS': {\n\t\t\t\t// Handle the addition and removal of contentOnly template locked blocks.\n\t\t\t\tconst addedBlocks = [];\n\t\t\t\tconst removedClientIds = [];\n\n\t\t\t\tconst updates =\n\t\t\t\t\ttypeof action.clientId === 'string'\n\t\t\t\t\t\t? { [ action.clientId ]: action.settings }\n\t\t\t\t\t\t: action.clientId;\n\n\t\t\t\tfor ( const clientId in updates ) {\n\t\t\t\t\tconst isNewContentOnlyBlock =\n\t\t\t\t\t\tstate.blockListSettings[ clientId ]?.templateLock !==\n\t\t\t\t\t\t\t'contentOnly' &&\n\t\t\t\t\t\tnextState.blockListSettings[ clientId ]\n\t\t\t\t\t\t\t?.templateLock === 'contentOnly';\n\n\t\t\t\t\tconst wasContentOnlyBlock =\n\t\t\t\t\t\tstate.blockListSettings[ clientId ]?.templateLock ===\n\t\t\t\t\t\t\t'contentOnly' &&\n\t\t\t\t\t\tnextState.blockListSettings[ clientId ]\n\t\t\t\t\t\t\t?.templateLock !== 'contentOnly';\n\n\t\t\t\t\tif ( isNewContentOnlyBlock ) {\n\t\t\t\t\t\taddedBlocks.push(\n\t\t\t\t\t\t\tnextState.blocks.tree.get( clientId )\n\t\t\t\t\t\t);\n\t\t\t\t\t} else if ( wasContentOnlyBlock ) {\n\t\t\t\t\t\tremovedClientIds.push( clientId );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ( ! addedBlocks.length && ! removedClientIds.length ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tconst nextDerivedBlockEditingModes =\n\t\t\t\t\tgetDerivedBlockEditingModesUpdates( {\n\t\t\t\t\t\tprevState: state,\n\t\t\t\t\t\tnextState,\n\t\t\t\t\t\taddedBlocks,\n\t\t\t\t\t\tremovedClientIds,\n\t\t\t\t\t\tisNavMode: false,\n\t\t\t\t\t} );\n\t\t\t\tconst nextDerivedNavModeBlockEditingModes =\n\t\t\t\t\tgetDerivedBlockEditingModesUpdates( {\n\t\t\t\t\t\tprevState: state,\n\t\t\t\t\t\tnextState,\n\t\t\t\t\t\taddedBlocks,\n\t\t\t\t\t\tremovedClientIds,\n\t\t\t\t\t\tisNavMode: true,\n\t\t\t\t\t} );\n\n\t\t\t\tif (\n\t\t\t\t\tnextDerivedBlockEditingModes ||\n\t\t\t\t\tnextDerivedNavModeBlockEditingModes\n\t\t\t\t) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...nextState,\n\t\t\t\t\t\tderivedBlockEditingModes:\n\t\t\t\t\t\t\tnextDerivedBlockEditingModes ??\n\t\t\t\t\t\t\tstate.derivedBlockEditingModes,\n\t\t\t\t\t\tderivedNavModeBlockEditingModes:\n\t\t\t\t\t\t\tnextDerivedNavModeBlockEditingModes ??\n\t\t\t\t\t\t\tstate.derivedNavModeBlockEditingModes,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'SET_BLOCK_EDITING_MODE':\n\t\t\tcase 'UNSET_BLOCK_EDITING_MODE':\n\t\t\tcase 'SET_HAS_CONTROLLED_INNER_BLOCKS': {\n\t\t\t\tconst updatedBlock = getBlockTreeBlock(\n\t\t\t\t\tnextState,\n\t\t\t\t\taction.clientId\n\t\t\t\t);\n\n\t\t\t\t// The block might have been removed in which case it'll be\n\t\t\t\t// handled by the `REMOVE_BLOCKS` action.\n\t\t\t\tif ( ! updatedBlock ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tconst nextDerivedBlockEditingModes =\n\t\t\t\t\tgetDerivedBlockEditingModesUpdates( {\n\t\t\t\t\t\tprevState: state,\n\t\t\t\t\t\tnextState,\n\t\t\t\t\t\tremovedClientIds: [ action.clientId ],\n\t\t\t\t\t\taddedBlocks: [ updatedBlock ],\n\t\t\t\t\t\tisNavMode: false,\n\t\t\t\t\t} );\n\t\t\t\tconst nextDerivedNavModeBlockEditingModes =\n\t\t\t\t\tgetDerivedBlockEditingModesUpdates( {\n\t\t\t\t\t\tprevState: state,\n\t\t\t\t\t\tnextState,\n\t\t\t\t\t\tremovedClientIds: [ action.clientId ],\n\t\t\t\t\t\taddedBlocks: [ updatedBlock ],\n\t\t\t\t\t\tisNavMode: true,\n\t\t\t\t\t} );\n\n\t\t\t\tif (\n\t\t\t\t\tnextDerivedBlockEditingModes ||\n\t\t\t\t\tnextDerivedNavModeBlockEditingModes\n\t\t\t\t) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...nextState,\n\t\t\t\t\t\tderivedBlockEditingModes:\n\t\t\t\t\t\t\tnextDerivedBlockEditingModes ??\n\t\t\t\t\t\t\tstate.derivedBlockEditingModes,\n\t\t\t\t\t\tderivedNavModeBlockEditingModes:\n\t\t\t\t\t\t\tnextDerivedNavModeBlockEditingModes ??\n\t\t\t\t\t\t\tstate.derivedNavModeBlockEditingModes,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'REPLACE_BLOCKS': {\n\t\t\t\tconst nextDerivedBlockEditingModes =\n\t\t\t\t\tgetDerivedBlockEditingModesUpdates( {\n\t\t\t\t\t\tprevState: state,\n\t\t\t\t\t\tnextState,\n\t\t\t\t\t\taddedBlocks: action.blocks,\n\t\t\t\t\t\tremovedClientIds: action.clientIds,\n\t\t\t\t\t\tisNavMode: false,\n\t\t\t\t\t} );\n\t\t\t\tconst nextDerivedNavModeBlockEditingModes =\n\t\t\t\t\tgetDerivedBlockEditingModesUpdates( {\n\t\t\t\t\t\tprevState: state,\n\t\t\t\t\t\tnextState,\n\t\t\t\t\t\taddedBlocks: action.blocks,\n\t\t\t\t\t\tremovedClientIds: action.clientIds,\n\t\t\t\t\t\tisNavMode: true,\n\t\t\t\t\t} );\n\n\t\t\t\tif (\n\t\t\t\t\tnextDerivedBlockEditingModes ||\n\t\t\t\t\tnextDerivedNavModeBlockEditingModes\n\t\t\t\t) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...nextState,\n\t\t\t\t\t\tderivedBlockEditingModes:\n\t\t\t\t\t\t\tnextDerivedBlockEditingModes ??\n\t\t\t\t\t\t\tstate.derivedBlockEditingModes,\n\t\t\t\t\t\tderivedNavModeBlockEditingModes:\n\t\t\t\t\t\t\tnextDerivedNavModeBlockEditingModes ??\n\t\t\t\t\t\t\tstate.derivedNavModeBlockEditingModes,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'REPLACE_INNER_BLOCKS': {\n\t\t\t\t// Get the clientIds of the blocks that are being replaced\n\t\t\t\t// from the old state, before they were removed.\n\t\t\t\tconst removedClientIds = state.blocks.order.get(\n\t\t\t\t\taction.rootClientId\n\t\t\t\t);\n\t\t\t\tconst nextDerivedBlockEditingModes =\n\t\t\t\t\tgetDerivedBlockEditingModesUpdates( {\n\t\t\t\t\t\tprevState: state,\n\t\t\t\t\t\tnextState,\n\t\t\t\t\t\taddedBlocks: action.blocks,\n\t\t\t\t\t\tremovedClientIds,\n\t\t\t\t\t\tisNavMode: false,\n\t\t\t\t\t} );\n\t\t\t\tconst nextDerivedNavModeBlockEditingModes =\n\t\t\t\t\tgetDerivedBlockEditingModesUpdates( {\n\t\t\t\t\t\tprevState: state,\n\t\t\t\t\t\tnextState,\n\t\t\t\t\t\taddedBlocks: action.blocks,\n\t\t\t\t\t\tremovedClientIds,\n\t\t\t\t\t\tisNavMode: true,\n\t\t\t\t\t} );\n\n\t\t\t\tif (\n\t\t\t\t\tnextDerivedBlockEditingModes ||\n\t\t\t\t\tnextDerivedNavModeBlockEditingModes\n\t\t\t\t) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...nextState,\n\t\t\t\t\t\tderivedBlockEditingModes:\n\t\t\t\t\t\t\tnextDerivedBlockEditingModes ??\n\t\t\t\t\t\t\tstate.derivedBlockEditingModes,\n\t\t\t\t\t\tderivedNavModeBlockEditingModes:\n\t\t\t\t\t\t\tnextDerivedNavModeBlockEditingModes ??\n\t\t\t\t\t\t\tstate.derivedNavModeBlockEditingModes,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'MOVE_BLOCKS_TO_POSITION': {\n\t\t\t\tconst addedBlocks = action.clientIds.map( ( clientId ) => {\n\t\t\t\t\treturn nextState.blocks.byClientId.get( clientId );\n\t\t\t\t} );\n\t\t\t\tconst nextDerivedBlockEditingModes =\n\t\t\t\t\tgetDerivedBlockEditingModesUpdates( {\n\t\t\t\t\t\tprevState: state,\n\t\t\t\t\t\tnextState,\n\t\t\t\t\t\taddedBlocks,\n\t\t\t\t\t\tremovedClientIds: action.clientIds,\n\t\t\t\t\t\tisNavMode: false,\n\t\t\t\t\t} );\n\t\t\t\tconst nextDerivedNavModeBlockEditingModes =\n\t\t\t\t\tgetDerivedBlockEditingModesUpdates( {\n\t\t\t\t\t\tprevState: state,\n\t\t\t\t\t\tnextState,\n\t\t\t\t\t\taddedBlocks,\n\t\t\t\t\t\tremovedClientIds: action.clientIds,\n\t\t\t\t\t\tisNavMode: true,\n\t\t\t\t\t} );\n\n\t\t\t\tif (\n\t\t\t\t\tnextDerivedBlockEditingModes ||\n\t\t\t\t\tnextDerivedNavModeBlockEditingModes\n\t\t\t\t) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...nextState,\n\t\t\t\t\t\tderivedBlockEditingModes:\n\t\t\t\t\t\t\tnextDerivedBlockEditingModes ??\n\t\t\t\t\t\t\tstate.derivedBlockEditingModes,\n\t\t\t\t\t\tderivedNavModeBlockEditingModes:\n\t\t\t\t\t\t\tnextDerivedNavModeBlockEditingModes ??\n\t\t\t\t\t\t\tstate.derivedNavModeBlockEditingModes,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'UPDATE_SETTINGS': {\n\t\t\t\t// Recompute the entire tree if the section root changes.\n\t\t\t\tif (\n\t\t\t\t\tstate?.settings?.[ sectionRootClientIdKey ] !==\n\t\t\t\t\tnextState?.settings?.[ sectionRootClientIdKey ]\n\t\t\t\t) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...nextState,\n\t\t\t\t\t\tderivedBlockEditingModes:\n\t\t\t\t\t\t\tgetDerivedBlockEditingModesForTree(\n\t\t\t\t\t\t\t\tnextState,\n\t\t\t\t\t\t\t\tfalse /* Nav mode off */\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\tderivedNavModeBlockEditingModes:\n\t\t\t\t\t\t\tgetDerivedBlockEditingModesForTree(\n\t\t\t\t\t\t\t\tnextState,\n\t\t\t\t\t\t\t\ttrue /* Nav mode on */\n\t\t\t\t\t\t\t),\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'RESET_BLOCKS':\n\t\t\tcase 'SET_EDITOR_MODE':\n\t\t\tcase 'RESET_ZOOM_LEVEL':\n\t\t\tcase 'SET_ZOOM_LEVEL': {\n\t\t\t\t// Recompute the entire tree if the editor mode or zoom level changes,\n\t\t\t\t// or if all the blocks are reset.\n\t\t\t\treturn {\n\t\t\t\t\t...nextState,\n\t\t\t\t\tderivedBlockEditingModes:\n\t\t\t\t\t\tgetDerivedBlockEditingModesForTree(\n\t\t\t\t\t\t\tnextState,\n\t\t\t\t\t\t\tfalse /* Nav mode off */\n\t\t\t\t\t\t),\n\t\t\t\t\tderivedNavModeBlockEditingModes:\n\t\t\t\t\t\tgetDerivedBlockEditingModesForTree(\n\t\t\t\t\t\t\tnextState,\n\t\t\t\t\t\t\ttrue /* Nav mode on */\n\t\t\t\t\t\t),\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\t// If there's no change, the derivedBlockEditingModes from the previous\n\t\t// state need to be preserved.\n\t\tnextState.derivedBlockEditingModes =\n\t\t\tstate?.derivedBlockEditingModes ?? new Map();\n\t\tnextState.derivedNavModeBlockEditingModes =\n\t\t\tstate?.derivedNavModeBlockEditingModes ?? new Map();\n\n\t\treturn nextState;\n\t};\n}\n\nfunction withAutomaticChangeReset( reducer ) {\n\treturn ( state, action ) => {\n\t\tconst nextState = reducer( state, action );\n\n\t\tif ( ! state ) {\n\t\t\treturn nextState;\n\t\t}\n\n\t\t// Take over the last value without creating a new reference.\n\t\tnextState.automaticChangeStatus = state.automaticChangeStatus;\n\n\t\tif ( action.type === 'MARK_AUTOMATIC_CHANGE' ) {\n\t\t\treturn {\n\t\t\t\t...nextState,\n\t\t\t\tautomaticChangeStatus: 'pending',\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\taction.type === 'MARK_AUTOMATIC_CHANGE_FINAL' &&\n\t\t\tstate.automaticChangeStatus === 'pending'\n\t\t) {\n\t\t\treturn {\n\t\t\t\t...nextState,\n\t\t\t\tautomaticChangeStatus: 'final',\n\t\t\t};\n\t\t}\n\n\t\t// If there's a change that doesn't affect blocks or selection, maintain\n\t\t// the current status.\n\t\tif (\n\t\t\tnextState.blocks === state.blocks &&\n\t\t\tnextState.selection === state.selection\n\t\t) {\n\t\t\treturn nextState;\n\t\t}\n\n\t\t// As long as the state is not final, ignore any selection changes.\n\t\tif (\n\t\t\tnextState.automaticChangeStatus !== 'final' &&\n\t\t\tnextState.selection !== state.selection\n\t\t) {\n\t\t\treturn nextState;\n\t\t}\n\n\t\t// Reset the status if blocks change or selection changes (when status is final).\n\t\treturn {\n\t\t\t...nextState,\n\t\t\tautomaticChangeStatus: undefined,\n\t\t};\n\t};\n}\n\nexport default pipe(\n\twithDerivedBlockEditingModes,\n\twithAutomaticChangeReset\n)( combinedReducers );\n"],"mappings":"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","ignoreList":[]}
|