Spaces:
Running
Running
Muhammad Farooq commited on
read this full repo including code and make a similar simple project that have purpose of graphics agents like it work like a human, check email, copy body of email and paste it on the deepseek or chatgpt.com and get the reply and also do work with the user on desktop https://github.com/huggingface/screensuite?tab=readme-ov-file - Initial Deployment
Browse files- README.md +6 -4
- index.html +535 -19
README.md
CHANGED
|
@@ -1,10 +1,12 @@
|
|
| 1 |
---
|
| 2 |
-
title:
|
| 3 |
-
emoji:
|
| 4 |
colorFrom: blue
|
| 5 |
-
colorTo:
|
| 6 |
sdk: static
|
| 7 |
pinned: false
|
|
|
|
|
|
|
| 8 |
---
|
| 9 |
|
| 10 |
-
Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
|
|
|
|
| 1 |
---
|
| 2 |
+
title: email-checker
|
| 3 |
+
emoji: 🐳
|
| 4 |
colorFrom: blue
|
| 5 |
+
colorTo: yellow
|
| 6 |
sdk: static
|
| 7 |
pinned: false
|
| 8 |
+
tags:
|
| 9 |
+
- deepsite
|
| 10 |
---
|
| 11 |
|
| 12 |
+
Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
|
index.html
CHANGED
|
@@ -1,19 +1,535 @@
|
|
| 1 |
-
<!
|
| 2 |
-
<html>
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
|
| 19 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<!DOCTYPE html>
|
| 2 |
+
<html lang="en">
|
| 3 |
+
<head>
|
| 4 |
+
<meta charset="UTF-8">
|
| 5 |
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
| 6 |
+
<title>AI Graphics Assistant</title>
|
| 7 |
+
<script src="https://cdn.tailwindcss.com"></script>
|
| 8 |
+
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
|
| 9 |
+
<style>
|
| 10 |
+
.window {
|
| 11 |
+
box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
|
| 12 |
+
transition: all 0.3s ease;
|
| 13 |
+
}
|
| 14 |
+
.window:hover {
|
| 15 |
+
transform: translateY(-2px);
|
| 16 |
+
box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
|
| 17 |
+
}
|
| 18 |
+
.taskbar {
|
| 19 |
+
backdrop-filter: blur(10px);
|
| 20 |
+
}
|
| 21 |
+
.email-item:hover {
|
| 22 |
+
background-color: rgba(59, 130, 246, 0.1);
|
| 23 |
+
}
|
| 24 |
+
.ai-response {
|
| 25 |
+
border-left: 4px solid #3b82f6;
|
| 26 |
+
}
|
| 27 |
+
.typing-indicator span {
|
| 28 |
+
display: inline-block;
|
| 29 |
+
width: 8px;
|
| 30 |
+
height: 8px;
|
| 31 |
+
border-radius: 50%;
|
| 32 |
+
background-color: #6b7280;
|
| 33 |
+
margin: 0 2px;
|
| 34 |
+
animation: bounce 1.4s infinite ease-in-out;
|
| 35 |
+
}
|
| 36 |
+
.typing-indicator span:nth-child(2) {
|
| 37 |
+
animation-delay: 0.2s;
|
| 38 |
+
}
|
| 39 |
+
.typing-indicator span:nth-child(3) {
|
| 40 |
+
animation-delay: 0.4s;
|
| 41 |
+
}
|
| 42 |
+
@keyframes bounce {
|
| 43 |
+
0%, 60%, 100% { transform: translateY(0); }
|
| 44 |
+
30% { transform: translateY(-5px); }
|
| 45 |
+
}
|
| 46 |
+
.desktop-icon {
|
| 47 |
+
transition: all 0.2s ease;
|
| 48 |
+
}
|
| 49 |
+
.desktop-icon:hover {
|
| 50 |
+
transform: scale(1.05);
|
| 51 |
+
background-color: rgba(59, 130, 246, 0.1);
|
| 52 |
+
}
|
| 53 |
+
.resize-handle {
|
| 54 |
+
position: absolute;
|
| 55 |
+
width: 10px;
|
| 56 |
+
height: 10px;
|
| 57 |
+
right: 0;
|
| 58 |
+
bottom: 0;
|
| 59 |
+
cursor: nwse-resize;
|
| 60 |
+
}
|
| 61 |
+
</style>
|
| 62 |
+
</head>
|
| 63 |
+
<body class="bg-gray-100 h-screen overflow-hidden font-sans">
|
| 64 |
+
<!-- Desktop Background -->
|
| 65 |
+
<div class="absolute inset-0 bg-gradient-to-br from-blue-50 to-indigo-100"></div>
|
| 66 |
+
|
| 67 |
+
<!-- Desktop Icons -->
|
| 68 |
+
<div class="absolute top-4 left-4 flex flex-col space-y-4">
|
| 69 |
+
<div class="desktop-icon w-16 h-16 flex flex-col items-center justify-center p-2 rounded cursor-pointer">
|
| 70 |
+
<i class="fas fa-envelope text-blue-500 text-2xl mb-1"></i>
|
| 71 |
+
<span class="text-xs text-center text-gray-700">Email Client</span>
|
| 72 |
+
</div>
|
| 73 |
+
<div class="desktop-icon w-16 h-16 flex flex-col items-center justify-center p-2 rounded cursor-pointer">
|
| 74 |
+
<i class="fas fa-robot text-indigo-500 text-2xl mb-1"></i>
|
| 75 |
+
<span class="text-xs text-center text-gray-700">AI Assistant</span>
|
| 76 |
+
</div>
|
| 77 |
+
<div class="desktop-icon w-16 h-16 flex flex-col items-center justify-center p-2 rounded cursor-pointer">
|
| 78 |
+
<i class="fas fa-tasks text-green-500 text-2xl mb-1"></i>
|
| 79 |
+
<span class="text-xs text-center text-gray-700">Tasks</span>
|
| 80 |
+
</div>
|
| 81 |
+
</div>
|
| 82 |
+
|
| 83 |
+
<!-- Windows -->
|
| 84 |
+
<div class="absolute top-20 left-20 w-96 bg-white rounded-lg window" id="email-window">
|
| 85 |
+
<div class="bg-gray-800 text-white px-3 py-2 rounded-t-lg flex justify-between items-center">
|
| 86 |
+
<div class="flex items-center">
|
| 87 |
+
<i class="fas fa-envelope mr-2"></i>
|
| 88 |
+
<span>Email Client</span>
|
| 89 |
+
</div>
|
| 90 |
+
<div class="flex space-x-2">
|
| 91 |
+
<button class="w-3 h-3 rounded-full bg-yellow-500"></button>
|
| 92 |
+
<button class="w-3 h-3 rounded-full bg-green-500"></button>
|
| 93 |
+
<button class="w-3 h-3 rounded-full bg-red-500"></button>
|
| 94 |
+
</div>
|
| 95 |
+
</div>
|
| 96 |
+
<div class="p-4">
|
| 97 |
+
<div class="flex mb-4">
|
| 98 |
+
<input type="text" placeholder="Search emails..." class="flex-1 px-3 py-2 border rounded-l focus:outline-none focus:ring-1 focus:ring-blue-500">
|
| 99 |
+
<button class="bg-blue-500 text-white px-3 py-2 rounded-r hover:bg-blue-600">
|
| 100 |
+
<i class="fas fa-search"></i>
|
| 101 |
+
</button>
|
| 102 |
+
</div>
|
| 103 |
+
<div class="border rounded overflow-hidden">
|
| 104 |
+
<div class="bg-gray-100 p-2 border-b flex justify-between items-center">
|
| 105 |
+
<span class="font-medium">Inbox (3 new)</span>
|
| 106 |
+
<button class="text-blue-500 hover:text-blue-700">
|
| 107 |
+
<i class="fas fa-sync-alt"></i>
|
| 108 |
+
</button>
|
| 109 |
+
</div>
|
| 110 |
+
<div class="divide-y divide-gray-200 max-h-64 overflow-y-auto" id="email-list">
|
| 111 |
+
<div class="email-item p-3 cursor-pointer hover:bg-blue-50" data-id="1">
|
| 112 |
+
<div class="flex justify-between">
|
| 113 |
+
<span class="font-medium">John Doe</span>
|
| 114 |
+
<span class="text-xs text-gray-500">10:30 AM</span>
|
| 115 |
+
</div>
|
| 116 |
+
<div class="text-sm text-gray-700">Project deadline extension request</div>
|
| 117 |
+
<div class="text-xs text-gray-500 truncate">Hi team, I wanted to request an extension for the current project deadline due to unexpected...</div>
|
| 118 |
+
</div>
|
| 119 |
+
<div class="email-item p-3 cursor-pointer hover:bg-blue-50" data-id="2">
|
| 120 |
+
<div class="flex justify-between">
|
| 121 |
+
<span class="font-medium">Sarah Johnson</span>
|
| 122 |
+
<span class="text-xs text-gray-500">9:15 AM</span>
|
| 123 |
+
</div>
|
| 124 |
+
<div class="text-sm text-gray-700">Meeting notes from yesterday</div>
|
| 125 |
+
<div class="text-xs text-gray-500 truncate">Attached are the meeting notes from our discussion yesterday about the new product features...</div>
|
| 126 |
+
</div>
|
| 127 |
+
<div class="email-item p-3 cursor-pointer hover:bg-blue-50" data-id="3">
|
| 128 |
+
<div class="flex justify-between">
|
| 129 |
+
<span class="font-medium">Tech Support</span>
|
| 130 |
+
<span class="text-xs text-gray-500">Yesterday</span>
|
| 131 |
+
</div>
|
| 132 |
+
<div class="text-sm text-gray-700">Your support ticket #45782</div>
|
| 133 |
+
<div class="text-xs text-gray-500 truncate">We've resolved your issue with the login authentication. Please let us know if you experience any further...</div>
|
| 134 |
+
</div>
|
| 135 |
+
</div>
|
| 136 |
+
</div>
|
| 137 |
+
</div>
|
| 138 |
+
<div class="resize-handle"></div>
|
| 139 |
+
</div>
|
| 140 |
+
|
| 141 |
+
<div class="absolute top-32 left-96 w-96 bg-white rounded-lg window hidden" id="email-detail-window">
|
| 142 |
+
<div class="bg-gray-800 text-white px-3 py-2 rounded-t-lg flex justify-between items-center">
|
| 143 |
+
<div class="flex items-center">
|
| 144 |
+
<i class="fas fa-envelope-open mr-2"></i>
|
| 145 |
+
<span>Email Details</span>
|
| 146 |
+
</div>
|
| 147 |
+
<div class="flex space-x-2">
|
| 148 |
+
<button class="w-3 h-3 rounded-full bg-yellow-500"></button>
|
| 149 |
+
<button class="w-3 h-3 rounded-full bg-green-500"></button>
|
| 150 |
+
<button class="w-3 h-3 rounded-full bg-red-500"></button>
|
| 151 |
+
</div>
|
| 152 |
+
</div>
|
| 153 |
+
<div class="p-4">
|
| 154 |
+
<div class="mb-4">
|
| 155 |
+
<div class="flex justify-between items-start mb-2">
|
| 156 |
+
<div>
|
| 157 |
+
<h3 class="font-medium" id="email-sender">John Doe</h3>
|
| 158 |
+
<p class="text-xs text-gray-500" id="email-subject">Project deadline extension request</p>
|
| 159 |
+
</div>
|
| 160 |
+
<span class="text-xs text-gray-500" id="email-time">10:30 AM</span>
|
| 161 |
+
</div>
|
| 162 |
+
<div class="text-sm text-gray-700 p-3 bg-gray-50 rounded" id="email-body">
|
| 163 |
+
Hi team,<br><br>
|
| 164 |
+
I wanted to request an extension for the current project deadline due to unexpected delays in receiving the design assets from our vendor. We're currently two days behind schedule and would need at least three more working days to complete the implementation.<br><br>
|
| 165 |
+
Please let me know if this would be possible. I've attached the revised timeline for your review.<br><br>
|
| 166 |
+
Best regards,<br>
|
| 167 |
+
John
|
| 168 |
+
</div>
|
| 169 |
+
</div>
|
| 170 |
+
<div class="flex space-x-2">
|
| 171 |
+
<button class="bg-blue-500 text-white px-3 py-1 rounded hover:bg-blue-600 text-sm" id="process-email-btn">
|
| 172 |
+
<i class="fas fa-robot mr-1"></i> Process with AI
|
| 173 |
+
</button>
|
| 174 |
+
<button class="bg-gray-200 text-gray-700 px-3 py-1 rounded hover:bg-gray-300 text-sm">
|
| 175 |
+
<i class="fas fa-reply mr-1"></i> Reply
|
| 176 |
+
</button>
|
| 177 |
+
<button class="bg-gray-200 text-gray-700 px-3 py-1 rounded hover:bg-gray-300 text-sm">
|
| 178 |
+
<i class="fas fa-trash mr-1"></i> Delete
|
| 179 |
+
</button>
|
| 180 |
+
</div>
|
| 181 |
+
</div>
|
| 182 |
+
<div class="resize-handle"></div>
|
| 183 |
+
</div>
|
| 184 |
+
|
| 185 |
+
<div class="absolute top-40 right-20 w-96 bg-white rounded-lg window hidden" id="ai-assistant-window">
|
| 186 |
+
<div class="bg-indigo-800 text-white px-3 py-2 rounded-t-lg flex justify-between items-center">
|
| 187 |
+
<div class="flex items-center">
|
| 188 |
+
<i class="fas fa-robot mr-2"></i>
|
| 189 |
+
<span>AI Assistant</span>
|
| 190 |
+
</div>
|
| 191 |
+
<div class="flex space-x-2">
|
| 192 |
+
<button class="w-3 h-3 rounded-full bg-yellow-500"></button>
|
| 193 |
+
<button class="w-3 h-3 rounded-full bg-green-500"></button>
|
| 194 |
+
<button class="w-3 h-3 rounded-full bg-red-500"></button>
|
| 195 |
+
</div>
|
| 196 |
+
</div>
|
| 197 |
+
<div class="p-4">
|
| 198 |
+
<div class="mb-4 flex items-start">
|
| 199 |
+
<div class="bg-indigo-100 text-indigo-800 rounded-full w-8 h-8 flex items-center justify-center mr-2">
|
| 200 |
+
<i class="fas fa-robot"></i>
|
| 201 |
+
</div>
|
| 202 |
+
<div class="flex-1">
|
| 203 |
+
<div class="bg-gray-100 p-3 rounded-lg ai-response">
|
| 204 |
+
<p>Hello! I'm your AI assistant. I can help you process emails, generate responses, and assist with various tasks. How can I help you today?</p>
|
| 205 |
+
</div>
|
| 206 |
+
</div>
|
| 207 |
+
</div>
|
| 208 |
+
|
| 209 |
+
<div class="mb-4 flex items-start hidden" id="email-processing-container">
|
| 210 |
+
<div class="bg-indigo-100 text-indigo-800 rounded-full w-8 h-8 flex items-center justify-center mr-2">
|
| 211 |
+
<i class="fas fa-robot"></i>
|
| 212 |
+
</div>
|
| 213 |
+
<div class="flex-1">
|
| 214 |
+
<div class="bg-gray-100 p-3 rounded-lg ai-response">
|
| 215 |
+
<p class="font-medium mb-2">Processing email from <span id="ai-email-sender">John Doe</span>:</p>
|
| 216 |
+
<div class="text-sm mb-3 p-2 bg-white rounded border" id="ai-email-content">
|
| 217 |
+
Hi team, I wanted to request an extension for the current project deadline due to unexpected delays...
|
| 218 |
+
</div>
|
| 219 |
+
<div class="typing-indicator mb-2 hidden" id="ai-typing">
|
| 220 |
+
<span></span>
|
| 221 |
+
<span></span>
|
| 222 |
+
<span></span>
|
| 223 |
+
</div>
|
| 224 |
+
<div class="hidden" id="ai-response-content">
|
| 225 |
+
<p class="font-medium mb-1">Suggested Response:</p>
|
| 226 |
+
<div class="text-sm p-2 bg-white rounded border mb-2" id="ai-suggested-response">
|
| 227 |
+
Hi John,<br><br>
|
| 228 |
+
Thank you for your email. We understand that unexpected delays can occur and we're happy to accommodate your request for a deadline extension. The additional three working days you've requested are approved.<br><br>
|
| 229 |
+
Please keep us updated on your progress and let us know if you need any additional support from our end.<br><br>
|
| 230 |
+
Best regards,<br>
|
| 231 |
+
[Your Name]
|
| 232 |
+
</div>
|
| 233 |
+
<div class="flex space-x-2">
|
| 234 |
+
<button class="bg-indigo-500 text-white px-3 py-1 rounded hover:bg-indigo-600 text-sm" id="use-response-btn">
|
| 235 |
+
<i class="fas fa-check mr-1"></i> Use This Response
|
| 236 |
+
</button>
|
| 237 |
+
<button class="bg-gray-200 text-gray-700 px-3 py-1 rounded hover:bg-gray-300 text-sm" id="regenerate-btn">
|
| 238 |
+
<i class="fas fa-sync-alt mr-1"></i> Regenerate
|
| 239 |
+
</button>
|
| 240 |
+
</div>
|
| 241 |
+
</div>
|
| 242 |
+
</div>
|
| 243 |
+
</div>
|
| 244 |
+
</div>
|
| 245 |
+
|
| 246 |
+
<div class="mt-4">
|
| 247 |
+
<div class="flex">
|
| 248 |
+
<input type="text" placeholder="Ask the AI assistant..." class="flex-1 px-3 py-2 border rounded-l focus:outline-none focus:ring-1 focus:ring-indigo-500" id="ai-prompt">
|
| 249 |
+
<button class="bg-indigo-500 text-white px-3 py-2 rounded-r hover:bg-indigo-600" id="send-prompt-btn">
|
| 250 |
+
<i class="fas fa-paper-plane"></i>
|
| 251 |
+
</button>
|
| 252 |
+
</div>
|
| 253 |
+
</div>
|
| 254 |
+
</div>
|
| 255 |
+
<div class="resize-handle"></div>
|
| 256 |
+
</div>
|
| 257 |
+
|
| 258 |
+
<!-- Taskbar -->
|
| 259 |
+
<div class="absolute bottom-0 left-0 right-0 bg-gray-800 bg-opacity-90 text-white taskbar">
|
| 260 |
+
<div class="flex items-center justify-between px-4 py-1">
|
| 261 |
+
<div class="flex items-center space-x-4">
|
| 262 |
+
<button class="p-2 rounded hover:bg-gray-700" id="start-btn">
|
| 263 |
+
<i class="fas fa-bars"></i>
|
| 264 |
+
</button>
|
| 265 |
+
<button class="p-2 rounded hover:bg-gray-700" id="email-app-btn">
|
| 266 |
+
<i class="fas fa-envelope"></i>
|
| 267 |
+
</button>
|
| 268 |
+
<button class="p-2 rounded hover:bg-gray-700" id="ai-app-btn">
|
| 269 |
+
<i class="fas fa-robot"></i>
|
| 270 |
+
</button>
|
| 271 |
+
</div>
|
| 272 |
+
<div class="flex items-center space-x-2">
|
| 273 |
+
<span id="current-time" class="text-sm">10:45 AM</span>
|
| 274 |
+
<button class="p-1 rounded hover:bg-gray-700">
|
| 275 |
+
<i class="fas fa-wifi"></i>
|
| 276 |
+
</button>
|
| 277 |
+
<button class="p-1 rounded hover:bg-gray-700">
|
| 278 |
+
<i class="fas fa-battery-three-quarters"></i>
|
| 279 |
+
</button>
|
| 280 |
+
</div>
|
| 281 |
+
</div>
|
| 282 |
+
</div>
|
| 283 |
+
|
| 284 |
+
<script>
|
| 285 |
+
// Update current time
|
| 286 |
+
function updateTime() {
|
| 287 |
+
const now = new Date();
|
| 288 |
+
let hours = now.getHours();
|
| 289 |
+
const minutes = now.getMinutes().toString().padStart(2, '0');
|
| 290 |
+
const ampm = hours >= 12 ? 'PM' : 'AM';
|
| 291 |
+
hours = hours % 12;
|
| 292 |
+
hours = hours ? hours : 12; // the hour '0' should be '12'
|
| 293 |
+
document.getElementById('current-time').textContent = `${hours}:${minutes} ${ampm}`;
|
| 294 |
+
}
|
| 295 |
+
setInterval(updateTime, 1000);
|
| 296 |
+
updateTime();
|
| 297 |
+
|
| 298 |
+
// Window management
|
| 299 |
+
let activeWindow = null;
|
| 300 |
+
let zIndex = 1;
|
| 301 |
+
|
| 302 |
+
function bringToFront(windowElement) {
|
| 303 |
+
windowElement.style.zIndex = zIndex++;
|
| 304 |
+
activeWindow = windowElement;
|
| 305 |
+
}
|
| 306 |
+
|
| 307 |
+
function setupWindow(windowElement) {
|
| 308 |
+
const header = windowElement.querySelector('.bg-gray-800, .bg-indigo-800');
|
| 309 |
+
let isDragging = false;
|
| 310 |
+
let offsetX, offsetY;
|
| 311 |
+
|
| 312 |
+
// Make window draggable
|
| 313 |
+
header.addEventListener('mousedown', (e) => {
|
| 314 |
+
isDragging = true;
|
| 315 |
+
offsetX = e.clientX - windowElement.getBoundingClientRect().left;
|
| 316 |
+
offsetY = e.clientY - windowElement.getBoundingClientRect().top;
|
| 317 |
+
bringToFront(windowElement);
|
| 318 |
+
e.preventDefault();
|
| 319 |
+
});
|
| 320 |
+
|
| 321 |
+
document.addEventListener('mousemove', (e) => {
|
| 322 |
+
if (!isDragging) return;
|
| 323 |
+
|
| 324 |
+
const x = e.clientX - offsetX;
|
| 325 |
+
const y = e.clientY - offsetY;
|
| 326 |
+
|
| 327 |
+
windowElement.style.left = `${x}px`;
|
| 328 |
+
windowElement.style.top = `${y}px`;
|
| 329 |
+
});
|
| 330 |
+
|
| 331 |
+
document.addEventListener('mouseup', () => {
|
| 332 |
+
isDragging = false;
|
| 333 |
+
});
|
| 334 |
+
|
| 335 |
+
// Make window resizable
|
| 336 |
+
const resizeHandle = windowElement.querySelector('.resize-handle');
|
| 337 |
+
let isResizing = false;
|
| 338 |
+
let startX, startY, startWidth, startHeight;
|
| 339 |
+
|
| 340 |
+
resizeHandle.addEventListener('mousedown', (e) => {
|
| 341 |
+
isResizing = true;
|
| 342 |
+
startX = e.clientX;
|
| 343 |
+
startY = e.clientY;
|
| 344 |
+
startWidth = parseInt(document.defaultView.getComputedStyle(windowElement).width, 10);
|
| 345 |
+
startHeight = parseInt(document.defaultView.getComputedStyle(windowElement).height, 10);
|
| 346 |
+
bringToFront(windowElement);
|
| 347 |
+
e.preventDefault();
|
| 348 |
+
});
|
| 349 |
+
|
| 350 |
+
document.addEventListener('mousemove', (e) => {
|
| 351 |
+
if (!isResizing) return;
|
| 352 |
+
|
| 353 |
+
const width = startWidth + (e.clientX - startX);
|
| 354 |
+
const height = startHeight + (e.clientY - startY);
|
| 355 |
+
|
| 356 |
+
windowElement.style.width = `${width}px`;
|
| 357 |
+
windowElement.style.height = `${height}px`;
|
| 358 |
+
});
|
| 359 |
+
|
| 360 |
+
document.addEventListener('mouseup', () => {
|
| 361 |
+
isResizing = false;
|
| 362 |
+
});
|
| 363 |
+
|
| 364 |
+
// Close buttons
|
| 365 |
+
const closeButtons = windowElement.querySelectorAll('.bg-red-500');
|
| 366 |
+
closeButtons.forEach(button => {
|
| 367 |
+
button.addEventListener('click', () => {
|
| 368 |
+
windowElement.style.display = 'none';
|
| 369 |
+
});
|
| 370 |
+
});
|
| 371 |
+
|
| 372 |
+
// Minimize buttons
|
| 373 |
+
const minimizeButtons = windowElement.querySelectorAll('.bg-yellow-500');
|
| 374 |
+
minimizeButtons.forEach(button => {
|
| 375 |
+
button.addEventListener('click', () => {
|
| 376 |
+
windowElement.style.display = 'none';
|
| 377 |
+
// In a real app, we'd add it to the taskbar
|
| 378 |
+
});
|
| 379 |
+
});
|
| 380 |
+
|
| 381 |
+
// Maximize buttons
|
| 382 |
+
const maximizeButtons = windowElement.querySelectorAll('.bg-green-500');
|
| 383 |
+
maximizeButtons.forEach(button => {
|
| 384 |
+
button.addEventListener('click', () => {
|
| 385 |
+
if (windowElement.style.width === '90vw' && windowElement.style.height === '80vh') {
|
| 386 |
+
windowElement.style.width = '400px';
|
| 387 |
+
windowElement.style.height = 'auto';
|
| 388 |
+
windowElement.style.left = '80px';
|
| 389 |
+
windowElement.style.top = '80px';
|
| 390 |
+
} else {
|
| 391 |
+
windowElement.style.width = '90vw';
|
| 392 |
+
windowElement.style.height = '80vh';
|
| 393 |
+
windowElement.style.left = '5vw';
|
| 394 |
+
windowElement.style.top = '10vh';
|
| 395 |
+
}
|
| 396 |
+
bringToFront(windowElement);
|
| 397 |
+
});
|
| 398 |
+
});
|
| 399 |
+
}
|
| 400 |
+
|
| 401 |
+
// Initialize windows
|
| 402 |
+
const windows = document.querySelectorAll('.window');
|
| 403 |
+
windows.forEach(window => {
|
| 404 |
+
setupWindow(window);
|
| 405 |
+
window.addEventListener('mousedown', () => bringToFront(window));
|
| 406 |
+
});
|
| 407 |
+
|
| 408 |
+
// Taskbar buttons
|
| 409 |
+
document.getElementById('email-app-btn').addEventListener('click', () => {
|
| 410 |
+
const emailWindow = document.getElementById('email-window');
|
| 411 |
+
emailWindow.style.display = 'block';
|
| 412 |
+
bringToFront(emailWindow);
|
| 413 |
+
});
|
| 414 |
+
|
| 415 |
+
document.getElementById('ai-app-btn').addEventListener('click', () => {
|
| 416 |
+
const aiWindow = document.getElementById('ai-assistant-window');
|
| 417 |
+
aiWindow.style.display = 'block';
|
| 418 |
+
bringToFront(aiWindow);
|
| 419 |
+
});
|
| 420 |
+
|
| 421 |
+
// Email list functionality
|
| 422 |
+
const emailItems = document.querySelectorAll('.email-item');
|
| 423 |
+
const emailDetailWindow = document.getElementById('email-detail-window');
|
| 424 |
+
|
| 425 |
+
emailItems.forEach(item => {
|
| 426 |
+
item.addEventListener('click', () => {
|
| 427 |
+
// Show email details
|
| 428 |
+
const emailId = item.getAttribute('data-id');
|
| 429 |
+
const sender = item.querySelector('span:first-child').textContent;
|
| 430 |
+
const subject = item.querySelector('div:first-of-type').textContent;
|
| 431 |
+
const time = item.querySelector('span:last-child').textContent;
|
| 432 |
+
|
| 433 |
+
document.getElementById('email-sender').textContent = sender;
|
| 434 |
+
document.getElementById('email-subject').textContent = subject;
|
| 435 |
+
document.getElementById('email-time').textContent = time;
|
| 436 |
+
|
| 437 |
+
// In a real app, we'd fetch the full email content based on the ID
|
| 438 |
+
|
| 439 |
+
emailDetailWindow.style.display = 'block';
|
| 440 |
+
bringToFront(emailDetailWindow);
|
| 441 |
+
});
|
| 442 |
+
});
|
| 443 |
+
|
| 444 |
+
// Process email with AI
|
| 445 |
+
document.getElementById('process-email-btn').addEventListener('click', () => {
|
| 446 |
+
const aiWindow = document.getElementById('ai-assistant-window');
|
| 447 |
+
const emailProcessingContainer = document.getElementById('email-processing-container');
|
| 448 |
+
const aiEmailSender = document.getElementById('ai-email-sender');
|
| 449 |
+
const aiEmailContent = document.getElementById('ai-email-content');
|
| 450 |
+
const aiTyping = document.getElementById('ai-typing');
|
| 451 |
+
const aiResponseContent = document.getElementById('ai-response-content');
|
| 452 |
+
|
| 453 |
+
// Get email details
|
| 454 |
+
const sender = document.getElementById('email-sender').textContent;
|
| 455 |
+
const body = document.getElementById('email-body').textContent;
|
| 456 |
+
|
| 457 |
+
// Update AI window
|
| 458 |
+
aiEmailSender.textContent = sender;
|
| 459 |
+
aiEmailContent.textContent = body;
|
| 460 |
+
|
| 461 |
+
// Show AI window and processing container
|
| 462 |
+
aiWindow.style.display = 'block';
|
| 463 |
+
emailProcessingContainer.classList.remove('hidden');
|
| 464 |
+
aiTyping.classList.remove('hidden');
|
| 465 |
+
aiResponseContent.classList.add('hidden');
|
| 466 |
+
|
| 467 |
+
bringToFront(aiWindow);
|
| 468 |
+
|
| 469 |
+
// Simulate AI processing
|
| 470 |
+
setTimeout(() => {
|
| 471 |
+
aiTyping.classList.add('hidden');
|
| 472 |
+
aiResponseContent.classList.remove('hidden');
|
| 473 |
+
}, 2000);
|
| 474 |
+
});
|
| 475 |
+
|
| 476 |
+
// AI assistant interaction
|
| 477 |
+
document.getElementById('send-prompt-btn').addEventListener('click', () => {
|
| 478 |
+
const prompt = document.getElementById('ai-prompt').value;
|
| 479 |
+
if (!prompt.trim()) return;
|
| 480 |
+
|
| 481 |
+
// In a real app, this would send the prompt to an AI API
|
| 482 |
+
console.log('Sending prompt to AI:', prompt);
|
| 483 |
+
|
| 484 |
+
// Clear input
|
| 485 |
+
document.getElementById('ai-prompt').value = '';
|
| 486 |
+
});
|
| 487 |
+
|
| 488 |
+
// Use AI-generated response
|
| 489 |
+
document.getElementById('use-response-btn').addEventListener('click', () => {
|
| 490 |
+
alert('Response copied to clipboard and ready to use in email reply!');
|
| 491 |
+
});
|
| 492 |
+
|
| 493 |
+
// Regenerate response
|
| 494 |
+
document.getElementById('regenerate-btn').addEventListener('click', () => {
|
| 495 |
+
const aiTyping = document.getElementById('ai-typing');
|
| 496 |
+
const aiResponseContent = document.getElementById('ai-response-content');
|
| 497 |
+
|
| 498 |
+
aiTyping.classList.remove('hidden');
|
| 499 |
+
aiResponseContent.classList.add('hidden');
|
| 500 |
+
|
| 501 |
+
// Simulate AI processing
|
| 502 |
+
setTimeout(() => {
|
| 503 |
+
aiTyping.classList.add('hidden');
|
| 504 |
+
aiResponseContent.classList.remove('hidden');
|
| 505 |
+
|
| 506 |
+
// Update with new response (in a real app, this would come from the AI)
|
| 507 |
+
document.getElementById('ai-suggested-response').innerHTML = `
|
| 508 |
+
Hi John,<br><br>
|
| 509 |
+
We've reviewed your request for a deadline extension. While we understand the challenges you're facing,
|
| 510 |
+
we can only approve a two-day extension at this time due to upcoming client deliverables.<br><br>
|
| 511 |
+
Please adjust your timeline accordingly and let us know if you need any support to meet this adjusted deadline.<br><br>
|
| 512 |
+
Best regards,<br>
|
| 513 |
+
[Your Name]
|
| 514 |
+
`;
|
| 515 |
+
}, 1500);
|
| 516 |
+
});
|
| 517 |
+
|
| 518 |
+
// Desktop icons
|
| 519 |
+
const desktopIcons = document.querySelectorAll('.desktop-icon');
|
| 520 |
+
desktopIcons.forEach(icon => {
|
| 521 |
+
icon.addEventListener('dblclick', () => {
|
| 522 |
+
if (icon.querySelector('.fa-envelope')) {
|
| 523 |
+
const emailWindow = document.getElementById('email-window');
|
| 524 |
+
emailWindow.style.display = 'block';
|
| 525 |
+
bringToFront(emailWindow);
|
| 526 |
+
} else if (icon.querySelector('.fa-robot')) {
|
| 527 |
+
const aiWindow = document.getElementById('ai-assistant-window');
|
| 528 |
+
aiWindow.style.display = 'block';
|
| 529 |
+
bringToFront(aiWindow);
|
| 530 |
+
}
|
| 531 |
+
});
|
| 532 |
+
});
|
| 533 |
+
</script>
|
| 534 |
+
<p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=chainmindsx/email-checker" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body>
|
| 535 |
+
</html>
|