startEditingTag(index)}
onKeyDown={(event) => {
if (event.target !== event.currentTarget) return
handleKeyboardActivation(event, () => startEditingTag(index))
}}
- >
-
- {tag.displayName}
-
-
- {FIELD_TYPE_LABELS[tag.fieldType] || tag.fieldType}
-
-
-
- {formatValueForDisplay(tag.value, tag.fieldType)}
-
-
-
-
-
+ name={tag.displayName}
+ typeLabel={FIELD_TYPE_LABELS[tag.fieldType] || tag.fieldType}
+ detail={formatValueForDisplay(tag.value, tag.fieldType)}
+ truncateDetail
+ removeLabel='Remove tag'
+ onRemove={(e) => {
+ e.stopPropagation()
+ handleRemoveTag(index)
+ }}
+ />
{editingTagIndex === index && (
diff --git a/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/components/base-tags-modal/base-tags-modal.tsx b/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/components/base-tags-modal/base-tags-modal.tsx
index 11fd1e18f6d..8278f269f57 100644
--- a/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/components/base-tags-modal/base-tags-modal.tsx
+++ b/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/components/base-tags-modal/base-tags-modal.tsx
@@ -14,7 +14,6 @@ import {
type ComboboxOption,
handleKeyboardActivation,
} from '@sim/emcn'
-import { Trash } from '@sim/emcn/icons'
import { createLogger } from '@sim/logger'
import { getDocumentIcon } from '@/components/icons/document-icons'
import type { TagUsageData } from '@/lib/api/contracts/knowledge'
@@ -24,6 +23,7 @@ import {
SUPPORTED_FIELD_TYPES,
TAG_SLOT_CONFIG,
} from '@/lib/knowledge/constants'
+import { KnowledgeTagRow } from '@/app/workspace/[workspaceId]/knowledge/components/knowledge-tag-row'
import {
type TagDefinition,
useKnowledgeBaseTagDefinitions,
@@ -270,41 +270,28 @@ export function BaseTagsModal({ open, onOpenChange, knowledgeBaseId }: BaseTagsM
{kbTagDefinitions.map((tag) => {
const usage = getTagUsage(tag.tagSlot)
return (
-
handleViewDocuments(tag)}
onKeyDown={(event) => {
if (event.target !== event.currentTarget) return
handleKeyboardActivation(event, () => handleViewDocuments(tag))
}}
- >
-
- {tag.displayName}
-
-
- {FIELD_TYPE_LABELS[tag.fieldType] || tag.fieldType}
-
-
-
- {usage.documentCount} document{usage.documentCount !== 1 ? 's' : ''}
-
-
-
-
-
+ name={tag.displayName}
+ typeLabel={FIELD_TYPE_LABELS[tag.fieldType] || tag.fieldType}
+ detail={
+ <>
+ {usage.documentCount} document{usage.documentCount !== 1 ? 's' : ''}
+ >
+ }
+ removeLabel='Delete Tag'
+ onRemove={(e) => {
+ e.stopPropagation()
+ handleDeleteTagClick(tag)
+ }}
+ />
)
})}
diff --git a/apps/sim/app/workspace/[workspaceId]/knowledge/components/knowledge-tag-row.tsx b/apps/sim/app/workspace/[workspaceId]/knowledge/components/knowledge-tag-row.tsx
new file mode 100644
index 00000000000..c94e9f37940
--- /dev/null
+++ b/apps/sim/app/workspace/[workspaceId]/knowledge/components/knowledge-tag-row.tsx
@@ -0,0 +1,55 @@
+import type { HTMLAttributes, MouseEventHandler, ReactNode } from 'react'
+import { Button, cn } from '@sim/emcn'
+import { Trash } from '@sim/emcn/icons'
+
+interface KnowledgeTagRowProps
+ extends Omit
, 'children' | 'className'> {
+ name: string
+ typeLabel: string
+ detail: ReactNode
+ truncateDetail?: boolean
+ removeLabel: string
+ onRemove: MouseEventHandler
+}
+
+/** Shared tag summary; callers retain activation, keyboard and removal behavior. */
+export function KnowledgeTagRow({
+ name,
+ typeLabel,
+ detail,
+ truncateDetail = false,
+ removeLabel,
+ onRemove,
+ ...props
+}: KnowledgeTagRowProps) {
+ return (
+
+
{name}
+
+ {typeLabel}
+
+
+
+ {detail}
+
+
+
+
+
+ )
+}