feat(FlterControls): enhance control with ux effects
This commit is contained in:
@@ -5,15 +5,42 @@
|
|||||||
-->
|
-->
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { Button } from '$shared/shadcn/ui/button';
|
import { Button } from '$shared/shadcn/ui/button';
|
||||||
|
import { cn } from '$shared/shadcn/utils/shadcn-utils';
|
||||||
|
import Rotate from '@lucide/svelte/icons/rotate-ccw';
|
||||||
|
import { cubicOut } from 'svelte/easing';
|
||||||
|
import { Tween } from 'svelte/motion';
|
||||||
import { filterManager } from '../../model';
|
import { filterManager } from '../../model';
|
||||||
|
|
||||||
|
interface Props {
|
||||||
|
class?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
const { class: className }: Props = $props();
|
||||||
|
|
||||||
|
const transform = new Tween(
|
||||||
|
{ scale: 1, rotate: 0 },
|
||||||
|
{ duration: 150, easing: cubicOut },
|
||||||
|
);
|
||||||
|
|
||||||
|
function handleClick() {
|
||||||
|
filterManager.deselectAllGlobal();
|
||||||
|
|
||||||
|
transform.set({ scale: 0.98, rotate: 1 }).then(() => {
|
||||||
|
transform.set({ scale: 1, rotate: 0 });
|
||||||
|
});
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="flex flex-row gap-2">
|
<div
|
||||||
|
class={cn('flex flex-row gap-2', className)}
|
||||||
|
style:transform="scale({transform.current.scale}) rotate({transform.current.rotate}deg)"
|
||||||
|
>
|
||||||
<Button
|
<Button
|
||||||
variant="outline"
|
variant="ghost"
|
||||||
class="flex-1 cursor-pointer"
|
class="group flex flex-1 cursor-pointer gap-1"
|
||||||
onclick={filterManager.deselectAllGlobal}
|
onclick={handleClick}
|
||||||
>
|
>
|
||||||
|
<Rotate class="size-4 group-hover:-rotate-180 transition-transform duration-300" />
|
||||||
Reset
|
Reset
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user