Commit 73899e1c authored by Timothy J. Baek's avatar Timothy J. Baek
Browse files

refac

parent ca3f8e6c
...@@ -11,7 +11,6 @@ ...@@ -11,7 +11,6 @@
<Collapsible bind:open={state} className="w-full space-y-1"> <Collapsible bind:open={state} className="w-full space-y-1">
<div <div
class="flex items-center gap-2 text-gray-500 hover:text-gray-700 dark:hover:text-gray-300 transition" class="flex items-center gap-2 text-gray-500 hover:text-gray-700 dark:hover:text-gray-300 transition"
slot="head"
> >
<slot /> <slot />
......
<script lang="ts"> <script lang="ts">
import { slide } from 'svelte/transition';
import { quintOut } from 'svelte/easing';
export let open = false; export let open = false;
export let className = ''; export let className = '';
// Manage the max-height of the collapsible content for snappy transitions
let contentElement: HTMLElement;
let maxHeight = '0px'; // Initial max-height
$: if (contentElement?.scrollHeight) {
if (open) {
// Ensure the element is visible before measuring
maxHeight = `${contentElement.scrollHeight}px`;
} else {
maxHeight = '0px';
}
}
</script> </script>
<div class={className}> <div class={className}>
<button on:click={() => (open = !open)}> <button on:click={() => (open = !open)}>
<slot name="head" /> <slot />
</button> </button>
<div
bind:this={contentElement}
class={`collapsible-content ${open ? 'mt-1' : '!mt-0'}`}
style="max-height: {maxHeight};"
>
<slot name="content" />
</div>
</div>
<style> {#if open}
.collapsible-content { <div transition:slide={{ duration: 300, easing: quintOut, axis: 'y' }}>
overflow: hidden; <slot name="content" />
transition: all 0.3s ease-out; </div>
max-height: 0; {/if}
} </div>
</style>
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment