diff --git a/packages/edit-site/src/components/template-switcher/index.js b/packages/edit-site/src/components/template-switcher/index.js index d9e59a243bec90..780ddf1982bda8 100644 --- a/packages/edit-site/src/components/template-switcher/index.js +++ b/packages/edit-site/src/components/template-switcher/index.js @@ -17,7 +17,8 @@ import { plus } from '@wordpress/icons'; * Internal dependencies */ import AddTemplate from '../add-template'; -import TemplatePreview from './preview'; +import TemplatePreview from './template-preview'; +import ThemePreview from './theme-preview'; function TemplateLabel( { template } ) { return ( @@ -42,12 +43,22 @@ export default function TemplateSwitcher( { onAddTemplateId, } ) { const [ hoveredTemplate, setHoveredTemplate ] = useState(); + const [ themePreviewVisible, setThemePreviewVisible ] = useState( false ); + const onHoverTemplate = ( id ) => { setHoveredTemplate( { id, type: 'template' } ); }; const onHoverTemplatePart = ( id ) => { setHoveredTemplate( { id, type: 'template-part' } ); }; + + const onMouseEnterTheme = () => { + setThemePreviewVisible( () => true ); + }; + const onMouseLeaveTheme = () => { + setThemePreviewVisible( () => false ); + }; + const { currentTheme, templates, templateParts } = useSelect( ( select ) => { const { getCurrentTheme, getEntityRecord } = select( 'core' ); @@ -136,11 +147,19 @@ export default function TemplateSwitcher( { /> - { currentTheme.name } + + { currentTheme.name } + { !! hoveredTemplate?.id && ( ) } + { themePreviewVisible && ( + + ) }
) } diff --git a/packages/edit-site/src/components/template-switcher/style.scss b/packages/edit-site/src/components/template-switcher/style.scss index 592bb25c84bf4f..d1d8680e30a0ed 100644 --- a/packages/edit-site/src/components/template-switcher/style.scss +++ b/packages/edit-site/src/components/template-switcher/style.scss @@ -30,7 +30,8 @@ margin-bottom: -$grid-unit-15; } -.edit-site-template-switcher__preview { +.edit-site-template-switcher__template-preview, +.edit-site-template-switcher__theme-preview { display: none; border: $border-width solid $light-gray-secondary; width: 300px; @@ -46,3 +47,14 @@ display: block; } } + +.edit-site-template-switcher__theme-preview-name { + font-weight: 500; + font-size: $big-font-size; +} + +.edit-site-template-switcher__theme-preview-screenshot { + margin-bottom: $grid-unit-15; + margin-top: $grid-unit-15; + max-width: 100%; +} diff --git a/packages/edit-site/src/components/template-switcher/preview.js b/packages/edit-site/src/components/template-switcher/template-preview.js similarity index 91% rename from packages/edit-site/src/components/template-switcher/preview.js rename to packages/edit-site/src/components/template-switcher/template-preview.js index b1761f7b502b81..c53b4ec1c0795f 100644 --- a/packages/edit-site/src/components/template-switcher/preview.js +++ b/packages/edit-site/src/components/template-switcher/template-preview.js @@ -22,7 +22,7 @@ function TemplatePreview( { item } ) { [ template ] ); return ( -
+
{ !! blocks && ( ) } diff --git a/packages/edit-site/src/components/template-switcher/theme-preview.js b/packages/edit-site/src/components/template-switcher/theme-preview.js new file mode 100644 index 00000000000000..acb9ba3a40f466 --- /dev/null +++ b/packages/edit-site/src/components/template-switcher/theme-preview.js @@ -0,0 +1,41 @@ +/** + * External dependencies + */ +import { truncate } from 'lodash'; + +/** + * WordPress dependencies + */ +import { __, sprintf } from '@wordpress/i18n'; + +function ThemePreview( { + theme: { author_name: authorName, description, name, screenshot, version }, +} ) { + return ( +
+ + { name } + { ' ' } + + { 'v' + version } + +
+ { // translators: %s: theme author name. + sprintf( __( 'By %s' ), [ authorName ] ) } +
+ { +
+ { truncate( description, { + length: 120, + separator: /\. +/, + } ) } +
+
+ ); +} + +export default ThemePreview;