Skip to content

Conversation

ghengeveld
Copy link
Member

@ghengeveld ghengeveld commented Jun 10, 2025

Closes #31626

What I did

This restores the original window.navigator.clipboard instance to restore clipboard functionality after calling userEvent.setup(), which replaced it with a stub.

Users who want to test clipboard functionality should call userEvent.setup() themselves.

I've opened an issue on user-event to address this problem at the source.

Checklist for Contributors

Testing

The changes in this PR are covered in the following automated tests:

  • stories
  • unit tests
  • integration tests
  • end-to-end tests

Manual testing

This section is mandatory for all contributions. If you believe no manual test is necessary, please state so explicitly. Thanks!

Documentation

  • Add or update documentation reflecting your changes
  • If you are deprecating/removing a feature, make sure to update
    MIGRATION.MD

Checklist for Maintainers

  • When this PR is ready for testing, make sure to add ci:normal, ci:merged or ci:daily GH label to it to run a specific set of sandboxes. The particular set of sandboxes can be found in code/lib/cli-storybook/src/sandbox-templates.ts

  • Make sure this PR contains one of the labels below:

    Available labels
    • bug: Internal changes that fixes incorrect behavior.
    • maintenance: User-facing maintenance tasks.
    • dependencies: Upgrading (sometimes downgrading) dependencies.
    • build: Internal-facing build tooling & test updates. Will not show up in release changelog.
    • cleanup: Minor cleanup style change. Will not show up in release changelog.
    • documentation: Documentation only changes. Will not show up in release changelog.
    • feature request: Introducing a new feature.
    • BREAKING CHANGE: Changes that break compatibility in some way with current major version.
    • other: Changes that don't fit in the above categories.

🦋 Canary release

This PR does not have a canary release associated. You can request a canary release of this pull request by mentioning the @storybookjs/core team here.

core team members can create a canary release here or locally with gh workflow run --repo storybookjs/storybook canary-release-pr.yml --field pr=<PR_NUMBER>

Greptile Summary

Fixes clipboard functionality by restoring the original window.navigator.clipboard after userEvent.setup() is invoked in test environment.

  • Captures and preserves original clipboard object before userEvent.setup() modifies it
  • Uses Object.defineProperty to restore original clipboard functionality after tests
  • Prevents clipboard functionality from being broken by userEvent's stub implementation
  • Maintains existing focus method patching behavior
  • Delegates clipboard testing responsibility to users who specifically need it by having them call userEvent.setup() themselves

Copy link
Contributor

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

1 file reviewed, no comments
Edit PR Review Bot Settings | Greptile

Copy link

nx-cloud bot commented Jun 10, 2025

View your CI Pipeline Execution ↗ for commit 7bcaf86.

Command Status Duration Result
nx run-many -t build --parallel=3 ✅ Succeeded 1m 13s View ↗

☁️ Nx Cloud last updated this comment at 2025-06-11 20:34:58 UTC

@storybook-pr-benchmarking
Copy link

Package Benchmarks

Commit: 7bcaf86, ran on 11 June 2025 at 20:40:35 UTC

The following packages have significant changes to their size or dependencies:

@storybook/addon-vitest

Before After Difference
Dependency count 6 6 0
Self size 553 KB 630 KB 🚨 +77 KB 🚨
Dependency size 1.49 MB 1.49 MB 0 B
Bundle Size Analyzer Link Link

storybook

Before After Difference
Dependency count 49 49 0
Self size 31.89 MB 31.22 MB 🎉 -667 KB 🎉
Dependency size 17.41 MB 17.41 MB 0 B
Bundle Size Analyzer Link Link

@storybook/angular

Before After Difference
Dependency count 199 208 🚨 +9 🚨
Self size 189 KB 606 KB 🚨 +418 KB 🚨
Dependency size 29.70 MB 29.78 MB 🚨 +84 KB 🚨
Bundle Size Analyzer Link Link

@storybook/ember

Before After Difference
Dependency count 205 208 🚨 +3 🚨
Self size 28 KB 28 KB 🚨 +227 B 🚨
Dependency size 28.93 MB 28.95 MB 🚨 +21 KB 🚨
Bundle Size Analyzer Link Link

@storybook/nextjs

Before After Difference
Dependency count 531 534 🚨 +3 🚨
Self size 217 KB 217 KB 🎉 -10 B 🎉
Dependency size 58.92 MB 58.94 MB 🚨 +22 KB 🚨
Bundle Size Analyzer Link Link

@storybook/nextjs-vite

Before After Difference
Dependency count 128 127 🎉 -1 🎉
Self size 2.39 MB 2.39 MB 🚨 +74 B 🚨
Dependency size 22.14 MB 22.13 MB 🎉 -11 KB 🎉
Bundle Size Analyzer Link Link

@storybook/react-native-web-vite

Before After Difference
Dependency count 162 161 🎉 -1 🎉
Self size 35 KB 35 KB 0 B
Dependency size 23.30 MB 23.29 MB 🎉 -11 KB 🎉
Bundle Size Analyzer Link Link

@storybook/react-vite

Before After Difference
Dependency count 121 120 🎉 -1 🎉
Self size 32 KB 32 KB 🎉 -97 B 🎉
Dependency size 20.24 MB 20.23 MB 🎉 -11 KB 🎉
Bundle Size Analyzer Link Link

@storybook/react-webpack5

Before After Difference
Dependency count 286 284 🎉 -2 🎉
Self size 25 KB 25 KB 0 B
Dependency size 43.68 MB 43.66 MB 🎉 -15 KB 🎉
Bundle Size Analyzer Link Link

sb

Before After Difference
Dependency count 50 50 0
Self size 1 KB 1 KB 0 B
Dependency size 49.29 MB 48.63 MB 🎉 -667 KB 🎉
Bundle Size Analyzer Link Link

@storybook/cli

Before After Difference
Dependency count 216 324 🚨 +108 🚨
Self size 582 KB 244 KB 🎉 -338 KB 🎉
Dependency size 94.67 MB 98.82 MB 🚨 +4.15 MB 🚨
Bundle Size Analyzer Link Link

@storybook/codemod

Before After Difference
Dependency count 185 267 🚨 +82 🚨
Self size 31 KB 31 KB 🚨 +152 B 🚨
Dependency size 78.74 MB 82.11 MB 🚨 +3.37 MB 🚨
Bundle Size Analyzer Link Link

create-storybook

Before After Difference
Dependency count 1 1 0
Self size 12.53 MB 12.13 MB 🎉 -402 KB 🎉
Dependency size 98 KB 98 KB 0 B
Bundle Size Analyzer Link Link

@storybook/preset-react-webpack

Before After Difference
Dependency count 177 175 🎉 -2 🎉
Self size 24 KB 24 KB 🎉 -171 B 🎉
Dependency size 30.51 MB 30.50 MB 🎉 -15 KB 🎉
Bundle Size Analyzer Link Link

@ghengeveld ghengeveld merged commit 4d2a896 into next Jun 11, 2025
57 checks passed
@ghengeveld ghengeveld deleted the restore-original-clipboard branch June 11, 2025 21:12
@ghengeveld ghengeveld added the patch:yes Bugfix & documentation PR that need to be picked to main branch label Jun 11, 2025
JReinhold pushed a commit that referenced this pull request Jun 12, 2025
Core: Restore original clipboard after invoking `userEvent.setup()`
(cherry picked from commit 4d2a896)
@github-actions github-actions bot added the patch:done Patch/release PRs already cherry-picked to main/release branch label Jun 12, 2025
@ghengeveld ghengeveld added needs qa Indicates that this needs manual QA during the upcoming minor/major release and removed needs qa Indicates that this needs manual QA during the upcoming minor/major release labels Jul 25, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug ci:normal patch:done Patch/release PRs already cherry-picked to main/release branch patch:yes Bugfix & documentation PR that need to be picked to main branch
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[Bug]: Unable to paste from clipboard in v9
2 participants