@uptrademedia/site-kit 1.0.38 → 1.0.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-X66VOCWP.mjs → chunk-35Y3M4ZE.mjs} +6 -2
- package/dist/chunk-35Y3M4ZE.mjs.map +1 -0
- package/dist/{chunk-DRFTRTKV.js → chunk-5TTUNB63.js} +6 -2
- package/dist/chunk-5TTUNB63.js.map +1 -0
- package/dist/{chunk-KBS3KW2U.js → chunk-F6D3L676.js} +4 -4
- package/dist/{chunk-KBS3KW2U.js.map → chunk-F6D3L676.js.map} +1 -1
- package/dist/chunk-IRNMIFOE.js +316 -0
- package/dist/chunk-IRNMIFOE.js.map +1 -0
- package/dist/{chunk-Y4BW6XYJ.js → chunk-JRCYNWUZ.js} +6 -2
- package/dist/chunk-JRCYNWUZ.js.map +1 -0
- package/dist/chunk-LHMD7CAR.mjs +306 -0
- package/dist/chunk-LHMD7CAR.mjs.map +1 -0
- package/dist/{chunk-6ONUXZDO.mjs → chunk-QT73LSTP.mjs} +19 -4
- package/dist/chunk-QT73LSTP.mjs.map +1 -0
- package/dist/{chunk-EL5QTAA3.mjs → chunk-TEYPRKYU.mjs} +6 -2
- package/dist/chunk-TEYPRKYU.mjs.map +1 -0
- package/dist/{chunk-IT6R5VAZ.mjs → chunk-WZMRFNJK.mjs} +4 -4
- package/dist/{chunk-IT6R5VAZ.mjs.map → chunk-WZMRFNJK.mjs.map} +1 -1
- package/dist/{chunk-S2GXR5HY.js → chunk-ZG2AGGPZ.js} +19 -4
- package/dist/chunk-ZG2AGGPZ.js.map +1 -0
- package/dist/cli/index.js +3 -3
- package/dist/cli/index.mjs +1 -1
- package/dist/{generators-TYPILCWD.mjs → generators-H6YQQRR4.mjs} +3 -3
- package/dist/{generators-TYPILCWD.mjs.map → generators-H6YQQRR4.mjs.map} +1 -1
- package/dist/{generators-5EU4PTVF.js → generators-HZZLGIUB.js} +9 -9
- package/dist/{generators-5EU4PTVF.js.map → generators-HZZLGIUB.js.map} +1 -1
- package/dist/index.d.mts +0 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.js +2 -95
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -2
- package/dist/index.mjs.map +1 -1
- package/dist/llms/index.d.mts +51 -10
- package/dist/llms/index.d.ts +51 -10
- package/dist/llms/index.js +551 -71
- package/dist/llms/index.js.map +1 -1
- package/dist/llms/index.mjs +526 -1
- package/dist/llms/index.mjs.map +1 -1
- package/dist/seo/register-sitemap-cli.mjs +0 -0
- package/dist/setup/client.js +7 -7
- package/dist/setup/client.mjs +2 -2
- package/dist/setup/index.js +9 -9
- package/dist/setup/index.mjs +3 -3
- package/dist/setup/server.js +2 -2
- package/dist/setup/server.mjs +1 -1
- package/dist/sitemap/index.d.mts +14 -2
- package/dist/sitemap/index.d.ts +14 -2
- package/dist/sitemap/index.js +30 -5
- package/dist/sitemap/index.js.map +1 -1
- package/dist/sitemap/index.mjs +30 -5
- package/dist/sitemap/index.mjs.map +1 -1
- package/package.json +9 -9
- package/dist/chunk-6ONUXZDO.mjs.map +0 -1
- package/dist/chunk-CG53ASWX.mjs +0 -729
- package/dist/chunk-CG53ASWX.mjs.map +0 -1
- package/dist/chunk-DRFTRTKV.js.map +0 -1
- package/dist/chunk-EL5QTAA3.mjs.map +0 -1
- package/dist/chunk-S2GXR5HY.js.map +0 -1
- package/dist/chunk-VOR53RUR.js +0 -753
- package/dist/chunk-VOR53RUR.js.map +0 -1
- package/dist/chunk-X66VOCWP.mjs.map +0 -1
- package/dist/chunk-Y4BW6XYJ.js.map +0 -1
|
@@ -1002,10 +1002,14 @@ function SetupWizard({ config } = {}) {
|
|
|
1002
1002
|
NEXT_PUBLIC_SUPABASE_URL=${config?.url || "https://xxx.supabase.co"}
|
|
1003
1003
|
NEXT_PUBLIC_SUPABASE_ANON_KEY=${config?.anonKey || "xxx"}`;
|
|
1004
1004
|
const providerCode = `import { SiteKitProvider } from '@uptrade/site-kit'
|
|
1005
|
+
import { ManagedFavicon } from '@uptrade/site-kit/images'
|
|
1005
1006
|
|
|
1006
1007
|
export default function RootLayout({ children }) {
|
|
1007
1008
|
return (
|
|
1008
1009
|
<html>
|
|
1010
|
+
<head>
|
|
1011
|
+
<ManagedFavicon />
|
|
1012
|
+
</head>
|
|
1009
1013
|
<body>
|
|
1010
1014
|
<SiteKitProvider
|
|
1011
1015
|
projectId={process.env.NEXT_PUBLIC_UPTRADE_PROJECT_ID!}
|
|
@@ -1419,5 +1423,5 @@ function QuickLink({ icon, title, href }) {
|
|
|
1419
1423
|
}
|
|
1420
1424
|
|
|
1421
1425
|
export { SetupWizard };
|
|
1422
|
-
//# sourceMappingURL=chunk-
|
|
1423
|
-
//# sourceMappingURL=chunk-
|
|
1426
|
+
//# sourceMappingURL=chunk-35Y3M4ZE.mjs.map
|
|
1427
|
+
//# sourceMappingURL=chunk-35Y3M4ZE.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/setup/SetupWizard.tsx"],"names":["userEmail","step"],"mappings":"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","file":"chunk-35Y3M4ZE.mjs","sourcesContent":["'use client'\n\n/**\n * Uptrade Setup Wizard\n * \n * Visual setup wizard that runs at /_uptrade/setup during development.\n * Supports THREE flows:\n * \n * 🆕 NEW SITE:\n * Brand new site, nothing exists yet.\n * Define brand manually → Choose modules → Scaffold → Integration → Copilot → Complete\n * \n * 🔧 EXISTING PROJECT:\n * NextJS project already built by us. Adding Portal integration.\n * Scan codebase → Migrate forms/widgets → Integration → Copilot → Complete\n * \n * 🔄 REBUILD:\n * Company has a live site, we're recreating it in NextJS.\n * Enter domain → Scrape live site → Review extracted data → Track redirects → Integration → Copilot → Complete\n */\n\nimport React, { useState, useEffect, useCallback } from 'react'\n\n// ============================================\n// Types\n// ============================================\n\ntype SetupType = 'new' | 'existing' | 'rebuild' | null\n\ntype Step = \n | 'welcome' \n | 'auth' \n | 'project' \n | 'setup-type'\n // NEW flow\n | 'brand'\n | 'modules'\n | 'scaffold'\n // EXISTING flow\n | 'scan'\n | 'migrate'\n // REBUILD flow\n | 'domain'\n | 'scrape'\n | 'review'\n | 'redirects'\n // Common finish\n | 'integration'\n | 'copilot'\n | 'complete'\n\ninterface ScanResults {\n forms: DetectedItem[]\n widgets: DetectedItem[]\n metadata: DetectedItem[]\n analytics: DetectedItem[]\n}\n\ninterface DetectedItem {\n type: string\n file: string\n line: number\n details: Record<string, unknown>\n selected: boolean\n}\n\ninterface Project {\n id: string\n name: string\n domain: string\n}\n\ninterface Organization {\n id: string\n name: string\n projects: Project[]\n}\n\ninterface ScrapeStatus {\n id: string\n status: 'pending' | 'running' | 'completed' | 'failed'\n progress: number\n current_step: string\n pages_found: number\n routes_planned: number\n faqs_imported: number\n brand?: {\n business_name?: string\n primary_colors?: { hex: string }[]\n secondary_colors?: { hex: string }[]\n logo_url?: string\n tagline?: string\n }\n routes?: Array<{ path: string; title: string; type: string }>\n error?: string\n}\n\ninterface BrandConfig {\n businessName: string\n tagline: string\n primaryColor: string\n secondaryColor?: string\n logoUrl: string\n}\n\n// Available Uptrade modules\nconst AVAILABLE_MODULES = [\n { id: 'analytics', name: 'Analytics', description: 'Page views, events, sessions, web vitals', icon: '📊', recommended: true },\n { id: 'seo', name: 'SEO', description: 'Managed FAQs, meta tags, schema markup', icon: '🔍', recommended: true },\n { id: 'forms', name: 'Forms', description: 'Managed forms with Portal submissions', icon: '📝', recommended: true },\n { id: 'engage', name: 'Engage', description: 'Live chat, popups, nudges, banners', icon: '💬', recommended: false },\n { id: 'commerce', name: 'Commerce', description: 'Products, services, checkout', icon: '🛒', recommended: false },\n]\n\ninterface SetupWizardProps {\n config?: {\n url?: string\n anonKey?: string\n portalApiUrl?: string\n }\n}\n\n// ============================================\n// Setup Wizard Component\n// ============================================\n\nexport function SetupWizard({ config }: SetupWizardProps = {}) {\n const [step, setStep] = useState<Step>('welcome')\n const [isLoading, setIsLoading] = useState(false)\n const [error, setError] = useState<string | null>(null)\n \n // Auth state\n const [isAuthenticated, setIsAuthenticated] = useState(false)\n const [userEmail, setUserEmail] = useState<string | null>(null)\n const [accessToken, setAccessToken] = useState<string | null>(null)\n \n // Organization & Project state\n const [organizations, setOrganizations] = useState<Organization[]>([])\n const [selectedOrg, setSelectedOrg] = useState<Organization | null>(null)\n const [selectedProject, setSelectedProject] = useState<Project | null>(null)\n const [newProjectName, setNewProjectName] = useState('')\n const [newProjectDomain, setNewProjectDomain] = useState('')\n \n // ProjectStep local state (hoisted to avoid re-render issues)\n const [createNewProject, setCreateNewProject] = useState(false)\n const [creatingProject, setCreatingProject] = useState(false)\n const [creatingOrg, setCreatingOrg] = useState(false)\n const [newOrgName, setNewOrgName] = useState('')\n const [showNewOrg, setShowNewOrg] = useState(false)\n \n // Setup type\n const [setupType, setSetupType] = useState<SetupType>(null)\n \n // NEW flow: Brand configuration\n const [brandConfig, setBrandConfig] = useState<BrandConfig>({\n businessName: '',\n tagline: '',\n primaryColor: '#3B82F6',\n secondaryColor: undefined,\n logoUrl: '',\n })\n \n // NEW/EXISTING flow: Module selection\n const [selectedModules, setSelectedModules] = useState<string[]>(['analytics', 'seo', 'forms'])\n \n // EXISTING flow: Scan results\n const [scanResults, setScanResults] = useState<ScanResults | null>(null)\n const [migrationProgress, setMigrationProgress] = useState(0)\n const [migrationLog, setMigrationLog] = useState<string[]>([])\n \n // REBUILD flow: Scrape state\n const [scrapeDomain, setScrapeDomain] = useState('')\n const [scrapeStatus, setScrapeStatus] = useState<ScrapeStatus | null>(null)\n const [redirectMappings, setRedirectMappings] = useState<Array<{ from: string; to: string; enabled: boolean }>>([])\n \n // Copilot instructions\n const [copilotInstructions, setCopilotInstructions] = useState<string>('')\n const [generatingCopilot, setGeneratingCopilot] = useState(false)\n\n // API URL helpers\n const portalApiUrl = config?.portalApiUrl || 'http://localhost:3002'\n \n // Project step handlers (hoisted to prevent re-creation)\n const handleCreateOrg = useCallback(async () => {\n if (!newOrgName.trim()) return\n setCreatingOrg(true)\n try {\n const res = await fetch(`${portalApiUrl}/setup/organizations`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json', ...(accessToken ? { 'Authorization': `Bearer ${accessToken}` } : {}) },\n body: JSON.stringify({ name: newOrgName })\n })\n if (!res.ok) throw new Error('Failed to create organization')\n const org = await res.json()\n setOrganizations(prev => [...prev, org])\n setSelectedOrg(org)\n setNewOrgName('')\n setShowNewOrg(false)\n } catch (err) {\n setError((err as Error).message)\n } finally {\n setCreatingOrg(false)\n }\n }, [portalApiUrl, accessToken, newOrgName])\n\n const handleCreateProject = useCallback(async () => {\n if (!selectedOrg || !newProjectName.trim()) return\n setCreatingProject(true)\n try {\n const res = await fetch(`${portalApiUrl}/setup/projects`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json', ...(accessToken ? { 'Authorization': `Bearer ${accessToken}` } : {}) },\n body: JSON.stringify({ orgId: selectedOrg.id, name: newProjectName, domain: newProjectDomain || (typeof window !== 'undefined' ? window.location.hostname : 'localhost') })\n })\n if (!res.ok) throw new Error('Failed to create project')\n const project = await res.json()\n setSelectedProject(project)\n setStep('setup-type')\n } catch (err) {\n setError((err as Error).message)\n } finally {\n setCreatingProject(false)\n }\n }, [portalApiUrl, accessToken, selectedOrg, newProjectName, newProjectDomain])\n\n const handleSelectProject = useCallback((project: Project) => {\n setSelectedProject(project)\n setStep('setup-type')\n }, [])\n \n // Helper to make Portal API calls\n const callPortalApi = useCallback(async (path: string, options: RequestInit = {}) => {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n ...(options.headers as Record<string, string> || {}),\n }\n if (accessToken) {\n headers['Authorization'] = `Bearer ${accessToken}`\n }\n return fetch(`${portalApiUrl}${path}`, {\n ...options,\n headers,\n })\n }, [portalApiUrl, accessToken])\n\n // Check if already configured\n useEffect(() => {\n checkExistingConfig()\n }, [])\n\n async function checkExistingConfig() {\n try {\n const localRes = await fetch('/_uptrade/api/status')\n const localData = await localRes.json()\n if (localData.configured) {\n setStep('complete')\n return\n }\n \n const storedToken = localStorage.getItem('uptrade_access_token')\n if (storedToken) {\n setAccessToken(storedToken)\n const res = await fetch(`${portalApiUrl}/setup/session`, {\n headers: { 'Authorization': `Bearer ${storedToken}` }\n })\n const data = await res.json()\n if (data.authenticated) {\n setIsAuthenticated(true)\n setUserEmail(data.email)\n setStep('project')\n }\n }\n } catch {\n // Not configured yet\n }\n }\n\n // ============================================\n // Step: Welcome\n // ============================================\n\n function WelcomeStep() {\n return (\n <div className=\"space-y-6\">\n <div className=\"text-center\">\n <div className=\"text-6xl mb-4\">🚀</div>\n <h1 className=\"text-3xl font-bold mb-2\">Welcome to Uptrade Site-Kit</h1>\n <p className=\"text-gray-400 text-lg\">\n Let's set up your project in just a few steps\n </p>\n </div>\n\n <div className=\"grid grid-cols-3 gap-4 my-8\">\n <FeatureCard icon=\"📊\" title=\"Analytics\" description=\"Track page views, events, and user sessions\" />\n <FeatureCard icon=\"📝\" title=\"Forms\" description=\"Managed forms with validation and submissions\" />\n <FeatureCard icon=\"💬\" title=\"Engage\" description=\"Popups, nudges, and live chat widgets\" />\n </div>\n\n <div className=\"flex justify-center\">\n <Button onClick={() => setStep('auth')}>Get Started →</Button>\n </div>\n </div>\n )\n }\n\n // ============================================\n // Step: Authentication\n // ============================================\n\n function AuthStep() {\n const [email, setEmail] = useState('')\n const [password, setPassword] = useState('')\n const [authMode, setAuthMode] = useState<'portal' | 'login' | 'magic'>('portal')\n const [waitingForPopup, setWaitingForPopup] = useState(false)\n\n // Listen for messages from Portal popup\n useEffect(() => {\n function handleMessage(event: MessageEvent) {\n // Only accept messages from Portal\n const portalOrigins = ['https://portal.uptrademedia.com', 'http://localhost:5173', 'http://localhost:8888']\n if (!portalOrigins.includes(event.origin)) return\n \n if (event.data?.type === 'uptrade-auth-success') {\n const { accessToken: token, email: userEmail } = event.data\n if (token) {\n localStorage.setItem('uptrade_access_token', token)\n setAccessToken(token)\n setIsAuthenticated(true)\n setUserEmail(userEmail)\n setWaitingForPopup(false)\n loadOrganizations(token).then(() => setStep('project'))\n }\n } else if (event.data?.type === 'uptrade-auth-error') {\n setError(event.data.message || 'Authentication failed')\n setWaitingForPopup(false)\n }\n }\n \n window.addEventListener('message', handleMessage)\n return () => window.removeEventListener('message', handleMessage)\n }, [])\n\n async function handlePortalAuth() {\n setWaitingForPopup(true)\n setError(null)\n \n // Open Portal auth page in popup - use localhost:5173 for dev\n const portalUrl = portalApiUrl.includes('localhost') ? 'http://localhost:5173' : 'https://portal.uptrademedia.com'\n const callbackUrl = encodeURIComponent(window.location.origin)\n const popup = window.open(\n `${portalUrl}/auth/site-kit?callback=${callbackUrl}`,\n 'uptrade-auth',\n 'width=500,height=700,left=100,top=100'\n )\n \n // Check if popup was blocked\n if (!popup) {\n setError('Popup was blocked. Please allow popups and try again.')\n setWaitingForPopup(false)\n return\n }\n \n // Poll for popup close (in case user closes without completing)\n const pollInterval = setInterval(() => {\n if (popup.closed) {\n clearInterval(pollInterval)\n setWaitingForPopup(false)\n }\n }, 1000)\n }\n\n async function handleLogin() {\n if (!email.trim() || !password.trim()) return\n setIsLoading(true)\n setError(null)\n try {\n const supabaseUrl = config?.url || 'https://mwcjtnoqxolplwpkxnfe.supabase.co'\n const supabaseKey = config?.anonKey || ''\n \n const authRes = await fetch(`${supabaseUrl}/auth/v1/token?grant_type=password`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json', 'apikey': supabaseKey },\n body: JSON.stringify({ email, password })\n })\n \n if (!authRes.ok) {\n const errData = await authRes.json()\n throw new Error(errData.error_description || errData.msg || 'Login failed')\n }\n \n const authData = await authRes.json()\n const token = authData.access_token\n \n localStorage.setItem('uptrade_access_token', token)\n setAccessToken(token)\n \n const sessionRes = await fetch(`${portalApiUrl}/setup/session`, {\n headers: { 'Authorization': `Bearer ${token}` }\n })\n const session = await sessionRes.json()\n \n if (session.authenticated) {\n setIsAuthenticated(true)\n setUserEmail(session.email)\n await loadOrganizations(token)\n setStep('project')\n } else {\n throw new Error('Authentication failed - user not found in Portal')\n }\n } catch (err) {\n setError((err as Error).message)\n } finally {\n setIsLoading(false)\n }\n }\n\n async function handleMagicLink() {\n if (!email.trim()) return\n setIsLoading(true)\n setError(null)\n try {\n const supabaseUrl = config?.url || 'https://mwcjtnoqxolplwpkxnfe.supabase.co'\n const supabaseKey = config?.anonKey || ''\n \n const res = await fetch(`${supabaseUrl}/auth/v1/magiclink`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json', 'apikey': supabaseKey },\n body: JSON.stringify({ email, options: { redirectTo: window.location.href } })\n })\n \n if (!res.ok) throw new Error('Failed to send magic link')\n alert('Check your email for a login link!')\n } catch (err) {\n setError((err as Error).message)\n } finally {\n setIsLoading(false)\n }\n }\n\n return (\n <div className=\"space-y-6\">\n <div className=\"text-center\">\n <h2 className=\"text-2xl font-bold mb-2\">Connect to Uptrade</h2>\n <p className=\"text-gray-400\">Sign in with your Uptrade Portal account</p>\n </div>\n\n {/* Primary: Sign in with Portal (uses existing session) */}\n <div className=\"max-w-md mx-auto\">\n <Button onClick={handlePortalAuth} loading={waitingForPopup} disabled={waitingForPopup}>\n {waitingForPopup ? 'Waiting for Portal...' : '🚀 Sign in with Uptrade Portal'}\n </Button>\n <p className=\"text-gray-500 text-xs text-center mt-2\">\n Uses your existing Portal session (Google, email, etc.)\n </p>\n </div>\n\n <div className=\"flex items-center gap-4 max-w-md mx-auto\">\n <div className=\"flex-1 border-t border-gray-700\" />\n <span className=\"text-gray-500 text-sm\">or sign in directly</span>\n <div className=\"flex-1 border-t border-gray-700\" />\n </div>\n\n <div className=\"flex gap-4 justify-center mb-6\">\n <button className={`px-4 py-2 rounded-lg ${authMode === 'login' ? 'bg-blue-600' : 'bg-gray-700'}`} onClick={() => setAuthMode('login')}>\n Email & Password\n </button>\n <button className={`px-4 py-2 rounded-lg ${authMode === 'magic' ? 'bg-blue-600' : 'bg-gray-700'}`} onClick={() => setAuthMode('magic')}>\n Magic Link\n </button>\n </div>\n\n <div className=\"max-w-md mx-auto space-y-4\">\n <div>\n <label className=\"block text-sm text-gray-400 mb-2\">Email</label>\n <input type=\"email\" value={email} onChange={(e) => setEmail(e.target.value)} placeholder=\"you@example.com\"\n className=\"w-full px-4 py-3 bg-gray-800 border border-gray-700 rounded-lg focus:outline-none focus:border-blue-500\" />\n </div>\n\n {authMode === 'login' && (\n <div>\n <label className=\"block text-sm text-gray-400 mb-2\">Password</label>\n <input type=\"password\" value={password} onChange={(e) => setPassword(e.target.value)} placeholder=\"••••••••\"\n className=\"w-full px-4 py-3 bg-gray-800 border border-gray-700 rounded-lg focus:outline-none focus:border-blue-500\" />\n </div>\n )}\n\n <Button onClick={authMode === 'login' ? handleLogin : handleMagicLink} loading={isLoading} variant=\"secondary\"\n disabled={!email.trim() || (authMode === 'login' && !password.trim())}>\n {authMode === 'login' ? 'Sign In →' : 'Send Magic Link →'}\n </Button>\n\n <p className=\"text-gray-500 text-sm text-center\">\n Don't have an account?{' '}\n <a href=\"https://portal.uptrademedia.com/signup\" target=\"_blank\" className=\"text-blue-400 hover:underline\">\n Sign up at Portal\n </a>\n </p>\n </div>\n\n {error && (\n <div className=\"bg-red-500/10 border border-red-500/30 text-red-400 px-4 py-3 rounded-lg text-center\">{error}</div>\n )}\n </div>\n )\n }\n\n // ============================================\n // Step: Project Selection\n // ============================================\n\n async function loadOrganizations(token?: string) {\n try {\n const authToken = token || accessToken\n const res = await fetch(`${portalApiUrl}/setup/organizations`, {\n headers: authToken ? { 'Authorization': `Bearer ${authToken}` } : {}\n })\n const data = await res.json()\n setOrganizations(Array.isArray(data) ? data : [])\n } catch {\n setError('Failed to load organizations')\n }\n }\n\n // ============================================\n // Step: Setup Type Selection\n // ============================================\n\n function SetupTypeStep() {\n function handleSelectType(type: SetupType) {\n setSetupType(type)\n if (type === 'new') {\n setBrandConfig(prev => ({ ...prev, businessName: selectedProject?.name || '' }))\n setStep('brand')\n } else if (type === 'existing') {\n // Go to modules first, then scan\n setStep('modules')\n } else {\n setScrapeDomain(selectedProject?.domain || '')\n setStep('domain')\n }\n }\n\n return (\n <div className=\"space-y-8\">\n <div className=\"text-center\">\n <h2 className=\"text-2xl font-bold mb-2\">What are we setting up?</h2>\n <p className=\"text-gray-400\">Choose the flow that matches your project</p>\n </div>\n\n <div className=\"grid grid-cols-3 gap-4 max-w-4xl mx-auto\">\n {/* NEW Site */}\n <button onClick={() => handleSelectType('new')}\n className=\"p-6 bg-gray-800/50 rounded-xl border-2 border-gray-700 hover:border-blue-500 transition-all text-left group\">\n <div className=\"text-4xl mb-3\">🆕</div>\n <h3 className=\"text-lg font-bold mb-2 group-hover:text-blue-400 transition-colors\">New Site</h3>\n <p className=\"text-gray-400 text-sm mb-3\">\n Brand new project. Nothing exists yet - we'll define everything from scratch.\n </p>\n <ul className=\"text-xs text-gray-500 space-y-1\">\n <li>✓ Define brand & colors</li>\n <li>✓ Choose modules</li>\n <li>✓ Generate scaffolding</li>\n </ul>\n </button>\n\n {/* EXISTING Project */}\n <button onClick={() => handleSelectType('existing')}\n className=\"p-6 bg-gray-800/50 rounded-xl border-2 border-gray-700 hover:border-green-500 transition-all text-left group\">\n <div className=\"text-4xl mb-3\">🔧</div>\n <h3 className=\"text-lg font-bold mb-2 group-hover:text-green-400 transition-colors\">Existing Project</h3>\n <p className=\"text-gray-400 text-sm mb-3\">\n NextJS project already built. Adding Portal integration to manage content.\n </p>\n <ul className=\"text-xs text-gray-500 space-y-1\">\n <li>✓ Scan for forms & widgets</li>\n <li>✓ Migrate to managed versions</li>\n <li>✓ Keep existing structure</li>\n </ul>\n </button>\n\n {/* REBUILD */}\n <button onClick={() => handleSelectType('rebuild')}\n className=\"p-6 bg-gray-800/50 rounded-xl border-2 border-gray-700 hover:border-purple-500 transition-all text-left group\">\n <div className=\"text-4xl mb-3\">🔄</div>\n <h3 className=\"text-lg font-bold mb-2 group-hover:text-purple-400 transition-colors\">Rebuild</h3>\n <p className=\"text-gray-400 text-sm mb-3\">\n Client has a live site we didn't build. Recreating it in NextJS with Portal.\n </p>\n <ul className=\"text-xs text-gray-500 space-y-1\">\n <li>✓ Scrape existing site</li>\n <li>✓ Extract brand & content</li>\n <li>✓ Track redirects for SEO</li>\n </ul>\n </button>\n </div>\n </div>\n )\n }\n\n // ============================================\n // NEW FLOW: Brand Configuration\n // ============================================\n\n function BrandStep() {\n const [isExtracting, setIsExtracting] = useState(false)\n const [extractUrl, setExtractUrl] = useState('')\n const [showExtract, setShowExtract] = useState(false)\n \n async function handleExtractBrand() {\n if (!extractUrl.trim()) return\n \n setIsExtracting(true)\n setError(null)\n \n try {\n const response = await callPortalApi('/site-scrape/brand-only', {\n method: 'POST',\n body: JSON.stringify({ domain: extractUrl.replace(/^https?:\\/\\//, '').split('/')[0] }),\n }) as { business_name?: string; tagline?: string; primary_color?: string; secondary_color?: string; logo_url?: string }\n \n // Update brand config with extracted values\n setBrandConfig(prev => ({\n ...prev,\n businessName: response.business_name || prev.businessName,\n tagline: response.tagline || prev.tagline,\n primaryColor: response.primary_color || prev.primaryColor,\n logoUrl: response.logo_url || prev.logoUrl,\n }))\n \n setShowExtract(false)\n setExtractUrl('')\n } catch (err) {\n setError(`Failed to extract brand: ${(err as Error).message}`)\n } finally {\n setIsExtracting(false)\n }\n }\n\n function handleContinue() {\n if (!brandConfig.businessName.trim()) return\n setStep('modules')\n }\n\n return (\n <div className=\"space-y-6\">\n <div className=\"text-center\">\n <h2 className=\"text-2xl font-bold mb-2\">Define Your Brand</h2>\n <p className=\"text-gray-400\">Set up the basic brand identity for this project</p>\n </div>\n\n {/* Brand Extraction Option */}\n {!showExtract ? (\n <div className=\"max-w-lg mx-auto\">\n <button\n onClick={() => setShowExtract(true)}\n className=\"w-full flex items-center justify-center gap-3 p-4 bg-gradient-to-r from-purple-500/10 to-blue-500/10 border border-purple-500/30 rounded-lg hover:border-purple-500/50 transition-all\"\n >\n <span className=\"text-2xl\">🔍</span>\n <div className=\"text-left\">\n <div className=\"font-medium\">Extract from existing website</div>\n <div className=\"text-sm text-gray-400\">Auto-detect colors, name, and logo from a live site</div>\n </div>\n </button>\n </div>\n ) : (\n <div className=\"max-w-lg mx-auto bg-gray-800/50 rounded-lg border border-gray-700 p-4\">\n <div className=\"flex items-center gap-2 mb-3\">\n <span className=\"text-xl\">🔍</span>\n <span className=\"font-medium\">Extract Brand from Website</span>\n </div>\n <div className=\"flex gap-2\">\n <input\n type=\"text\"\n value={extractUrl}\n onChange={(e) => setExtractUrl(e.target.value)}\n placeholder=\"example.com\"\n className=\"flex-1 px-4 py-2 bg-gray-900 border border-gray-700 rounded-lg\"\n onKeyDown={(e) => e.key === 'Enter' && handleExtractBrand()}\n />\n <Button onClick={handleExtractBrand} disabled={isExtracting || !extractUrl.trim()}>\n {isExtracting ? 'Extracting...' : 'Extract'}\n </Button>\n </div>\n <button\n onClick={() => setShowExtract(false)}\n className=\"text-sm text-gray-500 hover:text-gray-400 mt-2\"\n >\n Cancel\n </button>\n </div>\n )}\n\n <div className=\"max-w-lg mx-auto space-y-4\">\n <div>\n <label className=\"block text-sm text-gray-400 mb-2\">Business Name *</label>\n <input type=\"text\" value={brandConfig.businessName} onChange={(e) => setBrandConfig(prev => ({ ...prev, businessName: e.target.value }))}\n placeholder=\"Acme Inc\" className=\"w-full px-4 py-3 bg-gray-800 border border-gray-700 rounded-lg\" />\n </div>\n\n <div>\n <label className=\"block text-sm text-gray-400 mb-2\">Tagline</label>\n <input type=\"text\" value={brandConfig.tagline} onChange={(e) => setBrandConfig(prev => ({ ...prev, tagline: e.target.value }))}\n placeholder=\"Making the world better\" className=\"w-full px-4 py-3 bg-gray-800 border border-gray-700 rounded-lg\" />\n </div>\n\n <div className=\"grid grid-cols-2 gap-4\">\n <div>\n <label className=\"block text-sm text-gray-400 mb-2\">Primary Color</label>\n <div className=\"flex gap-2\">\n <input type=\"color\" value={brandConfig.primaryColor} onChange={(e) => setBrandConfig(prev => ({ ...prev, primaryColor: e.target.value }))}\n className=\"w-12 h-12 rounded border border-gray-700 cursor-pointer\" />\n <input type=\"text\" value={brandConfig.primaryColor} onChange={(e) => setBrandConfig(prev => ({ ...prev, primaryColor: e.target.value }))}\n className=\"flex-1 px-3 py-2 bg-gray-800 border border-gray-700 rounded-lg font-mono text-sm\" />\n </div>\n </div>\n </div>\n\n <div>\n <label className=\"block text-sm text-gray-400 mb-2\">Logo URL (optional)</label>\n <input type=\"text\" value={brandConfig.logoUrl} onChange={(e) => setBrandConfig(prev => ({ ...prev, logoUrl: e.target.value }))}\n placeholder=\"https://example.com/logo.svg\" className=\"w-full px-4 py-3 bg-gray-800 border border-gray-700 rounded-lg\" />\n <p className=\"text-xs text-gray-500 mt-1\">You can add this later via Portal</p>\n </div>\n\n {/* Preview */}\n <div className=\"bg-gray-800/50 rounded-lg border border-gray-700 p-4\">\n <h4 className=\"text-sm text-gray-400 mb-3\">Preview</h4>\n <div className=\"flex items-center gap-4\">\n <div className=\"w-12 h-12 rounded-lg flex items-center justify-center text-white font-bold text-xl\"\n style={{ backgroundColor: brandConfig.primaryColor }}>\n {brandConfig.businessName.charAt(0) || '?'}\n </div>\n <div>\n <div className=\"font-semibold\">{brandConfig.businessName || 'Your Business'}</div>\n <div className=\"text-sm text-gray-400\">{brandConfig.tagline || 'Your tagline here'}</div>\n </div>\n </div>\n <div className=\"flex gap-2 mt-3\">\n <div className=\"w-8 h-8 rounded\" style={{ backgroundColor: brandConfig.primaryColor }} title=\"Primary\" />\n <div className=\"w-8 h-8 rounded\" style={{ backgroundColor: brandConfig.secondaryColor ?? '#6B7280' }} title=\"Secondary\" />\n </div>\n </div>\n </div>\n\n <div className=\"flex justify-center gap-4\">\n <Button variant=\"secondary\" onClick={() => setStep('setup-type')}>← Back</Button>\n <Button onClick={handleContinue} disabled={!brandConfig.businessName.trim()}>Continue →</Button>\n </div>\n </div>\n )\n }\n\n // ============================================\n // NEW/EXISTING FLOW: Module Selection\n // ============================================\n\n function ModulesStep() {\n function toggleModule(moduleId: string) {\n setSelectedModules(prev => prev.includes(moduleId) ? prev.filter(m => m !== moduleId) : [...prev, moduleId])\n }\n\n async function handleContinue() {\n try {\n // Save brand config and modules to project\n await callPortalApi(`/setup/projects/${selectedProject?.id}`, {\n method: 'PATCH',\n body: JSON.stringify({\n brand_primary: brandConfig.primaryColor,\n settings: { brand: brandConfig },\n modules_enabled: selectedModules,\n })\n })\n // For existing projects, go to scan; for new projects, go to scaffold\n if (setupType === 'existing') {\n setStep('scan')\n } else {\n setStep('scaffold')\n }\n } catch (err) {\n setError((err as Error).message)\n }\n }\n\n // Back button goes to different places based on setup type\n function handleBack() {\n if (setupType === 'existing') {\n setStep('setup-type')\n } else {\n setStep('brand')\n }\n }\n\n return (\n <div className=\"space-y-6\">\n <div className=\"text-center\">\n <h2 className=\"text-2xl font-bold mb-2\">Select Modules</h2>\n <p className=\"text-gray-400\">Choose which Uptrade modules to enable</p>\n </div>\n\n <div className=\"max-w-2xl mx-auto space-y-3\">\n {AVAILABLE_MODULES.map(mod => (\n <button key={mod.id} onClick={() => toggleModule(mod.id)}\n className={`w-full flex items-center gap-4 p-4 rounded-lg border-2 transition-all text-left ${\n selectedModules.includes(mod.id) ? 'bg-blue-500/10 border-blue-500' : 'bg-gray-800/50 border-gray-700 hover:border-gray-600'\n }`}>\n <div className=\"text-3xl\">{mod.icon}</div>\n <div className=\"flex-1\">\n <div className=\"flex items-center gap-2\">\n <span className=\"font-semibold\">{mod.name}</span>\n {mod.recommended && <span className=\"text-xs bg-green-500/20 text-green-400 px-2 py-0.5 rounded\">Recommended</span>}\n </div>\n <p className=\"text-sm text-gray-400\">{mod.description}</p>\n </div>\n <div className={`w-6 h-6 rounded-full border-2 flex items-center justify-center ${\n selectedModules.includes(mod.id) ? 'bg-blue-500 border-blue-500' : 'border-gray-600'\n }`}>\n {selectedModules.includes(mod.id) && <span className=\"text-white text-sm\">✓</span>}\n </div>\n </button>\n ))}\n </div>\n\n <div className=\"flex justify-center gap-4\">\n <Button variant=\"secondary\" onClick={handleBack}>← Back</Button>\n <Button onClick={handleContinue} disabled={selectedModules.length === 0}>Continue →</Button>\n </div>\n </div>\n )\n }\n\n // ============================================\n // NEW FLOW: Scaffolding\n // ============================================\n\n function ScaffoldStep() {\n const [scaffolding, setScaffolding] = useState(false)\n const [scaffoldLog, setScaffoldLog] = useState<string[]>([])\n\n async function handleScaffold() {\n setScaffolding(true)\n setScaffoldLog(['Starting scaffolding...'])\n\n const steps = []\n if (selectedModules.includes('analytics')) steps.push('✓ Analytics provider configured')\n if (selectedModules.includes('seo')) {\n steps.push('✓ SEO utilities ready')\n steps.push('✓ ManagedFAQ component available')\n }\n if (selectedModules.includes('forms')) steps.push('✓ Forms integration configured')\n if (selectedModules.includes('engage')) steps.push('✓ Engage widgets ready')\n if (selectedModules.includes('commerce')) steps.push('✓ Commerce hooks available')\n\n for (const step of steps) {\n await new Promise(r => setTimeout(r, 400))\n setScaffoldLog(prev => [...prev, step])\n }\n\n setScaffoldLog(prev => [...prev, '', '🎉 Scaffolding complete!'])\n setScaffolding(false)\n }\n\n return (\n <div className=\"space-y-6\">\n <div className=\"text-center\">\n <h2 className=\"text-2xl font-bold mb-2\">Project Scaffolding</h2>\n <p className=\"text-gray-400\">Setting up your selected modules</p>\n </div>\n\n <div className=\"max-w-lg mx-auto\">\n <div className=\"bg-gray-800/50 rounded-lg border border-gray-700 p-4\">\n <h3 className=\"font-semibold mb-2\">Configuration</h3>\n <div className=\"text-sm text-gray-400 space-y-1\">\n <p><strong>Brand:</strong> {brandConfig.businessName}</p>\n <p><strong>Modules:</strong> {selectedModules.join(', ')}</p>\n </div>\n </div>\n\n {scaffoldLog.length > 0 && (\n <div className=\"mt-4 bg-gray-900 rounded-lg p-4 font-mono text-sm max-h-48 overflow-y-auto\">\n {scaffoldLog.map((log, i) => (\n <div key={i} className={log.startsWith('✓') ? 'text-green-400' : log.startsWith('🎉') ? 'text-yellow-400' : 'text-gray-400'}>{log}</div>\n ))}\n </div>\n )}\n </div>\n\n <div className=\"flex justify-center gap-4\">\n {scaffoldLog.length === 0 ? (\n <>\n <Button variant=\"secondary\" onClick={() => setStep('modules')}>← Back</Button>\n <Button onClick={handleScaffold} loading={scaffolding}>Generate Scaffolding →</Button>\n </>\n ) : !scaffolding && (\n <Button onClick={() => setStep('integration')}>Continue to Integration →</Button>\n )}\n </div>\n </div>\n )\n }\n\n // ============================================\n // EXISTING FLOW: Scan Codebase\n // ============================================\n\n const handleScan = useCallback(async () => {\n setIsLoading(true)\n setError(null)\n try {\n const res = await fetch('/_uptrade/api/scan', { method: 'POST' })\n const data = await res.json()\n setScanResults({\n forms: (data.forms || []).map((f: DetectedItem) => ({ ...f, selected: true })),\n widgets: (data.widgets || []).map((w: DetectedItem) => ({ ...w, selected: true })),\n metadata: (data.metadata || []).map((m: DetectedItem) => ({ ...m, selected: true })),\n analytics: (data.analytics || []).map((a: DetectedItem) => ({ ...a, selected: false })),\n })\n setStep('migrate')\n } catch (err) {\n setError((err as Error).message)\n } finally {\n setIsLoading(false)\n }\n }, [])\n\n function ScanStep() {\n useEffect(() => { handleScan() }, [])\n\n return (\n <div className=\"space-y-6 text-center\">\n <div className=\"text-6xl animate-pulse\">🔍</div>\n <h2 className=\"text-2xl font-bold\">Scanning Your Codebase</h2>\n <p className=\"text-gray-400\">Looking for forms, widgets, and metadata to migrate...</p>\n <div className=\"flex justify-center\">\n <div className=\"w-8 h-8 border-2 border-green-500 border-t-transparent rounded-full animate-spin\" />\n </div>\n </div>\n )\n }\n\n // ============================================\n // EXISTING FLOW: Migration\n // ============================================\n\n function MigrateStep() {\n if (!scanResults) return null\n\n const allItems = [...scanResults.forms, ...scanResults.widgets, ...scanResults.metadata]\n const selectedItems = allItems.filter(i => i.selected)\n\n function toggleItem(type: keyof ScanResults, index: number) {\n setScanResults(prev => {\n if (!prev) return prev\n const updated = { ...prev }\n updated[type] = [...prev[type]]\n updated[type][index] = { ...updated[type][index], selected: !updated[type][index].selected }\n return updated\n })\n }\n\n async function handleMigrate() {\n setIsLoading(true)\n setMigrationLog([])\n setMigrationProgress(0)\n\n for (let i = 0; i < selectedItems.length; i++) {\n const item = selectedItems[i]\n setMigrationLog(prev => [...prev, `Migrating ${item.type} in ${item.file}...`])\n try {\n await fetch('/_uptrade/api/migrate', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ item, projectId: selectedProject?.id })\n })\n setMigrationLog(prev => [...prev, `✓ Migrated ${item.type}`])\n } catch {\n setMigrationLog(prev => [...prev, `✗ Failed to migrate ${item.type}`])\n }\n setMigrationProgress(Math.round(((i + 1) / selectedItems.length) * 100))\n }\n\n setIsLoading(false)\n setStep('integration')\n }\n\n return (\n <div className=\"space-y-6\">\n <div className=\"text-center\">\n <h2 className=\"text-2xl font-bold mb-2\">Review & Migrate</h2>\n <p className=\"text-gray-400\">Select items to migrate to managed versions</p>\n </div>\n\n {scanResults.forms.length > 0 && (\n <Section title=\"📝 Forms\" count={scanResults.forms.filter(f => f.selected).length}>\n {scanResults.forms.map((form, i) => <ItemRow key={i} item={form} onToggle={() => toggleItem('forms', i)} />)}\n </Section>\n )}\n\n {scanResults.widgets.length > 0 && (\n <Section title=\"💬 Widgets\" count={scanResults.widgets.filter(w => w.selected).length}>\n {scanResults.widgets.map((widget, i) => <ItemRow key={i} item={widget} onToggle={() => toggleItem('widgets', i)} />)}\n </Section>\n )}\n\n {scanResults.metadata.length > 0 && (\n <Section title=\"🏷️ Metadata/Schema\" count={scanResults.metadata.filter(m => m.selected).length}>\n {scanResults.metadata.map((meta, i) => <ItemRow key={i} item={meta} onToggle={() => toggleItem('metadata', i)} />)}\n </Section>\n )}\n\n {allItems.length === 0 && (\n <div className=\"text-center py-8 text-gray-400\">\n <div className=\"text-4xl mb-4\">✨</div>\n <p>No existing forms or widgets detected.</p>\n <p className=\"text-sm\">You're starting fresh!</p>\n </div>\n )}\n\n {migrationLog.length > 0 && (\n <div className=\"bg-gray-900 rounded-lg p-4 font-mono text-sm max-h-48 overflow-y-auto\">\n {migrationLog.map((log, i) => (\n <div key={i} className={log.startsWith('✗') ? 'text-red-400' : log.startsWith('✓') ? 'text-green-400' : 'text-gray-400'}>{log}</div>\n ))}\n </div>\n )}\n\n {isLoading && (\n <div className=\"h-2 bg-gray-700 rounded-full overflow-hidden\">\n <div className=\"h-full bg-green-500 transition-all duration-300\" style={{ width: `${migrationProgress}%` }} />\n </div>\n )}\n\n <div className=\"flex justify-center gap-4\">\n <Button variant=\"secondary\" onClick={() => setStep('integration')}>Skip Migration</Button>\n <Button onClick={handleMigrate} loading={isLoading}>Migrate {selectedItems.length} Items →</Button>\n </div>\n </div>\n )\n }\n\n // ============================================\n // REBUILD FLOW: Domain Input\n // ============================================\n\n function DomainStep() {\n return (\n <div className=\"space-y-6\">\n <div className=\"text-center\">\n <h2 className=\"text-2xl font-bold mb-2\">Enter Existing Site Domain</h2>\n <p className=\"text-gray-400\">We'll scrape it to extract brand, routes, FAQs, and content</p>\n </div>\n\n <div className=\"max-w-lg mx-auto space-y-4\">\n <div>\n <label className=\"block text-sm text-gray-400 mb-2\">Website Domain</label>\n <input type=\"text\" value={scrapeDomain} onChange={(e) => setScrapeDomain(e.target.value)} placeholder=\"example.com\"\n className=\"w-full px-4 py-3 bg-gray-800 border border-gray-700 rounded-lg focus:outline-none focus:border-purple-500\" />\n <p className=\"text-sm text-gray-500 mt-2\">Enter without https://</p>\n </div>\n\n <div className=\"bg-purple-500/10 border border-purple-500/30 rounded-lg p-4\">\n <h4 className=\"font-semibold text-purple-400 mb-2\">What we'll extract:</h4>\n <ul className=\"text-sm text-gray-400 space-y-1\">\n <li>🎨 Brand colors, logos, and fonts</li>\n <li>🗺️ Sitemap and all routes</li>\n <li>❓ FAQ sections → Managed FAQs</li>\n <li>📧 Contact info and social profiles</li>\n <li>🔀 Route mappings for redirects</li>\n </ul>\n </div>\n </div>\n\n <div className=\"flex justify-center gap-4\">\n <Button variant=\"secondary\" onClick={() => setStep('setup-type')}>← Back</Button>\n <Button onClick={() => setStep('scrape')} disabled={!scrapeDomain.trim()}>Start Scrape →</Button>\n </div>\n </div>\n )\n }\n\n // ============================================\n // REBUILD FLOW: Scraping\n // ============================================\n\n function ScrapeStep() {\n const [pollInterval, setPollInterval] = useState<NodeJS.Timeout | null>(null)\n\n useEffect(() => {\n startScrape()\n return () => { if (pollInterval) clearInterval(pollInterval) }\n }, [])\n\n async function startScrape() {\n try {\n const res = await callPortalApi('/site-scrape', {\n method: 'POST',\n body: JSON.stringify({ project_id: selectedProject?.id, domain: scrapeDomain.replace(/^https?:\\/\\//, '') })\n })\n if (!res.ok) throw new Error('Failed to start scrape')\n const data = await res.json()\n setScrapeStatus(data)\n\n const interval = setInterval(async () => {\n try {\n const statusRes = await callPortalApi(`/site-scrape/${data.id}/status`)\n const status = await statusRes.json()\n setScrapeStatus(status)\n\n if (status.status === 'completed') {\n clearInterval(interval)\n setPollInterval(null)\n // Initialize redirect mappings from scraped routes\n if (status.routes) {\n setRedirectMappings(status.routes.map((r: any) => ({ from: r.path, to: r.path, enabled: true })))\n }\n setTimeout(() => setStep('review'), 1000)\n } else if (status.status === 'failed') {\n clearInterval(interval)\n setPollInterval(null)\n setError(status.error || 'Scrape failed')\n }\n } catch (err) { console.error('Poll error:', err) }\n }, 2000)\n setPollInterval(interval)\n } catch (err) {\n setError((err as Error).message)\n }\n }\n\n return (\n <div className=\"space-y-6\">\n <div className=\"text-center\">\n <div className=\"text-6xl animate-pulse mb-4\">🔍</div>\n <h2 className=\"text-2xl font-bold mb-2\">Scraping {scrapeDomain}</h2>\n <p className=\"text-gray-400\">{scrapeStatus?.current_step || 'Starting...'}</p>\n </div>\n\n <div className=\"max-w-lg mx-auto\">\n <div className=\"h-2 bg-gray-700 rounded-full overflow-hidden\">\n <div className=\"h-full bg-gradient-to-r from-purple-500 to-pink-500 transition-all duration-500\" style={{ width: `${scrapeStatus?.progress || 0}%` }} />\n </div>\n <div className=\"flex justify-between text-sm text-gray-500 mt-2\">\n <span>{scrapeStatus?.progress || 0}%</span>\n <span>{scrapeStatus?.pages_found || 0} pages</span>\n </div>\n </div>\n\n {scrapeStatus && (\n <div className=\"grid grid-cols-3 gap-4 max-w-lg mx-auto\">\n <StatCard value={scrapeStatus.pages_found || 0} label=\"Pages\" color=\"purple\" />\n <StatCard value={scrapeStatus.routes_planned || 0} label=\"Routes\" color=\"pink\" />\n <StatCard value={scrapeStatus.faqs_imported || 0} label=\"FAQs\" color=\"blue\" />\n </div>\n )}\n\n {error && (\n <div className=\"bg-red-500/10 border border-red-500/30 text-red-400 px-4 py-3 rounded-lg text-center max-w-lg mx-auto\">\n {error}\n <button onClick={() => { setError(null); startScrape() }} className=\"block mx-auto mt-2 text-sm underline\">Try again</button>\n </div>\n )}\n </div>\n )\n }\n\n // ============================================\n // REBUILD FLOW: Review Results\n // ============================================\n\n function ReviewStep() {\n return (\n <div className=\"space-y-6\">\n <div className=\"text-center\">\n <div className=\"text-5xl mb-4\">✅</div>\n <h2 className=\"text-2xl font-bold mb-2\">Scrape Complete!</h2>\n <p className=\"text-gray-400\">Here's what we found on {scrapeDomain}</p>\n </div>\n\n <div className=\"max-w-2xl mx-auto space-y-4\">\n {scrapeStatus?.brand && (\n <div className=\"bg-gray-800/50 rounded-lg border border-gray-700 p-4\">\n <h3 className=\"font-semibold mb-3\">🎨 Brand</h3>\n <div className=\"grid grid-cols-2 gap-4\">\n <div>\n <div className=\"text-sm text-gray-400 mb-1\">Business Name</div>\n <div className=\"font-medium\">{scrapeStatus.brand.business_name || 'Not found'}</div>\n </div>\n <div>\n <div className=\"text-sm text-gray-400 mb-1\">Colors</div>\n <div className=\"flex gap-2\">\n {scrapeStatus.brand.primary_colors?.slice(0, 4).map((c, i) => (\n <div key={i} className=\"w-8 h-8 rounded border border-gray-600\" style={{ backgroundColor: c.hex }} title={c.hex} />\n )) || <span className=\"text-gray-500\">None</span>}\n </div>\n </div>\n </div>\n </div>\n )}\n\n <div className=\"grid grid-cols-3 gap-4\">\n <StatCard value={scrapeStatus?.pages_found || 0} label=\"Pages Crawled\" color=\"purple\" large />\n <StatCard value={scrapeStatus?.routes_planned || 0} label=\"Routes Mapped\" color=\"pink\" large />\n <StatCard value={scrapeStatus?.faqs_imported || 0} label=\"FAQs Imported\" color=\"blue\" large />\n </div>\n\n <div className=\"bg-blue-500/10 border border-blue-500/30 rounded-lg p-4\">\n <p className=\"text-sm text-blue-400\">\n 💡 All data saved to your project. FAQs are ready in Portal. Next: set up redirects for SEO.\n </p>\n </div>\n </div>\n\n <div className=\"flex justify-center\">\n <Button onClick={() => setStep('redirects')}>Configure Redirects →</Button>\n </div>\n </div>\n )\n }\n\n // ============================================\n // REBUILD FLOW: Redirect Mappings\n // ============================================\n\n function RedirectsStep() {\n function updateRedirect(index: number, field: 'from' | 'to' | 'enabled', value: string | boolean) {\n setRedirectMappings(prev => {\n const updated = [...prev]\n updated[index] = { ...updated[index], [field]: value }\n return updated\n })\n }\n\n async function handleSaveRedirects() {\n try {\n await callPortalApi(`/site-scrape/${scrapeStatus?.id}/redirects`, {\n method: 'POST',\n body: JSON.stringify({ redirects: redirectMappings.filter(r => r.enabled && r.from !== r.to) })\n })\n setStep('integration')\n } catch (err) {\n setError((err as Error).message)\n }\n }\n\n const changedRedirects = redirectMappings.filter(r => r.enabled && r.from !== r.to)\n\n return (\n <div className=\"space-y-6\">\n <div className=\"text-center\">\n <h2 className=\"text-2xl font-bold mb-2\">Configure Redirects</h2>\n <p className=\"text-gray-400\">Map old URLs to new routes to preserve SEO</p>\n </div>\n\n <div className=\"max-w-3xl mx-auto\">\n <div className=\"bg-gray-800/50 rounded-lg border border-gray-700 overflow-hidden\">\n <div className=\"px-4 py-3 bg-gray-800 flex justify-between items-center border-b border-gray-700\">\n <span className=\"font-medium\">Route Mappings</span>\n <span className=\"text-sm text-gray-400\">{changedRedirects.length} redirects</span>\n </div>\n <div className=\"max-h-80 overflow-y-auto divide-y divide-gray-700\">\n {redirectMappings.map((redirect, i) => (\n <div key={i} className={`flex items-center gap-4 px-4 py-3 ${!redirect.enabled ? 'opacity-50' : ''}`}>\n <input type=\"checkbox\" checked={redirect.enabled} onChange={(e) => updateRedirect(i, 'enabled', e.target.checked)}\n className=\"w-5 h-5 rounded border-gray-600 bg-gray-700\" />\n <input type=\"text\" value={redirect.from} onChange={(e) => updateRedirect(i, 'from', e.target.value)}\n className=\"flex-1 px-3 py-2 bg-gray-800 border border-gray-600 rounded text-sm font-mono\" placeholder=\"/old-path\" />\n <span className=\"text-gray-500\">→</span>\n <input type=\"text\" value={redirect.to} onChange={(e) => updateRedirect(i, 'to', e.target.value)}\n className=\"flex-1 px-3 py-2 bg-gray-800 border border-gray-600 rounded text-sm font-mono\" placeholder=\"/new-path\" />\n </div>\n ))}\n </div>\n </div>\n\n <div className=\"mt-4 bg-yellow-500/10 border border-yellow-500/30 rounded-lg p-4\">\n <p className=\"text-sm text-yellow-400\">\n ⚠️ Only routes where \"from\" differs from \"to\" will create redirects. \n Same paths = no redirect needed.\n </p>\n </div>\n </div>\n\n <div className=\"flex justify-center gap-4\">\n <Button variant=\"secondary\" onClick={() => setStep('review')}>← Back</Button>\n <Button onClick={handleSaveRedirects}>\n {changedRedirects.length > 0 ? `Save ${changedRedirects.length} Redirects →` : 'Skip & Continue →'}\n </Button>\n </div>\n </div>\n )\n }\n\n // ============================================\n // COMMON: Integration Code\n // ============================================\n\n function IntegrationStep() {\n const envVars = `NEXT_PUBLIC_UPTRADE_PROJECT_ID=${selectedProject?.id || 'xxx'}\nNEXT_PUBLIC_SUPABASE_URL=${config?.url || 'https://xxx.supabase.co'}\nNEXT_PUBLIC_SUPABASE_ANON_KEY=${config?.anonKey || 'xxx'}`\n\n const providerCode = `import { SiteKitProvider } from '@uptrade/site-kit'\nimport { ManagedFavicon } from '@uptrade/site-kit/images'\n\nexport default function RootLayout({ children }) {\n return (\n <html>\n <head>\n <ManagedFavicon />\n </head>\n <body>\n <SiteKitProvider\n projectId={process.env.NEXT_PUBLIC_UPTRADE_PROJECT_ID!}\n supabaseUrl={process.env.NEXT_PUBLIC_SUPABASE_URL!}\n supabaseAnonKey={process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!}\n >\n {children}\n </SiteKitProvider>\n </body>\n </html>\n )\n}`\n\n return (\n <div className=\"space-y-6\">\n <div className=\"text-center\">\n <h2 className=\"text-2xl font-bold mb-2\">Integration Code</h2>\n <p className=\"text-gray-400\">Add these to connect your project to Uptrade</p>\n </div>\n\n <div className=\"max-w-2xl mx-auto space-y-4\">\n <ConfigPreview title=\"Environment Variables\" description=\".env.local\" content={envVars} />\n <ConfigPreview title=\"Layout Provider\" description=\"app/layout.tsx\" content={providerCode} />\n <div className=\"text-center text-gray-500 text-sm\">\n <p>Install: <code className=\"bg-gray-800 px-2 py-1 rounded\">pnpm add @uptrade/site-kit</code></p>\n </div>\n </div>\n\n <div className=\"flex justify-center gap-4\">\n <Button variant=\"secondary\" onClick={() => {\n if (setupType === 'new') setStep('scaffold')\n else if (setupType === 'existing') setStep('migrate')\n else setStep('redirects')\n }}>← Back</Button>\n <Button onClick={() => setStep('copilot')}>Continue to Copilot →</Button>\n </div>\n </div>\n )\n }\n\n // ============================================\n // COMMON: Copilot Instructions\n // ============================================\n\n function CopilotStep() {\n useEffect(() => { generateCopilotInstructions() }, [])\n\n async function generateCopilotInstructions() {\n setGeneratingCopilot(true)\n try {\n const res = await callPortalApi('/signal/generate-copilot-instructions', {\n method: 'POST',\n body: JSON.stringify({\n projectId: selectedProject?.id,\n setupType,\n modules: selectedModules,\n domain: scrapeDomain || selectedProject?.domain,\n brand: setupType === 'new' ? brandConfig : scrapeStatus?.brand,\n routes: scrapeStatus?.routes,\n })\n })\n if (res.ok) {\n const data = await res.json()\n setCopilotInstructions(data.instructions || data.content || '')\n } else {\n setCopilotInstructions(generateFallbackTemplate())\n }\n } catch {\n setCopilotInstructions(generateFallbackTemplate())\n } finally {\n setGeneratingCopilot(false)\n }\n }\n\n function generateFallbackTemplate() {\n const brand = setupType === 'new' ? brandConfig : scrapeStatus?.brand\n const brandName = (brand as any)?.businessName || (brand as any)?.business_name || 'TBD'\n return `# ${selectedProject?.name} - Copilot Instructions\n\n**Project:** ${selectedProject?.name}\n**Domain:** ${scrapeDomain || selectedProject?.domain}\n**Stack:** Next.js + @uptrade/site-kit\n**Setup Type:** ${setupType}\n\n## Brand\n- **Name:** ${brandName}\n- **Primary Color:** ${brandConfig?.primaryColor || 'TBD'}\n- **Secondary Color:** ${brandConfig?.secondaryColor || 'TBD'}\n\n## Enabled Modules\n${selectedModules.map(m => `- ${m}`).join('\\n')}\n\n## Development Notes\n- This project uses @uptrade/site-kit for managed content\n- Forms, FAQs, and metadata are managed via Uptrade Portal\n- Analytics tracked via SiteKitProvider\n${setupType === 'rebuild' ? '- This is a rebuild of an existing site - check redirects for SEO' : ''}\n`\n }\n\n async function copyToClipboard() {\n await navigator.clipboard.writeText(copilotInstructions)\n alert('Copied!')\n }\n\n return (\n <div className=\"space-y-6\">\n <div className=\"text-center\">\n <h2 className=\"text-2xl font-bold mb-2\">Copilot Instructions</h2>\n <p className=\"text-gray-400\">Add this to your repo for better AI assistance</p>\n </div>\n\n <div className=\"max-w-2xl mx-auto\">\n {generatingCopilot ? (\n <div className=\"bg-gray-800/50 rounded-lg border border-gray-700 p-8 text-center\">\n <div className=\"w-8 h-8 border-2 border-blue-500 border-t-transparent rounded-full animate-spin mx-auto mb-4\" />\n <p className=\"text-gray-400\">Generating with AI...</p>\n </div>\n ) : (\n <div className=\"bg-gray-800/50 rounded-lg border border-gray-700 overflow-hidden\">\n <div className=\"px-4 py-2 bg-gray-800 flex justify-between items-center\">\n <span className=\"font-medium\">.github/copilot-instructions.md</span>\n <button onClick={copyToClipboard} className=\"text-sm text-blue-400 hover:underline\">Copy</button>\n </div>\n <pre className=\"p-4 text-sm overflow-x-auto max-h-80 overflow-y-auto\">\n <code className=\"text-gray-300 whitespace-pre-wrap\">{copilotInstructions}</code>\n </pre>\n </div>\n )}\n\n <div className=\"mt-4 bg-green-500/10 border border-green-500/30 rounded-lg p-4\">\n <p className=\"text-sm text-green-400\">\n 💡 Save as <code className=\"bg-gray-800 px-1 rounded\">.github/copilot-instructions.md</code> for GitHub Copilot context.\n </p>\n </div>\n </div>\n\n <div className=\"flex justify-center gap-4\">\n <Button variant=\"secondary\" onClick={() => setStep('integration')}>← Back</Button>\n <Button onClick={() => setStep('complete')}>Finish Setup →</Button>\n </div>\n </div>\n )\n }\n\n // ============================================\n // Step: Complete\n // ============================================\n\n function CompleteStep() {\n const [removing, setRemoving] = useState(false)\n\n async function handleRemoveSetup() {\n setRemoving(true)\n try {\n await fetch('/_uptrade/api/self-destruct', { method: 'POST' })\n window.location.href = '/'\n } catch (err) {\n setError((err as Error).message)\n setRemoving(false)\n }\n }\n\n function handleReset() {\n localStorage.removeItem('uptrade_access_token')\n setStep('welcome')\n setIsAuthenticated(false)\n setAccessToken(null)\n setUserEmail(null)\n setSelectedOrg(null)\n setSelectedProject(null)\n setSetupType(null)\n }\n\n return (\n <div className=\"space-y-6 text-center\">\n <div className=\"text-6xl\">🎉</div>\n <h2 className=\"text-3xl font-bold\">You're All Set!</h2>\n <p className=\"text-gray-400 text-lg\">Site-Kit is configured for {selectedProject?.name}</p>\n\n <div className=\"grid grid-cols-2 gap-4 max-w-lg mx-auto my-8\">\n <QuickLink icon=\"📊\" title=\"Project Dashboard\" href={`https://portal.uptrademedia.com/projects/${selectedProject?.id}`} />\n <QuickLink icon=\"📝\" title=\"Manage Forms\" href={`https://portal.uptrademedia.com/projects/${selectedProject?.id}/forms`} />\n <QuickLink icon=\"📖\" title=\"Documentation\" href=\"https://docs.uptrademedia.com/site-kit\" />\n <QuickLink icon=\"💬\" title=\"Get Help\" href=\"https://portal.uptrademedia.com/messages\" />\n </div>\n\n <div className=\"flex gap-4 justify-center\">\n <Button variant=\"secondary\" onClick={handleReset}>Restart Setup</Button>\n </div>\n\n <div className=\"pt-8 border-t border-gray-700\">\n <p className=\"text-gray-400 mb-4\">Remove this setup wizard from your project?</p>\n <Button variant=\"danger\" onClick={handleRemoveSetup} loading={removing}>Remove Setup Wizard</Button>\n <p className=\"text-gray-500 text-sm mt-2\">This will delete the /_uptrade route</p>\n </div>\n </div>\n )\n }\n\n // ============================================\n // Render\n // ============================================\n\n // Render step content directly to avoid component recreation on state changes\n const renderStep = () => {\n switch (step) {\n case 'welcome': return <WelcomeStep />\n case 'auth': return <AuthStep />\n case 'project': return (\n <div className=\"space-y-6\" key=\"project-step\">\n <div className=\"text-center\">\n <h2 className=\"text-2xl font-bold mb-2\">Select Your Project</h2>\n <p className=\"text-gray-400\">Choose an existing project or create a new one</p>\n </div>\n\n <div className=\"max-w-lg mx-auto\">\n <div className=\"flex justify-between items-center mb-2\">\n <label className=\"text-sm text-gray-400\">Organization</label>\n <button type=\"button\" className=\"text-sm text-blue-400 hover:underline\" onClick={() => setShowNewOrg(!showNewOrg)}>\n {showNewOrg ? 'Select existing' : '+ New organization'}\n </button>\n </div>\n \n {showNewOrg ? (\n <div className=\"space-y-3 p-4 bg-gray-800/50 rounded-lg border border-gray-700\">\n <input \n id=\"new-org-name\"\n key=\"new-org-name\"\n type=\"text\" \n value={newOrgName} \n onChange={(e) => setNewOrgName(e.target.value)} \n placeholder=\"Organization name\"\n autoComplete=\"off\"\n className=\"w-full px-4 py-3 bg-gray-800 border border-gray-700 rounded-lg focus:outline-none focus:border-blue-500\" \n />\n <Button onClick={handleCreateOrg} loading={creatingOrg} disabled={!newOrgName.trim()}>Create Organization</Button>\n </div>\n ) : (\n <select value={selectedOrg?.id || ''} onChange={(e) => setSelectedOrg(organizations.find(o => o.id === e.target.value) || null)}\n className=\"w-full px-4 py-3 bg-gray-800 border border-gray-700 rounded-lg\">\n <option value=\"\">Select organization...</option>\n {organizations.map(org => <option key={org.id} value={org.id}>{org.name}</option>)}\n </select>\n )}\n </div>\n\n {selectedOrg && (\n <div className=\"max-w-lg mx-auto space-y-4\">\n <div className=\"flex justify-between items-center\">\n <label className=\"text-sm text-gray-400\">Projects</label>\n <button type=\"button\" className=\"text-sm text-blue-400 hover:underline\" onClick={() => setCreateNewProject(!createNewProject)}>\n {createNewProject ? 'Select existing' : '+ Create new'}\n </button>\n </div>\n\n {createNewProject ? (\n <div className=\"space-y-4 p-4 bg-gray-800/50 rounded-lg border border-gray-700\">\n <input \n id=\"new-project-name\"\n key=\"new-project-name\"\n type=\"text\" \n value={newProjectName} \n onChange={(e) => setNewProjectName(e.target.value)} \n placeholder=\"Project name\"\n autoComplete=\"off\"\n className=\"w-full px-4 py-3 bg-gray-800 border border-gray-700 rounded-lg\" \n />\n <input \n id=\"new-project-domain\"\n key=\"new-project-domain\"\n type=\"text\" \n value={newProjectDomain} \n onChange={(e) => setNewProjectDomain(e.target.value)} \n placeholder=\"localhost\"\n autoComplete=\"off\"\n className=\"w-full px-4 py-3 bg-gray-800 border border-gray-700 rounded-lg\" \n />\n <Button onClick={handleCreateProject} loading={creatingProject} disabled={!newProjectName.trim()}>Create Project</Button>\n </div>\n ) : (\n <div className=\"space-y-2\">\n {selectedOrg.projects.length === 0 ? (\n <p className=\"text-gray-500 text-center py-8\">\n No projects yet. <button type=\"button\" className=\"text-blue-400 hover:underline\" onClick={() => setCreateNewProject(true)}>Create one</button>\n </p>\n ) : selectedOrg.projects.map(project => (\n <button type=\"button\" key={project.id} onClick={() => handleSelectProject(project)}\n className=\"w-full text-left px-4 py-3 bg-gray-800/50 hover:bg-gray-800 border border-gray-700 rounded-lg transition-colors\">\n <div className=\"font-medium\">{project.name}</div>\n <div className=\"text-sm text-gray-400\">{project.domain}</div>\n </button>\n ))}\n </div>\n )}\n </div>\n )}\n </div>\n )\n case 'setup-type': return <SetupTypeStep />\n case 'brand': return <BrandStep />\n case 'modules': return <ModulesStep />\n case 'scaffold': return <ScaffoldStep />\n case 'scan': return <ScanStep />\n case 'migrate': return <MigrateStep />\n case 'domain': return <DomainStep />\n case 'scrape': return <ScrapeStep />\n case 'review': return <ReviewStep />\n case 'redirects': return <RedirectsStep />\n case 'integration': return <IntegrationStep />\n case 'copilot': return <CopilotStep />\n case 'complete': return <CompleteStep />\n default: return <WelcomeStep />\n }\n }\n\n const getProgress = () => {\n const common = ['welcome', 'auth', 'project', 'setup-type']\n const newFlow = ['brand', 'modules', 'scaffold']\n const existingFlow = ['modules', 'scan', 'migrate']\n const rebuildFlow = ['domain', 'scrape', 'review', 'redirects']\n const finish = ['integration', 'copilot', 'complete']\n \n const flow = setupType === 'new' ? [...common, ...newFlow, ...finish]\n : setupType === 'existing' ? [...common, ...existingFlow, ...finish]\n : setupType === 'rebuild' ? [...common, ...rebuildFlow, ...finish]\n : [...common, ...finish]\n \n const idx = flow.indexOf(step)\n return idx >= 0 ? (idx / (flow.length - 1)) * 100 : 0\n }\n\n const setupLabels = { new: '🆕 New Site', existing: '🔧 Existing', rebuild: '🔄 Rebuild' }\n\n return (\n <div style={{ \n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n zIndex: 99999,\n minHeight: '100vh', \n backgroundColor: '#0f172a', \n color: '#ffffff',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n overflow: 'auto'\n }} className=\"min-h-screen bg-gradient-to-br from-gray-900 via-gray-900 to-gray-800 text-white\">\n <div style={{ position: 'fixed', top: 0, left: 0, right: 0, height: '4px', backgroundColor: '#1e293b', zIndex: 100000 }}>\n <div style={{ height: '100%', background: 'linear-gradient(to right, #3b82f6, #8b5cf6)', transition: 'width 0.5s', width: `${getProgress()}%` }} />\n </div>\n\n <header style={{ padding: '1.5rem 2rem', display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <div className=\"flex items-center gap-3\">\n <div className=\"w-8 h-8 bg-gradient-to-br from-blue-500 to-purple-600 rounded-lg\" />\n <span className=\"font-semibold\">Uptrade Site-Kit</span>\n {setupType && (\n <span className={`text-xs px-2 py-1 rounded ${\n setupType === 'new' ? 'bg-blue-500/20 text-blue-400' \n : setupType === 'existing' ? 'bg-green-500/20 text-green-400'\n : 'bg-purple-500/20 text-purple-400'\n }`}>{setupLabels[setupType]}</span>\n )}\n </div>\n {userEmail && <div className=\"text-gray-400 text-sm\">{userEmail}</div>}\n </header>\n\n <main className=\"max-w-4xl mx-auto px-8 py-12\">{renderStep()}</main>\n\n <footer className=\"fixed bottom-0 left-0 right-0 px-8 py-4 text-center text-gray-500 text-sm\">\n <a href=\"https://uptrademedia.com\" target=\"_blank\" className=\"hover:text-gray-300\">Uptrade Media</a>\n {' · '}\n <a href=\"https://docs.uptrademedia.com\" target=\"_blank\" className=\"hover:text-gray-300\">Docs</a>\n </footer>\n </div>\n )\n}\n\n// ============================================\n// UI Components\n// ============================================\n\nfunction Button({ children, onClick, loading, disabled, variant = 'primary' }: {\n children: React.ReactNode; onClick?: () => void; loading?: boolean; disabled?: boolean; variant?: 'primary' | 'secondary' | 'danger'\n}) {\n const variants = {\n primary: 'bg-gradient-to-r from-blue-500 to-blue-600 hover:from-blue-600 hover:to-blue-700',\n secondary: 'bg-gray-700 hover:bg-gray-600',\n danger: 'bg-red-600/20 border border-red-500/30 text-red-400 hover:bg-red-600/30'\n }\n return (\n <button onClick={onClick} disabled={loading || disabled}\n className={`px-6 py-3 rounded-lg font-medium transition-all disabled:opacity-50 disabled:cursor-not-allowed ${variants[variant]}`}>\n {loading ? <span className=\"flex items-center gap-2\"><span className=\"w-4 h-4 border-2 border-current border-t-transparent rounded-full animate-spin\" />Loading...</span> : children}\n </button>\n )\n}\n\nfunction FeatureCard({ icon, title, description }: { icon: string; title: string; description: string }) {\n return (\n <div className=\"p-6 bg-gray-800/50 rounded-xl border border-gray-700 text-center\">\n <div className=\"text-3xl mb-3\">{icon}</div>\n <h3 className=\"font-semibold mb-1\">{title}</h3>\n <p className=\"text-sm text-gray-400\">{description}</p>\n </div>\n )\n}\n\nfunction StatCard({ value, label, color, large }: { value: number; label: string; color: 'purple' | 'pink' | 'blue'; large?: boolean }) {\n const colors = { purple: 'text-purple-400', pink: 'text-pink-400', blue: 'text-blue-400' }\n return (\n <div className=\"bg-gray-800/50 rounded-lg p-4 text-center border border-gray-700\">\n <div className={`${large ? 'text-3xl' : 'text-2xl'} font-bold ${colors[color]}`}>{value}</div>\n <div className=\"text-sm text-gray-400\">{label}</div>\n </div>\n )\n}\n\nfunction Section({ title, count, children }: { title: string; count: number; children: React.ReactNode }) {\n return (\n <div className=\"bg-gray-800/30 rounded-xl border border-gray-700 overflow-hidden\">\n <div className=\"px-4 py-3 bg-gray-800/50 flex justify-between items-center\">\n <span className=\"font-medium\">{title}</span>\n <span className=\"text-sm text-gray-400\">{count} selected</span>\n </div>\n <div className=\"divide-y divide-gray-700\">{children}</div>\n </div>\n )\n}\n\nfunction ItemRow({ item, onToggle }: { item: DetectedItem; onToggle: () => void }) {\n return (\n <div className=\"flex items-center gap-4 px-4 py-3 hover:bg-gray-800/30 transition-colors\">\n <input type=\"checkbox\" checked={item.selected} onChange={onToggle} className=\"w-5 h-5 rounded border-gray-600 bg-gray-700 text-blue-500\" />\n <div className=\"flex-1 min-w-0\">\n <div className=\"font-medium truncate\">{item.type}</div>\n <div className=\"text-sm text-gray-400 truncate\">{item.file}:{item.line}</div>\n </div>\n </div>\n )\n}\n\nfunction ConfigPreview({ title, description, content }: { title: string; description: string; content: string }) {\n async function copy() { await navigator.clipboard.writeText(content) }\n return (\n <div className=\"bg-gray-800/50 rounded-lg border border-gray-700 overflow-hidden\">\n <div className=\"px-4 py-2 bg-gray-800 flex justify-between items-center\">\n <span className=\"font-medium\">{title}</span>\n <div className=\"flex items-center gap-3\">\n <span className=\"text-sm text-gray-400\">{description}</span>\n <button onClick={copy} className=\"text-sm text-blue-400 hover:underline\">Copy</button>\n </div>\n </div>\n <pre className=\"p-4 text-sm overflow-x-auto\"><code className=\"text-green-400\">{content}</code></pre>\n </div>\n )\n}\n\nfunction QuickLink({ icon, title, href }: { icon: string; title: string; href: string }) {\n return (\n <a href={href} target=\"_blank\" className=\"flex items-center gap-3 p-4 bg-gray-800/50 rounded-lg border border-gray-700 hover:bg-gray-800 transition-colors\">\n <span className=\"text-2xl\">{icon}</span>\n <span className=\"font-medium\">{title}</span>\n </a>\n )\n}\n\nexport default SetupWizard\n"]}
|
|
@@ -87,6 +87,7 @@ UPTRADE_API_KEY=your-api-key-here`,
|
|
|
87
87
|
description: "Wrap your app with SiteKitProvider in app/layout.tsx",
|
|
88
88
|
filePath: "app/layout.tsx",
|
|
89
89
|
code: `import { SiteKitProvider } from '@uptrade/site-kit'
|
|
90
|
+
import { ManagedFavicon } from '@uptrade/site-kit/images'
|
|
90
91
|
|
|
91
92
|
export default function RootLayout({
|
|
92
93
|
children,
|
|
@@ -95,6 +96,9 @@ export default function RootLayout({
|
|
|
95
96
|
}) {
|
|
96
97
|
return (
|
|
97
98
|
<html lang="en">
|
|
99
|
+
<head>
|
|
100
|
+
<ManagedFavicon />
|
|
101
|
+
</head>
|
|
98
102
|
<body>
|
|
99
103
|
<SiteKitProvider
|
|
100
104
|
apiUrl={process.env.NEXT_PUBLIC_UPTRADE_API_URL!}
|
|
@@ -805,5 +809,5 @@ ${s.filePath ? `// File: ${s.filePath}
|
|
|
805
809
|
exports.IntegrationCodeView = IntegrationCodeView;
|
|
806
810
|
exports.generateIntegrationCode = generateIntegrationCode;
|
|
807
811
|
exports.getSnippetsByModule = getSnippetsByModule;
|
|
808
|
-
//# sourceMappingURL=chunk-
|
|
809
|
-
//# sourceMappingURL=chunk-
|
|
812
|
+
//# sourceMappingURL=chunk-5TTUNB63.js.map
|
|
813
|
+
//# sourceMappingURL=chunk-5TTUNB63.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/setup/integration-generator.ts","../src/setup/IntegrationCodeView.tsx"],"names":["jsxs","jsx","useState","useMemo"],"mappings":"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","file":"chunk-5TTUNB63.js","sourcesContent":["/**\n * Integration Code Generator\n * \n * Generates site-kit integration code snippets based on enabled modules.\n * Used by SetupWizard and can be called standalone.\n */\n\nexport interface IntegrationSnippet {\n module: string\n snippetType: 'install' | 'layout' | 'component' | 'page' | 'api-route' | 'env'\n title: string\n description?: string\n filePath?: string\n code: string\n language: 'typescript' | 'tsx' | 'bash' | 'env'\n order: number\n required: boolean\n}\n\nexport interface GeneratorContext {\n projectId: string\n projectName?: string\n apiUrl?: string\n enabledModules: string[]\n brand?: {\n primaryColor?: string\n secondaryColor?: string\n businessName?: string\n }\n}\n\n/**\n * Generate all integration code snippets for enabled modules\n */\nexport function generateIntegrationCode(context: GeneratorContext): IntegrationSnippet[] {\n const snippets: IntegrationSnippet[] = []\n const apiUrl = context.apiUrl || 'https://api.uptrademedia.com'\n let order = 0\n\n // Always add provider setup first\n snippets.push(...generateProviderSnippets(context, apiUrl, order))\n order += 10\n\n // Add module-specific snippets\n for (const module of context.enabledModules) {\n switch (module) {\n case 'analytics':\n snippets.push(...generateAnalyticsSnippets(context, order))\n order += 10\n break\n case 'engage':\n snippets.push(...generateEngageSnippets(context, order))\n order += 10\n break\n case 'forms':\n snippets.push(...generateFormsSnippets(context, order))\n order += 10\n break\n case 'commerce':\n snippets.push(...generateCommerceSnippets(context, order))\n order += 10\n break\n case 'seo':\n snippets.push(...generateSEOSnippets(context, order))\n order += 10\n break\n case 'blog':\n snippets.push(...generateBlogSnippets(context, order))\n order += 10\n break\n }\n }\n\n return snippets\n}\n\n/**\n * Get snippets grouped by module\n */\nexport function getSnippetsByModule(snippets: IntegrationSnippet[]): Record<string, IntegrationSnippet[]> {\n return snippets.reduce((acc, snippet) => {\n if (!acc[snippet.module]) {\n acc[snippet.module] = []\n }\n acc[snippet.module].push(snippet)\n return acc\n }, {} as Record<string, IntegrationSnippet[]>)\n}\n\n// ============================================\n// Provider Snippets (always required)\n// ============================================\n\nfunction generateProviderSnippets(ctx: GeneratorContext, apiUrl: string, startOrder: number): IntegrationSnippet[] {\n const enabledModulesConfig = ctx.enabledModules\n .map(m => {\n if (m === 'analytics') return ' analytics={{ enabled: true }}'\n if (m === 'engage') return ' engage={{ enabled: true }}'\n return null\n })\n .filter(Boolean)\n .join('\\n')\n\n return [\n {\n module: 'provider',\n snippetType: 'install',\n title: 'Install @uptrade/site-kit',\n description: 'Install the Uptrade Site Kit package',\n code: `pnpm add @uptrade/site-kit`,\n language: 'bash',\n order: startOrder,\n required: true,\n },\n {\n module: 'provider',\n snippetType: 'env',\n title: 'Environment Variables',\n description: 'Add these to your .env.local file',\n filePath: '.env.local',\n code: `# Uptrade Integration\nNEXT_PUBLIC_UPTRADE_API_URL=${apiUrl}\nNEXT_PUBLIC_UPTRADE_PROJECT_ID=${ctx.projectId}\nUPTRADE_API_KEY=your-api-key-here`,\n language: 'env',\n order: startOrder + 1,\n required: true,\n },\n {\n module: 'provider',\n snippetType: 'layout',\n title: 'Root Layout Provider',\n description: 'Wrap your app with SiteKitProvider in app/layout.tsx',\n filePath: 'app/layout.tsx',\n code: `import { SiteKitProvider } from '@uptrade/site-kit'\nimport { ManagedFavicon } from '@uptrade/site-kit/images'\n\nexport default function RootLayout({\n children,\n}: {\n children: React.ReactNode\n}) {\n return (\n <html lang=\"en\">\n <head>\n <ManagedFavicon />\n </head>\n <body>\n <SiteKitProvider\n apiUrl={process.env.NEXT_PUBLIC_UPTRADE_API_URL!}\n projectId={process.env.NEXT_PUBLIC_UPTRADE_PROJECT_ID!}\n${enabledModulesConfig}\n >\n {children}\n </SiteKitProvider>\n </body>\n </html>\n )\n}`,\n language: 'tsx',\n order: startOrder + 2,\n required: true,\n },\n ]\n}\n\n// ============================================\n// Analytics Snippets\n// ============================================\n\nfunction generateAnalyticsSnippets(ctx: GeneratorContext, startOrder: number): IntegrationSnippet[] {\n return [\n {\n module: 'analytics',\n snippetType: 'component',\n title: 'Custom Event Tracking',\n description: 'Track custom events throughout your app',\n filePath: 'components/TrackableButton.tsx',\n code: `'use client'\n\nimport { useSiteKit } from '@uptrade/site-kit'\n\ninterface TrackableButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n eventName: string\n eventData?: Record<string, unknown>\n children: React.ReactNode\n}\n\nexport function TrackableButton({ \n children, \n eventName,\n eventData,\n ...props \n}: TrackableButtonProps) {\n const { analytics } = useSiteKit()\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n analytics?.trackEvent(eventName, eventData)\n props.onClick?.(e)\n }\n\n return (\n <button {...props} onClick={handleClick}>\n {children}\n </button>\n )\n}`,\n language: 'tsx',\n order: startOrder,\n required: false,\n },\n ]\n}\n\n// ============================================\n// Engage Snippets (Chat Widget)\n// ============================================\n\nfunction generateEngageSnippets(ctx: GeneratorContext, startOrder: number): IntegrationSnippet[] {\n const primaryColor = ctx.brand?.primaryColor || '#0066cc'\n \n return [\n {\n module: 'engage',\n snippetType: 'component',\n title: 'Chat Widget',\n description: 'Add the AI chat widget to your site. This is unstyled - customize to match your brand.',\n filePath: 'components/ChatWidget.tsx',\n code: `'use client'\n\nimport { ChatWidget } from '@uptrade/site-kit/engage'\n\nexport function SiteChat() {\n return (\n <ChatWidget\n projectId={process.env.NEXT_PUBLIC_UPTRADE_PROJECT_ID!}\n config={{\n position: 'bottom-right',\n buttonColor: '${primaryColor}',\n greeting: 'Hi! How can I help you today?',\n placeholder: 'Type your message...',\n }}\n />\n )\n}`,\n language: 'tsx',\n order: startOrder,\n required: true,\n },\n {\n module: 'engage',\n snippetType: 'layout',\n title: 'Add Chat to Layout',\n description: 'Add the ChatWidget component to your root layout',\n filePath: 'app/layout.tsx',\n code: `// Add import at top:\nimport { SiteChat } from '@/components/ChatWidget'\n\n// Add inside your layout body, after SiteKitProvider children:\n<SiteChat />`,\n language: 'tsx',\n order: startOrder + 1,\n required: true,\n },\n ]\n}\n\n// ============================================\n// Forms Snippets\n// ============================================\n\nfunction generateFormsSnippets(ctx: GeneratorContext, startOrder: number): IntegrationSnippet[] {\n return [\n {\n module: 'forms',\n snippetType: 'component',\n title: 'Managed Form Component',\n description: 'Embed a managed form from the Portal. Form slug must match one created in Forms module.',\n filePath: 'components/ContactForm.tsx',\n code: `import { ManagedForm } from '@uptrade/site-kit/forms'\n\ninterface ContactFormProps {\n formSlug?: string\n className?: string\n}\n\nexport async function ContactForm({ \n formSlug = 'contact',\n className \n}: ContactFormProps) {\n return (\n <ManagedForm\n projectId={process.env.NEXT_PUBLIC_UPTRADE_PROJECT_ID!}\n formSlug={formSlug}\n className={className}\n />\n )\n}`,\n language: 'tsx',\n order: startOrder,\n required: false,\n },\n {\n module: 'forms',\n snippetType: 'api-route',\n title: 'Form Submission Handler',\n description: 'API route to proxy form submissions to Portal API',\n filePath: 'app/api/forms/[formId]/submit/route.ts',\n code: `import { NextRequest, NextResponse } from 'next/server'\n\nexport async function POST(\n request: NextRequest,\n { params }: { params: { formId: string } }\n) {\n const body = await request.json()\n\n const response = await fetch(\n \\`\\${process.env.NEXT_PUBLIC_UPTRADE_API_URL}/forms/\\${params.formId}/submit\\`,\n {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'X-API-Key': process.env.UPTRADE_API_KEY!,\n },\n body: JSON.stringify(body),\n }\n )\n\n const data = await response.json()\n return NextResponse.json(data, { status: response.status })\n}`,\n language: 'typescript',\n order: startOrder + 1,\n required: true,\n },\n ]\n}\n\n// ============================================\n// Commerce Snippets\n// ============================================\n\nfunction generateCommerceSnippets(ctx: GeneratorContext, startOrder: number): IntegrationSnippet[] {\n return [\n {\n module: 'commerce',\n snippetType: 'component',\n title: 'Product Grid',\n description: 'Display products from your commerce catalog',\n filePath: 'components/Products.tsx',\n code: `import { ProductGrid } from '@uptrade/site-kit/commerce'\n\ninterface ProductsSectionProps {\n category?: string\n limit?: number\n}\n\nexport async function ProductsSection({ \n category = 'featured',\n limit = 8 \n}: ProductsSectionProps) {\n return (\n <section className=\"py-12\">\n <h2 className=\"text-2xl font-bold mb-6\">Our Products</h2>\n <ProductGrid\n projectId={process.env.NEXT_PUBLIC_UPTRADE_PROJECT_ID!}\n category={category}\n limit={limit}\n />\n </section>\n )\n}`,\n language: 'tsx',\n order: startOrder,\n required: false,\n },\n {\n module: 'commerce',\n snippetType: 'component',\n title: 'Upcoming Events',\n description: 'Display upcoming events and classes',\n filePath: 'components/Events.tsx',\n code: `import { UpcomingEvents, EventCalendar } from '@uptrade/site-kit/commerce'\n\nexport async function EventsSection({ limit = 6 }: { limit?: number }) {\n return (\n <section className=\"py-12\">\n <h2 className=\"text-2xl font-bold mb-6\">Upcoming Events</h2>\n <UpcomingEvents\n projectId={process.env.NEXT_PUBLIC_UPTRADE_PROJECT_ID!}\n limit={limit}\n />\n </section>\n )\n}\n\nexport async function FullCalendar() {\n return (\n <EventCalendar\n projectId={process.env.NEXT_PUBLIC_UPTRADE_PROJECT_ID!}\n />\n )\n}`,\n language: 'tsx',\n order: startOrder + 1,\n required: false,\n },\n ]\n}\n\n// ============================================\n// SEO Snippets (Managed FAQs, Schema)\n// ============================================\n\nfunction generateSEOSnippets(ctx: GeneratorContext, startOrder: number): IntegrationSnippet[] {\n return [\n {\n module: 'seo',\n snippetType: 'component',\n title: 'Managed FAQ Section',\n description: 'Render FAQs with automatic JSON-LD schema markup. FAQs are managed in Portal SEO module.',\n filePath: 'components/FAQSection.tsx',\n code: `import { ManagedFAQ } from '@uptrade/site-kit/seo'\n\ninterface FAQSectionProps {\n path: string // Page path to fetch FAQs for (e.g., '/services/plumbing')\n className?: string\n}\n\nexport async function FAQSection({ path, className }: FAQSectionProps) {\n return (\n <section className={className}>\n <ManagedFAQ\n projectId={process.env.NEXT_PUBLIC_UPTRADE_PROJECT_ID!}\n path={path}\n showTitle\n includeSchema\n />\n </section>\n )\n}`,\n language: 'tsx',\n order: startOrder,\n required: true,\n },\n {\n module: 'seo',\n snippetType: 'page',\n title: 'Page with Managed Metadata + FAQs',\n description: 'Example dynamic page using managed metadata and FAQ sections',\n filePath: 'app/services/[slug]/page.tsx',\n code: `import { getManagedMetadata, ManagedFAQ } from '@uptrade/site-kit/seo'\nimport type { Metadata } from 'next'\n\ninterface Props {\n params: { slug: string }\n}\n\nexport async function generateMetadata({ params }: Props): Promise<Metadata> {\n const path = \\`/services/\\${params.slug}\\`\n return getManagedMetadata({\n projectId: process.env.NEXT_PUBLIC_UPTRADE_PROJECT_ID!,\n path,\n })\n}\n\nexport default async function ServicePage({ params }: Props) {\n const path = \\`/services/\\${params.slug}\\`\n\n return (\n <main>\n <h1 className=\"text-3xl font-bold\">Service: {params.slug}</h1>\n \n {/* Your page content here */}\n \n {/* FAQs section with JSON-LD schema */}\n <section className=\"mt-12\">\n <ManagedFAQ\n projectId={process.env.NEXT_PUBLIC_UPTRADE_PROJECT_ID!}\n path={path}\n showTitle\n includeSchema\n />\n </section>\n </main>\n )\n}`,\n language: 'tsx',\n order: startOrder + 1,\n required: false,\n },\n ]\n}\n\n// ============================================\n// Blog Snippets\n// ============================================\n\nfunction generateBlogSnippets(ctx: GeneratorContext, startOrder: number): IntegrationSnippet[] {\n return [\n {\n module: 'blog',\n snippetType: 'page',\n title: 'Blog List Page',\n description: 'Display all blog posts from Portal',\n filePath: 'app/blog/page.tsx',\n code: `import { getBlogPosts } from '@uptrade/site-kit/blog'\nimport Link from 'next/link'\n\nexport default async function BlogPage() {\n const posts = await getBlogPosts({\n projectId: process.env.NEXT_PUBLIC_UPTRADE_PROJECT_ID!,\n limit: 10,\n })\n\n return (\n <main className=\"py-12\">\n <h1 className=\"text-3xl font-bold mb-8\">Blog</h1>\n <div className=\"grid gap-6 md:grid-cols-2 lg:grid-cols-3\">\n {posts.map((post) => (\n <article key={post.id} className=\"border rounded-lg p-4\">\n {post.featured_image && (\n <img\n src={post.featured_image}\n alt={post.title}\n className=\"w-full h-48 object-cover rounded mb-4\"\n />\n )}\n <h2 className=\"text-xl font-semibold mb-2\">\n <Link href={\\`/blog/\\${post.slug}\\`}>{post.title}</Link>\n </h2>\n <p className=\"text-gray-600\">{post.excerpt}</p>\n </article>\n ))}\n </div>\n </main>\n )\n}`,\n language: 'tsx',\n order: startOrder,\n required: false,\n },\n {\n module: 'blog',\n snippetType: 'page',\n title: 'Blog Post Page',\n description: 'Individual blog post page with SEO metadata',\n filePath: 'app/blog/[slug]/page.tsx',\n code: `import { getBlogPost, getBlogPosts } from '@uptrade/site-kit/blog'\nimport type { Metadata } from 'next'\nimport { notFound } from 'next/navigation'\n\ninterface Props {\n params: { slug: string }\n}\n\nexport async function generateStaticParams() {\n const posts = await getBlogPosts({\n projectId: process.env.NEXT_PUBLIC_UPTRADE_PROJECT_ID!,\n })\n return posts.map((post) => ({ slug: post.slug }))\n}\n\nexport async function generateMetadata({ params }: Props): Promise<Metadata> {\n const post = await getBlogPost({\n projectId: process.env.NEXT_PUBLIC_UPTRADE_PROJECT_ID!,\n slug: params.slug,\n })\n \n if (!post) return {}\n \n return {\n title: post.title,\n description: post.excerpt,\n openGraph: {\n title: post.title,\n description: post.excerpt,\n images: post.featured_image ? [post.featured_image] : [],\n },\n }\n}\n\nexport default async function BlogPostPage({ params }: Props) {\n const post = await getBlogPost({\n projectId: process.env.NEXT_PUBLIC_UPTRADE_PROJECT_ID!,\n slug: params.slug,\n })\n\n if (!post) notFound()\n\n return (\n <article className=\"py-12 max-w-3xl mx-auto\">\n <h1 className=\"text-4xl font-bold mb-4\">{post.title}</h1>\n {post.featured_image && (\n <img\n src={post.featured_image}\n alt={post.title}\n className=\"w-full rounded-lg mb-8\"\n />\n )}\n <div \n className=\"prose prose-lg\"\n dangerouslySetInnerHTML={{ __html: post.content }}\n />\n </article>\n )\n}`,\n language: 'tsx',\n order: startOrder + 1,\n required: false,\n },\n ]\n}\n","/**\n * IntegrationCodeView - Display generated site-kit integration code\n * \n * Shows code snippets grouped by module with copy functionality.\n * Can be used in setup wizards or admin dashboards.\n */\n\n'use client'\n\nimport * as React from 'react'\nimport { useState, useMemo } from 'react'\nimport { generateIntegrationCode, getSnippetsByModule, type IntegrationSnippet, type GeneratorContext } from './integration-generator'\n\n// ============================================\n// Icons (inline SVG to avoid dependencies)\n// ============================================\n\nfunction CopyIcon({ className }: { className?: string }) {\n return (\n <svg className={className} width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\" />\n <path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\" />\n </svg>\n )\n}\n\nfunction CheckIcon({ className }: { className?: string }) {\n return (\n <svg className={className} width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n )\n}\n\nfunction ChevronDownIcon({ className }: { className?: string }) {\n return (\n <svg className={className} width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n )\n}\n\nfunction ChevronRightIcon({ className }: { className?: string }) {\n return (\n <svg className={className} width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n )\n}\n\n// ============================================\n// Module metadata\n// ============================================\n\nconst moduleLabels: Record<string, string> = {\n provider: 'Setup',\n analytics: 'Analytics',\n engage: 'Engage (Chat)',\n forms: 'Forms',\n commerce: 'Commerce',\n seo: 'SEO',\n blog: 'Blog',\n}\n\nconst moduleColors: Record<string, string> = {\n provider: '#6366f1', // indigo\n analytics: '#8b5cf6', // violet\n engage: '#ec4899', // pink\n forms: '#14b8a6', // teal\n commerce: '#f59e0b', // amber\n seo: '#10b981', // emerald\n blog: '#3b82f6', // blue\n}\n\n// ============================================\n// Component\n// ============================================\n\nexport interface IntegrationCodeViewProps {\n projectId: string\n enabledModules: string[]\n apiUrl?: string\n brand?: {\n primaryColor?: string\n businessName?: string\n }\n className?: string\n onCopy?: (code: string, title: string) => void\n}\n\nexport function IntegrationCodeView({\n projectId,\n enabledModules,\n apiUrl,\n brand,\n className,\n onCopy,\n}: IntegrationCodeViewProps) {\n const [expandedModules, setExpandedModules] = useState<Set<string>>(new Set(['provider']))\n const [copiedId, setCopiedId] = useState<string | null>(null)\n\n // Generate code snippets\n const snippets = useMemo(() => {\n return generateIntegrationCode({\n projectId,\n enabledModules,\n apiUrl,\n brand,\n })\n }, [projectId, enabledModules, apiUrl, brand])\n\n // Group by module\n const snippetsByModule = useMemo(() => {\n return getSnippetsByModule(snippets)\n }, [snippets])\n\n const toggleModule = (module: string) => {\n setExpandedModules(prev => {\n const next = new Set(prev)\n if (next.has(module)) {\n next.delete(module)\n } else {\n next.add(module)\n }\n return next\n })\n }\n\n const copyCode = async (code: string, id: string, title: string) => {\n try {\n await navigator.clipboard.writeText(code)\n setCopiedId(id)\n onCopy?.(code, title)\n setTimeout(() => setCopiedId(null), 2000)\n } catch (err) {\n console.error('Failed to copy:', err)\n }\n }\n\n const copyAll = async () => {\n const allCode = snippets\n .map(s => `// ${s.title}\\n${s.filePath ? `// File: ${s.filePath}\\n` : ''}${s.code}`)\n .join('\\n\\n// ---\\n\\n')\n try {\n await navigator.clipboard.writeText(allCode)\n onCopy?.(allCode, 'All snippets')\n } catch (err) {\n console.error('Failed to copy:', err)\n }\n }\n\n if (enabledModules.length === 0) {\n return (\n <div className={className} style={{ textAlign: 'center', padding: '2rem', color: '#666' }}>\n <p>No modules enabled for this project.</p>\n <p style={{ fontSize: '0.875rem', marginTop: '0.5rem' }}>\n Enable modules in Project Settings to generate integration code.\n </p>\n </div>\n )\n }\n\n return (\n <div className={className} style={{ display: 'flex', flexDirection: 'column', gap: '1rem' }}>\n {/* Header */}\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <div>\n <h3 style={{ margin: 0, fontWeight: 600 }}>Integration Code</h3>\n <p style={{ margin: '0.25rem 0 0', fontSize: '0.875rem', color: '#666' }}>\n {snippets.length} snippets for {enabledModules.length} modules\n </p>\n </div>\n <button\n onClick={copyAll}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '0.5rem',\n padding: '0.5rem 1rem',\n border: '1px solid #e5e7eb',\n borderRadius: '0.375rem',\n background: 'white',\n cursor: 'pointer',\n fontSize: '0.875rem',\n }}\n >\n <CopyIcon />\n Copy All\n </button>\n </div>\n\n {/* Module Groups */}\n <div style={{ display: 'flex', flexDirection: 'column', gap: '0.75rem' }}>\n {Object.entries(snippetsByModule).map(([module, moduleSnippets]) => {\n const isExpanded = expandedModules.has(module)\n const color = moduleColors[module] || '#6366f1'\n \n return (\n <div \n key={module} \n style={{\n border: '1px solid #e5e7eb',\n borderRadius: '0.5rem',\n overflow: 'hidden',\n }}\n >\n {/* Module Header */}\n <button\n onClick={() => toggleModule(module)}\n style={{\n width: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '0.75rem 1rem',\n background: '#f9fafb',\n border: 'none',\n cursor: 'pointer',\n textAlign: 'left',\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: '0.75rem' }}>\n <div\n style={{\n width: '0.5rem',\n height: '0.5rem',\n borderRadius: '50%',\n background: color,\n }}\n />\n <span style={{ fontWeight: 500 }}>\n {moduleLabels[module] || module}\n </span>\n <span\n style={{\n fontSize: '0.75rem',\n padding: '0.125rem 0.5rem',\n background: '#e5e7eb',\n borderRadius: '9999px',\n }}\n >\n {moduleSnippets.length}\n </span>\n </div>\n {isExpanded ? <ChevronDownIcon /> : <ChevronRightIcon />}\n </button>\n\n {/* Snippets */}\n {isExpanded && (\n <div>\n {moduleSnippets.map((snippet, idx) => {\n const snippetId = `${module}-${idx}`\n const isCopied = copiedId === snippetId\n\n return (\n <div\n key={idx}\n style={{\n padding: '1rem',\n borderTop: '1px solid #e5e7eb',\n }}\n >\n {/* Snippet Header */}\n <div style={{ display: 'flex', justifyContent: 'space-between', marginBottom: '0.75rem' }}>\n <div>\n <div style={{ display: 'flex', alignItems: 'center', gap: '0.5rem' }}>\n <span style={{ fontWeight: 500, fontSize: '0.875rem' }}>\n {snippet.title}\n </span>\n {snippet.required && (\n <span\n style={{\n fontSize: '0.625rem',\n padding: '0.125rem 0.375rem',\n border: '1px solid #e5e7eb',\n borderRadius: '0.25rem',\n textTransform: 'uppercase',\n }}\n >\n Required\n </span>\n )}\n </div>\n {snippet.description && (\n <p style={{ margin: '0.25rem 0 0', fontSize: '0.75rem', color: '#666' }}>\n {snippet.description}\n </p>\n )}\n {snippet.filePath && (\n <p style={{ margin: '0.25rem 0 0', fontSize: '0.75rem', color: color, fontFamily: 'monospace' }}>\n {snippet.filePath}\n </p>\n )}\n </div>\n <button\n onClick={() => copyCode(snippet.code, snippetId, snippet.title)}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '2rem',\n height: '2rem',\n border: 'none',\n background: 'transparent',\n cursor: 'pointer',\n borderRadius: '0.25rem',\n }}\n title=\"Copy code\"\n >\n {isCopied ? (\n <CheckIcon className=\"text-green-500\" />\n ) : (\n <CopyIcon />\n )}\n </button>\n </div>\n\n {/* Code Block */}\n <pre\n style={{\n margin: 0,\n padding: '0.75rem',\n background: '#1f2937',\n color: '#e5e7eb',\n borderRadius: '0.375rem',\n overflow: 'auto',\n fontSize: '0.75rem',\n fontFamily: 'ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace',\n lineHeight: 1.5,\n }}\n >\n <code>{snippet.code}</code>\n </pre>\n </div>\n )\n })}\n </div>\n )}\n </div>\n )\n })}\n </div>\n </div>\n )\n}\n"]}
|
|
@@ -201,7 +201,7 @@ async function handleConfigure(req) {
|
|
|
201
201
|
return server.NextResponse.json({ error: "Not authenticated" }, { status: 401 });
|
|
202
202
|
}
|
|
203
203
|
const { projectId } = await req.json();
|
|
204
|
-
const { generateEnvFile, generateProvider } = await import('./generators-
|
|
204
|
+
const { generateEnvFile, generateProvider } = await import('./generators-HZZLGIUB.js');
|
|
205
205
|
try {
|
|
206
206
|
const configResponse = await fetch(`${API_URL}/projects/${projectId}/config`, {
|
|
207
207
|
headers: { "Authorization": `Bearer ${authSession.accessToken}` }
|
|
@@ -236,7 +236,7 @@ async function handleConfigure(req) {
|
|
|
236
236
|
}
|
|
237
237
|
}
|
|
238
238
|
async function handleSelfDestruct() {
|
|
239
|
-
const { selfDestruct } = await import('./generators-
|
|
239
|
+
const { selfDestruct } = await import('./generators-HZZLGIUB.js');
|
|
240
240
|
try {
|
|
241
241
|
await selfDestruct();
|
|
242
242
|
return server.NextResponse.json({ success: true });
|
|
@@ -339,5 +339,5 @@ async function handleRequest(req, route) {
|
|
|
339
339
|
}
|
|
340
340
|
|
|
341
341
|
exports.handleRequest = handleRequest;
|
|
342
|
-
//# sourceMappingURL=chunk-
|
|
343
|
-
//# sourceMappingURL=chunk-
|
|
342
|
+
//# sourceMappingURL=chunk-F6D3L676.js.map
|
|
343
|
+
//# sourceMappingURL=chunk-F6D3L676.js.map
|