diff --git a/apps/sim/app/workspace/[workspaceId]/components/resource/components/resource-header/resource-header.tsx b/apps/sim/app/workspace/[workspaceId]/components/resource/components/resource-header/resource-header.tsx index a28d735a1f8..df0960385c5 100644 --- a/apps/sim/app/workspace/[workspaceId]/components/resource/components/resource-header/resource-header.tsx +++ b/apps/sim/app/workspace/[workspaceId]/components/resource/components/resource-header/resource-header.tsx @@ -33,7 +33,6 @@ import { ArrowUpLeft } from 'lucide-react' import { createPortal } from 'react-dom' import { TITLE_BAR_LANE_PT } from '@/components/page-header-bar' import { InlineRenameInput } from '@/app/workspace/[workspaceId]/components/inline-rename-input' -import { FloatingOverflowText } from '@/app/workspace/[workspaceId]/components/resource/components/floating-overflow-text' export interface DropdownOption { label: string @@ -195,10 +194,9 @@ export const ResourceHeader = memo(function ResourceHeader({ {TitleIcon && } {titleLabel && ( - + + {titleLabel} + )} )} diff --git a/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/[documentId]/document.tsx b/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/[documentId]/document.tsx index f34ed657dbc..0f014c6a00d 100644 --- a/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/[documentId]/document.tsx +++ b/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/[documentId]/document.tsx @@ -21,11 +21,7 @@ import type { SelectableConfig, SortConfig, } from '@/app/workspace/[workspaceId]/components' -import { - EMPTY_CELL_PLACEHOLDER, - FloatingOverflowText, - Resource, -} from '@/app/workspace/[workspaceId]/components' +import { EMPTY_CELL_PLACEHOLDER, Resource } from '@/app/workspace/[workspaceId]/components' import { ChunkContextMenu, ChunkEditor, @@ -948,13 +944,9 @@ export function Document({ cells: { content: { content: ( - + - + ), }, index: { diff --git a/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/base.tsx b/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/base.tsx index f5f988ec658..c89a42a609f 100644 --- a/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/base.tsx +++ b/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/base.tsx @@ -18,9 +18,12 @@ import { chipContentLabelClass, chipVariants, cn, + FloatingTooltip, + isTextClipped, Loader, Tooltip, Trash, + useFloatingTooltip, } from '@sim/emcn' import { Database, DatabaseX } from '@sim/emcn/icons' import { createLogger } from '@sim/logger' @@ -177,6 +180,39 @@ interface TagValue { value: string } +/** + * Tags cell for the documents table. Shows the joined tag values inline and + * reveals the full `name: value` breakdown only when the inline text is + * actually clipped — an un-truncated cell already says everything the tooltip + * would. + */ +function DocumentTagsCell({ tags }: { tags: TagValue[] }) { + const { state, handlers } = useFloatingTooltip(isTextClipped) + + return ( + <> + e.stopPropagation()} + onKeyDown={(e) => e.stopPropagation()} + {...handlers} + > + {tags.map((tag) => tag.value).join(', ')} + + +
+ {tags.map((tag) => ( +
+ {tag.displayName}: {tag.value} +
+ ))} +
+
+ + ) +} + /** * Computes tag values for a document */ @@ -1057,7 +1093,6 @@ export function KnowledgeBase({ const DocIcon = ConnectorIcon || getDocumentIcon(doc.mimeType, doc.filename) const tags = getDocumentTags(doc, tagDefinitions) - const tagsDisplayText = tags.map((t) => t.value).join(', ') const statusCell: ResourceCell = doc.processingStatus === 'failed' && doc.processingError @@ -1076,34 +1111,7 @@ export function KnowledgeBase({ : { content: getStatusBadge(doc) } const tagsCell: ResourceCell = - tags.length === 0 - ? { label: null } - : { - content: ( - - - e.stopPropagation()} - onKeyDown={(e) => e.stopPropagation()} - > - {tagsDisplayText} - - - -
- {tags.map((tag) => ( -
- {tag.displayName}:{' '} - {tag.value} -
- ))} -
-
-
- ), - } + tags.length === 0 ? { label: null } : { content: } return { id: doc.id, diff --git a/packages/workflow-renderer/src/note/note-block-view.tsx b/packages/workflow-renderer/src/note/note-block-view.tsx index 4b0a3e50159..c66369f9e97 100644 --- a/packages/workflow-renderer/src/note/note-block-view.tsx +++ b/packages/workflow-renderer/src/note/note-block-view.tsx @@ -4,6 +4,7 @@ import { Streamdown } from 'streamdown' import 'streamdown/styles.css' import { cn, handleKeyboardActivation } from '@sim/emcn' import { getEmbedInfo } from '@sim/utils/media-embed' +import { OverflowSpan } from '../lib/overflow-span' const EMBED_SCALE = 0.78 const EMBED_INVERSE_SCALE = `${(1 / EMBED_SCALE) * 100}%` @@ -217,15 +218,13 @@ export function NoteBlockView({
- - {name} - + />
diff --git a/packages/workflow-renderer/src/subflow/subflow-node-view.tsx b/packages/workflow-renderer/src/subflow/subflow-node-view.tsx index 335a97b4591..f2eea5eef62 100644 --- a/packages/workflow-renderer/src/subflow/subflow-node-view.tsx +++ b/packages/workflow-renderer/src/subflow/subflow-node-view.tsx @@ -3,6 +3,7 @@ import { Badge, cn, handleKeyboardActivation } from '@sim/emcn' import { RepeatIcon, SplitIcon } from 'lucide-react' import { Handle, Position } from 'reactflow' import { HANDLE_POSITIONS } from '../dimensions' +import { OverflowSpan } from '../lib/overflow-span' import { tileIconColorClass } from '../lib/tile-icon-color' import type { BlockRunStatus, DiffStatus } from '../types' @@ -171,15 +172,13 @@ export function SubflowNodeView({ )} /> - - {blockName} - + />
{!isEnabled && disabled} diff --git a/packages/workflow-renderer/src/workflow-block/sub-block-row-view.tsx b/packages/workflow-renderer/src/workflow-block/sub-block-row-view.tsx index 87c4ac824b4..9fac04f93f7 100644 --- a/packages/workflow-renderer/src/workflow-block/sub-block-row-view.tsx +++ b/packages/workflow-renderer/src/workflow-block/sub-block-row-view.tsx @@ -33,13 +33,14 @@ export function SubBlockRowView({ title, displayValue, isMonospace }: SubBlockRo className='min-w-0 truncate text-[var(--text-tertiary)] text-sm capitalize' /> {displayValue !== undefined && ( - + > + {displayValue} + )}
)