- Updated the development script to include a build step before launching the app.
- Refactored the registration of quick ask and autocomplete functionalities to be asynchronous, ensuring proper initialization.
- Introduced IPC channels for getting and setting keyboard shortcuts, allowing users to customize their experience.
- Enhanced the platform module to support better interaction with the Electron API for clipboard operations.
- Improved the user interface for managing keyboard shortcuts in the settings dialog, providing a more intuitive experience.
- Removed the interval management for tab selection, simplifying the state handling.
- Updated tab click handler to directly set the selected index without restarting the interval.
- Changed video preload attribute from "none" to "auto" for improved loading performance.
- Removed dynamic import of HeroCarousel and replaced it with a static layout.
- Introduced new TAB_ITEMS for showcasing features with descriptions and media.
- Enhanced the layout and styling for better responsiveness and visual appeal.
- Cleaned up unused code and improved overall readability of the component.
Browsers wait for scroll/touch listeners to finish to check if
preventDefault() is called, which delays scrolling. Since these
handlers (navbar scroll detection, click-outside detection, and
onboarding tour position updates) never call preventDefault(),
marking them as passive lets the browser scroll without waiting.
Fixes#1053
- toggle-group.tsx: Wrap contextValue in useMemo to prevent unnecessary re-renders
- animated-tabs.tsx: Hoist constants and memoize handlers with useCallback/useMemo
- LocaleContext.tsx: Wrap setLocale in useCallback and contextValue in useMemo
- plate-editor.tsx: Memoize SaveShortcutPlugin and contextProviderValue, use useRef for stable references
- Add optional priority prop to Logo component (defaults to false)
- Set priority=true on login and register pages to preload logo
- Logo on other pages remains lazy-loaded by default
- Improves LCP on critical auth pages by eliminating lazy-load delay
- Replace raw <img> with Next.js Image in markdown-viewer.tsx
- Use next/image with fill + sizes in assistant-ui image.tsx
- Optimize favicons with explicit dimensions in citation components
- Set unoptimized=true for data/blob URLs and external favicons
Store the progress setInterval ID in a ref and clear it in a
useEffect cleanup. Previously the interval was stored in a local
variable and only cleared in onSuccess/onError callbacks, leaking
if the component unmounted mid-upload.
Fixes#1090
Fix two timer cleanup bugs in onboarding-tour.tsx:
1. Remove cleanup return from useCallback (only works in useEffect).
Clear retryTimerRef at the start of updateTarget and in a
dedicated useEffect cleanup instead.
2. Track recursive setTimeout calls via startCheckTimerRef so they
are properly cancelled on unmount instead of leaking.
Fixes#1091
Wrap scroll handlers in thread.tsx, InboxSidebar.tsx, and
DocumentsTableShell.tsx with requestAnimationFrame batching so scroll
position state updates fire at most once per animation frame instead of
on every scroll event (up to 60/sec at 60fps). Add cleanup useEffect to
cancel pending frames on unmount.
Fixes#1103