flowingBeigePigeonmain.tsx31 matches
3import { createRoot } from "https://esm.sh/react-dom@18.2.0/client";
45// Comprehensive type for wildlife image analysis
6type ImageAnalysisResult = {
7// Identification Details
8animalType?: string;
4142function WildlifeRescueApp() {
43const [image, setImage] = useState<string | null>(null);
44const [location, setLocation] = useState<{
45lat: number;
50} | null>(null);
51const [locationError, setLocationError] = useState<string | null>(null);
52const [imageAnalysis, setImageAnalysis] = useState<ImageAnalysisResult | null>(null);
53const [editableAnalysis, setEditableAnalysis] = useState<ImageAnalysisResult | null>(null);
54const [isAnalyzing, setIsAnalyzing] = useState(false);
55const [uploadError, setUploadError] = useState<string | null>(null);
6869// Comprehensive AI analysis method
70const analyzeImage = useCallback(async (imageDataUrl: string) => {
71setIsAnalyzing(true);
72try {
110},
111{
112type: "image_url",
113image_url: { url: imageDataUrl }
114}
115],
119});
120121const analysisText = response.choices[0].message.content || "Unable to analyze image";
122
123// Comprehensive parsing of analysis
124const analysis: ImageAnalysisResult = {
125// Identification Details
126animalType: extractDetail(analysisText, ['animal species', 'species']),
167},
168{
169type: "image_url",
170image_url: { url: imageDataUrl }
171}
172],
178analysis.narrativeDescription = narrativeResponse.choices[0].message.content || "Unable to generate narrative";
179180setImageAnalysis(analysis);
181setEditableAnalysis({...analysis});
182setUploadError(null);
187recommendedAction: "Urgent professional wildlife rescue consultation required"
188};
189setImageAnalysis(fallbackAnalysis);
190setEditableAnalysis(fallbackAnalysis);
191setUploadError("Failed to analyze the image. Please try again.");
192} finally {
193setIsAnalyzing(false);
196197// Severity determination remains the same
198const determineSeverityLevel = (analysisText: string): ImageAnalysisResult['severityLevel'] => {
199const lowRiskKeywords = ['minor', 'slight', 'small'];
200const criticalRiskKeywords = ['critical', 'severe', 'urgent', 'emergency'];
206};
207208// Enhanced image upload handler with file validation
209const handleImageUpload = (event: React.ChangeEvent<HTMLInputElement>) => {
210const file = event.target.files?.[0];
211if (file) {
212// Validate file type
213const validImageTypes = ['image/jpeg', 'image/png', 'image/gif', 'image/webp'];
214if (!validImageTypes.includes(file.type)) {
215setUploadError('Please upload a valid image file (JPEG, PNG, GIF, or WebP)');
216return;
217}
220const maxSizeInBytes = 10 * 1024 * 1024; // 10MB
221if (file.size > maxSizeInBytes) {
222setUploadError('Image file is too large. Please upload an image under 10MB.');
223return;
224}
226const reader = new FileReader();
227reader.onloadend = async () => {
228const imageDataUrl = reader.result as string;
229setImage(imageDataUrl);
230await analyzeImage(imageDataUrl);
231};
232reader.readAsDataURL(file);
235236// Handle editable field changes
237const handleAnalysisChange = (field: keyof ImageAnalysisResult, value: any) => {
238if (editableAnalysis) {
239setEditableAnalysis({
265<input
266type="file"
267accept="image/*"
268onChange={handleImageUpload}
269ref={fileInputRef}
270style={{ display: 'none' }}
280}}
281>
282Upload Wildlife Image
283</button>
284</div>
296)}
297298{image && editableAnalysis && (
299<div>
300<img
301src={image}
302alt="Uploaded wildlife"
303style={{ maxWidth: '300px', margin: '10px 0' }}
wildlifeRescueAppmain.tsx13 matches
45function WildlifeRescueApp() {
6const [image, setImage] = useState<{ file: File | null, preview: string }>({ file: null, preview: '' });
7const [location, setLocation] = useState<{ lat: number; lng: number }>({ lat: 0, lng: 0 });
8const [animalType, setAnimalType] = useState<string>('');
1213const resetForm = useCallback(() => {
14setImage({ file: null, preview: '' });
15setAnimalType('');
16setInjuryDescription('');
22}, []);
2324const handleImageUpload = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {
25const file = e.target.files?.[0];
26if (file) {
31}
3233const validTypes = ['image/jpeg', 'image/png', 'image/gif'];
34if (!validTypes.includes(file.type)) {
35setSubmitStatus('Invalid file type. Please upload JPEG, PNG, or GIF.');
39const reader = new FileReader();
40reader.onloadend = () => {
41setImage({
42file,
43preview: reader.result as string
81try {
82// Input validation
83if (!image.file) {
84throw new Error('Please upload a wildlife image');
85}
86if (!animalType?.trim()) {
96injuryDescription,
97location,
98imagePreview: image.preview
99});
100125<div style={{ marginBottom: '15px' }}>
126<label style={{ display: 'block', marginBottom: '5px' }}>
127Upload Wildlife Image:
128<input
129ref={fileInputRef}
130type="file"
131accept="image/jpeg,image/png,image/gif"
132onChange={handleImageUpload}
133required
134style={{ width: '100%', padding: '10px', backgroundColor: 'white' }}
135/>
136</label>
137{image.preview && (
138<img
139src={image.preview}
140alt="Uploaded wildlife"
141style={{
blob_adminREADME.md1 match
3This is a lightweight Blob Admin interface to view and debug your Blob data.
45
67Versions 0-17 of this val were done with Hono and server-rendering.
blob_adminmain.tsx5 matches
440{profile && (
441<div className="flex items-center space-x-4">
442<img src={profile.profileImageUrl} alt="Profile" className="w-8 h-8 rounded-full" />
443<span>{profile.username}</span>
444<a href="/auth/logout" className="text-blue-400 hover:text-blue-300">Logout</a>
583alt="Blob content"
584className="max-w-full h-auto"
585onError={() => console.error("Error loading image")}
586/>
587</div>
635<li>Create public shareable links for blobs</li>
636<li>View and manage public folder</li>
637<li>Preview images directly in the interface</li>
638</ul>
639</div>
694const { ValTown } = await import("npm:@valtown/sdk");
695const vt = new ValTown();
696const { email: authorEmail, profileImageUrl, username } = await vt.me.profile.retrieve();
697// const authorEmail = me.email;
698762763c.set("email", email);
764c.set("profile", { profileImageUrl, username });
765await next();
766};
cerebras_codermain.tsx1 match
1165<meta property="og:description" content="Turn your ideas into fully functional apps in less than a second – powered by Llama3.3-70b on Cerebras's super-fast wafer chips. Code is 100% open-source, hosted on Val Town."">
1166<meta property="og:type" content="website">
1167<meta property="og:image" content="https://stevekrouse-blob_admin.web.val.run/api/public/CerebrasCoderOG.jpg">
1168
1169
cerebras_codermain.tsx1 match
1165<meta property="og:description" content="Turn your ideas into fully functional apps in less than a second – powered by Llama3.3-70b on Cerebras's super-fast wafer chips. Code is 100% open-source, hosted on Val Town."">
1166<meta property="og:type" content="website">
1167<meta property="og:image" content="https://stevekrouse-blob_admin.web.val.run/api/public/CerebrasCoderOG.jpg">
1168
1169
cerebras_codermain.tsx1 match
1165<meta property="og:description" content="Turn your ideas into fully functional apps in less than a second – powered by Llama3.3-70b on Cerebras's super-fast wafer chips. Code is 100% open-source, hosted on Val Town."">
1166<meta property="og:type" content="website">
1167<meta property="og:image" content="https://stevekrouse-blob_admin.web.val.run/api/public/CerebrasCoderOG.jpg">
1168
1169
26title: "Markdown Editor",
27code:
28"<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"UTF-8\">\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <title>Markdown Editor</title>\n <link href=\"https://cdn.jsdelivr.net/npm/tailwindcss@2.2.19/dist/tailwind.min.css\" rel=\"stylesheet\">\n</head>\n<body class=\"bg-white\">\n <div class=\"max-w-full mx-auto p-4 pt-6 md:p-6 lg:p-8\">\n <h1 class=\"text-3xl text-center mb-4\">Markdown Editor</h1>\n <div class=\"flex flex-row\">\n <div class=\"editor p-4 rounded-lg border border-gray-200 w-full md:w-1/2\">\n <textarea id=\"editor\" class=\"w-full h-screen p-2 border border-gray-200 rounded-lg\" placeholder=\"Type your Markdown here...\"></textarea>\n </div>\n <div class=\"preview p-4 rounded-lg border border-gray-200 w-full md:w-1/2 ml-2 md:ml-4 lg:ml-8\">\n <div id=\"preview\"></div>\n </div>\n </div>\n <p class=\"text-center mt-4\">Built on <a href=\"https://cerebrascoder.com\">Cerebras Coder</a></p>\n </div>\n\n <script>\n const editor = document.getElementById('editor');\n const preview = document.getElementById('preview');\n\n // Initialize textarea with default markdown\n const defaultMarkdown = `\n# Introduction to Markdown\nMarkdown is a lightweight markup language that is easy to read and write. It is often used for formatting text in plain text editors, chat applications, and even web pages.\n\n## Headers\nHeaders are denoted by the # symbol followed by a space. The number of # symbols determines the level of the header:\n# Heading 1\n## Heading 2\n### Heading 3\n\n## Emphasis\nYou can use emphasis to make your text **bold** or *italic*:\n*Italics*\n**Bold**\n\n## Lists\nYou can use lists to organize your text:\n* Item 1\n* Item 2\n* Item 3\nOr\n1. Item 1\n2. Item 2\n3. Item 3\n\n## Links\nYou can use links to reference external resources:\n[Google](https://www.google.com)\n\n## Images\nYou can use images to add visual content:\n\n`;\n editor.value = defaultMarkdown;\n\n // Update preview on input\n editor.addEventListener('input', () => {\n const markdown = editor.value;\n const html = markdownToHtml(markdown);\n preview.innerHTML = html;\n });\n\n // Initialize preview with default markdown\n const defaultHtml = markdownToHtml(defaultMarkdown);\n preview.innerHTML = defaultHtml;\n\n // Function to convert Markdown to HTML\n function markdownToHtml(markdown) {\n // Bold\n markdown = markdown.replace(/\\*\\*(.*?)\\*\\*/g, '<b>$1</b>');\n\n // Italic\n markdown = markdown.replace(/\\*(.*?)\\*/g, '<i>$1</i>');\n\n // Links\n markdown = markdown.replace(/\\[(.*?)\\]\\((.*?)\\)/g, '<a href=\"$2\">$1</a>');\n\n // Images\n markdown = markdown.replace(/!\\[(.*?)\\]\\((.*?)\\)/g, '<img src=\"$2\" alt=\"$1\">');\n\n // Headings\n markdown = markdown.replace(/(^#{1,6} )(.*)/gm, (match, level, text) => {\n return `<h${level.length}>${text}</h${level.length}>`;\n });\n\n // Lists\n markdown = markdown.replace(/^(\\*|\\d+\\.) (.*)/gm, (match, marker, text) => {\n if (marker.startsWith('*')) {\n return `<li>${text}</li>`;\n } else {\n return `<li>${text}</li>`;\n }\n });\n\n // Line breaks\n markdown = markdown.replace(/\\n/g, '<br>');\n\n // Fix for nested lists\n markdown = markdown.replace(/<li><li>/g, '<li>');\n markdown = markdown.replace(/<\\/li><\\/li>/g, '</li>');\n\n // Wrap lists in ul\n markdown = markdown.replace(/(<li>.*<\\/li>)/g, '<ul>$1</ul>');\n\n return markdown;\n }\n </script>\n</body>\n</html>",
29performance: {
30tokensPerSecond: 4092.96,
cerebras_codermain.tsx1 match
1165<meta property="og:description" content="Turn your ideas into fully functional apps in less than a second – powered by Llama3.3-70b on Cerebras's super-fast wafer chips. Code is 100% open-source, hosted on Val Town."">
1166<meta property="og:type" content="website">
1167<meta property="og:image" content="https://stevekrouse-blob_admin.web.val.run/api/public/CerebrasCoderOG.jpg">
1168
1169
lastfm_exporter_dbmain.tsx2 matches
43const track = data.recenttracks?.track?.[0];
44if (track) {
45// Extract the largest available image (usually the last in the array)
46const coverArtUrl = track.image?.[track.image.length - 1]?.["#text"] || null;
4748const trackInfo = {