diff --git a/package-lock.json b/package-lock.json
index ba90e7cd5fb084..ef3827101d91cb 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -67171,7 +67171,8 @@
"@wordpress/element": "file:../../packages/element",
"@wordpress/i18n": "file:../../packages/i18n",
"@wordpress/icons": "file:../../packages/icons",
- "@wordpress/ui": "file:../../packages/ui"
+ "@wordpress/ui": "file:../../packages/ui",
+ "@wordpress/url": "file:../../packages/url"
}
},
"widgets/welcome": {
diff --git a/tools/eslint/suppressions.json b/tools/eslint/suppressions.json
index 96f3cc8cba40c3..f6fa4c012f879e 100644
--- a/tools/eslint/suppressions.json
+++ b/tools/eslint/suppressions.json
@@ -1875,5 +1875,10 @@
"@wordpress/use-recommended-components": {
"count": 1
}
+ },
+ "widgets/site-preview/render.tsx": {
+ "@wordpress/use-recommended-components": {
+ "count": 1
+ }
}
}
diff --git a/widgets/site-preview/package.json b/widgets/site-preview/package.json
index c71524c62091e0..90338322d763fb 100644
--- a/widgets/site-preview/package.json
+++ b/widgets/site-preview/package.json
@@ -9,6 +9,7 @@
"@wordpress/element": "file:../../packages/element",
"@wordpress/i18n": "file:../../packages/i18n",
"@wordpress/icons": "file:../../packages/icons",
- "@wordpress/ui": "file:../../packages/ui"
+ "@wordpress/ui": "file:../../packages/ui",
+ "@wordpress/url": "file:../../packages/url"
}
}
diff --git a/widgets/site-preview/render.tsx b/widgets/site-preview/render.tsx
index e65b56d3b69f37..f7692d5444a7d4 100644
--- a/widgets/site-preview/render.tsx
+++ b/widgets/site-preview/render.tsx
@@ -5,26 +5,65 @@ import { useEffect, useState } from '@wordpress/element';
import { useSelect } from '@wordpress/data';
import { store as coreStore } from '@wordpress/core-data';
import { __ } from '@wordpress/i18n';
+import { wordpress } from '@wordpress/icons';
+import { addQueryArgs } from '@wordpress/url';
import { Spinner } from '@wordpress/components';
-
-// Dashboard is still experimental.
-// eslint-disable-next-line @wordpress/use-recommended-components
-import { Button, Stack } from '@wordpress/ui';
+import { Button, Icon, Stack, Text } from '@wordpress/ui';
import styles from './style.module.css';
+function PreviewUrlBar( {
+ siteUrl,
+ siteIconUrl,
+}: {
+ siteUrl: string;
+ siteIconUrl?: string;
+} ) {
+ return (
+
+
+ { siteIconUrl ? (
+
+ ) : (
+
+ ) }
+ { siteUrl }
+
+
+ );
+}
+
export default function SitePreview() {
const [ isIframeLoading, setIsIframeLoading ] = useState( true );
const [ isVisitLoading, setIsVisitLoading ] = useState( false );
const [ isEditLoading, setIsEditLoading ] = useState( false );
- const siteUrl = useSelect(
- ( select ) =>
- select( coreStore ).getEntityRecord< { url: string } >(
- 'root',
- 'site',
- undefined
- )?.url,
- []
- );
+ const { siteUrl, siteIconUrl } = useSelect( ( select ) => {
+ const site = select( coreStore ).getEntityRecord< { url: string } >(
+ 'root',
+ 'site',
+ undefined
+ );
+ const base = select( coreStore ).getEntityRecord< {
+ site_icon_url?: string;
+ } >( 'root', '__unstableBase', undefined );
+
+ return {
+ siteUrl: site?.url,
+ siteIconUrl: base?.site_icon_url,
+ };
+ }, [] );
const isBlockTheme = useSelect(
( select ) =>
@@ -40,11 +79,14 @@ export default function SitePreview() {
return null;
}
- const src = `${ siteUrl }/?hide_banners=true&preview_overlay=true&preview=true`;
+ const src = addQueryArgs( siteUrl, {
+ wp_site_preview: 1,
+ } );
const editUrl = isBlockTheme ? 'site-editor.php' : 'customize.php';
return (
-
+
+
{ isIframeLoading && (
-
-
-
-
+
+
+
+ ) }
-
+
);
}
diff --git a/widgets/site-preview/style.module.css b/widgets/site-preview/style.module.css
index 8d7795d57cd4e6..80f4f436797e0e 100644
--- a/widgets/site-preview/style.module.css
+++ b/widgets/site-preview/style.module.css
@@ -13,9 +13,48 @@
overflow: hidden;
}
+.urlBar {
+ flex-shrink: 0;
+ padding: var(--wpds-dimension-padding-xs) var(--wpds-dimension-padding-sm);
+ background: var(--wpds-color-bg-surface-neutral-weak);
+ border-block-end: var(--wpds-border-width-xs) solid var(--wpds-color-stroke-surface-neutral-weak);
+}
+
+.urlField {
+ min-width: 0;
+ padding: var(--wpds-dimension-padding-xs) var(--wpds-dimension-padding-sm);
+ border: var(--wpds-border-width-xs) solid var(--wpds-color-stroke-surface-neutral-weak);
+ border-radius: var(--wpds-border-radius-lg);
+ background: var(--wpds-color-bg-surface-neutral);
+}
+
+.urlFavicon {
+ flex-shrink: 0;
+ width: var(--wpds-typography-font-size-xs);
+ height: var(--wpds-typography-font-size-xs);
+ object-fit: contain;
+}
+
+.urlIcon {
+ flex-shrink: 0;
+ color: var(--wpds-color-fg-content-neutral-weak);
+}
+
+.urlText {
+ flex: 1;
+ min-width: 0;
+ overflow: hidden;
+ font-size: var(--wpds-typography-font-size-xs);
+ line-height: var(--wpds-typography-line-height-xs);
+ color: var(--wpds-color-fg-content-neutral);
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
.previewWrap {
position: relative;
- height: 100%;
+ flex: 1;
+ min-height: 0;
}
.loading {
@@ -30,7 +69,7 @@
inset-inline-start: 50%;
width: 250%;
min-height: 375%;
- transform: translate(-50%, -13px) scale(0.4);
+ transform: translate(-50%, 0) scale(0.4);
transform-origin: center top;
}
@@ -42,28 +81,13 @@
backdrop-filter: blur(1px);
}
-.overlayButton {
- box-shadow: var(--wpds-elevation-xs);
-}
-
.previewWrap:hover .overlay,
.previewWrap:focus-within .overlay {
opacity: 1;
}
-@media (prefers-reduced-motion: no-preference) {
- .previewWrap:hover .overlay,
- .previewWrap:focus-within .overlay {
- animation: fadeIn var(--wpds-motion-duration-md) var(--wpds-motion-easing-subtle) both;
- }
-}
-
-@keyframes fadeIn {
- from {
- opacity: 0;
- }
-
- to {
- opacity: 1;
+@media not (prefers-reduced-motion) {
+ .overlay {
+ transition: opacity var(--wpds-motion-duration-lg) var(--wpds-motion-easing-expressive);
}
}