+ {/* ID Display Section - Always visible for active, hover for others, and always visible on mobile */}
+
{document.id.slice(0, 8)}...
-
+
+ {/* Enhanced Copy Document ID Button with shift-click support */}
+
+
+ {/* Mobile Copy Link Button - shown on iOS/Android */}
+ {needsCopyLinkButton() && (
+
+ )}
+
{/* Delete Button */}
diff --git a/archon-ui-main/src/components/project-tasks/DraggableTaskCard.tsx b/archon-ui-main/src/components/project-tasks/DraggableTaskCard.tsx
index a610030ff1..d53be1a916 100644
--- a/archon-ui-main/src/components/project-tasks/DraggableTaskCard.tsx
+++ b/archon-ui-main/src/components/project-tasks/DraggableTaskCard.tsx
@@ -1,8 +1,11 @@
import React, { useRef, useState } from 'react';
import { useDrag, useDrop } from 'react-dnd';
-import { Edit, Trash2, RefreshCw, Tag, User, Bot, Clipboard } from 'lucide-react';
+import { Edit, Trash2, RefreshCw, Tag, User, Bot, Clipboard, ExternalLink } from 'lucide-react';
import { Task } from './TaskTableView';
import { ItemTypes, getAssigneeIcon, getAssigneeGlow, getOrderColor, getOrderGlow } from '../../lib/task-utils';
+import { handleCopyClick, copyUrlToClipboard } from '../../utils/copyHelpers';
+import { needsCopyLinkButton } from '../../utils/platformDetection';
+import { useToast } from '../../contexts/ToastContext';
export interface DraggableTaskCardProps {
task: Task;
@@ -15,6 +18,9 @@ export interface DraggableTaskCardProps {
allTasks?: Task[];
hoveredTaskId?: string | null;
onTaskHover?: (taskId: string | null) => void;
+ selectedTaskId?: string;
+ projectId: string;
+ currentView?: 'table' | 'board';
}
export const DraggableTaskCard = ({
@@ -26,7 +32,11 @@ export const DraggableTaskCard = ({
allTasks = [],
hoveredTaskId,
onTaskHover,
+ selectedTaskId,
+ projectId,
+ currentView = 'board'
}: DraggableTaskCardProps) => {
+ const { showToast } = useToast();
const [{ isDragging }, drag] = useDrag({
type: ItemTypes.TASK,
@@ -90,6 +100,11 @@ export const DraggableTaskCard = ({
const cardScale = 'scale-100';
const cardOpacity = 'opacity-100';
+ // Highlight for selected task (blue) and related tasks (cyan)
+ const selectedHighlight = selectedTaskId === task.id
+ ? 'bg-gradient-to-br from-blue-100/90 to-purple-100/90 dark:from-blue-900/50 dark:to-purple-900/50 border-blue-400/70 dark:border-blue-500/60 shadow-[0_0_15px_rgba(59,130,246,0.3)]'
+ : '';
+
// Subtle highlight effect for related tasks - applied to the card, not parent
const highlightGlow = isHighlighted
? 'border-cyan-400/50 shadow-[0_0_8px_rgba(34,211,238,0.2)]'
@@ -107,6 +122,7 @@ export const DraggableTaskCard = ({
return (
drag(drop(node))}
+ data-task-id={task.id}
style={{
perspective: '1000px',
transformStyle: 'preserve-3d'
@@ -119,7 +135,7 @@ export const DraggableTaskCard = ({
className={`relative w-full min-h-[140px] transform-style-preserve-3d ${isFlipped ? 'rotate-y-180' : ''}`}
>
{/* Front side with subtle hover effect */}
-
+
{/* Priority indicator */}
@@ -196,33 +212,83 @@ export const DraggableTaskCard = ({
{task.assignee?.name || 'User'}
-
+
+
+ {/* Enhanced Copy Task ID Button with shift-click support */}
+
+
+ {/* Mobile Copy Link Button - shown on iOS/Android */}
+ {needsCopyLinkButton() && (
+
+ )}
+