|
1 | 1 | <script lang="ts"> |
2 | | - import type { TransitionFunction } from '@dvcol/svelte-utils/transition'; |
| 2 | + import type { TransitionFunction, TransitionWithProps } from '@dvcol/svelte-utils/transition'; |
3 | 3 | import type { Snippet } from 'svelte'; |
4 | 4 |
|
5 | 5 | import type { TransitionProps } from '~/models/component.model.js'; |
|
10 | 10 | const { children, key, id, transition }: { children: Snippet; id: string; key: any | any[]; transition: TransitionProps } = $props(); |
11 | 11 |
|
12 | 12 | let firstRender = true; |
13 | | - const skipFirst = $derived<boolean>(transition?.skipFirst ?? true); |
| 13 | + const skipFirst = $derived<TransitionProps['skipFirst']>(transition?.skipFirst ?? false); |
14 | 14 | const skipTransition = (skip = skipFirst) => { |
15 | | - if (!firstRender || !skip) return false; |
| 15 | + if (!firstRender) return false; |
16 | 16 | firstRender = false; |
17 | | - return true; |
| 17 | + return skip === true; |
18 | 18 | }; |
19 | 19 |
|
| 20 | + const isTransitionFunction = (skip?: TransitionProps['skipFirst']): skip is TransitionFunction => typeof skip === 'function' && !!skip; |
| 21 | + const isTransitionObject = (skip?: TransitionProps['skipFirst']): skip is TransitionWithProps => typeof skip === 'object' && !!skip?.use; |
| 22 | +
|
20 | 23 | const _in = $derived<TransitionFunction>(((node, props, options) => { |
21 | 24 | if (skipTransition()) return; |
| 25 | + if (firstRender && isTransitionFunction(skipFirst)) return skipFirst; |
| 26 | + if (firstRender && isTransitionObject(skipFirst)) return skipFirst.use; |
22 | 27 | return transition?.in?.(node, props, options); |
23 | 28 | }) as TransitionFunction); |
24 | 29 | const _out = $derived<TransitionFunction>(((node, props, options) => { |
25 | 30 | if (firstRender && skipFirst) return; |
26 | 31 | return transition?.out?.(node, props, options); |
27 | 32 | }) as TransitionFunction); |
28 | 33 |
|
29 | | - const _inParams = $derived(transition?.params?.in ?? {}); |
| 34 | + const _inParams = $derived.by(() => { |
| 35 | + if (firstRender && isTransitionObject(skipFirst) && skipFirst.props) return skipFirst.props; |
| 36 | + return transition?.params?.in ?? {}; |
| 37 | + }); |
30 | 38 | const _outParams = $derived(transition?.params?.out ?? {}); |
31 | 39 |
|
32 | 40 | const _containerProps = $derived(transition?.props?.container); |
|
0 commit comments