Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
File size: 2,915 Bytes
dd7ec11 404baa5 f05d33c 35140b4 f05d33c 35140b4 eb29a95 97ec6f2 35140b4 dd7ec11 f05d33c 644d65a f05d33c 35140b4 c051b6f f05d33c dd7ec11 644d65a f05d33c dd7ec11 35140b4 c051b6f dd7ec11 a764df6 dd7ec11 35140b4 41d37c3 35140b4 dd7ec11 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
<script lang="ts">
import { env } from "$env/dynamic/public";
import { goto } from "$app/navigation";
import { page } from "$app/stores";
import Icon from "@iconify/svelte";
import type { CommunityCard } from "$lib/type";
import { galleryStore } from "$lib/stores/use-gallery";
import Loading from "$lib/components/Loading.svelte";
import Reactions from "./reactions/Reactions.svelte";
export let card: CommunityCard;
export let form: Record<string, string> | undefined = undefined;
export let displayReactions: boolean = true;
export let onDelete: ((id: string) => Promise<void>) | undefined = undefined;
let loading = false;
const handleClick = async () => {
const request = await fetch(`/api/community/${card?.id}?${new URLSearchParams(form)}`);
const { gallery, next, previous } = await request.json();
galleryStore.set({
gallery,
open: true,
next,
previous
});
$page.url.searchParams.set('gallery', card?.id);
goto(`?${$page.url.searchParams.toString()}`);
};
const handleDelete = async (id: string) => {
if (loading || !onDelete) return;
loading = true
await onDelete?.(id);
loading = false;
}
console.log(import.meta.env.BASE_URL)
</script>
<!-- svelte-ignore a11y-no-static-element-interactions -->
<!-- svelte-ignore a11y-click-events-have-key-events -->
<div
class="cursor-pointer group bg-neutral-700 rounded-xl h-[400px] relative flex items-start justify-between flex-col p-5 transition-all duration-200 brightness-90 hover:brightness-100 z-[1] overflow-hidden"
on:click={handleClick}
>
<div class="w-full h-full absolute top-0 left-0 -z-[1] rounded-xl overflow-hidden" class:!brightness-50={loading}>
<div class="w-full h-full bg-center bg-cover transition-all duration-200 group-hover:scale-110 " style="background-image: url('{import.meta.env.BASE_URL}{env.PUBLIC_FILE_UPLOAD_DIR}/{card.image}');"></div>
</div>
<div class="group-hover:opacity-100 opacity-0 translate-y-full group-hover:translate-y-0 transition-all duration-200 flex flex-col gap-4 w-full">
<div class="bg-black/40 backdrop-blur-sm border border-white/30 rounded-lg px-6 py-3 text-white transition-all duration-200 w-full">
<p class="text-white font-semibold text-lg">{card.prompt}</p>
<p class="text-white/75 font-regular text-base">{card.model.id}</p>
</div>
</div>
{#if displayReactions}
<Reactions reactions={card.reactions} gallery_id={card.id} />
{/if}
{#if onDelete}
<button
class="absolute bottom-3 right-3 p-2.5 rounded-full bg-red-500 backdrop-blur-sm transition-all duration-200 hover:bg-red-700"
on:click={(e) => {
e.stopPropagation();
e.preventDefault();
handleDelete(card.id);
}}
>
<Icon icon="ic:round-delete" class="text-white w-5 h-5" />
</button>
{/if}
{#if loading}
<Loading />
{/if}
</div> |