From 807701c51ec14dc615fb4bed8b9fed7d30457814 Mon Sep 17 00:00:00 2001 From: Sawyer Date: Thu, 17 Sep 2026 21:34:07 -0700 Subject: [PATCH] feat(web): first-run loading state and guided walkthrough (CL-8428) --- apps/web/package.json | 3 +- apps/web/src/app.css | 10 +++ apps/web/src/chat/composer.tsx | 2 +- apps/web/src/chat/loading-state.tsx | 2 + apps/web/src/chat/styles.css | 22 ++++++ apps/web/src/pages/onboarding-page.tsx | 26 ++++---- apps/web/src/shell/app-shell.tsx | 2 + apps/web/src/shell/first-run-tour.tsx | 92 ++++++++++++++++++++++++++ apps/web/src/shell/sidebar.tsx | 4 +- bun.lock | 51 ++++++++++---- 10 files changed, 185 insertions(+), 29 deletions(-) create mode 100644 apps/web/src/shell/first-run-tour.tsx diff --git a/apps/web/package.json b/apps/web/package.json index 8c9dc0ff8d..1d900480d1 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -34,7 +34,8 @@ "buffer": "^6.0.3", "isomorphic-git": "catalog:", "react": "^19.2.0", - "react-dom": "^19.2.0" + "react-dom": "^19.2.0", + "react-joyride": "^2.9.3" }, "devDependencies": { "@happy-dom/global-registrator": "^20.11.2", diff --git a/apps/web/src/app.css b/apps/web/src/app.css index ff26cf6935..d74a520f2b 100644 --- a/apps/web/src/app.css +++ b/apps/web/src/app.css @@ -2243,6 +2243,16 @@ select:disabled, animation: onboarding-phase-in var(--duration-large, 300ms) var(--ease-out, ease) both; } +/* The wait phases drop the usual title/subtitle/form stack for the shared + centered loader — a form-column question reads oddly for a step with + nothing to ask. */ +.onboarding-phase--loading { + display: flex; + min-height: 20rem; + align-items: center; + justify-content: center; +} + @keyframes onboarding-phase-in { from { opacity: 0; diff --git a/apps/web/src/chat/composer.tsx b/apps/web/src/chat/composer.tsx index 0628f3a34a..b71eb1dd5b 100644 --- a/apps/web/src/chat/composer.tsx +++ b/apps/web/src/chat/composer.tsx @@ -737,7 +737,7 @@ export const Composer = forwardRef< } return ( -
+
{mention !== null && (
{mentionOptions.length === 0 ? ( diff --git a/apps/web/src/chat/loading-state.tsx b/apps/web/src/chat/loading-state.tsx index 4210edbcf8..80dd6c63d4 100644 --- a/apps/web/src/chat/loading-state.tsx +++ b/apps/web/src/chat/loading-state.tsx @@ -9,6 +9,7 @@ // all, which is what keeps a fast round-trip from flashing chrome the // reader has no time to read. +import { CorbitsMark } from "@corbits/react-ui"; import { useEffect, useState } from "react"; import { CHAT_STRINGS } from "./strings"; @@ -82,6 +83,7 @@ export function WorkbenchLoadingState({ return (
+