diff --git a/ui/index.html b/ui/index.html
index bc910b0..a935143 100644
--- a/ui/index.html
+++ b/ui/index.html
@@ -146,25 +146,6 @@
autofocus
placeholder="Start typing here..."
>
-
diff --git a/ui/script.js b/ui/script.js
index b281097..48615a1 100644
--- a/ui/script.js
+++ b/ui/script.js
@@ -14,7 +14,6 @@ document.addEventListener("DOMContentLoaded", () => {
const generateBtn = document.getElementById("generate-more-btn");
const sidebarToggle = document.getElementById("sidebar-toggle");
const sidebar = document.getElementById("sidebar");
- const acceptSuggestionBtn = document.getElementById("accept-suggestion-btn");
let currentSuggestion = "";
let isFetching = false;
@@ -101,15 +100,29 @@ document.addEventListener("DOMContentLoaded", () => {
};
const updateSuggestion = () => {
+ suggestionOverlay.innerHTML = "";
+
const editorText = editor.value;
const space = editorText.length > 0 && !/\s$/.test(editorText) ? " " : "";
- suggestionOverlay.textContent = editorText + space + currentSuggestion;
- // Show/hide accept button
+ // Create invisible text span to match editor content exactly
+ const textSpan = document.createElement("span");
+ textSpan.textContent = editorText + space;
+ textSpan.style.color = "transparent";
+ suggestionOverlay.appendChild(textSpan);
+
if (currentSuggestion) {
- acceptSuggestionBtn.classList.add("visible");
- } else {
- acceptSuggestionBtn.classList.remove("visible");
+ const suggestionSpan = document.createElement("span");
+ suggestionSpan.textContent = currentSuggestion;
+ suggestionSpan.className = "suggestion-highlight";
+
+ // Add Tab Icon (Better SVG for Tab Key)
+ const iconSpan = document.createElement("span");
+ iconSpan.style.pointerEvents = "none"; // Ensure clicks pass through to suggestionSpan
+ iconSpan.innerHTML = ``;
+ suggestionSpan.appendChild(iconSpan);
+
+ suggestionOverlay.appendChild(suggestionSpan);
}
};
@@ -145,8 +158,9 @@ document.addEventListener("DOMContentLoaded", () => {
}
});
- acceptSuggestionBtn.addEventListener("click", () => {
- if (currentSuggestion) {
+ // Handle click on suggestion
+ suggestionOverlay.addEventListener("click", (e) => {
+ if (e.target.classList.contains("suggestion-highlight")) {
insertText(currentSuggestion);
fetchPrediction(editor.value);
editor.focus();
diff --git a/ui/style.css b/ui/style.css
index 0f1dc95..e7b57d6 100644
--- a/ui/style.css
+++ b/ui/style.css
@@ -117,44 +117,6 @@ body {
}
}
-/* Floating Action Button for Suggestions */
-.btn-floating {
- position: absolute;
- bottom: 1.5rem;
- right: 1.5rem;
- width: 3.5rem;
- height: 3.5rem;
- border-radius: 50%;
- background-color: var(--primary);
- color: var(--primary-foreground);
- border: none;
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
- cursor: pointer;
- display: none; /* Hidden by default, shown when suggestion exists */
- align-items: center;
- justify-content: center;
- z-index: 10;
- transition:
- transform 0.2s,
- opacity 0.2s;
-}
-
-.btn-floating:active {
- transform: scale(0.95);
-}
-
-@media (max-width: 768px) {
- .btn-floating.visible {
- display: flex;
- }
-}
-
-@media (min-width: 769px) {
- .btn-floating.visible {
- display: none;
- }
-}
-
.sidebar-header {
margin-bottom: 2.5rem;
}
@@ -376,7 +338,7 @@ label {
#suggestion-overlay {
width: 100%;
height: 100%;
- padding: 2rem;
+ padding: 2rem 2rem 10rem 2rem;
font-family: "SF Mono", "Fira Code", monospace;
font-size: 1.1rem;
line-height: 1.8;
@@ -391,7 +353,7 @@ label {
@media (max-width: 768px) {
#editor,
#suggestion-overlay {
- padding: 1rem;
+ padding: 1rem 1rem 10rem 1rem;
font-size: 1rem;
}
}
@@ -402,16 +364,59 @@ label {
color: var(--foreground);
outline: none;
resize: none;
- overflow-y: auto;
+ overflow-y: scroll;
+}
+
+#editor::-webkit-scrollbar {
+ width: 16px;
+}
+
+#editor::-webkit-scrollbar-thumb {
+ background-color: var(--muted);
+ border: 4px solid var(--card);
+ border-radius: 8px;
+}
+
+#editor::-webkit-scrollbar-track {
+ background-color: transparent;
}
#suggestion-overlay {
position: absolute;
top: 0;
left: 0;
- z-index: 1;
- color: var(--muted-foreground);
+ z-index: 3;
+ color: transparent;
pointer-events: none;
opacity: 0.5;
overflow: hidden;
+ overflow-y: scroll;
+}
+
+#suggestion-overlay::-webkit-scrollbar {
+ width: 16px; /* Width must match standard scrollbar width to align text */
+ background: transparent;
+}
+
+#suggestion-overlay::-webkit-scrollbar-thumb {
+ background: transparent;
+}
+
+.suggestion-highlight {
+ color: var(--muted-foreground);
+ cursor: pointer;
+ pointer-events: auto;
+}
+
+.tab-icon {
+ display: inline-block;
+ width: 1.8em;
+ height: 1.2em;
+ vertical-align: middle;
+ margin-left: 0.5em;
+ opacity: 0.8;
+ border: 1px solid var(--muted-foreground);
+ border-radius: 4px;
+ padding: 2px;
+ pointer-events: none;
}