// Reference: https://github.com/WordPress/gutenberg/tree/v16.4.0/packages/edit-site/src/components/layout/index.js /* eslint-disable @woocommerce/dependency-group */ /* eslint-disable @typescript-eslint/ban-ts-comment */ /** * External dependencies */ import classnames from 'classnames'; import { useReducedMotion, useResizeObserver, useViewportMatch, } from '@wordpress/compose'; import { __ } from '@wordpress/i18n'; import { useState } from '@wordpress/element'; import { // @ts-ignore No types for this exist yet. __unstableMotion as motion, } from '@wordpress/components'; import { privateApis as blockEditorPrivateApis, // @ts-ignore No types for this exist yet. } from '@wordpress/block-editor'; // @ts-ignore No types for this exist yet. import useInitEditedEntityFromURL from '@wordpress/edit-site/build-module/components/sync-state-with-url/use-init-edited-entity-from-url'; // @ts-ignore No types for this exist yet. import { useIsSiteEditorLoading } from '@wordpress/edit-site/build-module/components/layout/hooks'; // @ts-ignore No types for this exist yet. import ErrorBoundary from '@wordpress/edit-site/build-module/components/error-boundary'; // @ts-ignore No types for this exist yet. import { unlock } from '@wordpress/edit-site/build-module/lock-unlock'; // @ts-ignore No types for this exist yet. import { NavigableRegion } from '@wordpress/interface'; /** * Internal dependencies */ import { Editor } from './editor'; import Sidebar from './sidebar'; import { SiteHub } from './site-hub'; import { LogoBlockContext } from './logo-block-context'; import ResizableFrame from './resizable-frame'; import { OnboardingTour, useOnboardingTour } from './onboarding-tour'; const { useGlobalStyle } = unlock( blockEditorPrivateApis ); const ANIMATION_DURATION = 0.5; export const Layout = () => { const [ logoBlock, setLogoBlock ] = useState< { clientId: string | null; isLoading: boolean; } >( { clientId: null, isLoading: true, } ); // This ensures the edited entity id and type are initialized properly. useInitEditedEntityFromURL(); const { shouldTourBeShown, ...onboardingTourProps } = useOnboardingTour(); const isMobileViewport = useViewportMatch( 'medium', '<' ); const disableMotion = useReducedMotion(); const [ canvasResizer, canvasSize ] = useResizeObserver(); const isEditorLoading = useIsSiteEditorLoading(); const [ isResizableFrameOversized, setIsResizableFrameOversized ] = useState( false ); const [ backgroundColor ] = useGlobalStyle( 'color.background' ); const [ gradientValue ] = useGlobalStyle( 'color.gradient' ); return (
{ ! isMobileViewport && (
{ canvasResizer } { !! canvasSize.width && ( ) }
) }
{ shouldTourBeShown && ( ) }
); };