@@ -8,7 +8,13 @@ import classnames from 'classnames';
88 */
99import { AsyncModeProvider , useSelect } from '@wordpress/data' ;
1010import { useViewportMatch , useMergeRefs } from '@wordpress/compose' ;
11- import { createContext , useState , useMemo } from '@wordpress/element' ;
11+ import {
12+ createContext ,
13+ useState ,
14+ useMemo ,
15+ createPortal ,
16+ } from '@wordpress/element' ;
17+ import { createSlotFill } from '@wordpress/components' ;
1218
1319/**
1420 * Internal dependencies
@@ -24,8 +30,14 @@ import BlockToolsBackCompat from '../block-tools/back-compat';
2430import { useBlockSelectionClearer } from '../block-selection-clearer' ;
2531
2632export const IntersectionObserver = createContext ( ) ;
33+ const { Fill : BlockHeadFill , Slot : BlockHeadSlot } = createSlotFill (
34+ '__unstableBlockHead'
35+ ) ;
36+
37+ export { BlockHeadFill } ;
2738
2839function Root ( { className, children } ) {
40+ const [ element , setElement ] = useState ( ) ;
2941 const isLargeViewport = useViewportMatch ( 'medium' ) ;
3042 const {
3143 isTyping,
@@ -52,6 +64,7 @@ function Root( { className, children } ) {
5264 useBlockSelectionClearer ( ) ,
5365 useBlockDropZone ( ) ,
5466 useInBetweenInserter ( ) ,
67+ setElement ,
5568 ] ) }
5669 className = { classnames (
5770 'block-editor-block-list__layout is-root-container' ,
@@ -64,6 +77,8 @@ function Root( { className, children } ) {
6477 }
6578 ) }
6679 >
80+ { element &&
81+ createPortal ( < BlockHeadSlot /> , element . ownerDocument . head ) }
6782 { children }
6883 </ div >
6984 ) ;
0 commit comments