This commit is contained in:
Tim Baek
2026-02-08 06:45:01 +04:00
parent 4852227158
commit c3fa0f30fe
6 changed files with 45 additions and 24 deletions
+2
View File
@@ -23,6 +23,7 @@
import { toast } from 'svelte-sonner'; import { toast } from 'svelte-sonner';
export let chatId = ''; export let chatId = '';
export let disabled = false;
let tags = []; let tags = [];
const getTags = async () => { const getTags = async () => {
@@ -73,6 +74,7 @@
<Tags <Tags
{tags} {tags}
{disabled}
suggestionTags={$_tags ?? []} suggestionTags={$_tags ?? []}
on:delete={(e) => { on:delete={(e) => {
deleteTag(e.detail); deleteTag(e.detail);
+17 -13
View File
@@ -7,6 +7,7 @@
export let tags = []; export let tags = [];
export let suggestionTags = []; export let suggestionTags = [];
export let disabled = false;
let inputValue = ''; let inputValue = '';
@@ -22,22 +23,25 @@
<div class="flex flex-wrap items-center gap-1 w-full"> <div class="flex flex-wrap items-center gap-1 w-full">
<TagList <TagList
{tags} {tags}
{disabled}
on:delete={(e) => { on:delete={(e) => {
dispatch('delete', e.detail); dispatch('delete', e.detail);
}} }}
/> />
<input {#if !disabled}
bind:value={inputValue} <input
class="flex-1 min-w-24 {tags.length > 0 bind:value={inputValue}
? 'px-0.5' class="flex-1 min-w-24 {tags.length > 0
: ''} text-xs bg-transparent outline-hidden placeholder:text-gray-400 dark:placeholder:text-gray-500" ? 'px-0.5'
placeholder={$i18n.t('Add a tag...')} : ''} text-xs bg-transparent outline-hidden placeholder:text-gray-400 dark:placeholder:text-gray-500"
on:keydown={(event) => { placeholder={$i18n.t('Add a tag...')}
if (event.key === 'Enter' || event.key === ' ') { on:keydown={(event) => {
event.preventDefault(); if (event.key === 'Enter' || event.key === ' ') {
addTag(); event.preventDefault();
} addTag();
}} }
/> }}
/>
{/if}
</div> </div>
@@ -5,6 +5,7 @@
const i18n = getContext('i18n'); const i18n = getContext('i18n');
export let suggestionTags = []; export let suggestionTags = [];
export let disabled = false;
let tagName = ''; let tagName = '';
let showInput = false; let showInput = false;
@@ -30,7 +31,9 @@
}; };
</script> </script>
{#if showInput} {#if disabled}
<!-- hidden when disabled -->
{:else if showInput}
<div class="flex items-center gap-2 px-3 py-1.5 rounded-lg bg-gray-200/80 dark:bg-gray-700"> <div class="flex items-center gap-2 px-3 py-1.5 rounded-lg bg-gray-200/80 dark:bg-gray-700">
<span class="text-gray-500 dark:text-blue-400">+</span> <span class="text-gray-500 dark:text-blue-400">+</span>
<input <input
+19 -10
View File
@@ -6,18 +6,27 @@
import XMark from '$lib/components/icons/XMark.svelte'; import XMark from '$lib/components/icons/XMark.svelte';
export let tag; export let tag;
export let disabled = false;
export let onDelete = () => {}; export let onDelete = () => {};
</script> </script>
{#if tag} {#if tag}
<button {#if disabled}
type="button" <span
class="flex items-center gap-1 px-1.5 py-[1px] rounded-full bg-gray-100/50 dark:bg-gray-800/50 border border-gray-100 dark:border-gray-800 text-gray-600 dark:text-gray-300 text-xs font-medium hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors" class="flex items-center gap-1 px-1.5 py-[1px] rounded-full bg-gray-100/50 dark:bg-gray-800/50 border border-gray-100 dark:border-gray-800 text-gray-600 dark:text-gray-300 text-xs font-medium"
on:click={() => { >
onDelete(); <span class="line-clamp-1">{tag.name}</span>
}} </span>
> {:else}
<span class="line-clamp-1">{tag.name}</span> <button
<XMark className="size-3" strokeWidth="2.5" /> type="button"
</button> class="flex items-center gap-1 px-1.5 py-[1px] rounded-full bg-gray-100/50 dark:bg-gray-800/50 border border-gray-100 dark:border-gray-800 text-gray-600 dark:text-gray-300 text-xs font-medium hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors"
on:click={() => {
onDelete();
}}
>
<span class="line-clamp-1">{tag.name}</span>
<XMark className="size-3" strokeWidth="2.5" />
</button>
{/if}
{/if} {/if}
@@ -7,11 +7,13 @@
const dispatch = createEventDispatcher(); const dispatch = createEventDispatcher();
export let tags = []; export let tags = [];
export let disabled = false;
</script> </script>
{#each tags as tag} {#each tags as tag}
<TagItem <TagItem
{tag} {tag}
{disabled}
onDelete={() => { onDelete={() => {
dispatch('delete', tag.name); dispatch('delete', tag.name);
}} }}
@@ -435,6 +435,7 @@
<div class="flex-1 min-w-0"> <div class="flex-1 min-w-0">
<Tags <Tags
{tags} {tags}
{disabled}
{suggestionTags} {suggestionTags}
on:add={(e) => { on:add={(e) => {
tags = [...tags, { name: e.detail }]; tags = [...tags, { name: e.detail }];