Spaces:
Running
Running
<script lang="ts"> | |
import { enhance } from "$app/forms"; | |
import { base } from "$app/paths"; | |
import { page } from "$app/stores"; | |
import { PUBLIC_ORIGIN, PUBLIC_SHARE_PREFIX } from "$env/static/public"; | |
import { useSettingsStore } from "$lib/stores/settings"; | |
import type { PageData } from "./$types"; | |
import CarbonPen from "~icons/carbon/pen"; | |
import CarbonTrash from "~icons/carbon/trash-can"; | |
import CarbonCopy from "~icons/carbon/copy-file"; | |
import CarbonFlag from "~icons/carbon/flag"; | |
import CarbonLink from "~icons/carbon/link"; | |
import CopyToClipBoardBtn from "$lib/components/CopyToClipBoardBtn.svelte"; | |
export let data: PageData; | |
$: assistant = data.assistants.find((el) => el._id.toString() === $page.params.assistantId); | |
const settings = useSettingsStore(); | |
$: isActive = $settings.activeModel === $page.params.assistantId; | |
const prefix = PUBLIC_SHARE_PREFIX || `${PUBLIC_ORIGIN || $page.url.origin}${base}`; | |
$: shareUrl = `${prefix}/assistant/${assistant?._id}`; | |
</script> | |
<div class="flex h-full flex-col gap-2"> | |
<div class="flex gap-6"> | |
{#if assistant?.avatar} | |
<!-- crop image if not square --> | |
<img | |
src={`${base}/settings/assistants/${assistant?._id}/avatar.jpg?hash=${assistant?.avatar}`} | |
alt="Avatar" | |
class="size-16 flex-none rounded-full object-cover sm:size-24" | |
/> | |
{:else} | |
<div | |
class="flex size-16 flex-none items-center justify-center rounded-full bg-gray-300 text-4xl font-semibold uppercase text-gray-500 sm:size-24" | |
> | |
{assistant?.name[0]} | |
</div> | |
{/if} | |
<div class="flex-1"> | |
<div class="mb-1.5"> | |
<h1 class="mr-2 inline text-xl font-semibold"> | |
{assistant?.name} | |
</h1> | |
<span class="rounded-full border px-2 py-0.5 text-sm leading-none text-gray-500" | |
>public</span | |
> | |
</div> | |
{#if assistant?.description} | |
<p class="mb-2 line-clamp-2 text-sm text-gray-500"> | |
{assistant.description} | |
</p> | |
{/if} | |
<p class="text-sm text-gray-500"> | |
Model: <span class="font-semibold"> {assistant?.modelId} </span> | |
<span class="text-gray-300">•</span> Created by | |
<a class="underline" href="{base}/assistants?user={assistant?.createdByName}"> | |
{assistant?.createdByName} | |
</a> | |
</p> | |
<div | |
class="flex items-center gap-4 whitespace-nowrap text-sm text-gray-500 hover:*:text-gray-800" | |
> | |
<button | |
class="{isActive | |
? 'bg-gray-100 text-gray-800' | |
: 'bg-black !text-white'} my-2 flex w-fit items-center rounded-full px-3 py-1 text-base" | |
disabled={isActive} | |
name="Activate model" | |
on:click|stopPropagation={() => { | |
$settings.activeModel = $page.params.assistantId; | |
}} | |
> | |
{isActive ? "Active" : "Activate"} | |
</button> | |
{#if assistant?.createdByMe} | |
<a href="{base}/settings/assistants/{assistant?._id}/edit" class="underline" | |
><CarbonPen class="mr-1.5 inline text-xs" />Edit | |
</a> | |
<form method="POST" action="?/delete" use:enhance> | |
<button type="submit" class="flex items-center underline"> | |
<CarbonTrash class="mr-1.5 inline text-xs" />Delete</button | |
> | |
</form> | |
{:else} | |
<form method="POST" action="?/unsubscribe" use:enhance> | |
<button type="submit" class="underline"> | |
<CarbonTrash class="mr-1.5 inline text-xs" />Remove</button | |
> | |
</form> | |
<form method="POST" action="?/edit" use:enhance class="hidden"> | |
<button type="submit" class="underline"> | |
<CarbonCopy class="mr-1.5 inline text-xs" />Duplicate</button | |
> | |
</form> | |
{#if !assistant?.reported} | |
<form method="POST" action="?/report" use:enhance> | |
<button type="submit" class="underline"> | |
<CarbonFlag class="mr-1.5 inline text-xs" />Report</button | |
> | |
</form> | |
{:else} | |
<button type="button" disabled class="text-gray-700"> | |
<CarbonFlag class="mr-1.5 inline text-xs" />Reported</button | |
> | |
{/if} | |
{/if} | |
</div> | |
</div> | |
</div> | |
<div> | |
<h2 class="text-lg font-semibold">Direct URL</h2> | |
<p class="pb-2 text-sm text-gray-500">Share this link for people to use your assistant.</p> | |
<div | |
class="flex flex-row gap-2 rounded-lg border-2 border-gray-200 bg-gray-100 py-2 pl-3 pr-1.5" | |
> | |
<input disabled class="flex-1 truncate bg-inherit" value={shareUrl} /> | |
<CopyToClipBoardBtn | |
value={shareUrl} | |
classNames="!border-none !shadow-none !py-0 !px-1 !rounded-md" | |
> | |
<div class="flex items-center gap-1.5 text-gray-500 hover:underline"> | |
<CarbonLink />Copy | |
</div> | |
</CopyToClipBoardBtn> | |
</div> | |
</div> | |
<h2 class="mt-4 text-lg font-semibold">System Instructions</h2> | |
<textarea | |
disabled | |
class="min-h-[8lh] w-full flex-1 rounded-lg border-2 border-gray-200 bg-gray-100 p-2 disabled:cursor-not-allowed 2xl:min-h-[12lh]" | |
>{assistant?.preprompt}</textarea | |
> | |
</div> | |