Conversation
How to use the Graphite Merge QueueAdd either label to this PR to merge it via the merge queue:
You must have a Graphite account in order to use the merge queue. Sign up using this link. An organization admin has required the Graphite Merge Queue in this repository. Please do not merge from GitHub as this will restart CI on PRs being processed by the merge queue. This stack of pull requests is managed by Graphite. Learn more about stacking. |
Coverage report for
|
St.❔ |
Category | Percentage | Covered / Total |
|---|---|---|---|
| 🔴 | Statements | 8.88% (-0.07% 🔻) |
1736/19549 |
| 🔴 | Branches | 8.04% (-0.02% 🔻) |
1097/13637 |
| 🔴 | Functions | 5.33% (-0.08% 🔻) |
284/5326 |
| 🔴 | Lines | 8.57% (-0.07% 🔻) |
1628/18992 |
Show new covered files 🐣
St.❔ |
File | Statements | Branches | Functions | Lines |
|---|---|---|---|---|---|
| 🔴 | preload.ts | 0% | 0% | 0% | 0% |
Test suite run success
847 tests passing in 38 suites.
Report generated by 🧪jest coverage report action from 5f22f4f
3ea0463 to
fa8d365
Compare
fa8d365 to
ac2129c
Compare
b1ab3c8 to
c96b588
Compare
There was a problem hiding this comment.
Pull request overview
Eliminates the blank-screen gap between the HTML splash overlay and the initial React UI by making splash dismissal driven by React readiness (login form visibility or MainLayout render).
Changes:
- Add React-driven splash dismissal hooks (
__dismissSplash,main-layout-ready) and adjust MainLayout/LoginView timing to avoid the white flash. - Preload common post-login lazy chunks from the login screen to speed up the login→dashboard transition.
- Update splash DOM/CSS (layout, cube order, drag area) and remove the now-redundant
LoadingCurtaincomponent + test.
Reviewed changes
Copilot reviewed 7 out of 7 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
resources/webui.css |
Reworks splash overlay styling (fixed full-screen, flex layout, drag area, loading alignment). |
index.html |
Moves splash outside React root, adds critical inline CSS + React-driven dismissal script, fixes cube order/layout. |
react/src/routes.tsx |
Adds preloadPostLoginChunks() and adjusts LoginView usage for /interactive-login. |
react/src/components/MainLayout/MainLayout.tsx |
Removes LoadingCurtain, changes Suspense structure, dispatches main-layout-ready and dismisses splash on mount. |
react/src/components/LoginView.tsx |
Adds waitForMainLayout option, preloads chunks on mount, delays panel close until MainLayout readiness, dismisses splash when login form opens. |
react/src/components/LoadingCurtain.tsx |
Deleted (superseded by HTML splash lifecycle). |
react/src/components/LoadingCurtain.test.tsx |
Deleted along with the component. |
…reen Root cause: splash was dismissed before header/sider rendered. 1. Replace backend-ai-connected listener with globalThis.__dismissSplash() 2. MainLayout: DismissSplashOnMount inside header Suspense boundary fires only after WebUIHeader actually renders 3. LoginView: dismiss in open() callback when login form becomes visible (only fires in logged-out state) 4. MutationObserver fallback increased to 3s (was 800ms) to avoid racing with React-driven dismiss on normal routes 5. React-driven dismiss cancels MutationObserver fallback timer 6. Inline critical CSS in <head> for splash visibility before external CSS loads 7. Body background set inline to prevent white flash Verified via Playwright: splash fades only after UI is visible in both logged-in (header+sider) and logged-out (login form) flows.
ac2129c to
5f22f4f
Compare
Merge activity
|

Resolves #6617 (FR-2530)
Summary
Eliminates the blank white screen gap between splash overlay dismissal and React UI rendering by switching to React-driven splash dismissal.
Changes
MainLayout.tsx: Wrap sider+layout in single<Suspense fallback={null}>MainLayout.tsx: AddDismissSplashOnMountwithmain-layout-readyeventLoginView.tsx: AddwaitForMainLayoutpropfalsefor routes without MainLayout (e.g./interactive-login)LoginView.tsx: Preload post-login lazy chunks on mountrequestIdleCallbackroutes.tsx: AddpreloadPostLoginChunks()index.html: Fix splash cube DOM order (1,2,4,3 → 1,2,3,4)index.html: Wrap cube+text insplash-loadingdivindex.html: Increase MutationObserver fallback to 3sresources/webui.css: Splash loading flexbox layoutLoadingCurtain.tsx+ testTest plan
/interactive-login: Login form closes immediately after authentication/verify-email,/change-password) — splash works via 3s MutationObserver fallbackscripts/verify.sh: ALL PASS