--- i/src/Element/ComponentElementBuilder.php
+++ w/src/Element/ComponentElementBuilder.php
@@ -8,6 +8,8 @@
 use Drupal\Core\Config\ConfigFactoryInterface;
 use Drupal\Core\Extension\ModuleHandlerInterface;
 use Drupal\Core\Plugin\Component;
+use Drupal\Core\Plugin\Context\ContextInterface;
+use Drupal\Core\Plugin\PreviewAwarePluginInterface;
 use Drupal\Core\Render\Component\Exception\ComponentNotFoundException;
 use Drupal\Core\Render\Element;
 use Drupal\Core\Security\TrustedCallbackInterface;
@@ -26,6 +28,17 @@
 class ComponentElementBuilder implements TrustedCallbackInterface {
 
   /**
+   * Source context marking a render as a preview rather than a real display.
+   *
+   * Carried in the source contexts because that is the one thing every source
+   * already hands to the sources it builds itself, so a slot source added
+   * later propagates this without knowing it exists.
+   *
+   * @see \Drupal\Core\Plugin\PreviewAwarePluginInterface
+   */
+  public const IN_PREVIEW_CONTEXT = 'ui_patterns:in_preview';
+
+  /**
    * One of the error level constants defined in logging.
    */
   protected string $errorLevel;
@@ -228,6 +241,9 @@
       if (!$source) {
         return $build;
       }
+      if ($source instanceof PreviewAwarePluginInterface) {
+        $source->setInPreview($this->isInPreview($contexts));
+      }
       /** @var \Drupal\ui_patterns\PropTypeInterface $prop_type */
       $prop_type = $source->getPropDefinition()['ui_patterns']['type_definition'];
       // Alter the build array before getting the value.
@@ -252,6 +268,21 @@
   }
 
   /**
+   * Whether the contexts mark this render as a preview.
+   *
+   * @param array $contexts
+   *   Source contexts.
+   *
+   * @return bool
+   *   TRUE when a builder or another preview is rendering this.
+   */
+  protected function isInPreview(array $contexts): bool {
+    $context = $contexts[self::IN_PREVIEW_CONTEXT] ?? NULL;
+
+    return $context instanceof ContextInterface && (bool) $context->getContextValue();
+  }
+
+  /**
    * Add slots to the renderable.
    */
   protected function buildSlots(array $build, Component $component, array $configuration, array $contexts): array {
