Skip to content

Comments

Viewport: Prioritize story viewport globals and avoid user-global pollution#33849

Open
ia319 wants to merge 1 commit intostorybookjs:nextfrom
ia319:bug/33831-viewport-story-global-precedence
Open

Viewport: Prioritize story viewport globals and avoid user-global pollution#33849
ia319 wants to merge 1 commit intostorybookjs:nextfrom
ia319:bug/33831-viewport-story-global-precedence

Conversation

@ia319
Copy link
Member

@ia319 ia319 commented Feb 15, 2026

Closes #33831

What I did

  • prioritize story viewport globals when story viewport globals exist
  • remove story-to-user viewport global synchronization
  • reset invalid viewport options only when no story viewport global exists

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

  1. Copy the preview and stories code from the issue reproduction link into the sandbox.

  • After running, switch between stories and observe the viewport.
  • Use the button to reset the viewport or select another device, then switch between stories and observe.
  • Pass viewport-related query parameters, then switch between stories and observe.

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 publish.yml --field pr=<PR_NUMBER>

Summary by CodeRabbit

  • Bug Fixes
    • Improved viewport value resolution to intelligently prioritize story-level configurations, ensuring more consistent and predictable behavior when managing viewport settings and rotation states.

…ort pollution

- prioritize story viewport globals when story viewport globals exist
- remove story-to-user viewport global synchronization
- reset invalid viewport options only when no story viewport global exists
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Feb 15, 2026

📝 Walkthrough

Walkthrough

This pull request restructures viewport global value resolution in the useViewport hook by implementing a two-tier precedence system that prioritizes story-level globals over user and global values. The reset behavior transitions from automatic to conditional, only resetting to defaults when no story-level viewport exists. Invalid option handling is updated to preserve story-level viewports rather than forcing value updates.

Changes

Cohort / File(s) Summary
Viewport global resolution logic
code/core/src/viewport/useViewport.ts
Reworked global value resolution to introduce story-level viewport priority via storyHasViewport, primaryGlobal, and secondaryGlobal. Replaced automatic URL-defined viewport reset with conditional logic. Changed invalid-option handling to only reset to defaults when no story-level viewport exists. Added defaultIsRotated flag (false) to normalizeGlobal calls across all sources.
Dependency updates
package.json
Updated dependencies and/or scripts with 15 additions and 17 deletions.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

✨ Finishing touches
  • 📝 Generate docstrings

No actionable comments were generated in the recent review. 🎉


Comment @coderabbitai help to get the list of available commands and usage tips.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

Status: Empathy Queue (prioritized)

Development

Successfully merging this pull request may close these issues.

[Bug]: Reset viewport global after changing story

2 participants