import { ScrollView, Text, View } from 'virtual:taro/components' import { lazy, Suspense, useState } from 'react' import { Counter } from '../../components/counter/counter.tsx' import { BotanicalSprig } from '../../components/botanical-sprig/botanical-sprig.tsx' import { NavigationBar } from '../../components/navigation-bar/navigation-bar.tsx' const featureCards = [ { number: '01', title: 'Vite-speed feedback', description: 'Save a React component and see the smallest possible update in WeChat DevTools or the browser.', tiltClass: 'rotate-[-0.35deg]' }, { number: '02', title: 'One React tree', description: 'Share components, hooks and application state between WeChat Mini Program and H5.', tiltClass: 'translate-y-1 rotate-[0.25deg]' }, { number: '03', title: 'Native when needed', description: 'Use familiar Taro components and APIs without stepping away from a modern frontend workflow.', tiltClass: 'rotate-[0.4deg]' } ] as const const ApiCard = lazy(() => import('./lazy/api-card.tsx')) function HomePage() { // This local state intentionally demonstrates that VPT preserves React state during hot updates. const [count, setCount] = useState(0) return ( VPT Build naturally. Ship everywhere. A botanical little starter for building polished WeChat Mini Programs and Web apps with one modern React codebase. Vite 8 ✿ React 19 ✿ Tailwind 4 { setCount((currentCount) => currentCount - 1) }} onIncrement={() => { setCount((currentCount) => currentCount + 1) }} /> Edit. Save. Stay in flow. Change this counter, then edit src/pages/home/index.tsx. Your state stays exactly where you left it. A SMALL START, A MODERN FOUNDATION Everything is ready to grow. Keep the pieces you need, replace the rest, and let VPT handle the cross-platform build. {featureCards.map((feature) => ( {feature.number} {feature.title} {feature.description} ))} }> ) } export default HomePage