/* eslint-disable react-dom/no-dangerously-set-innerhtml */ import { useEffect, useState } from 'react' import { useTranslation } from 'react-i18next' import { Link, useSearchParams } from 'wouter' import { PageAgent } from '@/PageAgent.js' import Footer from './components/Footer' import Header from './components/Header' const injection = encodeURI( "javascript:(function(){var s=document.createElement('script');s.src=`https://hwcxiuzfylggtcktqgij.supabase.co/storage/v1/object/public/demo-public/v0.0.4/page-agent.js?t=${Math.random()}`;s.setAttribute('crossorigin', true);s.type=`text/javascript`;s.onload=()=>console.log('PageAgent script loaded!');document.body.appendChild(s);})();" ) const injectionA = ` ✨PageAgent ` export default function HomePage() { const { t, i18n } = useTranslation(['home', 'common']) const [task, setTask] = useState(() => t('home:hero.default_task')) // Update task when language changes const defaultTask = t('home:hero.default_task') useEffect(() => { setTask(defaultTask) }, [defaultTask]) const [params, setParams] = useSearchParams() const isOther = params.has('try_other') const [activeTab, setActiveTab] = useState<'try' | 'other'>(isOther ? 'other' : 'try') const handleExecute = async () => { if (!task.trim()) return let pageAgent: PageAgent if (window.pageAgent && !window.pageAgent.disposed) { pageAgent = window.pageAgent } else { pageAgent = new PageAgent({ // 把 react 根元素排除掉,挂了很多冒泡时间导致假阳 interactiveBlacklist: [document.getElementById('root')!], language: i18n.language as any, // testing server // @note: rate limit. prompt limit. // model: DEMO_MODEL, // baseURL: DEMO_BASE_URL, // apiKey: DEMO_API_KEY, }) window.pageAgent = pageAgent } const result = await pageAgent.execute(task) console.log(result) } return (
{/* Hero Section */}
{/* Background Pattern */}
{t('home:hero.badge')}

{t('home:hero.title_line1')}
{t('home:hero.title_line2')}

{t('home:hero.subtitle_emoji')} {t('home:hero.subtitle_main')}
{t('home:hero.subtitle_detail')}

{/* Try It Now Section - Tab Card */}
{/* Tab Headers */}
{/* Tab Content */}
{activeTab === 'try' && (
setTask(e.target.value)} placeholder={t('home:hero.input_placeholder')} className="w-full px-4 py-3 pr-20 border border-gray-300 dark:border-gray-600 rounded-lg bg-white dark:bg-gray-700 text-gray-900 dark:text-white placeholder-gray-500 dark:placeholder-gray-400 focus:ring-2 focus:ring-blue-500 focus:border-transparent resize-none text-sm mb-0" data-page-agent-not-interactive />
)} {activeTab === 'other' && (
{/* 左侧:操作步骤 */}
{/* Keyboard Shortcut Hint */}

{t('home:try_other.step1_title')} {' '} {t('home:try_other.step1_content')}

Ctrl + Shift + B ⌘ + Shift + B
{/* Draggable Bookmarklet */}

{t('home:try_other.step2_title')} {' '} {t('home:try_other.step2_content')}

{/* Usage Instructions */}

{t('home:try_other.step3_title')} {' '} {t('home:try_other.step3_content')}

{/* 右侧:注意事项 */}

{t('home:try_other.notice_title')}

  • {t('home:try_other.notice_items.item1')}
  • {t('home:try_other.notice_items.item2')}
  • {t('home:try_other.notice_items.item3')}
  • {t('home:try_other.notice_items.item4')}
  • {t('home:try_other.notice_items.item5')}
  • {t('home:try_other.notice_items.item6_prefix')}{' '} {t('home:try_other.notice_items.item6_link')}
)}
  • {t('home:benefits.no_backend')}
  • {t('home:benefits.private_model')}
  • {t('home:benefits.data_masking')}
  • {t('home:benefits.open_source')}
{/* Features Section */}
{/* Feature 1 */}

{t('home:features.dom_understanding.title')}

{t('home:features.dom_understanding.desc')}

{/* Feature 2 */}

{t('home:features.secure_integration.title')}

{t('home:features.secure_integration.desc')}

{/* Feature 3 */}

{t('home:features.zero_backend.title')}

{t('home:features.zero_backend.desc')}

{/* Feature 4 */}

{t('home:features.accessible.title')}

{t('home:features.accessible.desc')}

{/* Use Cases Section */}

{t('home:use_cases.section_title')}

{t('home:use_cases.section_subtitle')}

{/* Use Case 1 */}
1

{t('home:use_cases.case1.title')}

{t('home:use_cases.case1.desc')}

{/* Use Case 2 */}
2

{t('home:use_cases.case2.title')}

{t('home:use_cases.case2.desc')}

{/* Use Case 3 */}
3

{t('home:use_cases.case3.title')}

{t('home:use_cases.case3.desc')}

{/* Use Case 4 */}
4

{t('home:use_cases.case4.title')}

{t('home:use_cases.case4.desc')}

) }