diff --git a/.changeset/shiny-sloths-drum.md b/.changeset/shiny-sloths-drum.md new file mode 100644 index 0000000000..104b59dcec --- /dev/null +++ b/.changeset/shiny-sloths-drum.md @@ -0,0 +1,7 @@ +--- +'@web/storybook-framework-web-components': minor +'@web/storybook-builder': minor +'@web/storybook-utils': minor +--- + +Migrate projects to Storybook 9 diff --git a/.changeset/smooth-bugs-lay.md b/.changeset/smooth-bugs-lay.md new file mode 100644 index 0000000000..598528eb0d --- /dev/null +++ b/.changeset/smooth-bugs-lay.md @@ -0,0 +1,5 @@ +--- +'@web/storybook-addon-mocks': patch +--- + +Initial commit diff --git a/docs/docs/mocks/migration-to-storybook-9.md b/docs/docs/mocks/migration-to-storybook-9.md new file mode 100644 index 0000000000..abc694cb8d --- /dev/null +++ b/docs/docs/mocks/migration-to-storybook-9.md @@ -0,0 +1,6 @@ +# Storybook Builder >> Migration from Storybook 8 to 9 + +## General migration guide + +Storybook 9 introduced changes which consolidated external packages into the main Storybook packages. To avoid compatibility issues, `@web/mocks` won't be migrated and will keep support for Storybook 8, instead, we recommend using `@web/storybook-addons-mocks` which is compatible with Storybook 9. +This is a drop-in replacement, so you can just change the import from `@web/mocks` to `@web/storybook-addons-mocks` and it should work without any issues while on version 9. diff --git a/docs/docs/storybook-builder/migration-to-storybook-7.md b/docs/docs/storybook-builder/migration-to-storybook-7.md index 00b60ecd87..fe9eca85cf 100644 --- a/docs/docs/storybook-builder/migration-to-storybook-7.md +++ b/docs/docs/storybook-builder/migration-to-storybook-7.md @@ -1,4 +1,4 @@ -# Storybook Builder >> Migration to Storybook 7 ||5 +# Storybook Builder >> Migration to Storybook 7 ||6 This guide explains how to migrate from [`@web/dev-server-storybook` plugin](../dev-server/plugins/storybook.md) (that used opinionated Storybook 6 bundle `@web/storybook-prebuilt`) to Storybook 7 and new `@web/storybook-builder`. diff --git a/docs/docs/storybook-builder/migration-to-storybook-8.md b/docs/docs/storybook-builder/migration-to-storybook-8.md index 25cd14682a..4060bc7915 100644 --- a/docs/docs/storybook-builder/migration-to-storybook-8.md +++ b/docs/docs/storybook-builder/migration-to-storybook-8.md @@ -1,4 +1,4 @@ -# Storybook Builder >> Migration from Storybook 7 to 8 ||4 +# Storybook Builder >> Migration from Storybook 7 to 8 ||5 ## Update dependencies @@ -11,7 +11,7 @@ You need to: ## General migration guide -Make sure to follow the [Storybook's own migration guide](https://storybook.js.org/docs/migration-guide). +Make sure to follow the [Storybook's own migration guide](https://storybook.js.org/docs/8/migration-guide). We recommend to read it carefully, even though big part of it is not directly related to `@web/storybook-builder` or `@web/storybook-framework-web-components`, many small details are too easy to miss, so go through it step by step. ## Specific migration notes diff --git a/docs/docs/storybook-builder/migration-to-storybook-9.md b/docs/docs/storybook-builder/migration-to-storybook-9.md new file mode 100644 index 0000000000..771057348c --- /dev/null +++ b/docs/docs/storybook-builder/migration-to-storybook-9.md @@ -0,0 +1,25 @@ +# Storybook Builder >> Migration from Storybook 8 to 9 ||5 + +## Update dependencies + +`@web/storybook-builder` for Storybook 9 is released as version `0.3.x` and expects all Storybook packages to be at least `9.1.19`. + +You need to: + +- update `@web/storybook-builder` and `@web/storybook-framework-web-components` to `^0.3.0` +- update dependencies under the namespace `@storybook/*` and the `storybook` itself to `^9.1.19` + +## General migration guide + +Make sure to follow the [Storybook's own migration guide](https://storybook.js.org/docs/releases/migration-guide-from-older-version). +We recommend to read it carefully, even though big part of it is not directly related to `@web/storybook-builder` or `@web/storybook-framework-web-components`, many small details are too easy to miss, so go through it step by step. + +## Specific migration notes + +Apart from Storybook's own migration steps, from the Builder API perspective the `@web/storybook-builder` is considered backwards compatible. +If you use standard Storybook addons and do not use custom WDS/rollup plugins, you shouldn't require any extra changes. + +However, if you do use something custom, here is a list of some changes that might cause highly unlikely difficulties: + +- Storybook 9 consolidated most packages it uses into the main storybook packages. These migrated packages and instructions are found in the [migration guide](https://storybook.js.org/docs/releases/migration-guide-from-older-version#package-structure-changes). +- CSF 3 is now the default format for stories, but CSF 2 is still supported, so if you have CSF 2 stories, they should work without any changes, but we recommend to migrate them to CSF 3 to get all the benefits of it, e.g. better support for TypeScript and better DX in general. diff --git a/docs/docs/storybook-builder/overview.md b/docs/docs/storybook-builder/overview.md index 22b6c9dd6e..10a8033b07 100644 --- a/docs/docs/storybook-builder/overview.md +++ b/docs/docs/storybook-builder/overview.md @@ -31,6 +31,11 @@ Then proceed to the [Configuration](./configuration.md). ## Storybook versions +Storybook 9 is supported by: + +- `@web/storybook-builder@0.3.x` +- `@web/storybook-framework-web-components@0.3.x` + Storybook 8 is supported by: - `@web/storybook-builder@0.2.x` diff --git a/package-lock.json b/package-lock.json index 5e4372f2b2..43df6b9a98 100644 --- a/package-lock.json +++ b/package-lock.json @@ -308,10 +308,9 @@ } }, "node_modules/@adobe/css-tools": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.2.tgz", - "integrity": "sha512-baYZExFpsdkBNuvGKTKWCwKH57HRZLVtycZS05WTQNVOiXVSeAki3nU35zlRbToeMW8aHlJfyS+1C4BOv27q0A==", - "dev": true, + "version": "4.4.4", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/@adobe/css-tools/-/css-tools-4.4.4.tgz", + "integrity": "sha1-KFbFVEPT1GFpPzLSuW+26pLh/6k=", "license": "MIT" }, "node_modules/@ampproject/remapping": { @@ -2893,6 +2892,17 @@ "integrity": "sha512-tWZNBIS1CoekcwlMuyG2mr0a1Wo5lb5lEHwwWvZo+5GLgr3e9LLDTtmgtCWEwBpXMkxn9D+2W9j2FY6eZQq0tA==", "license": "MIT" }, + "node_modules/@inquirer/ansi": { + "version": "1.0.2", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/@inquirer/ansi/-/ansi-1.0.2.tgz", + "integrity": "sha1-Z0pMTYGtRgaVyyofxp14zRh/M34=", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=18" + } + }, "node_modules/@inquirer/confirm": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-3.2.0.tgz", @@ -2942,14 +2952,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@inquirer/core/node_modules/cli-width": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", - "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", - "engines": { - "node": ">= 12" - } - }, "node_modules/@inquirer/core/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -3025,9 +3027,10 @@ } }, "node_modules/@inquirer/figures": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.5.tgz", - "integrity": "sha512-79hP/VWdZ2UVc9bFGJnoQ/lQMpL74mGgzSYX1xUqCVk7/v73vJCMw1VuyWN1jGkZ9B3z7THAbySqGbCNefcjfA==", + "version": "1.0.15", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/@inquirer/figures/-/figures-1.0.15.tgz", + "integrity": "sha1-27Se2A3xHfdCaAI7SWrF2azSKzo=", + "license": "MIT", "engines": { "node": ">=18" } @@ -3855,9 +3858,9 @@ } }, "node_modules/@mdx-js/react": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.1.0.tgz", - "integrity": "sha512-QjHtSaoameoalGnKDT3FoIl4+9RwyTmo9ZJGBdLOks/YOiWHoRDI3PUwEzOE7kEmGcV3AFcp9K6dYu9rEuKLAQ==", + "version": "3.1.1", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/@mdx-js/react/-/react-3.1.1.tgz", + "integrity": "sha1-JL2n//zrL+JW+VRIISPNob5fX+8=", "dev": true, "license": "MIT", "dependencies": { @@ -3882,6 +3885,23 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/@mswjs/interceptors": { + "version": "0.29.1", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/@mswjs/interceptors/-/interceptors-0.29.1.tgz", + "integrity": "sha1-53/Fi1GIVpBB0EQLJcnp67HM1go=", + "license": "MIT", + "dependencies": { + "@open-draft/deferred-promise": "^2.2.0", + "@open-draft/logger": "^0.3.0", + "@open-draft/until": "^2.0.0", + "is-node-process": "^1.2.0", + "outvariant": "^1.2.1", + "strict-event-emitter": "^0.5.1" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -5545,96 +5565,17 @@ "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==", "license": "MIT" }, - "node_modules/@storybook/addon-a11y": { - "version": "8.6.12", - "resolved": "https://registry.npmjs.org/@storybook/addon-a11y/-/addon-a11y-8.6.12.tgz", - "integrity": "sha512-H28zHiL8uuv29XsVNf9VjNWsCeht/l66GPYHT7aom1jh+f3fS9+sutrCGEBC/T7cnRpy8ZyuHCtihUqS+RI4pg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@storybook/addon-highlight": "8.6.12", - "@storybook/global": "^5.0.0", - "@storybook/test": "8.6.12", - "axe-core": "^4.2.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^8.6.12" - } - }, - "node_modules/@storybook/addon-actions": { - "version": "8.6.12", - "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-8.6.12.tgz", - "integrity": "sha512-B5kfiRvi35oJ0NIo53CGH66H471A3XTzrfaa6SxXEJsgxxSeKScG5YeXcCvLiZfvANRQ7QDsmzPUgg0o3hdMXw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@storybook/global": "^5.0.0", - "@types/uuid": "^9.0.1", - "dequal": "^2.0.2", - "polished": "^4.2.2", - "uuid": "^9.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^8.6.12" - } - }, - "node_modules/@storybook/addon-backgrounds": { - "version": "8.6.12", - "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-8.6.12.tgz", - "integrity": "sha512-lmIAma9BiiCTbJ8YfdZkXjpnAIrOUcgboLkt1f6XJ78vNEMnLNzD9gnh7Tssz1qrqvm34v9daDjIb+ggdiKp3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@storybook/global": "^5.0.0", - "memoizerific": "^1.11.3", - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^8.6.12" - } - }, - "node_modules/@storybook/addon-controls": { - "version": "8.6.12", - "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-8.6.12.tgz", - "integrity": "sha512-9VSRPJWQVb9wLp21uvpxDGNctYptyUX0gbvxIWOHMH3R2DslSoq41lsC/oQ4l4zSHVdL+nq8sCTkhBxIsjKqdQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@storybook/global": "^5.0.0", - "dequal": "^2.0.2", - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^8.6.12" - } - }, "node_modules/@storybook/addon-docs": { - "version": "8.6.12", - "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-8.6.12.tgz", - "integrity": "sha512-kEezQjAf/p3SpDzLABgg4fbT48B6dkT2LiZCKTRmCrJVtuReaAr4R9MMM6Jsph6XjbIj/SvOWf3CMeOPXOs9sg==", + "version": "9.1.19", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/@storybook/addon-docs/-/addon-docs-9.1.19.tgz", + "integrity": "sha1-6yWOiY+k5PYeJeiHI5CqUmDkCps=", "dev": true, "license": "MIT", "dependencies": { "@mdx-js/react": "^3.0.0", - "@storybook/blocks": "8.6.12", - "@storybook/csf-plugin": "8.6.12", - "@storybook/react-dom-shim": "8.6.12", + "@storybook/csf-plugin": "9.1.19", + "@storybook/icons": "^1.4.0", + "@storybook/react-dom-shim": "9.1.19", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "ts-dedent": "^2.0.0" @@ -5644,255 +5585,17 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.6.12" - } - }, - "node_modules/@storybook/addon-docs/node_modules/@storybook/blocks": { - "version": "8.6.12", - "resolved": "https://registry.npmjs.org/@storybook/blocks/-/blocks-8.6.12.tgz", - "integrity": "sha512-DohlTq6HM1jDbHYiXL4ZvZ00VkhpUp5uftzj/CZDLY1fYHRjqtaTwWm2/OpceivMA8zDitLcq5atEZN+f+siTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@storybook/icons": "^1.2.12", - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", - "storybook": "^8.6.12" - }, - "peerDependenciesMeta": { - "react": { - "optional": true - }, - "react-dom": { - "optional": true - } - } - }, - "node_modules/@storybook/addon-docs/node_modules/@storybook/icons": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@storybook/icons/-/icons-1.4.0.tgz", - "integrity": "sha512-Td73IeJxOyalzvjQL+JXx72jlIYHgs+REaHiREOqfpo3A2AYYG71AUbcv+lg7mEDIweKVCxsMQ0UKo634c8XeA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "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" - } - }, - "node_modules/@storybook/addon-docs/node_modules/@storybook/react-dom-shim": { - "version": "8.6.12", - "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-8.6.12.tgz", - "integrity": "sha512-51QvoimkBzYs8s3rCYnY5h0cFqLz/Mh0vRcughwYaXckWzDBV8l67WBO5Xf5nBsukCbWyqBVPpEQLww8s7mrLA==", - "dev": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "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", - "storybook": "^8.6.12" - } - }, - "node_modules/@storybook/addon-docs/node_modules/react-dom": { - "version": "19.1.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz", - "integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "scheduler": "^0.26.0" - }, - "peerDependencies": { - "react": "^19.1.0" - } - }, - "node_modules/@storybook/addon-essentials": { - "version": "8.6.12", - "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-8.6.12.tgz", - "integrity": "sha512-Y/7e8KFlttaNfv7q2zoHMPdX6hPXHdsuQMAjYl5NG9HOAJREu4XBy4KZpbcozRe4ApZ78rYsN/MO1EuA+bNMIA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@storybook/addon-actions": "8.6.12", - "@storybook/addon-backgrounds": "8.6.12", - "@storybook/addon-controls": "8.6.12", - "@storybook/addon-docs": "8.6.12", - "@storybook/addon-highlight": "8.6.12", - "@storybook/addon-measure": "8.6.12", - "@storybook/addon-outline": "8.6.12", - "@storybook/addon-toolbars": "8.6.12", - "@storybook/addon-viewport": "8.6.12", - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^8.6.12" - } - }, - "node_modules/@storybook/addon-highlight": { - "version": "8.6.12", - "resolved": "https://registry.npmjs.org/@storybook/addon-highlight/-/addon-highlight-8.6.12.tgz", - "integrity": "sha512-9FITVxdoycZ+eXuAZL9ElWyML/0fPPn9UgnnAkrU7zkMi+Segq/Tx7y+WWanC5zfWZrXAuG6WTOYEXeWQdm//w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@storybook/global": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^8.6.12" - } - }, - "node_modules/@storybook/addon-interactions": { - "version": "8.6.12", - "resolved": "https://registry.npmjs.org/@storybook/addon-interactions/-/addon-interactions-8.6.12.tgz", - "integrity": "sha512-cTAJlTq6uVZBEbtwdXkXoPQ4jHOAGKQnYSezBT4pfNkdjn/FnEeaQhMBDzf14h2wr5OgBnJa6Lmd8LD9ficz4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@storybook/global": "^5.0.0", - "@storybook/instrumenter": "8.6.12", - "@storybook/test": "8.6.12", - "polished": "^4.2.2", - "ts-dedent": "^2.2.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^8.6.12" - } - }, - "node_modules/@storybook/addon-links": { - "version": "8.6.12", - "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-8.6.12.tgz", - "integrity": "sha512-AfKujFHoAxhxq4yu+6NwylltS9lf5MPs1eLLXvOlwo3l7Y/c68OdxJ7j68vLQhs9H173WVYjKyjbjFxJWf/YYg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@storybook/global": "^5.0.0", - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", - "storybook": "^8.6.12" - }, - "peerDependenciesMeta": { - "react": { - "optional": true - } - } - }, - "node_modules/@storybook/addon-measure": { - "version": "8.6.12", - "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-8.6.12.tgz", - "integrity": "sha512-tACmwqqOvutaQSduw8SMb62wICaT1rWaHtMN3vtWXuxgDPSdJQxLP+wdVyRYMAgpxhLyIO7YRf++Hfha9RHgFg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@storybook/global": "^5.0.0", - "tiny-invariant": "^1.3.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^8.6.12" - } - }, - "node_modules/@storybook/addon-outline": { - "version": "8.6.12", - "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-8.6.12.tgz", - "integrity": "sha512-1ylwm+n1s40S91No0v9T4tCjZORu3GbnjINlyjYTDLLhQHyBQd3nWR1Y1eewU4xH4cW9SnSLcMQFS/82xHqU6A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@storybook/global": "^5.0.0", - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^8.6.12" - } - }, - "node_modules/@storybook/addon-toolbars": { - "version": "8.6.12", - "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-8.6.12.tgz", - "integrity": "sha512-HEcSzo1DyFtIu5/ikVOmh5h85C1IvK9iFKSzBR6ice33zBOaehVJK+Z5f487MOXxPsZ63uvWUytwPyViGInj+g==", - "dev": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^8.6.12" - } - }, - "node_modules/@storybook/addon-viewport": { - "version": "8.6.12", - "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-8.6.12.tgz", - "integrity": "sha512-EXK2LArAnABsPP0leJKy78L/lbMWow+EIJfytEP5fHaW4EhMR6h7Hzaqzre6U0IMMr/jVFa1ci+m0PJ0eQc2bw==", - "dev": true, - "license": "MIT", - "dependencies": { - "memoizerific": "^1.11.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^8.6.12" - } - }, - "node_modules/@storybook/components": { - "version": "8.6.12", - "resolved": "https://registry.npmjs.org/@storybook/components/-/components-8.6.12.tgz", - "integrity": "sha512-FiaE8xvCdvKC2arYusgtlDNZ77b8ysr8njAYQZwwaIHjy27TbR2tEpLDCmUwSbANNmivtc/xGEiDDwcNppMWlQ==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0" + "storybook": "^9.1.19" } }, "node_modules/@storybook/core": { - "version": "8.6.15", - "resolved": "https://registry.npmjs.org/@storybook/core/-/core-8.6.15.tgz", - "integrity": "sha512-VFpKcphNurJpSC4fpUfKL3GTXVoL53oytghGR30QIw5jKWwaT50HVbTyb41BLOUuZjmMhUQA8weiQEew6RX0gw==", + "version": "8.6.18", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/@storybook/core/-/core-8.6.18.tgz", + "integrity": "sha1-DdvshCFxWzckGa5d/v7z31hIOGw=", "license": "MIT", + "peer": true, "dependencies": { - "@storybook/theming": "8.6.15", + "@storybook/theming": "8.6.18", "better-opn": "^3.0.2", "browser-assert": "^1.2.1", "esbuild": "^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0 || ^0.25.0", @@ -5917,11 +5620,12 @@ } } }, - "node_modules/@storybook/core-common": { - "version": "8.6.12", - "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-8.6.12.tgz", - "integrity": "sha512-EuAGaoxWCORBMWv/sA55treXuOjtinCFGlZp1Dr8PW56DLauNR5zVNsU/L/ngJt22hoHcBwf4ppuTUPbOjZcpw==", + "node_modules/@storybook/core/node_modules/@storybook/theming": { + "version": "8.6.18", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/@storybook/theming/-/theming-8.6.18.tgz", + "integrity": "sha1-GMZiY4aL+wCkGXcrVGClcUxeEYE=", "license": "MIT", + "peer": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" @@ -5930,37 +5634,39 @@ "storybook": "^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0" } }, - "node_modules/@storybook/core-events": { - "version": "8.6.12", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-8.6.12.tgz", - "integrity": "sha512-j2MUlSfYOhTsjlruRWTqSVwYreJGFIsWeqHFAhCdtmXe3qpFBM/LuxTKuaM1uWvs6vEAyGEzDw8+DXwuO6uISg==", + "node_modules/@storybook/core/node_modules/storybook": { + "version": "8.6.18", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/storybook/-/storybook-8.6.18.tgz", + "integrity": "sha1-KmNaSwyZaT9DuiG461EcXMUTqAc=", "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "peer": true, + "dependencies": { + "@storybook/core": "8.6.18" + }, + "bin": { + "getstorybook": "bin/index.cjs", + "sb": "bin/index.cjs", + "storybook": "bin/index.cjs" }, - "peerDependencies": { - "storybook": "^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0" - } - }, - "node_modules/@storybook/core/node_modules/@storybook/theming": { - "version": "8.6.15", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-8.6.15.tgz", - "integrity": "sha512-dAbL0XOekyT6XsF49R6Etj3WxQ/LpdJDIswUUeHgVJ6/yd2opZOGbPxnwA3zlmAh1c0tvpPyhSDXxSG79u8e4Q==", - "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0" + "prettier": "^2 || ^3" + }, + "peerDependenciesMeta": { + "prettier": { + "optional": true + } } }, "node_modules/@storybook/core/node_modules/ws": { - "version": "8.18.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", - "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", + "version": "8.19.0", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/ws/-/ws-8.19.0.tgz", + "integrity": "sha1-3cK9+lua2GAgT1pypIY6iJX9jIs=", "license": "MIT", + "peer": true, "engines": { "node": ">=10.0.0" }, @@ -5979,17 +5685,17 @@ }, "node_modules/@storybook/csf": { "version": "0.0.2--canary.4566f4d.1", - "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.0.2--canary.4566f4d.1.tgz", - "integrity": "sha512-9OVvMVh3t9znYZwb0Svf/YQoxX2gVOeQTGe2bses2yj+a3+OJnCrUF3/hGv6Em7KujtOdL2LL+JnG49oMVGFgQ==", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/@storybook/csf/-/csf-0.0.2--canary.4566f4d.1.tgz", + "integrity": "sha1-2sUqIcQO8ZhVTnH+TSDWHhf2Uyc=", "license": "MIT", "dependencies": { "lodash": "^4.17.15" } }, "node_modules/@storybook/csf-plugin": { - "version": "8.6.12", - "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-8.6.12.tgz", - "integrity": "sha512-6s8CnP1aoKPb3XtC0jRLUp8M5vTA8RhGAwQDKUsFpCC7g89JR9CaKs9FY2ZSzsNbjR15uASi7b3K8BzeYumYQg==", + "version": "9.1.19", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/@storybook/csf-plugin/-/csf-plugin-9.1.19.tgz", + "integrity": "sha1-SwT+RU4KdzdSvlRK2wDRdWWkxv8=", "dev": true, "license": "MIT", "dependencies": { @@ -6000,13 +5706,13 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.6.12" + "storybook": "^9.1.19" } }, "node_modules/@storybook/csf-tools": { "version": "6.5.16", - "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-6.5.16.tgz", - "integrity": "sha512-+WD4sH/OwAfXZX3IN6/LOZ9D9iGEFcN+Vvgv9wOsLRgsAZ10DG/NK6c1unXKDM/ogJtJYccNI8Hd+qNE/GFV6A==", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/@storybook/csf-tools/-/csf-tools-6.5.16.tgz", + "integrity": "sha1-NniJo92zPJMmESkQTsKVghXsVFk=", "license": "MIT", "dependencies": { "@babel/core": "^7.12.10", @@ -6038,9 +5744,9 @@ } }, "node_modules/@storybook/csf-tools/node_modules/core-js": { - "version": "3.42.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.42.0.tgz", - "integrity": "sha512-Sz4PP4ZA+Rq4II21qkNqOEDTDrCvcANId3xpIgB34NDkWc3UduWj2dqEtN9yZIq8Dk3HyPI33x9sqqU5C8sr0g==", + "version": "3.48.0", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/core-js/-/core-js-3.48.0.tgz", + "integrity": "sha1-H4EyIKR7vw5mfjiFw2zW8Fk78U0=", "hasInstallScript": true, "license": "MIT", "funding": { @@ -6050,8 +5756,8 @@ }, "node_modules/@storybook/csf-tools/node_modules/fs-extra": { "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha1-WVRGDHZKjaIJS6NVS/g55rmnyG0=", "license": "MIT", "dependencies": { "at-least-node": "^1.0.0", @@ -6064,9 +5770,9 @@ } }, "node_modules/@storybook/csf-tools/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "version": "6.2.0", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha1-fCZb0bZd5pd0eDAAh8mfHIQ4P2I=", "license": "MIT", "dependencies": { "universalify": "^2.0.0" @@ -6077,14 +5783,14 @@ }, "node_modules/@storybook/csf-tools/node_modules/regenerator-runtime": { "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha1-9tyj587sIFkNB62nhWNqkM3KF/k=", "license": "MIT" }, "node_modules/@storybook/csf-tools/node_modules/universalify": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha1-Fo78IYCWTmOG0GHglN9hr+I5sY0=", "license": "MIT", "engines": { "node": ">= 10.0.0" @@ -6096,41 +5802,24 @@ "integrity": "sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==", "license": "MIT" }, - "node_modules/@storybook/instrumenter": { - "version": "8.6.12", - "resolved": "https://registry.npmjs.org/@storybook/instrumenter/-/instrumenter-8.6.12.tgz", - "integrity": "sha512-VK5fYAF8jMwWP/u3YsmSwKGh+FeSY8WZn78flzRUwirp2Eg1WWjsqPRubAk7yTpcqcC/km9YMF3KbqfzRv2s/A==", + "node_modules/@storybook/icons": { + "version": "1.6.0", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/@storybook/icons/-/icons-1.6.0.tgz", + "integrity": "sha1-n6brnIKSK3n3Wiz4PDivMLp/1pY=", "dev": true, "license": "MIT", - "dependencies": { - "@storybook/global": "^5.0.0", - "@vitest/utils": "^2.1.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^8.6.12" - } - }, - "node_modules/@storybook/manager-api": { - "version": "8.6.12", - "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-8.6.12.tgz", - "integrity": "sha512-O0SpISeJLNTQvhSBOsWzzkCgs8vCjOq1578rwqHlC6jWWm4QmtfdyXqnv7rR1Hk08kQ+Dzqh0uhwHx0nfwy4nQ==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "engines": { + "node": ">=14.0.0" }, "peerDependencies": { - "storybook": "^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.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" } }, "node_modules/@storybook/mdx1-csf": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/@storybook/mdx1-csf/-/mdx1-csf-0.0.1.tgz", - "integrity": "sha512-4biZIWWzoWlCarMZmTpqcJNgo/RBesYZwGFbQeXiGYsswuvfWARZnW9RE9aUEMZ4XPn7B1N3EKkWcdcWe/K2tg==", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/@storybook/mdx1-csf/-/mdx1-csf-0.0.1.tgz", + "integrity": "sha1-1BhOP2SG+t6femv6+TTZvAdxjVs=", "license": "MIT", "dependencies": { "@babel/generator": "^7.12.11", @@ -6148,8 +5837,8 @@ }, "node_modules/@storybook/mdx1-csf/node_modules/loader-utils": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha1-i1yzi1w0qaAY7h/A5qBm0d/MUow=", "license": "MIT", "dependencies": { "big.js": "^5.2.2", @@ -6162,8 +5851,8 @@ }, "node_modules/@storybook/mdx1-csf/node_modules/prettier": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.0.tgz", - "integrity": "sha512-kXtO4s0Lz/DW/IJ9QdWhAf7/NmPWQXkFr/r/WkR3vyI+0v8amTDxiaQSLzs8NBlytfLWX/7uQUMIW677yLKl4w==", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/prettier/-/prettier-2.3.0.tgz", + "integrity": "sha1-tqW/EoQCauZA8X9/9WWKdWf8DRg=", "license": "MIT", "bin": { "prettier": "bin-prettier.js" @@ -6172,111 +5861,34 @@ "node": ">=10.13.0" } }, - "node_modules/@storybook/node-logger": { - "version": "8.6.12", - "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-8.6.12.tgz", - "integrity": "sha512-Jk7mQWsu60BptBwYJAd69kMmsEqBAbGDuA/fqban+8vfNiSKgR3PRkhis0DsGEk53bpAEfbkCcyvYRCrrq4M3Q==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0" - } - }, - "node_modules/@storybook/preview": { - "version": "8.6.12", - "resolved": "https://registry.npmjs.org/@storybook/preview/-/preview-8.6.12.tgz", - "integrity": "sha512-w7lLOsqyvB4a/I9wPmBDYDDGmhqWWaOa5DcxTgaIInoVucK6bI1ZNqHlD+8xQkFmlCWOncVEhXydF1w5nyR68w==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0" - } - }, - "node_modules/@storybook/preview-api": { - "version": "8.6.12", - "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-8.6.12.tgz", - "integrity": "sha512-84FE3Hrs0AYKHqpDZOwx1S/ffOfxBdL65lhCoeI8GoWwCkzwa9zEP3kvXBo/BnEDO7nAfxvMhjASTZXbKRJh5Q==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0" - } - }, - "node_modules/@storybook/test": { - "version": "8.6.12", - "resolved": "https://registry.npmjs.org/@storybook/test/-/test-8.6.12.tgz", - "integrity": "sha512-0BK1Eg+VD0lNMB1BtxqHE3tP9FdkUmohtvWG7cq6lWvMrbCmAmh3VWai3RMCCDOukPFpjabOr8BBRLVvhNpv2w==", + "node_modules/@storybook/react-dom-shim": { + "version": "9.1.19", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/@storybook/react-dom-shim/-/react-dom-shim-9.1.19.tgz", + "integrity": "sha1-USAOttvSMdAFn6hKPDoAH3Uucd8=", "dev": true, "license": "MIT", - "dependencies": { - "@storybook/global": "^5.0.0", - "@storybook/instrumenter": "8.6.12", - "@testing-library/dom": "10.4.0", - "@testing-library/jest-dom": "6.5.0", - "@testing-library/user-event": "14.5.2", - "@vitest/expect": "2.0.5", - "@vitest/spy": "2.0.5" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^8.6.12" - } - }, - "node_modules/@storybook/theming": { - "version": "8.6.12", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-8.6.12.tgz", - "integrity": "sha512-6VjZg8HJ2Op7+KV7ihJpYrDnFtd9D1jrQnUS8LckcpuBXrIEbaut5+34ObY8ssQnSqkk2GwIZBBBQYQBCVvkOw==", - "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0" - } - }, - "node_modules/@storybook/types": { - "version": "8.6.12", - "resolved": "https://registry.npmjs.org/@storybook/types/-/types-8.6.12.tgz", - "integrity": "sha512-G/nR+js7KV1qKH3nAcOfwceERBic5e03dpkeA6PDmqBiQ8XeM9B6N4NTMhXi/2gM5ZAGJ+NxJMaW6zLnc32DjA==", - "dev": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.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", + "storybook": "^9.1.19" } }, "node_modules/@storybook/web-components": { - "version": "8.6.12", - "resolved": "https://registry.npmjs.org/@storybook/web-components/-/web-components-8.6.12.tgz", - "integrity": "sha512-j+609VT8abBlpV+tB/vqSRO/fKA1QpnKWlbE0JpolzmEbgla//pAZomPysoOnvTLL3lSX3conjiAAaTpwbjyLg==", + "version": "9.1.19", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/@storybook/web-components/-/web-components-9.1.19.tgz", + "integrity": "sha1-HaWA8KuYNeanKzYN4iHqthqSDd0=", "license": "MIT", "dependencies": { - "@storybook/components": "8.6.12", "@storybook/global": "^5.0.0", - "@storybook/manager-api": "8.6.12", - "@storybook/preview-api": "8.6.12", - "@storybook/theming": "8.6.12", "tiny-invariant": "^1.3.1", "ts-dedent": "^2.0.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" }, "funding": { "type": "opencollective", @@ -6284,7 +5896,7 @@ }, "peerDependencies": { "lit": "^2.0.0 || ^3.0.0", - "storybook": "^8.6.12" + "storybook": "^9.1.19" } }, "node_modules/@surma/rollup-plugin-off-main-thread": { @@ -6337,114 +5949,36 @@ } }, "node_modules/@testing-library/dom": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.0.tgz", - "integrity": "sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==", - "dev": true, + "version": "10.4.1", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/@testing-library/dom/-/dom-10.4.1.tgz", + "integrity": "sha1-1ET4qInppG6aO087iOD8s++2z5U=", "license": "MIT", + "peer": true, "dependencies": { "@babel/code-frame": "^7.10.4", "@babel/runtime": "^7.12.5", "@types/aria-query": "^5.0.1", "aria-query": "5.3.0", - "chalk": "^4.1.0", "dom-accessibility-api": "^0.5.9", "lz-string": "^1.5.0", + "picocolors": "1.1.1", "pretty-format": "^27.0.2" }, "engines": { "node": ">=18" } }, - "node_modules/@testing-library/dom/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@testing-library/dom/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@testing-library/dom/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@testing-library/dom/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@testing-library/dom/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@testing-library/dom/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@testing-library/jest-dom": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.5.0.tgz", - "integrity": "sha512-xGGHpBXYSHUUr6XsKBfs85TWlYKpTc37cSBBVrXcib2MkHLboWlkClhWF37JKlDb9KEq3dHs+f2xR7XJEWGBxA==", - "dev": true, + "version": "6.9.1", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/@testing-library/jest-dom/-/jest-dom-6.9.1.tgz", + "integrity": "sha1-dhOgThRt0pdtJN3wGXMNV6idVsI=", "license": "MIT", "dependencies": { "@adobe/css-tools": "^4.4.0", "aria-query": "^5.0.0", - "chalk": "^3.0.0", "css.escape": "^1.5.1", "dom-accessibility-api": "^0.6.3", - "lodash": "^4.17.21", + "picocolors": "^1.1.1", "redent": "^3.0.0" }, "engines": { @@ -6453,91 +5987,16 @@ "yarn": ">=1" } }, - "node_modules/@testing-library/jest-dom/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@testing-library/jest-dom/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@testing-library/jest-dom/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@testing-library/jest-dom/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, "node_modules/@testing-library/jest-dom/node_modules/dom-accessibility-api": { "version": "0.6.3", - "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz", - "integrity": "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==", - "dev": true, + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz", + "integrity": "sha1-mT6SXMHXPyxmLn113VpURSWaj9g=", "license": "MIT" }, - "node_modules/@testing-library/jest-dom/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@testing-library/jest-dom/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@testing-library/user-event": { - "version": "14.5.2", - "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.5.2.tgz", - "integrity": "sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ==", - "dev": true, + "version": "14.6.1", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/@testing-library/user-event/-/user-event-14.6.1.tgz", + "integrity": "sha1-E+CaMteotwYP44MEeI6/QZfNIUk=", "license": "MIT", "engines": { "node": ">=12", @@ -6611,10 +6070,10 @@ }, "node_modules/@types/aria-query": { "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", - "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", - "dev": true, - "license": "MIT" + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/@types/aria-query/-/aria-query-5.0.4.tgz", + "integrity": "sha1-GjHD03iFDSd42rtjdNA23LpLpwg=", + "license": "MIT", + "peer": true }, "node_modules/@types/babel__code-frame": { "version": "7.0.3", @@ -6836,6 +6295,12 @@ "@types/ms": "*" } }, + "node_modules/@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha1-M0MRlx06BxIefrkbaEpgXn7qnL0=", + "license": "MIT" + }, "node_modules/@types/diff": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/@types/diff/-/diff-5.0.3.tgz", @@ -7066,9 +6531,9 @@ } }, "node_modules/@types/lodash": { - "version": "4.17.16", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.16.tgz", - "integrity": "sha512-HX7Em5NYQAXKW+1T+FiuG27NGwzJfCX3s1GjOa7ujxZa52kjJLOr4FUxT+giF6Tgxv1e+/czV/iTtBw27WTU9g==", + "version": "4.17.24", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/@types/lodash/-/lodash-4.17.24.tgz", + "integrity": "sha1-SuM0/GLA6RXKjtjjXcxtTuspIV8=", "license": "MIT" }, "node_modules/@types/mdast": { @@ -7230,14 +6695,14 @@ "license": "MIT" }, "node_modules/@types/react": { - "version": "19.1.4", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.4.tgz", - "integrity": "sha512-EB1yiiYdvySuIITtD5lhW4yPyJ31RkJkkDw794LaQYrxCSaQV/47y5o1FMC4zF9ZyjUjzJMZwbovEnT5yHTW6g==", + "version": "19.2.14", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/@types/react/-/react-19.2.14.tgz", + "integrity": "sha1-OWBJKbXjlX46b6AAHa+xfHr3C60=", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "csstype": "^3.0.2" + "csstype": "^3.2.2" } }, "node_modules/@types/resolve": { @@ -7309,6 +6774,12 @@ "integrity": "sha512-mQkU2jY8jJEF7YHjHvsQO8+3ughTL1mcnn96igfhONmR+fUPSKIkefQYpSe8bsly2Ep7oQbn/6VG5/9/0qcArQ==", "license": "MIT" }, + "node_modules/@types/statuses": { + "version": "2.0.6", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/@types/statuses/-/statuses-2.0.6.tgz", + "integrity": "sha1-ZnSDFcyaltY0A7qoZxssEk+GM6o=", + "license": "MIT" + }, "node_modules/@types/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/@types/supports-color/-/supports-color-8.1.1.tgz", @@ -7340,13 +6811,6 @@ "integrity": "sha512-cputDpIbFgLUaGQn6Vqg3/YsJwxUwHLO13v3i5ouxT4lat0khip9AEWxtERujXV9wxIB1EyF97BSJFt6vpdI8g==", "license": "MIT" }, - "node_modules/@types/uuid": { - "version": "9.0.8", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz", - "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/valid-url": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@types/valid-url/-/valid-url-1.0.4.tgz", @@ -7613,65 +7077,44 @@ "license": "ISC" }, "node_modules/@vitest/expect": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.0.5.tgz", - "integrity": "sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA==", - "dev": true, + "version": "3.2.4", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/@vitest/expect/-/expect-3.2.4.tgz", + "integrity": "sha1-g2ISTNgRpe4RxXaCB7nfU9NPJDM=", "license": "MIT", "dependencies": { - "@vitest/spy": "2.0.5", - "@vitest/utils": "2.0.5", - "chai": "^5.1.1", - "tinyrainbow": "^1.2.0" + "@types/chai": "^5.2.2", + "@vitest/spy": "3.2.4", + "@vitest/utils": "3.2.4", + "chai": "^5.2.0", + "tinyrainbow": "^2.0.0" }, "funding": { "url": "https://opencollective.com/vitest" } }, - "node_modules/@vitest/expect/node_modules/@vitest/pretty-format": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.0.5.tgz", - "integrity": "sha512-h8k+1oWHfwTkyTkb9egzwNMfJAEx4veaPSnMeKbVSjp4euqGSbQlm5+6VHwTr7u4FJslVVsUG5nopCaAYdOmSQ==", - "dev": true, + "node_modules/@vitest/expect/node_modules/@types/chai": { + "version": "5.2.3", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/@types/chai/-/chai-5.2.3.tgz", + "integrity": "sha1-jpzZ4cNYH6azQaWu1ViOsoW+C0o=", "license": "MIT", "dependencies": { - "tinyrainbow": "^1.2.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/expect/node_modules/@vitest/utils": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.0.5.tgz", - "integrity": "sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/pretty-format": "2.0.5", - "estree-walker": "^3.0.3", - "loupe": "^3.1.1", - "tinyrainbow": "^1.2.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" + "@types/deep-eql": "*", + "assertion-error": "^2.0.1" } }, "node_modules/@vitest/expect/node_modules/assertion-error": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", - "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", - "dev": true, + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha1-9kGhlrM1aQsQcL8AtudZP+wZC/c=", "license": "MIT", "engines": { "node": ">=12" } }, "node_modules/@vitest/expect/node_modules/chai": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-5.2.0.tgz", - "integrity": "sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==", - "dev": true, + "version": "5.3.3", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/chai/-/chai-5.3.3.tgz", + "integrity": "sha1-3T2pVeJwkWpL0/Yl9LkZmWrafgY=", "license": "MIT", "dependencies": { "assertion-error": "^2.0.1", @@ -7681,14 +7124,13 @@ "pathval": "^2.0.0" }, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@vitest/expect/node_modules/check-error": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", - "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", - "dev": true, + "version": "2.1.3", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/check-error/-/check-error-2.1.3.tgz", + "integrity": "sha1-JCc2ERe3DMqNyJaA6tMrFXAZyvU=", "license": "MIT", "engines": { "node": ">= 16" @@ -7696,87 +7138,70 @@ }, "node_modules/@vitest/expect/node_modules/deep-eql": { "version": "5.0.2", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", - "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", - "dev": true, + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha1-S3VtjXcKklcwCCXVKiws/5nDo0E=", "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/@vitest/expect/node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0" - } - }, "node_modules/@vitest/expect/node_modules/loupe": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.3.tgz", - "integrity": "sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==", - "dev": true, + "version": "3.2.1", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/loupe/-/loupe-3.2.1.tgz", + "integrity": "sha1-AJXPVtxbepp8CP9bGoeW7IrRfnY=", "license": "MIT" }, "node_modules/@vitest/expect/node_modules/pathval": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", - "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==", - "dev": true, + "version": "2.0.1", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/pathval/-/pathval-2.0.1.tgz", + "integrity": "sha1-iFXFooma8HLWrAXRHkYEWtDcYF0=", "license": "MIT", "engines": { "node": ">= 14.16" } }, "node_modules/@vitest/pretty-format": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.9.tgz", - "integrity": "sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ==", - "dev": true, + "version": "3.2.4", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/@vitest/pretty-format/-/pretty-format-3.2.4.tgz", + "integrity": "sha1-PBAveegrIEomx6WSG/R9U0kZ07Q=", "license": "MIT", "dependencies": { - "tinyrainbow": "^1.2.0" + "tinyrainbow": "^2.0.0" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/spy": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.0.5.tgz", - "integrity": "sha512-c/jdthAhvJdpfVuaexSrnawxZz6pywlTPe84LUB2m/4t3rl2fTo9NFGBG4oWgaD+FTgDDV8hJ/nibT7IfH3JfA==", - "dev": true, + "version": "3.2.4", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/@vitest/spy/-/spy-3.2.4.tgz", + "integrity": "sha1-zBjyb0Dz8CjaZiAEaIH05FGMJZk=", "license": "MIT", "dependencies": { - "tinyspy": "^3.0.0" + "tinyspy": "^4.0.3" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/utils": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.9.tgz", - "integrity": "sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ==", - "dev": true, + "version": "3.2.4", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/@vitest/utils/-/utils-3.2.4.tgz", + "integrity": "sha1-wIE7xC2ZUn+4xbE4x6iFFrykb+o=", "license": "MIT", "dependencies": { - "@vitest/pretty-format": "2.1.9", - "loupe": "^3.1.2", - "tinyrainbow": "^1.2.0" + "@vitest/pretty-format": "3.2.4", + "loupe": "^3.1.4", + "tinyrainbow": "^2.0.0" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/utils/node_modules/loupe": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.3.tgz", - "integrity": "sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==", - "dev": true, + "version": "3.2.1", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/loupe/-/loupe-3.2.1.tgz", + "integrity": "sha1-AJXPVtxbepp8CP9bGoeW7IrRfnY=", "license": "MIT" }, "node_modules/@wdio/config": { @@ -8097,6 +7522,10 @@ "resolved": "packages/rollup-plugin-polyfills-loader", "link": true }, + "node_modules/@web/storybook-addon-mocks": { + "resolved": "packages/storybook-addon-mocks", + "link": true + }, "node_modules/@web/storybook-builder": { "resolved": "packages/storybook-builder", "link": true @@ -10125,8 +9554,8 @@ }, "node_modules/big.js": { "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha1-ZfCvOC9Xi83HQr2cKB6cstd2gyg=", "license": "MIT", "engines": { "node": "*" @@ -10886,9 +10315,10 @@ }, "node_modules/call-bound": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha1-I43pNdKippKSjFOMfM+pEGf9Bio=", "license": "MIT", + "peer": true, "dependencies": { "call-bind-apply-helpers": "^1.0.2", "get-intrinsic": "^1.3.0" @@ -11743,6 +11173,15 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, + "node_modules/cli-width": { + "version": "4.1.0", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha1-QtqsQdPCVO84rYrAN2chMBc2kcU=", + "license": "ISC", + "engines": { + "node": ">= 12" + } + }, "node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", @@ -12785,9 +12224,8 @@ }, "node_modules/css.escape": { "version": "1.5.1", - "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", - "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", - "dev": true, + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s=", "license": "MIT" }, "node_modules/cssesc": { @@ -12906,9 +12344,9 @@ } }, "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "version": "3.2.3", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha1-7EjA8+mT5QZIyG2lWeJhCZXPmJo=", "dev": true, "license": "MIT", "peer": true @@ -13429,10 +12867,10 @@ }, "node_modules/dom-accessibility-api": { "version": "0.5.16", - "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", - "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", - "dev": true, - "license": "MIT" + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha1-WnQp5gZus2ZNkR4z+w5F3o6whFM=", + "license": "MIT", + "peer": true }, "node_modules/dom-serializer": { "version": "1.4.1", @@ -13461,8 +12899,8 @@ }, "node_modules/dom-walk": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", - "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/dom-walk/-/dom-walk-0.1.2.tgz", + "integrity": "sha1-DFSL7wSPTR8qlySQAiNgYNqj/YQ=" }, "node_modules/domelementtype": { "version": "2.3.0", @@ -13846,8 +13284,8 @@ }, "node_modules/emojis-list": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha1-VXBmIEatKeLpFucariYKvf9Pang=", "license": "MIT", "engines": { "node": ">= 4" @@ -16167,8 +15605,8 @@ }, "node_modules/global": { "version": "4.4.0", - "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", - "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/global/-/global-4.4.0.tgz", + "integrity": "sha1-PnsQUXkAajI+1xqvyj6cV6XMZAY=", "license": "MIT", "dependencies": { "min-document": "^2.19.0", @@ -16312,6 +15750,17 @@ "dev": true, "license": "MIT" }, + "node_modules/graphql": { + "version": "16.13.1", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/graphql/-/graphql-16.13.1.tgz", + "integrity": "sha1-OK5cdvvEoAngAE3KbHbDcKHae1Q=", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" + } + }, "node_modules/gray-matter": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", @@ -18448,9 +17897,8 @@ }, "node_modules/indent-string": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha1-Yk+PRJfWGbLZdoUx1Y9BIoVNclE=", "license": "MIT", "engines": { "node": ">=8" @@ -18606,9 +18054,10 @@ }, "node_modules/is-arguments": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", - "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/is-arguments/-/is-arguments-1.2.0.tgz", + "integrity": "sha1-rVjGrs9WO3jvK/BN9UDaj119jhs=", "license": "MIT", + "peer": true, "dependencies": { "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" @@ -19559,8 +19008,8 @@ }, "node_modules/js-string-escape": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", - "integrity": "sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/js-string-escape/-/js-string-escape-1.0.1.tgz", + "integrity": "sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8=", "license": "MIT", "engines": { "node": ">= 0.8" @@ -19599,9 +19048,10 @@ }, "node_modules/jsdoc-type-pratt-parser": { "version": "4.8.0", - "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.8.0.tgz", - "integrity": "sha512-iZ8Bdb84lWRuGHamRXFyML07r21pcwBrLkHEuHgEY5UbCouBwv7ECknDRKzsQIXMiqpPymqtIf8TC/shYKB5rw==", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.8.0.tgz", + "integrity": "sha1-8qZJdHJ4y/nylX0Vz3cqhBsW8AM=", "license": "MIT", + "peer": true, "engines": { "node": ">=12.0.0" } @@ -21161,10 +20611,10 @@ }, "node_modules/lz-string": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", - "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", - "dev": true, + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha1-watQ93iHtxJiEgG6n9Tjpu0JmUE=", "license": "MIT", + "peer": true, "bin": { "lz-string": "bin/bin.js" } @@ -21241,13 +20691,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/map-or-similar": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/map-or-similar/-/map-or-similar-1.5.0.tgz", - "integrity": "sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==", - "dev": true, - "license": "MIT" - }, "node_modules/map-stream": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", @@ -22137,16 +21580,6 @@ "node": ">= 0.6" } }, - "node_modules/memoizerific": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/memoizerific/-/memoizerific-1.11.3.tgz", - "integrity": "sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog==", - "dev": true, - "license": "MIT", - "dependencies": { - "map-or-similar": "^1.5.0" - } - }, "node_modules/merge-descriptors": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", @@ -22985,9 +22418,10 @@ } }, "node_modules/min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==", + "version": "2.19.2", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/min-document/-/min-document-2.19.2.tgz", + "integrity": "sha1-+V20RjnqrjrI6oWuaAmuhf9+O4E=", + "license": "MIT", "dependencies": { "dom-walk": "^0.1.0" } @@ -22996,7 +22430,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -23398,6 +22831,146 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "license": "MIT" }, + "node_modules/msw": { + "version": "2.4.1", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/msw/-/msw-2.4.1.tgz", + "integrity": "sha1-uw6tAxHeOdWEf/CDa53Wfnu6Arg=", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@bundled-es-modules/cookie": "^2.0.0", + "@bundled-es-modules/statuses": "^1.0.1", + "@bundled-es-modules/tough-cookie": "^0.1.6", + "@inquirer/confirm": "^3.0.0", + "@mswjs/interceptors": "^0.29.0", + "@open-draft/until": "^2.1.0", + "@types/cookie": "^0.6.0", + "@types/statuses": "^2.0.4", + "chalk": "^4.1.2", + "headers-polyfill": "^4.0.2", + "is-node-process": "^1.2.0", + "outvariant": "^1.4.2", + "path-to-regexp": "^6.2.0", + "strict-event-emitter": "^0.5.1", + "type-fest": "^4.9.0", + "yargs": "^17.7.2" + }, + "bin": { + "msw": "cli/index.js" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/mswjs" + }, + "peerDependencies": { + "graphql": ">= 16.8.x", + "typescript": ">= 4.7.x" + }, + "peerDependenciesMeta": { + "graphql": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/msw/node_modules/@types/cookie": { + "version": "0.6.0", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/@types/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha1-6sOX8ovx1q4K4IE2PsovQlvt8NU=", + "license": "MIT" + }, + "node_modules/msw/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/msw/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/msw/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/msw/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", + "license": "MIT" + }, + "node_modules/msw/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/msw/node_modules/path-to-regexp": { + "version": "6.3.0", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/path-to-regexp/-/path-to-regexp-6.3.0.tgz", + "integrity": "sha1-K2omozdzeo4UFvknLtB2axwDifQ=", + "license": "MIT" + }, + "node_modules/msw/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/msw/node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha1-auHI5XMSc8K/H1itOcuuLJGkbFg=", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/multimatch": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-4.0.0.tgz", @@ -23441,6 +23014,17 @@ "npm": ">=1.4.0" } }, + "node_modules/mute-stream": { + "version": "2.0.0", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/mute-stream/-/mute-stream-2.0.0.tgz", + "integrity": "sha1-pURvwMUStxyDxE2QjVx7e0xJOys=", + "license": "ISC", + "optional": true, + "peer": true, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, "node_modules/nanocolors": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/nanocolors/-/nanocolors-0.2.13.tgz", @@ -23998,9 +23582,9 @@ "dev": true }, "node_modules/outvariant": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/outvariant/-/outvariant-1.4.0.tgz", - "integrity": "sha512-AlWY719RF02ujitly7Kk/0QlV+pXGFDHrHf9O2OKqyqgBieaPOIeuSkL8sRK6j2WK+/ZAURq2kZsY0d8JapUiw==", + "version": "1.4.3", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/outvariant/-/outvariant-1.4.3.tgz", + "integrity": "sha1-Ihwb/Ak+j+xwdUl+d5n9v0PRSHM=", "license": "MIT" }, "node_modules/p-cancelable": { @@ -24904,19 +24488,6 @@ "node": ">=14.19.0" } }, - "node_modules/polished": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/polished/-/polished-4.3.1.tgz", - "integrity": "sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.17.8" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/portfinder": { "version": "1.0.32", "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz", @@ -25695,10 +25266,10 @@ }, "node_modules/pretty-format": { "version": "27.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", - "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", - "dev": true, + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha1-IYGHn96lGnpYUfs52SD6pj8B2I4=", "license": "MIT", + "peer": true, "dependencies": { "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", @@ -25710,10 +25281,10 @@ }, "node_modules/pretty-format/node_modules/ansi-styles": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha1-B0SWkK1Fd30ZJKwquy/IiV26g2s=", "license": "MIT", + "peer": true, "engines": { "node": ">=10" }, @@ -26447,21 +26018,34 @@ } }, "node_modules/react": { - "version": "19.1.0", - "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz", - "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==", + "version": "19.2.4", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/react/-/react-19.2.4.tgz", + "integrity": "sha1-Q45XuqGbd8sjqrUWz2Nc0Fee4Jo=", "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" } }, + "node_modules/react-dom": { + "version": "19.2.4", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/react-dom/-/react-dom-19.2.4.tgz", + "integrity": "sha1-b6xr2W99tHfZZsfsF8Gisa2OZZE=", + "dev": true, + "license": "MIT", + "dependencies": { + "scheduler": "^0.27.0" + }, + "peerDependencies": { + "react": "^19.2.4" + } + }, "node_modules/react-is": { "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true, - "license": "MIT" + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha1-5pHUqOnHiTZWVVOas3J2Kw77VPA=", + "license": "MIT", + "peer": true }, "node_modules/read-package-json-fast": { "version": "3.0.2", @@ -27141,9 +26725,8 @@ }, "node_modules/redent": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "dev": true, + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/redent/-/redent-3.0.0.tgz", + "integrity": "sha1-5Ve3mYMWu1PJ8fVvpiY1LGljBZ8=", "license": "MIT", "dependencies": { "indent-string": "^4.0.0", @@ -29688,6 +29271,14 @@ "node": ">= 4" } }, + "node_modules/rettime": { + "version": "0.10.1", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/rettime/-/rettime-0.10.1.tgz", + "integrity": "sha1-zIu5hwND8oKxguWidomcCLlJFL4=", + "license": "MIT", + "optional": true, + "peer": true + }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -30112,9 +29703,9 @@ "license": "MIT" }, "node_modules/scheduler": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", - "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==", + "version": "0.27.0", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha1-DE74LWfR5cHjWej8dtOofwRf5b0=", "dev": true, "license": "MIT" }, @@ -31651,16 +31242,25 @@ } }, "node_modules/storybook": { - "version": "8.6.15", - "resolved": "https://registry.npmjs.org/storybook/-/storybook-8.6.15.tgz", - "integrity": "sha512-Ob7DMlwWx8s7dMvcQ3xPc02TvUeralb+xX3oaPRk9wY9Hc6M1IBC/7cEoITkSmRS2v38DHubC+mtEKNc1u2gQg==", + "version": "9.1.19", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/storybook/-/storybook-9.1.19.tgz", + "integrity": "sha1-ULd1BTTIxh+TTZwh/m2QTaaMfVQ=", "license": "MIT", "dependencies": { - "@storybook/core": "8.6.15" + "@storybook/global": "^5.0.0", + "@testing-library/jest-dom": "^6.6.3", + "@testing-library/user-event": "^14.6.1", + "@vitest/expect": "3.2.4", + "@vitest/mocker": "3.2.4", + "@vitest/spy": "3.2.4", + "better-opn": "^3.0.2", + "esbuild": "^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0 || ^0.25.0", + "esbuild-register": "^3.5.0", + "recast": "^0.23.5", + "semver": "^7.6.2", + "ws": "^8.18.0" }, "bin": { - "getstorybook": "bin/index.cjs", - "sb": "bin/index.cjs", "storybook": "bin/index.cjs" }, "funding": { @@ -31700,6 +31300,367 @@ "unist-util-visit-parents": "^3.1.1" } }, + "node_modules/storybook/node_modules/@inquirer/confirm": { + "version": "5.1.21", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/@inquirer/confirm/-/confirm-5.1.21.tgz", + "integrity": "sha1-YQxKzXeX2UiQpuLd4smOseiR3RI=", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/storybook/node_modules/@inquirer/core": { + "version": "10.3.2", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/@inquirer/core/-/core-10.3.2.tgz", + "integrity": "sha1-U1l5/z/0/h58xPg+IyBQTHQ7fiA=", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@inquirer/ansi": "^1.0.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "cli-width": "^4.1.0", + "mute-stream": "^2.0.0", + "signal-exit": "^4.1.0", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/storybook/node_modules/@inquirer/type": { + "version": "3.0.10", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/@inquirer/type/-/type-3.0.10.tgz", + "integrity": "sha1-Ee1WTseEMqIA6iYBohLSSvgVDVA=", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/storybook/node_modules/@mswjs/interceptors": { + "version": "0.41.3", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/@mswjs/interceptors/-/interceptors-0.41.3.tgz", + "integrity": "sha1-12bcGhaKoxWmoLLQ8uDPG3TyPII=", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@open-draft/deferred-promise": "^2.2.0", + "@open-draft/logger": "^0.3.0", + "@open-draft/until": "^2.0.0", + "is-node-process": "^1.2.0", + "outvariant": "^1.4.3", + "strict-event-emitter": "^0.5.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/storybook/node_modules/@vitest/mocker": { + "version": "3.2.4", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/@vitest/mocker/-/mocker-3.2.4.tgz", + "integrity": "sha1-RHHE771i2w1PogPmXMawWKhcq9M=", + "license": "MIT", + "dependencies": { + "@vitest/spy": "3.2.4", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.17" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/storybook/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/storybook/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/storybook/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/storybook/node_modules/cookie": { + "version": "1.1.1", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/cookie/-/cookie-1.1.1.tgz", + "integrity": "sha1-O7m9/II2nbnC9pyTycPOsxDIizw=", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/storybook/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha1-6Bj9ac5cz8tARZT4QpY79TFkzDc=", + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/storybook/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha1-Z8PlSexAKkh7T8GT0ZU6UkdSNA0=", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/storybook/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0=", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/storybook/node_modules/msw": { + "version": "2.12.10", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/msw/-/msw-2.12.10.tgz", + "integrity": "sha1-bTyoD20TcV0rZdoD+fB7RmR8PiA=", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@inquirer/confirm": "^5.0.0", + "@mswjs/interceptors": "^0.41.2", + "@open-draft/deferred-promise": "^2.2.0", + "@types/statuses": "^2.0.6", + "cookie": "^1.0.2", + "graphql": "^16.12.0", + "headers-polyfill": "^4.0.2", + "is-node-process": "^1.2.0", + "outvariant": "^1.4.3", + "path-to-regexp": "^6.3.0", + "picocolors": "^1.1.1", + "rettime": "^0.10.1", + "statuses": "^2.0.2", + "strict-event-emitter": "^0.5.1", + "tough-cookie": "^6.0.0", + "type-fest": "^5.2.0", + "until-async": "^3.0.2", + "yargs": "^17.7.2" + }, + "bin": { + "msw": "cli/index.js" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/mswjs" + }, + "peerDependencies": { + "typescript": ">= 4.8.x" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/storybook/node_modules/path-to-regexp": { + "version": "6.3.0", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/path-to-regexp/-/path-to-regexp-6.3.0.tgz", + "integrity": "sha1-K2omozdzeo4UFvknLtB2axwDifQ=", + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/storybook/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha1-lSGIwcvVRgcOLdIND0HArgUwywQ=", + "license": "ISC", + "optional": true, + "peer": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/storybook/node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha1-j3XuzvdlteHPzcCA2llAntQk44I=", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/storybook/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha1-JpxxF9J7Ba0uU2gwqOyJXvnG0BA=", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/storybook/node_modules/tough-cookie": { + "version": "6.0.0", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/tough-cookie/-/tough-cookie-6.0.0.tgz", + "integrity": "sha1-EeQYt4ZKLA2HRwK8jODwESYZQOU=", + "license": "BSD-3-Clause", + "optional": true, + "peer": true, + "dependencies": { + "tldts": "^7.0.5" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/storybook/node_modules/type-fest": { + "version": "5.4.4", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/type-fest/-/type-fest-5.4.4.tgz", + "integrity": "sha1-V38WW17LRM/GhlWcxUynf2KqN00=", + "license": "(MIT OR CC0-1.0)", + "optional": true, + "peer": true, + "dependencies": { + "tagged-tag": "^1.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/storybook/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha1-6Tk7oHEC5skaOyIUePAlfNKFblM=", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/storybook/node_modules/ws": { + "version": "8.19.0", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/ws/-/ws-8.19.0.tgz", + "integrity": "sha1-3cK9+lua2GAgT1pypIY6iJX9jIs=", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/stream-combiner": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", @@ -32045,9 +32006,8 @@ }, "node_modules/strip-indent": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "dev": true, + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha1-wy4c7pQLazQyx3G8LFS8znPNMAE=", "license": "MIT", "dependencies": { "min-indent": "^1.0.0" @@ -32209,6 +32169,20 @@ "node": ">=8" } }, + "node_modules/tagged-tag": { + "version": "1.0.0", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/tagged-tag/-/tagged-tag-1.0.0.tgz", + "integrity": "sha1-oLWRfChky6VIQUlav6P2sT7c9NY=", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/tar-fs": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", @@ -32547,25 +32521,45 @@ "license": "MIT" }, "node_modules/tinyrainbow": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-1.2.0.tgz", - "integrity": "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==", - "dev": true, + "version": "2.0.0", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/tinyrainbow/-/tinyrainbow-2.0.0.tgz", + "integrity": "sha1-lQmyFiQ2MV6A4+7g/M5EdNJEQpQ=", "license": "MIT", "engines": { "node": ">=14.0.0" } }, "node_modules/tinyspy": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz", - "integrity": "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==", - "dev": true, + "version": "4.0.4", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/tinyspy/-/tinyspy-4.0.4.tgz", + "integrity": "sha1-13oAL7U6iKoUKbQZwckkkuDIH3g=", "license": "MIT", "engines": { "node": ">=14.0.0" } }, + "node_modules/tldts": { + "version": "7.0.25", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/tldts/-/tldts-7.0.25.tgz", + "integrity": "sha1-6QNIduCbKtkttUepMHrm+mVAD40=", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "tldts-core": "^7.0.25" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "7.0.25", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/tldts-core/-/tldts-core-7.0.25.tgz", + "integrity": "sha1-6u5X+s37VSg4PZYfVYbUl4RRneU=", + "license": "MIT", + "optional": true, + "peer": true + }, "node_modules/tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -33665,8 +33659,8 @@ }, "node_modules/unplugin": { "version": "1.16.1", - "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.16.1.tgz", - "integrity": "sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/unplugin/-/unplugin-1.16.1.tgz", + "integrity": "sha1-qETS48OxSkrClFxCvoBAkyG2EZk=", "dev": true, "license": "MIT", "dependencies": { @@ -33677,6 +33671,17 @@ "node": ">=14.0.0" } }, + "node_modules/until-async": { + "version": "3.0.2", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/until-async/-/until-async-3.0.2.tgz", + "integrity": "sha1-RH8VMf3XuytMepiGm9saTCojhl8=", + "license": "MIT", + "optional": true, + "peer": true, + "funding": { + "url": "https://github.com/sponsors/kettanaito" + } + }, "node_modules/upath": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", @@ -33833,9 +33838,10 @@ }, "node_modules/util": { "version": "0.12.5", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", - "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/util/-/util-0.12.5.tgz", + "integrity": "sha1-XxemBZtz22GodWaHgaHCsTa9b7w=", "license": "MIT", + "peer": true, "dependencies": { "inherits": "^2.0.3", "is-arguments": "^1.0.4", @@ -33859,20 +33865,6 @@ "node": ">= 0.4.0" } }, - "node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "dev": true, - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/uvu": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz", @@ -34279,8 +34271,8 @@ }, "node_modules/webpack-virtual-modules": { "version": "0.6.2", - "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz", - "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz", + "integrity": "sha1-BX+qkGXIrPSPJMtXrA53c5q5p+g=", "dev": true, "license": "MIT" }, @@ -35589,9 +35581,10 @@ } }, "node_modules/yoctocolors-cjs": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz", - "integrity": "sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==", + "version": "2.1.3", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz", + "integrity": "sha1-fklk6o7EIrekCskX06NEz9IwS6o=", + "license": "MIT", "engines": { "node": ">=18" }, @@ -36697,6 +36690,32 @@ "node": ">=18" } }, + "packages/mocks/node_modules/@storybook/manager-api": { + "version": "8.6.14", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/@storybook/manager-api/-/manager-api-8.6.14.tgz", + "integrity": "sha1-HgdAGT+/1KZun/X3XH+XbhYCh1I=", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "storybook": "^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0" + } + }, + "packages/mocks/node_modules/@storybook/preview-api": { + "version": "8.6.14", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/@storybook/preview-api/-/preview-api-8.6.14.tgz", + "integrity": "sha1-tKHtp+zxfE06B6qaQu0SUd4SH3Q=", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "storybook": "^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0" + } + }, "packages/mocks/node_modules/@types/cookie": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", @@ -36811,9 +36830,37 @@ "integrity": "sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==" }, "packages/mocks/node_modules/path-to-regexp": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.2.tgz", - "integrity": "sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==" + "version": "6.3.0", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/path-to-regexp/-/path-to-regexp-6.3.0.tgz", + "integrity": "sha1-K2omozdzeo4UFvknLtB2axwDifQ=", + "license": "MIT" + }, + "packages/mocks/node_modules/storybook": { + "version": "8.6.18", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/storybook/-/storybook-8.6.18.tgz", + "integrity": "sha1-KmNaSwyZaT9DuiG461EcXMUTqAc=", + "license": "MIT", + "peer": true, + "dependencies": { + "@storybook/core": "8.6.18" + }, + "bin": { + "getstorybook": "bin/index.cjs", + "sb": "bin/index.cjs", + "storybook": "bin/index.cjs" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "prettier": "^2 || ^3" + }, + "peerDependenciesMeta": { + "prettier": { + "optional": true + } + } }, "packages/mocks/node_modules/supports-color": { "version": "7.2.0", @@ -37592,6 +37639,21 @@ "@esbuild/win32-x64": "0.27.3" } }, + "packages/storybook-addon-mocks": { + "name": "@web/storybook-addon-mocks", + "version": "0.0.0", + "license": "MIT", + "dependencies": { + "@web/storybook-utils": "^1.1.1", + "lit": "^2.7.5 || ^3.0.0", + "msw": "2.4.1", + "storybook": "^9.1.19" + }, + "devDependencies": { + "@web/storybook-builder": "^0.2.2", + "@web/storybook-framework-web-components": "^0.2.1" + } + }, "packages/storybook-builder": { "name": "@web/storybook-builder", "version": "0.2.6", @@ -37601,9 +37663,6 @@ "@rollup/plugin-node-resolve": "^15.1.0", "@rollup/plugin-replace": "^6.0.2", "@rollup/pluginutils": "^5.0.2", - "@storybook/core-common": "^8.6.12", - "@storybook/node-logger": "^8.6.12", - "@storybook/preview": "^8.6.12", "@web/config-loader": "^0.3.2", "@web/dev-server": "^0.4.0", "@web/dev-server-core": "^0.7.5", @@ -37621,10 +37680,8 @@ "rollup": "^4.4.1", "rollup-plugin-external-globals": "^0.9.0", "sirv": "^2.0.4", - "slash": "^5.1.0" - }, - "devDependencies": { - "@storybook/types": "^8.6.12" + "slash": "^5.1.0", + "storybook": "^9.1.19" }, "engines": { "node": ">=18.0.0" @@ -39487,80 +39544,62 @@ "version": "0.2.1", "license": "MIT", "dependencies": { - "@storybook/web-components": "^8.6.12", + "@storybook/web-components": "^9.1.19", "@web/storybook-builder": "^0.2.2" }, "devDependencies": { "@playwright/test": "^1.53.0", - "@storybook/addon-a11y": "^8.6.12", - "@storybook/addon-essentials": "^8.6.12", - "@storybook/addon-interactions": "^8.6.12", - "@storybook/addon-links": "^8.6.12", - "@storybook/blocks": "^8.6.12", - "@storybook/types": "^8.6.12", + "@storybook/addon-a11y": "^9.1.19", + "@storybook/addon-docs": "^9.1.19", + "@storybook/addon-links": "^9.1.19", "@web/dev-server": "^0.4.0", "@web/rollup-plugin-import-meta-assets": "^2.2.1", "@web/storybook-utils": "^1.1.0", - "storybook": "^8.6.15" + "storybook": "^9.1.19" }, "engines": { "node": ">=18.0.0" } }, - "packages/storybook-framework-web-components/node_modules/@storybook/blocks": { - "version": "8.6.12", - "resolved": "https://registry.npmjs.org/@storybook/blocks/-/blocks-8.6.12.tgz", - "integrity": "sha512-DohlTq6HM1jDbHYiXL4ZvZ00VkhpUp5uftzj/CZDLY1fYHRjqtaTwWm2/OpceivMA8zDitLcq5atEZN+f+siTg==", + "packages/storybook-framework-web-components/node_modules/@storybook/addon-a11y": { + "version": "9.1.19", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/@storybook/addon-a11y/-/addon-a11y-9.1.19.tgz", + "integrity": "sha1-ARkNzGifcoj1OqOoelL24mJesoI=", "dev": true, "license": "MIT", "dependencies": { - "@storybook/icons": "^1.2.12", - "ts-dedent": "^2.0.0" + "@storybook/global": "^5.0.0", + "axe-core": "^4.2.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", - "storybook": "^8.6.12" - }, - "peerDependenciesMeta": { - "react": { - "optional": true - }, - "react-dom": { - "optional": true - } + "storybook": "^9.1.19" } }, - "packages/storybook-framework-web-components/node_modules/@storybook/icons": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@storybook/icons/-/icons-1.4.0.tgz", - "integrity": "sha512-Td73IeJxOyalzvjQL+JXx72jlIYHgs+REaHiREOqfpo3A2AYYG71AUbcv+lg7mEDIweKVCxsMQ0UKo634c8XeA==", + "packages/storybook-framework-web-components/node_modules/@storybook/addon-links": { + "version": "9.1.19", + "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/@storybook/addon-links/-/addon-links-9.1.19.tgz", + "integrity": "sha1-TsQ2Wm3dqJys09ZpT3jvVaGKABo=", "dev": true, "license": "MIT", - "engines": { - "node": ">=14.0.0" + "dependencies": { + "@storybook/global": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" }, "peerDependencies": { "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" - } - }, - "packages/storybook-framework-web-components/node_modules/react-dom": { - "version": "19.1.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz", - "integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "scheduler": "^0.26.0" + "storybook": "^9.1.19" }, - "peerDependencies": { - "react": "^19.1.0" + "peerDependenciesMeta": { + "react": { + "optional": true + } } }, "packages/storybook-utils": { @@ -39568,7 +39607,7 @@ "version": "1.1.2", "license": "MIT", "dependencies": { - "@storybook/core-events": "^7.0.0 || ^8.0.0" + "storybook": "^9.1.19" }, "devDependencies": { "react": "^19.0.0" diff --git a/packages/mocks/README.md b/packages/mocks/README.md index ce56df1fa3..137c44bada 100644 --- a/packages/mocks/README.md +++ b/packages/mocks/README.md @@ -1,5 +1,7 @@ # @web/mocks +## Deprecation notice: `@web/mocks` is compatible only up to Storybook 8. For Storybook 9, please use `@web/storybook-addons-mocks` instead. + [`MSW`](https://mswjs.io/) integration layer for usage with [`@web/dev-server`](https://modern-web.dev/docs/dev-server/overview/), [`@web/test-runner`](https://modern-web.dev/docs/test-runner/overview/) and [`@web/dev-server-storybook`](https://modern-web.dev/docs/dev-server/plugins/storybook/#mainjs-and-previewjs). ## Defining mocks diff --git a/packages/mocks/rollup-plugin.js b/packages/mocks/rollup-plugin.js index e7e6c4577e..9069861f84 100644 --- a/packages/mocks/rollup-plugin.js +++ b/packages/mocks/rollup-plugin.js @@ -6,6 +6,9 @@ import path from 'node:path'; const require = createRequire(import.meta.url); +/** + * @deprecated `@web/mocks` is deprecated and only supports up to Storybook 8. Please migrate to `@web/storybook-addon-mocks` for Storybook 9 support. + **/ export function mockRollupPlugin( { interceptor } = { interceptor: '', diff --git a/packages/mocks/storybook/addon/decorator.js b/packages/mocks/storybook/addon/decorator.js index da74542985..dbd201d9ed 100644 --- a/packages/mocks/storybook/addon/decorator.js +++ b/packages/mocks/storybook/addon/decorator.js @@ -6,5 +6,6 @@ import { createDecorator } from './create-decorator.js'; // Storybook 7+ /** * @type {ReturnType} - */ + * @deprecated `@web/mocks` is deprecated and only supports up to Storybook 8. Please migrate to `@web/storybook-addon-mocks` for Storybook 9 support. + **/ export const withMocks = createDecorator(addons, makeDecorator); diff --git a/packages/mocks/storybook/decorator.js b/packages/mocks/storybook/decorator.js index 7f8496a020..0fd60ffad9 100644 --- a/packages/mocks/storybook/decorator.js +++ b/packages/mocks/storybook/decorator.js @@ -4,4 +4,8 @@ import { addons, makeDecorator } from '@web/storybook-prebuilt/addons'; import { createDecorator } from './addon/create-decorator.js'; // Storybook 6 + +/** + * @deprecated `@web/mocks` is deprecated and only supports up to Storybook 8. Please migrate to `@web/storybook-addon-mocks` for Storybook 9 support. + **/ export const withMocks = createDecorator(addons, makeDecorator); diff --git a/packages/mocks/wds-plugin.js b/packages/mocks/wds-plugin.js index 4e5fad893b..f8ca0a097f 100644 --- a/packages/mocks/wds-plugin.js +++ b/packages/mocks/wds-plugin.js @@ -3,6 +3,9 @@ import { readFileSync } from 'node:fs'; const require = createRequire(import.meta.url); +/** + * @deprecated `@web/mocks` is deprecated and only supports up to Storybook 8. Please migrate to `@web/storybook-addon-mocks` for Storybook 9 support. + **/ export function mockPlugin() { return { name: 'wds-plugin-msw', diff --git a/packages/storybook-addon-mocks/CHANGELOG.md b/packages/storybook-addon-mocks/CHANGELOG.md new file mode 100644 index 0000000000..8990e2e8a3 --- /dev/null +++ b/packages/storybook-addon-mocks/CHANGELOG.md @@ -0,0 +1 @@ +# @web/storybook-addons-mocks diff --git a/packages/storybook-addon-mocks/README.md b/packages/storybook-addon-mocks/README.md new file mode 100644 index 0000000000..296e54166a --- /dev/null +++ b/packages/storybook-addon-mocks/README.md @@ -0,0 +1,368 @@ +# @web/storybook-addon-mocks + +[`MSW`](https://mswjs.io/) integration layer for usage with [`@web/dev-server`](https://modern-web.dev/docs/dev-server/overview/), [`@web/test-runner`](https://modern-web.dev/docs/test-runner/overview/) and [`@web/dev-server-storybook`](https://modern-web.dev/docs/dev-server/plugins/storybook/#mainjs-and-previewjs). + +## Defining mocks + +`feature-a/demo/mocks.js`: + +```js +import { http } from '@web/storybook-addon-mocks/http.js'; +import mocksFromAnotherFeature from 'another-feature/demo/mocks.js'; + +/** + * Define mock scenarios + */ +export default { + /** + * Return an object from the handler + */ + default: [http.get('/api/foo', context => Response.json({ foo: 'bar' }))], + /** + * Return native `Response` object from the handler + */ + error: [http.get('/api/foo', context => new Response('', { status: 400 }))], + /** + * Handle additional custom logic in the handler, based on url, searchparams, whatever + */ + custom: [ + /** + * Customize based on searchParams + */ + http.get('/api/users', ({ request }) => { + const searchParams = new URL(request.url).searchParams; + + if (searchParams.get('user') === '123') { + return Response.json({ id: '123', name: 'frank' }); + } + + return Response.json({ id: '456', name: 'bob' }); + }), + + /** + * Customize based on params + */ + http.get('/api/users/:id', ({ params }) => { + if (params.id === '123') { + return new Response('', { status: 400 }); + } + + return Response.json({ id: '456', name: 'bob' }); + }), + + /** + * Customize based on cookies + */ + http.get('/api/abtest', ({ cookies }) => { + return Response.json({ abtest: cookies.segment === 'business' }); + }), + ], + /** + * Provide an async fn, a fn returning an object, a fn returning a Response, or just an object + */ + returnValues: [ + http.get('/api/foo', async context => Response.json({ foo: 'bar' })), + http.get( + '/api/foo', + async context => new Response(JSON.stringify({ foo: 'bar' }), { status: 200 }), + ), + http.get('/api/foo', context => Response.json({ foo: 'bar' })), + http.get('/api/foo', context => new Response(JSON.stringify({ foo: 'bar' }), { status: 200 })), + ], + importedMocks: [ + mocksFromAnotherFeature.default, + http.get('/api/foo', () => Response.json({ foo: 'bar' })), + ], +}; +``` + +### Context + +The `context` object that gets passed to the handler includes: + +```js +http.get('/api/foo', ({ request, cookies, params }) => { + return Response.json({ foo: 'bar' }); +}); +``` + +- `request` the native `Request` object +- `cookies` an object based on the request cookies +- `params` an object based on the request params + +## `@web/dev-server`/`@web/dev-server-storybook`/`@web/storybook-builder` + +`feature-a/web-dev-server.config.mjs`: + +```diff ++// for Storybook 7+ (@web/storybook-builder) ++// no need to do anything here ++// this file is not even needed for "@web/storybook-builder" + +import { storybookPlugin } from '@web/dev-server-storybook'; + ++// for Storybook 6 (@web/dev-server-storybook) ++import { mockPlugin } from '@web/storybook-addon-mocks/plugins.js'; + +export default { + nodeResolve: true, + plugins: [ ++ // for Storybook 6 (@web/dev-server-storybook) ++ mockPlugin(), + storybookPlugin({ type: 'web-components' }) + ], +}; +``` + +You can also add the `mockRollupPlugin` to your `.storybook/main.cjs` config for when you're bundling your Storybook to deploy somewhere; your mocks will be deployed along with your Storybook, and will work in whatever environment you deploy them to. + +`feature-a/.storybook/main.cjs`: + +```diff +module.exports = { + stories: ['../stories/**/*.stories.{js,md,mdx}'], ++ // for Storybook 7+ (@web/storybook-builder) ++ // no need to do anything here + ++ // for Storybook 6 (@web/dev-server-storybook) ++ rollupConfig: async config => { ++ const { mockRollupPlugin } = await import('@web/storybook-addon-mocks/plugins.js'); ++ config.plugins.push(mockRollupPlugin()); ++ return config; ++ }, +}; +``` + +
+ + mockRollupPlugin configuration options + +The rollup plugin also takes an optional interceptor, which can be useful to handle things like rewriting api. prefixes made in requests, for example: + +```js +mockRollupPlugin({ + interceptor: ` + const domain = window.location.hostname; + const apiDomain = "api." + domain; + + const { fetch: originalFetch } = window; + + async function fetch(request) { + request = new Request(request); + + const resolvedURL = new URL(request.url, window.location); + if (resolvedURL.hostname === apiDomain) { + // rewrite hostname without api. + resolvedURL.hostname = domain; + + const init = {}; + for (const property in request) { + init[property] = request[property]; + } + + request = new Request(resolvedURL.href, init); + if (request.body != null) { + request = new Request(request, { body: await request.arrayBuffer() }); + } + } + return originalFetch(request); + } + + window.fetch = fetch; + `, +}); +``` + +This can be used to avoid CORS issues when deploying your Storybooks. + +In the Storybook 7+ (@web/storybook-builder) you can achieve the same by using native Storybook API [previewHead](https://storybook.js.org/docs/api/main-config/main-config-preview-head): + +```js +// .storybook/main.js +/** @type { import('@web/storybook-framework-web-components').StorybookConfig } */ +const config = { + framework: { + name: '@web/storybook-framework-web-components', + }, + // ... + previewHead(head) { + return ` + ${process.env.NODE_ENV === 'production' ? `` : ''} + ${head} + `; + }, +}; +export default config; +``` + +
+
+ +And add the addon: +`feature-a/.storybook/main.cjs`: + +```diff +module.exports = { + stories: ['../stories/**/*.stories.{js,md,mdx}'], ++ // for Storybook 9 (@web/storybook-builder) ++ addons: ['@web/storybook-addon-mocks/storybook-addon'], + +- // for Storybook 7 or 8 (@web/dev-server-storybook) +- addons: ['@web/mocks/storybook/addon.js'], + rollupConfig: async config => { ++ const { mockRollupPlugin } = await import('@web/storybook-addon-mocks/plugins.js'); + +- const { mockRollupPlugin } = await import('@web/mocks/plugins.js'); + config.plugins.push(mockRollupPlugin()); + return config; + }, +}; +``` + +`feature-a/stories/default.stories.js`: + +```js +import { html } from 'lit'; +import { http } from '@web/storybook-addon-mocks/http.js'; +import mocks from '../demo/mocks.js'; + +export const Default = () => html``; +Default.story = { + parameters: { + mocks: mocks.default, + // or + mocks: [ + mocks.default, + otherMocks.error, + http.get('/api/bar', () => Response.json({ bar: 'bar' })), + http.post('/api/baz', () => new Response('', { status: 400 })), + ], + // or + mocks: [ + http.get('/api/users/:id', ({ params }) => { + if (params.id === '123') { + return Response.json({ name: 'frank' }); + } + return Response.json({ name: 'bob' }); + }), + ], + }, +}; +``` + +## `@web/test-runner` + +The `registerMockRoutes` function will ensure the service worker is installed, and the `mockPlugin` takes care of resolving the service worker file, so users don't have to keep this one-time generated service worker file in their own project roots. + +`feature-a/web-test-runner.config.mjs`: + +```js +import { mockPlugin } from '@web/storybook-addon-mocks/plugins.js'; + +export default { + nodeResolve: true, + files: ['test/**/*.test.js'], + plugins: [mockPlugin()], +}; +``` + +`feature-a/test/my-test.test.js`: + +```js +import { registerMockRoutes } from '@web/storybook-addon-mocks/browser.js'; +import { http } from '@web/storybook-addon-mocks/http.js'; +import mocks from '../demo/mocks.js'; +import featureBmocks from 'feature-b/demo/mocks.js'; + +describe('feature-a', () => { + it('works', async () => { + registerMockRoutes(http.get('/api/foo', () => Response.json({ foo: 'foo' }))); + + const response = await fetch('/api/foo').then(r => r.json()); + expect(response.foo).to.equal('foo'); + }); + + it('works', () => { + registerMockRoutes( + // Current project's mocks + mocks.default, // is an array, arrays get flattened in the integration layer + + // Third party project's mocks, that uses a different version of MSW internally + featureBmocks.default, + + // Additional mocks + http.get('/api/baz', context => Response.json({ baz: 'baz' })), + ); + }); +}); +``` + +## Mocking requests in node.js + +You can also mock requests in node.js: + +```js +import { registerMockRoutes } from '@web/storybook-addon-mocks/node.js'; +import { http } from '@web/storybook-addon-mocks/http.js'; + +registerMockRoutes( + http.get('/api/foo', () => new Response(JSON.stringify({ foo: 'bar' }), { status: 200 })), +); + +const r = await fetch('/api/foo').then(r => r.json()); +console.assert(r.foo === 'bar'); +``` + +## Rationale + +### Why not use MSW directly? + +Large applications may have many features, that themself may depend on other features internally. Consider the following example: + +`feature-a` uses `feature-b` internally. `feature-a` wants to reuse the mocks of `feature-b`, but the versions of msw are different. + +- `feature-a` uses `msw@1.0.0` +- `feature-b` uses `msw@2.0.0` + +```js +import mocks from '../demo/mocks.js'; +import featureBmocks from 'feature-b/demo/mocks.js'; + +const Default = () => html``; // uses `feature-b` internally +Default.story = { + parameters: { + mocks: [ + mocks.default, // uses MSW@1.0.0 + featureBmocks.default, // ❌ uses MSW@2.0.0, incompatible mocks -> MSW@2.0.0 may expect a different service worker, or different API! + ], + }, +}; +``` + +`msw@2.0.0` may have a different API or it's service worker may expect a different message, event, or data format. In order to ensure forward compatibility, we expose a "middleman" function: + +```js +import { http } from '@web/storybook-addon-mocks/http.js'; + +http.get('/api/foo', () => Response.json({ foo: 'bar' })); +``` + +The middleware function simply returns an object that looks like: + +```js +{ + method: 'get', + endpoint: '/api/foo', + handler: () => Response.json({foo: 'bar'}) +} +``` + +This way we can support multiple versions of `msw` inside of our integration layer by acting as a bridge of sorts; the function people define mocks with doesn't directly depend on `msw` itself, it just creates an object with the information we need to pass on to msw. + +That way, `feature-a`'s project controls the dependency on `msw` (via the msw integration layer package), while still being able to use mocks from other projects that may use a different version of `msw` themself internally. + +In the wrapper, we standardize on native `Request` and `Response` objects; the handler function receives a `Request` object, and returns a `Response` object. For utility, we also pass `cookies` and `params`, since those are often used to conditionally return mocks. This means that the wrapper function only depends on standard, browser-native JS, and itself has no other dependencies, which is a good foundation to ensure forward compatibility. + +### Requests/Responses + +The `Request` and `Response` objects used are standard JS `Request` and `Response` objects. You can read more about them on MDN. diff --git a/packages/storybook-addon-mocks/browser.js b/packages/storybook-addon-mocks/browser.js new file mode 100644 index 0000000000..4aecd043c7 --- /dev/null +++ b/packages/storybook-addon-mocks/browser.js @@ -0,0 +1,47 @@ +import './polyfills.js'; +import { swPath } from '#sw-path'; +import { setupWorker } from 'msw/browser'; +import { _registerMockRoutes } from './registerMockRoutes.js'; + +const bypassServiceWorker = new URL(window.location.href).searchParams.has('bypass-sw'); +const worker = setupWorker(); +const workerPromise = worker + .start({ + serviceWorker: { + url: swPath, + }, + quiet: true, + // See https://github.com/mswjs/msw/discussions/1231#discussioncomment-2729999 if you'd like to warn if there's a unhandled request + onUnhandledRequest() { + return undefined; + }, + }) + .catch(() => { + console.error(`[MOCKS]: Failed to load Service Worker. + +Did you forget to use the mockPlugin in the dev server?`); + return Promise.resolve(); + }); + +/** + * It's unfortunate to override native `fetch`, and you should never do it, and please don't take this + * code as an example. We have to do this here because MSW removed this behavior which was released as + * a breaking change in a minor version https://github.com/mswjs/msw/issues/1981 + */ +const originalFetch = window.fetch; +window.fetch = async (...args) => { + await workerPromise; + window.fetch = originalFetch; + return window.fetch(...args); +}; + +/** + * Mock the given mocked routes using a Service Worker. + * + * @param {import('./types.js').Mock[]} mocks + */ +function registerMockRoutes(...mocks) { + _registerMockRoutes(worker, bypassServiceWorker, ...mocks); +} + +export { worker, registerMockRoutes }; diff --git a/packages/storybook-addon-mocks/http.js b/packages/storybook-addon-mocks/http.js new file mode 100644 index 0000000000..25e5315039 --- /dev/null +++ b/packages/storybook-addon-mocks/http.js @@ -0,0 +1,65 @@ +const VERSION = Symbol.for('msw-integration-layer::version'); + +/** + * This wrapper was made to be forward/backward compatible with potential future versions + * of the underlying mocking library. It's api should not change, it should not have dependencies, + * and it's import should be pure and non-sideeffectful. + */ +export const http = { + /** + * @param {string} endpoint + * @param {import('./types.js').handler} handler + * @returns {import('./types.js').Mock} + */ + get: (endpoint, handler) => { + return { [VERSION]: '1.x.x', method: 'get', endpoint, handler }; + }, + /** + * @param {string} endpoint + * @param {import('./types.js').handler} handler + * @returns {import('./types.js').Mock} + */ + post: (endpoint, handler) => { + return { [VERSION]: '1.x.x', method: 'post', endpoint, handler }; + }, + /** + * @param {string} endpoint + * @param {import('./types.js').handler} handler + * @returns {import('./types.js').Mock} + */ + put: (endpoint, handler) => { + return { [VERSION]: '1.x.x', method: 'put', endpoint, handler }; + }, + /** + * @param {string} endpoint + * @param {import('./types.js').handler} handler + * @returns {import('./types.js').Mock} + */ + patch: (endpoint, handler) => { + return { [VERSION]: '1.x.x', method: 'patch', endpoint, handler }; + }, + /** + * @param {string} endpoint + * @param {import('./types.js').handler} handler + * @returns {import('./types.js').Mock} + */ + delete: (endpoint, handler) => { + return { [VERSION]: '1.x.x', method: 'delete', endpoint, handler }; + }, + /** + * @param {string} endpoint + * @param {import('./types.js').handler} handler + * @returns {import('./types.js').Mock} + */ + options: (endpoint, handler) => { + return { [VERSION]: '1.x.x', method: 'options', endpoint, handler }; + }, + /** + * @param {string} endpoint + * @param {import('./types.js').handler} handler + * @returns {import('./types.js').Mock} + */ + head: (endpoint, handler) => { + return { [VERSION]: '1.x.x', method: 'head', endpoint, handler }; + }, +}; diff --git a/packages/storybook-addon-mocks/node.js b/packages/storybook-addon-mocks/node.js new file mode 100644 index 0000000000..967821b086 --- /dev/null +++ b/packages/storybook-addon-mocks/node.js @@ -0,0 +1,14 @@ +import { setupServer } from 'msw/node'; +import { _registerMockRoutes } from './registerMockRoutes.js'; + +export const server = setupServer(); +server.listen(); + +/** + * Mock the given mocked routes using a Service Worker. + * + * @param {import('./types.js').Mock[]} mocks + */ +export function registerMockRoutes(...mocks) { + _registerMockRoutes(server, false, ...mocks); +} diff --git a/packages/storybook-addon-mocks/package.json b/packages/storybook-addon-mocks/package.json new file mode 100644 index 0000000000..6cb8a33439 --- /dev/null +++ b/packages/storybook-addon-mocks/package.json @@ -0,0 +1,96 @@ +{ + "name": "@web/storybook-addon-mocks", + "version": "0.0.0", + "publishConfig": { + "access": "public" + }, + "description": "MSW integration for @web tooling", + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/modernweb-dev/web.git", + "directory": "packages/storybook-addon-mocks" + }, + "author": "modern-web", + "homepage": "https://github.com/modernweb-dev/web/tree/master/packages/storybook-addon-mocks", + "type": "module", + "exports": { + "./http.js": { + "types": "./dist-types/http.d.ts", + "default": "./http.js" + }, + "./browser.js": { + "types": "./dist-types/browser.d.ts", + "default": "./browser.js" + }, + "./storybook-addon/manager": "./storybook-addon/manager.js", + "./storybook-addon/preset": "./storybook-addon/preset.js", + "./storybook-addon/preview": "./storybook-addon/preview.js", + "./storybook/addon/decorator.js": { + "types": "./dist-types/storybook/addon/decorator.d.ts", + "default": "./storybook/addon/decorator.js" + }, + "./storybook/addon/manager.js": "./storybook/addon/manager.js", + "./storybook/decorator.js": { + "types": "./dist-types/storybook/decorator.d.ts", + "default": "./storybook/decorator.js" + }, + "./storybook/addon.js": "./storybook/addon.js", + "./plugins.js": { + "types": "./dist-types/plugins.d.ts", + "default": "./plugins.js" + }, + "./node.js": { + "types": "./dist-types/node.d.ts", + "default": "./node.js" + }, + "./types.js": { + "types": "./dist-types/types.d.ts", + "default": "./types.js" + } + }, + "scripts": { + "start": "storybook dev -c ./demo/wc/.storybook", + "test:browser": "node ../test-runner/dist/bin.js test-browser/*.test.js --config test-browser/web-test-runner.config.js", + "types": "wireit" + }, + "files": [ + "**/*.js", + "dist-types", + "README.md" + ], + "keywords": [ + "mocks", + "msw" + ], + "dependencies": { + "@web/storybook-utils": "^1.1.1", + "lit": "^2.7.5 || ^3.0.0", + "msw": "2.4.1", + "storybook": "^9.1.19" + }, + "devDependencies": { + "@web/storybook-builder": "^0.2.2", + "@web/storybook-framework-web-components": "^0.2.1" + }, + "imports": { + "#sw-path": { + "development": "./sw-path/dev.js", + "default": "./sw-path/build.js" + } + }, + "wireit": { + "types": { + "command": "tsc --build --pretty", + "files": [ + "**/*.js", + "**/*.ts", + "tsconfig.json" + ], + "output": [ + "dist-types/**" + ], + "dependencies": [] + } + } +} diff --git a/packages/storybook-addon-mocks/plugins.js b/packages/storybook-addon-mocks/plugins.js new file mode 100644 index 0000000000..83f1c381d7 --- /dev/null +++ b/packages/storybook-addon-mocks/plugins.js @@ -0,0 +1,2 @@ +export { mockRollupPlugin } from './rollup-plugin.js'; +export { mockPlugin } from './wds-plugin.js'; diff --git a/packages/storybook-addon-mocks/polyfills.js b/packages/storybook-addon-mocks/polyfills.js new file mode 100644 index 0000000000..cfd82c4c21 --- /dev/null +++ b/packages/storybook-addon-mocks/polyfills.js @@ -0,0 +1,19 @@ +// @ts-nocheck + +if (!('json' in Response)) { + Response.json = function (data, options = {}) { + const headers = new Headers(); + headers.set('Content-Type', 'application/json'); + + if (options.headers) { + Object.entries(options.headers).forEach(([key, value]) => { + headers.set(key, value); + }); + } + + return new Response(JSON.stringify(data), { + ...options, + headers, + }); + }; +} diff --git a/packages/storybook-addon-mocks/registerMockRoutes.js b/packages/storybook-addon-mocks/registerMockRoutes.js new file mode 100644 index 0000000000..2070213aaa --- /dev/null +++ b/packages/storybook-addon-mocks/registerMockRoutes.js @@ -0,0 +1,51 @@ +import { http } from 'msw/core/http'; + +const SUPPORTED_METHODS = ['get', 'post', 'put', 'patch', 'delete', 'options', 'head']; + +/** + * Mock the given mocked routes using a Service Worker. + * + * @param {import('msw/node').SetupServer | import('msw/browser').SetupWorker} system The Service Worker or Server Instance + * @param {boolean} bypassServiceWorker + * @param {import('./types.js').Mock[]} mocks + */ +export function _registerMockRoutes(system, bypassServiceWorker = false, ...mocks) { + system.resetHandlers(); + + const handlers = []; + + for (let { method, endpoint, handler } of mocks.flat(Infinity)) { + if (!SUPPORTED_METHODS.includes(method.toLowerCase())) { + throw new Error(`Unsupported method ${method}`); + } + + if (!handler) { + throw new Error(`Missing handler for method: "${method}", endpoint: "${endpoint}". +This likely means there is something wrong with how you're using \`http.get(endpoint, handler)\`. Make sure the \`handler\` exists and is a function.`); + } + + /** + * If the `endpoint` starts with a "/", we append a "*" in front of it because + * some api calls may have an optional prefix, for example: "https://api.localhost:8000/api/foo" + * + * Adding the "*" will match api calls made with a prefix, and api calls made without a prefix, + * without the need to overwrite the native fetch function. + */ + if (endpoint.startsWith('/')) { + endpoint = '*' + endpoint; + } + + handlers.push( + // @ts-ignore + http[method](endpoint, async ({ cookies, params, request }) => { + // @ts-ignore + const response = await handler({ request, cookies, params }); + return response; + }), + ); + } + + if (!bypassServiceWorker) { + system.use(...handlers); + } +} diff --git a/packages/storybook-addon-mocks/rollup-plugin.js b/packages/storybook-addon-mocks/rollup-plugin.js new file mode 100644 index 0000000000..e69c58348e --- /dev/null +++ b/packages/storybook-addon-mocks/rollup-plugin.js @@ -0,0 +1,35 @@ +// @ts-nocheck + +import fs from 'node:fs'; +import { createRequire } from 'node:module'; +import path from 'node:path'; + +const require = createRequire(import.meta.url); + +export function mockRollupPlugin( + { interceptor } = { + interceptor: '', + }, +) { + return { + name: 'rollup-plugin-msw', + writeBundle(opts) { + const serviceWorkerPath = require.resolve('msw/mockServiceWorker.js'); + const sw = fs.readFileSync(serviceWorkerPath, 'utf8'); + const outPath = path.join(opts.dir, '__msw_sw__.js'); + fs.writeFileSync(outPath, sw); + }, + buildStart(options) { + if (interceptor) { + const htmlPlugin = options.plugins.find(p => p.name === '@web/rollup-plugin-html'); + + htmlPlugin.api.addHtmlTransformer(html => { + return html.replace( + '', + ``, + ); + }); + } + }, + }; +} diff --git a/packages/storybook-addon-mocks/storybook-addon/manager.js b/packages/storybook-addon-mocks/storybook-addon/manager.js new file mode 100644 index 0000000000..1aa2d862d2 --- /dev/null +++ b/packages/storybook-addon-mocks/storybook-addon/manager.js @@ -0,0 +1 @@ +import '../storybook/addon/manager.js'; diff --git a/packages/storybook-addon-mocks/storybook-addon/preset.js b/packages/storybook-addon-mocks/storybook-addon/preset.js new file mode 100644 index 0000000000..dd02407889 --- /dev/null +++ b/packages/storybook-addon-mocks/storybook-addon/preset.js @@ -0,0 +1,19 @@ +/** + * @param {import('@web/dev-server').DevServerConfig} config + */ +export async function wdsFinal(config) { + const { mockPlugin } = await import('@web/storybook-addon-mocks/plugins.js'); + // @ts-expect-error + config.plugins.push(mockPlugin()); + return config; +} + +/** + * @param {import('rollup').RollupOptions} config + */ +export async function rollupFinal(config) { + const { mockRollupPlugin } = await import('@web/story-addon-mocks/plugins.js'); + // @ts-expect-error + config.plugins.push(mockRollupPlugin()); + return config; +} diff --git a/packages/storybook-addon-mocks/storybook-addon/preview.js b/packages/storybook-addon-mocks/storybook-addon/preview.js new file mode 100644 index 0000000000..8b46e507fe --- /dev/null +++ b/packages/storybook-addon-mocks/storybook-addon/preview.js @@ -0,0 +1,3 @@ +import { withMocks } from '../storybook/addon/decorator.js'; + +export const decorators = [withMocks]; diff --git a/packages/storybook-addon-mocks/storybook/addon/create-decorator.js b/packages/storybook-addon-mocks/storybook/addon/create-decorator.js new file mode 100644 index 0000000000..df6d61d5ad --- /dev/null +++ b/packages/storybook-addon-mocks/storybook/addon/create-decorator.js @@ -0,0 +1,68 @@ +// @ts-nocheck + +import { registerMockRoutes } from '../../browser.js'; + +export function createDecorator(addons, makeDecorator) { + addons.getChannel().on('mocks:edited', data => { + const url = new URL(window.location); + const mocks = encodeURIComponent(JSON.stringify(data)); + url.searchParams.set('mocks', mocks); + window.location.href = url.href; + }); + + return makeDecorator({ + name: 'withMocks', + parameterName: 'mocks', + wrapper: (getStory, context) => { + const mocks = context.parameters?.mocks ?? context.story?.parameters?.mocks ?? []; + + const editedMocks = getEditedMocks() ?? []; + + if (Array.isArray(mocks)) { + const finalizedMocks = mocks.map(mock => { + const editedMock = editedMocks.find( + edited => edited.method === mock.method && edited.endpoint === mock.endpoint, + ); + + return editedMock + ? { + ...editedMock, + handler: () => + new Response(JSON.stringify(editedMock.data), { + headers: { + 'Content-Type': 'application/json', + }, + status: editedMock.status, + }), + } + : mock; + }); + + if (finalizedMocks) { + addons.getChannel().emit('mocks:loaded', finalizedMocks.flat(Infinity)); + registerMockRoutes(finalizedMocks); + } + } + + return getStory(context); + }, + }); +} + +function getEditedMocks() { + const url = new URL(window.location); + + if (!url.searchParams.has('mocks')) { + return null; + } + + const param = url.searchParams.get('mocks'); + url.searchParams.delete('mocks'); + window.history.replaceState(null, '', `${url.search}`); + + try { + return JSON.parse(decodeURIComponent(param)); + } catch (error) { + throw new Error(`Cannot parse mocks: ${error.message}`); + } +} diff --git a/packages/storybook-addon-mocks/storybook/addon/decorator.js b/packages/storybook-addon-mocks/storybook/addon/decorator.js new file mode 100644 index 0000000000..bfa69d03c0 --- /dev/null +++ b/packages/storybook-addon-mocks/storybook/addon/decorator.js @@ -0,0 +1,10 @@ +// @ts-nocheck + +import { addons, makeDecorator } from 'storybook/preview-api'; +import { createDecorator } from './create-decorator.js'; + +// Storybook 7+ +/** + * @type {ReturnType} + */ +export const withMocks = createDecorator(addons, makeDecorator); diff --git a/packages/storybook-addon-mocks/storybook/addon/manager.js b/packages/storybook-addon-mocks/storybook/addon/manager.js new file mode 100644 index 0000000000..a5ba18b19d --- /dev/null +++ b/packages/storybook-addon-mocks/storybook/addon/manager.js @@ -0,0 +1,9 @@ +// @ts-nocheck + +import { createAddon } from '@web/storybook-utils'; +import React from 'react'; +import { addons, types } from 'storybook/manager-api'; +import { registerAddon } from './register-addon.js'; + +// Storybook 7+ +registerAddon(addons, types, React, createAddon); diff --git a/packages/storybook-addon-mocks/storybook/addon/register-addon.js b/packages/storybook-addon-mocks/storybook/addon/register-addon.js new file mode 100644 index 0000000000..4d74cb23d7 --- /dev/null +++ b/packages/storybook-addon-mocks/storybook/addon/register-addon.js @@ -0,0 +1,252 @@ +// @ts-nocheck + +import { LitElement, html, css } from 'lit'; +import { when } from 'lit/directives/when.js'; + +export function registerAddon(addons, types, React, createAddon) { + const { createElement } = React; + + class MocksAddonElement extends LitElement { + static properties = { + state: { type: String }, + mocks: { type: Array }, + editing: { type: Boolean }, + hasEditedMocks: { type: Boolean }, + copied: { type: Boolean }, + }; + + static styles = css` + table { + width: 100%; + margin-bottom: 10px; + border-collapse: collapse; + } + + tr { + border-bottom: 1px solid hsla(203, 50%, 30%, 0.2); + } + + thead { + background-color: hsla(203, 50%, 30%, 0.1); + } + + tr th:first-child { + width: 9ch; + } + + tr th:nth-child(2) { + width: 9ch; + } + + thead th { + padding: 10px; + text-align: left; + } + + tbody td { + padding: 10px; + } + + .message { + padding: 30px; + text-align: center; + font-weight: bold; + } + `; + + constructor() { + super(); + this.editing = false; + this.mocks = []; + this.state = 'PENDING'; + + this.addEventListener('mocks:loaded', e => { + this.state = 'SUCCESS'; + this.mocks = e.detail; + this.hasEditedMocks = this.mocks.some(m => m.changed); + }); + + this.addEventListener('storyChanged', () => { + this.editing = false; + this.state = 'PENDING'; + }); + } + + render() { + if (this.state === 'PENDING') { + return html`
Loading...
`; + } + + if (!this.mocks.length) { + return html`
No mocks configured.
`; + } + + return html` +
+
+ + + + + + + ${when( + this.editing, + () => html` + + + `, + )} + + + + + ${this.mocks.map( + ({ method, endpoint, changed, data, status }, i) => html` + + + ${when( + this.editing, + () => html` + + + + + `, + () => html` + + + `, + )} + + `, + )} + +
OverrideMethodEndpointResponseStatus
${changed ? '✅' : ''} + ${method} + + ${endpoint} + + + + + ${method}${endpoint}
+ + ${when(this.editing, () => html``)} + + + + ${when( + !this.editing && this.hasEditedMocks, + () => html``, + )} + +

+ ${when( + 'clipboard' in navigator && this.hasEditedMocks, + () => html` + + + ${when(this.copied, () => html`
Copied to clipboard.
`)} + `, + )} +
+
+ `; + } + + reset() { + const url = new URL(window.location); + url.searchParams.delete('mocks'); + window.location.href = url.href; + } + + copy() { + this.copied = true; + const url = new URL(window.location); + const editedMocks = this.mocks.filter(m => m.changed); + const encodedMocks = encodeURIComponent(JSON.stringify(editedMocks)); + url.searchParams.set('mocks', encodedMocks); + navigator.clipboard.writeText(url.toString()); + setTimeout(() => { + this.copied = false; + }, 3000); + } + + submit(event) { + event.preventDefault(); + this.editing = false; + + const formElems = Array.from(event.target.elements); + + // Iterate over each form row, checking if the form values are different from the initial values + this.mocks = this.mocks.map((mock, index) => { + const response = formElems.find(elem => elem.name === `response-${index}`).value; + const status = formElems.find(elem => elem.name === `status-${index}`).valueAsNumber; + + if (response) { + let responseObj; + try { + responseObj = JSON.parse(response); + } catch { + throw new Error(`Invalid JSON provided for api call: ${mock.method} ${mock.endpoint}.`); + } + + mock.changed = true; + mock.data = responseObj; + + if (status) { + mock.status = status; + } else { + mock.status = 200; + } + } + + if (status) { + if (status < 400 && !response) { + throw new Error( + `No response was provided for api call: ${mock.method} ${mock.endpoint}.`, + ); + } + + mock.changed = true; + mock.status = status; + } + + return mock; + }); + + const changedMocks = this.mocks.filter(mock => mock.changed); + if (changedMocks) { + this.hasEditedMocks = true; + addons.getChannel().emit('mocks:edited', changedMocks); + } + } + } + + customElements.define('mocks-addon', MocksAddonElement); + + const MocksAddon = createAddon('mocks-addon', { + events: ['mocks:loaded', 'mocks:edited'], + }); + + addons.register('web/mocks', api => { + addons.add('web/mocks/panel', { + type: types.PANEL, + title: 'Mocks', + paramKey: 'mocks', + render: ({ active }) => createElement(MocksAddon, { api, active }), + }); + }); +} diff --git a/packages/storybook-addon-mocks/sw-path/build.js b/packages/storybook-addon-mocks/sw-path/build.js new file mode 100644 index 0000000000..09dc1e0a37 --- /dev/null +++ b/packages/storybook-addon-mocks/sw-path/build.js @@ -0,0 +1 @@ +export const swPath = '__msw_sw__.js'; diff --git a/packages/storybook-addon-mocks/sw-path/dev.js b/packages/storybook-addon-mocks/sw-path/dev.js new file mode 100644 index 0000000000..4a94bb8fdc --- /dev/null +++ b/packages/storybook-addon-mocks/sw-path/dev.js @@ -0,0 +1 @@ +export const swPath = '/__msw_sw__.js'; diff --git a/packages/storybook-addon-mocks/test-browser/mocks.test.js b/packages/storybook-addon-mocks/test-browser/mocks.test.js new file mode 100644 index 0000000000..9d3dcf4d69 --- /dev/null +++ b/packages/storybook-addon-mocks/test-browser/mocks.test.js @@ -0,0 +1,15 @@ +import { http } from '../http.js'; +import { expect } from '@esm-bundle/chai'; +import { registerMockRoutes } from '../browser.js'; + +it('mocks a request', async () => { + registerMockRoutes(http.get('/api/foo', () => Response.json({ foo: 'foo' }))); + const { foo } = await fetch('/api/foo').then(r => r.json()); + expect(foo).to.equal('foo'); +}); + +it('overrides a previous handler', async () => { + registerMockRoutes(http.get('/api/foo', () => Response.json({ foo: 'bar' }))); + const { foo } = await fetch('/api/foo').then(r => r.json()); + expect(foo).to.equal('bar'); +}); diff --git a/packages/storybook-addon-mocks/test-browser/web-test-runner.config.js b/packages/storybook-addon-mocks/test-browser/web-test-runner.config.js new file mode 100644 index 0000000000..cde3780822 --- /dev/null +++ b/packages/storybook-addon-mocks/test-browser/web-test-runner.config.js @@ -0,0 +1,6 @@ +import { mockPlugin } from '../wds-plugin.js'; + +export default { + nodeResolve: true, + plugins: [mockPlugin()], +}; diff --git a/packages/storybook-addon-mocks/tsconfig.json b/packages/storybook-addon-mocks/tsconfig.json new file mode 100644 index 0000000000..b2c630b638 --- /dev/null +++ b/packages/storybook-addon-mocks/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.new.json", + "compilerOptions": { + "outDir": "./dist-types", + "rootDir": "." + }, + "include": ["**/*.js", "**/*.ts"], + "exclude": ["dist-types", "test-browser"] +} diff --git a/packages/storybook-addon-mocks/types.ts b/packages/storybook-addon-mocks/types.ts new file mode 100644 index 0000000000..4135c65391 --- /dev/null +++ b/packages/storybook-addon-mocks/types.ts @@ -0,0 +1,16 @@ +export interface Mock { + method: string; + endpoint: string; + handler: handler; + [key: symbol]: string; +} + +export type handler = ({ + request, + cookies, + params, +}: { + request: Request; + cookies: Record; + params: Record; +}) => Response | Promise; diff --git a/packages/storybook-addon-mocks/wc/.storybook/main.js b/packages/storybook-addon-mocks/wc/.storybook/main.js new file mode 100644 index 0000000000..04c80fae25 --- /dev/null +++ b/packages/storybook-addon-mocks/wc/.storybook/main.js @@ -0,0 +1,9 @@ +/** @type { import('../../../../index.d.ts').StorybookConfig } */ +const config = { + stories: ['../stories/**/*.stories.js'], + addons: ['@web/storybook-addons-mocks/storybook-addon'], + framework: { + name: '@web/storybook-framework-web-components', + }, +}; +export default config; diff --git a/packages/storybook-addon-mocks/wc/src/MyElement.js b/packages/storybook-addon-mocks/wc/src/MyElement.js new file mode 100644 index 0000000000..bbe537e18a --- /dev/null +++ b/packages/storybook-addon-mocks/wc/src/MyElement.js @@ -0,0 +1,38 @@ +// @ts-nocheck + +import { LitElement, html } from 'lit'; + +export class MyElement extends LitElement { + static properties = { + transactions: { type: Array }, + state: { type: String }, + }; + + async connectedCallback() { + super.connectedCallback(); + this.state = 'PENDING'; + try { + this.transactions = await fetch('/api/transactions') + .then(r => r.json()) + .then(({ transactions }) => transactions); + this.state = 'SUCCESS'; + } catch { + this.state = 'ERROR'; + } + } + + render() { + switch (this.state) { + case 'PENDING': + return html`

Loading...

`; + case 'ERROR': + return html`

Something went wrong

`; + case 'SUCCESS': + return html` +
    + ${this.transactions.map(t => html`
  • ${t}
  • `)} +
+ `; + } + } +} diff --git a/packages/storybook-addon-mocks/wc/stories/my-element.stories.js b/packages/storybook-addon-mocks/wc/stories/my-element.stories.js new file mode 100644 index 0000000000..ef8c20698b --- /dev/null +++ b/packages/storybook-addon-mocks/wc/stories/my-element.stories.js @@ -0,0 +1,32 @@ +// @ts-nocheck + +import { html } from 'lit'; +import { http } from '../../../http.js'; +import { MyElement } from '../src/MyElement.js'; + +customElements.define('my-element', MyElement); + +export default { + title: 'My element', + render: () => html``, +}; + +export const Default = { + parameters: { + mocks: [ + http.get('/api/transactions', () => Response.json({ transactions: ['foo', 'bar'] })), + http.post('/api/transactions/create', () => Response.json({ ok: true })), + http.put('/api/transactions/update', () => Response.json({ ok: true })), + ], + }, +}; + +export const Second = { + parameters: { + mocks: [ + http.get('/api/transactions', () => Response.json({ transactions: ['foo 2', 'bar 2'] })), + http.post('/api/transactions/create', () => Response.json({ ok: true })), + http.put('/api/transactions/update', () => Response.json({ ok: true })), + ], + }, +}; diff --git a/packages/storybook-addon-mocks/wds-plugin.js b/packages/storybook-addon-mocks/wds-plugin.js new file mode 100644 index 0000000000..4e5fad893b --- /dev/null +++ b/packages/storybook-addon-mocks/wds-plugin.js @@ -0,0 +1,19 @@ +import { createRequire } from 'node:module'; +import { readFileSync } from 'node:fs'; + +const require = createRequire(import.meta.url); + +export function mockPlugin() { + return { + name: 'wds-plugin-msw', + /** + * @param {import('koa').Context} context + */ + serve(context) { + if (context.request.url === '/__msw_sw__.js') { + const serviceWorkerPath = require.resolve('msw/mockServiceWorker.js'); + return readFileSync(serviceWorkerPath, 'utf8'); + } + }, + }; +} diff --git a/packages/storybook-builder/package.json b/packages/storybook-builder/package.json index adc0a4de51..29e4c30256 100644 --- a/packages/storybook-builder/package.json +++ b/packages/storybook-builder/package.json @@ -51,9 +51,6 @@ "@rollup/plugin-node-resolve": "^15.1.0", "@rollup/plugin-replace": "^6.0.2", "@rollup/pluginutils": "^5.0.2", - "@storybook/core-common": "^8.6.12", - "@storybook/node-logger": "^8.6.12", - "@storybook/preview": "^8.6.12", "@web/config-loader": "^0.3.2", "@web/dev-server": "^0.4.0", "@web/dev-server-core": "^0.7.5", @@ -71,9 +68,7 @@ "rollup": "^4.4.1", "rollup-plugin-external-globals": "^0.9.0", "sirv": "^2.0.4", - "slash": "^5.1.0" - }, - "devDependencies": { - "@storybook/types": "^8.6.12" + "slash": "^5.1.0", + "storybook": "^9.1.19" } } diff --git a/packages/storybook-builder/src/generate-app-script.ts b/packages/storybook-builder/src/generate-app-script.ts index c88ec59f0a..65aeabcfc0 100644 --- a/packages/storybook-builder/src/generate-app-script.ts +++ b/packages/storybook-builder/src/generate-app-script.ts @@ -1,8 +1,8 @@ // based on https://github.com/storybookjs/storybook/blob/v8.5.0/code/builders/builder-vite/src/codegen-modern-iframe-script.ts import { normalizePath } from '@rollup/pluginutils'; -import { loadPreviewOrConfigFile } from '@storybook/core-common'; -import type { Options, PreviewAnnotation } from '@storybook/types'; +import { loadPreviewOrConfigFile } from 'storybook/internal/common'; +import type { Options, PreviewAnnotation } from 'storybook/internal/types'; import { virtualSetupAddonsFilename, virtualStoriesFilename } from './virtual-file-names.js'; export async function generateAppScript(options: Options) { @@ -14,6 +14,7 @@ export async function generateAppScript(options: Options) { [], options, ); + const previewAnnotationURLs = [...previewAnnotations, previewOrConfigFile] .filter((path): path is PreviewAnnotation => !!path) .map((path: PreviewAnnotation) => (typeof path === 'object' ? path.bare : path)); @@ -33,12 +34,12 @@ ${previewAnnotationURLs `.trim(); return ` -import { setup } from '@storybook/core/preview/runtime'; +import { setup } from 'storybook/internal/preview/runtime'; import '${virtualSetupAddonsFilename}'; setup(); -import { composeConfigs, PreviewWeb, ClientApi } from '@storybook/preview-api'; +import { composeConfigs, PreviewWeb, ClientApi } from 'storybook/preview-api'; import { importFn } from '${virtualStoriesFilename}'; ${getPreviewAnnotationsFunction} diff --git a/packages/storybook-builder/src/generate-iframe-html.ts b/packages/storybook-builder/src/generate-iframe-html.ts index 8f4e2235d3..bfc7355f07 100644 --- a/packages/storybook-builder/src/generate-iframe-html.ts +++ b/packages/storybook-builder/src/generate-iframe-html.ts @@ -1,7 +1,7 @@ // based on https://github.com/storybookjs/storybook/blob/v8.5.0/code/builders/builder-vite/src/transform-iframe-html.ts -import { normalizeStories } from '@storybook/core-common'; -import type { DocsOptions, Options, TagsOptions } from '@storybook/types'; +import { normalizeStories } from 'storybook/internal/common'; +import type { DocsOptions, Options, TagsOptions } from 'storybook/internal/types'; import { readFile } from 'node:fs/promises'; import { virtualAppFilename } from './virtual-file-names.js'; diff --git a/packages/storybook-builder/src/generate-setup-addons-script.ts b/packages/storybook-builder/src/generate-setup-addons-script.ts index 7315a09a71..b17cccac14 100644 --- a/packages/storybook-builder/src/generate-setup-addons-script.ts +++ b/packages/storybook-builder/src/generate-setup-addons-script.ts @@ -3,7 +3,7 @@ export async function generateSetupAddonsScript() { return ` import { createBrowserChannel } from 'storybook/internal/channels'; -import { addons } from 'storybook/internal/preview-api'; +import { addons } from 'storybook/preview-api'; const channel = createBrowserChannel({ page: 'preview' }); addons.setChannel(channel); diff --git a/packages/storybook-builder/src/generate-stories-script.ts b/packages/storybook-builder/src/generate-stories-script.ts index 2069dd2402..da95a9b574 100644 --- a/packages/storybook-builder/src/generate-stories-script.ts +++ b/packages/storybook-builder/src/generate-stories-script.ts @@ -1,7 +1,7 @@ // based on https://github.com/storybookjs/storybook/blob/v8.5.0/code/builders/builder-vite/src/codegen-importfn-script.ts import { normalizePath } from '@rollup/pluginutils'; -import type { Options } from '@storybook/types'; +import type { Options } from 'storybook/internal/types'; import { relative } from 'node:path'; import { listStories } from './list-stories'; diff --git a/packages/storybook-builder/src/index.ts b/packages/storybook-builder/src/index.ts index 410e66d6d8..491e39ea9b 100644 --- a/packages/storybook-builder/src/index.ts +++ b/packages/storybook-builder/src/index.ts @@ -1,11 +1,15 @@ import rollupPluginNodeResolve from '@rollup/plugin-node-resolve'; import rollupPluginReplace from '@rollup/plugin-replace'; -import { getBuilderOptions } from '@storybook/core-common'; -import { logger } from '@storybook/node-logger'; +import { getBuilderOptions } from 'storybook/internal/common'; +import { logger } from 'storybook/internal/node-logger'; // Import both globals and globalsNameReferenceMap to prevent retrocompatibility. // @ts-ignore -import { globals, globalsNameReferenceMap } from '@storybook/preview/globals'; -import type { Builder, Options, StorybookConfig as StorybookConfigBase } from '@storybook/types'; +import { globals, globalsNameReferenceMap } from 'storybook/internal/preview/globals'; +import type { + Builder, + Options, + StorybookConfig as StorybookConfigBase, +} from 'storybook/internal/types'; import { DevServerConfig, mergeConfigs, startDevServer } from '@web/dev-server'; import type { DevServer } from '@web/dev-server-core'; import { fromRollup } from '@web/dev-server-rollup'; @@ -61,7 +65,7 @@ export const bail: WdsBuilder['bail'] = async () => { }; export const start: WdsBuilder['start'] = async ({ startTime, options, router, server }) => { - const previewDirOrigin = join(getNodeModuleDir('@storybook/core'), 'dist', 'preview'); + const previewDirOrigin = join(getNodeModuleDir('storybook'), 'dist', 'preview'); router.use( '/sb-preview', sirv(previewDirOrigin, { @@ -206,7 +210,7 @@ export const build: WdsBuilder['build'] = async ({ startTime, options }) => { logger.trace({ message: '=> Preview built', time: process.hrtime(startTime) }); })(); - const previewDirOrigin = join(getNodeModuleDir('@storybook/core'), 'dist', 'preview'); + const previewDirOrigin = join(getNodeModuleDir('storybook'), 'dist', 'preview'); const previewDirTarget = join(options.outputDir || '', `sb-preview`); const previewFiles = cp(previewDirOrigin, previewDirTarget, { filter: src => { diff --git a/packages/storybook-builder/src/list-stories.ts b/packages/storybook-builder/src/list-stories.ts index cb8ac8ae75..f7efd1cb4a 100644 --- a/packages/storybook-builder/src/list-stories.ts +++ b/packages/storybook-builder/src/list-stories.ts @@ -1,7 +1,7 @@ // based on https://github.com/storybookjs/storybook/blob/v8.5.0/code/builders/builder-vite/src/list-stories.ts -import { normalizeStories } from '@storybook/core-common'; -import type { Options } from '@storybook/types'; +import { normalizeStories } from 'storybook/internal/common'; +import type { Options } from 'storybook/internal/types'; import { glob } from 'glob'; import { isAbsolute, join } from 'node:path'; diff --git a/packages/storybook-builder/src/rollup-plugin-mdx.ts b/packages/storybook-builder/src/rollup-plugin-mdx.ts index 1247097890..fad1570b67 100644 --- a/packages/storybook-builder/src/rollup-plugin-mdx.ts +++ b/packages/storybook-builder/src/rollup-plugin-mdx.ts @@ -1,4 +1,4 @@ -import type { Options } from '@storybook/types'; +import type { Options } from 'storybook/internal/types'; import { readFile } from 'node:fs/promises'; import { dirname, join, sep } from 'node:path'; import rehypeExternalLinks from 'rehype-external-links'; diff --git a/packages/storybook-builder/src/rollup-plugin-prebundle-modules.ts b/packages/storybook-builder/src/rollup-plugin-prebundle-modules.ts index ae2fb7cbdb..251d588ebc 100644 --- a/packages/storybook-builder/src/rollup-plugin-prebundle-modules.ts +++ b/packages/storybook-builder/src/rollup-plugin-prebundle-modules.ts @@ -1,4 +1,4 @@ -import type { Options } from '@storybook/types'; +import type { Options } from 'storybook/internal/types'; import { build } from 'esbuild'; import { readFile, rm } from 'node:fs/promises'; import { dirname, isAbsolute, join, normalize } from 'node:path'; diff --git a/packages/storybook-builder/src/rollup-plugin-storybook-builder.ts b/packages/storybook-builder/src/rollup-plugin-storybook-builder.ts index 05bf90dbf6..3c202c477c 100644 --- a/packages/storybook-builder/src/rollup-plugin-storybook-builder.ts +++ b/packages/storybook-builder/src/rollup-plugin-storybook-builder.ts @@ -1,4 +1,4 @@ -import type { Options } from '@storybook/types'; +import type { Options } from 'storybook/internal/types'; import type { Plugin } from 'rollup'; import { generateAppScript } from './generate-app-script.js'; import { generateSetupAddonsScript } from './generate-setup-addons-script.js'; diff --git a/packages/storybook-builder/src/stringify-process-envs.ts b/packages/storybook-builder/src/stringify-process-envs.ts index e93fe85a0c..8d30b8056d 100644 --- a/packages/storybook-builder/src/stringify-process-envs.ts +++ b/packages/storybook-builder/src/stringify-process-envs.ts @@ -1,4 +1,4 @@ -import { stringifyProcessEnvs as storybookStringifyProcessEnvs } from '@storybook/core-common'; +import { stringifyProcessEnvs as storybookStringifyProcessEnvs } from 'storybook/internal/common'; export function stringifyProcessEnvs(env: Record) { const result = storybookStringifyProcessEnvs(env); diff --git a/packages/storybook-framework-web-components/package.json b/packages/storybook-framework-web-components/package.json index 2250448522..7f7f54639c 100644 --- a/packages/storybook-framework-web-components/package.json +++ b/packages/storybook-framework-web-components/package.json @@ -56,20 +56,17 @@ "esm" ], "dependencies": { - "@storybook/web-components": "^8.6.12", + "@storybook/web-components": "^9.1.19", "@web/storybook-builder": "^0.2.2" }, "devDependencies": { "@playwright/test": "^1.53.0", - "@storybook/addon-a11y": "^8.6.12", - "@storybook/addon-essentials": "^8.6.12", - "@storybook/addon-interactions": "^8.6.12", - "@storybook/addon-links": "^8.6.12", - "@storybook/blocks": "^8.6.12", - "@storybook/types": "^8.6.12", + "@storybook/addon-a11y": "^9.1.19", + "@storybook/addon-docs": "^9.1.19", + "@storybook/addon-links": "^9.1.19", "@web/dev-server": "^0.4.0", "@web/rollup-plugin-import-meta-assets": "^2.2.1", "@web/storybook-utils": "^1.1.0", - "storybook": "^8.6.15" + "storybook": "^9.1.19" } } diff --git a/packages/storybook-framework-web-components/src/preset.ts b/packages/storybook-framework-web-components/src/preset.ts index ea657f479a..0e2994b3e9 100644 --- a/packages/storybook-framework-web-components/src/preset.ts +++ b/packages/storybook-framework-web-components/src/preset.ts @@ -1,4 +1,4 @@ -import type { PresetProperty } from '@storybook/types'; +import type { PresetProperty } from 'storybook/internal/types'; import type { StorybookConfig } from './types.js'; export const core: PresetProperty<'core', StorybookConfig> = { diff --git a/packages/storybook-framework-web-components/src/types.ts b/packages/storybook-framework-web-components/src/types.ts index 2a1de60753..276757ed1d 100644 --- a/packages/storybook-framework-web-components/src/types.ts +++ b/packages/storybook-framework-web-components/src/types.ts @@ -1,4 +1,4 @@ -import type { StorybookConfig as StorybookConfigBase } from '@storybook/types'; +import type { StorybookConfig as StorybookConfigBase } from 'storybook/internal/types'; import type { BuilderOptions, StorybookConfigWds } from '@web/storybook-builder'; type FrameworkName = '@web/storybook-framework-web-components'; diff --git a/packages/storybook-framework-web-components/tests/all-in-one.spec.js b/packages/storybook-framework-web-components/tests/all-in-one.spec.js index f93b0d277a..2c96fc0e6a 100644 --- a/packages/storybook-framework-web-components/tests/all-in-one.spec.js +++ b/packages/storybook-framework-web-components/tests/all-in-one.spec.js @@ -80,7 +80,7 @@ test.describe('all in one', () => { await expect(panelButton).toHaveClass(/tabbutton-active/); }); - test('renders @web/mocks/storybook-addon panel', async () => { + test('renders @web/storybook-addon-mocks panel', async () => { const panelButton = sbPage.panelButtonByText('Mocks'); await panelButton.click(); await expect(panelButton).toHaveClass(/tabbutton-active/); diff --git a/packages/storybook-framework-web-components/tests/fixtures/all-in-one/.storybook/main.js b/packages/storybook-framework-web-components/tests/fixtures/all-in-one/.storybook/main.js index d9e52b9be2..69c4d9a17e 100644 --- a/packages/storybook-framework-web-components/tests/fixtures/all-in-one/.storybook/main.js +++ b/packages/storybook-framework-web-components/tests/fixtures/all-in-one/.storybook/main.js @@ -4,11 +4,10 @@ import { importMetaAssets } from '@web/rollup-plugin-import-meta-assets'; const config = { stories: ['../stories/**/*.stories.js', '../stories/**/*.mdx'], addons: [ - '@storybook/addon-essentials', + '@storybook/addon-docs', '@storybook/addon-links', - '@storybook/addon-interactions', '@storybook/addon-a11y', - '@web/mocks/storybook-addon', + '@web/storybook-addon-mocks/storybook-addon', ], framework: { name: '@web/storybook-framework-web-components', @@ -27,7 +26,7 @@ const config = { // ignore warning about eval used by the storybook internals if (log.code === 'EVAL') { const logId = log.id?.replace(/\\/g, '/'); - if (logId?.includes('node_modules/@storybook/core/dist/preview/runtime.js')) { + if (logId?.includes('node_modules/storybook/dist/preview/runtime.js')) { defaultHandler('warn', log); return; } diff --git a/packages/storybook-framework-web-components/tests/fixtures/all-in-one/stories/my-page.mdx b/packages/storybook-framework-web-components/tests/fixtures/all-in-one/stories/my-page.mdx index 608a8e441c..04304f8423 100644 --- a/packages/storybook-framework-web-components/tests/fixtures/all-in-one/stories/my-page.mdx +++ b/packages/storybook-framework-web-components/tests/fixtures/all-in-one/stories/my-page.mdx @@ -1,4 +1,4 @@ -import { Canvas, Markdown, Meta } from '@storybook/blocks'; +import { Canvas, Markdown, Meta } from '@storybook/addon-docs/blocks'; import { MDXFileLoader } from '@web/storybook-utils'; import * as MyComponentStories from './my-component.stories.js'; diff --git a/packages/storybook-utils/package.json b/packages/storybook-utils/package.json index 025aa584d9..2045c3d961 100644 --- a/packages/storybook-utils/package.json +++ b/packages/storybook-utils/package.json @@ -43,7 +43,7 @@ "react": "^18.0.0 || ^19.0.0" }, "dependencies": { - "@storybook/core-events": "^7.0.0 || ^8.0.0" + "storybook": "^9.1.19" }, "devDependencies": { "react": "^19.0.0" diff --git a/packages/storybook-utils/src/create-addon.js b/packages/storybook-utils/src/create-addon.js index 34eb29032b..70ea8c581c 100644 --- a/packages/storybook-utils/src/create-addon.js +++ b/packages/storybook-utils/src/create-addon.js @@ -1,7 +1,7 @@ // @ts-nocheck import React from 'react'; -import { STORY_SPECIFIED, STORY_CHANGED, STORY_RENDERED } from '@storybook/core-events'; +import { STORY_SPECIFIED, STORY_CHANGED, STORY_RENDERED } from 'storybook/internal/core-events'; // A default set of Storybook events that are forwarded to the addon as they occur. If an addon // needs additional events (either Storybook or custom events), they can be passed via the options. diff --git a/tsconfig.json b/tsconfig.json index a620d027e4..6350a17467 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -113,4 +113,4 @@ "path": "./packages/dev-server-storybook/tsconfig.json" } ] -} \ No newline at end of file +}