1/** @jsxImportSource https://esm.sh/react@19 */
2import fcsdk from "https://esm.sh/@farcaster/frame-sdk";
3import { useQuery } from "https://esm.sh/@tanstack/react-query@5";
4import { NavLink, Route, Routes } from "https://esm.sh/react-router@7";
5import { useEffect, useState } from "https://esm.sh/react@19";
6
7import { Example } from "./components/Example.tsx";
51 {/* <h2 className="">Features:</h2> */}
52 <div className="opacity-50">
53 <div className="">✷ Hono + React + Tailwind</div>
54 <div className="">✷ React Router + React Query</div>
55 <div className="">✷ Built-in database (blob storage)</div>
56 <div className="">✷ Farcaster mini app manifest + webhook + embed metadata</div>
3 "target": "ES2022",
4 "module": "ESNext",
5 "jsx": "react-jsx",
6 "strict": true,
7 "noImplicitAny": true,
1/** @jsxImportSource https://esm.sh/react@18.2.0 */
2import {
3 AnimatePresence,
4 motion,
5} from "https://esm.sh/framer-motion?deps=react@18.2.0,react-dom@18.2.0";
6import { createRoot } from "https://esm.sh/react-dom@18.2.0/client";
7import React, {
8 useCallback,
9 useEffect,
10 useRef,
11 useState,
12} from "https://esm.sh/react@18.2.0";
13
14function ErrorMessage({ message, retry, useFallback }) {
602}
603
604class ErrorBoundary extends React.Component {
605 constructor(props) {
606 super(props);
1/** @jsxImportSource https://esm.sh/react@19 */
2import fcsdk from "https://esm.sh/@farcaster/frame-sdk";
3import { useQuery } from "https://esm.sh/@tanstack/react-query@5";
4import { LoaderCircle, Mic, MicOff } from "https://esm.sh/lucide-react@0.510.0";
5import { NavLink, Route, Routes, useNavigate, useParams } from "https://esm.sh/react-router@7";
6import { useEffect, useRef, useState } from "https://esm.sh/react@19";
7
8import { Button, Input, Section } from "../components/ui.tsx";
1/** @jsxImportSource https://esm.sh/react@18.2.0 */
2import { createRoot } from "https://esm.sh/react-dom@18.2.0/client";
3import React, { useEffect, useState } from "https://esm.sh/react@18.2.0";
4
5// ... (useForm, Button, Icon, Input, FloatingMessage, Spinner, NoInternetPage, Slideshow, Card, Modal, InviteCard, BottomNavigation, LoadingOverlay components remain unchanged) ...
1/** @jsxImportSource https://esm.sh/react@18.2.0 */
2import React, { useEffect, useState } from "https://esm.sh/react@18.2.0";
3import { MCPPrompt } from "../../shared/types.ts";
4
1/** @jsxImportSource https://esm.sh/react@18.2.0 */
2import { createRoot } from "https://esm.sh/react-dom@18.2.0/client?deps=react@18.2.0";
3import { Prism as SyntaxHighlighter } from "https://esm.sh/react-syntax-highlighter?deps=react@18.2.0,react-dom@18.2.0";
4import React, { useEffect, useState } from "https://esm.sh/react@18.2.0";
5import STARTER_PROMPTS from "./starter-prompts.js";
6
30}: {
31 prompt: string;
32 setPrompt: React.Dispatch<React.SetStateAction<string>>;
33 handleSubmit: (e: React.FormEvent) => void;
34 handleStarterPromptClick: (promptItem: PromptItem) => void;
35}) {
116
117function App() {
118 const previewRef = React.useRef<HTMLDivElement>(null);
119 const [prompt, setPrompt] = useState("");
120 const [projectId, setProjectId] = useState<number | null>(null);
174 }
175
176 async function handleSubmit(e: React.FormEvent | string) {
177 if (typeof e !== "string") {
178 e.preventDefault();
673 </div>
674 <div className="bg-white w-full h-full flex flex-col grow rounded-xl border-2 border-white overflow-hidden">
675 <React.Fragment key={iframeKey}>
676 <iframe
677 srcDoc={code}
679 className="w-full grow"
680 />
681 </React.Fragment>
682 </div>
683 </div>
1/** @jsxImportSource https://esm.sh/react@18.2.0?dev */
2
3export function ValTownLogo () {
1import { useState, useEffect } from "react";
2
3const USER_ENDPOINT = "/api/user";
1import { useEffect } from "react";
2
3export function useUsageStats(messages: any[], usages: any[]) {