- Enhanced validate_exports.js to detect both named exports (export const/function/etc) and destructured exports (export { name1, name2 })
- Fixes validation error that was incorrectly reporting missing exports
- All CI checks now pass successfully
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Replaced broken placeholder modal with complete working version from commit 3e01e9c
- Fixed all import paths to point to correct modules (chat.js instead of storage.js/models.js)
- Added proper export statements for openUncloseaiEmbeddedModal and openUncloseaiEmbeddedModalNew
- Restored full functionality including:
* Settings panel with model/voice/language selection
* TTS functionality for all messages
* Copy buttons (raw markdown and HTML)
* File upload capability
* Complete chat history management
* Theme support and dynamic theme updating
* Intro message generation with page context
* Conversation persistence
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add missing toggleUncloseaiEmbeddedModal function for floating button
- Create comprehensive integration test suite (15 tests)
- Tests verify all imports/exports work correctly
- Tests ensure proper module structure after refactoring
- All tests passing ✅ - refactoring is solid!
- Add toggleUncloseaiEmbeddedModal function that was missing after refactoring
- Function properly toggles modal open/close state
- Export function globally for floating button onclick handler
- This fixes the floating button not appearing/working issue
- Fix CORS error caused by incorrect import in translate-modal.js
- Change import from ./page-content.js to ./content.js
- Resolves module loading issues
- Remove duplicate initializeSystem function that was causing export at wrong level
- Fix syntax error: export declarations may only appear at top level
- Reduce ui.js to 532 lines (from 567)
- Extract massive modal functions to uncloseai-embed-modal.js (399 lines)
- Extract widget creation functions to widget-library.js (447 lines)
- Move addFileUploadButton to file-upload.js for better organization
- Reduce ui.js from 3,595 lines to 567 lines (84% reduction)
- Transform ui.js into clean coordinator as requested
- All functionality preserved with proper imports and exports
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Move openTTSModal to tts-modal.js (335 lines)
- Move openTranslateModal to translate-modal.js (540 lines)
- Reduce ui.js from 4,832 to 4,028 lines
- Add imports and global exports for onclick handlers
- Each modal is now self-contained with its own imports
- No functionality changes, just code organization
- Fix main chat input textarea in openUncloseaiEmbeddedModal (line 3837)
- Fix TTS modal textarea with conditional styling (line 4070)
- Fix translation modal textarea with conditional styling (line 4417)
- All textareas now use rgba glassmorphism when USE_CUSTOM_STYLING=false
- Should resolve white-on-white text issue in blog dark mode
- Add askAnythingPlaceholder, askPagePlaceholder, enterTextToSpeakPlaceholder, processingTokens
- All 18 language files now complete with 67 translation keys each
- Verified with translation completeness script - all languages pass
- Update CLAUDE.md documentation to reflect new key count
- All UI placeholder text now fully internationalized
- Add askPagePlaceholder, askAnythingPlaceholder, enterTextToSpeakPlaceholder keys
- Replace hardcoded 'Ask about this page...', 'Ask anything...', 'Enter text to speak...'
- All input placeholders now use translation system
- Ensures consistent multilingual experience across all UI elements
- Fixed understanding: index.html uses PicoCSS (custom=true), blog uses fallback (custom=false)
- Replace CSS variables with rgba transparency and glassmorphism effects
- Semi-transparent backgrounds adapt to any light/dark theme
- Backdrop-filter blur creates modern glass effect that works universally
- No longer assumes CSS variables exist on blog sites
- Add USE_CUSTOM_STYLING checks to main chat interfaces
- Use PicoCSS variables (--background-color, --color, --border-color) when USE_CUSTOM_STYLING=false
- Fix white-on-white text issue in dark mode for blog embedding
- Chat input, textarea, and buttons now respect PicoCSS dark theme
- Maintains backward compatibility with index.html (custom styling)
- Fix all remaining 'Read Page' hardcoded strings
- Replace 'Processing...' and 'Detecting...' with translation keys
- Update createReadFeature to use proper translation system
- Add processingTokens translation key for token count display
- UI should now properly internationalize all button text
- Fix all hardcoded text in translation modal content
- Add translatePageInfo, translateToLabel, translateButton keys
- Fix dynamic button text for page/text modes
- Fix hardcoded Processing text during translation
- Fix Translation Modal button labels in UI
- Fix TTS Anything and Smart Translate button labels
- Add data-i18n attributes for dynamic refresh
- All modal content now fully localizes on language switch
- Fix TTS modal hardcoded 'Speed:' and 'Play Text' buttons
- Fix translation modal hardcoded tab text
- Fix system prompt to respect user's selected language
- Fix DOM auto-refresh by connecting both refresh functions
- Add TTS and system prompt translation keys to 10 languages
- Translation modal tabs and TTS controls now localize properly
- Language switching works without hard refresh for data-i18n elements
- Create individual language files for all 19 supported languages
- Add complete 46-key translations for Hindi, Spanish, French, Arabic, Bengali, Russian, Portuguese, Urdu, Indonesian, German, Japanese, Swahili, Marathi, Telugu, Turkish, Chinese Traditional, and Korean
- Implement dynamic UI refresh mechanism for real-time language switching
- Add translation verification script for consistency checks
- Update ui-translations.js to use new modular structure
- Document complete workflow for adding new languages in journal.rst
All languages now have 100% translation key coverage with automated verification
- Fix template literal usage (string concatenation to template literals)
- Apply optional chaining for safer property access
- Reduce biome warnings from 36 to 19
- Code is now cleaner and more maintainable
- Create ui-translations.js with UI_TRANSLATIONS object and translation functions
- Create ui-themes.js with theme detection and styling functions
- Create language-detection.js with AI-powered language detection
- Remove duplicate code from ui.js, reducing from 5600+ to 4741 lines
- Fix import assignments and syntax errors
- All functionality preserved while improving code organization
- Update batman toolbelt action buttons to use getUIText()
- Translate all modal headers (AI Assistant, TTS, Translate)
- Convert all input placeholders to use translations
- Update critical alert messages with parameter substitution
- Add comprehensive translation keys for UI elements
- Translate Hermes intro message with proper HTML formatting
- Support both English and Chinese translations for all new keys
- Maintain fallback to English for missing translations
- Fix biome style issues (template literals, optional chains)
- Add complete UI translations for all 19 supported languages
- Add language preference dropdown in modal settings
- Store language preference in localStorage
- Inject language preference into Hermes system prompts
- Add smart translation dropdown with AI-powered language detection
- Keep both original translation modal and new smart dropdown
- Remove non-functional upload button from modal
- Add biome.json config to ignore third-party CSS files
- Add smart-translate widget feature with AI language detection
- Implement triple-format language display (code • English • Native)
- Add native script names with proper Unicode (中文, Español, العربية, etc.)
- Export handleSmartTranslate to global scope for HTML onclick
- Update demo.html to showcase both translate and smart-translate options
- Add comprehensive widget documentation with code examples
🤖 Generated with Hermes Staff
Co-Authored-By: Claude <noreply@anthropic.com>
- Replace translation modal with intelligent dropdown interface
- Add AI-powered language detection using Hermes classifier
- Send page markdown sample to Hermes for accurate language detection
- Create themed dropdown with current language indicator
- Support all 18+ languages with quick selection
- Open translations in new tab automatically
- Add fallback language detection for reliability
- Show translation progress with loading states
- Auto-close dropdown on outside clicks
- Add !important to color property for control buttons
- Fix text visibility issue on mobile devices
- Apply same fix to download button
- Update theme change handler to use !important for dynamic updates
- Add theme detection that checks data-theme attribute and prefers-color-scheme
- Create theme-aware color palette for both light and dark modes
- Update modal container, headers, panels, inputs, and buttons with theme colors
- Apply theme colors to user/AI message bubbles and action buttons
- Add dynamic theme change monitoring with MutationObserver and media queries
- Update historical messages to respect current theme on load
- Ensure proper cleanup of theme listeners when modal is closed
- Improve accessibility with proper contrast in both light and dark modes