From 6a09a19007dafc993c95101c09e07a1dd11f9cbd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ella=20van=C2=A0Durpe?= Date: Fri, 21 May 2021 12:44:11 +0300 Subject: [PATCH] Block editor: move layout styles to document head (instead of rendering inline) --- .../src/components/block-list/index.js | 17 ++++++++++++++++- packages/block-editor/src/hooks/layout.js | 11 +++++++---- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/packages/block-editor/src/components/block-list/index.js b/packages/block-editor/src/components/block-list/index.js index 96e46284d6b95..3c962ef4ee310 100644 --- a/packages/block-editor/src/components/block-list/index.js +++ b/packages/block-editor/src/components/block-list/index.js @@ -8,7 +8,13 @@ import classnames from 'classnames'; */ import { AsyncModeProvider, useSelect } from '@wordpress/data'; import { useViewportMatch, useMergeRefs } from '@wordpress/compose'; -import { createContext, useState, useMemo } from '@wordpress/element'; +import { + createContext, + useState, + useMemo, + createPortal, +} from '@wordpress/element'; +import { createSlotFill } from '@wordpress/components'; /** * Internal dependencies @@ -24,8 +30,14 @@ import BlockToolsBackCompat from '../block-tools/back-compat'; import { useBlockSelectionClearer } from '../block-selection-clearer'; export const IntersectionObserver = createContext(); +const { Fill: BlockHeadFill, Slot: BlockHeadSlot } = createSlotFill( + '__unstableBlockHead' +); + +export { BlockHeadFill }; function Root( { className, children } ) { + const [ element, setElement ] = useState(); const isLargeViewport = useViewportMatch( 'medium' ); const { isTyping, @@ -52,6 +64,7 @@ function Root( { className, children } ) { useBlockSelectionClearer(), useBlockDropZone(), useInBetweenInserter(), + setElement, ] ) } className={ classnames( 'block-editor-block-list__layout is-root-container', @@ -64,6 +77,8 @@ function Root( { className, children } ) { } ) } > + { element && + createPortal( , element.ownerDocument.head ) } { children } ); diff --git a/packages/block-editor/src/hooks/layout.js b/packages/block-editor/src/hooks/layout.js index 14a540cf3284f..659575b491b25 100644 --- a/packages/block-editor/src/hooks/layout.js +++ b/packages/block-editor/src/hooks/layout.js @@ -28,6 +28,7 @@ import { store as blockEditorStore } from '../store'; import { InspectorControls } from '../components'; import useSetting from '../components/use-setting'; import { LayoutStyle } from '../components/block-list/layout'; +import { BlockHeadFill } from '../components/block-list'; function LayoutPanel( { setAttributes, attributes } ) { const { layout = {} } = attributes; @@ -209,10 +210,12 @@ export const withLayoutStyles = createHigherOrderComponent( return ( <> - + + + );