From 20362cfc58ec6d695210a0fb363f787373cc48c0 Mon Sep 17 00:00:00 2001 From: Guilherme da Silva Amorim Date: Fri, 6 Mar 2026 10:51:16 +0100 Subject: [PATCH 01/20] Convert projects to storybook v9 --- package-lock.json | 1417 ++++------------- package.json | 1 + packages/dev-server-storybook/package.json | 1 + packages/mocks/package.json | 6 +- packages/mocks/storybook/addon/decorator.js | 2 +- packages/mocks/storybook/addon/manager.js | 2 +- packages/storybook-builder/package.json | 9 +- .../src/generate-app-script.ts | 9 +- .../src/generate-iframe-html.ts | 4 +- .../src/generate-stories-script.ts | 2 +- packages/storybook-builder/src/index.ts | 16 +- .../storybook-builder/src/list-stories.ts | 4 +- .../src/rollup-plugin-mdx.ts | 2 +- .../src/rollup-plugin-prebundle-modules.ts | 2 +- .../src/rollup-plugin-storybook-builder.ts | 2 +- .../src/stringify-process-envs.ts | 2 +- .../package.json | 13 +- .../src/preset.ts | 2 +- .../src/types.ts | 2 +- .../fixtures/all-in-one/.storybook/main.js | 5 +- .../fixtures/all-in-one/stories/my-page.mdx | 2 +- packages/storybook-utils/package.json | 2 +- packages/storybook-utils/src/create-addon.js | 2 +- 23 files changed, 386 insertions(+), 1123 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4f446478d6..0959cbd61b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,6 +22,7 @@ "@rollup/plugin-node-resolve": "^15.2.3", "@rollup/plugin-terser": "^0.4.4", "@rollup/plugin-typescript": "^11.1.5", + "@storybook/web-components": "9.1.19", "@types/chai": "^4.2.22", "@types/fs-extra": "^11.0.4", "@types/mocha": "^10.0.1", @@ -308,10 +309,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": { @@ -2942,14 +2942,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", @@ -3845,9 +3837,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": { @@ -5535,96 +5527,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" @@ -5634,352 +5547,22 @@ "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" - } - }, - "node_modules/@storybook/core": { - "version": "8.6.15", - "resolved": "https://registry.npmjs.org/@storybook/core/-/core-8.6.15.tgz", - "integrity": "sha512-VFpKcphNurJpSC4fpUfKL3GTXVoL53oytghGR30QIw5jKWwaT50HVbTyb41BLOUuZjmMhUQA8weiQEew6RX0gw==", - "license": "MIT", - "dependencies": { - "@storybook/theming": "8.6.15", - "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", - "esbuild-register": "^3.5.0", - "jsdoc-type-pratt-parser": "^4.0.0", - "process": "^0.11.10", - "recast": "^0.23.5", - "semver": "^7.6.2", - "util": "^0.12.5", - "ws": "^8.2.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "prettier": "^2 || ^3" - }, - "peerDependenciesMeta": { - "prettier": { - "optional": true - } - } - }, - "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==", - "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/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==", - "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/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" - } - }, - "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==", - "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 - } + "storybook": "^9.1.19" } }, "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": { @@ -5990,13 +5573,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", @@ -6028,9 +5611,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": { @@ -6040,8 +5623,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", @@ -6054,9 +5637,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" @@ -6067,14 +5650,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" @@ -6086,41 +5669,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", @@ -6138,8 +5704,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", @@ -6152,8 +5718,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" @@ -6162,111 +5728,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", @@ -6274,7 +5763,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": { @@ -6327,114 +5816,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": { @@ -6443,91 +5854,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", @@ -6601,10 +5937,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", @@ -6826,6 +6162,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", @@ -7056,9 +6398,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": { @@ -7220,14 +6562,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": { @@ -7330,13 +6672,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", @@ -7603,65 +6938,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, - "license": "MIT", - "dependencies": { - "@vitest/spy": "2.0.5", - "@vitest/utils": "2.0.5", - "chai": "^5.1.1", - "tinyrainbow": "^1.2.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, + "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": { - "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/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, + "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": { - "@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", @@ -7671,14 +6985,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" @@ -7686,87 +6999,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": { @@ -10115,8 +9411,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": "*" @@ -10874,22 +10170,6 @@ "node": ">= 0.4" } }, - "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==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -11733,6 +11013,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", @@ -12775,9 +12064,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": { @@ -12896,9 +12184,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 @@ -13419,10 +12707,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", @@ -13451,8 +12739,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", @@ -13836,8 +13124,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" @@ -16157,8 +15445,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", @@ -16302,6 +15590,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", @@ -18438,9 +17737,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" @@ -18594,22 +17892,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "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==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-array-buffer": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", @@ -19549,8 +18831,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" @@ -19587,15 +18869,6 @@ "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", "license": "MIT" }, - "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==", - "license": "MIT", - "engines": { - "node": ">=12.0.0" - } - }, "node_modules/jsesc": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", @@ -21151,10 +20424,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" } @@ -21231,13 +20504,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", @@ -22127,16 +21393,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", @@ -22975,9 +22231,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" } @@ -22986,7 +22243,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" @@ -24894,19 +24150,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", @@ -25685,10 +24928,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", @@ -25700,10 +24943,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" }, @@ -26437,21 +25680,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", @@ -27131,9 +26387,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", @@ -30102,9 +29357,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" }, @@ -31641,16 +30896,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": { @@ -31690,6 +30954,62 @@ "unist-util-visit-parents": "^3.1.1" } }, + "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/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/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", @@ -32035,9 +31355,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" @@ -32537,20 +31856,18 @@ "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" @@ -33655,8 +32972,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": { @@ -33821,19 +33138,6 @@ "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==", "license": "MIT" }, - "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==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "which-typed-array": "^1.1.2" - } - }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -33849,20 +33153,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", @@ -34269,8 +33559,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" }, @@ -35795,7 +35085,7 @@ }, "packages/dev-server-esbuild": { "name": "@web/dev-server-esbuild", - "version": "1.0.4", + "version": "1.0.5", "license": "MIT", "dependencies": { "@mdn/browser-compat-data": "^4.0.0", @@ -36521,6 +35811,7 @@ "globby": "^11.0.1", "path-is-inside": "^1.0.2", "rollup": "^4.4.0", + "storybook": "^9.1.19", "storybook-addon-markdown-docs": "^2.0.0" }, "bin": { @@ -36659,12 +35950,10 @@ "version": "1.3.2", "license": "MIT", "dependencies": { - "@storybook/manager-api": "^7.0.0 || ^8.0.0", - "@storybook/preview-api": "^7.0.0 || ^8.0.0", - "@web/storybook-prebuilt": "^0.1.37", "@web/storybook-utils": "^1.1.1", "lit": "^2.7.5 || ^3.0.0", - "msw": "2.4.1" + "msw": "2.4.1", + "storybook": "9.1.19" }, "devDependencies": { "@web/storybook-builder": "^0.2.2", @@ -36801,9 +36090,10 @@ "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/supports-color": { "version": "7.2.0", @@ -37033,7 +36323,7 @@ }, "packages/rollup-plugin-import-meta-assets": { "name": "@web/rollup-plugin-import-meta-assets", - "version": "2.3.0", + "version": "2.3.2", "license": "MIT", "dependencies": { "@rollup/plugin-dynamic-import-vars": "^2.1.0", @@ -37132,7 +36422,7 @@ } }, "packages/rollup-plugin-workbox": { - "version": "8.1.2", + "version": "8.1.3", "license": "MIT", "dependencies": { "esbuild": "^0.27.0", @@ -37583,16 +36873,13 @@ }, "packages/storybook-builder": { "name": "@web/storybook-builder", - "version": "0.2.5", + "version": "0.2.6", "license": "MIT", "dependencies": { "@mdx-js/mdx": "^3.0.0", "@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", @@ -37610,10 +36897,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" @@ -39476,80 +38761,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": { @@ -39557,7 +38824,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/package.json b/package.json index 2e2048fbc2..f3848ca05f 100644 --- a/package.json +++ b/package.json @@ -53,6 +53,7 @@ "@rollup/plugin-node-resolve": "^15.2.3", "@rollup/plugin-terser": "^0.4.4", "@rollup/plugin-typescript": "^11.1.5", + "@storybook/web-components": "9.1.19", "@types/chai": "^4.2.22", "@types/fs-extra": "^11.0.4", "@types/mocha": "^10.0.1", diff --git a/packages/dev-server-storybook/package.json b/packages/dev-server-storybook/package.json index e625e911d6..c324770dae 100644 --- a/packages/dev-server-storybook/package.json +++ b/packages/dev-server-storybook/package.json @@ -71,6 +71,7 @@ "globby": "^11.0.1", "path-is-inside": "^1.0.2", "rollup": "^4.4.0", + "storybook": "^9.1.19", "storybook-addon-markdown-docs": "^2.0.0" }, "devDependencies": { diff --git a/packages/mocks/package.json b/packages/mocks/package.json index 5223422281..c0a26200e0 100644 --- a/packages/mocks/package.json +++ b/packages/mocks/package.json @@ -64,12 +64,10 @@ "msw" ], "dependencies": { - "@storybook/manager-api": "^7.0.0 || ^8.0.0", - "@storybook/preview-api": "^7.0.0 || ^8.0.0", - "@web/storybook-prebuilt": "^0.1.37", "@web/storybook-utils": "^1.1.1", "lit": "^2.7.5 || ^3.0.0", - "msw": "2.4.1" + "msw": "2.4.1", + "storybook": "9.1.19" }, "devDependencies": { "@web/storybook-builder": "^0.2.2", diff --git a/packages/mocks/storybook/addon/decorator.js b/packages/mocks/storybook/addon/decorator.js index da74542985..0f5fe7b9c6 100644 --- a/packages/mocks/storybook/addon/decorator.js +++ b/packages/mocks/storybook/addon/decorator.js @@ -1,6 +1,6 @@ // @ts-nocheck -import { addons, makeDecorator } from '@storybook/preview-api'; +import { addons, makeDecorator } from 'storybook/internal/preview-api'; import { createDecorator } from './create-decorator.js'; // Storybook 7+ diff --git a/packages/mocks/storybook/addon/manager.js b/packages/mocks/storybook/addon/manager.js index 199843a47c..f5c18f8f3d 100644 --- a/packages/mocks/storybook/addon/manager.js +++ b/packages/mocks/storybook/addon/manager.js @@ -2,7 +2,7 @@ import { createAddon } from '@web/storybook-utils'; import React from 'react'; -import { addons, types } from '@storybook/manager-api'; +import { addons, types } from 'storybook/internal/manager-api'; import { registerAddon } from './register-addon.js'; // Storybook 7+ 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..74ea53a4d7 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/internal/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-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..1eb994fb19 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-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", + "@storybook/addon-docs": "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/fixtures/all-in-one/.storybook/main.js b/packages/storybook-framework-web-components/tests/fixtures/all-in-one/.storybook/main.js index d9e52b9be2..3719204056 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-links', - '@storybook/addon-interactions', '@storybook/addon-a11y', '@web/mocks/storybook-addon', + '@storybook/addon-docs', ], 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. From f7413cff963e43e4db7a686dbe55c48262be213b Mon Sep 17 00:00:00 2001 From: Guilherme da Silva Amorim Date: Mon, 9 Mar 2026 13:24:44 +0100 Subject: [PATCH 02/20] Add migration guide for Storybook 9 and update docs --- .changeset/shiny-sloths-drum.md | 8 ++++++ .../migration-to-storybook-9.md | 25 +++++++++++++++++++ docs/docs/storybook-builder/overview.md | 5 ++++ 3 files changed, 38 insertions(+) create mode 100644 .changeset/shiny-sloths-drum.md create mode 100644 docs/docs/storybook-builder/migration-to-storybook-9.md diff --git a/.changeset/shiny-sloths-drum.md b/.changeset/shiny-sloths-drum.md new file mode 100644 index 0000000000..8931c0c730 --- /dev/null +++ b/.changeset/shiny-sloths-drum.md @@ -0,0 +1,8 @@ +--- +'@web/storybook-framework-web-components': minor +'@web/storybook-builder': minor +'@web/storybook-utils': minor +'@web/mocks': minor +--- + +Migrate projects to Storybook 9 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..dee4c020c6 --- /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/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 + +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` From 5df8cd50befcdbbcc953720a7ec7fe4801c2ff09 Mon Sep 17 00:00:00 2001 From: Guilherme da Silva Amorim Date: Mon, 9 Mar 2026 13:27:58 +0100 Subject: [PATCH 03/20] Add carret version to storybook packages --- docs/docs/storybook-builder/migration-to-storybook-7.md | 2 +- docs/docs/storybook-builder/migration-to-storybook-8.md | 2 +- package-lock.json | 4 ++-- package.json | 2 +- packages/storybook-framework-web-components/package.json | 6 +++--- 5 files changed, 8 insertions(+), 8 deletions(-) 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..bcefa6f8bb 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 diff --git a/package-lock.json b/package-lock.json index 0959cbd61b..272803839a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,7 +22,7 @@ "@rollup/plugin-node-resolve": "^15.2.3", "@rollup/plugin-terser": "^0.4.4", "@rollup/plugin-typescript": "^11.1.5", - "@storybook/web-components": "9.1.19", + "@storybook/web-components": "^9.1.19", "@types/chai": "^4.2.22", "@types/fs-extra": "^11.0.4", "@types/mocha": "^10.0.1", @@ -38761,7 +38761,7 @@ "version": "0.2.1", "license": "MIT", "dependencies": { - "@storybook/web-components": "9.1.19", + "@storybook/web-components": "^9.1.19", "@web/storybook-builder": "^0.2.2" }, "devDependencies": { diff --git a/package.json b/package.json index f3848ca05f..56cb64b80d 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,7 @@ "@rollup/plugin-node-resolve": "^15.2.3", "@rollup/plugin-terser": "^0.4.4", "@rollup/plugin-typescript": "^11.1.5", - "@storybook/web-components": "9.1.19", + "@storybook/web-components": "^9.1.19", "@types/chai": "^4.2.22", "@types/fs-extra": "^11.0.4", "@types/mocha": "^10.0.1", diff --git a/packages/storybook-framework-web-components/package.json b/packages/storybook-framework-web-components/package.json index 1eb994fb19..dd1d27933c 100644 --- a/packages/storybook-framework-web-components/package.json +++ b/packages/storybook-framework-web-components/package.json @@ -56,17 +56,17 @@ "esm" ], "dependencies": { - "@storybook/web-components": "9.1.19", + "@storybook/web-components": "^9.1.19", "@web/storybook-builder": "^0.2.2" }, "devDependencies": { "@playwright/test": "^1.53.0", "@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": "9.1.19", - "@storybook/addon-docs": "9.1.19" + "storybook": "9.1.19" } } From eb9723fb5a03aa376cd03f3893956b8227abfad7 Mon Sep 17 00:00:00 2001 From: Guilherme da Silva Amorim Date: Tue, 10 Mar 2026 13:12:36 +0100 Subject: [PATCH 04/20] Fix migration links --- docs/docs/storybook-builder/migration-to-storybook-8.md | 2 +- docs/docs/storybook-builder/migration-to-storybook-9.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/docs/storybook-builder/migration-to-storybook-8.md b/docs/docs/storybook-builder/migration-to-storybook-8.md index bcefa6f8bb..4060bc7915 100644 --- a/docs/docs/storybook-builder/migration-to-storybook-8.md +++ b/docs/docs/storybook-builder/migration-to-storybook-8.md @@ -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 index dee4c020c6..771057348c 100644 --- a/docs/docs/storybook-builder/migration-to-storybook-9.md +++ b/docs/docs/storybook-builder/migration-to-storybook-9.md @@ -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/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 From 81cb54f2705b82c2a5f6d9af08d66f1433bbd963 Mon Sep 17 00:00:00 2001 From: Guilherme da Silva Amorim Date: Tue, 10 Mar 2026 13:25:42 +0100 Subject: [PATCH 05/20] Removed unnecessary dependency to storybook in the dev-server-storybook package --- packages/dev-server-storybook/package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/dev-server-storybook/package.json b/packages/dev-server-storybook/package.json index c324770dae..e625e911d6 100644 --- a/packages/dev-server-storybook/package.json +++ b/packages/dev-server-storybook/package.json @@ -71,7 +71,6 @@ "globby": "^11.0.1", "path-is-inside": "^1.0.2", "rollup": "^4.4.0", - "storybook": "^9.1.19", "storybook-addon-markdown-docs": "^2.0.0" }, "devDependencies": { From 64dec58dff630bafbc3d87ebe306e2a0906636ef Mon Sep 17 00:00:00 2001 From: Guilherme da Silva Amorim Date: Tue, 10 Mar 2026 13:27:08 +0100 Subject: [PATCH 06/20] Update Storybook imports to use the public, not internal, preview-api package --- packages/mocks/storybook/addon/decorator.js | 2 +- packages/storybook-builder/src/generate-app-script.ts | 2 +- packages/storybook-builder/src/generate-setup-addons-script.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/mocks/storybook/addon/decorator.js b/packages/mocks/storybook/addon/decorator.js index 0f5fe7b9c6..bfa69d03c0 100644 --- a/packages/mocks/storybook/addon/decorator.js +++ b/packages/mocks/storybook/addon/decorator.js @@ -1,6 +1,6 @@ // @ts-nocheck -import { addons, makeDecorator } from 'storybook/internal/preview-api'; +import { addons, makeDecorator } from 'storybook/preview-api'; import { createDecorator } from './create-decorator.js'; // Storybook 7+ diff --git a/packages/storybook-builder/src/generate-app-script.ts b/packages/storybook-builder/src/generate-app-script.ts index 74ea53a4d7..65aeabcfc0 100644 --- a/packages/storybook-builder/src/generate-app-script.ts +++ b/packages/storybook-builder/src/generate-app-script.ts @@ -39,7 +39,7 @@ import '${virtualSetupAddonsFilename}'; setup(); -import { composeConfigs, PreviewWeb, ClientApi } from 'storybook/internal/preview-api'; +import { composeConfigs, PreviewWeb, ClientApi } from 'storybook/preview-api'; import { importFn } from '${virtualStoriesFilename}'; ${getPreviewAnnotationsFunction} 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); From 58c17bf90c3287dec509caa9f3862586191673eb Mon Sep 17 00:00:00 2001 From: Guilherme da Silva Amorim Date: Tue, 10 Mar 2026 14:07:01 +0100 Subject: [PATCH 07/20] Update import to use storybook/manager-api --- packages/mocks/storybook/addon/manager.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mocks/storybook/addon/manager.js b/packages/mocks/storybook/addon/manager.js index f5c18f8f3d..a5ba18b19d 100644 --- a/packages/mocks/storybook/addon/manager.js +++ b/packages/mocks/storybook/addon/manager.js @@ -2,7 +2,7 @@ import { createAddon } from '@web/storybook-utils'; import React from 'react'; -import { addons, types } from 'storybook/internal/manager-api'; +import { addons, types } from 'storybook/manager-api'; import { registerAddon } from './register-addon.js'; // Storybook 7+ From 80306fe62dfe5872df670d244279f2419de31af4 Mon Sep 17 00:00:00 2001 From: Guilherme da Silva Amorim Date: Tue, 10 Mar 2026 14:12:00 +0100 Subject: [PATCH 08/20] Remove Storybook dependencies from the root package file --- package-lock.json | 2 -- package.json | 1 - 2 files changed, 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 325ae9515a..56ab36dc89 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,7 +22,6 @@ "@rollup/plugin-node-resolve": "^15.2.3", "@rollup/plugin-terser": "^0.4.4", "@rollup/plugin-typescript": "^11.1.5", - "@storybook/web-components": "^9.1.19", "@types/chai": "^4.2.22", "@types/fs-extra": "^11.0.4", "@types/mocha": "^10.0.1", @@ -35821,7 +35820,6 @@ "globby": "^11.0.1", "path-is-inside": "^1.0.2", "rollup": "^4.4.0", - "storybook": "^9.1.19", "storybook-addon-markdown-docs": "^2.0.0" }, "bin": { diff --git a/package.json b/package.json index 56cb64b80d..2e2048fbc2 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,6 @@ "@rollup/plugin-node-resolve": "^15.2.3", "@rollup/plugin-terser": "^0.4.4", "@rollup/plugin-typescript": "^11.1.5", - "@storybook/web-components": "^9.1.19", "@types/chai": "^4.2.22", "@types/fs-extra": "^11.0.4", "@types/mocha": "^10.0.1", From 72573365f0131b6e68a7cdef1ae20adb48a35b1c Mon Sep 17 00:00:00 2001 From: Guilherme da Silva Amorim Date: Wed, 11 Mar 2026 11:56:04 +0100 Subject: [PATCH 09/20] Added caret to versions --- package-lock.json | 8 ++++---- packages/storybook-framework-web-components/package.json | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 56ab36dc89..53188da156 100644 --- a/package-lock.json +++ b/package-lock.json @@ -38775,13 +38775,13 @@ }, "devDependencies": { "@playwright/test": "^1.53.0", - "@storybook/addon-a11y": "9.1.19", - "@storybook/addon-docs": "9.1.19", - "@storybook/addon-links": "9.1.19", + "@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": "9.1.19" + "storybook": "^9.1.19" }, "engines": { "node": ">=18.0.0" diff --git a/packages/storybook-framework-web-components/package.json b/packages/storybook-framework-web-components/package.json index dd1d27933c..7f7f54639c 100644 --- a/packages/storybook-framework-web-components/package.json +++ b/packages/storybook-framework-web-components/package.json @@ -61,12 +61,12 @@ }, "devDependencies": { "@playwright/test": "^1.53.0", - "@storybook/addon-a11y": "9.1.19", - "@storybook/addon-docs": "9.1.19", - "@storybook/addon-links": "9.1.19", + "@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": "9.1.19" + "storybook": "^9.1.19" } } From 1d184cf737633e1b2f0425602ffe1b553d568b57 Mon Sep 17 00:00:00 2001 From: Guilherme da Silva Amorim Date: Wed, 11 Mar 2026 11:56:46 +0100 Subject: [PATCH 10/20] Reorder addons --- .../tests/fixtures/all-in-one/.storybook/main.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 3719204056..6249be3d66 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,10 +4,10 @@ import { importMetaAssets } from '@web/rollup-plugin-import-meta-assets'; const config = { stories: ['../stories/**/*.stories.js', '../stories/**/*.mdx'], addons: [ + '@storybook/addon-docs', '@storybook/addon-links', '@storybook/addon-a11y', '@web/mocks/storybook-addon', - '@storybook/addon-docs', ], framework: { name: '@web/storybook-framework-web-components', From 00724dbe32b3c7e4a0a006979f08da6748fd975d Mon Sep 17 00:00:00 2001 From: Guilherme da Silva Amorim Date: Wed, 11 Mar 2026 16:27:41 +0100 Subject: [PATCH 11/20] Revert changes to packages/mock and introduce packages/storybook-addon-mock --- .changeset/shiny-sloths-drum.md | 1 - .changeset/smooth-bugs-lay.md | 5 + package-lock.json | 796 +++++++++++++++++- packages/mocks/package.json | 6 +- packages/mocks/storybook/addon/decorator.js | 2 +- packages/mocks/storybook/addon/manager.js | 2 +- packages/storybook-addon-mocks/CHANGELOG.md | 1 + packages/storybook-addon-mocks/README.md | 368 ++++++++ packages/storybook-addon-mocks/browser.js | 47 ++ packages/storybook-addon-mocks/http.js | 65 ++ packages/storybook-addon-mocks/node.js | 14 + packages/storybook-addon-mocks/package.json | 96 +++ packages/storybook-addon-mocks/plugins.js | 2 + packages/storybook-addon-mocks/polyfills.js | 19 + .../registerMockRoutes.js | 51 ++ .../storybook-addon-mocks/rollup-plugin.js | 35 + .../storybook-addon/manager.js | 1 + .../storybook-addon/preset.js | 19 + .../storybook-addon/preview.js | 3 + .../storybook/addon/create-decorator.js | 68 ++ .../storybook/addon/decorator.js | 10 + .../storybook/addon/manager.js | 9 + .../storybook/addon/register-addon.js | 252 ++++++ .../storybook-addon-mocks/sw-path/build.js | 1 + packages/storybook-addon-mocks/sw-path/dev.js | 1 + .../test-browser/mocks.test.js | 15 + .../test-browser/web-test-runner.config.js | 6 + packages/storybook-addon-mocks/tsconfig.json | 9 + packages/storybook-addon-mocks/types.ts | 16 + .../wc/.storybook/main.js | 9 + .../storybook-addon-mocks/wc/src/MyElement.js | 38 + .../wc/stories/my-element.stories.js | 32 + packages/storybook-addon-mocks/wds-plugin.js | 19 + .../tests/all-in-one.spec.js | 2 +- .../fixtures/all-in-one/.storybook/main.js | 2 +- tsconfig.json | 2 +- 36 files changed, 2005 insertions(+), 19 deletions(-) create mode 100644 .changeset/smooth-bugs-lay.md create mode 100644 packages/storybook-addon-mocks/CHANGELOG.md create mode 100644 packages/storybook-addon-mocks/README.md create mode 100644 packages/storybook-addon-mocks/browser.js create mode 100644 packages/storybook-addon-mocks/http.js create mode 100644 packages/storybook-addon-mocks/node.js create mode 100644 packages/storybook-addon-mocks/package.json create mode 100644 packages/storybook-addon-mocks/plugins.js create mode 100644 packages/storybook-addon-mocks/polyfills.js create mode 100644 packages/storybook-addon-mocks/registerMockRoutes.js create mode 100644 packages/storybook-addon-mocks/rollup-plugin.js create mode 100644 packages/storybook-addon-mocks/storybook-addon/manager.js create mode 100644 packages/storybook-addon-mocks/storybook-addon/preset.js create mode 100644 packages/storybook-addon-mocks/storybook-addon/preview.js create mode 100644 packages/storybook-addon-mocks/storybook/addon/create-decorator.js create mode 100644 packages/storybook-addon-mocks/storybook/addon/decorator.js create mode 100644 packages/storybook-addon-mocks/storybook/addon/manager.js create mode 100644 packages/storybook-addon-mocks/storybook/addon/register-addon.js create mode 100644 packages/storybook-addon-mocks/sw-path/build.js create mode 100644 packages/storybook-addon-mocks/sw-path/dev.js create mode 100644 packages/storybook-addon-mocks/test-browser/mocks.test.js create mode 100644 packages/storybook-addon-mocks/test-browser/web-test-runner.config.js create mode 100644 packages/storybook-addon-mocks/tsconfig.json create mode 100644 packages/storybook-addon-mocks/types.ts create mode 100644 packages/storybook-addon-mocks/wc/.storybook/main.js create mode 100644 packages/storybook-addon-mocks/wc/src/MyElement.js create mode 100644 packages/storybook-addon-mocks/wc/stories/my-element.stories.js create mode 100644 packages/storybook-addon-mocks/wds-plugin.js diff --git a/.changeset/shiny-sloths-drum.md b/.changeset/shiny-sloths-drum.md index 8931c0c730..104b59dcec 100644 --- a/.changeset/shiny-sloths-drum.md +++ b/.changeset/shiny-sloths-drum.md @@ -2,7 +2,6 @@ '@web/storybook-framework-web-components': minor '@web/storybook-builder': minor '@web/storybook-utils': minor -'@web/mocks': 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/package-lock.json b/package-lock.json index 53188da156..43df6b9a98 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2892,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", @@ -3016,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" } @@ -3873,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", @@ -5559,6 +5588,101 @@ "storybook": "^9.1.19" } }, + "node_modules/@storybook/core": { + "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.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", + "esbuild-register": "^3.5.0", + "jsdoc-type-pratt-parser": "^4.0.0", + "process": "^0.11.10", + "recast": "^0.23.5", + "semver": "^7.6.2", + "util": "^0.12.5", + "ws": "^8.2.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "prettier": "^2 || ^3" + }, + "peerDependenciesMeta": { + "prettier": { + "optional": true + } + } + }, + "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" + }, + "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": { + "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 + } + } + }, + "node_modules/@storybook/core/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", + "peer": true, + "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/@storybook/csf": { "version": "0.0.2--canary.4566f4d.1", "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/@storybook/csf/-/csf-0.0.2--canary.4566f4d.1.tgz", @@ -6650,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", @@ -7392,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 @@ -10179,6 +10313,23 @@ "node": ">= 0.4" } }, + "node_modules/call-bound": { + "version": "1.0.4", + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -17901,6 +18052,23 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/is-arguments": { + "version": "1.2.0", + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-array-buffer": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", @@ -18878,6 +19046,16 @@ "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", "license": "MIT" }, + "node_modules/jsdoc-type-pratt-parser": { + "version": "4.8.0", + "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" + } + }, "node_modules/jsesc": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", @@ -22653,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", @@ -22696,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", @@ -23253,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": { @@ -28942,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", @@ -30963,6 +31300,96 @@ "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", @@ -30989,6 +31416,68 @@ } } }, + "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", @@ -30998,6 +31487,159 @@ "@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", @@ -31527,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", @@ -31882,6 +32538,28 @@ "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", @@ -32993,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", @@ -33147,6 +33836,20 @@ "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==", "license": "MIT" }, + "node_modules/util": { + "version": "0.12.5", + "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", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -34878,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" }, @@ -35958,10 +36662,12 @@ "version": "1.3.2", "license": "MIT", "dependencies": { + "@storybook/manager-api": "^7.0.0 || ^8.0.0", + "@storybook/preview-api": "^7.0.0 || ^8.0.0", + "@web/storybook-prebuilt": "^0.1.37", "@web/storybook-utils": "^1.1.1", "lit": "^2.7.5 || ^3.0.0", - "msw": "2.4.1", - "storybook": "9.1.19" + "msw": "2.4.1" }, "devDependencies": { "@web/storybook-builder": "^0.2.2", @@ -35984,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", @@ -36103,6 +36835,33 @@ "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", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -36880,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", diff --git a/packages/mocks/package.json b/packages/mocks/package.json index c0a26200e0..5223422281 100644 --- a/packages/mocks/package.json +++ b/packages/mocks/package.json @@ -64,10 +64,12 @@ "msw" ], "dependencies": { + "@storybook/manager-api": "^7.0.0 || ^8.0.0", + "@storybook/preview-api": "^7.0.0 || ^8.0.0", + "@web/storybook-prebuilt": "^0.1.37", "@web/storybook-utils": "^1.1.1", "lit": "^2.7.5 || ^3.0.0", - "msw": "2.4.1", - "storybook": "9.1.19" + "msw": "2.4.1" }, "devDependencies": { "@web/storybook-builder": "^0.2.2", diff --git a/packages/mocks/storybook/addon/decorator.js b/packages/mocks/storybook/addon/decorator.js index bfa69d03c0..da74542985 100644 --- a/packages/mocks/storybook/addon/decorator.js +++ b/packages/mocks/storybook/addon/decorator.js @@ -1,6 +1,6 @@ // @ts-nocheck -import { addons, makeDecorator } from 'storybook/preview-api'; +import { addons, makeDecorator } from '@storybook/preview-api'; import { createDecorator } from './create-decorator.js'; // Storybook 7+ diff --git a/packages/mocks/storybook/addon/manager.js b/packages/mocks/storybook/addon/manager.js index a5ba18b19d..199843a47c 100644 --- a/packages/mocks/storybook/addon/manager.js +++ b/packages/mocks/storybook/addon/manager.js @@ -2,7 +2,7 @@ import { createAddon } from '@web/storybook-utils'; import React from 'react'; -import { addons, types } from 'storybook/manager-api'; +import { addons, types } from '@storybook/manager-api'; import { registerAddon } from './register-addon.js'; // Storybook 7+ 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..efdd141d7e --- /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/mocks" + }, + "author": "modern-web", + "homepage": "https://github.com/modernweb-dev/web/tree/master/packages/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-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 6249be3d66..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 @@ -7,7 +7,7 @@ const config = { '@storybook/addon-docs', '@storybook/addon-links', '@storybook/addon-a11y', - '@web/mocks/storybook-addon', + '@web/storybook-addon-mocks/storybook-addon', ], framework: { name: '@web/storybook-framework-web-components', 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 +} From bfc4eb8ea7b7a18fcb7b9605472462fdb3a249fe Mon Sep 17 00:00:00 2001 From: Guilherme da Silva Amorim Date: Wed, 11 Mar 2026 16:59:04 +0100 Subject: [PATCH 12/20] Add deprecation notice for Storybook 9 compatibility --- docs/docs/mocks/migration-to-storybook-9.md | 6 ++++++ packages/mocks/README.md | 2 ++ 2 files changed, 8 insertions(+) create mode 100644 docs/docs/mocks/migration-to-storybook-9.md 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/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 From e35c819498935c7a34dc1e21c07e38fdb91fee38 Mon Sep 17 00:00:00 2001 From: Guilherme da Silva Amorim Date: Wed, 11 Mar 2026 17:05:41 +0100 Subject: [PATCH 13/20] Add deprecation notice for Storybook 9 in @web/mocks --- packages/mocks/rollup-plugin.js | 3 +++ packages/mocks/storybook/addon/decorator.js | 3 ++- packages/mocks/storybook/decorator.js | 4 ++++ packages/mocks/wds-plugin.js | 3 +++ 4 files changed, 12 insertions(+), 1 deletion(-) 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', From 192b2d9c97ae45cb1a366f9b0c72b9eaf7b50f04 Mon Sep 17 00:00:00 2001 From: Guilherme da Silva Amorim Date: Wed, 11 Mar 2026 17:08:10 +0100 Subject: [PATCH 14/20] Update repository and homepage paths in package.json --- packages/storybook-addon-mocks/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/storybook-addon-mocks/package.json b/packages/storybook-addon-mocks/package.json index efdd141d7e..6cb8a33439 100644 --- a/packages/storybook-addon-mocks/package.json +++ b/packages/storybook-addon-mocks/package.json @@ -9,10 +9,10 @@ "repository": { "type": "git", "url": "https://github.com/modernweb-dev/web.git", - "directory": "packages/mocks" + "directory": "packages/storybook-addon-mocks" }, "author": "modern-web", - "homepage": "https://github.com/modernweb-dev/web/tree/master/packages/mocks", + "homepage": "https://github.com/modernweb-dev/web/tree/master/packages/storybook-addon-mocks", "type": "module", "exports": { "./http.js": { From 1bd49b5955568583d9e18078365c8ae9c12181ac Mon Sep 17 00:00:00 2001 From: Mikhail Bashkirov Date: Fri, 27 Mar 2026 21:19:46 +0100 Subject: [PATCH 15/20] remove storybook-addon-mock to start over --- .changeset/smooth-bugs-lay.md | 5 - package-lock.json | 182 --------- packages/mocks/rollup-plugin.js | 3 - packages/mocks/storybook/addon/decorator.js | 1 - packages/mocks/storybook/decorator.js | 4 - packages/mocks/wds-plugin.js | 3 - packages/storybook-addon-mocks/CHANGELOG.md | 1 - packages/storybook-addon-mocks/README.md | 368 ------------------ packages/storybook-addon-mocks/browser.js | 47 --- packages/storybook-addon-mocks/http.js | 65 ---- packages/storybook-addon-mocks/node.js | 14 - packages/storybook-addon-mocks/package.json | 96 ----- packages/storybook-addon-mocks/plugins.js | 2 - packages/storybook-addon-mocks/polyfills.js | 19 - .../registerMockRoutes.js | 51 --- .../storybook-addon-mocks/rollup-plugin.js | 35 -- .../storybook-addon/manager.js | 1 - .../storybook-addon/preset.js | 19 - .../storybook-addon/preview.js | 3 - .../storybook/addon/create-decorator.js | 68 ---- .../storybook/addon/decorator.js | 10 - .../storybook/addon/manager.js | 9 - .../storybook/addon/register-addon.js | 252 ------------ .../storybook-addon-mocks/sw-path/build.js | 1 - packages/storybook-addon-mocks/sw-path/dev.js | 1 - .../test-browser/mocks.test.js | 15 - .../test-browser/web-test-runner.config.js | 6 - packages/storybook-addon-mocks/tsconfig.json | 9 - packages/storybook-addon-mocks/types.ts | 16 - .../wc/.storybook/main.js | 9 - .../storybook-addon-mocks/wc/src/MyElement.js | 38 -- .../wc/stories/my-element.stories.js | 32 -- packages/storybook-addon-mocks/wds-plugin.js | 19 - .../tests/all-in-one.spec.js | 2 +- .../fixtures/all-in-one/.storybook/main.js | 2 +- 35 files changed, 2 insertions(+), 1406 deletions(-) delete mode 100644 .changeset/smooth-bugs-lay.md delete mode 100644 packages/storybook-addon-mocks/CHANGELOG.md delete mode 100644 packages/storybook-addon-mocks/README.md delete mode 100644 packages/storybook-addon-mocks/browser.js delete mode 100644 packages/storybook-addon-mocks/http.js delete mode 100644 packages/storybook-addon-mocks/node.js delete mode 100644 packages/storybook-addon-mocks/package.json delete mode 100644 packages/storybook-addon-mocks/plugins.js delete mode 100644 packages/storybook-addon-mocks/polyfills.js delete mode 100644 packages/storybook-addon-mocks/registerMockRoutes.js delete mode 100644 packages/storybook-addon-mocks/rollup-plugin.js delete mode 100644 packages/storybook-addon-mocks/storybook-addon/manager.js delete mode 100644 packages/storybook-addon-mocks/storybook-addon/preset.js delete mode 100644 packages/storybook-addon-mocks/storybook-addon/preview.js delete mode 100644 packages/storybook-addon-mocks/storybook/addon/create-decorator.js delete mode 100644 packages/storybook-addon-mocks/storybook/addon/decorator.js delete mode 100644 packages/storybook-addon-mocks/storybook/addon/manager.js delete mode 100644 packages/storybook-addon-mocks/storybook/addon/register-addon.js delete mode 100644 packages/storybook-addon-mocks/sw-path/build.js delete mode 100644 packages/storybook-addon-mocks/sw-path/dev.js delete mode 100644 packages/storybook-addon-mocks/test-browser/mocks.test.js delete mode 100644 packages/storybook-addon-mocks/test-browser/web-test-runner.config.js delete mode 100644 packages/storybook-addon-mocks/tsconfig.json delete mode 100644 packages/storybook-addon-mocks/types.ts delete mode 100644 packages/storybook-addon-mocks/wc/.storybook/main.js delete mode 100644 packages/storybook-addon-mocks/wc/src/MyElement.js delete mode 100644 packages/storybook-addon-mocks/wc/stories/my-element.stories.js delete mode 100644 packages/storybook-addon-mocks/wds-plugin.js diff --git a/.changeset/smooth-bugs-lay.md b/.changeset/smooth-bugs-lay.md deleted file mode 100644 index 598528eb0d..0000000000 --- a/.changeset/smooth-bugs-lay.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@web/storybook-addon-mocks': patch ---- - -Initial commit diff --git a/package-lock.json b/package-lock.json index 75f08cf633..6ce52a1d42 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3421,23 +3421,6 @@ "react": ">=16" } }, - "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", @@ -6157,12 +6140,6 @@ "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", @@ -6901,10 +6878,6 @@ "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 @@ -21908,146 +21881,6 @@ "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", @@ -36168,21 +36001,6 @@ "@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", diff --git a/packages/mocks/rollup-plugin.js b/packages/mocks/rollup-plugin.js index 9069861f84..e7e6c4577e 100644 --- a/packages/mocks/rollup-plugin.js +++ b/packages/mocks/rollup-plugin.js @@ -6,9 +6,6 @@ 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 dbd201d9ed..e860dc4c89 100644 --- a/packages/mocks/storybook/addon/decorator.js +++ b/packages/mocks/storybook/addon/decorator.js @@ -6,6 +6,5 @@ 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 0fd60ffad9..7f8496a020 100644 --- a/packages/mocks/storybook/decorator.js +++ b/packages/mocks/storybook/decorator.js @@ -4,8 +4,4 @@ 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 f8ca0a097f..4e5fad893b 100644 --- a/packages/mocks/wds-plugin.js +++ b/packages/mocks/wds-plugin.js @@ -3,9 +3,6 @@ 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 deleted file mode 100644 index 8990e2e8a3..0000000000 --- a/packages/storybook-addon-mocks/CHANGELOG.md +++ /dev/null @@ -1 +0,0 @@ -# @web/storybook-addons-mocks diff --git a/packages/storybook-addon-mocks/README.md b/packages/storybook-addon-mocks/README.md deleted file mode 100644 index 296e54166a..0000000000 --- a/packages/storybook-addon-mocks/README.md +++ /dev/null @@ -1,368 +0,0 @@ -# @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 deleted file mode 100644 index 4aecd043c7..0000000000 --- a/packages/storybook-addon-mocks/browser.js +++ /dev/null @@ -1,47 +0,0 @@ -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 deleted file mode 100644 index 25e5315039..0000000000 --- a/packages/storybook-addon-mocks/http.js +++ /dev/null @@ -1,65 +0,0 @@ -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 deleted file mode 100644 index 967821b086..0000000000 --- a/packages/storybook-addon-mocks/node.js +++ /dev/null @@ -1,14 +0,0 @@ -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 deleted file mode 100644 index 6cb8a33439..0000000000 --- a/packages/storybook-addon-mocks/package.json +++ /dev/null @@ -1,96 +0,0 @@ -{ - "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 deleted file mode 100644 index 83f1c381d7..0000000000 --- a/packages/storybook-addon-mocks/plugins.js +++ /dev/null @@ -1,2 +0,0 @@ -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 deleted file mode 100644 index cfd82c4c21..0000000000 --- a/packages/storybook-addon-mocks/polyfills.js +++ /dev/null @@ -1,19 +0,0 @@ -// @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 deleted file mode 100644 index 2070213aaa..0000000000 --- a/packages/storybook-addon-mocks/registerMockRoutes.js +++ /dev/null @@ -1,51 +0,0 @@ -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 deleted file mode 100644 index e69c58348e..0000000000 --- a/packages/storybook-addon-mocks/rollup-plugin.js +++ /dev/null @@ -1,35 +0,0 @@ -// @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 deleted file mode 100644 index 1aa2d862d2..0000000000 --- a/packages/storybook-addon-mocks/storybook-addon/manager.js +++ /dev/null @@ -1 +0,0 @@ -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 deleted file mode 100644 index dd02407889..0000000000 --- a/packages/storybook-addon-mocks/storybook-addon/preset.js +++ /dev/null @@ -1,19 +0,0 @@ -/** - * @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 deleted file mode 100644 index 8b46e507fe..0000000000 --- a/packages/storybook-addon-mocks/storybook-addon/preview.js +++ /dev/null @@ -1,3 +0,0 @@ -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 deleted file mode 100644 index df6d61d5ad..0000000000 --- a/packages/storybook-addon-mocks/storybook/addon/create-decorator.js +++ /dev/null @@ -1,68 +0,0 @@ -// @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 deleted file mode 100644 index bfa69d03c0..0000000000 --- a/packages/storybook-addon-mocks/storybook/addon/decorator.js +++ /dev/null @@ -1,10 +0,0 @@ -// @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 deleted file mode 100644 index a5ba18b19d..0000000000 --- a/packages/storybook-addon-mocks/storybook/addon/manager.js +++ /dev/null @@ -1,9 +0,0 @@ -// @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 deleted file mode 100644 index 4d74cb23d7..0000000000 --- a/packages/storybook-addon-mocks/storybook/addon/register-addon.js +++ /dev/null @@ -1,252 +0,0 @@ -// @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 deleted file mode 100644 index 09dc1e0a37..0000000000 --- a/packages/storybook-addon-mocks/sw-path/build.js +++ /dev/null @@ -1 +0,0 @@ -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 deleted file mode 100644 index 4a94bb8fdc..0000000000 --- a/packages/storybook-addon-mocks/sw-path/dev.js +++ /dev/null @@ -1 +0,0 @@ -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 deleted file mode 100644 index 9d3dcf4d69..0000000000 --- a/packages/storybook-addon-mocks/test-browser/mocks.test.js +++ /dev/null @@ -1,15 +0,0 @@ -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 deleted file mode 100644 index cde3780822..0000000000 --- a/packages/storybook-addon-mocks/test-browser/web-test-runner.config.js +++ /dev/null @@ -1,6 +0,0 @@ -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 deleted file mode 100644 index b2c630b638..0000000000 --- a/packages/storybook-addon-mocks/tsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "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 deleted file mode 100644 index 4135c65391..0000000000 --- a/packages/storybook-addon-mocks/types.ts +++ /dev/null @@ -1,16 +0,0 @@ -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 deleted file mode 100644 index 04c80fae25..0000000000 --- a/packages/storybook-addon-mocks/wc/.storybook/main.js +++ /dev/null @@ -1,9 +0,0 @@ -/** @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 deleted file mode 100644 index bbe537e18a..0000000000 --- a/packages/storybook-addon-mocks/wc/src/MyElement.js +++ /dev/null @@ -1,38 +0,0 @@ -// @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 deleted file mode 100644 index ef8c20698b..0000000000 --- a/packages/storybook-addon-mocks/wc/stories/my-element.stories.js +++ /dev/null @@ -1,32 +0,0 @@ -// @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 deleted file mode 100644 index 4e5fad893b..0000000000 --- a/packages/storybook-addon-mocks/wds-plugin.js +++ /dev/null @@ -1,19 +0,0 @@ -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-framework-web-components/tests/all-in-one.spec.js b/packages/storybook-framework-web-components/tests/all-in-one.spec.js index 2c96fc0e6a..f93b0d277a 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/storybook-addon-mocks panel', async () => { + test('renders @web/mocks/storybook-addon 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 69c4d9a17e..6249be3d66 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 @@ -7,7 +7,7 @@ const config = { '@storybook/addon-docs', '@storybook/addon-links', '@storybook/addon-a11y', - '@web/storybook-addon-mocks/storybook-addon', + '@web/mocks/storybook-addon', ], framework: { name: '@web/storybook-framework-web-components', From 83771e61c11a8d08c2dc96ca2dcd77d28505dd39 Mon Sep 17 00:00:00 2001 From: Mikhail Bashkirov Date: Fri, 27 Mar 2026 22:51:15 +0100 Subject: [PATCH 16/20] create and move addon from , clean up SB6 --- .changeset/shiny-sloths-drum.md | 5 +- package-lock.json | 278 ++++-------------- packages/mocks/README.md | 173 +---------- packages/mocks/demo/wc/.storybook/main.js | 9 - packages/mocks/demo/wc/src/MyElement.js | 36 --- .../demo/wc/stories/my-element.stories.js | 32 -- packages/mocks/package.json | 5 - packages/mocks/plugins.js | 1 - packages/mocks/rollup-plugin.js | 35 --- packages/mocks/storybook-addon/manager.js | 1 - packages/mocks/storybook-addon/preset.js | 19 -- packages/mocks/storybook-addon/preview.js | 3 - packages/mocks/storybook/addon.js | 9 - .../mocks/storybook/addon/create-decorator.js | 68 ----- packages/mocks/storybook/addon/decorator.js | 10 - packages/mocks/storybook/addon/manager.js | 9 - .../mocks/storybook/addon/register-addon.js | 252 ---------------- packages/mocks/storybook/decorator.js | 7 - packages/storybook-addon-mocks/CHANGELOG.md | 1 + packages/storybook-addon-mocks/README.md | 56 ++++ packages/storybook-addon-mocks/package.json | 39 +++ packages/storybook-addon-mocks/src/manager.js | 253 ++++++++++++++++ packages/storybook-addon-mocks/src/preset.js | 33 +++ packages/storybook-addon-mocks/src/preview.js | 69 +++++ .../tests/all-in-one.spec.js | 2 +- .../fixtures/all-in-one/.storybook/main.js | 2 +- 26 files changed, 515 insertions(+), 892 deletions(-) delete mode 100644 packages/mocks/demo/wc/.storybook/main.js delete mode 100644 packages/mocks/demo/wc/src/MyElement.js delete mode 100644 packages/mocks/demo/wc/stories/my-element.stories.js delete mode 100644 packages/mocks/storybook-addon/manager.js delete mode 100644 packages/mocks/storybook-addon/preset.js delete mode 100644 packages/mocks/storybook-addon/preview.js delete mode 100644 packages/mocks/storybook/addon.js delete mode 100644 packages/mocks/storybook/addon/create-decorator.js delete mode 100644 packages/mocks/storybook/addon/decorator.js delete mode 100644 packages/mocks/storybook/addon/manager.js delete mode 100644 packages/mocks/storybook/addon/register-addon.js delete mode 100644 packages/mocks/storybook/decorator.js create mode 100644 packages/storybook-addon-mocks/CHANGELOG.md create mode 100644 packages/storybook-addon-mocks/README.md create mode 100644 packages/storybook-addon-mocks/package.json create mode 100644 packages/storybook-addon-mocks/src/manager.js create mode 100644 packages/storybook-addon-mocks/src/preset.js create mode 100644 packages/storybook-addon-mocks/src/preview.js diff --git a/.changeset/shiny-sloths-drum.md b/.changeset/shiny-sloths-drum.md index 104b59dcec..d5ea95a40f 100644 --- a/.changeset/shiny-sloths-drum.md +++ b/.changeset/shiny-sloths-drum.md @@ -1,7 +1,8 @@ --- -'@web/storybook-framework-web-components': minor +'@web/storybook-addon-mocks': major '@web/storybook-builder': minor -'@web/storybook-utils': minor +'@web/storybook-framework-web-components': minor +'@web/storybook-utils': major --- Migrate projects to Storybook 9 diff --git a/package-lock.json b/package-lock.json index 6ce52a1d42..4b2308852f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3264,9 +3264,9 @@ } }, "node_modules/@lit-labs/ssr-dom-shim": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.1.1.tgz", - "integrity": "sha512-kXOeFbfCm4fFf2A3WwVEeQj55tMZa8c8/f9AKHMobQMkzNUfUj+antR3fRPaZJawsa1aZiP/Da3ndpZrwEe4rQ==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.5.1.tgz", + "integrity": "sha512-Aou5UdlSpr5whQe8AA/bZG0jMj96CoJIWbGfZ91qieWu5AWUMKw8VR/pAkQkJYvBNhmCcWnZlyyk5oze8JIqYA==", "license": "BSD-3-Clause" }, "node_modules/@lit/reactive-element": { @@ -5108,101 +5108,6 @@ "storybook": "^9.1.19" } }, - "node_modules/@storybook/core": { - "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.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", - "esbuild-register": "^3.5.0", - "jsdoc-type-pratt-parser": "^4.0.0", - "process": "^0.11.10", - "recast": "^0.23.5", - "semver": "^7.6.2", - "util": "^0.12.5", - "ws": "^8.2.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "prettier": "^2 || ^3" - }, - "peerDependenciesMeta": { - "prettier": { - "optional": true - } - } - }, - "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" - }, - "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": { - "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 - } - } - }, - "node_modules/@storybook/core/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", - "peer": true, - "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/@storybook/csf-plugin": { "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", @@ -6878,6 +6783,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 @@ -6886,12 +6795,6 @@ "resolved": "packages/storybook-framework-web-components", "link": true }, - "node_modules/@web/storybook-prebuilt": { - "version": "0.1.37", - "resolved": "https://registry.npmjs.org/@web/storybook-prebuilt/-/storybook-prebuilt-0.1.37.tgz", - "integrity": "sha512-je4BAbOJiEjQOkeFJfw+fnezKpU3fQW+5ZTiY24UGB1xPaZfU7ZMrC9tW6699vy/QRVJhiJyQrcIQ35OVSlCQA==", - "license": "MIT" - }, "node_modules/@web/storybook-utils": { "resolved": "packages/storybook-utils", "link": true @@ -9510,23 +9413,6 @@ "node": ">= 0.4" } }, - "node_modules/call-bound": { - "version": "1.0.4", - "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" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -17163,23 +17049,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/is-arguments": { - "version": "1.2.0", - "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" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-array-buffer": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", @@ -18128,16 +17997,6 @@ "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", "license": "MIT" }, - "node_modules/jsdoc-type-pratt-parser": { - "version": "4.8.0", - "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" - } - }, "node_modules/jsesc": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", @@ -32259,20 +32118,6 @@ "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==", "license": "MIT" }, - "node_modules/util": { - "version": "0.12.5", - "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", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "which-typed-array": "^1.1.2" - } - }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -35024,11 +34869,6 @@ "version": "1.3.2", "license": "MIT", "dependencies": { - "@storybook/manager-api": "^7.0.0 || ^8.0.0", - "@storybook/preview-api": "^7.0.0 || ^8.0.0", - "@web/storybook-prebuilt": "^0.1.37", - "@web/storybook-utils": "^1.1.1", - "lit": "^2.7.5 || ^3.0.0", "msw": "2.4.1" }, "devDependencies": { @@ -35052,32 +34892,6 @@ "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", @@ -35197,33 +35011,6 @@ "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", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -36001,6 +35788,57 @@ "@esbuild/win32-x64": "0.27.3" } }, + "packages/storybook-addon-mocks": { + "name": "@web/storybook-addon-mocks", + "version": "0.0.0", + "license": "MIT", + "dependencies": { + "@web/mocks": "^1.3.2", + "@web/storybook-utils": "^1.1.2", + "lit": "^3.3.2", + "storybook": "^9.1.19" + } + }, + "packages/storybook-addon-mocks/node_modules/@lit/reactive-element": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-2.1.2.tgz", + "integrity": "sha512-pbCDiVMnne1lYUIaYNN5wrwQXDtHaYtg7YEFPeW+hws6U47WeFvISGUWekPGKWOP1ygrs0ef0o1VJMk1exos5A==", + "license": "BSD-3-Clause", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.5.0" + } + }, + "packages/storybook-addon-mocks/node_modules/lit": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/lit/-/lit-3.3.2.tgz", + "integrity": "sha512-NF9zbsP79l4ao2SNrH3NkfmFgN/hBYSQo90saIVI1o5GpjAdCPVstVzO1MrLOakHoEhYkrtRjPK6Ob521aoYWQ==", + "license": "BSD-3-Clause", + "dependencies": { + "@lit/reactive-element": "^2.1.0", + "lit-element": "^4.2.0", + "lit-html": "^3.3.0" + } + }, + "packages/storybook-addon-mocks/node_modules/lit-element": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-4.2.2.tgz", + "integrity": "sha512-aFKhNToWxoyhkNDmWZwEva2SlQia+jfG0fjIWV//YeTaWrVnOxD89dPKfigCUspXFmjzOEUQpOkejH5Ly6sG0w==", + "license": "BSD-3-Clause", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.5.0", + "@lit/reactive-element": "^2.1.0", + "lit-html": "^3.3.0" + } + }, + "packages/storybook-addon-mocks/node_modules/lit-html": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.3.2.tgz", + "integrity": "sha512-Qy9hU88zcmaxBXcc10ZpdK7cOLXvXpRoBxERdtqV9QOrfpMZZ6pSYP91LhpPtap3sFMUiL7Tw2RImbe0Al2/kw==", + "license": "BSD-3-Clause", + "dependencies": { + "@types/trusted-types": "^2.0.2" + } + }, "packages/storybook-builder": { "name": "@web/storybook-builder", "version": "0.2.6", diff --git a/packages/mocks/README.md b/packages/mocks/README.md index 137c44bada..9336169e19 100644 --- a/packages/mocks/README.md +++ b/packages/mocks/README.md @@ -1,8 +1,6 @@ # @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). +[`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/). ## Defining mocks @@ -92,175 +90,6 @@ http.get('/api/foo', ({ request, cookies, params }) => { - `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/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/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 7+ (@web/storybook-builder) -+ addons: ['@web/mocks/storybook-addon'], - -+ // for Storybook 6 (@web/dev-server-storybook) -+ addons: ['@web/mocks/storybook/addon.js'], - rollupConfig: async config => { - const { mockRollupPlugin } = await import('@web/mocks/plugins.js'); - config.plugins.push(mockRollupPlugin()); - return config; - }, -}; -``` - -`feature-a/.storybook/preview.js`: - -```diff -+// for Storybook 7+ (@web/storybook-builder) -+// no need to do anything here - -+// for Storybook 6 (@web/dev-server-storybook) -+ import { withMocks } from '@web/mocks/storybook/decorator.js'; -+ export const decorators = [withMocks]; -``` - -`feature-a/stories/default.stories.js`: - -```js -import { html } from 'lit'; -import { http } from '@web/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. diff --git a/packages/mocks/demo/wc/.storybook/main.js b/packages/mocks/demo/wc/.storybook/main.js deleted file mode 100644 index 999d1e5c45..0000000000 --- a/packages/mocks/demo/wc/.storybook/main.js +++ /dev/null @@ -1,9 +0,0 @@ -/** @type { import('../../../../index.d.ts').StorybookConfig } */ -const config = { - stories: ['../stories/**/*.stories.js'], - addons: ['@web/mocks/storybook-addon'], - framework: { - name: '@web/storybook-framework-web-components', - }, -}; -export default config; diff --git a/packages/mocks/demo/wc/src/MyElement.js b/packages/mocks/demo/wc/src/MyElement.js deleted file mode 100644 index 38b3b15703..0000000000 --- a/packages/mocks/demo/wc/src/MyElement.js +++ /dev/null @@ -1,36 +0,0 @@ -// @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/mocks/demo/wc/stories/my-element.stories.js b/packages/mocks/demo/wc/stories/my-element.stories.js deleted file mode 100644 index ef8c20698b..0000000000 --- a/packages/mocks/demo/wc/stories/my-element.stories.js +++ /dev/null @@ -1,32 +0,0 @@ -// @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/mocks/package.json b/packages/mocks/package.json index 5223422281..3e181bc639 100644 --- a/packages/mocks/package.json +++ b/packages/mocks/package.json @@ -64,11 +64,6 @@ "msw" ], "dependencies": { - "@storybook/manager-api": "^7.0.0 || ^8.0.0", - "@storybook/preview-api": "^7.0.0 || ^8.0.0", - "@web/storybook-prebuilt": "^0.1.37", - "@web/storybook-utils": "^1.1.1", - "lit": "^2.7.5 || ^3.0.0", "msw": "2.4.1" }, "devDependencies": { diff --git a/packages/mocks/plugins.js b/packages/mocks/plugins.js index 83f1c381d7..24f778aa21 100644 --- a/packages/mocks/plugins.js +++ b/packages/mocks/plugins.js @@ -1,2 +1 @@ -export { mockRollupPlugin } from './rollup-plugin.js'; export { mockPlugin } from './wds-plugin.js'; diff --git a/packages/mocks/rollup-plugin.js b/packages/mocks/rollup-plugin.js index e7e6c4577e..e69de29bb2 100644 --- a/packages/mocks/rollup-plugin.js +++ b/packages/mocks/rollup-plugin.js @@ -1,35 +0,0 @@ -// @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/mocks/storybook-addon/manager.js b/packages/mocks/storybook-addon/manager.js deleted file mode 100644 index 1aa2d862d2..0000000000 --- a/packages/mocks/storybook-addon/manager.js +++ /dev/null @@ -1 +0,0 @@ -import '../storybook/addon/manager.js'; diff --git a/packages/mocks/storybook-addon/preset.js b/packages/mocks/storybook-addon/preset.js deleted file mode 100644 index e3f05ba102..0000000000 --- a/packages/mocks/storybook-addon/preset.js +++ /dev/null @@ -1,19 +0,0 @@ -/** - * @param {import('@web/dev-server').DevServerConfig} config - */ -export async function wdsFinal(config) { - const { mockPlugin } = await import('@web/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/mocks/plugins.js'); - // @ts-expect-error - config.plugins.push(mockRollupPlugin()); - return config; -} diff --git a/packages/mocks/storybook-addon/preview.js b/packages/mocks/storybook-addon/preview.js deleted file mode 100644 index 8b46e507fe..0000000000 --- a/packages/mocks/storybook-addon/preview.js +++ /dev/null @@ -1,3 +0,0 @@ -import { withMocks } from '../storybook/addon/decorator.js'; - -export const decorators = [withMocks]; diff --git a/packages/mocks/storybook/addon.js b/packages/mocks/storybook/addon.js deleted file mode 100644 index 0a17f75175..0000000000 --- a/packages/mocks/storybook/addon.js +++ /dev/null @@ -1,9 +0,0 @@ -// @ts-nocheck - -import { createAddon } from '@web/storybook-prebuilt/create-addon.js'; -import { React } from '@web/storybook-prebuilt/manager.js'; -import { addons, types } from '@web/storybook-prebuilt/addons.js'; -import { registerAddon } from './addon/register-addon.js'; - -// Storybook 6 -registerAddon(addons, types, React, createAddon); diff --git a/packages/mocks/storybook/addon/create-decorator.js b/packages/mocks/storybook/addon/create-decorator.js deleted file mode 100644 index df6d61d5ad..0000000000 --- a/packages/mocks/storybook/addon/create-decorator.js +++ /dev/null @@ -1,68 +0,0 @@ -// @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/mocks/storybook/addon/decorator.js b/packages/mocks/storybook/addon/decorator.js deleted file mode 100644 index e860dc4c89..0000000000 --- a/packages/mocks/storybook/addon/decorator.js +++ /dev/null @@ -1,10 +0,0 @@ -// @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/mocks/storybook/addon/manager.js b/packages/mocks/storybook/addon/manager.js deleted file mode 100644 index 199843a47c..0000000000 --- a/packages/mocks/storybook/addon/manager.js +++ /dev/null @@ -1,9 +0,0 @@ -// @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/mocks/storybook/addon/register-addon.js b/packages/mocks/storybook/addon/register-addon.js deleted file mode 100644 index 4d74cb23d7..0000000000 --- a/packages/mocks/storybook/addon/register-addon.js +++ /dev/null @@ -1,252 +0,0 @@ -// @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/mocks/storybook/decorator.js b/packages/mocks/storybook/decorator.js deleted file mode 100644 index 7f8496a020..0000000000 --- a/packages/mocks/storybook/decorator.js +++ /dev/null @@ -1,7 +0,0 @@ -// @ts-nocheck - -import { addons, makeDecorator } from '@web/storybook-prebuilt/addons'; -import { createDecorator } from './addon/create-decorator.js'; - -// Storybook 6 -export const withMocks = createDecorator(addons, makeDecorator); 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..e9aa09738a --- /dev/null +++ b/packages/storybook-addon-mocks/README.md @@ -0,0 +1,56 @@ +# @web/storybook-addon-mocks + +Storybook addon for `@web/mocks`. + +## Setup addon + +Add `@web/storybook-addon-mocks` to addons in the main Storybook configuration file: + +```js +// .storybook/main.js +/** @type { import('@web/storybook-framework-web-components').StorybookConfig } */ +const config = { + addons: ['@web/storybook-addon-mocks'], + framework: { + name: '@web/storybook-framework-web-components', + }, +}; +export default config; +``` + +## Add mocks to stories + +Add `mocks` to story `parameters`: + +```js +// stories/feature-a.stories.js +import { html } from 'lit'; +import { http } from '@web/mocks/http.js'; +import mocks from '../demo/mocks.js'; + +export const Default = { + render: () => html``, + parameters: { + mocks: mocks.default, + + // or + + mocks: [ + mocks.default, + 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' }); + }), + ], + }, +}; +``` diff --git a/packages/storybook-addon-mocks/package.json b/packages/storybook-addon-mocks/package.json new file mode 100644 index 0000000000..e03f702bb7 --- /dev/null +++ b/packages/storybook-addon-mocks/package.json @@ -0,0 +1,39 @@ +{ + "name": "@web/storybook-addon-mocks", + "version": "0.0.0", + "publishConfig": { + "access": "public" + }, + "description": "Storybook addon for `@web/mocks`", + "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": { + "./manager": "./src/manager.js", + "./preset": "./src/preset.js", + "./preview": "./src/preview.js" + }, + "files": [ + "CHANGELOG.md", + "src/*.js", + "README.md" + ], + "keywords": [ + "storybook", + "addon", + "mocks", + "msw" + ], + "dependencies": { + "@web/mocks": "^1.3.2", + "@web/storybook-utils": "^1.1.2", + "lit": "^3.3.2", + "storybook": "^9.1.19" + } +} diff --git a/packages/storybook-addon-mocks/src/manager.js b/packages/storybook-addon-mocks/src/manager.js new file mode 100644 index 0000000000..e7f2587946 --- /dev/null +++ b/packages/storybook-addon-mocks/src/manager.js @@ -0,0 +1,253 @@ +// @ts-nocheck + +import { createAddon } from '@web/storybook-utils'; +import React from 'react'; +import { LitElement, html, css } from 'lit'; +import { when } from 'lit/directives/when.js'; +import { addons, types } from 'storybook/manager-api'; + +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/src/preset.js b/packages/storybook-addon-mocks/src/preset.js new file mode 100644 index 0000000000..d4e656ffc6 --- /dev/null +++ b/packages/storybook-addon-mocks/src/preset.js @@ -0,0 +1,33 @@ +// @ts-nocheck + +import fs from 'node:fs'; +import { createRequire } from 'node:module'; +import path from 'node:path'; + +/** + * @param {import('@web/dev-server').DevServerConfig} config + */ +export async function wdsFinal(config) { + const { mockPlugin } = await import('@web/mocks/plugins.js'); + // @ts-expect-error + config.plugins.push(mockPlugin()); + return config; +} + +/** + * @param {import('rollup').RollupOptions} config + */ +export async function rollupFinal(config) { + const require = createRequire(import.meta.url); + // @ts-expect-error + config.plugins.push({ + 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); + }, + }); + return config; +} diff --git a/packages/storybook-addon-mocks/src/preview.js b/packages/storybook-addon-mocks/src/preview.js new file mode 100644 index 0000000000..0d54a9ba44 --- /dev/null +++ b/packages/storybook-addon-mocks/src/preview.js @@ -0,0 +1,69 @@ +// @ts-nocheck + +import { registerMockRoutes } from '@web/mocks/browser.js'; +import { addons, makeDecorator } from 'storybook/preview-api'; + +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}`); + } +} + +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; +}); + +const withMocks = 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); + }, +}); + +export const decorators = [withMocks]; 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 6249be3d66..149c38fb42 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 @@ -7,7 +7,7 @@ const config = { '@storybook/addon-docs', '@storybook/addon-links', '@storybook/addon-a11y', - '@web/mocks/storybook-addon', + '@web/storybook-addon-mocks', ], framework: { name: '@web/storybook-framework-web-components', From 1802b83dc34dceffb878e48361b24aa3f66c2d45 Mon Sep 17 00:00:00 2001 From: Mikhail Bashkirov Date: Fri, 27 Mar 2026 22:57:02 +0100 Subject: [PATCH 17/20] fix registry --- package-lock.json | 108 +++++++++++++++++++++++----------------------- 1 file changed, 54 insertions(+), 54 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4b2308852f..f68a6f2af3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -309,7 +309,7 @@ }, "node_modules/@adobe/css-tools": { "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", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.4.tgz", "integrity": "sha1-KFbFVEPT1GFpPzLSuW+26pLh/6k=", "license": "MIT" }, @@ -2957,7 +2957,7 @@ }, "node_modules/@inquirer/figures": { "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", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.15.tgz", "integrity": "sha1-27Se2A3xHfdCaAI7SWrF2azSKzo=", "license": "MIT", "engines": { @@ -3405,7 +3405,7 @@ }, "node_modules/@mdx-js/react": { "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", + "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.1.1.tgz", "integrity": "sha1-JL2n//zrL+JW+VRIISPNob5fX+8=", "dev": true, "license": "MIT", @@ -5087,7 +5087,7 @@ }, "node_modules/@storybook/addon-docs": { "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", + "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-9.1.19.tgz", "integrity": "sha1-6yWOiY+k5PYeJeiHI5CqUmDkCps=", "dev": true, "license": "MIT", @@ -5110,7 +5110,7 @@ }, "node_modules/@storybook/csf-plugin": { "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", + "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-9.1.19.tgz", "integrity": "sha1-SwT+RU4KdzdSvlRK2wDRdWWkxv8=", "dev": true, "license": "MIT", @@ -5133,7 +5133,7 @@ }, "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", + "resolved": "https://registry.npmjs.org/@storybook/icons/-/icons-1.6.0.tgz", "integrity": "sha1-n6brnIKSK3n3Wiz4PDivMLp/1pY=", "dev": true, "license": "MIT", @@ -5147,7 +5147,7 @@ }, "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", + "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-9.1.19.tgz", "integrity": "sha1-USAOttvSMdAFn6hKPDoAH3Uucd8=", "dev": true, "license": "MIT", @@ -5163,7 +5163,7 @@ }, "node_modules/@storybook/web-components": { "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", + "resolved": "https://registry.npmjs.org/@storybook/web-components/-/web-components-9.1.19.tgz", "integrity": "sha1-HaWA8KuYNeanKzYN4iHqthqSDd0=", "license": "MIT", "dependencies": { @@ -5234,7 +5234,7 @@ }, "node_modules/@testing-library/dom": { "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", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.1.tgz", "integrity": "sha1-1ET4qInppG6aO087iOD8s++2z5U=", "license": "MIT", "peer": true, @@ -5254,7 +5254,7 @@ }, "node_modules/@testing-library/jest-dom": { "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", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.9.1.tgz", "integrity": "sha1-dhOgThRt0pdtJN3wGXMNV6idVsI=", "license": "MIT", "dependencies": { @@ -5273,13 +5273,13 @@ }, "node_modules/@testing-library/jest-dom/node_modules/dom-accessibility-api": { "version": "0.6.3", - "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz", "integrity": "sha1-mT6SXMHXPyxmLn113VpURSWaj9g=", "license": "MIT" }, "node_modules/@testing-library/user-event": { "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", + "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.6.1.tgz", "integrity": "sha1-E+CaMteotwYP44MEeI6/QZfNIUk=", "license": "MIT", "engines": { @@ -5354,7 +5354,7 @@ }, "node_modules/@types/aria-query": { "version": "5.0.4", - "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/@types/aria-query/-/aria-query-5.0.4.tgz", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", "integrity": "sha1-GjHD03iFDSd42rtjdNA23LpLpwg=", "license": "MIT", "peer": true @@ -5581,7 +5581,7 @@ }, "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", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", "integrity": "sha1-M0MRlx06BxIefrkbaEpgXn7qnL0=", "license": "MIT" }, @@ -5967,7 +5967,7 @@ }, "node_modules/@types/react": { "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", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.14.tgz", "integrity": "sha1-OWBJKbXjlX46b6AAHa+xfHr3C60=", "dev": true, "license": "MIT", @@ -6343,7 +6343,7 @@ }, "node_modules/@vitest/expect": { "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", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.4.tgz", "integrity": "sha1-g2ISTNgRpe4RxXaCB7nfU9NPJDM=", "license": "MIT", "dependencies": { @@ -6359,7 +6359,7 @@ }, "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", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", "integrity": "sha1-jpzZ4cNYH6azQaWu1ViOsoW+C0o=", "license": "MIT", "dependencies": { @@ -6369,7 +6369,7 @@ }, "node_modules/@vitest/expect/node_modules/assertion-error": { "version": "2.0.1", - "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/assertion-error/-/assertion-error-2.0.1.tgz", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", "integrity": "sha1-9kGhlrM1aQsQcL8AtudZP+wZC/c=", "license": "MIT", "engines": { @@ -6378,7 +6378,7 @@ }, "node_modules/@vitest/expect/node_modules/chai": { "version": "5.3.3", - "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/chai/-/chai-5.3.3.tgz", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.3.tgz", "integrity": "sha1-3T2pVeJwkWpL0/Yl9LkZmWrafgY=", "license": "MIT", "dependencies": { @@ -6394,7 +6394,7 @@ }, "node_modules/@vitest/expect/node_modules/check-error": { "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", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.3.tgz", "integrity": "sha1-JCc2ERe3DMqNyJaA6tMrFXAZyvU=", "license": "MIT", "engines": { @@ -6403,7 +6403,7 @@ }, "node_modules/@vitest/expect/node_modules/deep-eql": { "version": "5.0.2", - "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/deep-eql/-/deep-eql-5.0.2.tgz", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", "integrity": "sha1-S3VtjXcKklcwCCXVKiws/5nDo0E=", "license": "MIT", "engines": { @@ -6412,13 +6412,13 @@ }, "node_modules/@vitest/expect/node_modules/loupe": { "version": "3.2.1", - "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/loupe/-/loupe-3.2.1.tgz", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.1.tgz", "integrity": "sha1-AJXPVtxbepp8CP9bGoeW7IrRfnY=", "license": "MIT" }, "node_modules/@vitest/expect/node_modules/pathval": { "version": "2.0.1", - "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/pathval/-/pathval-2.0.1.tgz", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.1.tgz", "integrity": "sha1-iFXFooma8HLWrAXRHkYEWtDcYF0=", "license": "MIT", "engines": { @@ -6427,7 +6427,7 @@ }, "node_modules/@vitest/pretty-format": { "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", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.4.tgz", "integrity": "sha1-PBAveegrIEomx6WSG/R9U0kZ07Q=", "license": "MIT", "dependencies": { @@ -6439,7 +6439,7 @@ }, "node_modules/@vitest/spy": { "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", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.4.tgz", "integrity": "sha1-zBjyb0Dz8CjaZiAEaIH05FGMJZk=", "license": "MIT", "dependencies": { @@ -6451,7 +6451,7 @@ }, "node_modules/@vitest/utils": { "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", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.4.tgz", "integrity": "sha1-wIE7xC2ZUn+4xbE4x6iFFrykb+o=", "license": "MIT", "dependencies": { @@ -6465,7 +6465,7 @@ }, "node_modules/@vitest/utils/node_modules/loupe": { "version": "3.2.1", - "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/loupe/-/loupe-3.2.1.tgz", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.1.tgz", "integrity": "sha1-AJXPVtxbepp8CP9bGoeW7IrRfnY=", "license": "MIT" }, @@ -10249,7 +10249,7 @@ }, "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", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", "integrity": "sha1-QtqsQdPCVO84rYrAN2chMBc2kcU=", "license": "ISC", "engines": { @@ -11288,7 +11288,7 @@ }, "node_modules/css.escape": { "version": "1.5.1", - "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/css.escape/-/css.escape-1.5.1.tgz", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", "integrity": "sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s=", "license": "MIT" }, @@ -11409,7 +11409,7 @@ }, "node_modules/csstype": { "version": "3.2.3", - "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/csstype/-/csstype-3.2.3.tgz", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", "integrity": "sha1-7EjA8+mT5QZIyG2lWeJhCZXPmJo=", "dev": true, "license": "MIT", @@ -11918,7 +11918,7 @@ }, "node_modules/dom-accessibility-api": { "version": "0.5.16", - "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", "integrity": "sha1-WnQp5gZus2ZNkR4z+w5F3o6whFM=", "license": "MIT", "peer": true @@ -16894,7 +16894,7 @@ }, "node_modules/indent-string": { "version": "4.0.0", - "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/indent-string/-/indent-string-4.0.0.tgz", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", "integrity": "sha1-Yk+PRJfWGbLZdoUx1Y9BIoVNclE=", "license": "MIT", "engines": { @@ -19552,7 +19552,7 @@ }, "node_modules/lz-string": { "version": "1.5.0", - "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/lz-string/-/lz-string-1.5.0.tgz", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", "integrity": "sha1-watQ93iHtxJiEgG6n9Tjpu0JmUE=", "license": "MIT", "peer": true, @@ -22341,7 +22341,7 @@ }, "node_modules/outvariant": { "version": "1.4.3", - "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/outvariant/-/outvariant-1.4.3.tgz", + "resolved": "https://registry.npmjs.org/outvariant/-/outvariant-1.4.3.tgz", "integrity": "sha1-Ihwb/Ak+j+xwdUl+d5n9v0PRSHM=", "license": "MIT" }, @@ -24018,7 +24018,7 @@ }, "node_modules/pretty-format": { "version": "27.5.1", - "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/pretty-format/-/pretty-format-27.5.1.tgz", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", "integrity": "sha1-IYGHn96lGnpYUfs52SD6pj8B2I4=", "license": "MIT", "peer": true, @@ -24033,7 +24033,7 @@ }, "node_modules/pretty-format/node_modules/ansi-styles": { "version": "5.2.0", - "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/ansi-styles/-/ansi-styles-5.2.0.tgz", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha1-B0SWkK1Fd30ZJKwquy/IiV26g2s=", "license": "MIT", "peer": true, @@ -24771,7 +24771,7 @@ }, "node_modules/react": { "version": "19.2.4", - "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/react/-/react-19.2.4.tgz", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz", "integrity": "sha1-Q45XuqGbd8sjqrUWz2Nc0Fee4Jo=", "dev": true, "license": "MIT", @@ -24781,7 +24781,7 @@ }, "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", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.4.tgz", "integrity": "sha1-b6xr2W99tHfZZsfsF8Gisa2OZZE=", "dev": true, "license": "MIT", @@ -24794,7 +24794,7 @@ }, "node_modules/react-is": { "version": "17.0.2", - "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/react-is/-/react-is-17.0.2.tgz", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", "integrity": "sha1-5pHUqOnHiTZWVVOas3J2Kw77VPA=", "license": "MIT", "peer": true @@ -25477,7 +25477,7 @@ }, "node_modules/redent": { "version": "3.0.0", - "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/redent/-/redent-3.0.0.tgz", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", "integrity": "sha1-5Ve3mYMWu1PJ8fVvpiY1LGljBZ8=", "license": "MIT", "dependencies": { @@ -28385,7 +28385,7 @@ }, "node_modules/scheduler": { "version": "0.27.0", - "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/scheduler/-/scheduler-0.27.0.tgz", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", "integrity": "sha1-DE74LWfR5cHjWej8dtOofwRf5b0=", "dev": true, "license": "MIT" @@ -29916,7 +29916,7 @@ }, "node_modules/storybook": { "version": "9.1.19", - "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/storybook/-/storybook-9.1.19.tgz", + "resolved": "https://registry.npmjs.org/storybook/-/storybook-9.1.19.tgz", "integrity": "sha1-ULd1BTTIxh+TTZwh/m2QTaaMfVQ=", "license": "MIT", "dependencies": { @@ -29951,7 +29951,7 @@ }, "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", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.4.tgz", "integrity": "sha1-RHHE771i2w1PogPmXMawWKhcq9M=", "license": "MIT", "dependencies": { @@ -29977,7 +29977,7 @@ }, "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", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", "integrity": "sha1-Z8PlSexAKkh7T8GT0ZU6UkdSNA0=", "license": "MIT", "dependencies": { @@ -29986,7 +29986,7 @@ }, "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", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz", "integrity": "sha1-3cK9+lua2GAgT1pypIY6iJX9jIs=", "license": "MIT", "engines": { @@ -30350,7 +30350,7 @@ }, "node_modules/strip-indent": { "version": "3.0.0", - "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/strip-indent/-/strip-indent-3.0.0.tgz", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", "integrity": "sha1-wy4c7pQLazQyx3G8LFS8znPNMAE=", "license": "MIT", "dependencies": { @@ -30852,7 +30852,7 @@ }, "node_modules/tinyrainbow": { "version": "2.0.0", - "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/tinyrainbow/-/tinyrainbow-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz", "integrity": "sha1-lQmyFiQ2MV6A4+7g/M5EdNJEQpQ=", "license": "MIT", "engines": { @@ -30861,7 +30861,7 @@ }, "node_modules/tinyspy": { "version": "4.0.4", - "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/tinyspy/-/tinyspy-4.0.4.tgz", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-4.0.4.tgz", "integrity": "sha1-13oAL7U6iKoUKbQZwckkkuDIH3g=", "license": "MIT", "engines": { @@ -31952,7 +31952,7 @@ }, "node_modules/unplugin": { "version": "1.16.1", - "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/unplugin/-/unplugin-1.16.1.tgz", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.16.1.tgz", "integrity": "sha1-qETS48OxSkrClFxCvoBAkyG2EZk=", "dev": true, "license": "MIT", @@ -32539,7 +32539,7 @@ }, "node_modules/webpack-virtual-modules": { "version": "0.6.2", - "resolved": "https://pkgs.dev.azure.com/INGCDaaS/IngOne/_packaging/central-npm-feed/npm/registry/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz", "integrity": "sha1-BX+qkGXIrPSPJMtXrA53c5q5p+g=", "dev": true, "license": "MIT" @@ -33850,7 +33850,7 @@ }, "node_modules/yoctocolors-cjs": { "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", + "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz", "integrity": "sha1-fklk6o7EIrekCskX06NEz9IwS6o=", "license": "MIT", "engines": { @@ -35007,7 +35007,7 @@ }, "packages/mocks/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", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", "integrity": "sha1-K2omozdzeo4UFvknLtB2axwDifQ=", "license": "MIT" }, @@ -37748,7 +37748,7 @@ }, "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", + "resolved": "https://registry.npmjs.org/@storybook/addon-a11y/-/addon-a11y-9.1.19.tgz", "integrity": "sha1-ARkNzGifcoj1OqOoelL24mJesoI=", "dev": true, "license": "MIT", @@ -37766,7 +37766,7 @@ }, "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", + "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-9.1.19.tgz", "integrity": "sha1-TsQ2Wm3dqJys09ZpT3jvVaGKABo=", "dev": true, "license": "MIT", From c3056aa7af1e7744ff123388e105c7bb7d01d441 Mon Sep 17 00:00:00 2001 From: Mikhail Bashkirov Date: Fri, 27 Mar 2026 23:11:54 +0100 Subject: [PATCH 18/20] update storybook, deps of msw and all integrity to sha512 --- .../migration-to-storybook-9.md | 4 +- package-lock.json | 921 +++++++++--------- packages/storybook-addon-mocks/package.json | 2 +- packages/storybook-builder/package.json | 2 +- .../package.json | 10 +- packages/storybook-utils/package.json | 2 +- 6 files changed, 489 insertions(+), 452 deletions(-) diff --git a/docs/docs/storybook-builder/migration-to-storybook-9.md b/docs/docs/storybook-builder/migration-to-storybook-9.md index 771057348c..e2c70cd40f 100644 --- a/docs/docs/storybook-builder/migration-to-storybook-9.md +++ b/docs/docs/storybook-builder/migration-to-storybook-9.md @@ -2,12 +2,12 @@ ## 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`. +`@web/storybook-builder` for Storybook 9 is released as version `0.3.x` and expects all Storybook packages to be at least `9.1.20`. 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` +- update dependencies under the namespace `@storybook/*` and the `storybook` itself to `^9.1.20` ## General migration guide diff --git a/package-lock.json b/package-lock.json index f68a6f2af3..b750a75985 100644 --- a/package-lock.json +++ b/package-lock.json @@ -310,7 +310,7 @@ "node_modules/@adobe/css-tools": { "version": "4.4.4", "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.4.tgz", - "integrity": "sha1-KFbFVEPT1GFpPzLSuW+26pLh/6k=", + "integrity": "sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg==", "license": "MIT" }, "node_modules/@ampproject/remapping": { @@ -1991,6 +1991,7 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/@bundled-es-modules/tough-cookie/-/tough-cookie-0.1.6.tgz", "integrity": "sha512-dvMHbL464C0zI+Yqxbz6kZ5TOEp7GLW+pry/RWndAR8MJQAXZ2rPmIs8tziTZjeIyhSNZgZbCePtfSbdWqStJw==", + "license": "ISC", "dependencies": { "@types/tough-cookie": "^4.0.5", "tough-cookie": "^4.1.4" @@ -2256,9 +2257,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.0.tgz", - "integrity": "sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", + "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", "cpu": [ "ppc64" ], @@ -2272,9 +2273,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.0.tgz", - "integrity": "sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", + "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", "cpu": [ "arm" ], @@ -2288,9 +2289,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.0.tgz", - "integrity": "sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", + "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", "cpu": [ "arm64" ], @@ -2304,9 +2305,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.0.tgz", - "integrity": "sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", + "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", "cpu": [ "x64" ], @@ -2320,9 +2321,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.0.tgz", - "integrity": "sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", + "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", "cpu": [ "arm64" ], @@ -2336,9 +2337,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.0.tgz", - "integrity": "sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", + "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", "cpu": [ "x64" ], @@ -2352,9 +2353,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.0.tgz", - "integrity": "sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", + "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", "cpu": [ "arm64" ], @@ -2368,9 +2369,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.0.tgz", - "integrity": "sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", + "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", "cpu": [ "x64" ], @@ -2384,9 +2385,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.0.tgz", - "integrity": "sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", + "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", "cpu": [ "arm" ], @@ -2400,9 +2401,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.0.tgz", - "integrity": "sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", + "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", "cpu": [ "arm64" ], @@ -2416,9 +2417,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.0.tgz", - "integrity": "sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", + "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", "cpu": [ "ia32" ], @@ -2432,9 +2433,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.0.tgz", - "integrity": "sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", + "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", "cpu": [ "loong64" ], @@ -2448,9 +2449,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.0.tgz", - "integrity": "sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", + "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", "cpu": [ "mips64el" ], @@ -2464,9 +2465,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.0.tgz", - "integrity": "sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", + "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", "cpu": [ "ppc64" ], @@ -2480,9 +2481,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.0.tgz", - "integrity": "sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", + "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", "cpu": [ "riscv64" ], @@ -2496,9 +2497,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.0.tgz", - "integrity": "sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", + "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", "cpu": [ "s390x" ], @@ -2512,9 +2513,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.0.tgz", - "integrity": "sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", + "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", "cpu": [ "x64" ], @@ -2528,9 +2529,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.0.tgz", - "integrity": "sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", + "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", "cpu": [ "arm64" ], @@ -2544,9 +2545,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.0.tgz", - "integrity": "sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", + "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", "cpu": [ "x64" ], @@ -2560,9 +2561,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.0.tgz", - "integrity": "sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", + "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", "cpu": [ "arm64" ], @@ -2576,9 +2577,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.0.tgz", - "integrity": "sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", + "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", "cpu": [ "x64" ], @@ -2608,9 +2609,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.0.tgz", - "integrity": "sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", + "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", "cpu": [ "x64" ], @@ -2624,9 +2625,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.0.tgz", - "integrity": "sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", + "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", "cpu": [ "arm64" ], @@ -2640,9 +2641,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.0.tgz", - "integrity": "sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", + "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", "cpu": [ "ia32" ], @@ -2656,9 +2657,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.0.tgz", - "integrity": "sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", + "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", "cpu": [ "x64" ], @@ -2836,6 +2837,7 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-3.2.0.tgz", "integrity": "sha512-oOIwPs0Dvq5220Z8lGL/6LHRTEr9TgLHmiI99Rj1PJ1p1czTys+olrgBqZk4E2qC0YTzeHprxSQmoHioVdJ7Lw==", + "license": "MIT", "dependencies": { "@inquirer/core": "^9.1.0", "@inquirer/type": "^1.5.3" @@ -2845,17 +2847,17 @@ } }, "node_modules/@inquirer/core": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-9.1.0.tgz", - "integrity": "sha512-RZVfH//2ytTjmaBIzeKT1zefcQZzuruwkpTwwbe/i2jTl4o9M+iML5ChULzz6iw1Ok8iUBBsRCjY2IEbD8Ft4w==", + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-9.2.1.tgz", + "integrity": "sha512-F2VBt7W/mwqEU4bL0RnHNZmC/OxzNx9cOYxHqnXX3MP6ruYvZUZAW9imgN9+h/uBT/oP8Gh888J2OZSbjSeWcg==", + "license": "MIT", "dependencies": { - "@inquirer/figures": "^1.0.5", - "@inquirer/type": "^1.5.3", + "@inquirer/figures": "^1.0.6", + "@inquirer/type": "^2.0.0", "@types/mute-stream": "^0.0.4", - "@types/node": "^22.5.2", + "@types/node": "^22.5.5", "@types/wrap-ansi": "^3.0.0", "ansi-escapes": "^4.3.2", - "cli-spinners": "^2.9.2", "cli-width": "^4.1.0", "mute-stream": "^1.0.0", "signal-exit": "^4.1.0", @@ -2867,10 +2869,23 @@ "node": ">=18" } }, + "node_modules/@inquirer/core/node_modules/@inquirer/type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-2.0.0.tgz", + "integrity": "sha512-XvJRx+2KR3YXyYtPUUy+qd9i7p+GO9Ko6VIIpWlBrpWwXDv8WLFeHTxz35CfQFUiBMLXlGHhGzys7lqit9gWag==", + "license": "MIT", + "dependencies": { + "mute-stream": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/@inquirer/core/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==", + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -2885,6 +2900,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -2895,33 +2911,29 @@ "node_modules/@inquirer/core/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==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" }, "node_modules/@inquirer/core/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" }, "node_modules/@inquirer/core/node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/@inquirer/core/node_modules/mute-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", - "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, "node_modules/@inquirer/core/node_modules/signal-exit": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", "engines": { "node": ">=14" }, @@ -2933,6 +2945,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -2946,6 +2959,7 @@ "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -2958,16 +2972,17 @@ "node_modules/@inquirer/figures": { "version": "1.0.15", "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.15.tgz", - "integrity": "sha1-27Se2A3xHfdCaAI7SWrF2azSKzo=", + "integrity": "sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==", "license": "MIT", "engines": { "node": ">=18" } }, "node_modules/@inquirer/type": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-1.5.3.tgz", - "integrity": "sha512-xUQ14WQGR/HK5ei+2CvgcwoH9fQ4PgPGmVFSN0pc1+fVyDL3MREhyAY7nxEErSu6CkllBM3D7e3e+kOvtu+eIg==", + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-1.5.5.tgz", + "integrity": "sha512-MzICLu4yS7V8AA61sANROZ9vT1H3ooca5dSmI1FjZkzq7o/koMsRfQSzRtFo+F3Ao4Sf1C0bpLKejpKB/+j6MA==", + "license": "MIT", "dependencies": { "mute-stream": "^1.0.0" }, @@ -2975,14 +2990,6 @@ "node": ">=18" } }, - "node_modules/@inquirer/type/node_modules/mute-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", - "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, "node_modules/@isaacs/balanced-match": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", @@ -3406,7 +3413,7 @@ "node_modules/@mdx-js/react": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.1.1.tgz", - "integrity": "sha1-JL2n//zrL+JW+VRIISPNob5fX+8=", + "integrity": "sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw==", "dev": true, "license": "MIT", "dependencies": { @@ -3421,6 +3428,23 @@ "react": ">=16" } }, + "node_modules/@mswjs/interceptors": { + "version": "0.29.1", + "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.29.1.tgz", + "integrity": "sha512-3rDakgJZ77+RiQUuSK69t1F0m8BQKA8Vh5DCS5V0DWvNY67zob2JhhQrhCO0AKLGINTRSFd1tBaHcJTkhefoSw==", + "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", @@ -3590,7 +3614,8 @@ "node_modules/@open-draft/deferred-promise": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/@open-draft/deferred-promise/-/deferred-promise-2.2.0.tgz", - "integrity": "sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==" + "integrity": "sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==", + "license": "MIT" }, "node_modules/@open-draft/logger": { "version": "0.3.0", @@ -5085,17 +5110,35 @@ "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==", "license": "MIT" }, + "node_modules/@storybook/addon-a11y": { + "version": "9.1.20", + "resolved": "https://registry.npmjs.org/@storybook/addon-a11y/-/addon-a11y-9.1.20.tgz", + "integrity": "sha512-VFZ34y4ApmFwIzPRs2OJrG6jtYhM5y91eCZLTlR/HMGQciKF4TdOJHjj+5vf91SOER5UDcLizXetpiUowiZSgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@storybook/global": "^5.0.0", + "axe-core": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "storybook": "^9.1.20" + } + }, "node_modules/@storybook/addon-docs": { - "version": "9.1.19", - "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-9.1.19.tgz", - "integrity": "sha1-6yWOiY+k5PYeJeiHI5CqUmDkCps=", + "version": "9.1.20", + "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-9.1.20.tgz", + "integrity": "sha512-eUIOd4u/p9994Nkv8Avn6r/xmS7D+RNmhmu6KGROefN3myLe3JfhSdimal2wDFe/h/OUNZ/LVVKMZrya9oEfKQ==", "dev": true, "license": "MIT", "dependencies": { "@mdx-js/react": "^3.0.0", - "@storybook/csf-plugin": "9.1.19", + "@storybook/csf-plugin": "9.1.20", "@storybook/icons": "^1.4.0", - "@storybook/react-dom-shim": "9.1.19", + "@storybook/react-dom-shim": "9.1.20", "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" @@ -5105,13 +5148,36 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^9.1.19" + "storybook": "^9.1.20" + } + }, + "node_modules/@storybook/addon-links": { + "version": "9.1.20", + "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-9.1.20.tgz", + "integrity": "sha512-/fFOqTZQ0Q5JmSAVlyfEFRa0W3hAh2u7kg+OQRLVxvNZVVuW50mOxE3853tAqisw9UX8TOCN6ZflFBeeoGLYfg==", + "dev": true, + "license": "MIT", + "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", + "storybook": "^9.1.20" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + } } }, "node_modules/@storybook/csf-plugin": { - "version": "9.1.19", - "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-9.1.19.tgz", - "integrity": "sha1-SwT+RU4KdzdSvlRK2wDRdWWkxv8=", + "version": "9.1.20", + "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-9.1.20.tgz", + "integrity": "sha512-HHgk50YQhML7mT01Mzf9N7lNMFHWN4HwwRP90kPT9Ct+Jhx7h3LBDbdmWjI96HwujcpY7eoYdTfpB1Sw8Z7nBQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5122,7 +5188,7 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^9.1.19" + "storybook": "^9.1.20" } }, "node_modules/@storybook/global": { @@ -5134,7 +5200,7 @@ "node_modules/@storybook/icons": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/@storybook/icons/-/icons-1.6.0.tgz", - "integrity": "sha1-n6brnIKSK3n3Wiz4PDivMLp/1pY=", + "integrity": "sha512-hcFZIjW8yQz8O8//2WTIXylm5Xsgc+lW9ISLgUk1xGmptIJQRdlhVIXCpSyLrQaaRiyhQRaVg7l3BD9S216BHw==", "dev": true, "license": "MIT", "engines": { @@ -5146,9 +5212,9 @@ } }, "node_modules/@storybook/react-dom-shim": { - "version": "9.1.19", - "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-9.1.19.tgz", - "integrity": "sha1-USAOttvSMdAFn6hKPDoAH3Uucd8=", + "version": "9.1.20", + "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-9.1.20.tgz", + "integrity": "sha512-UYdZavfPwHEqCKMqPssUOlyFVZiJExLxnSHwkICSZBmw3gxXJcp1aXWs7PvoZdWz2K4ztl3IcKErXXHeiY6w+A==", "dev": true, "license": "MIT", "funding": { @@ -5158,13 +5224,13 @@ "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": "^9.1.19" + "storybook": "^9.1.20" } }, "node_modules/@storybook/web-components": { - "version": "9.1.19", - "resolved": "https://registry.npmjs.org/@storybook/web-components/-/web-components-9.1.19.tgz", - "integrity": "sha1-HaWA8KuYNeanKzYN4iHqthqSDd0=", + "version": "9.1.20", + "resolved": "https://registry.npmjs.org/@storybook/web-components/-/web-components-9.1.20.tgz", + "integrity": "sha512-pDQ9ED5wIhPQeOJYv0RPCgLkGiDIKyX+YofQmjqAPIRSs5ewtK8W/ug3HqzggWnx7Fi3L04H81TGALtOU1LQiQ==", "license": "MIT", "dependencies": { "@storybook/global": "^5.0.0", @@ -5180,7 +5246,7 @@ }, "peerDependencies": { "lit": "^2.0.0 || ^3.0.0", - "storybook": "^9.1.19" + "storybook": "^9.1.20" } }, "node_modules/@surma/rollup-plugin-off-main-thread": { @@ -5235,7 +5301,7 @@ "node_modules/@testing-library/dom": { "version": "10.4.1", "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.1.tgz", - "integrity": "sha1-1ET4qInppG6aO087iOD8s++2z5U=", + "integrity": "sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==", "license": "MIT", "peer": true, "dependencies": { @@ -5255,7 +5321,7 @@ "node_modules/@testing-library/jest-dom": { "version": "6.9.1", "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.9.1.tgz", - "integrity": "sha1-dhOgThRt0pdtJN3wGXMNV6idVsI=", + "integrity": "sha512-zIcONa+hVtVSSep9UT3jZ5rizo2BsxgyDYU7WFD5eICBE7no3881HGeb/QkGfsJs6JTkY1aQhT7rIPC7e+0nnA==", "license": "MIT", "dependencies": { "@adobe/css-tools": "^4.4.0", @@ -5274,13 +5340,13 @@ "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": "sha1-mT6SXMHXPyxmLn113VpURSWaj9g=", + "integrity": "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==", "license": "MIT" }, "node_modules/@testing-library/user-event": { "version": "14.6.1", "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.6.1.tgz", - "integrity": "sha1-E+CaMteotwYP44MEeI6/QZfNIUk=", + "integrity": "sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==", "license": "MIT", "engines": { "node": ">=12", @@ -5355,7 +5421,7 @@ "node_modules/@types/aria-query": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", - "integrity": "sha1-GjHD03iFDSd42rtjdNA23LpLpwg=", + "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", "license": "MIT", "peer": true }, @@ -5582,7 +5648,7 @@ "node_modules/@types/deep-eql": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", - "integrity": "sha1-M0MRlx06BxIefrkbaEpgXn7qnL0=", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", "license": "MIT" }, "node_modules/@types/diff": { @@ -5875,6 +5941,7 @@ "version": "0.0.4", "resolved": "https://registry.npmjs.org/@types/mute-stream/-/mute-stream-0.0.4.tgz", "integrity": "sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==", + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -5968,7 +6035,7 @@ "node_modules/@types/react": { "version": "19.2.14", "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.14.tgz", - "integrity": "sha1-OWBJKbXjlX46b6AAHa+xfHr3C60=", + "integrity": "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==", "dev": true, "license": "MIT", "peer": true, @@ -6045,6 +6112,12 @@ "integrity": "sha512-mQkU2jY8jJEF7YHjHvsQO8+3ughTL1mcnn96igfhONmR+fUPSKIkefQYpSe8bsly2Ep7oQbn/6VG5/9/0qcArQ==", "license": "MIT" }, + "node_modules/@types/statuses": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/statuses/-/statuses-2.0.6.tgz", + "integrity": "sha512-xMAgYwceFhRA2zY+XbEA7mxYbA093wdiW8Vu6gZPGWy9cmOyU9XesH1tNcEWsKFd5Vzrqx5T3D38PWx1FIIXkA==", + "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", @@ -6055,7 +6128,8 @@ "node_modules/@types/tough-cookie": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", - "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==" + "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", + "license": "MIT" }, "node_modules/@types/trusted-types": { "version": "2.0.3", @@ -6109,7 +6183,8 @@ "node_modules/@types/wrap-ansi": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz", - "integrity": "sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==" + "integrity": "sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==", + "license": "MIT" }, "node_modules/@types/ws": { "version": "7.4.7", @@ -6344,7 +6419,7 @@ "node_modules/@vitest/expect": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.4.tgz", - "integrity": "sha1-g2ISTNgRpe4RxXaCB7nfU9NPJDM=", + "integrity": "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==", "license": "MIT", "dependencies": { "@types/chai": "^5.2.2", @@ -6360,7 +6435,7 @@ "node_modules/@vitest/expect/node_modules/@types/chai": { "version": "5.2.3", "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", - "integrity": "sha1-jpzZ4cNYH6azQaWu1ViOsoW+C0o=", + "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", "license": "MIT", "dependencies": { "@types/deep-eql": "*", @@ -6370,7 +6445,7 @@ "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": "sha1-9kGhlrM1aQsQcL8AtudZP+wZC/c=", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", "license": "MIT", "engines": { "node": ">=12" @@ -6379,7 +6454,7 @@ "node_modules/@vitest/expect/node_modules/chai": { "version": "5.3.3", "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.3.tgz", - "integrity": "sha1-3T2pVeJwkWpL0/Yl9LkZmWrafgY=", + "integrity": "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==", "license": "MIT", "dependencies": { "assertion-error": "^2.0.1", @@ -6395,7 +6470,7 @@ "node_modules/@vitest/expect/node_modules/check-error": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.3.tgz", - "integrity": "sha1-JCc2ERe3DMqNyJaA6tMrFXAZyvU=", + "integrity": "sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==", "license": "MIT", "engines": { "node": ">= 16" @@ -6404,7 +6479,7 @@ "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": "sha1-S3VtjXcKklcwCCXVKiws/5nDo0E=", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", "license": "MIT", "engines": { "node": ">=6" @@ -6413,13 +6488,13 @@ "node_modules/@vitest/expect/node_modules/loupe": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.1.tgz", - "integrity": "sha1-AJXPVtxbepp8CP9bGoeW7IrRfnY=", + "integrity": "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==", "license": "MIT" }, "node_modules/@vitest/expect/node_modules/pathval": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.1.tgz", - "integrity": "sha1-iFXFooma8HLWrAXRHkYEWtDcYF0=", + "integrity": "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==", "license": "MIT", "engines": { "node": ">= 14.16" @@ -6428,7 +6503,7 @@ "node_modules/@vitest/pretty-format": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.4.tgz", - "integrity": "sha1-PBAveegrIEomx6WSG/R9U0kZ07Q=", + "integrity": "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==", "license": "MIT", "dependencies": { "tinyrainbow": "^2.0.0" @@ -6440,7 +6515,7 @@ "node_modules/@vitest/spy": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.4.tgz", - "integrity": "sha1-zBjyb0Dz8CjaZiAEaIH05FGMJZk=", + "integrity": "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==", "license": "MIT", "dependencies": { "tinyspy": "^4.0.3" @@ -6452,7 +6527,7 @@ "node_modules/@vitest/utils": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.4.tgz", - "integrity": "sha1-wIE7xC2ZUn+4xbE4x6iFFrykb+o=", + "integrity": "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==", "license": "MIT", "dependencies": { "@vitest/pretty-format": "3.2.4", @@ -6466,7 +6541,7 @@ "node_modules/@vitest/utils/node_modules/loupe": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.1.tgz", - "integrity": "sha1-AJXPVtxbepp8CP9bGoeW7IrRfnY=", + "integrity": "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==", "license": "MIT" }, "node_modules/@wdio/config": { @@ -8375,9 +8450,9 @@ } }, "node_modules/axe-core": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.3.tgz", - "integrity": "sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==", + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.11.1.tgz", + "integrity": "sha512-BASOg+YwO2C+346x3LZOeoovTIoTrRqEsqMa6fmfAV0P+U9mFr9NsyOEpiYvFjbc64NMrSswhV50WdXzdb/Z5A==", "dev": true, "license": "MPL-2.0", "engines": { @@ -10165,17 +10240,6 @@ "node": ">=8" } }, - "node_modules/cli-spinners": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", - "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/cli-truncate": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", @@ -10250,7 +10314,7 @@ "node_modules/cli-width": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", - "integrity": "sha1-QtqsQdPCVO84rYrAN2chMBc2kcU=", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", "license": "ISC", "engines": { "node": ">= 12" @@ -11289,7 +11353,7 @@ "node_modules/css.escape": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", - "integrity": "sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s=", + "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", "license": "MIT" }, "node_modules/cssesc": { @@ -11410,7 +11474,7 @@ "node_modules/csstype": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", - "integrity": "sha1-7EjA8+mT5QZIyG2lWeJhCZXPmJo=", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", "dev": true, "license": "MIT", "peer": true @@ -11919,7 +11983,7 @@ "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": "sha1-WnQp5gZus2ZNkR4z+w5F3o6whFM=", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", "license": "MIT", "peer": true }, @@ -12759,9 +12823,9 @@ } }, "node_modules/esbuild": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.0.tgz", - "integrity": "sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", "hasInstallScript": true, "license": "MIT", "bin": { @@ -12771,31 +12835,32 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.0", - "@esbuild/android-arm": "0.25.0", - "@esbuild/android-arm64": "0.25.0", - "@esbuild/android-x64": "0.25.0", - "@esbuild/darwin-arm64": "0.25.0", - "@esbuild/darwin-x64": "0.25.0", - "@esbuild/freebsd-arm64": "0.25.0", - "@esbuild/freebsd-x64": "0.25.0", - "@esbuild/linux-arm": "0.25.0", - "@esbuild/linux-arm64": "0.25.0", - "@esbuild/linux-ia32": "0.25.0", - "@esbuild/linux-loong64": "0.25.0", - "@esbuild/linux-mips64el": "0.25.0", - "@esbuild/linux-ppc64": "0.25.0", - "@esbuild/linux-riscv64": "0.25.0", - "@esbuild/linux-s390x": "0.25.0", - "@esbuild/linux-x64": "0.25.0", - "@esbuild/netbsd-arm64": "0.25.0", - "@esbuild/netbsd-x64": "0.25.0", - "@esbuild/openbsd-arm64": "0.25.0", - "@esbuild/openbsd-x64": "0.25.0", - "@esbuild/sunos-x64": "0.25.0", - "@esbuild/win32-arm64": "0.25.0", - "@esbuild/win32-ia32": "0.25.0", - "@esbuild/win32-x64": "0.25.0" + "@esbuild/aix-ppc64": "0.25.12", + "@esbuild/android-arm": "0.25.12", + "@esbuild/android-arm64": "0.25.12", + "@esbuild/android-x64": "0.25.12", + "@esbuild/darwin-arm64": "0.25.12", + "@esbuild/darwin-x64": "0.25.12", + "@esbuild/freebsd-arm64": "0.25.12", + "@esbuild/freebsd-x64": "0.25.12", + "@esbuild/linux-arm": "0.25.12", + "@esbuild/linux-arm64": "0.25.12", + "@esbuild/linux-ia32": "0.25.12", + "@esbuild/linux-loong64": "0.25.12", + "@esbuild/linux-mips64el": "0.25.12", + "@esbuild/linux-ppc64": "0.25.12", + "@esbuild/linux-riscv64": "0.25.12", + "@esbuild/linux-s390x": "0.25.12", + "@esbuild/linux-x64": "0.25.12", + "@esbuild/netbsd-arm64": "0.25.12", + "@esbuild/netbsd-x64": "0.25.12", + "@esbuild/openbsd-arm64": "0.25.12", + "@esbuild/openbsd-x64": "0.25.12", + "@esbuild/openharmony-arm64": "0.25.12", + "@esbuild/sunos-x64": "0.25.12", + "@esbuild/win32-arm64": "0.25.12", + "@esbuild/win32-ia32": "0.25.12", + "@esbuild/win32-x64": "0.25.12" } }, "node_modules/esbuild-register": { @@ -12810,6 +12875,22 @@ "esbuild": ">=0.12 <1" } }, + "node_modules/esbuild/node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", + "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -16440,9 +16521,10 @@ } }, "node_modules/headers-polyfill": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/headers-polyfill/-/headers-polyfill-4.0.2.tgz", - "integrity": "sha512-EWGTfnTqAO2L/j5HZgoM/3z82L7necsJ0pO9Tp0X1wil3PDLrkypTBRgVO2ExehEEvUycejZD3FuRaXpZZc3kw==" + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/headers-polyfill/-/headers-polyfill-4.0.3.tgz", + "integrity": "sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==", + "license": "MIT" }, "node_modules/html-escaper": { "version": "2.0.2", @@ -16895,7 +16977,7 @@ "node_modules/indent-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha1-Yk+PRJfWGbLZdoUx1Y9BIoVNclE=", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "license": "MIT", "engines": { "node": ">=8" @@ -19553,7 +19635,7 @@ "node_modules/lz-string": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", - "integrity": "sha1-watQ93iHtxJiEgG6n9Tjpu0JmUE=", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", "license": "MIT", "peer": true, "bin": { @@ -21740,6 +21822,146 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "license": "MIT" }, + "node_modules/msw": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/msw/-/msw-2.4.1.tgz", + "integrity": "sha512-HXcoQPzYTwEmVk+BGIcRa0vLabBT+J20SSSeYh/QfajaK5ceA6dlD4ZZjfz2dqGEq4vRNCPLP6eXsB94KllPFg==", + "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://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==", + "license": "MIT" + }, + "node_modules/msw/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==", + "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://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "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://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/msw/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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/msw/node_modules/path-to-regexp": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", + "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", + "license": "MIT" + }, + "node_modules/msw/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==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/msw/node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "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", @@ -21783,6 +22005,15 @@ "npm": ">=1.4.0" } }, + "node_modules/mute-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", + "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/nanocolors": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/nanocolors/-/nanocolors-0.2.13.tgz", @@ -22342,7 +22573,7 @@ "node_modules/outvariant": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/outvariant/-/outvariant-1.4.3.tgz", - "integrity": "sha1-Ihwb/Ak+j+xwdUl+d5n9v0PRSHM=", + "integrity": "sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==", "license": "MIT" }, "node_modules/p-cancelable": { @@ -24019,7 +24250,7 @@ "node_modules/pretty-format": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", - "integrity": "sha1-IYGHn96lGnpYUfs52SD6pj8B2I4=", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", "license": "MIT", "peer": true, "dependencies": { @@ -24034,7 +24265,7 @@ "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": "sha1-B0SWkK1Fd30ZJKwquy/IiV26g2s=", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "license": "MIT", "peer": true, "engines": { @@ -24252,9 +24483,16 @@ "license": "ISC" }, "node_modules/psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", + "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "funding": { + "url": "https://github.com/sponsors/lupomontero" + } }, "node_modules/pug": { "version": "2.0.4", @@ -24506,9 +24744,9 @@ } }, "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "license": "MIT", "engines": { "node": ">=6" @@ -24653,7 +24891,8 @@ "node_modules/querystringify": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "license": "MIT" }, "node_modules/queue": { "version": "6.0.2", @@ -24772,7 +25011,7 @@ "node_modules/react": { "version": "19.2.4", "resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz", - "integrity": "sha1-Q45XuqGbd8sjqrUWz2Nc0Fee4Jo=", + "integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==", "dev": true, "license": "MIT", "engines": { @@ -24782,7 +25021,7 @@ "node_modules/react-dom": { "version": "19.2.4", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.4.tgz", - "integrity": "sha1-b6xr2W99tHfZZsfsF8Gisa2OZZE=", + "integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==", "dev": true, "license": "MIT", "dependencies": { @@ -24795,7 +25034,7 @@ "node_modules/react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha1-5pHUqOnHiTZWVVOas3J2Kw77VPA=", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "license": "MIT", "peer": true }, @@ -25478,7 +25717,7 @@ "node_modules/redent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha1-5Ve3mYMWu1PJ8fVvpiY1LGljBZ8=", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", "license": "MIT", "dependencies": { "indent-string": "^4.0.0", @@ -28386,7 +28625,7 @@ "node_modules/scheduler": { "version": "0.27.0", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", - "integrity": "sha1-DE74LWfR5cHjWej8dtOofwRf5b0=", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", "dev": true, "license": "MIT" }, @@ -29915,9 +30154,9 @@ } }, "node_modules/storybook": { - "version": "9.1.19", - "resolved": "https://registry.npmjs.org/storybook/-/storybook-9.1.19.tgz", - "integrity": "sha1-ULd1BTTIxh+TTZwh/m2QTaaMfVQ=", + "version": "9.1.20", + "resolved": "https://registry.npmjs.org/storybook/-/storybook-9.1.20.tgz", + "integrity": "sha512-6rME2tww6PFhm96iG2Xx44yzwLDWBiDWy+kJ2ub6x90werSTOiuo+tZJ94BgCfFutR0tEfLRIq59s+Zg6YyChA==", "license": "MIT", "dependencies": { "@storybook/global": "^5.0.0", @@ -29952,7 +30191,7 @@ "node_modules/storybook/node_modules/@vitest/mocker": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.4.tgz", - "integrity": "sha1-RHHE771i2w1PogPmXMawWKhcq9M=", + "integrity": "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==", "license": "MIT", "dependencies": { "@vitest/spy": "3.2.4", @@ -29978,16 +30217,16 @@ "node_modules/storybook/node_modules/estree-walker": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha1-Z8PlSexAKkh7T8GT0ZU6UkdSNA0=", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", "license": "MIT", "dependencies": { "@types/estree": "^1.0.0" } }, "node_modules/storybook/node_modules/ws": { - "version": "8.19.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz", - "integrity": "sha1-3cK9+lua2GAgT1pypIY6iJX9jIs=", + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.0.tgz", + "integrity": "sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==", "license": "MIT", "engines": { "node": ">=10.0.0" @@ -30064,7 +30303,8 @@ "node_modules/strict-event-emitter": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/strict-event-emitter/-/strict-event-emitter-0.5.1.tgz", - "integrity": "sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==" + "integrity": "sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==", + "license": "MIT" }, "node_modules/strict-uri-encode": { "version": "2.0.0", @@ -30351,7 +30591,7 @@ "node_modules/strip-indent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha1-wy4c7pQLazQyx3G8LFS8znPNMAE=", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", "license": "MIT", "dependencies": { "min-indent": "^1.0.0" @@ -30853,7 +31093,7 @@ "node_modules/tinyrainbow": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz", - "integrity": "sha1-lQmyFiQ2MV6A4+7g/M5EdNJEQpQ=", + "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==", "license": "MIT", "engines": { "node": ">=14.0.0" @@ -30862,7 +31102,7 @@ "node_modules/tinyspy": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-4.0.4.tgz", - "integrity": "sha1-13oAL7U6iKoUKbQZwckkkuDIH3g=", + "integrity": "sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==", "license": "MIT", "engines": { "node": ">=14.0.0" @@ -30951,6 +31191,7 @@ "version": "4.1.4", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "license": "BSD-3-Clause", "dependencies": { "psl": "^1.1.33", "punycode": "^2.1.1", @@ -30965,6 +31206,7 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "license": "MIT", "engines": { "node": ">= 4.0.0" } @@ -31953,7 +32195,7 @@ "node_modules/unplugin": { "version": "1.16.1", "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.16.1.tgz", - "integrity": "sha1-qETS48OxSkrClFxCvoBAkyG2EZk=", + "integrity": "sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==", "dev": true, "license": "MIT", "dependencies": { @@ -32076,6 +32318,7 @@ "version": "1.5.10", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "license": "MIT", "dependencies": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" @@ -32540,7 +32783,7 @@ "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": "sha1-BX+qkGXIrPSPJMtXrA53c5q5p+g=", + "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==", "dev": true, "license": "MIT" }, @@ -33851,7 +34094,7 @@ "node_modules/yoctocolors-cjs": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz", - "integrity": "sha1-fklk6o7EIrekCskX06NEz9IwS6o=", + "integrity": "sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==", "license": "MIT", "engines": { "node": ">=18" @@ -34727,14 +34970,6 @@ } } }, - "packages/dev-server-rollup/node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "engines": { - "node": ">=6" - } - }, "packages/dev-server-rollup/node_modules/slash": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", @@ -34876,163 +35111,6 @@ "@web/storybook-framework-web-components": "^0.2.1" } }, - "packages/mocks/node_modules/@mswjs/interceptors": { - "version": "0.29.1", - "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.29.1.tgz", - "integrity": "sha512-3rDakgJZ77+RiQUuSK69t1F0m8BQKA8Vh5DCS5V0DWvNY67zob2JhhQrhCO0AKLGINTRSFd1tBaHcJTkhefoSw==", - "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" - } - }, - "packages/mocks/node_modules/@types/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==" - }, - "packages/mocks/node_modules/@types/statuses": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@types/statuses/-/statuses-2.0.5.tgz", - "integrity": "sha512-jmIUGWrAiwu3dZpxntxieC+1n/5c3mjrImkmOSQ2NC5uP6cYO4aAZDdSmRcI5C1oiTmqlZGHC+/NmJrKogbP5A==" - }, - "packages/mocks/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==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "packages/mocks/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "packages/mocks/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==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "packages/mocks/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==" - }, - "packages/mocks/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==", - "engines": { - "node": ">=8" - } - }, - "packages/mocks/node_modules/msw": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/msw/-/msw-2.4.1.tgz", - "integrity": "sha512-HXcoQPzYTwEmVk+BGIcRa0vLabBT+J20SSSeYh/QfajaK5ceA6dlD4ZZjfz2dqGEq4vRNCPLP6eXsB94KllPFg==", - "hasInstallScript": true, - "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 - } - } - }, - "packages/mocks/node_modules/outvariant": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/outvariant/-/outvariant-1.4.3.tgz", - "integrity": "sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==" - }, - "packages/mocks/node_modules/path-to-regexp": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", - "integrity": "sha1-K2omozdzeo4UFvknLtB2axwDifQ=", - "license": "MIT" - }, - "packages/mocks/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==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "packages/mocks/node_modules/type-fest": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.26.0.tgz", - "integrity": "sha512-OduNjVJsFbifKb57UqZ2EMP1i4u64Xwow3NYXUtBbD4vIwJdQd4+xl8YDou1dlm4DVrtwT/7Ky8z8WyCULVfxw==", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "packages/parse5-utils": { "name": "@web/parse5-utils", "version": "2.1.1", @@ -35796,7 +35874,7 @@ "@web/mocks": "^1.3.2", "@web/storybook-utils": "^1.1.2", "lit": "^3.3.2", - "storybook": "^9.1.19" + "storybook": "^9.1.20" } }, "packages/storybook-addon-mocks/node_modules/@lit/reactive-element": { @@ -35866,7 +35944,7 @@ "rollup-plugin-external-globals": "^0.9.0", "sirv": "^2.0.4", "slash": "^5.1.0", - "storybook": "^9.1.19" + "storybook": "^9.1.20" }, "engines": { "node": ">=18.0.0" @@ -37729,70 +37807,29 @@ "version": "0.2.1", "license": "MIT", "dependencies": { - "@storybook/web-components": "^9.1.19", + "@storybook/web-components": "^9.1.20", "@web/storybook-builder": "^0.2.2" }, "devDependencies": { "@playwright/test": "^1.53.0", - "@storybook/addon-a11y": "^9.1.19", - "@storybook/addon-docs": "^9.1.19", - "@storybook/addon-links": "^9.1.19", + "@storybook/addon-a11y": "^9.1.20", + "@storybook/addon-docs": "^9.1.20", + "@storybook/addon-links": "^9.1.20", "@web/dev-server": "^0.4.0", "@web/rollup-plugin-import-meta-assets": "^2.2.1", "@web/storybook-utils": "^1.1.0", - "storybook": "^9.1.19" + "storybook": "^9.1.20" }, "engines": { "node": ">=18.0.0" } }, - "packages/storybook-framework-web-components/node_modules/@storybook/addon-a11y": { - "version": "9.1.19", - "resolved": "https://registry.npmjs.org/@storybook/addon-a11y/-/addon-a11y-9.1.19.tgz", - "integrity": "sha1-ARkNzGifcoj1OqOoelL24mJesoI=", - "dev": true, - "license": "MIT", - "dependencies": { - "@storybook/global": "^5.0.0", - "axe-core": "^4.2.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^9.1.19" - } - }, - "packages/storybook-framework-web-components/node_modules/@storybook/addon-links": { - "version": "9.1.19", - "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-9.1.19.tgz", - "integrity": "sha1-TsQ2Wm3dqJys09ZpT3jvVaGKABo=", - "dev": true, - "license": "MIT", - "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", - "storybook": "^9.1.19" - }, - "peerDependenciesMeta": { - "react": { - "optional": true - } - } - }, "packages/storybook-utils": { "name": "@web/storybook-utils", "version": "1.1.2", "license": "MIT", "dependencies": { - "storybook": "^9.1.19" + "storybook": "^9.1.20" }, "devDependencies": { "react": "^19.0.0" diff --git a/packages/storybook-addon-mocks/package.json b/packages/storybook-addon-mocks/package.json index e03f702bb7..024f00af66 100644 --- a/packages/storybook-addon-mocks/package.json +++ b/packages/storybook-addon-mocks/package.json @@ -34,6 +34,6 @@ "@web/mocks": "^1.3.2", "@web/storybook-utils": "^1.1.2", "lit": "^3.3.2", - "storybook": "^9.1.19" + "storybook": "^9.1.20" } } diff --git a/packages/storybook-builder/package.json b/packages/storybook-builder/package.json index 29e4c30256..a13af09398 100644 --- a/packages/storybook-builder/package.json +++ b/packages/storybook-builder/package.json @@ -69,6 +69,6 @@ "rollup-plugin-external-globals": "^0.9.0", "sirv": "^2.0.4", "slash": "^5.1.0", - "storybook": "^9.1.19" + "storybook": "^9.1.20" } } diff --git a/packages/storybook-framework-web-components/package.json b/packages/storybook-framework-web-components/package.json index 7f7f54639c..f2aa6660bf 100644 --- a/packages/storybook-framework-web-components/package.json +++ b/packages/storybook-framework-web-components/package.json @@ -56,17 +56,17 @@ "esm" ], "dependencies": { - "@storybook/web-components": "^9.1.19", + "@storybook/web-components": "^9.1.20", "@web/storybook-builder": "^0.2.2" }, "devDependencies": { "@playwright/test": "^1.53.0", - "@storybook/addon-a11y": "^9.1.19", - "@storybook/addon-docs": "^9.1.19", - "@storybook/addon-links": "^9.1.19", + "@storybook/addon-a11y": "^9.1.20", + "@storybook/addon-docs": "^9.1.20", + "@storybook/addon-links": "^9.1.20", "@web/dev-server": "^0.4.0", "@web/rollup-plugin-import-meta-assets": "^2.2.1", "@web/storybook-utils": "^1.1.0", - "storybook": "^9.1.19" + "storybook": "^9.1.20" } } diff --git a/packages/storybook-utils/package.json b/packages/storybook-utils/package.json index 2045c3d961..a4a2f02cf9 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": "^9.1.19" + "storybook": "^9.1.20" }, "devDependencies": { "react": "^19.0.0" From 47966e825725dde49c2a58539deb379ed12be295 Mon Sep 17 00:00:00 2001 From: Mikhail Bashkirov Date: Fri, 27 Mar 2026 23:14:19 +0100 Subject: [PATCH 19/20] add missing dependency --- package-lock.json | 1 + packages/storybook-framework-web-components/package.json | 1 + 2 files changed, 2 insertions(+) diff --git a/package-lock.json b/package-lock.json index b750a75985..352ab39a74 100644 --- a/package-lock.json +++ b/package-lock.json @@ -37817,6 +37817,7 @@ "@storybook/addon-links": "^9.1.20", "@web/dev-server": "^0.4.0", "@web/rollup-plugin-import-meta-assets": "^2.2.1", + "@web/storybook-addon-mocks": "^0.0.0", "@web/storybook-utils": "^1.1.0", "storybook": "^9.1.20" }, diff --git a/packages/storybook-framework-web-components/package.json b/packages/storybook-framework-web-components/package.json index f2aa6660bf..2d513f006e 100644 --- a/packages/storybook-framework-web-components/package.json +++ b/packages/storybook-framework-web-components/package.json @@ -66,6 +66,7 @@ "@storybook/addon-links": "^9.1.20", "@web/dev-server": "^0.4.0", "@web/rollup-plugin-import-meta-assets": "^2.2.1", + "@web/storybook-addon-mocks": "^0.0.0", "@web/storybook-utils": "^1.1.0", "storybook": "^9.1.20" } From 61ae871785d3bd66cbf216c56f348d5087e27830 Mon Sep 17 00:00:00 2001 From: Mikhail Bashkirov Date: Fri, 27 Mar 2026 23:26:17 +0100 Subject: [PATCH 20/20] update check for unexpected and expected warnings --- .../tests/fixtures/all-in-one/.storybook/main.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) 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 149c38fb42..3bcac639b2 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 @@ -23,10 +23,10 @@ const config = { return; } - // 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/dist/preview/runtime.js')) { + // ignore circular dependency warnings in storybook internals + if (log.code === 'CIRCULAR_DEPENDENCY') { + const logIds = log.ids?.map(id => id?.replace(/\\/g, '/')); + if (logIds?.some(id => id?.endsWith('node_modules/storybook/dist/csf/index.js'))) { defaultHandler('warn', log); return; }