@wordpress/block-editor 15.5.1-next.47f435fc9.0 → 15.5.1-next.ff1cebbba.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.
@@ -40,8 +40,8 @@ var import_element = require("@wordpress/element");
40
40
  var import_block_context = __toESM(require("../block-context"));
41
41
  var import_is_url_like = __toESM(require("../link-control/is-url-like"));
42
42
  var import_block_bindings = require("../../utils/block-bindings");
43
- var import_store = require("../../store");
44
43
  var import_lock_unlock = require("../../lock-unlock");
44
+ var import_private_block_context = require("../block-list/private-block-context");
45
45
  const DEFAULT_BLOCK_CONTEXT = {};
46
46
  const Edit = (props) => {
47
47
  const { name } = props;
@@ -53,7 +53,6 @@ const Edit = (props) => {
53
53
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Component, { ...props });
54
54
  };
55
55
  const EditWithFilters = (0, import_components.withFilters)("editor.BlockEdit")(Edit);
56
- const EMPTY_ARRAY = [];
57
56
  const EditWithGeneratedProps = (props) => {
58
57
  const { name, clientId, attributes, setAttributes } = props;
59
58
  const registry = (0, import_data.useRegistry)();
@@ -63,13 +62,7 @@ const EditWithGeneratedProps = (props) => {
63
62
  (select) => (0, import_lock_unlock.unlock)(select(import_blocks.store)).getAllBlockBindingsSources(),
64
63
  []
65
64
  );
66
- const bindableAttributes = (0, import_data.useSelect)(
67
- (select) => {
68
- const { __experimentalBlockBindingsSupportedAttributes } = select(import_store.store).getSettings();
69
- return __experimentalBlockBindingsSupportedAttributes?.[name] || EMPTY_ARRAY;
70
- },
71
- [name]
72
- );
65
+ const { bindableAttributes } = (0, import_element.useContext)(import_private_block_context.PrivateBlockContext);
73
66
  const { blockBindings, context, hasPatternOverrides } = (0, import_element.useMemo)(() => {
74
67
  const computedContext = blockType?.usesContext ? Object.fromEntries(
75
68
  Object.entries(blockContext).filter(
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/block-edit/edit.js"],
4
- "sourcesContent": ["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tgetBlockDefaultClassName,\n\tgetBlockType,\n\thasBlockSupport,\n\tstore as blocksStore,\n} from '@wordpress/blocks';\nimport { withFilters } from '@wordpress/components';\nimport { useRegistry, useSelect } from '@wordpress/data';\nimport { useCallback, useContext, useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport BlockContext from '../block-context';\nimport isURLLike from '../link-control/is-url-like';\nimport {\n\thasPatternOverridesDefaultBinding,\n\treplacePatternOverridesDefaultBinding,\n} from '../../utils/block-bindings';\nimport { store as blockEditorStore } from '../../store';\nimport { unlock } from '../../lock-unlock';\n\n/**\n * Default value used for blocks which do not define their own context needs,\n * used to guarantee that a block's `context` prop will always be an object. It\n * is assigned as a constant since it is always expected to be an empty object,\n * and in order to avoid unnecessary React reconciliations of a changing object.\n *\n * @type {{}}\n */\nconst DEFAULT_BLOCK_CONTEXT = {};\n\nconst Edit = ( props ) => {\n\tconst { name } = props;\n\tconst blockType = getBlockType( name );\n\n\tif ( ! blockType ) {\n\t\treturn null;\n\t}\n\n\t// `edit` and `save` are functions or components describing the markup\n\t// with which a block is displayed. If `blockType` is valid, assign\n\t// them preferentially as the render value for the block.\n\tconst Component = blockType.edit || blockType.save;\n\n\treturn <Component { ...props } />;\n};\n\nconst EditWithFilters = withFilters( 'editor.BlockEdit' )( Edit );\n\nconst EMPTY_ARRAY = [];\n\nconst EditWithGeneratedProps = ( props ) => {\n\tconst { name, clientId, attributes, setAttributes } = props;\n\tconst registry = useRegistry();\n\tconst blockType = getBlockType( name );\n\tconst blockContext = useContext( BlockContext );\n\tconst registeredSources = useSelect(\n\t\t( select ) =>\n\t\t\tunlock( select( blocksStore ) ).getAllBlockBindingsSources(),\n\t\t[]\n\t);\n\tconst bindableAttributes = useSelect(\n\t\t( select ) => {\n\t\t\tconst { __experimentalBlockBindingsSupportedAttributes } =\n\t\t\t\tselect( blockEditorStore ).getSettings();\n\t\t\treturn (\n\t\t\t\t__experimentalBlockBindingsSupportedAttributes?.[ name ] ||\n\t\t\t\tEMPTY_ARRAY\n\t\t\t);\n\t\t},\n\t\t[ name ]\n\t);\n\n\tconst { blockBindings, context, hasPatternOverrides } = useMemo( () => {\n\t\t// Assign context values using the block type's declared context needs.\n\t\tconst computedContext = blockType?.usesContext\n\t\t\t? Object.fromEntries(\n\t\t\t\t\tObject.entries( blockContext ).filter( ( [ key ] ) =>\n\t\t\t\t\t\tblockType.usesContext.includes( key )\n\t\t\t\t\t)\n\t\t\t )\n\t\t\t: DEFAULT_BLOCK_CONTEXT;\n\t\t// Add context requested by Block Bindings sources.\n\t\tif ( attributes?.metadata?.bindings ) {\n\t\t\tObject.values( attributes?.metadata?.bindings || {} ).forEach(\n\t\t\t\t( binding ) => {\n\t\t\t\t\tregisteredSources[ binding?.source ]?.usesContext?.forEach(\n\t\t\t\t\t\t( key ) => {\n\t\t\t\t\t\t\tcomputedContext[ key ] = blockContext[ key ];\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t\treturn {\n\t\t\tblockBindings: replacePatternOverridesDefaultBinding(\n\t\t\t\tattributes?.metadata?.bindings,\n\t\t\t\tbindableAttributes\n\t\t\t),\n\t\t\tcontext: computedContext,\n\t\t\thasPatternOverrides: hasPatternOverridesDefaultBinding(\n\t\t\t\tattributes?.metadata?.bindings\n\t\t\t),\n\t\t};\n\t}, [\n\t\tname,\n\t\tblockType?.usesContext,\n\t\tblockContext,\n\t\tattributes?.metadata?.bindings,\n\t\tregisteredSources,\n\t] );\n\n\tconst computedAttributes = useSelect(\n\t\t( select ) => {\n\t\t\tif ( ! blockBindings ) {\n\t\t\t\treturn attributes;\n\t\t\t}\n\n\t\t\tconst attributesFromSources = {};\n\t\t\tconst blockBindingsBySource = new Map();\n\n\t\t\tfor ( const [ attributeName, binding ] of Object.entries(\n\t\t\t\tblockBindings\n\t\t\t) ) {\n\t\t\t\tconst { source: sourceName, args: sourceArgs } = binding;\n\t\t\t\tconst source = registeredSources[ sourceName ];\n\t\t\t\tif (\n\t\t\t\t\t! source ||\n\t\t\t\t\t! bindableAttributes.includes( attributeName )\n\t\t\t\t) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tblockBindingsBySource.set( source, {\n\t\t\t\t\t...blockBindingsBySource.get( source ),\n\t\t\t\t\t[ attributeName ]: {\n\t\t\t\t\t\targs: sourceArgs,\n\t\t\t\t\t},\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tif ( blockBindingsBySource.size ) {\n\t\t\t\tfor ( const [ source, bindings ] of blockBindingsBySource ) {\n\t\t\t\t\t// Get values in batch if the source supports it.\n\t\t\t\t\tlet values = {};\n\t\t\t\t\tif ( ! source.getValues ) {\n\t\t\t\t\t\tObject.keys( bindings ).forEach( ( attr ) => {\n\t\t\t\t\t\t\t// Default to the the source label when `getValues` doesn't exist.\n\t\t\t\t\t\t\tvalues[ attr ] = source.label;\n\t\t\t\t\t\t} );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvalues = source.getValues( {\n\t\t\t\t\t\t\tselect,\n\t\t\t\t\t\t\tcontext,\n\t\t\t\t\t\t\tclientId,\n\t\t\t\t\t\t\tbindings,\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t\tfor ( const [ attributeName, value ] of Object.entries(\n\t\t\t\t\t\tvalues\n\t\t\t\t\t) ) {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tattributeName === 'url' &&\n\t\t\t\t\t\t\t( ! value || ! isURLLike( value ) )\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t// Return null if value is not a valid URL.\n\t\t\t\t\t\t\tattributesFromSources[ attributeName ] = null;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tattributesFromSources[ attributeName ] = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\t...attributes,\n\t\t\t\t...attributesFromSources,\n\t\t\t};\n\t\t},\n\t\t[\n\t\t\tattributes,\n\t\t\tbindableAttributes,\n\t\t\tblockBindings,\n\t\t\tclientId,\n\t\t\tcontext,\n\t\t\tname,\n\t\t\tregisteredSources,\n\t\t]\n\t);\n\n\tconst setBoundAttributes = useCallback(\n\t\t( nextAttributes ) => {\n\t\t\tif ( ! blockBindings ) {\n\t\t\t\tsetAttributes( nextAttributes );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tregistry.batch( () => {\n\t\t\t\tconst keptAttributes = { ...nextAttributes };\n\t\t\t\tconst blockBindingsBySource = new Map();\n\n\t\t\t\t// Loop only over the updated attributes to avoid modifying the bound ones that haven't changed.\n\t\t\t\tfor ( const [ attributeName, newValue ] of Object.entries(\n\t\t\t\t\tkeptAttributes\n\t\t\t\t) ) {\n\t\t\t\t\tif (\n\t\t\t\t\t\t! blockBindings[ attributeName ] ||\n\t\t\t\t\t\t! bindableAttributes.includes( attributeName )\n\t\t\t\t\t) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst binding = blockBindings[ attributeName ];\n\t\t\t\t\tconst source = registeredSources[ binding?.source ];\n\t\t\t\t\tif ( ! source?.setValues ) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tblockBindingsBySource.set( source, {\n\t\t\t\t\t\t...blockBindingsBySource.get( source ),\n\t\t\t\t\t\t[ attributeName ]: {\n\t\t\t\t\t\t\targs: binding.args,\n\t\t\t\t\t\t\tnewValue,\n\t\t\t\t\t\t},\n\t\t\t\t\t} );\n\t\t\t\t\tdelete keptAttributes[ attributeName ];\n\t\t\t\t}\n\n\t\t\t\tif ( blockBindingsBySource.size ) {\n\t\t\t\t\tfor ( const [\n\t\t\t\t\t\tsource,\n\t\t\t\t\t\tbindings,\n\t\t\t\t\t] of blockBindingsBySource ) {\n\t\t\t\t\t\tsource.setValues( {\n\t\t\t\t\t\t\tselect: registry.select,\n\t\t\t\t\t\t\tdispatch: registry.dispatch,\n\t\t\t\t\t\t\tcontext,\n\t\t\t\t\t\t\tclientId,\n\t\t\t\t\t\t\tbindings,\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst hasParentPattern = !! context[ 'pattern/overrides' ];\n\n\t\t\t\tif (\n\t\t\t\t\t// Don't update non-connected attributes if the block is using pattern overrides\n\t\t\t\t\t// and the editing is happening while overriding the pattern (not editing the original).\n\t\t\t\t\t! ( hasPatternOverrides && hasParentPattern ) &&\n\t\t\t\t\tObject.keys( keptAttributes ).length\n\t\t\t\t) {\n\t\t\t\t\t// Don't update caption and href until they are supported.\n\t\t\t\t\tif ( hasPatternOverrides ) {\n\t\t\t\t\t\tdelete keptAttributes.caption;\n\t\t\t\t\t\tdelete keptAttributes.href;\n\t\t\t\t\t}\n\t\t\t\t\tsetAttributes( keptAttributes );\n\t\t\t\t}\n\t\t\t} );\n\t\t},\n\t\t[\n\t\t\tbindableAttributes,\n\t\t\tblockBindings,\n\t\t\tclientId,\n\t\t\tcontext,\n\t\t\thasPatternOverrides,\n\t\t\tsetAttributes,\n\t\t\tregisteredSources,\n\t\t\tname,\n\t\t\tregistry,\n\t\t]\n\t);\n\n\tif ( ! blockType ) {\n\t\treturn null;\n\t}\n\n\tif ( blockType.apiVersion > 1 ) {\n\t\treturn (\n\t\t\t<EditWithFilters\n\t\t\t\t{ ...props }\n\t\t\t\tattributes={ computedAttributes }\n\t\t\t\tcontext={ context }\n\t\t\t\tsetAttributes={ setBoundAttributes }\n\t\t\t/>\n\t\t);\n\t}\n\n\t// Generate a class name for the block's editable form.\n\tconst generatedClassName = hasBlockSupport( blockType, 'className', true )\n\t\t? getBlockDefaultClassName( name )\n\t\t: null;\n\tconst className = clsx(\n\t\tgeneratedClassName,\n\t\tattributes?.className,\n\t\tprops.className\n\t);\n\n\treturn (\n\t\t<EditWithFilters\n\t\t\t{ ...props }\n\t\t\tattributes={ computedAttributes }\n\t\t\tclassName={ className }\n\t\t\tcontext={ context }\n\t\t\tsetAttributes={ setBoundAttributes }\n\t\t/>\n\t);\n};\n\nexport default EditWithGeneratedProps;\n"],
5
- "mappings": "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",
6
- "names": ["BlockContext", "blocksStore", "blockEditorStore", "isURLLike", "clsx"]
4
+ "sourcesContent": ["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tgetBlockDefaultClassName,\n\tgetBlockType,\n\thasBlockSupport,\n\tstore as blocksStore,\n} from '@wordpress/blocks';\nimport { withFilters } from '@wordpress/components';\nimport { useRegistry, useSelect } from '@wordpress/data';\nimport { useCallback, useContext, useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport BlockContext from '../block-context';\nimport isURLLike from '../link-control/is-url-like';\nimport {\n\thasPatternOverridesDefaultBinding,\n\treplacePatternOverridesDefaultBinding,\n} from '../../utils/block-bindings';\nimport { unlock } from '../../lock-unlock';\nimport { PrivateBlockContext } from '../block-list/private-block-context';\n\n/**\n * Default value used for blocks which do not define their own context needs,\n * used to guarantee that a block's `context` prop will always be an object. It\n * is assigned as a constant since it is always expected to be an empty object,\n * and in order to avoid unnecessary React reconciliations of a changing object.\n *\n * @type {{}}\n */\nconst DEFAULT_BLOCK_CONTEXT = {};\n\nconst Edit = ( props ) => {\n\tconst { name } = props;\n\tconst blockType = getBlockType( name );\n\n\tif ( ! blockType ) {\n\t\treturn null;\n\t}\n\n\t// `edit` and `save` are functions or components describing the markup\n\t// with which a block is displayed. If `blockType` is valid, assign\n\t// them preferentially as the render value for the block.\n\tconst Component = blockType.edit || blockType.save;\n\n\treturn <Component { ...props } />;\n};\n\nconst EditWithFilters = withFilters( 'editor.BlockEdit' )( Edit );\n\nconst EditWithGeneratedProps = ( props ) => {\n\tconst { name, clientId, attributes, setAttributes } = props;\n\tconst registry = useRegistry();\n\tconst blockType = getBlockType( name );\n\tconst blockContext = useContext( BlockContext );\n\tconst registeredSources = useSelect(\n\t\t( select ) =>\n\t\t\tunlock( select( blocksStore ) ).getAllBlockBindingsSources(),\n\t\t[]\n\t);\n\tconst { bindableAttributes } = useContext( PrivateBlockContext );\n\n\tconst { blockBindings, context, hasPatternOverrides } = useMemo( () => {\n\t\t// Assign context values using the block type's declared context needs.\n\t\tconst computedContext = blockType?.usesContext\n\t\t\t? Object.fromEntries(\n\t\t\t\t\tObject.entries( blockContext ).filter( ( [ key ] ) =>\n\t\t\t\t\t\tblockType.usesContext.includes( key )\n\t\t\t\t\t)\n\t\t\t )\n\t\t\t: DEFAULT_BLOCK_CONTEXT;\n\t\t// Add context requested by Block Bindings sources.\n\t\tif ( attributes?.metadata?.bindings ) {\n\t\t\tObject.values( attributes?.metadata?.bindings || {} ).forEach(\n\t\t\t\t( binding ) => {\n\t\t\t\t\tregisteredSources[ binding?.source ]?.usesContext?.forEach(\n\t\t\t\t\t\t( key ) => {\n\t\t\t\t\t\t\tcomputedContext[ key ] = blockContext[ key ];\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t\treturn {\n\t\t\tblockBindings: replacePatternOverridesDefaultBinding(\n\t\t\t\tattributes?.metadata?.bindings,\n\t\t\t\tbindableAttributes\n\t\t\t),\n\t\t\tcontext: computedContext,\n\t\t\thasPatternOverrides: hasPatternOverridesDefaultBinding(\n\t\t\t\tattributes?.metadata?.bindings\n\t\t\t),\n\t\t};\n\t}, [\n\t\tname,\n\t\tblockType?.usesContext,\n\t\tblockContext,\n\t\tattributes?.metadata?.bindings,\n\t\tregisteredSources,\n\t] );\n\n\tconst computedAttributes = useSelect(\n\t\t( select ) => {\n\t\t\tif ( ! blockBindings ) {\n\t\t\t\treturn attributes;\n\t\t\t}\n\n\t\t\tconst attributesFromSources = {};\n\t\t\tconst blockBindingsBySource = new Map();\n\n\t\t\tfor ( const [ attributeName, binding ] of Object.entries(\n\t\t\t\tblockBindings\n\t\t\t) ) {\n\t\t\t\tconst { source: sourceName, args: sourceArgs } = binding;\n\t\t\t\tconst source = registeredSources[ sourceName ];\n\t\t\t\tif (\n\t\t\t\t\t! source ||\n\t\t\t\t\t! bindableAttributes.includes( attributeName )\n\t\t\t\t) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tblockBindingsBySource.set( source, {\n\t\t\t\t\t...blockBindingsBySource.get( source ),\n\t\t\t\t\t[ attributeName ]: {\n\t\t\t\t\t\targs: sourceArgs,\n\t\t\t\t\t},\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tif ( blockBindingsBySource.size ) {\n\t\t\t\tfor ( const [ source, bindings ] of blockBindingsBySource ) {\n\t\t\t\t\t// Get values in batch if the source supports it.\n\t\t\t\t\tlet values = {};\n\t\t\t\t\tif ( ! source.getValues ) {\n\t\t\t\t\t\tObject.keys( bindings ).forEach( ( attr ) => {\n\t\t\t\t\t\t\t// Default to the the source label when `getValues` doesn't exist.\n\t\t\t\t\t\t\tvalues[ attr ] = source.label;\n\t\t\t\t\t\t} );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvalues = source.getValues( {\n\t\t\t\t\t\t\tselect,\n\t\t\t\t\t\t\tcontext,\n\t\t\t\t\t\t\tclientId,\n\t\t\t\t\t\t\tbindings,\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t\tfor ( const [ attributeName, value ] of Object.entries(\n\t\t\t\t\t\tvalues\n\t\t\t\t\t) ) {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tattributeName === 'url' &&\n\t\t\t\t\t\t\t( ! value || ! isURLLike( value ) )\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t// Return null if value is not a valid URL.\n\t\t\t\t\t\t\tattributesFromSources[ attributeName ] = null;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tattributesFromSources[ attributeName ] = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\t...attributes,\n\t\t\t\t...attributesFromSources,\n\t\t\t};\n\t\t},\n\t\t[\n\t\t\tattributes,\n\t\t\tbindableAttributes,\n\t\t\tblockBindings,\n\t\t\tclientId,\n\t\t\tcontext,\n\t\t\tname,\n\t\t\tregisteredSources,\n\t\t]\n\t);\n\n\tconst setBoundAttributes = useCallback(\n\t\t( nextAttributes ) => {\n\t\t\tif ( ! blockBindings ) {\n\t\t\t\tsetAttributes( nextAttributes );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tregistry.batch( () => {\n\t\t\t\tconst keptAttributes = { ...nextAttributes };\n\t\t\t\tconst blockBindingsBySource = new Map();\n\n\t\t\t\t// Loop only over the updated attributes to avoid modifying the bound ones that haven't changed.\n\t\t\t\tfor ( const [ attributeName, newValue ] of Object.entries(\n\t\t\t\t\tkeptAttributes\n\t\t\t\t) ) {\n\t\t\t\t\tif (\n\t\t\t\t\t\t! blockBindings[ attributeName ] ||\n\t\t\t\t\t\t! bindableAttributes.includes( attributeName )\n\t\t\t\t\t) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst binding = blockBindings[ attributeName ];\n\t\t\t\t\tconst source = registeredSources[ binding?.source ];\n\t\t\t\t\tif ( ! source?.setValues ) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tblockBindingsBySource.set( source, {\n\t\t\t\t\t\t...blockBindingsBySource.get( source ),\n\t\t\t\t\t\t[ attributeName ]: {\n\t\t\t\t\t\t\targs: binding.args,\n\t\t\t\t\t\t\tnewValue,\n\t\t\t\t\t\t},\n\t\t\t\t\t} );\n\t\t\t\t\tdelete keptAttributes[ attributeName ];\n\t\t\t\t}\n\n\t\t\t\tif ( blockBindingsBySource.size ) {\n\t\t\t\t\tfor ( const [\n\t\t\t\t\t\tsource,\n\t\t\t\t\t\tbindings,\n\t\t\t\t\t] of blockBindingsBySource ) {\n\t\t\t\t\t\tsource.setValues( {\n\t\t\t\t\t\t\tselect: registry.select,\n\t\t\t\t\t\t\tdispatch: registry.dispatch,\n\t\t\t\t\t\t\tcontext,\n\t\t\t\t\t\t\tclientId,\n\t\t\t\t\t\t\tbindings,\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst hasParentPattern = !! context[ 'pattern/overrides' ];\n\n\t\t\t\tif (\n\t\t\t\t\t// Don't update non-connected attributes if the block is using pattern overrides\n\t\t\t\t\t// and the editing is happening while overriding the pattern (not editing the original).\n\t\t\t\t\t! ( hasPatternOverrides && hasParentPattern ) &&\n\t\t\t\t\tObject.keys( keptAttributes ).length\n\t\t\t\t) {\n\t\t\t\t\t// Don't update caption and href until they are supported.\n\t\t\t\t\tif ( hasPatternOverrides ) {\n\t\t\t\t\t\tdelete keptAttributes.caption;\n\t\t\t\t\t\tdelete keptAttributes.href;\n\t\t\t\t\t}\n\t\t\t\t\tsetAttributes( keptAttributes );\n\t\t\t\t}\n\t\t\t} );\n\t\t},\n\t\t[\n\t\t\tbindableAttributes,\n\t\t\tblockBindings,\n\t\t\tclientId,\n\t\t\tcontext,\n\t\t\thasPatternOverrides,\n\t\t\tsetAttributes,\n\t\t\tregisteredSources,\n\t\t\tname,\n\t\t\tregistry,\n\t\t]\n\t);\n\n\tif ( ! blockType ) {\n\t\treturn null;\n\t}\n\n\tif ( blockType.apiVersion > 1 ) {\n\t\treturn (\n\t\t\t<EditWithFilters\n\t\t\t\t{ ...props }\n\t\t\t\tattributes={ computedAttributes }\n\t\t\t\tcontext={ context }\n\t\t\t\tsetAttributes={ setBoundAttributes }\n\t\t\t/>\n\t\t);\n\t}\n\n\t// Generate a class name for the block's editable form.\n\tconst generatedClassName = hasBlockSupport( blockType, 'className', true )\n\t\t? getBlockDefaultClassName( name )\n\t\t: null;\n\tconst className = clsx(\n\t\tgeneratedClassName,\n\t\tattributes?.className,\n\t\tprops.className\n\t);\n\n\treturn (\n\t\t<EditWithFilters\n\t\t\t{ ...props }\n\t\t\tattributes={ computedAttributes }\n\t\t\tclassName={ className }\n\t\t\tcontext={ context }\n\t\t\tsetAttributes={ setBoundAttributes }\n\t\t/>\n\t);\n};\n\nexport default EditWithGeneratedProps;\n"],
5
+ "mappings": "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",
6
+ "names": ["BlockContext", "blocksStore", "isURLLike", "clsx"]
7
7
  }
@@ -436,7 +436,12 @@ function BlockListBlockProvider(props) {
436
436
  const attributes2 = getBlockAttributes(clientId);
437
437
  const { name: blockName, isValid: isValid2 } = blockWithoutAttributes2;
438
438
  const blockType = (0, import_blocks.getBlockType)(blockName);
439
- const { supportsLayout, isPreviewMode: isPreviewMode2 } = getSettings();
439
+ const {
440
+ supportsLayout,
441
+ isPreviewMode: isPreviewMode2,
442
+ __experimentalBlockBindingsSupportedAttributes
443
+ } = getSettings();
444
+ const bindableAttributes2 = __experimentalBlockBindingsSupportedAttributes?.[blockName];
440
445
  const hasLightBlockWrapper = blockType?.apiVersion > 1;
441
446
  const previewContext = {
442
447
  isPreviewMode: isPreviewMode2,
@@ -504,7 +509,8 @@ function BlockListBlockProvider(props) {
504
509
  isEditingDisabled: blockEditingMode2 === "disabled",
505
510
  hasEditableOutline: blockEditingMode2 !== "disabled" && getBlockEditingMode(rootClientId) === "disabled",
506
511
  originalBlockClientId: isInvalid ? blocksWithSameName[0] : false,
507
- isBlockHidden: _isBlockHidden(clientId)
512
+ isBlockHidden: _isBlockHidden(clientId),
513
+ bindableAttributes: bindableAttributes2
508
514
  };
509
515
  },
510
516
  [clientId, rootClientId]
@@ -546,7 +552,8 @@ function BlockListBlockProvider(props) {
546
552
  className,
547
553
  defaultClassName,
548
554
  originalBlockClientId,
549
- isBlockHidden
555
+ isBlockHidden,
556
+ bindableAttributes
550
557
  } = selectedProps;
551
558
  const block = (0, import_element.useMemo)(
552
559
  () => ({ ...blockWithoutAttributes, attributes }),
@@ -585,7 +592,8 @@ function BlockListBlockProvider(props) {
585
592
  originalBlockClientId,
586
593
  themeSupportsLayout,
587
594
  canMove,
588
- isBlockHidden
595
+ isBlockHidden,
596
+ bindableAttributes
589
597
  };
590
598
  if (isBlockHidden && !isSelected && !isMultiSelected && !hasChildSelected) {
591
599
  return null;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/block-list/block.js"],
4
- "sourcesContent": ["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { memo, RawHTML, useContext, useMemo } from '@wordpress/element';\nimport {\n\tgetBlockType,\n\tgetSaveContent,\n\tisUnmodifiedDefaultBlock,\n\tserializeRawBlock,\n\tswitchToBlockType,\n\tgetDefaultBlockName,\n\tisUnmodifiedBlock,\n\tisReusableBlock,\n\tgetBlockDefaultClassName,\n\thasBlockSupport,\n\tcreateBlock,\n\tstore as blocksStore,\n} from '@wordpress/blocks';\nimport { withFilters } from '@wordpress/components';\nimport { withDispatch, useSelect } from '@wordpress/data';\nimport { compose } from '@wordpress/compose';\nimport { safeHTML } from '@wordpress/dom';\n\n/**\n * Internal dependencies\n */\nimport BlockEdit from '../block-edit';\nimport BlockInvalidWarning from './block-invalid-warning';\nimport BlockCrashWarning from './block-crash-warning';\nimport BlockCrashBoundary from './block-crash-boundary';\nimport BlockHtml from './block-html';\nimport { useBlockProps } from './use-block-props';\nimport { store as blockEditorStore } from '../../store';\nimport { useLayout } from './layout';\nimport { PrivateBlockContext } from './private-block-context';\n\nimport { unlock } from '../../lock-unlock';\n\n/**\n * Merges wrapper props with special handling for classNames and styles.\n *\n * @param {Object} propsA\n * @param {Object} propsB\n *\n * @return {Object} Merged props.\n */\nfunction mergeWrapperProps( propsA, propsB ) {\n\tconst newProps = {\n\t\t...propsA,\n\t\t...propsB,\n\t};\n\n\t// May be set to undefined, so check if the property is set!\n\tif (\n\t\tpropsA?.hasOwnProperty( 'className' ) &&\n\t\tpropsB?.hasOwnProperty( 'className' )\n\t) {\n\t\tnewProps.className = clsx( propsA.className, propsB.className );\n\t}\n\n\tif (\n\t\tpropsA?.hasOwnProperty( 'style' ) &&\n\t\tpropsB?.hasOwnProperty( 'style' )\n\t) {\n\t\tnewProps.style = { ...propsA.style, ...propsB.style };\n\t}\n\n\treturn newProps;\n}\n\nfunction Block( { children, isHtml, ...props } ) {\n\treturn (\n\t\t<div { ...useBlockProps( props, { __unstableIsHtml: isHtml } ) }>\n\t\t\t{ children }\n\t\t</div>\n\t);\n}\n\nfunction BlockListBlock( {\n\tblock: { __unstableBlockSource },\n\tmode,\n\tisLocked,\n\tcanRemove,\n\tclientId,\n\tisSelected,\n\tisSelectionEnabled,\n\tclassName,\n\t__unstableLayoutClassNames: layoutClassNames,\n\tname,\n\tisValid,\n\tattributes,\n\twrapperProps,\n\tsetAttributes,\n\tonReplace,\n\tonRemove,\n\tonInsertBlocksAfter,\n\tonMerge,\n\ttoggleSelection,\n} ) {\n\tconst {\n\t\tmayDisplayControls,\n\t\tmayDisplayParentControls,\n\t\tthemeSupportsLayout,\n\t\t...context\n\t} = useContext( PrivateBlockContext );\n\n\tconst parentLayout = useLayout() || {};\n\n\t// We wrap the BlockEdit component in a div that hides it when editing in\n\t// HTML mode. This allows us to render all of the ancillary pieces\n\t// (InspectorControls, etc.) which are inside `BlockEdit` but not\n\t// `BlockHTML`, even in HTML mode.\n\tlet blockEdit = (\n\t\t<BlockEdit\n\t\t\tname={ name }\n\t\t\tisSelected={ isSelected }\n\t\t\tattributes={ attributes }\n\t\t\tsetAttributes={ setAttributes }\n\t\t\tinsertBlocksAfter={ isLocked ? undefined : onInsertBlocksAfter }\n\t\t\tonReplace={ canRemove ? onReplace : undefined }\n\t\t\tonRemove={ canRemove ? onRemove : undefined }\n\t\t\tmergeBlocks={ canRemove ? onMerge : undefined }\n\t\t\tclientId={ clientId }\n\t\t\tisSelectionEnabled={ isSelectionEnabled }\n\t\t\ttoggleSelection={ toggleSelection }\n\t\t\t__unstableLayoutClassNames={ layoutClassNames }\n\t\t\t__unstableParentLayout={\n\t\t\t\tObject.keys( parentLayout ).length ? parentLayout : undefined\n\t\t\t}\n\t\t\tmayDisplayControls={ mayDisplayControls }\n\t\t\tmayDisplayParentControls={ mayDisplayParentControls }\n\t\t\tblockEditingMode={ context.blockEditingMode }\n\t\t\tisPreviewMode={ context.isPreviewMode }\n\t\t/>\n\t);\n\n\tconst blockType = getBlockType( name );\n\n\t// Determine whether the block has props to apply to the wrapper.\n\tif ( blockType?.getEditWrapperProps ) {\n\t\twrapperProps = mergeWrapperProps(\n\t\t\twrapperProps,\n\t\t\tblockType.getEditWrapperProps( attributes )\n\t\t);\n\t}\n\n\tconst isAligned =\n\t\twrapperProps &&\n\t\t!! wrapperProps[ 'data-align' ] &&\n\t\t! themeSupportsLayout;\n\n\t// Support for sticky position in classic themes with alignment wrappers.\n\n\tconst isSticky = className?.includes( 'is-position-sticky' );\n\n\t// For aligned blocks, provide a wrapper element so the block can be\n\t// positioned relative to the block column.\n\t// This is only kept for classic themes that don't support layout\n\t// Historically we used to rely on extra divs and data-align to\n\t// provide the alignments styles in the editor.\n\t// Due to the differences between frontend and backend, we migrated\n\t// to the layout feature, and we're now aligning the markup of frontend\n\t// and backend.\n\tif ( isAligned ) {\n\t\tblockEdit = (\n\t\t\t<div\n\t\t\t\tclassName={ clsx( 'wp-block', isSticky && className ) }\n\t\t\t\tdata-align={ wrapperProps[ 'data-align' ] }\n\t\t\t>\n\t\t\t\t{ blockEdit }\n\t\t\t</div>\n\t\t);\n\t}\n\n\tlet block;\n\n\tif ( ! isValid ) {\n\t\tconst saveContent = __unstableBlockSource\n\t\t\t? serializeRawBlock( __unstableBlockSource )\n\t\t\t: getSaveContent( blockType, attributes );\n\n\t\tblock = (\n\t\t\t<Block className=\"has-warning\">\n\t\t\t\t<BlockInvalidWarning clientId={ clientId } />\n\t\t\t\t<RawHTML>{ safeHTML( saveContent ) }</RawHTML>\n\t\t\t</Block>\n\t\t);\n\t} else if ( mode === 'html' ) {\n\t\t// Render blockEdit so the inspector controls don't disappear.\n\t\t// See #8969.\n\t\tblock = (\n\t\t\t<>\n\t\t\t\t<div style={ { display: 'none' } }>{ blockEdit }</div>\n\t\t\t\t<Block isHtml>\n\t\t\t\t\t<BlockHtml clientId={ clientId } />\n\t\t\t\t</Block>\n\t\t\t</>\n\t\t);\n\t} else if ( blockType?.apiVersion > 1 ) {\n\t\tblock = blockEdit;\n\t} else {\n\t\tblock = <Block>{ blockEdit }</Block>;\n\t}\n\n\tconst { 'data-align': dataAlign, ...restWrapperProps } = wrapperProps ?? {};\n\tconst updatedWrapperProps = {\n\t\t...restWrapperProps,\n\t\tclassName: clsx(\n\t\t\trestWrapperProps.className,\n\t\t\tdataAlign && themeSupportsLayout && `align${ dataAlign }`,\n\t\t\t! ( dataAlign && isSticky ) && className\n\t\t),\n\t};\n\n\t// We set a new context with the adjusted and filtered wrapperProps (through\n\t// `editor.BlockListBlock`), which the `BlockListBlockProvider` did not have\n\t// access to.\n\t// Note that the context value doesn't have to be memoized in this case\n\t// because when it changes, this component will be re-rendered anyway, and\n\t// none of the consumers (BlockListBlock and useBlockProps) are memoized or\n\t// \"pure\". This is different from the public BlockEditContext, where\n\t// consumers might be memoized or \"pure\".\n\treturn (\n\t\t<PrivateBlockContext.Provider\n\t\t\tvalue={ {\n\t\t\t\twrapperProps: updatedWrapperProps,\n\t\t\t\tisAligned,\n\t\t\t\t...context,\n\t\t\t} }\n\t\t>\n\t\t\t<BlockCrashBoundary\n\t\t\t\tfallback={\n\t\t\t\t\t<Block className=\"has-warning\">\n\t\t\t\t\t\t<BlockCrashWarning />\n\t\t\t\t\t</Block>\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t{ block }\n\t\t\t</BlockCrashBoundary>\n\t\t</PrivateBlockContext.Provider>\n\t);\n}\n\nconst applyWithDispatch = withDispatch( ( dispatch, ownProps, registry ) => {\n\tconst {\n\t\tupdateBlockAttributes,\n\t\tinsertBlocks,\n\t\tmergeBlocks,\n\t\treplaceBlocks,\n\t\ttoggleSelection,\n\t\t__unstableMarkLastChangeAsPersistent,\n\t\tmoveBlocksToPosition,\n\t\tremoveBlock,\n\t\tselectBlock,\n\t} = dispatch( blockEditorStore );\n\n\t// Do not add new properties here, use `useDispatch` instead to avoid\n\t// leaking new props to the public API (editor.BlockListBlock filter).\n\treturn {\n\t\tsetAttributes( nextAttributes ) {\n\t\t\tconst { getMultiSelectedBlockClientIds } =\n\t\t\t\tregistry.select( blockEditorStore );\n\t\t\tconst multiSelectedBlockClientIds =\n\t\t\t\tgetMultiSelectedBlockClientIds();\n\t\t\tconst { clientId, attributes } = ownProps;\n\t\t\tconst clientIds = multiSelectedBlockClientIds.length\n\t\t\t\t? multiSelectedBlockClientIds\n\t\t\t\t: [ clientId ];\n\t\t\tconst newAttributes =\n\t\t\t\ttypeof nextAttributes === 'function'\n\t\t\t\t\t? nextAttributes( attributes )\n\t\t\t\t\t: nextAttributes;\n\n\t\t\tupdateBlockAttributes( clientIds, newAttributes );\n\t\t},\n\t\tonInsertBlocks( blocks, index ) {\n\t\t\tconst { rootClientId } = ownProps;\n\t\t\tinsertBlocks( blocks, index, rootClientId );\n\t\t},\n\t\tonInsertBlocksAfter( blocks ) {\n\t\t\tconst { clientId, rootClientId } = ownProps;\n\t\t\tconst { getBlockIndex } = registry.select( blockEditorStore );\n\t\t\tconst index = getBlockIndex( clientId );\n\t\t\tinsertBlocks( blocks, index + 1, rootClientId );\n\t\t},\n\t\tonMerge( forward ) {\n\t\t\tconst { clientId, rootClientId } = ownProps;\n\t\t\tconst {\n\t\t\t\tgetPreviousBlockClientId,\n\t\t\t\tgetNextBlockClientId,\n\t\t\t\tgetBlock,\n\t\t\t\tgetBlockAttributes,\n\t\t\t\tgetBlockName,\n\t\t\t\tgetBlockOrder,\n\t\t\t\tgetBlockIndex,\n\t\t\t\tgetBlockRootClientId,\n\t\t\t\tcanInsertBlockType,\n\t\t\t} = registry.select( blockEditorStore );\n\n\t\t\tfunction switchToDefaultOrRemove() {\n\t\t\t\tconst block = getBlock( clientId );\n\t\t\t\tconst defaultBlockName = getDefaultBlockName();\n\t\t\t\tconst defaultBlockType = getBlockType( defaultBlockName );\n\t\t\t\tif ( getBlockName( clientId ) !== defaultBlockName ) {\n\t\t\t\t\tconst replacement = switchToBlockType(\n\t\t\t\t\t\tblock,\n\t\t\t\t\t\tdefaultBlockName\n\t\t\t\t\t);\n\t\t\t\t\tif ( replacement && replacement.length ) {\n\t\t\t\t\t\treplaceBlocks( clientId, replacement );\n\t\t\t\t\t}\n\t\t\t\t} else if ( isUnmodifiedDefaultBlock( block ) ) {\n\t\t\t\t\tconst nextBlockClientId = getNextBlockClientId( clientId );\n\t\t\t\t\tif ( nextBlockClientId ) {\n\t\t\t\t\t\tregistry.batch( () => {\n\t\t\t\t\t\t\tremoveBlock( clientId );\n\t\t\t\t\t\t\tselectBlock( nextBlockClientId );\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t} else if ( defaultBlockType.merge ) {\n\t\t\t\t\tconst attributes = defaultBlockType.merge(\n\t\t\t\t\t\t{},\n\t\t\t\t\t\tblock.attributes\n\t\t\t\t\t);\n\t\t\t\t\treplaceBlocks(\n\t\t\t\t\t\t[ clientId ],\n\t\t\t\t\t\t[ createBlock( defaultBlockName, attributes ) ]\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Moves the block with clientId up one level. If the block type\n\t\t\t * cannot be inserted at the new location, it will be attempted to\n\t\t\t * convert to the default block type.\n\t\t\t *\n\t\t\t * @param {string} _clientId The block to move.\n\t\t\t * @param {boolean} changeSelection Whether to change the selection\n\t\t\t * to the moved block.\n\t\t\t */\n\t\t\tfunction moveFirstItemUp( _clientId, changeSelection = true ) {\n\t\t\t\tconst wrapperBlockName = getBlockName( _clientId );\n\t\t\t\tconst wrapperBlockType = getBlockType( wrapperBlockName );\n\t\t\t\tconst isTextualWrapper = wrapperBlockType.category === 'text';\n\t\t\t\tconst targetRootClientId = getBlockRootClientId( _clientId );\n\t\t\t\tconst blockOrder = getBlockOrder( _clientId );\n\t\t\t\tconst [ firstClientId ] = blockOrder;\n\n\t\t\t\tif (\n\t\t\t\t\tblockOrder.length === 1 &&\n\t\t\t\t\tisUnmodifiedBlock( getBlock( firstClientId ) )\n\t\t\t\t) {\n\t\t\t\t\tremoveBlock( _clientId );\n\t\t\t\t} else if ( isTextualWrapper ) {\n\t\t\t\t\tregistry.batch( () => {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tcanInsertBlockType(\n\t\t\t\t\t\t\t\tgetBlockName( firstClientId ),\n\t\t\t\t\t\t\t\ttargetRootClientId\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tmoveBlocksToPosition(\n\t\t\t\t\t\t\t\t[ firstClientId ],\n\t\t\t\t\t\t\t\t_clientId,\n\t\t\t\t\t\t\t\ttargetRootClientId,\n\t\t\t\t\t\t\t\tgetBlockIndex( _clientId )\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst replacement = switchToBlockType(\n\t\t\t\t\t\t\t\tgetBlock( firstClientId ),\n\t\t\t\t\t\t\t\tgetDefaultBlockName()\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\treplacement &&\n\t\t\t\t\t\t\t\treplacement.length &&\n\t\t\t\t\t\t\t\treplacement.every( ( block ) =>\n\t\t\t\t\t\t\t\t\tcanInsertBlockType(\n\t\t\t\t\t\t\t\t\t\tblock.name,\n\t\t\t\t\t\t\t\t\t\ttargetRootClientId\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tinsertBlocks(\n\t\t\t\t\t\t\t\t\treplacement,\n\t\t\t\t\t\t\t\t\tgetBlockIndex( _clientId ),\n\t\t\t\t\t\t\t\t\ttargetRootClientId,\n\t\t\t\t\t\t\t\t\tchangeSelection\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tremoveBlock( firstClientId, false );\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tswitchToDefaultOrRemove();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t! getBlockOrder( _clientId ).length &&\n\t\t\t\t\t\t\tisUnmodifiedBlock( getBlock( _clientId ) )\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tremoveBlock( _clientId, false );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t} else {\n\t\t\t\t\tswitchToDefaultOrRemove();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// For `Delete` or forward merge, we should do the exact same thing\n\t\t\t// as `Backspace`, but from the other block.\n\t\t\tif ( forward ) {\n\t\t\t\tif ( rootClientId ) {\n\t\t\t\t\tconst nextRootClientId =\n\t\t\t\t\t\tgetNextBlockClientId( rootClientId );\n\n\t\t\t\t\tif ( nextRootClientId ) {\n\t\t\t\t\t\t// If there is a block that follows with the same parent\n\t\t\t\t\t\t// block name and the same attributes, merge the inner\n\t\t\t\t\t\t// blocks.\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tgetBlockName( rootClientId ) ===\n\t\t\t\t\t\t\tgetBlockName( nextRootClientId )\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tconst rootAttributes =\n\t\t\t\t\t\t\t\tgetBlockAttributes( rootClientId );\n\t\t\t\t\t\t\tconst previousRootAttributes =\n\t\t\t\t\t\t\t\tgetBlockAttributes( nextRootClientId );\n\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tObject.keys( rootAttributes ).every(\n\t\t\t\t\t\t\t\t\t( key ) =>\n\t\t\t\t\t\t\t\t\t\trootAttributes[ key ] ===\n\t\t\t\t\t\t\t\t\t\tpreviousRootAttributes[ key ]\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tregistry.batch( () => {\n\t\t\t\t\t\t\t\t\tmoveBlocksToPosition(\n\t\t\t\t\t\t\t\t\t\tgetBlockOrder( nextRootClientId ),\n\t\t\t\t\t\t\t\t\t\tnextRootClientId,\n\t\t\t\t\t\t\t\t\t\trootClientId\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\tremoveBlock( nextRootClientId, false );\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tmergeBlocks( rootClientId, nextRootClientId );\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst nextBlockClientId = getNextBlockClientId( clientId );\n\n\t\t\t\tif ( ! nextBlockClientId ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif ( getBlockOrder( nextBlockClientId ).length ) {\n\t\t\t\t\tmoveFirstItemUp( nextBlockClientId, false );\n\t\t\t\t} else {\n\t\t\t\t\tmergeBlocks( clientId, nextBlockClientId );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst previousBlockClientId =\n\t\t\t\t\tgetPreviousBlockClientId( clientId );\n\n\t\t\t\tif ( previousBlockClientId ) {\n\t\t\t\t\tmergeBlocks( previousBlockClientId, clientId );\n\t\t\t\t} else if ( rootClientId ) {\n\t\t\t\t\tconst previousRootClientId =\n\t\t\t\t\t\tgetPreviousBlockClientId( rootClientId );\n\n\t\t\t\t\t// If there is a preceding block with the same parent block\n\t\t\t\t\t// name and the same attributes, merge the inner blocks.\n\t\t\t\t\tif (\n\t\t\t\t\t\tpreviousRootClientId &&\n\t\t\t\t\t\tgetBlockName( rootClientId ) ===\n\t\t\t\t\t\t\tgetBlockName( previousRootClientId )\n\t\t\t\t\t) {\n\t\t\t\t\t\tconst rootAttributes =\n\t\t\t\t\t\t\tgetBlockAttributes( rootClientId );\n\t\t\t\t\t\tconst previousRootAttributes =\n\t\t\t\t\t\t\tgetBlockAttributes( previousRootClientId );\n\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tObject.keys( rootAttributes ).every(\n\t\t\t\t\t\t\t\t( key ) =>\n\t\t\t\t\t\t\t\t\trootAttributes[ key ] ===\n\t\t\t\t\t\t\t\t\tpreviousRootAttributes[ key ]\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tregistry.batch( () => {\n\t\t\t\t\t\t\t\tmoveBlocksToPosition(\n\t\t\t\t\t\t\t\t\tgetBlockOrder( rootClientId ),\n\t\t\t\t\t\t\t\t\trootClientId,\n\t\t\t\t\t\t\t\t\tpreviousRootClientId\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tremoveBlock( rootClientId, false );\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tmoveFirstItemUp( rootClientId );\n\t\t\t\t} else {\n\t\t\t\t\tswitchToDefaultOrRemove();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tonReplace( blocks, indexToSelect, initialPosition ) {\n\t\t\tif (\n\t\t\t\tblocks.length &&\n\t\t\t\t! isUnmodifiedDefaultBlock( blocks[ blocks.length - 1 ] )\n\t\t\t) {\n\t\t\t\t__unstableMarkLastChangeAsPersistent();\n\t\t\t}\n\t\t\t//Unsynced patterns are nested in an array so we need to flatten them.\n\t\t\tconst replacementBlocks =\n\t\t\t\tblocks?.length === 1 && Array.isArray( blocks[ 0 ] )\n\t\t\t\t\t? blocks[ 0 ]\n\t\t\t\t\t: blocks;\n\t\t\treplaceBlocks(\n\t\t\t\t[ ownProps.clientId ],\n\t\t\t\treplacementBlocks,\n\t\t\t\tindexToSelect,\n\t\t\t\tinitialPosition\n\t\t\t);\n\t\t},\n\t\tonRemove() {\n\t\t\tremoveBlock( ownProps.clientId );\n\t\t},\n\t\ttoggleSelection( selectionEnabled ) {\n\t\t\ttoggleSelection( selectionEnabled );\n\t\t},\n\t};\n} );\n\n// This component is used by the BlockListBlockProvider component below. It will\n// add the props necessary for the `editor.BlockListBlock` filters.\nBlockListBlock = compose(\n\tapplyWithDispatch,\n\twithFilters( 'editor.BlockListBlock' )\n)( BlockListBlock );\n\n// This component provides all the information we need through a single store\n// subscription (useSelect mapping). Only the necessary props are passed down\n// to the BlockListBlock component, which is a filtered component, so these\n// props are public API. To avoid adding to the public API, we use a private\n// context to pass the rest of the information to the filtered BlockListBlock\n// component, and useBlockProps.\nfunction BlockListBlockProvider( props ) {\n\tconst { clientId, rootClientId } = props;\n\tconst selectedProps = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tisBlockSelected,\n\t\t\t\tgetBlockMode,\n\t\t\t\tisSelectionEnabled,\n\t\t\t\tgetTemplateLock,\n\t\t\t\tisSectionBlock: _isSectionBlock,\n\t\t\t\tgetBlockWithoutAttributes,\n\t\t\t\tgetBlockAttributes,\n\t\t\t\tcanRemoveBlock,\n\t\t\t\tcanMoveBlock,\n\n\t\t\t\tgetSettings,\n\t\t\t\tgetTemporarilyEditingAsBlocks,\n\t\t\t\tgetBlockEditingMode,\n\t\t\t\tgetBlockName,\n\t\t\t\tisFirstMultiSelectedBlock,\n\t\t\t\tgetMultiSelectedBlockClientIds,\n\t\t\t\thasSelectedInnerBlock,\n\t\t\t\tgetBlocksByName,\n\n\t\t\t\tgetBlockIndex,\n\t\t\t\tisBlockMultiSelected,\n\t\t\t\tisBlockSubtreeDisabled,\n\t\t\t\tisBlockHighlighted,\n\t\t\t\t__unstableIsFullySelected,\n\t\t\t\t__unstableSelectionHasUnmergeableBlock,\n\t\t\t\tisBlockBeingDragged,\n\t\t\t\tisDragging,\n\t\t\t\t__unstableHasActiveBlockOverlayActive,\n\t\t\t\tgetSelectedBlocksInitialCaretPosition,\n\t\t\t} = unlock( select( blockEditorStore ) );\n\t\t\tconst blockWithoutAttributes =\n\t\t\t\tgetBlockWithoutAttributes( clientId );\n\n\t\t\t// This is a temporary fix.\n\t\t\t// This function should never be called when a block is not\n\t\t\t// present in the state. It happens now because the order in\n\t\t\t// withSelect rendering is not correct.\n\t\t\tif ( ! blockWithoutAttributes ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst {\n\t\t\t\thasBlockSupport: _hasBlockSupport,\n\t\t\t\tgetActiveBlockVariation,\n\t\t\t} = select( blocksStore );\n\t\t\tconst attributes = getBlockAttributes( clientId );\n\t\t\tconst { name: blockName, isValid } = blockWithoutAttributes;\n\t\t\tconst blockType = getBlockType( blockName );\n\t\t\tconst { supportsLayout, isPreviewMode } = getSettings();\n\t\t\tconst hasLightBlockWrapper = blockType?.apiVersion > 1;\n\t\t\tconst previewContext = {\n\t\t\t\tisPreviewMode,\n\t\t\t\tblockWithoutAttributes,\n\t\t\t\tname: blockName,\n\t\t\t\tattributes,\n\t\t\t\tisValid,\n\t\t\t\tthemeSupportsLayout: supportsLayout,\n\t\t\t\tindex: getBlockIndex( clientId ),\n\t\t\t\tisReusable: isReusableBlock( blockType ),\n\t\t\t\tclassName: hasLightBlockWrapper\n\t\t\t\t\t? attributes.className\n\t\t\t\t\t: undefined,\n\t\t\t\tdefaultClassName: hasLightBlockWrapper\n\t\t\t\t\t? getBlockDefaultClassName( blockName )\n\t\t\t\t\t: undefined,\n\t\t\t\tblockTitle: blockType?.title,\n\t\t\t\tisBlockHidden: attributes?.metadata?.blockVisibility === false,\n\t\t\t};\n\n\t\t\t// When in preview mode, we can avoid a lot of selection and\n\t\t\t// editing related selectors.\n\t\t\tif ( isPreviewMode ) {\n\t\t\t\treturn previewContext;\n\t\t\t}\n\n\t\t\tconst { isBlockHidden: _isBlockHidden } = unlock(\n\t\t\t\tselect( blockEditorStore )\n\t\t\t);\n\t\t\tconst _isSelected = isBlockSelected( clientId );\n\t\t\tconst canRemove = canRemoveBlock( clientId );\n\t\t\tconst canMove = canMoveBlock( clientId );\n\t\t\tconst match = getActiveBlockVariation( blockName, attributes );\n\t\t\tconst isMultiSelected = isBlockMultiSelected( clientId );\n\t\t\tconst checkDeep = true;\n\t\t\tconst isAncestorOfSelectedBlock = hasSelectedInnerBlock(\n\t\t\t\tclientId,\n\t\t\t\tcheckDeep\n\t\t\t);\n\t\t\tconst blockEditingMode = getBlockEditingMode( clientId );\n\n\t\t\tconst multiple = hasBlockSupport( blockName, 'multiple', true );\n\n\t\t\t// For block types with `multiple` support, there is no \"original\n\t\t\t// block\" to be found in the content, as the block itself is valid.\n\t\t\tconst blocksWithSameName = multiple\n\t\t\t\t? []\n\t\t\t\t: getBlocksByName( blockName );\n\t\t\tconst isInvalid =\n\t\t\t\tblocksWithSameName.length &&\n\t\t\t\tblocksWithSameName[ 0 ] !== clientId;\n\n\t\t\treturn {\n\t\t\t\t...previewContext,\n\t\t\t\tmode: getBlockMode( clientId ),\n\t\t\t\tisSelectionEnabled: isSelectionEnabled(),\n\t\t\t\tisLocked: !! getTemplateLock( rootClientId ),\n\t\t\t\tisSectionBlock: _isSectionBlock( clientId ),\n\t\t\t\tcanRemove,\n\t\t\t\tcanMove,\n\t\t\t\tisSelected: _isSelected,\n\t\t\t\tisTemporarilyEditingAsBlocks:\n\t\t\t\t\tgetTemporarilyEditingAsBlocks() === clientId,\n\t\t\t\tblockEditingMode,\n\t\t\t\tmayDisplayControls:\n\t\t\t\t\t_isSelected ||\n\t\t\t\t\t( isFirstMultiSelectedBlock( clientId ) &&\n\t\t\t\t\t\tgetMultiSelectedBlockClientIds().every(\n\t\t\t\t\t\t\t( id ) => getBlockName( id ) === blockName\n\t\t\t\t\t\t) ),\n\t\t\t\tmayDisplayParentControls:\n\t\t\t\t\t_hasBlockSupport(\n\t\t\t\t\t\tgetBlockName( clientId ),\n\t\t\t\t\t\t'__experimentalExposeControlsToChildren',\n\t\t\t\t\t\tfalse\n\t\t\t\t\t) && hasSelectedInnerBlock( clientId ),\n\t\t\t\tblockApiVersion: blockType?.apiVersion || 1,\n\t\t\t\tblockTitle: match?.title || blockType?.title,\n\t\t\t\tisSubtreeDisabled:\n\t\t\t\t\tblockEditingMode === 'disabled' &&\n\t\t\t\t\tisBlockSubtreeDisabled( clientId ),\n\t\t\t\thasOverlay:\n\t\t\t\t\t__unstableHasActiveBlockOverlayActive( clientId ) &&\n\t\t\t\t\t! isDragging(),\n\t\t\t\tinitialPosition: _isSelected\n\t\t\t\t\t? getSelectedBlocksInitialCaretPosition()\n\t\t\t\t\t: undefined,\n\t\t\t\tisHighlighted: isBlockHighlighted( clientId ),\n\t\t\t\tisMultiSelected,\n\t\t\t\tisPartiallySelected:\n\t\t\t\t\tisMultiSelected &&\n\t\t\t\t\t! __unstableIsFullySelected() &&\n\t\t\t\t\t! __unstableSelectionHasUnmergeableBlock(),\n\t\t\t\tisDragging: isBlockBeingDragged( clientId ),\n\t\t\t\thasChildSelected: isAncestorOfSelectedBlock,\n\t\t\t\tisEditingDisabled: blockEditingMode === 'disabled',\n\t\t\t\thasEditableOutline:\n\t\t\t\t\tblockEditingMode !== 'disabled' &&\n\t\t\t\t\tgetBlockEditingMode( rootClientId ) === 'disabled',\n\t\t\t\toriginalBlockClientId: isInvalid\n\t\t\t\t\t? blocksWithSameName[ 0 ]\n\t\t\t\t\t: false,\n\t\t\t\tisBlockHidden: _isBlockHidden( clientId ),\n\t\t\t};\n\t\t},\n\t\t[ clientId, rootClientId ]\n\t);\n\n\tconst {\n\t\tisPreviewMode,\n\t\t// Fill values that end up as a public API and may not be defined in\n\t\t// preview mode.\n\t\tmode = 'visual',\n\t\tisSelectionEnabled = false,\n\t\tisLocked = false,\n\t\tcanRemove = false,\n\t\tcanMove = false,\n\t\tblockWithoutAttributes,\n\t\tname,\n\t\tattributes,\n\t\tisValid,\n\t\tisSelected = false,\n\t\tthemeSupportsLayout,\n\t\tisTemporarilyEditingAsBlocks,\n\t\tblockEditingMode,\n\t\tmayDisplayControls,\n\t\tmayDisplayParentControls,\n\t\tindex,\n\t\tblockApiVersion,\n\t\tblockTitle,\n\t\tisSubtreeDisabled,\n\t\thasOverlay,\n\t\tinitialPosition,\n\t\tisHighlighted,\n\t\tisMultiSelected,\n\t\tisPartiallySelected,\n\t\tisReusable,\n\t\tisDragging,\n\t\thasChildSelected,\n\t\tisSectionBlock,\n\t\tisEditingDisabled,\n\t\thasEditableOutline,\n\t\tclassName,\n\t\tdefaultClassName,\n\t\toriginalBlockClientId,\n\t\tisBlockHidden,\n\t} = selectedProps;\n\n\t// Users of the editor.BlockListBlock filter used to be able to\n\t// access the block prop.\n\t// Ideally these blocks would rely on the clientId prop only.\n\t// This is kept for backward compatibility reasons.\n\tconst block = useMemo(\n\t\t() => ( { ...blockWithoutAttributes, attributes } ),\n\t\t[ blockWithoutAttributes, attributes ]\n\t);\n\n\t// Block is sometimes not mounted at the right time, causing it be\n\t// undefined see issue for more info\n\t// https://github.com/WordPress/gutenberg/issues/17013\n\tif ( ! selectedProps ) {\n\t\treturn null;\n\t}\n\n\tconst privateContext = {\n\t\tisPreviewMode,\n\t\tclientId,\n\t\tclassName,\n\t\tindex,\n\t\tmode,\n\t\tname,\n\t\tblockApiVersion,\n\t\tblockTitle,\n\t\tisSelected,\n\t\tisSubtreeDisabled,\n\t\thasOverlay,\n\t\tinitialPosition,\n\t\tblockEditingMode,\n\t\tisHighlighted,\n\t\tisMultiSelected,\n\t\tisPartiallySelected,\n\t\tisReusable,\n\t\tisDragging,\n\t\thasChildSelected,\n\t\tisSectionBlock,\n\t\tisEditingDisabled,\n\t\thasEditableOutline,\n\t\tisTemporarilyEditingAsBlocks,\n\t\tdefaultClassName,\n\t\tmayDisplayControls,\n\t\tmayDisplayParentControls,\n\t\toriginalBlockClientId,\n\t\tthemeSupportsLayout,\n\t\tcanMove,\n\t\tisBlockHidden,\n\t};\n\n\tif (\n\t\tisBlockHidden &&\n\t\t! isSelected &&\n\t\t! isMultiSelected &&\n\t\t! hasChildSelected\n\t) {\n\t\treturn null;\n\t}\n\n\t// Here we separate between the props passed to BlockListBlock and any other\n\t// information we selected for internal use. BlockListBlock is a filtered\n\t// component and thus ALL the props are PUBLIC API.\n\n\t// Note that the context value doesn't have to be memoized in this case\n\t// because when it changes, this component will be re-rendered anyway, and\n\t// none of the consumers (BlockListBlock and useBlockProps) are memoized or\n\t// \"pure\". This is different from the public BlockEditContext, where\n\t// consumers might be memoized or \"pure\".\n\treturn (\n\t\t<PrivateBlockContext.Provider value={ privateContext }>\n\t\t\t<BlockListBlock\n\t\t\t\t{ ...props }\n\t\t\t\t// WARNING: all the following props are public API (through the\n\t\t\t\t// editor.BlockListBlock filter) and normally nothing new should\n\t\t\t\t// be added to it.\n\t\t\t\t{ ...{\n\t\t\t\t\tmode,\n\t\t\t\t\tisSelectionEnabled,\n\t\t\t\t\tisLocked,\n\t\t\t\t\tcanRemove,\n\t\t\t\t\tcanMove,\n\t\t\t\t\t// Users of the editor.BlockListBlock filter used to be able\n\t\t\t\t\t// to access the block prop. Ideally these blocks would rely\n\t\t\t\t\t// on the clientId prop only. This is kept for backward\n\t\t\t\t\t// compatibility reasons.\n\t\t\t\t\tblock,\n\t\t\t\t\tname,\n\t\t\t\t\tattributes,\n\t\t\t\t\tisValid,\n\t\t\t\t\tisSelected,\n\t\t\t\t} }\n\t\t\t/>\n\t\t</PrivateBlockContext.Provider>\n\t);\n}\n\nexport default memo( BlockListBlockProvider );\n"],
5
- "mappings": "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",
6
- "names": ["clsx", "BlockEdit", "BlockInvalidWarning", "BlockHtml", "BlockCrashBoundary", "BlockCrashWarning", "blockEditorStore", "isSelectionEnabled", "isDragging", "blockWithoutAttributes", "blocksStore", "attributes", "isValid", "isPreviewMode", "canRemove", "canMove", "isMultiSelected", "blockEditingMode"]
4
+ "sourcesContent": ["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { memo, RawHTML, useContext, useMemo } from '@wordpress/element';\nimport {\n\tgetBlockType,\n\tgetSaveContent,\n\tisUnmodifiedDefaultBlock,\n\tserializeRawBlock,\n\tswitchToBlockType,\n\tgetDefaultBlockName,\n\tisUnmodifiedBlock,\n\tisReusableBlock,\n\tgetBlockDefaultClassName,\n\thasBlockSupport,\n\tcreateBlock,\n\tstore as blocksStore,\n} from '@wordpress/blocks';\nimport { withFilters } from '@wordpress/components';\nimport { withDispatch, useSelect } from '@wordpress/data';\nimport { compose } from '@wordpress/compose';\nimport { safeHTML } from '@wordpress/dom';\n\n/**\n * Internal dependencies\n */\nimport BlockEdit from '../block-edit';\nimport BlockInvalidWarning from './block-invalid-warning';\nimport BlockCrashWarning from './block-crash-warning';\nimport BlockCrashBoundary from './block-crash-boundary';\nimport BlockHtml from './block-html';\nimport { useBlockProps } from './use-block-props';\nimport { store as blockEditorStore } from '../../store';\nimport { useLayout } from './layout';\nimport { PrivateBlockContext } from './private-block-context';\n\nimport { unlock } from '../../lock-unlock';\n\n/**\n * Merges wrapper props with special handling for classNames and styles.\n *\n * @param {Object} propsA\n * @param {Object} propsB\n *\n * @return {Object} Merged props.\n */\nfunction mergeWrapperProps( propsA, propsB ) {\n\tconst newProps = {\n\t\t...propsA,\n\t\t...propsB,\n\t};\n\n\t// May be set to undefined, so check if the property is set!\n\tif (\n\t\tpropsA?.hasOwnProperty( 'className' ) &&\n\t\tpropsB?.hasOwnProperty( 'className' )\n\t) {\n\t\tnewProps.className = clsx( propsA.className, propsB.className );\n\t}\n\n\tif (\n\t\tpropsA?.hasOwnProperty( 'style' ) &&\n\t\tpropsB?.hasOwnProperty( 'style' )\n\t) {\n\t\tnewProps.style = { ...propsA.style, ...propsB.style };\n\t}\n\n\treturn newProps;\n}\n\nfunction Block( { children, isHtml, ...props } ) {\n\treturn (\n\t\t<div { ...useBlockProps( props, { __unstableIsHtml: isHtml } ) }>\n\t\t\t{ children }\n\t\t</div>\n\t);\n}\n\nfunction BlockListBlock( {\n\tblock: { __unstableBlockSource },\n\tmode,\n\tisLocked,\n\tcanRemove,\n\tclientId,\n\tisSelected,\n\tisSelectionEnabled,\n\tclassName,\n\t__unstableLayoutClassNames: layoutClassNames,\n\tname,\n\tisValid,\n\tattributes,\n\twrapperProps,\n\tsetAttributes,\n\tonReplace,\n\tonRemove,\n\tonInsertBlocksAfter,\n\tonMerge,\n\ttoggleSelection,\n} ) {\n\tconst {\n\t\tmayDisplayControls,\n\t\tmayDisplayParentControls,\n\t\tthemeSupportsLayout,\n\t\t...context\n\t} = useContext( PrivateBlockContext );\n\n\tconst parentLayout = useLayout() || {};\n\n\t// We wrap the BlockEdit component in a div that hides it when editing in\n\t// HTML mode. This allows us to render all of the ancillary pieces\n\t// (InspectorControls, etc.) which are inside `BlockEdit` but not\n\t// `BlockHTML`, even in HTML mode.\n\tlet blockEdit = (\n\t\t<BlockEdit\n\t\t\tname={ name }\n\t\t\tisSelected={ isSelected }\n\t\t\tattributes={ attributes }\n\t\t\tsetAttributes={ setAttributes }\n\t\t\tinsertBlocksAfter={ isLocked ? undefined : onInsertBlocksAfter }\n\t\t\tonReplace={ canRemove ? onReplace : undefined }\n\t\t\tonRemove={ canRemove ? onRemove : undefined }\n\t\t\tmergeBlocks={ canRemove ? onMerge : undefined }\n\t\t\tclientId={ clientId }\n\t\t\tisSelectionEnabled={ isSelectionEnabled }\n\t\t\ttoggleSelection={ toggleSelection }\n\t\t\t__unstableLayoutClassNames={ layoutClassNames }\n\t\t\t__unstableParentLayout={\n\t\t\t\tObject.keys( parentLayout ).length ? parentLayout : undefined\n\t\t\t}\n\t\t\tmayDisplayControls={ mayDisplayControls }\n\t\t\tmayDisplayParentControls={ mayDisplayParentControls }\n\t\t\tblockEditingMode={ context.blockEditingMode }\n\t\t\tisPreviewMode={ context.isPreviewMode }\n\t\t/>\n\t);\n\n\tconst blockType = getBlockType( name );\n\n\t// Determine whether the block has props to apply to the wrapper.\n\tif ( blockType?.getEditWrapperProps ) {\n\t\twrapperProps = mergeWrapperProps(\n\t\t\twrapperProps,\n\t\t\tblockType.getEditWrapperProps( attributes )\n\t\t);\n\t}\n\n\tconst isAligned =\n\t\twrapperProps &&\n\t\t!! wrapperProps[ 'data-align' ] &&\n\t\t! themeSupportsLayout;\n\n\t// Support for sticky position in classic themes with alignment wrappers.\n\n\tconst isSticky = className?.includes( 'is-position-sticky' );\n\n\t// For aligned blocks, provide a wrapper element so the block can be\n\t// positioned relative to the block column.\n\t// This is only kept for classic themes that don't support layout\n\t// Historically we used to rely on extra divs and data-align to\n\t// provide the alignments styles in the editor.\n\t// Due to the differences between frontend and backend, we migrated\n\t// to the layout feature, and we're now aligning the markup of frontend\n\t// and backend.\n\tif ( isAligned ) {\n\t\tblockEdit = (\n\t\t\t<div\n\t\t\t\tclassName={ clsx( 'wp-block', isSticky && className ) }\n\t\t\t\tdata-align={ wrapperProps[ 'data-align' ] }\n\t\t\t>\n\t\t\t\t{ blockEdit }\n\t\t\t</div>\n\t\t);\n\t}\n\n\tlet block;\n\n\tif ( ! isValid ) {\n\t\tconst saveContent = __unstableBlockSource\n\t\t\t? serializeRawBlock( __unstableBlockSource )\n\t\t\t: getSaveContent( blockType, attributes );\n\n\t\tblock = (\n\t\t\t<Block className=\"has-warning\">\n\t\t\t\t<BlockInvalidWarning clientId={ clientId } />\n\t\t\t\t<RawHTML>{ safeHTML( saveContent ) }</RawHTML>\n\t\t\t</Block>\n\t\t);\n\t} else if ( mode === 'html' ) {\n\t\t// Render blockEdit so the inspector controls don't disappear.\n\t\t// See #8969.\n\t\tblock = (\n\t\t\t<>\n\t\t\t\t<div style={ { display: 'none' } }>{ blockEdit }</div>\n\t\t\t\t<Block isHtml>\n\t\t\t\t\t<BlockHtml clientId={ clientId } />\n\t\t\t\t</Block>\n\t\t\t</>\n\t\t);\n\t} else if ( blockType?.apiVersion > 1 ) {\n\t\tblock = blockEdit;\n\t} else {\n\t\tblock = <Block>{ blockEdit }</Block>;\n\t}\n\n\tconst { 'data-align': dataAlign, ...restWrapperProps } = wrapperProps ?? {};\n\tconst updatedWrapperProps = {\n\t\t...restWrapperProps,\n\t\tclassName: clsx(\n\t\t\trestWrapperProps.className,\n\t\t\tdataAlign && themeSupportsLayout && `align${ dataAlign }`,\n\t\t\t! ( dataAlign && isSticky ) && className\n\t\t),\n\t};\n\n\t// We set a new context with the adjusted and filtered wrapperProps (through\n\t// `editor.BlockListBlock`), which the `BlockListBlockProvider` did not have\n\t// access to.\n\t// Note that the context value doesn't have to be memoized in this case\n\t// because when it changes, this component will be re-rendered anyway, and\n\t// none of the consumers (BlockListBlock and useBlockProps) are memoized or\n\t// \"pure\". This is different from the public BlockEditContext, where\n\t// consumers might be memoized or \"pure\".\n\treturn (\n\t\t<PrivateBlockContext.Provider\n\t\t\tvalue={ {\n\t\t\t\twrapperProps: updatedWrapperProps,\n\t\t\t\tisAligned,\n\t\t\t\t...context,\n\t\t\t} }\n\t\t>\n\t\t\t<BlockCrashBoundary\n\t\t\t\tfallback={\n\t\t\t\t\t<Block className=\"has-warning\">\n\t\t\t\t\t\t<BlockCrashWarning />\n\t\t\t\t\t</Block>\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t{ block }\n\t\t\t</BlockCrashBoundary>\n\t\t</PrivateBlockContext.Provider>\n\t);\n}\n\nconst applyWithDispatch = withDispatch( ( dispatch, ownProps, registry ) => {\n\tconst {\n\t\tupdateBlockAttributes,\n\t\tinsertBlocks,\n\t\tmergeBlocks,\n\t\treplaceBlocks,\n\t\ttoggleSelection,\n\t\t__unstableMarkLastChangeAsPersistent,\n\t\tmoveBlocksToPosition,\n\t\tremoveBlock,\n\t\tselectBlock,\n\t} = dispatch( blockEditorStore );\n\n\t// Do not add new properties here, use `useDispatch` instead to avoid\n\t// leaking new props to the public API (editor.BlockListBlock filter).\n\treturn {\n\t\tsetAttributes( nextAttributes ) {\n\t\t\tconst { getMultiSelectedBlockClientIds } =\n\t\t\t\tregistry.select( blockEditorStore );\n\t\t\tconst multiSelectedBlockClientIds =\n\t\t\t\tgetMultiSelectedBlockClientIds();\n\t\t\tconst { clientId, attributes } = ownProps;\n\t\t\tconst clientIds = multiSelectedBlockClientIds.length\n\t\t\t\t? multiSelectedBlockClientIds\n\t\t\t\t: [ clientId ];\n\t\t\tconst newAttributes =\n\t\t\t\ttypeof nextAttributes === 'function'\n\t\t\t\t\t? nextAttributes( attributes )\n\t\t\t\t\t: nextAttributes;\n\n\t\t\tupdateBlockAttributes( clientIds, newAttributes );\n\t\t},\n\t\tonInsertBlocks( blocks, index ) {\n\t\t\tconst { rootClientId } = ownProps;\n\t\t\tinsertBlocks( blocks, index, rootClientId );\n\t\t},\n\t\tonInsertBlocksAfter( blocks ) {\n\t\t\tconst { clientId, rootClientId } = ownProps;\n\t\t\tconst { getBlockIndex } = registry.select( blockEditorStore );\n\t\t\tconst index = getBlockIndex( clientId );\n\t\t\tinsertBlocks( blocks, index + 1, rootClientId );\n\t\t},\n\t\tonMerge( forward ) {\n\t\t\tconst { clientId, rootClientId } = ownProps;\n\t\t\tconst {\n\t\t\t\tgetPreviousBlockClientId,\n\t\t\t\tgetNextBlockClientId,\n\t\t\t\tgetBlock,\n\t\t\t\tgetBlockAttributes,\n\t\t\t\tgetBlockName,\n\t\t\t\tgetBlockOrder,\n\t\t\t\tgetBlockIndex,\n\t\t\t\tgetBlockRootClientId,\n\t\t\t\tcanInsertBlockType,\n\t\t\t} = registry.select( blockEditorStore );\n\n\t\t\tfunction switchToDefaultOrRemove() {\n\t\t\t\tconst block = getBlock( clientId );\n\t\t\t\tconst defaultBlockName = getDefaultBlockName();\n\t\t\t\tconst defaultBlockType = getBlockType( defaultBlockName );\n\t\t\t\tif ( getBlockName( clientId ) !== defaultBlockName ) {\n\t\t\t\t\tconst replacement = switchToBlockType(\n\t\t\t\t\t\tblock,\n\t\t\t\t\t\tdefaultBlockName\n\t\t\t\t\t);\n\t\t\t\t\tif ( replacement && replacement.length ) {\n\t\t\t\t\t\treplaceBlocks( clientId, replacement );\n\t\t\t\t\t}\n\t\t\t\t} else if ( isUnmodifiedDefaultBlock( block ) ) {\n\t\t\t\t\tconst nextBlockClientId = getNextBlockClientId( clientId );\n\t\t\t\t\tif ( nextBlockClientId ) {\n\t\t\t\t\t\tregistry.batch( () => {\n\t\t\t\t\t\t\tremoveBlock( clientId );\n\t\t\t\t\t\t\tselectBlock( nextBlockClientId );\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t} else if ( defaultBlockType.merge ) {\n\t\t\t\t\tconst attributes = defaultBlockType.merge(\n\t\t\t\t\t\t{},\n\t\t\t\t\t\tblock.attributes\n\t\t\t\t\t);\n\t\t\t\t\treplaceBlocks(\n\t\t\t\t\t\t[ clientId ],\n\t\t\t\t\t\t[ createBlock( defaultBlockName, attributes ) ]\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Moves the block with clientId up one level. If the block type\n\t\t\t * cannot be inserted at the new location, it will be attempted to\n\t\t\t * convert to the default block type.\n\t\t\t *\n\t\t\t * @param {string} _clientId The block to move.\n\t\t\t * @param {boolean} changeSelection Whether to change the selection\n\t\t\t * to the moved block.\n\t\t\t */\n\t\t\tfunction moveFirstItemUp( _clientId, changeSelection = true ) {\n\t\t\t\tconst wrapperBlockName = getBlockName( _clientId );\n\t\t\t\tconst wrapperBlockType = getBlockType( wrapperBlockName );\n\t\t\t\tconst isTextualWrapper = wrapperBlockType.category === 'text';\n\t\t\t\tconst targetRootClientId = getBlockRootClientId( _clientId );\n\t\t\t\tconst blockOrder = getBlockOrder( _clientId );\n\t\t\t\tconst [ firstClientId ] = blockOrder;\n\n\t\t\t\tif (\n\t\t\t\t\tblockOrder.length === 1 &&\n\t\t\t\t\tisUnmodifiedBlock( getBlock( firstClientId ) )\n\t\t\t\t) {\n\t\t\t\t\tremoveBlock( _clientId );\n\t\t\t\t} else if ( isTextualWrapper ) {\n\t\t\t\t\tregistry.batch( () => {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tcanInsertBlockType(\n\t\t\t\t\t\t\t\tgetBlockName( firstClientId ),\n\t\t\t\t\t\t\t\ttargetRootClientId\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tmoveBlocksToPosition(\n\t\t\t\t\t\t\t\t[ firstClientId ],\n\t\t\t\t\t\t\t\t_clientId,\n\t\t\t\t\t\t\t\ttargetRootClientId,\n\t\t\t\t\t\t\t\tgetBlockIndex( _clientId )\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst replacement = switchToBlockType(\n\t\t\t\t\t\t\t\tgetBlock( firstClientId ),\n\t\t\t\t\t\t\t\tgetDefaultBlockName()\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\treplacement &&\n\t\t\t\t\t\t\t\treplacement.length &&\n\t\t\t\t\t\t\t\treplacement.every( ( block ) =>\n\t\t\t\t\t\t\t\t\tcanInsertBlockType(\n\t\t\t\t\t\t\t\t\t\tblock.name,\n\t\t\t\t\t\t\t\t\t\ttargetRootClientId\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tinsertBlocks(\n\t\t\t\t\t\t\t\t\treplacement,\n\t\t\t\t\t\t\t\t\tgetBlockIndex( _clientId ),\n\t\t\t\t\t\t\t\t\ttargetRootClientId,\n\t\t\t\t\t\t\t\t\tchangeSelection\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tremoveBlock( firstClientId, false );\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tswitchToDefaultOrRemove();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t! getBlockOrder( _clientId ).length &&\n\t\t\t\t\t\t\tisUnmodifiedBlock( getBlock( _clientId ) )\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tremoveBlock( _clientId, false );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t} else {\n\t\t\t\t\tswitchToDefaultOrRemove();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// For `Delete` or forward merge, we should do the exact same thing\n\t\t\t// as `Backspace`, but from the other block.\n\t\t\tif ( forward ) {\n\t\t\t\tif ( rootClientId ) {\n\t\t\t\t\tconst nextRootClientId =\n\t\t\t\t\t\tgetNextBlockClientId( rootClientId );\n\n\t\t\t\t\tif ( nextRootClientId ) {\n\t\t\t\t\t\t// If there is a block that follows with the same parent\n\t\t\t\t\t\t// block name and the same attributes, merge the inner\n\t\t\t\t\t\t// blocks.\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tgetBlockName( rootClientId ) ===\n\t\t\t\t\t\t\tgetBlockName( nextRootClientId )\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tconst rootAttributes =\n\t\t\t\t\t\t\t\tgetBlockAttributes( rootClientId );\n\t\t\t\t\t\t\tconst previousRootAttributes =\n\t\t\t\t\t\t\t\tgetBlockAttributes( nextRootClientId );\n\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tObject.keys( rootAttributes ).every(\n\t\t\t\t\t\t\t\t\t( key ) =>\n\t\t\t\t\t\t\t\t\t\trootAttributes[ key ] ===\n\t\t\t\t\t\t\t\t\t\tpreviousRootAttributes[ key ]\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tregistry.batch( () => {\n\t\t\t\t\t\t\t\t\tmoveBlocksToPosition(\n\t\t\t\t\t\t\t\t\t\tgetBlockOrder( nextRootClientId ),\n\t\t\t\t\t\t\t\t\t\tnextRootClientId,\n\t\t\t\t\t\t\t\t\t\trootClientId\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\tremoveBlock( nextRootClientId, false );\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tmergeBlocks( rootClientId, nextRootClientId );\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst nextBlockClientId = getNextBlockClientId( clientId );\n\n\t\t\t\tif ( ! nextBlockClientId ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif ( getBlockOrder( nextBlockClientId ).length ) {\n\t\t\t\t\tmoveFirstItemUp( nextBlockClientId, false );\n\t\t\t\t} else {\n\t\t\t\t\tmergeBlocks( clientId, nextBlockClientId );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst previousBlockClientId =\n\t\t\t\t\tgetPreviousBlockClientId( clientId );\n\n\t\t\t\tif ( previousBlockClientId ) {\n\t\t\t\t\tmergeBlocks( previousBlockClientId, clientId );\n\t\t\t\t} else if ( rootClientId ) {\n\t\t\t\t\tconst previousRootClientId =\n\t\t\t\t\t\tgetPreviousBlockClientId( rootClientId );\n\n\t\t\t\t\t// If there is a preceding block with the same parent block\n\t\t\t\t\t// name and the same attributes, merge the inner blocks.\n\t\t\t\t\tif (\n\t\t\t\t\t\tpreviousRootClientId &&\n\t\t\t\t\t\tgetBlockName( rootClientId ) ===\n\t\t\t\t\t\t\tgetBlockName( previousRootClientId )\n\t\t\t\t\t) {\n\t\t\t\t\t\tconst rootAttributes =\n\t\t\t\t\t\t\tgetBlockAttributes( rootClientId );\n\t\t\t\t\t\tconst previousRootAttributes =\n\t\t\t\t\t\t\tgetBlockAttributes( previousRootClientId );\n\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tObject.keys( rootAttributes ).every(\n\t\t\t\t\t\t\t\t( key ) =>\n\t\t\t\t\t\t\t\t\trootAttributes[ key ] ===\n\t\t\t\t\t\t\t\t\tpreviousRootAttributes[ key ]\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tregistry.batch( () => {\n\t\t\t\t\t\t\t\tmoveBlocksToPosition(\n\t\t\t\t\t\t\t\t\tgetBlockOrder( rootClientId ),\n\t\t\t\t\t\t\t\t\trootClientId,\n\t\t\t\t\t\t\t\t\tpreviousRootClientId\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tremoveBlock( rootClientId, false );\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tmoveFirstItemUp( rootClientId );\n\t\t\t\t} else {\n\t\t\t\t\tswitchToDefaultOrRemove();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tonReplace( blocks, indexToSelect, initialPosition ) {\n\t\t\tif (\n\t\t\t\tblocks.length &&\n\t\t\t\t! isUnmodifiedDefaultBlock( blocks[ blocks.length - 1 ] )\n\t\t\t) {\n\t\t\t\t__unstableMarkLastChangeAsPersistent();\n\t\t\t}\n\t\t\t//Unsynced patterns are nested in an array so we need to flatten them.\n\t\t\tconst replacementBlocks =\n\t\t\t\tblocks?.length === 1 && Array.isArray( blocks[ 0 ] )\n\t\t\t\t\t? blocks[ 0 ]\n\t\t\t\t\t: blocks;\n\t\t\treplaceBlocks(\n\t\t\t\t[ ownProps.clientId ],\n\t\t\t\treplacementBlocks,\n\t\t\t\tindexToSelect,\n\t\t\t\tinitialPosition\n\t\t\t);\n\t\t},\n\t\tonRemove() {\n\t\t\tremoveBlock( ownProps.clientId );\n\t\t},\n\t\ttoggleSelection( selectionEnabled ) {\n\t\t\ttoggleSelection( selectionEnabled );\n\t\t},\n\t};\n} );\n\n// This component is used by the BlockListBlockProvider component below. It will\n// add the props necessary for the `editor.BlockListBlock` filters.\nBlockListBlock = compose(\n\tapplyWithDispatch,\n\twithFilters( 'editor.BlockListBlock' )\n)( BlockListBlock );\n\n// This component provides all the information we need through a single store\n// subscription (useSelect mapping). Only the necessary props are passed down\n// to the BlockListBlock component, which is a filtered component, so these\n// props are public API. To avoid adding to the public API, we use a private\n// context to pass the rest of the information to the filtered BlockListBlock\n// component, and useBlockProps.\nfunction BlockListBlockProvider( props ) {\n\tconst { clientId, rootClientId } = props;\n\tconst selectedProps = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tisBlockSelected,\n\t\t\t\tgetBlockMode,\n\t\t\t\tisSelectionEnabled,\n\t\t\t\tgetTemplateLock,\n\t\t\t\tisSectionBlock: _isSectionBlock,\n\t\t\t\tgetBlockWithoutAttributes,\n\t\t\t\tgetBlockAttributes,\n\t\t\t\tcanRemoveBlock,\n\t\t\t\tcanMoveBlock,\n\n\t\t\t\tgetSettings,\n\t\t\t\tgetTemporarilyEditingAsBlocks,\n\t\t\t\tgetBlockEditingMode,\n\t\t\t\tgetBlockName,\n\t\t\t\tisFirstMultiSelectedBlock,\n\t\t\t\tgetMultiSelectedBlockClientIds,\n\t\t\t\thasSelectedInnerBlock,\n\t\t\t\tgetBlocksByName,\n\n\t\t\t\tgetBlockIndex,\n\t\t\t\tisBlockMultiSelected,\n\t\t\t\tisBlockSubtreeDisabled,\n\t\t\t\tisBlockHighlighted,\n\t\t\t\t__unstableIsFullySelected,\n\t\t\t\t__unstableSelectionHasUnmergeableBlock,\n\t\t\t\tisBlockBeingDragged,\n\t\t\t\tisDragging,\n\t\t\t\t__unstableHasActiveBlockOverlayActive,\n\t\t\t\tgetSelectedBlocksInitialCaretPosition,\n\t\t\t} = unlock( select( blockEditorStore ) );\n\t\t\tconst blockWithoutAttributes =\n\t\t\t\tgetBlockWithoutAttributes( clientId );\n\n\t\t\t// This is a temporary fix.\n\t\t\t// This function should never be called when a block is not\n\t\t\t// present in the state. It happens now because the order in\n\t\t\t// withSelect rendering is not correct.\n\t\t\tif ( ! blockWithoutAttributes ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst {\n\t\t\t\thasBlockSupport: _hasBlockSupport,\n\t\t\t\tgetActiveBlockVariation,\n\t\t\t} = select( blocksStore );\n\t\t\tconst attributes = getBlockAttributes( clientId );\n\t\t\tconst { name: blockName, isValid } = blockWithoutAttributes;\n\t\t\tconst blockType = getBlockType( blockName );\n\t\t\tconst {\n\t\t\t\tsupportsLayout,\n\t\t\t\tisPreviewMode,\n\t\t\t\t__experimentalBlockBindingsSupportedAttributes,\n\t\t\t} = getSettings();\n\n\t\t\tconst bindableAttributes =\n\t\t\t\t__experimentalBlockBindingsSupportedAttributes?.[ blockName ];\n\n\t\t\tconst hasLightBlockWrapper = blockType?.apiVersion > 1;\n\t\t\tconst previewContext = {\n\t\t\t\tisPreviewMode,\n\t\t\t\tblockWithoutAttributes,\n\t\t\t\tname: blockName,\n\t\t\t\tattributes,\n\t\t\t\tisValid,\n\t\t\t\tthemeSupportsLayout: supportsLayout,\n\t\t\t\tindex: getBlockIndex( clientId ),\n\t\t\t\tisReusable: isReusableBlock( blockType ),\n\t\t\t\tclassName: hasLightBlockWrapper\n\t\t\t\t\t? attributes.className\n\t\t\t\t\t: undefined,\n\t\t\t\tdefaultClassName: hasLightBlockWrapper\n\t\t\t\t\t? getBlockDefaultClassName( blockName )\n\t\t\t\t\t: undefined,\n\t\t\t\tblockTitle: blockType?.title,\n\t\t\t\tisBlockHidden: attributes?.metadata?.blockVisibility === false,\n\t\t\t};\n\n\t\t\t// When in preview mode, we can avoid a lot of selection and\n\t\t\t// editing related selectors.\n\t\t\tif ( isPreviewMode ) {\n\t\t\t\treturn previewContext;\n\t\t\t}\n\n\t\t\tconst { isBlockHidden: _isBlockHidden } = unlock(\n\t\t\t\tselect( blockEditorStore )\n\t\t\t);\n\t\t\tconst _isSelected = isBlockSelected( clientId );\n\t\t\tconst canRemove = canRemoveBlock( clientId );\n\t\t\tconst canMove = canMoveBlock( clientId );\n\t\t\tconst match = getActiveBlockVariation( blockName, attributes );\n\t\t\tconst isMultiSelected = isBlockMultiSelected( clientId );\n\t\t\tconst checkDeep = true;\n\t\t\tconst isAncestorOfSelectedBlock = hasSelectedInnerBlock(\n\t\t\t\tclientId,\n\t\t\t\tcheckDeep\n\t\t\t);\n\t\t\tconst blockEditingMode = getBlockEditingMode( clientId );\n\n\t\t\tconst multiple = hasBlockSupport( blockName, 'multiple', true );\n\n\t\t\t// For block types with `multiple` support, there is no \"original\n\t\t\t// block\" to be found in the content, as the block itself is valid.\n\t\t\tconst blocksWithSameName = multiple\n\t\t\t\t? []\n\t\t\t\t: getBlocksByName( blockName );\n\t\t\tconst isInvalid =\n\t\t\t\tblocksWithSameName.length &&\n\t\t\t\tblocksWithSameName[ 0 ] !== clientId;\n\n\t\t\treturn {\n\t\t\t\t...previewContext,\n\t\t\t\tmode: getBlockMode( clientId ),\n\t\t\t\tisSelectionEnabled: isSelectionEnabled(),\n\t\t\t\tisLocked: !! getTemplateLock( rootClientId ),\n\t\t\t\tisSectionBlock: _isSectionBlock( clientId ),\n\t\t\t\tcanRemove,\n\t\t\t\tcanMove,\n\t\t\t\tisSelected: _isSelected,\n\t\t\t\tisTemporarilyEditingAsBlocks:\n\t\t\t\t\tgetTemporarilyEditingAsBlocks() === clientId,\n\t\t\t\tblockEditingMode,\n\t\t\t\tmayDisplayControls:\n\t\t\t\t\t_isSelected ||\n\t\t\t\t\t( isFirstMultiSelectedBlock( clientId ) &&\n\t\t\t\t\t\tgetMultiSelectedBlockClientIds().every(\n\t\t\t\t\t\t\t( id ) => getBlockName( id ) === blockName\n\t\t\t\t\t\t) ),\n\t\t\t\tmayDisplayParentControls:\n\t\t\t\t\t_hasBlockSupport(\n\t\t\t\t\t\tgetBlockName( clientId ),\n\t\t\t\t\t\t'__experimentalExposeControlsToChildren',\n\t\t\t\t\t\tfalse\n\t\t\t\t\t) && hasSelectedInnerBlock( clientId ),\n\t\t\t\tblockApiVersion: blockType?.apiVersion || 1,\n\t\t\t\tblockTitle: match?.title || blockType?.title,\n\t\t\t\tisSubtreeDisabled:\n\t\t\t\t\tblockEditingMode === 'disabled' &&\n\t\t\t\t\tisBlockSubtreeDisabled( clientId ),\n\t\t\t\thasOverlay:\n\t\t\t\t\t__unstableHasActiveBlockOverlayActive( clientId ) &&\n\t\t\t\t\t! isDragging(),\n\t\t\t\tinitialPosition: _isSelected\n\t\t\t\t\t? getSelectedBlocksInitialCaretPosition()\n\t\t\t\t\t: undefined,\n\t\t\t\tisHighlighted: isBlockHighlighted( clientId ),\n\t\t\t\tisMultiSelected,\n\t\t\t\tisPartiallySelected:\n\t\t\t\t\tisMultiSelected &&\n\t\t\t\t\t! __unstableIsFullySelected() &&\n\t\t\t\t\t! __unstableSelectionHasUnmergeableBlock(),\n\t\t\t\tisDragging: isBlockBeingDragged( clientId ),\n\t\t\t\thasChildSelected: isAncestorOfSelectedBlock,\n\t\t\t\tisEditingDisabled: blockEditingMode === 'disabled',\n\t\t\t\thasEditableOutline:\n\t\t\t\t\tblockEditingMode !== 'disabled' &&\n\t\t\t\t\tgetBlockEditingMode( rootClientId ) === 'disabled',\n\t\t\t\toriginalBlockClientId: isInvalid\n\t\t\t\t\t? blocksWithSameName[ 0 ]\n\t\t\t\t\t: false,\n\t\t\t\tisBlockHidden: _isBlockHidden( clientId ),\n\t\t\t\tbindableAttributes,\n\t\t\t};\n\t\t},\n\t\t[ clientId, rootClientId ]\n\t);\n\n\tconst {\n\t\tisPreviewMode,\n\t\t// Fill values that end up as a public API and may not be defined in\n\t\t// preview mode.\n\t\tmode = 'visual',\n\t\tisSelectionEnabled = false,\n\t\tisLocked = false,\n\t\tcanRemove = false,\n\t\tcanMove = false,\n\t\tblockWithoutAttributes,\n\t\tname,\n\t\tattributes,\n\t\tisValid,\n\t\tisSelected = false,\n\t\tthemeSupportsLayout,\n\t\tisTemporarilyEditingAsBlocks,\n\t\tblockEditingMode,\n\t\tmayDisplayControls,\n\t\tmayDisplayParentControls,\n\t\tindex,\n\t\tblockApiVersion,\n\t\tblockTitle,\n\t\tisSubtreeDisabled,\n\t\thasOverlay,\n\t\tinitialPosition,\n\t\tisHighlighted,\n\t\tisMultiSelected,\n\t\tisPartiallySelected,\n\t\tisReusable,\n\t\tisDragging,\n\t\thasChildSelected,\n\t\tisSectionBlock,\n\t\tisEditingDisabled,\n\t\thasEditableOutline,\n\t\tclassName,\n\t\tdefaultClassName,\n\t\toriginalBlockClientId,\n\t\tisBlockHidden,\n\t\tbindableAttributes,\n\t} = selectedProps;\n\n\t// Users of the editor.BlockListBlock filter used to be able to\n\t// access the block prop.\n\t// Ideally these blocks would rely on the clientId prop only.\n\t// This is kept for backward compatibility reasons.\n\tconst block = useMemo(\n\t\t() => ( { ...blockWithoutAttributes, attributes } ),\n\t\t[ blockWithoutAttributes, attributes ]\n\t);\n\n\t// Block is sometimes not mounted at the right time, causing it be\n\t// undefined see issue for more info\n\t// https://github.com/WordPress/gutenberg/issues/17013\n\tif ( ! selectedProps ) {\n\t\treturn null;\n\t}\n\n\tconst privateContext = {\n\t\tisPreviewMode,\n\t\tclientId,\n\t\tclassName,\n\t\tindex,\n\t\tmode,\n\t\tname,\n\t\tblockApiVersion,\n\t\tblockTitle,\n\t\tisSelected,\n\t\tisSubtreeDisabled,\n\t\thasOverlay,\n\t\tinitialPosition,\n\t\tblockEditingMode,\n\t\tisHighlighted,\n\t\tisMultiSelected,\n\t\tisPartiallySelected,\n\t\tisReusable,\n\t\tisDragging,\n\t\thasChildSelected,\n\t\tisSectionBlock,\n\t\tisEditingDisabled,\n\t\thasEditableOutline,\n\t\tisTemporarilyEditingAsBlocks,\n\t\tdefaultClassName,\n\t\tmayDisplayControls,\n\t\tmayDisplayParentControls,\n\t\toriginalBlockClientId,\n\t\tthemeSupportsLayout,\n\t\tcanMove,\n\t\tisBlockHidden,\n\t\tbindableAttributes,\n\t};\n\n\tif (\n\t\tisBlockHidden &&\n\t\t! isSelected &&\n\t\t! isMultiSelected &&\n\t\t! hasChildSelected\n\t) {\n\t\treturn null;\n\t}\n\n\t// Here we separate between the props passed to BlockListBlock and any other\n\t// information we selected for internal use. BlockListBlock is a filtered\n\t// component and thus ALL the props are PUBLIC API.\n\n\t// Note that the context value doesn't have to be memoized in this case\n\t// because when it changes, this component will be re-rendered anyway, and\n\t// none of the consumers (BlockListBlock and useBlockProps) are memoized or\n\t// \"pure\". This is different from the public BlockEditContext, where\n\t// consumers might be memoized or \"pure\".\n\treturn (\n\t\t<PrivateBlockContext.Provider value={ privateContext }>\n\t\t\t<BlockListBlock\n\t\t\t\t{ ...props }\n\t\t\t\t// WARNING: all the following props are public API (through the\n\t\t\t\t// editor.BlockListBlock filter) and normally nothing new should\n\t\t\t\t// be added to it.\n\t\t\t\t{ ...{\n\t\t\t\t\tmode,\n\t\t\t\t\tisSelectionEnabled,\n\t\t\t\t\tisLocked,\n\t\t\t\t\tcanRemove,\n\t\t\t\t\tcanMove,\n\t\t\t\t\t// Users of the editor.BlockListBlock filter used to be able\n\t\t\t\t\t// to access the block prop. Ideally these blocks would rely\n\t\t\t\t\t// on the clientId prop only. This is kept for backward\n\t\t\t\t\t// compatibility reasons.\n\t\t\t\t\tblock,\n\t\t\t\t\tname,\n\t\t\t\t\tattributes,\n\t\t\t\t\tisValid,\n\t\t\t\t\tisSelected,\n\t\t\t\t} }\n\t\t\t/>\n\t\t</PrivateBlockContext.Provider>\n\t);\n}\n\nexport default memo( BlockListBlockProvider );\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AA6EE;AA1EF,kBAAiB;AAKjB,qBAAmD;AACnD,oBAaO;AACP,wBAA4B;AAC5B,kBAAwC;AACxC,qBAAwB;AACxB,iBAAyB;AAKzB,wBAAsB;AACtB,mCAAgC;AAChC,iCAA8B;AAC9B,kCAA+B;AAC/B,wBAAsB;AACtB,6BAA8B;AAC9B,mBAA0C;AAC1C,oBAA0B;AAC1B,mCAAoC;AAEpC,yBAAuB;AAUvB,SAAS,kBAAmB,QAAQ,QAAS;AAC5C,QAAM,WAAW;AAAA,IAChB,GAAG;AAAA,IACH,GAAG;AAAA,EACJ;AAGA,MACC,QAAQ,eAAgB,WAAY,KACpC,QAAQ,eAAgB,WAAY,GACnC;AACD,aAAS,gBAAY,YAAAA,SAAM,OAAO,WAAW,OAAO,SAAU;AAAA,EAC/D;AAEA,MACC,QAAQ,eAAgB,OAAQ,KAChC,QAAQ,eAAgB,OAAQ,GAC/B;AACD,aAAS,QAAQ,EAAE,GAAG,OAAO,OAAO,GAAG,OAAO,MAAM;AAAA,EACrD;AAEA,SAAO;AACR;AAEA,SAAS,MAAO,EAAE,UAAU,QAAQ,GAAG,MAAM,GAAI;AAChD,SACC,4CAAC,SAAM,OAAG,sCAAe,OAAO,EAAE,kBAAkB,OAAO,CAAE,GAC1D,UACH;AAEF;AAEA,SAAS,eAAgB;AAAA,EACxB,OAAO,EAAE,sBAAsB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,4BAA4B;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,GAAI;AACH,QAAM;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACJ,QAAI,2BAAY,gDAAoB;AAEpC,QAAM,mBAAe,yBAAU,KAAK,CAAC;AAMrC,MAAI,YACH;AAAA,IAAC,kBAAAC;AAAA,IAAA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,mBAAoB,WAAW,SAAY;AAAA,MAC3C,WAAY,YAAY,YAAY;AAAA,MACpC,UAAW,YAAY,WAAW;AAAA,MAClC,aAAc,YAAY,UAAU;AAAA,MACpC;AAAA,MACA;AAAA,MACA;AAAA,MACA,4BAA6B;AAAA,MAC7B,wBACC,OAAO,KAAM,YAAa,EAAE,SAAS,eAAe;AAAA,MAErD;AAAA,MACA;AAAA,MACA,kBAAmB,QAAQ;AAAA,MAC3B,eAAgB,QAAQ;AAAA;AAAA,EACzB;AAGD,QAAM,gBAAY,4BAAc,IAAK;AAGrC,MAAK,WAAW,qBAAsB;AACrC,mBAAe;AAAA,MACd;AAAA,MACA,UAAU,oBAAqB,UAAW;AAAA,IAC3C;AAAA,EACD;AAEA,QAAM,YACL,gBACA,CAAC,CAAE,aAAc,YAAa,KAC9B,CAAE;AAIH,QAAM,WAAW,WAAW,SAAU,oBAAqB;AAU3D,MAAK,WAAY;AAChB,gBACC;AAAA,MAAC;AAAA;AAAA,QACA,eAAY,YAAAD,SAAM,YAAY,YAAY,SAAU;AAAA,QACpD,cAAa,aAAc,YAAa;AAAA,QAEtC;AAAA;AAAA,IACH;AAAA,EAEF;AAEA,MAAI;AAEJ,MAAK,CAAE,SAAU;AAChB,UAAM,cAAc,4BACjB,iCAAmB,qBAAsB,QACzC,8BAAgB,WAAW,UAAW;AAEzC,YACC,6CAAC,SAAM,WAAU,eAChB;AAAA,kDAAC,6BAAAE,SAAA,EAAoB,UAAsB;AAAA,MAC3C,4CAAC,0BAAU,mCAAU,WAAY,GAAG;AAAA,OACrC;AAAA,EAEF,WAAY,SAAS,QAAS;AAG7B,YACC,4EACC;AAAA,kDAAC,SAAI,OAAQ,EAAE,SAAS,OAAO,GAAM,qBAAW;AAAA,MAChD,4CAAC,SAAM,QAAM,MACZ,sDAAC,kBAAAC,SAAA,EAAU,UAAsB,GAClC;AAAA,OACD;AAAA,EAEF,WAAY,WAAW,aAAa,GAAI;AACvC,YAAQ;AAAA,EACT,OAAO;AACN,YAAQ,4CAAC,SAAQ,qBAAW;AAAA,EAC7B;AAEA,QAAM,EAAE,cAAc,WAAW,GAAG,iBAAiB,IAAI,gBAAgB,CAAC;AAC1E,QAAM,sBAAsB;AAAA,IAC3B,GAAG;AAAA,IACH,eAAW,YAAAH;AAAA,MACV,iBAAiB;AAAA,MACjB,aAAa,uBAAuB,QAAS,SAAU;AAAA,MACvD,EAAI,aAAa,aAAc;AAAA,IAChC;AAAA,EACD;AAUA,SACC;AAAA,IAAC,iDAAoB;AAAA,IAApB;AAAA,MACA,OAAQ;AAAA,QACP,cAAc;AAAA,QACd;AAAA,QACA,GAAG;AAAA,MACJ;AAAA,MAEA;AAAA,QAAC,4BAAAI;AAAA,QAAA;AAAA,UACA,UACC,4CAAC,SAAM,WAAU,eAChB,sDAAC,2BAAAC,SAAA,EAAkB,GACpB;AAAA,UAGC;AAAA;AAAA,MACH;AAAA;AAAA,EACD;AAEF;AAEA,MAAM,wBAAoB,0BAAc,CAAE,UAAU,UAAU,aAAc;AAC3E,QAAM;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD,IAAI,SAAU,aAAAC,KAAiB;AAI/B,SAAO;AAAA,IACN,cAAe,gBAAiB;AAC/B,YAAM,EAAE,+BAA+B,IACtC,SAAS,OAAQ,aAAAA,KAAiB;AACnC,YAAM,8BACL,+BAA+B;AAChC,YAAM,EAAE,UAAU,WAAW,IAAI;AACjC,YAAM,YAAY,4BAA4B,SAC3C,8BACA,CAAE,QAAS;AACd,YAAM,gBACL,OAAO,mBAAmB,aACvB,eAAgB,UAAW,IAC3B;AAEJ,4BAAuB,WAAW,aAAc;AAAA,IACjD;AAAA,IACA,eAAgB,QAAQ,OAAQ;AAC/B,YAAM,EAAE,aAAa,IAAI;AACzB,mBAAc,QAAQ,OAAO,YAAa;AAAA,IAC3C;AAAA,IACA,oBAAqB,QAAS;AAC7B,YAAM,EAAE,UAAU,aAAa,IAAI;AACnC,YAAM,EAAE,cAAc,IAAI,SAAS,OAAQ,aAAAA,KAAiB;AAC5D,YAAM,QAAQ,cAAe,QAAS;AACtC,mBAAc,QAAQ,QAAQ,GAAG,YAAa;AAAA,IAC/C;AAAA,IACA,QAAS,SAAU;AAClB,YAAM,EAAE,UAAU,aAAa,IAAI;AACnC,YAAM;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACD,IAAI,SAAS,OAAQ,aAAAA,KAAiB;AAEtC,eAAS,0BAA0B;AAClC,cAAM,QAAQ,SAAU,QAAS;AACjC,cAAM,uBAAmB,mCAAoB;AAC7C,cAAM,uBAAmB,4BAAc,gBAAiB;AACxD,YAAK,aAAc,QAAS,MAAM,kBAAmB;AACpD,gBAAM,kBAAc;AAAA,YACnB;AAAA,YACA;AAAA,UACD;AACA,cAAK,eAAe,YAAY,QAAS;AACxC,0BAAe,UAAU,WAAY;AAAA,UACtC;AAAA,QACD,eAAY,wCAA0B,KAAM,GAAI;AAC/C,gBAAM,oBAAoB,qBAAsB,QAAS;AACzD,cAAK,mBAAoB;AACxB,qBAAS,MAAO,MAAM;AACrB,0BAAa,QAAS;AACtB,0BAAa,iBAAkB;AAAA,YAChC,CAAE;AAAA,UACH;AAAA,QACD,WAAY,iBAAiB,OAAQ;AACpC,gBAAM,aAAa,iBAAiB;AAAA,YACnC,CAAC;AAAA,YACD,MAAM;AAAA,UACP;AACA;AAAA,YACC,CAAE,QAAS;AAAA,YACX,KAAE,2BAAa,kBAAkB,UAAW,CAAE;AAAA,UAC/C;AAAA,QACD;AAAA,MACD;AAWA,eAAS,gBAAiB,WAAW,kBAAkB,MAAO;AAC7D,cAAM,mBAAmB,aAAc,SAAU;AACjD,cAAM,uBAAmB,4BAAc,gBAAiB;AACxD,cAAM,mBAAmB,iBAAiB,aAAa;AACvD,cAAM,qBAAqB,qBAAsB,SAAU;AAC3D,cAAM,aAAa,cAAe,SAAU;AAC5C,cAAM,CAAE,aAAc,IAAI;AAE1B,YACC,WAAW,WAAW,SACtB,iCAAmB,SAAU,aAAc,CAAE,GAC5C;AACD,sBAAa,SAAU;AAAA,QACxB,WAAY,kBAAmB;AAC9B,mBAAS,MAAO,MAAM;AACrB,gBACC;AAAA,cACC,aAAc,aAAc;AAAA,cAC5B;AAAA,YACD,GACC;AACD;AAAA,gBACC,CAAE,aAAc;AAAA,gBAChB;AAAA,gBACA;AAAA,gBACA,cAAe,SAAU;AAAA,cAC1B;AAAA,YACD,OAAO;AACN,oBAAM,kBAAc;AAAA,gBACnB,SAAU,aAAc;AAAA,oBACxB,mCAAoB;AAAA,cACrB;AAEA,kBACC,eACA,YAAY,UACZ,YAAY;AAAA,gBAAO,CAAE,UACpB;AAAA,kBACC,MAAM;AAAA,kBACN;AAAA,gBACD;AAAA,cACD,GACC;AACD;AAAA,kBACC;AAAA,kBACA,cAAe,SAAU;AAAA,kBACzB;AAAA,kBACA;AAAA,gBACD;AACA,4BAAa,eAAe,KAAM;AAAA,cACnC,OAAO;AACN,wCAAwB;AAAA,cACzB;AAAA,YACD;AAEA,gBACC,CAAE,cAAe,SAAU,EAAE,cAC7B,iCAAmB,SAAU,SAAU,CAAE,GACxC;AACD,0BAAa,WAAW,KAAM;AAAA,YAC/B;AAAA,UACD,CAAE;AAAA,QACH,OAAO;AACN,kCAAwB;AAAA,QACzB;AAAA,MACD;AAIA,UAAK,SAAU;AACd,YAAK,cAAe;AACnB,gBAAM,mBACL,qBAAsB,YAAa;AAEpC,cAAK,kBAAmB;AAIvB,gBACC,aAAc,YAAa,MAC3B,aAAc,gBAAiB,GAC9B;AACD,oBAAM,iBACL,mBAAoB,YAAa;AAClC,oBAAM,yBACL,mBAAoB,gBAAiB;AAEtC,kBACC,OAAO,KAAM,cAAe,EAAE;AAAA,gBAC7B,CAAE,QACD,eAAgB,GAAI,MACpB,uBAAwB,GAAI;AAAA,cAC9B,GACC;AACD,yBAAS,MAAO,MAAM;AACrB;AAAA,oBACC,cAAe,gBAAiB;AAAA,oBAChC;AAAA,oBACA;AAAA,kBACD;AACA,8BAAa,kBAAkB,KAAM;AAAA,gBACtC,CAAE;AACF;AAAA,cACD;AAAA,YACD,OAAO;AACN,0BAAa,cAAc,gBAAiB;AAC5C;AAAA,YACD;AAAA,UACD;AAAA,QACD;AAEA,cAAM,oBAAoB,qBAAsB,QAAS;AAEzD,YAAK,CAAE,mBAAoB;AAC1B;AAAA,QACD;AAEA,YAAK,cAAe,iBAAkB,EAAE,QAAS;AAChD,0BAAiB,mBAAmB,KAAM;AAAA,QAC3C,OAAO;AACN,sBAAa,UAAU,iBAAkB;AAAA,QAC1C;AAAA,MACD,OAAO;AACN,cAAM,wBACL,yBAA0B,QAAS;AAEpC,YAAK,uBAAwB;AAC5B,sBAAa,uBAAuB,QAAS;AAAA,QAC9C,WAAY,cAAe;AAC1B,gBAAM,uBACL,yBAA0B,YAAa;AAIxC,cACC,wBACA,aAAc,YAAa,MAC1B,aAAc,oBAAqB,GACnC;AACD,kBAAM,iBACL,mBAAoB,YAAa;AAClC,kBAAM,yBACL,mBAAoB,oBAAqB;AAE1C,gBACC,OAAO,KAAM,cAAe,EAAE;AAAA,cAC7B,CAAE,QACD,eAAgB,GAAI,MACpB,uBAAwB,GAAI;AAAA,YAC9B,GACC;AACD,uBAAS,MAAO,MAAM;AACrB;AAAA,kBACC,cAAe,YAAa;AAAA,kBAC5B;AAAA,kBACA;AAAA,gBACD;AACA,4BAAa,cAAc,KAAM;AAAA,cAClC,CAAE;AACF;AAAA,YACD;AAAA,UACD;AAEA,0BAAiB,YAAa;AAAA,QAC/B,OAAO;AACN,kCAAwB;AAAA,QACzB;AAAA,MACD;AAAA,IACD;AAAA,IACA,UAAW,QAAQ,eAAe,iBAAkB;AACnD,UACC,OAAO,UACP,KAAE,wCAA0B,OAAQ,OAAO,SAAS,CAAE,CAAE,GACvD;AACD,6CAAqC;AAAA,MACtC;AAEA,YAAM,oBACL,QAAQ,WAAW,KAAK,MAAM,QAAS,OAAQ,CAAE,CAAE,IAChD,OAAQ,CAAE,IACV;AACJ;AAAA,QACC,CAAE,SAAS,QAAS;AAAA,QACpB;AAAA,QACA;AAAA,QACA;AAAA,MACD;AAAA,IACD;AAAA,IACA,WAAW;AACV,kBAAa,SAAS,QAAS;AAAA,IAChC;AAAA,IACA,gBAAiB,kBAAmB;AACnC,sBAAiB,gBAAiB;AAAA,IACnC;AAAA,EACD;AACD,CAAE;AAIF,qBAAiB;AAAA,EAChB;AAAA,MACA,+BAAa,uBAAwB;AACtC,EAAG,cAAe;AAQlB,SAAS,uBAAwB,OAAQ;AACxC,QAAM,EAAE,UAAU,aAAa,IAAI;AACnC,QAAM,oBAAgB;AAAA,IACrB,CAAE,WAAY;AACb,YAAM;AAAA,QACL;AAAA,QACA;AAAA,QACA,oBAAAC;AAAA,QACA;AAAA,QACA,gBAAgB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QAEA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QAEA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,YAAAC;AAAA,QACA;AAAA,QACA;AAAA,MACD,QAAI,2BAAQ,OAAQ,aAAAF,KAAiB,CAAE;AACvC,YAAMG,0BACL,0BAA2B,QAAS;AAMrC,UAAK,CAAEA,yBAAyB;AAC/B;AAAA,MACD;AAEA,YAAM;AAAA,QACL,iBAAiB;AAAA,QACjB;AAAA,MACD,IAAI,OAAQ,cAAAC,KAAY;AACxB,YAAMC,cAAa,mBAAoB,QAAS;AAChD,YAAM,EAAE,MAAM,WAAW,SAAAC,SAAQ,IAAIH;AACrC,YAAM,gBAAY,4BAAc,SAAU;AAC1C,YAAM;AAAA,QACL;AAAA,QACA,eAAAI;AAAA,QACA;AAAA,MACD,IAAI,YAAY;AAEhB,YAAMC,sBACL,iDAAkD,SAAU;AAE7D,YAAM,uBAAuB,WAAW,aAAa;AACrD,YAAM,iBAAiB;AAAA,QACtB,eAAAD;AAAA,QACA,wBAAAJ;AAAA,QACA,MAAM;AAAA,QACN,YAAAE;AAAA,QACA,SAAAC;AAAA,QACA,qBAAqB;AAAA,QACrB,OAAO,cAAe,QAAS;AAAA,QAC/B,gBAAY,+BAAiB,SAAU;AAAA,QACvC,WAAW,uBACRD,YAAW,YACX;AAAA,QACH,kBAAkB,2BACf,wCAA0B,SAAU,IACpC;AAAA,QACH,YAAY,WAAW;AAAA,QACvB,eAAeA,aAAY,UAAU,oBAAoB;AAAA,MAC1D;AAIA,UAAKE,gBAAgB;AACpB,eAAO;AAAA,MACR;AAEA,YAAM,EAAE,eAAe,eAAe,QAAI;AAAA,QACzC,OAAQ,aAAAP,KAAiB;AAAA,MAC1B;AACA,YAAM,cAAc,gBAAiB,QAAS;AAC9C,YAAMS,aAAY,eAAgB,QAAS;AAC3C,YAAMC,WAAU,aAAc,QAAS;AACvC,YAAM,QAAQ,wBAAyB,WAAWL,WAAW;AAC7D,YAAMM,mBAAkB,qBAAsB,QAAS;AACvD,YAAM,YAAY;AAClB,YAAM,4BAA4B;AAAA,QACjC;AAAA,QACA;AAAA,MACD;AACA,YAAMC,oBAAmB,oBAAqB,QAAS;AAEvD,YAAM,eAAW,+BAAiB,WAAW,YAAY,IAAK;AAI9D,YAAM,qBAAqB,WACxB,CAAC,IACD,gBAAiB,SAAU;AAC9B,YAAM,YACL,mBAAmB,UACnB,mBAAoB,CAAE,MAAM;AAE7B,aAAO;AAAA,QACN,GAAG;AAAA,QACH,MAAM,aAAc,QAAS;AAAA,QAC7B,oBAAoBX,oBAAmB;AAAA,QACvC,UAAU,CAAC,CAAE,gBAAiB,YAAa;AAAA,QAC3C,gBAAgB,gBAAiB,QAAS;AAAA,QAC1C,WAAAQ;AAAA,QACA,SAAAC;AAAA,QACA,YAAY;AAAA,QACZ,8BACC,8BAA8B,MAAM;AAAA,QACrC,kBAAAE;AAAA,QACA,oBACC,eACE,0BAA2B,QAAS,KACrC,+BAA+B,EAAE;AAAA,UAChC,CAAE,OAAQ,aAAc,EAAG,MAAM;AAAA,QAClC;AAAA,QACF,0BACC;AAAA,UACC,aAAc,QAAS;AAAA,UACvB;AAAA,UACA;AAAA,QACD,KAAK,sBAAuB,QAAS;AAAA,QACtC,iBAAiB,WAAW,cAAc;AAAA,QAC1C,YAAY,OAAO,SAAS,WAAW;AAAA,QACvC,mBACCA,sBAAqB,cACrB,uBAAwB,QAAS;AAAA,QAClC,YACC,sCAAuC,QAAS,KAChD,CAAEV,YAAW;AAAA,QACd,iBAAiB,cACd,sCAAsC,IACtC;AAAA,QACH,eAAe,mBAAoB,QAAS;AAAA,QAC5C,iBAAAS;AAAA,QACA,qBACCA,oBACA,CAAE,0BAA0B,KAC5B,CAAE,uCAAuC;AAAA,QAC1C,YAAY,oBAAqB,QAAS;AAAA,QAC1C,kBAAkB;AAAA,QAClB,mBAAmBC,sBAAqB;AAAA,QACxC,oBACCA,sBAAqB,cACrB,oBAAqB,YAAa,MAAM;AAAA,QACzC,uBAAuB,YACpB,mBAAoB,CAAE,IACtB;AAAA,QACH,eAAe,eAAgB,QAAS;AAAA,QACxC,oBAAAJ;AAAA,MACD;AAAA,IACD;AAAA,IACA,CAAE,UAAU,YAAa;AAAA,EAC1B;AAEA,QAAM;AAAA,IACL;AAAA;AAAA;AAAA,IAGA,OAAO;AAAA,IACP,qBAAqB;AAAA,IACrB,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,UAAU;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAa;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD,IAAI;AAMJ,QAAM,YAAQ;AAAA,IACb,OAAQ,EAAE,GAAG,wBAAwB,WAAW;AAAA,IAChD,CAAE,wBAAwB,UAAW;AAAA,EACtC;AAKA,MAAK,CAAE,eAAgB;AACtB,WAAO;AAAA,EACR;AAEA,QAAM,iBAAiB;AAAA,IACtB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAEA,MACC,iBACA,CAAE,cACF,CAAE,mBACF,CAAE,kBACD;AACD,WAAO;AAAA,EACR;AAWA,SACC,4CAAC,iDAAoB,UAApB,EAA6B,OAAQ,gBACrC;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MAIH,GAAG;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AAAA;AAAA;AAAA;AAAA,QAKA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACD;AAAA;AAAA,EACD,GACD;AAEF;AAEA,IAAO,oBAAQ,qBAAM,sBAAuB;",
6
+ "names": ["clsx", "BlockEdit", "BlockInvalidWarning", "BlockHtml", "BlockCrashBoundary", "BlockCrashWarning", "blockEditorStore", "isSelectionEnabled", "isDragging", "blockWithoutAttributes", "blocksStore", "attributes", "isValid", "isPreviewMode", "bindableAttributes", "canRemove", "canMove", "isMultiSelected", "blockEditingMode"]
7
7
  }
@@ -15,8 +15,8 @@ import {
15
15
  hasPatternOverridesDefaultBinding,
16
16
  replacePatternOverridesDefaultBinding
17
17
  } from "../../utils/block-bindings";
18
- import { store as blockEditorStore } from "../../store";
19
18
  import { unlock } from "../../lock-unlock";
19
+ import { PrivateBlockContext } from "../block-list/private-block-context";
20
20
  const DEFAULT_BLOCK_CONTEXT = {};
21
21
  const Edit = (props) => {
22
22
  const { name } = props;
@@ -28,7 +28,6 @@ const Edit = (props) => {
28
28
  return /* @__PURE__ */ jsx(Component, { ...props });
29
29
  };
30
30
  const EditWithFilters = withFilters("editor.BlockEdit")(Edit);
31
- const EMPTY_ARRAY = [];
32
31
  const EditWithGeneratedProps = (props) => {
33
32
  const { name, clientId, attributes, setAttributes } = props;
34
33
  const registry = useRegistry();
@@ -38,13 +37,7 @@ const EditWithGeneratedProps = (props) => {
38
37
  (select) => unlock(select(blocksStore)).getAllBlockBindingsSources(),
39
38
  []
40
39
  );
41
- const bindableAttributes = useSelect(
42
- (select) => {
43
- const { __experimentalBlockBindingsSupportedAttributes } = select(blockEditorStore).getSettings();
44
- return __experimentalBlockBindingsSupportedAttributes?.[name] || EMPTY_ARRAY;
45
- },
46
- [name]
47
- );
40
+ const { bindableAttributes } = useContext(PrivateBlockContext);
48
41
  const { blockBindings, context, hasPatternOverrides } = useMemo(() => {
49
42
  const computedContext = blockType?.usesContext ? Object.fromEntries(
50
43
  Object.entries(blockContext).filter(
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/block-edit/edit.js"],
4
- "sourcesContent": ["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tgetBlockDefaultClassName,\n\tgetBlockType,\n\thasBlockSupport,\n\tstore as blocksStore,\n} from '@wordpress/blocks';\nimport { withFilters } from '@wordpress/components';\nimport { useRegistry, useSelect } from '@wordpress/data';\nimport { useCallback, useContext, useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport BlockContext from '../block-context';\nimport isURLLike from '../link-control/is-url-like';\nimport {\n\thasPatternOverridesDefaultBinding,\n\treplacePatternOverridesDefaultBinding,\n} from '../../utils/block-bindings';\nimport { store as blockEditorStore } from '../../store';\nimport { unlock } from '../../lock-unlock';\n\n/**\n * Default value used for blocks which do not define their own context needs,\n * used to guarantee that a block's `context` prop will always be an object. It\n * is assigned as a constant since it is always expected to be an empty object,\n * and in order to avoid unnecessary React reconciliations of a changing object.\n *\n * @type {{}}\n */\nconst DEFAULT_BLOCK_CONTEXT = {};\n\nconst Edit = ( props ) => {\n\tconst { name } = props;\n\tconst blockType = getBlockType( name );\n\n\tif ( ! blockType ) {\n\t\treturn null;\n\t}\n\n\t// `edit` and `save` are functions or components describing the markup\n\t// with which a block is displayed. If `blockType` is valid, assign\n\t// them preferentially as the render value for the block.\n\tconst Component = blockType.edit || blockType.save;\n\n\treturn <Component { ...props } />;\n};\n\nconst EditWithFilters = withFilters( 'editor.BlockEdit' )( Edit );\n\nconst EMPTY_ARRAY = [];\n\nconst EditWithGeneratedProps = ( props ) => {\n\tconst { name, clientId, attributes, setAttributes } = props;\n\tconst registry = useRegistry();\n\tconst blockType = getBlockType( name );\n\tconst blockContext = useContext( BlockContext );\n\tconst registeredSources = useSelect(\n\t\t( select ) =>\n\t\t\tunlock( select( blocksStore ) ).getAllBlockBindingsSources(),\n\t\t[]\n\t);\n\tconst bindableAttributes = useSelect(\n\t\t( select ) => {\n\t\t\tconst { __experimentalBlockBindingsSupportedAttributes } =\n\t\t\t\tselect( blockEditorStore ).getSettings();\n\t\t\treturn (\n\t\t\t\t__experimentalBlockBindingsSupportedAttributes?.[ name ] ||\n\t\t\t\tEMPTY_ARRAY\n\t\t\t);\n\t\t},\n\t\t[ name ]\n\t);\n\n\tconst { blockBindings, context, hasPatternOverrides } = useMemo( () => {\n\t\t// Assign context values using the block type's declared context needs.\n\t\tconst computedContext = blockType?.usesContext\n\t\t\t? Object.fromEntries(\n\t\t\t\t\tObject.entries( blockContext ).filter( ( [ key ] ) =>\n\t\t\t\t\t\tblockType.usesContext.includes( key )\n\t\t\t\t\t)\n\t\t\t )\n\t\t\t: DEFAULT_BLOCK_CONTEXT;\n\t\t// Add context requested by Block Bindings sources.\n\t\tif ( attributes?.metadata?.bindings ) {\n\t\t\tObject.values( attributes?.metadata?.bindings || {} ).forEach(\n\t\t\t\t( binding ) => {\n\t\t\t\t\tregisteredSources[ binding?.source ]?.usesContext?.forEach(\n\t\t\t\t\t\t( key ) => {\n\t\t\t\t\t\t\tcomputedContext[ key ] = blockContext[ key ];\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t\treturn {\n\t\t\tblockBindings: replacePatternOverridesDefaultBinding(\n\t\t\t\tattributes?.metadata?.bindings,\n\t\t\t\tbindableAttributes\n\t\t\t),\n\t\t\tcontext: computedContext,\n\t\t\thasPatternOverrides: hasPatternOverridesDefaultBinding(\n\t\t\t\tattributes?.metadata?.bindings\n\t\t\t),\n\t\t};\n\t}, [\n\t\tname,\n\t\tblockType?.usesContext,\n\t\tblockContext,\n\t\tattributes?.metadata?.bindings,\n\t\tregisteredSources,\n\t] );\n\n\tconst computedAttributes = useSelect(\n\t\t( select ) => {\n\t\t\tif ( ! blockBindings ) {\n\t\t\t\treturn attributes;\n\t\t\t}\n\n\t\t\tconst attributesFromSources = {};\n\t\t\tconst blockBindingsBySource = new Map();\n\n\t\t\tfor ( const [ attributeName, binding ] of Object.entries(\n\t\t\t\tblockBindings\n\t\t\t) ) {\n\t\t\t\tconst { source: sourceName, args: sourceArgs } = binding;\n\t\t\t\tconst source = registeredSources[ sourceName ];\n\t\t\t\tif (\n\t\t\t\t\t! source ||\n\t\t\t\t\t! bindableAttributes.includes( attributeName )\n\t\t\t\t) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tblockBindingsBySource.set( source, {\n\t\t\t\t\t...blockBindingsBySource.get( source ),\n\t\t\t\t\t[ attributeName ]: {\n\t\t\t\t\t\targs: sourceArgs,\n\t\t\t\t\t},\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tif ( blockBindingsBySource.size ) {\n\t\t\t\tfor ( const [ source, bindings ] of blockBindingsBySource ) {\n\t\t\t\t\t// Get values in batch if the source supports it.\n\t\t\t\t\tlet values = {};\n\t\t\t\t\tif ( ! source.getValues ) {\n\t\t\t\t\t\tObject.keys( bindings ).forEach( ( attr ) => {\n\t\t\t\t\t\t\t// Default to the the source label when `getValues` doesn't exist.\n\t\t\t\t\t\t\tvalues[ attr ] = source.label;\n\t\t\t\t\t\t} );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvalues = source.getValues( {\n\t\t\t\t\t\t\tselect,\n\t\t\t\t\t\t\tcontext,\n\t\t\t\t\t\t\tclientId,\n\t\t\t\t\t\t\tbindings,\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t\tfor ( const [ attributeName, value ] of Object.entries(\n\t\t\t\t\t\tvalues\n\t\t\t\t\t) ) {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tattributeName === 'url' &&\n\t\t\t\t\t\t\t( ! value || ! isURLLike( value ) )\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t// Return null if value is not a valid URL.\n\t\t\t\t\t\t\tattributesFromSources[ attributeName ] = null;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tattributesFromSources[ attributeName ] = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\t...attributes,\n\t\t\t\t...attributesFromSources,\n\t\t\t};\n\t\t},\n\t\t[\n\t\t\tattributes,\n\t\t\tbindableAttributes,\n\t\t\tblockBindings,\n\t\t\tclientId,\n\t\t\tcontext,\n\t\t\tname,\n\t\t\tregisteredSources,\n\t\t]\n\t);\n\n\tconst setBoundAttributes = useCallback(\n\t\t( nextAttributes ) => {\n\t\t\tif ( ! blockBindings ) {\n\t\t\t\tsetAttributes( nextAttributes );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tregistry.batch( () => {\n\t\t\t\tconst keptAttributes = { ...nextAttributes };\n\t\t\t\tconst blockBindingsBySource = new Map();\n\n\t\t\t\t// Loop only over the updated attributes to avoid modifying the bound ones that haven't changed.\n\t\t\t\tfor ( const [ attributeName, newValue ] of Object.entries(\n\t\t\t\t\tkeptAttributes\n\t\t\t\t) ) {\n\t\t\t\t\tif (\n\t\t\t\t\t\t! blockBindings[ attributeName ] ||\n\t\t\t\t\t\t! bindableAttributes.includes( attributeName )\n\t\t\t\t\t) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst binding = blockBindings[ attributeName ];\n\t\t\t\t\tconst source = registeredSources[ binding?.source ];\n\t\t\t\t\tif ( ! source?.setValues ) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tblockBindingsBySource.set( source, {\n\t\t\t\t\t\t...blockBindingsBySource.get( source ),\n\t\t\t\t\t\t[ attributeName ]: {\n\t\t\t\t\t\t\targs: binding.args,\n\t\t\t\t\t\t\tnewValue,\n\t\t\t\t\t\t},\n\t\t\t\t\t} );\n\t\t\t\t\tdelete keptAttributes[ attributeName ];\n\t\t\t\t}\n\n\t\t\t\tif ( blockBindingsBySource.size ) {\n\t\t\t\t\tfor ( const [\n\t\t\t\t\t\tsource,\n\t\t\t\t\t\tbindings,\n\t\t\t\t\t] of blockBindingsBySource ) {\n\t\t\t\t\t\tsource.setValues( {\n\t\t\t\t\t\t\tselect: registry.select,\n\t\t\t\t\t\t\tdispatch: registry.dispatch,\n\t\t\t\t\t\t\tcontext,\n\t\t\t\t\t\t\tclientId,\n\t\t\t\t\t\t\tbindings,\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst hasParentPattern = !! context[ 'pattern/overrides' ];\n\n\t\t\t\tif (\n\t\t\t\t\t// Don't update non-connected attributes if the block is using pattern overrides\n\t\t\t\t\t// and the editing is happening while overriding the pattern (not editing the original).\n\t\t\t\t\t! ( hasPatternOverrides && hasParentPattern ) &&\n\t\t\t\t\tObject.keys( keptAttributes ).length\n\t\t\t\t) {\n\t\t\t\t\t// Don't update caption and href until they are supported.\n\t\t\t\t\tif ( hasPatternOverrides ) {\n\t\t\t\t\t\tdelete keptAttributes.caption;\n\t\t\t\t\t\tdelete keptAttributes.href;\n\t\t\t\t\t}\n\t\t\t\t\tsetAttributes( keptAttributes );\n\t\t\t\t}\n\t\t\t} );\n\t\t},\n\t\t[\n\t\t\tbindableAttributes,\n\t\t\tblockBindings,\n\t\t\tclientId,\n\t\t\tcontext,\n\t\t\thasPatternOverrides,\n\t\t\tsetAttributes,\n\t\t\tregisteredSources,\n\t\t\tname,\n\t\t\tregistry,\n\t\t]\n\t);\n\n\tif ( ! blockType ) {\n\t\treturn null;\n\t}\n\n\tif ( blockType.apiVersion > 1 ) {\n\t\treturn (\n\t\t\t<EditWithFilters\n\t\t\t\t{ ...props }\n\t\t\t\tattributes={ computedAttributes }\n\t\t\t\tcontext={ context }\n\t\t\t\tsetAttributes={ setBoundAttributes }\n\t\t\t/>\n\t\t);\n\t}\n\n\t// Generate a class name for the block's editable form.\n\tconst generatedClassName = hasBlockSupport( blockType, 'className', true )\n\t\t? getBlockDefaultClassName( name )\n\t\t: null;\n\tconst className = clsx(\n\t\tgeneratedClassName,\n\t\tattributes?.className,\n\t\tprops.className\n\t);\n\n\treturn (\n\t\t<EditWithFilters\n\t\t\t{ ...props }\n\t\t\tattributes={ computedAttributes }\n\t\t\tclassName={ className }\n\t\t\tcontext={ context }\n\t\t\tsetAttributes={ setBoundAttributes }\n\t\t/>\n\t);\n};\n\nexport default EditWithGeneratedProps;\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tgetBlockDefaultClassName,\n\tgetBlockType,\n\thasBlockSupport,\n\tstore as blocksStore,\n} from '@wordpress/blocks';\nimport { withFilters } from '@wordpress/components';\nimport { useRegistry, useSelect } from '@wordpress/data';\nimport { useCallback, useContext, useMemo } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport BlockContext from '../block-context';\nimport isURLLike from '../link-control/is-url-like';\nimport {\n\thasPatternOverridesDefaultBinding,\n\treplacePatternOverridesDefaultBinding,\n} from '../../utils/block-bindings';\nimport { unlock } from '../../lock-unlock';\nimport { PrivateBlockContext } from '../block-list/private-block-context';\n\n/**\n * Default value used for blocks which do not define their own context needs,\n * used to guarantee that a block's `context` prop will always be an object. It\n * is assigned as a constant since it is always expected to be an empty object,\n * and in order to avoid unnecessary React reconciliations of a changing object.\n *\n * @type {{}}\n */\nconst DEFAULT_BLOCK_CONTEXT = {};\n\nconst Edit = ( props ) => {\n\tconst { name } = props;\n\tconst blockType = getBlockType( name );\n\n\tif ( ! blockType ) {\n\t\treturn null;\n\t}\n\n\t// `edit` and `save` are functions or components describing the markup\n\t// with which a block is displayed. If `blockType` is valid, assign\n\t// them preferentially as the render value for the block.\n\tconst Component = blockType.edit || blockType.save;\n\n\treturn <Component { ...props } />;\n};\n\nconst EditWithFilters = withFilters( 'editor.BlockEdit' )( Edit );\n\nconst EditWithGeneratedProps = ( props ) => {\n\tconst { name, clientId, attributes, setAttributes } = props;\n\tconst registry = useRegistry();\n\tconst blockType = getBlockType( name );\n\tconst blockContext = useContext( BlockContext );\n\tconst registeredSources = useSelect(\n\t\t( select ) =>\n\t\t\tunlock( select( blocksStore ) ).getAllBlockBindingsSources(),\n\t\t[]\n\t);\n\tconst { bindableAttributes } = useContext( PrivateBlockContext );\n\n\tconst { blockBindings, context, hasPatternOverrides } = useMemo( () => {\n\t\t// Assign context values using the block type's declared context needs.\n\t\tconst computedContext = blockType?.usesContext\n\t\t\t? Object.fromEntries(\n\t\t\t\t\tObject.entries( blockContext ).filter( ( [ key ] ) =>\n\t\t\t\t\t\tblockType.usesContext.includes( key )\n\t\t\t\t\t)\n\t\t\t )\n\t\t\t: DEFAULT_BLOCK_CONTEXT;\n\t\t// Add context requested by Block Bindings sources.\n\t\tif ( attributes?.metadata?.bindings ) {\n\t\t\tObject.values( attributes?.metadata?.bindings || {} ).forEach(\n\t\t\t\t( binding ) => {\n\t\t\t\t\tregisteredSources[ binding?.source ]?.usesContext?.forEach(\n\t\t\t\t\t\t( key ) => {\n\t\t\t\t\t\t\tcomputedContext[ key ] = blockContext[ key ];\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t\treturn {\n\t\t\tblockBindings: replacePatternOverridesDefaultBinding(\n\t\t\t\tattributes?.metadata?.bindings,\n\t\t\t\tbindableAttributes\n\t\t\t),\n\t\t\tcontext: computedContext,\n\t\t\thasPatternOverrides: hasPatternOverridesDefaultBinding(\n\t\t\t\tattributes?.metadata?.bindings\n\t\t\t),\n\t\t};\n\t}, [\n\t\tname,\n\t\tblockType?.usesContext,\n\t\tblockContext,\n\t\tattributes?.metadata?.bindings,\n\t\tregisteredSources,\n\t] );\n\n\tconst computedAttributes = useSelect(\n\t\t( select ) => {\n\t\t\tif ( ! blockBindings ) {\n\t\t\t\treturn attributes;\n\t\t\t}\n\n\t\t\tconst attributesFromSources = {};\n\t\t\tconst blockBindingsBySource = new Map();\n\n\t\t\tfor ( const [ attributeName, binding ] of Object.entries(\n\t\t\t\tblockBindings\n\t\t\t) ) {\n\t\t\t\tconst { source: sourceName, args: sourceArgs } = binding;\n\t\t\t\tconst source = registeredSources[ sourceName ];\n\t\t\t\tif (\n\t\t\t\t\t! source ||\n\t\t\t\t\t! bindableAttributes.includes( attributeName )\n\t\t\t\t) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tblockBindingsBySource.set( source, {\n\t\t\t\t\t...blockBindingsBySource.get( source ),\n\t\t\t\t\t[ attributeName ]: {\n\t\t\t\t\t\targs: sourceArgs,\n\t\t\t\t\t},\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tif ( blockBindingsBySource.size ) {\n\t\t\t\tfor ( const [ source, bindings ] of blockBindingsBySource ) {\n\t\t\t\t\t// Get values in batch if the source supports it.\n\t\t\t\t\tlet values = {};\n\t\t\t\t\tif ( ! source.getValues ) {\n\t\t\t\t\t\tObject.keys( bindings ).forEach( ( attr ) => {\n\t\t\t\t\t\t\t// Default to the the source label when `getValues` doesn't exist.\n\t\t\t\t\t\t\tvalues[ attr ] = source.label;\n\t\t\t\t\t\t} );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvalues = source.getValues( {\n\t\t\t\t\t\t\tselect,\n\t\t\t\t\t\t\tcontext,\n\t\t\t\t\t\t\tclientId,\n\t\t\t\t\t\t\tbindings,\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t\tfor ( const [ attributeName, value ] of Object.entries(\n\t\t\t\t\t\tvalues\n\t\t\t\t\t) ) {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tattributeName === 'url' &&\n\t\t\t\t\t\t\t( ! value || ! isURLLike( value ) )\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t// Return null if value is not a valid URL.\n\t\t\t\t\t\t\tattributesFromSources[ attributeName ] = null;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tattributesFromSources[ attributeName ] = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\t...attributes,\n\t\t\t\t...attributesFromSources,\n\t\t\t};\n\t\t},\n\t\t[\n\t\t\tattributes,\n\t\t\tbindableAttributes,\n\t\t\tblockBindings,\n\t\t\tclientId,\n\t\t\tcontext,\n\t\t\tname,\n\t\t\tregisteredSources,\n\t\t]\n\t);\n\n\tconst setBoundAttributes = useCallback(\n\t\t( nextAttributes ) => {\n\t\t\tif ( ! blockBindings ) {\n\t\t\t\tsetAttributes( nextAttributes );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tregistry.batch( () => {\n\t\t\t\tconst keptAttributes = { ...nextAttributes };\n\t\t\t\tconst blockBindingsBySource = new Map();\n\n\t\t\t\t// Loop only over the updated attributes to avoid modifying the bound ones that haven't changed.\n\t\t\t\tfor ( const [ attributeName, newValue ] of Object.entries(\n\t\t\t\t\tkeptAttributes\n\t\t\t\t) ) {\n\t\t\t\t\tif (\n\t\t\t\t\t\t! blockBindings[ attributeName ] ||\n\t\t\t\t\t\t! bindableAttributes.includes( attributeName )\n\t\t\t\t\t) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst binding = blockBindings[ attributeName ];\n\t\t\t\t\tconst source = registeredSources[ binding?.source ];\n\t\t\t\t\tif ( ! source?.setValues ) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tblockBindingsBySource.set( source, {\n\t\t\t\t\t\t...blockBindingsBySource.get( source ),\n\t\t\t\t\t\t[ attributeName ]: {\n\t\t\t\t\t\t\targs: binding.args,\n\t\t\t\t\t\t\tnewValue,\n\t\t\t\t\t\t},\n\t\t\t\t\t} );\n\t\t\t\t\tdelete keptAttributes[ attributeName ];\n\t\t\t\t}\n\n\t\t\t\tif ( blockBindingsBySource.size ) {\n\t\t\t\t\tfor ( const [\n\t\t\t\t\t\tsource,\n\t\t\t\t\t\tbindings,\n\t\t\t\t\t] of blockBindingsBySource ) {\n\t\t\t\t\t\tsource.setValues( {\n\t\t\t\t\t\t\tselect: registry.select,\n\t\t\t\t\t\t\tdispatch: registry.dispatch,\n\t\t\t\t\t\t\tcontext,\n\t\t\t\t\t\t\tclientId,\n\t\t\t\t\t\t\tbindings,\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst hasParentPattern = !! context[ 'pattern/overrides' ];\n\n\t\t\t\tif (\n\t\t\t\t\t// Don't update non-connected attributes if the block is using pattern overrides\n\t\t\t\t\t// and the editing is happening while overriding the pattern (not editing the original).\n\t\t\t\t\t! ( hasPatternOverrides && hasParentPattern ) &&\n\t\t\t\t\tObject.keys( keptAttributes ).length\n\t\t\t\t) {\n\t\t\t\t\t// Don't update caption and href until they are supported.\n\t\t\t\t\tif ( hasPatternOverrides ) {\n\t\t\t\t\t\tdelete keptAttributes.caption;\n\t\t\t\t\t\tdelete keptAttributes.href;\n\t\t\t\t\t}\n\t\t\t\t\tsetAttributes( keptAttributes );\n\t\t\t\t}\n\t\t\t} );\n\t\t},\n\t\t[\n\t\t\tbindableAttributes,\n\t\t\tblockBindings,\n\t\t\tclientId,\n\t\t\tcontext,\n\t\t\thasPatternOverrides,\n\t\t\tsetAttributes,\n\t\t\tregisteredSources,\n\t\t\tname,\n\t\t\tregistry,\n\t\t]\n\t);\n\n\tif ( ! blockType ) {\n\t\treturn null;\n\t}\n\n\tif ( blockType.apiVersion > 1 ) {\n\t\treturn (\n\t\t\t<EditWithFilters\n\t\t\t\t{ ...props }\n\t\t\t\tattributes={ computedAttributes }\n\t\t\t\tcontext={ context }\n\t\t\t\tsetAttributes={ setBoundAttributes }\n\t\t\t/>\n\t\t);\n\t}\n\n\t// Generate a class name for the block's editable form.\n\tconst generatedClassName = hasBlockSupport( blockType, 'className', true )\n\t\t? getBlockDefaultClassName( name )\n\t\t: null;\n\tconst className = clsx(\n\t\tgeneratedClassName,\n\t\tattributes?.className,\n\t\tprops.className\n\t);\n\n\treturn (\n\t\t<EditWithFilters\n\t\t\t{ ...props }\n\t\t\tattributes={ computedAttributes }\n\t\t\tclassName={ className }\n\t\t\tcontext={ context }\n\t\t\tsetAttributes={ setBoundAttributes }\n\t\t/>\n\t);\n};\n\nexport default EditWithGeneratedProps;\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -416,7 +416,12 @@ function BlockListBlockProvider(props) {
416
416
  const attributes2 = getBlockAttributes(clientId);
417
417
  const { name: blockName, isValid: isValid2 } = blockWithoutAttributes2;
418
418
  const blockType = getBlockType(blockName);
419
- const { supportsLayout, isPreviewMode: isPreviewMode2 } = getSettings();
419
+ const {
420
+ supportsLayout,
421
+ isPreviewMode: isPreviewMode2,
422
+ __experimentalBlockBindingsSupportedAttributes
423
+ } = getSettings();
424
+ const bindableAttributes2 = __experimentalBlockBindingsSupportedAttributes?.[blockName];
420
425
  const hasLightBlockWrapper = blockType?.apiVersion > 1;
421
426
  const previewContext = {
422
427
  isPreviewMode: isPreviewMode2,
@@ -484,7 +489,8 @@ function BlockListBlockProvider(props) {
484
489
  isEditingDisabled: blockEditingMode2 === "disabled",
485
490
  hasEditableOutline: blockEditingMode2 !== "disabled" && getBlockEditingMode(rootClientId) === "disabled",
486
491
  originalBlockClientId: isInvalid ? blocksWithSameName[0] : false,
487
- isBlockHidden: _isBlockHidden(clientId)
492
+ isBlockHidden: _isBlockHidden(clientId),
493
+ bindableAttributes: bindableAttributes2
488
494
  };
489
495
  },
490
496
  [clientId, rootClientId]
@@ -526,7 +532,8 @@ function BlockListBlockProvider(props) {
526
532
  className,
527
533
  defaultClassName,
528
534
  originalBlockClientId,
529
- isBlockHidden
535
+ isBlockHidden,
536
+ bindableAttributes
530
537
  } = selectedProps;
531
538
  const block = useMemo(
532
539
  () => ({ ...blockWithoutAttributes, attributes }),
@@ -565,7 +572,8 @@ function BlockListBlockProvider(props) {
565
572
  originalBlockClientId,
566
573
  themeSupportsLayout,
567
574
  canMove,
568
- isBlockHidden
575
+ isBlockHidden,
576
+ bindableAttributes
569
577
  };
570
578
  if (isBlockHidden && !isSelected && !isMultiSelected && !hasChildSelected) {
571
579
  return null;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/block-list/block.js"],
4
- "sourcesContent": ["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { memo, RawHTML, useContext, useMemo } from '@wordpress/element';\nimport {\n\tgetBlockType,\n\tgetSaveContent,\n\tisUnmodifiedDefaultBlock,\n\tserializeRawBlock,\n\tswitchToBlockType,\n\tgetDefaultBlockName,\n\tisUnmodifiedBlock,\n\tisReusableBlock,\n\tgetBlockDefaultClassName,\n\thasBlockSupport,\n\tcreateBlock,\n\tstore as blocksStore,\n} from '@wordpress/blocks';\nimport { withFilters } from '@wordpress/components';\nimport { withDispatch, useSelect } from '@wordpress/data';\nimport { compose } from '@wordpress/compose';\nimport { safeHTML } from '@wordpress/dom';\n\n/**\n * Internal dependencies\n */\nimport BlockEdit from '../block-edit';\nimport BlockInvalidWarning from './block-invalid-warning';\nimport BlockCrashWarning from './block-crash-warning';\nimport BlockCrashBoundary from './block-crash-boundary';\nimport BlockHtml from './block-html';\nimport { useBlockProps } from './use-block-props';\nimport { store as blockEditorStore } from '../../store';\nimport { useLayout } from './layout';\nimport { PrivateBlockContext } from './private-block-context';\n\nimport { unlock } from '../../lock-unlock';\n\n/**\n * Merges wrapper props with special handling for classNames and styles.\n *\n * @param {Object} propsA\n * @param {Object} propsB\n *\n * @return {Object} Merged props.\n */\nfunction mergeWrapperProps( propsA, propsB ) {\n\tconst newProps = {\n\t\t...propsA,\n\t\t...propsB,\n\t};\n\n\t// May be set to undefined, so check if the property is set!\n\tif (\n\t\tpropsA?.hasOwnProperty( 'className' ) &&\n\t\tpropsB?.hasOwnProperty( 'className' )\n\t) {\n\t\tnewProps.className = clsx( propsA.className, propsB.className );\n\t}\n\n\tif (\n\t\tpropsA?.hasOwnProperty( 'style' ) &&\n\t\tpropsB?.hasOwnProperty( 'style' )\n\t) {\n\t\tnewProps.style = { ...propsA.style, ...propsB.style };\n\t}\n\n\treturn newProps;\n}\n\nfunction Block( { children, isHtml, ...props } ) {\n\treturn (\n\t\t<div { ...useBlockProps( props, { __unstableIsHtml: isHtml } ) }>\n\t\t\t{ children }\n\t\t</div>\n\t);\n}\n\nfunction BlockListBlock( {\n\tblock: { __unstableBlockSource },\n\tmode,\n\tisLocked,\n\tcanRemove,\n\tclientId,\n\tisSelected,\n\tisSelectionEnabled,\n\tclassName,\n\t__unstableLayoutClassNames: layoutClassNames,\n\tname,\n\tisValid,\n\tattributes,\n\twrapperProps,\n\tsetAttributes,\n\tonReplace,\n\tonRemove,\n\tonInsertBlocksAfter,\n\tonMerge,\n\ttoggleSelection,\n} ) {\n\tconst {\n\t\tmayDisplayControls,\n\t\tmayDisplayParentControls,\n\t\tthemeSupportsLayout,\n\t\t...context\n\t} = useContext( PrivateBlockContext );\n\n\tconst parentLayout = useLayout() || {};\n\n\t// We wrap the BlockEdit component in a div that hides it when editing in\n\t// HTML mode. This allows us to render all of the ancillary pieces\n\t// (InspectorControls, etc.) which are inside `BlockEdit` but not\n\t// `BlockHTML`, even in HTML mode.\n\tlet blockEdit = (\n\t\t<BlockEdit\n\t\t\tname={ name }\n\t\t\tisSelected={ isSelected }\n\t\t\tattributes={ attributes }\n\t\t\tsetAttributes={ setAttributes }\n\t\t\tinsertBlocksAfter={ isLocked ? undefined : onInsertBlocksAfter }\n\t\t\tonReplace={ canRemove ? onReplace : undefined }\n\t\t\tonRemove={ canRemove ? onRemove : undefined }\n\t\t\tmergeBlocks={ canRemove ? onMerge : undefined }\n\t\t\tclientId={ clientId }\n\t\t\tisSelectionEnabled={ isSelectionEnabled }\n\t\t\ttoggleSelection={ toggleSelection }\n\t\t\t__unstableLayoutClassNames={ layoutClassNames }\n\t\t\t__unstableParentLayout={\n\t\t\t\tObject.keys( parentLayout ).length ? parentLayout : undefined\n\t\t\t}\n\t\t\tmayDisplayControls={ mayDisplayControls }\n\t\t\tmayDisplayParentControls={ mayDisplayParentControls }\n\t\t\tblockEditingMode={ context.blockEditingMode }\n\t\t\tisPreviewMode={ context.isPreviewMode }\n\t\t/>\n\t);\n\n\tconst blockType = getBlockType( name );\n\n\t// Determine whether the block has props to apply to the wrapper.\n\tif ( blockType?.getEditWrapperProps ) {\n\t\twrapperProps = mergeWrapperProps(\n\t\t\twrapperProps,\n\t\t\tblockType.getEditWrapperProps( attributes )\n\t\t);\n\t}\n\n\tconst isAligned =\n\t\twrapperProps &&\n\t\t!! wrapperProps[ 'data-align' ] &&\n\t\t! themeSupportsLayout;\n\n\t// Support for sticky position in classic themes with alignment wrappers.\n\n\tconst isSticky = className?.includes( 'is-position-sticky' );\n\n\t// For aligned blocks, provide a wrapper element so the block can be\n\t// positioned relative to the block column.\n\t// This is only kept for classic themes that don't support layout\n\t// Historically we used to rely on extra divs and data-align to\n\t// provide the alignments styles in the editor.\n\t// Due to the differences between frontend and backend, we migrated\n\t// to the layout feature, and we're now aligning the markup of frontend\n\t// and backend.\n\tif ( isAligned ) {\n\t\tblockEdit = (\n\t\t\t<div\n\t\t\t\tclassName={ clsx( 'wp-block', isSticky && className ) }\n\t\t\t\tdata-align={ wrapperProps[ 'data-align' ] }\n\t\t\t>\n\t\t\t\t{ blockEdit }\n\t\t\t</div>\n\t\t);\n\t}\n\n\tlet block;\n\n\tif ( ! isValid ) {\n\t\tconst saveContent = __unstableBlockSource\n\t\t\t? serializeRawBlock( __unstableBlockSource )\n\t\t\t: getSaveContent( blockType, attributes );\n\n\t\tblock = (\n\t\t\t<Block className=\"has-warning\">\n\t\t\t\t<BlockInvalidWarning clientId={ clientId } />\n\t\t\t\t<RawHTML>{ safeHTML( saveContent ) }</RawHTML>\n\t\t\t</Block>\n\t\t);\n\t} else if ( mode === 'html' ) {\n\t\t// Render blockEdit so the inspector controls don't disappear.\n\t\t// See #8969.\n\t\tblock = (\n\t\t\t<>\n\t\t\t\t<div style={ { display: 'none' } }>{ blockEdit }</div>\n\t\t\t\t<Block isHtml>\n\t\t\t\t\t<BlockHtml clientId={ clientId } />\n\t\t\t\t</Block>\n\t\t\t</>\n\t\t);\n\t} else if ( blockType?.apiVersion > 1 ) {\n\t\tblock = blockEdit;\n\t} else {\n\t\tblock = <Block>{ blockEdit }</Block>;\n\t}\n\n\tconst { 'data-align': dataAlign, ...restWrapperProps } = wrapperProps ?? {};\n\tconst updatedWrapperProps = {\n\t\t...restWrapperProps,\n\t\tclassName: clsx(\n\t\t\trestWrapperProps.className,\n\t\t\tdataAlign && themeSupportsLayout && `align${ dataAlign }`,\n\t\t\t! ( dataAlign && isSticky ) && className\n\t\t),\n\t};\n\n\t// We set a new context with the adjusted and filtered wrapperProps (through\n\t// `editor.BlockListBlock`), which the `BlockListBlockProvider` did not have\n\t// access to.\n\t// Note that the context value doesn't have to be memoized in this case\n\t// because when it changes, this component will be re-rendered anyway, and\n\t// none of the consumers (BlockListBlock and useBlockProps) are memoized or\n\t// \"pure\". This is different from the public BlockEditContext, where\n\t// consumers might be memoized or \"pure\".\n\treturn (\n\t\t<PrivateBlockContext.Provider\n\t\t\tvalue={ {\n\t\t\t\twrapperProps: updatedWrapperProps,\n\t\t\t\tisAligned,\n\t\t\t\t...context,\n\t\t\t} }\n\t\t>\n\t\t\t<BlockCrashBoundary\n\t\t\t\tfallback={\n\t\t\t\t\t<Block className=\"has-warning\">\n\t\t\t\t\t\t<BlockCrashWarning />\n\t\t\t\t\t</Block>\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t{ block }\n\t\t\t</BlockCrashBoundary>\n\t\t</PrivateBlockContext.Provider>\n\t);\n}\n\nconst applyWithDispatch = withDispatch( ( dispatch, ownProps, registry ) => {\n\tconst {\n\t\tupdateBlockAttributes,\n\t\tinsertBlocks,\n\t\tmergeBlocks,\n\t\treplaceBlocks,\n\t\ttoggleSelection,\n\t\t__unstableMarkLastChangeAsPersistent,\n\t\tmoveBlocksToPosition,\n\t\tremoveBlock,\n\t\tselectBlock,\n\t} = dispatch( blockEditorStore );\n\n\t// Do not add new properties here, use `useDispatch` instead to avoid\n\t// leaking new props to the public API (editor.BlockListBlock filter).\n\treturn {\n\t\tsetAttributes( nextAttributes ) {\n\t\t\tconst { getMultiSelectedBlockClientIds } =\n\t\t\t\tregistry.select( blockEditorStore );\n\t\t\tconst multiSelectedBlockClientIds =\n\t\t\t\tgetMultiSelectedBlockClientIds();\n\t\t\tconst { clientId, attributes } = ownProps;\n\t\t\tconst clientIds = multiSelectedBlockClientIds.length\n\t\t\t\t? multiSelectedBlockClientIds\n\t\t\t\t: [ clientId ];\n\t\t\tconst newAttributes =\n\t\t\t\ttypeof nextAttributes === 'function'\n\t\t\t\t\t? nextAttributes( attributes )\n\t\t\t\t\t: nextAttributes;\n\n\t\t\tupdateBlockAttributes( clientIds, newAttributes );\n\t\t},\n\t\tonInsertBlocks( blocks, index ) {\n\t\t\tconst { rootClientId } = ownProps;\n\t\t\tinsertBlocks( blocks, index, rootClientId );\n\t\t},\n\t\tonInsertBlocksAfter( blocks ) {\n\t\t\tconst { clientId, rootClientId } = ownProps;\n\t\t\tconst { getBlockIndex } = registry.select( blockEditorStore );\n\t\t\tconst index = getBlockIndex( clientId );\n\t\t\tinsertBlocks( blocks, index + 1, rootClientId );\n\t\t},\n\t\tonMerge( forward ) {\n\t\t\tconst { clientId, rootClientId } = ownProps;\n\t\t\tconst {\n\t\t\t\tgetPreviousBlockClientId,\n\t\t\t\tgetNextBlockClientId,\n\t\t\t\tgetBlock,\n\t\t\t\tgetBlockAttributes,\n\t\t\t\tgetBlockName,\n\t\t\t\tgetBlockOrder,\n\t\t\t\tgetBlockIndex,\n\t\t\t\tgetBlockRootClientId,\n\t\t\t\tcanInsertBlockType,\n\t\t\t} = registry.select( blockEditorStore );\n\n\t\t\tfunction switchToDefaultOrRemove() {\n\t\t\t\tconst block = getBlock( clientId );\n\t\t\t\tconst defaultBlockName = getDefaultBlockName();\n\t\t\t\tconst defaultBlockType = getBlockType( defaultBlockName );\n\t\t\t\tif ( getBlockName( clientId ) !== defaultBlockName ) {\n\t\t\t\t\tconst replacement = switchToBlockType(\n\t\t\t\t\t\tblock,\n\t\t\t\t\t\tdefaultBlockName\n\t\t\t\t\t);\n\t\t\t\t\tif ( replacement && replacement.length ) {\n\t\t\t\t\t\treplaceBlocks( clientId, replacement );\n\t\t\t\t\t}\n\t\t\t\t} else if ( isUnmodifiedDefaultBlock( block ) ) {\n\t\t\t\t\tconst nextBlockClientId = getNextBlockClientId( clientId );\n\t\t\t\t\tif ( nextBlockClientId ) {\n\t\t\t\t\t\tregistry.batch( () => {\n\t\t\t\t\t\t\tremoveBlock( clientId );\n\t\t\t\t\t\t\tselectBlock( nextBlockClientId );\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t} else if ( defaultBlockType.merge ) {\n\t\t\t\t\tconst attributes = defaultBlockType.merge(\n\t\t\t\t\t\t{},\n\t\t\t\t\t\tblock.attributes\n\t\t\t\t\t);\n\t\t\t\t\treplaceBlocks(\n\t\t\t\t\t\t[ clientId ],\n\t\t\t\t\t\t[ createBlock( defaultBlockName, attributes ) ]\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Moves the block with clientId up one level. If the block type\n\t\t\t * cannot be inserted at the new location, it will be attempted to\n\t\t\t * convert to the default block type.\n\t\t\t *\n\t\t\t * @param {string} _clientId The block to move.\n\t\t\t * @param {boolean} changeSelection Whether to change the selection\n\t\t\t * to the moved block.\n\t\t\t */\n\t\t\tfunction moveFirstItemUp( _clientId, changeSelection = true ) {\n\t\t\t\tconst wrapperBlockName = getBlockName( _clientId );\n\t\t\t\tconst wrapperBlockType = getBlockType( wrapperBlockName );\n\t\t\t\tconst isTextualWrapper = wrapperBlockType.category === 'text';\n\t\t\t\tconst targetRootClientId = getBlockRootClientId( _clientId );\n\t\t\t\tconst blockOrder = getBlockOrder( _clientId );\n\t\t\t\tconst [ firstClientId ] = blockOrder;\n\n\t\t\t\tif (\n\t\t\t\t\tblockOrder.length === 1 &&\n\t\t\t\t\tisUnmodifiedBlock( getBlock( firstClientId ) )\n\t\t\t\t) {\n\t\t\t\t\tremoveBlock( _clientId );\n\t\t\t\t} else if ( isTextualWrapper ) {\n\t\t\t\t\tregistry.batch( () => {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tcanInsertBlockType(\n\t\t\t\t\t\t\t\tgetBlockName( firstClientId ),\n\t\t\t\t\t\t\t\ttargetRootClientId\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tmoveBlocksToPosition(\n\t\t\t\t\t\t\t\t[ firstClientId ],\n\t\t\t\t\t\t\t\t_clientId,\n\t\t\t\t\t\t\t\ttargetRootClientId,\n\t\t\t\t\t\t\t\tgetBlockIndex( _clientId )\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst replacement = switchToBlockType(\n\t\t\t\t\t\t\t\tgetBlock( firstClientId ),\n\t\t\t\t\t\t\t\tgetDefaultBlockName()\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\treplacement &&\n\t\t\t\t\t\t\t\treplacement.length &&\n\t\t\t\t\t\t\t\treplacement.every( ( block ) =>\n\t\t\t\t\t\t\t\t\tcanInsertBlockType(\n\t\t\t\t\t\t\t\t\t\tblock.name,\n\t\t\t\t\t\t\t\t\t\ttargetRootClientId\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tinsertBlocks(\n\t\t\t\t\t\t\t\t\treplacement,\n\t\t\t\t\t\t\t\t\tgetBlockIndex( _clientId ),\n\t\t\t\t\t\t\t\t\ttargetRootClientId,\n\t\t\t\t\t\t\t\t\tchangeSelection\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tremoveBlock( firstClientId, false );\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tswitchToDefaultOrRemove();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t! getBlockOrder( _clientId ).length &&\n\t\t\t\t\t\t\tisUnmodifiedBlock( getBlock( _clientId ) )\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tremoveBlock( _clientId, false );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t} else {\n\t\t\t\t\tswitchToDefaultOrRemove();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// For `Delete` or forward merge, we should do the exact same thing\n\t\t\t// as `Backspace`, but from the other block.\n\t\t\tif ( forward ) {\n\t\t\t\tif ( rootClientId ) {\n\t\t\t\t\tconst nextRootClientId =\n\t\t\t\t\t\tgetNextBlockClientId( rootClientId );\n\n\t\t\t\t\tif ( nextRootClientId ) {\n\t\t\t\t\t\t// If there is a block that follows with the same parent\n\t\t\t\t\t\t// block name and the same attributes, merge the inner\n\t\t\t\t\t\t// blocks.\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tgetBlockName( rootClientId ) ===\n\t\t\t\t\t\t\tgetBlockName( nextRootClientId )\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tconst rootAttributes =\n\t\t\t\t\t\t\t\tgetBlockAttributes( rootClientId );\n\t\t\t\t\t\t\tconst previousRootAttributes =\n\t\t\t\t\t\t\t\tgetBlockAttributes( nextRootClientId );\n\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tObject.keys( rootAttributes ).every(\n\t\t\t\t\t\t\t\t\t( key ) =>\n\t\t\t\t\t\t\t\t\t\trootAttributes[ key ] ===\n\t\t\t\t\t\t\t\t\t\tpreviousRootAttributes[ key ]\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tregistry.batch( () => {\n\t\t\t\t\t\t\t\t\tmoveBlocksToPosition(\n\t\t\t\t\t\t\t\t\t\tgetBlockOrder( nextRootClientId ),\n\t\t\t\t\t\t\t\t\t\tnextRootClientId,\n\t\t\t\t\t\t\t\t\t\trootClientId\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\tremoveBlock( nextRootClientId, false );\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tmergeBlocks( rootClientId, nextRootClientId );\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst nextBlockClientId = getNextBlockClientId( clientId );\n\n\t\t\t\tif ( ! nextBlockClientId ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif ( getBlockOrder( nextBlockClientId ).length ) {\n\t\t\t\t\tmoveFirstItemUp( nextBlockClientId, false );\n\t\t\t\t} else {\n\t\t\t\t\tmergeBlocks( clientId, nextBlockClientId );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst previousBlockClientId =\n\t\t\t\t\tgetPreviousBlockClientId( clientId );\n\n\t\t\t\tif ( previousBlockClientId ) {\n\t\t\t\t\tmergeBlocks( previousBlockClientId, clientId );\n\t\t\t\t} else if ( rootClientId ) {\n\t\t\t\t\tconst previousRootClientId =\n\t\t\t\t\t\tgetPreviousBlockClientId( rootClientId );\n\n\t\t\t\t\t// If there is a preceding block with the same parent block\n\t\t\t\t\t// name and the same attributes, merge the inner blocks.\n\t\t\t\t\tif (\n\t\t\t\t\t\tpreviousRootClientId &&\n\t\t\t\t\t\tgetBlockName( rootClientId ) ===\n\t\t\t\t\t\t\tgetBlockName( previousRootClientId )\n\t\t\t\t\t) {\n\t\t\t\t\t\tconst rootAttributes =\n\t\t\t\t\t\t\tgetBlockAttributes( rootClientId );\n\t\t\t\t\t\tconst previousRootAttributes =\n\t\t\t\t\t\t\tgetBlockAttributes( previousRootClientId );\n\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tObject.keys( rootAttributes ).every(\n\t\t\t\t\t\t\t\t( key ) =>\n\t\t\t\t\t\t\t\t\trootAttributes[ key ] ===\n\t\t\t\t\t\t\t\t\tpreviousRootAttributes[ key ]\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tregistry.batch( () => {\n\t\t\t\t\t\t\t\tmoveBlocksToPosition(\n\t\t\t\t\t\t\t\t\tgetBlockOrder( rootClientId ),\n\t\t\t\t\t\t\t\t\trootClientId,\n\t\t\t\t\t\t\t\t\tpreviousRootClientId\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tremoveBlock( rootClientId, false );\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tmoveFirstItemUp( rootClientId );\n\t\t\t\t} else {\n\t\t\t\t\tswitchToDefaultOrRemove();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tonReplace( blocks, indexToSelect, initialPosition ) {\n\t\t\tif (\n\t\t\t\tblocks.length &&\n\t\t\t\t! isUnmodifiedDefaultBlock( blocks[ blocks.length - 1 ] )\n\t\t\t) {\n\t\t\t\t__unstableMarkLastChangeAsPersistent();\n\t\t\t}\n\t\t\t//Unsynced patterns are nested in an array so we need to flatten them.\n\t\t\tconst replacementBlocks =\n\t\t\t\tblocks?.length === 1 && Array.isArray( blocks[ 0 ] )\n\t\t\t\t\t? blocks[ 0 ]\n\t\t\t\t\t: blocks;\n\t\t\treplaceBlocks(\n\t\t\t\t[ ownProps.clientId ],\n\t\t\t\treplacementBlocks,\n\t\t\t\tindexToSelect,\n\t\t\t\tinitialPosition\n\t\t\t);\n\t\t},\n\t\tonRemove() {\n\t\t\tremoveBlock( ownProps.clientId );\n\t\t},\n\t\ttoggleSelection( selectionEnabled ) {\n\t\t\ttoggleSelection( selectionEnabled );\n\t\t},\n\t};\n} );\n\n// This component is used by the BlockListBlockProvider component below. It will\n// add the props necessary for the `editor.BlockListBlock` filters.\nBlockListBlock = compose(\n\tapplyWithDispatch,\n\twithFilters( 'editor.BlockListBlock' )\n)( BlockListBlock );\n\n// This component provides all the information we need through a single store\n// subscription (useSelect mapping). Only the necessary props are passed down\n// to the BlockListBlock component, which is a filtered component, so these\n// props are public API. To avoid adding to the public API, we use a private\n// context to pass the rest of the information to the filtered BlockListBlock\n// component, and useBlockProps.\nfunction BlockListBlockProvider( props ) {\n\tconst { clientId, rootClientId } = props;\n\tconst selectedProps = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tisBlockSelected,\n\t\t\t\tgetBlockMode,\n\t\t\t\tisSelectionEnabled,\n\t\t\t\tgetTemplateLock,\n\t\t\t\tisSectionBlock: _isSectionBlock,\n\t\t\t\tgetBlockWithoutAttributes,\n\t\t\t\tgetBlockAttributes,\n\t\t\t\tcanRemoveBlock,\n\t\t\t\tcanMoveBlock,\n\n\t\t\t\tgetSettings,\n\t\t\t\tgetTemporarilyEditingAsBlocks,\n\t\t\t\tgetBlockEditingMode,\n\t\t\t\tgetBlockName,\n\t\t\t\tisFirstMultiSelectedBlock,\n\t\t\t\tgetMultiSelectedBlockClientIds,\n\t\t\t\thasSelectedInnerBlock,\n\t\t\t\tgetBlocksByName,\n\n\t\t\t\tgetBlockIndex,\n\t\t\t\tisBlockMultiSelected,\n\t\t\t\tisBlockSubtreeDisabled,\n\t\t\t\tisBlockHighlighted,\n\t\t\t\t__unstableIsFullySelected,\n\t\t\t\t__unstableSelectionHasUnmergeableBlock,\n\t\t\t\tisBlockBeingDragged,\n\t\t\t\tisDragging,\n\t\t\t\t__unstableHasActiveBlockOverlayActive,\n\t\t\t\tgetSelectedBlocksInitialCaretPosition,\n\t\t\t} = unlock( select( blockEditorStore ) );\n\t\t\tconst blockWithoutAttributes =\n\t\t\t\tgetBlockWithoutAttributes( clientId );\n\n\t\t\t// This is a temporary fix.\n\t\t\t// This function should never be called when a block is not\n\t\t\t// present in the state. It happens now because the order in\n\t\t\t// withSelect rendering is not correct.\n\t\t\tif ( ! blockWithoutAttributes ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst {\n\t\t\t\thasBlockSupport: _hasBlockSupport,\n\t\t\t\tgetActiveBlockVariation,\n\t\t\t} = select( blocksStore );\n\t\t\tconst attributes = getBlockAttributes( clientId );\n\t\t\tconst { name: blockName, isValid } = blockWithoutAttributes;\n\t\t\tconst blockType = getBlockType( blockName );\n\t\t\tconst { supportsLayout, isPreviewMode } = getSettings();\n\t\t\tconst hasLightBlockWrapper = blockType?.apiVersion > 1;\n\t\t\tconst previewContext = {\n\t\t\t\tisPreviewMode,\n\t\t\t\tblockWithoutAttributes,\n\t\t\t\tname: blockName,\n\t\t\t\tattributes,\n\t\t\t\tisValid,\n\t\t\t\tthemeSupportsLayout: supportsLayout,\n\t\t\t\tindex: getBlockIndex( clientId ),\n\t\t\t\tisReusable: isReusableBlock( blockType ),\n\t\t\t\tclassName: hasLightBlockWrapper\n\t\t\t\t\t? attributes.className\n\t\t\t\t\t: undefined,\n\t\t\t\tdefaultClassName: hasLightBlockWrapper\n\t\t\t\t\t? getBlockDefaultClassName( blockName )\n\t\t\t\t\t: undefined,\n\t\t\t\tblockTitle: blockType?.title,\n\t\t\t\tisBlockHidden: attributes?.metadata?.blockVisibility === false,\n\t\t\t};\n\n\t\t\t// When in preview mode, we can avoid a lot of selection and\n\t\t\t// editing related selectors.\n\t\t\tif ( isPreviewMode ) {\n\t\t\t\treturn previewContext;\n\t\t\t}\n\n\t\t\tconst { isBlockHidden: _isBlockHidden } = unlock(\n\t\t\t\tselect( blockEditorStore )\n\t\t\t);\n\t\t\tconst _isSelected = isBlockSelected( clientId );\n\t\t\tconst canRemove = canRemoveBlock( clientId );\n\t\t\tconst canMove = canMoveBlock( clientId );\n\t\t\tconst match = getActiveBlockVariation( blockName, attributes );\n\t\t\tconst isMultiSelected = isBlockMultiSelected( clientId );\n\t\t\tconst checkDeep = true;\n\t\t\tconst isAncestorOfSelectedBlock = hasSelectedInnerBlock(\n\t\t\t\tclientId,\n\t\t\t\tcheckDeep\n\t\t\t);\n\t\t\tconst blockEditingMode = getBlockEditingMode( clientId );\n\n\t\t\tconst multiple = hasBlockSupport( blockName, 'multiple', true );\n\n\t\t\t// For block types with `multiple` support, there is no \"original\n\t\t\t// block\" to be found in the content, as the block itself is valid.\n\t\t\tconst blocksWithSameName = multiple\n\t\t\t\t? []\n\t\t\t\t: getBlocksByName( blockName );\n\t\t\tconst isInvalid =\n\t\t\t\tblocksWithSameName.length &&\n\t\t\t\tblocksWithSameName[ 0 ] !== clientId;\n\n\t\t\treturn {\n\t\t\t\t...previewContext,\n\t\t\t\tmode: getBlockMode( clientId ),\n\t\t\t\tisSelectionEnabled: isSelectionEnabled(),\n\t\t\t\tisLocked: !! getTemplateLock( rootClientId ),\n\t\t\t\tisSectionBlock: _isSectionBlock( clientId ),\n\t\t\t\tcanRemove,\n\t\t\t\tcanMove,\n\t\t\t\tisSelected: _isSelected,\n\t\t\t\tisTemporarilyEditingAsBlocks:\n\t\t\t\t\tgetTemporarilyEditingAsBlocks() === clientId,\n\t\t\t\tblockEditingMode,\n\t\t\t\tmayDisplayControls:\n\t\t\t\t\t_isSelected ||\n\t\t\t\t\t( isFirstMultiSelectedBlock( clientId ) &&\n\t\t\t\t\t\tgetMultiSelectedBlockClientIds().every(\n\t\t\t\t\t\t\t( id ) => getBlockName( id ) === blockName\n\t\t\t\t\t\t) ),\n\t\t\t\tmayDisplayParentControls:\n\t\t\t\t\t_hasBlockSupport(\n\t\t\t\t\t\tgetBlockName( clientId ),\n\t\t\t\t\t\t'__experimentalExposeControlsToChildren',\n\t\t\t\t\t\tfalse\n\t\t\t\t\t) && hasSelectedInnerBlock( clientId ),\n\t\t\t\tblockApiVersion: blockType?.apiVersion || 1,\n\t\t\t\tblockTitle: match?.title || blockType?.title,\n\t\t\t\tisSubtreeDisabled:\n\t\t\t\t\tblockEditingMode === 'disabled' &&\n\t\t\t\t\tisBlockSubtreeDisabled( clientId ),\n\t\t\t\thasOverlay:\n\t\t\t\t\t__unstableHasActiveBlockOverlayActive( clientId ) &&\n\t\t\t\t\t! isDragging(),\n\t\t\t\tinitialPosition: _isSelected\n\t\t\t\t\t? getSelectedBlocksInitialCaretPosition()\n\t\t\t\t\t: undefined,\n\t\t\t\tisHighlighted: isBlockHighlighted( clientId ),\n\t\t\t\tisMultiSelected,\n\t\t\t\tisPartiallySelected:\n\t\t\t\t\tisMultiSelected &&\n\t\t\t\t\t! __unstableIsFullySelected() &&\n\t\t\t\t\t! __unstableSelectionHasUnmergeableBlock(),\n\t\t\t\tisDragging: isBlockBeingDragged( clientId ),\n\t\t\t\thasChildSelected: isAncestorOfSelectedBlock,\n\t\t\t\tisEditingDisabled: blockEditingMode === 'disabled',\n\t\t\t\thasEditableOutline:\n\t\t\t\t\tblockEditingMode !== 'disabled' &&\n\t\t\t\t\tgetBlockEditingMode( rootClientId ) === 'disabled',\n\t\t\t\toriginalBlockClientId: isInvalid\n\t\t\t\t\t? blocksWithSameName[ 0 ]\n\t\t\t\t\t: false,\n\t\t\t\tisBlockHidden: _isBlockHidden( clientId ),\n\t\t\t};\n\t\t},\n\t\t[ clientId, rootClientId ]\n\t);\n\n\tconst {\n\t\tisPreviewMode,\n\t\t// Fill values that end up as a public API and may not be defined in\n\t\t// preview mode.\n\t\tmode = 'visual',\n\t\tisSelectionEnabled = false,\n\t\tisLocked = false,\n\t\tcanRemove = false,\n\t\tcanMove = false,\n\t\tblockWithoutAttributes,\n\t\tname,\n\t\tattributes,\n\t\tisValid,\n\t\tisSelected = false,\n\t\tthemeSupportsLayout,\n\t\tisTemporarilyEditingAsBlocks,\n\t\tblockEditingMode,\n\t\tmayDisplayControls,\n\t\tmayDisplayParentControls,\n\t\tindex,\n\t\tblockApiVersion,\n\t\tblockTitle,\n\t\tisSubtreeDisabled,\n\t\thasOverlay,\n\t\tinitialPosition,\n\t\tisHighlighted,\n\t\tisMultiSelected,\n\t\tisPartiallySelected,\n\t\tisReusable,\n\t\tisDragging,\n\t\thasChildSelected,\n\t\tisSectionBlock,\n\t\tisEditingDisabled,\n\t\thasEditableOutline,\n\t\tclassName,\n\t\tdefaultClassName,\n\t\toriginalBlockClientId,\n\t\tisBlockHidden,\n\t} = selectedProps;\n\n\t// Users of the editor.BlockListBlock filter used to be able to\n\t// access the block prop.\n\t// Ideally these blocks would rely on the clientId prop only.\n\t// This is kept for backward compatibility reasons.\n\tconst block = useMemo(\n\t\t() => ( { ...blockWithoutAttributes, attributes } ),\n\t\t[ blockWithoutAttributes, attributes ]\n\t);\n\n\t// Block is sometimes not mounted at the right time, causing it be\n\t// undefined see issue for more info\n\t// https://github.com/WordPress/gutenberg/issues/17013\n\tif ( ! selectedProps ) {\n\t\treturn null;\n\t}\n\n\tconst privateContext = {\n\t\tisPreviewMode,\n\t\tclientId,\n\t\tclassName,\n\t\tindex,\n\t\tmode,\n\t\tname,\n\t\tblockApiVersion,\n\t\tblockTitle,\n\t\tisSelected,\n\t\tisSubtreeDisabled,\n\t\thasOverlay,\n\t\tinitialPosition,\n\t\tblockEditingMode,\n\t\tisHighlighted,\n\t\tisMultiSelected,\n\t\tisPartiallySelected,\n\t\tisReusable,\n\t\tisDragging,\n\t\thasChildSelected,\n\t\tisSectionBlock,\n\t\tisEditingDisabled,\n\t\thasEditableOutline,\n\t\tisTemporarilyEditingAsBlocks,\n\t\tdefaultClassName,\n\t\tmayDisplayControls,\n\t\tmayDisplayParentControls,\n\t\toriginalBlockClientId,\n\t\tthemeSupportsLayout,\n\t\tcanMove,\n\t\tisBlockHidden,\n\t};\n\n\tif (\n\t\tisBlockHidden &&\n\t\t! isSelected &&\n\t\t! isMultiSelected &&\n\t\t! hasChildSelected\n\t) {\n\t\treturn null;\n\t}\n\n\t// Here we separate between the props passed to BlockListBlock and any other\n\t// information we selected for internal use. BlockListBlock is a filtered\n\t// component and thus ALL the props are PUBLIC API.\n\n\t// Note that the context value doesn't have to be memoized in this case\n\t// because when it changes, this component will be re-rendered anyway, and\n\t// none of the consumers (BlockListBlock and useBlockProps) are memoized or\n\t// \"pure\". This is different from the public BlockEditContext, where\n\t// consumers might be memoized or \"pure\".\n\treturn (\n\t\t<PrivateBlockContext.Provider value={ privateContext }>\n\t\t\t<BlockListBlock\n\t\t\t\t{ ...props }\n\t\t\t\t// WARNING: all the following props are public API (through the\n\t\t\t\t// editor.BlockListBlock filter) and normally nothing new should\n\t\t\t\t// be added to it.\n\t\t\t\t{ ...{\n\t\t\t\t\tmode,\n\t\t\t\t\tisSelectionEnabled,\n\t\t\t\t\tisLocked,\n\t\t\t\t\tcanRemove,\n\t\t\t\t\tcanMove,\n\t\t\t\t\t// Users of the editor.BlockListBlock filter used to be able\n\t\t\t\t\t// to access the block prop. Ideally these blocks would rely\n\t\t\t\t\t// on the clientId prop only. This is kept for backward\n\t\t\t\t\t// compatibility reasons.\n\t\t\t\t\tblock,\n\t\t\t\t\tname,\n\t\t\t\t\tattributes,\n\t\t\t\t\tisValid,\n\t\t\t\t\tisSelected,\n\t\t\t\t} }\n\t\t\t/>\n\t\t</PrivateBlockContext.Provider>\n\t);\n}\n\nexport default memo( BlockListBlockProvider );\n"],
5
- "mappings": "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",
6
- "names": ["isSelectionEnabled", "isDragging", "blockWithoutAttributes", "attributes", "isValid", "isPreviewMode", "canRemove", "canMove", "isMultiSelected", "blockEditingMode"]
4
+ "sourcesContent": ["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { memo, RawHTML, useContext, useMemo } from '@wordpress/element';\nimport {\n\tgetBlockType,\n\tgetSaveContent,\n\tisUnmodifiedDefaultBlock,\n\tserializeRawBlock,\n\tswitchToBlockType,\n\tgetDefaultBlockName,\n\tisUnmodifiedBlock,\n\tisReusableBlock,\n\tgetBlockDefaultClassName,\n\thasBlockSupport,\n\tcreateBlock,\n\tstore as blocksStore,\n} from '@wordpress/blocks';\nimport { withFilters } from '@wordpress/components';\nimport { withDispatch, useSelect } from '@wordpress/data';\nimport { compose } from '@wordpress/compose';\nimport { safeHTML } from '@wordpress/dom';\n\n/**\n * Internal dependencies\n */\nimport BlockEdit from '../block-edit';\nimport BlockInvalidWarning from './block-invalid-warning';\nimport BlockCrashWarning from './block-crash-warning';\nimport BlockCrashBoundary from './block-crash-boundary';\nimport BlockHtml from './block-html';\nimport { useBlockProps } from './use-block-props';\nimport { store as blockEditorStore } from '../../store';\nimport { useLayout } from './layout';\nimport { PrivateBlockContext } from './private-block-context';\n\nimport { unlock } from '../../lock-unlock';\n\n/**\n * Merges wrapper props with special handling for classNames and styles.\n *\n * @param {Object} propsA\n * @param {Object} propsB\n *\n * @return {Object} Merged props.\n */\nfunction mergeWrapperProps( propsA, propsB ) {\n\tconst newProps = {\n\t\t...propsA,\n\t\t...propsB,\n\t};\n\n\t// May be set to undefined, so check if the property is set!\n\tif (\n\t\tpropsA?.hasOwnProperty( 'className' ) &&\n\t\tpropsB?.hasOwnProperty( 'className' )\n\t) {\n\t\tnewProps.className = clsx( propsA.className, propsB.className );\n\t}\n\n\tif (\n\t\tpropsA?.hasOwnProperty( 'style' ) &&\n\t\tpropsB?.hasOwnProperty( 'style' )\n\t) {\n\t\tnewProps.style = { ...propsA.style, ...propsB.style };\n\t}\n\n\treturn newProps;\n}\n\nfunction Block( { children, isHtml, ...props } ) {\n\treturn (\n\t\t<div { ...useBlockProps( props, { __unstableIsHtml: isHtml } ) }>\n\t\t\t{ children }\n\t\t</div>\n\t);\n}\n\nfunction BlockListBlock( {\n\tblock: { __unstableBlockSource },\n\tmode,\n\tisLocked,\n\tcanRemove,\n\tclientId,\n\tisSelected,\n\tisSelectionEnabled,\n\tclassName,\n\t__unstableLayoutClassNames: layoutClassNames,\n\tname,\n\tisValid,\n\tattributes,\n\twrapperProps,\n\tsetAttributes,\n\tonReplace,\n\tonRemove,\n\tonInsertBlocksAfter,\n\tonMerge,\n\ttoggleSelection,\n} ) {\n\tconst {\n\t\tmayDisplayControls,\n\t\tmayDisplayParentControls,\n\t\tthemeSupportsLayout,\n\t\t...context\n\t} = useContext( PrivateBlockContext );\n\n\tconst parentLayout = useLayout() || {};\n\n\t// We wrap the BlockEdit component in a div that hides it when editing in\n\t// HTML mode. This allows us to render all of the ancillary pieces\n\t// (InspectorControls, etc.) which are inside `BlockEdit` but not\n\t// `BlockHTML`, even in HTML mode.\n\tlet blockEdit = (\n\t\t<BlockEdit\n\t\t\tname={ name }\n\t\t\tisSelected={ isSelected }\n\t\t\tattributes={ attributes }\n\t\t\tsetAttributes={ setAttributes }\n\t\t\tinsertBlocksAfter={ isLocked ? undefined : onInsertBlocksAfter }\n\t\t\tonReplace={ canRemove ? onReplace : undefined }\n\t\t\tonRemove={ canRemove ? onRemove : undefined }\n\t\t\tmergeBlocks={ canRemove ? onMerge : undefined }\n\t\t\tclientId={ clientId }\n\t\t\tisSelectionEnabled={ isSelectionEnabled }\n\t\t\ttoggleSelection={ toggleSelection }\n\t\t\t__unstableLayoutClassNames={ layoutClassNames }\n\t\t\t__unstableParentLayout={\n\t\t\t\tObject.keys( parentLayout ).length ? parentLayout : undefined\n\t\t\t}\n\t\t\tmayDisplayControls={ mayDisplayControls }\n\t\t\tmayDisplayParentControls={ mayDisplayParentControls }\n\t\t\tblockEditingMode={ context.blockEditingMode }\n\t\t\tisPreviewMode={ context.isPreviewMode }\n\t\t/>\n\t);\n\n\tconst blockType = getBlockType( name );\n\n\t// Determine whether the block has props to apply to the wrapper.\n\tif ( blockType?.getEditWrapperProps ) {\n\t\twrapperProps = mergeWrapperProps(\n\t\t\twrapperProps,\n\t\t\tblockType.getEditWrapperProps( attributes )\n\t\t);\n\t}\n\n\tconst isAligned =\n\t\twrapperProps &&\n\t\t!! wrapperProps[ 'data-align' ] &&\n\t\t! themeSupportsLayout;\n\n\t// Support for sticky position in classic themes with alignment wrappers.\n\n\tconst isSticky = className?.includes( 'is-position-sticky' );\n\n\t// For aligned blocks, provide a wrapper element so the block can be\n\t// positioned relative to the block column.\n\t// This is only kept for classic themes that don't support layout\n\t// Historically we used to rely on extra divs and data-align to\n\t// provide the alignments styles in the editor.\n\t// Due to the differences between frontend and backend, we migrated\n\t// to the layout feature, and we're now aligning the markup of frontend\n\t// and backend.\n\tif ( isAligned ) {\n\t\tblockEdit = (\n\t\t\t<div\n\t\t\t\tclassName={ clsx( 'wp-block', isSticky && className ) }\n\t\t\t\tdata-align={ wrapperProps[ 'data-align' ] }\n\t\t\t>\n\t\t\t\t{ blockEdit }\n\t\t\t</div>\n\t\t);\n\t}\n\n\tlet block;\n\n\tif ( ! isValid ) {\n\t\tconst saveContent = __unstableBlockSource\n\t\t\t? serializeRawBlock( __unstableBlockSource )\n\t\t\t: getSaveContent( blockType, attributes );\n\n\t\tblock = (\n\t\t\t<Block className=\"has-warning\">\n\t\t\t\t<BlockInvalidWarning clientId={ clientId } />\n\t\t\t\t<RawHTML>{ safeHTML( saveContent ) }</RawHTML>\n\t\t\t</Block>\n\t\t);\n\t} else if ( mode === 'html' ) {\n\t\t// Render blockEdit so the inspector controls don't disappear.\n\t\t// See #8969.\n\t\tblock = (\n\t\t\t<>\n\t\t\t\t<div style={ { display: 'none' } }>{ blockEdit }</div>\n\t\t\t\t<Block isHtml>\n\t\t\t\t\t<BlockHtml clientId={ clientId } />\n\t\t\t\t</Block>\n\t\t\t</>\n\t\t);\n\t} else if ( blockType?.apiVersion > 1 ) {\n\t\tblock = blockEdit;\n\t} else {\n\t\tblock = <Block>{ blockEdit }</Block>;\n\t}\n\n\tconst { 'data-align': dataAlign, ...restWrapperProps } = wrapperProps ?? {};\n\tconst updatedWrapperProps = {\n\t\t...restWrapperProps,\n\t\tclassName: clsx(\n\t\t\trestWrapperProps.className,\n\t\t\tdataAlign && themeSupportsLayout && `align${ dataAlign }`,\n\t\t\t! ( dataAlign && isSticky ) && className\n\t\t),\n\t};\n\n\t// We set a new context with the adjusted and filtered wrapperProps (through\n\t// `editor.BlockListBlock`), which the `BlockListBlockProvider` did not have\n\t// access to.\n\t// Note that the context value doesn't have to be memoized in this case\n\t// because when it changes, this component will be re-rendered anyway, and\n\t// none of the consumers (BlockListBlock and useBlockProps) are memoized or\n\t// \"pure\". This is different from the public BlockEditContext, where\n\t// consumers might be memoized or \"pure\".\n\treturn (\n\t\t<PrivateBlockContext.Provider\n\t\t\tvalue={ {\n\t\t\t\twrapperProps: updatedWrapperProps,\n\t\t\t\tisAligned,\n\t\t\t\t...context,\n\t\t\t} }\n\t\t>\n\t\t\t<BlockCrashBoundary\n\t\t\t\tfallback={\n\t\t\t\t\t<Block className=\"has-warning\">\n\t\t\t\t\t\t<BlockCrashWarning />\n\t\t\t\t\t</Block>\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t{ block }\n\t\t\t</BlockCrashBoundary>\n\t\t</PrivateBlockContext.Provider>\n\t);\n}\n\nconst applyWithDispatch = withDispatch( ( dispatch, ownProps, registry ) => {\n\tconst {\n\t\tupdateBlockAttributes,\n\t\tinsertBlocks,\n\t\tmergeBlocks,\n\t\treplaceBlocks,\n\t\ttoggleSelection,\n\t\t__unstableMarkLastChangeAsPersistent,\n\t\tmoveBlocksToPosition,\n\t\tremoveBlock,\n\t\tselectBlock,\n\t} = dispatch( blockEditorStore );\n\n\t// Do not add new properties here, use `useDispatch` instead to avoid\n\t// leaking new props to the public API (editor.BlockListBlock filter).\n\treturn {\n\t\tsetAttributes( nextAttributes ) {\n\t\t\tconst { getMultiSelectedBlockClientIds } =\n\t\t\t\tregistry.select( blockEditorStore );\n\t\t\tconst multiSelectedBlockClientIds =\n\t\t\t\tgetMultiSelectedBlockClientIds();\n\t\t\tconst { clientId, attributes } = ownProps;\n\t\t\tconst clientIds = multiSelectedBlockClientIds.length\n\t\t\t\t? multiSelectedBlockClientIds\n\t\t\t\t: [ clientId ];\n\t\t\tconst newAttributes =\n\t\t\t\ttypeof nextAttributes === 'function'\n\t\t\t\t\t? nextAttributes( attributes )\n\t\t\t\t\t: nextAttributes;\n\n\t\t\tupdateBlockAttributes( clientIds, newAttributes );\n\t\t},\n\t\tonInsertBlocks( blocks, index ) {\n\t\t\tconst { rootClientId } = ownProps;\n\t\t\tinsertBlocks( blocks, index, rootClientId );\n\t\t},\n\t\tonInsertBlocksAfter( blocks ) {\n\t\t\tconst { clientId, rootClientId } = ownProps;\n\t\t\tconst { getBlockIndex } = registry.select( blockEditorStore );\n\t\t\tconst index = getBlockIndex( clientId );\n\t\t\tinsertBlocks( blocks, index + 1, rootClientId );\n\t\t},\n\t\tonMerge( forward ) {\n\t\t\tconst { clientId, rootClientId } = ownProps;\n\t\t\tconst {\n\t\t\t\tgetPreviousBlockClientId,\n\t\t\t\tgetNextBlockClientId,\n\t\t\t\tgetBlock,\n\t\t\t\tgetBlockAttributes,\n\t\t\t\tgetBlockName,\n\t\t\t\tgetBlockOrder,\n\t\t\t\tgetBlockIndex,\n\t\t\t\tgetBlockRootClientId,\n\t\t\t\tcanInsertBlockType,\n\t\t\t} = registry.select( blockEditorStore );\n\n\t\t\tfunction switchToDefaultOrRemove() {\n\t\t\t\tconst block = getBlock( clientId );\n\t\t\t\tconst defaultBlockName = getDefaultBlockName();\n\t\t\t\tconst defaultBlockType = getBlockType( defaultBlockName );\n\t\t\t\tif ( getBlockName( clientId ) !== defaultBlockName ) {\n\t\t\t\t\tconst replacement = switchToBlockType(\n\t\t\t\t\t\tblock,\n\t\t\t\t\t\tdefaultBlockName\n\t\t\t\t\t);\n\t\t\t\t\tif ( replacement && replacement.length ) {\n\t\t\t\t\t\treplaceBlocks( clientId, replacement );\n\t\t\t\t\t}\n\t\t\t\t} else if ( isUnmodifiedDefaultBlock( block ) ) {\n\t\t\t\t\tconst nextBlockClientId = getNextBlockClientId( clientId );\n\t\t\t\t\tif ( nextBlockClientId ) {\n\t\t\t\t\t\tregistry.batch( () => {\n\t\t\t\t\t\t\tremoveBlock( clientId );\n\t\t\t\t\t\t\tselectBlock( nextBlockClientId );\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t} else if ( defaultBlockType.merge ) {\n\t\t\t\t\tconst attributes = defaultBlockType.merge(\n\t\t\t\t\t\t{},\n\t\t\t\t\t\tblock.attributes\n\t\t\t\t\t);\n\t\t\t\t\treplaceBlocks(\n\t\t\t\t\t\t[ clientId ],\n\t\t\t\t\t\t[ createBlock( defaultBlockName, attributes ) ]\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Moves the block with clientId up one level. If the block type\n\t\t\t * cannot be inserted at the new location, it will be attempted to\n\t\t\t * convert to the default block type.\n\t\t\t *\n\t\t\t * @param {string} _clientId The block to move.\n\t\t\t * @param {boolean} changeSelection Whether to change the selection\n\t\t\t * to the moved block.\n\t\t\t */\n\t\t\tfunction moveFirstItemUp( _clientId, changeSelection = true ) {\n\t\t\t\tconst wrapperBlockName = getBlockName( _clientId );\n\t\t\t\tconst wrapperBlockType = getBlockType( wrapperBlockName );\n\t\t\t\tconst isTextualWrapper = wrapperBlockType.category === 'text';\n\t\t\t\tconst targetRootClientId = getBlockRootClientId( _clientId );\n\t\t\t\tconst blockOrder = getBlockOrder( _clientId );\n\t\t\t\tconst [ firstClientId ] = blockOrder;\n\n\t\t\t\tif (\n\t\t\t\t\tblockOrder.length === 1 &&\n\t\t\t\t\tisUnmodifiedBlock( getBlock( firstClientId ) )\n\t\t\t\t) {\n\t\t\t\t\tremoveBlock( _clientId );\n\t\t\t\t} else if ( isTextualWrapper ) {\n\t\t\t\t\tregistry.batch( () => {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tcanInsertBlockType(\n\t\t\t\t\t\t\t\tgetBlockName( firstClientId ),\n\t\t\t\t\t\t\t\ttargetRootClientId\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tmoveBlocksToPosition(\n\t\t\t\t\t\t\t\t[ firstClientId ],\n\t\t\t\t\t\t\t\t_clientId,\n\t\t\t\t\t\t\t\ttargetRootClientId,\n\t\t\t\t\t\t\t\tgetBlockIndex( _clientId )\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst replacement = switchToBlockType(\n\t\t\t\t\t\t\t\tgetBlock( firstClientId ),\n\t\t\t\t\t\t\t\tgetDefaultBlockName()\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\treplacement &&\n\t\t\t\t\t\t\t\treplacement.length &&\n\t\t\t\t\t\t\t\treplacement.every( ( block ) =>\n\t\t\t\t\t\t\t\t\tcanInsertBlockType(\n\t\t\t\t\t\t\t\t\t\tblock.name,\n\t\t\t\t\t\t\t\t\t\ttargetRootClientId\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tinsertBlocks(\n\t\t\t\t\t\t\t\t\treplacement,\n\t\t\t\t\t\t\t\t\tgetBlockIndex( _clientId ),\n\t\t\t\t\t\t\t\t\ttargetRootClientId,\n\t\t\t\t\t\t\t\t\tchangeSelection\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tremoveBlock( firstClientId, false );\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tswitchToDefaultOrRemove();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t! getBlockOrder( _clientId ).length &&\n\t\t\t\t\t\t\tisUnmodifiedBlock( getBlock( _clientId ) )\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tremoveBlock( _clientId, false );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t} else {\n\t\t\t\t\tswitchToDefaultOrRemove();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// For `Delete` or forward merge, we should do the exact same thing\n\t\t\t// as `Backspace`, but from the other block.\n\t\t\tif ( forward ) {\n\t\t\t\tif ( rootClientId ) {\n\t\t\t\t\tconst nextRootClientId =\n\t\t\t\t\t\tgetNextBlockClientId( rootClientId );\n\n\t\t\t\t\tif ( nextRootClientId ) {\n\t\t\t\t\t\t// If there is a block that follows with the same parent\n\t\t\t\t\t\t// block name and the same attributes, merge the inner\n\t\t\t\t\t\t// blocks.\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tgetBlockName( rootClientId ) ===\n\t\t\t\t\t\t\tgetBlockName( nextRootClientId )\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tconst rootAttributes =\n\t\t\t\t\t\t\t\tgetBlockAttributes( rootClientId );\n\t\t\t\t\t\t\tconst previousRootAttributes =\n\t\t\t\t\t\t\t\tgetBlockAttributes( nextRootClientId );\n\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tObject.keys( rootAttributes ).every(\n\t\t\t\t\t\t\t\t\t( key ) =>\n\t\t\t\t\t\t\t\t\t\trootAttributes[ key ] ===\n\t\t\t\t\t\t\t\t\t\tpreviousRootAttributes[ key ]\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tregistry.batch( () => {\n\t\t\t\t\t\t\t\t\tmoveBlocksToPosition(\n\t\t\t\t\t\t\t\t\t\tgetBlockOrder( nextRootClientId ),\n\t\t\t\t\t\t\t\t\t\tnextRootClientId,\n\t\t\t\t\t\t\t\t\t\trootClientId\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\tremoveBlock( nextRootClientId, false );\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tmergeBlocks( rootClientId, nextRootClientId );\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst nextBlockClientId = getNextBlockClientId( clientId );\n\n\t\t\t\tif ( ! nextBlockClientId ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif ( getBlockOrder( nextBlockClientId ).length ) {\n\t\t\t\t\tmoveFirstItemUp( nextBlockClientId, false );\n\t\t\t\t} else {\n\t\t\t\t\tmergeBlocks( clientId, nextBlockClientId );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst previousBlockClientId =\n\t\t\t\t\tgetPreviousBlockClientId( clientId );\n\n\t\t\t\tif ( previousBlockClientId ) {\n\t\t\t\t\tmergeBlocks( previousBlockClientId, clientId );\n\t\t\t\t} else if ( rootClientId ) {\n\t\t\t\t\tconst previousRootClientId =\n\t\t\t\t\t\tgetPreviousBlockClientId( rootClientId );\n\n\t\t\t\t\t// If there is a preceding block with the same parent block\n\t\t\t\t\t// name and the same attributes, merge the inner blocks.\n\t\t\t\t\tif (\n\t\t\t\t\t\tpreviousRootClientId &&\n\t\t\t\t\t\tgetBlockName( rootClientId ) ===\n\t\t\t\t\t\t\tgetBlockName( previousRootClientId )\n\t\t\t\t\t) {\n\t\t\t\t\t\tconst rootAttributes =\n\t\t\t\t\t\t\tgetBlockAttributes( rootClientId );\n\t\t\t\t\t\tconst previousRootAttributes =\n\t\t\t\t\t\t\tgetBlockAttributes( previousRootClientId );\n\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tObject.keys( rootAttributes ).every(\n\t\t\t\t\t\t\t\t( key ) =>\n\t\t\t\t\t\t\t\t\trootAttributes[ key ] ===\n\t\t\t\t\t\t\t\t\tpreviousRootAttributes[ key ]\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tregistry.batch( () => {\n\t\t\t\t\t\t\t\tmoveBlocksToPosition(\n\t\t\t\t\t\t\t\t\tgetBlockOrder( rootClientId ),\n\t\t\t\t\t\t\t\t\trootClientId,\n\t\t\t\t\t\t\t\t\tpreviousRootClientId\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tremoveBlock( rootClientId, false );\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tmoveFirstItemUp( rootClientId );\n\t\t\t\t} else {\n\t\t\t\t\tswitchToDefaultOrRemove();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tonReplace( blocks, indexToSelect, initialPosition ) {\n\t\t\tif (\n\t\t\t\tblocks.length &&\n\t\t\t\t! isUnmodifiedDefaultBlock( blocks[ blocks.length - 1 ] )\n\t\t\t) {\n\t\t\t\t__unstableMarkLastChangeAsPersistent();\n\t\t\t}\n\t\t\t//Unsynced patterns are nested in an array so we need to flatten them.\n\t\t\tconst replacementBlocks =\n\t\t\t\tblocks?.length === 1 && Array.isArray( blocks[ 0 ] )\n\t\t\t\t\t? blocks[ 0 ]\n\t\t\t\t\t: blocks;\n\t\t\treplaceBlocks(\n\t\t\t\t[ ownProps.clientId ],\n\t\t\t\treplacementBlocks,\n\t\t\t\tindexToSelect,\n\t\t\t\tinitialPosition\n\t\t\t);\n\t\t},\n\t\tonRemove() {\n\t\t\tremoveBlock( ownProps.clientId );\n\t\t},\n\t\ttoggleSelection( selectionEnabled ) {\n\t\t\ttoggleSelection( selectionEnabled );\n\t\t},\n\t};\n} );\n\n// This component is used by the BlockListBlockProvider component below. It will\n// add the props necessary for the `editor.BlockListBlock` filters.\nBlockListBlock = compose(\n\tapplyWithDispatch,\n\twithFilters( 'editor.BlockListBlock' )\n)( BlockListBlock );\n\n// This component provides all the information we need through a single store\n// subscription (useSelect mapping). Only the necessary props are passed down\n// to the BlockListBlock component, which is a filtered component, so these\n// props are public API. To avoid adding to the public API, we use a private\n// context to pass the rest of the information to the filtered BlockListBlock\n// component, and useBlockProps.\nfunction BlockListBlockProvider( props ) {\n\tconst { clientId, rootClientId } = props;\n\tconst selectedProps = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tisBlockSelected,\n\t\t\t\tgetBlockMode,\n\t\t\t\tisSelectionEnabled,\n\t\t\t\tgetTemplateLock,\n\t\t\t\tisSectionBlock: _isSectionBlock,\n\t\t\t\tgetBlockWithoutAttributes,\n\t\t\t\tgetBlockAttributes,\n\t\t\t\tcanRemoveBlock,\n\t\t\t\tcanMoveBlock,\n\n\t\t\t\tgetSettings,\n\t\t\t\tgetTemporarilyEditingAsBlocks,\n\t\t\t\tgetBlockEditingMode,\n\t\t\t\tgetBlockName,\n\t\t\t\tisFirstMultiSelectedBlock,\n\t\t\t\tgetMultiSelectedBlockClientIds,\n\t\t\t\thasSelectedInnerBlock,\n\t\t\t\tgetBlocksByName,\n\n\t\t\t\tgetBlockIndex,\n\t\t\t\tisBlockMultiSelected,\n\t\t\t\tisBlockSubtreeDisabled,\n\t\t\t\tisBlockHighlighted,\n\t\t\t\t__unstableIsFullySelected,\n\t\t\t\t__unstableSelectionHasUnmergeableBlock,\n\t\t\t\tisBlockBeingDragged,\n\t\t\t\tisDragging,\n\t\t\t\t__unstableHasActiveBlockOverlayActive,\n\t\t\t\tgetSelectedBlocksInitialCaretPosition,\n\t\t\t} = unlock( select( blockEditorStore ) );\n\t\t\tconst blockWithoutAttributes =\n\t\t\t\tgetBlockWithoutAttributes( clientId );\n\n\t\t\t// This is a temporary fix.\n\t\t\t// This function should never be called when a block is not\n\t\t\t// present in the state. It happens now because the order in\n\t\t\t// withSelect rendering is not correct.\n\t\t\tif ( ! blockWithoutAttributes ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst {\n\t\t\t\thasBlockSupport: _hasBlockSupport,\n\t\t\t\tgetActiveBlockVariation,\n\t\t\t} = select( blocksStore );\n\t\t\tconst attributes = getBlockAttributes( clientId );\n\t\t\tconst { name: blockName, isValid } = blockWithoutAttributes;\n\t\t\tconst blockType = getBlockType( blockName );\n\t\t\tconst {\n\t\t\t\tsupportsLayout,\n\t\t\t\tisPreviewMode,\n\t\t\t\t__experimentalBlockBindingsSupportedAttributes,\n\t\t\t} = getSettings();\n\n\t\t\tconst bindableAttributes =\n\t\t\t\t__experimentalBlockBindingsSupportedAttributes?.[ blockName ];\n\n\t\t\tconst hasLightBlockWrapper = blockType?.apiVersion > 1;\n\t\t\tconst previewContext = {\n\t\t\t\tisPreviewMode,\n\t\t\t\tblockWithoutAttributes,\n\t\t\t\tname: blockName,\n\t\t\t\tattributes,\n\t\t\t\tisValid,\n\t\t\t\tthemeSupportsLayout: supportsLayout,\n\t\t\t\tindex: getBlockIndex( clientId ),\n\t\t\t\tisReusable: isReusableBlock( blockType ),\n\t\t\t\tclassName: hasLightBlockWrapper\n\t\t\t\t\t? attributes.className\n\t\t\t\t\t: undefined,\n\t\t\t\tdefaultClassName: hasLightBlockWrapper\n\t\t\t\t\t? getBlockDefaultClassName( blockName )\n\t\t\t\t\t: undefined,\n\t\t\t\tblockTitle: blockType?.title,\n\t\t\t\tisBlockHidden: attributes?.metadata?.blockVisibility === false,\n\t\t\t};\n\n\t\t\t// When in preview mode, we can avoid a lot of selection and\n\t\t\t// editing related selectors.\n\t\t\tif ( isPreviewMode ) {\n\t\t\t\treturn previewContext;\n\t\t\t}\n\n\t\t\tconst { isBlockHidden: _isBlockHidden } = unlock(\n\t\t\t\tselect( blockEditorStore )\n\t\t\t);\n\t\t\tconst _isSelected = isBlockSelected( clientId );\n\t\t\tconst canRemove = canRemoveBlock( clientId );\n\t\t\tconst canMove = canMoveBlock( clientId );\n\t\t\tconst match = getActiveBlockVariation( blockName, attributes );\n\t\t\tconst isMultiSelected = isBlockMultiSelected( clientId );\n\t\t\tconst checkDeep = true;\n\t\t\tconst isAncestorOfSelectedBlock = hasSelectedInnerBlock(\n\t\t\t\tclientId,\n\t\t\t\tcheckDeep\n\t\t\t);\n\t\t\tconst blockEditingMode = getBlockEditingMode( clientId );\n\n\t\t\tconst multiple = hasBlockSupport( blockName, 'multiple', true );\n\n\t\t\t// For block types with `multiple` support, there is no \"original\n\t\t\t// block\" to be found in the content, as the block itself is valid.\n\t\t\tconst blocksWithSameName = multiple\n\t\t\t\t? []\n\t\t\t\t: getBlocksByName( blockName );\n\t\t\tconst isInvalid =\n\t\t\t\tblocksWithSameName.length &&\n\t\t\t\tblocksWithSameName[ 0 ] !== clientId;\n\n\t\t\treturn {\n\t\t\t\t...previewContext,\n\t\t\t\tmode: getBlockMode( clientId ),\n\t\t\t\tisSelectionEnabled: isSelectionEnabled(),\n\t\t\t\tisLocked: !! getTemplateLock( rootClientId ),\n\t\t\t\tisSectionBlock: _isSectionBlock( clientId ),\n\t\t\t\tcanRemove,\n\t\t\t\tcanMove,\n\t\t\t\tisSelected: _isSelected,\n\t\t\t\tisTemporarilyEditingAsBlocks:\n\t\t\t\t\tgetTemporarilyEditingAsBlocks() === clientId,\n\t\t\t\tblockEditingMode,\n\t\t\t\tmayDisplayControls:\n\t\t\t\t\t_isSelected ||\n\t\t\t\t\t( isFirstMultiSelectedBlock( clientId ) &&\n\t\t\t\t\t\tgetMultiSelectedBlockClientIds().every(\n\t\t\t\t\t\t\t( id ) => getBlockName( id ) === blockName\n\t\t\t\t\t\t) ),\n\t\t\t\tmayDisplayParentControls:\n\t\t\t\t\t_hasBlockSupport(\n\t\t\t\t\t\tgetBlockName( clientId ),\n\t\t\t\t\t\t'__experimentalExposeControlsToChildren',\n\t\t\t\t\t\tfalse\n\t\t\t\t\t) && hasSelectedInnerBlock( clientId ),\n\t\t\t\tblockApiVersion: blockType?.apiVersion || 1,\n\t\t\t\tblockTitle: match?.title || blockType?.title,\n\t\t\t\tisSubtreeDisabled:\n\t\t\t\t\tblockEditingMode === 'disabled' &&\n\t\t\t\t\tisBlockSubtreeDisabled( clientId ),\n\t\t\t\thasOverlay:\n\t\t\t\t\t__unstableHasActiveBlockOverlayActive( clientId ) &&\n\t\t\t\t\t! isDragging(),\n\t\t\t\tinitialPosition: _isSelected\n\t\t\t\t\t? getSelectedBlocksInitialCaretPosition()\n\t\t\t\t\t: undefined,\n\t\t\t\tisHighlighted: isBlockHighlighted( clientId ),\n\t\t\t\tisMultiSelected,\n\t\t\t\tisPartiallySelected:\n\t\t\t\t\tisMultiSelected &&\n\t\t\t\t\t! __unstableIsFullySelected() &&\n\t\t\t\t\t! __unstableSelectionHasUnmergeableBlock(),\n\t\t\t\tisDragging: isBlockBeingDragged( clientId ),\n\t\t\t\thasChildSelected: isAncestorOfSelectedBlock,\n\t\t\t\tisEditingDisabled: blockEditingMode === 'disabled',\n\t\t\t\thasEditableOutline:\n\t\t\t\t\tblockEditingMode !== 'disabled' &&\n\t\t\t\t\tgetBlockEditingMode( rootClientId ) === 'disabled',\n\t\t\t\toriginalBlockClientId: isInvalid\n\t\t\t\t\t? blocksWithSameName[ 0 ]\n\t\t\t\t\t: false,\n\t\t\t\tisBlockHidden: _isBlockHidden( clientId ),\n\t\t\t\tbindableAttributes,\n\t\t\t};\n\t\t},\n\t\t[ clientId, rootClientId ]\n\t);\n\n\tconst {\n\t\tisPreviewMode,\n\t\t// Fill values that end up as a public API and may not be defined in\n\t\t// preview mode.\n\t\tmode = 'visual',\n\t\tisSelectionEnabled = false,\n\t\tisLocked = false,\n\t\tcanRemove = false,\n\t\tcanMove = false,\n\t\tblockWithoutAttributes,\n\t\tname,\n\t\tattributes,\n\t\tisValid,\n\t\tisSelected = false,\n\t\tthemeSupportsLayout,\n\t\tisTemporarilyEditingAsBlocks,\n\t\tblockEditingMode,\n\t\tmayDisplayControls,\n\t\tmayDisplayParentControls,\n\t\tindex,\n\t\tblockApiVersion,\n\t\tblockTitle,\n\t\tisSubtreeDisabled,\n\t\thasOverlay,\n\t\tinitialPosition,\n\t\tisHighlighted,\n\t\tisMultiSelected,\n\t\tisPartiallySelected,\n\t\tisReusable,\n\t\tisDragging,\n\t\thasChildSelected,\n\t\tisSectionBlock,\n\t\tisEditingDisabled,\n\t\thasEditableOutline,\n\t\tclassName,\n\t\tdefaultClassName,\n\t\toriginalBlockClientId,\n\t\tisBlockHidden,\n\t\tbindableAttributes,\n\t} = selectedProps;\n\n\t// Users of the editor.BlockListBlock filter used to be able to\n\t// access the block prop.\n\t// Ideally these blocks would rely on the clientId prop only.\n\t// This is kept for backward compatibility reasons.\n\tconst block = useMemo(\n\t\t() => ( { ...blockWithoutAttributes, attributes } ),\n\t\t[ blockWithoutAttributes, attributes ]\n\t);\n\n\t// Block is sometimes not mounted at the right time, causing it be\n\t// undefined see issue for more info\n\t// https://github.com/WordPress/gutenberg/issues/17013\n\tif ( ! selectedProps ) {\n\t\treturn null;\n\t}\n\n\tconst privateContext = {\n\t\tisPreviewMode,\n\t\tclientId,\n\t\tclassName,\n\t\tindex,\n\t\tmode,\n\t\tname,\n\t\tblockApiVersion,\n\t\tblockTitle,\n\t\tisSelected,\n\t\tisSubtreeDisabled,\n\t\thasOverlay,\n\t\tinitialPosition,\n\t\tblockEditingMode,\n\t\tisHighlighted,\n\t\tisMultiSelected,\n\t\tisPartiallySelected,\n\t\tisReusable,\n\t\tisDragging,\n\t\thasChildSelected,\n\t\tisSectionBlock,\n\t\tisEditingDisabled,\n\t\thasEditableOutline,\n\t\tisTemporarilyEditingAsBlocks,\n\t\tdefaultClassName,\n\t\tmayDisplayControls,\n\t\tmayDisplayParentControls,\n\t\toriginalBlockClientId,\n\t\tthemeSupportsLayout,\n\t\tcanMove,\n\t\tisBlockHidden,\n\t\tbindableAttributes,\n\t};\n\n\tif (\n\t\tisBlockHidden &&\n\t\t! isSelected &&\n\t\t! isMultiSelected &&\n\t\t! hasChildSelected\n\t) {\n\t\treturn null;\n\t}\n\n\t// Here we separate between the props passed to BlockListBlock and any other\n\t// information we selected for internal use. BlockListBlock is a filtered\n\t// component and thus ALL the props are PUBLIC API.\n\n\t// Note that the context value doesn't have to be memoized in this case\n\t// because when it changes, this component will be re-rendered anyway, and\n\t// none of the consumers (BlockListBlock and useBlockProps) are memoized or\n\t// \"pure\". This is different from the public BlockEditContext, where\n\t// consumers might be memoized or \"pure\".\n\treturn (\n\t\t<PrivateBlockContext.Provider value={ privateContext }>\n\t\t\t<BlockListBlock\n\t\t\t\t{ ...props }\n\t\t\t\t// WARNING: all the following props are public API (through the\n\t\t\t\t// editor.BlockListBlock filter) and normally nothing new should\n\t\t\t\t// be added to it.\n\t\t\t\t{ ...{\n\t\t\t\t\tmode,\n\t\t\t\t\tisSelectionEnabled,\n\t\t\t\t\tisLocked,\n\t\t\t\t\tcanRemove,\n\t\t\t\t\tcanMove,\n\t\t\t\t\t// Users of the editor.BlockListBlock filter used to be able\n\t\t\t\t\t// to access the block prop. Ideally these blocks would rely\n\t\t\t\t\t// on the clientId prop only. This is kept for backward\n\t\t\t\t\t// compatibility reasons.\n\t\t\t\t\tblock,\n\t\t\t\t\tname,\n\t\t\t\t\tattributes,\n\t\t\t\t\tisValid,\n\t\t\t\t\tisSelected,\n\t\t\t\t} }\n\t\t\t/>\n\t\t</PrivateBlockContext.Provider>\n\t);\n}\n\nexport default memo( BlockListBlockProvider );\n"],
5
+ "mappings": "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",
6
+ "names": ["isSelectionEnabled", "isDragging", "blockWithoutAttributes", "attributes", "isValid", "isPreviewMode", "bindableAttributes", "canRemove", "canMove", "isMultiSelected", "blockEditingMode"]
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wordpress/block-editor",
3
- "version": "15.5.1-next.47f435fc9.0",
3
+ "version": "15.5.1-next.ff1cebbba.0",
4
4
  "description": "Generic block editor.",
5
5
  "author": "The WordPress Contributors",
6
6
  "license": "GPL-2.0-or-later",
@@ -56,39 +56,39 @@
56
56
  "@emotion/react": "^11.7.1",
57
57
  "@emotion/styled": "^11.6.0",
58
58
  "@react-spring/web": "^9.4.5",
59
- "@wordpress/a11y": "^4.32.1-next.47f435fc9.0",
60
- "@wordpress/api-fetch": "^7.32.1-next.47f435fc9.0",
61
- "@wordpress/base-styles": "^6.8.1-next.47f435fc9.0",
62
- "@wordpress/blob": "^4.32.1-next.47f435fc9.0",
63
- "@wordpress/block-serialization-default-parser": "^5.32.1-next.47f435fc9.0",
64
- "@wordpress/blocks": "^15.5.1-next.47f435fc9.0",
65
- "@wordpress/commands": "^1.32.1-next.47f435fc9.0",
66
- "@wordpress/components": "^30.6.1-next.47f435fc9.0",
67
- "@wordpress/compose": "^7.32.1-next.47f435fc9.0",
68
- "@wordpress/data": "^10.32.1-next.47f435fc9.0",
69
- "@wordpress/date": "^5.32.1-next.47f435fc9.0",
70
- "@wordpress/deprecated": "^4.32.1-next.47f435fc9.0",
71
- "@wordpress/dom": "^4.32.1-next.47f435fc9.0",
72
- "@wordpress/element": "^6.32.1-next.47f435fc9.0",
73
- "@wordpress/escape-html": "^3.32.1-next.47f435fc9.0",
74
- "@wordpress/hooks": "^4.32.1-next.47f435fc9.0",
75
- "@wordpress/html-entities": "^4.32.1-next.47f435fc9.0",
76
- "@wordpress/i18n": "^6.5.1-next.47f435fc9.0",
77
- "@wordpress/icons": "^11.0.1-next.47f435fc9.0",
78
- "@wordpress/is-shallow-equal": "^5.32.1-next.47f435fc9.0",
79
- "@wordpress/keyboard-shortcuts": "^5.32.1-next.47f435fc9.0",
80
- "@wordpress/keycodes": "^4.32.1-next.47f435fc9.0",
81
- "@wordpress/notices": "^5.32.1-next.47f435fc9.0",
82
- "@wordpress/preferences": "^4.32.1-next.47f435fc9.0",
83
- "@wordpress/priority-queue": "^3.32.1-next.47f435fc9.0",
84
- "@wordpress/private-apis": "^1.32.1-next.47f435fc9.0",
85
- "@wordpress/rich-text": "^7.32.1-next.47f435fc9.0",
86
- "@wordpress/style-engine": "^2.32.1-next.47f435fc9.0",
87
- "@wordpress/token-list": "^3.32.1-next.47f435fc9.0",
88
- "@wordpress/upload-media": "^0.17.1-next.47f435fc9.0",
89
- "@wordpress/url": "^4.32.1-next.47f435fc9.0",
90
- "@wordpress/warning": "^3.32.1-next.47f435fc9.0",
91
- "@wordpress/wordcount": "^4.32.1-next.47f435fc9.0",
59
+ "@wordpress/a11y": "^4.32.1-next.ff1cebbba.0",
60
+ "@wordpress/api-fetch": "^7.32.1-next.ff1cebbba.0",
61
+ "@wordpress/base-styles": "^6.8.1-next.ff1cebbba.0",
62
+ "@wordpress/blob": "^4.32.1-next.ff1cebbba.0",
63
+ "@wordpress/block-serialization-default-parser": "^5.32.1-next.ff1cebbba.0",
64
+ "@wordpress/blocks": "^15.5.1-next.ff1cebbba.0",
65
+ "@wordpress/commands": "^1.32.1-next.ff1cebbba.0",
66
+ "@wordpress/components": "^30.6.1-next.ff1cebbba.0",
67
+ "@wordpress/compose": "^7.32.1-next.ff1cebbba.0",
68
+ "@wordpress/data": "^10.32.1-next.ff1cebbba.0",
69
+ "@wordpress/date": "^5.32.1-next.ff1cebbba.0",
70
+ "@wordpress/deprecated": "^4.32.1-next.ff1cebbba.0",
71
+ "@wordpress/dom": "^4.32.1-next.ff1cebbba.0",
72
+ "@wordpress/element": "^6.32.1-next.ff1cebbba.0",
73
+ "@wordpress/escape-html": "^3.32.1-next.ff1cebbba.0",
74
+ "@wordpress/hooks": "^4.32.1-next.ff1cebbba.0",
75
+ "@wordpress/html-entities": "^4.32.1-next.ff1cebbba.0",
76
+ "@wordpress/i18n": "^6.5.1-next.ff1cebbba.0",
77
+ "@wordpress/icons": "^11.0.1-next.ff1cebbba.0",
78
+ "@wordpress/is-shallow-equal": "^5.32.1-next.ff1cebbba.0",
79
+ "@wordpress/keyboard-shortcuts": "^5.32.1-next.ff1cebbba.0",
80
+ "@wordpress/keycodes": "^4.32.1-next.ff1cebbba.0",
81
+ "@wordpress/notices": "^5.32.1-next.ff1cebbba.0",
82
+ "@wordpress/preferences": "^4.32.1-next.ff1cebbba.0",
83
+ "@wordpress/priority-queue": "^3.32.1-next.ff1cebbba.0",
84
+ "@wordpress/private-apis": "^1.32.1-next.ff1cebbba.0",
85
+ "@wordpress/rich-text": "^7.32.1-next.ff1cebbba.0",
86
+ "@wordpress/style-engine": "^2.32.1-next.ff1cebbba.0",
87
+ "@wordpress/token-list": "^3.32.1-next.ff1cebbba.0",
88
+ "@wordpress/upload-media": "^0.17.1-next.ff1cebbba.0",
89
+ "@wordpress/url": "^4.32.1-next.ff1cebbba.0",
90
+ "@wordpress/warning": "^3.32.1-next.ff1cebbba.0",
91
+ "@wordpress/wordcount": "^4.32.1-next.ff1cebbba.0",
92
92
  "change-case": "^4.1.2",
93
93
  "clsx": "^2.1.1",
94
94
  "colord": "^2.7.0",
@@ -111,5 +111,5 @@
111
111
  "publishConfig": {
112
112
  "access": "public"
113
113
  },
114
- "gitHead": "9720f22c138771d2ed1a0522725c3cdf1c242953"
114
+ "gitHead": "c5b659710aff01d40d2eb97b211eb2cec9c07d3b"
115
115
  }
@@ -25,8 +25,8 @@ import {
25
25
  hasPatternOverridesDefaultBinding,
26
26
  replacePatternOverridesDefaultBinding,
27
27
  } from '../../utils/block-bindings';
28
- import { store as blockEditorStore } from '../../store';
29
28
  import { unlock } from '../../lock-unlock';
29
+ import { PrivateBlockContext } from '../block-list/private-block-context';
30
30
 
31
31
  /**
32
32
  * Default value used for blocks which do not define their own context needs,
@@ -56,8 +56,6 @@ const Edit = ( props ) => {
56
56
 
57
57
  const EditWithFilters = withFilters( 'editor.BlockEdit' )( Edit );
58
58
 
59
- const EMPTY_ARRAY = [];
60
-
61
59
  const EditWithGeneratedProps = ( props ) => {
62
60
  const { name, clientId, attributes, setAttributes } = props;
63
61
  const registry = useRegistry();
@@ -68,17 +66,7 @@ const EditWithGeneratedProps = ( props ) => {
68
66
  unlock( select( blocksStore ) ).getAllBlockBindingsSources(),
69
67
  []
70
68
  );
71
- const bindableAttributes = useSelect(
72
- ( select ) => {
73
- const { __experimentalBlockBindingsSupportedAttributes } =
74
- select( blockEditorStore ).getSettings();
75
- return (
76
- __experimentalBlockBindingsSupportedAttributes?.[ name ] ||
77
- EMPTY_ARRAY
78
- );
79
- },
80
- [ name ]
81
- );
69
+ const { bindableAttributes } = useContext( PrivateBlockContext );
82
70
 
83
71
  const { blockBindings, context, hasPatternOverrides } = useMemo( () => {
84
72
  // Assign context values using the block type's declared context needs.
@@ -606,7 +606,15 @@ function BlockListBlockProvider( props ) {
606
606
  const attributes = getBlockAttributes( clientId );
607
607
  const { name: blockName, isValid } = blockWithoutAttributes;
608
608
  const blockType = getBlockType( blockName );
609
- const { supportsLayout, isPreviewMode } = getSettings();
609
+ const {
610
+ supportsLayout,
611
+ isPreviewMode,
612
+ __experimentalBlockBindingsSupportedAttributes,
613
+ } = getSettings();
614
+
615
+ const bindableAttributes =
616
+ __experimentalBlockBindingsSupportedAttributes?.[ blockName ];
617
+
610
618
  const hasLightBlockWrapper = blockType?.apiVersion > 1;
611
619
  const previewContext = {
612
620
  isPreviewMode,
@@ -710,6 +718,7 @@ function BlockListBlockProvider( props ) {
710
718
  ? blocksWithSameName[ 0 ]
711
719
  : false,
712
720
  isBlockHidden: _isBlockHidden( clientId ),
721
+ bindableAttributes,
713
722
  };
714
723
  },
715
724
  [ clientId, rootClientId ]
@@ -753,6 +762,7 @@ function BlockListBlockProvider( props ) {
753
762
  defaultClassName,
754
763
  originalBlockClientId,
755
764
  isBlockHidden,
765
+ bindableAttributes,
756
766
  } = selectedProps;
757
767
 
758
768
  // Users of the editor.BlockListBlock filter used to be able to
@@ -802,6 +812,7 @@ function BlockListBlockProvider( props ) {
802
812
  themeSupportsLayout,
803
813
  canMove,
804
814
  isBlockHidden,
815
+ bindableAttributes,
805
816
  };
806
817
 
807
818
  if (