import { computed, Default, fetchBinary, NAME, pattern, UI, type VNode, } from "commonfabric"; // Cuisine illustration thumbnail. Callers can disable generation and pass a // stored source URL; a parent that owns item state can persist the returned // image bytes for other viewers. const GENERATE_IMAGE_PATH = "/api/ai/img"; const GENERATED_IMAGE_SIZE = 128; export const FOOD_FALLBACK_IMAGE = "data:image/png;base64,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"; // Art-director prompt. Goals (hard-won from early results): capture the // *essence* of the cuisine like a minimal "parti diagram" rather than a busy // scene, and draw the FOOD — inferring the cuisine from the restaurant name // rather than illustrating the name literally (e.g. "…Palace of Indian // Cuisine" should yield a dish, not a palace). Kept here so the style stays // consistent across options and is easy to tune in one place. const cuisineArtPrompt = (title: string) => "A tiny 128x128 thumbnail intended to serialize to about 10 kB. " + "A hand-drawn pen-and-ink illustration with visible hand-inked pen strokes " + "and light crosshatching, as if sketched by hand with a fountain pen, with " + "gentle, restrained washes of soft watercolor color — present and warm but " + "understated, never saturated: a single close-up " + "of one iconic dish that captures the essence of a cuisine. The food fills " + "most of the frame, cropped at the edges to emphasize the food itself. A " + "plate or bowl is fine but not required — show the food however best suits " + "the dish (on a board, wrapped, or on its own). Infer the cuisine from " + "this restaurant's name " + `and draw only the food — "${title}". One dish only, not a pair. Do not ` + "draw buildings, palaces, storefronts, logos, people, or text. Clean white " + "background, no border."; export const safeImageUrl = (raw: string | undefined): string => { const s = (raw ?? "").trim(); if (!s) return ""; if (s.startsWith("data:image/")) return s; try { const u = new URL(s); return (u.protocol === "http:" || u.protocol === "https:") ? u.toString() : ""; } catch { return ""; } }; export const generatedImageUrlFor = (title: string): string => GENERATE_IMAGE_PATH + "?prompt=" + encodeURIComponent(cuisineArtPrompt(title)) + "&width=" + GENERATED_IMAGE_SIZE + "&height=" + GENERATED_IMAGE_SIZE; /** * GeneratedArt renders a fallback-backed food illustration thumbnail. * * Use it when a parent pattern needs fixed-size generated-or-stored image UI * from a text prompt. This sub-pattern owns no shared state; callers pass any * persisted source URL and decide whether this instance may generate. */ /** * Fetch lifecycle exposed by GeneratedArt for parents that need to observe or * persist generated image state. */ export type GeneratedArtFetchState = | "stored" | "generated" | "pending" | "error" | "requested" | ""; export const deriveGeneratedArtFetchState = ( prompt: string | undefined, sourceUrl: string | undefined, shouldGenerate: boolean | undefined, hasGeneratedImage: boolean, pending: boolean, hasError: boolean, ): GeneratedArtFetchState => { if (!(prompt ?? "").trim()) return ""; if (safeImageUrl(sourceUrl)) return "stored"; if (shouldGenerate === false) return ""; if (hasGeneratedImage) return "generated"; if (pending) return "pending"; return hasError ? "error" : "requested"; }; /** * Inputs for the generated thumbnail sub-pattern. * * Use JSX when embedding only the UI: ``. * Instantiate with a function call when the parent needs `imageDataUrl` or * `fetchState`. */ export interface GeneratedArtInput { /** Text used to build the food-illustration art-director prompt. */ prompt: string; /** Safe persisted image URL or data URI; when present, generation is skipped. */ sourceUrl?: string | Default<"">; /** Whether this instance may call the image generation endpoint. */ shouldGenerate?: boolean | Default; } /** * Outputs for the generated thumbnail sub-pattern. * * `[UI]` is a static VNode. The fallback image remains a static CSS * `background-image`; the generated (`cf-image`) or stored (``) overlay * shows only once real image data is available. */ export interface GeneratedArtOutput { /** Human-readable pattern name. */ [NAME]: string; /** Static VNode rendering the fallback-backed square thumbnail. */ [UI]: VNode; /** * The generated image as a `data:` URL (`""` until generated). The * persistence-friendly form: a parent stores this string in shared state * (e.g. an option's `imageUrl`) and passes it back as `sourceUrl`, after * which every viewer serves the stored value and no instance generates. * * Optional ON PURPOSE (as is `fetchState`): these are fetch-derived, so * they are absent until the fetch machinery has written its cells. A * required declaration makes boundary readers lower with a required input * schema and gate silently on instances whose fetch never ran (stored / * gated / empty-prompt) — the CT-1811-family required-gating leg. */ imageDataUrl?: string; /** Current image source/generation state (see `imageDataUrl` on optionality). */ fetchState?: GeneratedArtFetchState; } export default pattern( ({ prompt, sourceUrl, shouldGenerate }) => { const requestUrl = computed(() => { // Guard the transiently-unset prompt (a map element materializing): // without it a real generation request goes out with "undefined"/"" in // the art prompt (CT-1820's adjacent hazard). const title = (prompt ?? "").trim(); if (!title) return ""; const stored = safeImageUrl(sourceUrl); if (stored) return ""; if (shouldGenerate === false) return ""; return generatedImageUrlFor(title); }); const generatedArt = fetchBinary({ url: requestUrl, options: { mutexTimeoutMs: 30_000, }, }); const imageBytes = computed(() => generatedArt.result?.bytes); const imageMediaType = computed(() => generatedArt.result?.mediaType ?? ""); const imageDataUrl = computed(() => { const bytes = generatedArt.result?.bytes; const mediaType = generatedArt.result?.mediaType; if (!bytes || !mediaType) return ""; // ~10 kB thumbnails; a simple char loop is fine at this size. `btoa` is // a hardened sandbox global; FabricBytes reads out via `slice()`. const raw = bytes.slice(); let binary = ""; for (let i = 0; i < raw.length; i++) { binary += String.fromCharCode(raw[i]); } return `data:${mediaType};base64,${btoa(binary)}`; }); const hasSourceUrl = computed(() => safeImageUrl(sourceUrl) !== ""); const hasGeneratedImage = computed(() => !!generatedArt.result?.bytes); const fetchState = computed(() => deriveGeneratedArtFetchState( prompt, sourceUrl, shouldGenerate, !!generatedArt.result?.bytes, !!generatedArt.pending, !!generatedArt.error, ) ); return { [NAME]: "Generated lunch art", [UI]: (
{hasSourceUrl ? ( ) : hasGeneratedImage ? ( ) : null}
), imageDataUrl, fetchState, }; }, );