From a0266645d599197912812d76fcc3b57d4fa761b8 Mon Sep 17 00:00:00 2001 From: Kevin Yan Date: Sun, 28 Jun 2026 23:54:18 -0400 Subject: [PATCH 1/4] Redesign popup agenda UI - Move Upcoming/Past toggle above results; drop standalone month banner - Group events by month with per-month section headers - Ruled-line paper now scrolls with the list content - Replace selection checkbox with a hand-drawn red circle - Show end time and bold the time in the event note - Reposition Eventy logo to the left of the wordmark - Remove .ics download button and Add-to-Calendar arrow - Bundle local Hanken Grotesk / Caveat fonts --- src/mocks/sample-events.json | 34 +- src/popup.js | 520 ++++---- src/popup/dateTime.js | 46 + src/popup/eventCards.js | 247 +++- src/ui/base.css | 336 +++-- src/ui/fonts/caveat-latin-ext.woff2 | Bin 0 -> 29528 bytes src/ui/fonts/caveat-latin.woff2 | Bin 0 -> 74572 bytes src/ui/fonts/hanken-grotesk-latin-ext.woff2 | Bin 0 -> 19572 bytes src/ui/fonts/hanken-grotesk-latin.woff2 | Bin 0 -> 34664 bytes src/ui/index.html | 215 ++-- src/ui/popup.css | 1210 +++++++++---------- tests/popupUi.test.js | 27 +- 12 files changed, 1454 insertions(+), 1181 deletions(-) create mode 100644 src/ui/fonts/caveat-latin-ext.woff2 create mode 100644 src/ui/fonts/caveat-latin.woff2 create mode 100644 src/ui/fonts/hanken-grotesk-latin-ext.woff2 create mode 100644 src/ui/fonts/hanken-grotesk-latin.woff2 diff --git a/src/mocks/sample-events.json b/src/mocks/sample-events.json index fc57ab7..7d58831 100644 --- a/src/mocks/sample-events.json +++ b/src/mocks/sample-events.json @@ -2,9 +2,9 @@ { "title": "Team Sync Meeting", "preview": "Team Sync", - "startDate": "2025-10-01", + "startDate": "2026-06-25", "startTime": "09:00", - "endDate": "2025-10-01", + "endDate": "2026-06-25", "endTime": "10:00", "location": "Zoom", "description": "Weekly team sync. Review progress and blockers.", @@ -13,9 +13,9 @@ { "title": "Product Launch Webinar", "preview": "Launch Webinar", - "startDate": "2025-10-03", + "startDate": "2026-06-26", "startTime": "13:30", - "endDate": "2025-10-03", + "endDate": "2026-06-26", "endTime": "14:30", "location": "YouTube Live", "description": "Launch overview and live Q&A" @@ -23,7 +23,7 @@ { "title": "Coffee with Alex", "preview": "Coffee w/ Alex", - "startDate": "2025-10-05", + "startDate": "2026-06-27", "startTime": "08:15", "location": "Blue Bottle, 3rd St.", "description": "Catch-up" @@ -31,9 +31,9 @@ { "title": "Design Review", "preview": "Design Review", - "startDate": "2025-10-06", + "startDate": "2026-06-28", "startTime": "15:00", - "endDate": "2025-10-06", + "endDate": "2026-06-28", "endTime": "16:00", "location": "Conference Room B", "description": "Review new UI mockups with the design team." @@ -41,7 +41,7 @@ { "title": "Dentist Appointment", "preview": "Dentist", - "startDate": "2025-10-07", + "startDate": "2026-06-28", "startTime": "11:30", "location": "Downtown Dental Clinic", "description": "Routine cleaning and checkup" @@ -49,9 +49,9 @@ { "title": "Yoga Class", "preview": "Yoga", - "startDate": "2025-10-08", + "startDate": "2026-06-29", "startTime": "18:00", - "endDate": "2025-10-08", + "endDate": "2026-06-29", "endTime": "19:00", "location": "Sunrise Yoga Studio", "description": "Vinyasa flow class" @@ -59,7 +59,7 @@ { "title": "Board Game Night", "preview": "Board Games", - "startDate": "2025-10-09", + "startDate": "2026-06-30", "startTime": "19:30", "location": "Sam's House", "description": "Bring your favorite board game!" @@ -67,9 +67,9 @@ { "title": "Marketing Strategy Session", "preview": "Marketing Strategy", - "startDate": "2025-10-10", + "startDate": "2026-07-01", "startTime": "10:00", - "endDate": "2025-10-10", + "endDate": "2026-07-01", "endTime": "12:00", "location": "Office 2A", "description": "Plan Q4 campaigns" @@ -77,9 +77,9 @@ { "title": "Parent-Teacher Conference", "preview": "Parent-Teacher Conf", - "startDate": "2025-10-11", + "startDate": "2026-07-02", "startTime": "16:00", - "endDate": "2025-10-11", + "endDate": "2026-07-02", "endTime": "16:30", "location": "Lincoln Elementary", "description": "Discuss progress with Ms. Lee" @@ -87,9 +87,9 @@ { "title": "Birthday Party: Jamie", "preview": "Jamie Birthday", - "startDate": "2025-10-12", + "startDate": "2026-07-05", "startTime": "14:00", - "endDate": "2025-10-12", + "endDate": "2026-07-05", "endTime": "17:00", "location": "Central Park, Picnic Area 3", "description": "Potluck and games" diff --git a/src/popup.js b/src/popup.js index e8a62b4..d15a1af 100644 --- a/src/popup.js +++ b/src/popup.js @@ -17,14 +17,14 @@ import { KEY_CUSTOM_VIEW_ACTIVE, RESULTS_BUTTON_APPEAR_DELAY_MS, SCAN_AVAILABILITY_CHECKING_MESSAGE, - SKELETON_APPEARANCE_STAGGER_MS, SKELETON_FADE_DURATION_MS, SKELETON_STAGGER_DELAY_MS, UI_STATE, } from "./popup/constants.js"; import { loadCache, saveCache } from "./popup/cacheStore.js"; import { - formatDateTime as formatPopupDateTime, + formatDateHeader as formatPopupDateHeader, + formatTimeOnly as formatPopupTimeOnly, isEventPast as isPopupEventPast, } from "./popup/dateTime.js"; import { @@ -32,12 +32,16 @@ import { renderEventLists, restoreSelection as restoreEventSelection, scrollToCard, + resetColorIndex, } from "./popup/eventCards.js"; import { createScanPoller } from "./popup/scanPolling.js"; import { createPopupSettingsStore } from "./popup/settingsStore.js"; import { captureActiveTabHtml, getActiveTab } from "./popup/tabCapture.js"; import { hideToast, showToast } from "./popup/toast.js"; +// =========================================== +// DOM elements +// =========================================== const scanBtn = document.getElementById("scanBtn"); const upcomingEventsListEl = document.getElementById("upcomingEventsList"); const pastEventsListEl = document.getElementById("pastEventsList"); @@ -47,18 +51,37 @@ const addSelectedBtn = document.getElementById("addSelectedBtn"); const settingsBtn = document.getElementById("settingsBtn"); const customContextBtn = document.getElementById("customContextBtn"); const customContextSection = document.getElementById("customContextSection"); -const scanSection = document.getElementById("scanSection"); const customInput = document.getElementById("customInput"); const scanMediaBtn = document.getElementById("scanMediaBtn"); +const tabUpcoming = document.getElementById("tabUpcoming"); +const tabPast = document.getElementById("tabPast"); +const footerSelectedEl = document.getElementById("footerSelected"); +const spiralBindingEl = document.getElementById("spiralBinding"); +const ruledListEl = document.getElementById("ruledList"); + const popupSettingsStore = createPopupSettingsStore(); const ensureSettingsLoaded = popupSettingsStore.ensureSettingsLoaded; const getTimeFormatPreference = popupSettingsStore.getTimeFormatPreference; -// Kick off settings load early to minimize race conditions for UI rendering ensureSettingsLoaded(); +// =========================================== +// Generate spiral coils +// =========================================== +function generateSpiral() { + if (!spiralBindingEl) return; + for (let i = 0; i < 18; i++) { + const coil = document.createElement("div"); + coil.className = "coil"; + spiralBindingEl.appendChild(coil); + } +} +generateSpiral(); + +// =========================================== // Restore persistent state +// =========================================== async function restoreCustomContextState() { try { const result = await chrome.storage.local.get([ @@ -69,7 +92,6 @@ async function restoreCustomContextState() { if (result[KEY_CUSTOM_VIEW_ACTIVE]) { customContextSection?.classList.remove("hidden"); - scanSection?.classList.add("hidden"); resultsEl?.classList.remove("open", "has-results"); } @@ -78,21 +100,8 @@ async function restoreCustomContextState() { } if (result[KEY_CUSTOM_FILES] && Array.isArray(result[KEY_CUSTOM_FILES])) { - // Rehydrate files from base64 - // For preview purposes, we can use the base64 string directly as src - // For sending, we can also use them directly since we already use base64 for transport - - // We need to reconstruct currentImageFiles for the logic to work - // Since we can't easily turn base64 back to File objects with original names/types accurately without storing metadata, - // we will store them as objects { base64, type, name } if possible, or just accept base64 strings in our internal array. - - // Let's assume currentImageFiles can handle objects or strings. - // But existing logic uses URL.createObjectURL(file). - // We need to adapt updateImageUI to handle { type: 'base64', data: ... } - currentImageFiles = result[KEY_CUSTOM_FILES].map(item => { - // If it's a simple string (legacy or simple save), wrap it - if (typeof item === 'string') return { data: item, type: 'image/png' }; // fallback + if (typeof item === 'string') return { data: item, type: 'image/png' }; return item; }); updateImageUI(); @@ -102,14 +111,17 @@ async function restoreCustomContextState() { } } -// Call restore restoreCustomContextState(); let currentState = UI_STATE.IDLE; -let stateCleanupTimeout = null; // Track cleanup timeout to prevent race conditions +let stateCleanupTimeout = null; let currentScanBlockReason = null; let scanAvailabilityReady = false; +let activeTab = "upcoming"; +// =========================================== +// Scan availability +// =========================================== function applyScanButtonAvailability() { if (!scanBtn) return; @@ -121,34 +133,27 @@ function applyScanButtonAvailability() { ? reason : isChecking ? SCAN_AVAILABILITY_CHECKING_MESSAGE - : "Scan Page"; + : "Scan this page"; scanBtn.disabled = isBusy || isUnavailable || isChecking; scanBtn.title = title; scanBtn.classList.toggle("scan-unavailable", isUnavailable || isChecking); - scanSection?.classList.toggle("scan-unavailable", isUnavailable || isChecking); - if (scanSection) { - scanSection.title = isUnavailable || isChecking ? title : ""; - } } function setScanAvailabilityReason(reason) { scanAvailabilityReady = true; currentScanBlockReason = reason || null; applyScanButtonAvailability(); - if (currentScanBlockReason) { - hideToast(); - } + if (currentScanBlockReason) hideToast(); } -async function refreshScanAvailability(activeTab = null) { +async function refreshScanAvailability(activeTabObj = null) { let reason = null; - scanAvailabilityReady = false; applyScanButtonAvailability(); try { - const tab = activeTab || await getActiveTab(); + const tab = activeTabObj || await getActiveTab(); reason = getRequiredTabScanBlockReason(tab?.url); } catch (err) { DEBUG && debug("[Eventy][Popup] Failed to check scan availability:", err); @@ -159,58 +164,141 @@ async function refreshScanAvailability(activeTab = null) { return reason; } -/** - * Transition to scanning state - * Shows skeleton cards and smoothly expands the container - */ +// =========================================== +// Segmented toggle +// =========================================== +function switchTab(tab) { + activeTab = tab; + tabUpcoming?.classList.toggle("active", tab === "upcoming"); + tabPast?.classList.toggle("active", tab === "past"); + upcomingEventsListEl?.classList.toggle("hidden", tab !== "upcoming"); + pastEventsListEl?.classList.toggle("hidden", tab !== "past"); +} + +tabUpcoming?.addEventListener("click", () => switchTab("upcoming")); +tabPast?.addEventListener("click", () => switchTab("past")); + +// =========================================== +// Week strip +// =========================================== +function updateWeekStrip(events) { + const weekStripEl = document.getElementById("weekStrip"); + if (!weekStripEl) return; + weekStripEl.innerHTML = ""; + + // Find the Monday of the current week + const now = new Date(); + const dayOfWeek = now.getDay(); + const mondayOffset = dayOfWeek === 0 ? -6 : 1 - dayOfWeek; + const monday = new Date(now.getFullYear(), now.getMonth(), now.getDate() + mondayOffset); + + const dayLetters = ["M", "T", "W", "T", "F", "S", "S"]; + + // Build a map of date -> color for events this week + const dateColorMap = {}; + if (events) { + for (const ev of events) { + if (ev.startDate) { + const card = resultsEl?.querySelector(`.event-card[data-idx]`); + // Find the card for this event and get its color + const allCards = resultsEl?.querySelectorAll(".event-card"); + if (allCards) { + allCards.forEach(c => { + const idx = Number(c.dataset.idx); + if (events[idx] === ev && c.dataset.color) { + dateColorMap[ev.startDate] = c.dataset.color; + } + }); + } + } + } + } + + for (let i = 0; i < 7; i++) { + const d = new Date(monday); + d.setDate(monday.getDate() + i); + const dateStr = d.toISOString().split("T")[0]; + const isSunday = d.getDay() === 0; + const dotColor = dateColorMap[dateStr]; + + const col = document.createElement("div"); + col.className = "week-day"; + col.innerHTML = ` +
${dayLetters[i]}
+
${d.getDate()}
+
${dotColor ? `
` : ''}
+ `; + weekStripEl.appendChild(col); + } +} + +// =========================================== +// Footer update +// =========================================== +function updateFooterCount() { + const selectedCards = resultsEl?.querySelectorAll(".event-card.selected"); + const count = selectedCards ? selectedCards.length : 0; + if (footerSelectedEl) { + footerSelectedEl.textContent = `${count} selected`; + } +} + +function updateButtonStates() { + const selectedCards = resultsEl?.querySelectorAll(".event-card.selected"); + const selectionCount = selectedCards ? selectedCards.length : 0; + const hasSelection = selectionCount > 0; + + if (addSelectedBtn) addSelectedBtn.disabled = !hasSelection; + updateFooterCount(); +} + +// =========================================== +// Update toggle labels with counts +// =========================================== +function updateToggleLabels(upcomingCount, pastCount) { + if (tabUpcoming) tabUpcoming.textContent = `Upcoming · ${upcomingCount}`; + if (tabPast) tabPast.textContent = `Past · ${pastCount}`; +} + +// =========================================== +// State management +// =========================================== function transitionToScanning() { - scanBtn.disabled = true; + scanBtn?.classList.add("scanning"); - // Check if we have existing event cards to fade out const existingCards = resultsEl?.querySelectorAll(".event-card"); const hasExistingCards = existingCards && existingCards.length > 0; - // Remove has-results to hide button smoothly resultsEl?.classList.remove("has-results"); resultsEl?.classList.add("open", "scanning"); - scanBtn?.classList.add("scanning"); if (hasExistingCards) { - // Fade out existing cards - existingCards.forEach((card, i) => { + const allItems = resultsEl?.querySelectorAll(".event-card") || []; + allItems.forEach((el, i) => { setTimeout(() => { - card.style.transition = - `opacity ${CARD_FADE_DURATION_MS}ms ease, transform ${CARD_FADE_DURATION_MS}ms ease`; - card.style.opacity = "0"; - card.style.transform = "scale(0.95)"; + el.style.transition = `opacity ${CARD_FADE_DURATION_MS}ms ease, transform ${CARD_FADE_DURATION_MS}ms ease`; + el.style.opacity = "0"; + el.style.transform = "scale(0.95)"; }, i * CARD_STAGGER_DELAY_MS); }); - // Wait for fade out, then show skeletons setTimeout(() => { if (upcomingEventsListEl) upcomingEventsListEl.innerHTML = ""; if (pastEventsListEl) pastEventsListEl.innerHTML = ""; showSkeletonCards(); }, CARD_FADE_DURATION_MS + existingCards.length * CARD_STAGGER_DELAY_MS); } else { - // No existing cards, just show skeletons if (upcomingEventsListEl) upcomingEventsListEl.innerHTML = ""; if (pastEventsListEl) pastEventsListEl.innerHTML = ""; - requestAnimationFrame(() => { - showSkeletonCards(); - }); + requestAnimationFrame(() => showSkeletonCards()); } } -/** - * Central state setter - updates all UI elements based on new state - */ function setState(newState) { if (currentState === newState) return; DEBUG && debug(`[Eventy][UI] State transition: ${currentState} -> ${newState}`); - // Clear any pending cleanup timeout to prevent race conditions if (stateCleanupTimeout) { clearTimeout(stateCleanupTimeout); stateCleanupTimeout = null; @@ -220,17 +308,12 @@ function setState(newState) { switch (newState) { case UI_STATE.IDLE: - // Smoothly collapse everything back to initial state resultsEl?.classList.remove("open", "scanning", "has-results", "quota-exceeded"); scanBtn?.classList.remove("scanning"); applyScanButtonAvailability(); - // Hide quota panel - const quotaPanelIdle = document.getElementById("quotaExceeded"); - quotaPanelIdle?.classList.add("hidden"); + document.getElementById("quotaExceeded")?.classList.add("hidden"); - // Clear content after animation, but only if state hasn't changed - // Capture the state at timeout creation to avoid race conditions const targetState = newState; stateCleanupTimeout = setTimeout(() => { if (currentState === targetState) { @@ -246,42 +329,35 @@ function setState(newState) { break; case UI_STATE.RESULTS_LOADED: - // Transition from scanning to results resultsEl?.classList.add("open"); resultsEl?.classList.remove("scanning", "quota-exceeded"); scanBtn?.classList.remove("scanning"); applyScanButtonAvailability(); - // Hide quota panel if visible - const quotaPanelResults = document.getElementById("quotaExceeded"); - quotaPanelResults?.classList.add("hidden"); + document.getElementById("quotaExceeded")?.classList.add("hidden"); - // Add has-results class to show the button with animation - // Small delay to ensure smooth transition setTimeout(() => { resultsEl?.classList.add("has-results"); }, RESULTS_BUTTON_APPEAR_DELAY_MS); break; case UI_STATE.QUOTA_EXCEEDED: - // Show quota exceeded panel resultsEl?.classList.add("open", "quota-exceeded"); resultsEl?.classList.remove("scanning", "has-results"); scanBtn?.classList.remove("scanning"); applyScanButtonAvailability(); - // Clear any skeleton cards if (upcomingEventsListEl) upcomingEventsListEl.innerHTML = ""; if (pastEventsListEl) pastEventsListEl.innerHTML = ""; - // Show quota exceeded panel - const quotaPanel = document.getElementById("quotaExceeded"); - quotaPanel?.classList.remove("hidden"); + document.getElementById("quotaExceeded")?.classList.remove("hidden"); break; } } -// Load and apply theme on popup load +// =========================================== +// Theme +// =========================================== async function loadAndApplyTheme() { try { const settings = await ensureSettingsLoaded(); @@ -293,14 +369,10 @@ async function loadAndApplyTheme() { } } -// Theme initialization happens during popup bootstrap (see initializePopup) - function waitForDocumentReady() { if (document.readyState === "loading") { return new Promise((resolve) => { - document.addEventListener("DOMContentLoaded", resolve, { - once: true, - }); + document.addEventListener("DOMContentLoaded", resolve, { once: true }); }); } return Promise.resolve(); @@ -315,46 +387,62 @@ const themeReadyPromise = (async () => { try { await loadAndApplyTheme(); } finally { - if (body) { - body.classList.remove("theme-loading"); - } + if (body) body.classList.remove("theme-loading"); } })(); +// =========================================== +// Helpers +// =========================================== function isEventPast(event) { return isPopupEventPast(event, { warn, error }); } -function formatDateTime(dateStr, timeStr) { - return formatPopupDateTime(dateStr, timeStr, getTimeFormatPreference()); +function formatDateHeader(dateStr) { + return formatPopupDateHeader(dateStr); } -// Helper to create skeleton loading cards -function showSkeletonCards(count = 3) { - if (!upcomingEventsListEl) return; - upcomingEventsListEl.innerHTML = ""; - for (let i = 0; i < count; i++) { - const skeleton = document.createElement("div"); - skeleton.className = "skeleton-card"; - // Stagger animation for cascading effect - skeleton.style.animationDelay = `${i * SKELETON_APPEARANCE_STAGGER_MS}ms`; - skeleton.innerHTML = ` -
-
-
-
-
-
-
-
-
-
- `; - upcomingEventsListEl.appendChild(skeleton); +function formatTimeOnly(timeStr) { + return formatPopupTimeOnly(timeStr, getTimeFormatPreference()); +} + +// =========================================== +// Skeleton cards +// =========================================== +function createSkeletonRow(delay) { + const row = document.createElement("div"); + row.className = "skeleton-row"; + row.style.animationDelay = `${delay}ms`; + row.innerHTML = ` +
+
+
+
+
+
+ `; + return row; +} + +function showSkeletonCards() { + // Show skeletons in whichever list is active + const targetEl = activeTab === "upcoming" ? upcomingEventsListEl : pastEventsListEl; + if (!targetEl) return; + + // Also make sure the active list is visible + upcomingEventsListEl?.classList.toggle("hidden", activeTab !== "upcoming"); + pastEventsListEl?.classList.toggle("hidden", activeTab !== "past"); + + targetEl.innerHTML = ""; + for (let i = 0; i < 3; i++) { + targetEl.appendChild(createSkeletonRow(i * 80)); } + } -// Ensure Settings button works immediately on popup load +// =========================================== +// Settings & navigation buttons +// =========================================== settingsBtn?.addEventListener("click", () => { try { const url = chrome.runtime.getURL("src/ui/settings.html"); @@ -362,63 +450,44 @@ settingsBtn?.addEventListener("click", () => { } catch (_) { } }); -// Quota exceeded panel - link to settings with BYOK section -const quotaSettingsBtn = document.getElementById("quotaSettingsBtn"); -quotaSettingsBtn?.addEventListener("click", () => { +document.getElementById("quotaSettingsBtn")?.addEventListener("click", () => { try { const url = chrome.runtime.getURL("src/ui/settings.html") + "?section=api"; chrome.tabs.create({ url }); } catch (_) { } }); -// Clean up timeouts when popup closes window.addEventListener("unload", () => { scanPoller.clearAll(); - - // Clear state cleanup timeout if (stateCleanupTimeout) { clearTimeout(stateCleanupTimeout); stateCleanupTimeout = null; } }); -// Update button states based on selection -function updateButtonStates() { - const selectedCards = resultsEl?.querySelectorAll(".event-card.selected"); - const selectionCount = selectedCards ? selectedCards.length : 0; - const hasSelection = selectionCount > 0; - - if (addSelectedBtn) { - addSelectedBtn.disabled = !hasSelection; - - } -} - +// =========================================== +// Scan +// =========================================== async function handleScan() { try { const tab = await getActiveTab(); const blockReason = await refreshScanAvailability(tab); - if (blockReason) { - return; - } + if (blockReason) return; setState(UI_STATE.SCANNING); const { html, text, title, lang, url } = await captureActiveTabHtml(tab); - - // Clear any existing poll timeout for this URL before starting new scan scanPoller.clearForUrl(url); DEBUG && debug("[Eventy][Popup] Scan started", { url }); - // Preprocess in popup to avoid DOMParser issues in the service worker. const { modelHtml, csvSnippets } = preprocessForPopup(text || "", html || ""); const response = await chrome.runtime.sendMessage({ action: "scanPage", modelInput: modelHtml, csvSnippets, - html, // Required for background fallback - text, // Keep text just in case, or for title context? + html, + text, title, lang, url, @@ -429,7 +498,6 @@ async function handleScan() { const errorMsg = response?.error || "Unknown error"; error("Scan failed:", errorMsg); - // Check if this is a rate limit / quota exceeded error if (response?.errorType === "RATE_LIMIT" || errorMsg.toLowerCase().includes("rate limit") || errorMsg.toLowerCase().includes("quota") || @@ -438,20 +506,14 @@ async function handleScan() { return; } - // Clean up UI state for other errors setState(UI_STATE.IDLE); - - // Then disable button to force refresh/retry if needed (or just show error) - if (scanBtn) { - scanBtn.disabled = true; - } + if (scanBtn) scanBtn.disabled = true; return; } const events = response.events || []; if (!events.length) { error("No events found on this page"); - // Silent failure setState(UI_STATE.IDLE); return; } @@ -459,10 +521,8 @@ async function handleScan() { transitionFromSkeletonsToResults(events); await saveCache(url, events, []); - // Inject event markers on the page (full page scan only) if (tab?.id && events.length > 0) { try { - // Check if page markers are enabled in settings const settings = await ensureSettingsLoaded(); if (settings.showPageMarkers === true) { await chrome.runtime.sendMessage({ @@ -472,7 +532,6 @@ async function handleScan() { }); } } catch (markerErr) { - // Silently fail - markers are not critical DEBUG && debug("[Eventy][Popup] Failed to inject markers:", markerErr); } } @@ -486,7 +545,6 @@ async function handleScan() { return; } - // Check if this is a rate limit error if (e.name === "RateLimitError" || errorStr.toLowerCase().includes("rate limit") || errorStr.toLowerCase().includes("quota") || @@ -495,62 +553,63 @@ async function handleScan() { return; } - // Silent error handling for other errors - disable button instead of showing toast setState(UI_STATE.IDLE); setScanAvailabilityReason("An error occurred. Please refresh the page."); } } +// =========================================== +// Render events +// =========================================== async function renderEvents(events) { await ensureSettingsLoaded(); - - // Store events globally for event handlers currentEvents = events; - await renderEventLists(events, { + const result = await renderEventLists(events, { upcomingEventsListEl, pastEventsListEl, isEventPast, - createCard: (ev, idx) => createEventCard(ev, idx, { + createCard: (ev, idx, color, isPast) => createEventCard(ev, idx, { escapeHtml, - formatDateTime, + formatTimeOnly: (timeStr) => formatTimeOnly(timeStr), onToggle: () => { updateButtonStates(); persistSelection(currentEvents); }, + color, + isPast, }), updateButtonStates, + formatDateHeader, }); + + if (result) { + updateToggleLabels(result.upcomingCount, result.pastCount); + updateWeekStrip(events); + } } -/** - * Transition from skeleton cards to event cards - * Smoothly fades out skeletons, renders event cards, then shows button - */ function transitionFromSkeletonsToResults(events) { if (!upcomingEventsListEl) return; - // Fade out skeleton cards - const skeletons = upcomingEventsListEl.querySelectorAll(".skeleton-card"); + const skeletons = resultsEl.querySelectorAll(".skeleton-row"); skeletons.forEach((skeleton, i) => { setTimeout(() => { - skeleton.style.transition = - `opacity ${SKELETON_FADE_DURATION_MS}ms ease, transform ${SKELETON_FADE_DURATION_MS}ms ease`; + skeleton.style.transition = `opacity ${SKELETON_FADE_DURATION_MS}ms ease, transform ${SKELETON_FADE_DURATION_MS}ms ease`; skeleton.style.opacity = "0"; skeleton.style.transform = "scale(0.95)"; }, i * SKELETON_STAGGER_DELAY_MS); }); - // Wait for fade out, then render event cards setTimeout(async () => { try { upcomingEventsListEl.innerHTML = ""; if (pastEventsListEl) pastEventsListEl.innerHTML = ""; await renderEvents(events); - // Transition to results loaded state - // This removes 'scanning' class and adds 'has-results' - // Button appears smoothly via CSS transitions + // Switch to upcoming tab + switchTab("upcoming"); + setState(UI_STATE.RESULTS_LOADED); } catch (e) { error("Failed to render events:", e); @@ -585,28 +644,25 @@ const scanPoller = createScanPoller({ }); const pollForResults = scanPoller.pollForResults; -// Helper to restore selected event indices function restoreSelection(selectedIdxs) { const firstSelected = restoreEventSelection(selectedIdxs, { resultsEl, updateButtonStates, }); - if (firstSelected) { - scrollToCard(firstSelected); - } + if (firstSelected) scrollToCard(firstSelected); } scanBtn?.addEventListener("click", handleScan); refreshScanAvailability(); -// Helper to save current state +// =========================================== +// Custom context (paste / image) +// =========================================== async function saveCustomState() { try { - const isCustomOpen = !customContextSection.classList.contains("hidden"); + const isCustomOpen = !customContextSection?.classList.contains("hidden"); const text = customInput?.value || ""; - - // Files are saved separately when they change because processing them takes time await chrome.storage.local.set({ [KEY_CUSTOM_VIEW_ACTIVE]: isCustomOpen, [KEY_CUSTOM_TEXT]: text @@ -616,32 +672,25 @@ async function saveCustomState() { async function saveCustomFiles() { try { - // Convert all current files to base64 for storage - // If already base64 object, keep it. If File/Blob, convert. const serializedFiles = await Promise.all(currentImageFiles.map(async (file) => { - if (file.data) return file; // Already serialized + if (file.data) return file; const base64 = await fileToBase64(file); return { data: base64, type: file.type, name: file.name }; })); - - await chrome.storage.local.set({ - [KEY_CUSTOM_FILES]: serializedFiles - }); + await chrome.storage.local.set({ [KEY_CUSTOM_FILES]: serializedFiles }); } catch (e) { console.error("Error saving files", e); } } customContextBtn?.addEventListener("click", () => { - const isHidden = customContextSection.classList.contains("hidden"); + const isHidden = customContextSection?.classList.contains("hidden"); if (isHidden) { customContextSection.classList.remove("hidden"); - scanSection.classList.add("hidden"); - resultsEl.classList.remove("open", "has-results"); - customInput.focus(); + resultsEl?.classList.remove("open", "has-results"); + customInput?.focus(); } else { customContextSection.classList.add("hidden"); - scanSection.classList.remove("hidden"); refreshScanAvailability(); } saveCustomState(); @@ -649,11 +698,9 @@ customContextBtn?.addEventListener("click", () => { const mediaInput = document.getElementById("mediaInput"); const imagePreviewContainer = document.getElementById("imagePreviewContainer"); - let currentImageFiles = []; function updateImageUI() { - // UpdatePreviews if (imagePreviewContainer) { imagePreviewContainer.innerHTML = ""; currentImageFiles.forEach((file, index) => { @@ -663,26 +710,19 @@ function updateImageUI() { const img = document.createElement("img"); img.className = "image-preview-img"; - // Handle both File objects (new uploads) and persisted objects { data: base64 } if (file.data) { img.src = file.data; } else { img.src = URL.createObjectURL(file); - img.onload = () => URL.revokeObjectURL(img.src); // Cleanup + img.onload = () => URL.revokeObjectURL(img.src); } const removeBtn = document.createElement("button"); removeBtn.className = "image-remove-btn"; - removeBtn.innerHTML = ` - - - - - `; + removeBtn.innerHTML = ``; removeBtn.onclick = (e) => { e.stopPropagation(); currentImageFiles.splice(index, 1); - // Update persistent storage saveCustomFiles(); updateImageUI(); }; @@ -696,24 +736,14 @@ function updateImageUI() { mediaInput?.addEventListener("change", async () => { if (mediaInput.files) { - // Replace current files with new selection from input - const newFiles = Array.from(mediaInput.files); - // We replace or append? Typically file input replaces unless we handle merge. - // User probably expects replace if clicking "choose files", or append? - // Let's stick to existing behavior (replace) but maybe append is better for "Add Photos"? - // Existing: currentImageFiles = Array.from(mediaInput.files); - // Let's keep it replace for now, but immediately save. - - currentImageFiles = newFiles; + currentImageFiles = Array.from(mediaInput.files); updateImageUI(); await saveCustomFiles(); - // Also save view state just in case saveCustomState(); } }); -// Handle paste events on the textarea -customInput?.addEventListener("input", saveCustomState); // Save text on input +customInput?.addEventListener("input", saveCustomState); customInput?.addEventListener("paste", async (e) => { const items = (e.clipboardData || e.originalEvent.clipboardData).items; let hasImages = false; @@ -734,7 +764,6 @@ customInput?.addEventListener("paste", async (e) => { } }); -// Helper to convert file to base64 const fileToBase64 = (file) => { return new Promise((resolve, reject) => { const reader = new FileReader(); @@ -752,20 +781,15 @@ scanMediaBtn?.addEventListener("click", async () => { try { setState(UI_STATE.SCANNING); - // PERSISTENCE: Do NOT hide custom input section during scan - // customContextSection.classList.add("hidden"); - // Process images if any const imageUrls = []; if (files && files.length > 0) { for (let i = 0; i < files.length; i++) { try { const file = files[i]; - // If already base64 object (persisted), use it directly if (file.data) { imageUrls.push(file.data); } else { - // Otherwise convert (newly added File/Blob) const base64 = await fileToBase64(file); imageUrls.push(base64); } @@ -775,21 +799,17 @@ scanMediaBtn?.addEventListener("click", async () => { } } - // Use current tab URL for cache key if possible, or a generic one const tab = await getActiveTab(); const url = tab?.url || "custom-context-scan"; - - // Preprocess custom text to apply context compression and token limits - // Pass null for HTML scan so it treats input as raw text (or attempts to parse if it looks like HTML, but mainly for text compression) const modelInput = buildModelInput(text, null); const response = await chrome.runtime.sendMessage({ action: "scanPage", - html: "", // No HTML for custom context scan - modelInput, // precomputed compressed input + html: "", + modelInput, text: text, title: "Custom Context", - lang: "en", // Default to en + lang: "en", url: url, imageUrls: imageUrls, cacheResults: false, @@ -799,7 +819,6 @@ scanMediaBtn?.addEventListener("click", async () => { const errorMsg = response?.error || "Unknown error"; error("Scan failed:", errorMsg); - // Check if this is a rate limit / quota exceeded error if (response?.errorType === "RATE_LIMIT" || errorMsg.toLowerCase().includes("rate limit") || errorMsg.toLowerCase().includes("quota") || @@ -817,17 +836,14 @@ scanMediaBtn?.addEventListener("click", async () => { if (!events.length) { console.log("No events found"); setState(UI_STATE.IDLE); - // customContextSection.classList.remove("hidden"); // Already visible return; } transitionFromSkeletonsToResults(events); - // Don't cache custom scans for now, or use a specific key } catch (e) { error(e); const errorStr = e.message || String(e); - // Check if this is a rate limit error if (e.name === "RateLimitError" || errorStr.toLowerCase().includes("rate limit") || errorStr.toLowerCase().includes("quota") || @@ -836,9 +852,7 @@ scanMediaBtn?.addEventListener("click", async () => { return; } - // Provide user-friendly error messages for other cases let userMessage = "An unexpected error occurred"; - if (errorStr.includes("network") || errorStr.includes("fetch")) { userMessage = "Network error. Check your connection."; } else if (errorStr.includes("timeout")) { @@ -850,6 +864,9 @@ scanMediaBtn?.addEventListener("click", async () => { } }); +// =========================================== +// Calendar & ICS actions +// =========================================== addSelectedBtn?.addEventListener("click", async () => { try { const cards = resultsEl?.querySelectorAll(".event-card.selected"); @@ -866,21 +883,19 @@ addSelectedBtn?.addEventListener("click", async () => { } }); -// Check if a scan is in progress and show skeleton cards while waiting +// =========================================== +// In-progress scan detection +// =========================================== async function checkForInProgressScan() { try { const tab = await getActiveTab(); const url = tab?.url || ""; - // Check if scan is in progress const result = await chrome.storage.local.get(`eventy-scanning:${url}`); const isScanning = result[`eventy-scanning:${url}`]; - if (!isScanning) { - return false; // No scan in progress - } + if (!isScanning) return false; - // Scan is in progress - transition to scanning state setState(UI_STATE.SCANNING); pollForResults( @@ -905,16 +920,13 @@ async function checkForInProgressScan() { } } -// Helper to ensure scanning animation is showing for deferred results async function ensureDeferredScanningAnimation() { if (currentState !== UI_STATE.SCANNING) { setState(UI_STATE.SCANNING); - // Give UI a moment to update await new Promise(resolve => requestAnimationFrame(resolve)); } } -// Helper to display deferred results function displayDeferredResults(events) { if (!events || events.length === 0) { setState(UI_STATE.IDLE); @@ -928,9 +940,7 @@ async function tryLoadDeferredResults(storageKey) { try { const result = await chrome.storage.local.get(storageKey); const stored = result[storageKey]; - if (!stored) { - return false; - } + if (!stored) return false; if (stored.status === "scanning") { await ensureDeferredScanningAnimation(); @@ -950,7 +960,6 @@ async function tryLoadDeferredResults(storageKey) { if (stored.status === "error") { await chrome.storage.local.remove(storageKey); - // Check if this is a rate limit error if (stored.errorType === "RATE_LIMIT" || (stored.error && ( stored.error.toLowerCase().includes("rate limit") || @@ -971,26 +980,22 @@ async function tryLoadDeferredResults(storageKey) { } } -// Helper to select a specific event and scroll it into view function selectAndScrollToEvent(eventIndex) { const card = resultsEl?.querySelector(`.event-card[data-idx="${eventIndex}"]`); if (!card) return; - // Clear existing selection const allCards = resultsEl?.querySelectorAll(".event-card"); - allCards?.forEach(c => c.classList.remove("selected")); + allCards?.forEach(c => { + c.classList.remove("selected"); + }); - // Select the target card card.classList.add("selected"); - // Scroll to the card scrollToCard(card); - updateButtonStates(); persistSelection(currentEvents); } -// Check for pending event selection from marker click async function checkPendingEventSelection() { try { const result = await chrome.storage.local.get("eventy-pending-selection"); @@ -998,13 +1003,10 @@ async function checkPendingEventSelection() { if (!pending) return null; - // Clear the pending selection await chrome.storage.local.remove("eventy-pending-selection"); - // Check if the selection is still fresh (within 5 seconds) if (Date.now() - pending.ts > 5000) return null; - // Check if the URL matches the current tab const tab = await getActiveTab(); if (pending.tabUrl && tab?.url !== pending.tabUrl) return null; @@ -1015,47 +1017,35 @@ async function checkPendingEventSelection() { } } +// =========================================== +// Cache restore on popup open +// =========================================== (async function restoreFromCache() { try { - // Check for pending event selection from marker click first const pendingEventIndex = await checkPendingEventSelection(); - if (await tryLoadDeferredResults(HIGHLIGHT_RESULTS_KEY)) { - return; - } - - if (await tryLoadDeferredResults(IMAGE_RESULTS_KEY)) { - return; - } + if (await tryLoadDeferredResults(HIGHLIGHT_RESULTS_KEY)) return; + if (await tryLoadDeferredResults(IMAGE_RESULTS_KEY)) return; const tab = await getActiveTab(); const url = tab?.url || ""; - // Check if scan is in progress first const hasInProgressScan = await checkForInProgressScan(); - if (hasInProgressScan) { - return; // Waiting for in-progress scan - } + if (hasInProgressScan) return; - // No scan in progress, load cached results const cached = await loadCache(url); if (!cached || !cached.events || !cached.events.length) { setState(UI_STATE.IDLE); return; } - // Smoothly transition to showing cached results - // First set to open state without results resultsEl?.classList.add("open"); - // Render the events await renderEvents(cached.events); - // Then transition to results state with button requestAnimationFrame(() => { setState(UI_STATE.RESULTS_LOADED); - // If we have a pending event selection from marker click, use that if (pendingEventIndex !== null && pendingEventIndex !== undefined) { selectAndScrollToEvent(pendingEventIndex); } else { diff --git a/src/popup/dateTime.js b/src/popup/dateTime.js index b137af7..76eb68b 100644 --- a/src/popup/dateTime.js +++ b/src/popup/dateTime.js @@ -67,6 +67,52 @@ export function isEventPast(event, { now = new Date(), warn = () => { }, error = } } +export function formatDateHeader(dateStr) { + if (!dateStr) return ""; + try { + const d = new Date(`${dateStr}T00:00:00`); + if (Number.isNaN(d.getTime())) return dateStr; + + const now = new Date(); + const today = new Date(now.getFullYear(), now.getMonth(), now.getDate()); + const target = new Date(d.getFullYear(), d.getMonth(), d.getDate()); + const diffDays = Math.round((target - today) / 86400000); + + if (diffDays === 0) return "Today"; + if (diffDays === -1) return "Yesterday"; + if (diffDays === 1) return "Tomorrow"; + + const days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]; + const months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; + return `${days[d.getDay()]}, ${months[d.getMonth()]} ${d.getDate()}`; + } catch (_) { + return dateStr; + } +} + +export function formatTimeOnly(timeStr, timeFormat = "12") { + if (!timeStr) return ""; + const normalized = normalizeTimeStr(timeStr); + if (!normalized) return timeStr; + + const parts = normalized.split(":"); + if (parts.length < 2) return timeStr; + + const hours = parseInt(parts[0], 10); + const minutes = parts[1].substring(0, 2); + + if (Number.isNaN(hours)) return timeStr; + + if (timeFormat === "24") { + return `${String(hours).padStart(2, "0")}:${minutes}`; + } + + const period = hours >= 12 ? "PM" : "AM"; + let h12 = hours % 12; + if (h12 === 0) h12 = 12; + return `${h12}:${minutes} ${period}`; +} + function normalizeTimeStr(timeStr) { if (!timeStr) return null; const match = timeStr.match(/(\d{1,2})(?::(\d{2}))?(?::(\d{2}))?\s*([AP]M)/i); diff --git a/src/popup/eventCards.js b/src/popup/eventCards.js index f702619..4a67be0 100644 --- a/src/popup/eventCards.js +++ b/src/popup/eventCards.js @@ -1,66 +1,164 @@ +const EVENT_COLORS = [ + { hex: '#FF8A3D', ink: '#D9701E', rgba: 'rgba(255,138,61,.42)' }, + { hex: '#21BEC4', ink: '#128A90', rgba: 'rgba(33,190,196,.40)' }, + { hex: '#9B6BE0', ink: '#7E50C8', rgba: 'rgba(155,107,224,.40)' }, + { hex: '#F0479A', ink: '#D62E84', rgba: 'rgba(240,71,154,.38)' }, +]; + +const PAST_COLOR = { hex: '#9AA7A0', ink: '#8A968F', rgba: 'rgba(154,167,160,.30)' }; + +let colorIndex = 0; + +export function resetColorIndex() { + colorIndex = 0; +} + +export function assignEventColor(isPast) { + if (isPast) return PAST_COLOR; + const c = EVENT_COLORS[colorIndex % EVENT_COLORS.length]; + colorIndex++; + return c; +} + export function createEventCard( ev, idx, { doc = document, escapeHtml, - formatDateTime, + formatTimeOnly, onToggle = () => { }, + color = null, + isPast = false, } = {} ) { - const wrapper = doc.createElement("div"); - wrapper.className = "event-card"; + const c = color || assignEventColor(isPast); + const wrapper = doc.createElement('div'); + wrapper.className = 'event-card'; wrapper.dataset.idx = String(idx); + wrapper.dataset.color = c.hex; + + const startTime = formatTimeOnly(ev.startTime || ''); + const endTime = formatTimeOnly(ev.endTime || ''); + const location = ev.location || ''; + const title = ev.title || 'Untitled'; + const monthAbbr = formatMonthAbbr(ev.startDate); + const dayNum = formatDayNum(ev.startDate); + + // Time range including end time + let timeRange = ''; + if (startTime && endTime) timeRange = `${startTime} – ${endTime}`; + else if (startTime) timeRange = startTime; + else if (endTime) timeRange = endTime; + + // Build note HTML: bold time · location — description + const noteHtmlParts = []; + if (timeRange) noteHtmlParts.push(`${escapeHtml(timeRange)}`); + if (location) noteHtmlParts.push(escapeHtml(location)); + let noteHtml = noteHtmlParts.join(' · '); + if (ev.description && ev.description.length < 40) { + noteHtml += noteHtml ? ' — ' + escapeHtml(ev.description) : escapeHtml(ev.description); + } - const startStr = formatDateTime(ev.startDate || "", ev.startTime || ""); - const endStr = formatDateTime( - ev.endDate || ev.startDate || "", - ev.endTime || "" - ); - const previewText = ev.preview || ev.title || "Untitled"; - const fullTitle = ev.title || "Untitled"; - const location = ev.location || ""; - const locationHtml = location - ? `
${escapeHtml(location)}
` - : ""; - - const recurrenceHtml = ev.recurrence - ? `` - : ""; + // Highlighter swipe on title (for non-past events with color) + const titleHtml = !isPast + ? `${escapeHtml(title)}` + : escapeHtml(title); + + // Recurrence badge + const badgeHtml = ev.recurrence + ? `Recurring` + : ''; + + // Multi-day badge + const multiDayHtml = (ev.startDate && ev.endDate && ev.endDate !== ev.startDate) + ? `Multi-day` + : ''; + + // Hand-drawn red circle shown when the event is selected. A turbulence + + // displacement filter gives it a natural, slightly irregular wobble. + const circleSvg = ``; wrapper.innerHTML = ` -
-
${escapeHtml(previewText)}
-
-
-
- ${recurrenceHtml} - ${escapeHtml(startStr)} -
- ${endStr - ? `
${escapeHtml( - endStr - )}
` - : "" - } -
- ${locationHtml} -
+ ${circleSvg} +
+
${escapeHtml(monthAbbr)}
+
${escapeHtml(dayNum)}
+
+
+
${titleHtml}
+ ${noteHtml ? `
${noteHtml}
` : ''} + ${badgeHtml}${multiDayHtml}
`; - wrapper.addEventListener("click", () => { - wrapper.classList.toggle("selected"); + wrapper.addEventListener('click', () => { + wrapper.classList.toggle('selected'); onToggle(wrapper); }); return wrapper; } +function formatMonthAbbr(dateStr) { + if (!dateStr) return '???'; + try { + const d = new Date(`${dateStr}T00:00:00`); + if (isNaN(d.getTime())) return '???'; + return ['JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN', + 'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC'][d.getMonth()]; + } catch { return '???'; } +} + +function formatDayNum(dateStr) { + if (!dateStr) return '??'; + try { + const d = new Date(`${dateStr}T00:00:00`); + if (isNaN(d.getTime())) return '??'; + return String(d.getDate()).padStart(2, '0'); + } catch { return '??'; } +} + +const MONTHS_FULL = ['January', 'February', 'March', 'April', 'May', 'June', + 'July', 'August', 'September', 'October', 'November', 'December']; + +function monthKeyFromEvent(ev) { + const s = ev?.startDate; + if (!s) return 'no-date'; + return String(s).slice(0, 7); +} + +function createMonthSectionHeader(ev) { + const header = document.createElement('div'); + header.className = 'month-section-header'; + const s = ev?.startDate; + let label = 'No date'; + let yearHtml = ''; + if (s) { + const d = new Date(`${s}T00:00:00`); + if (!isNaN(d.getTime())) { + label = MONTHS_FULL[d.getMonth()].toUpperCase(); + yearHtml = ` ${d.getFullYear()}`; + } + } + header.innerHTML = `${label}${yearHtml}`; + return header; +} + +function parseTime(timeStr) { + if (!timeStr) return 0; + const match = timeStr.match(/(\d{1,2}):(\d{2})\s*([AP]M)?/i); + if (!match) return 0; + let h = parseInt(match[1], 10); + const m = parseInt(match[2], 10); + if (match[3]) { + const pm = match[3].toUpperCase() === 'PM'; + if (pm && h !== 12) h += 12; + else if (!pm && h === 12) h = 0; + } + return h * 60 + m; +} + export async function renderEventLists( events, { @@ -69,51 +167,82 @@ export async function renderEventLists( isEventPast, createCard, updateButtonStates, + formatDateHeader, } ) { if (!upcomingEventsListEl || !pastEventsListEl) return; - upcomingEventsListEl.innerHTML = ""; - pastEventsListEl.innerHTML = ""; + upcomingEventsListEl.innerHTML = ''; + pastEventsListEl.innerHTML = ''; + + resetColorIndex(); const upcomingEvents = []; const pastEvents = []; events.forEach((ev, idx) => { - if (isEventPast(ev)) { - pastEvents.push({ event: ev, originalIndex: idx }); + const past = isEventPast(ev); + const color = assignEventColor(past); + if (past) { + pastEvents.push({ event: ev, originalIndex: idx, color }); } else { - upcomingEvents.push({ event: ev, originalIndex: idx }); + upcomingEvents.push({ event: ev, originalIndex: idx, color }); } }); - upcomingEvents.forEach(({ event: ev, originalIndex: idx }) => { - upcomingEventsListEl.appendChild(createCard(ev, idx)); - }); + // Sort by date then time + const sortItems = (items, asc) => { + items.sort((a, b) => { + const dateComp = asc + ? (a.event.startDate || '').localeCompare(b.event.startDate || '') + : (b.event.startDate || '').localeCompare(a.event.startDate || ''); + if (dateComp !== 0) return dateComp; + return parseTime(a.event.startTime) - parseTime(b.event.startTime); + }); + }; - pastEvents.forEach(({ event: ev, originalIndex: idx }) => { - pastEventsListEl.appendChild(createCard(ev, idx)); - }); + sortItems(upcomingEvents, true); + sortItems(pastEvents, false); + + let lastUpcomingKey = null; + for (const { event, originalIndex, color } of upcomingEvents) { + const key = monthKeyFromEvent(event); + if (key !== lastUpcomingKey) { + upcomingEventsListEl.appendChild(createMonthSectionHeader(event)); + lastUpcomingKey = key; + } + upcomingEventsListEl.appendChild(createCard(event, originalIndex, color, false)); + } + + let lastPastKey = null; + for (const { event, originalIndex, color } of pastEvents) { + const key = monthKeyFromEvent(event); + if (key !== lastPastKey) { + pastEventsListEl.appendChild(createMonthSectionHeader(event)); + lastPastKey = key; + } + pastEventsListEl.appendChild(createCard(event, originalIndex, color, true)); + } updateButtonStates(); + + return { upcomingCount: upcomingEvents.length, pastCount: pastEvents.length, upcomingEvents, pastEvents }; } export function scrollToCard(card) { - const scrollContainer = card.closest(".events-list"); + const scrollContainer = card.closest('.ruled-list'); if (scrollContainer) { requestAnimationFrame(() => { setTimeout(() => { const containerRect = scrollContainer.getBoundingClientRect(); const cardRect = card.getBoundingClientRect(); const currentScroll = scrollContainer.scrollTop; - const cardCenter = cardRect.top + cardRect.height / 2; const containerCenter = containerRect.top + containerRect.height / 2; const diff = cardCenter - containerCenter; - scrollContainer.scrollTo({ top: Math.max(0, currentScroll + diff), - behavior: "smooth", + behavior: 'smooth', }); }, 200); }); @@ -122,14 +251,14 @@ export function scrollToCard(card) { export function restoreSelection(selectedIdxs, { resultsEl, updateButtonStates }) { if (!selectedIdxs?.length) return null; - const cards = resultsEl?.querySelectorAll(".event-card"); + const cards = resultsEl?.querySelectorAll('.event-card'); let firstSelected = null; if (cards) { - cards.forEach((el) => el.classList.remove("selected")); + cards.forEach((el) => el.classList.remove('selected')); selectedIdxs.forEach((i) => { const el = resultsEl?.querySelector(`.event-card[data-idx="${i}"]`); if (el) { - el.classList.add("selected"); + el.classList.add('selected'); if (!firstSelected) firstSelected = el; } }); diff --git a/src/ui/base.css b/src/ui/base.css index 2c620cf..888bd4e 100644 --- a/src/ui/base.css +++ b/src/ui/base.css @@ -1,6 +1,123 @@ -/* Minimalist theme with orange accent */ +/* =========================================== + Font faces — bundled woff2 (no external requests in MV3) + =========================================== */ +@font-face { + font-family: 'Hanken Grotesk'; + font-style: normal; + font-weight: 400 800; + font-display: swap; + src: url(./fonts/hanken-grotesk-latin.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +@font-face { + font-family: 'Hanken Grotesk'; + font-style: normal; + font-weight: 400 800; + font-display: swap; + src: url(./fonts/hanken-grotesk-latin-ext.woff2) format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} + +@font-face { + font-family: 'Caveat'; + font-style: normal; + font-weight: 400 700; + font-display: swap; + src: url(./fonts/caveat-latin.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +@font-face { + font-family: 'Caveat'; + font-style: normal; + font-weight: 400 700; + font-display: swap; + src: url(./fonts/caveat-latin-ext.woff2) format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} + +/* =========================================== + CSS custom properties — Light mode (default) + =========================================== */ :root { - /* Light mode colors */ + /* Brand */ + --brand: #F4691F; + --brand-deep: #C25E15; + --brand-bright: #FF9A52; + + /* Desk & Page */ + --desk: linear-gradient(155deg, #B0BFB4, #96AA9C 65%, #869a8d); + --paper: #FAF7EE; + --ruled-line: rgba(122, 150, 168, .28); + + /* Ink */ + --ink: #29343A; + --ink-muted: #6E7C84; + --ink-secondary: #7E8A82; + + /* Controls */ + --tab-track: #ECE7DA; + --tab-active: #fff; + --tab-active-text: #29343A; + --tab-inactive-text: #94A097; + --tab-shadow: 0 1px 2px rgba(0, 0, 0, .12); + + /* Checkbox */ + --checkbox-bg: #fff; + --checkbox-border: #B9C2BC; + + /* Date chip */ + --chip-cell-bg: #fff; + --chip-cell-text: #29343A; + --chip-border: rgba(0, 0, 0, .10); + --chip-shadow: 0 2px 4px rgba(0, 0, 0, .12); + + /* Ghost buttons */ + --ghost-bg: #fff; + --ghost-border: #C9D0C9; + --ghost-text: #5d6b62; + + /* Scan button (primary icon) */ + --scan-bg: #29343A; + --scan-text: #FAF7EE; + + /* Footer */ + --footer-bg: rgba(250, 247, 238, .96); + --footer-border: rgba(122, 150, 168, .30); + --footer-text: #41514A; + --footer-muted: #7E8A82; + + /* Page shadows */ + --page-shadow: 0 16px 30px rgba(35, 50, 45, .30), 0 3px 8px rgba(0, 0, 0, .18); + --cta-shadow: 0 2px 0 rgba(0, 0, 0, .20); + + /* Week strip */ + --week-divider: 1px dashed rgba(122, 150, 168, .45); + --weekday-text: #9AA7A0; + --sunday-text: #C5908F; + + /* Coil gradient */ + --coil-gradient: linear-gradient(180deg, #ffc287 0%, #f4842f 45%, #c25e15 100%); + --coil-shadow: inset -1.5px 0 1.5px rgba(255, 255, 255, .75), + inset 1.5px 0 2px rgba(0, 0, 0, .25), + 0 2px 3px rgba(0, 0, 0, .22); + + /* Badge */ + --badge-text: #7E8A82; + --badge-border: #CBD3CC; + + /* Desk inset */ + --desk-inset: inset 0 1px 0 rgba(255, 255, 255, .22); + + /* Past opacity */ + --past-opacity: .72; + + /* Transitions */ + --transition-fast: 150ms ease; + --transition-base: 200ms ease; + + /* Legacy vars (for settings page, toast, etc.) */ --bg: #ffffff; --bg-secondary: #fafafa; --text: #1a1a1a; @@ -8,28 +125,56 @@ --border: #e5e5e5; --border-light: #f5f5f5; --bg-hover: #f0f0f0; - - /* Orange accent colors */ - --accent-primary: #ff6b35; - --accent-hover: #ff5722; - --accent-light: #fff4f0; - --accent-lighter: #fffaf8; - --accent-date: #e64a19; - - /* Shadows and effects */ - --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.04); - --shadow-md: 0 2px 4px rgba(0, 0, 0, 0.06); - --shadow-lg: 0 4px 8px rgba(0, 0, 0, 0.08); - - /* Transitions */ - --transition-fast: 150ms ease; - --transition-base: 200ms ease; - --transition-slow: 250ms ease; + --accent-primary: #F4691F; + --accent-hover: #e05a12; + --highlight: rgba(255, 190, 50, .22); + --shadow-sm: 0 1px 2px rgba(0, 0, 0, .04); } -/* Dark mode colors */ +/* =========================================== + Dark mode + =========================================== */ @media (prefers-color-scheme: dark) { - body.auto-mode { + body.auto-mode:not(.settings-page) { + --desk: linear-gradient(155deg, #232B2F, #1A2023 65%, #141A1C); + --paper: #232B2F; + --ruled-line: rgba(255, 255, 255, .07); + --ink: #EAEEEA; + --ink-muted: #8C9A93; + --ink-secondary: #7E8C85; + --tab-track: #2C353A; + --tab-active: #3C474D; + --tab-active-text: #EAEEEA; + --tab-inactive-text: #7E8C85; + --tab-shadow: 0 1px 2px rgba(0, 0, 0, .3); + --checkbox-bg: #2A3338; + --checkbox-border: rgba(255, 255, 255, .22); + --chip-cell-bg: #ECEFE8; + --chip-cell-text: #242B30; + --chip-border: rgba(255, 255, 255, .08); + --chip-shadow: 0 2px 5px rgba(0, 0, 0, .35); + --ghost-bg: #2C353A; + --ghost-border: rgba(255, 255, 255, .12); + --ghost-text: #9AA8A1; + --scan-bg: var(--brand); + --scan-text: #fff; + --footer-bg: #1E2528; + --footer-border: rgba(255, 255, 255, .10); + --footer-text: #BFC9C3; + --footer-muted: #8C9A93; + --page-shadow: 0 16px 32px rgba(0, 0, 0, .55), 0 3px 8px rgba(0, 0, 0, .4); + --cta-shadow: 0 2px 0 rgba(0, 0, 0, .35); + --week-divider: 1px dashed rgba(255, 255, 255, .12); + --weekday-text: #7E8C85; + --coil-gradient: linear-gradient(180deg, #ffb877, #f4842f, #b0530f); + --coil-shadow: inset -1.5px 0 1.5px rgba(255, 255, 255, .55), + inset 1.5px 0 2px rgba(0, 0, 0, .4), + 0 2px 4px rgba(0, 0, 0, .45); + --badge-text: #8C9A93; + --badge-border: rgba(255, 255, 255, .16); + --desk-inset: inset 0 1px 0 rgba(255, 255, 255, .06); + --past-opacity: .6; + --brand-bright: #FF9A52; --bg: #171717; --bg-secondary: #262626; --bg-hover: #333333; @@ -37,16 +182,52 @@ --text-secondary: #a3a3a3; --border: #404040; --border-light: #2a2a2a; - --accent-light: rgba(255, 107, 53, 0.15); - --accent-lighter: rgba(255, 107, 53, 0.08); - --accent-date: #ff8a65; - --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.5); - --shadow-md: 0 2px 4px rgba(0, 0, 0, 0.6); - --shadow-lg: 0 4px 8px rgba(0, 0, 0, 0.7); + --accent-primary: #F4691F; + --accent-hover: #e05a12; + --highlight: rgba(255, 180, 50, .12); } } -body.dark-mode { +body.dark-mode:not(.settings-page) { + --desk: linear-gradient(155deg, #232B2F, #1A2023 65%, #141A1C); + --paper: #232B2F; + --ruled-line: rgba(255, 255, 255, .07); + --ink: #EAEEEA; + --ink-muted: #8C9A93; + --ink-secondary: #7E8C85; + --tab-track: #2C353A; + --tab-active: #3C474D; + --tab-active-text: #EAEEEA; + --tab-inactive-text: #7E8C85; + --tab-shadow: 0 1px 2px rgba(0, 0, 0, .3); + --checkbox-bg: #2A3338; + --checkbox-border: rgba(255, 255, 255, .22); + --chip-cell-bg: #ECEFE8; + --chip-cell-text: #242B30; + --chip-border: rgba(255, 255, 255, .08); + --chip-shadow: 0 2px 5px rgba(0, 0, 0, .35); + --ghost-bg: #2C353A; + --ghost-border: rgba(255, 255, 255, .12); + --ghost-text: #9AA8A1; + --scan-bg: var(--brand); + --scan-text: #fff; + --footer-bg: #1E2528; + --footer-border: rgba(255, 255, 255, .10); + --footer-text: #BFC9C3; + --footer-muted: #8C9A93; + --page-shadow: 0 16px 32px rgba(0, 0, 0, .55), 0 3px 8px rgba(0, 0, 0, .4); + --cta-shadow: 0 2px 0 rgba(0, 0, 0, .35); + --week-divider: 1px dashed rgba(255, 255, 255, .12); + --weekday-text: #7E8C85; + --coil-gradient: linear-gradient(180deg, #ffb877, #f4842f, #b0530f); + --coil-shadow: inset -1.5px 0 1.5px rgba(255, 255, 255, .55), + inset 1.5px 0 2px rgba(0, 0, 0, .4), + 0 2px 4px rgba(0, 0, 0, .45); + --badge-text: #8C9A93; + --badge-border: rgba(255, 255, 255, .16); + --desk-inset: inset 0 1px 0 rgba(255, 255, 255, .06); + --past-opacity: .6; + --brand-bright: #FF9A52; --bg: #171717; --bg-secondary: #262626; --bg-hover: #333333; @@ -54,32 +235,53 @@ body.dark-mode { --text-secondary: #a3a3a3; --border: #404040; --border-light: #2a2a2a; - --accent-light: rgba(255, 107, 53, 0.15); - --accent-lighter: rgba(255, 107, 53, 0.08); - --accent-date: #ff8a65; - --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.5); - --shadow-md: 0 2px 4px rgba(0, 0, 0, 0.6); - --shadow-lg: 0 4px 8px rgba(0, 0, 0, 0.7); + --accent-primary: #F4691F; + --accent-hover: #e05a12; + --highlight: rgba(255, 180, 50, .12); } -body.light-mode { +/* Settings page keeps the old simple variables */ +body.light-mode.settings-page, +body.auto-mode.settings-page { --bg: #ffffff; --bg-secondary: #fafafa; --text: #1a1a1a; --text-secondary: #737373; --border: #e5e5e5; --border-light: #f5f5f5; - --accent-light: #fff4f0; - --accent-lighter: #fffaf8; + --accent-primary: #F4691F; + --accent-hover: #e05a12; } -/* Base styles */ -* { - box-sizing: border-box; +@media (prefers-color-scheme: dark) { + body.auto-mode.settings-page { + --bg: #171717; + --bg-secondary: #262626; + --bg-hover: #333333; + --text: #fafafa; + --text-secondary: #a3a3a3; + --border: #404040; + --border-light: #2a2a2a; + } +} + +body.dark-mode.settings-page { + --bg: #171717; + --bg-secondary: #262626; + --bg-hover: #333333; + --text: #fafafa; + --text-secondary: #a3a3a3; + --border: #404040; + --border-light: #2a2a2a; } -html { - scroll-behavior: smooth; +/* =========================================== + Base reset & typography + =========================================== */ +*, +*::before, +*::after { + box-sizing: border-box; } html, @@ -89,10 +291,8 @@ body { } body { - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, - "Helvetica Neue", Arial, sans-serif; - color: var(--text); - background: var(--bg); + font-family: 'Hanken Grotesk', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; + color: var(--ink); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } @@ -107,16 +307,13 @@ body.theme-loaded { transition: opacity 200ms ease-in; } -/* Typography */ h1 { - font-size: 17px; - font-weight: 600; + font-size: 15px; + font-weight: 800; margin: 0; - color: var(--text); - letter-spacing: -0.01em; + letter-spacing: -.2px; } -/* Button styles */ button { display: inline-flex; align-items: center; @@ -142,7 +339,7 @@ button:not(:disabled):active { } button:focus-visible { - outline: 2px solid var(--accent-primary); + outline: 2px solid var(--brand); outline-offset: 2px; } @@ -151,39 +348,10 @@ button svg { } @keyframes spin { - from { - transform: translate(-50%, -50%) rotate(0deg); - } - - to { - transform: translate(-50%, -50%) rotate(360deg); - } -} - -/* Smooth theme transition */ -body:not(.theme-loading) { - transition: background-color var(--transition-slow), - color var(--transition-slow); -} - -/* Fade in animation for initial load */ -@keyframes fadeIn { - from { - opacity: 0; - transform: translateY(-10px); - } - - to { - opacity: 1; - transform: translateY(0); - } -} - -body:not(.theme-loading) { - animation: fadeIn var(--transition-slow) ease-out; + from { transform: translate(-50%, -50%) rotate(0deg); } + to { transform: translate(-50%, -50%) rotate(360deg); } } -/* Generic hidden class */ .hidden { display: none !important; } diff --git a/src/ui/fonts/caveat-latin-ext.woff2 b/src/ui/fonts/caveat-latin-ext.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..33ce75ee01844eb7278a21d68b8d96b540e1e17f GIT binary patch literal 29528 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 H5dZ)HUEXn1 literal 0 HcmV?d00001 diff --git a/src/ui/fonts/caveat-latin.woff2 b/src/ui/fonts/caveat-latin.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..836dbda093eb92e5277d39b9b5af6a00222b176a GIT binary patch literal 74572 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

(f$Ix%(tY(wt&maEV@U7XIEu!9%|Jv7e zFNf~3>5SJ_kFcxm8Z)b249iPv`mRV3j@k3VWjY~41OjibloL*q6?r80LP)v4oU^l* zom=}jdSP-0r1R{=azR8~dRDaH+4~m^rnQ4qDs}dhGRPFN8!W66dGPK>$B6o(qy~)3 zTJs>prSB;kb#t57?6-KV?|{uQ&ahrG_s;MP?MOrlXA#ar>_1Bc3qL|%9wQ`Bq2#>~ zCTS$lWi7?*ajex$%?pm z9h~glAOF0V2ThsLwRPV#^^=3f=#b2CPpXS8Y(1_||6Dg~&GW)oWD=?|WnQKWj=SnOKrE%`MPPlGJr+0CIub2zwd^Sgw)G zb8W3}+P-UR!Du&8)Jd9K>pZkv)pwcPLn~gS;wfaOK^dTk^L@FD8Y7$R%Wagrx&F>b zgb4LJx*83bgKuQufap~8S;Rze7OniYFg#(~G)?=%q40+xEb;QI;^&b_+9(xwTC3Yn zVwktk)|N8~Vm1RgY-@?M-gOAZAB@_(W5WL@uU|lUO-_j%JpRhg=@dK#5fgVeL0j7BhT~B`;)$g5g_Y^y2ZayE@sbH z$0cura8Kr$N-FS|Do+L!_ff@X6OA%-qW95a*bqB#6cGL)}gVoHBj{S#}NKgB#7a|jeZexDFY1KE8?+s zWp5usYIj}!;g5ggTfuLC^YcvUgAOlW@ie1}Os%(+>_z)A$$}Qlih#*b$#4WLQ?9X6 zp!ygo#O{VyleMZD@vO8<%PHo1zDZ||vAt)K>fj`VysG7;sQEvay$voL0+@P5gaHnt zJ0mU@r)HjI%BQmR1c7UI0g~43XR+ZxG0c`g@8sFyBl&t?;l;0T-BOF zKEwp|ht@)SBE%9;>lY)03IYHWZIc~-=N@s(`l_?a z-0_%xZ7VIs2-P*o*zMIarC3n}U`-IF_yi#iBRiQ6G|jRQx~^eZPF(iA*K2^lW<|!~ zy({?Fj%p!ab#Wy)HlXH3`L>Y=Ob z)S)9ruC7vgn&6xx;+JI~`hm!l0I*HWIuM~qfRImhXp69rwSV=ap#MUuA5VlI=U)~@ zmJSoERig<=gdAlE#^`n7j%WB|YXJ|ifK3J&jLbF`nAnlLZetP#;oXKXmDc z>56X`zjIzbPQMf=fEIi6$eo*MLXs@YbBxCv&`a`#;#`9C!)jKZ^dU2ob4nkypT|kQ zl)wq?SgTgW$~oZRGkPPp3Nv>V^hQGa@<)yIDTQv@xs;8Iw`}3L+82DaoYBTCAS2kd zaS2RAMxa8G2<;UQG#^jNTZlhkMvF@kW9kBR|Y z!oxOkm}|o^8d3o1R4(`_ONFTYrw{INBk&-v0ckgD0L6&m;+7ZY6q&pha0Dq-D}F5% z`um14c#yB;QxKz4o1CYxSY=boj4r&-_DW;4c|OK4AgZ6rctLspHwq70WTcia;sv5h z(ja^Hj)ilKSO2y%{nt%EL=Uh2kfQfp7j#Se^AD2K#^GGb%oDrH!f)a(gQ%9b#@Yo` zfcsb|!GyH0(8$V8I|Jk8QRv#@$mywmF%p|rqh%0i-QBnO(p7fTGTWZBElbm;ZM!s3 z3X-H>BP1SV$L|NmB74CK_cNQ3#q8sY`vka1@3$n&Nf!8d=hX;Yyk(8AW!2K|ywytU z1*RT;E5l{L0q9v^Epjh7R%us_(bP*WW;I_xRnK8!A+FhuBQMnoQB)LWdc#!JG(z=7P)d_&9z}?8zqVMQL3aGKoC>r5ix)zzrub`Y zi!K~f8sRsVj&AW(?mf1Xxli-npT#FMX4;?qsQH1{O0qYt@yIGo=Tl4f;8L&Bj zk?pd%S%{Xlt2g$=IIdyiK)+Ep%~S_f5xEzFM#VXE{qgzm={y(fnv_<_kCNXM7z>w9 z^kHnR$AlKvx0oju32o#o)4fnnC9KJRg`Tfdg!*Y&#Z?9JW8ENB=tbhEqf$2rg%rA~ z2@{oJoFUB|$lgC<6V5;gQ

AUo1{Us>;hj#(K+DkI$BP_uvo2) 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 literal 0 HcmV?d00001 diff --git a/src/ui/fonts/hanken-grotesk-latin.woff2 b/src/ui/fonts/hanken-grotesk-latin.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..e71775f99dc5483d710cb0650a8d61188c16b968 GIT binary patch literal 34664 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 As{jB1 literal 0 HcmV?d00001 diff --git a/src/ui/index.html b/src/ui/index.html index f8514c9..932f6ae 100644 --- a/src/ui/index.html +++ b/src/ui/index.html @@ -10,120 +10,131 @@ -

+
+ +
-
- -
+ +
+
-