From 4f4b76f51fce2b3cda8fe34bf5eec2627c9709ff Mon Sep 17 00:00:00 2001 From: Nic <162764842+Nic-Polumeyv@users.noreply.github.com> Date: Fri, 17 Jul 2026 22:02:52 -0400 Subject: [PATCH] fix: allow transitions to return a function taking a `direction` argument Custom transitions may return `(options: { direction: 'in' | 'out' }) => TransitionConfig`, which Svelte supports, but the `__sveltets_2_SvelteTransitionReturnType` shim only allowed `TransitionConfig | (() => TransitionConfig)`. A function with a required parameter is not assignable to `() => TransitionConfig`, so valid custom transitions were reported as errors. Widen the shim's return type to match Svelte's, in both the v4 and v3 shims. The added transition-options fixture fails without the change. Fixes #2686 --- .changeset/transition-direction-return.md | 6 ++++++ .../diagnostics/fixtures/transition-options/input.svelte | 9 +++++++++ packages/svelte2tsx/svelte-shims-v4.d.ts | 4 ++-- packages/svelte2tsx/svelte-shims.d.ts | 4 ++-- 4 files changed, 19 insertions(+), 4 deletions(-) create mode 100644 .changeset/transition-direction-return.md diff --git a/.changeset/transition-direction-return.md b/.changeset/transition-direction-return.md new file mode 100644 index 000000000..170517a07 --- /dev/null +++ b/.changeset/transition-direction-return.md @@ -0,0 +1,6 @@ +--- +'svelte-check': patch +'svelte2tsx': patch +--- + +fix: allow transitions to return a function taking a `direction` argument diff --git a/packages/language-server/test/plugins/typescript/features/diagnostics/fixtures/transition-options/input.svelte b/packages/language-server/test/plugins/typescript/features/diagnostics/fixtures/transition-options/input.svelte index b54423ea7..8c51e33ab 100644 --- a/packages/language-server/test/plugins/typescript/features/diagnostics/fixtures/transition-options/input.svelte +++ b/packages/language-server/test/plugins/typescript/features/diagnostics/fixtures/transition-options/input.svelte @@ -6,6 +6,15 @@ ) { return {}; } + + function deferredTransition( + _node: HTMLElement, + _params: { delay: number }, + _context: { direction: 'in' | 'out' | 'both' } + ) { + return (_options: { direction: 'in' | 'out' }) => ({ delay: 100 }); + }
+ diff --git a/packages/svelte2tsx/svelte-shims-v4.d.ts b/packages/svelte2tsx/svelte-shims-v4.d.ts index 29d84a2d9..0be208945 100644 --- a/packages/svelte2tsx/svelte-shims-v4.d.ts +++ b/packages/svelte2tsx/svelte-shims-v4.d.ts @@ -22,7 +22,7 @@ type SvelteTransitionConfig = { } /** @internal PRIVATE API, DO NOT USE */ -type SvelteTransitionReturnType = SvelteTransitionConfig | (() => SvelteTransitionConfig) +type SvelteTransitionReturnType = SvelteTransitionConfig | ((options: { direction: 'in' | 'out' }) => SvelteTransitionConfig) /** @internal PRIVATE API, DO NOT USE */ type SvelteAnimationReturnType = { @@ -173,7 +173,7 @@ type __sveltets_2_SvelteTransitionConfig = { tick?: (t: number, u: number) => void } /** @internal PRIVATE API, DO NOT USE */ -type __sveltets_2_SvelteTransitionReturnType = __sveltets_2_SvelteTransitionConfig | (() => __sveltets_2_SvelteTransitionConfig) +type __sveltets_2_SvelteTransitionReturnType = __sveltets_2_SvelteTransitionConfig | ((options: { direction: 'in' | 'out' }) => __sveltets_2_SvelteTransitionConfig) declare function __sveltets_2_ensureTransition(transitionCall: __sveltets_2_SvelteTransitionReturnType): {}; // Includes undefined and null for all types as all usages also allow these diff --git a/packages/svelte2tsx/svelte-shims.d.ts b/packages/svelte2tsx/svelte-shims.d.ts index b7be2cbcc..f8bbc01ca 100644 --- a/packages/svelte2tsx/svelte-shims.d.ts +++ b/packages/svelte2tsx/svelte-shims.d.ts @@ -103,7 +103,7 @@ type SvelteTransitionConfig = { } /** @internal PRIVATE API, DO NOT USE */ -type SvelteTransitionReturnType = SvelteTransitionConfig | (() => SvelteTransitionConfig) +type SvelteTransitionReturnType = SvelteTransitionConfig | ((options: { direction: 'in' | 'out' }) => SvelteTransitionConfig) /** @internal PRIVATE API, DO NOT USE */ type SvelteAnimationReturnType = { @@ -253,7 +253,7 @@ type __sveltets_2_SvelteTransitionConfig = { tick?: (t: number, u: number) => void } /** @internal PRIVATE API, DO NOT USE */ -type __sveltets_2_SvelteTransitionReturnType = __sveltets_2_SvelteTransitionConfig | (() => __sveltets_2_SvelteTransitionConfig) +type __sveltets_2_SvelteTransitionReturnType = __sveltets_2_SvelteTransitionConfig | ((options: { direction: 'in' | 'out' }) => __sveltets_2_SvelteTransitionConfig) declare function __sveltets_2_ensureTransition(transitionCall: __sveltets_2_SvelteTransitionReturnType): {}; // Includes undefined and null for all types as all usages also allow these