2import STARTER_PROMPTS from "../public/starter-prompts.js";
3
4function extractCodeFromFence(text: string): string {
5 const htmlMatch = text.match(/```html\n([\s\S]*?)\n```/);
6 return htmlMatch ? htmlMatch[1].trim() : text;
7}
8
9export async function generateCode(prompt: string, currentCode: string) {
10 const starterPrompt = STARTER_PROMPTS.find(p => p.prompt === prompt);
11 if (starterPrompt) {
1import { consoleEmailEx } from "https://esm.town/v/rodrigotellovaltown/consoleEmailEx?v=2";
2
3export default async function (e: Email) {
4
5}
4
5// Enhanced authentication and persistent storage hook
6function useServerStorage(key, initialValue) {
7 const [storedValue, setStoredValue] = useState(initialValue);
8 const [userId, setUserId] = useState(null);
38 const setValue = async (value) => {
39 try {
40 const valueToStore = value instanceof Function ? value(storedValue) : value;
41 setStoredValue(valueToStore);
42
60}
61
62function App() {
63 const [jobs, setJobs, userId] = useServerStorage('jobs', []);
64 const [messages, setMessages] = useServerStorage('messages', []);
134// Rest of the client-side code remains the same
135
136export default async function server(request: Request): Promise<Response> {
137 try {
138 const { sqlite } = await import("https://esm.town/v/stevekrouse/sqlite");
13];
14
15function App() {
16 const [noClicks, setNoClicks] = useState(0);
17 const [isValentine, setIsValentine] = useState(false);
98}
99
100function client() {
101 createRoot(document.getElementById("root")).render(<App />);
102}
103if (typeof document !== "undefined") { client(); }
104
105export default async function server(request: Request): Promise<Response> {
106 return new Response(
107 `
3import React, { useEffect, useRef, useState } from "https://esm.sh/react@18.2.0";
4
5function LoginScreen({ onLogin }) {
6 const [password, setPassword] = useState("");
7 const [error, setError] = useState("");
46}
47
48function CustomerInteractionForm({ onSubmit }) {
49 const [email, setEmail] = useState("");
50 const [firstName, setFirstName] = useState("");
240}
241
242function InteractionList() {
243 const [customerInteractions, setCustomerInteractions] = useState({});
244 const [copiedEmail, setCopiedEmail] = useState(null);
470}
471
472function App() {
473 const [isAuthenticated, setIsAuthenticated] = useState(false);
474 const [refreshList, setRefreshList] = useState(0);
517}
518
519function client() {
520 createRoot(document.getElementById("root")).render(<App />);
521}
522if (typeof document !== "undefined") { client(); }
523
524export default async function server(request: Request): Promise<Response> {
525 const { sqlite } = await import("https://esm.town/v/stevekrouse/sqlite");
526 const KEY = "CRM";
13];
14
15function App() {
16 const [noClicks, setNoClicks] = useState(0);
17 const [isValentine, setIsValentine] = useState(false);
100}
101
102function client() {
103 createRoot(document.getElementById("root")).render(<App />);
104}
105if (typeof document !== "undefined") { client(); }
106
107export default async function server(request: Request): Promise<Response> {
108 return new Response(
109 `
1import { fetchJSON } from "https://esm.town/v/stevekrouse/fetchJSON";
2
3export async function getWeather(location: string): Promise<WeatherResponse> {
4 return fetchJSON(`https://wttr.in/${location}?format=j1`);
5}
4
5// Spinner Component
6function Spinner({ theme }) {
7 const spinnerStyle = {
8 display: "flex",
40}
41
42function App() {
43 const [theme, setTheme] = useState(() => {
44 const savedTheme = localStorage.getItem("app-theme");
373}
374
375function client() {
376 createRoot(document.getElementById("root")).render(<App />);
377}
381}
382
383export default function server(request: Request): Response {
384 return new Response(`
385 <html>
1## Get Weather
2
3Simple function to get weather data from the free [wttr.in](https://wttr.in/:help) service.
4
5```ts
33- [x] fix wonky sidebar separator height problem (thanks to @stevekrouse)
34- [x] make result tables scrollable
35- [x] add export to CSV, and JSON (CSV and JSON helper functions written in [this val](https://www.val.town/v/nbbaier/sqliteExportHelpers). Thanks to @pomdtr for merging the initial version!)
36- [x] add listener for cmd+enter to submit query
A helper function to build a file's email
Simple functional CSS library for Val Town
LangChain (https://langchain.com) Ambassador, KubeSphere (https://kubesphere.io) Ambassador, CNCF OpenFunction (https://openfunction.dev) TOC Member.
import { OpenAI } from "https://esm.town/v/std/openai";
export default async function(req: Request): Promise<Response> {
if (req.method === "OPTIONS") {
return new Response(null, {
headers: {
"Access-Control-Allow-Origin": "*",