diff --git a/CHANGELOG.md b/CHANGELOG.md index 24af8968f63d..96041db16abb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +## 7.6.6 + +- SvelteKit: Support 2.0 modules with mocks - [#25244](https://github.com/storybookjs/storybook/pull/25244), thanks [@paoloricciuti](https://github.com/paoloricciuti)! + ## 7.6.5 - Angular: Update Angular cli templates - [#25152](https://github.com/storybookjs/storybook/pull/25152), thanks [@Marklb](https://github.com/Marklb)! diff --git a/code/e2e-tests/framework-svelte.spec.ts b/code/e2e-tests/framework-svelte.spec.ts index 40d2b7f817dd..7033342b6890 100644 --- a/code/e2e-tests/framework-svelte.spec.ts +++ b/code/e2e-tests/framework-svelte.spec.ts @@ -122,5 +122,21 @@ test.describe('SvelteKit', () => { hasText: `"invalidateAll"`, }); await expect(invalidateAllLogItem).toBeVisible(); + + const replaceState = root.getByRole('button', { name: 'replaceState' }); + await replaceState.click(); + + const replaceStateLogItem = page.locator('#storybook-panel-root #panel-tab-content', { + hasText: `/storybook-replace-state`, + }); + await expect(replaceStateLogItem).toBeVisible(); + + const pushState = root.getByRole('button', { name: 'pushState' }); + await pushState.click(); + + const pushStateLogItem = page.locator('#storybook-panel-root #panel-tab-content', { + hasText: `/storybook-push-state`, + }); + await expect(pushStateLogItem).toBeVisible(); }); }); diff --git a/code/frameworks/sveltekit/README.md b/code/frameworks/sveltekit/README.md index 02f43b117710..3e4b96f8f83b 100644 --- a/code/frameworks/sveltekit/README.md +++ b/code/frameworks/sveltekit/README.md @@ -136,6 +136,8 @@ You can add the name of the module you want to mock to `parameters.sveltekit_exp | `import { navigating } from "$app/stores"` | `parameters.sveltekit_experimental.stores.navigating` | A Partial of the navigating store | | `import { updated } from "$app/stores"` | `parameters.sveltekit_experimental.stores.updated` | A boolean representing the value of updated (you can also access `check()` which will be a noop) | | `import { goto } from "$app/navigation"` | `parameters.sveltekit_experimental.navigation.goto` | A callback that will be called whenever goto is called, in no function is provided an action will be logged to the Actions panel | +| `import { pushState } from "$app/navigation"` | `parameters.sveltekit_experimental.navigation.pushState` | A callback that will be called whenever pushState is called, in no function is provided an action will be logged to the Actions panel | +| `import { replaceState } from "$app/navigation"` | `parameters.sveltekit_experimental.navigation.replaceState` | A callback that will be called whenever replaceState is called, in no function is provided an action will be logged to the Actions panel | | `import { invalidate } from "$app/navigation"` | `parameters.sveltekit_experimental.navigation.invalidate` | A callback that will be called whenever invalidate is called, in no function is provided an action will be logged to the Actions panel | | `import { invalidateAll } from "$app/navigation"` | `parameters.sveltekit_experimental.navigation.invalidateAll` | A callback that will be called whenever invalidateAll is called, in no function is provided an action will be logged to the Actions panel | | `import { afterNavigate } from "$app/navigation"` | `parameters.sveltekit_experimental.navigation.afterNavigate` | An object that will be passed to the afterNavigate function (which will be invoked onMount) called | diff --git a/code/frameworks/sveltekit/package.json b/code/frameworks/sveltekit/package.json index e8b7944a87f5..1846ca01904b 100644 --- a/code/frameworks/sveltekit/package.json +++ b/code/frameworks/sveltekit/package.json @@ -65,7 +65,7 @@ }, "peerDependencies": { "svelte": "^3.0.0 || ^4.0.0", - "vite": "^4.0.0" + "vite": "^4.0.0 || ^5.0.0" }, "engines": { "node": "^14.18 || >=16" diff --git a/code/frameworks/sveltekit/src/mocks/app/navigation.ts b/code/frameworks/sveltekit/src/mocks/app/navigation.ts index 8d23ddbea46a..edd60f5ebf83 100644 --- a/code/frameworks/sveltekit/src/mocks/app/navigation.ts +++ b/code/frameworks/sveltekit/src/mocks/app/navigation.ts @@ -41,3 +41,17 @@ export async function invalidateAll() { export function preloadCode() {} export function preloadData() {} + +export async function pushState(...args: any[]) { + const event = new CustomEvent('storybook:pushState', { + detail: args, + }); + window.dispatchEvent(event); +} + +export async function replaceState(...args: any[]) { + const event = new CustomEvent('storybook:replaceState', { + detail: args, + }); + window.dispatchEvent(event); +} diff --git a/code/frameworks/sveltekit/src/preview.ts b/code/frameworks/sveltekit/src/preview.ts index 10affca46fc4..fc3ab8bcc65a 100644 --- a/code/frameworks/sveltekit/src/preview.ts +++ b/code/frameworks/sveltekit/src/preview.ts @@ -117,7 +117,7 @@ export const decorators: Decorator[] = [ const removeNavigationListeners = createListeners( 'navigation', - ['goto', 'invalidate', 'invalidateAll'], + ['goto', 'invalidate', 'invalidateAll', 'pushState', 'replaceState'], true ); const removeFormsListeners = createListeners('forms', ['enhance']); diff --git a/code/frameworks/sveltekit/template/stories_svelte-kit-skeleton-js/Environment.svelte b/code/frameworks/sveltekit/template/stories_svelte-kit-skeleton-js/Environment.svelte index aef1c05011f8..7cdc852f7fcf 100644 --- a/code/frameworks/sveltekit/template/stories_svelte-kit-skeleton-js/Environment.svelte +++ b/code/frameworks/sveltekit/template/stories_svelte-kit-skeleton-js/Environment.svelte @@ -1,8 +1,8 @@