diff --git a/.circleci/config.yml b/.circleci/config.yml index d9846f300ccb..ec3b5b730914 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -8,7 +8,7 @@ parameters: default: "skipped" executors: - sb_node_16_classic: + sb_node_18_classic: parameters: class: description: The Resource class @@ -21,7 +21,7 @@ executors: environment: NODE_OPTIONS: --max_old_space_size=6144 resource_class: <> - sb_node_16_browsers: + sb_node_18_browsers: parameters: class: description: The Resource class @@ -99,7 +99,7 @@ jobs: pretty-docs: executor: class: medium - name: sb_node_16_classic + name: sb_node_18_classic steps: - git-shallow-clone/checkout_advanced: clone_options: "--depth 1 --verbose" @@ -125,7 +125,7 @@ jobs: build: executor: class: xlarge - name: sb_node_16_classic + name: sb_node_18_classic steps: - git-shallow-clone/checkout_advanced: clone_options: "--depth 1 --verbose" @@ -169,7 +169,7 @@ jobs: lint: executor: class: large - name: sb_node_16_classic + name: sb_node_18_classic steps: - git-shallow-clone/checkout_advanced: clone_options: "--depth 1 --verbose" @@ -185,7 +185,7 @@ jobs: check: executor: class: xlarge - name: sb_node_16_classic + name: sb_node_18_classic steps: - git-shallow-clone/checkout_advanced: clone_options: "--depth 1 --verbose" @@ -202,7 +202,7 @@ jobs: - report-workflow-on-failure - cancel-workflow-on-failure script-checks: - executor: sb_node_16_browsers + executor: sb_node_18_browsers steps: - git-shallow-clone/checkout_advanced: clone_options: "--depth 1 --verbose" @@ -230,7 +230,7 @@ jobs: unit-tests: executor: class: xlarge - name: sb_node_16_browsers + name: sb_node_18_browsers steps: - git-shallow-clone/checkout_advanced: clone_options: "--depth 1 --verbose" @@ -252,7 +252,7 @@ jobs: coverage: executor: class: small - name: sb_node_16_browsers + name: sb_node_18_browsers steps: - git-shallow-clone/checkout_advanced: clone_options: "--depth 1 --verbose" @@ -263,7 +263,7 @@ jobs: chromatic-internal-storybooks: executor: class: medium+ - name: sb_node_16_browsers + name: sb_node_18_browsers environment: NODE_OPTIONS: --max_old_space_size=6144 steps: @@ -287,13 +287,16 @@ jobs: type: integer executor: class: medium - name: sb_node_16_browsers + name: sb_node_18_browsers parallelism: << parameters.parallelism >> steps: - git-shallow-clone/checkout_advanced: clone_options: "--depth 1 --verbose" - attach_workspace: at: . + - run: + name: Enable Corepack + command: sudo corepack enable yarn - run: name: Creating Sandboxes command: yarn task --task sandbox --template $(yarn get-template --cadence << pipeline.parameters.workflow >> --task sandbox) --no-link --start-from=never --junit @@ -311,7 +314,7 @@ jobs: type: integer executor: class: medium - name: sb_node_16_browsers + name: sb_node_18_browsers parallelism: << parameters.parallelism >> steps: - git-shallow-clone/checkout_advanced: @@ -331,7 +334,7 @@ jobs: type: integer executor: class: large - name: sb_node_16_browsers + name: sb_node_18_browsers parallelism: << parameters.parallelism >> steps: - git-shallow-clone/checkout_advanced: @@ -410,7 +413,7 @@ jobs: type: integer executor: class: medium - name: sb_node_16_browsers + name: sb_node_18_browsers parallelism: << parameters.parallelism >> steps: - checkout @@ -493,7 +496,7 @@ jobs: test-empty-init: executor: class: medium - name: sb_node_16_browsers + name: sb_node_18_browsers parameters: packageManager: type: string @@ -598,6 +601,8 @@ jobs: name: Install dependencies command: yarn install --no-immutable working_directory: test-storybooks/portable-stories-kitchen-sink/<< parameters.directory >> + environment: + YARN_ENABLE_IMMUTABLE_INSTALLS: false - run: name: Run Jest tests command: yarn jest @@ -768,22 +773,22 @@ workflows: requires: - build - create-sandboxes: - parallelism: 35 + parallelism: 37 requires: - build # - smoke-test-sandboxes: # disabled for now # requires: # - create-sandboxes - build-sandboxes: - parallelism: 35 + parallelism: 37 requires: - create-sandboxes - chromatic-sandboxes: - parallelism: 32 + parallelism: 34 requires: - build-sandboxes - e2e-production: - parallelism: 30 + parallelism: 32 requires: - build-sandboxes - e2e-dev: @@ -791,7 +796,7 @@ workflows: requires: - create-sandboxes - test-runner-production: - parallelism: 30 + parallelism: 32 requires: - build-sandboxes - test-portable-stories: diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 90f09cc9f0d3..a31684580dca 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -1,7 +1,7 @@ name: Bug report 🐞 description: >- Something is broken and you have a reliable reproduction? Let us know here. - For questions, please use "Question" below. + For questions, please post in GitHub Discussion. title: '[Bug]: ' labels: - needs triage @@ -14,16 +14,26 @@ body: description: A clear and concise description of what the bug is validations: required: true - - type: textarea - id: reproduce + - type: input + id: repro-link attributes: - label: To Reproduce + label: Reproduction link description: >- - Due to the high volume of reports we receive, we can only prioritize bug reports that include a clear reproduction of the problem. Please use [storybook.new](https://storybook.new) to create one, and consult our [documentation](https://storybook.js.org/docs/react/contribute/how-to-reproduce) for guidance. Thank you for your understanding! - placeholder: >- - Please provide a link to your reproduction here. If creating a reproduction really isn't feasible, let us know and be sure to include as much detail as you can to help us understand the issue. + Please provide a link to a reproduction of the issue. We accept reproductions hosted on GitHub, CodeSandbox, and StackBlitz. Due to the high volume of reports, we prioritize those with clear reproductions. The easiest way to create a reproduction is to use [storybook.new](https://storybook.new). For detailed guidance, please refer to our [documentation](https://storybook.js.org/docs/react/contribute/how-to-reproduce). + + Important: If the provided URL is invalid (e.g., 404 error or private repository), we may close the issue. Thank you for your understanding! validations: required: true + - type: textarea + id: repro-steps + attributes: + label: Reproduction steps + description: >- + Include the steps to reproduce the issue using the provided link. Additionally, provide a clear and concise description of what you expected to happen. + placeholder: >- + 1. Go to above link + 2. Click on '....' + 3. ... - type: textarea id: system attributes: diff --git a/.github/comments/good-first-issue.md b/.github/comments/good-first-issue.md new file mode 100644 index 000000000000..ff2aa8c0873f --- /dev/null +++ b/.github/comments/good-first-issue.md @@ -0,0 +1,12 @@ +The issue was marked with the `good first issue` label by a maintainer. + +This means that it is a good candidate for someone interested in contributing to the project, but does not know where to start. + +To get started, read the [Contributing Guide](https://storybook.js.org/docs/contribute/how-to-contribute). When you are ready, open a PR and link back to this issue in the form of adding `Fixes #1234` to the PR description, where `1234` is the issue number. This will automatically close the issue when the PR gets merged, making it easier for us to keep track of what has been fixed. + +Please remember to add tests to confirm your code changes will fix the issue and we do not regress in the future. + +If you have any questions, feel free to ask below or hop onto the [Storybook Discord](https://discord.gg/storybook) and ask in the #contributing channel. We're looking forward to your contribution! ✨ + +> [!NOTE] +> There is no need to ask to be assigned or for permission (e.g. "can I work on this?"). Please, go ahead if there is no linked PR. :slightly_smiling_face: diff --git a/.github/comments/invalid-link.md b/.github/comments/invalid-link.md new file mode 100644 index 000000000000..51b084dfe35d --- /dev/null +++ b/.github/comments/invalid-link.md @@ -0,0 +1,50 @@ +We could not detect a valid reproduction link. **Make sure to follow the bug report template carefully.** + +### Why was this issue closed? + +To be able to investigate, we need access to a reproduction to identify what triggered the issue. We need a link to a **public** GitHub repository, Stackblitz or CodeSandbox. The easiest way to create a reproduction is with [storybook.new](https://storybook.new). + +The bug template that you filled out has a section called "To reproduce", which is where you should provide the link to the reproduction. + +- If you did not provide a link or the link you provided is not valid, we will close the issue. +- If you provide a link to a private repository, we will close the issue. +- If you provide a link to a repository but not in the correct section, we will close the issue. + +### What should I do? + +Depending on the reason the issue was closed, you can do the following: + +- If you did not provide a link, please open a new issue with a link to a reproduction. +- If you provided a link to a private repository, please open a new issue with a link to a public repository. +- If you provided a link to a repository but not in the correct section, please open a new issue with a link to a reproduction in the correct section. + +**In general, assume that we should not go through a lengthy onboarding process at your company code only to be able to verify an issue.** + +### My repository is private and cannot be public + +In most cases, a private repo will not be a sufficient **minimal reproduction**, as this codebase might contain a lot of unrelated parts that would make our investigation take longer. Please do **not** make it public. Instead, create a new repository using the templates above, adding the relevant code to reproduce the issue. Common things to look out for: + +- Remove any code that is not related to the issue. (pages, API routes, irrelevant components, etc.) +- Remove any dependencies that are not related to the issue. +- Remove any third-party service that would require us to sign up for an account to reproduce the issue. +- Remove any environment variables that are not related to the issue. +- Remove private packages that we do not have access to. +- If the issue is not related to a monorepo specifically, try to reproduce the issue without a complex monorepo setup + +### I did not open this issue, but it is relevant to me, what can I do to help? + +Anyone experiencing the same issue is welcome to provide a minimal reproduction following the above steps by opening a new issue. + +### I think my reproduction is good enough, why aren't you looking into it quickly? + +We look into every Storybook issue and constantly monitor open issues for new comments. + +However, sometimes we might miss one or two due to the popularity/high traffic of the repository. We apologize, and kindly ask you to refrain from tagging core maintainers, as that will usually not result in increased priority. + +Upvoting issues to show your interest will help us prioritize and address them as quickly as possible. That said, every issue is important to us, and if an issue gets closed by accident, we encourage you to open a new one linking to the old issue and we will look into it. + +### Useful Resources + +- [Create a Storybook reproduction](https://storybook.js.org/docs/react/contribute/how-to-reproduce) +- [How to create a Minimal, Complete, and Verifiable example](https://stackoverflow.com/help/mcve) +- [Contributing to Storybook](https://storybook.js.org/docs/contribute/how-to-contribute) diff --git a/.github/workflows/canary-release-pr.yml b/.github/workflows/canary-release-pr.yml index 557a0331fe2d..1b97a35368da 100644 --- a/.github/workflows/canary-release-pr.yml +++ b/.github/workflows/canary-release-pr.yml @@ -59,6 +59,11 @@ jobs: uses: actions/setup-node@v4 with: node-version-file: ".nvmrc" + + - uses: oven-sh/setup-bun@v1 + with: + bun-version: 1.1.1 + - name: Cache dependencies uses: actions/cache@v4 with: diff --git a/.github/workflows/prepare-non-patch-release.yml b/.github/workflows/prepare-non-patch-release.yml index 3cbf8f8b1fc9..c495114d461e 100644 --- a/.github/workflows/prepare-non-patch-release.yml +++ b/.github/workflows/prepare-non-patch-release.yml @@ -113,10 +113,6 @@ jobs: run: | yarn release:version --deferred --release-type ${{ inputs.release-type || 'prerelease' }} ${{ inputs.pre-id && format('{0} {1}', '--pre-id', inputs.pre-id) || '' }} --verbose - - name: Check release vs prerelease - id: is-prerelease - run: yarn release:is-prerelease ${{ steps.bump-version.outputs.next-version }} --verbose - - name: Write changelog env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -133,19 +129,6 @@ jobs: git commit -m "Write changelog for ${{ steps.bump-version.outputs.next-version }} [skip ci]" || true git push --force origin version-non-patch-from-${{ steps.bump-version.outputs.current-version }} - - name: Resolve merge-conflicts with base branch - if: steps.is-prerelease.outputs.prerelease == 'false' - working-directory: . - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - git config pull.rebase false - git pull --no-commit --no-ff origin latest-release || true - git checkout --ours . - git add . - git commit --no-verify -m "Merge latest-release into version-non-patch-from-${{ steps.bump-version.outputs.current-version }} with conflicts resolved to ours [skip ci]" - git push origin version-non-patch-from-${{ steps.bump-version.outputs.current-version }} - - name: Generate PR description id: description env: @@ -162,14 +145,13 @@ jobs: gh pr edit \ --repo "${{github.repository }}" \ --title "Release: $CAPITALIZED_RELEASE_TYPE ${{ inputs.pre-id && format('{0} ', inputs.pre-id) }}${{ steps.bump-version.outputs.next-version }}" \ - --base ${{ steps.is-prerelease.outputs.prerelease == 'true' && 'next-release' || 'latest-release' }} \ --body "${{ steps.description.outputs.description }}" else gh pr create \ --repo "${{github.repository }}"\ --title "Release: $CAPITALIZED_RELEASE_TYPE ${{ inputs.pre-id && format('{0} ', inputs.pre-id) }}${{ steps.bump-version.outputs.next-version }}" \ --label "release" \ - --base ${{ steps.is-prerelease.outputs.prerelease == 'true' && 'next-release' || 'latest-release' }} \ + --base next-release \ --head version-non-patch-from-${{ steps.bump-version.outputs.current-version }} \ --body "${{ steps.description.outputs.description }}" fi diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index cc88ce6182fd..61566b49d5bb 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -154,17 +154,13 @@ jobs: git merge ${{ github.ref_name }} git push origin ${{ steps.target.outputs.target }} - - name: Ensure `next` is a minor version ahead of `main` - if: steps.target.outputs.target == 'main' + - name: Force push from 'next' to 'latest-release' and 'main' on minor/major releases + if: github.ref_name == 'next-release' && steps.is-prerelease.outputs.prerelease == 'false' run: | git checkout next git pull - - yarn release:ensure-next-ahead --main-version "${{ steps.version.outputs.current-version }}" - - git add .. - git diff --staged --quiet || git commit -m "Bump next to be one minor ahead of main [skip ci]" - git push origin next + git push --force origin latest-release + git push --force origin main - name: Sync CHANGELOG.md from `main` to `next` if: steps.target.outputs.target == 'main' diff --git a/.github/workflows/triage.yml b/.github/workflows/triage.yml new file mode 100644 index 000000000000..adf6ad3b9bfc --- /dev/null +++ b/.github/workflows/triage.yml @@ -0,0 +1,30 @@ +name: Triage issues + +on: + issues: + types: [opened, labeled] + issue_comment: + types: [created] + +env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + +permissions: + issues: write + +jobs: + triage: + name: Nissuer + runs-on: ubuntu-latest + steps: + - uses: balazsorban44/nissuer@1.10.0 + with: + label-comments: | + { + "good first issue": ".github/comments/good-first-issue.md" + } + reproduction-comment: ".github/comments/invalid-link.md" + reproduction-hosts: "github.com,codesandbox.io,stackblitz.com" + reproduction-link-section: "### Reproduction link(.*)### Reproduction steps" + reproduction-invalid-label: "needs reproduction" + reproduction-issue-labels: "bug,needs triage" diff --git a/.github/workflows/trigger-circle-ci-workflow.yml b/.github/workflows/trigger-circle-ci-workflow.yml index c8c8a4c0af9c..66bcc0f1a7ce 100644 --- a/.github/workflows/trigger-circle-ci-workflow.yml +++ b/.github/workflows/trigger-circle-ci-workflow.yml @@ -4,7 +4,7 @@ on: # Use pull_request_target, as we don't need to check out the actual code of the fork in this script. # And this is the only way to trigger the Circle CI API on forks as well. pull_request_target: - types: [opened, synchronize, labeled, unlabeled, reopened, converted_to_draft, ready_for_review] + types: [opened, synchronize, labeled, reopened] push: branches: - next @@ -39,7 +39,7 @@ jobs: trigger-normal-tests: runs-on: ubuntu-latest needs: get-branch - if: github.event_name == 'pull_request_target' && contains(github.event.pull_request.labels.*.name, 'ci:normal') + if: github.event_name == 'pull_request_target' && ((github.event.action == 'labeled' && github.event.label.name == 'ci:normal') || (github.event.action != 'labeled' && contains(github.event.pull_request.labels.*.name, 'ci:normal'))) steps: - name: Trigger Normal tests run: > @@ -58,7 +58,7 @@ jobs: trigger-docs-tests: runs-on: ubuntu-latest needs: get-branch - if: github.event_name == 'pull_request_target' && contains(github.event.pull_request.labels.*.name, 'ci:docs') + if: github.event_name == 'pull_request_target' && ((github.event.action == 'labeled' && github.event.label.name == 'ci:docs') || (github.event.action != 'labeled' && contains(github.event.pull_request.labels.*.name, 'ci:docs'))) steps: - name: Trigger docs tests run: > @@ -77,7 +77,7 @@ jobs: trigger-merged-tests: runs-on: ubuntu-latest needs: get-branch - if: github.event_name == 'push' || contains(github.event.pull_request.labels.*.name, 'ci:merged') + if: github.event_name == 'push' || (github.event.action == 'labeled' && github.event.label.name == 'ci:merged') || (github.event.action != 'labeled' && contains(github.event.pull_request.labels.*.name, 'ci:merged')) steps: - name: Trigger merged tests run: > @@ -96,7 +96,7 @@ jobs: trigger-daily-tests: runs-on: ubuntu-latest needs: get-branch - if: github.event_name == 'pull_request_target' && contains(github.event.pull_request.labels.*.name, 'ci:daily') + if: github.event_name == 'pull_request_target' && ((github.event.action == 'labeled' && github.event.label.name == 'ci:daily') || (github.event.action != 'labeled' && contains(github.event.pull_request.labels.*.name, 'ci:daily'))) steps: - name: Trigger the daily tests run: > diff --git a/CHANGELOG.md b/CHANGELOG.md index d93c3b996486..a38ddb377030 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,171 @@ +## 8.1.8 + +- Automigrations: Make VTA "learn more" link clickable - [#28020](https://github.com/storybookjs/storybook/pull/28020), thanks @deiga! +- CLI: Fix `init --skip-install` - [#28226](https://github.com/storybookjs/storybook/pull/28226), thanks @shilman! + +## 8.1.7 + +- Addon-actions: Only log spies with names - [#28091](https://github.com/storybookjs/storybook/pull/28091), thanks @kasperpeulen! +- CLI: Fix typo in React Docgen migration - [#27536](https://github.com/storybookjs/storybook/pull/27536), thanks @jonniebigodes! +- Portable Stories: Add tags to composed story - [#27708](https://github.com/storybookjs/storybook/pull/27708), thanks @yannbf! +- Test: Display toHaveBeenCalledWith expected / received values on failure - [#28088](https://github.com/storybookjs/storybook/pull/28088), thanks @kasperpeulen! + +## 8.1.6 + +- CLI: Only log the UpgradeStorybookToSameVersionError but continue the upgrade as normal - [#27217](https://github.com/storybookjs/storybook/pull/27217), thanks @kasperpeulen! +- Core: Replace ip function with a small helper function to address security concerns - [#27529](https://github.com/storybookjs/storybook/pull/27529), thanks @tony19! +- Tags: Fix unsafe project-level tags lookup - [#27511](https://github.com/storybookjs/storybook/pull/27511), thanks @shilman! +- Vite: Fix stats-plugin to normalize file names with posix paths - [#27218](https://github.com/storybookjs/storybook/pull/27218), thanks @AlexAtVista! + +## 8.1.5 + +- CSF-Tools: Fix export specifier bug - [#27418](https://github.com/storybookjs/storybook/pull/27418), thanks @valentinpalkovic! +- Dependency: Upgrade tempy - [#27366](https://github.com/storybookjs/storybook/pull/27366), thanks @mnigh! +- Tags: Refine composition behavior - [#27379](https://github.com/storybookjs/storybook/pull/27379), thanks @shilman! +- Theming: Fix self-referencing type - [#27155](https://github.com/storybookjs/storybook/pull/27155), thanks @SimenB! + +## 8.1.4 + +- Angular: Revert style adjustments - [#27361](https://github.com/storybookjs/storybook/pull/27361), thanks @valentinpalkovic! +- Svelte: Support latest prerelease - [#27378](https://github.com/storybookjs/storybook/pull/27378), thanks @valentinpalkovic! +- Tags: Fix composition with older storybooks - [#27358](https://github.com/storybookjs/storybook/pull/27358), thanks @shilman! +- Vite: Fix HMR issue for Storybook preview files - [#27256](https://github.com/storybookjs/storybook/pull/27256), thanks @valentinpalkovic! + +## 8.1.3 + +- Angular: Support v18 - [#27237](https://github.com/storybookjs/storybook/pull/27237), thanks @valentinpalkovic! +- Telemetry: Add test packages - [#27226](https://github.com/storybookjs/storybook/pull/27226), thanks @shilman! + +## 8.1.2 + +- Angular: Fix filtering of workspace config styles - [#27108](https://github.com/storybookjs/storybook/pull/27108), thanks @valentinpalkovic! +- Next.js: Avoid interfering with the svgr loader - [#27198](https://github.com/storybookjs/storybook/pull/27198), thanks @seanparmelee! + +## 8.1.1 + +- Docgen: Only add react-docgen info when a component is defined in the file - [#26967](https://github.com/storybookjs/storybook/pull/26967), thanks @glenjamin! +- Docs: Fix MDX Stories block tag-filtering behavior - [#27144](https://github.com/storybookjs/storybook/pull/27144), thanks @shilman! +- Docs: Fix Subtitle block when no `of` prop passed - [#27147](https://github.com/storybookjs/storybook/pull/27147), thanks @JReinhold! +- Next.js: Add typing for NextImage to main framework options type - [#27105](https://github.com/storybookjs/storybook/pull/27105), thanks @valentinpalkovic! +- Next.js: Avoid conflicts with the raw loader - [#27093](https://github.com/storybookjs/storybook/pull/27093), thanks @seanparmelee! +- Types: Fix typing for main.framework/builder fields - [#27088](https://github.com/storybookjs/storybook/pull/27088), thanks @valentinpalkovic! + +## 8.1.0 + +Storybook 8.1 is here with a tone of new features and bug fixes: + +- 🏷️ Static tag-based filtering +- 🦺 Type-safe, standards-based module mocking +- 🐣 New `beforeEach` test hook +- 🧳 Portable Stories API for Playwright Component Testing +- 🐕‍🦺 Support the new signal-based input & output functions in Angular +- 2️⃣ Two new ways to create stories: generating them from story controls or from your components directly! + +
+List of all updates + + - Addon-actions: Fix falsy args printing as object - 22163 - [#26917](https://github.com/storybookjs/storybook/pull/26917), thanks @Fatcat560! + - Addon-docs: Fix MDX compilation with `@vitejs/plugin-react-swc` and plugins - [#26837](https://github.com/storybookjs/storybook/pull/26837), thanks @JReinhold! + - Addon-docs: Fix `providerImportSource` extension - [#26868](https://github.com/storybookjs/storybook/pull/26868), thanks @bashmish! + - Addon-docs: Fix `react-dom/server` imports breaking stories and docs - [#26557](https://github.com/storybookjs/storybook/pull/26557), thanks @JReinhold! + - Addon-docs: Support Stencil based display names in source snippets - [#26592](https://github.com/storybookjs/storybook/pull/26592), thanks @yannbf! + - Addon-docs: Fix `[Object object]` displayName in some JSX components - [#26566](https://github.com/storybookjs/storybook/pull/26566), thanks @yannbf! + - Angular: Add type support for Angular\'s input signals - [#26413](https://github.com/storybookjs/storybook/pull/26413), thanks @valentinpalkovic! + - Angular: Add type support for Angular\'s output signals - [#26546](https://github.com/storybookjs/storybook/pull/26546), thanks @valentinpalkovic! + - API: Add API access to sidebar renderLabel - [#27099](https://github.com/storybookjs/storybook/pull/27099), thanks @shilman! + - Args: Add possibility to mark controls as read-only - [#26577](https://github.com/storybookjs/storybook/pull/26577), thanks @valentinpalkovic! + - Automigrations: Fix name of VTA addon - [#26816](https://github.com/storybookjs/storybook/pull/26816), thanks @valentinpalkovic! + - Automigrations: Add migration note about new react-docgen default - [#26620](https://github.com/storybookjs/storybook/pull/26620), thanks @valentinpalkovic! + - Automigrations: Fix missing support for mts vite config - [#26441](https://github.com/storybookjs/storybook/pull/26441), thanks @drik98! + - Automigrations: Improve react-docgen automigration prompt - [#27106](https://github.com/storybookjs/storybook/pull/27106), thanks @valentinpalkovic! + - Blocks: Add `of` prop to `Subtitle` - [#22552](https://github.com/storybookjs/storybook/pull/22552), thanks @joaonunomota! + - Blocks: Add `of` prop to `Title` - [#23728](https://github.com/storybookjs/storybook/pull/23728), thanks @Sidnioulz! + - CLI: Add --config-dir flag to add command - [#26771](https://github.com/storybookjs/storybook/pull/26771), thanks @eric-blue! + - CLI: Add --config-dir flag to migrate command - [#26721](https://github.com/storybookjs/storybook/pull/26721), thanks @yannbf! + - CLI: Add main.js `docs.autodocs` automigration - [#27089](https://github.com/storybookjs/storybook/pull/27089), thanks @shilman! + - CLI: Add Visual Tests addon install auto-migration when upgrading to 8.0.x - [#26766](https://github.com/storybookjs/storybook/pull/26766), thanks @ndelangen! + - CLI: Automigrate improve upgrade storybook related packages - [#26497](https://github.com/storybookjs/storybook/pull/26497), thanks @ndelangen! + - CLI: Automigrations copy edits - [#26342](https://github.com/storybookjs/storybook/pull/26342), thanks @joevaugh4n! + - CLI: Fix eslint configuration for string `extends` - [#27097](https://github.com/storybookjs/storybook/pull/27097), thanks @shilman! + - CLI: Improve Yarn berry error parsing - [#26616](https://github.com/storybookjs/storybook/pull/26616), thanks @yannbf! + - CLI: Improve `vite-config-file.ts` - [#26375](https://github.com/storybookjs/storybook/pull/26375), thanks @joevaugh4n! + - CLI: Instruct the correct auto-migration command - [#26515](https://github.com/storybookjs/storybook/pull/26515), thanks @ndelangen! + - CLI: Introduce package manager fallback for initializing Storybook in an empty directory with yarn1 - [#26500](https://github.com/storybookjs/storybook/pull/26500), thanks @valentinpalkovic! + - CLI: Throw an error when running upgrade command in incorrect cwd - [#26585](https://github.com/storybookjs/storybook/pull/26585), thanks @yannbf! + - Codemods: Escape filename given as argument - [#26430](https://github.com/storybookjs/storybook/pull/26430), thanks @YukiKitagata! + - Controls: Add Channels API to search for files in the project root - [#26726](https://github.com/storybookjs/storybook/pull/26726), thanks @valentinpalkovic! + - Controls: Added server channel to create a new story - [#26769](https://github.com/storybookjs/storybook/pull/26769), thanks @valentinpalkovic! + - Controls: Add UI to create new story files - [#26875](https://github.com/storybookjs/storybook/pull/26875), thanks @valentinpalkovic! + - Controls: Fix crashing when docgen extraction partially fails - [#26862](https://github.com/storybookjs/storybook/pull/26862), thanks @yannbf! + - Controls: Fix disable condition in ArgControl component - [#26567](https://github.com/storybookjs/storybook/pull/26567), thanks @valentinpalkovic! + - Controls: Fix number controls do not reset - [#26372](https://github.com/storybookjs/storybook/pull/26372), thanks @jiyiru! + - Core: Add `duration` and `onClick` support to Notification API and improve Notification UI - [#26696](https://github.com/storybookjs/storybook/pull/26696), thanks @ghengeveld! + - Core: Drop unneeded `UPDATE_STORY_ARGS` which was for SSv6 - [#25993](https://github.com/storybookjs/storybook/pull/25993), thanks @tmeasday! + - Core: Ensure that simultaneous onStoriesChanged don\'t clobber each other - [#26882](https://github.com/storybookjs/storybook/pull/26882), thanks @tmeasday! + - Core: Fix filters not being applied in WebKit - [#26949](https://github.com/storybookjs/storybook/pull/26949), thanks @JReinhold! + - Core: Fix preloading too early - [#26442](https://github.com/storybookjs/storybook/pull/26442), thanks @ndelangen! + - Core: Implement file formatter - [#26809](https://github.com/storybookjs/storybook/pull/26809), thanks @valentinpalkovic! + - Core: Optimize clearNotification - [#26415](https://github.com/storybookjs/storybook/pull/26415), thanks @ndelangen! + - Core: Save from controls - [#26827](https://github.com/storybookjs/storybook/pull/26827), thanks @ndelangen! + - CSF: Allow default export without title or component attributes - [#26516](https://github.com/storybookjs/storybook/pull/26516), thanks @kasperpeulen! + - CSF: Fix typings for control and other properties of argTypes - [#26824](https://github.com/storybookjs/storybook/pull/26824), thanks @kasperpeulen! + - CSF: Make sure loaders/decorators can be used as array - [#26514](https://github.com/storybookjs/storybook/pull/26514), thanks @kasperpeulen! + - Dependencies: Upgrade @storybook/csf to 0.1.5 - [#26958](https://github.com/storybookjs/storybook/pull/26958), thanks @Cherry! + - Dependencies: Upgrade `@joshwooding/vite-plugin-react-docgen-typescript` to `0.3.1` - [#26673](https://github.com/storybookjs/storybook/pull/26673), thanks @joshwooding! + - Dependencies: Upgrade `ejs` to `3.1.10` - [#27054](https://github.com/storybookjs/storybook/pull/27054), thanks @RiuSalvi! + - Dependencies: Bump es-module-lexer - [#26737](https://github.com/storybookjs/storybook/pull/26737), thanks @valentinpalkovic! + - Dependencies: Update globby dependency - [#26733](https://github.com/storybookjs/storybook/pull/26733), thanks @valentinpalkovic! + - Dependencies: Update postcss-loader in Next.js framework - [#26707](https://github.com/storybookjs/storybook/pull/26707), thanks @valentinpalkovic! + - Doc Tools: Signature Type Error Handling - [#26774](https://github.com/storybookjs/storybook/pull/26774), thanks @ethriel3695! + - Indexer: Escape special characters in storyImport regex - [#22545](https://github.com/storybookjs/storybook/pull/22545), thanks @VojGin! + - Maintenance: Fix performance regressions - [#26411](https://github.com/storybookjs/storybook/pull/26411), thanks @kasperpeulen! + - MDX: Do not transform `http://` links - [#26488](https://github.com/storybookjs/storybook/pull/26488), thanks @JReinhold! + - Next.js: Fix Compatibility with + + +## 8.0.10 + +- MDX: Don't transform `http://` links - [#26488](https://github.com/storybookjs/storybook/pull/26488), thanks @JReinhold! +- React: Support v19 in `react-dom-shim` - [#26898](https://github.com/storybookjs/storybook/pull/26898), thanks @Tobbe! +- Vite: Merge assetsInclude property with Storybook default values - [#26860](https://github.com/storybookjs/storybook/pull/26860), thanks @yuemori! + ## 8.0.9 - Addon-docs: Fix MDX compilation when using `@vitejs/plugin-react-swc` with plugins - [#26837](https://github.com/storybookjs/storybook/pull/26837), thanks @JReinhold! diff --git a/CHANGELOG.prerelease.md b/CHANGELOG.prerelease.md index 5d6baeac2136..394483f35848 100644 --- a/CHANGELOG.prerelease.md +++ b/CHANGELOG.prerelease.md @@ -1,3 +1,132 @@ +## 8.2.0-alpha.8 + +- Automigrations: Make VTA "learn more" link clickable - [#28020](https://github.com/storybookjs/storybook/pull/28020), thanks @deiga! +- CLI: Fix `init --skip-install` - [#28226](https://github.com/storybookjs/storybook/pull/28226), thanks @shilman! +- CSF: Rename `preview.js` `globals` to `initialGlobals` - [#27517](https://github.com/storybookjs/storybook/pull/27517), thanks @shilman! + +## 8.2.0-alpha.7 + +- Angular: Allow outputPath object syntax - [#28144](https://github.com/storybookjs/storybook/pull/28144), thanks @valentinpalkovic! +- Angular: Introduce preserveSymlink builder option - [#28145](https://github.com/storybookjs/storybook/pull/28145), thanks @valentinpalkovic! +- CLI: Fix typo in React Docgen migration - [#27536](https://github.com/storybookjs/storybook/pull/27536), thanks @jonniebigodes! +- CSF: Automatically extract componentPath - [#24396](https://github.com/storybookjs/storybook/pull/24396), thanks @shilman! +- Core: Remove more `.stories.mdx` handling - [#25973](https://github.com/storybookjs/storybook/pull/25973), thanks @JReinhold! +- Docs-tools: Replace `doctrine` with `jsdoc-type-pratt-parser` - [#26305](https://github.com/storybookjs/storybook/pull/26305), thanks @43081j! +- Test: Display toHaveBeenCalledWith expected / received values on failure - [#28088](https://github.com/storybookjs/storybook/pull/28088), thanks @kasperpeulen! + +## 8.2.0-alpha.6 + +- Addon-actions: Only log spies with names - [#28091](https://github.com/storybookjs/storybook/pull/28091), thanks @kasperpeulen! +- Build: Change require/import order, so that import has higher prio if both are specified - [#27730](https://github.com/storybookjs/storybook/pull/27730), thanks @kasperpeulen! +- CLI: Only log the UpgradeStorybookToSameVersionError but continue the upgrade as normal - [#27217](https://github.com/storybookjs/storybook/pull/27217), thanks @kasperpeulen! +- Core: Replace ip function with a small helper function to address security concerns - [#27529](https://github.com/storybookjs/storybook/pull/27529), thanks @tony19! +- Portable Stories: Add tags to composed story - [#27708](https://github.com/storybookjs/storybook/pull/27708), thanks @yannbf! +- Test: Upgrade deps of @storybook/test - [#27862](https://github.com/storybookjs/storybook/pull/27862), thanks @kasperpeulen! +- Vite: Fix stats-plugin to normalize file names with posix paths - [#27218](https://github.com/storybookjs/storybook/pull/27218), thanks @AlexAtVista! + +## 8.2.0-alpha.5 + +- Angular: Fix wrong detection of standalone components - [#27353](https://github.com/storybookjs/storybook/pull/27353), thanks @dario-baumberger! +- Dependency: Bump Express.js - [#26680](https://github.com/storybookjs/storybook/pull/26680), thanks @valentinpalkovic! +- Tags: Fix unsafe project-level tags lookup - [#27511](https://github.com/storybookjs/storybook/pull/27511), thanks @shilman! + +## 8.2.0-alpha.4 + +- CSF-Tools: Fix export specifier bug - [#27418](https://github.com/storybookjs/storybook/pull/27418), thanks @valentinpalkovic! +- Dependency: Upgrade tempy - [#27366](https://github.com/storybookjs/storybook/pull/27366), thanks @mnigh! +- Tags: Refine composition behavior - [#27379](https://github.com/storybookjs/storybook/pull/27379), thanks @shilman! +- Theming: Fix self-referencing type - [#27155](https://github.com/storybookjs/storybook/pull/27155), thanks @SimenB! +- Vue3: Enable new hydration mismatch compile time flag - [#27192](https://github.com/storybookjs/storybook/pull/27192), thanks @Cherry! + +## 8.2.0-alpha.3 + +- Addon-A11y: Fix property default assignment - [#27224](https://github.com/storybookjs/storybook/pull/27224), thanks @valentinpalkovic! +- Angular: Revert style adjustments - [#27361](https://github.com/storybookjs/storybook/pull/27361), thanks @valentinpalkovic! +- Angular: Support v18 - [#27237](https://github.com/storybookjs/storybook/pull/27237), thanks @valentinpalkovic! +- Controls: Fix date picker control validation and assignment - [#26695](https://github.com/storybookjs/storybook/pull/26695), thanks @leeovictor! +- Next.js: Avoid interfering with the svgr loader - [#27198](https://github.com/storybookjs/storybook/pull/27198), thanks @seanparmelee! +- Svelte: Support latest prerelease - [#27378](https://github.com/storybookjs/storybook/pull/27378), thanks @valentinpalkovic! +- Tags: Fix composition with older storybooks - [#27358](https://github.com/storybookjs/storybook/pull/27358), thanks @shilman! +- Telemetry: Add test packages - [#27226](https://github.com/storybookjs/storybook/pull/27226), thanks @shilman! +- Types: Fix type implementation for `CompatibleString` - [#27180](https://github.com/storybookjs/storybook/pull/27180), thanks @sni-J! +- Vite: Fix HMR issue for Storybook preview files - [#27256](https://github.com/storybookjs/storybook/pull/27256), thanks @valentinpalkovic! +- Vite: Fix asset warning by externalizing sb-common-assets font - [#27110](https://github.com/storybookjs/storybook/pull/27110), thanks @valentinpalkovic! +- Webpack5/Vite: Fix sourcemaps - [#27171](https://github.com/storybookjs/storybook/pull/27171), thanks @valentinpalkovic! + +## 8.2.0-alpha.2 + +- Angular: Cleanup types - [#27189](https://github.com/storybookjs/storybook/pull/27189), thanks @valentinpalkovic! +- Angular: Fix filtering of workspace config styles - [#27108](https://github.com/storybookjs/storybook/pull/27108), thanks @valentinpalkovic! +- Controls: Fix grouped Radio controls to have the same name - [#23374](https://github.com/storybookjs/storybook/pull/23374), thanks @srapilly! +- Controls: Throttling makes Color control lagging - [#22615](https://github.com/storybookjs/storybook/pull/22615), thanks @gitstart! +- Docs: Fix `Typeset` Doc block `fontSizes` type - [#26475](https://github.com/storybookjs/storybook/pull/26475), thanks @noranda! + +## 8.2.0-alpha.1 + +- CLI: Add optional `--dev` and `--no-dev` options to `storybook init` CLI - [#26918](https://github.com/storybookjs/storybook/pull/26918), thanks @fastfrwrd! +- CLI: Include `@storybook/addon-svelte-csf` when initializing new projects - [#27070](https://github.com/storybookjs/storybook/pull/27070), thanks @benmccann! +- Dependency: Upgrade `webpack-virtual-modules` to 0.6.0 - [#27102](https://github.com/storybookjs/storybook/pull/27102), thanks @fyodorovandrei! +- Dependency: bump `markdown-to-jsx` to v7.4.5 - [#26694](https://github.com/storybookjs/storybook/pull/26694), thanks @xyy94813! +- Docgen: Only add react-docgen info when a component is defined in the file - [#26967](https://github.com/storybookjs/storybook/pull/26967), thanks @glenjamin! +- Docs: Fix MDX Stories block tag-filtering behavior - [#27144](https://github.com/storybookjs/storybook/pull/27144), thanks @shilman! +- Docs: Fix Subtitle block when no `of` prop passed - [#27147](https://github.com/storybookjs/storybook/pull/27147), thanks @JReinhold! +- Next.js: Add typing for NextImage to main framework options type - [#27105](https://github.com/storybookjs/storybook/pull/27105), thanks @valentinpalkovic! +- Next.js: Avoid conflicts with the raw loader - [#27093](https://github.com/storybookjs/storybook/pull/27093), thanks @seanparmelee! +- Types: Fix typing for main.framework/builder fields - [#27088](https://github.com/storybookjs/storybook/pull/27088), thanks @valentinpalkovic! + +## 8.2.0-alpha.0 + + +## 8.1.0-beta.1 + +- API: Add API access to sidebar renderLabel - [#27099](https://github.com/storybookjs/storybook/pull/27099), thanks @shilman! +- CLI: Add main.js `docs.autodocs` automigration - [#27089](https://github.com/storybookjs/storybook/pull/27089), thanks @shilman! +- CLI: Fix eslint configuration for string `extends` - [#27097](https://github.com/storybookjs/storybook/pull/27097), thanks @shilman! +- Indexer: Escape special characters in storyImport regex - [#22545](https://github.com/storybookjs/storybook/pull/22545), thanks @VojGin! +- Next.js: Fix Compatibility with --start-from=publish ``` +### Making code changes when working on Angular-specific code + +If you are working on Angular-specific code, you will need to append `--prod` to the above mentioned commands to ensure that the Angular compiler is able to pick up the changes appropriately and doesn't fail. This will build all the packages in production mode. + +```sh +yarn task --prod +``` + +```bash +cd code +yarn build --prod --watch angular core-server api addon-docs +``` + ## Contributing to Storybook For further advice on how to contribute, please refer to our [NEW contributing guide on the Storybook website](https://storybook.js.org/docs/contribute). diff --git a/CONTRIBUTING/prerelease-workflow-inputs.png b/CONTRIBUTING/prerelease-workflow-inputs.png index 55bb79e2b09c..b12f1225f593 100644 Binary files a/CONTRIBUTING/prerelease-workflow-inputs.png and b/CONTRIBUTING/prerelease-workflow-inputs.png differ diff --git a/MIGRATION.md b/MIGRATION.md index 8b431bd37e90..0290335c2201 100644 --- a/MIGRATION.md +++ b/MIGRATION.md @@ -1,10 +1,14 @@

Migration

+- [From version 8.1.x to 8.2.x](#from-version-81x-to-82x) + - [Preview.js globals renamed to initialGlobals](#previewjs-globals-renamed-to-initialglobals) - [From version 8.0.x to 8.1.x](#from-version-80x-to-81x) - - [Subtitle block and `parameters.componentSubtitle`](#subtitle-block-and-parameterscomponentsubtitle) - - [Title block](#title-block) - [Portable stories](#portable-stories) - [@storybook/nextjs requires specific path aliases to be setup](#storybooknextjs-requires-specific-path-aliases-to-be-setup) + - [main.js `docs.autodocs` is deprecated](#mainjs-docsautodocs-is-deprecated) + - [`docs` and `story` system tags removed](#docs-and-story-system-tags-removed) + - [Subtitle block and `parameters.componentSubtitle`](#subtitle-block-and-parameterscomponentsubtitle) + - [Title block `of` prop](#title-block-of-prop) - [From version 7.x to 8.0.0](#from-version-7x-to-800) - [Portable stories](#portable-stories-1) - [Project annotations are now merged instead of overwritten in composeStory](#project-annotations-are-now-merged-instead-of-overwritten-in-composestory) @@ -15,6 +19,7 @@ - [Manager addons are now rendered with React 18](#manager-addons-are-now-rendered-with-react-18) - [Removal of `storiesOf`-API](#removal-of-storiesof-api) - [Removed deprecated shim packages](#removed-deprecated-shim-packages) + - [Deprecated `@storybook/testing-library` package](#deprecated-storybooktesting-library-package) - [Framework-specific Vite plugins have to be explicitly added](#framework-specific-vite-plugins-have-to-be-explicitly-added) - [For React:](#for-react) - [For Vue:](#for-vue) @@ -95,17 +100,17 @@ - [Tab addons cannot manually route, Tool addons can filter their visibility via tabId](#tab-addons-cannot-manually-route-tool-addons-can-filter-their-visibility-via-tabid) - [Removed `config` preset](#removed-config-preset-1) - [From version 7.5.0 to 7.6.0](#from-version-750-to-760) - - [CommonJS with Vite is deprecated](#commonjs-with-vite-is-deprecated) - - [Using implicit actions during rendering is deprecated](#using-implicit-actions-during-rendering-is-deprecated) - - [typescript.skipBabel deprecated](#typescriptskipbabel-deprecated) - - [Primary doc block accepts of prop](#primary-doc-block-accepts-of-prop) - - [Addons no longer need a peer dependency on React](#addons-no-longer-need-a-peer-dependency-on-react) + - [CommonJS with Vite is deprecated](#commonjs-with-vite-is-deprecated) + - [Using implicit actions during rendering is deprecated](#using-implicit-actions-during-rendering-is-deprecated) + - [typescript.skipBabel deprecated](#typescriptskipbabel-deprecated) + - [Primary doc block accepts of prop](#primary-doc-block-accepts-of-prop) + - [Addons no longer need a peer dependency on React](#addons-no-longer-need-a-peer-dependency-on-react) - [From version 7.4.0 to 7.5.0](#from-version-740-to-750) - - [`storyStoreV6` and `storiesOf` is deprecated](#storystorev6-and-storiesof-is-deprecated) - - [`storyIndexers` is replaced with `experimental_indexers`](#storyindexers-is-replaced-with-experimental_indexers) + - [`storyStoreV6` and `storiesOf` is deprecated](#storystorev6-and-storiesof-is-deprecated) + - [`storyIndexers` is replaced with `experimental_indexers`](#storyindexers-is-replaced-with-experimental_indexers) - [From version 7.0.0 to 7.2.0](#from-version-700-to-720) - - [Addon API is more type-strict](#addon-api-is-more-type-strict) - - [Addon-controls hideNoControlsWarning parameter is deprecated](#addon-controls-hidenocontrolswarning-parameter-is-deprecated) + - [Addon API is more type-strict](#addon-api-is-more-type-strict) + - [Addon-controls hideNoControlsWarning parameter is deprecated](#addon-controls-hidenocontrolswarning-parameter-is-deprecated) - [From version 6.5.x to 7.0.0](#from-version-65x-to-700) - [7.0 breaking changes](#70-breaking-changes) - [Dropped support for Node 15 and below](#dropped-support-for-node-15-and-below) @@ -131,7 +136,7 @@ - [Deploying build artifacts](#deploying-build-artifacts) - [Dropped support for file URLs](#dropped-support-for-file-urls) - [Serving with nginx](#serving-with-nginx) - - [Ignore story files from node\_modules](#ignore-story-files-from-node_modules) + - [Ignore story files from node_modules](#ignore-story-files-from-node_modules) - [7.0 Core changes](#70-core-changes) - [7.0 feature flags removed](#70-feature-flags-removed) - [Story context is prepared before for supporting fine grained updates](#story-context-is-prepared-before-for-supporting-fine-grained-updates) @@ -145,7 +150,7 @@ - [Addon-interactions: Interactions debugger is now default](#addon-interactions-interactions-debugger-is-now-default) - [7.0 Vite changes](#70-vite-changes) - [Vite builder uses Vite config automatically](#vite-builder-uses-vite-config-automatically) - - [Vite cache moved to node\_modules/.cache/.vite-storybook](#vite-cache-moved-to-node_modulescachevite-storybook) + - [Vite cache moved to node_modules/.cache/.vite-storybook](#vite-cache-moved-to-node_modulescachevite-storybook) - [7.0 Webpack changes](#70-webpack-changes) - [Webpack4 support discontinued](#webpack4-support-discontinued) - [Babel mode v7 exclusively](#babel-mode-v7-exclusively) @@ -195,7 +200,7 @@ - [Dropped addon-docs manual babel configuration](#dropped-addon-docs-manual-babel-configuration) - [Dropped addon-docs manual configuration](#dropped-addon-docs-manual-configuration) - [Autoplay in docs](#autoplay-in-docs) - - [Removed STORYBOOK\_REACT\_CLASSES global](#removed-storybook_react_classes-global) + - [Removed STORYBOOK_REACT_CLASSES global](#removed-storybook_react_classes-global) - [7.0 Deprecations and default changes](#70-deprecations-and-default-changes) - [storyStoreV7 enabled by default](#storystorev7-enabled-by-default) - [`Story` type deprecated](#story-type-deprecated) @@ -408,6 +413,20 @@ - [Packages renaming](#packages-renaming) - [Deprecated embedded addons](#deprecated-embedded-addons) +## From version 8.1.x to 8.2.x + +### Preview.js globals renamed to initialGlobals + +Starting in 8.2 `preview.js` `globals` are deprecated and have been renamed to `initialGlobals`. We will remove `preview.js` `globals` in 9.0. + +```diff +// .storybook/preview.js +export default { +- globals: [ a: 1, b: 2 ], ++ initiaGlobals: [ a: 1, b: 2 ], +} +``` + ## From version 8.0.x to 8.1.x ### Portable stories @@ -430,13 +449,52 @@ module.exports = createJestConfig(customJestConfig); This will make sure you end using the correct implementation of the packages and avoid having issues in your tests. +### main.js `docs.autodocs` is deprecated + +The `docs.autodocs` setting in `main.js` is deprecated in 8.1 and will be removed in 9.0. + +It has been replaced with a tags-based system which is more flexible than before. + +`docs.autodocs` takes three values: + +- `true`: generate autodocs for every component +- `false`: don't generate autodocs at all +- `tag`: generate autodocs for components that have been tagged `'autodocs'`. + +Starting in 8.1, to generate autodocs for every component (`docs.autodocs = true`), add the following code to `.storybook/preview.js`: + +```js +// .storybook/preview.js +export default { + tags: ["autodocs"], +}; +``` + +Tags cascade, so setting `'autodocs'` at the project level automatically propagates to every component and story. If you set autodocs globally and want to opt-out for a particular component, you can remove the `'autodocs'` tag for a component like this: + +```js +// Button.stories.ts +export default { + component: Button, + tags: ["!autodocs"], +}; +``` + +If you had set `docs.autodocs = 'tag'`, the default setting, you can remove the setting from `.storybook/main.js`. That is now the default behavior. + +If you had set `docs.autodocs = false`, this still works in 8.x, but will go away in 9.0 as a breaking change. If you don't want autodocs at all, simply remove the `'autodocs'` tag throughout your Storybook and autodocs will not be created. + +### `docs` and `story` system tags removed + +Storybook automatically added the tag `'docs'` to any docs entry in the index and `'story'` to any story entry in the index. This behavior was undocumented, and in an effort to reduce the number of tags we've removed them in 8.1. If you depended on these tags, please file an issue on the [Storybook monorepo](https://github.com/storybookjs/storybook) and let us know! + ### Subtitle block and `parameters.componentSubtitle` The `Subtitle` block now accepts an `of` prop, which can be a reference to a CSF file or a default export (meta). `parameters.componentSubtitle` has been deprecated to be consistent with other parameters related to autodocs, instead use `parameters.docs.subtitle`. -##### Title block +### Title block `of` prop The `Title` block now accepts an `of` prop, which can be a reference to a CSF file or a default export (meta). @@ -562,6 +620,19 @@ These sections explain the rationale, and the required changes you might have to - [New Addons API](#new-addons-api) - [`addons.setConfig` should now be imported from `@storybook/manager-api`.](#addonssetconfig-should-now-be-imported-from-storybookmanager-api) +### Deprecated `@storybook/testing-library` package + +In Storybook 8, `@storybook/testing-library` has been integrated to a new package called `@storybook/test`, which uses Vitest APIs for an improved experience. When upgrading to Storybook 8 with 'npx storybook@latest upgrade', you will get prompted and will get an automigration for the new package. Please migrate when you can. + +To migrate by hand, install `@storybook/test` and replace `@storybook/testing-libary` imports globally: + +```ts +- import { userEvent } from '@storybook/testing-library'; ++ import { userEvent } from '@storybook/test'; +``` + +For more information on the change, see the [announcement post](https://storybook.js.org/blog/storybook-test/). + ### Framework-specific Vite plugins have to be explicitly added In Storybook 7, we would automatically add frameworks-specific Vite plugins, e.g. `@vitejs/plugin-react` if not installed. @@ -3859,7 +3930,7 @@ export default { We are replacing `@storybook/addon-knobs` with `@storybook/addon-controls`. - [Rationale & discussion](https://github.com/storybookjs/storybook/discussions/15060) -- [Migration notes](https://github.com/storybookjs/storybook/blob/next/addons/controls/README.md#how-do-i-migrate-from-addon-knobs) +- [Migration notes](https://github.com/storybookjs/storybook/blob/next/code/addons/controls/README.md#how-do-i-migrate-from-addon-knobs) #### Deprecated scoped blocks imports @@ -5088,7 +5159,7 @@ SB 5.1.0 added [support for project root `babel.config.js` files](https://github ### React native server -Storybook 5.1 contains a major overhaul of `@storybook/react-native` as compared to 4.1 (we didn't ship a version of RN in 5.0 due to timing constraints). Storybook for RN consists of an an UI for browsing stories on-device or in a simulator, and an optional webserver which can also be used to browse stories and web addons. +Storybook 5.1 contains a major overhaul of `@storybook/react-native` as compared to 4.1 (we didn't ship a version of RN in 5.0 due to timing constraints). Storybook for RN consists of an UI for browsing stories on-device or in a simulator, and an optional webserver which can also be used to browse stories and web addons. 5.1 refactors both pieces: diff --git a/code/.eslintrc.js b/code/.eslintrc.js index 1c460e0e8afc..8eda7590519f 100644 --- a/code/.eslintrc.js +++ b/code/.eslintrc.js @@ -58,8 +58,7 @@ module.exports = { }, }, { - // this package depends on a lot of peerDependencies we don't want to specify, because npm would install them - files: ['**/addons/docs/**/*'], + files: ['**/template/**/*', '**/vitest.config.ts', '**/addons/docs/**/*'], rules: { 'import/no-extraneous-dependencies': 'off', }, diff --git a/code/.yarn/patches/@vitest-expect-npm-1.3.1-973071a540.patch b/code/.yarn/patches/@vitest-expect-npm-1.6.0-0e382f8212.patch similarity index 94% rename from code/.yarn/patches/@vitest-expect-npm-1.3.1-973071a540.patch rename to code/.yarn/patches/@vitest-expect-npm-1.6.0-0e382f8212.patch index b2028a85b1ff..04c3bd5cfd7a 100644 --- a/code/.yarn/patches/@vitest-expect-npm-1.3.1-973071a540.patch +++ b/code/.yarn/patches/@vitest-expect-npm-1.6.0-0e382f8212.patch @@ -1,5 +1,5 @@ diff --git a/dist/index.js b/dist/index.js -index 640839e4b9fef0f25d08d055d4350845a8a29791..844f3d5834147848b5fa54276e96e665bcc675f9 100644 +index 13af149aa3c44f52dd5c5a80db3bf5689dfe15ea..1d111032c3fdc104723e19dea49db62be8b79b94 100644 --- a/dist/index.js +++ b/dist/index.js @@ -6,26 +6,32 @@ import { processError } from '@vitest/utils/error'; diff --git a/code/addons/a11y/package.json b/code/addons/a11y/package.json index b4ead0743136..13ed0ed3e144 100644 --- a/code/addons/a11y/package.json +++ b/code/addons/a11y/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/addon-a11y", - "version": "8.1.0-alpha.7", + "version": "8.2.0-alpha.8", "description": "Test component compliance with web accessibility standards", "keywords": [ "a11y", @@ -29,13 +29,13 @@ ".": { "types": "./dist/index.d.ts", "node": "./dist/index.js", - "require": "./dist/index.js", - "import": "./dist/index.mjs" + "import": "./dist/index.mjs", + "require": "./dist/index.js" }, "./preview": { "types": "./dist/preview.d.ts", - "require": "./dist/preview.js", - "import": "./dist/preview.mjs" + "import": "./dist/preview.mjs", + "require": "./dist/preview.js" }, "./manager": "./dist/manager.js", "./register": "./dist/manager.js", @@ -91,7 +91,7 @@ "./src/preview.tsx" ] }, - "gitHead": "e6a7fd8a655c69780bc20b9749c2699e44beae17", + "gitHead": "e6a7fd8a655c69780bc20b9749c2699e44beae16", "storybook": { "displayName": "Accessibility", "icon": "https://user-images.githubusercontent.com/263385/101991665-47042f80-3c7c-11eb-8f00-64b5a18f498a.png", diff --git a/code/addons/a11y/src/a11yRunner.ts b/code/addons/a11y/src/a11yRunner.ts index ec33803558c3..82a851b89b05 100644 --- a/code/addons/a11y/src/a11yRunner.ts +++ b/code/addons/a11y/src/a11yRunner.ts @@ -17,9 +17,9 @@ const defaultParameters = { config: {}, options: {} }; * Handle A11yContext events. * Because the event are sent without manual check, we split calls */ -const handleRequest = async (storyId: string, input: A11yParameters = defaultParameters) => { +const handleRequest = async (storyId: string, input: A11yParameters | null) => { if (!input?.manual) { - await run(storyId, input); + await run(storyId, input ?? defaultParameters); } }; diff --git a/code/addons/a11y/src/components/A11YPanel.test.tsx b/code/addons/a11y/src/components/A11YPanel.test.tsx index a90050f00c3a..fc2b353ea68b 100644 --- a/code/addons/a11y/src/components/A11YPanel.test.tsx +++ b/code/addons/a11y/src/components/A11YPanel.test.tsx @@ -1,3 +1,5 @@ +// @vitest-environment happy-dom + import { describe, beforeEach, afterEach, it, expect, vi } from 'vitest'; import React from 'react'; import { render, waitFor, fireEvent, act, cleanup } from '@testing-library/react'; diff --git a/code/addons/a11y/src/components/A11yContext.test.tsx b/code/addons/a11y/src/components/A11yContext.test.tsx index 2269b8071908..820d2e24be4e 100644 --- a/code/addons/a11y/src/components/A11yContext.test.tsx +++ b/code/addons/a11y/src/components/A11yContext.test.tsx @@ -1,3 +1,5 @@ +// @vitest-environment happy-dom + import { describe, beforeEach, afterEach, it, expect, vi } from 'vitest'; import * as React from 'react'; import type { AxeResults } from 'axe-core'; diff --git a/code/addons/a11y/src/components/Report/HighlightToggle.test.tsx b/code/addons/a11y/src/components/Report/HighlightToggle.test.tsx index 24ee9848e91f..b01b1d731202 100644 --- a/code/addons/a11y/src/components/Report/HighlightToggle.test.tsx +++ b/code/addons/a11y/src/components/Report/HighlightToggle.test.tsx @@ -1,3 +1,5 @@ +// @vitest-environment happy-dom + import { describe, it, expect, afterEach, vi } from 'vitest'; import React from 'react'; import { render, fireEvent, cleanup } from '@testing-library/react'; diff --git a/code/addons/a11y/vitest.config.ts b/code/addons/a11y/vitest.config.ts index 12fa8dbe147f..03172200442f 100644 --- a/code/addons/a11y/vitest.config.ts +++ b/code/addons/a11y/vitest.config.ts @@ -4,8 +4,6 @@ import { vitestCommonConfig } from '../../vitest.workspace'; export default mergeConfig( vitestCommonConfig, defineConfig({ - test: { - environment: 'jsdom', - }, + // Add custom config here }) ); diff --git a/code/addons/actions/package.json b/code/addons/actions/package.json index ece8a2ec4e3b..ca0ee204368c 100644 --- a/code/addons/actions/package.json +++ b/code/addons/actions/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/addon-actions", - "version": "8.1.0-alpha.7", + "version": "8.2.0-alpha.8", "description": "Get UI feedback when an action is performed on an interactive element", "keywords": [ "storybook", @@ -25,18 +25,18 @@ ".": { "types": "./dist/index.d.ts", "node": "./dist/index.js", - "require": "./dist/index.js", - "import": "./dist/index.mjs" + "import": "./dist/index.mjs", + "require": "./dist/index.js" }, "./decorator": { "types": "./dist/decorator.d.ts", - "require": "./dist/decorator.js", - "import": "./dist/decorator.mjs" + "import": "./dist/decorator.mjs", + "require": "./dist/decorator.js" }, "./preview": { "types": "./dist/preview.d.ts", - "require": "./dist/preview.js", - "import": "./dist/preview.mjs" + "import": "./dist/preview.mjs", + "require": "./dist/preview.js" }, "./manager": "./dist/manager.js", "./register.js": "./dist/manager.js", @@ -103,7 +103,7 @@ "./src/preview.ts" ] }, - "gitHead": "e6a7fd8a655c69780bc20b9749c2699e44beae17", + "gitHead": "e6a7fd8a655c69780bc20b9749c2699e44beae16", "storybook": { "displayName": "Actions", "unsupportedFrameworks": [ diff --git a/code/addons/actions/src/addArgsHelpers.ts b/code/addons/actions/src/addArgsHelpers.ts index ab8fd3b36a0b..008598f4ceb3 100644 --- a/code/addons/actions/src/addArgsHelpers.ts +++ b/code/addons/actions/src/addArgsHelpers.ts @@ -51,13 +51,11 @@ export const addActionsFromArgTypes: ArgsEnhancer = (context) => { return {}; } - const argTypesWithAction = Object.entries(argTypes).filter( - ([name, argType]) => !!argType['action'] - ); + const argTypesWithAction = Object.entries(argTypes).filter(([name, argType]) => !!argType.action); return argTypesWithAction.reduce((acc, [name, argType]) => { if (isInInitialArgs(name, initialArgs)) { - acc[name] = action(typeof argType['action'] === 'string' ? argType['action'] : name); + acc[name] = action(typeof argType.action === 'string' ? argType.action : name); } return acc; }, {} as Args); diff --git a/code/addons/actions/src/decorator.ts b/code/addons/actions/src/decorator.ts index 3022714f1253..34618f08e7ae 100644 --- a/code/addons/actions/src/decorator.ts +++ b/code/addons/actions/src/decorator.ts @@ -62,8 +62,8 @@ export const withActions: (storyFn: PartialStoryFn) => T[ parameterName: PARAM_KEY, skipIfNoParametersOrOptions: true, wrapper: (getStory, context, { parameters }) => { - if (parameters?.['handles']) { - applyEventHandlers(actions, ...parameters['handles']); + if (parameters?.handles) { + applyEventHandlers(actions, ...parameters.handles); } return getStory(context); diff --git a/code/addons/actions/src/loaders.ts b/code/addons/actions/src/loaders.ts index eebb09acb71b..a2d479367f9a 100644 --- a/code/addons/actions/src/loaders.ts +++ b/code/addons/actions/src/loaders.ts @@ -20,6 +20,7 @@ const logActionsWhenMockCalled: LoaderFunction = (context) => { const onMockCall = global.__STORYBOOK_TEST_ON_MOCK_CALL__ as typeof onMockCallType; onMockCall((mock, args) => { const name = mock.getMockName(); + if (name === 'spy') return; // TODO: Make this a configurable API in 8.2 if ( diff --git a/code/addons/actions/vitest.config.ts b/code/addons/actions/vitest.config.ts index 12fa8dbe147f..03172200442f 100644 --- a/code/addons/actions/vitest.config.ts +++ b/code/addons/actions/vitest.config.ts @@ -4,8 +4,6 @@ import { vitestCommonConfig } from '../../vitest.workspace'; export default mergeConfig( vitestCommonConfig, defineConfig({ - test: { - environment: 'jsdom', - }, + // Add custom config here }) ); diff --git a/code/addons/backgrounds/package.json b/code/addons/backgrounds/package.json index 6a28feca7160..966ea018eaa7 100644 --- a/code/addons/backgrounds/package.json +++ b/code/addons/backgrounds/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/addon-backgrounds", - "version": "8.1.0-alpha.7", + "version": "8.2.0-alpha.8", "description": "Switch backgrounds to view components in different settings", "keywords": [ "addon", @@ -29,13 +29,13 @@ ".": { "types": "./dist/index.d.ts", "node": "./dist/index.js", - "require": "./dist/index.js", - "import": "./dist/index.mjs" + "import": "./dist/index.mjs", + "require": "./dist/index.js" }, "./preview": { "types": "./dist/preview.d.ts", - "require": "./dist/preview.js", - "import": "./dist/preview.mjs" + "import": "./dist/preview.mjs", + "require": "./dist/preview.js" }, "./manager": "./dist/manager.js", "./register": "./dist/manager.js", @@ -86,7 +86,7 @@ "./src/preview.tsx" ] }, - "gitHead": "e6a7fd8a655c69780bc20b9749c2699e44beae17", + "gitHead": "e6a7fd8a655c69780bc20b9749c2699e44beae16", "storybook": { "displayName": "Backgrounds", "icon": "https://user-images.githubusercontent.com/263385/101991667-479cc600-3c7c-11eb-96d3-410e936252e7.png", diff --git a/code/addons/backgrounds/src/preview.tsx b/code/addons/backgrounds/src/preview.tsx index 139575e7f259..57649aac1f2a 100644 --- a/code/addons/backgrounds/src/preview.tsx +++ b/code/addons/backgrounds/src/preview.tsx @@ -18,6 +18,6 @@ export const parameters = { }, }; -export const globals = { +export const initialGlobals = { [PARAM_KEY]: null as any, }; diff --git a/code/addons/backgrounds/vitest.config.ts b/code/addons/backgrounds/vitest.config.ts index 12fa8dbe147f..03172200442f 100644 --- a/code/addons/backgrounds/vitest.config.ts +++ b/code/addons/backgrounds/vitest.config.ts @@ -4,8 +4,6 @@ import { vitestCommonConfig } from '../../vitest.workspace'; export default mergeConfig( vitestCommonConfig, defineConfig({ - test: { - environment: 'jsdom', - }, + // Add custom config here }) ); diff --git a/code/addons/controls/package.json b/code/addons/controls/package.json index 482e56e196ee..415ab2121bf4 100644 --- a/code/addons/controls/package.json +++ b/code/addons/controls/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/addon-controls", - "version": "8.1.0-alpha.7", + "version": "8.2.0-alpha.8", "description": "Interact with component inputs dynamically in the Storybook UI", "keywords": [ "addon", @@ -29,8 +29,8 @@ ".": { "types": "./dist/index.d.ts", "node": "./dist/index.js", - "require": "./dist/index.js", - "import": "./dist/index.mjs" + "import": "./dist/index.mjs", + "require": "./dist/index.js" }, "./manager": "./dist/manager.js", "./register": "./dist/manager.js", @@ -80,7 +80,7 @@ "./src/manager.tsx" ] }, - "gitHead": "e6a7fd8a655c69780bc20b9749c2699e44beae17", + "gitHead": "e6a7fd8a655c69780bc20b9749c2699e44beae16", "storybook": { "displayName": "Controls", "icon": "https://user-images.githubusercontent.com/263385/101991669-479cc600-3c7c-11eb-93d9-38b67e8371f2.png", diff --git a/code/addons/controls/vitest.config.ts b/code/addons/controls/vitest.config.ts index 12fa8dbe147f..03172200442f 100644 --- a/code/addons/controls/vitest.config.ts +++ b/code/addons/controls/vitest.config.ts @@ -4,8 +4,6 @@ import { vitestCommonConfig } from '../../vitest.workspace'; export default mergeConfig( vitestCommonConfig, defineConfig({ - test: { - environment: 'jsdom', - }, + // Add custom config here }) ); diff --git a/code/addons/docs/docs/docspage.md b/code/addons/docs/docs/docspage.md index 5e89251c2ede..ea50050f6b94 100644 --- a/code/addons/docs/docs/docspage.md +++ b/code/addons/docs/docs/docspage.md @@ -165,8 +165,8 @@ You can override this default behavior in `.storybook/preview.js` (or in any of ```js export const parameters = { docs: { - source: { - state: 'open', + canvas: { + sourceState: 'shown', }, }, }; diff --git a/code/addons/docs/docs/recipes.md b/code/addons/docs/docs/recipes.md index ca03815ce2dd..e98c89145b78 100644 --- a/code/addons/docs/docs/recipes.md +++ b/code/addons/docs/docs/recipes.md @@ -259,15 +259,17 @@ Example.parameters = { }; ``` -Alternatively, you can provide a function in the `docs.transformSource` parameter. For example, the following snippet in `.storybook/preview.js` globally removes the arrow at the beginning of a function that returns a string: +Alternatively, you can provide a function in the `docs.source.transform` parameter. For example, the following snippet in `.storybook/preview.js` globally removes the arrow at the beginning of a function that returns a string: ```js const SOURCE_REGEX = /^\(\) => `(.*)`$/; export const parameters = { docs: { - transformSource: (src, storyContext) => { - const match = SOURCE_REGEX.exec(src); - return match ? match[1] : src; + source: { + transform: (src, storyContext) => { + const match = SOURCE_REGEX.exec(src); + return match ? match[1] : src; + }, }, }, }; diff --git a/code/addons/docs/package.json b/code/addons/docs/package.json index 20c26d3fa9d5..efb34ed26b0b 100644 --- a/code/addons/docs/package.json +++ b/code/addons/docs/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/addon-docs", - "version": "8.1.0-alpha.7", + "version": "8.2.0-alpha.8", "description": "Document component usage and properties in Markdown", "keywords": [ "addon", @@ -26,30 +26,30 @@ "license": "MIT", "exports": { ".": { - "node": "./dist/index.js", "types": "./dist/index.d.ts", - "require": "./dist/index.js", - "import": "./dist/index.mjs" + "node": "./dist/index.js", + "import": "./dist/index.mjs", + "require": "./dist/index.js" }, "./preview": { "types": "./dist/preview.d.ts", - "require": "./dist/preview.js", - "import": "./dist/preview.mjs" + "import": "./dist/preview.mjs", + "require": "./dist/preview.js" }, "./preset": { "types": "./dist/preset.d.ts", - "require": "./dist/preset.js", - "import": "./dist/preset.js" + "import": "./dist/preset.js", + "require": "./dist/preset.js" }, "./blocks": { "types": "./dist/blocks.d.ts", - "require": "./dist/blocks.js", - "import": "./dist/blocks.mjs" + "import": "./dist/blocks.mjs", + "require": "./dist/blocks.js" }, "./dist/preview": { "types": "./dist/preview.d.ts", - "require": "./dist/preview.js", - "import": "./dist/preview.mjs" + "import": "./dist/preview.mjs", + "require": "./dist/preview.js" }, "./dist/preset": { "types": "./dist/preset.d.ts", @@ -57,13 +57,13 @@ }, "./dist/shims/mdx-react-shim": { "types": "./dist/shims/mdx-react-shim.d.ts", - "require": "./dist/shims/mdx-react-shim.js", - "import": "./dist/shims/mdx-react-shim.mjs" + "import": "./dist/shims/mdx-react-shim.mjs", + "require": "./dist/shims/mdx-react-shim.js" }, "./mdx-react-shim": { "types": "./dist/shims/mdx-react-shim.d.ts", - "require": "./dist/shims/mdx-react-shim.js", - "import": "./dist/shims/mdx-react-shim.mjs" + "import": "./dist/shims/mdx-react-shim.mjs", + "require": "./dist/shims/mdx-react-shim.js" }, "./mdx-loader": "./dist/mdx-loader.js", "./svelte/HOC.svelte": "./svelte/HOC.svelte", @@ -141,7 +141,7 @@ "./src/mdx-loader.ts" ] }, - "gitHead": "e6a7fd8a655c69780bc20b9749c2699e44beae17", + "gitHead": "e6a7fd8a655c69780bc20b9749c2699e44beae16", "storybook": { "displayName": "Docs", "icon": "https://user-images.githubusercontent.com/263385/101991672-48355c80-3c7c-11eb-82d9-95fa12438f64.png", diff --git a/code/addons/docs/src/plugins/mdx-plugin.ts b/code/addons/docs/src/plugins/mdx-plugin.ts index a75194fa7309..2ff606215831 100644 --- a/code/addons/docs/src/plugins/mdx-plugin.ts +++ b/code/addons/docs/src/plugins/mdx-plugin.ts @@ -32,7 +32,7 @@ export async function mdxPlugin(options: Options): Promise { mdxCompileOptions: { providerImportSource: join( dirname(require.resolve('@storybook/addon-docs/package.json')), - '/dist/shims/mdx-react-shim' + '/dist/shims/mdx-react-shim.mjs' ), ...mdxPluginOptions?.mdxCompileOptions, rehypePlugins: [ diff --git a/code/addons/docs/src/preset.ts b/code/addons/docs/src/preset.ts index 4b8811935ec9..977c2228fa85 100644 --- a/code/addons/docs/src/preset.ts +++ b/code/addons/docs/src/preset.ts @@ -45,7 +45,7 @@ async function webpack( mdxCompileOptions: { providerImportSource: join( dirname(require.resolve('@storybook/addon-docs/package.json')), - '/dist/shims/mdx-react-shim' + '/dist/shims/mdx-react-shim.mjs' ), ...mdxPluginOptions.mdxCompileOptions, rehypePlugins: [ diff --git a/code/addons/docs/template/stories/docs2/resolved-react.stories.ts b/code/addons/docs/template/stories/docs2/resolved-react.stories.ts index 91f12041962b..20095ec6164b 100644 --- a/code/addons/docs/template/stories/docs2/resolved-react.stories.ts +++ b/code/addons/docs/template/stories/docs2/resolved-react.stories.ts @@ -44,6 +44,8 @@ export default { docs: { name: 'ResolvedReact', }, + // the version string changes with every release of React/Next.js/Preact, not worth snapshotting + chromatic: { disable: true }, }, }; diff --git a/code/addons/docs/vitest.config.ts b/code/addons/docs/vitest.config.ts index 12fa8dbe147f..03172200442f 100644 --- a/code/addons/docs/vitest.config.ts +++ b/code/addons/docs/vitest.config.ts @@ -4,8 +4,6 @@ import { vitestCommonConfig } from '../../vitest.workspace'; export default mergeConfig( vitestCommonConfig, defineConfig({ - test: { - environment: 'jsdom', - }, + // Add custom config here }) ); diff --git a/code/addons/essentials/package.json b/code/addons/essentials/package.json index 33112d9708df..e81a2765dde9 100644 --- a/code/addons/essentials/package.json +++ b/code/addons/essentials/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/addon-essentials", - "version": "8.1.0-alpha.7", + "version": "8.2.0-alpha.8", "description": "Curated addons to bring out the best of Storybook", "keywords": [ "addon", @@ -23,10 +23,10 @@ "license": "MIT", "exports": { ".": { - "node": "./dist/index.js", "types": "./dist/index.d.ts", - "require": "./dist/index.js", - "import": "./dist/index.mjs" + "node": "./dist/index.js", + "import": "./dist/index.mjs", + "require": "./dist/index.js" }, "./actions/preview": { "types": "./dist/actions/preview.d.ts", @@ -135,5 +135,5 @@ "./src/viewport/preview.ts" ] }, - "gitHead": "e6a7fd8a655c69780bc20b9749c2699e44beae17" + "gitHead": "e6a7fd8a655c69780bc20b9749c2699e44beae16" } diff --git a/code/addons/essentials/src/docs/preset.ts b/code/addons/essentials/src/docs/preset.ts index ffb6047facab..5c7409f65b14 100644 --- a/code/addons/essentials/src/docs/preset.ts +++ b/code/addons/essentials/src/docs/preset.ts @@ -5,7 +5,7 @@ export * from '@storybook/addon-docs/dist/preset'; export const mdxLoaderOptions = async (config: any) => { config.mdxCompileOptions.providerImportSource = join( dirname(require.resolve('@storybook/addon-docs/package.json')), - '/dist/shims/mdx-react-shim' + '/dist/shims/mdx-react-shim.mjs' ); return config; }; diff --git a/code/addons/essentials/vitest.config.ts b/code/addons/essentials/vitest.config.ts index 12fa8dbe147f..03172200442f 100644 --- a/code/addons/essentials/vitest.config.ts +++ b/code/addons/essentials/vitest.config.ts @@ -4,8 +4,6 @@ import { vitestCommonConfig } from '../../vitest.workspace'; export default mergeConfig( vitestCommonConfig, defineConfig({ - test: { - environment: 'jsdom', - }, + // Add custom config here }) ); diff --git a/code/addons/gfm/package.json b/code/addons/gfm/package.json index 5d2b909e149a..a679479c8008 100644 --- a/code/addons/gfm/package.json +++ b/code/addons/gfm/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/addon-mdx-gfm", - "version": "8.1.0-alpha.7", + "version": "8.2.0-alpha.8", "description": "GitHub Flavored Markdown in Storybook", "keywords": [ "addon", @@ -59,5 +59,5 @@ "./src/index.ts" ] }, - "gitHead": "e6a7fd8a655c69780bc20b9749c2699e44beae17" + "gitHead": "e6a7fd8a655c69780bc20b9749c2699e44beae16" } diff --git a/code/addons/gfm/src/index.ts b/code/addons/gfm/src/index.ts index c23a1036d5d3..0cadb00aeb4f 100644 --- a/code/addons/gfm/src/index.ts +++ b/code/addons/gfm/src/index.ts @@ -12,7 +12,7 @@ export const mdxLoaderOptions = async (config: any) => { deprecate(dedent` The "@storybook/addon-mdx-gfm" addon is meant as a migration assistant for Storybook 8.0; and will likely be removed in a future version. It's recommended you read this document: - https://storybook.js.org/docs/react/writing-docs/mdx#lack-of-github-flavored-markdown-gfm + https://storybook.js.org/docs/writing-docs/mdx#markdown-tables-arent-rendering-correctly Once you've made the necessary changes, you can remove the addon from your package.json and storybook config. `); diff --git a/code/addons/gfm/vitest.config.ts b/code/addons/gfm/vitest.config.ts index 12fa8dbe147f..03172200442f 100644 --- a/code/addons/gfm/vitest.config.ts +++ b/code/addons/gfm/vitest.config.ts @@ -4,8 +4,6 @@ import { vitestCommonConfig } from '../../vitest.workspace'; export default mergeConfig( vitestCommonConfig, defineConfig({ - test: { - environment: 'jsdom', - }, + // Add custom config here }) ); diff --git a/code/addons/highlight/package.json b/code/addons/highlight/package.json index 261aaaf561fa..a633e67a1dce 100644 --- a/code/addons/highlight/package.json +++ b/code/addons/highlight/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/addon-highlight", - "version": "8.1.0-alpha.7", + "version": "8.2.0-alpha.8", "description": "Highlight DOM nodes within your stories", "keywords": [ "storybook-addons", @@ -27,13 +27,13 @@ ".": { "types": "./dist/index.d.ts", "node": "./dist/index.js", - "require": "./dist/index.js", - "import": "./dist/index.mjs" + "import": "./dist/index.mjs", + "require": "./dist/index.js" }, "./preview": { "types": "./dist/preview.d.ts", - "require": "./dist/preview.js", - "import": "./dist/preview.mjs" + "import": "./dist/preview.mjs", + "require": "./dist/preview.js" }, "./package.json": "./package.json" }, @@ -71,7 +71,7 @@ "./src/preview.ts" ] }, - "gitHead": "e6a7fd8a655c69780bc20b9749c2699e44beae17", + "gitHead": "e6a7fd8a655c69780bc20b9749c2699e44beae16", "sbmodern": "dist/modern/index.js", "storybook": { "displayName": "Highlight", diff --git a/code/addons/highlight/vitest.config.ts b/code/addons/highlight/vitest.config.ts index 12fa8dbe147f..03172200442f 100644 --- a/code/addons/highlight/vitest.config.ts +++ b/code/addons/highlight/vitest.config.ts @@ -4,8 +4,6 @@ import { vitestCommonConfig } from '../../vitest.workspace'; export default mergeConfig( vitestCommonConfig, defineConfig({ - test: { - environment: 'jsdom', - }, + // Add custom config here }) ); diff --git a/code/addons/interactions/package.json b/code/addons/interactions/package.json index 467cac882d2b..917f28444707 100644 --- a/code/addons/interactions/package.json +++ b/code/addons/interactions/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/addon-interactions", - "version": "8.1.0-alpha.7", + "version": "8.2.0-alpha.8", "description": "Automate, test and debug user interactions", "keywords": [ "storybook-addons", @@ -25,13 +25,13 @@ ".": { "types": "./dist/index.d.ts", "node": "./dist/index.js", - "require": "./dist/index.js", - "import": "./dist/index.mjs" + "import": "./dist/index.mjs", + "require": "./dist/index.js" }, "./preview": { "types": "./dist/preview.d.ts", - "require": "./dist/preview.js", - "import": "./dist/preview.mjs" + "import": "./dist/preview.mjs", + "require": "./dist/preview.js" }, "./manager": "./dist/manager.js", "./preset": "./dist/preset.js", @@ -93,7 +93,7 @@ "./src/preset.ts" ] }, - "gitHead": "e6a7fd8a655c69780bc20b9749c2699e44beae17", + "gitHead": "e6a7fd8a655c69780bc20b9749c2699e44beae16", "storybook": { "displayName": "Interactions", "unsupportedFrameworks": [ diff --git a/code/addons/interactions/src/components/Interaction.tsx b/code/addons/interactions/src/components/Interaction.tsx index c5e5e41f3d5e..b50e1a8382a7 100644 --- a/code/addons/interactions/src/components/Interaction.tsx +++ b/code/addons/interactions/src/components/Interaction.tsx @@ -5,12 +5,12 @@ import { styled, typography } from '@storybook/theming'; import { transparentize } from 'polished'; import { ListUnorderedIcon } from '@storybook/icons'; -import { Expected, MatcherResult, Received } from './MatcherResult'; +import { MatcherResult } from './MatcherResult'; import { MethodCall } from './MethodCall'; import { StatusIcon } from './StatusIcon'; import type { Controls } from './InteractionsPanel'; -import { isJestError } from '../utils'; +import { isChaiError, isJestError } from '../utils'; const MethodCallWrapper = styled.div(() => ({ fontFamily: typography.fonts.mono, @@ -117,33 +117,23 @@ export const Exception = ({ exception }: { exception: Call['exception'] }) => { if (isJestError(exception)) { return ; } + if (isChaiError(exception)) { + return ( + + +

See the full stack trace in the browser console.

+
+ ); + } + const paragraphs = exception.message.split('\n\n'); const more = paragraphs.length > 1; return (
{paragraphs[0]}
- {exception.showDiff && exception.diff ? ( - <> -
- - - ) : ( -
-          
- {exception.expected && ( - <> - Expected: -
- - )} - {exception.actual && ( - <> - Received: -
- - )} -
- )} {more &&

See the full stack trace in the browser console.

}
); diff --git a/code/addons/interactions/src/components/InteractionsPanel.stories.tsx b/code/addons/interactions/src/components/InteractionsPanel.stories.tsx index 5f8dd331935b..65d16a1b68a6 100644 --- a/code/addons/interactions/src/components/InteractionsPanel.stories.tsx +++ b/code/addons/interactions/src/components/InteractionsPanel.stories.tsx @@ -120,11 +120,11 @@ export const Failed: Story = { }, }; -export const NoInteractions: Story = { - args: { - interactions: [], - }, -}; +// export const NoInteractions: Story = { +// args: { +// interactions: [], +// }, +// }; export const CaughtException: Story = { args: { diff --git a/code/addons/interactions/src/components/MatcherResult.stories.tsx b/code/addons/interactions/src/components/MatcherResult.stories.tsx index c81ac36eb201..4ac31a71ecdb 100644 --- a/code/addons/interactions/src/components/MatcherResult.stories.tsx +++ b/code/addons/interactions/src/components/MatcherResult.stories.tsx @@ -29,11 +29,18 @@ export default { export const Expected = { args: { message: dedent` - expect(jest.fn()).lastCalledWith(...expected) - - Expected: {"email": "michael@chromatic.com", "password": "testpasswordthatwontfail"} - - Number of calls: 0 + expected last "spy" call to have been called with [ { …(2) } ] + + - Expected: + Array [ + Object { + "email": "michael@chromatic.com", + "password": "testpasswordthatwontfail", + }, + ] + + + Received: + undefined `, }, }; @@ -41,12 +48,18 @@ export const Expected = { export const ExpectedReceived = { args: { message: dedent` - expect(jest.fn()).toHaveBeenCalledWith(...expected) - - Expected: called with 0 arguments - Received: {"email": "michael@chromatic.com", "password": "testpasswordthatwontfail"} - - Number of calls: 1 + expected last "spy" call to have been called with [] + + - Expected + + Received + + - Array [] + + Array [ + + Object { + + "email": "michael@chromatic.com", + + "password": "testpasswordthatwontfail", + + }, + + ] `, }, }; @@ -54,10 +67,21 @@ export const ExpectedReceived = { export const ExpectedNumberOfCalls = { args: { message: dedent` - expect(jest.fn()).toHaveBeenCalledTimes(expected) - - Expected number of calls: 1 - Received number of calls: 0 + expected "spy" to not be called at all, but actually been called 1 times + + Received: + + 1st spy call: + + Array [ + Object { + "email": "michael@chromatic.com", + "password": "testpasswordthatwontfail", + }, + ] + + + Number of calls: 1 `, }, }; @@ -65,17 +89,21 @@ export const ExpectedNumberOfCalls = { export const Diff = { args: { message: dedent` - expect(jest.fn()).toHaveBeenCalledWith(...expected) - - - Expected - + Received - - Object { - - "email": "michael@chromatic.com", - + "email": "michael@chromaui.com", - "password": "testpasswordthatwontfail", - }, - + expected "spy" to be called with arguments: [ { …(2) } ] + + Received: + + 1st spy call: + + Array [ + Object { + - "email": "michael@chromaui.com", + + "email": "michael@chromatic.com", + "password": "testpasswordthatwontfail", + }, + ] + + Number of calls: 1 `, }, diff --git a/code/addons/interactions/src/components/MatcherResult.tsx b/code/addons/interactions/src/components/MatcherResult.tsx index ec75109a0598..fdd1fbdc4b83 100644 --- a/code/addons/interactions/src/components/MatcherResult.tsx +++ b/code/addons/interactions/src/components/MatcherResult.tsx @@ -85,7 +85,7 @@ export const MatcherResult = ({ if (line.match(/^\s*- /)) { return [,
]; } - if (line.match(/^\s*\+ /)) { + if (line.match(/^\s*\+ /) || line.match(/^Received: $/)) { return [,
]; } diff --git a/code/addons/interactions/vitest.config.ts b/code/addons/interactions/vitest.config.ts index 12fa8dbe147f..03172200442f 100644 --- a/code/addons/interactions/vitest.config.ts +++ b/code/addons/interactions/vitest.config.ts @@ -4,8 +4,6 @@ import { vitestCommonConfig } from '../../vitest.workspace'; export default mergeConfig( vitestCommonConfig, defineConfig({ - test: { - environment: 'jsdom', - }, + // Add custom config here }) ); diff --git a/code/addons/jest/package.json b/code/addons/jest/package.json index 02d3455461a0..72e8666a9b3c 100644 --- a/code/addons/jest/package.json +++ b/code/addons/jest/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/addon-jest", - "version": "8.1.0-alpha.7", + "version": "8.2.0-alpha.8", "description": "React storybook addon that show component jest report", "keywords": [ "addon", @@ -31,8 +31,8 @@ ".": { "types": "./dist/index.d.ts", "node": "./dist/index.js", - "require": "./dist/index.js", - "import": "./dist/index.mjs" + "import": "./dist/index.mjs", + "require": "./dist/index.js" }, "./manager": "./dist/manager.js", "./register": "./dist/manager.js", @@ -82,7 +82,7 @@ "./src/manager.tsx" ] }, - "gitHead": "e6a7fd8a655c69780bc20b9749c2699e44beae17", + "gitHead": "e6a7fd8a655c69780bc20b9749c2699e44beae16", "storybook": { "displayName": "Jest", "icon": "https://pbs.twimg.com/profile_images/821713465245102080/mMtKIMax_400x400.jpg", diff --git a/code/addons/jest/vitest.config.ts b/code/addons/jest/vitest.config.ts index 12fa8dbe147f..03172200442f 100644 --- a/code/addons/jest/vitest.config.ts +++ b/code/addons/jest/vitest.config.ts @@ -4,8 +4,6 @@ import { vitestCommonConfig } from '../../vitest.workspace'; export default mergeConfig( vitestCommonConfig, defineConfig({ - test: { - environment: 'jsdom', - }, + // Add custom config here }) ); diff --git a/code/addons/links/package.json b/code/addons/links/package.json index c19d89b78b0a..f147809e6392 100644 --- a/code/addons/links/package.json +++ b/code/addons/links/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/addon-links", - "version": "8.1.0-alpha.7", + "version": "8.2.0-alpha.8", "description": "Link stories together to build demos and prototypes with your UI components", "keywords": [ "addon", @@ -25,18 +25,18 @@ ".": { "types": "./dist/index.d.ts", "node": "./dist/index.js", - "require": "./dist/index.js", - "import": "./dist/index.mjs" + "import": "./dist/index.mjs", + "require": "./dist/index.js" }, "./react": { "types": "./dist/react/index.d.ts", - "require": "./dist/react/index.js", - "import": "./dist/react/index.mjs" + "import": "./dist/react/index.mjs", + "require": "./dist/react/index.js" }, "./preview": { "types": "./dist/preview.d.ts", - "require": "./dist/preview.js", - "import": "./dist/preview.mjs" + "import": "./dist/preview.mjs", + "require": "./dist/preview.js" }, "./manager": "./dist/manager.js", "./register": "./dist/manager.js", @@ -67,7 +67,7 @@ "prep": "node --loader ../../../scripts/node_modules/esbuild-register/loader.js -r ../../../scripts/node_modules/esbuild-register/register.js ../../../scripts/prepare/addon-bundle.ts" }, "dependencies": { - "@storybook/csf": "^0.1.6", + "@storybook/csf": "^0.1.8", "@storybook/global": "^5.0.0", "ts-dedent": "^2.0.0" }, @@ -82,7 +82,7 @@ "typescript": "^5.3.2" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta" }, "peerDependenciesMeta": { "react": { @@ -105,7 +105,7 @@ ], "post": "./scripts/fix-preview-api-reference.ts" }, - "gitHead": "e6a7fd8a655c69780bc20b9749c2699e44beae17", + "gitHead": "e6a7fd8a655c69780bc20b9749c2699e44beae16", "storybook": { "displayName": "Links", "icon": "https://user-images.githubusercontent.com/263385/101991673-48355c80-3c7c-11eb-9b6e-b627c96a75f6.png", diff --git a/code/addons/links/src/react/components/link.test.tsx b/code/addons/links/src/react/components/link.test.tsx index 872c29d5b898..4d3c2d6b8992 100644 --- a/code/addons/links/src/react/components/link.test.tsx +++ b/code/addons/links/src/react/components/link.test.tsx @@ -1,3 +1,5 @@ +// @vitest-environment happy-dom + /// ; import { describe, it, expect, afterEach, vi } from 'vitest'; import React from 'react'; diff --git a/code/addons/links/src/utils.test.ts b/code/addons/links/src/utils.test.ts index 11cc359c1cc8..a98e2b76b3a1 100644 --- a/code/addons/links/src/utils.test.ts +++ b/code/addons/links/src/utils.test.ts @@ -1,3 +1,5 @@ +// @vitest-environment happy-dom + import { describe, beforeAll, beforeEach, it, expect, vi } from 'vitest'; import { addons } from '@storybook/preview-api'; import { SELECT_STORY } from '@storybook/core-events'; diff --git a/code/addons/links/vitest.config.ts b/code/addons/links/vitest.config.ts index 12fa8dbe147f..03172200442f 100644 --- a/code/addons/links/vitest.config.ts +++ b/code/addons/links/vitest.config.ts @@ -4,8 +4,6 @@ import { vitestCommonConfig } from '../../vitest.workspace'; export default mergeConfig( vitestCommonConfig, defineConfig({ - test: { - environment: 'jsdom', - }, + // Add custom config here }) ); diff --git a/code/addons/measure/package.json b/code/addons/measure/package.json index f5146ede8621..7995354560d0 100644 --- a/code/addons/measure/package.json +++ b/code/addons/measure/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/addon-measure", - "version": "8.1.0-alpha.7", + "version": "8.2.0-alpha.8", "description": "Inspect layouts by visualizing the box model", "keywords": [ "storybook-addons", @@ -28,13 +28,13 @@ ".": { "types": "./dist/index.d.ts", "node": "./dist/index.js", - "require": "./dist/index.js", - "import": "./dist/index.mjs" + "import": "./dist/index.mjs", + "require": "./dist/index.js" }, "./preview": { "types": "./dist/preview.d.ts", - "require": "./dist/preview.js", - "import": "./dist/preview.mjs" + "import": "./dist/preview.mjs", + "require": "./dist/preview.js" }, "./manager": "./dist/manager.js", "./register": "./dist/manager.js", @@ -97,7 +97,7 @@ "./src/preview.tsx" ] }, - "gitHead": "e6a7fd8a655c69780bc20b9749c2699e44beae17", + "gitHead": "e6a7fd8a655c69780bc20b9749c2699e44beae16", "storybook": { "displayName": "Measure", "unsupportedFrameworks": [ diff --git a/code/addons/measure/src/preview.tsx b/code/addons/measure/src/preview.tsx index 7f19a8ed973a..fc715035e742 100644 --- a/code/addons/measure/src/preview.tsx +++ b/code/addons/measure/src/preview.tsx @@ -4,6 +4,6 @@ import { PARAM_KEY } from './constants'; export const decorators: Addon_DecoratorFunction[] = [withMeasure]; -export const globals = { +export const initialGlobals = { [PARAM_KEY]: false, }; diff --git a/code/addons/measure/vitest.config.ts b/code/addons/measure/vitest.config.ts index 12fa8dbe147f..03172200442f 100644 --- a/code/addons/measure/vitest.config.ts +++ b/code/addons/measure/vitest.config.ts @@ -4,8 +4,6 @@ import { vitestCommonConfig } from '../../vitest.workspace'; export default mergeConfig( vitestCommonConfig, defineConfig({ - test: { - environment: 'jsdom', - }, + // Add custom config here }) ); diff --git a/code/addons/onboarding/package.json b/code/addons/onboarding/package.json index b4d1940b6b3a..0660fd76164a 100644 --- a/code/addons/onboarding/package.json +++ b/code/addons/onboarding/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/addon-onboarding", - "version": "8.1.0-alpha.7", + "version": "8.2.0-alpha.8", "description": "Storybook Addon Onboarding - Introduces a new onboarding experience", "keywords": [ "storybook-addons", @@ -24,8 +24,8 @@ ".": { "types": "./dist/index.d.ts", "node": "./dist/index.js", - "require": "./dist/index.js", - "import": "./dist/index.mjs" + "import": "./dist/index.mjs", + "require": "./dist/index.js" }, "./manager": "./dist/manager.js", "./preset": "./dist/preset.js", diff --git a/code/addons/onboarding/src/features/WriteStoriesModal/WriteStoriesModal.styled.tsx b/code/addons/onboarding/src/features/WriteStoriesModal/WriteStoriesModal.styled.tsx index 9b63cf6daf3d..eea2675c814d 100644 --- a/code/addons/onboarding/src/features/WriteStoriesModal/WriteStoriesModal.styled.tsx +++ b/code/addons/onboarding/src/features/WriteStoriesModal/WriteStoriesModal.styled.tsx @@ -1,9 +1,7 @@ import { keyframes, styled } from '@storybook/theming'; import { Modal } from '@storybook/components'; -export const ModalWrapper = styled(Modal)` - background: white; -`; +export const ModalWrapper = styled(Modal)``; export const ModalContent = styled.div` display: flex; @@ -21,10 +19,13 @@ export const Main = styled.div` flex: 1; display: flex; flex-direction: column; + background: white; font-family: ${({ theme }) => theme.typography.fonts.base}; `; export const Header = styled.div` + position: relative; + z-index: 1; box-sizing: border-box; display: flex; justify-content: space-between; @@ -64,20 +65,20 @@ export const Content = styled.div` } `; -export const SpanHighlight = styled.span` - display: inline-flex; - border-radius: 3px; - padding: 0 5px; - margin-bottom: -2px; - opacity: 0.8; - font-family: ${({ theme }) => theme.typography.fonts.mono}; - font-size: 11px; - border: 1px solid #ecf4f9; - color: ${({ theme }) => theme.color.darkest}; - background-color: #f7fafc; - box-sizing: border-box; - line-height: 17px; -`; +export const SpanHighlight = styled.span(({ theme }) => ({ + display: 'inline-flex', + borderRadius: 3, + padding: '0 5px', + marginBottom: -2, + opacity: 0.8, + fontFamily: theme.typography.fonts.mono, + fontSize: 11, + border: theme.base === 'dark' ? theme.color.darkest : theme.color.lightest, + color: theme.base === 'dark' ? theme.color.lightest : theme.color.darkest, + backgroundColor: theme.base === 'dark' ? 'black' : theme.color.light, + boxSizing: 'border-box', + lineHeight: '17px', +})); export const Image = styled.img` max-width: 100%; @@ -90,8 +91,10 @@ export const Background = styled.div` left: 0; width: 100%; height: 100%; - z-index: -1; + z-index: 0; overflow: hidden; + z-index: 0; + pointer-events: none; `; export const circle1Anim = keyframes` diff --git a/code/addons/onboarding/src/features/WriteStoriesModal/WriteStoriesModal.tsx b/code/addons/onboarding/src/features/WriteStoriesModal/WriteStoriesModal.tsx index 333e1826bb2e..38b44f00a037 100644 --- a/code/addons/onboarding/src/features/WriteStoriesModal/WriteStoriesModal.tsx +++ b/code/addons/onboarding/src/features/WriteStoriesModal/WriteStoriesModal.tsx @@ -124,6 +124,12 @@ export const WriteStoriesModal: FC = ({ )}
+ + + + + +
@@ -280,11 +286,6 @@ export const WriteStoriesModal: FC = ({ ) : null)} - - - - -
diff --git a/code/addons/onboarding/vitest.config.ts b/code/addons/onboarding/vitest.config.ts index 338123796180..03172200442f 100644 --- a/code/addons/onboarding/vitest.config.ts +++ b/code/addons/onboarding/vitest.config.ts @@ -4,6 +4,6 @@ import { vitestCommonConfig } from '../../vitest.workspace'; export default mergeConfig( vitestCommonConfig, defineConfig({ - test: { environment: 'jsdom' }, + // Add custom config here }) ); diff --git a/code/addons/outline/package.json b/code/addons/outline/package.json index 1a40a4d6c6c8..d6848babbabf 100644 --- a/code/addons/outline/package.json +++ b/code/addons/outline/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/addon-outline", - "version": "8.1.0-alpha.7", + "version": "8.2.0-alpha.8", "description": "Outline all elements with CSS to help with layout placement and alignment", "keywords": [ "storybook-addons", @@ -31,13 +31,13 @@ ".": { "types": "./dist/index.d.ts", "node": "./dist/index.js", - "require": "./dist/index.js", - "import": "./dist/index.mjs" + "import": "./dist/index.mjs", + "require": "./dist/index.js" }, "./preview": { "types": "./dist/preview.d.ts", - "require": "./dist/preview.js", - "import": "./dist/preview.mjs" + "import": "./dist/preview.mjs", + "require": "./dist/preview.js" }, "./manager": "./dist/manager.js", "./register": "./dist/manager.js", @@ -87,7 +87,7 @@ "./src/preview.tsx" ] }, - "gitHead": "e6a7fd8a655c69780bc20b9749c2699e44beae17", + "gitHead": "e6a7fd8a655c69780bc20b9749c2699e44beae16", "storybook": { "displayName": "Outline", "unsupportedFrameworks": [ diff --git a/code/addons/outline/src/preview.tsx b/code/addons/outline/src/preview.tsx index b1d09e1a4920..28b187cbea4f 100644 --- a/code/addons/outline/src/preview.tsx +++ b/code/addons/outline/src/preview.tsx @@ -4,6 +4,6 @@ import { PARAM_KEY } from './constants'; export const decorators: Addon_DecoratorFunction[] = [withOutline]; -export const globals = { +export const initialGlobals = { [PARAM_KEY]: false, }; diff --git a/code/addons/outline/vitest.config.ts b/code/addons/outline/vitest.config.ts index 12fa8dbe147f..03172200442f 100644 --- a/code/addons/outline/vitest.config.ts +++ b/code/addons/outline/vitest.config.ts @@ -4,8 +4,6 @@ import { vitestCommonConfig } from '../../vitest.workspace'; export default mergeConfig( vitestCommonConfig, defineConfig({ - test: { - environment: 'jsdom', - }, + // Add custom config here }) ); diff --git a/code/addons/storysource/package.json b/code/addons/storysource/package.json index e116bf93a52c..7b215b689aa1 100644 --- a/code/addons/storysource/package.json +++ b/code/addons/storysource/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/addon-storysource", - "version": "8.1.0-alpha.7", + "version": "8.2.0-alpha.8", "description": "View a story’s source code to see how it works and paste into your app", "keywords": [ "addon", @@ -25,8 +25,8 @@ ".": { "types": "./dist/index.d.ts", "node": "./dist/index.js", - "require": "./dist/index.js", - "import": "./dist/index.mjs" + "import": "./dist/index.mjs", + "require": "./dist/index.js" }, "./preset": "./dist/preset.js", "./manager": "./dist/manager.js", @@ -79,7 +79,7 @@ "./src/preset.ts" ] }, - "gitHead": "e6a7fd8a655c69780bc20b9749c2699e44beae17", + "gitHead": "e6a7fd8a655c69780bc20b9749c2699e44beae16", "storybook": { "displayName": "Storysource", "icon": "https://user-images.githubusercontent.com/263385/101991675-48cdf300-3c7c-11eb-9400-58de5ac6daa7.png", diff --git a/code/addons/storysource/vitest.config.ts b/code/addons/storysource/vitest.config.ts index 12fa8dbe147f..03172200442f 100644 --- a/code/addons/storysource/vitest.config.ts +++ b/code/addons/storysource/vitest.config.ts @@ -4,8 +4,6 @@ import { vitestCommonConfig } from '../../vitest.workspace'; export default mergeConfig( vitestCommonConfig, defineConfig({ - test: { - environment: 'jsdom', - }, + // Add custom config here }) ); diff --git a/code/addons/themes/package.json b/code/addons/themes/package.json index 1203272b30db..2f0c01742a59 100644 --- a/code/addons/themes/package.json +++ b/code/addons/themes/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/addon-themes", - "version": "8.1.0-alpha.7", + "version": "8.2.0-alpha.8", "description": "Switch between multiple themes for you components in Storybook", "keywords": [ "css", @@ -30,13 +30,13 @@ ".": { "types": "./dist/index.d.ts", "node": "./dist/index.js", - "require": "./dist/index.js", - "import": "./dist/index.mjs" + "import": "./dist/index.mjs", + "require": "./dist/index.js" }, "./preview": { "types": "./dist/preview.d.ts", - "require": "./dist/preview.js", - "import": "./dist/preview.mjs" + "import": "./dist/preview.mjs", + "require": "./dist/preview.js" }, "./manager": "./dist/manager.js", "./package.json": "./package.json", @@ -84,7 +84,7 @@ "./src/preview.tsx" ] }, - "gitHead": "e6a7fd8a655c69780bc20b9749c2699e44beae17", + "gitHead": "e6a7fd8a655c69780bc20b9749c2699e44beae16", "storybook": { "displayName": "Themes", "unsupportedFrameworks": [ diff --git a/code/addons/themes/vitest.config.ts b/code/addons/themes/vitest.config.ts index 12fa8dbe147f..03172200442f 100644 --- a/code/addons/themes/vitest.config.ts +++ b/code/addons/themes/vitest.config.ts @@ -4,8 +4,6 @@ import { vitestCommonConfig } from '../../vitest.workspace'; export default mergeConfig( vitestCommonConfig, defineConfig({ - test: { - environment: 'jsdom', - }, + // Add custom config here }) ); diff --git a/code/addons/toolbars/package.json b/code/addons/toolbars/package.json index 003fe05a7602..135cf40a0127 100644 --- a/code/addons/toolbars/package.json +++ b/code/addons/toolbars/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/addon-toolbars", - "version": "8.1.0-alpha.7", + "version": "8.2.0-alpha.8", "description": "Create your own toolbar items that control story rendering", "keywords": [ "addon", @@ -29,8 +29,8 @@ ".": { "types": "./dist/index.d.ts", "node": "./dist/index.js", - "require": "./dist/index.js", - "import": "./dist/index.mjs" + "import": "./dist/index.mjs", + "require": "./dist/index.js" }, "./manager": "./dist/manager.js", "./register": "./dist/manager.js", @@ -71,7 +71,7 @@ "./src/manager.tsx" ] }, - "gitHead": "e6a7fd8a655c69780bc20b9749c2699e44beae17", + "gitHead": "e6a7fd8a655c69780bc20b9749c2699e44beae16", "storybook": { "displayName": "Toolbars", "icon": "https://user-images.githubusercontent.com/263385/101991677-48cdf300-3c7c-11eb-93b4-19b0e3366959.png", diff --git a/code/addons/toolbars/vitest.config.ts b/code/addons/toolbars/vitest.config.ts index 12fa8dbe147f..03172200442f 100644 --- a/code/addons/toolbars/vitest.config.ts +++ b/code/addons/toolbars/vitest.config.ts @@ -4,8 +4,6 @@ import { vitestCommonConfig } from '../../vitest.workspace'; export default mergeConfig( vitestCommonConfig, defineConfig({ - test: { - environment: 'jsdom', - }, + // Add custom config here }) ); diff --git a/code/addons/viewport/package.json b/code/addons/viewport/package.json index b1478832b2e7..7348b71345f5 100644 --- a/code/addons/viewport/package.json +++ b/code/addons/viewport/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/addon-viewport", - "version": "8.1.0-alpha.7", + "version": "8.2.0-alpha.8", "description": "Build responsive components by adjusting Storybook’s viewport size and orientation", "keywords": [ "addon", @@ -26,13 +26,13 @@ ".": { "types": "./dist/index.d.ts", "node": "./dist/index.js", - "require": "./dist/index.js", - "import": "./dist/index.mjs" + "import": "./dist/index.mjs", + "require": "./dist/index.js" }, "./preview": { "types": "./dist/preview.d.ts", - "require": "./dist/preview.js", - "import": "./dist/preview.mjs" + "import": "./dist/preview.mjs", + "require": "./dist/preview.js" }, "./manager": "./dist/manager.js", "./package.json": "./package.json" @@ -82,7 +82,7 @@ "./src/preview.ts" ] }, - "gitHead": "e6a7fd8a655c69780bc20b9749c2699e44beae17", + "gitHead": "e6a7fd8a655c69780bc20b9749c2699e44beae16", "storybook": { "displayName": "Viewport", "icon": "https://user-images.githubusercontent.com/263385/101991678-48cdf300-3c7c-11eb-9764-f8af293c1b28.png", diff --git a/code/addons/viewport/src/preview.ts b/code/addons/viewport/src/preview.ts index afe0f1b5f0b4..a429414748df 100644 --- a/code/addons/viewport/src/preview.ts +++ b/code/addons/viewport/src/preview.ts @@ -1 +1 @@ -export const globals = { viewport: 'reset', viewportRotated: false }; +export const initialGlobals = { viewport: 'reset', viewportRotated: false }; diff --git a/code/addons/viewport/src/shortcuts.ts b/code/addons/viewport/src/shortcuts.ts index 974abe477d6d..17fd17dfdc66 100644 --- a/code/addons/viewport/src/shortcuts.ts +++ b/code/addons/viewport/src/shortcuts.ts @@ -1,6 +1,6 @@ import { type API } from '@storybook/manager-api'; import { ADDON_ID } from './constants'; -import { globals as defaultGlobals } from './preview'; +import { initialGlobals as defaultGlobals } from './preview'; const getCurrentViewportIndex = (viewportsKeys: string[], current: string): number => viewportsKeys.indexOf(current); diff --git a/code/addons/viewport/vitest.config.ts b/code/addons/viewport/vitest.config.ts index 12fa8dbe147f..03172200442f 100644 --- a/code/addons/viewport/vitest.config.ts +++ b/code/addons/viewport/vitest.config.ts @@ -4,8 +4,6 @@ import { vitestCommonConfig } from '../../vitest.workspace'; export default mergeConfig( vitestCommonConfig, defineConfig({ - test: { - environment: 'jsdom', - }, + // Add custom config here }) ); diff --git a/code/builders/builder-manager/package.json b/code/builders/builder-manager/package.json index 432ee9cf3358..02997324de05 100644 --- a/code/builders/builder-manager/package.json +++ b/code/builders/builder-manager/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/builder-manager", - "version": "8.1.0-alpha.7", + "version": "8.2.0-alpha.8", "description": "Storybook manager builder", "keywords": [ "storybook" @@ -23,8 +23,8 @@ ".": { "types": "./dist/index.d.ts", "node": "./dist/index.js", - "require": "./dist/index.js", - "import": "./dist/index.mjs" + "import": "./dist/index.mjs", + "require": "./dist/index.js" }, "./package.json": "./package.json" }, @@ -51,10 +51,10 @@ "@types/ejs": "^3.1.1", "@yarnpkg/esbuild-plugin-pnp": "^3.0.0-rc.10", "browser-assert": "^1.2.1", - "ejs": "^3.1.8", + "ejs": "^3.1.10", "esbuild": "^0.18.0 || ^0.19.0 || ^0.20.0", "esbuild-plugin-alias": "^0.2.1", - "express": "^4.17.3", + "express": "^4.19.2", "fs-extra": "^11.1.0", "process": "^0.11.10", "util": "^0.12.4" @@ -72,5 +72,5 @@ ], "platform": "node" }, - "gitHead": "e6a7fd8a655c69780bc20b9749c2699e44beae17" + "gitHead": "e6a7fd8a655c69780bc20b9749c2699e44beae16" } diff --git a/code/builders/builder-manager/templates/template.ejs b/code/builders/builder-manager/templates/template.ejs index af42859a0791..c1fa9310acd4 100644 --- a/code/builders/builder-manager/templates/template.ejs +++ b/code/builders/builder-manager/templates/template.ejs @@ -11,21 +11,39 @@ <% } else if (favicon.endsWith('.ico')) { %> <% } %> - - - + diff --git a/code/builders/builder-manager/vitest.config.ts b/code/builders/builder-manager/vitest.config.ts index 4799fffd6a5e..ea8b4ef14350 100644 --- a/code/builders/builder-manager/vitest.config.ts +++ b/code/builders/builder-manager/vitest.config.ts @@ -1,12 +1,10 @@ -/* eslint-disable import/no-extraneous-dependencies */ +// eslint-disable-next-line import/no-extraneous-dependencies import { defineConfig, mergeConfig } from 'vitest/config'; import { vitestCommonConfig } from '../../vitest.workspace'; export default mergeConfig( vitestCommonConfig, defineConfig({ - test: { - environment: 'node', - }, + // Add custom config here }) ); diff --git a/code/builders/builder-vite/input/iframe.html b/code/builders/builder-vite/input/iframe.html index 7720ef6b9482..23c280c02242 100644 --- a/code/builders/builder-vite/input/iframe.html +++ b/code/builders/builder-vite/input/iframe.html @@ -6,35 +6,39 @@ Storybook - - - - - + - + diff --git a/code/renderers/svelte/src/components/SlotDecorator.svelte b/code/renderers/svelte/src/components/SlotDecorator.svelte index 9de64db04c3d..cf5849113a25 100644 --- a/code/renderers/svelte/src/components/SlotDecorator.svelte +++ b/code/renderers/svelte/src/components/SlotDecorator.svelte @@ -1,6 +1,7 @@
{finalText}
diff --git a/code/renderers/svelte/template/stories/args.stories.js b/code/renderers/svelte/template/stories/args.stories.js index 71544066ecd1..c272310cb131 100644 --- a/code/renderers/svelte/template/stories/args.stories.js +++ b/code/renderers/svelte/template/stories/args.stories.js @@ -23,7 +23,10 @@ export const RemountOnResetStoryArgs = { await expect(button).toHaveTextContent('You clicked: 0'); await userEvent.click(button); - await expect(button).toHaveTextContent('You clicked: 1'); + + await waitFor(async () => { + await expect(button).toHaveTextContent('You clicked: 1'); + }); await step("Update story args with { text: 'Changed' }", async () => { await channel.emit(UPDATE_STORY_ARGS, { storyId: id, updatedArgs: { text: 'Changed' } }); diff --git a/code/renderers/svelte/vitest.config.ts b/code/renderers/svelte/vitest.config.ts index 72328d0c4c97..80ff152070a0 100644 --- a/code/renderers/svelte/vitest.config.ts +++ b/code/renderers/svelte/vitest.config.ts @@ -5,7 +5,6 @@ import { vitestCommonConfig } from '../../vitest.workspace'; export default defineConfig( mergeConfig(vitestCommonConfig, { test: { - environment: 'jsdom', // setupFiles: ['./vitest-setup.ts'], }, plugins: [ diff --git a/code/renderers/vue3/package.json b/code/renderers/vue3/package.json index b50d57c870ca..897ff178e30b 100644 --- a/code/renderers/vue3/package.json +++ b/code/renderers/vue3/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/vue3", - "version": "8.1.0-alpha.7", + "version": "8.2.0-alpha.8", "description": "Storybook Vue 3 renderer", "keywords": [ "storybook" @@ -23,14 +23,14 @@ ".": { "types": "./dist/index.d.ts", "node": "./dist/index.js", - "require": "./dist/index.js", - "import": "./dist/index.mjs" + "import": "./dist/index.mjs", + "require": "./dist/index.js" }, "./experimental-playwright": { "types": "./dist/playwright.d.ts", "node": "./dist/playwright.js", - "require": "./dist/playwright.js", - "import": "./dist/playwright.mjs" + "import": "./dist/playwright.mjs", + "require": "./dist/playwright.js" }, "./preset": "./preset.js", "./dist/entry-preview.mjs": "./dist/entry-preview.mjs", @@ -40,6 +40,16 @@ "main": "dist/index.js", "module": "dist/index.mjs", "types": "dist/index.d.ts", + "typesVersions": { + "*": { + "*": [ + "dist/index.d.ts" + ], + "experimental-playwright": [ + "dist/playwright.d.ts" + ] + } + }, "files": [ "dist/**/*", "template/cli/**/*", @@ -91,5 +101,5 @@ ], "platform": "browser" }, - "gitHead": "e6a7fd8a655c69780bc20b9749c2699e44beae17" + "gitHead": "e6a7fd8a655c69780bc20b9749c2699e44beae16" } diff --git a/code/renderers/vue3/src/__tests__/composeStories/portable-stories.test.ts b/code/renderers/vue3/src/__tests__/composeStories/portable-stories.test.ts index 84e34a189f31..3c2d1d42727c 100644 --- a/code/renderers/vue3/src/__tests__/composeStories/portable-stories.test.ts +++ b/code/renderers/vue3/src/__tests__/composeStories/portable-stories.test.ts @@ -1,3 +1,5 @@ +// @vitest-environment happy-dom + /// ; import { it, expect, vi, describe } from 'vitest'; import { render, screen } from '@testing-library/vue'; @@ -71,7 +73,7 @@ describe('projectAnnotations', () => { it('renders with custom projectAnnotations via composeStory params', () => { const WithPortugueseText = composeStory(stories.CSF2StoryWithLocale, stories.default, { - globals: { locale: 'pt' }, + initialGlobals: { locale: 'pt' }, }); const { getByText } = render(WithPortugueseText); const buttonElement = getByText('Olá!'); diff --git a/code/renderers/vue3/src/docs/tests-meta-components/meta-components.ts b/code/renderers/vue3/src/docs/tests-meta-components/meta-components.ts index ad10ccc96a52..5fb9e1bf028f 100644 --- a/code/renderers/vue3/src/docs/tests-meta-components/meta-components.ts +++ b/code/renderers/vue3/src/docs/tests-meta-components/meta-components.ts @@ -1217,6 +1217,8 @@ export const referenceTypeEvents: TestComponent = { events: [ { name: 'foo', + description: '', + tags: [], type: '[data?: { foo: string; } | undefined]', signature: '(event: "foo", data?: { foo: string; } | undefined): void', declarations: [], @@ -1248,6 +1250,8 @@ export const referenceTypeEvents: TestComponent = { }, { name: 'bar', + description: '', + tags: [], type: '[value: { year: number; title?: any; }]', signature: '(event: "bar", value: { year: number; title?: any; }): void', declarations: [], @@ -1282,6 +1286,8 @@ export const referenceTypeEvents: TestComponent = { }, { name: 'baz', + description: '', + tags: [], type: '[]', signature: '(event: "baz"): void', declarations: [], diff --git a/code/renderers/vue3/template/stories/preview.js b/code/renderers/vue3/template/stories/preview.js index 2bee659276ae..8cfbdfada3ab 100644 --- a/code/renderers/vue3/template/stories/preview.js +++ b/code/renderers/vue3/template/stories/preview.js @@ -1,4 +1,5 @@ import { global as globalThis } from '@storybook/global'; + // eslint-disable-next-line import/no-extraneous-dependencies import { setup } from '@storybook/vue3'; diff --git a/code/renderers/vue3/template/stories_vue3-vite-default-ts/component-meta/DefineModel.stories.ts b/code/renderers/vue3/template/stories_vue3-vite-default-ts/component-meta/DefineModel.stories.ts new file mode 100644 index 000000000000..be2f612287a5 --- /dev/null +++ b/code/renderers/vue3/template/stories_vue3-vite-default-ts/component-meta/DefineModel.stories.ts @@ -0,0 +1,16 @@ +import type { Meta, StoryObj } from '@storybook/vue3'; +import Component from './define-model/component.vue'; + +const meta = { + component: Component, + tags: ['autodocs'], +} satisfies Meta; + +type Story = StoryObj; +export default meta; + +export const Default: Story = { + args: { + modelValue: 'Test value', + }, +}; diff --git a/code/renderers/vue3/template/stories_vue3-vite-default-ts/component-meta/DefineSlots.stories.ts b/code/renderers/vue3/template/stories_vue3-vite-default-ts/component-meta/DefineSlots.stories.ts new file mode 100644 index 000000000000..1a06ce6bb504 --- /dev/null +++ b/code/renderers/vue3/template/stories_vue3-vite-default-ts/component-meta/DefineSlots.stories.ts @@ -0,0 +1,18 @@ +import type { Meta, StoryObj } from '@storybook/vue3'; +import Component from './define-slots/component.vue'; + +const meta = { + component: Component, + tags: ['autodocs'], +} satisfies Meta; + +type Story = StoryObj; +export default meta; + +export const Default: Story = { + args: { + default: ({ num }) => `Default slot { num=${num} }`, + named: ({ str }) => `Named slot { str=${str} }`, + vbind: ({ num, str }) => `Named v-bind slot { num=${num}, str=${str} }`, + }, +}; diff --git a/code/renderers/vue3/template/stories_vue3-vite-default-ts/component-meta/define-model/component.vue b/code/renderers/vue3/template/stories_vue3-vite-default-ts/component-meta/define-model/component.vue new file mode 100644 index 000000000000..0b1ea4b3a3d6 --- /dev/null +++ b/code/renderers/vue3/template/stories_vue3-vite-default-ts/component-meta/define-model/component.vue @@ -0,0 +1,7 @@ + + + diff --git a/code/renderers/vue3/template/stories_vue3-vite-default-ts/component-meta/define-slots/component.vue b/code/renderers/vue3/template/stories_vue3-vite-default-ts/component-meta/define-slots/component.vue new file mode 100644 index 000000000000..94533f010bdb --- /dev/null +++ b/code/renderers/vue3/template/stories_vue3-vite-default-ts/component-meta/define-slots/component.vue @@ -0,0 +1,22 @@ + + + diff --git a/code/renderers/vue3/vitest.config.ts b/code/renderers/vue3/vitest.config.ts index 6f50b8d43d10..0917fe16816e 100644 --- a/code/renderers/vue3/vitest.config.ts +++ b/code/renderers/vue3/vitest.config.ts @@ -7,9 +7,6 @@ export default mergeConfig( vitestCommonConfig, // @ts-expect-error seems like there's a type mismatch in the vue plugin defineConfig({ - test: { - environment: 'jsdom', - }, // @ts-expect-error seems like there's a type mismatch in the vue plugin plugins: [vue()], }) diff --git a/code/renderers/web-components/package.json b/code/renderers/web-components/package.json index 0b14130edbac..3dbf30b06b0b 100644 --- a/code/renderers/web-components/package.json +++ b/code/renderers/web-components/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/web-components", - "version": "8.1.0-alpha.7", + "version": "8.2.0-alpha.8", "description": "Storybook web-components renderer", "keywords": [ "lit", @@ -26,8 +26,8 @@ ".": { "types": "./dist/index.d.ts", "node": "./dist/index.js", - "require": "./dist/index.js", - "import": "./dist/index.mjs" + "import": "./dist/index.mjs", + "require": "./dist/index.js" }, "./preset": "./preset.js", "./dist/entry-preview.mjs": "./dist/entry-preview.mjs", @@ -85,5 +85,5 @@ ], "platform": "browser" }, - "gitHead": "e6a7fd8a655c69780bc20b9749c2699e44beae17" + "gitHead": "e6a7fd8a655c69780bc20b9749c2699e44beae16" } diff --git a/code/renderers/web-components/src/docs/custom-elements.test.ts b/code/renderers/web-components/src/docs/custom-elements.test.ts index a67e903492ab..e8ce0d34159f 100644 --- a/code/renderers/web-components/src/docs/custom-elements.test.ts +++ b/code/renderers/web-components/src/docs/custom-elements.test.ts @@ -1,3 +1,5 @@ +// @vitest-environment happy-dom + /* eslint-disable no-underscore-dangle */ import { describe, it, expect, beforeEach, afterEach } from 'vitest'; import { global } from '@storybook/global'; diff --git a/code/renderers/web-components/src/docs/sourceDecorator.test.ts b/code/renderers/web-components/src/docs/sourceDecorator.test.ts index 8a1ac068c74f..f95d21fa7a36 100644 --- a/code/renderers/web-components/src/docs/sourceDecorator.test.ts +++ b/code/renderers/web-components/src/docs/sourceDecorator.test.ts @@ -1,3 +1,5 @@ +// @vitest-environment happy-dom + import { html, render } from 'lit'; import type { Mock } from 'vitest'; import { describe, beforeEach, it, vi, expect } from 'vitest'; diff --git a/code/renderers/web-components/src/docs/web-components-properties.test.ts b/code/renderers/web-components/src/docs/web-components-properties.test.ts index ed80c4ca4069..09e39d1ad9d7 100644 --- a/code/renderers/web-components/src/docs/web-components-properties.test.ts +++ b/code/renderers/web-components/src/docs/web-components-properties.test.ts @@ -1,3 +1,5 @@ +// @vitest-environment happy-dom + import path from 'path'; import { vi, describe, it, expect } from 'vitest'; import fs from 'fs'; diff --git a/code/renderers/web-components/vitest.config.ts b/code/renderers/web-components/vitest.config.ts index 762615861854..ea8b4ef14350 100644 --- a/code/renderers/web-components/vitest.config.ts +++ b/code/renderers/web-components/vitest.config.ts @@ -1,12 +1,10 @@ -/* eslint-disable import/no-extraneous-dependencies */ +// eslint-disable-next-line import/no-extraneous-dependencies import { defineConfig, mergeConfig } from 'vitest/config'; import { vitestCommonConfig } from '../../vitest.workspace'; export default mergeConfig( vitestCommonConfig, defineConfig({ - test: { - environment: 'jsdom', - }, + // Add custom config here }) ); diff --git a/code/tsconfig.json b/code/tsconfig.json index d26e5efa6de8..800b83594d3a 100644 --- a/code/tsconfig.json +++ b/code/tsconfig.json @@ -19,12 +19,5 @@ "noUnusedLocals": true, "strict": true }, - "exclude": ["dist", "**/dist", "node_modules", "**/node_modules"], - "ts-node": { - "transpileOnly": true, - "files": true, - "compilerOptions": { - "types": ["node"] - } - } + "exclude": ["dist", "**/dist", "node_modules", "**/node_modules"] } diff --git a/code/ui/.storybook/main.ts b/code/ui/.storybook/main.ts index 03dea1aea08d..72ec5445cb60 100644 --- a/code/ui/.storybook/main.ts +++ b/code/ui/.storybook/main.ts @@ -30,6 +30,10 @@ const allStories = [ directory: '../../addons/onboarding/src', titlePrefix: '@addons/onboarding', }, + { + directory: '../../addons/interactions/src', + titlePrefix: '@addons/interactions', + }, ]; /** diff --git a/code/ui/blocks/package.json b/code/ui/blocks/package.json index 3369d91ea08e..ac3e11f88375 100644 --- a/code/ui/blocks/package.json +++ b/code/ui/blocks/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/blocks", - "version": "8.1.0-alpha.7", + "version": "8.2.0-alpha.8", "description": "Storybook Doc Blocks", "keywords": [ "storybook" @@ -24,8 +24,8 @@ ".": { "types": "./dist/index.d.ts", "node": "./dist/index.js", - "require": "./dist/index.js", - "import": "./dist/index.mjs" + "import": "./dist/index.mjs", + "require": "./dist/index.js" }, "./package.json": "./package.json" }, @@ -48,7 +48,7 @@ "@storybook/client-logger": "workspace:*", "@storybook/components": "workspace:*", "@storybook/core-events": "workspace:*", - "@storybook/csf": "^0.1.6", + "@storybook/csf": "^0.1.8", "@storybook/docs-tools": "workspace:*", "@storybook/global": "^5.0.0", "@storybook/icons": "^1.2.5", @@ -60,7 +60,7 @@ "color-convert": "^2.0.1", "dequal": "^2.0.2", "lodash": "^4.17.21", - "markdown-to-jsx": "7.3.2", + "markdown-to-jsx": "^7.4.5", "memoizerific": "^1.11.3", "polished": "^4.2.2", "react-colorful": "^5.1.2", @@ -75,8 +75,8 @@ "@types/color-convert": "^2.0.0" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta" }, "peerDependenciesMeta": { "react": { @@ -94,5 +94,5 @@ "./src/index.ts" ] }, - "gitHead": "e6a7fd8a655c69780bc20b9749c2699e44beae17" + "gitHead": "e6a7fd8a655c69780bc20b9749c2699e44beae16" } diff --git a/code/ui/blocks/src/blocks/Stories.stories.tsx b/code/ui/blocks/src/blocks/Stories.stories.tsx index 9462f5f2a2dd..0c91aec638e6 100644 --- a/code/ui/blocks/src/blocks/Stories.stories.tsx +++ b/code/ui/blocks/src/blocks/Stories.stories.tsx @@ -26,3 +26,13 @@ export const DifferentToolbars: Story = { relativeCsfPaths: ['../examples/StoriesParameters.stories'], }, }; +export const NoAutodocs: Story = { + parameters: { + relativeCsfPaths: ['../examples/ButtonNoAutodocs.stories'], + }, +}; +export const SomeAutodocs: Story = { + parameters: { + relativeCsfPaths: ['../examples/ButtonSomeAutodocs.stories'], + }, +}; diff --git a/code/ui/blocks/src/blocks/Stories.tsx b/code/ui/blocks/src/blocks/Stories.tsx index 8681e4151c4d..c2b5c53dc729 100644 --- a/code/ui/blocks/src/blocks/Stories.tsx +++ b/code/ui/blocks/src/blocks/Stories.tsx @@ -34,6 +34,17 @@ export const Stories: FC = ({ title = 'Stories', includePrimary = if (filter) { stories = stories.filter((story) => filter(story, getStoryContext(story))); } + // NOTE: this should be part of the default filter function. However, there is currently + // no way to distinguish a Stories block in an autodocs page from Stories in an MDX file + // making https://github.com/storybookjs/storybook/pull/26634 an unintentional breaking change. + // + // The new behavior here is that if NONE of the stories in the autodocs page are tagged + // with 'autodocs', we show all stories. If ANY of the stories have autodocs then we use + // the new behavior. + const hasAutodocsTaggedStory = stories.some((story) => story.tags?.includes('autodocs')); + if (hasAutodocsTaggedStory) { + stories = stories.filter((story) => story.tags?.includes('autodocs')); + } if (!includePrimary) stories = stories.slice(1); diff --git a/code/ui/blocks/src/blocks/Story.stories.tsx b/code/ui/blocks/src/blocks/Story.stories.tsx index b3f8108feb23..6dcd2bfa9fb7 100644 --- a/code/ui/blocks/src/blocks/Story.stories.tsx +++ b/code/ui/blocks/src/blocks/Story.stories.tsx @@ -171,6 +171,9 @@ export const WithInteractionsAutoplayInParameters: Story = { export const ForceInitialArgs: Story = { ...StoryComponentStories.ForceInitialArgs, + parameters: { + chromatic: { disableSnapshot: true }, + }, args: { of: ButtonStories.Primary, storyExport: ButtonStories.Primary, diff --git a/code/ui/blocks/src/blocks/Subtitle.stories.tsx b/code/ui/blocks/src/blocks/Subtitle.stories.tsx index 4fe4a2ef6a19..6ee1e865baba 100644 --- a/code/ui/blocks/src/blocks/Subtitle.stories.tsx +++ b/code/ui/blocks/src/blocks/Subtitle.stories.tsx @@ -99,6 +99,6 @@ export const OfStringMetaAttached: Story = { parameters: { relativeCsfPaths: ['../examples/Button.stories'], attached: true }, }; export const Children: Story = { - parameters: { relativeCsfPaths: ['../examples/Button.stories'], attached: true }, + parameters: { relativeCsfPaths: ['../examples/Button.stories'], attached: false }, render: () => This subtitle is a string passed as a children, }; diff --git a/code/ui/blocks/src/blocks/Subtitle.tsx b/code/ui/blocks/src/blocks/Subtitle.tsx index 9b7556e9c7c6..055ed047cc12 100644 --- a/code/ui/blocks/src/blocks/Subtitle.tsx +++ b/code/ui/blocks/src/blocks/Subtitle.tsx @@ -25,8 +25,17 @@ export const Subtitle: FunctionComponent = (props) => { throw new Error('Unexpected `of={undefined}`, did you mistype a CSF file reference?'); } - const { preparedMeta } = useOf(of || 'meta', ['meta']); - const { componentSubtitle, docs } = preparedMeta.parameters || {}; + let preparedMeta; + try { + preparedMeta = useOf(of || 'meta', ['meta']).preparedMeta; + } catch (error) { + if (children && !error.message.includes('did you forget to use ?')) { + // ignore error about unattached CSF since we can still render children + throw error; + } + } + + const { componentSubtitle, docs } = preparedMeta?.parameters || {}; if (componentSubtitle) { deprecate( diff --git a/code/ui/blocks/src/blocks/Title.tsx b/code/ui/blocks/src/blocks/Title.tsx index 55b85ebad717..28ac06136ef1 100644 --- a/code/ui/blocks/src/blocks/Title.tsx +++ b/code/ui/blocks/src/blocks/Title.tsx @@ -42,7 +42,7 @@ export const Title: FunctionComponent = (props) => { } } - const content = children || extractTitle(preparedMeta.title); + const content = children || extractTitle(preparedMeta?.title); return content ? {content} : null; }; diff --git a/code/ui/blocks/src/blocks/external/ExternalPreview.ts b/code/ui/blocks/src/blocks/external/ExternalPreview.ts index bb6fc24764f2..203ac14ee3a0 100644 --- a/code/ui/blocks/src/blocks/external/ExternalPreview.ts +++ b/code/ui/blocks/src/blocks/external/ExternalPreview.ts @@ -31,7 +31,7 @@ export class ExternalPreview extends Prev private titles = new ConstantMap('title-'); - private storyIndex: StoryIndex = { v: 4, entries: {} }; + private storyIndex: StoryIndex = { v: 5, entries: {} }; private moduleExportsByImportPath: Record = {}; diff --git a/code/ui/blocks/src/components/Source.tsx b/code/ui/blocks/src/components/Source.tsx index 5495d89c5981..76fb8f1c4f05 100644 --- a/code/ui/blocks/src/components/Source.tsx +++ b/code/ui/blocks/src/components/Source.tsx @@ -98,7 +98,7 @@ const Source: FunctionComponent = ({ language, code, dark, - format, + format = false, ...rest }) => { const { typography } = useTheme(); @@ -138,7 +138,4 @@ const Source: FunctionComponent = ({ ); }; -Source.defaultProps = { - format: false, -}; export { Source, StyledSyntaxHighlighter }; diff --git a/code/ui/blocks/src/components/Story.stories.tsx b/code/ui/blocks/src/components/Story.stories.tsx index fa1767d747af..b393a7e4614d 100644 --- a/code/ui/blocks/src/components/Story.stories.tsx +++ b/code/ui/blocks/src/components/Story.stories.tsx @@ -82,6 +82,9 @@ export const ForceInitialArgs = { forceInitialArgs: true, renderStoryToElement, }, + parameters: { + chromatic: { disableSnapshot: true }, + }, // test that it ignores updated args by emitting an arg update and assert that it isn't reflected in the DOM play: async ({ args, canvasElement, loaded }: PlayFunctionContext) => { const docsContext = loaded.docsContext as DocsContextProps; diff --git a/code/ui/blocks/src/components/Typeset.tsx b/code/ui/blocks/src/components/Typeset.tsx index 8fbfca58b568..76b70c998859 100644 --- a/code/ui/blocks/src/components/Typeset.tsx +++ b/code/ui/blocks/src/components/Typeset.tsx @@ -35,7 +35,7 @@ const Wrapper = styled.div(withReset, ({ theme }) => ({ export interface TypesetProps { fontFamily?: string; - fontSizes: string[]; + fontSizes: (string | number)[]; fontWeight?: number; sampleText?: string; } diff --git a/code/ui/blocks/src/controls/Color.tsx b/code/ui/blocks/src/controls/Color.tsx index b0ab993f3cff..1ac10a7531b2 100644 --- a/code/ui/blocks/src/controls/Color.tsx +++ b/code/ui/blocks/src/controls/Color.tsx @@ -2,7 +2,7 @@ import type { FC, ChangeEvent, FocusEvent } from 'react'; import React, { useCallback, useEffect, useMemo, useState } from 'react'; import { HexColorPicker, HslaStringColorPicker, RgbaStringColorPicker } from 'react-colorful'; import convert from 'color-convert'; -import throttle from 'lodash/throttle.js'; +import debounce from 'lodash/debounce.js'; import { styled } from '@storybook/theming'; import { TooltipNote, WithTooltip, Form } from '@storybook/components'; @@ -317,10 +317,10 @@ export const ColorControl: FC = ({ startOpen = false, argType, }) => { - const throttledOnChange = useCallback(throttle(onChange, 200), [onChange]); + const debouncedOnChange = useCallback(debounce(onChange, 200), [onChange]); const { value, realValue, updateValue, color, colorSpace, cycleColorSpace } = useColorInput( initialValue, - throttledOnChange + debouncedOnChange ); const { presets, addPreset } = usePresets(presetColors, color, colorSpace); const Picker = ColorPicker[colorSpace]; diff --git a/code/ui/blocks/src/controls/Date.tsx b/code/ui/blocks/src/controls/Date.tsx index 53eedf56c50c..938fc8c8c33b 100644 --- a/code/ui/blocks/src/controls/Date.tsx +++ b/code/ui/blocks/src/controls/Date.tsx @@ -74,15 +74,16 @@ export const DateControl: FC = ({ name, value, onChange, onFocus, onB useEffect(() => { if (valid !== false) { if (dateRef && dateRef.current) { - dateRef.current.value = formatDate(value); + dateRef.current.value = value ? formatDate(value) : ''; } if (timeRef && timeRef.current) { - timeRef.current.value = formatTime(value); + timeRef.current.value = value ? formatTime(value) : ''; } } }, [value]); const onDateChange = (e: ChangeEvent) => { + if (!e.target.value) return onChange(); const parsed = parseDate(e.target.value); const result = new Date(value); result.setFullYear(parsed.getFullYear(), parsed.getMonth(), parsed.getDate()); @@ -92,6 +93,7 @@ export const DateControl: FC = ({ name, value, onChange, onFocus, onB }; const onTimeChange = (e: ChangeEvent) => { + if (!e.target.value) return onChange(); const parsed = parseTime(e.target.value); const result = new Date(value); result.setHours(parsed.getHours()); diff --git a/code/ui/blocks/src/controls/options/Radio.tsx b/code/ui/blocks/src/controls/options/Radio.tsx index 76c3239e747a..022c23ccb7b3 100644 --- a/code/ui/blocks/src/controls/options/Radio.tsx +++ b/code/ui/blocks/src/controls/options/Radio.tsx @@ -86,7 +86,7 @@ export const RadioControl: FC = ({ onChange(options[e.currentTarget.value])} diff --git a/code/ui/blocks/src/controls/types.ts b/code/ui/blocks/src/controls/types.ts index 26460ff6184c..4da8dc198977 100644 --- a/code/ui/blocks/src/controls/types.ts +++ b/code/ui/blocks/src/controls/types.ts @@ -5,7 +5,7 @@ export interface ControlProps { value?: T; defaultValue?: T; argType?: ArgType; - onChange: (value: T) => T | void; + onChange: (value?: T) => T | void; onFocus?: (evt: any) => void; onBlur?: (evt: any) => void; } diff --git a/docs/snippets/solid/button-story-auto-docs.ts-4-9.mdx b/code/ui/blocks/src/examples/ButtonNoAutodocs.stories.tsx similarity index 62% rename from docs/snippets/solid/button-story-auto-docs.ts-4-9.mdx rename to code/ui/blocks/src/examples/ButtonNoAutodocs.stories.tsx index 164bb2d6617a..c934e70753f2 100644 --- a/docs/snippets/solid/button-story-auto-docs.ts-4-9.mdx +++ b/code/ui/blocks/src/examples/ButtonNoAutodocs.stories.tsx @@ -1,17 +1,15 @@ -```tsx -// Button.stories.ts|tsx - -import type { Meta } from 'storybook-solidjs'; - +import type { Meta, StoryObj } from '@storybook/react'; import { Button } from './Button'; const meta = { + title: 'examples/ButtonNoAutodocs', component: Button, - //👇 Enables auto-generated documentation for the component story - tags: ['autodocs'], argTypes: { backgroundColor: { control: 'color' }, }, + parameters: { + chromatic: { disable: true }, + }, } satisfies Meta; export default meta; @@ -26,8 +24,6 @@ export const Primary: Story = { export const Secondary: Story = { args: { - ...Primary.args, - primary: false, + label: 'Button', }, }; -``` diff --git a/docs/snippets/react/button-story-auto-docs.ts-4-9.mdx b/code/ui/blocks/src/examples/ButtonSomeAutodocs.stories.tsx similarity index 66% rename from docs/snippets/react/button-story-auto-docs.ts-4-9.mdx rename to code/ui/blocks/src/examples/ButtonSomeAutodocs.stories.tsx index 14f45d47dc56..dd5f7d227f49 100644 --- a/docs/snippets/react/button-story-auto-docs.ts-4-9.mdx +++ b/code/ui/blocks/src/examples/ButtonSomeAutodocs.stories.tsx @@ -1,17 +1,15 @@ -```ts -// Button.stories.ts|tsx - -import type { Meta } from '@storybook/react'; - +import type { Meta, StoryObj } from '@storybook/react'; import { Button } from './Button'; const meta = { + title: 'examples/ButtonSomeAutodocs', component: Button, - //👇 Enables auto-generated documentation for the component story - tags: ['autodocs'], argTypes: { backgroundColor: { control: 'color' }, }, + parameters: { + chromatic: { disable: true }, + }, } satisfies Meta; export default meta; @@ -25,9 +23,8 @@ export const Primary: Story = { }; export const Secondary: Story = { + tags: ['autodocs'], args: { - ...Primary.args, - primary: false, + label: 'Button', }, }; -``` diff --git a/code/ui/blocks/vitest.config.ts b/code/ui/blocks/vitest.config.ts index 12fa8dbe147f..03172200442f 100644 --- a/code/ui/blocks/vitest.config.ts +++ b/code/ui/blocks/vitest.config.ts @@ -4,8 +4,6 @@ import { vitestCommonConfig } from '../../vitest.workspace'; export default mergeConfig( vitestCommonConfig, defineConfig({ - test: { - environment: 'jsdom', - }, + // Add custom config here }) ); diff --git a/code/ui/components/package.json b/code/ui/components/package.json index b1ceb03faa85..42d7c41c3eee 100644 --- a/code/ui/components/package.json +++ b/code/ui/components/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/components", - "version": "8.1.0-alpha.7", + "version": "8.2.0-alpha.8", "description": "Core Storybook Components", "keywords": [ "storybook" @@ -24,13 +24,13 @@ ".": { "types": "./dist/index.d.ts", "node": "./dist/index.js", - "require": "./dist/index.js", - "import": "./dist/index.mjs" + "import": "./dist/index.mjs", + "require": "./dist/index.js" }, "./html": { "types": "./dist/html.d.ts", - "require": "./dist/html.js", - "import": "./dist/html.mjs" + "import": "./dist/html.mjs", + "require": "./dist/html.js" }, "./package.json": "./package.json" }, @@ -62,7 +62,7 @@ "@radix-ui/react-dialog": "^1.0.5", "@radix-ui/react-slot": "^1.0.2", "@storybook/client-logger": "workspace:*", - "@storybook/csf": "^0.1.6", + "@storybook/csf": "^0.1.8", "@storybook/global": "^5.0.0", "@storybook/icons": "^1.2.5", "@storybook/theming": "workspace:*", @@ -87,8 +87,8 @@ "use-resize-observer": "^9.1.0" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta" }, "publishConfig": { "access": "public" @@ -98,5 +98,5 @@ "./src/index.ts" ] }, - "gitHead": "e6a7fd8a655c69780bc20b9749c2699e44beae17" + "gitHead": "e6a7fd8a655c69780bc20b9749c2699e44beae16" } diff --git a/code/ui/components/src/components/Modal/Modal.styled.tsx b/code/ui/components/src/components/Modal/Modal.styled.tsx index b60e512b74ab..07dd2f66d44c 100644 --- a/code/ui/components/src/components/Modal/Modal.styled.tsx +++ b/code/ui/components/src/components/Modal/Modal.styled.tsx @@ -101,6 +101,8 @@ export const Title = styled(Dialog.Title)(({ theme }) => ({ })); export const Description = styled(Dialog.Description)(({ theme }) => ({ + position: 'relative', + zIndex: 1, margin: 0, fontSize: theme.typography.size.s2, })); diff --git a/code/ui/components/src/components/form/field/field.tsx b/code/ui/components/src/components/form/field/field.tsx index 19b21ae8d2f7..bf4e5f00c1db 100644 --- a/code/ui/components/src/components/form/field/field.tsx +++ b/code/ui/components/src/components/form/field/field.tsx @@ -38,7 +38,3 @@ export const Field = ({ label, children, ...props }: FieldProps) => ( {children} ); - -Field.defaultProps = { - label: undefined, -}; diff --git a/code/ui/components/src/components/tabs/tabs.tsx b/code/ui/components/src/components/tabs/tabs.tsx index 3d90fb3f9e58..de3eb731d3be 100644 --- a/code/ui/components/src/components/tabs/tabs.tsx +++ b/code/ui/components/src/components/tabs/tabs.tsx @@ -134,14 +134,14 @@ export interface TabsProps { export const Tabs: FC = memo( ({ children, - selected, + selected = null, actions, - absolute, - bordered, - tools, + absolute = false, + bordered = false, + tools = null, backgroundColor, - id: htmlId, - menuName, + id: htmlId = null, + menuName = 'Tabs', emptyState, showToolsWhenEmpty, }) => { @@ -206,15 +206,6 @@ export const Tabs: FC = memo( } ); Tabs.displayName = 'Tabs'; -Tabs.defaultProps = { - id: null, - children: null, - tools: null, - selected: null, - absolute: false, - bordered: false, - menuName: 'Tabs', -}; export interface TabsStateProps { children: TabsProps['children']; diff --git a/code/ui/components/src/components/tooltip/ListItem.tsx b/code/ui/components/src/components/tooltip/ListItem.tsx index 34921e65d5ae..5d5ebf763b99 100644 --- a/code/ui/components/src/components/tooltip/ListItem.tsx +++ b/code/ui/components/src/components/tooltip/ListItem.tsx @@ -186,17 +186,18 @@ export interface ListItemProps extends Omit, 'href' } const ListItem = ({ - loading, - title, - center, - right, - icon, - active, - disabled, + loading = false, + title = Loading state, + center = null, + right = null, + + active = false, + disabled = false, isIndented, - href, - onClick, - LinkWrapper, + href = null, + onClick = null, + icon, + LinkWrapper = null, ...rest }: ListItemProps) => { const itemProps = getItemProps(onClick, href, LinkWrapper); @@ -220,16 +221,4 @@ const ListItem = ({ ); }; -ListItem.defaultProps = { - loading: false, - title: Loading state, - center: null, - right: null, - active: false, - disabled: false, - href: null, - LinkWrapper: null, - onClick: null, -}; - export default ListItem; diff --git a/code/ui/components/src/components/tooltip/Tooltip.tsx b/code/ui/components/src/components/tooltip/Tooltip.tsx index d4ccde5e41df..6f14a148bfeb 100644 --- a/code/ui/components/src/components/tooltip/Tooltip.tsx +++ b/code/ui/components/src/components/tooltip/Tooltip.tsx @@ -126,7 +126,16 @@ export interface TooltipProps { export const Tooltip = React.forwardRef( ( - { placement, hasChrome, children, arrowProps, tooltipRef, color, withArrows, ...props }, + { + placement = 'top', + hasChrome = true, + children, + arrowProps = {}, + tooltipRef, + color, + withArrows, + ...props + }, ref ) => { return ( @@ -139,10 +148,3 @@ export const Tooltip = React.forwardRef( ); Tooltip.displayName = 'Tooltip'; -Tooltip.defaultProps = { - color: undefined, - tooltipRef: undefined, - hasChrome: true, - placement: 'top', - arrowProps: {}, -}; diff --git a/code/ui/components/src/components/tooltip/TooltipLinkList.tsx b/code/ui/components/src/components/tooltip/TooltipLinkList.tsx index 8c9d1b6564ad..fcb88ca25545 100644 --- a/code/ui/components/src/components/tooltip/TooltipLinkList.tsx +++ b/code/ui/components/src/components/tooltip/TooltipLinkList.tsx @@ -58,7 +58,7 @@ export interface TooltipLinkListProps { LinkWrapper?: LinkWrapperType; } -export const TooltipLinkList = ({ links, LinkWrapper }: TooltipLinkListProps) => { +export const TooltipLinkList = ({ links, LinkWrapper = null }: TooltipLinkListProps) => { const hasIcon = links.some((link) => link.icon); return ( @@ -68,7 +68,3 @@ export const TooltipLinkList = ({ links, LinkWrapper }: TooltipLinkListProps) => ); }; - -TooltipLinkList.defaultProps = { - LinkWrapper: ListItem.defaultProps.LinkWrapper, -}; diff --git a/code/ui/components/src/components/tooltip/TooltipMessage.tsx b/code/ui/components/src/components/tooltip/TooltipMessage.tsx index 1e47bb5481f5..7da93fc1474d 100644 --- a/code/ui/components/src/components/tooltip/TooltipMessage.tsx +++ b/code/ui/components/src/components/tooltip/TooltipMessage.tsx @@ -60,9 +60,3 @@ export const TooltipMessage = ({ title, desc, links }: TooltipMessageProps) => { ); }; - -TooltipMessage.defaultProps = { - title: null, - desc: null, - links: null, -}; diff --git a/code/ui/components/src/components/tooltip/WithTooltip.tsx b/code/ui/components/src/components/tooltip/WithTooltip.tsx index a95db5d76af2..b14015aa0d10 100644 --- a/code/ui/components/src/components/tooltip/WithTooltip.tsx +++ b/code/ui/components/src/components/tooltip/WithTooltip.tsx @@ -45,23 +45,42 @@ export interface WithTooltipPureProps // Pure, does not bind to the body const WithTooltipPure = ({ - svg, - trigger, - closeOnOutsideClick, - placement, - hasChrome, + svg = false, + trigger = 'click', + closeOnOutsideClick = false, + placement = 'top', + modifiers = [ + { + name: 'preventOverflow', + options: { + padding: 8, + }, + }, + { + name: 'offset', + options: { + offset: [8, 8], + }, + }, + { + name: 'arrow', + options: { + padding: 8, + }, + }, + ], + hasChrome = true, + defaultVisible = false, withArrows, offset, tooltip, children, closeOnTriggerHidden, mutationObserverOptions, - defaultVisible, delayHide, visible, interactive, delayShow, - modifiers, strategy, followCursor, onVisibleChange, @@ -120,35 +139,6 @@ const WithTooltipPure = ({ ); }; -WithTooltipPure.defaultProps = { - svg: false, - trigger: 'click', - closeOnOutsideClick: false, - placement: 'top', - modifiers: [ - { - name: 'preventOverflow', - options: { - padding: 8, - }, - }, - { - name: 'offset', - options: { - offset: [8, 8], - }, - }, - { - name: 'arrow', - options: { - padding: 8, - }, - }, - ], - hasChrome: true, - defaultVisible: false, -}; - export interface WithTooltipStateProps extends Omit { startOpen?: boolean; onVisibleChange?: (visible: boolean) => void | boolean; diff --git a/code/ui/components/src/components/typography/link/link.test.tsx b/code/ui/components/src/components/typography/link/link.test.tsx index 08b6eae09103..4232b9005446 100644 --- a/code/ui/components/src/components/typography/link/link.test.tsx +++ b/code/ui/components/src/components/typography/link/link.test.tsx @@ -1,3 +1,5 @@ +// @vitest-environment happy-dom + import { vi, describe, afterEach, it, expect } from 'vitest'; import type { AnchorHTMLAttributes } from 'react'; import React from 'react'; diff --git a/code/ui/components/vitest.config.ts b/code/ui/components/vitest.config.ts index 12fa8dbe147f..03172200442f 100644 --- a/code/ui/components/vitest.config.ts +++ b/code/ui/components/vitest.config.ts @@ -4,8 +4,6 @@ import { vitestCommonConfig } from '../../vitest.workspace'; export default mergeConfig( vitestCommonConfig, defineConfig({ - test: { - environment: 'jsdom', - }, + // Add custom config here }) ); diff --git a/code/ui/manager/package.json b/code/ui/manager/package.json index 0c8e86d7bdaa..fdbca8a00830 100644 --- a/code/ui/manager/package.json +++ b/code/ui/manager/package.json @@ -1,6 +1,6 @@ { "name": "@storybook/manager", - "version": "8.1.0-alpha.7", + "version": "8.2.0-alpha.8", "description": "Core Storybook UI", "keywords": [ "storybook" @@ -95,7 +95,7 @@ "fs-extra": "^11.1.0", "fuse.js": "^3.6.1", "lodash": "^4.17.21", - "markdown-to-jsx": "7.3.2", + "markdown-to-jsx": "^7.4.5", "memoizerific": "^1.11.3", "polished": "^4.2.2", "qs": "^6.10.0", @@ -127,5 +127,5 @@ "./src/globals-module-info.ts" ] }, - "gitHead": "e6a7fd8a655c69780bc20b9749c2699e44beae17" + "gitHead": "e6a7fd8a655c69780bc20b9749c2699e44beae16" } diff --git a/code/ui/manager/src/components/layout/Layout.tsx b/code/ui/manager/src/components/layout/Layout.tsx index a17636ceadbd..3df7a5900dfb 100644 --- a/code/ui/manager/src/components/layout/Layout.tsx +++ b/code/ui/manager/src/components/layout/Layout.tsx @@ -81,7 +81,7 @@ const useLayoutSyncingState = ({ useLayoutEffect(() => { if ( internalDraggingSizeState.isDragging || // wait with syncing managerLayoutState until user is done dragging - layoutStateIsEqual(prevManagerLayoutStateRef.current, internalDraggingSizeState) // don't sync managerLayoutState if it doesn't differ from internalDraggingSizeState + layoutStateIsEqual(managerLayoutState, internalDraggingSizeState) // don't sync managerLayoutState if it doesn't differ from internalDraggingSizeStatee) ) { return; } @@ -95,6 +95,7 @@ const useLayoutSyncingState = ({ ...nextState, }; setManagerLayoutState(nextState); + // eslint-disable-next-line react-hooks/exhaustive-deps }, [internalDraggingSizeState, setManagerLayoutState]); const isPagesShown = diff --git a/code/ui/manager/src/components/mobile/navigation/MobileNavigation.tsx b/code/ui/manager/src/components/mobile/navigation/MobileNavigation.tsx index 9ecee759fb06..ee3b8aa1a00d 100644 --- a/code/ui/manager/src/components/mobile/navigation/MobileNavigation.tsx +++ b/code/ui/manager/src/components/mobile/navigation/MobileNavigation.tsx @@ -19,16 +19,17 @@ interface MobileNavigationProps { */ const useFullStoryName = () => { const { index } = useStorybookState(); - const currentStory = useStorybookApi().getCurrentStoryData(); + const api = useStorybookApi(); + const currentStory = api.getCurrentStoryData(); if (!currentStory) return ''; - let fullStoryName = currentStory.renderLabel?.(currentStory) || currentStory.name; + let fullStoryName = currentStory.renderLabel?.(currentStory, api) || currentStory.name; let node = index[currentStory.id]; while ('parent' in node && node.parent && index[node.parent] && fullStoryName.length < 24) { node = index[node.parent]; - const parentName = node.renderLabel?.(node) || node.name; + const parentName = node.renderLabel?.(node, api) || node.name; fullStoryName = `${parentName}/${fullStoryName}`; } return fullStoryName; diff --git a/code/ui/manager/src/components/notifications/NotificationItem.stories.tsx b/code/ui/manager/src/components/notifications/NotificationItem.stories.tsx index af4c7fcc8e57..5ed3ee4b25cc 100644 --- a/code/ui/manager/src/components/notifications/NotificationItem.stories.tsx +++ b/code/ui/manager/src/components/notifications/NotificationItem.stories.tsx @@ -99,8 +99,8 @@ export const Clickable: Story = { }, play: async ({ args, canvasElement }) => { const canvas = within(canvasElement); - const [button] = await canvas.findAllByRole('button'); - await userEvent.click(button); + const notification = await canvas.findByText('Storybook cool!'); + await userEvent.click(notification); await expect(args.notification.onClick).toHaveBeenCalledWith({ onDismiss: expect.anything() }); }, }; @@ -218,7 +218,7 @@ export const BookIconLongSubHeadline: Story = { content: { headline: 'Storybook has a book icon!', subHeadline: - 'Find out more! by clicking on on buttons and downloading some applications. Find out more! by clicking on buttons and downloading some applications', + 'Find out more! by clicking on buttons and downloading some applications. Find out more! by clicking on buttons and downloading some applications', }, icon: , link: undefined, diff --git a/code/ui/manager/src/components/sidebar/FileSearchList.stories.tsx b/code/ui/manager/src/components/sidebar/FileSearchList.stories.tsx index f2fb798d5992..597b8b82581c 100644 --- a/code/ui/manager/src/components/sidebar/FileSearchList.stories.tsx +++ b/code/ui/manager/src/components/sidebar/FileSearchList.stories.tsx @@ -43,32 +43,38 @@ export const WithResults: Story = { const exportedElement1 = await findByText(canvasElement, 'module-multiple-exports'); fireEvent.click(exportedElement1); - expect(args.onNewStory).toHaveBeenCalledWith({ - selectedItemId: 'src/module-multiple-exports.js_0', - componentExportName: 'default', - componentFilePath: 'src/module-multiple-exports.js', - componentIsDefaultExport: true, - }); + expect(args.onNewStory).toHaveBeenCalledWith( + expect.objectContaining({ + selectedItemId: 'src/module-multiple-exports.js_0', + componentExportName: 'default', + componentFilePath: 'src/module-multiple-exports.js', + componentIsDefaultExport: true, + }) + ); const exportedElement2 = await findByText(canvasElement, 'namedExport'); fireEvent.click(exportedElement2); - expect(args.onNewStory).toHaveBeenCalledWith({ - selectedItemId: 'src/module-multiple-exports.js_1', - componentExportName: 'namedExport', - componentFilePath: 'src/module-multiple-exports.js', - componentIsDefaultExport: false, - }); + expect(args.onNewStory).toHaveBeenCalledWith( + expect.objectContaining({ + selectedItemId: 'src/module-multiple-exports.js_1', + componentExportName: 'namedExport', + componentFilePath: 'src/module-multiple-exports.js', + componentIsDefaultExport: false, + }) + ); const singleExport = await findByText(canvasElement, 'module-single-export.js'); fireEvent.click(singleExport); - expect(args.onNewStory).toHaveBeenCalledWith({ - selectedItemId: 'src/module-single-export.js', - componentExportName: 'default', - componentFilePath: 'src/module-single-export.js', - componentIsDefaultExport: true, - }); + expect(args.onNewStory).toHaveBeenCalledWith( + expect.objectContaining({ + selectedItemId: 'src/module-single-export.js', + componentExportName: 'default', + componentFilePath: 'src/module-single-export.js', + componentIsDefaultExport: true, + }) + ); expect(args.onNewStory).toHaveBeenCalledTimes(3); diff --git a/code/ui/manager/src/components/sidebar/Sidebar.stories.tsx b/code/ui/manager/src/components/sidebar/Sidebar.stories.tsx index 46c3d7c14979..6d49c03923b6 100644 --- a/code/ui/manager/src/components/sidebar/Sidebar.stories.tsx +++ b/code/ui/manager/src/components/sidebar/Sidebar.stories.tsx @@ -3,7 +3,7 @@ import React from 'react'; import type { IndexHash, State } from '@storybook/manager-api'; import { ManagerContext, types } from '@storybook/manager-api'; import type { StoryObj, Meta } from '@storybook/react'; -import { within, userEvent, expect } from '@storybook/test'; +import { within, userEvent, expect, fn } from '@storybook/test'; import type { Addon_SidebarTopType } from '@storybook/types'; import { Button, IconButton } from '@storybook/components'; import { FaceHappyIcon } from '@storybook/icons'; @@ -55,10 +55,13 @@ const meta = { }, }, api: { - emit: () => {}, - on: () => {}, - off: () => {}, - getShortcutKeys: () => ({ search: ['control', 'shift', 's'] }), + emit: fn().mockName('api::emit'), + on: fn().mockName('api::on'), + off: fn().mockName('api::off'), + getShortcutKeys: fn(() => ({ search: ['control', 'shift', 's'] })).mockName( + 'api::getShortcutKeys' + ), + selectStory: fn().mockName('api::selectStory'), }, } as any } @@ -288,7 +291,7 @@ export const Scrolled: Story = { const scrollable = await canvasElement.querySelector('[data-radix-scroll-area-viewport]'); await step('expand component', async () => { const componentNode = await canvas.queryAllByText('Child A2')[1]; - userEvent.click(componentNode); + await userEvent.click(componentNode); }); await wait(100); await step('scroll to bottom', async () => { @@ -296,11 +299,11 @@ export const Scrolled: Story = { }); await step('toggle parent state', async () => { const button = await canvas.findByRole('button', { name: 'Change state' }); - button.click(); + await userEvent.click(button); }); await wait(100); // expect the scrollable to be scrolled to the bottom - expect(scrollable.scrollTop).toBe(scrollable.scrollHeight - scrollable.clientHeight); + await expect(scrollable.scrollTop).toBe(scrollable.scrollHeight - scrollable.clientHeight); }, }; diff --git a/code/ui/manager/src/components/sidebar/Tree.tsx b/code/ui/manager/src/components/sidebar/Tree.tsx index 42aa27ce694a..caa19f0cab4d 100644 --- a/code/ui/manager/src/components/sidebar/Tree.tsx +++ b/code/ui/manager/src/components/sidebar/Tree.tsx @@ -220,7 +220,8 @@ const Node = React.memo(function Node({ }} {...(item.type === 'docs' && { docsMode })} > - {(item.renderLabel as (i: typeof item) => React.ReactNode)?.(item) || item.name} + {(item.renderLabel as (i: typeof item, api: API) => React.ReactNode)?.(item, api) || + item.name} {isSelected && ( @@ -272,7 +273,7 @@ const Node = React.memo(function Node({ aria-expanded={isExpanded} > - {item.renderLabel?.(item) || item.name} + {item.renderLabel?.(item, api) || item.name} {isExpanded && ( (function Node({ } }} > - {(item.renderLabel as (i: typeof item) => React.ReactNode)?.(item) || item.name} + {(item.renderLabel as (i: typeof item, api: API) => React.ReactNode)?.(item, api) || + item.name} ); } diff --git a/code/ui/manager/static/fonts.css b/code/ui/manager/static/fonts.css deleted file mode 100644 index 90050cc0bffa..000000000000 --- a/code/ui/manager/static/fonts.css +++ /dev/null @@ -1,31 +0,0 @@ -@font-face { - font-family: 'Nunito Sans'; - font-style: normal; - font-weight: 400; - font-display: swap; - src: url('./nunito-sans-regular.woff2') format('woff2'); -} - -@font-face { - font-family: 'Nunito Sans'; - font-style: italic; - font-weight: 400; - font-display: swap; - src: url('./nunito-sans-italic.woff2') format('woff2'); -} - -@font-face { - font-family: 'Nunito Sans'; - font-style: normal; - font-weight: 700; - font-display: swap; - src: url('./nunito-sans-bold.woff2') format('woff2'); -} - -@font-face { - font-family: 'Nunito Sans'; - font-style: italic; - font-weight: 700; - font-display: swap; - src: url('./nunito-sans-bold-italic.woff2') format('woff2'); -} diff --git a/code/ui/manager/vitest.config.ts b/code/ui/manager/vitest.config.ts index 12fa8dbe147f..03172200442f 100644 --- a/code/ui/manager/vitest.config.ts +++ b/code/ui/manager/vitest.config.ts @@ -4,8 +4,6 @@ import { vitestCommonConfig } from '../../vitest.workspace'; export default mergeConfig( vitestCommonConfig, defineConfig({ - test: { - environment: 'jsdom', - }, + // Add custom config here }) ); diff --git a/code/yarn.lock b/code/yarn.lock index c15614efb882..bb57decb0ece 100644 --- a/code/yarn.lock +++ b/code/yarn.lock @@ -12,7 +12,7 @@ __metadata: languageName: node linkType: hard -"@adobe/css-tools@npm:^4.3.1, @adobe/css-tools@npm:^4.3.2": +"@adobe/css-tools@npm:^4.3.2": version: 4.3.3 resolution: "@adobe/css-tools@npm:4.3.3" checksum: 10c0/e76e712df713964b87cdf2aca1f0477f19bebd845484d5fcba726d3ec7782366e2f26ec8cb2dcfaf47081a5c891987d8a9f5c3f30d11e1eb3c1848adc27fcb24 @@ -501,7 +501,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-create-class-features-plugin@npm:^7.18.6, @babel/helper-create-class-features-plugin@npm:^7.21.0, @babel/helper-create-class-features-plugin@npm:^7.24.1, @babel/helper-create-class-features-plugin@npm:^7.24.4": +"@babel/helper-create-class-features-plugin@npm:^7.18.6, @babel/helper-create-class-features-plugin@npm:^7.21.0, @babel/helper-create-class-features-plugin@npm:^7.24.0, @babel/helper-create-class-features-plugin@npm:^7.24.1, @babel/helper-create-class-features-plugin@npm:^7.24.4": version: 7.24.4 resolution: "@babel/helper-create-class-features-plugin@npm:7.24.4" dependencies: @@ -692,9 +692,9 @@ __metadata: linkType: hard "@babel/helper-string-parser@npm:^7.23.4": - version: 7.24.1 - resolution: "@babel/helper-string-parser@npm:7.24.1" - checksum: 10c0/2f9bfcf8d2f9f083785df0501dbab92770111ece2f90d120352fda6dd2a7d47db11b807d111e6f32aa1ba6d763fe2dc6603d153068d672a5d0ad33ca802632b2 + version: 7.23.4 + resolution: "@babel/helper-string-parser@npm:7.23.4" + checksum: 10c0/f348d5637ad70b6b54b026d6544bd9040f78d24e7ec245a0fc42293968181f6ae9879c22d89744730d246ce8ec53588f716f102addd4df8bbc79b73ea10004ac languageName: node linkType: hard @@ -705,7 +705,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-validator-option@npm:^7.23.5": +"@babel/helper-validator-option@npm:^7.22.15, @babel/helper-validator-option@npm:^7.23.5": version: 7.23.5 resolution: "@babel/helper-validator-option@npm:7.23.5" checksum: 10c0/af45d5c0defb292ba6fd38979e8f13d7da63f9623d8ab9ededc394f67eb45857d2601278d151ae9affb6e03d5d608485806cd45af08b4468a0515cf506510e94 @@ -816,15 +816,15 @@ __metadata: linkType: hard "@babel/plugin-proposal-decorators@npm:^7.13.5, @babel/plugin-proposal-decorators@npm:^7.22.7": - version: 7.24.1 - resolution: "@babel/plugin-proposal-decorators@npm:7.24.1" + version: 7.24.0 + resolution: "@babel/plugin-proposal-decorators@npm:7.24.0" dependencies: - "@babel/helper-create-class-features-plugin": "npm:^7.24.1" + "@babel/helper-create-class-features-plugin": "npm:^7.24.0" "@babel/helper-plugin-utils": "npm:^7.24.0" - "@babel/plugin-syntax-decorators": "npm:^7.24.1" + "@babel/plugin-syntax-decorators": "npm:^7.24.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/ffe49522ada6581f1c760b777dbd913afcd204e11e6907c4f2c293ce6d30961449ac19d9960250d8743a1f60e21cb667e51a3af15992dfe7627105e039c46a9b + checksum: 10c0/6bf16cb2b5b2f1b63b5ea964853cd3b3419c8285296b5bf64a64127c9d5c1b2e6829e84bd92734e4b71df67686d8f36fb01bb8a45fc52bcece7503b73bc42ec7 languageName: node linkType: hard @@ -932,14 +932,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-decorators@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-syntax-decorators@npm:7.24.1" +"@babel/plugin-syntax-decorators@npm:^7.24.0": + version: 7.24.0 + resolution: "@babel/plugin-syntax-decorators@npm:7.24.0" dependencies: "@babel/helper-plugin-utils": "npm:^7.24.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/14028a746f86efbdd47e4961456bb53d656e9e3461890f66b1b01032151d15fda5ba99fcaa60232a229a33aa9e73b11c2597b706d5074c520155757e372cd17b + checksum: 10c0/6c11801e062772d4e1b0b418a4732574128b1dfc13193a2909fa93937346746aaa7046f88f6026ff3c80777c967d0fe2e4bb19a1d3fb399e8349c81741e4f471 languageName: node linkType: hard @@ -965,14 +965,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-flow@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-syntax-flow@npm:7.24.1" +"@babel/plugin-syntax-flow@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-syntax-flow@npm:7.22.5" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.0" + "@babel/helper-plugin-utils": "npm:^7.22.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/618de04360a96111408abdaafaba2efbaef0d90faad029d50e0281eaad5d7c7bd2ce4420bbac0ee27ad84c2b7bbc3e48f782064f81ed5bc40c398637991004c7 + checksum: 10c0/07afc7df02141597968532bfbfa3f6c0ad21a2bdd885d0e5e035dcf60fdf35f0995631c9750b464e1a6f2feea14160a82787f914e88e8f7115dc99f09853e43e languageName: node linkType: hard @@ -1354,15 +1354,15 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-flow-strip-types@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/plugin-transform-flow-strip-types@npm:7.24.1" +"@babel/plugin-transform-flow-strip-types@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-flow-strip-types@npm:7.22.5" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.0" - "@babel/plugin-syntax-flow": "npm:^7.24.1" + "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/plugin-syntax-flow": "npm:^7.22.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/e6aa9cbad0441867598d390d4df65bc8c6b797574673e4eedbdae0cc528e81e00f4b2cd38f7d138b0f04bcdd2540384a9812d5d76af5abfa06aee1c7fc20ca58 + checksum: 10c0/5949a8e5214e3fc65d31dab0551423cea9d9eef35faa5d0004707ba7347baf96166aa400907ce7498f754db4e1e9d039ca434a508546b0dc9fdae9a42e814c1a languageName: node linkType: hard @@ -1536,13 +1536,13 @@ __metadata: linkType: hard "@babel/plugin-transform-object-assign@npm:^7.8.3": - version: 7.24.1 - resolution: "@babel/plugin-transform-object-assign@npm:7.24.1" + version: 7.22.5 + resolution: "@babel/plugin-transform-object-assign@npm:7.22.5" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.0" + "@babel/helper-plugin-utils": "npm:^7.22.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/eb30beac71a5930ecdfc8740b184f22dd2043b1ac6f9f6818fb2e10ddfbdd6536b4ddb0d00af2c9f4a375823f52a566915eb598bea0633484aa5ff5db4e547fd + checksum: 10c0/c80ca956ccc45c68a6f35e8aea80e08c0a653e4baf243727d4258f242d312d71be20e3fad35a1f2cd9d58b30dcbb5cdf5f8d6c6614a3f8c6079d90f9b1dadee6 languageName: node linkType: hard @@ -1668,24 +1668,24 @@ __metadata: linkType: hard "@babel/plugin-transform-react-jsx-self@npm:^7.18.6": - version: 7.24.1 - resolution: "@babel/plugin-transform-react-jsx-self@npm:7.24.1" + version: 7.22.5 + resolution: "@babel/plugin-transform-react-jsx-self@npm:7.22.5" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.0" + "@babel/helper-plugin-utils": "npm:^7.22.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/ea362ff94b535c753f560eb1f5e063dc72bbbca17ed58837a949a7b289d5eacc7b0a28296d1932c94429b168d6040cdee5484a59b9e3c021f169e0ee137e6a27 + checksum: 10c0/263091bdede1f448cb2c59b84eb69972c15d3f022c929a75337bd20d8b65551ac38cd26dad1946eaa93289643506b10ddaea3445a28cb8fca5a773a22a0df90b languageName: node linkType: hard "@babel/plugin-transform-react-jsx-source@npm:^7.19.6": - version: 7.24.1 - resolution: "@babel/plugin-transform-react-jsx-source@npm:7.24.1" + version: 7.22.5 + resolution: "@babel/plugin-transform-react-jsx-source@npm:7.22.5" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.0" + "@babel/helper-plugin-utils": "npm:^7.22.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/ea8e3263c0dc51fbc97c156cc647150a757cc56de10781287353d0ce9b2dcd6b6d93d573c0142d7daf5d6fb554c74fa1971ae60764924ea711161d8458739b63 + checksum: 10c0/defc9debb76b4295e3617ef7795a0533dbbecef6f51bf5ba4bfc162df892a84fd39e14d5f1b9a5aad7b09b97074fef4c6756f9d2036eef5a9874acabe198f75a languageName: node linkType: hard @@ -2080,15 +2080,15 @@ __metadata: linkType: hard "@babel/preset-flow@npm:^7.13.13, @babel/preset-flow@npm:^7.22.15": - version: 7.24.1 - resolution: "@babel/preset-flow@npm:7.24.1" + version: 7.22.15 + resolution: "@babel/preset-flow@npm:7.22.15" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.0" - "@babel/helper-validator-option": "npm:^7.23.5" - "@babel/plugin-transform-flow-strip-types": "npm:^7.24.1" + "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-validator-option": "npm:^7.22.15" + "@babel/plugin-transform-flow-strip-types": "npm:^7.22.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/e2209158d68a456b8f9d6cd6c810e692f3ab8ca28edba99afcecaacd657ace7cc905e566f84d6da06e537836a2f830bc6ddf4cb34006d57303ff9a40a94fa433 + checksum: 10c0/7eef0c84ec1889d6c4f7a67d7d1a81703420eed123a8c23f25af148eead77907f0bd701f3e729fdb37d3ddb2a373bf43938b36a9ba17f546111ddb9521466b92 languageName: node linkType: hard @@ -2137,17 +2137,17 @@ __metadata: linkType: hard "@babel/register@npm:^7.13.16, @babel/register@npm:^7.22.15": - version: 7.23.7 - resolution: "@babel/register@npm:7.23.7" + version: 7.22.15 + resolution: "@babel/register@npm:7.22.15" dependencies: clone-deep: "npm:^4.0.1" find-cache-dir: "npm:^2.0.0" make-dir: "npm:^2.1.0" - pirates: "npm:^4.0.6" + pirates: "npm:^4.0.5" source-map-support: "npm:^0.5.16" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/b2466e41a4394e725b57e139ba45c3f61b88546d3cb443e84ce46cb34071b60c6cdb706a14c58a1443db530691a54f51da1f0c97f6c1aecbb838a2fb7eb5dbb9 + checksum: 10c0/895cc773c3b3eae909478ea2a9735ef6edd634b04b4aaaad2ce576fd591c2b3c70ff8c90423e769a291bee072186e7e4801480c1907e31ba3053c6cdba5571cb languageName: node linkType: hard @@ -2159,12 +2159,12 @@ __metadata: linkType: hard "@babel/runtime-corejs3@npm:^7.10.2": - version: 7.24.4 - resolution: "@babel/runtime-corejs3@npm:7.24.4" + version: 7.23.1 + resolution: "@babel/runtime-corejs3@npm:7.23.1" dependencies: core-js-pure: "npm:^3.30.2" regenerator-runtime: "npm:^0.14.0" - checksum: 10c0/121bec9a0b505e2995c4b71cf480167e006e8ee423f77bccc38975bfbfbfdb191192ff03557c18fad6de8f2b85c12c49aaa4b92d1d5fe0c0e136da664129be1e + checksum: 10c0/6e2c2b11779ff56c88b1f3a8742498640f7271ad4fcf9cfd24052bbb236a5e7c4c7c8d81cda751da3b4effa678736303deb78441c5752e63bfb90d6453fd870f languageName: node linkType: hard @@ -2195,7 +2195,7 @@ __metadata: languageName: node linkType: hard -"@babel/runtime@npm:^7.10.2, @babel/runtime@npm:^7.11.2, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.13.10, @babel/runtime@npm:^7.17.8, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.20.13, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.22.15, @babel/runtime@npm:^7.22.6, @babel/runtime@npm:^7.23.2, @babel/runtime@npm:^7.24.4, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.7.2, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": +"@babel/runtime@npm:^7.10.2, @babel/runtime@npm:^7.11.2, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.13.10, @babel/runtime@npm:^7.17.8, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.20.13, @babel/runtime@npm:^7.22.15, @babel/runtime@npm:^7.22.6, @babel/runtime@npm:^7.23.2, @babel/runtime@npm:^7.24.4, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.7.2, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": version: 7.24.4 resolution: "@babel/runtime@npm:7.24.4" dependencies: @@ -2574,163 +2574,163 @@ __metadata: languageName: node linkType: hard -"@esbuild/aix-ppc64@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/aix-ppc64@npm:0.20.1" +"@esbuild/aix-ppc64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/aix-ppc64@npm:0.21.5" conditions: os=aix & cpu=ppc64 languageName: node linkType: hard -"@esbuild/android-arm64@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/android-arm64@npm:0.20.1" +"@esbuild/android-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/android-arm64@npm:0.21.5" conditions: os=android & cpu=arm64 languageName: node linkType: hard -"@esbuild/android-arm@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/android-arm@npm:0.20.1" +"@esbuild/android-arm@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/android-arm@npm:0.21.5" conditions: os=android & cpu=arm languageName: node linkType: hard -"@esbuild/android-x64@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/android-x64@npm:0.20.1" +"@esbuild/android-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/android-x64@npm:0.21.5" conditions: os=android & cpu=x64 languageName: node linkType: hard -"@esbuild/darwin-arm64@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/darwin-arm64@npm:0.20.1" +"@esbuild/darwin-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/darwin-arm64@npm:0.21.5" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@esbuild/darwin-x64@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/darwin-x64@npm:0.20.1" +"@esbuild/darwin-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/darwin-x64@npm:0.21.5" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@esbuild/freebsd-arm64@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/freebsd-arm64@npm:0.20.1" +"@esbuild/freebsd-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/freebsd-arm64@npm:0.21.5" conditions: os=freebsd & cpu=arm64 languageName: node linkType: hard -"@esbuild/freebsd-x64@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/freebsd-x64@npm:0.20.1" +"@esbuild/freebsd-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/freebsd-x64@npm:0.21.5" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"@esbuild/linux-arm64@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/linux-arm64@npm:0.20.1" +"@esbuild/linux-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-arm64@npm:0.21.5" conditions: os=linux & cpu=arm64 languageName: node linkType: hard -"@esbuild/linux-arm@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/linux-arm@npm:0.20.1" +"@esbuild/linux-arm@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-arm@npm:0.21.5" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@esbuild/linux-ia32@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/linux-ia32@npm:0.20.1" +"@esbuild/linux-ia32@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-ia32@npm:0.21.5" conditions: os=linux & cpu=ia32 languageName: node linkType: hard -"@esbuild/linux-loong64@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/linux-loong64@npm:0.20.1" +"@esbuild/linux-loong64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-loong64@npm:0.21.5" conditions: os=linux & cpu=loong64 languageName: node linkType: hard -"@esbuild/linux-mips64el@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/linux-mips64el@npm:0.20.1" +"@esbuild/linux-mips64el@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-mips64el@npm:0.21.5" conditions: os=linux & cpu=mips64el languageName: node linkType: hard -"@esbuild/linux-ppc64@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/linux-ppc64@npm:0.20.1" +"@esbuild/linux-ppc64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-ppc64@npm:0.21.5" conditions: os=linux & cpu=ppc64 languageName: node linkType: hard -"@esbuild/linux-riscv64@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/linux-riscv64@npm:0.20.1" +"@esbuild/linux-riscv64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-riscv64@npm:0.21.5" conditions: os=linux & cpu=riscv64 languageName: node linkType: hard -"@esbuild/linux-s390x@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/linux-s390x@npm:0.20.1" +"@esbuild/linux-s390x@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-s390x@npm:0.21.5" conditions: os=linux & cpu=s390x languageName: node linkType: hard -"@esbuild/linux-x64@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/linux-x64@npm:0.20.1" +"@esbuild/linux-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-x64@npm:0.21.5" conditions: os=linux & cpu=x64 languageName: node linkType: hard -"@esbuild/netbsd-x64@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/netbsd-x64@npm:0.20.1" +"@esbuild/netbsd-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/netbsd-x64@npm:0.21.5" conditions: os=netbsd & cpu=x64 languageName: node linkType: hard -"@esbuild/openbsd-x64@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/openbsd-x64@npm:0.20.1" +"@esbuild/openbsd-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/openbsd-x64@npm:0.21.5" conditions: os=openbsd & cpu=x64 languageName: node linkType: hard -"@esbuild/sunos-x64@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/sunos-x64@npm:0.20.1" +"@esbuild/sunos-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/sunos-x64@npm:0.21.5" conditions: os=sunos & cpu=x64 languageName: node linkType: hard -"@esbuild/win32-arm64@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/win32-arm64@npm:0.20.1" +"@esbuild/win32-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/win32-arm64@npm:0.21.5" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@esbuild/win32-ia32@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/win32-ia32@npm:0.20.1" +"@esbuild/win32-ia32@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/win32-ia32@npm:0.21.5" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@esbuild/win32-x64@npm:0.20.1": - version: 0.20.1 - resolution: "@esbuild/win32-x64@npm:0.20.1" +"@esbuild/win32-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/win32-x64@npm:0.21.5" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -3573,9 +3573,9 @@ __metadata: languageName: node linkType: hard -"@joshwooding/vite-plugin-react-docgen-typescript@npm:0.3.0": - version: 0.3.0 - resolution: "@joshwooding/vite-plugin-react-docgen-typescript@npm:0.3.0" +"@joshwooding/vite-plugin-react-docgen-typescript@npm:0.3.1": + version: 0.3.1 + resolution: "@joshwooding/vite-plugin-react-docgen-typescript@npm:0.3.1" dependencies: glob: "npm:^7.2.0" glob-promise: "npm:^4.2.0" @@ -3587,7 +3587,7 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10c0/31098ad8fcc2440437534599c111d9f2951dd74821e8ba46c521b969bae4c918d830b7bb0484efbad29a51711bb62d3bc623d5a1ed5b1695b5b5594ea9dd4ca0 + checksum: 10c0/a9c7a03d7d1daf5bd64949255516ba64c88d5600366c8c74dcdb6f37c2a6099daaec02860b7587d2220e61afa47a0b2de17ef70d723c2db02f24e0890edfd9f3 languageName: node linkType: hard @@ -5058,22 +5058,6 @@ __metadata: languageName: node linkType: hard -"@sindresorhus/df@npm:^1.0.1": - version: 1.0.1 - resolution: "@sindresorhus/df@npm:1.0.1" - checksum: 10c0/71a4ffb1e698cda2042ea82617915b4377ae58f4b43a16adca7810fe6f78e075e49e873adad7cafd443ffe0c82951fe5789a62f5a32a11513893d1a0d760ad53 - languageName: node - linkType: hard - -"@sindresorhus/df@npm:^3.1.1": - version: 3.1.1 - resolution: "@sindresorhus/df@npm:3.1.1" - dependencies: - execa: "npm:^2.0.1" - checksum: 10c0/39570379856aea81b9c79649779295f87985897a389fde708c43ae91079d9e2721cd6f6423d1330d934343cd5aa35612ddf072e1438ca9529ee13945b924f575 - languageName: node - linkType: hard - "@sindresorhus/is@npm:^4.0.0": version: 4.6.0 resolution: "@sindresorhus/is@npm:4.6.0" @@ -5323,7 +5307,7 @@ __metadata: dependencies: "@storybook/client-logger": "workspace:*" "@storybook/core-events": "workspace:*" - "@storybook/csf": "npm:^0.1.6" + "@storybook/csf": "npm:^0.1.8" "@storybook/global": "npm:^5.0.0" "@storybook/manager-api": "workspace:*" "@storybook/preview-api": "workspace:*" @@ -5333,7 +5317,7 @@ __metadata: ts-dedent: "npm:^2.0.0" typescript: "npm:^5.3.2" peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta peerDependenciesMeta: react: optional: true @@ -5525,7 +5509,6 @@ __metadata: "@types/webpack-env": "npm:^1.18.0" cross-spawn: "npm:^7.0.3" find-up: "npm:^5.0.0" - jsdom: "npm:^23.0.1" read-pkg-up: "npm:^7.0.1" semver: "npm:^7.3.7" telejson: "npm:^7.2.0" @@ -5537,17 +5520,17 @@ __metadata: webpack: "npm:5" zone.js: "npm:^0.14.2" peerDependencies: - "@angular-devkit/architect": ">=0.1500.0 < 0.1800.0" - "@angular-devkit/build-angular": ">=15.0.0 < 18.0.0" - "@angular-devkit/core": ">=15.0.0 < 18.0.0" - "@angular/cli": ">=15.0.0 < 18.0.0" - "@angular/common": ">=15.0.0 < 18.0.0" - "@angular/compiler": ">=15.0.0 < 18.0.0" - "@angular/compiler-cli": ">=15.0.0 < 18.0.0" - "@angular/core": ">=15.0.0 < 18.0.0" - "@angular/forms": ">=15.0.0 < 18.0.0" - "@angular/platform-browser": ">=15.0.0 < 18.0.0" - "@angular/platform-browser-dynamic": ">=15.0.0 < 18.0.0" + "@angular-devkit/architect": ">=0.1500.0 < 0.1900.0" + "@angular-devkit/build-angular": ">=15.0.0 < 19.0.0" + "@angular-devkit/core": ">=15.0.0 < 19.0.0" + "@angular/cli": ">=15.0.0 < 19.0.0" + "@angular/common": ">=15.0.0 < 19.0.0" + "@angular/compiler": ">=15.0.0 < 19.0.0" + "@angular/compiler-cli": ">=15.0.0 < 19.0.0" + "@angular/core": ">=15.0.0 < 19.0.0" + "@angular/forms": ">=15.0.0 < 19.0.0" + "@angular/platform-browser": ">=15.0.0 < 19.0.0" + "@angular/platform-browser-dynamic": ">=15.0.0 < 19.0.0" rxjs: ^6.0.0 || ^7.4.0 typescript: ^4.0.0 || ^5.0.0 zone.js: ">= 0.11.1 < 1.0.0" @@ -5591,7 +5574,7 @@ __metadata: "@storybook/client-logger": "workspace:*" "@storybook/components": "workspace:*" "@storybook/core-events": "workspace:*" - "@storybook/csf": "npm:^0.1.6" + "@storybook/csf": "npm:^0.1.8" "@storybook/docs-tools": "workspace:*" "@storybook/global": "npm:^5.0.0" "@storybook/icons": "npm:^1.2.5" @@ -5605,7 +5588,7 @@ __metadata: color-convert: "npm:^2.0.1" dequal: "npm:^2.0.2" lodash: "npm:^4.17.21" - markdown-to-jsx: "npm:7.3.2" + markdown-to-jsx: "npm:^7.4.5" memoizerific: "npm:^1.11.3" polished: "npm:^4.2.2" react-colorful: "npm:^5.1.2" @@ -5614,8 +5597,8 @@ __metadata: ts-dedent: "npm:^2.0.0" util-deprecate: "npm:^1.0.2" peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta peerDependenciesMeta: react: optional: true @@ -5635,10 +5618,10 @@ __metadata: "@types/ejs": "npm:^3.1.1" "@yarnpkg/esbuild-plugin-pnp": "npm:^3.0.0-rc.10" browser-assert: "npm:^1.2.1" - ejs: "npm:^3.1.8" + ejs: "npm:^3.1.10" esbuild: "npm:^0.18.0 || ^0.19.0 || ^0.20.0" esbuild-plugin-alias: "npm:^0.2.1" - express: "npm:^4.17.3" + express: "npm:^4.19.2" fs-extra: "npm:^11.1.0" process: "npm:^0.11.10" slash: "npm:^5.0.0" @@ -5660,12 +5643,12 @@ __metadata: "@storybook/preview": "workspace:*" "@storybook/preview-api": "workspace:*" "@storybook/types": "workspace:*" - "@types/express": "npm:^4.17.13" + "@types/express": "npm:^4.17.21" "@types/find-cache-dir": "npm:^3.2.1" "@types/node": "npm:^18.0.0" browser-assert: "npm:^1.2.1" es-module-lexer: "npm:^1.5.0" - express: "npm:^4.17.3" + express: "npm:^4.19.2" find-cache-dir: "npm:^3.0.0" fs-extra: "npm:^11.1.0" glob: "npm:^10.0.0" @@ -5706,14 +5689,13 @@ __metadata: "@types/semver": "npm:^7.3.4" "@types/terser-webpack-plugin": "npm:^5.2.0" "@types/webpack-hot-middleware": "npm:^2.25.6" - "@types/webpack-virtual-modules": "npm:^0.1.1" browser-assert: "npm:^1.2.1" case-sensitive-paths-webpack-plugin: "npm:^2.4.0" cjs-module-lexer: "npm:^1.2.3" constants-browserify: "npm:^1.0.0" css-loader: "npm:^6.7.1" es-module-lexer: "npm:^1.5.0" - express: "npm:^4.17.3" + express: "npm:^4.19.2" fork-ts-checker-webpack-plugin: "npm:^8.0.0" fs-extra: "npm:^11.1.0" html-webpack-plugin: "npm:^5.5.0" @@ -5733,7 +5715,7 @@ __metadata: webpack: "npm:5" webpack-dev-middleware: "npm:^6.1.2" webpack-hot-middleware: "npm:^2.25.1" - webpack-virtual-modules: "npm:^0.5.0" + webpack-virtual-modules: "npm:^0.6.0" peerDependenciesMeta: typescript: optional: true @@ -5796,7 +5778,7 @@ __metadata: slash: "npm:^5.0.0" strip-ansi: "npm:^7.1.0" strip-json-comments: "npm:^3.1.1" - tempy: "npm:^1.0.1" + tempy: "npm:^3.1.0" tiny-invariant: "npm:^1.3.1" ts-dedent: "npm:^2.0.0" typescript: "npm:^5.3.2" @@ -5822,7 +5804,7 @@ __metadata: "@babel/core": "npm:^7.24.4" "@babel/preset-env": "npm:^7.24.4" "@babel/types": "npm:^7.24.0" - "@storybook/csf": "npm:^0.1.6" + "@storybook/csf": "npm:^0.1.8" "@storybook/csf-tools": "workspace:*" "@storybook/node-logger": "workspace:*" "@storybook/types": "workspace:*" @@ -5859,7 +5841,7 @@ __metadata: "@radix-ui/react-scroll-area": "npm:^1.0.5" "@radix-ui/react-slot": "npm:^1.0.2" "@storybook/client-logger": "workspace:*" - "@storybook/csf": "npm:^0.1.6" + "@storybook/csf": "npm:^0.1.8" "@storybook/global": "npm:^5.0.0" "@storybook/icons": "npm:^1.2.5" "@storybook/test": "workspace:*" @@ -5879,8 +5861,8 @@ __metadata: use-resize-observer: "npm:^9.1.0" util-deprecate: "npm:^1.0.2" peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta languageName: unknown linkType: soft @@ -5925,7 +5907,7 @@ __metadata: resolve-from: "npm:^5.0.0" semver: "npm:^7.3.7" slash: "npm:^5.0.0" - tempy: "npm:^1.0.1" + tempy: "npm:^3.1.0" tiny-invariant: "npm:^1.3.1" ts-dedent: "npm:^2.0.0" type-fest: "npm:~2.19" @@ -5943,7 +5925,7 @@ __metadata: version: 0.0.0-use.local resolution: "@storybook/core-events@workspace:lib/core-events" dependencies: - "@storybook/csf": "npm:^0.1.5" + "@storybook/csf": "npm:^0.1.8" chalk: "npm:^4.1.0" ts-dedent: "npm:^2.0.0" typescript: "npm:^5.3.2" @@ -5963,9 +5945,9 @@ __metadata: "@storybook/channels": "workspace:*" "@storybook/core-common": "workspace:*" "@storybook/core-events": "workspace:*" - "@storybook/csf": "npm:^0.1.6" + "@storybook/csf": "npm:^0.1.8" "@storybook/csf-tools": "workspace:*" - "@storybook/docs-mdx": "npm:3.0.0" + "@storybook/docs-mdx": "npm:3.1.0-next.0" "@storybook/global": "npm:^5.0.0" "@storybook/manager": "workspace:*" "@storybook/manager-api": "workspace:*" @@ -5976,7 +5958,6 @@ __metadata: "@types/compression": "npm:^1.7.0" "@types/detect-port": "npm:^1.3.0" "@types/diff": "npm:^5.0.9" - "@types/ip": "npm:^1.1.0" "@types/node": "npm:^18.0.0" "@types/node-fetch": "npm:^2.5.7" "@types/pretty-hrtime": "npm:^1.0.0" @@ -5990,10 +5971,9 @@ __metadata: compression: "npm:^1.7.4" detect-port: "npm:^1.3.0" diff: "npm:^5.2.0" - express: "npm:^4.17.3" + express: "npm:^4.19.2" fs-extra: "npm:^11.1.0" globby: "npm:^14.0.1" - ip: "npm:^2.0.1" lodash: "npm:^4.17.21" node-fetch: "npm:^3.3.1" open: "npm:^8.4.0" @@ -6005,6 +5985,7 @@ __metadata: telejson: "npm:^7.2.0" tiny-invariant: "npm:^1.3.1" ts-dedent: "npm:^2.0.0" + tsconfig-paths: "npm:^4.2.0" typescript: "npm:^5.3.2" util: "npm:^0.12.4" util-deprecate: "npm:^1.0.2" @@ -6046,7 +6027,7 @@ __metadata: "@babel/parser": "npm:^7.24.4" "@babel/traverse": "npm:^7.24.1" "@babel/types": "npm:^7.24.0" - "@storybook/csf": "npm:^0.1.6" + "@storybook/csf": "npm:^0.1.8" "@storybook/types": "workspace:*" "@types/fs-extra": "npm:^11.0.1" "@types/js-yaml": "npm:^4.0.5" @@ -6067,19 +6048,19 @@ __metadata: languageName: node linkType: hard -"@storybook/csf@npm:^0.1.5, @storybook/csf@npm:^0.1.6": - version: 0.1.6 - resolution: "@storybook/csf@npm:0.1.6" +"@storybook/csf@npm:^0.1.8": + version: 0.1.8 + resolution: "@storybook/csf@npm:0.1.8" dependencies: type-fest: "npm:^2.19.0" - checksum: 10c0/81d1ee28a258381ed1cd5e0f9177f2ee06a3b7488ac2cfc9182ba4276662eee8b93f3941f4a141f8f11479991efee55696bf9f442137188255934bbd1de98226 + checksum: 10c0/4fd08bd65205395aba693f053706d5c880db5102543744c4e13768902a615df9a479ac03f80fe33297bd5457a0d0ef655cd33d41a0e379764dd6f0c6b9a7d88c languageName: node linkType: hard -"@storybook/docs-mdx@npm:3.0.0": - version: 3.0.0 - resolution: "@storybook/docs-mdx@npm:3.0.0" - checksum: 10c0/4f4242fc05b57e8dc239204c71fd0d1481c9abbf20d12dd0f3dace74f77a7ff7cbe0bd07d7d785873b45747be64cad273423d3dc0cf89b52e9f117592a4b054f +"@storybook/docs-mdx@npm:3.1.0-next.0": + version: 3.1.0-next.0 + resolution: "@storybook/docs-mdx@npm:3.1.0-next.0" + checksum: 10c0/7622d7c6318e842c90a71c1836d68531236c31fff7081c885803eddfafb7e3f8998689f612eaa0292209ada8352a36657dcacb5d3ef4632b8e8b8a283c39602e languageName: node linkType: hard @@ -6092,10 +6073,9 @@ __metadata: "@storybook/core-events": "workspace:*" "@storybook/preview-api": "workspace:*" "@storybook/types": "workspace:*" - "@types/doctrine": "npm:^0.0.3" - assert: "npm:^2.1.0" babel-plugin-react-docgen: "npm:4.2.1" - doctrine: "npm:^3.0.0" + comment-parser: "npm:^1.4.1" + jsdoc-type-pratt-parser: "npm:^4.0.0" lodash: "npm:^4.17.21" require-from-string: "npm:^2.0.2" typescript: "npm:^5.3.2" @@ -6152,6 +6132,7 @@ __metadata: "@storybook/core-server": "workspace:*" "@storybook/html": "workspace:*" "@storybook/node-logger": "workspace:*" + "@storybook/types": "workspace:*" "@types/node": "npm:^18.0.0" magic-string: "npm:^0.30.0" typescript: "npm:^5.3.2" @@ -6167,6 +6148,7 @@ __metadata: "@storybook/global": "npm:^5.0.0" "@storybook/html": "workspace:*" "@storybook/preset-html-webpack": "workspace:*" + "@storybook/types": "workspace:*" "@types/node": "npm:^18.0.0" typescript: "npm:^5.3.2" languageName: unknown @@ -6244,7 +6226,7 @@ __metadata: "@storybook/channels": "workspace:*" "@storybook/client-logger": "workspace:*" "@storybook/core-events": "workspace:*" - "@storybook/csf": "npm:^0.1.6" + "@storybook/csf": "npm:^0.1.8" "@storybook/global": "npm:^5.0.0" "@storybook/icons": "npm:^1.2.5" "@storybook/router": "workspace:*" @@ -6294,7 +6276,7 @@ __metadata: fs-extra: "npm:^11.1.0" fuse.js: "npm:^3.6.1" lodash: "npm:^4.17.21" - markdown-to-jsx: "npm:7.3.2" + markdown-to-jsx: "npm:^7.4.5" memoizerific: "npm:^1.11.3" polished: "npm:^4.2.2" qs: "npm:^6.10.0" @@ -6373,8 +6355,8 @@ __metadata: webpack: "npm:^5.65.0" peerDependencies: next: ^13.5.0 || ^14.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta webpack: ^5.0.0 dependenciesMeta: sharp: @@ -6406,6 +6388,7 @@ __metadata: dependencies: "@storybook/builder-vite": "workspace:*" "@storybook/preact": "workspace:*" + "@storybook/types": "workspace:*" "@types/node": "npm:^18.0.0" typescript: "npm:^5.3.2" vite: "npm:^4.0.0" @@ -6423,6 +6406,7 @@ __metadata: "@storybook/core-common": "workspace:*" "@storybook/preact": "workspace:*" "@storybook/preset-preact-webpack": "workspace:*" + "@storybook/types": "workspace:*" "@types/node": "npm:^18.0.0" preact: "npm:^10.5.13" typescript: "npm:^5.3.2" @@ -6510,8 +6494,8 @@ __metadata: typescript: "npm:^5.3.2" webpack: "npm:5" peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta peerDependenciesMeta: typescript: optional: true @@ -6582,7 +6566,7 @@ __metadata: "@storybook/client-logger": "workspace:*" "@storybook/core-common": "workspace:*" "@storybook/core-events": "workspace:*" - "@storybook/csf": "npm:^0.1.6" + "@storybook/csf": "npm:^0.1.8" "@storybook/global": "npm:^5.0.0" "@storybook/types": "workspace:*" "@types/qs": "npm:^6.9.5" @@ -6637,8 +6621,8 @@ __metadata: "@storybook/types": "workspace:*" typescript: "npm:^5.3.2" peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta languageName: unknown linkType: soft @@ -6646,11 +6630,12 @@ __metadata: version: 0.0.0-use.local resolution: "@storybook/react-vite@workspace:frameworks/react-vite" dependencies: - "@joshwooding/vite-plugin-react-docgen-typescript": "npm:0.3.0" + "@joshwooding/vite-plugin-react-docgen-typescript": "npm:0.3.1" "@rollup/pluginutils": "npm:^5.0.2" "@storybook/builder-vite": "workspace:*" "@storybook/node-logger": "workspace:*" "@storybook/react": "workspace:*" + "@storybook/types": "workspace:*" "@types/node": "npm:^18.0.0" find-up: "npm:^5.0.0" magic-string: "npm:^0.30.0" @@ -6660,8 +6645,8 @@ __metadata: typescript: "npm:^5.3.2" vite: "npm:^4.0.0" peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta vite: ^4.0.0 || ^5.0.0 languageName: unknown linkType: soft @@ -6673,10 +6658,11 @@ __metadata: "@storybook/builder-webpack5": "workspace:*" "@storybook/preset-react-webpack": "workspace:*" "@storybook/react": "workspace:*" + "@storybook/types": "workspace:*" "@types/node": "npm:^18.0.0" peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta typescript: ">= 4.2.x" peerDependenciesMeta: typescript: @@ -6717,8 +6703,8 @@ __metadata: type-fest: "npm:~2.19" util-deprecate: "npm:^1.0.2" peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta typescript: ">= 4.2.x" peerDependenciesMeta: typescript: @@ -6767,7 +6753,7 @@ __metadata: "@storybook/core-events": "workspace:*" "@storybook/core-server": "workspace:*" "@storybook/core-webpack": "workspace:*" - "@storybook/csf": "npm:^0.1.6" + "@storybook/csf": "npm:^0.1.8" "@storybook/csf-plugin": "workspace:*" "@storybook/csf-tools": "workspace:*" "@storybook/docs-tools": "workspace:*" @@ -6806,7 +6792,6 @@ __metadata: "@storybook/svelte-webpack5": "workspace:*" "@storybook/telemetry": "workspace:*" "@storybook/test": "workspace:*" - "@storybook/testing-library": "npm:next" "@storybook/theming": "workspace:*" "@storybook/types": "workspace:*" "@storybook/vue3": "workspace:*" @@ -6816,10 +6801,10 @@ __metadata: "@storybook/web-components-vite": "workspace:*" "@storybook/web-components-webpack5": "workspace:*" "@testing-library/dom": "npm:^7.29.4" - "@testing-library/jest-dom": "npm:6.1.4" + "@testing-library/jest-dom": "npm:6.4.5" "@testing-library/react": "npm:^14.0.0" "@testing-library/user-event": "npm:^14.4.3" - "@types/express": "npm:^4.17.11" + "@types/express": "npm:^4.17.21" "@types/fs-extra": "npm:^11.0.1" "@types/lodash": "npm:^4.14.167" "@types/mock-require": "npm:^2.0.3" @@ -6832,7 +6817,6 @@ __metadata: "@typescript-eslint/parser": "npm:^6.18.1" "@vitejs/plugin-react": "npm:^3.0.1" "@vitest/coverage-v8": "npm:^1.2.2" - concurrently: "npm:^5.3.0" cross-env: "npm:^7.0.3" danger: "npm:^11.2.6" esbuild: "npm:^0.18.0 || ^0.19.0 || ^0.20.0" @@ -6845,6 +6829,7 @@ __metadata: fs-extra: "npm:^11.1.0" github-release-from-changelog: "npm:^2.1.1" glob: "npm:^10.0.0" + happy-dom: "npm:^14.12.0" http-server: "npm:^14.1.1" husky: "npm:^4.3.7" lint-staged: "npm:^13.2.2" @@ -6854,15 +6839,12 @@ __metadata: nx: "npm:18.0.6" prettier: "npm:^3.1.1" process: "npm:^0.11.10" - raf: "npm:^3.4.1" react: "npm:^18.2.0" react-dom: "npm:^18.2.0" semver: "npm:^7.3.7" serve-static: "npm:^1.14.1" svelte: "npm:^5.0.0-next.65" - trash: "npm:^7.0.0" ts-dedent: "npm:^2.0.0" - ts-node: "npm:^10.9.1" typescript: "npm:^5.4.3" util: "npm:^0.12.4" vite: "npm:^4.0.0" @@ -6913,6 +6895,7 @@ __metadata: "@storybook/core-common": "workspace:*" "@storybook/preset-server-webpack": "workspace:*" "@storybook/server": "workspace:*" + "@storybook/types": "workspace:*" "@types/node": "npm:^18.0.0" typescript: "npm:^5.3.2" languageName: unknown @@ -6922,7 +6905,7 @@ __metadata: version: 0.0.0-use.local resolution: "@storybook/server@workspace:renderers/server" dependencies: - "@storybook/csf": "npm:^0.1.6" + "@storybook/csf": "npm:^0.1.8" "@storybook/csf-tools": "workspace:*" "@storybook/global": "npm:^5.0.0" "@storybook/preview-api": "workspace:*" @@ -6939,7 +6922,7 @@ __metadata: version: 0.0.0-use.local resolution: "@storybook/source-loader@workspace:lib/source-loader" dependencies: - "@storybook/csf": "npm:^0.1.6" + "@storybook/csf": "npm:^0.1.8" "@storybook/types": "workspace:*" estraverse: "npm:^5.2.0" lodash: "npm:^4.17.21" @@ -6955,6 +6938,7 @@ __metadata: "@storybook/builder-vite": "workspace:*" "@storybook/node-logger": "workspace:*" "@storybook/svelte": "workspace:*" + "@storybook/types": "workspace:*" "@sveltejs/vite-plugin-svelte": "npm:^3.0.1" "@types/node": "npm:^18.0.0" magic-string: "npm:^0.30.0" @@ -6979,6 +6963,7 @@ __metadata: "@storybook/core-common": "workspace:*" "@storybook/preset-svelte-webpack": "workspace:*" "@storybook/svelte": "workspace:*" + "@storybook/types": "workspace:*" svelte: "npm:^4.0.0" svelte-loader: "npm:^3.1.9" typescript: "npm:^5.3.2" @@ -7003,7 +6988,6 @@ __metadata: "@testing-library/svelte": "patch:@testing-library/svelte@npm%3A4.1.0#~/.yarn/patches/@testing-library-svelte-npm-4.1.0-34b7037bc0.patch" expect-type: "npm:^0.15.0" fs-extra: "npm:^11.1.0" - jsdom: "npm:^24.0.0" svelte: "npm:^5.0.0-next.65" svelte-check: "npm:^3.6.4" sveltedoc-parser: "npm:^4.2.1" @@ -7023,6 +7007,7 @@ __metadata: "@storybook/builder-vite": "workspace:*" "@storybook/svelte": "workspace:*" "@storybook/svelte-vite": "workspace:*" + "@storybook/types": "workspace:*" "@types/node": "npm:^18.0.0" typescript: "npm:^5.3.2" vite: "npm:^4.0.0" @@ -7058,11 +7043,11 @@ __metadata: "@storybook/core-events": "workspace:*" "@storybook/instrumenter": "workspace:*" "@storybook/preview-api": "workspace:*" - "@testing-library/dom": "npm:^9.3.4" - "@testing-library/jest-dom": "npm:^6.4.2" - "@testing-library/user-event": "npm:^14.5.2" - "@vitest/expect": "npm:1.3.1" - "@vitest/spy": "npm:^1.3.1" + "@testing-library/dom": "npm:10.1.0" + "@testing-library/jest-dom": "npm:6.4.5" + "@testing-library/user-event": "npm:14.5.2" + "@vitest/expect": "npm:1.6.0" + "@vitest/spy": "npm:1.6.0" chai: "npm:^4.4.1" tinyspy: "npm:^2.2.0" ts-dedent: "npm:^2.2.0" @@ -7072,17 +7057,6 @@ __metadata: languageName: unknown linkType: soft -"@storybook/testing-library@npm:next": - version: 0.2.2-next.0 - resolution: "@storybook/testing-library@npm:0.2.2-next.0" - dependencies: - "@testing-library/dom": "npm:^9.0.0" - "@testing-library/user-event": "npm:^14.4.0" - ts-dedent: "npm:^2.2.0" - checksum: 10c0/4350e73776cba8ab5037ee9a8b07b957c73540873f64097648ed96b93f086469eab475ad19b917e5e2eee4faec67891fa443d703b9b4aa28efc9a74243970a4e - languageName: node - linkType: hard - "@storybook/theming@workspace:*, @storybook/theming@workspace:lib/theming": version: 0.0.0-use.local resolution: "@storybook/theming@workspace:lib/theming" @@ -7103,8 +7077,8 @@ __metadata: ts-dedent: "npm:^2.0.0" typescript: "npm:^5.3.2" peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta peerDependenciesMeta: react: optional: true @@ -7118,8 +7092,8 @@ __metadata: resolution: "@storybook/types@workspace:lib/types" dependencies: "@storybook/channels": "workspace:*" - "@storybook/csf": "npm:^0.1.6" - "@types/express": "npm:^4.7.0" + "@storybook/csf": "npm:^0.1.8" + "@types/express": "npm:^4.17.21" "@types/fs-extra": "npm:^11.0.1" "@types/node": "npm:^18.0.0" file-system-cache: "npm:2.3.0" @@ -7133,6 +7107,7 @@ __metadata: dependencies: "@storybook/builder-vite": "workspace:*" "@storybook/core-server": "workspace:*" + "@storybook/types": "workspace:*" "@storybook/vue3": "workspace:*" "@types/find-package-json": "npm:^1.2.6" "@types/node": "npm:^18.0.0" @@ -7140,7 +7115,7 @@ __metadata: magic-string: "npm:^0.30.0" typescript: "npm:^5.3.2" vite: "npm:^4.0.0" - vue-component-meta: "npm:^1.8.27" + vue-component-meta: "npm:^2.0.0" vue-docgen-api: "npm:^4.75.1" peerDependencies: vite: ^4.0.0 || ^5.0.0 @@ -7154,6 +7129,7 @@ __metadata: "@storybook/builder-webpack5": "workspace:*" "@storybook/core-common": "workspace:*" "@storybook/preset-vue3-webpack": "workspace:*" + "@storybook/types": "workspace:*" "@storybook/vue3": "workspace:*" "@types/node": "npm:^18.0.0" "@vue/compiler-sfc": "npm:3.0.0" @@ -7197,6 +7173,7 @@ __metadata: "@storybook/builder-vite": "workspace:*" "@storybook/core-server": "workspace:*" "@storybook/node-logger": "workspace:*" + "@storybook/types": "workspace:*" "@storybook/web-components": "workspace:*" "@types/node": "npm:^18.0.0" magic-string: "npm:^0.30.0" @@ -7210,6 +7187,7 @@ __metadata: dependencies: "@storybook/builder-webpack5": "workspace:*" "@storybook/core-common": "workspace:*" + "@storybook/types": "workspace:*" "@storybook/web-components": "workspace:*" "@types/node": "npm:^18.0.0" lit: "npm:2.3.1" @@ -7242,13 +7220,6 @@ __metadata: languageName: unknown linkType: soft -"@stroncium/procfs@npm:^1.2.1": - version: 1.2.1 - resolution: "@stroncium/procfs@npm:1.2.1" - checksum: 10c0/94421e19073905c98e619aaa9a2b6dc65b3cd706d8b0ef6fc0f242b0edb80e7ddd25cbd19ff0506d7d56546b2dc95a458523dc5dee058bc9b7749c02c0758102 - languageName: node - linkType: hard - "@sveltejs/vite-plugin-svelte-inspector@npm:^2.0.0": version: 2.0.0 resolution: "@sveltejs/vite-plugin-svelte-inspector@npm:2.0.0" @@ -7326,6 +7297,22 @@ __metadata: languageName: node linkType: hard +"@testing-library/dom@npm:10.1.0": + version: 10.1.0 + resolution: "@testing-library/dom@npm:10.1.0" + dependencies: + "@babel/code-frame": "npm:^7.10.4" + "@babel/runtime": "npm:^7.12.5" + "@types/aria-query": "npm:^5.0.1" + aria-query: "npm:5.3.0" + chalk: "npm:^4.1.0" + dom-accessibility-api: "npm:^0.5.9" + lz-string: "npm:^1.5.0" + pretty-format: "npm:^27.0.2" + checksum: 10c0/81f0e0a510d24e458c3af17777960ed678fb4fe464903ef8ec9ed816c9794fc69a673ea94f87b9e054b181383c51814605451dbf4fd9df93d0d8f24b4859990d + languageName: node + linkType: hard + "@testing-library/dom@npm:^7.28.1, @testing-library/dom@npm:^7.29.4": version: 7.31.2 resolution: "@testing-library/dom@npm:7.31.2" @@ -7342,7 +7329,7 @@ __metadata: languageName: node linkType: hard -"@testing-library/dom@npm:^9.0.0, @testing-library/dom@npm:^9.3.1, @testing-library/dom@npm:^9.3.3, @testing-library/dom@npm:^9.3.4": +"@testing-library/dom@npm:^9.0.0, @testing-library/dom@npm:^9.3.1, @testing-library/dom@npm:^9.3.3": version: 9.3.4 resolution: "@testing-library/dom@npm:9.3.4" dependencies: @@ -7358,39 +7345,9 @@ __metadata: languageName: node linkType: hard -"@testing-library/jest-dom@npm:6.1.4": - version: 6.1.4 - resolution: "@testing-library/jest-dom@npm:6.1.4" - dependencies: - "@adobe/css-tools": "npm:^4.3.1" - "@babel/runtime": "npm:^7.9.2" - aria-query: "npm:^5.0.0" - chalk: "npm:^3.0.0" - css.escape: "npm:^1.5.1" - dom-accessibility-api: "npm:^0.5.6" - lodash: "npm:^4.17.15" - redent: "npm:^3.0.0" - peerDependencies: - "@jest/globals": ">= 28" - "@types/jest": ">= 28" - jest: ">= 28" - vitest: ">= 0.32" - peerDependenciesMeta: - "@jest/globals": - optional: true - "@types/jest": - optional: true - jest: - optional: true - vitest: - optional: true - checksum: 10c0/2e23f120613fd8ae6d5169bbc94f1a2e4c82b07182057dc94db8ec54ebf32555833442e6c43a187e59715d83704ffb5df49ba88a71f6f32d2683f3d95ba721c7 - languageName: node - linkType: hard - -"@testing-library/jest-dom@npm:^6.4.1, @testing-library/jest-dom@npm:^6.4.2": - version: 6.4.2 - resolution: "@testing-library/jest-dom@npm:6.4.2" +"@testing-library/jest-dom@npm:6.4.5, @testing-library/jest-dom@npm:^6.4.1": + version: 6.4.5 + resolution: "@testing-library/jest-dom@npm:6.4.5" dependencies: "@adobe/css-tools": "npm:^4.3.2" "@babel/runtime": "npm:^7.9.2" @@ -7398,7 +7355,7 @@ __metadata: chalk: "npm:^3.0.0" css.escape: "npm:^1.5.1" dom-accessibility-api: "npm:^0.6.3" - lodash: "npm:^4.17.15" + lodash: "npm:^4.17.21" redent: "npm:^3.0.0" peerDependencies: "@jest/globals": ">= 28" @@ -7417,7 +7374,7 @@ __metadata: optional: true vitest: optional: true - checksum: 10c0/e7eba527b34ce30cde94424d2ec685bdfed51daaafb7df9b68b51aec6052e99a50c8bfe654612dacdf857a1eb81d68cf294fc89de558ee3a992bf7a6019fffcc + checksum: 10c0/4cfdd44e2abab2b9d399c47cbfe686729bb65160d7df0f9e2329aaaea7702f6e852a9eefb29b468f00c1e5a5274b684f8cac76959d33299dfa909ba007ea191d languageName: node linkType: hard @@ -7470,7 +7427,7 @@ __metadata: languageName: node linkType: hard -"@testing-library/user-event@npm:^14.4.0, @testing-library/user-event@npm:^14.4.3, @testing-library/user-event@npm:^14.5.2": +"@testing-library/user-event@npm:14.5.2, @testing-library/user-event@npm:^14.4.3": version: 14.5.2 resolution: "@testing-library/user-event@npm:14.5.2" peerDependencies: @@ -7746,13 +7703,6 @@ __metadata: languageName: node linkType: hard -"@types/doctrine@npm:^0.0.3": - version: 0.0.3 - resolution: "@types/doctrine@npm:0.0.3" - checksum: 10c0/566dcdc988c97ff01d14493ceb2223643347f07cf0a88c86cd7cb7c2821cfc837fd39295e6809a29614fdfdc6c4e981408155ca909b2e5da5d947af939b6c966 - languageName: node - linkType: hard - "@types/doctrine@npm:^0.0.9": version: 0.0.9 resolution: "@types/doctrine@npm:0.0.9" @@ -7836,7 +7786,7 @@ __metadata: languageName: node linkType: hard -"@types/express@npm:*, @types/express@npm:^4.17.11, @types/express@npm:^4.17.13, @types/express@npm:^4.7.0": +"@types/express@npm:*, @types/express@npm:^4.17.13, @types/express@npm:^4.17.21": version: 4.17.21 resolution: "@types/express@npm:4.17.21" dependencies: @@ -7970,15 +7920,6 @@ __metadata: languageName: node linkType: hard -"@types/ip@npm:^1.1.0": - version: 1.1.3 - resolution: "@types/ip@npm:1.1.3" - dependencies: - "@types/node": "npm:*" - checksum: 10c0/af576e33830196be01b71c48ad5f83380a1c51d62f394a5601e8c2a5b8b31cf6dc8fe71ac39c38d806bcf1d6f1c5c8205c129eca6b6d168c0df7ab3722df23b9 - languageName: node - linkType: hard - "@types/is-empty@npm:^1.0.0": version: 1.2.3 resolution: "@types/is-empty@npm:1.2.3" @@ -8523,15 +8464,6 @@ __metadata: languageName: node linkType: hard -"@types/webpack-virtual-modules@npm:^0.1.1": - version: 0.1.3 - resolution: "@types/webpack-virtual-modules@npm:0.1.3" - dependencies: - "@types/webpack": "npm:^4" - checksum: 10c0/3ead19e20df409433de7f5244d3c581ba050c691fe0aee0014fac4d9307366791e07c1db5c8beee0bd5010d4e06fd9b600dc9efc27e0aaf7d8daa9ec0714abf6 - languageName: node - linkType: hard - "@types/webpack@npm:^4": version: 4.41.34 resolution: "@types/webpack@npm:4.41.34" @@ -8878,25 +8810,25 @@ __metadata: languageName: node linkType: hard -"@vitest/expect@npm:1.3.1": - version: 1.3.1 - resolution: "@vitest/expect@npm:1.3.1" +"@vitest/expect@npm:1.6.0": + version: 1.6.0 + resolution: "@vitest/expect@npm:1.6.0" dependencies: - "@vitest/spy": "npm:1.3.1" - "@vitest/utils": "npm:1.3.1" + "@vitest/spy": "npm:1.6.0" + "@vitest/utils": "npm:1.6.0" chai: "npm:^4.3.10" - checksum: 10c0/ea66a1e912d896a481a27631b68089b885af7e8ed62ba8aaa119c37a9beafe6c094fd672775a20e6e23460af66e294f9ca259e6e0562708d1b7724eaaf53c7bb + checksum: 10c0/a4351f912a70543e04960f5694f1f1ac95f71a856a46e87bba27d3eb72a08c5d11d35021cbdc6077452a152e7d93723fc804bba76c2cc53c8896b7789caadae3 languageName: node linkType: hard -"@vitest/expect@patch:@vitest/expect@npm%3A1.3.1#~/.yarn/patches/@vitest-expect-npm-1.3.1-973071a540.patch": - version: 1.3.1 - resolution: "@vitest/expect@patch:@vitest/expect@npm%3A1.3.1#~/.yarn/patches/@vitest-expect-npm-1.3.1-973071a540.patch::version=1.3.1&hash=9dbd39" +"@vitest/expect@patch:@vitest/expect@npm%3A1.6.0#~/.yarn/patches/@vitest-expect-npm-1.6.0-0e382f8212.patch": + version: 1.6.0 + resolution: "@vitest/expect@patch:@vitest/expect@npm%3A1.6.0#~/.yarn/patches/@vitest-expect-npm-1.6.0-0e382f8212.patch::version=1.6.0&hash=7cb178" dependencies: - "@vitest/spy": "npm:1.3.1" - "@vitest/utils": "npm:1.3.1" + "@vitest/spy": "npm:1.6.0" + "@vitest/utils": "npm:1.6.0" chai: "npm:^4.3.10" - checksum: 10c0/f54446b97ffac9d64653ed771b883e4d733dc4f3bb6d4b161a583a8c5ef0461383f3d457174af71baf5b2d3c92e1b75495f0c1d0cca75644ad4a6f0df8f4ec55 + checksum: 10c0/073cfd09bfe6934408d0041be5a7251c2f80563a655f9387b8cd16a802752b47f1084de921ad6b5c45a48b5447773c52358c1cf68bb7e3b665b44c8cba19d8d3 languageName: node linkType: hard @@ -8931,12 +8863,12 @@ __metadata: languageName: node linkType: hard -"@vitest/spy@npm:1.3.1, @vitest/spy@npm:^1.3.1": - version: 1.3.1 - resolution: "@vitest/spy@npm:1.3.1" +"@vitest/spy@npm:1.6.0": + version: 1.6.0 + resolution: "@vitest/spy@npm:1.6.0" dependencies: tinyspy: "npm:^2.2.0" - checksum: 10c0/efc42f679d2a51fc6583ca3136ccd47581cb27c923ed3cb0500f5dee9aac99b681bfdd400c16ef108f2e0761daa642bc190816a6411931a2aba99ebf8b213dd4 + checksum: 10c0/df66ea6632b44fb76ef6a65c1abbace13d883703aff37cd6d062add6dcd1b883f19ce733af8e0f7feb185b61600c6eb4042a518e4fb66323d0690ec357f9401c languageName: node linkType: hard @@ -8952,15 +8884,15 @@ __metadata: languageName: node linkType: hard -"@vitest/utils@npm:1.3.1, @vitest/utils@npm:^1.3.1": - version: 1.3.1 - resolution: "@vitest/utils@npm:1.3.1" +"@vitest/utils@npm:1.6.0, @vitest/utils@npm:^1.3.1": + version: 1.6.0 + resolution: "@vitest/utils@npm:1.6.0" dependencies: diff-sequences: "npm:^29.6.3" estree-walker: "npm:^3.0.3" loupe: "npm:^2.3.7" pretty-format: "npm:^29.7.0" - checksum: 10c0/d604c8ad3b1aee30d4dcd889098f591407bfe18547ff96485b1d1ed54eff58219c756a9544a7fbd4e37886863abacd7a89a76334cb3ea7f84c3d496bb757db23 + checksum: 10c0/8b0d19835866455eb0b02b31c5ca3d8ad45f41a24e4c7e1f064b480f6b2804dc895a70af332f14c11ed89581011b92b179718523f55f5b14787285a0321b1301 languageName: node linkType: hard @@ -8973,12 +8905,12 @@ __metadata: languageName: node linkType: hard -"@volar/language-core@npm:1.11.1, @volar/language-core@npm:~1.11.1": - version: 1.11.1 - resolution: "@volar/language-core@npm:1.11.1" +"@volar/language-core@npm:2.2.2, @volar/language-core@npm:~2.2.2": + version: 2.2.2 + resolution: "@volar/language-core@npm:2.2.2" dependencies: - "@volar/source-map": "npm:1.11.1" - checksum: 10c0/92c4439e3a9ccc534c970031388c318740f6fa032283d03e136c6c8c0228f549c68a7c363af1a28252617a0dca6069e14028329ac906d5acf1912931d0cdcb69 + "@volar/source-map": "npm:2.2.2" + checksum: 10c0/e921772ffbd21f16b6aa48f2ea1b118f8b04af2738bba59e1629de5521bc7b4f543252173dbb6136a98d302b5babab92191a4f07c4a47f553645802e89be833c languageName: node linkType: hard @@ -8991,12 +8923,12 @@ __metadata: languageName: node linkType: hard -"@volar/source-map@npm:1.11.1, @volar/source-map@npm:~1.11.1": - version: 1.11.1 - resolution: "@volar/source-map@npm:1.11.1" +"@volar/source-map@npm:2.2.2": + version: 2.2.2 + resolution: "@volar/source-map@npm:2.2.2" dependencies: - muggle-string: "npm:^0.3.1" - checksum: 10c0/0bfc639889802705f8036ea8b2052a95a4d691a68bc2b6744ba8b9d312d887393dd3278101180a5ee5304972899d493972a483afafd41e097968746c77d724cb + muggle-string: "npm:^0.4.0" + checksum: 10c0/c827d825f960c56e152fbe26d609f0cbab7ece301e1855f14e6716dc5ef198a732a37f2dfdf0914102c69bf8954d6d79b663d363072e8b01beeaa7f169e477c2 languageName: node linkType: hard @@ -9009,13 +8941,13 @@ __metadata: languageName: node linkType: hard -"@volar/typescript@npm:~1.11.1": - version: 1.11.1 - resolution: "@volar/typescript@npm:1.11.1" +"@volar/typescript@npm:~2.2.2": + version: 2.2.2 + resolution: "@volar/typescript@npm:2.2.2" dependencies: - "@volar/language-core": "npm:1.11.1" + "@volar/language-core": "npm:2.2.2" path-browserify: "npm:^1.0.1" - checksum: 10c0/86fe153db3a14d8eb3632784a1d7fcbfbfb51fa5517c3878bfdd49ee8d15a83b1a09f9c589454b7396454c104d3a8e2db3a987dc99b37c33816772fc3e292bf2 + checksum: 10c0/3f558e6ecd2cd7cfbd37bc6bf83f20db6cd33f5ad05c6ad2c4fe6c2e98e3148f8253ff2ce64890ad23c3cbb19135ee5c539b240742d2507d7dc749b0eecbc6fc languageName: node linkType: hard @@ -9044,7 +8976,20 @@ __metadata: languageName: node linkType: hard -"@vue/compiler-core@npm:3.4.5, @vue/compiler-core@npm:^3.0.0": +"@vue/compiler-core@npm:3.4.27, @vue/compiler-core@npm:^3.0.0": + version: 3.4.27 + resolution: "@vue/compiler-core@npm:3.4.27" + dependencies: + "@babel/parser": "npm:^7.24.4" + "@vue/shared": "npm:3.4.27" + entities: "npm:^4.5.0" + estree-walker: "npm:^2.0.2" + source-map-js: "npm:^1.2.0" + checksum: 10c0/fbc9a4a6c467fa47609df3337c1b2012a55e3b07adbffc45a31435237ec1169d0a4ece22f3538607364427b779ce04154b86a0e8dd40d3bd4aa03358d4db136d + languageName: node + linkType: hard + +"@vue/compiler-core@npm:3.4.5": version: 3.4.5 resolution: "@vue/compiler-core@npm:3.4.5" dependencies: @@ -9077,7 +9022,7 @@ __metadata: languageName: node linkType: hard -"@vue/compiler-dom@npm:3.4.5, @vue/compiler-dom@npm:^3.2.0, @vue/compiler-dom@npm:^3.3.0": +"@vue/compiler-dom@npm:3.4.5": version: 3.4.5 resolution: "@vue/compiler-dom@npm:3.4.5" dependencies: @@ -9087,6 +9032,16 @@ __metadata: languageName: node linkType: hard +"@vue/compiler-dom@npm:^3.2.0, @vue/compiler-dom@npm:^3.3.0, @vue/compiler-dom@npm:^3.4.0": + version: 3.4.27 + resolution: "@vue/compiler-dom@npm:3.4.27" + dependencies: + "@vue/compiler-core": "npm:3.4.27" + "@vue/shared": "npm:3.4.27" + checksum: 10c0/ceb8aef314b6b7df1ab6cd3c7c1290e5b60363a6092bbffc3ee6aca42f6f5247a070b0dcbe71530751e840d01beec00a6268e3663abcf4a6ac297a32bfb90e49 + languageName: node + linkType: hard + "@vue/compiler-sfc@npm:3.0.0": version: 3.0.0 resolution: "@vue/compiler-sfc@npm:3.0.0" @@ -9199,17 +9154,15 @@ __metadata: languageName: node linkType: hard -"@vue/language-core@npm:1.8.27": - version: 1.8.27 - resolution: "@vue/language-core@npm:1.8.27" +"@vue/language-core@npm:2.0.17": + version: 2.0.17 + resolution: "@vue/language-core@npm:2.0.17" dependencies: - "@volar/language-core": "npm:~1.11.1" - "@volar/source-map": "npm:~1.11.1" - "@vue/compiler-dom": "npm:^3.3.0" - "@vue/shared": "npm:^3.3.0" + "@volar/language-core": "npm:~2.2.2" + "@vue/compiler-dom": "npm:^3.4.0" + "@vue/shared": "npm:^3.4.0" computeds: "npm:^0.0.1" minimatch: "npm:^9.0.3" - muggle-string: "npm:^0.3.1" path-browserify: "npm:^1.0.1" vue-template-compiler: "npm:^2.7.14" peerDependencies: @@ -9217,7 +9170,7 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10c0/2018214d8ce2643d19e8e84eddaeacddca28b2980984d7916d97f97556c3716be184cf9f8c4f506d072a11f265401e3bc0391117cf7cfcc1e4a25048f4432dc7 + checksum: 10c0/fd040d1c7c3c52b88ed607f467beb86ac65b716918c32e1c995017deb00daf4636e616a9a63e8dce23699718bf0011e2327a5873c1ec638dab8e9a7760d70e8c languageName: node linkType: hard @@ -9320,7 +9273,14 @@ __metadata: languageName: node linkType: hard -"@vue/shared@npm:3.4.5, @vue/shared@npm:^3.3.0": +"@vue/shared@npm:3.4.27, @vue/shared@npm:^3.3.0, @vue/shared@npm:^3.4.0": + version: 3.4.27 + resolution: "@vue/shared@npm:3.4.27" + checksum: 10c0/4a21918858270bcc654bb94b3429d9acbe95af097ea3063e192b36bd502dc896ca47778fa74a863b01f677ec271b189eb90f8b372943c10e52725a6bdc7f6cd5 + languageName: node + linkType: hard + +"@vue/shared@npm:3.4.5": version: 3.4.5 resolution: "@vue/shared@npm:3.4.5" checksum: 10c0/4bd4f6a6369ab02b8a01ac3b93fb5d580d3ea0e9781dd2be8ab676b50521733acbc85fac6b48bc9cd3704dc9237d6365148d287da51c07e1d0568d6c0f7742a1 @@ -9841,13 +9801,6 @@ __metadata: languageName: node linkType: hard -"ansi-regex@npm:^4.1.0": - version: 4.1.1 - resolution: "ansi-regex@npm:4.1.1" - checksum: 10c0/d36d34234d077e8770169d980fed7b2f3724bfa2a01da150ccd75ef9707c80e883d27cdf7a0eac2f145ac1d10a785a8a855cffd05b85f778629a0db62e7033da - languageName: node - linkType: hard - "ansi-regex@npm:^5.0.0, ansi-regex@npm:^5.0.1": version: 5.0.1 resolution: "ansi-regex@npm:5.0.1" @@ -9862,7 +9815,7 @@ __metadata: languageName: node linkType: hard -"ansi-styles@npm:^3.2.0, ansi-styles@npm:^3.2.1": +"ansi-styles@npm:^3.2.1": version: 3.2.1 resolution: "ansi-styles@npm:3.2.1" dependencies: @@ -9990,6 +9943,15 @@ __metadata: languageName: node linkType: hard +"aria-query@npm:5.3.0, aria-query@npm:^5.0.0, aria-query@npm:^5.3.0": + version: 5.3.0 + resolution: "aria-query@npm:5.3.0" + dependencies: + dequal: "npm:^2.0.3" + checksum: 10c0/2bff0d4eba5852a9dd578ecf47eaef0e82cc52569b48469b0aac2db5145db0b17b7a58d9e01237706d1e14b7a1b0ac9b78e9c97027ad97679dd8f91b85da1469 + languageName: node + linkType: hard + "aria-query@npm:^4.2.2": version: 4.2.2 resolution: "aria-query@npm:4.2.2" @@ -10000,15 +9962,6 @@ __metadata: languageName: node linkType: hard -"aria-query@npm:^5.3.0": - version: 5.3.0 - resolution: "aria-query@npm:5.3.0" - dependencies: - dequal: "npm:^2.0.3" - checksum: 10c0/2bff0d4eba5852a9dd578ecf47eaef0e82cc52569b48469b0aac2db5145db0b17b7a58d9e01237706d1e14b7a1b0ac9b78e9c97027ad97679dd8f91b85da1469 - languageName: node - linkType: hard - "arr-diff@npm:^4.0.0": version: 4.0.0 resolution: "arr-diff@npm:4.0.0" @@ -10074,15 +10027,6 @@ __metadata: languageName: node linkType: hard -"array-union@npm:^1.0.1": - version: 1.0.2 - resolution: "array-union@npm:1.0.2" - dependencies: - array-uniq: "npm:^1.0.1" - checksum: 10c0/18686767c0cfdae8dc4acf5ac119b0f0eacad82b7fcc0aa62cc41f93c5ad406d494b6a6e53d85e52e8f0349b67a4fec815feeb537e95c02510d747bc9a4157c7 - languageName: node - linkType: hard - "array-union@npm:^2.1.0": version: 2.1.0 resolution: "array-union@npm:2.1.0" @@ -10090,13 +10034,6 @@ __metadata: languageName: node linkType: hard -"array-uniq@npm:^1.0.1": - version: 1.0.3 - resolution: "array-uniq@npm:1.0.3" - checksum: 10c0/3acbaf9e6d5faeb1010e2db04ab171b8d265889e46c61762e502979bdc5e55656013726e9a61507de3c82d329a0dc1e8072630a3454b4f2b881cb19ba7fd8aa6 - languageName: node - linkType: hard - "array-unique@npm:^0.3.2": version: 0.3.2 resolution: "array-unique@npm:0.3.2" @@ -10216,7 +10153,7 @@ __metadata: languageName: node linkType: hard -"assert@npm:^2.0.0, assert@npm:^2.1.0": +"assert@npm:^2.0.0": version: 2.1.0 resolution: "assert@npm:2.1.0" dependencies: @@ -10803,12 +10740,12 @@ __metadata: languageName: node linkType: hard -"body-parser@npm:1.20.1": - version: 1.20.1 - resolution: "body-parser@npm:1.20.1" +"body-parser@npm:1.20.2": + version: 1.20.2 + resolution: "body-parser@npm:1.20.2" dependencies: bytes: "npm:3.1.2" - content-type: "npm:~1.0.4" + content-type: "npm:~1.0.5" debug: "npm:2.6.9" depd: "npm:2.0.0" destroy: "npm:1.2.0" @@ -10816,10 +10753,10 @@ __metadata: iconv-lite: "npm:0.4.24" on-finished: "npm:2.4.1" qs: "npm:6.11.0" - raw-body: "npm:2.5.1" + raw-body: "npm:2.5.2" type-is: "npm:~1.6.18" unpipe: "npm:1.0.0" - checksum: 10c0/a202d493e2c10a33fb7413dac7d2f713be579c4b88343cd814b6df7a38e5af1901fc31044e04de176db56b16d9772aa25a7723f64478c20f4d91b1ac223bf3b8 + checksum: 10c0/06f1438fff388a2e2354c96aa3ea8147b79bfcb1262dfcc2aae68ec13723d01d5781680657b74e9f83c808266d5baf52804032fbde2b7382b89bd8cdb273ace9 languageName: node linkType: hard @@ -11880,17 +11817,6 @@ __metadata: languageName: node linkType: hard -"cliui@npm:^5.0.0": - version: 5.0.0 - resolution: "cliui@npm:5.0.0" - dependencies: - string-width: "npm:^3.1.0" - strip-ansi: "npm:^5.2.0" - wrap-ansi: "npm:^5.1.0" - checksum: 10c0/76142bf306965850a71efd10c9755bd7f447c7c20dd652e1c1ce27d987f862a3facb3cceb2909cef6f0cb363646ee7a1735e3dfdd49f29ed16d733d33e15e2f8 - languageName: node - linkType: hard - "cliui@npm:^6.0.0": version: 6.0.0 resolution: "cliui@npm:6.0.0" @@ -12159,6 +12085,13 @@ __metadata: languageName: node linkType: hard +"comment-parser@npm:^1.4.1": + version: 1.4.1 + resolution: "comment-parser@npm:1.4.1" + checksum: 10c0/d6c4be3f5be058f98b24f2d557f745d8fe1cc9eb75bebbdccabd404a0e1ed41563171b16285f593011f8b6a5ec81f564fb1f2121418ac5cbf0f49255bf0840dd + languageName: node + linkType: hard + "common-path-prefix@npm:^3.0.0": version: 3.0.0 resolution: "common-path-prefix@npm:3.0.0" @@ -12244,25 +12177,6 @@ __metadata: languageName: node linkType: hard -"concurrently@npm:^5.3.0": - version: 5.3.0 - resolution: "concurrently@npm:5.3.0" - dependencies: - chalk: "npm:^2.4.2" - date-fns: "npm:^2.0.1" - lodash: "npm:^4.17.15" - read-pkg: "npm:^4.0.1" - rxjs: "npm:^6.5.2" - spawn-command: "npm:^0.0.2-1" - supports-color: "npm:^6.1.0" - tree-kill: "npm:^1.2.2" - yargs: "npm:^13.3.0" - bin: - concurrently: bin/concurrently.js - checksum: 10c0/6c0dab22bbe751a7099191434f76ac0bcfeb7608de63634849426b52e7bf2de1073573a318088bd1691e0318250c9c7ef049191a36fde7f1f551fb5742f6e451 - languageName: node - linkType: hard - "config-chain@npm:^1.1.13": version: 1.1.13 resolution: "config-chain@npm:1.1.13" @@ -12336,7 +12250,7 @@ __metadata: languageName: node linkType: hard -"content-type@npm:~1.0.4": +"content-type@npm:~1.0.4, content-type@npm:~1.0.5": version: 1.0.5 resolution: "content-type@npm:1.0.5" checksum: 10c0/b76ebed15c000aee4678c3707e0860cb6abd4e680a598c0a26e17f0bfae723ec9cc2802f0ff1bc6e4d80603719010431d2231018373d4dde10f9ccff9dadf5af @@ -12364,10 +12278,10 @@ __metadata: languageName: node linkType: hard -"cookie@npm:0.5.0": - version: 0.5.0 - resolution: "cookie@npm:0.5.0" - checksum: 10c0/c01ca3ef8d7b8187bae434434582288681273b5a9ed27521d4d7f9f7928fe0c920df0decd9f9d3bbd2d14ac432b8c8cf42b98b3bdd5bfe0e6edddeebebe8b61d +"cookie@npm:0.6.0": + version: 0.6.0 + resolution: "cookie@npm:0.6.0" + checksum: 10c0/f2318b31af7a31b4ddb4a678d024514df5e705f9be5909a192d7f116cfb6d45cbacf96a473fa733faa95050e7cff26e7832bb3ef94751592f1387b71c8956686 languageName: node linkType: hard @@ -12613,10 +12527,12 @@ __metadata: languageName: node linkType: hard -"crypto-random-string@npm:^2.0.0": - version: 2.0.0 - resolution: "crypto-random-string@npm:2.0.0" - checksum: 10c0/288589b2484fe787f9e146f56c4be90b940018f17af1b152e4dde12309042ff5a2bf69e949aab8b8ac253948381529cc6f3e5a2427b73643a71ff177fa122b37 +"crypto-random-string@npm:^4.0.0": + version: 4.0.0 + resolution: "crypto-random-string@npm:4.0.0" + dependencies: + type-fest: "npm:^1.0.1" + checksum: 10c0/16e11a3c8140398f5408b7fded35a961b9423c5dac39a60cbbd08bd3f0e07d7de130e87262adea7db03ec1a7a4b7551054e0db07ee5408b012bac5400cfc07a5 languageName: node linkType: hard @@ -12721,24 +12637,6 @@ __metadata: languageName: node linkType: hard -"cssstyle@npm:^3.0.0": - version: 3.0.0 - resolution: "cssstyle@npm:3.0.0" - dependencies: - rrweb-cssom: "npm:^0.6.0" - checksum: 10c0/23acee092c1cec670fb7b8110e48abd740dc4e574d3b74848743067cb3377a86a1f64cf02606aabd7bb153785e68c2c1e09ce53295ddf7a4b470b3c7c55ec807 - languageName: node - linkType: hard - -"cssstyle@npm:^4.0.1": - version: 4.0.1 - resolution: "cssstyle@npm:4.0.1" - dependencies: - rrweb-cssom: "npm:^0.6.0" - checksum: 10c0/cadf9a8b23e11f4c6d63f21291096a0b0be868bd4ab9c799daa2c5b18330e39e5281605f01da906e901b42f742df0f3b3645af6465e83377ff7d15a88ee432a0 - languageName: node - linkType: hard - "csstype@npm:^2.6.8": version: 2.6.21 resolution: "csstype@npm:2.6.21" @@ -12823,25 +12721,6 @@ __metadata: languageName: node linkType: hard -"data-urls@npm:^5.0.0": - version: 5.0.0 - resolution: "data-urls@npm:5.0.0" - dependencies: - whatwg-mimetype: "npm:^4.0.0" - whatwg-url: "npm:^14.0.0" - checksum: 10c0/1b894d7d41c861f3a4ed2ae9b1c3f0909d4575ada02e36d3d3bc584bdd84278e20709070c79c3b3bff7ac98598cb191eb3e86a89a79ea4ee1ef360e1694f92ad - languageName: node - linkType: hard - -"date-fns@npm:^2.0.1": - version: 2.30.0 - resolution: "date-fns@npm:2.30.0" - dependencies: - "@babel/runtime": "npm:^7.21.0" - checksum: 10c0/e4b521fbf22bc8c3db332bbfb7b094fd3e7627de0259a9d17c7551e2d2702608a7307a449206065916538e384f37b181565447ce2637ae09828427aed9cb5581 - languageName: node - linkType: hard - "de-indent@npm:^1.0.2": version: 1.0.2 resolution: "de-indent@npm:1.0.2" @@ -12893,13 +12772,6 @@ __metadata: languageName: node linkType: hard -"decimal.js@npm:^10.4.3": - version: 10.4.3 - resolution: "decimal.js@npm:10.4.3" - checksum: 10c0/6d60206689ff0911f0ce968d40f163304a6c1bc739927758e6efc7921cfa630130388966f16bf6ef6b838cb33679fbe8e7a78a2f3c478afce841fd55ac8fb8ee - languageName: node - linkType: hard - "decode-named-character-reference@npm:^1.0.0": version: 1.0.2 resolution: "decode-named-character-reference@npm:1.0.2" @@ -13101,22 +12973,6 @@ __metadata: languageName: node linkType: hard -"del@npm:^6.0.0": - version: 6.1.1 - resolution: "del@npm:6.1.1" - dependencies: - globby: "npm:^11.0.1" - graceful-fs: "npm:^4.2.4" - is-glob: "npm:^4.0.1" - is-path-cwd: "npm:^2.2.0" - is-path-inside: "npm:^3.0.2" - p-map: "npm:^4.0.0" - rimraf: "npm:^3.0.2" - slash: "npm:^3.0.0" - checksum: 10c0/8a095c5ccade42c867a60252914ae485ec90da243d735d1f63ec1e64c1cfbc2b8810ad69a29ab6326d159d4fddaa2f5bad067808c42072351ec458efff86708f - languageName: node - linkType: hard - "delay@npm:^5.0.0": version: 5.0.0 resolution: "delay@npm:5.0.0" @@ -13281,15 +13137,6 @@ __metadata: languageName: node linkType: hard -"dir-glob@npm:^2.0.0": - version: 2.2.2 - resolution: "dir-glob@npm:2.2.2" - dependencies: - path-type: "npm:^3.0.0" - checksum: 10c0/67575fd496df80ec90969f1a9f881f03b4ef614ca2c07139df81a12f9816250780dff906f482def0f897dd748d22fa13c076b52ac635e0024f7d434846077a3a - languageName: node - linkType: hard - "dir-glob@npm:^3.0.1": version: 3.0.1 resolution: "dir-glob@npm:3.0.1" @@ -13583,14 +13430,14 @@ __metadata: languageName: node linkType: hard -"ejs@npm:^3.1.7, ejs@npm:^3.1.8": - version: 3.1.9 - resolution: "ejs@npm:3.1.9" +"ejs@npm:^3.1.10, ejs@npm:^3.1.7": + version: 3.1.10 + resolution: "ejs@npm:3.1.10" dependencies: jake: "npm:^10.8.5" bin: ejs: bin/cli.js - checksum: 10c0/f0e249c79128810f5f6d5cbf347fc906d86bb9384263db0b2a9004aea649f2bc2d112736de5716c509c80afb4721c47281bd5b57c757d3b63f1bf5ac5f885893 + checksum: 10c0/52eade9e68416ed04f7f92c492183340582a36482836b11eab97b159fcdcfdedc62233a1bf0bf5e5e1851c501f2dca0e2e9afd111db2599e4e7f53ee29429ae1 languageName: node linkType: hard @@ -13779,13 +13626,6 @@ __metadata: languageName: node linkType: hard -"emoji-regex@npm:^7.0.1": - version: 7.0.3 - resolution: "emoji-regex@npm:7.0.3" - checksum: 10c0/a8917d695c3a3384e4b7230a6a06fd2de6b3db3709116792e8b7b36ddbb3db4deb28ad3e983e70d4f2a1f9063b5dab9025e4e26e9ca08278da4fbb73e213743f - languageName: node - linkType: hard - "emoji-regex@npm:^8.0.0": version: 8.0.0 resolution: "emoji-regex@npm:8.0.0" @@ -14157,33 +13997,33 @@ __metadata: languageName: node linkType: hard -"esbuild@npm:^0.20.1": - version: 0.20.1 - resolution: "esbuild@npm:0.20.1" - dependencies: - "@esbuild/aix-ppc64": "npm:0.20.1" - "@esbuild/android-arm": "npm:0.20.1" - "@esbuild/android-arm64": "npm:0.20.1" - "@esbuild/android-x64": "npm:0.20.1" - "@esbuild/darwin-arm64": "npm:0.20.1" - "@esbuild/darwin-x64": "npm:0.20.1" - "@esbuild/freebsd-arm64": "npm:0.20.1" - "@esbuild/freebsd-x64": "npm:0.20.1" - "@esbuild/linux-arm": "npm:0.20.1" - "@esbuild/linux-arm64": "npm:0.20.1" - "@esbuild/linux-ia32": "npm:0.20.1" - "@esbuild/linux-loong64": "npm:0.20.1" - "@esbuild/linux-mips64el": "npm:0.20.1" - "@esbuild/linux-ppc64": "npm:0.20.1" - "@esbuild/linux-riscv64": "npm:0.20.1" - "@esbuild/linux-s390x": "npm:0.20.1" - "@esbuild/linux-x64": "npm:0.20.1" - "@esbuild/netbsd-x64": "npm:0.20.1" - "@esbuild/openbsd-x64": "npm:0.20.1" - "@esbuild/sunos-x64": "npm:0.20.1" - "@esbuild/win32-arm64": "npm:0.20.1" - "@esbuild/win32-ia32": "npm:0.20.1" - "@esbuild/win32-x64": "npm:0.20.1" +"esbuild@npm:^0.21.5": + version: 0.21.5 + resolution: "esbuild@npm:0.21.5" + dependencies: + "@esbuild/aix-ppc64": "npm:0.21.5" + "@esbuild/android-arm": "npm:0.21.5" + "@esbuild/android-arm64": "npm:0.21.5" + "@esbuild/android-x64": "npm:0.21.5" + "@esbuild/darwin-arm64": "npm:0.21.5" + "@esbuild/darwin-x64": "npm:0.21.5" + "@esbuild/freebsd-arm64": "npm:0.21.5" + "@esbuild/freebsd-x64": "npm:0.21.5" + "@esbuild/linux-arm": "npm:0.21.5" + "@esbuild/linux-arm64": "npm:0.21.5" + "@esbuild/linux-ia32": "npm:0.21.5" + "@esbuild/linux-loong64": "npm:0.21.5" + "@esbuild/linux-mips64el": "npm:0.21.5" + "@esbuild/linux-ppc64": "npm:0.21.5" + "@esbuild/linux-riscv64": "npm:0.21.5" + "@esbuild/linux-s390x": "npm:0.21.5" + "@esbuild/linux-x64": "npm:0.21.5" + "@esbuild/netbsd-x64": "npm:0.21.5" + "@esbuild/openbsd-x64": "npm:0.21.5" + "@esbuild/sunos-x64": "npm:0.21.5" + "@esbuild/win32-arm64": "npm:0.21.5" + "@esbuild/win32-ia32": "npm:0.21.5" + "@esbuild/win32-x64": "npm:0.21.5" dependenciesMeta: "@esbuild/aix-ppc64": optional: true @@ -14233,7 +14073,7 @@ __metadata: optional: true bin: esbuild: bin/esbuild - checksum: 10c0/7e0303cb80defd55f3f7b85108081afc9c2f3852dda13bf70975a89210f20cd658fc02540d34247401806cb069c4ec489f7cf0df833e040ee361826484926c3a + checksum: 10c0/fa08508adf683c3f399e8a014a6382a6b65542213431e26206c0720e536b31c09b50798747c2a105a4bbba1d9767b8d3615a74c2f7bf1ddf6d836cd11eb672de languageName: node linkType: hard @@ -14940,23 +14780,6 @@ __metadata: languageName: node linkType: hard -"execa@npm:^2.0.1": - version: 2.1.0 - resolution: "execa@npm:2.1.0" - dependencies: - cross-spawn: "npm:^7.0.0" - get-stream: "npm:^5.0.0" - is-stream: "npm:^2.0.0" - merge-stream: "npm:^2.0.0" - npm-run-path: "npm:^3.0.0" - onetime: "npm:^5.1.0" - p-finally: "npm:^2.0.0" - signal-exit: "npm:^3.0.2" - strip-final-newline: "npm:^2.0.0" - checksum: 10c0/6578db04a18a9d166a2de6f85be2f1130315fe5917d8163fdbbeaaec39f89cc20448e243dffe833f58b93c210fb3b19e3612c155c81853722497100b8230c34c - languageName: node - linkType: hard - "execa@npm:^5.0.0, execa@npm:^5.1.1": version: 5.1.1 resolution: "execa@npm:5.1.1" @@ -15039,16 +14862,16 @@ __metadata: languageName: node linkType: hard -"express@npm:^4.17.3": - version: 4.18.2 - resolution: "express@npm:4.18.2" +"express@npm:^4.17.3, express@npm:^4.19.2": + version: 4.19.2 + resolution: "express@npm:4.19.2" dependencies: accepts: "npm:~1.3.8" array-flatten: "npm:1.1.1" - body-parser: "npm:1.20.1" + body-parser: "npm:1.20.2" content-disposition: "npm:0.5.4" content-type: "npm:~1.0.4" - cookie: "npm:0.5.0" + cookie: "npm:0.6.0" cookie-signature: "npm:1.0.6" debug: "npm:2.6.9" depd: "npm:2.0.0" @@ -15074,7 +14897,7 @@ __metadata: type-is: "npm:~1.6.18" utils-merge: "npm:1.0.1" vary: "npm:~1.1.2" - checksum: 10c0/75af556306b9241bc1d7bdd40c9744b516c38ce50ae3210658efcbf96e3aed4ab83b3432f06215eae5610c123bc4136957dc06e50dfc50b7d4d775af56c4c59c + checksum: 10c0/e82e2662ea9971c1407aea9fc3c16d6b963e55e3830cd0ef5e00b533feda8b770af4e3be630488ef8a752d7c75c4fcefb15892868eeaafe7353cb9e3e269fdcb languageName: node linkType: hard @@ -16110,7 +15933,7 @@ __metadata: languageName: node linkType: hard -"get-stream@npm:^5.0.0, get-stream@npm:^5.1.0": +"get-stream@npm:^5.1.0": version: 5.2.0 resolution: "get-stream@npm:5.2.0" dependencies: @@ -16346,7 +16169,7 @@ __metadata: languageName: node linkType: hard -"globby@npm:^11.0.1, globby@npm:^11.1.0": +"globby@npm:^11.1.0": version: 11.1.0 resolution: "globby@npm:11.1.0" dependencies: @@ -16387,20 +16210,6 @@ __metadata: languageName: node linkType: hard -"globby@npm:^7.1.1": - version: 7.1.1 - resolution: "globby@npm:7.1.1" - dependencies: - array-union: "npm:^1.0.1" - dir-glob: "npm:^2.0.0" - glob: "npm:^7.1.2" - ignore: "npm:^3.3.5" - pify: "npm:^3.0.0" - slash: "npm:^1.0.0" - checksum: 10c0/016d4dfac6069221b2db18ad6afb0011639899920dbec87492ddc048fcd433361e6c094b12451ab14cf062013a776f47ef21bb8289d5e09a2f23e81d5aec0f8e - languageName: node - linkType: hard - "google-auth-library@npm:^7.14.0": version: 7.14.1 resolution: "google-auth-library@npm:7.14.1" @@ -16539,6 +16348,17 @@ __metadata: languageName: node linkType: hard +"happy-dom@npm:^14.12.0": + version: 14.12.0 + resolution: "happy-dom@npm:14.12.0" + dependencies: + entities: "npm:^4.5.0" + webidl-conversions: "npm:^7.0.0" + whatwg-mimetype: "npm:^3.0.0" + checksum: 10c0/b844d7f3f16d2657a8650e0968ddd9272f152cfd9660e0dd4378215f153fc940509981d387e1e855f117baf0cf432918ff084f10c9b557192db5d7743d78302e + languageName: node + linkType: hard + "has-bigints@npm:^1.0.1, has-bigints@npm:^1.0.2": version: 1.0.2 resolution: "has-bigints@npm:1.0.2" @@ -16909,15 +16729,6 @@ __metadata: languageName: node linkType: hard -"html-encoding-sniffer@npm:^4.0.0": - version: 4.0.0 - resolution: "html-encoding-sniffer@npm:4.0.0" - dependencies: - whatwg-encoding: "npm:^3.1.1" - checksum: 10c0/523398055dc61ac9b34718a719cb4aa691e4166f29187e211e1607de63dc25ac7af52ca7c9aead0c4b3c0415ffecb17326396e1202e2e86ff4bca4c0ee4c6140 - languageName: node - linkType: hard - "html-entities@npm:^2.1.0, html-entities@npm:^2.3.2": version: 2.4.0 resolution: "html-entities@npm:2.4.0" @@ -17304,13 +17115,6 @@ __metadata: languageName: node linkType: hard -"ignore@npm:^3.3.5": - version: 3.3.10 - resolution: "ignore@npm:3.3.10" - checksum: 10c0/973e0ef3b3eaab8fc19014d80014ed11bcf3585de8088d9c7a5b5c4edefc55f4ecdc498144bdd0440b8e2ff22deb03f89c90300bfef2d1750d5920f997d0a600 - languageName: node - linkType: hard - "ignore@npm:^4.0.6": version: 4.0.6 resolution: "ignore@npm:4.0.6" @@ -17499,7 +17303,7 @@ __metadata: languageName: node linkType: hard -"ip@npm:^2.0.0, ip@npm:^2.0.1": +"ip@npm:^2.0.0": version: 2.0.1 resolution: "ip@npm:2.0.1" checksum: 10c0/cab8eb3e88d0abe23e4724829621ec4c4c5cb41a7f936a2e626c947128c1be16ed543448d42af7cca95379f9892bfcacc1ccd8d09bc7e8bea0e86d492ce33616 @@ -17808,13 +17612,6 @@ __metadata: languageName: node linkType: hard -"is-fullwidth-code-point@npm:^2.0.0": - version: 2.0.0 - resolution: "is-fullwidth-code-point@npm:2.0.0" - checksum: 10c0/e58f3e4a601fc0500d8b2677e26e9fe0cd450980e66adb29d85b6addf7969731e38f8e43ed2ec868a09c101a55ac3d8b78902209269f38c5286bc98f5bc1b4d9 - languageName: node - linkType: hard - "is-fullwidth-code-point@npm:^3.0.0": version: 3.0.0 resolution: "is-fullwidth-code-point@npm:3.0.0" @@ -17945,14 +17742,7 @@ __metadata: languageName: node linkType: hard -"is-path-cwd@npm:^2.2.0": - version: 2.2.0 - resolution: "is-path-cwd@npm:2.2.0" - checksum: 10c0/afce71533a427a759cd0329301c18950333d7589533c2c90205bd3fdcf7b91eb92d1940493190567a433134d2128ec9325de2fd281e05be1920fbee9edd22e0a - languageName: node - linkType: hard - -"is-path-inside@npm:^3.0.2, is-path-inside@npm:^3.0.3": +"is-path-inside@npm:^3.0.3": version: 3.0.3 resolution: "is-path-inside@npm:3.0.3" checksum: 10c0/cf7d4ac35fb96bab6a1d2c3598fe5ebb29aafb52c0aaa482b5a3ed9d8ba3edc11631e3ec2637660c44b3ce0e61a08d54946e8af30dec0b60a7c27296c68ffd05 @@ -17996,13 +17786,6 @@ __metadata: languageName: node linkType: hard -"is-potential-custom-element-name@npm:^1.0.1": - version: 1.0.1 - resolution: "is-potential-custom-element-name@npm:1.0.1" - checksum: 10c0/b73e2f22bc863b0939941d369486d308b43d7aef1f9439705e3582bfccaa4516406865e32c968a35f97a99396dac84e2624e67b0a16b0a15086a785e16ce7db9 - languageName: node - linkType: hard - "is-promise@npm:^2.0.0": version: 2.2.2 resolution: "is-promise@npm:2.2.2" @@ -18502,71 +18285,10 @@ __metadata: languageName: node linkType: hard -"jsdom@npm:^23.0.1": - version: 23.0.1 - resolution: "jsdom@npm:23.0.1" - dependencies: - cssstyle: "npm:^3.0.0" - data-urls: "npm:^5.0.0" - decimal.js: "npm:^10.4.3" - form-data: "npm:^4.0.0" - html-encoding-sniffer: "npm:^4.0.0" - http-proxy-agent: "npm:^7.0.0" - https-proxy-agent: "npm:^7.0.2" - is-potential-custom-element-name: "npm:^1.0.1" - nwsapi: "npm:^2.2.7" - parse5: "npm:^7.1.2" - rrweb-cssom: "npm:^0.6.0" - saxes: "npm:^6.0.0" - symbol-tree: "npm:^3.2.4" - tough-cookie: "npm:^4.1.3" - w3c-xmlserializer: "npm:^5.0.0" - webidl-conversions: "npm:^7.0.0" - whatwg-encoding: "npm:^3.1.1" - whatwg-mimetype: "npm:^4.0.0" - whatwg-url: "npm:^14.0.0" - ws: "npm:^8.14.2" - xml-name-validator: "npm:^5.0.0" - peerDependencies: - canvas: ^2.11.2 - peerDependenciesMeta: - canvas: - optional: true - checksum: 10c0/13b2b3693ccb40215d1cce77bac7a295414ee4c0a06e30167f8087c9867145ba23dbd592bd95a801cadd7b3698bfd20b9c3f2c26fd8422607f22609ed2e404ef - languageName: node - linkType: hard - -"jsdom@npm:^24.0.0": - version: 24.0.0 - resolution: "jsdom@npm:24.0.0" - dependencies: - cssstyle: "npm:^4.0.1" - data-urls: "npm:^5.0.0" - decimal.js: "npm:^10.4.3" - form-data: "npm:^4.0.0" - html-encoding-sniffer: "npm:^4.0.0" - http-proxy-agent: "npm:^7.0.0" - https-proxy-agent: "npm:^7.0.2" - is-potential-custom-element-name: "npm:^1.0.1" - nwsapi: "npm:^2.2.7" - parse5: "npm:^7.1.2" - rrweb-cssom: "npm:^0.6.0" - saxes: "npm:^6.0.0" - symbol-tree: "npm:^3.2.4" - tough-cookie: "npm:^4.1.3" - w3c-xmlserializer: "npm:^5.0.0" - webidl-conversions: "npm:^7.0.0" - whatwg-encoding: "npm:^3.1.1" - whatwg-mimetype: "npm:^4.0.0" - whatwg-url: "npm:^14.0.0" - ws: "npm:^8.16.0" - xml-name-validator: "npm:^5.0.0" - peerDependencies: - canvas: ^2.11.2 - peerDependenciesMeta: - canvas: - optional: true - checksum: 10c0/7b35043d7af39ad6dcaef0fa5679d8c8a94c6c9b6cc4a79222b7c9987d57ab7150c50856684ae56b473ab28c7d82aec0fb7ca19dcbd4c3f46683c807d717a3af +"jsdoc-type-pratt-parser@npm:^4.0.0": + version: 4.0.0 + resolution: "jsdoc-type-pratt-parser@npm:4.0.0" + checksum: 10c0/b23ef7bbbe2f56d72630d1c5a233dc9fecaff399063d373c57bef136908c1b05e723dac107177303c03ccf8d75aa51507510b282aa567600477479c5ea0c36d1 languageName: node linkType: hard @@ -18604,13 +18326,6 @@ __metadata: languageName: node linkType: hard -"json-parse-better-errors@npm:^1.0.1": - version: 1.0.2 - resolution: "json-parse-better-errors@npm:1.0.2" - checksum: 10c0/2f1287a7c833e397c9ddd361a78638e828fc523038bb3441fd4fc144cfd2c6cd4963ffb9e207e648cf7b692600f1e1e524e965c32df5152120910e4903a47dcb - languageName: node - linkType: hard - "json-parse-even-better-errors@npm:^2.3.0, json-parse-even-better-errors@npm:^2.3.1": version: 2.3.1 resolution: "json-parse-even-better-errors@npm:2.3.1" @@ -19552,7 +19267,7 @@ __metadata: languageName: node linkType: hard -"make-dir@npm:^3.0.2, make-dir@npm:^3.1.0": +"make-dir@npm:^3.0.2": version: 3.1.0 resolution: "make-dir@npm:3.1.0" dependencies: @@ -19687,12 +19402,12 @@ __metadata: languageName: node linkType: hard -"markdown-to-jsx@npm:7.3.2": - version: 7.3.2 - resolution: "markdown-to-jsx@npm:7.3.2" +"markdown-to-jsx@npm:^7.4.5": + version: 7.4.5 + resolution: "markdown-to-jsx@npm:7.4.5" peerDependencies: react: ">= 0.14.0" - checksum: 10c0/191b9a9defeed02e12dd340cebf279f577266dac7b34574fa44ce4d64ee8536f9967d455b8303c853f84413feb473118290a6160d8221eeaf3b9e4961b8980e3 + checksum: 10c0/1c917be129a2d7091715cca7230c7adfa457ed3069fb243d6df4f22721749ee1a5a6d7be5d88d8ccbb422cc8c7f12fb87112e24c70da9ea45d9a3b9b62ffbb76 languageName: node linkType: hard @@ -21177,26 +20892,6 @@ __metadata: languageName: node linkType: hard -"mount-point@npm:^3.0.0": - version: 3.0.0 - resolution: "mount-point@npm:3.0.0" - dependencies: - "@sindresorhus/df": "npm:^1.0.1" - pify: "npm:^2.3.0" - pinkie-promise: "npm:^2.0.1" - checksum: 10c0/1837afa180c55f9d6b01f04680e4aae4561ef94f1e7db8747f60c6130e4932e8e6cf6c42febd15502985761726e1f3ad989ac9a5ab86eca61b9577935d64d222 - languageName: node - linkType: hard - -"move-file@npm:^2.0.0": - version: 2.1.0 - resolution: "move-file@npm:2.1.0" - dependencies: - path-exists: "npm:^4.0.0" - checksum: 10c0/730ecc6188677ad4955944b088d8ebfcfda04af766bf0407aa9f5cb0a4db9e54d064a5c052ee11d764a26e5486211a2a3ac542a417a2effdb0bae2e9fd4bb7ee - languageName: node - linkType: hard - "mri@npm:^1.1.0, mri@npm:^1.2.0": version: 1.2.0 resolution: "mri@npm:1.2.0" @@ -21239,6 +20934,13 @@ __metadata: languageName: node linkType: hard +"muggle-string@npm:^0.4.0": + version: 0.4.1 + resolution: "muggle-string@npm:0.4.1" + checksum: 10c0/e914b63e24cd23f97e18376ec47e4ba3aa24365e4776212b666add2e47bb158003212980d732c49abf3719568900af7861873844a6e2d3a7ca7e86952c0e99e9 + languageName: node + linkType: hard + "multicast-dns@npm:^7.2.5": version: 7.2.5 resolution: "multicast-dns@npm:7.2.5" @@ -21634,7 +21336,7 @@ __metadata: languageName: node linkType: hard -"normalize-package-data@npm:^2.3.2, normalize-package-data@npm:^2.5.0": +"normalize-package-data@npm:^2.5.0": version: 2.5.0 resolution: "normalize-package-data@npm:2.5.0" dependencies: @@ -21770,15 +21472,6 @@ __metadata: languageName: node linkType: hard -"npm-run-path@npm:^3.0.0": - version: 3.1.0 - resolution: "npm-run-path@npm:3.1.0" - dependencies: - path-key: "npm:^3.0.0" - checksum: 10c0/8399f01239e9a5bf5a10bddbc71ecac97e0b7890e5b78abe9731fc759db48865b0686cc86ec079cd254a98ba119a3fa08f1b23f9de1a5428c19007bbc7b5a728 - languageName: node - linkType: hard - "npm-run-path@npm:^4.0.1": version: 4.0.1 resolution: "npm-run-path@npm:4.0.1" @@ -21830,13 +21523,6 @@ __metadata: languageName: node linkType: hard -"nwsapi@npm:^2.2.7": - version: 2.2.7 - resolution: "nwsapi@npm:2.2.7" - checksum: 10c0/44be198adae99208487a1c886c0a3712264f7bbafa44368ad96c003512fed2753d4e22890ca1e6edb2690c3456a169f2a3c33bfacde1905cf3bf01c7722464db - languageName: node - linkType: hard - "nx@npm:18.0.6": version: 18.0.6 resolution: "nx@npm:18.0.6" @@ -22196,13 +21882,6 @@ __metadata: languageName: node linkType: hard -"os-homedir@npm:^1.0.0": - version: 1.0.2 - resolution: "os-homedir@npm:1.0.2" - checksum: 10c0/6be4aa67317ee247b8d46142e243fb4ef1d2d65d3067f54bfc5079257a2f4d4d76b2da78cba7af3cb3f56dbb2e4202e0c47f26171d11ca1ed4008d842c90363f - languageName: node - linkType: hard - "os-name@npm:^3.1.0": version: 3.1.0 resolution: "os-name@npm:3.1.0" @@ -22250,13 +21929,6 @@ __metadata: languageName: node linkType: hard -"p-finally@npm:^2.0.0": - version: 2.0.1 - resolution: "p-finally@npm:2.0.1" - checksum: 10c0/a4ee34179f5e0eb5417462ca5afbca4b6b537b051ea87c8ec7649ffb2b60a8e82a06441792fe496ab0d0156c4060a3dfd707973915a1b8369b00f2531e3eab94 - languageName: node - linkType: hard - "p-limit@npm:^1.1.0": version: 1.3.0 resolution: "p-limit@npm:1.3.0" @@ -22520,16 +22192,6 @@ __metadata: languageName: node linkType: hard -"parse-json@npm:^4.0.0": - version: 4.0.0 - resolution: "parse-json@npm:4.0.0" - dependencies: - error-ex: "npm:^1.3.1" - json-parse-better-errors: "npm:^1.0.1" - checksum: 10c0/8d80790b772ccb1bcea4e09e2697555e519d83d04a77c2b4237389b813f82898943a93ffff7d0d2406203bdd0c30dcf95b1661e3a53f83d0e417f053957bef32 - languageName: node - linkType: hard - "parse-json@npm:^5.0.0, parse-json@npm:^5.2.0": version: 5.2.0 resolution: "parse-json@npm:5.2.0" @@ -22605,7 +22267,7 @@ __metadata: languageName: node linkType: hard -"parse5@npm:^7.0.0, parse5@npm:^7.1.2": +"parse5@npm:^7.0.0": version: 7.1.2 resolution: "parse5@npm:7.1.2" dependencies: @@ -22741,15 +22403,6 @@ __metadata: languageName: node linkType: hard -"path-type@npm:^3.0.0": - version: 3.0.0 - resolution: "path-type@npm:3.0.0" - dependencies: - pify: "npm:^3.0.0" - checksum: 10c0/1332c632f1cac15790ebab8dd729b67ba04fc96f81647496feb1c2975d862d046f41e4b975dbd893048999b2cc90721f72924ad820acc58c78507ba7141a8e56 - languageName: node - linkType: hard - "path-type@npm:^4.0.0": version: 4.0.0 resolution: "path-type@npm:4.0.0" @@ -22802,13 +22455,6 @@ __metadata: languageName: node linkType: hard -"performance-now@npm:^2.1.0": - version: 2.1.0 - resolution: "performance-now@npm:2.1.0" - checksum: 10c0/22c54de06f269e29f640e0e075207af57de5052a3d15e360c09b9a8663f393f6f45902006c1e71aa8a5a1cdfb1a47fe268826f8496d6425c362f00f5bc3e85d9 - languageName: node - linkType: hard - "periscopic@npm:^3.0.0, periscopic@npm:^3.1.0": version: 3.1.0 resolution: "periscopic@npm:3.1.0" @@ -22857,20 +22503,6 @@ __metadata: languageName: node linkType: hard -"pify@npm:^2.3.0": - version: 2.3.0 - resolution: "pify@npm:2.3.0" - checksum: 10c0/551ff8ab830b1052633f59cb8adc9ae8407a436e06b4a9718bcb27dc5844b83d535c3a8512b388b6062af65a98c49bdc0dd523d8b2617b188f7c8fee457158dc - languageName: node - linkType: hard - -"pify@npm:^3.0.0": - version: 3.0.0 - resolution: "pify@npm:3.0.0" - checksum: 10c0/fead19ed9d801f1b1fcd0638a1ac53eabbb0945bf615f2f8806a8b646565a04a1b0e7ef115c951d225f042cca388fdc1cd3add46d10d1ed6951c20bd2998af10 - languageName: node - linkType: hard - "pify@npm:^4.0.1": version: 4.0.1 resolution: "pify@npm:4.0.1" @@ -22878,22 +22510,6 @@ __metadata: languageName: node linkType: hard -"pinkie-promise@npm:^2.0.1": - version: 2.0.1 - resolution: "pinkie-promise@npm:2.0.1" - dependencies: - pinkie: "npm:^2.0.0" - checksum: 10c0/11b5e5ce2b090c573f8fad7b517cbca1bb9a247587306f05ae71aef6f9b2cd2b923c304aa9663c2409cfde27b367286179f1379bc4ec18a3fbf2bb0d473b160a - languageName: node - linkType: hard - -"pinkie@npm:^2.0.0": - version: 2.0.4 - resolution: "pinkie@npm:2.0.4" - checksum: 10c0/25228b08b5597da42dc384221aa0ce56ee0fbf32965db12ba838e2a9ca0193c2f0609c45551ee077ccd2060bf109137fdb185b00c6d7e0ed7e35006d20fdcbc6 - languageName: node - linkType: hard - "pinpoint@npm:^1.1.0": version: 1.1.0 resolution: "pinpoint@npm:1.1.0" @@ -22901,7 +22517,7 @@ __metadata: languageName: node linkType: hard -"pirates@npm:^4.0.6": +"pirates@npm:^4.0.5": version: 4.0.6 resolution: "pirates@npm:4.0.6" checksum: 10c0/00d5fa51f8dded94d7429700fb91a0c1ead00ae2c7fd27089f0c5b63e6eca36197fe46384631872690a66f390c5e27198e99006ab77ae472692ab9c2ca903f36 @@ -23530,13 +23146,6 @@ __metadata: languageName: node linkType: hard -"psl@npm:^1.1.33": - version: 1.9.0 - resolution: "psl@npm:1.9.0" - checksum: 10c0/6a3f805fdab9442f44de4ba23880c4eba26b20c8e8e0830eff1cb31007f6825dace61d17203c58bfe36946842140c97a1ba7f67bc63ca2d88a7ee052b65d97ab - languageName: node - linkType: hard - "public-encrypt@npm:^4.0.0": version: 4.0.3 resolution: "public-encrypt@npm:4.0.3" @@ -23716,7 +23325,7 @@ __metadata: languageName: node linkType: hard -"punycode@npm:^2.1.0, punycode@npm:^2.1.1, punycode@npm:^2.3.1": +"punycode@npm:^2.1.0, punycode@npm:^2.1.1": version: 2.3.1 resolution: "punycode@npm:2.3.1" checksum: 10c0/14f76a8206bc3464f794fb2e3d3cc665ae416c01893ad7a02b23766eb07159144ee612ad67af5e84fa4479ccfe67678c4feb126b0485651b302babf66f04f9e9 @@ -23767,13 +23376,6 @@ __metadata: languageName: node linkType: hard -"querystringify@npm:^2.1.1": - version: 2.2.0 - resolution: "querystringify@npm:2.2.0" - checksum: 10c0/3258bc3dbdf322ff2663619afe5947c7926a6ef5fb78ad7d384602974c467fadfc8272af44f5eb8cddd0d011aae8fabf3a929a8eee4b86edcc0a21e6bd10f9aa - languageName: node - linkType: hard - "queue-microtask@npm:^1.2.2": version: 1.2.3 resolution: "queue-microtask@npm:1.2.3" @@ -23808,15 +23410,6 @@ __metadata: languageName: node linkType: hard -"raf@npm:^3.4.1": - version: 3.4.1 - resolution: "raf@npm:3.4.1" - dependencies: - performance-now: "npm:^2.1.0" - checksum: 10c0/337f0853c9e6a77647b0f499beedafea5d6facfb9f2d488a624f88b03df2be72b8a0e7f9118a3ff811377d534912039a3311815700d2b6d2313f82f736f9eb6e - languageName: node - linkType: hard - "ramda@npm:0.29.0": version: 0.29.0 resolution: "ramda@npm:0.29.0" @@ -23850,15 +23443,15 @@ __metadata: languageName: node linkType: hard -"raw-body@npm:2.5.1": - version: 2.5.1 - resolution: "raw-body@npm:2.5.1" +"raw-body@npm:2.5.2": + version: 2.5.2 + resolution: "raw-body@npm:2.5.2" dependencies: bytes: "npm:3.1.2" http-errors: "npm:2.0.0" iconv-lite: "npm:0.4.24" unpipe: "npm:1.0.0" - checksum: 10c0/5dad5a3a64a023b894ad7ab4e5c7c1ce34d3497fc7138d02f8c88a3781e68d8a55aa7d4fd3a458616fa8647cc228be314a1c03fb430a07521de78b32c4dd09d2 + checksum: 10c0/b201c4b66049369a60e766318caff5cb3cc5a900efd89bdac431463822d976ad0670912c931fdbdcf5543207daf6f6833bca57aa116e1661d2ea91e12ca692c4 languageName: node linkType: hard @@ -24312,17 +23905,6 @@ __metadata: languageName: node linkType: hard -"read-pkg@npm:^4.0.1": - version: 4.0.1 - resolution: "read-pkg@npm:4.0.1" - dependencies: - normalize-package-data: "npm:^2.3.2" - parse-json: "npm:^4.0.0" - pify: "npm:^3.0.0" - checksum: 10c0/70c934969aba7267a229871345fe1714e1416085c3db9cba8f7fcd78fba3bd38cef7f08a9d661880e552a5722baf8feaf792875b3108d251a5b6dd94369c752d - languageName: node - linkType: hard - "read-pkg@npm:^5.2.0": version: 5.2.0 resolution: "read-pkg@npm:5.2.0" @@ -25355,13 +24937,6 @@ __metadata: languageName: node linkType: hard -"rrweb-cssom@npm:^0.6.0": - version: 0.6.0 - resolution: "rrweb-cssom@npm:0.6.0" - checksum: 10c0/3d9d90d53c2349ea9c8509c2690df5a4ef930c9cf8242aeb9425d4046f09d712bb01047e00da0e1c1dab5db35740b3d78fd45c3e7272f75d3724a563f27c30a3 - languageName: node - linkType: hard - "rsvp@npm:^3.0.14, rsvp@npm:^3.0.18": version: 3.6.2 resolution: "rsvp@npm:3.6.2" @@ -25408,15 +24983,6 @@ __metadata: languageName: node linkType: hard -"rxjs@npm:^6.5.2": - version: 6.6.7 - resolution: "rxjs@npm:6.6.7" - dependencies: - tslib: "npm:^1.9.0" - checksum: 10c0/e556a13a9aa89395e5c9d825eabcfa325568d9c9990af720f3f29f04a888a3b854f25845c2b55875d875381abcae2d8100af9cacdc57576e7ed6be030a01d2fe - languageName: node - linkType: hard - "sade@npm:^1.7.3, sade@npm:^1.7.4": version: 1.8.1 resolution: "sade@npm:1.8.1" @@ -25569,15 +25135,6 @@ __metadata: languageName: node linkType: hard -"saxes@npm:^6.0.0": - version: 6.0.0 - resolution: "saxes@npm:6.0.0" - dependencies: - xmlchars: "npm:^2.2.0" - checksum: 10c0/3847b839f060ef3476eb8623d099aa502ad658f5c40fd60c105ebce86d244389b0d76fcae30f4d0c728d7705ceb2f7e9b34bb54717b6a7dbedaf5dad2d9a4b74 - languageName: node - linkType: hard - "sb@workspace:lib/cli-sb": version: 0.0.0-use.local resolution: "sb@workspace:lib/cli-sb" @@ -26030,13 +25587,6 @@ __metadata: languageName: node linkType: hard -"slash@npm:^1.0.0": - version: 1.0.0 - resolution: "slash@npm:1.0.0" - checksum: 10c0/3944659885d905480f98810542fd314f3e1006eaad25ec78227a7835a469d9ed66fc3dd90abc7377dd2e71f4b5473e8f766bd08198fdd25152a80792e9ed464c - languageName: node - linkType: hard - "slash@npm:^3.0.0": version: 3.0.0 resolution: "slash@npm:3.0.0" @@ -26325,13 +25875,6 @@ __metadata: languageName: node linkType: hard -"spawn-command@npm:^0.0.2-1": - version: 0.0.2 - resolution: "spawn-command@npm:0.0.2" - checksum: 10c0/b22f2d71239e6e628a400831861ba747750bbb40c0a53323754cf7b84330b73d81e40ff1f9055e6d1971818679510208a9302e13d9ff3b32feb67e74d7a1b3ef - languageName: node - linkType: hard - "spdx-correct@npm:^3.0.0": version: 3.2.0 resolution: "spdx-correct@npm:3.2.0" @@ -26590,17 +26133,6 @@ __metadata: languageName: node linkType: hard -"string-width@npm:^3.0.0, string-width@npm:^3.1.0": - version: 3.1.0 - resolution: "string-width@npm:3.1.0" - dependencies: - emoji-regex: "npm:^7.0.1" - is-fullwidth-code-point: "npm:^2.0.0" - strip-ansi: "npm:^5.1.0" - checksum: 10c0/85fa0d4f106e7999bb68c1c640c76fa69fb8c069dab75b009e29c123914e2d3b532e6cfa4b9d1bd913176fc83dedd7a2d7bf40d21a81a8a1978432cedfb65b91 - languageName: node - linkType: hard - "string-width@npm:^5.0.0, string-width@npm:^5.0.1, string-width@npm:^5.1.2": version: 5.1.2 resolution: "string-width@npm:5.1.2" @@ -26717,15 +26249,6 @@ __metadata: languageName: node linkType: hard -"strip-ansi@npm:^5.0.0, strip-ansi@npm:^5.1.0, strip-ansi@npm:^5.2.0": - version: 5.2.0 - resolution: "strip-ansi@npm:5.2.0" - dependencies: - ansi-regex: "npm:^4.1.0" - checksum: 10c0/de4658c8a097ce3b15955bc6008f67c0790f85748bdc025b7bc8c52c7aee94bc4f9e50624516150ed173c3db72d851826cd57e7a85fe4e4bb6dbbebd5d297fdf - languageName: node - linkType: hard - "strip-ansi@npm:^7.0.0, strip-ansi@npm:^7.0.1, strip-ansi@npm:^7.1.0": version: 7.1.0 resolution: "strip-ansi@npm:7.1.0" @@ -26876,15 +26399,6 @@ __metadata: languageName: node linkType: hard -"supports-color@npm:^6.1.0": - version: 6.1.0 - resolution: "supports-color@npm:6.1.0" - dependencies: - has-flag: "npm:^3.0.0" - checksum: 10c0/ebf2befe41b55932c6d77192b91775f1403c389440ce2dab6f72663cf32ee87a1d9dea3512131a18e45ccac91424a8873b266142828489d0206d65ee93d224b6 - languageName: node - linkType: hard - "supports-color@npm:^7.1.0": version: 7.2.0 resolution: "supports-color@npm:7.2.0" @@ -27091,13 +26605,6 @@ __metadata: languageName: node linkType: hard -"symbol-tree@npm:^3.2.4": - version: 3.2.4 - resolution: "symbol-tree@npm:3.2.4" - checksum: 10c0/dfbe201ae09ac6053d163578778c53aa860a784147ecf95705de0cd23f42c851e1be7889241495e95c37cabb058edb1052f141387bef68f705afc8f9dd358509 - languageName: node - linkType: hard - "symlink-or-copy@npm:^1.0.0, symlink-or-copy@npm:^1.0.1, symlink-or-copy@npm:^1.1.8, symlink-or-copy@npm:^1.2.0, symlink-or-copy@npm:^1.3.1": version: 1.3.1 resolution: "symlink-or-copy@npm:1.3.1" @@ -27196,10 +26703,10 @@ __metadata: languageName: node linkType: hard -"temp-dir@npm:^2.0.0": - version: 2.0.0 - resolution: "temp-dir@npm:2.0.0" - checksum: 10c0/b1df969e3f3f7903f3426861887ed76ba3b495f63f6d0c8e1ce22588679d9384d336df6064210fda14e640ed422e2a17d5c40d901f60e161c99482d723f4d309 +"temp-dir@npm:^3.0.0": + version: 3.0.0 + resolution: "temp-dir@npm:3.0.0" + checksum: 10c0/a86978a400984cd5f315b77ebf3fe53bb58c61f192278cafcb1f3fb32d584a21dc8e08b93171d7874b7cc972234d3455c467306cc1bfc4524b622e5ad3bfd671 languageName: node linkType: hard @@ -27212,16 +26719,15 @@ __metadata: languageName: node linkType: hard -"tempy@npm:^1.0.1": - version: 1.0.1 - resolution: "tempy@npm:1.0.1" +"tempy@npm:^3.1.0": + version: 3.1.0 + resolution: "tempy@npm:3.1.0" dependencies: - del: "npm:^6.0.0" - is-stream: "npm:^2.0.0" - temp-dir: "npm:^2.0.0" - type-fest: "npm:^0.16.0" - unique-string: "npm:^2.0.0" - checksum: 10c0/864a1cf1b5536dc21e84ae45dbbc3ba4dd2c7ec1674d895f99c349cf209df959a53d797ca38d0b2cf69c7684d565fde5cfc67faaa63b7208ffb21d454b957472 + is-stream: "npm:^3.0.0" + temp-dir: "npm:^3.0.0" + type-fest: "npm:^2.12.2" + unique-string: "npm:^3.0.0" + checksum: 10c0/b88e70baa8d935ba8f0e0372b59ad1a961121f098da5fb4a6e05bec98ec32a49026b553532fb75c1c102ec782fd4c6a6bde0d46cbe87013fa324451ce476fb76 languageName: node linkType: hard @@ -27456,27 +26962,6 @@ __metadata: languageName: node linkType: hard -"tough-cookie@npm:^4.1.3": - version: 4.1.3 - resolution: "tough-cookie@npm:4.1.3" - dependencies: - psl: "npm:^1.1.33" - punycode: "npm:^2.1.1" - universalify: "npm:^0.2.0" - url-parse: "npm:^1.5.3" - checksum: 10c0/4fc0433a0cba370d57c4b240f30440c848906dee3180bb6e85033143c2726d322e7e4614abb51d42d111ebec119c4876ed8d7247d4113563033eebbc1739c831 - languageName: node - linkType: hard - -"tr46@npm:^5.0.0": - version: 5.0.0 - resolution: "tr46@npm:5.0.0" - dependencies: - punycode: "npm:^2.3.1" - checksum: 10c0/1521b6e7bbc8adc825c4561480f9fe48eb2276c81335eed9fa610aa4c44a48a3221f78b10e5f18b875769eb3413e30efbf209ed556a17a42aa8d690df44b7bee - languageName: node - linkType: hard - "tr46@npm:~0.0.3": version: 0.0.3 resolution: "tr46@npm:0.0.3" @@ -27484,22 +26969,6 @@ __metadata: languageName: node linkType: hard -"trash@npm:^7.0.0": - version: 7.2.0 - resolution: "trash@npm:7.2.0" - dependencies: - "@stroncium/procfs": "npm:^1.2.1" - globby: "npm:^7.1.1" - is-path-inside: "npm:^3.0.2" - make-dir: "npm:^3.1.0" - move-file: "npm:^2.0.0" - p-map: "npm:^4.0.0" - uuid: "npm:^8.3.2" - xdg-trashdir: "npm:^3.1.0" - checksum: 10c0/392cce2aaa50b5af0e2ab4e303e0910550b7c5276340c70c0520bfcb800f4f667ed945dab9c5cd96736b688fc2748be48b4557ee7a40d7e28944155314d50548 - languageName: node - linkType: hard - "tree-changes@npm:^0.11.2": version: 0.11.2 resolution: "tree-changes@npm:0.11.2" @@ -27520,7 +26989,7 @@ __metadata: languageName: node linkType: hard -"tree-kill@npm:1.2.2, tree-kill@npm:^1.2.2": +"tree-kill@npm:1.2.2": version: 1.2.2 resolution: "tree-kill@npm:1.2.2" bin: @@ -27640,44 +27109,6 @@ __metadata: languageName: node linkType: hard -"ts-node@npm:^10.9.1": - version: 10.9.2 - resolution: "ts-node@npm:10.9.2" - dependencies: - "@cspotcode/source-map-support": "npm:^0.8.0" - "@tsconfig/node10": "npm:^1.0.7" - "@tsconfig/node12": "npm:^1.0.7" - "@tsconfig/node14": "npm:^1.0.0" - "@tsconfig/node16": "npm:^1.0.2" - acorn: "npm:^8.4.1" - acorn-walk: "npm:^8.1.1" - arg: "npm:^4.1.0" - create-require: "npm:^1.1.0" - diff: "npm:^4.0.1" - make-error: "npm:^1.1.1" - v8-compile-cache-lib: "npm:^3.0.1" - yn: "npm:3.1.1" - peerDependencies: - "@swc/core": ">=1.2.50" - "@swc/wasm": ">=1.2.50" - "@types/node": "*" - typescript: ">=2.7" - peerDependenciesMeta: - "@swc/core": - optional: true - "@swc/wasm": - optional: true - bin: - ts-node: dist/bin.js - ts-node-cwd: dist/bin-cwd.js - ts-node-esm: dist/bin-esm.js - ts-node-script: dist/bin-script.js - ts-node-transpile-only: dist/bin-transpile.js - ts-script: dist/bin-script-deprecated.js - checksum: 10c0/5f29938489f96982a25ba650b64218e83a3357d76f7bede80195c65ab44ad279c8357264639b7abdd5d7e75fc269a83daa0e9c62fd8637a3def67254ecc9ddc2 - languageName: node - linkType: hard - "ts-pnp@npm:^1.1.6": version: 1.2.0 resolution: "ts-pnp@npm:1.2.0" @@ -27736,7 +27167,7 @@ __metadata: languageName: node linkType: hard -"tslib@npm:^1.13.0, tslib@npm:^1.8.1, tslib@npm:^1.9.0, tslib@npm:^1.9.3": +"tslib@npm:^1.13.0, tslib@npm:^1.8.1, tslib@npm:^1.9.3": version: 1.14.1 resolution: "tslib@npm:1.14.1" checksum: 10c0/69ae09c49eea644bc5ebe1bca4fa4cc2c82b7b3e02f43b84bd891504edf66dbc6b2ec0eef31a957042de2269139e4acff911e6d186a258fb14069cd7f6febce2 @@ -28187,12 +27618,12 @@ __metadata: languageName: node linkType: hard -"unique-string@npm:^2.0.0": - version: 2.0.0 - resolution: "unique-string@npm:2.0.0" +"unique-string@npm:^3.0.0": + version: 3.0.0 + resolution: "unique-string@npm:3.0.0" dependencies: - crypto-random-string: "npm:^2.0.0" - checksum: 10c0/11820db0a4ba069d174bedfa96c588fc2c96b083066fafa186851e563951d0de78181ac79c744c1ed28b51f9d82ac5b8196ff3e4560d0178046ef455d8c2244b + crypto-random-string: "npm:^4.0.0" + checksum: 10c0/b35ea034b161b2a573666ec16c93076b4b6106b8b16c2415808d747ab3a0566b5db0c4be231d4b11cfbc16d7fd915c9d8a45884bff0e2db11b799775b2e1e017 languageName: node linkType: hard @@ -28384,13 +27815,6 @@ __metadata: languageName: node linkType: hard -"universalify@npm:^0.2.0": - version: 0.2.0 - resolution: "universalify@npm:0.2.0" - checksum: 10c0/cedbe4d4ca3967edf24c0800cfc161c5a15e240dac28e3ce575c689abc11f2c81ccc6532c8752af3b40f9120fb5e454abecd359e164f4f6aa44c29cd37e194fe - languageName: node - linkType: hard - "universalify@npm:^2.0.0": version: 2.0.0 resolution: "universalify@npm:2.0.0" @@ -28478,16 +27902,6 @@ __metadata: languageName: node linkType: hard -"url-parse@npm:^1.5.3": - version: 1.5.10 - resolution: "url-parse@npm:1.5.10" - dependencies: - querystringify: "npm:^2.1.1" - requires-port: "npm:^1.0.0" - checksum: 10c0/bd5aa9389f896974beb851c112f63b466505a04b4807cea2e5a3b7092f6fbb75316f0491ea84e44f66fed55f1b440df5195d7e3a8203f64fcefa19d182f5be87 - languageName: node - linkType: hard - "url@npm:^0.11.0": version: 0.11.3 resolution: "url@npm:0.11.3" @@ -28583,15 +27997,6 @@ __metadata: languageName: node linkType: hard -"user-home@npm:^2.0.0": - version: 2.0.0 - resolution: "user-home@npm:2.0.0" - dependencies: - os-homedir: "npm:^1.0.0" - checksum: 10c0/cbcb251c64f0dce8f3a598049afa5dadd42c928f9834c8720227ee17ededa819296582f9964d963974787f00a4d4cd68e90fd69bc5d8df528d666a6882f84b0c - languageName: node - linkType: hard - "username-sync@npm:^1.0.2": version: 1.0.3 resolution: "username-sync@npm:1.0.3" @@ -29018,27 +28423,20 @@ __metadata: languageName: node linkType: hard -"vue-component-meta@npm:^1.8.27": - version: 1.8.27 - resolution: "vue-component-meta@npm:1.8.27" +"vue-component-meta@npm:^2.0.0": + version: 2.0.17 + resolution: "vue-component-meta@npm:2.0.17" dependencies: - "@volar/typescript": "npm:~1.11.1" - "@vue/language-core": "npm:1.8.27" + "@volar/typescript": "npm:~2.2.2" + "@vue/language-core": "npm:2.0.17" path-browserify: "npm:^1.0.1" - vue-component-type-helpers: "npm:1.8.27" + vue-component-type-helpers: "npm:2.0.17" peerDependencies: typescript: "*" peerDependenciesMeta: typescript: optional: true - checksum: 10c0/40884b316940e6995a6e7f9e5cbe5536b5c6e380acfd5b1d24914511972a241550c04474f4fffdf6305b1c9962b1137b5fd6183dc309127d3a268fe7d8d85df9 - languageName: node - linkType: hard - -"vue-component-type-helpers@npm:1.8.27": - version: 1.8.27 - resolution: "vue-component-type-helpers@npm:1.8.27" - checksum: 10c0/3403d70951e422162321e810f54f23f11ee5d2642631d2ca2cb1de18e5d35a0b7b05dd1f9bd02a0ae77dfa0b80751d826865d98f928ae6d6fbce9303406c9820 + checksum: 10c0/78d2932c9c21275fae76224a088248bcaa6b70b0d3b13a615b823a5243ab4fbefb6a0d8fde300892f88700bdbb7198e61a4ebbd649efc785a3a8589fd0d8dbff languageName: node linkType: hard @@ -29049,6 +28447,13 @@ __metadata: languageName: node linkType: hard +"vue-component-type-helpers@npm:2.0.17": + version: 2.0.17 + resolution: "vue-component-type-helpers@npm:2.0.17" + checksum: 10c0/4c550eea579c5a045df1ee6394475b507631591de5d9f62e12a252221b7e67638287e1e9952f29186ea833074b4dcb0bd16cd753f10f990bf432bd10a56075b6 + languageName: node + linkType: hard + "vue-component-type-helpers@npm:latest": version: 1.8.15 resolution: "vue-component-type-helpers@npm:1.8.15" @@ -29168,15 +28573,6 @@ __metadata: languageName: node linkType: hard -"w3c-xmlserializer@npm:^5.0.0": - version: 5.0.0 - resolution: "w3c-xmlserializer@npm:5.0.0" - dependencies: - xml-name-validator: "npm:^5.0.0" - checksum: 10c0/8712774c1aeb62dec22928bf1cdfd11426c2c9383a1a63f2bcae18db87ca574165a0fbe96b312b73652149167ac6c7f4cf5409f2eb101d9c805efe0e4bae798b - languageName: node - linkType: hard - "wait-on@npm:^7.0.1": version: 7.2.0 resolution: "wait-on@npm:7.2.0" @@ -29457,13 +28853,6 @@ __metadata: languageName: node linkType: hard -"webpack-virtual-modules@npm:^0.5.0": - version: 0.5.0 - resolution: "webpack-virtual-modules@npm:0.5.0" - checksum: 10c0/0742e069cd49d91ccd0b59431b3666903d321582c1b1062fa6bdae005c3538af55ff8787ea5eafbf72662f3496d3a879e2c705d55ca0af8283548a925be18484 - languageName: node - linkType: hard - "webpack-virtual-modules@npm:^0.6.0": version: 0.6.1 resolution: "webpack-virtual-modules@npm:0.6.1" @@ -29535,29 +28924,10 @@ __metadata: languageName: node linkType: hard -"whatwg-encoding@npm:^3.1.1": - version: 3.1.1 - resolution: "whatwg-encoding@npm:3.1.1" - dependencies: - iconv-lite: "npm:0.6.3" - checksum: 10c0/273b5f441c2f7fda3368a496c3009edbaa5e43b71b09728f90425e7f487e5cef9eb2b846a31bd760dd8077739c26faf6b5ca43a5f24033172b003b72cf61a93e - languageName: node - linkType: hard - -"whatwg-mimetype@npm:^4.0.0": - version: 4.0.0 - resolution: "whatwg-mimetype@npm:4.0.0" - checksum: 10c0/a773cdc8126b514d790bdae7052e8bf242970cebd84af62fb2f35a33411e78e981f6c0ab9ed1fe6ec5071b09d5340ac9178e05b52d35a9c4bcf558ba1b1551df - languageName: node - linkType: hard - -"whatwg-url@npm:^14.0.0": - version: 14.0.0 - resolution: "whatwg-url@npm:14.0.0" - dependencies: - tr46: "npm:^5.0.0" - webidl-conversions: "npm:^7.0.0" - checksum: 10c0/ac32e9ba9d08744605519bbe9e1371174d36229689ecc099157b6ba102d4251a95e81d81f3d80271eb8da182eccfa65653f07f0ab43ea66a6934e643fd091ba9 +"whatwg-mimetype@npm:^3.0.0": + version: 3.0.0 + resolution: "whatwg-mimetype@npm:3.0.0" + checksum: 10c0/323895a1cda29a5fb0b9ca82831d2c316309fede0365047c4c323073e3239067a304a09a1f4b123b9532641ab604203f33a1403b5ca6a62ef405bcd7a204080f languageName: node linkType: hard @@ -29763,17 +29133,6 @@ __metadata: languageName: node linkType: hard -"wrap-ansi@npm:^5.1.0": - version: 5.1.0 - resolution: "wrap-ansi@npm:5.1.0" - dependencies: - ansi-styles: "npm:^3.2.0" - string-width: "npm:^3.0.0" - strip-ansi: "npm:^5.0.0" - checksum: 10c0/fcd0b39b7453df512f2fe8c714a1c1b147fe3e6a4b5a2e4de6cadc3af47212f335eceaffe588e98322d6345e72672137e2c0b834d8a662e73a32296c1c8216bb - languageName: node - linkType: hard - "wrap-ansi@npm:^6.2.0": version: 6.2.0 resolution: "wrap-ansi@npm:6.2.0" @@ -29814,7 +29173,7 @@ __metadata: languageName: node linkType: hard -"ws@npm:^8.13.0, ws@npm:^8.14.2, ws@npm:^8.16.0, ws@npm:^8.2.3": +"ws@npm:^8.13.0, ws@npm:^8.2.3": version: 8.16.0 resolution: "ws@npm:8.16.0" peerDependencies: @@ -29836,39 +29195,6 @@ __metadata: languageName: node linkType: hard -"xdg-basedir@npm:^4.0.0": - version: 4.0.0 - resolution: "xdg-basedir@npm:4.0.0" - checksum: 10c0/1b5d70d58355af90363a4e0a51c992e77fc5a1d8de5822699c7d6e96a6afea9a1e048cb93312be6870f338ca45ebe97f000425028fa149c1e87d1b5b8b212a06 - languageName: node - linkType: hard - -"xdg-trashdir@npm:^3.1.0": - version: 3.1.0 - resolution: "xdg-trashdir@npm:3.1.0" - dependencies: - "@sindresorhus/df": "npm:^3.1.1" - mount-point: "npm:^3.0.0" - user-home: "npm:^2.0.0" - xdg-basedir: "npm:^4.0.0" - checksum: 10c0/8f3da0aa890faa0a30fb5ad127110e8c8f129b19751239a29d916cd9632a3376f77e51f843157c6b95c06042b45f30b5aff1991358f4b93f7d3cc7dab5f564a1 - languageName: node - linkType: hard - -"xml-name-validator@npm:^5.0.0": - version: 5.0.0 - resolution: "xml-name-validator@npm:5.0.0" - checksum: 10c0/3fcf44e7b73fb18be917fdd4ccffff3639373c7cb83f8fc35df6001fecba7942f1dbead29d91ebb8315e2f2ff786b508f0c9dc0215b6353f9983c6b7d62cb1f5 - languageName: node - linkType: hard - -"xmlchars@npm:^2.2.0": - version: 2.2.0 - resolution: "xmlchars@npm:2.2.0" - checksum: 10c0/b64b535861a6f310c5d9bfa10834cf49127c71922c297da9d4d1b45eeaae40bf9b4363275876088fbe2667e5db028d2cd4f8ee72eed9bede840a67d57dab7593 - languageName: node - linkType: hard - "xtend@npm:^4.0.0, xtend@npm:^4.0.2, xtend@npm:~4.0.1": version: 4.0.2 resolution: "xtend@npm:4.0.2" @@ -29943,16 +29269,6 @@ __metadata: languageName: node linkType: hard -"yargs-parser@npm:^13.1.2": - version: 13.1.2 - resolution: "yargs-parser@npm:13.1.2" - dependencies: - camelcase: "npm:^5.0.0" - decamelize: "npm:^1.2.0" - checksum: 10c0/aeded49d2285c5e284e48b7c69eab4a6cf1c94decfdba073125cc4054ff49da7128a3c7c840edb6b497a075e455be304e89ba4b9228be35f1ed22f4a7bba62cc - languageName: node - linkType: hard - "yargs-parser@npm:^18.1.2": version: 18.1.3 resolution: "yargs-parser@npm:18.1.3" @@ -29985,24 +29301,6 @@ __metadata: languageName: node linkType: hard -"yargs@npm:^13.3.0": - version: 13.3.2 - resolution: "yargs@npm:13.3.2" - dependencies: - cliui: "npm:^5.0.0" - find-up: "npm:^3.0.0" - get-caller-file: "npm:^2.0.1" - require-directory: "npm:^2.1.1" - require-main-filename: "npm:^2.0.0" - set-blocking: "npm:^2.0.0" - string-width: "npm:^3.0.0" - which-module: "npm:^2.0.0" - y18n: "npm:^4.0.0" - yargs-parser: "npm:^13.1.2" - checksum: 10c0/6612f9f0ffeee07fff4c85f153d10eba4072bf5c11e1acba96153169f9d771409dfb63253dbb0841ace719264b663cd7b18c75c0eba91af7740e76094239d386 - languageName: node - linkType: hard - "yargs@npm:^15.3.1": version: 15.4.1 resolution: "yargs@npm:15.4.1" diff --git a/docs/addons/addons-api.md b/docs/addons/addons-api.md index c2c1afad9edb..8c0df55119fd 100644 --- a/docs/addons/addons-api.md +++ b/docs/addons/addons-api.md @@ -260,11 +260,11 @@ The following table details how to use the API values: The following options are configurable under the `sidebar` namespace: -| Name | Type | Description | Example Value | -| ------------------ | -------- | ------------------------------------------------------------- | ------------------------------------------------ | -| **showRoots** | Boolean | Display the top-level nodes as a "root" in the sidebar | `false` | -| **collapsedRoots** | Array | Set of root node IDs to visually collapse by default | `['misc', 'other']` | -| **renderLabel** | Function | Create a custom label for tree nodes; must return a ReactNode | `(item) => {item.name}` | +| Name | Type | Description | Example Value | +| ------------------ | -------- | ------------------------------------------------------------- | ----------------------------------------------------- | +| **showRoots** | Boolean | Display the top-level nodes as a "root" in the sidebar | `false` | +| **collapsedRoots** | Array | Set of root node IDs to visually collapse by default | `['misc', 'other']` | +| **renderLabel** | Function | Create a custom label for tree nodes; must return a ReactNode | `(item, api) => {item.name}` | The following options are configurable under the `toolbar` namespace: diff --git a/docs/api/cli-options.md b/docs/api/cli-options.md index a1f8c4369fff..ae2cb3d779f1 100644 --- a/docs/api/cli-options.md +++ b/docs/api/cli-options.md @@ -1,5 +1,6 @@ --- title: 'CLI options' +hideRendererSelector: true --- The Storybook command line interface (CLI) is the main tool you use to build and develop Storybook. @@ -118,6 +119,7 @@ Options include: | `--debug` | Outputs more logs in the CLI to assist debugging
`storybook init --debug` | | `--disable-telemetry` | Disables Storybook's telemetry. Learn more about it [here](../configure/telemetry.md#how-to-opt-out)
`storybook init --disable-telemetry` | | `--enable-crash-reports` | Enables sending crash reports to Storybook's telemetry. Learn more about it [here](../configure/telemetry.md#crash-reports-disabled-by-default)
`storybook init --enable-crash-reports` | +| `--no-dev` | Complete the initialization of Storybook without running the Storybook dev server
`storybook init --no-dev` | ### `add` diff --git a/docs/api/doc-block-typeset.md b/docs/api/doc-block-typeset.md index 22933dc5f521..047657cd89f8 100644 --- a/docs/api/doc-block-typeset.md +++ b/docs/api/doc-block-typeset.md @@ -84,7 +84,7 @@ Provides a font family to be displayed. ### `fontSizes` -Type: `number[]` +Type: `(string | number)[]` Provides a list of available font sizes (in `px`). diff --git a/docs/api/index.md b/docs/api/index.md index 60edd614c32c..f719ab3291b3 100644 --- a/docs/api/index.md +++ b/docs/api/index.md @@ -66,7 +66,7 @@ An overview of all available API references for Storybook. CSF - Component Story Format (CSF) is the API for writing stories. It's an + Component Story Format (CSF) is the API for writing stories. It's an open standard based on ES6 modules that is portable beyond Storybook. diff --git a/docs/api/main-config-indexers.md b/docs/api/main-config-indexers.md index 79e7fa2f2651..a2b17648ed40 100644 --- a/docs/api/main-config-indexers.md +++ b/docs/api/main-config-indexers.md @@ -97,6 +97,7 @@ Type: exportName: string; importPath: string; type: 'story'; + rawComponentPath?: string; metaId?: string; name?: string; tags?: string[]; @@ -133,6 +134,12 @@ Type: `'story'` The type of entry. +##### `rawComponentPath` + +Type: `string` + +The raw path/package of the file that provides `meta.component`, if one exists. + ##### `metaId` Type: `string` diff --git a/docs/api/parameters.md b/docs/api/parameters.md index 506dc051b3df..f70fa3395962 100644 --- a/docs/api/parameters.md +++ b/docs/api/parameters.md @@ -141,6 +141,51 @@ When specifying a custom sorting function, the function behaves like a typical J See [the guide](../writing-stories/naming-components-and-hierarchy/#sorting-stories) for usage examples. +### `test` + +Type: + +```ts +{ + clearMocks?: boolean; + mockReset?: boolean; + restoreMocks?: boolean; + dangerouslyIgnoreUnhandledErrors?: boolean; +} +``` + +#### `clearMocks` + +Type: `boolean` + +Default: `false` + +[Similar to Vitest](https://vitest.dev/config/#clearmocks), it will call `.mockClear()` on all spies created with `fn()` from `@storybook/test` when a story unmounts. This will clear mock history, but not reset its implementation to the default one. + +#### `mockReset` + +Type: `boolean` + +Default: `false` + +[Similar to Vitest](https://vitest.dev/config/#mockreset), it will call `.mockReset()` on all spies created with `fn()` from `@storybook/test` when a story unmounts. This will clear mock history and reset its implementation to an empty function (will return `undefined`). + +#### `restoreMocks` + +Type: `boolean` + +Default: `true` + +[Similar to Vitest](https://vitest.dev/config/#restoremocks), it will call `.restoreMocks()` on all spies created with `fn()` from `@storybook/test` when a story unmounts. This will clear mock history and reset its implementation to the original one. + +#### `dangerouslyIgnoreUnhandledErrors` + +Type: `boolean` + +Default: `false` + +Unhandled errors might cause false positive assertions. Setting this to `true` will prevent the [play function](../writing-stories/play-function.md) from failing and showing a warning when unhandled errors are thrown during execution. + --- ### Essential addons diff --git a/docs/api/portable-stories-jest.md b/docs/api/portable-stories-jest.md index 4c4141a53922..cae15f1ca62a 100644 --- a/docs/api/portable-stories-jest.md +++ b/docs/api/portable-stories-jest.md @@ -2,6 +2,8 @@ title: 'Portable stories in Jest' --- + + export const SUPPORTED_RENDERERS = ['react', 'vue']; @@ -20,16 +22,17 @@ Portable stories in Jest are currently only supported in [React](?renderer=react Portable stories are Storybook [stories](../writing-stories/index.md) which can be used in external environments, such as [Jest](https://jestjs.io). -Normally, Storybok composes a story and its [annotations](#annotations) automatically, as part of the [story pipeline](#story-pipeline). When using stories in Jest tests, you must handle the story pipeline yourself, which is what the [`composeStories`](#composestories) and [`composeStory`](#composestory) functions enable. +Normally, Storybook composes a story and its [annotations](#annotations) automatically, as part of the [story pipeline](#story-pipeline). When using stories in Jest tests, you must handle the story pipeline yourself, which is what the [`composeStories`](#composestories) and [`composeStory`](#composestory) functions enable. -**Using `Next.js`?** You need to do two things differently when using portable stories in Jest with Next.js projects: +**Using `Next.js`?** You need to do three things differently when using portable stories in Jest with Next.js projects: - Configure the [`next/jest.js` transformer](https://nextjs.org/docs/pages/building-your-application/testing/jest#manual-setup), which will handle all of the necessary Next.js configuration for you. - Import [`composeStories`](#composestories) or [`composeStory`](#composestory) from the `@storybook/nextjs` package (e.g. `import { composeStories } from '@storybook/nextjs'`). +- Set up [internal module aliases](../get-started/nextjs.md#storybooknextjsexport-mocks) to ensure the framework configuration works correctly and to be able to mock and assert on them. @@ -91,15 +94,15 @@ An object where the keys are the names of the stories and the values are the com Additionally, the composed story will have the following properties: -| Property | Type | Description | -| ---------- | -------------------------------------------------------- | --------------------------------------------------------------- | -| storyName | `string` | The story's name | -| args | `Record` | The story's [args](../writing-stories/args.md) | -| argTypes | `ArgType` | The story's [argTypes](./arg-types.md) | -| id | `string` | The story's id | -| parameters | `Record` | The story's [parameters](./parameters.md) | -| load | `() => Promise` | Executes all the [loaders](#2-load-optional) for a given story | -| play | `(context?: StoryContext) => Promise \| undefined` | Executes the [play function](#4-play-optional) of a given story | +| Property | Type | Description | +| ---------- | -------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| storyName | `string` | The story's name | +| args | `Record` | The story's [args](../writing-stories/args.md) | +| argTypes | `ArgType` | The story's [argTypes](./arg-types.md) | +| id | `string` | The story's id | +| parameters | `Record` | The story's [parameters](./parameters.md) | +| load | `() => Promise` | [Prepares](#3-prepare) the story for rendering and and cleans up all previous stories | +| play | `(context?: StoryContext) => Promise \| undefined` | Executes the [play function](#5-play) of a given story | ## composeStory @@ -239,18 +242,22 @@ When you want to reuse a story in a different environment, however, it's crucial 👉 For this, you use the [`setProjectAnnotations`](#setprojectannotations) API. -### 2. Prepare +### 2. Compose The story is prepared by running [`composeStories`](#composestories) or [`composeStory`](#composestory). You do not need to do anything for this step. -### 3. Load - -**(optional)** +### 3. Prepare -Stories can prepare data they need (e.g. setting up some mocks or fetching data) before rendering by defining [loaders](../writing-stories/loaders.md). In portable stories, the loaders are not applied automatically—you have to apply them yourself. +Stories can prepare data they need (e.g. setting up some mocks or fetching data) before rendering by defining [loaders](../writing-stories/loaders.md) or [beforeEach](../writing-tests/interaction-testing.md#run-code-before-each-test). In portable stories, loaders and beforeEach are not applied automatically — you have to apply them yourself. 👉 For this, you use the [`composeStories`](#composestories) or [`composeStory`](#composestory) API. The composed story will return a `load` method to be called **before** it is rendered. + + +It is recommended to always run `load` before rendering, even if the story doesn't have any loaders or beforeEach applied. By doing so, you ensure that the tests are cleaned up properly to maintain isolation and you will not have to update your test if you later add them to your story. + + + -**Using `Next.js`?** Next.js requires specific configuration that is only available in [Jest](./portable-stories-jest.md). The portable stories API is not supported in Next.js with Playwright CT. +Your project must be using React 18+ to use the portable stories API with Playwright CT. + +**Using `Next.js`?** The portable stories API is not yet supported in Next.js with Playwright CT. + + @@ -87,9 +91,25 @@ Instead of using Playwright's own `test` function, you can use Storybook's speci - + + +The code which you write in your Playwright test file is transformed and orchestrated by Playwright, where part of the code executes in Node, while other parts execute in the browser. + +Because of this, you have to compose the stories _in a separate file than your own test file_: + +```ts +// Button.stories.portable.ts +// Replace with your renderer, e.g. react, vue3 +import { composeStories } from '@storybook/'; + +import * as stories from './Button.stories'; + +// This function will be executed in the browser +// and compose all stories, exporting them in a single object +export default composeStories(stories); +``` -Please note the [limitations of importing stories in Playwright CT](#importing-stories-in-playwright-ct). +You can then import the composed stories in your Playwright test file, as in the example above. @@ -126,7 +146,7 @@ This API should be called once, before the tests run, in [`playwright/index.ts`] // Replace with your renderer, e.g. react, vue3 import { setProjectAnnotations } from '@storybook/'; import * as addonAnnotations from 'my-addon/preview'; -import * as previewAnnotations from './.storybook/preview'; +import * as previewAnnotations from '../.storybook/preview'; setProjectAnnotations([previewAnnotations, addonAnnotations]); ``` @@ -159,26 +179,6 @@ A set of project [annotations](#annotations) (those defined in `.storybook/previ Annotations are the metadata applied to a story, like [args](../writing-stories/args.md), [decorators](../writing-stories/decorators.md), [loaders](../writing-stories/loaders.md), and [play functions](../writing-stories/play-function.md). They can be defined for a specific story, all stories for a component, or all stories in the project. -## Importing stories in Playwright CT - -The code which you write in your Playwright test file is transformed and orchestrated by Playwright, where part of the code executes in Node, while other parts execute in the browser. - -Because of this, you have to compose the stories _in a separate file than your own test file_: - -```ts -// Button.stories.portable.ts -// Replace with your renderer, e.g. react, vue3 -import { composeStories } from '@storybook/'; - -import * as stories from './Button.stories'; - -// This function will be executed in the browser -// and compose all stories, exporting them in a single object -export default composeStories(stories); -``` - -You can then import the composed stories in your Playwright test file, as in the [example above](#createtest). - [Read more about Playwright's component testing](https://playwright.dev/docs/test-components#test-stories). diff --git a/docs/api/portable-stories-vitest.md b/docs/api/portable-stories-vitest.md index 0342b7cc1e21..75b15935fb68 100644 --- a/docs/api/portable-stories-vitest.md +++ b/docs/api/portable-stories-vitest.md @@ -2,6 +2,8 @@ title: 'Portable stories in Vitest' --- + + export const SUPPORTED_RENDERERS = ['react', 'vue', 'svelte']; @@ -99,15 +101,15 @@ An object where the keys are the names of the stories and the values are the com Additionally, the composed story will have the following properties: -| Property | Type | Description | -| ---------- | ----------------------------------------- | --------------------------------------------------------------- | -| storyName | `string` | The story's name | -| args | `Record` | The story's [args](../writing-stories/args.md) | -| argTypes | `ArgType` | The story's [argTypes](./arg-types.md) | -| id | `string` | The story's id | -| parameters | `Record` | The story's [parameters](./parameters.md) | -| load | `() => Promise` | Executes all the [loaders](#2-load-optional) for a given story | -| play | `(context) => Promise \| undefined` | Executes the [play function](#4-play-optional) of a given story | +| Property | Type | Description | +| ---------- | ----------------------------------------- | ------------------------------------------------------------------------------------- | +| storyName | `string` | The story's name | +| args | `Record` | The story's [args](../writing-stories/args.md) | +| argTypes | `ArgType` | The story's [argTypes](./arg-types.md) | +| id | `string` | The story's id | +| parameters | `Record` | The story's [parameters](./parameters.md) | +| load | `() => Promise` | [Prepares](#3-prepare) the story for rendering and and cleans up all previous stories | +| play | `(context) => Promise \| undefined` | Executes the [play function](#5-play) of a given story | ## composeStory @@ -234,18 +236,22 @@ When you want to reuse a story in a different environment, however, it's crucial 👉 For this, you use the [`setProjectAnnotations`](#setprojectannotations) API. -### 2. Prepare +### 2. Compose The story is prepared by running [`composeStories`](#composestories) or [`composeStory`](#composestory). You do not need to do anything for this step. -### 3. Load - -**(optional)** +### 3. Prepare -Stories can prepare data they need (e.g. setting up some mocks or fetching data) before rendering by defining [loaders](../writing-stories/loaders.md). In portable stories, the loaders are not applied automatically—you have to apply them yourself. +Stories can prepare data they need (e.g. setting up some mocks or fetching data) before rendering by defining [loaders](../writing-stories/loaders.md) or [beforeEach](../writing-tests/interaction-testing.md#run-code-before-each-test). In portable stories, loaders and beforeEach are not applied automatically — you have to apply them yourself. 👉 For this, you use the [`composeStories`](#composestories) or [`composeStory`](#composestory) API. The composed story will return a `load` method to be called **before** it is rendered. + + +It is recommended to always run `load` before rendering, even if the story doesn't have any loaders or beforeEach applied. By doing so, you ensure that the tests are cleaned up properly to maintain isolation and you will not have to update your test if you later add them to your story. + + + {item.name}` | +| Name | Type | Description | Example Value | +| ------------------ | -------- | ------------------------------------------------------------- | ----------------------------------------------------- | +| **showRoots** | Boolean | Display the top-level nodes as a "root" in the sidebar | `false` | +| **collapsedRoots** | Array | Set of root node IDs to visually collapse by default | `['misc', 'other']` | +| **renderLabel** | Function | Create a custom label for tree nodes; must return a ReactNode | `(item, api) => {item.name}` | The following options are configurable under the `toolbar` namespace: diff --git a/docs/configure/images-and-assets.md b/docs/configure/images-and-assets.md index 77ffed4231db..02f32cac96ca 100644 --- a/docs/configure/images-and-assets.md +++ b/docs/configure/images-and-assets.md @@ -42,8 +42,8 @@ Configure a directory (or a list of directories) where your assets live when sta diff --git a/docs/configure/story-rendering.md b/docs/configure/story-rendering.md index fff549e8ef4c..87f8bc8c8d9b 100644 --- a/docs/configure/story-rendering.md +++ b/docs/configure/story-rendering.md @@ -2,7 +2,54 @@ title: 'Story rendering' --- -In Storybook, your stories render in a particular “preview” iframe (Canvas tab) inside the larger Storybook web application. The JavaScript build configuration of the preview is controlled by a [webpack](../builders/webpack.md) config, but you also may want to directly control the rendered HTML to help your stories render correctly. +In Storybook, your stories render in a particular “preview” iframe (also called the Canvas) inside the larger Storybook web application. The JavaScript build configuration of the preview is controlled by a [builder](../builders/index.md) config, but you also may want to run some code for every story or directly control the rendered HTML to help your stories render correctly. + +## Running code for every story + +Code executed in the preview file (`.storybook/preview.js|ts`) runs for every story in your Storybook. This is useful for setting up global styles, initializing libraries, or anything else required to render your components. + + + +Here's an example of how you might use the preview file to initialize a library that must run before your components render: + +```ts +// .storybook/preview.ts +// Replace your-renderer with the renderer you are using (e.g., react, vue3) +import { Preview } from '@storybook/your-renderer'; + +import { initialize } from '../lib/your-library'; + +initialize(); + +const preview: Preview = { + // ... +}; + +export default preview; +``` + + + + + +For example, with Vue, you can extend Storybook's application and register your library (e.g., [Fontawesome](https://github.com/FortAwesome/vue-fontawesome)). Or with Angular, add the package ([localize](https://angular.io/api/localize)) into your `polyfills.ts` and import it: + + + + + + + + ## Adding to <head> diff --git a/docs/configure/telemetry.md b/docs/configure/telemetry.md index ff3298ac86fd..bd86f613ff0a 100644 --- a/docs/configure/telemetry.md +++ b/docs/configure/telemetry.md @@ -35,6 +35,7 @@ Specifically, we track the following information in our telemetry events: - Builder (e.g., Webpack5, Vite). - Meta framework (e.g., [Next](https://nextjs.org/), [Gatsby](https://www.gatsbyjs.com/), [CRA](https://create-react-app.dev/)). - [Addons](https://storybook.js.org/integrations) (e.g., [Essentials](../essentials/index.md), [Accessibility](https://storybook.js.org/addons/@storybook/addon-a11y/)). + - Testing tools (e.g. [Jest](https://jestjs.io/), [Vitest](https://vitest.dev/), [Playwright](https://playwright.dev/)). - Package manager information (e.g., `npm`, `yarn`). - Monorepo information (e.g., [NX](https://nx.dev/), [Turborepo](https://turborepo.org/)). - In-app events (e.g., [Storybook guided tour](https://github.com/storybookjs/addon-onboarding)). @@ -70,7 +71,6 @@ Will generate the following output: "pageStoryCount": 0, "playStoryCount": 0, "autodocsCount": 0, - "storiesMdxCount": 0, "mdxCount": 0, "exampleStoryCount": 8, "exampleDocsCount": 3, diff --git a/docs/configure/theming.md b/docs/configure/theming.md index 5ac07a9b5a61..f1e745646594 100644 --- a/docs/configure/theming.md +++ b/docs/configure/theming.md @@ -196,7 +196,7 @@ Here's how you might insert a custom `` block: Some addons require specific theme variables that a Storybook user must add. If you share your theme with the community, make sure to support the official API and other popular addons, so your users have a consistent experience. -For example, the popular Actions addon uses [react-inspector](https://github.com/xyc/react-inspector/blob/master/src/styles/themes/chromeLight.js), which has themes of its own. Supply additional theme variables to style it like so: +For example, the popular Actions addon uses [react-inspector](https://github.com/storybookjs/react-inspector/blob/master/src/styles/themes/chromeLight.tsx), which has themes of its own. Supply additional theme variables to style it like so: diff --git a/docs/contribute/RFC.md b/docs/contribute/RFC.md index 96b93158d07d..ecb3283b0946 100644 --- a/docs/contribute/RFC.md +++ b/docs/contribute/RFC.md @@ -32,7 +32,7 @@ _Details matter_: RFCs that do not present convincing motivation, demonstrate a RFCs tend to remain in this stage for a while, giving the community and core team members time to weigh in. During this period, the author of an RFC should be prepared to revise the proposal, integrate feedback, and build consensus. RFCs that have broad support are much more likely to make progress than those that don't receive any comments. -Every Monday at 11 a.m. (EST), the Storybook core team conducts a weekly triage meeting to review open RFCs as part of the meeting's agenda. The meeting is held in the [Storybook Discord's Watercooler channel](https://discord.com/channels/486522875931656193/486522876388704260). We invite the RFC author(s) and interested members of the community to participate and engage in a more detailed discussion of the RFC. If a core team member deems it necessary, they will be assigned as the "champion" of the RFC. The champion will collaborate with the RFC author and assist them throughout the RFC process. +Every week, the Storybook core team conducts a triage meeting to review open RFCs as part of the meeting's agenda. The event is publicly scheduled in the [Storybook Discord](https://discord.gg/storybook) and held in the [Storybook Discord's Watercooler channel](https://discord.com/channels/486522875931656193/486522876388704260). We invite the RFC author(s) and interested members of the community to participate and engage in a more detailed discussion of the RFC. If a core team member deems it necessary, they will be assigned as the "champion" of the RFC. The champion will collaborate with the RFC author and assist them throughout the RFC process. ### 3. `Status: accepted/rejected` diff --git a/docs/contribute/roadmap.md b/docs/contribute/roadmap.md new file mode 100644 index 000000000000..509f71b07164 --- /dev/null +++ b/docs/contribute/roadmap.md @@ -0,0 +1,43 @@ +--- +title: 'Roadmap' +hideRendererSelector: true +--- + +The Storybook team maintains a [public roadmap](https://github.com/orgs/storybookjs/projects/20/views/1) in the form of a GitHub project. This page explains what's in the roadmap, how to interpret it, and how to contribute to it. + +## What's in the roadmap? + +Each card represents a Storybook project. The columns represent how larger changes make their way from idea to shipped feature. Projects typically start as an [Request for Comment (RFC)](./RFC.md), then evolve into a [tracking issue](https://github.com/storybookjs/storybook/issues?q=is%3Aissue++sort%3Aupdated-desc+label%3ATracking+) once the team has fully scoped what it entails. We ship a Storybook [minor version](https://semver.org/) every eight weeks, and a major version once per year, typically in Feb/Mar. + +### Candidates + +These cards are ideas on our radar that we are considering for the current major release. For example, if `8.0` is the most recent major version, these would be ideas for `8.x` or `9.0`. The ideas in this column are the fuzziest and may come and go depending on our priorities. + +### Under consideration + +These are projects being discussed for the next dev cycle. For example, if the most recent minor version is `8.1`, and we are currently working on `8.2`, the projects in this column would be under consideration for `8.3`. Unlike the candidates column, which can contain any idea, the projects under consideration must be documented with an [RFC](./RFC.md). + +### In progress + +These are projects that we are currently working on. There are two kinds of projects in this column: + +1. **[Tracking issues](https://github.com/storybookjs/storybook/issues?q=is%3Aissue++sort%3Aupdated-desc+label%3ATracking+)**: Fully scoped projects expected to ship in the next minor release. For example, if the most recent minor is `8.1`, these should ship in `8.2`, eight weeks after `8.1`. +2. **Other projects**: Community projects facilitated by the core team and side projects. These don't have an ETA but we will push to have them ready as part of the current major. For example, if `8.0` is the most recent major version, these should ship in `8.x` or `9.0`. + +### Done + +These projects are completed, documented, and released. We follow a "fixed time, variable scope" policy for core projects, which means we scope a project into milestones to provide the most value to users as early as possible and cut scope if necessary to ship on time. If a feature has been scoped out of a project, we might try to fit it into a follow-up project, treat it as general maintenance work, or forget about it. Storybook is open source, so PR contributions are always welcome! + +## Frequently asked questions + +### When will project X be available? + +This roadmap is an estimation, not a commitment. In general, every tracking issue "in progress" should be available in the next two months. Everything else on the board has a decent chance of getting into the next major release. For example, if `8.0` is the most recent major release, we will try to ship everything on the board as part of `8.x` or `9.0`. If we don't think a project is likely for the next major, we will kick it off the board. + +### What about issue Y or discussion Z? + +The Storybook core team and our community members continuously contribute bug fix bugs and smaller product improvements. The projects here are larger chunks of work. In some cases they may close out certain issues, and when possible we will call those out in the RFC or project tracking issue. + +### How do I get something onto the board? + +If there's a significant product improvement that you want to see, and there is currently an issue or an [RFC](./RFC.md) for it, upvote that issue/discussion, and comment on it with more information about your need or use case if it's not currently captured. If you don't see anything that's quite right, please feel free to [submit an RFC](https://github.com/storybookjs/storybook/discussions/new?category=rfc). We prioritize based on a combination of user/contributor interest (upvotes, comments, [Discord](https://discord.gg/storybook) conversations, etc.) and our own strategic ambitions for the project. diff --git a/docs/contribute/storybook-reproduction-generator-location.png b/docs/contribute/storybook-reproduction-generator-location.png index d33bd52e2850..516221fc9017 100644 Binary files a/docs/contribute/storybook-reproduction-generator-location.png and b/docs/contribute/storybook-reproduction-generator-location.png differ diff --git a/docs/contribute/storybook-reproduction-generator-template.png b/docs/contribute/storybook-reproduction-generator-template.png index 95a8052eeda9..8065c179ef19 100644 Binary files a/docs/contribute/storybook-reproduction-generator-template.png and b/docs/contribute/storybook-reproduction-generator-template.png differ diff --git a/docs/essentials/addon-themes-example.gif b/docs/essentials/addon-themes-example.gif index f4fc95ef5919..f50bd0d6dab9 100644 Binary files a/docs/essentials/addon-themes-example.gif and b/docs/essentials/addon-themes-example.gif differ diff --git a/docs/essentials/controls.md b/docs/essentials/controls.md index 60c950c34d29..030d92ad6ea1 100644 --- a/docs/essentials/controls.md +++ b/docs/essentials/controls.md @@ -385,6 +385,45 @@ Unless you need the flexibility of a function, an easier way to map primitives t Note that both `mapping` and `control.labels` don't have to be exhaustive. If the currently selected option is not listed, it's used verbatim. +## Creating and editing stories from controls + +The Controls addon allows you to create or edit stories, directly from the Controls panel. + +### Create a new story + +Open the Controls panel for a story and adjust the value of a control. Then save those changes as a new story. + + + + + +If you're working on a component that does not yet have any stories, you can click the ➕ button in the sidebar to search for your component and have a basic story created for you. + + + + + +### Edit a story + +You can also update a control's value, then save the changes to the story. The story file's code will be updated for you. + + + ## Configuration The Controls addon can be configured in two ways: diff --git a/docs/essentials/index.md b/docs/essentials/index.md index 2ef9254bfab7..15414870764a 100644 --- a/docs/essentials/index.md +++ b/docs/essentials/index.md @@ -87,16 +87,16 @@ Below is an abridged configuration and table with all the available options for -| Addon | Option | Description | -| ------------------------------ | ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `@storybook/addon-actions` | N/A | N/A | -| `@storybook/addon-viewport` | N/A | N/A | -| `@storybook/addon-docs` | `csfPluginOptions` | Provides additional configuration for Storybook's CSF plugin. Can be disabled with `null`. | -| | `mdxPluginOptions` | Provides additional configuration options and plugin configuration for [MDX documentation](../writing-docs/mdx.md#lack-of-github-flavored-markdown-gfm). | -| `@storybook/addon-controls` | N/A | N/A | -| `@storybook/addon-backgrounds` | N/A | N/A | -| `@storybook/addon-toolbars` | N/A | N/A | -| `@storybook/addon-measure` | N/A | N/A | +| Addon | Option | Description | +| ------------------------------ | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `@storybook/addon-actions` | N/A | N/A | +| `@storybook/addon-viewport` | N/A | N/A | +| `@storybook/addon-docs` | `csfPluginOptions` | Provides additional configuration for Storybook's CSF plugin. Can be disabled with `null`. | +| | `mdxPluginOptions` | Provides additional configuration options and plugin configuration for [MDX documentation](../writing-docs/mdx.md#markdown-tables-arent-rendering-correctly). | +| `@storybook/addon-controls` | N/A | N/A | +| `@storybook/addon-backgrounds` | N/A | N/A | +| `@storybook/addon-toolbars` | N/A | N/A | +| `@storybook/addon-measure` | N/A | N/A | When you start Storybook, your custom configuration will override the default. diff --git a/docs/get-started/angular.md b/docs/get-started/angular.md index e5c706acc1df..e3b9540941fa 100644 --- a/docs/get-started/angular.md +++ b/docs/get-started/angular.md @@ -26,7 +26,7 @@ Storybook for Angular is only supported in [Angular](?renderer=angular) projects ## Requirements -- Angular ≥ 15.0 < 18.0 +- Angular ≥ 15.0 < 19.0 - Webpack ≥ 5.0 - Storybook ≥ 8.0 diff --git a/docs/get-started/edit-story-from-controls-optimized.mp4 b/docs/get-started/edit-story-from-controls-optimized.mp4 new file mode 100644 index 000000000000..3bab35082317 Binary files /dev/null and b/docs/get-started/edit-story-from-controls-optimized.mp4 differ diff --git a/docs/get-started/edit-story-in-code-optimized.mp4 b/docs/get-started/edit-story-in-code-optimized.mp4 new file mode 100644 index 000000000000..2346f7186d36 Binary files /dev/null and b/docs/get-started/edit-story-in-code-optimized.mp4 differ diff --git a/docs/get-started/new-component-story-from-plus-button-optimized.mp4 b/docs/get-started/new-component-story-from-plus-button-optimized.mp4 new file mode 100644 index 000000000000..c313266e1707 Binary files /dev/null and b/docs/get-started/new-component-story-from-plus-button-optimized.mp4 differ diff --git a/docs/get-started/new-component-story-in-code-optimized.mp4 b/docs/get-started/new-component-story-in-code-optimized.mp4 new file mode 100644 index 000000000000..08c119a4cae0 Binary files /dev/null and b/docs/get-started/new-component-story-in-code-optimized.mp4 differ diff --git a/docs/get-started/new-story-from-controls-optimized.mp4 b/docs/get-started/new-story-from-controls-optimized.mp4 new file mode 100644 index 000000000000..e4bb41534021 Binary files /dev/null and b/docs/get-started/new-story-from-controls-optimized.mp4 differ diff --git a/docs/get-started/new-story-in-code-optimized.mp4 b/docs/get-started/new-story-in-code-optimized.mp4 new file mode 100644 index 000000000000..0f9527bc3a5f Binary files /dev/null and b/docs/get-started/new-story-in-code-optimized.mp4 differ diff --git a/docs/get-started/nextjs.md b/docs/get-started/nextjs.md index b17cf19661b3..4e12e6608a7c 100644 --- a/docs/get-started/nextjs.md +++ b/docs/get-started/nextjs.md @@ -131,7 +131,7 @@ This framework allows you to use Next.js's [next/image](https://nextjs.org/docs/ [Local images](https://nextjs.org/docs/pages/building-your-application/optimizing/images#local-images) are supported. ```jsx -// index.js +// index.jsx import Image from 'next/image'; import profilePic from '../public/me.png'; @@ -158,7 +158,7 @@ function Home() { [Remote images](https://nextjs.org/docs/pages/building-your-application/optimizing/images#remote-images) are also supported. ```jsx -// index.js +// index.jsx import Image from 'next/image'; export default function Home() { @@ -301,41 +301,6 @@ The default values on the stubbed router are as follows (see [globals](../essent ```ts // Default router const defaultRouter = { - push(...args) { - action('nextRouter.push')(...args); - return Promise.resolve(true); - }, - replace(...args) { - action('nextRouter.replace')(...args); - return Promise.resolve(true); - }, - reload(...args) { - action('nextRouter.reload')(...args); - }, - back(...args) { - action('nextRouter.back')(...args); - }, - forward() { - action('nextRouter.forward')(); - }, - prefetch(...args) { - action('nextRouter.prefetch')(...args); - return Promise.resolve(); - }, - beforePopState(...args) { - action('nextRouter.beforePopState')(...args); - }, - events: { - on(...args) { - action('nextRouter.events.on')(...args); - }, - off(...args) { - action('nextRouter.events.off')(...args); - }, - emit(...args) { - action('nextRouter.events.emit')(...args); - }, - }, // The locale should be configured globally: https://storybook.js.org/docs/essentials/toolbars-and-globals#globals locale: globals?.locale, asPath: '/', @@ -350,20 +315,33 @@ const defaultRouter = { }; ``` -### Actions integration caveats - -If you override a function, you lose the automatic action tab integration and have to build it out yourself, which looks something like this (make sure you install the `@storybook/addon-actions` package): - - +Additionally, the [`router` object](https://nextjs.org/docs/pages/api-reference/functions/use-router#router-object) contains all of the original methods (such as `push()`, `replace()`, etc.) as mock functions that can be manipulated and asserted on using [regular mock APIs](https://vitest.dev/api/mock.html). - +To override these defaults, you can use [parameters](../writing-stories/parameters.md) and [`beforeEach`](../writing-stories/mocking-modules.md#setting-up-and-cleaning-up): - +```ts +// .storybook/preview.ts +import { Preview } from '@storybook/react'; +// 👇 Must include the `.mock` portion of filename to have mocks typed correctly +import { getRouter } from '@storybook/nextjs/router.mock'; + +const preview: Preview = { + parameters: { + nextjs: { + // 👇 Override the default router properties + router: { + basePath: '/app/', + }, + }, + }, + async beforeEach() { + // 👇 Manipulate the default router method mocks + getRouter().push.mockImplementation(() => { + /* ... */ + }); + }, +}; +``` ## Next.js navigation @@ -493,43 +471,38 @@ The default values on the stubbed navigation context are as follows: ```ts // Default navigation context const defaultNavigationContext = { - push(...args) { - action('nextNavigation.push')(...args); - }, - replace(...args) { - action('nextNavigation.replace')(...args); - }, - forward(...args) { - action('nextNavigation.forward')(...args); - }, - back(...args) { - action('nextNavigation.back')(...args); - }, - prefetch(...args) { - action('nextNavigation.prefetch')(...args); - }, - refresh: () => { - action('nextNavigation.refresh')(); - }, pathname: '/', query: {}, }; ``` -### Actions integration caveats - -If you override a function, you lose the automatic action tab integration and have to build it out yourself, which looks something like this (make sure you install the `@storybook/addon-actions` package): - - +Additionally, the [`router` object](https://nextjs.org/docs/app/api-reference/functions/use-router#userouter) contains all of the original methods (such as `push()`, `replace()`, etc.) as mock functions that can be manipulated and asserted on using [regular mock APIs](https://vitest.dev/api/mock.html). - +To override these defaults, you can use [parameters](../writing-stories/parameters.md) and [`beforeEach`](../writing-stories/mocking-modules.md#setting-up-and-cleaning-up): - +```ts +// .storybook/preview.ts +import { Preview } from '@storybook/react'; +// 👇 Must include the `.mock` portion of filename to have mocks typed correctly +import { getRouter } from '@storybook/nextjs/navigation.mock'; + +const preview: Preview = { + parameters: { + nextjs: { + // 👇 Override the default navigation properties + navigation: { + pathname: '/app/', + }, + }, + }, + async beforeEach() { + // 👇 Manipulate the default navigation method mocks + getRouter().push.mockImplementation(() => { + /* ... */ + }); + }, +}; +``` ## Next.js Head @@ -618,7 +591,7 @@ export default HelloWorld; You can use your own babel config too. This is an example of how you can customize styled-jsx. -```json +```jsonc // .babelrc (or whatever config file you use) { "presets": [ @@ -645,7 +618,7 @@ This allows for cool things like zero-config Tailwind! (See [Next.js' example](h [Absolute imports](https://nextjs.org/docs/pages/building-your-application/configuring/absolute-imports-and-module-aliases#absolute-imports) from the root directory are supported. ```jsx -// index.js +// index.jsx // All good! import Button from 'components/button'; // Also good! @@ -671,6 +644,135 @@ import 'styles/globals.scss'; // ... ``` + + +Absolute imports **cannot** be mocked in stories/tests. See the [Mocking modules](#mocking-modules) section for more information. + + + +## Module aliases + +[Module aliases](https://nextjs.org/docs/app/building-your-application/configuring/absolute-imports-and-module-aliases#module-aliases) are also supported. + +```jsx +// index.jsx +// All good! +import Button from '@/components/button'; +// Also good! +import styles from '@/styles/HomePage.module.css'; + +export default function HomePage() { + return ( + <> +

Hello World

+