mirror of
https://seed.radicle.dev/rad:z4V1sjrXqjvFdnCUbxPFqd5p4DtH5.git
synced 2026-11-03 18:50:30 +08:00
69 lines
1.7 KiB
Svelte
69 lines
1.7 KiB
Svelte
<script lang="ts">
|
|
import type { Embed } from "@bindings/cob/thread/Embed";
|
|
|
|
import ExtendedTextarea from "@app/components/ExtendedTextarea.svelte";
|
|
import Border from "./Border.svelte";
|
|
|
|
export let rid: string;
|
|
export let placeholder: string | undefined = undefined;
|
|
export let focus: boolean = false;
|
|
export let submit: (comment: string, embeds: Embed[]) => Promise<void>;
|
|
export let onclose: (() => void) | undefined = undefined;
|
|
export let onexpand: (() => void) | undefined = undefined;
|
|
export let disallowEmptyBody: boolean = false;
|
|
|
|
let state: "collapsed" | "expanded" | "submit";
|
|
|
|
$: state = onclose !== undefined ? "expanded" : "collapsed";
|
|
</script>
|
|
|
|
<style>
|
|
.inactive {
|
|
padding: 0 0.75rem;
|
|
font-size: var(--font-size-small);
|
|
color: var(--color-fill-gray);
|
|
}
|
|
</style>
|
|
|
|
{#if state !== "collapsed"}
|
|
<ExtendedTextarea
|
|
{disallowEmptyBody}
|
|
{rid}
|
|
{placeholder}
|
|
submitInProgress={state === "submit"}
|
|
{focus}
|
|
stylePadding="0.5rem 0.75rem"
|
|
on:close={() => {
|
|
if (onclose !== undefined) {
|
|
onclose();
|
|
} else {
|
|
state = "collapsed";
|
|
}
|
|
}}
|
|
on:submit={async ({ detail: { comment, embeds } }) => {
|
|
try {
|
|
state = "submit";
|
|
await submit(comment, Array.from(embeds.values()));
|
|
} finally {
|
|
state = "collapsed";
|
|
}
|
|
}} />
|
|
{:else}
|
|
<Border
|
|
hoverable
|
|
styleCursor="text"
|
|
variant="float"
|
|
styleHeight="40px"
|
|
styleWidth="100%"
|
|
onclick={() => {
|
|
state = "expanded";
|
|
if (onexpand !== undefined) {
|
|
onexpand();
|
|
}
|
|
}}>
|
|
<div style:width="100%" class="inactive">
|
|
{placeholder}
|
|
</div>
|
|
</Border>
|
|
{/if}
|