1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- <script lang="ts">
- import { slide } from 'svelte/transition';
- export let title: string;
- export let subtitle = '';
- export let isOpen = false;
- const toggle = () => (isOpen = !isOpen);
- </script>
- <div class="border-b-[1px] border-gray-200 dark:border-gray-700 py-4">
- <div class="flex justify-between place-items-center">
- <div>
- <h2 class="font-medium text-immich-primary dark:text-immich-dark-primary">
- {title}
- </h2>
- <p class="text-sm dark:text-immich-dark-fg">{subtitle}</p>
- </div>
- <button
- on:click={toggle}
- aria-expanded={isOpen}
- class="immich-circle-icon-button hover:bg-immich-primary/10 dark:text-immich-dark-fg hover:dark:bg-immich-dark-primary/20 rounded-full p-3 flex place-items-center place-content-center transition-all"
- >
- <svg
- style="tran"
- width="20"
- height="20"
- fill="none"
- stroke-linecap="round"
- stroke-linejoin="round"
- stroke-width="2"
- viewBox="0 0 24 24"
- stroke="currentColor"
- >
- <path d="M19 9l-7 7-7-7" />
- </svg>
- </button>
- </div>
- {#if isOpen}
- <ul transition:slide={{ duration: 250 }} class="mb-2 ml-4">
- <slot />
- </ul>
- {/if}
- </div>
- <style>
- svg {
- transition: transform 0.2s ease-in;
- }
- [aria-expanded='true'] svg {
- transform: rotate(0.5turn);
- }
- </style>
|