From 0adabad94d477d0530da69d1b1c65e6e8014ae48 Mon Sep 17 00:00:00 2001 From: overcuriousity Date: Sun, 27 Jul 2025 17:31:15 +0200 Subject: [PATCH] UI overhaul --- src/components/AIQueryInterface.astro | 41 +++++++----- src/components/TargetedScenarios.astro | 77 +++++++++++++--------- src/components/ToolFilters.astro | 88 ++++++++++++++------------ src/components/ToolMatrix.astro | 15 ++++- src/env.d.ts | 21 +++++- src/layouts/BaseLayout.astro | 29 +++++++++ src/pages/index.astro | 25 ++++---- 7 files changed, 192 insertions(+), 104 deletions(-) diff --git a/src/components/AIQueryInterface.astro b/src/components/AIQueryInterface.astro index 7e13157..66e0412 100644 --- a/src/components/AIQueryInterface.astro +++ b/src/components/AIQueryInterface.astro @@ -444,39 +444,46 @@ document.addEventListener('DOMContentLoaded', () => { } }; - // Smart Prompting Input Handling + // Smart Prompting Input Handling - Fixed Race Conditions aiInput.addEventListener('input', () => { console.log('[DEBUG] Input event triggered, length:', aiInput.value.trim().length); const inputLength = aiInput.value.trim().length; - // Clear existing timeout + // Clear ALL existing timeouts and abort controllers clearTimeout(enhancementTimeout); - - // Cancel any pending enhancement call if (enhancementAbortController) { enhancementAbortController.abort(); + enhancementAbortController = null; } - // Hide suggestions if input is too short + // Hide suggestions immediately if input is too short if (inputLength < 40) { showPromptingStatus('hidden'); return; } - // Show analyzing state after 1 second - setTimeout(() => { - if (aiInput.value.trim().length >= 50) { - showPromptingStatus('analyzing'); - } - }, 1000); - - // Trigger AI enhancement after 1.5 seconds + // Single consolidated timeout for all smart prompting logic enhancementTimeout = setTimeout(() => { - console.log('[DEBUG] Enhancement timeout fired, calling triggerSmartPrompting'); - if (aiInput.value.trim().length >= 40) { - triggerSmartPrompting(); + const currentLength = aiInput.value.trim().length; + + // Double-check length hasn't changed during timeout + if (currentLength < 40) { + showPromptingStatus('hidden'); + return; } - }, 1500); + + // Show analyzing state first + if (currentLength >= 50) { + showPromptingStatus('analyzing'); + + // Trigger enhancement after showing analyzing state + setTimeout(() => { + if (aiInput.value.trim().length >= 50) { + triggerSmartPrompting(); + } + }, 500); + } + }, 1000); // Single timeout instead of multiple }); aiInput.addEventListener('input', updateCharacterCount); diff --git a/src/components/TargetedScenarios.astro b/src/components/TargetedScenarios.astro index ed00221..a3c6282 100644 --- a/src/components/TargetedScenarios.astro +++ b/src/components/TargetedScenarios.astro @@ -68,40 +68,59 @@ const displayedScenarios = scenarios.slice(0, maxDisplayed);