1- import { Link } from "@tanstack/react-router" ;
2-
1+ import { OnboardingChecklist } from "@/components/Onboarding/OnboardingChecklist" ;
32import { Button } from "@/components/ui/button" ;
43import { Icon } from "@/components/ui/icon" ;
54import { BlockStack , InlineStack } from "@/components/ui/layout" ;
6- import { Link as ExternalLink } from "@/components/ui/link" ;
7- import { Heading , Paragraph , Text } from "@/components/ui/typography" ;
8- import { cn } from "@/lib/utils" ;
9- import {
10- type OnboardingStep ,
11- useOnboarding ,
12- } from "@/providers/OnboardingProvider/OnboardingProvider" ;
13- import { DOCUMENTATION_URL } from "@/utils/constants" ;
14- import { tracking } from "@/utils/tracking" ;
5+ import { Heading , Paragraph } from "@/components/ui/typography" ;
6+ import { useOnboarding } from "@/providers/OnboardingProvider/OnboardingProvider" ;
157
168function scrollNearestScrollableToTop ( el : HTMLElement | null ) {
179 let node = el ?. parentElement ?? null ;
@@ -29,87 +21,8 @@ function scrollNearestScrollableToTop(el: HTMLElement | null) {
2921 window . scrollTo ( { top : 0 , behavior : "smooth" } ) ;
3022}
3123
32- function StepCta ( {
33- step,
34- onReadDocs,
35- } : {
36- step : OnboardingStep ;
37- onReadDocs : ( ) => void ;
38- } ) {
39- if ( step . id === "read_docs" ) {
40- return (
41- < ExternalLink
42- href = { DOCUMENTATION_URL }
43- external
44- variant = "primary"
45- size = "sm"
46- onClick = { onReadDocs }
47- { ...tracking ( "learning_hub.onboarding.step" , { step_id : step . id } ) }
48- >
49- { step . cta . label }
50- </ ExternalLink >
51- ) ;
52- }
53-
54- return (
55- < Button
56- asChild
57- size = "sm"
58- variant = "outline"
59- { ...tracking ( "learning_hub.onboarding.step" , { step_id : step . id } ) }
60- >
61- < Link to = { step . cta . to } > { step . cta . label } </ Link >
62- </ Button >
63- ) ;
64- }
65-
66- function StepRow ( {
67- step,
68- onReadDocs,
69- } : {
70- step : OnboardingStep ;
71- onReadDocs : ( ) => void ;
72- } ) {
73- return (
74- < InlineStack as = "li" gap = "3" blockAlign = "start" wrap = "nowrap" >
75- < Icon
76- name = { step . completed ? "CircleCheck" : step . icon }
77- size = "md"
78- className = { cn (
79- "mt-0.5 shrink-0" ,
80- step . completed ? "text-primary" : "text-muted-foreground" ,
81- ) }
82- aria-hidden = "true"
83- />
84- < BlockStack className = "min-w-0 flex-1" >
85- < Text
86- size = "sm"
87- weight = "semibold"
88- tone = { step . completed ? "subdued" : "inherit" }
89- className = { cn ( step . completed && "line-through" ) }
90- >
91- { step . label }
92- </ Text >
93- < Text size = "xs" tone = "subdued" >
94- { step . description }
95- </ Text >
96- </ BlockStack >
97- { ! step . completed && < StepCta step = { step } onReadDocs = { onReadDocs } /> }
98- </ InlineStack >
99- ) ;
100- }
101-
10224export function OnboardingHero ( ) {
103- const {
104- steps,
105- completedCount,
106- total,
107- isComplete,
108- markDocsRead,
109- dismissed,
110- dismiss,
111- reopen,
112- } = useOnboarding ( ) ;
25+ const { isComplete, dismissed, dismiss, reopen } = useOnboarding ( ) ;
11326
11427 if ( dismissed ) {
11528 return (
@@ -164,30 +77,7 @@ export function OnboardingHero() {
16477 </ Paragraph >
16578 </ BlockStack >
16679
167- < InlineStack gap = "3" blockAlign = "center" >
168- < Text size = "xs" tone = "subdued" weight = "semibold" >
169- { completedCount } of { total } steps
170- </ Text >
171- < div
172- className = "flex-1 h-2 rounded-full bg-muted overflow-hidden"
173- role = "progressbar"
174- aria-valuenow = { completedCount }
175- aria-valuemin = { 0 }
176- aria-valuemax = { total }
177- aria-label = "Onboarding progress"
178- >
179- < div
180- className = "h-full bg-primary transition-all duration-300"
181- style = { { width : `${ ( completedCount / total ) * 100 } %` } }
182- />
183- </ div >
184- </ InlineStack >
185-
186- < BlockStack as = "ul" gap = "3" className = "list-none p-0 m-0" >
187- { steps . map ( ( step ) => (
188- < StepRow key = { step . id } step = { step } onReadDocs = { markDocsRead } />
189- ) ) }
190- </ BlockStack >
80+ < OnboardingChecklist />
19181 </ BlockStack >
19282 </ div >
19383 ) ;
0 commit comments