storybookjs / storybook

Storybook is the industry standard workshop for building, documenting, and testing UI components in isolation
https://storybook.js.org
MIT License
84.68k stars 9.32k forks source link

Viewport-addon: Add InitialViewportKeys type to viewport addon #29182

Closed hyeongrok7874 closed 1 month ago

hyeongrok7874 commented 1 month ago

(No Issue)

What I did

In this PR, the InitialViewportKeyUnion type was added to the viewport addon.

I use the INITIAL_VIEWPORTS of the viewport addon, and I need a union type made up of the keys of the object.

For example, by specifying the type of defaultViewport with the above type, we were able to improve convenience and stability in the viewport declaration of the story.

Currently, when trying to extract the INITIAL_VIEWPORTS type, the INITIAL_VIEWPORTS type is Record<string, Viewport>, so the type is inferred as a string as shown below, so we want to export a union type composed of accurate keys in the addon stage.

screenshot

With this operation, the type of InitialViewportKeyUnion exported from the viewport addon is inferred as follows.

screenshot

My application example

An example of using the type in my project is below.

declare module '@storybook/react' {
  export interface Parameters {
    viewport?: {
      defaultViewport?: InitialViewportKeyUnion | typeof DEFAULT_VIEWPORT;
    };
  }
}

Then, when assigning defaultViewport, auto-completion and type checking are possible as shown below.

screenshot

Of course, this type may just be what I need.

Also, I think there may be inconveniences when adding devices to INITIAL_VIEWPORTS in the future.

Nevertheless, I am requesting a merge because I think adding this type will provide convenience to many developers, including me.

Additionally, if there is any way I can further improve my work, please let me know.

Checklist for Contributors

Testing

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

Manual testing

In the viewport addon, need to check whether the InitialViewportKeyUnion type is properly exported as a union type based on the INITIAL_VIEWPORTS key.

Documentation

Checklist for Maintainers

🦋 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>_

name before after diff z %
createSize 0 B 0 B 0 B - -
generateSize 77.5 MB 77.5 MB 100 B 3.74 0%
initSize 162 MB 162 MB 6.42 kB 0.43 0%
diffSize 85 MB 85 MB 6.32 kB -0.41 0%
buildSize 7.57 MB 7.57 MB 0 B -0.42 0%
buildSbAddonsSize 1.66 MB 1.66 MB 0 B -0.42 0%
buildSbCommonSize 195 kB 195 kB 0 B - 0%
buildSbManagerSize 2.34 MB 2.34 MB 0 B - 0%
buildSbPreviewSize 352 kB 352 kB 0 B - 0%
buildStaticSize 0 B 0 B 0 B - -
buildPrebuildSize 4.55 MB 4.55 MB 0 B -0.42 0%
buildPreviewSize 3.02 MB 3.02 MB 0 B -0.42 0%
testBuildSize 0 B 0 B 0 B - -
testBuildSbAddonsSize 0 B 0 B 0 B - -
testBuildSbCommonSize 0 B 0 B 0 B - -
testBuildSbManagerSize 0 B 0 B 0 B - -
testBuildSbPreviewSize 0 B 0 B 0 B - -
testBuildStaticSize 0 B 0 B 0 B - -
testBuildPrebuildSize 0 B 0 B 0 B - -
testBuildPreviewSize 0 B 0 B 0 B - -
name before after diff z %
createTime 17.5s 7.1s -10s -366ms -1.07 -144.7%
generateTime 22.8s 22.1s -753ms 1.3 -3.4%
initTime 14.6s 18.3s 3.7s 1.72 🔺20.4%
buildTime 9.9s 11s 1.1s -0.16 10.3%
testBuildTime 0ms 0ms 0ms - -
devPreviewResponsive 6.6s 6.8s 267ms -0.32 3.9%
devManagerResponsive 4.4s 4.4s 68ms -0.32 1.5%
devManagerHeaderVisible 782ms 883ms 101ms 1.12 11.4%
devManagerIndexVisible 817ms 928ms 111ms 1.09 12%
devStoryVisibleUncached 1.3s 1.4s 78ms 0 5.5%
devStoryVisible 816ms 926ms 110ms 1.08 11.9%
devAutodocsVisible 632ms 774ms 142ms 0.29 18.3%
devMDXVisible 666ms 727ms 61ms 0.02 8.4%
buildManagerHeaderVisible 716ms 773ms 57ms -0.18 7.4%
buildManagerIndexVisible 722ms 846ms 124ms 0.3 14.7%
buildStoryVisible 782ms 847ms 65ms 0 7.7%
buildAutodocsVisible 664ms 622ms -42ms -1.15 -6.8%
buildMDXVisible 652ms 718ms 66ms 0.18 9.2%

Greptile Summary

This pull request adds a new type InitialViewportKeyUnion to the viewport addon in Storybook, enhancing TypeScript support for viewport keys.

hyeongrok7874 commented 1 month ago

Thank you for considering my opinion positively!

nx-cloud[bot] commented 1 month ago

☁️ Nx Cloud Report

CI is running/has finished running commands for commit b7cfbe5f60886855847f21cfbb9f109c42bfe941. As they complete they will appear below. Click to see the status, the terminal output, and the build insights.

📂 See all runs for this CI Pipeline Execution


✅ Successfully ran 1 target - [`nx run-many -t build --parallel=3`](https://cloud.nx.app/runs/ODqKhYktzl?utm_source=pull-request&utm_medium=comment)

Sent with 💌 from NxCloud.