@_davideast/stitch-mcp 0.7.0 → 0.8.0

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.
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/commands/screens/ScreensView.tsx"],
4
+ "sourcesContent": [
5
+ "import React, { useState, useEffect, useRef } from 'react';\nimport { Box, Text, useInput, useApp } from 'ink';\nimport { downloadText, copyText } from '../../ui/copy-behaviors/clipboard.js';\nimport { StitchViteServer } from '../../lib/server/vite/StitchViteServer.js';\nimport { openUrl } from '../../platform/browser.js';\n\ninterface Screen {\n screenId: string;\n title: string;\n hasCode: boolean;\n codeUrl: string | null;\n hasImage: boolean;\n}\n\ninterface ScreensViewProps {\n projectId: string;\n projectTitle: string;\n screens: Screen[];\n}\n\nexport function ScreensView({ projectId, projectTitle, screens }: ScreensViewProps) {\n const { exit } = useApp();\n const [selectedIndex, setSelectedIndex] = useState(0);\n const [windowStart, setWindowStart] = useState(0);\n const [status, setStatus] = useState('');\n const [serverUrl, setServerUrl] = useState<string | null>(null);\n\n const serverRef = useRef<StitchViteServer | null>(null);\n\n const VIEW_HEIGHT = 10;\n\n // Helper to sync window with selection\n React.useEffect(() => {\n if (selectedIndex < windowStart) {\n setWindowStart(selectedIndex);\n } else if (selectedIndex >= windowStart + VIEW_HEIGHT) {\n setWindowStart(selectedIndex - VIEW_HEIGHT + 1);\n }\n }, [selectedIndex, windowStart, VIEW_HEIGHT]);\n\n useEffect(() => {\n return () => {\n if (serverRef.current) serverRef.current.stop();\n };\n }, []);\n\n async function serveScreen(screen: Screen) {\n if (!screen.hasCode || !screen.codeUrl) {\n setStatus('No HTML to serve');\n return;\n }\n\n setStatus('Preparing server...');\n let srv = serverRef.current;\n let url = serverUrl;\n let justStarted = false;\n\n if (!srv) {\n srv = new StitchViteServer();\n url = await srv.start(0);\n serverRef.current = srv;\n setServerUrl(url);\n justStarted = true;\n }\n\n if (!url) return; // Should not happen\n\n try {\n const html = await downloadText(screen.codeUrl);\n const route = `/screens/${screen.screenId}`;\n srv.mount(route, html);\n\n const fullUrl = `${url}${route}`;\n\n if (justStarted) {\n openUrl(fullUrl);\n } else {\n srv.navigate(fullUrl);\n }\n setStatus(`Serving at ${fullUrl}`);\n } catch (e) {\n setStatus('Error serving screen');\n }\n }\n\n useInput((input, key) => {\n if (input === 'q') {\n exit();\n return;\n }\n\n if (key.upArrow || input === 'k') {\n setSelectedIndex(prev => Math.max(0, prev - 1));\n setStatus('');\n }\n\n if (key.downArrow || input === 'j') {\n setSelectedIndex(prev => Math.min(screens.length - 1, prev + 1));\n setStatus('');\n }\n\n // Copy code\n if (input === 'c') {\n const screen = screens[selectedIndex];\n if (screen?.hasCode && screen.codeUrl) {\n setStatus('Copying...');\n downloadText(screen.codeUrl)\n .then(code => {\n copyText(code);\n setStatus('HTML copied!');\n })\n .catch(() => setStatus('Failed to copy'));\n } else {\n setStatus('No HTML available');\n }\n }\n\n // Copy image (placeholder)\n if (input === 'i') {\n const screen = screens[selectedIndex];\n if (screen?.hasImage) {\n setStatus('Image copy not implemented');\n } else {\n setStatus('No image available');\n }\n }\n\n // Serve\n if (input === 's') {\n const screen = screens[selectedIndex];\n if (screen) {\n serveScreen(screen);\n }\n }\n });\n\n const visibleScreens = screens.slice(windowStart, windowStart + VIEW_HEIGHT);\n\n return (\n <Box flexDirection=\"column\" padding={1}>\n {/* Header */}\n <Text bold>{projectTitle} ({screens.length} screens)</Text>\n <Text dimColor>projectId: {projectId}</Text>\n {serverUrl && <Text dimColor>Server: <Text color=\"green\">{serverUrl}</Text></Text>}\n <Text> </Text>\n\n {/* Screen List */}\n <Box flexDirection=\"column\" borderStyle=\"single\" borderColor=\"yellow\" paddingX={1}>\n {windowStart > 0 && <Text dimColor>... {windowStart} more above ...</Text>}\n\n {visibleScreens.map((screen, index) => {\n // Adjust index for absolute position\n const absoluteIndex = windowStart + index;\n const isSelected = absoluteIndex === selectedIndex;\n const num = String(absoluteIndex + 1).padStart(2, ' ');\n const selector = isSelected ? '▸' : ' ';\n\n return (\n <Box key={screen.screenId} flexDirection=\"column\">\n {/* Row 1: Title + Checkboxes */}\n <Box justifyContent=\"space-between\">\n <Box>\n <Text dimColor>{num}</Text>\n <Text color={isSelected ? 'cyan' : undefined}> {selector} </Text>\n <Text color={isSelected ? 'cyan' : undefined} bold={isSelected}>\n {screen.title.slice(0, 28)}\n </Text>\n </Box>\n <Box>\n <Text dimColor>html</Text>\n <Text color={screen.hasCode ? 'green' : 'gray'}>\n {screen.hasCode ? '[✓]' : '[ ]'}\n </Text>\n <Text> </Text>\n <Text dimColor>img</Text>\n <Text color={screen.hasImage ? 'green' : 'gray'}>\n {screen.hasImage ? '[✓]' : '[ ]'}\n </Text>\n </Box>\n </Box>\n {/* Row 2: screenId */}\n <Text dimColor color=\"gray\"> screenId: {screen.screenId}</Text>\n <Text> </Text>\n </Box>\n );\n })}\n\n {windowStart + VIEW_HEIGHT < screens.length && (\n <Text dimColor>... {screens.length - (windowStart + VIEW_HEIGHT)} more below ...</Text>\n )}\n </Box>\n\n {/* Footer */}\n <Text dimColor>[c]opy html [i]mage [s]erve [q]uit</Text>\n {status && <Text color=\"yellow\">{status}</Text>}\n </Box>\n );\n}\n"
6
+ ],
7
+ "mappings": "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",
8
+ "debugId": "960621E15D89B58B64756E2164756E21",
9
+ "names": []
10
+ }