@manyrows/appkit-react 0.1.8 → 0.1.9

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.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/runtime.ts","../src/AppKit.tsx","../src/UserButton.tsx","../src/hooks.ts","../src/appResource.ts","../src/images/config.ts","../src/images/api.ts","../src/images/useImages.ts","../src/images/useImageUpload.ts","../src/images/useImage.ts","../src/images/ImageUploader.tsx","../src/images/MrImage.tsx","../src/images/ImageDetails.tsx","../src/images/ImagePicker.tsx","../src/files/config.ts","../src/files/api.ts","../src/files/useFiles.ts","../src/files/useFile.ts","../src/files/useFileUpload.ts","../src/files/FileUploader.tsx","../src/files/FileDetails.tsx","../src/files/FilePicker.tsx"],"names":["useEffect","jsxs","jsx","useState","Fragment","useRef","useCallback","useMemo","FONT","v","updateImage","headers","apiBase","IDLE","ACCEPT_DEFAULT","MAX_SIZE_DEFAULT","formatSize","formatBytes","isSafeURL","sanitizeFilename","MetaItem","SKELETON_STYLE_ID","useSkeletonStyle","updateFile"],"mappings":"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","file":"index.js","sourcesContent":["import type { AppKitRuntime } from \"./types\";\n\n/**\n * Returns true if the URL uses HTTPS or targets localhost (for development).\n * Used to prevent loading scripts from or sending tokens to untrusted origins.\n */\nexport function isSafeOrigin(url: string): boolean {\n const s = (url || \"\").trim().toLowerCase();\n if (s.startsWith(\"https://\")) return true;\n if (\n s.startsWith(\"http://localhost\") ||\n s.startsWith(\"http://127.0.0.1\") ||\n s.startsWith(\"http://0.0.0.0\")\n ) return true;\n return false;\n}\n\nexport function getManyRowsAppKitRuntime(): AppKitRuntime | null {\n const w = window as any;\n\n // Preferred: namespaced\n if (w.ManyRows?.AppKit?.init) return w.ManyRows.AppKit;\n\n // Back-compat: function globals\n if (w.initManyRowsAppKit) {\n return {\n init: w.initManyRowsAppKit,\n destroy: w.destroyManyRowsAppKit,\n info: w.getManyRowsAppKitInfo,\n };\n }\n\n return null;\n}\n\nexport function ensureScriptLoaded(src: string, timeoutMs: number): Promise<void> {\n return new Promise((resolve, reject) => {\n if (typeof window === \"undefined\" || typeof document === \"undefined\") {\n resolve(); // SSR: noop\n return;\n }\n\n // Validate origin before injecting script\n if (!isSafeOrigin(src)) {\n reject(new Error(`Refused to load AppKit script from non-HTTPS origin: ${src}`));\n return;\n }\n\n // Already present?\n const existing = Array.from(document.querySelectorAll('script[data-manyrows-appkit=\"true\"]')).find(\n (el) => el.getAttribute(\"src\") === src\n );\n if (existing) {\n resolve();\n return;\n }\n\n // If runtime already exists, we’re good.\n if (getManyRowsAppKitRuntime()) {\n resolve();\n return;\n }\n\n const s = document.createElement(\"script\");\n s.src = src;\n s.async = true;\n s.crossOrigin = \"anonymous\";\n s.setAttribute(\"data-manyrows-appkit\", \"true\");\n\n const timer = window.setTimeout(() => {\n cleanup();\n reject(new Error(`Timed out loading AppKit script after ${timeoutMs}ms: ${src}`));\n }, timeoutMs);\n\n function cleanup() {\n window.clearTimeout(timer);\n s.onload = null;\n s.onerror = null;\n }\n\n s.onload = () => {\n cleanup();\n resolve();\n };\n\n s.onerror = (e) => {\n cleanup();\n reject(e);\n };\n\n document.head.appendChild(s);\n });\n}\n","// appkit-react/AppKit.tsx\nimport React, {\n createContext,\n useContext,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport type {\n ManyRowsAppKitError,\n ManyRowsAppKitReady,\n ManyRowsAppKitHandle,\n ManyRowsAppKitSnapshot,\n} from \"./types\";\nimport { ensureScriptLoaded, getManyRowsAppKitRuntime, isSafeOrigin } from \"./runtime\";\n\n// -----------------------------\n// Tiny semver helpers (no deps)\n// -----------------------------\n\ntype Semver = { major: number; minor: number; patch: number };\n\nfunction parseSemver(v: unknown): Semver | null {\n if (typeof v !== \"string\") return null;\n const s = v.trim();\n const m = /^v?(\\d+)\\.(\\d+)\\.(\\d+)/.exec(s);\n if (!m) return null;\n const major = Number(m[1]);\n const minor = Number(m[2]);\n const patch = Number(m[3]);\n if (!Number.isFinite(major) || !Number.isFinite(minor) || !Number.isFinite(patch)) return null;\n return { major, minor, patch };\n}\n\nfunction cmpSemver(a: Semver, b: Semver): number {\n if (a.major !== b.major) return a.major - b.major;\n if (a.minor !== b.minor) return a.minor - b.minor;\n return a.patch - b.patch;\n}\n\nfunction semverGte(runtimeVersion: unknown, minVersion: string): boolean {\n const r = parseSemver(runtimeVersion);\n const m = parseSemver(minVersion);\n if (!r || !m) return false;\n return cmpSemver(r, m) >= 0;\n}\n\n// -----------------------------\n// Prod/dev safety helpers\n// -----------------------------\n\nfunction isProbablyProdBuild(): boolean {\n const p = (globalThis as any)?.process;\n const env = p?.env?.NODE_ENV;\n return env === \"production\";\n}\n\nfunction looksLikeLocalhost(url: string): boolean {\n const s = (url || \"\").trim().toLowerCase();\n return (\n s.startsWith(\"http://localhost\") ||\n s.startsWith(\"https://localhost\") ||\n s.startsWith(\"http://127.0.0.1\") ||\n s.startsWith(\"https://127.0.0.1\") ||\n s.startsWith(\"http://0.0.0.0\") ||\n s.startsWith(\"https://0.0.0.0\")\n );\n}\n\nfunction assertSafeURLs(\n baseURL: string,\n src: string,\n report: (err: ManyRowsAppKitError) => void,\n): boolean {\n if (!isSafeOrigin(baseURL)) {\n report(\n mkErr(\"BASE_URL_NOT_ALLOWED_IN_PROD\", \"baseURL must use HTTPS (or localhost for development).\", {\n baseURL,\n })\n );\n return false;\n }\n if (!isSafeOrigin(src)) {\n report(\n mkErr(\"SCRIPT_LOAD_FAILED\", \"Script src must use HTTPS (or localhost for development).\", {\n src,\n })\n );\n return false;\n }\n return true;\n}\n\n// -----------------------------\n// Auth predicate (snapshot is loose)\n// -----------------------------\n\nfunction isAuthedSnapshot(s: ManyRowsAppKitSnapshot | null | undefined): boolean {\n if (!s || typeof s !== \"object\") return false;\n const status = (s as any).status;\n if (status !== \"authenticated\") return false;\n\n const appData = (s as any).appData;\n if (!appData || typeof appData !== \"object\") return false;\n\n // don’t over-constrain v0\n return true;\n}\n\n// -----------------------------\n// AppKit context + hook\n// -----------------------------\n\nexport type AppKitContextValue = {\n status: \"idle\" | \"loading\" | \"mounted\" | \"error\";\n error: ManyRowsAppKitError | null;\n\n readyInfo: ManyRowsAppKitReady | null;\n snapshot: ManyRowsAppKitSnapshot | null;\n\n // convenience derived flag\n isAuthenticated: boolean;\n\n // present when runtime supports handle API\n handle: ManyRowsAppKitHandle | null;\n\n // convenience methods (safe no-ops if handle missing)\n refresh: () => void;\n logout: () => Promise<void>;\n setToken: (tok: string | null) => void;\n destroy: () => void;\n info: () => ManyRowsAppKitReady | null;\n};\n\nconst Ctx = createContext<AppKitContextValue | null>(null);\n\nexport function useAppKit(): AppKitContextValue {\n const v = useContext(Ctx);\n if (!v) throw new Error(\"useAppKit() must be used under <AppKit />\");\n return v;\n}\n\n/**\n * Render children only when the AppKit runtime is authenticated and appData exists.\n * Use this to mount your customer app \"behind\" the AppKit login screen.\n */\nexport function AppKitAuthed(props: {\n children: React.ReactNode;\n /**\n * Optional: shown when not authenticated (or still checking).\n * Default: null (render nothing).\n */\n fallback?: React.ReactNode;\n}) {\n const { isAuthenticated } = useAppKit();\n if (!isAuthenticated) return <>{props.fallback ?? null}</>;\n return <>{props.children}</>;\n}\n\n// -----------------------------\n// Props\n// -----------------------------\n\nexport type AppKitTheme = {\n primaryColor?: string;\n};\n\nconst DEFAULT_BASE_URL = \"https://app.manyrows.com\";\n\nexport type AppKitProps = {\n workspace: string;\n\n // ✅ replaces project+env\n appId: string;\n\n /**\n * Base URL of the ManyRows service.\n * Defaults to \"https://app.manyrows.com\".\n */\n baseURL?: string;\n\n // ✅ Theme customization\n theme?: AppKitTheme;\n\n /**\n * URL of the AppKit runtime script.\n * Defaults to `{baseURL}/appkit/assets/appkit.js`.\n */\n src?: string;\n timeoutMs?: number;\n\n silent?: boolean;\n throwOnError?: boolean;\n\n onReady?: (info: ManyRowsAppKitReady) => void;\n onError?: (err: ManyRowsAppKitError) => void;\n\n /**\n * Fired for every snapshot update from the runtime (checking/unauth/authed/etc).\n */\n onState?: (snapshot: ManyRowsAppKitSnapshot | null) => void;\n\n /**\n * Fired when AppKit is authenticated and appData is available.\n * This is the correct place to render the customer app (imperative style).\n */\n onReadyState?: (snapshot: ManyRowsAppKitSnapshot) => void;\n\n className?: string;\n style?: React.CSSProperties;\n containerId?: string;\n\n runtimeMinVersion?: string;\n runtimeExactVersion?: string;\n\n loading?: React.ReactNode;\n errorUI?: (err: ManyRowsAppKitError) => React.ReactNode;\n hideLoadingUI?: boolean;\n hideErrorUI?: boolean;\n\n // kept for future (no longer used now that env is arbitrary)\n allowDevEnvInProd?: boolean;\n blockLocalhostBaseURLInProd?: boolean;\n\n // ✅ allow <AppKit>children</AppKit>\n children?: React.ReactNode;\n};\n\n// -----------------------------\n// Errors / UI\n// -----------------------------\n\nfunction mkErr(\n code: ManyRowsAppKitError[\"code\"],\n message: string,\n details?: unknown\n): ManyRowsAppKitError {\n return { code, message, details };\n}\n\nfunction DefaultError({ err }: { err: ManyRowsAppKitError }) {\n return (\n <div\n role=\"alert\"\n style={{\n width: \"100%\",\n borderRadius: 10,\n border: \"1px solid rgba(220, 38, 38, 0.35)\",\n background: \"rgba(220, 38, 38, 0.06)\",\n padding: 12,\n fontFamily:\n 'ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, \"Apple Color Emoji\", \"Segoe UI Emoji\"',\n }}\n >\n <div style={{ fontWeight: 700, marginBottom: 6 }}>ManyRows AppKit failed to load</div>\n <div style={{ fontSize: 13, marginBottom: 8 }}>\n <span style={{ fontWeight: 600 }}>{err.code}</span>: {err.message}\n </div>\n {err.details !== undefined && !isProbablyProdBuild() ? (\n <pre\n style={{\n fontSize: 12,\n margin: 0,\n whiteSpace: \"pre-wrap\",\n wordBreak: \"break-word\",\n opacity: 0.8,\n }}\n >\n {typeof err.details === \"string\" ? err.details : JSON.stringify(err.details, null, 2)}\n </pre>\n ) : null}\n </div>\n );\n}\n\n// -----------------------------\n// Component\n// -----------------------------\n\nexport function AppKit(props: AppKitProps) {\n const autoId = useId();\n const containerId = props.containerId ?? `manyrows-appkit-${autoId.replace(/[:]/g, \"\")}`;\n\n // Resolve defaults: baseURL → src\n const resolvedBaseURL = props.baseURL?.trim() || DEFAULT_BASE_URL;\n const resolvedSrc = props.src?.trim() || `${resolvedBaseURL}/appkit/assets/appkit.js`;\n\n // If host supplies children, we assume host wants to own the authed UI.\n // In that case, suppress the runtime's *default* authed screen by passing renderAuthed={() => null}.\n const hasChildren = React.Children.count(props.children) > 0;\n\n const initKey = useMemo(\n () =>\n [\n containerId,\n props.workspace,\n props.appId,\n resolvedBaseURL,\n resolvedSrc,\n props.runtimeMinVersion ?? \"\",\n props.runtimeExactVersion ?? \"\",\n props.allowDevEnvInProd ? \"1\" : \"0\",\n props.blockLocalhostBaseURLInProd === false ? \"0\" : \"1\",\n hasChildren ? \"children:1\" : \"children:0\",\n ].join(\"|\"),\n [\n containerId,\n props.workspace,\n props.appId,\n resolvedBaseURL,\n resolvedSrc,\n props.runtimeMinVersion,\n props.runtimeExactVersion,\n props.allowDevEnvInProd,\n props.blockLocalhostBaseURLInProd,\n hasChildren,\n ]\n );\n\n const handleRef = useRef<ManyRowsAppKitHandle | null>(null);\n const [handle, setHandle] = useState<ManyRowsAppKitHandle | null>(null);\n\n const [status, setStatus] = useState<\"idle\" | \"loading\" | \"mounted\" | \"error\">(\"idle\");\n const [lastError, setLastError] = useState<ManyRowsAppKitError | null>(null);\n\n const [readyInfo, setReadyInfo] = useState<ManyRowsAppKitReady | null>(null);\n const [snapshot, setSnapshot] = useState<ManyRowsAppKitSnapshot | null>(null);\n\n useEffect(() => {\n let cancelled = false;\n\n setStatus(\"loading\");\n setLastError(null);\n setReadyInfo(null);\n setSnapshot(null);\n handleRef.current = null;\n setHandle(null);\n\n const report = (err: ManyRowsAppKitError) => {\n setLastError(err);\n setStatus(\"error\");\n\n if (!props.silent) {\n // eslint-disable-next-line no-console\n console.warn(\"[@manyrows/appkit-react]\", err.code, err.message, err.details ?? \"\");\n }\n props.onError?.(err);\n };\n\n const init = async () => {\n if (!props.workspace?.trim() || !props.appId?.trim()) {\n report(\n mkErr(\"INVALID_PROPS\", \"workspace and appId are required.\", {\n workspace: props.workspace,\n appId: props.appId,\n })\n );\n return;\n }\n\n if (!assertSafeURLs(resolvedBaseURL, resolvedSrc, report)) return;\n\n const prod = isProbablyProdBuild();\n\n if (\n prod &&\n props.blockLocalhostBaseURLInProd !== false &&\n looksLikeLocalhost(resolvedBaseURL)\n ) {\n report(\n mkErr(\n \"BASE_URL_NOT_ALLOWED_IN_PROD\",\n \"localhost baseURL is not allowed in production builds.\",\n { baseURL: resolvedBaseURL }\n )\n );\n return;\n }\n\n try {\n const timeoutMs = props.timeoutMs ?? 4000;\n\n await ensureScriptLoaded(resolvedSrc, timeoutMs);\n\n const start = Date.now();\n while (!getManyRowsAppKitRuntime() && Date.now() - start < timeoutMs) {\n if (cancelled) return;\n await new Promise((r) => setTimeout(r, 25));\n }\n\n const api = getManyRowsAppKitRuntime();\n if (!api) {\n report(\n mkErr(\n \"SCRIPT_TIMEOUT\",\n `AppKit runtime not found after loading script: ${resolvedSrc}`,\n { src: resolvedSrc }\n )\n );\n return;\n }\n\n const runtimeVersion: unknown = (api as any)?.version;\n\n if (props.runtimeExactVersion) {\n const expected = props.runtimeExactVersion.trim();\n if (!expected) {\n report(mkErr(\"INVALID_PROPS\", \"runtimeExactVersion must be a non-empty string.\"));\n return;\n }\n const found = typeof runtimeVersion === \"string\" ? runtimeVersion.trim() : \"\";\n if (found !== expected) {\n report(\n mkErr(\"RUNTIME_VERSION_MISMATCH\", \"AppKit runtime version mismatch.\", {\n expected,\n found: runtimeVersion,\n })\n );\n return;\n }\n } else if (props.runtimeMinVersion) {\n const min = props.runtimeMinVersion.trim();\n if (!min) {\n report(mkErr(\"INVALID_PROPS\", \"runtimeMinVersion must be a non-empty string.\"));\n return;\n }\n const ok = semverGte(runtimeVersion, min);\n if (!ok) {\n report(\n mkErr(\"RUNTIME_VERSION_TOO_OLD\", \"AppKit runtime is too old.\", {\n requiredMin: min,\n found: runtimeVersion,\n parsedFound: parseSemver(runtimeVersion),\n })\n );\n return;\n }\n }\n\n const h = (api as any).init({\n containerId,\n workspace: props.workspace.trim(),\n appId: props.appId.trim(),\n baseURL: resolvedBaseURL,\n theme: props.theme,\n silent: props.silent,\n throwOnError: props.throwOnError,\n\n // If host provides children, hide runtime default authed UI.\n // Runtime will still render login / errors / forbidden screens as normal.\n renderAuthed: hasChildren ? (() => null) : undefined,\n\n onReady: (info: ManyRowsAppKitReady) => {\n if (cancelled) return;\n setStatus(\"mounted\");\n setLastError(null);\n setReadyInfo(info);\n props.onReady?.(info);\n },\n\n onState: (s: ManyRowsAppKitSnapshot | null) => {\n if (cancelled) return;\n setSnapshot(s);\n props.onState?.(s);\n },\n\n onReadyState: (s: ManyRowsAppKitSnapshot) => {\n if (cancelled) return;\n props.onReadyState?.(s);\n },\n\n onError: (e: any) => {\n report(mkErr(\"RUNTIME_ERROR\", \"AppKit runtime error.\", e));\n },\n });\n\n // Set handle BEFORE any callbacks fire to avoid stale null on first mount\n handleRef.current = h ?? null;\n setHandle(h ?? null);\n } catch (e) {\n report(mkErr(\"SCRIPT_LOAD_FAILED\", \"Failed to load AppKit script.\", { error: e }));\n }\n };\n\n void init();\n\n return () => {\n cancelled = true;\n\n try {\n handleRef.current?.destroy?.();\n } catch {\n // ignore\n }\n\n try {\n const api = getManyRowsAppKitRuntime();\n api?.destroy?.(containerId);\n } catch {\n // ignore\n }\n\n handleRef.current = null;\n setHandle(null);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [initKey]);\n\n const showLoading = status === \"loading\" && !props.hideLoadingUI;\n const showError = status === \"error\" && !!lastError && !props.hideErrorUI;\n\n const ctx: AppKitContextValue = useMemo(() => {\n return {\n status,\n error: lastError,\n readyInfo,\n snapshot,\n isAuthenticated: isAuthedSnapshot(snapshot),\n handle,\n\n refresh: () => {\n try {\n handle?.refresh?.();\n } catch {\n // ignore\n }\n },\n logout: async () => {\n try {\n await handle?.logout?.();\n } catch {\n // ignore\n }\n },\n setToken: (tok: string | null) => {\n try {\n handle?.setToken?.(tok);\n } catch {\n // ignore\n }\n },\n destroy: () => {\n try {\n handle?.destroy?.();\n } catch {\n // ignore\n }\n },\n info: () => {\n try {\n return handle?.info?.() ?? null;\n } catch {\n return null;\n }\n },\n };\n }, [status, lastError, readyInfo, snapshot, handle]);\n\n return (\n <Ctx.Provider value={ctx}>\n <div className={props.className} style={props.style}>\n {showLoading && props.loading ? props.loading : null}\n {showError && lastError\n ? props.errorUI\n ? props.errorUI(lastError)\n : <DefaultError err={lastError} />\n : null}\n\n {/* Host-side children (can use AppKitAuthed/useAppKit) */}\n {props.children}\n\n {/* Runtime owns all UI inside this container */}\n <div id={containerId} />\n </div>\n </Ctx.Provider>\n );\n}\n","import React, { useState, useEffect, useCallback } from \"react\";\nimport { useAppKit } from \"./AppKit\";\n\ntype ToastType = { message: string; type: \"success\" | \"error\" } | null;\n\nfunction Toast({ toast, onClose }: { toast: ToastType; onClose: () => void }) {\n useEffect(() => {\n if (toast) {\n const timer = setTimeout(onClose, 4000);\n return () => clearTimeout(timer);\n }\n }, [toast, onClose]);\n\n if (!toast) return null;\n\n return (\n <div\n style={{\n position: \"fixed\",\n bottom: 24,\n left: \"50%\",\n transform: \"translateX(-50%)\",\n padding: \"12px 20px\",\n borderRadius: 8,\n backgroundColor: toast.type === \"success\" ? \"#2e7d32\" : \"#d32f2f\",\n color: \"#fff\",\n fontSize: 14,\n fontWeight: 500,\n boxShadow: \"0 4px 12px rgba(0,0,0,0.2)\",\n zIndex: 10000,\n display: \"flex\",\n alignItems: \"center\",\n gap: 12,\n }}\n >\n {toast.message}\n <button\n onClick={onClose}\n style={{\n background: \"none\",\n border: \"none\",\n color: \"#fff\",\n cursor: \"pointer\",\n fontSize: 18,\n lineHeight: 1,\n padding: 0,\n opacity: 0.8,\n }}\n >\n ×\n </button>\n </div>\n );\n}\n\nfunction getInitials(name?: string, email?: string): string {\n if (name) {\n const parts = name.trim().split(/\\s+/);\n if (parts.length >= 2) {\n return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();\n }\n return name.slice(0, 2).toUpperCase();\n }\n if (email) {\n return email.slice(0, 2).toUpperCase();\n }\n return \"?\";\n}\n\nfunction stringToColor(str: string): string {\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n hash = str.charCodeAt(i) + ((hash << 5) - hash);\n }\n const colors = [\n \"#1976d2\", \"#388e3c\", \"#d32f2f\", \"#7b1fa2\",\n \"#c2185b\", \"#0288d1\", \"#00796b\", \"#f57c00\",\n ];\n return colors[Math.abs(hash) % colors.length];\n}\n\nexport interface UserButtonProps {\n size?: \"small\" | \"medium\" | \"large\";\n}\n\nexport function UserButton({ size = \"medium\" }: UserButtonProps) {\n const { snapshot, logout, refresh, readyInfo } = useAppKit();\n const [open, setOpen] = useState(false);\n const [loggingOut, setLoggingOut] = useState(false);\n\n const account = snapshot?.appData?.account;\n const initials = getInitials(account?.name, account?.email);\n const avatarColor = stringToColor(account?.email || \"user\");\n\n const sizeMap = { small: 32, medium: 40, large: 48 };\n const fontSizeMap = { small: 14, medium: 16, large: 20 };\n const avatarSize = sizeMap[size];\n\n const handleLogout = async () => {\n setLoggingOut(true);\n try {\n await logout();\n } finally {\n setLoggingOut(false);\n setOpen(false);\n }\n };\n\n return (\n <>\n <button\n onClick={() => setOpen(true)}\n aria-label=\"Open profile\"\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: avatarSize,\n height: avatarSize,\n borderRadius: \"50%\",\n backgroundColor: avatarColor,\n color: \"#fff\",\n border: \"none\",\n cursor: \"pointer\",\n fontSize: fontSizeMap[size],\n fontWeight: 600,\n fontFamily: \"inherit\",\n padding: 0,\n }}\n >\n {initials}\n </button>\n\n {open && (\n <ProfileModal\n account={account}\n onClose={() => setOpen(false)}\n onLogout={handleLogout}\n loggingOut={loggingOut}\n avatarColor={avatarColor}\n initials={initials}\n baseURL={readyInfo?.baseURL}\n jwtToken={snapshot?.jwtToken}\n onNameUpdated={refresh}\n />\n )}\n </>\n );\n}\n\ninterface ProfileModalProps {\n account?: { email?: string; name?: string };\n onClose: () => void;\n onLogout: () => void;\n loggingOut: boolean;\n avatarColor: string;\n initials: string;\n baseURL?: string;\n jwtToken?: string | null;\n onNameUpdated: () => void;\n}\n\nfunction ProfileModal({\n account,\n onClose,\n onLogout,\n loggingOut,\n avatarColor,\n initials,\n baseURL,\n jwtToken,\n onNameUpdated,\n}: ProfileModalProps) {\n const [editing, setEditing] = useState(false);\n const [editName, setEditName] = useState(account?.name || \"\");\n const [saving, setSaving] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [toast, setToast] = useState<ToastType>(null);\n\n const clearToast = useCallback(() => setToast(null), []);\n\n useEffect(() => {\n setEditName(account?.name || \"\");\n setEditing(false);\n setError(null);\n }, [account?.name]);\n\n const handleSave = async () => {\n const trimmed = editName.trim();\n if (!trimmed) {\n setError(\"Display name is required\");\n return;\n }\n if (trimmed.length > 200) {\n setError(\"Display name is too long\");\n return;\n }\n if (trimmed === account?.name) {\n setEditing(false);\n return;\n }\n\n setSaving(true);\n setError(null);\n\n try {\n const res = await fetch(`${baseURL}/a/profile/display-name`, {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${jwtToken}`,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ displayName: trimmed }),\n });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(text || \"Failed to update name\");\n }\n setEditing(false);\n onNameUpdated();\n setToast({ message: \"Display name updated\", type: \"success\" });\n } catch (err: any) {\n const msg = err.message || \"Failed to update name\";\n setError(msg);\n setToast({ message: msg, type: \"error\" });\n } finally {\n setSaving(false);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n handleSave();\n } else if (e.key === \"Escape\") {\n setEditing(false);\n setEditName(account?.name || \"\");\n setError(null);\n }\n };\n\n return (\n <div\n style={{\n position: \"fixed\",\n inset: 0,\n zIndex: 9999,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n {/* Backdrop */}\n <div\n onClick={onClose}\n style={{\n position: \"absolute\",\n inset: 0,\n backgroundColor: \"rgba(0, 0, 0, 0.5)\",\n }}\n />\n\n {/* Modal */}\n <div\n style={{\n position: \"relative\",\n backgroundColor: \"#fff\",\n borderRadius: 12,\n boxShadow: \"0 8px 32px rgba(0,0,0,0.2)\",\n width: \"100%\",\n maxWidth: 360,\n margin: 16,\n overflow: \"hidden\",\n }}\n >\n {/* Header */}\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n padding: \"16px 20px\",\n borderBottom: \"1px solid #eee\",\n }}\n >\n <h2 style={{ margin: 0, fontSize: 18, fontWeight: 600 }}>Profile</h2>\n <button\n onClick={onClose}\n style={{\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n padding: 4,\n fontSize: 20,\n lineHeight: 1,\n color: \"#666\",\n }}\n >\n ×\n </button>\n </div>\n\n {/* Content */}\n <div style={{ padding: 20 }}>\n {/* Avatar and name */}\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 16, marginBottom: 20 }}>\n <div\n style={{\n width: 64,\n height: 64,\n borderRadius: \"50%\",\n backgroundColor: avatarColor,\n color: \"#fff\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontSize: 24,\n fontWeight: 600,\n flexShrink: 0,\n }}\n >\n {initials}\n </div>\n <div style={{ minWidth: 0, flex: 1 }}>\n <div style={{ fontSize: 18, fontWeight: 600, marginBottom: 2 }}>\n {account?.name || \"User\"}\n </div>\n <div\n style={{\n fontSize: 14,\n color: \"#666\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {account?.email}\n </div>\n </div>\n </div>\n\n <hr style={{ border: \"none\", borderTop: \"1px solid #eee\", margin: \"16px 0\" }} />\n\n {/* Error */}\n {error && (\n <div\n style={{\n padding: \"10px 14px\",\n marginBottom: 16,\n backgroundColor: \"#ffebee\",\n color: \"#c62828\",\n borderRadius: 6,\n fontSize: 14,\n }}\n >\n {error}\n </div>\n )}\n\n {/* Account details */}\n <div style={{ marginBottom: 16 }}>\n <div style={{ display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", marginBottom: 4 }}>\n <div style={{ fontSize: 12, color: \"#888\", fontWeight: 600 }}>\n Display Name\n </div>\n {!editing && (\n <button\n onClick={() => setEditing(true)}\n style={{\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n padding: 2,\n fontSize: 12,\n color: \"#1976d2\",\n }}\n >\n Edit\n </button>\n )}\n </div>\n {editing ? (\n <div style={{ display: \"flex\", gap: 8 }}>\n <input\n type=\"text\"\n value={editName}\n onChange={(e) => setEditName(e.target.value)}\n onKeyDown={handleKeyDown}\n disabled={saving}\n autoFocus\n placeholder=\"Enter display name\"\n style={{\n flex: 1,\n padding: \"8px 12px\",\n fontSize: 14,\n border: `1px solid ${error ? \"#d32f2f\" : \"#ddd\"}`,\n borderRadius: 6,\n outline: \"none\",\n }}\n />\n <button\n onClick={handleSave}\n disabled={saving}\n style={{\n padding: \"8px 14px\",\n fontSize: 14,\n backgroundColor: \"#1976d2\",\n color: \"#fff\",\n border: \"none\",\n borderRadius: 6,\n cursor: saving ? \"not-allowed\" : \"pointer\",\n opacity: saving ? 0.6 : 1,\n }}\n >\n {saving ? \"…\" : \"Save\"}\n </button>\n </div>\n ) : (\n <div style={{ fontSize: 15 }}>{account?.name || \"—\"}</div>\n )}\n </div>\n <div style={{ marginBottom: 20 }}>\n <div style={{ fontSize: 12, color: \"#888\", fontWeight: 600, marginBottom: 4 }}>\n Email\n </div>\n <div style={{ fontSize: 15 }}>{account?.email || \"—\"}</div>\n </div>\n\n <hr style={{ border: \"none\", borderTop: \"1px solid #eee\", margin: \"16px 0\" }} />\n\n {/* Logout button */}\n <button\n onClick={onLogout}\n disabled={loggingOut}\n style={{\n width: \"100%\",\n padding: \"10px 16px\",\n fontSize: 15,\n fontWeight: 500,\n color: \"#d32f2f\",\n backgroundColor: \"#fff\",\n border: \"1px solid #d32f2f\",\n borderRadius: 8,\n cursor: loggingOut ? \"not-allowed\" : \"pointer\",\n opacity: loggingOut ? 0.6 : 1,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 8,\n }}\n >\n {loggingOut ? \"Logging out…\" : \"Log out\"}\n </button>\n </div>\n </div>\n\n <Toast toast={toast} onClose={clearToast} />\n </div>\n );\n}\n\nexport default UserButton;\n","// appkit-react/hooks.ts — convenience hooks for common data access\nimport { useAppKit } from \"./AppKit\";\nimport type { AppKitAccount, AppKitProjectAccess, AppKitFeatureFlag, AppKitConfigValue } from \"./types\";\n\n/**\n * Returns the authenticated user's account, or null if not authenticated.\n *\n * ```tsx\n * const user = useUser();\n * if (!user) return <p>Not logged in</p>;\n * return <p>Hello, {user.name || user.email}</p>;\n * ```\n */\nexport function useUser(): AppKitAccount | null {\n const { snapshot } = useAppKit();\n return snapshot?.appData?.account ?? null;\n}\n\n/**\n * Returns the current project access info (name, roles, permissions), or null.\n */\nexport function useProject(): AppKitProjectAccess | null {\n const { snapshot } = useAppKit();\n return snapshot?.appData?.project ?? null;\n}\n\n/**\n * Returns the user's roles in the current project.\n *\n * ```tsx\n * const roles = useRoles(); // [\"admin\", \"editor\"]\n * ```\n */\nexport function useRoles(): string[] {\n const { snapshot } = useAppKit();\n return snapshot?.appData?.project?.roles ?? [];\n}\n\n/**\n * Returns the user's permissions in the current project.\n *\n * ```tsx\n * const permissions = usePermissions(); // [\"read\", \"write\", \"delete\"]\n * ```\n */\nexport function usePermissions(): string[] {\n const { snapshot } = useAppKit();\n return snapshot?.appData?.project?.permissions ?? [];\n}\n\n/**\n * Returns true if the user has the given permission.\n *\n * ```tsx\n * const canEdit = usePermission(\"edit\"); // true\n * ```\n */\nexport function usePermission(permission: string): boolean {\n const perms = usePermissions();\n return perms.includes(permission);\n}\n\n/**\n * Returns true if the user has the given role.\n *\n * ```tsx\n * const isAdmin = useRole(\"admin\"); // true\n * ```\n */\nexport function useRole(role: string): boolean {\n const roles = useRoles();\n return roles.includes(role);\n}\n\n/**\n * Returns all feature flags for the current app/environment.\n *\n * ```tsx\n * const flags = useFeatureFlags(); // [{ key: \"dark-mode\", enabled: true }]\n * ```\n */\nexport function useFeatureFlags(): AppKitFeatureFlag[] {\n const { snapshot } = useAppKit();\n return (snapshot?.appData?.featureFlags ?? []) as AppKitFeatureFlag[];\n}\n\n/**\n * Returns whether a specific feature flag is enabled.\n *\n * ```tsx\n * const darkMode = useFeatureFlag(\"dark-mode\"); // true\n * ```\n */\nexport function useFeatureFlag(key: string): boolean {\n const flags = useFeatureFlags();\n const flag = flags.find((f) => f.key === key);\n return flag?.enabled ?? false;\n}\n\n/**\n * Returns all config values for the current app/environment.\n *\n * ```tsx\n * const config = useConfig(); // [{ key: \"api-url\", type: \"string\", value: \"https://...\" }]\n * ```\n */\nexport function useConfig(): AppKitConfigValue[] {\n const { snapshot } = useAppKit();\n return (snapshot?.appData?.config ?? []) as AppKitConfigValue[];\n}\n\n/**\n * Returns a specific config value by key, or the fallback if not found.\n *\n * ```tsx\n * const apiUrl = useConfigValue(\"api-url\"); // \"https://api.example.com\"\n * const limit = useConfigValue(\"max-items\", 100); // 100 if not set\n * ```\n */\nexport function useConfigValue<T = any>(key: string, fallback?: T): T | undefined {\n const config = useConfig();\n const entry = config.find((c) => c.key === key);\n return entry?.value !== undefined ? entry.value : fallback;\n}\n\n/**\n * Returns the JWT token for making authenticated API calls.\n *\n * ```tsx\n * const token = useToken();\n * fetch(\"/api/data\", { headers: { Authorization: `Bearer ${token}` } });\n * ```\n */\nexport function useToken(): string | null {\n const { snapshot } = useAppKit();\n return snapshot?.jwtToken ?? null;\n}\n","import { isSafeOrigin } from \"./runtime\";\n\ntype AppResourceData = {\n imagesBaseURL: string | null;\n filesBaseURL: string | null;\n};\n\ntype CacheEntry = { data: AppResourceData; fetchedAt: number };\nconst cache = new Map<string, CacheEntry>();\nconst CACHE_TTL = 5 * 60 * 1000; // 5 minutes\nconst inflight = new Map<string, Promise<AppResourceData>>();\n\nexport async function fetchAppResource(\n workspaceBaseURL: string,\n appId: string,\n): Promise<AppResourceData> {\n const key = `${workspaceBaseURL}|${appId}`;\n\n const cached = cache.get(key);\n if (cached && Date.now() - cached.fetchedAt < CACHE_TTL) return cached.data;\n\n const pending = inflight.get(key);\n if (pending) return pending;\n\n const p = fetch(`${workspaceBaseURL}/apps/${appId}`)\n .then((res) => {\n if (!res.ok) throw new Error(`HTTP ${res.status}`);\n return res.json();\n })\n .then((data) => {\n const rawImages: string | null = data.imagesBaseURL || null;\n const rawFiles: string | null = data.filesBaseURL || null;\n const result: AppResourceData = {\n imagesBaseURL: rawImages && isSafeOrigin(rawImages) ? rawImages : null,\n filesBaseURL: rawFiles && isSafeOrigin(rawFiles) ? rawFiles : null,\n };\n cache.set(key, { data: result, fetchedAt: Date.now() });\n inflight.delete(key);\n return result;\n })\n .catch((err) => {\n inflight.delete(key);\n throw err;\n });\n\n inflight.set(key, p);\n return p;\n}\n","import { useEffect, useState, useRef } from \"react\";\nimport { useAppKit } from \"../AppKit\";\nimport { fetchAppResource } from \"../appResource\";\n\ntype ImagesConfig = {\n imagesBaseURL: string | null;\n loading: boolean;\n error: string | null;\n};\n\nexport function useImagesConfig(): ImagesConfig {\n const { snapshot } = useAppKit();\n const [imagesBaseURL, setImagesBaseURL] = useState<string | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const fetchedRef = useRef(\"\");\n const retryCountRef = useRef(0);\n const maxRetries = 3;\n const retryDelayMs = 5000;\n\n // Read from snapshot instead of readyInfo to avoid a race condition\n // where onReady hasn't fired yet but the snapshot already has the info.\n const workspaceBaseURL: string | undefined = snapshot?.workspaceBaseURL;\n const appId: string | undefined = snapshot?.appId;\n\n // Reset fetchedRef when deps change so the hook can retry with new values\n useEffect(() => {\n const cacheKey = workspaceBaseURL && appId ? `${workspaceBaseURL}|${appId}` : \"\";\n if (fetchedRef.current !== cacheKey) {\n fetchedRef.current = \"\";\n retryCountRef.current = 0;\n }\n }, [workspaceBaseURL, appId]);\n\n useEffect(() => {\n if (!workspaceBaseURL || !appId) {\n setLoading(false);\n return;\n }\n\n const cacheKey = `${workspaceBaseURL}|${appId}`;\n\n if (fetchedRef.current === cacheKey) return;\n\n let cancelled = false;\n let retryTimer: ReturnType<typeof setTimeout> | null = null;\n setLoading(true);\n setError(null);\n\n const doFetch = () => {\n fetchAppResource(workspaceBaseURL, appId)\n .then((data) => {\n if (cancelled) return;\n setImagesBaseURL(data.imagesBaseURL);\n setLoading(false);\n fetchedRef.current = cacheKey;\n retryCountRef.current = 0;\n })\n .catch((err) => {\n if (cancelled) return;\n retryCountRef.current += 1;\n if (retryCountRef.current < maxRetries) {\n retryTimer = setTimeout(doFetch, retryDelayMs);\n } else {\n setError(err.message);\n setLoading(false);\n }\n });\n };\n\n doFetch();\n\n return () => {\n cancelled = true;\n if (retryTimer != null) clearTimeout(retryTimer);\n };\n }, [workspaceBaseURL, appId]);\n\n return { imagesBaseURL, loading, error };\n}\n","import type {\n ImageResource,\n ImageListResponse,\n ImageUploadOptions,\n ImageUpdateOptions,\n} from \"../types\";\n\ntype AuthParams = {\n imagesBaseURL: string;\n appId: string;\n jwtToken: string;\n};\n\nfunction headers(jwt: string): Record<string, string> {\n return { Authorization: `Bearer ${jwt}` };\n}\n\nfunction apiBase(p: AuthParams): string {\n return `${p.imagesBaseURL}/api/${encodeURIComponent(p.appId)}`;\n}\n\nexport async function listImages(\n p: AuthParams,\n opts?: { page?: number; pageSize?: number; q?: string; refType?: string; refId?: string },\n): Promise<ImageListResponse> {\n const url = new URL(`${apiBase(p)}/images`);\n if (opts?.page != null) url.searchParams.set(\"page\", String(opts.page));\n if (opts?.pageSize != null)\n url.searchParams.set(\"pageSize\", String(opts.pageSize));\n if (opts?.q) url.searchParams.set(\"q\", opts.q);\n if (opts?.refType) url.searchParams.set(\"refType\", opts.refType);\n if (opts?.refId) url.searchParams.set(\"refId\", opts.refId);\n\n const res = await fetch(url.toString(), { headers: headers(p.jwtToken) });\n if (!res.ok) throw new Error(`List images failed: HTTP ${res.status}`);\n return res.json();\n}\n\nexport async function getImage(\n p: AuthParams,\n imageId: string,\n): Promise<ImageResource> {\n const res = await fetch(`${apiBase(p)}/images/${encodeURIComponent(imageId)}`, {\n headers: headers(p.jwtToken),\n });\n if (!res.ok) throw new Error(`Get image failed: HTTP ${res.status}`);\n return res.json();\n}\n\nexport function uploadImage(\n p: AuthParams,\n opts: ImageUploadOptions,\n onProgress?: (pct: number, loaded: number, total: number) => void,\n signal?: AbortSignal,\n): Promise<{ status: number; body: any }> {\n return new Promise((resolve, reject) => {\n const xhr = new XMLHttpRequest();\n xhr.open(\"POST\", `${apiBase(p)}/upload`);\n xhr.setRequestHeader(\"Authorization\", `Bearer ${p.jwtToken}`);\n\n if (signal) {\n signal.addEventListener(\"abort\", () => xhr.abort(), { once: true });\n }\n\n xhr.upload.onprogress = (e) => {\n if (e.lengthComputable && onProgress) {\n const pct = Math.round((e.loaded / e.total) * 100);\n onProgress(pct, e.loaded, e.total);\n }\n };\n\n xhr.onload = () => {\n let body = null;\n try {\n body = JSON.parse(xhr.responseText);\n } catch {\n // no json body (e.g. 204)\n }\n resolve({ status: xhr.status, body });\n };\n\n xhr.onerror = () => reject(new Error(\"Upload network error\"));\n xhr.onabort = () => reject(new Error(\"Upload aborted\"));\n\n const fd = new FormData();\n fd.append(\"file\", opts.file);\n fd.append(\"title\", opts.title);\n if (opts.description) fd.append(\"description\", opts.description);\n if (opts.variants) fd.append(\"variants\", opts.variants);\n if (opts.refType) fd.append(\"refType\", opts.refType);\n if (opts.refId) fd.append(\"refId\", opts.refId);\n xhr.send(fd);\n });\n}\n\nexport async function updateImage(\n p: AuthParams,\n imageId: string,\n opts: ImageUpdateOptions,\n): Promise<void> {\n const res = await fetch(`${apiBase(p)}/images/${encodeURIComponent(imageId)}`, {\n method: \"POST\",\n headers: { ...headers(p.jwtToken), \"Content-Type\": \"application/json\" },\n body: JSON.stringify(opts),\n });\n if (!res.ok) throw new Error(`Update image failed: HTTP ${res.status}`);\n}\n\nexport async function deleteImage(\n p: AuthParams,\n imageId: string,\n): Promise<void> {\n const res = await fetch(`${apiBase(p)}/images/${encodeURIComponent(imageId)}`, {\n method: \"DELETE\",\n headers: headers(p.jwtToken),\n });\n if (!res.ok) throw new Error(`Delete image failed: HTTP ${res.status}`);\n}\n","import { useState, useEffect, useCallback, useRef } from \"react\";\nimport { useAppKit } from \"../AppKit\";\nimport { useImagesConfig } from \"./config\";\nimport { listImages, deleteImage, updateImage } from \"./api\";\nimport type { ImageResource, ImageUpdateOptions } from \"../types\";\n\nexport type UseImagesOptions = {\n page?: number;\n pageSize?: number;\n q?: string;\n refType?: string;\n refId?: string;\n enabled?: boolean;\n};\n\nexport type UseImagesReturn = {\n images: ImageResource[];\n page: number;\n pageSize: number;\n total: number;\n pageCount: number;\n loading: boolean;\n error: string | null;\n refetch: () => void;\n setPage: (page: number) => void;\n setQuery: (q: string) => void;\n available: boolean;\n removeImage: (imageId: string) => Promise<void>;\n updateImage: (imageId: string, opts: ImageUpdateOptions) => Promise<void>;\n};\n\nexport function useImages(opts?: UseImagesOptions): UseImagesReturn {\n const { snapshot } = useAppKit();\n const { imagesBaseURL, loading: configLoading } = useImagesConfig();\n\n const [images, setImages] = useState<ImageResource[]>([]);\n const [page, setPageState] = useState(opts?.page ?? 0);\n const [pageSize] = useState(opts?.pageSize ?? 50);\n const [total, setTotal] = useState(0);\n const [pageCount, setPageCount] = useState(0);\n const [query, setQueryState] = useState(opts?.q ?? \"\");\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const fetchIdRef = useRef(0);\n const enabled = opts?.enabled !== false;\n const jwtToken = snapshot?.jwtToken as string | undefined;\n const appId = snapshot?.appId as string | undefined;\n const available = !!imagesBaseURL;\n\n const refType = opts?.refType;\n const refId = opts?.refId;\n\n const doFetch = useCallback(() => {\n if (!imagesBaseURL || !appId || !jwtToken || !enabled) return;\n\n const id = ++fetchIdRef.current;\n setLoading(true);\n setError(null);\n\n listImages(\n { imagesBaseURL, appId, jwtToken },\n { page, pageSize, q: query || undefined, refType, refId },\n )\n .then((res) => {\n if (id !== fetchIdRef.current) return;\n setImages(res.images ?? []);\n setTotal(res.total);\n setPageCount(res.pageCount);\n setLoading(false);\n })\n .catch((err) => {\n if (id !== fetchIdRef.current) return;\n setError(err.message);\n setLoading(false);\n });\n }, [imagesBaseURL, appId, jwtToken, page, pageSize, query, refType, refId, enabled]);\n\n useEffect(() => {\n doFetch();\n return () => {\n fetchIdRef.current++;\n };\n }, [doFetch]);\n\n const setPage = useCallback((p: number) => setPageState(p), []);\n const setQuery = useCallback((q: string) => {\n setQueryState(q);\n setPageState(0);\n }, []);\n\n const removeImage = useCallback(\n async (imageId: string) => {\n if (!imagesBaseURL || !appId || !jwtToken) return;\n await deleteImage({ imagesBaseURL, appId, jwtToken }, imageId);\n doFetch();\n },\n [imagesBaseURL, appId, jwtToken, doFetch],\n );\n\n const doUpdateImage = useCallback(\n async (imageId: string, updateOpts: ImageUpdateOptions) => {\n if (!imagesBaseURL || !appId || !jwtToken) return;\n await updateImage(\n { imagesBaseURL, appId, jwtToken },\n imageId,\n updateOpts,\n );\n doFetch();\n },\n [imagesBaseURL, appId, jwtToken, doFetch],\n );\n\n return {\n images,\n page,\n pageSize,\n total,\n pageCount,\n loading: loading || configLoading,\n error,\n refetch: doFetch,\n setPage,\n setQuery,\n available,\n removeImage,\n updateImage: doUpdateImage,\n };\n}\n","import { useState, useEffect, useCallback, useRef } from \"react\";\nimport { useAppKit } from \"../AppKit\";\nimport { useImagesConfig } from \"./config\";\nimport { uploadImage } from \"./api\";\nimport type { UploadProgress, ImageUploadOptions } from \"../types\";\n\nexport type UseImageUploadReturn = {\n upload: (opts: ImageUploadOptions) => Promise<void>;\n cancel: () => void;\n progress: UploadProgress;\n reset: () => void;\n available: boolean;\n};\n\nconst IDLE: UploadProgress = {\n status: \"idle\",\n progress: 0,\n bytesUploaded: 0,\n bytesTotal: 0,\n error: null,\n};\n\nexport function useImageUpload(): UseImageUploadReturn {\n const { snapshot } = useAppKit();\n const { imagesBaseURL } = useImagesConfig();\n\n const [progress, setProgress] = useState<UploadProgress>(IDLE);\n const abortRef = useRef<AbortController | null>(null);\n\n const jwtToken = snapshot?.jwtToken as string | undefined;\n const appId = snapshot?.appId as string | undefined;\n const available = !!imagesBaseURL;\n\n // Abort upload if auth is lost\n useEffect(() => {\n if (!jwtToken && progress.status === \"uploading\") {\n abortRef.current?.abort();\n }\n }, [jwtToken, progress.status]);\n\n const upload = useCallback(\n async (opts: ImageUploadOptions) => {\n if (!imagesBaseURL || !appId || !jwtToken) {\n setProgress({\n ...IDLE,\n status: \"error\",\n error: \"Images service not available\",\n });\n return;\n }\n\n abortRef.current?.abort();\n const controller = new AbortController();\n abortRef.current = controller;\n\n setProgress({\n status: \"uploading\",\n progress: 0,\n bytesUploaded: 0,\n bytesTotal: opts.file.size,\n error: null,\n });\n\n try {\n const result = await uploadImage(\n { imagesBaseURL, appId, jwtToken },\n opts,\n (pct, loaded, total) => {\n setProgress((prev) => ({\n ...prev,\n progress: pct,\n bytesUploaded: loaded,\n bytesTotal: total,\n }));\n },\n controller.signal,\n );\n\n if (result.status === 204) {\n setProgress({\n status: \"success\",\n progress: 100,\n bytesUploaded: opts.file.size,\n bytesTotal: opts.file.size,\n error: null,\n });\n } else if (result.status === 409) {\n setProgress({\n status: \"conflict\",\n progress: 100,\n bytesUploaded: opts.file.size,\n bytesTotal: opts.file.size,\n error: result.body?.message || \"An image with identical content already exists\",\n existingImageId: result.body?.imageId,\n });\n } else if (result.status === 413) {\n throw new Error(\"File exceeds 4MB limit\");\n } else if (result.status === 415) {\n throw new Error(\n \"Unsupported file type. Allowed: PNG, JPEG, GIF, WEBP, AVIF\",\n );\n } else if (result.status === 429) {\n throw new Error(result.body?.message || \"Storage limit reached\");\n } else {\n throw new Error(`Upload failed: HTTP ${result.status}`);\n }\n } catch (err: any) {\n if (err.message === \"Upload aborted\") return;\n setProgress({\n status: \"error\",\n progress: 0,\n bytesUploaded: 0,\n bytesTotal: opts.file.size,\n error: err.message || \"Upload failed\",\n });\n }\n },\n [imagesBaseURL, appId, jwtToken],\n );\n\n const cancel = useCallback(() => {\n abortRef.current?.abort();\n setProgress(IDLE);\n }, []);\n\n const reset = useCallback(() => {\n setProgress(IDLE);\n }, []);\n\n return { upload, cancel, progress, reset, available };\n}\n","import { useState, useEffect, useCallback, useRef } from \"react\";\nimport { useAppKit } from \"../AppKit\";\nimport { useImagesConfig } from \"./config\";\nimport { getImage } from \"./api\";\nimport type { ImageResource } from \"../types\";\n\nexport type UseImageOptions = {\n enabled?: boolean;\n};\n\nexport type UseImageReturn = {\n image: ImageResource | null;\n loading: boolean;\n error: string | null;\n refetch: () => void;\n available: boolean;\n};\n\nexport function useImage(\n imageId: string | null | undefined,\n opts?: UseImageOptions,\n): UseImageReturn {\n const { snapshot } = useAppKit();\n const { imagesBaseURL, loading: configLoading } = useImagesConfig();\n\n const [image, setImage] = useState<ImageResource | null>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const fetchIdRef = useRef(0);\n const enabled = opts?.enabled !== false;\n const jwtToken = snapshot?.jwtToken as string | undefined;\n const appId = snapshot?.appId as string | undefined;\n const available = !!imagesBaseURL;\n\n const doFetch = useCallback(() => {\n if (!imagesBaseURL || !appId || !jwtToken || !imageId || !enabled) return;\n\n const id = ++fetchIdRef.current;\n setLoading(true);\n setError(null);\n\n getImage({ imagesBaseURL, appId, jwtToken }, imageId)\n .then((res) => {\n if (id !== fetchIdRef.current) return;\n setImage(res);\n setLoading(false);\n })\n .catch((err) => {\n if (id !== fetchIdRef.current) return;\n setError(err.message);\n setLoading(false);\n });\n }, [imagesBaseURL, appId, jwtToken, imageId, enabled]);\n\n useEffect(() => {\n doFetch();\n return () => {\n fetchIdRef.current++;\n };\n }, [doFetch]);\n\n return {\n image,\n loading: loading || configLoading,\n error,\n refetch: doFetch,\n available,\n };\n}\n","import React, { useState, useRef, useCallback, useEffect } from \"react\";\nimport { useImageUpload } from \"./useImageUpload\";\nimport type { ImageUploadOptions } from \"../types\";\n\nexport interface ImageUploaderProps {\n onUpload?: () => void;\n onError?: (error: string) => void;\n defaultTitle?: string;\n defaultDescription?: string;\n variants?: string;\n showFields?: boolean;\n showVariantPicker?: boolean;\n accept?: string;\n maxSize?: number;\n refType?: string;\n refId?: string;\n className?: string;\n style?: React.CSSProperties;\n label?: string;\n disabled?: boolean;\n}\n\nconst FONT =\n 'ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif';\nconst ACCEPT_DEFAULT =\n \"image/png,image/jpeg,image/gif,image/webp,image/avif\";\nconst MAX_SIZE_DEFAULT = 4 * 1024 * 1024;\n\nconst VARIANT_PRESETS: { key: string; label: string; desc: string; required?: boolean }[] = [\n { key: \"sq200\", label: \"sq200\", desc: \"Thumbnail (200x200)\", required: true },\n { key: \"sq400\", label: \"sq400\", desc: \"Square (400x400)\" },\n { key: \"w400\", label: \"w400\", desc: \"Small (400w)\" },\n { key: \"w800\", label: \"w800\", desc: \"Medium (800w)\" },\n { key: \"w1200\", label: \"w1200\", desc: \"Large (1200w)\" },\n { key: \"w1600\", label: \"w1600\", desc: \"Retina (1600w)\" },\n { key: \"w1920\", label: \"w1920\", desc: \"Full HD (1920w)\" },\n];\n\nconst DEFAULT_VARIANTS = new Set([\"sq200\", \"w400\", \"w800\"]);\n\nfunction formatSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nfunction parseVariants(csv: string | undefined): Set<string> {\n if (!csv) return new Set(DEFAULT_VARIANTS);\n return new Set(csv.split(\",\").map((s) => s.trim()).filter(Boolean));\n}\n\nexport function ImageUploader({\n onUpload,\n onError,\n defaultTitle,\n defaultDescription = \"\",\n variants: variantsProp,\n showFields = true,\n showVariantPicker = false,\n accept = ACCEPT_DEFAULT,\n maxSize = MAX_SIZE_DEFAULT,\n refType,\n refId,\n className,\n style,\n label = \"Drop an image here or click to select\",\n disabled = false,\n}: ImageUploaderProps) {\n const { upload, cancel, progress, reset, available } = useImageUpload();\n const fileInputRef = useRef<HTMLInputElement>(null);\n const [dragOver, setDragOver] = useState(false);\n const [title, setTitle] = useState(defaultTitle ?? \"\");\n const [description, setDescription] = useState(defaultDescription);\n const [selectedFile, setSelectedFile] = useState<File | null>(null);\n const [validationError, setValidationError] = useState<string | null>(null);\n const [selectedVariants, setSelectedVariants] = useState<Set<string>>(\n () => parseVariants(variantsProp),\n );\n const [previewURL, setPreviewURL] = useState<string | null>(null);\n const [showAdvanced, setShowAdvanced] = useState(false);\n const [showSuccess, setShowSuccess] = useState(false);\n\n // Create/revoke object URL for image preview\n useEffect(() => {\n if (!selectedFile) {\n setPreviewURL(null);\n return;\n }\n const url = URL.createObjectURL(selectedFile);\n setPreviewURL(url);\n return () => URL.revokeObjectURL(url);\n }, [selectedFile]);\n\n const handleFile = useCallback(\n (file: File) => {\n setValidationError(null);\n if (file.size > maxSize) {\n setValidationError(\n `File too large (${(file.size / 1024 / 1024).toFixed(1)}MB). Max ${(maxSize / 1024 / 1024).toFixed(0)}MB.`,\n );\n return;\n }\n setSelectedFile(file);\n if (!title) {\n setTitle(file.name.replace(/\\.[^.]+$/, \"\"));\n }\n },\n [maxSize, title],\n );\n\n const handleDrop = useCallback(\n (e: React.DragEvent) => {\n e.preventDefault();\n setDragOver(false);\n const file = e.dataTransfer.files[0];\n if (file) handleFile(file);\n },\n [handleFile],\n );\n\n const toggleVariant = useCallback((key: string) => {\n setSelectedVariants((prev) => {\n const next = new Set(prev);\n if (next.has(key)) next.delete(key);\n else next.add(key);\n // sq200 always required\n next.add(\"sq200\");\n return next;\n });\n }, []);\n\n const handleSubmit = useCallback(async () => {\n if (!selectedFile || !title.trim()) return;\n reset();\n const variantCsv = showVariantPicker\n ? Array.from(selectedVariants).join(\",\")\n : variantsProp;\n const opts: ImageUploadOptions = {\n file: selectedFile,\n title: title.trim(),\n description: description.trim() || undefined,\n variants: variantCsv,\n refType,\n refId,\n };\n await upload(opts);\n }, [selectedFile, title, description, variantsProp, showVariantPicker, selectedVariants, refType, refId, upload, reset]);\n\n // Watch for upload completion\n const prevStatus = useRef(progress.status);\n useEffect(() => {\n if (prevStatus.current === progress.status) return;\n prevStatus.current = progress.status;\n if (progress.status === \"success\") {\n setSelectedFile(null);\n setTitle(defaultTitle ?? \"\");\n setDescription(defaultDescription);\n setShowSuccess(true);\n onUpload?.();\n }\n if (progress.status === \"conflict\") {\n setSelectedFile(null);\n setTitle(defaultTitle ?? \"\");\n setDescription(defaultDescription);\n }\n if (progress.status === \"error\" && progress.error) {\n onError?.(progress.error);\n }\n }, [progress.status, progress.error, onUpload, onError, defaultTitle, defaultDescription]);\n\n // Auto-dismiss success toast\n useEffect(() => {\n if (!showSuccess) return;\n const t = setTimeout(() => setShowSuccess(false), 4000);\n return () => clearTimeout(t);\n }, [showSuccess]);\n\n if (!available) return null;\n\n const isUploading = progress.status === \"uploading\";\n const isDisabled = disabled || isUploading;\n\n return (\n <div className={className} style={{ fontFamily: FONT, ...style }}>\n {/* Drop zone */}\n <div\n onDragEnter={(e) => {\n e.preventDefault();\n setDragOver(true);\n }}\n onDragOver={(e) => {\n e.preventDefault();\n setDragOver(true);\n }}\n onDragLeave={() => setDragOver(false)}\n onDrop={handleDrop}\n onClick={() => !isDisabled && fileInputRef.current?.click()}\n style={{\n border: `2px dashed ${dragOver ? \"#1976d2\" : \"#ccc\"}`,\n borderRadius: 8,\n padding: \"24px 16px\",\n textAlign: \"center\",\n cursor: isDisabled ? \"default\" : \"pointer\",\n backgroundColor: dragOver ? \"#e3f2fd\" : \"#fafafa\",\n transition: \"all 0.15s ease\",\n opacity: isDisabled ? 0.6 : 1,\n }}\n >\n <input\n ref={fileInputRef}\n type=\"file\"\n accept={accept}\n style={{ display: \"none\" }}\n onChange={(e) => {\n const file = e.target.files?.[0];\n if (file) handleFile(file);\n e.target.value = \"\";\n }}\n />\n {!selectedFile && (\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#999\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ marginBottom: 6 }}>\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" />\n <polyline points=\"17 8 12 3 7 8\" />\n <line x1=\"12\" y1=\"3\" x2=\"12\" y2=\"15\" />\n </svg>\n )}\n <div style={{ fontSize: 14, color: \"#666\" }}>\n {selectedFile ? selectedFile.name : label}\n </div>\n {selectedFile && (\n <div style={{ fontSize: 12, color: \"#999\", marginTop: 4 }}>\n {(selectedFile.size / 1024).toFixed(0)} KB\n </div>\n )}\n </div>\n\n {/* Image preview */}\n {previewURL && selectedFile && (\n <div\n style={{\n marginTop: 12,\n borderRadius: 8,\n overflow: \"hidden\",\n backgroundColor: \"#f5f5f5\",\n textAlign: \"center\",\n }}\n >\n <img\n src={previewURL}\n alt={title || selectedFile.name}\n style={{\n maxWidth: \"100%\",\n maxHeight: 300,\n objectFit: \"contain\",\n display: \"block\",\n margin: \"0 auto\",\n }}\n />\n </div>\n )}\n\n {/* Validation error */}\n {validationError && (\n <div\n style={{ color: \"#d32f2f\", fontSize: 13, marginTop: 8 }}\n >\n {validationError}\n </div>\n )}\n\n {/* Title / Description fields */}\n {showFields && selectedFile && (\n <div style={{ marginTop: 12, display: \"flex\", flexDirection: \"column\", gap: 8 }}>\n <input\n type=\"text\"\n placeholder=\"Title\"\n value={title}\n onChange={(e) => setTitle(e.target.value)}\n disabled={isDisabled}\n maxLength={250}\n style={{\n padding: \"8px 12px\",\n borderRadius: 6,\n border: \"1px solid #ddd\",\n fontSize: 14,\n fontFamily: FONT,\n outline: \"none\",\n }}\n />\n <input\n type=\"text\"\n placeholder=\"Description (optional)\"\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n disabled={isDisabled}\n maxLength={500}\n style={{\n padding: \"8px 12px\",\n borderRadius: 6,\n border: \"1px solid #ddd\",\n fontSize: 14,\n fontFamily: FONT,\n outline: \"none\",\n }}\n />\n </div>\n )}\n\n {/* Advanced options (variant selection) */}\n {showVariantPicker && selectedFile && (\n <div style={{ marginTop: 12 }}>\n <button\n type=\"button\"\n onClick={() => setShowAdvanced(!showAdvanced)}\n style={{\n background: \"none\",\n border: \"none\",\n padding: 0,\n fontSize: 13,\n color: \"#666\",\n cursor: \"pointer\",\n fontFamily: FONT,\n display: \"flex\",\n alignItems: \"center\",\n gap: 4,\n }}\n >\n <span style={{\n display: \"inline-block\",\n transition: \"transform 0.15s ease\",\n transform: showAdvanced ? \"rotate(90deg)\" : \"rotate(0deg)\",\n fontSize: 10,\n }}>\n &#9654;\n </span>\n Advanced\n </button>\n {showAdvanced && (\n <div style={{ marginTop: 8 }}>\n <div style={{ fontSize: 12, color: \"#888\", marginBottom: 6 }}>Variants:</div>\n <div style={{ display: \"flex\", flexWrap: \"wrap\", gap: 6 }}>\n {VARIANT_PRESETS.map((v) => {\n const active = selectedVariants.has(v.key);\n return (\n <button\n key={v.key}\n type=\"button\"\n onClick={() => !v.required && toggleVariant(v.key)}\n disabled={isDisabled || v.required}\n title={v.desc}\n style={{\n padding: \"4px 10px\",\n borderRadius: 12,\n border: active ? \"1px solid #1976d2\" : \"1px solid #ccc\",\n backgroundColor: active ? \"#e3f2fd\" : \"#fff\",\n color: active ? \"#1976d2\" : \"#666\",\n fontSize: 12,\n fontFamily: FONT,\n cursor: v.required ? \"default\" : isDisabled ? \"default\" : \"pointer\",\n opacity: isDisabled ? 0.6 : v.required ? 0.8 : 1,\n }}\n >\n {v.label}\n </button>\n );\n })}\n </div>\n </div>\n )}\n </div>\n )}\n\n {/* Progress */}\n {isUploading && (\n <div style={{ marginTop: 12 }}>\n <div style={{ fontSize: 12, color: \"#666\", marginBottom: 4 }}>\n Uploading... — {Math.round(progress.progress)}%\n {progress.bytesTotal > 0 && (\n <> · {formatSize(progress.bytesUploaded)} / {formatSize(progress.bytesTotal)}</>\n )}\n </div>\n <div\n style={{\n height: 6,\n borderRadius: 3,\n backgroundColor: \"#e0e0e0\",\n overflow: \"hidden\",\n }}\n >\n <div\n style={{\n width: `${progress.progress}%`,\n height: \"100%\",\n backgroundColor: \"#1976d2\",\n transition: \"width 0.2s ease\",\n }}\n />\n </div>\n </div>\n )}\n\n {/* Upload / Cancel buttons */}\n {selectedFile && (\n <div style={{ marginTop: 12, display: \"flex\", gap: 8 }}>\n <button\n onClick={handleSubmit}\n disabled={isDisabled || !title.trim()}\n style={{\n padding: \"8px 20px\",\n borderRadius: 6,\n border: \"none\",\n backgroundColor: isDisabled ? \"#bbb\" : \"#1976d2\",\n color: \"#fff\",\n fontSize: 14,\n fontFamily: FONT,\n cursor: isDisabled ? \"default\" : \"pointer\",\n fontWeight: 500,\n }}\n >\n Upload\n </button>\n {isUploading && (\n <button\n onClick={cancel}\n style={{\n padding: \"8px 16px\",\n borderRadius: 6,\n border: \"1px solid #ddd\",\n backgroundColor: \"#fff\",\n fontSize: 14,\n fontFamily: FONT,\n cursor: \"pointer\",\n color: \"#666\",\n }}\n >\n Cancel\n </button>\n )}\n </div>\n )}\n\n {/* Error message */}\n {progress.status === \"error\" && progress.error && (\n <div style={{ color: \"#d32f2f\", fontSize: 13, marginTop: 8 }}>\n {progress.error}\n </div>\n )}\n\n {/* Conflict message */}\n {progress.status === \"conflict\" && (\n <div\n style={{\n marginTop: 12,\n padding: \"10px 14px\",\n borderRadius: 8,\n backgroundColor: \"#fff3e0\",\n border: \"1px solid #ffcc80\",\n color: \"#e65100\",\n fontSize: 13,\n fontFamily: FONT,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n }}\n >\n <span>{progress.error || \"An image with identical content already exists\"}</span>\n <button\n onClick={() => reset()}\n style={{\n background: \"none\",\n border: \"none\",\n color: \"#e65100\",\n cursor: \"pointer\",\n fontSize: 16,\n lineHeight: 1,\n padding: \"0 2px\",\n }}\n >\n &times;\n </button>\n </div>\n )}\n\n {/* Success toast */}\n {showSuccess && (\n <div\n style={{\n marginTop: 12,\n padding: \"10px 14px\",\n borderRadius: 8,\n backgroundColor: \"#e8f5e9\",\n border: \"1px solid #a5d6a7\",\n color: \"#2e7d32\",\n fontSize: 13,\n fontFamily: FONT,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n }}\n >\n <span>Image uploaded successfully</span>\n <button\n onClick={() => setShowSuccess(false)}\n style={{\n background: \"none\",\n border: \"none\",\n color: \"#2e7d32\",\n cursor: \"pointer\",\n fontSize: 16,\n lineHeight: 1,\n padding: \"0 2px\",\n }}\n >\n &times;\n </button>\n </div>\n )}\n </div>\n );\n}\n","import React, { useMemo, useState, useEffect } from \"react\";\nimport type { ImageResource, ImageVariant } from \"../types\";\n\nexport interface MrImageProps {\n image: ImageResource;\n width?: number;\n height?: number;\n variant?: string;\n alt?: string;\n className?: string;\n style?: React.CSSProperties;\n loading?: \"lazy\" | \"eager\";\n objectFit?: React.CSSProperties[\"objectFit\"];\n sizes?: string;\n onLoad?: () => void;\n onError?: () => void;\n}\n\nfunction pickVariant(\n variants: ImageVariant[],\n opts: { width?: number; height?: number; variant?: string },\n): ImageVariant | null {\n if (!variants || variants.length === 0) return null;\n\n if (opts.variant) {\n const exact = variants.find((v) => v.variant === opts.variant);\n if (exact) return exact;\n }\n\n if (!opts.width && !opts.height) {\n return variants.find((v) => v.variant === \"orig\") || variants[0];\n }\n\n const dpr =\n typeof window !== \"undefined\" ? window.devicePixelRatio || 1 : 1;\n const targetW = (opts.width || 0) * dpr;\n const targetH = (opts.height || 0) * dpr;\n const targetMax = Math.max(targetW, targetH);\n\n const candidates = variants\n .filter((v) => v.width > 0)\n .sort((a, b) => a.width - b.width);\n\n if (candidates.length === 0) return variants[0];\n\n for (const v of candidates) {\n if (v.width >= targetMax) return v;\n }\n\n return candidates[candidates.length - 1];\n}\n\nfunction buildSrcSet(variants: ImageVariant[]): string | undefined {\n const widthVariants = variants.filter(\n (v) => v.objectURL && v.width > 0 && v.variant !== \"orig\",\n );\n if (widthVariants.length <= 1) return undefined;\n\n return widthVariants\n .sort((a, b) => a.width - b.width)\n .map((v) => `${v.objectURL} ${v.width}w`)\n .join(\", \");\n}\n\nexport function MrImage({\n image,\n width,\n height,\n variant: variantName,\n alt,\n className,\n style,\n loading = \"lazy\",\n objectFit = \"cover\",\n sizes,\n onLoad,\n onError,\n}: MrImageProps) {\n const chosen = useMemo(\n () => pickVariant(image.variants, { width, height, variant: variantName }),\n [image.variants, width, height, variantName],\n );\n\n const srcSet = useMemo(() => {\n if (variantName) return undefined;\n return buildSrcSet(image.variants);\n }, [image.variants, variantName]);\n\n const [loaded, setLoaded] = useState(false);\n\n // Reset loaded state when the source URL changes\n const url = chosen?.objectURL;\n useEffect(() => {\n setLoaded(false);\n }, [url]);\n\n if (!chosen?.objectURL) {\n return (\n <div\n className={className}\n role=\"img\"\n aria-label={alt ?? image.title}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: \"#f0f0f0\",\n color: \"#bbb\",\n width,\n height,\n maxWidth: \"100%\",\n ...style,\n }}\n >\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\" />\n <circle cx=\"8.5\" cy=\"8.5\" r=\"1.5\" />\n <polyline points=\"21 15 16 10 5 21\" />\n </svg>\n </div>\n );\n }\n\n return (\n <img\n src={chosen.objectURL}\n srcSet={srcSet}\n sizes={sizes}\n alt={alt ?? image.title}\n width={width}\n height={height}\n className={className}\n loading={loading}\n onLoad={() => {\n setLoaded(true);\n onLoad?.();\n }}\n onError={onError}\n style={{\n objectFit,\n maxWidth: \"100%\",\n opacity: loaded ? 1 : 0,\n transition: \"opacity 0.2s ease\",\n backgroundColor: loaded ? undefined : \"#f0f0f0\",\n ...style,\n }}\n />\n );\n}\n","import React, { useState, useMemo, useCallback } from \"react\";\nimport type { ImageResource, ImageVariant } from \"../types\";\n\nexport interface ImageDetailsProps {\n image: ImageResource;\n onClose: () => void;\n onEdit?: (image: ImageResource) => void;\n onDelete?: (image: ImageResource) => void;\n className?: string;\n style?: React.CSSProperties;\n}\n\nconst FONT =\n 'ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif';\n\nconst VARIANT_DESCRIPTIONS: Record<string, string> = {\n orig: \"Original upload\",\n sq200: \"Thumbnail (200x200)\",\n sq400: \"Square (400x400)\",\n w400: \"Small (400w)\",\n w800: \"Medium (800w)\",\n w1200: \"Large (1200w)\",\n w1600: \"Retina (1600w)\",\n w1920: \"Full HD (1920w)\",\n};\n\nfunction describeVariant(name: string): string {\n if (VARIANT_DESCRIPTIONS[name]) return VARIANT_DESCRIPTIONS[name];\n const sqMatch = name.match(/^sq(\\d+)$/);\n if (sqMatch) return `Square (${sqMatch[1]}x${sqMatch[1]})`;\n const wMatch = name.match(/^w(\\d+)$/);\n if (wMatch) return `Width ${wMatch[1]}px`;\n return name;\n}\n\nfunction formatBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nfunction isSafeURL(url: string): boolean {\n return url.startsWith(\"https://\") || url.startsWith(\"http://localhost\");\n}\n\nfunction sanitizeFilename(name: string): string {\n return name.replace(/[/\\\\:*?\"<>|\\x00-\\x1f]/g, \"_\");\n}\n\nfunction preferredVariant(variants: ImageVariant[]): ImageVariant {\n const prefs = [\"w1600\", \"w800\", \"w400\", \"orig\"];\n for (const p of prefs) {\n const v = variants.find((v) => v.variant === p);\n if (v) return v;\n }\n return variants[0];\n}\n\nexport function ImageDetails({\n image,\n onClose,\n onEdit,\n onDelete,\n className,\n style,\n}: ImageDetailsProps) {\n const [selected, setSelected] = useState<ImageVariant>(() =>\n preferredVariant(image.variants),\n );\n const [copiedField, setCopiedField] = useState<string | null>(null);\n\n const sortedVariants = useMemo(\n () =>\n [...image.variants].sort((a, b) => {\n if (a.variant === \"orig\") return -1;\n if (b.variant === \"orig\") return 1;\n return a.width - b.width;\n }),\n [image.variants],\n );\n\n const copyText = useCallback((text: string, field: string) => {\n navigator.clipboard?.writeText(text).then(() => {\n setCopiedField(field);\n setTimeout(() => setCopiedField(null), 1200);\n }).catch(() => { /* clipboard not available */ });\n }, []);\n\n const handleDownload = useCallback(async () => {\n if (!selected?.objectURL) return;\n try {\n const res = await fetch(selected.objectURL);\n const blob = await res.blob();\n const url = URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.href = url;\n const ext = selected.format || selected.content_type?.split(\"/\")[1] || \"jpg\";\n a.download = sanitizeFilename(`${image.title}-${selected.variant}.${ext}`);\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n } catch {\n if (isSafeURL(selected.objectURL)) {\n window.open(selected.objectURL, \"_blank\");\n }\n }\n }, [selected, image.title]);\n\n return (\n <div\n style={{\n position: \"fixed\",\n inset: 0,\n zIndex: 9999,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: \"rgba(0,0,0,0.5)\",\n }}\n onClick={(e) => {\n if (e.target === e.currentTarget) onClose();\n }}\n >\n <div\n className={className}\n style={{\n backgroundColor: \"#fff\",\n borderRadius: 12,\n maxWidth: 720,\n width: \"95vw\",\n maxHeight: \"90vh\",\n overflow: \"auto\",\n boxShadow: \"0 8px 32px rgba(0,0,0,0.2)\",\n fontFamily: FONT,\n ...style,\n }}\n >\n {/* Header */}\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n padding: \"16px 20px 12px\",\n borderBottom: \"1px solid #eee\",\n }}\n >\n <div style={{ fontWeight: 600, fontSize: 16 }}>{image.title}</div>\n <button\n onClick={onClose}\n style={{\n background: \"none\",\n border: \"none\",\n fontSize: 22,\n cursor: \"pointer\",\n color: \"#666\",\n lineHeight: 1,\n padding: \"4px 8px\",\n }}\n >\n &times;\n </button>\n </div>\n\n {/* Image preview */}\n <div style={{ padding: \"16px 20px\", textAlign: \"center\" }}>\n {selected?.objectURL && (\n <img\n src={selected.objectURL}\n alt={image.title}\n style={{\n maxWidth: \"100%\",\n maxHeight: 500,\n borderRadius: 6,\n objectFit: \"contain\",\n }}\n />\n )}\n </div>\n\n {/* Variant chips */}\n <div style={{ padding: \"0 20px 12px\", display: \"flex\", flexWrap: \"wrap\", gap: 6 }}>\n {sortedVariants.map((v) => {\n const active = v.variant === selected.variant;\n return (\n <button\n key={v.variant}\n onClick={() => setSelected(v)}\n style={{\n padding: \"4px 12px\",\n borderRadius: 14,\n border: active ? \"1px solid #1976d2\" : \"1px solid #ddd\",\n backgroundColor: active ? \"#e3f2fd\" : \"#fff\",\n color: active ? \"#1976d2\" : \"#555\",\n fontSize: 12,\n fontFamily: FONT,\n cursor: \"pointer\",\n }}\n title={describeVariant(v.variant)}\n >\n {v.variant}\n {v.size_bytes > 0 && (\n <span style={{ opacity: 0.6, marginLeft: 4 }}>\n {formatBytes(v.size_bytes)}\n </span>\n )}\n </button>\n );\n })}\n </div>\n\n {/* Metadata */}\n <div style={{ padding: \"0 20px 16px\" }}>\n <div style={{ display: \"flex\", flexWrap: \"wrap\", gap: 8, fontSize: 13 }}>\n <MetaItem label=\"Size\" value={formatBytes(selected.size_bytes)} />\n {selected.width > 0 && (\n <MetaItem label=\"Dimensions\" value={`${selected.width} x ${selected.height}`} />\n )}\n <MetaItem label=\"Format\" value={selected.format || selected.content_type} />\n <MetaItem\n label=\"ID\"\n value={image.imageId.slice(0, 12) + \"...\"}\n onClick={() => copyText(image.imageId, \"id\")}\n actionLabel={copiedField === \"id\" ? \"Copied\" : \"Copy\"}\n />\n {selected?.objectURL && (\n <MetaItem\n label=\"URL\"\n value={new URL(selected.objectURL).pathname.split(\"/\").pop() || \"...\"}\n onClick={() => copyText(selected.objectURL, \"url\")}\n actionLabel={copiedField === \"url\" ? \"Copied\" : \"Copy\"}\n />\n )}\n </div>\n\n {image.description && (\n <div style={{ marginTop: 10, fontSize: 13, color: \"#666\" }}>\n {image.description}\n </div>\n )}\n\n <div style={{ marginTop: 6, fontSize: 12, color: \"#999\" }}>\n Uploaded {new Date(image.uploadedAt).toLocaleDateString()}\n </div>\n </div>\n\n {/* Actions */}\n <div\n style={{\n display: \"flex\",\n justifyContent: \"space-between\",\n padding: \"12px 20px 16px\",\n borderTop: \"1px solid #eee\",\n gap: 8,\n }}\n >\n <div style={{ display: \"flex\", gap: 8 }}>\n {onEdit && (\n <button\n onClick={() => onEdit(image)}\n style={{\n padding: \"6px 14px\",\n borderRadius: 6,\n border: \"1px solid #ddd\",\n backgroundColor: \"#fff\",\n fontSize: 13,\n fontFamily: FONT,\n cursor: \"pointer\",\n color: \"#333\",\n }}\n >\n Edit\n </button>\n )}\n {onDelete && (\n <button\n onClick={() => onDelete(image)}\n style={{\n padding: \"6px 14px\",\n borderRadius: 6,\n border: \"1px solid #ffcdd2\",\n backgroundColor: \"#fff\",\n fontSize: 13,\n fontFamily: FONT,\n cursor: \"pointer\",\n color: \"#d32f2f\",\n }}\n >\n Delete\n </button>\n )}\n </div>\n <div style={{ display: \"flex\", gap: 8 }}>\n {selected?.objectURL && (\n <>\n {isSafeURL(selected.objectURL) && (\n <a\n href={selected.objectURL}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{\n padding: \"6px 14px\",\n borderRadius: 6,\n border: \"1px solid #ddd\",\n backgroundColor: \"#fff\",\n fontSize: 13,\n fontFamily: FONT,\n cursor: \"pointer\",\n color: \"#333\",\n textDecoration: \"none\",\n display: \"inline-flex\",\n alignItems: \"center\",\n }}\n >\n Open\n </a>\n )}\n <button\n onClick={handleDownload}\n style={{\n padding: \"6px 14px\",\n borderRadius: 6,\n border: \"1px solid #ddd\",\n backgroundColor: \"#fff\",\n fontSize: 13,\n fontFamily: FONT,\n cursor: \"pointer\",\n color: \"#333\",\n }}\n >\n Download\n </button>\n </>\n )}\n <button\n onClick={onClose}\n style={{\n padding: \"6px 14px\",\n borderRadius: 6,\n border: \"1px solid #ddd\",\n backgroundColor: \"#fafafa\",\n fontSize: 13,\n fontFamily: FONT,\n cursor: \"pointer\",\n color: \"#333\",\n }}\n >\n Close\n </button>\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nfunction MetaItem({\n label,\n value,\n onClick,\n actionLabel,\n}: {\n label: string;\n value: string;\n onClick?: () => void;\n actionLabel?: string;\n}) {\n return (\n <span\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 4,\n padding: \"3px 10px\",\n borderRadius: 10,\n backgroundColor: \"#f5f5f5\",\n color: \"#555\",\n fontSize: 12,\n }}\n >\n <span style={{ fontWeight: 500, color: \"#888\" }}>{label}:</span>{\" \"}\n <span style={{ fontFamily: \"monospace\" }}>{value}</span>\n {onClick && (\n <button\n onClick={onClick}\n style={{\n background: \"none\",\n border: \"none\",\n color: \"#1976d2\",\n cursor: \"pointer\",\n fontSize: 11,\n padding: \"0 2px\",\n fontFamily: FONT,\n }}\n >\n {actionLabel}\n </button>\n )}\n </span>\n );\n}\n","import React, { useState, useCallback, useEffect, useRef } from \"react\";\nimport { useImages } from \"./useImages\";\nimport { MrImage } from \"./MrImage\";\nimport { ImageDetails } from \"./ImageDetails\";\nimport type { ImageResource } from \"../types\";\n\nexport interface ImagePickerProps {\n onSelect?: (image: ImageResource) => void;\n onClose?: () => void;\n mode?: \"modal\" | \"inline\";\n pageSize?: number;\n showSearch?: boolean;\n searchPlaceholder?: string;\n selectedImageId?: string;\n columns?: number;\n showActions?: boolean;\n refType?: string;\n refId?: string;\n /** Increment to trigger a refetch (e.g. after an upload). */\n refreshSignal?: number;\n className?: string;\n style?: React.CSSProperties;\n}\n\nconst FONT =\n 'ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif';\n\nconst SKELETON_STYLE_ID = \"mr-skeleton-keyframes\";\n\nfunction useSkeletonStyle() {\n useEffect(() => {\n if (document.getElementById(SKELETON_STYLE_ID)) return;\n const style = document.createElement(\"style\");\n style.id = SKELETON_STYLE_ID;\n style.textContent =\n \"@keyframes mr-skeleton-pulse{0%,100%{opacity:1}50%{opacity:.4}}\";\n document.head.appendChild(style);\n // intentionally not removed — shared singleton, harmless to leave\n }, []);\n}\n\nexport function ImagePicker({\n onSelect,\n onClose,\n mode = \"inline\",\n pageSize = 20,\n showSearch = true,\n searchPlaceholder = \"Search images...\",\n selectedImageId,\n columns = 4,\n showActions = false,\n refType,\n refId,\n refreshSignal,\n className,\n style,\n}: ImagePickerProps) {\n const {\n images,\n page,\n pageCount,\n total,\n loading,\n error,\n setPage,\n setQuery,\n refetch,\n available,\n removeImage,\n updateImage,\n } = useImages({ pageSize, refType, refId });\n\n useSkeletonStyle();\n\n const [searchInput, setSearchInput] = useState(\"\");\n const [activeTile, setActiveTile] = useState<string | null>(null);\n const [detailImage, setDetailImage] = useState<ImageResource | null>(null);\n const [editImage, setEditImage] = useState<ImageResource | null>(null);\n const [editTitle, setEditTitle] = useState(\"\");\n const [editDesc, setEditDesc] = useState(\"\");\n const [editSaving, setEditSaving] = useState(false);\n const [deleteConfirm, setDeleteConfirm] = useState<ImageResource | null>(null);\n const [deleting, setDeleting] = useState(false);\n const [actionError, setActionError] = useState<string | null>(null);\n\n // Debounced search\n useEffect(() => {\n const timer = setTimeout(() => setQuery(searchInput), 300);\n return () => clearTimeout(timer);\n }, [searchInput, setQuery]);\n\n // External refresh trigger\n const prevSignal = useRef(refreshSignal);\n useEffect(() => {\n if (refreshSignal != null && refreshSignal !== prevSignal.current) {\n prevSignal.current = refreshSignal;\n refetch();\n }\n }, [refreshSignal, refetch]);\n\n // Dismiss active tile when clicking outside the grid\n useEffect(() => {\n if (!activeTile) return;\n const handler = () => setActiveTile(null);\n document.addEventListener(\"click\", handler);\n return () => document.removeEventListener(\"click\", handler);\n }, [activeTile]);\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === \"Escape\") onClose?.();\n },\n [onClose],\n );\n\n const handleDelete = useCallback(\n async (img: ImageResource) => {\n setDeleting(true);\n setActionError(null);\n try {\n await removeImage(img.imageId);\n setDeleteConfirm(null);\n setDetailImage(null);\n } catch (err: any) {\n setActionError(err.message || \"Delete failed\");\n } finally {\n setDeleting(false);\n }\n },\n [removeImage],\n );\n\n const handleEditSave = useCallback(async () => {\n if (!editImage || !editTitle.trim()) return;\n setEditSaving(true);\n setActionError(null);\n try {\n await updateImage(editImage.imageId, {\n title: editTitle.trim(),\n description: editDesc.trim() || undefined,\n });\n setEditImage(null);\n } catch (err: any) {\n setActionError(err.message || \"Update failed\");\n } finally {\n setEditSaving(false);\n }\n }, [editImage, editTitle, editDesc, updateImage]);\n\n const openEdit = useCallback((img: ImageResource) => {\n setEditTitle(img.title);\n setEditDesc(img.description || \"\");\n setEditImage(img);\n setDetailImage(null);\n setActionError(null);\n }, []);\n\n const openDelete = useCallback((img: ImageResource) => {\n setDeleteConfirm(img);\n setDetailImage(null);\n setActionError(null);\n }, []);\n\n if (!available) return null;\n\n const skeletonCount = Math.min(pageSize, 8);\n\n const content = (\n <div\n className={className}\n style={{\n fontFamily: FONT,\n display: \"flex\",\n flexDirection: \"column\",\n gap: 12,\n ...(!mode || mode === \"inline\" ? style : {}),\n }}\n onKeyDown={handleKeyDown}\n >\n {/* Header with search */}\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 8 }}>\n {showSearch && (\n <div style={{ flex: 1, position: \"relative\" }}>\n <input\n type=\"text\"\n placeholder={searchPlaceholder}\n value={searchInput}\n onChange={(e) => setSearchInput(e.target.value)}\n style={{\n width: \"100%\",\n padding: \"8px 12px\",\n paddingRight: searchInput ? 32 : 12,\n borderRadius: 6,\n border: \"1px solid #ddd\",\n fontSize: 14,\n fontFamily: FONT,\n outline: \"none\",\n boxSizing: \"border-box\",\n }}\n />\n {searchInput && (\n <button\n onClick={() => setSearchInput(\"\")}\n style={{\n position: \"absolute\",\n right: 6,\n top: \"50%\",\n transform: \"translateY(-50%)\",\n background: \"none\",\n border: \"none\",\n fontSize: 16,\n cursor: \"pointer\",\n color: \"#999\",\n lineHeight: 1,\n padding: \"2px 4px\",\n }}\n >\n &times;\n </button>\n )}\n </div>\n )}\n {mode === \"modal\" && onClose && (\n <button\n onClick={onClose}\n style={{\n background: \"none\",\n border: \"none\",\n fontSize: 20,\n cursor: \"pointer\",\n padding: \"4px 8px\",\n color: \"#666\",\n lineHeight: 1,\n }}\n >\n &times;\n </button>\n )}\n </div>\n\n {/* Action error */}\n {actionError && (\n <div style={{ color: \"#d32f2f\", fontSize: 13, padding: \"4px 0\" }}>\n {actionError}\n </div>\n )}\n\n {/* Loading skeleton */}\n {loading && (\n <div\n style={{\n display: \"grid\",\n gridTemplateColumns: `repeat(${columns}, 1fr)`,\n gap: 8,\n }}\n >\n {Array.from({ length: skeletonCount }).map((_, i) => (\n <div\n key={i}\n style={{\n aspectRatio: \"1\",\n borderRadius: 6,\n backgroundColor: \"#f0f0f0\",\n animation: \"mr-skeleton-pulse 1.5s ease-in-out infinite\",\n }}\n />\n ))}\n </div>\n )}\n\n {/* Fetch error */}\n {error && (\n <div style={{ textAlign: \"center\", padding: 20, color: \"#d32f2f\", fontSize: 14 }}>\n {error}\n </div>\n )}\n\n {/* Empty state */}\n {!loading && !error && images.length === 0 && (\n <div style={{ textAlign: \"center\", padding: \"40px 20px\", color: \"#999\" }}>\n <svg\n width=\"36\"\n height=\"36\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n style={{ opacity: 0.4, marginBottom: 8 }}\n >\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\" />\n <circle cx=\"8.5\" cy=\"8.5\" r=\"1.5\" />\n <polyline points=\"21 15 16 10 5 21\" />\n </svg>\n <div style={{ fontSize: 14, fontWeight: 500, color: \"#666\" }}>No images yet</div>\n <div style={{ fontSize: 13, marginTop: 4 }}>\n {searchInput ? \"Try a different search term\" : \"Upload an image to get started\"}\n </div>\n </div>\n )}\n\n {/* Image grid */}\n {!loading && images.length > 0 && (\n <div\n style={{\n display: \"grid\",\n gridTemplateColumns: `repeat(${columns}, 1fr)`,\n gap: 8,\n }}\n >\n {images.map((img) => {\n const isSelected = img.imageId === selectedImageId;\n const isActive = activeTile === img.imageId;\n return (\n <div\n key={img.imageId}\n style={{\n position: \"relative\",\n borderRadius: 6,\n overflow: \"hidden\",\n border: isSelected\n ? \"2px solid #1976d2\"\n : \"2px solid transparent\",\n transition: \"border-color 0.15s ease\",\n aspectRatio: \"1\",\n }}\n onMouseEnter={() => setActiveTile(img.imageId)}\n onMouseLeave={() => setActiveTile(null)}\n onClick={(e) => {\n // Prevent document click handler from immediately dismissing\n e.stopPropagation();\n }}\n >\n <div\n onClick={() => {\n if (showActions && !isActive) {\n // First tap: reveal actions\n setActiveTile(img.imageId);\n } else {\n // Second tap (or no actions): select\n onSelect?.(img);\n }\n }}\n style={{\n cursor: \"pointer\",\n width: \"100%\",\n height: \"100%\",\n }}\n >\n <MrImage\n image={img}\n variant=\"sq200\"\n style={{\n width: \"100%\",\n height: \"100%\",\n objectFit: \"cover\",\n display: \"block\",\n }}\n alt={img.title}\n />\n </div>\n\n {/* Title label — always visible */}\n <div\n style={{\n position: \"absolute\",\n bottom: 0,\n left: 0,\n right: 0,\n padding: \"16px 6px 4px\",\n background: \"linear-gradient(transparent, rgba(0,0,0,0.5))\",\n color: \"#fff\",\n fontSize: 11,\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n pointerEvents: \"none\",\n }}\n >\n {img.title}\n </div>\n\n {/* Action buttons overlay — shown on hover/tap */}\n {showActions && isActive && (\n <div\n style={{\n position: \"absolute\",\n inset: 0,\n display: \"flex\",\n alignItems: \"flex-end\",\n justifyContent: \"center\",\n gap: 6,\n padding: \"8px 8px 24px\",\n background: \"linear-gradient(transparent 30%, rgba(0,0,0,0.55))\",\n }}\n >\n <ActionBtn label=\"Info\" onClick={() => setDetailImage(img)} />\n <ActionBtn label=\"Edit\" onClick={() => openEdit(img)} />\n <ActionBtn label=\"Del\" onClick={() => openDelete(img)} color=\"#ff8a80\" />\n </div>\n )}\n </div>\n );\n })}\n </div>\n )}\n\n {/* Pagination */}\n {pageCount > 1 && (\n <div\n style={{\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n gap: 12,\n fontSize: 14,\n }}\n >\n <button\n disabled={page <= 0}\n onClick={() => setPage(page - 1)}\n style={{\n padding: \"4px 12px\",\n borderRadius: 4,\n border: \"1px solid #ddd\",\n background: page <= 0 ? \"#f5f5f5\" : \"#fff\",\n cursor: page <= 0 ? \"default\" : \"pointer\",\n fontFamily: FONT,\n fontSize: 13,\n color: page <= 0 ? \"#bbb\" : \"#333\",\n }}\n >\n Prev\n </button>\n <span style={{ color: \"#666\", fontSize: 13 }}>\n Page {page + 1} of {pageCount} &middot; {total} image{total !== 1 ? \"s\" : \"\"}\n </span>\n <button\n disabled={page >= pageCount - 1}\n onClick={() => setPage(page + 1)}\n style={{\n padding: \"4px 12px\",\n borderRadius: 4,\n border: \"1px solid #ddd\",\n background: page >= pageCount - 1 ? \"#f5f5f5\" : \"#fff\",\n cursor: page >= pageCount - 1 ? \"default\" : \"pointer\",\n fontFamily: FONT,\n fontSize: 13,\n color: page >= pageCount - 1 ? \"#bbb\" : \"#333\",\n }}\n >\n Next\n </button>\n </div>\n )}\n\n {/* Details modal */}\n {detailImage && (\n <ImageDetails\n image={detailImage}\n onClose={() => setDetailImage(null)}\n onEdit={showActions ? openEdit : undefined}\n onDelete={showActions ? openDelete : undefined}\n />\n )}\n\n {/* Edit dialog */}\n {editImage && (\n <div\n style={{\n position: \"fixed\",\n inset: 0,\n zIndex: 10000,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: \"rgba(0,0,0,0.4)\",\n }}\n onClick={(e) => {\n if (e.target === e.currentTarget && !editSaving) setEditImage(null);\n }}\n >\n <div\n style={{\n backgroundColor: \"#fff\",\n borderRadius: 10,\n padding: 20,\n maxWidth: 400,\n width: \"90vw\",\n fontFamily: FONT,\n }}\n >\n <div style={{ fontWeight: 600, fontSize: 15, marginBottom: 12 }}>\n Edit Image\n </div>\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 8 }}>\n <input\n type=\"text\"\n placeholder=\"Title\"\n value={editTitle}\n onChange={(e) => setEditTitle(e.target.value)}\n disabled={editSaving}\n maxLength={250}\n style={{\n padding: \"8px 12px\",\n borderRadius: 6,\n border: \"1px solid #ddd\",\n fontSize: 14,\n fontFamily: FONT,\n outline: \"none\",\n }}\n />\n <input\n type=\"text\"\n placeholder=\"Description (optional)\"\n value={editDesc}\n onChange={(e) => setEditDesc(e.target.value)}\n disabled={editSaving}\n maxLength={500}\n style={{\n padding: \"8px 12px\",\n borderRadius: 6,\n border: \"1px solid #ddd\",\n fontSize: 14,\n fontFamily: FONT,\n outline: \"none\",\n }}\n />\n </div>\n <div style={{ display: \"flex\", justifyContent: \"flex-end\", gap: 8, marginTop: 16 }}>\n <button\n onClick={() => setEditImage(null)}\n disabled={editSaving}\n style={{\n padding: \"6px 14px\",\n borderRadius: 6,\n border: \"1px solid #ddd\",\n backgroundColor: \"#fff\",\n fontSize: 13,\n fontFamily: FONT,\n cursor: \"pointer\",\n color: \"#333\",\n }}\n >\n Cancel\n </button>\n <button\n onClick={handleEditSave}\n disabled={editSaving || !editTitle.trim()}\n style={{\n padding: \"6px 14px\",\n borderRadius: 6,\n border: \"none\",\n backgroundColor: editSaving || !editTitle.trim() ? \"#bbb\" : \"#1976d2\",\n color: \"#fff\",\n fontSize: 13,\n fontFamily: FONT,\n cursor: editSaving ? \"default\" : \"pointer\",\n }}\n >\n {editSaving ? \"Saving...\" : \"Save\"}\n </button>\n </div>\n </div>\n </div>\n )}\n\n {/* Delete confirmation */}\n {deleteConfirm && (\n <div\n style={{\n position: \"fixed\",\n inset: 0,\n zIndex: 10000,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: \"rgba(0,0,0,0.4)\",\n }}\n onClick={(e) => {\n if (e.target === e.currentTarget && !deleting) setDeleteConfirm(null);\n }}\n >\n <div\n style={{\n backgroundColor: \"#fff\",\n borderRadius: 10,\n padding: 20,\n maxWidth: 360,\n width: \"90vw\",\n fontFamily: FONT,\n }}\n >\n <div style={{ fontWeight: 600, fontSize: 15, marginBottom: 8 }}>\n Delete Image\n </div>\n <div style={{ fontSize: 14, color: \"#555\", marginBottom: 16 }}>\n Delete &ldquo;{deleteConfirm.title}&rdquo;? This removes all variants and cannot be undone.\n </div>\n <div style={{ display: \"flex\", justifyContent: \"flex-end\", gap: 8 }}>\n <button\n onClick={() => setDeleteConfirm(null)}\n disabled={deleting}\n style={{\n padding: \"6px 14px\",\n borderRadius: 6,\n border: \"1px solid #ddd\",\n backgroundColor: \"#fff\",\n fontSize: 13,\n fontFamily: FONT,\n cursor: \"pointer\",\n color: \"#333\",\n }}\n >\n Cancel\n </button>\n <button\n onClick={() => handleDelete(deleteConfirm)}\n disabled={deleting}\n style={{\n padding: \"6px 14px\",\n borderRadius: 6,\n border: \"none\",\n backgroundColor: deleting ? \"#bbb\" : \"#d32f2f\",\n color: \"#fff\",\n fontSize: 13,\n fontFamily: FONT,\n cursor: deleting ? \"default\" : \"pointer\",\n }}\n >\n {deleting ? \"Deleting...\" : \"Delete\"}\n </button>\n </div>\n </div>\n </div>\n )}\n </div>\n );\n\n if (mode === \"modal\") {\n return (\n <div\n style={{\n position: \"fixed\",\n inset: 0,\n zIndex: 9999,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: \"rgba(0,0,0,0.4)\",\n }}\n onClick={(e) => {\n if (e.target === e.currentTarget) onClose?.();\n }}\n >\n <div\n style={{\n backgroundColor: \"#fff\",\n borderRadius: 12,\n padding: 20,\n maxWidth: 640,\n width: \"90vw\",\n maxHeight: \"80vh\",\n overflow: \"auto\",\n boxShadow: \"0 8px 32px rgba(0,0,0,0.2)\",\n ...style,\n }}\n >\n {content}\n </div>\n </div>\n );\n }\n\n return content;\n}\n\nfunction ActionBtn({\n label,\n onClick,\n color,\n}: {\n label: string;\n onClick: () => void;\n color?: string;\n}) {\n return (\n <button\n onClick={(e) => {\n e.stopPropagation();\n onClick();\n }}\n style={{\n padding: \"6px 12px\",\n borderRadius: 4,\n border: \"none\",\n backgroundColor: \"rgba(255,255,255,0.2)\",\n color: color || \"#fff\",\n fontSize: 12,\n fontWeight: 500,\n cursor: \"pointer\",\n fontFamily:\n 'ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n minHeight: 32,\n backdropFilter: \"blur(4px)\",\n }}\n >\n {label}\n </button>\n );\n}\n","import { useEffect, useState, useRef } from \"react\";\nimport { useAppKit } from \"../AppKit\";\nimport { fetchAppResource } from \"../appResource\";\n\ntype FilesConfig = {\n filesBaseURL: string | null;\n loading: boolean;\n error: string | null;\n};\n\nexport function useFilesConfig(): FilesConfig {\n const { snapshot } = useAppKit();\n const [filesBaseURL, setFilesBaseURL] = useState<string | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const fetchedRef = useRef(\"\");\n const retryCountRef = useRef(0);\n const maxRetries = 3;\n const retryDelayMs = 5000;\n\n const workspaceBaseURL: string | undefined = snapshot?.workspaceBaseURL;\n const appId: string | undefined = snapshot?.appId;\n\n // Reset fetchedRef when deps change so the hook can retry with new values\n useEffect(() => {\n const cacheKey = workspaceBaseURL && appId ? `${workspaceBaseURL}|${appId}` : \"\";\n if (fetchedRef.current !== cacheKey) {\n fetchedRef.current = \"\";\n retryCountRef.current = 0;\n }\n }, [workspaceBaseURL, appId]);\n\n useEffect(() => {\n if (!workspaceBaseURL || !appId) {\n setLoading(false);\n return;\n }\n\n const cacheKey = `${workspaceBaseURL}|${appId}`;\n\n if (fetchedRef.current === cacheKey) return;\n\n let cancelled = false;\n let retryTimer: ReturnType<typeof setTimeout> | null = null;\n setLoading(true);\n setError(null);\n\n const doFetch = () => {\n fetchAppResource(workspaceBaseURL, appId)\n .then((data) => {\n if (cancelled) return;\n setFilesBaseURL(data.filesBaseURL);\n setLoading(false);\n fetchedRef.current = cacheKey;\n retryCountRef.current = 0;\n })\n .catch((err) => {\n if (cancelled) return;\n retryCountRef.current += 1;\n if (retryCountRef.current < maxRetries) {\n retryTimer = setTimeout(doFetch, retryDelayMs);\n } else {\n setError(err.message);\n setLoading(false);\n }\n });\n };\n\n doFetch();\n\n return () => {\n cancelled = true;\n if (retryTimer != null) clearTimeout(retryTimer);\n };\n }, [workspaceBaseURL, appId]);\n\n return { filesBaseURL, loading, error };\n}\n","import type {\n FileResource,\n FileListResponse,\n FileUploadOptions,\n FileUpdateOptions,\n} from \"../types\";\n\ntype AuthParams = {\n filesBaseURL: string;\n appId: string;\n jwtToken: string;\n};\n\nfunction headers(jwt: string): Record<string, string> {\n return { Authorization: `Bearer ${jwt}` };\n}\n\nfunction apiBase(p: AuthParams): string {\n return `${p.filesBaseURL}/api/${encodeURIComponent(p.appId)}`;\n}\n\nexport async function listFiles(\n p: AuthParams,\n opts?: { page?: number; pageSize?: number; q?: string; refType?: string; refId?: string },\n): Promise<FileListResponse> {\n const url = new URL(`${apiBase(p)}/files`);\n if (opts?.page != null) url.searchParams.set(\"page\", String(opts.page));\n if (opts?.pageSize != null)\n url.searchParams.set(\"pageSize\", String(opts.pageSize));\n if (opts?.q) url.searchParams.set(\"q\", opts.q);\n if (opts?.refType) url.searchParams.set(\"refType\", opts.refType);\n if (opts?.refId) url.searchParams.set(\"refId\", opts.refId);\n\n const res = await fetch(url.toString(), { headers: headers(p.jwtToken) });\n if (!res.ok) throw new Error(`List files failed: HTTP ${res.status}`);\n return res.json();\n}\n\nexport async function getFile(\n p: AuthParams,\n fileId: string,\n): Promise<FileResource> {\n const res = await fetch(`${apiBase(p)}/files/${encodeURIComponent(fileId)}`, {\n headers: headers(p.jwtToken),\n });\n if (!res.ok) throw new Error(`Get file failed: HTTP ${res.status}`);\n return res.json();\n}\n\nexport function uploadFile(\n p: AuthParams,\n opts: FileUploadOptions,\n onProgress?: (pct: number, loaded: number, total: number) => void,\n signal?: AbortSignal,\n): Promise<{ status: number; body: any }> {\n return new Promise((resolve, reject) => {\n const xhr = new XMLHttpRequest();\n xhr.open(\"POST\", `${apiBase(p)}/files/upload`);\n xhr.setRequestHeader(\"Authorization\", `Bearer ${p.jwtToken}`);\n\n if (signal) {\n signal.addEventListener(\"abort\", () => xhr.abort(), { once: true });\n }\n\n xhr.upload.onprogress = (e) => {\n if (e.lengthComputable && onProgress) {\n const pct = Math.round((e.loaded / e.total) * 100);\n onProgress(pct, e.loaded, e.total);\n }\n };\n\n xhr.onload = () => {\n let body = null;\n try {\n body = JSON.parse(xhr.responseText);\n } catch {\n // no json body (e.g. 204)\n }\n resolve({ status: xhr.status, body });\n };\n\n xhr.onerror = () => reject(new Error(\"Upload network error\"));\n xhr.onabort = () => reject(new Error(\"Upload aborted\"));\n\n const fd = new FormData();\n fd.append(\"file\", opts.file);\n fd.append(\"title\", opts.title);\n if (opts.description) fd.append(\"description\", opts.description);\n if (opts.refType) fd.append(\"refType\", opts.refType);\n if (opts.refId) fd.append(\"refId\", opts.refId);\n xhr.send(fd);\n });\n}\n\nexport async function updateFile(\n p: AuthParams,\n fileId: string,\n opts: FileUpdateOptions,\n): Promise<void> {\n const res = await fetch(`${apiBase(p)}/files/${encodeURIComponent(fileId)}`, {\n method: \"POST\",\n headers: { ...headers(p.jwtToken), \"Content-Type\": \"application/json\" },\n body: JSON.stringify(opts),\n });\n if (!res.ok) throw new Error(`Update file failed: HTTP ${res.status}`);\n}\n\nexport async function deleteFile(\n p: AuthParams,\n fileId: string,\n): Promise<void> {\n const res = await fetch(`${apiBase(p)}/files/${encodeURIComponent(fileId)}`, {\n method: \"DELETE\",\n headers: headers(p.jwtToken),\n });\n if (!res.ok) throw new Error(`Delete file failed: HTTP ${res.status}`);\n}\n","import { useState, useEffect, useCallback, useRef } from \"react\";\nimport { useAppKit } from \"../AppKit\";\nimport { useFilesConfig } from \"./config\";\nimport { listFiles, deleteFile, updateFile } from \"./api\";\nimport type { FileResource, FileUpdateOptions } from \"../types\";\n\nexport type UseFilesOptions = {\n page?: number;\n pageSize?: number;\n q?: string;\n refType?: string;\n refId?: string;\n enabled?: boolean;\n};\n\nexport type UseFilesReturn = {\n files: FileResource[];\n page: number;\n pageSize: number;\n total: number;\n pageCount: number;\n loading: boolean;\n error: string | null;\n refetch: () => void;\n setPage: (page: number) => void;\n setQuery: (q: string) => void;\n available: boolean;\n removeFile: (fileId: string) => Promise<void>;\n updateFile: (fileId: string, opts: FileUpdateOptions) => Promise<void>;\n};\n\nexport function useFiles(opts?: UseFilesOptions): UseFilesReturn {\n const { snapshot } = useAppKit();\n const { filesBaseURL, loading: configLoading } = useFilesConfig();\n\n const [files, setFiles] = useState<FileResource[]>([]);\n const [page, setPageState] = useState(opts?.page ?? 0);\n const [pageSize] = useState(opts?.pageSize ?? 50);\n const [total, setTotal] = useState(0);\n const [pageCount, setPageCount] = useState(0);\n const [query, setQueryState] = useState(opts?.q ?? \"\");\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const fetchIdRef = useRef(0);\n const enabled = opts?.enabled !== false;\n const jwtToken = snapshot?.jwtToken as string | undefined;\n const appId = snapshot?.appId as string | undefined;\n const available = !!filesBaseURL;\n\n const refType = opts?.refType;\n const refId = opts?.refId;\n\n const doFetch = useCallback(() => {\n if (!filesBaseURL || !appId || !jwtToken || !enabled) return;\n\n const id = ++fetchIdRef.current;\n setLoading(true);\n setError(null);\n\n listFiles(\n { filesBaseURL, appId, jwtToken },\n { page, pageSize, q: query || undefined, refType, refId },\n )\n .then((res) => {\n if (id !== fetchIdRef.current) return;\n setFiles(res.files ?? []);\n setTotal(res.total);\n setPageCount(res.pageCount);\n setLoading(false);\n })\n .catch((err) => {\n if (id !== fetchIdRef.current) return;\n setError(err.message);\n setLoading(false);\n });\n }, [filesBaseURL, appId, jwtToken, page, pageSize, query, refType, refId, enabled]);\n\n useEffect(() => {\n doFetch();\n return () => {\n fetchIdRef.current++;\n };\n }, [doFetch]);\n\n const setPage = useCallback((p: number) => setPageState(p), []);\n const setQuery = useCallback((q: string) => {\n setQueryState(q);\n setPageState(0);\n }, []);\n\n const removeFile = useCallback(\n async (fileId: string) => {\n if (!filesBaseURL || !appId || !jwtToken) return;\n await deleteFile({ filesBaseURL, appId, jwtToken }, fileId);\n doFetch();\n },\n [filesBaseURL, appId, jwtToken, doFetch],\n );\n\n const doUpdateFile = useCallback(\n async (fileId: string, updateOpts: FileUpdateOptions) => {\n if (!filesBaseURL || !appId || !jwtToken) return;\n await updateFile(\n { filesBaseURL, appId, jwtToken },\n fileId,\n updateOpts,\n );\n doFetch();\n },\n [filesBaseURL, appId, jwtToken, doFetch],\n );\n\n return {\n files,\n page,\n pageSize,\n total,\n pageCount,\n loading: loading || configLoading,\n error,\n refetch: doFetch,\n setPage,\n setQuery,\n available,\n removeFile,\n updateFile: doUpdateFile,\n };\n}\n","import { useState, useEffect, useCallback, useRef } from \"react\";\nimport { useAppKit } from \"../AppKit\";\nimport { useFilesConfig } from \"./config\";\nimport { getFile } from \"./api\";\nimport type { FileResource } from \"../types\";\n\nexport type UseFileOptions = {\n enabled?: boolean;\n};\n\nexport type UseFileReturn = {\n file: FileResource | null;\n loading: boolean;\n error: string | null;\n refetch: () => void;\n available: boolean;\n};\n\nexport function useFile(\n fileId: string | null | undefined,\n opts?: UseFileOptions,\n): UseFileReturn {\n const { snapshot } = useAppKit();\n const { filesBaseURL, loading: configLoading } = useFilesConfig();\n\n const [file, setFile] = useState<FileResource | null>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const fetchIdRef = useRef(0);\n const enabled = opts?.enabled !== false;\n const jwtToken = snapshot?.jwtToken as string | undefined;\n const appId = snapshot?.appId as string | undefined;\n const available = !!filesBaseURL;\n\n const doFetch = useCallback(() => {\n if (!filesBaseURL || !appId || !jwtToken || !fileId || !enabled) return;\n\n const id = ++fetchIdRef.current;\n setLoading(true);\n setError(null);\n\n getFile({ filesBaseURL, appId, jwtToken }, fileId)\n .then((res) => {\n if (id !== fetchIdRef.current) return;\n setFile(res);\n setLoading(false);\n })\n .catch((err) => {\n if (id !== fetchIdRef.current) return;\n setError(err.message);\n setLoading(false);\n });\n }, [filesBaseURL, appId, jwtToken, fileId, enabled]);\n\n useEffect(() => {\n doFetch();\n return () => {\n fetchIdRef.current++;\n };\n }, [doFetch]);\n\n return {\n file,\n loading: loading || configLoading,\n error,\n refetch: doFetch,\n available,\n };\n}\n","import { useState, useEffect, useCallback, useRef } from \"react\";\nimport { useAppKit } from \"../AppKit\";\nimport { useFilesConfig } from \"./config\";\nimport { uploadFile } from \"./api\";\nimport type { UploadProgress, FileUploadOptions } from \"../types\";\n\nexport type UseFileUploadReturn = {\n upload: (opts: FileUploadOptions) => Promise<void>;\n cancel: () => void;\n progress: UploadProgress;\n reset: () => void;\n available: boolean;\n};\n\nconst IDLE: UploadProgress = {\n status: \"idle\",\n progress: 0,\n bytesUploaded: 0,\n bytesTotal: 0,\n error: null,\n};\n\nexport function useFileUpload(): UseFileUploadReturn {\n const { snapshot } = useAppKit();\n const { filesBaseURL } = useFilesConfig();\n\n const [progress, setProgress] = useState<UploadProgress>(IDLE);\n const abortRef = useRef<AbortController | null>(null);\n\n const jwtToken = snapshot?.jwtToken as string | undefined;\n const appId = snapshot?.appId as string | undefined;\n const available = !!filesBaseURL;\n\n // Abort upload if auth is lost\n useEffect(() => {\n if (!jwtToken && progress.status === \"uploading\") {\n abortRef.current?.abort();\n }\n }, [jwtToken, progress.status]);\n\n const upload = useCallback(\n async (opts: FileUploadOptions) => {\n if (!filesBaseURL || !appId || !jwtToken) {\n setProgress({\n ...IDLE,\n status: \"error\",\n error: \"Files service not available\",\n });\n return;\n }\n\n abortRef.current?.abort();\n const controller = new AbortController();\n abortRef.current = controller;\n\n setProgress({\n status: \"uploading\",\n progress: 0,\n bytesUploaded: 0,\n bytesTotal: opts.file.size,\n error: null,\n });\n\n try {\n const result = await uploadFile(\n { filesBaseURL, appId, jwtToken },\n opts,\n (pct, loaded, total) => {\n setProgress((prev) => ({\n ...prev,\n progress: pct,\n bytesUploaded: loaded,\n bytesTotal: total,\n }));\n },\n controller.signal,\n );\n\n if (result.status === 204) {\n setProgress({\n status: \"success\",\n progress: 100,\n bytesUploaded: opts.file.size,\n bytesTotal: opts.file.size,\n error: null,\n });\n } else if (result.status === 409) {\n setProgress({\n status: \"conflict\",\n progress: 100,\n bytesUploaded: opts.file.size,\n bytesTotal: opts.file.size,\n error: result.body?.message || \"A file with identical content already exists\",\n existingFileId: result.body?.fileId,\n });\n } else if (result.status === 413) {\n throw new Error(\"File exceeds 10MB limit\");\n } else if (result.status === 415) {\n throw new Error(\n \"Unsupported file type. Allowed: PDF, DOC, DOCX, XLS, XLSX, PPT, PPTX, CSV, TXT, ZIP, GZ, JSON, XML\",\n );\n } else if (result.status === 429) {\n throw new Error(result.body?.message || \"Storage limit reached\");\n } else {\n throw new Error(`Upload failed: HTTP ${result.status}`);\n }\n } catch (err: any) {\n if (err.message === \"Upload aborted\") return;\n setProgress({\n status: \"error\",\n progress: 0,\n bytesUploaded: 0,\n bytesTotal: opts.file.size,\n error: err.message || \"Upload failed\",\n });\n }\n },\n [filesBaseURL, appId, jwtToken],\n );\n\n const cancel = useCallback(() => {\n abortRef.current?.abort();\n setProgress(IDLE);\n }, []);\n\n const reset = useCallback(() => {\n setProgress(IDLE);\n }, []);\n\n return { upload, cancel, progress, reset, available };\n}\n","import React, { useState, useRef, useCallback, useEffect } from \"react\";\nimport { useFileUpload } from \"./useFileUpload\";\nimport type { FileUploadOptions } from \"../types\";\n\nexport interface FileUploaderProps {\n onUpload?: () => void;\n onError?: (error: string) => void;\n defaultTitle?: string;\n defaultDescription?: string;\n showFields?: boolean;\n accept?: string;\n maxSize?: number;\n refType?: string;\n refId?: string;\n className?: string;\n style?: React.CSSProperties;\n label?: string;\n disabled?: boolean;\n}\n\nconst FONT =\n 'ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif';\nconst ACCEPT_DEFAULT =\n \"application/pdf,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.csv,text/plain,.zip,.gz,application/json,.xml\";\nconst MAX_SIZE_DEFAULT = 10 * 1024 * 1024;\n\nfunction formatSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nexport function FileUploader({\n onUpload,\n onError,\n defaultTitle,\n defaultDescription = \"\",\n showFields = true,\n accept = ACCEPT_DEFAULT,\n maxSize = MAX_SIZE_DEFAULT,\n refType,\n refId,\n className,\n style,\n label = \"Drop a file here or click to select\",\n disabled = false,\n}: FileUploaderProps) {\n const { upload, cancel, progress, reset, available } = useFileUpload();\n const fileInputRef = useRef<HTMLInputElement>(null);\n const [dragOver, setDragOver] = useState(false);\n const [title, setTitle] = useState(defaultTitle ?? \"\");\n const [description, setDescription] = useState(defaultDescription);\n const [selectedFile, setSelectedFile] = useState<File | null>(null);\n const [validationError, setValidationError] = useState<string | null>(null);\n const [showSuccess, setShowSuccess] = useState(false);\n\n const handleFile = useCallback(\n (file: File) => {\n setValidationError(null);\n if (file.size > maxSize) {\n setValidationError(\n `File too large (${(file.size / 1024 / 1024).toFixed(1)}MB). Max ${(maxSize / 1024 / 1024).toFixed(0)}MB.`,\n );\n return;\n }\n setSelectedFile(file);\n if (!title) {\n setTitle(file.name.replace(/\\.[^.]+$/, \"\"));\n }\n },\n [maxSize, title],\n );\n\n const handleDrop = useCallback(\n (e: React.DragEvent) => {\n e.preventDefault();\n setDragOver(false);\n const file = e.dataTransfer.files[0];\n if (file) handleFile(file);\n },\n [handleFile],\n );\n\n const handleSubmit = useCallback(async () => {\n if (!selectedFile || !title.trim()) return;\n reset();\n const opts: FileUploadOptions = {\n file: selectedFile,\n title: title.trim(),\n description: description.trim() || undefined,\n refType,\n refId,\n };\n await upload(opts);\n }, [selectedFile, title, description, refType, refId, upload, reset]);\n\n // Watch for upload completion\n const prevStatus = useRef(progress.status);\n useEffect(() => {\n if (prevStatus.current === progress.status) return;\n prevStatus.current = progress.status;\n if (progress.status === \"success\") {\n setSelectedFile(null);\n setTitle(defaultTitle ?? \"\");\n setDescription(defaultDescription);\n setShowSuccess(true);\n onUpload?.();\n }\n if (progress.status === \"conflict\") {\n setSelectedFile(null);\n setTitle(defaultTitle ?? \"\");\n setDescription(defaultDescription);\n }\n if (progress.status === \"error\" && progress.error) {\n onError?.(progress.error);\n }\n }, [progress.status, progress.error, onUpload, onError, defaultTitle, defaultDescription]);\n\n // Auto-dismiss success toast\n useEffect(() => {\n if (!showSuccess) return;\n const t = setTimeout(() => setShowSuccess(false), 4000);\n return () => clearTimeout(t);\n }, [showSuccess]);\n\n if (!available) return null;\n\n const isUploading = progress.status === \"uploading\";\n const isDisabled = disabled || isUploading;\n\n return (\n <div className={className} style={{ fontFamily: FONT, ...style }}>\n {/* Drop zone */}\n <div\n onDragEnter={(e) => {\n e.preventDefault();\n setDragOver(true);\n }}\n onDragOver={(e) => {\n e.preventDefault();\n setDragOver(true);\n }}\n onDragLeave={() => setDragOver(false)}\n onDrop={handleDrop}\n onClick={() => !isDisabled && fileInputRef.current?.click()}\n style={{\n border: `2px dashed ${dragOver ? \"#1976d2\" : \"#ccc\"}`,\n borderRadius: 8,\n padding: \"24px 16px\",\n textAlign: \"center\",\n cursor: isDisabled ? \"default\" : \"pointer\",\n backgroundColor: dragOver ? \"#e3f2fd\" : \"#fafafa\",\n transition: \"all 0.15s ease\",\n opacity: isDisabled ? 0.6 : 1,\n }}\n >\n <input\n ref={fileInputRef}\n type=\"file\"\n accept={accept}\n style={{ display: \"none\" }}\n onChange={(e) => {\n const file = e.target.files?.[0];\n if (file) handleFile(file);\n e.target.value = \"\";\n }}\n />\n {!selectedFile && (\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#999\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ marginBottom: 6 }}>\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" />\n <polyline points=\"17 8 12 3 7 8\" />\n <line x1=\"12\" y1=\"3\" x2=\"12\" y2=\"15\" />\n </svg>\n )}\n {selectedFile && (\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#666\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ marginBottom: 6 }}>\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n </svg>\n )}\n <div style={{ fontSize: 14, color: \"#666\" }}>\n {selectedFile ? selectedFile.name : label}\n </div>\n {selectedFile && (\n <div style={{ fontSize: 12, color: \"#999\", marginTop: 4 }}>\n {formatSize(selectedFile.size)}\n </div>\n )}\n </div>\n\n {/* Validation error */}\n {validationError && (\n <div style={{ color: \"#d32f2f\", fontSize: 13, marginTop: 8 }}>\n {validationError}\n </div>\n )}\n\n {/* Title / Description fields */}\n {showFields && selectedFile && (\n <div style={{ marginTop: 12, display: \"flex\", flexDirection: \"column\", gap: 8 }}>\n <input\n type=\"text\"\n placeholder=\"Title\"\n value={title}\n onChange={(e) => setTitle(e.target.value)}\n disabled={isDisabled}\n maxLength={250}\n style={{\n padding: \"8px 12px\",\n borderRadius: 6,\n border: \"1px solid #ddd\",\n fontSize: 14,\n fontFamily: FONT,\n outline: \"none\",\n }}\n />\n <input\n type=\"text\"\n placeholder=\"Description (optional)\"\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n disabled={isDisabled}\n maxLength={500}\n style={{\n padding: \"8px 12px\",\n borderRadius: 6,\n border: \"1px solid #ddd\",\n fontSize: 14,\n fontFamily: FONT,\n outline: \"none\",\n }}\n />\n </div>\n )}\n\n {/* Progress */}\n {isUploading && (\n <div style={{ marginTop: 12 }}>\n <div style={{ fontSize: 12, color: \"#666\", marginBottom: 4 }}>\n Uploading... — {Math.round(progress.progress)}%\n {progress.bytesTotal > 0 && (\n <> · {formatSize(progress.bytesUploaded)} / {formatSize(progress.bytesTotal)}</>\n )}\n </div>\n <div\n style={{\n height: 6,\n borderRadius: 3,\n backgroundColor: \"#e0e0e0\",\n overflow: \"hidden\",\n }}\n >\n <div\n style={{\n width: `${progress.progress}%`,\n height: \"100%\",\n backgroundColor: \"#1976d2\",\n transition: \"width 0.2s ease\",\n }}\n />\n </div>\n </div>\n )}\n\n {/* Upload / Cancel buttons */}\n {selectedFile && (\n <div style={{ marginTop: 12, display: \"flex\", gap: 8 }}>\n <button\n onClick={handleSubmit}\n disabled={isDisabled || !title.trim()}\n style={{\n padding: \"8px 20px\",\n borderRadius: 6,\n border: \"none\",\n backgroundColor: isDisabled ? \"#bbb\" : \"#1976d2\",\n color: \"#fff\",\n fontSize: 14,\n fontFamily: FONT,\n cursor: isDisabled ? \"default\" : \"pointer\",\n fontWeight: 500,\n }}\n >\n Upload\n </button>\n {isUploading && (\n <button\n onClick={cancel}\n style={{\n padding: \"8px 16px\",\n borderRadius: 6,\n border: \"1px solid #ddd\",\n backgroundColor: \"#fff\",\n fontSize: 14,\n fontFamily: FONT,\n cursor: \"pointer\",\n color: \"#666\",\n }}\n >\n Cancel\n </button>\n )}\n </div>\n )}\n\n {/* Error message */}\n {progress.status === \"error\" && progress.error && (\n <div style={{ color: \"#d32f2f\", fontSize: 13, marginTop: 8 }}>\n {progress.error}\n </div>\n )}\n\n {/* Conflict message */}\n {progress.status === \"conflict\" && (\n <div\n style={{\n marginTop: 12,\n padding: \"10px 14px\",\n borderRadius: 8,\n backgroundColor: \"#fff3e0\",\n border: \"1px solid #ffcc80\",\n color: \"#e65100\",\n fontSize: 13,\n fontFamily: FONT,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n }}\n >\n <span>{progress.error || \"A file with identical content already exists\"}</span>\n <button\n onClick={() => reset()}\n style={{\n background: \"none\",\n border: \"none\",\n color: \"#e65100\",\n cursor: \"pointer\",\n fontSize: 16,\n lineHeight: 1,\n padding: \"0 2px\",\n }}\n >\n &times;\n </button>\n </div>\n )}\n\n {/* Success toast */}\n {showSuccess && (\n <div\n style={{\n marginTop: 12,\n padding: \"10px 14px\",\n borderRadius: 8,\n backgroundColor: \"#e8f5e9\",\n border: \"1px solid #a5d6a7\",\n color: \"#2e7d32\",\n fontSize: 13,\n fontFamily: FONT,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n }}\n >\n <span>File uploaded successfully</span>\n <button\n onClick={() => setShowSuccess(false)}\n style={{\n background: \"none\",\n border: \"none\",\n color: \"#2e7d32\",\n cursor: \"pointer\",\n fontSize: 16,\n lineHeight: 1,\n padding: \"0 2px\",\n }}\n >\n &times;\n </button>\n </div>\n )}\n </div>\n );\n}\n","import React, { useState, useCallback } from \"react\";\nimport type { FileResource } from \"../types\";\n\nexport interface FileDetailsProps {\n file: FileResource;\n onClose: () => void;\n onEdit?: (file: FileResource) => void;\n onDelete?: (file: FileResource) => void;\n className?: string;\n style?: React.CSSProperties;\n}\n\nconst FONT =\n 'ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif';\n\nfunction formatBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nconst FORMAT_LABELS: Record<string, string> = {\n pdf: \"PDF\",\n doc: \"Word\",\n docx: \"Word\",\n xls: \"Excel\",\n xlsx: \"Excel\",\n ppt: \"PowerPoint\",\n pptx: \"PowerPoint\",\n csv: \"CSV\",\n txt: \"Text\",\n zip: \"ZIP\",\n gz: \"GZip\",\n json: \"JSON\",\n xml: \"XML\",\n};\n\nfunction formatLabel(format: string): string {\n return FORMAT_LABELS[format.toLowerCase()] || format.toUpperCase();\n}\n\nfunction isSafeURL(url: string): boolean {\n return url.startsWith(\"https://\") || url.startsWith(\"http://localhost\");\n}\n\nfunction sanitizeFilename(name: string): string {\n return name.replace(/[/\\\\:*?\"<>|\\x00-\\x1f]/g, \"_\");\n}\n\nexport function FileDetails({\n file,\n onClose,\n onEdit,\n onDelete,\n className,\n style,\n}: FileDetailsProps) {\n const [copiedField, setCopiedField] = useState<string | null>(null);\n\n const copyText = useCallback((text: string, field: string) => {\n navigator.clipboard?.writeText(text).then(() => {\n setCopiedField(field);\n setTimeout(() => setCopiedField(null), 1200);\n }).catch(() => { /* clipboard not available */ });\n }, []);\n\n const handleDownload = useCallback(async () => {\n if (!file.objectURL) return;\n try {\n const res = await fetch(file.objectURL);\n const blob = await res.blob();\n const url = URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = sanitizeFilename(file.originalName || `${file.title}.${file.ext}`);\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n } catch {\n if (isSafeURL(file.objectURL)) {\n window.open(file.objectURL, \"_blank\");\n }\n }\n }, [file]);\n\n return (\n <div\n style={{\n position: \"fixed\",\n inset: 0,\n zIndex: 9999,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: \"rgba(0,0,0,0.5)\",\n }}\n onClick={(e) => {\n if (e.target === e.currentTarget) onClose();\n }}\n >\n <div\n className={className}\n style={{\n backgroundColor: \"#fff\",\n borderRadius: 12,\n maxWidth: 600,\n width: \"95vw\",\n maxHeight: \"90vh\",\n overflow: \"auto\",\n boxShadow: \"0 8px 32px rgba(0,0,0,0.2)\",\n fontFamily: FONT,\n ...style,\n }}\n >\n {/* Header */}\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n padding: \"16px 20px 12px\",\n borderBottom: \"1px solid #eee\",\n }}\n >\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 10 }}>\n <FileIcon format={file.format} />\n <div style={{ fontWeight: 600, fontSize: 16 }}>{file.title}</div>\n </div>\n <button\n onClick={onClose}\n style={{\n background: \"none\",\n border: \"none\",\n fontSize: 22,\n cursor: \"pointer\",\n color: \"#666\",\n lineHeight: 1,\n padding: \"4px 8px\",\n }}\n >\n &times;\n </button>\n </div>\n\n {/* Metadata */}\n <div style={{ padding: \"16px 20px\" }}>\n <div style={{ display: \"flex\", flexWrap: \"wrap\", gap: 8, fontSize: 13 }}>\n <MetaItem label=\"Format\" value={formatLabel(file.format)} />\n <MetaItem label=\"Size\" value={formatBytes(file.sizeBytes)} />\n <MetaItem label=\"Type\" value={file.contentType} />\n <MetaItem\n label=\"ID\"\n value={file.fileId.slice(0, 12) + \"...\"}\n onClick={() => copyText(file.fileId, \"id\")}\n actionLabel={copiedField === \"id\" ? \"Copied\" : \"Copy\"}\n />\n {file.objectURL && (\n <MetaItem\n label=\"URL\"\n value={new URL(file.objectURL).pathname.split(\"/\").pop() || \"...\"}\n onClick={() => copyText(file.objectURL, \"url\")}\n actionLabel={copiedField === \"url\" ? \"Copied\" : \"Copy\"}\n />\n )}\n </div>\n\n <div style={{ marginTop: 12, fontSize: 13, color: \"#555\" }}>\n <span style={{ fontWeight: 500, color: \"#888\" }}>File:</span>{\" \"}\n {file.originalName}\n </div>\n\n {file.description && (\n <div style={{ marginTop: 8, fontSize: 13, color: \"#666\" }}>\n {file.description}\n </div>\n )}\n\n <div style={{ marginTop: 6, fontSize: 12, color: \"#999\" }}>\n Uploaded {new Date(file.uploadedAt).toLocaleDateString()}\n </div>\n </div>\n\n {/* Actions */}\n <div\n style={{\n display: \"flex\",\n justifyContent: \"space-between\",\n padding: \"12px 20px 16px\",\n borderTop: \"1px solid #eee\",\n gap: 8,\n }}\n >\n <div style={{ display: \"flex\", gap: 8 }}>\n {onEdit && (\n <button\n onClick={() => onEdit(file)}\n style={{\n padding: \"6px 14px\",\n borderRadius: 6,\n border: \"1px solid #ddd\",\n backgroundColor: \"#fff\",\n fontSize: 13,\n fontFamily: FONT,\n cursor: \"pointer\",\n color: \"#333\",\n }}\n >\n Edit\n </button>\n )}\n {onDelete && (\n <button\n onClick={() => onDelete(file)}\n style={{\n padding: \"6px 14px\",\n borderRadius: 6,\n border: \"1px solid #ffcdd2\",\n backgroundColor: \"#fff\",\n fontSize: 13,\n fontFamily: FONT,\n cursor: \"pointer\",\n color: \"#d32f2f\",\n }}\n >\n Delete\n </button>\n )}\n </div>\n <div style={{ display: \"flex\", gap: 8 }}>\n {file.objectURL && (\n <>\n {isSafeURL(file.objectURL) && (\n <a\n href={file.objectURL}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{\n padding: \"6px 14px\",\n borderRadius: 6,\n border: \"1px solid #ddd\",\n backgroundColor: \"#fff\",\n fontSize: 13,\n fontFamily: FONT,\n cursor: \"pointer\",\n color: \"#333\",\n textDecoration: \"none\",\n display: \"inline-flex\",\n alignItems: \"center\",\n }}\n >\n Open\n </a>\n )}\n <button\n onClick={handleDownload}\n style={{\n padding: \"6px 14px\",\n borderRadius: 6,\n border: \"1px solid #ddd\",\n backgroundColor: \"#fff\",\n fontSize: 13,\n fontFamily: FONT,\n cursor: \"pointer\",\n color: \"#333\",\n }}\n >\n Download\n </button>\n </>\n )}\n <button\n onClick={onClose}\n style={{\n padding: \"6px 14px\",\n borderRadius: 6,\n border: \"1px solid #ddd\",\n backgroundColor: \"#fafafa\",\n fontSize: 13,\n fontFamily: FONT,\n cursor: \"pointer\",\n color: \"#333\",\n }}\n >\n Close\n </button>\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nfunction FileIcon({ format }: { format: string }) {\n const colors: Record<string, string> = {\n pdf: \"#d32f2f\",\n doc: \"#1565c0\",\n docx: \"#1565c0\",\n xls: \"#2e7d32\",\n xlsx: \"#2e7d32\",\n ppt: \"#e65100\",\n pptx: \"#e65100\",\n csv: \"#2e7d32\",\n json: \"#6a1b9a\",\n xml: \"#6a1b9a\",\n txt: \"#616161\",\n zip: \"#795548\",\n gz: \"#795548\",\n };\n const color = colors[format.toLowerCase()] || \"#757575\";\n return (\n <div\n style={{\n width: 32,\n height: 32,\n borderRadius: 6,\n backgroundColor: color,\n color: \"#fff\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontSize: 10,\n fontWeight: 700,\n fontFamily: FONT,\n flexShrink: 0,\n textTransform: \"uppercase\",\n }}\n >\n {format.slice(0, 4)}\n </div>\n );\n}\n\nfunction MetaItem({\n label,\n value,\n onClick,\n actionLabel,\n}: {\n label: string;\n value: string;\n onClick?: () => void;\n actionLabel?: string;\n}) {\n return (\n <span\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 4,\n padding: \"3px 10px\",\n borderRadius: 10,\n backgroundColor: \"#f5f5f5\",\n color: \"#555\",\n fontSize: 12,\n }}\n >\n <span style={{ fontWeight: 500, color: \"#888\" }}>{label}:</span>{\" \"}\n <span style={{ fontFamily: \"monospace\" }}>{value}</span>\n {onClick && (\n <button\n onClick={onClick}\n style={{\n background: \"none\",\n border: \"none\",\n color: \"#1976d2\",\n cursor: \"pointer\",\n fontSize: 11,\n padding: \"0 2px\",\n fontFamily: FONT,\n }}\n >\n {actionLabel}\n </button>\n )}\n </span>\n );\n}\n","import React, { useState, useCallback, useEffect, useRef } from \"react\";\nimport { useFiles } from \"./useFiles\";\nimport { FileDetails } from \"./FileDetails\";\nimport type { FileResource } from \"../types\";\n\nexport interface FilePickerProps {\n onSelect?: (file: FileResource) => void;\n onClose?: () => void;\n mode?: \"modal\" | \"inline\";\n pageSize?: number;\n showSearch?: boolean;\n searchPlaceholder?: string;\n selectedFileId?: string;\n showActions?: boolean;\n refType?: string;\n refId?: string;\n /** Increment to trigger a refetch (e.g. after an upload). */\n refreshSignal?: number;\n className?: string;\n style?: React.CSSProperties;\n}\n\nconst FONT =\n 'ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif';\n\nconst SKELETON_STYLE_ID = \"mr-file-skeleton-keyframes\";\n\nfunction useSkeletonStyle() {\n useEffect(() => {\n if (document.getElementById(SKELETON_STYLE_ID)) return;\n const style = document.createElement(\"style\");\n style.id = SKELETON_STYLE_ID;\n style.textContent =\n \"@keyframes mr-skeleton-pulse{0%,100%{opacity:1}50%{opacity:.4}}\";\n document.head.appendChild(style);\n }, []);\n}\n\nfunction formatBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nconst FORMAT_COLORS: Record<string, string> = {\n pdf: \"#d32f2f\",\n doc: \"#1565c0\",\n docx: \"#1565c0\",\n xls: \"#2e7d32\",\n xlsx: \"#2e7d32\",\n ppt: \"#e65100\",\n pptx: \"#e65100\",\n csv: \"#2e7d32\",\n json: \"#6a1b9a\",\n xml: \"#6a1b9a\",\n txt: \"#616161\",\n zip: \"#795548\",\n gz: \"#795548\",\n};\n\nexport function FilePicker({\n onSelect,\n onClose,\n mode = \"inline\",\n pageSize = 20,\n showSearch = true,\n searchPlaceholder = \"Search files...\",\n selectedFileId,\n showActions = false,\n refType,\n refId,\n refreshSignal,\n className,\n style,\n}: FilePickerProps) {\n const {\n files,\n page,\n pageCount,\n total,\n loading,\n error,\n setPage,\n setQuery,\n refetch,\n available,\n removeFile,\n updateFile,\n } = useFiles({ pageSize, refType, refId });\n\n useSkeletonStyle();\n\n const [searchInput, setSearchInput] = useState(\"\");\n const [activeRow, setActiveRow] = useState<string | null>(null);\n const [detailFile, setDetailFile] = useState<FileResource | null>(null);\n const [editFile, setEditFile] = useState<FileResource | null>(null);\n const [editTitle, setEditTitle] = useState(\"\");\n const [editDesc, setEditDesc] = useState(\"\");\n const [editSaving, setEditSaving] = useState(false);\n const [deleteConfirm, setDeleteConfirm] = useState<FileResource | null>(null);\n const [deleting, setDeleting] = useState(false);\n const [actionError, setActionError] = useState<string | null>(null);\n\n // Debounced search\n useEffect(() => {\n const timer = setTimeout(() => setQuery(searchInput), 300);\n return () => clearTimeout(timer);\n }, [searchInput, setQuery]);\n\n // External refresh trigger\n const prevSignal = useRef(refreshSignal);\n useEffect(() => {\n if (refreshSignal != null && refreshSignal !== prevSignal.current) {\n prevSignal.current = refreshSignal;\n refetch();\n }\n }, [refreshSignal, refetch]);\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === \"Escape\") onClose?.();\n },\n [onClose],\n );\n\n const handleDelete = useCallback(\n async (f: FileResource) => {\n setDeleting(true);\n setActionError(null);\n try {\n await removeFile(f.fileId);\n setDeleteConfirm(null);\n setDetailFile(null);\n } catch (err: any) {\n setActionError(err.message || \"Delete failed\");\n } finally {\n setDeleting(false);\n }\n },\n [removeFile],\n );\n\n const handleEditSave = useCallback(async () => {\n if (!editFile || !editTitle.trim()) return;\n setEditSaving(true);\n setActionError(null);\n try {\n await updateFile(editFile.fileId, {\n title: editTitle.trim(),\n description: editDesc.trim() || undefined,\n });\n setEditFile(null);\n } catch (err: any) {\n setActionError(err.message || \"Update failed\");\n } finally {\n setEditSaving(false);\n }\n }, [editFile, editTitle, editDesc, updateFile]);\n\n const openEdit = useCallback((f: FileResource) => {\n setEditTitle(f.title);\n setEditDesc(f.description || \"\");\n setEditFile(f);\n setDetailFile(null);\n setActionError(null);\n }, []);\n\n const openDelete = useCallback((f: FileResource) => {\n setDeleteConfirm(f);\n setDetailFile(null);\n setActionError(null);\n }, []);\n\n if (!available) return null;\n\n const skeletonCount = Math.min(pageSize, 6);\n\n const content = (\n <div\n className={className}\n style={{\n fontFamily: FONT,\n display: \"flex\",\n flexDirection: \"column\",\n gap: 12,\n ...(!mode || mode === \"inline\" ? style : {}),\n }}\n onKeyDown={handleKeyDown}\n >\n {/* Header with search */}\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 8 }}>\n {showSearch && (\n <div style={{ flex: 1, position: \"relative\" }}>\n <input\n type=\"text\"\n placeholder={searchPlaceholder}\n value={searchInput}\n onChange={(e) => setSearchInput(e.target.value)}\n style={{\n width: \"100%\",\n padding: \"8px 12px\",\n paddingRight: searchInput ? 32 : 12,\n borderRadius: 6,\n border: \"1px solid #ddd\",\n fontSize: 14,\n fontFamily: FONT,\n outline: \"none\",\n boxSizing: \"border-box\",\n }}\n />\n {searchInput && (\n <button\n onClick={() => setSearchInput(\"\")}\n style={{\n position: \"absolute\",\n right: 6,\n top: \"50%\",\n transform: \"translateY(-50%)\",\n background: \"none\",\n border: \"none\",\n fontSize: 16,\n cursor: \"pointer\",\n color: \"#999\",\n lineHeight: 1,\n padding: \"2px 4px\",\n }}\n >\n &times;\n </button>\n )}\n </div>\n )}\n {mode === \"modal\" && onClose && (\n <button\n onClick={onClose}\n style={{\n background: \"none\",\n border: \"none\",\n fontSize: 20,\n cursor: \"pointer\",\n padding: \"4px 8px\",\n color: \"#666\",\n lineHeight: 1,\n }}\n >\n &times;\n </button>\n )}\n </div>\n\n {/* Action error */}\n {actionError && (\n <div style={{ color: \"#d32f2f\", fontSize: 13, padding: \"4px 0\" }}>\n {actionError}\n </div>\n )}\n\n {/* Loading skeleton */}\n {loading && (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 4 }}>\n {Array.from({ length: skeletonCount }).map((_, i) => (\n <div\n key={i}\n style={{\n height: 48,\n borderRadius: 6,\n backgroundColor: \"#f0f0f0\",\n animation: \"mr-skeleton-pulse 1.5s ease-in-out infinite\",\n }}\n />\n ))}\n </div>\n )}\n\n {/* Fetch error */}\n {error && (\n <div style={{ textAlign: \"center\", padding: 20, color: \"#d32f2f\", fontSize: 14 }}>\n {error}\n </div>\n )}\n\n {/* Empty state */}\n {!loading && !error && files.length === 0 && (\n <div style={{ textAlign: \"center\", padding: \"40px 20px\", color: \"#999\" }}>\n <svg\n width=\"36\"\n height=\"36\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n style={{ opacity: 0.4, marginBottom: 8 }}\n >\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n </svg>\n <div style={{ fontSize: 14, fontWeight: 500, color: \"#666\" }}>No files yet</div>\n <div style={{ fontSize: 13, marginTop: 4 }}>\n {searchInput ? \"Try a different search term\" : \"Upload a file to get started\"}\n </div>\n </div>\n )}\n\n {/* File list */}\n {!loading && files.length > 0 && (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 2 }}>\n {files.map((f) => {\n const isSelected = f.fileId === selectedFileId;\n const isActive = activeRow === f.fileId;\n const fmtColor = FORMAT_COLORS[f.format.toLowerCase()] || \"#757575\";\n return (\n <div\n key={f.fileId}\n onMouseEnter={() => setActiveRow(f.fileId)}\n onMouseLeave={() => setActiveRow(null)}\n onClick={() => onSelect?.(f)}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 10,\n padding: \"8px 12px\",\n borderRadius: 6,\n border: isSelected\n ? \"1px solid #1976d2\"\n : \"1px solid #eee\",\n backgroundColor: isSelected\n ? \"#e3f2fd\"\n : isActive\n ? \"#fafafa\"\n : \"#fff\",\n cursor: \"pointer\",\n transition: \"all 0.1s ease\",\n }}\n >\n {/* Format badge */}\n <div\n style={{\n width: 36,\n height: 36,\n borderRadius: 6,\n backgroundColor: fmtColor,\n color: \"#fff\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontSize: 10,\n fontWeight: 700,\n flexShrink: 0,\n textTransform: \"uppercase\",\n }}\n >\n {f.format.slice(0, 4)}\n </div>\n\n {/* Title + meta */}\n <div style={{ flex: 1, minWidth: 0 }}>\n <div\n style={{\n fontSize: 14,\n fontWeight: 500,\n color: \"#222\",\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n }}\n >\n {f.title}\n </div>\n <div\n style={{\n fontSize: 12,\n color: \"#888\",\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n }}\n >\n {f.originalName} · {formatBytes(f.sizeBytes)}\n </div>\n </div>\n\n {/* Action buttons */}\n {showActions && isActive && (\n <div\n style={{ display: \"flex\", gap: 4, flexShrink: 0 }}\n onClick={(e) => e.stopPropagation()}\n >\n <RowActionBtn label=\"Info\" onClick={() => setDetailFile(f)} />\n <RowActionBtn label=\"Edit\" onClick={() => openEdit(f)} />\n <RowActionBtn label=\"Del\" onClick={() => openDelete(f)} color=\"#d32f2f\" />\n </div>\n )}\n </div>\n );\n })}\n </div>\n )}\n\n {/* Pagination */}\n {pageCount > 1 && (\n <div\n style={{\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n gap: 12,\n fontSize: 14,\n }}\n >\n <button\n disabled={page <= 0}\n onClick={() => setPage(page - 1)}\n style={{\n padding: \"4px 12px\",\n borderRadius: 4,\n border: \"1px solid #ddd\",\n background: page <= 0 ? \"#f5f5f5\" : \"#fff\",\n cursor: page <= 0 ? \"default\" : \"pointer\",\n fontFamily: FONT,\n fontSize: 13,\n color: page <= 0 ? \"#bbb\" : \"#333\",\n }}\n >\n Prev\n </button>\n <span style={{ color: \"#666\", fontSize: 13 }}>\n Page {page + 1} of {pageCount} · {total} file{total !== 1 ? \"s\" : \"\"}\n </span>\n <button\n disabled={page >= pageCount - 1}\n onClick={() => setPage(page + 1)}\n style={{\n padding: \"4px 12px\",\n borderRadius: 4,\n border: \"1px solid #ddd\",\n background: page >= pageCount - 1 ? \"#f5f5f5\" : \"#fff\",\n cursor: page >= pageCount - 1 ? \"default\" : \"pointer\",\n fontFamily: FONT,\n fontSize: 13,\n color: page >= pageCount - 1 ? \"#bbb\" : \"#333\",\n }}\n >\n Next\n </button>\n </div>\n )}\n\n {/* Details modal */}\n {detailFile && (\n <FileDetails\n file={detailFile}\n onClose={() => setDetailFile(null)}\n onEdit={showActions ? openEdit : undefined}\n onDelete={showActions ? openDelete : undefined}\n />\n )}\n\n {/* Edit dialog */}\n {editFile && (\n <div\n style={{\n position: \"fixed\",\n inset: 0,\n zIndex: 10000,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: \"rgba(0,0,0,0.4)\",\n }}\n onClick={(e) => {\n if (e.target === e.currentTarget && !editSaving) setEditFile(null);\n }}\n >\n <div\n style={{\n backgroundColor: \"#fff\",\n borderRadius: 10,\n padding: 20,\n maxWidth: 400,\n width: \"90vw\",\n fontFamily: FONT,\n }}\n >\n <div style={{ fontWeight: 600, fontSize: 15, marginBottom: 12 }}>\n Edit File\n </div>\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 8 }}>\n <input\n type=\"text\"\n placeholder=\"Title\"\n value={editTitle}\n onChange={(e) => setEditTitle(e.target.value)}\n disabled={editSaving}\n maxLength={250}\n style={{\n padding: \"8px 12px\",\n borderRadius: 6,\n border: \"1px solid #ddd\",\n fontSize: 14,\n fontFamily: FONT,\n outline: \"none\",\n }}\n />\n <input\n type=\"text\"\n placeholder=\"Description (optional)\"\n value={editDesc}\n onChange={(e) => setEditDesc(e.target.value)}\n disabled={editSaving}\n maxLength={500}\n style={{\n padding: \"8px 12px\",\n borderRadius: 6,\n border: \"1px solid #ddd\",\n fontSize: 14,\n fontFamily: FONT,\n outline: \"none\",\n }}\n />\n </div>\n <div style={{ display: \"flex\", justifyContent: \"flex-end\", gap: 8, marginTop: 16 }}>\n <button\n onClick={() => setEditFile(null)}\n disabled={editSaving}\n style={{\n padding: \"6px 14px\",\n borderRadius: 6,\n border: \"1px solid #ddd\",\n backgroundColor: \"#fff\",\n fontSize: 13,\n fontFamily: FONT,\n cursor: \"pointer\",\n color: \"#333\",\n }}\n >\n Cancel\n </button>\n <button\n onClick={handleEditSave}\n disabled={editSaving || !editTitle.trim()}\n style={{\n padding: \"6px 14px\",\n borderRadius: 6,\n border: \"none\",\n backgroundColor: editSaving || !editTitle.trim() ? \"#bbb\" : \"#1976d2\",\n color: \"#fff\",\n fontSize: 13,\n fontFamily: FONT,\n cursor: editSaving ? \"default\" : \"pointer\",\n }}\n >\n {editSaving ? \"Saving...\" : \"Save\"}\n </button>\n </div>\n </div>\n </div>\n )}\n\n {/* Delete confirmation */}\n {deleteConfirm && (\n <div\n style={{\n position: \"fixed\",\n inset: 0,\n zIndex: 10000,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: \"rgba(0,0,0,0.4)\",\n }}\n onClick={(e) => {\n if (e.target === e.currentTarget && !deleting) setDeleteConfirm(null);\n }}\n >\n <div\n style={{\n backgroundColor: \"#fff\",\n borderRadius: 10,\n padding: 20,\n maxWidth: 360,\n width: \"90vw\",\n fontFamily: FONT,\n }}\n >\n <div style={{ fontWeight: 600, fontSize: 15, marginBottom: 8 }}>\n Delete File\n </div>\n <div style={{ fontSize: 14, color: \"#555\", marginBottom: 16 }}>\n Delete &ldquo;{deleteConfirm.title}&rdquo;? This cannot be undone.\n </div>\n <div style={{ display: \"flex\", justifyContent: \"flex-end\", gap: 8 }}>\n <button\n onClick={() => setDeleteConfirm(null)}\n disabled={deleting}\n style={{\n padding: \"6px 14px\",\n borderRadius: 6,\n border: \"1px solid #ddd\",\n backgroundColor: \"#fff\",\n fontSize: 13,\n fontFamily: FONT,\n cursor: \"pointer\",\n color: \"#333\",\n }}\n >\n Cancel\n </button>\n <button\n onClick={() => handleDelete(deleteConfirm)}\n disabled={deleting}\n style={{\n padding: \"6px 14px\",\n borderRadius: 6,\n border: \"none\",\n backgroundColor: deleting ? \"#bbb\" : \"#d32f2f\",\n color: \"#fff\",\n fontSize: 13,\n fontFamily: FONT,\n cursor: deleting ? \"default\" : \"pointer\",\n }}\n >\n {deleting ? \"Deleting...\" : \"Delete\"}\n </button>\n </div>\n </div>\n </div>\n )}\n </div>\n );\n\n if (mode === \"modal\") {\n return (\n <div\n style={{\n position: \"fixed\",\n inset: 0,\n zIndex: 9999,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: \"rgba(0,0,0,0.4)\",\n }}\n onClick={(e) => {\n if (e.target === e.currentTarget) onClose?.();\n }}\n >\n <div\n style={{\n backgroundColor: \"#fff\",\n borderRadius: 12,\n padding: 20,\n maxWidth: 640,\n width: \"90vw\",\n maxHeight: \"80vh\",\n overflow: \"auto\",\n boxShadow: \"0 8px 32px rgba(0,0,0,0.2)\",\n ...style,\n }}\n >\n {content}\n </div>\n </div>\n );\n }\n\n return content;\n}\n\nfunction RowActionBtn({\n label,\n onClick,\n color,\n}: {\n label: string;\n onClick: () => void;\n color?: string;\n}) {\n return (\n <button\n onClick={(e) => {\n e.stopPropagation();\n onClick();\n }}\n style={{\n padding: \"4px 10px\",\n borderRadius: 4,\n border: \"1px solid #e0e0e0\",\n backgroundColor: \"#fff\",\n color: color || \"#555\",\n fontSize: 12,\n fontWeight: 500,\n cursor: \"pointer\",\n fontFamily: FONT,\n }}\n >\n {label}\n </button>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/runtime.ts","../src/AppKit.tsx","../src/UserButton.tsx","../src/hooks.ts","../src/appResource.ts","../src/images/config.ts","../src/images/api.ts","../src/images/useImages.ts","../src/images/useImageUpload.ts","../src/images/useImage.ts","../src/images/ImageUploader.tsx","../src/images/MrImage.tsx","../src/images/ImageDetails.tsx","../src/images/ImagePicker.tsx","../src/files/config.ts","../src/files/api.ts","../src/files/useFiles.ts","../src/files/useFile.ts","../src/files/useFileUpload.ts","../src/files/FileUploader.tsx","../src/files/FileDetails.tsx","../src/files/FilePicker.tsx"],"names":["useEffect","jsxs","jsx","useState","Fragment","useRef","useCallback","useMemo","FONT","v","updateImage","headers","apiBase","IDLE","ACCEPT_DEFAULT","MAX_SIZE_DEFAULT","formatSize","formatBytes","isSafeURL","sanitizeFilename","MetaItem","SKELETON_STYLE_ID","useSkeletonStyle","updateFile"],"mappings":"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","file":"index.js","sourcesContent":["import type { AppKitRuntime } from \"./types\";\n\n/**\n * Returns true if the URL uses HTTPS or targets localhost (for development).\n * Used to prevent loading scripts from or sending tokens to untrusted origins.\n */\nexport function isSafeOrigin(url: string): boolean {\n const s = (url || \"\").trim().toLowerCase();\n if (s.startsWith(\"https://\")) return true;\n if (\n s.startsWith(\"http://localhost\") ||\n s.startsWith(\"http://127.0.0.1\") ||\n s.startsWith(\"http://0.0.0.0\")\n ) return true;\n return false;\n}\n\nexport function getManyRowsAppKitRuntime(): AppKitRuntime | null {\n const w = window as any;\n\n // Preferred: namespaced\n if (w.ManyRows?.AppKit?.init) return w.ManyRows.AppKit;\n\n // Back-compat: function globals\n if (w.initManyRowsAppKit) {\n return {\n init: w.initManyRowsAppKit,\n destroy: w.destroyManyRowsAppKit,\n info: w.getManyRowsAppKitInfo,\n };\n }\n\n return null;\n}\n\nexport function ensureScriptLoaded(src: string, timeoutMs: number): Promise<void> {\n return new Promise((resolve, reject) => {\n if (typeof window === \"undefined\" || typeof document === \"undefined\") {\n resolve(); // SSR: noop\n return;\n }\n\n // Validate origin before injecting script\n if (!isSafeOrigin(src)) {\n reject(new Error(`Refused to load AppKit script from non-HTTPS origin: ${src}`));\n return;\n }\n\n // Already present?\n const existing = Array.from(document.querySelectorAll('script[data-manyrows-appkit=\"true\"]')).find(\n (el) => el.getAttribute(\"src\") === src\n );\n if (existing) {\n resolve();\n return;\n }\n\n // If runtime already exists, we’re good.\n if (getManyRowsAppKitRuntime()) {\n resolve();\n return;\n }\n\n const s = document.createElement(\"script\");\n s.src = src;\n s.async = true;\n s.crossOrigin = \"anonymous\";\n s.setAttribute(\"data-manyrows-appkit\", \"true\");\n\n const timer = window.setTimeout(() => {\n cleanup();\n reject(new Error(`Timed out loading AppKit script after ${timeoutMs}ms: ${src}`));\n }, timeoutMs);\n\n function cleanup() {\n window.clearTimeout(timer);\n s.onload = null;\n s.onerror = null;\n }\n\n s.onload = () => {\n cleanup();\n resolve();\n };\n\n s.onerror = (e) => {\n cleanup();\n reject(e);\n };\n\n document.head.appendChild(s);\n });\n}\n","// appkit-react/AppKit.tsx\nimport React, {\n createContext,\n useContext,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport type {\n ManyRowsAppKitError,\n ManyRowsAppKitReady,\n ManyRowsAppKitHandle,\n ManyRowsAppKitSnapshot,\n} from \"./types\";\nimport { ensureScriptLoaded, getManyRowsAppKitRuntime, isSafeOrigin } from \"./runtime\";\n\n// -----------------------------\n// Tiny semver helpers (no deps)\n// -----------------------------\n\ntype Semver = { major: number; minor: number; patch: number };\n\nfunction parseSemver(v: unknown): Semver | null {\n if (typeof v !== \"string\") return null;\n const s = v.trim();\n const m = /^v?(\\d+)\\.(\\d+)\\.(\\d+)/.exec(s);\n if (!m) return null;\n const major = Number(m[1]);\n const minor = Number(m[2]);\n const patch = Number(m[3]);\n if (!Number.isFinite(major) || !Number.isFinite(minor) || !Number.isFinite(patch)) return null;\n return { major, minor, patch };\n}\n\nfunction cmpSemver(a: Semver, b: Semver): number {\n if (a.major !== b.major) return a.major - b.major;\n if (a.minor !== b.minor) return a.minor - b.minor;\n return a.patch - b.patch;\n}\n\nfunction semverGte(runtimeVersion: unknown, minVersion: string): boolean {\n const r = parseSemver(runtimeVersion);\n const m = parseSemver(minVersion);\n if (!r || !m) return false;\n return cmpSemver(r, m) >= 0;\n}\n\n// -----------------------------\n// Prod/dev safety helpers\n// -----------------------------\n\nfunction isProbablyProdBuild(): boolean {\n const p = (globalThis as any)?.process;\n const env = p?.env?.NODE_ENV;\n return env === \"production\";\n}\n\nfunction looksLikeLocalhost(url: string): boolean {\n const s = (url || \"\").trim().toLowerCase();\n return (\n s.startsWith(\"http://localhost\") ||\n s.startsWith(\"https://localhost\") ||\n s.startsWith(\"http://127.0.0.1\") ||\n s.startsWith(\"https://127.0.0.1\") ||\n s.startsWith(\"http://0.0.0.0\") ||\n s.startsWith(\"https://0.0.0.0\")\n );\n}\n\nfunction assertSafeURLs(\n baseURL: string,\n src: string,\n report: (err: ManyRowsAppKitError) => void,\n): boolean {\n if (!isSafeOrigin(baseURL)) {\n report(\n mkErr(\"BASE_URL_NOT_ALLOWED_IN_PROD\", \"baseURL must use HTTPS (or localhost for development).\", {\n baseURL,\n })\n );\n return false;\n }\n if (!isSafeOrigin(src)) {\n report(\n mkErr(\"SCRIPT_LOAD_FAILED\", \"Script src must use HTTPS (or localhost for development).\", {\n src,\n })\n );\n return false;\n }\n return true;\n}\n\n// -----------------------------\n// Auth predicate (snapshot is loose)\n// -----------------------------\n\nfunction isAuthedSnapshot(s: ManyRowsAppKitSnapshot | null | undefined): boolean {\n if (!s || typeof s !== \"object\") return false;\n const status = (s as any).status;\n if (status !== \"authenticated\") return false;\n\n const appData = (s as any).appData;\n if (!appData || typeof appData !== \"object\") return false;\n\n // don’t over-constrain v0\n return true;\n}\n\n// -----------------------------\n// AppKit context + hook\n// -----------------------------\n\nexport type AppKitContextValue = {\n status: \"idle\" | \"loading\" | \"mounted\" | \"error\";\n error: ManyRowsAppKitError | null;\n\n readyInfo: ManyRowsAppKitReady | null;\n snapshot: ManyRowsAppKitSnapshot | null;\n\n // convenience derived flag\n isAuthenticated: boolean;\n\n // present when runtime supports handle API\n handle: ManyRowsAppKitHandle | null;\n\n // convenience methods (safe no-ops if handle missing)\n refresh: () => void;\n logout: () => Promise<void>;\n setToken: (tok: string | null) => void;\n destroy: () => void;\n info: () => ManyRowsAppKitReady | null;\n};\n\nconst Ctx = createContext<AppKitContextValue | null>(null);\n\nexport function useAppKit(): AppKitContextValue {\n const v = useContext(Ctx);\n if (!v) throw new Error(\"useAppKit() must be used under <AppKit />\");\n return v;\n}\n\n/**\n * Render children only when the AppKit runtime is authenticated and appData exists.\n * Use this to mount your customer app \"behind\" the AppKit login screen.\n */\nexport function AppKitAuthed(props: {\n children: React.ReactNode;\n /**\n * Optional: shown when not authenticated (or still checking).\n * Default: null (render nothing).\n */\n fallback?: React.ReactNode;\n}) {\n const { isAuthenticated } = useAppKit();\n if (!isAuthenticated) return <>{props.fallback ?? null}</>;\n return <>{props.children}</>;\n}\n\n// -----------------------------\n// Props\n// -----------------------------\n\nexport type AppKitTheme = {\n primaryColor?: string;\n};\n\nconst DEFAULT_BASE_URL = \"https://app.manyrows.com\";\n\nexport type AppKitProps = {\n workspace: string;\n\n // ✅ replaces project+env\n appId: string;\n\n /**\n * Base URL of the ManyRows service.\n * Defaults to \"https://app.manyrows.com\".\n */\n baseURL?: string;\n\n // ✅ Theme customization\n theme?: AppKitTheme;\n\n /**\n * URL of the AppKit runtime script.\n * Defaults to `{baseURL}/appkit/assets/appkit.js`.\n */\n src?: string;\n timeoutMs?: number;\n\n silent?: boolean;\n throwOnError?: boolean;\n\n onReady?: (info: ManyRowsAppKitReady) => void;\n onError?: (err: ManyRowsAppKitError) => void;\n\n /**\n * Fired for every snapshot update from the runtime (checking/unauth/authed/etc).\n */\n onState?: (snapshot: ManyRowsAppKitSnapshot | null) => void;\n\n /**\n * Fired when AppKit is authenticated and appData is available.\n * This is the correct place to render the customer app (imperative style).\n */\n onReadyState?: (snapshot: ManyRowsAppKitSnapshot) => void;\n\n className?: string;\n style?: React.CSSProperties;\n containerId?: string;\n\n runtimeMinVersion?: string;\n runtimeExactVersion?: string;\n\n loading?: React.ReactNode;\n errorUI?: (err: ManyRowsAppKitError) => React.ReactNode;\n hideLoadingUI?: boolean;\n hideErrorUI?: boolean;\n\n // kept for future (no longer used now that env is arbitrary)\n allowDevEnvInProd?: boolean;\n blockLocalhostBaseURLInProd?: boolean;\n\n // ✅ allow <AppKit>children</AppKit>\n children?: React.ReactNode;\n};\n\n// -----------------------------\n// Errors / UI\n// -----------------------------\n\nfunction mkErr(\n code: ManyRowsAppKitError[\"code\"],\n message: string,\n details?: unknown\n): ManyRowsAppKitError {\n return { code, message, details };\n}\n\nfunction DefaultError({ err }: { err: ManyRowsAppKitError }) {\n return (\n <div\n role=\"alert\"\n style={{\n width: \"100%\",\n borderRadius: 10,\n border: \"1px solid rgba(220, 38, 38, 0.35)\",\n background: \"rgba(220, 38, 38, 0.06)\",\n padding: 12,\n fontFamily:\n 'ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, \"Apple Color Emoji\", \"Segoe UI Emoji\"',\n }}\n >\n <div style={{ fontWeight: 700, marginBottom: 6 }}>ManyRows AppKit failed to load</div>\n <div style={{ fontSize: 13, marginBottom: 8 }}>\n <span style={{ fontWeight: 600 }}>{err.code}</span>: {err.message}\n </div>\n {err.details !== undefined && !isProbablyProdBuild() ? (\n <pre\n style={{\n fontSize: 12,\n margin: 0,\n whiteSpace: \"pre-wrap\",\n wordBreak: \"break-word\",\n opacity: 0.8,\n }}\n >\n {typeof err.details === \"string\" ? err.details : JSON.stringify(err.details, null, 2)}\n </pre>\n ) : null}\n </div>\n );\n}\n\n// -----------------------------\n// Component\n// -----------------------------\n\nexport function AppKit(props: AppKitProps) {\n const autoId = useId();\n const containerId = props.containerId ?? `manyrows-appkit-${autoId.replace(/[:]/g, \"\")}`;\n\n // Resolve defaults: baseURL → src\n const resolvedBaseURL = props.baseURL?.trim() || DEFAULT_BASE_URL;\n const resolvedSrc = props.src?.trim() || `${resolvedBaseURL}/appkit/assets/appkit.js`;\n\n // If host supplies children, we assume host wants to own the authed UI.\n // In that case, suppress the runtime's *default* authed screen by passing renderAuthed={() => null}.\n const hasChildren = React.Children.count(props.children) > 0;\n\n const initKey = useMemo(\n () =>\n [\n containerId,\n props.workspace,\n props.appId,\n resolvedBaseURL,\n resolvedSrc,\n props.runtimeMinVersion ?? \"\",\n props.runtimeExactVersion ?? \"\",\n props.allowDevEnvInProd ? \"1\" : \"0\",\n props.blockLocalhostBaseURLInProd === false ? \"0\" : \"1\",\n hasChildren ? \"children:1\" : \"children:0\",\n ].join(\"|\"),\n [\n containerId,\n props.workspace,\n props.appId,\n resolvedBaseURL,\n resolvedSrc,\n props.runtimeMinVersion,\n props.runtimeExactVersion,\n props.allowDevEnvInProd,\n props.blockLocalhostBaseURLInProd,\n hasChildren,\n ]\n );\n\n const handleRef = useRef<ManyRowsAppKitHandle | null>(null);\n const [handle, setHandle] = useState<ManyRowsAppKitHandle | null>(null);\n\n const [status, setStatus] = useState<\"idle\" | \"loading\" | \"mounted\" | \"error\">(\"idle\");\n const [lastError, setLastError] = useState<ManyRowsAppKitError | null>(null);\n\n const [readyInfo, setReadyInfo] = useState<ManyRowsAppKitReady | null>(null);\n const [snapshot, setSnapshot] = useState<ManyRowsAppKitSnapshot | null>(null);\n\n useEffect(() => {\n let cancelled = false;\n\n setStatus(\"loading\");\n setLastError(null);\n setReadyInfo(null);\n setSnapshot(null);\n handleRef.current = null;\n setHandle(null);\n\n const report = (err: ManyRowsAppKitError) => {\n setLastError(err);\n setStatus(\"error\");\n\n if (!props.silent) {\n // eslint-disable-next-line no-console\n console.warn(\"[@manyrows/appkit-react]\", err.code, err.message, err.details ?? \"\");\n }\n props.onError?.(err);\n };\n\n const init = async () => {\n if (!props.workspace?.trim() || !props.appId?.trim()) {\n report(\n mkErr(\"INVALID_PROPS\", \"workspace and appId are required.\", {\n workspace: props.workspace,\n appId: props.appId,\n })\n );\n return;\n }\n\n if (!assertSafeURLs(resolvedBaseURL, resolvedSrc, report)) return;\n\n const prod = isProbablyProdBuild();\n\n if (\n prod &&\n props.blockLocalhostBaseURLInProd !== false &&\n looksLikeLocalhost(resolvedBaseURL)\n ) {\n report(\n mkErr(\n \"BASE_URL_NOT_ALLOWED_IN_PROD\",\n \"localhost baseURL is not allowed in production builds.\",\n { baseURL: resolvedBaseURL }\n )\n );\n return;\n }\n\n try {\n const timeoutMs = props.timeoutMs ?? 4000;\n\n await ensureScriptLoaded(resolvedSrc, timeoutMs);\n\n const start = Date.now();\n while (!getManyRowsAppKitRuntime() && Date.now() - start < timeoutMs) {\n if (cancelled) return;\n await new Promise((r) => setTimeout(r, 25));\n }\n\n const api = getManyRowsAppKitRuntime();\n if (!api) {\n report(\n mkErr(\n \"SCRIPT_TIMEOUT\",\n `AppKit runtime not found after loading script: ${resolvedSrc}`,\n { src: resolvedSrc }\n )\n );\n return;\n }\n\n const runtimeVersion: unknown = (api as any)?.version;\n\n if (props.runtimeExactVersion) {\n const expected = props.runtimeExactVersion.trim();\n if (!expected) {\n report(mkErr(\"INVALID_PROPS\", \"runtimeExactVersion must be a non-empty string.\"));\n return;\n }\n const found = typeof runtimeVersion === \"string\" ? runtimeVersion.trim() : \"\";\n if (found !== expected) {\n report(\n mkErr(\"RUNTIME_VERSION_MISMATCH\", \"AppKit runtime version mismatch.\", {\n expected,\n found: runtimeVersion,\n })\n );\n return;\n }\n } else if (props.runtimeMinVersion) {\n const min = props.runtimeMinVersion.trim();\n if (!min) {\n report(mkErr(\"INVALID_PROPS\", \"runtimeMinVersion must be a non-empty string.\"));\n return;\n }\n const ok = semverGte(runtimeVersion, min);\n if (!ok) {\n report(\n mkErr(\"RUNTIME_VERSION_TOO_OLD\", \"AppKit runtime is too old.\", {\n requiredMin: min,\n found: runtimeVersion,\n parsedFound: parseSemver(runtimeVersion),\n })\n );\n return;\n }\n }\n\n const h = (api as any).init({\n containerId,\n workspace: props.workspace.trim(),\n appId: props.appId.trim(),\n baseURL: resolvedBaseURL,\n theme: props.theme,\n silent: props.silent,\n throwOnError: props.throwOnError,\n\n // If host provides children, hide runtime default authed UI.\n // Runtime will still render login / errors / forbidden screens as normal.\n renderAuthed: hasChildren ? (() => null) : undefined,\n\n onReady: (info: ManyRowsAppKitReady) => {\n if (cancelled) return;\n setStatus(\"mounted\");\n setLastError(null);\n setReadyInfo(info);\n props.onReady?.(info);\n },\n\n onState: (s: ManyRowsAppKitSnapshot | null) => {\n if (cancelled) return;\n setSnapshot(s);\n props.onState?.(s);\n },\n\n onReadyState: (s: ManyRowsAppKitSnapshot) => {\n if (cancelled) return;\n props.onReadyState?.(s);\n },\n\n onError: (e: any) => {\n report(mkErr(\"RUNTIME_ERROR\", \"AppKit runtime error.\", e));\n },\n });\n\n // Set handle BEFORE any callbacks fire to avoid stale null on first mount\n handleRef.current = h ?? null;\n setHandle(h ?? null);\n } catch (e) {\n report(mkErr(\"SCRIPT_LOAD_FAILED\", \"Failed to load AppKit script.\", { error: e }));\n }\n };\n\n void init();\n\n return () => {\n cancelled = true;\n\n try {\n handleRef.current?.destroy?.();\n } catch {\n // ignore\n }\n\n try {\n const api = getManyRowsAppKitRuntime();\n api?.destroy?.(containerId);\n } catch {\n // ignore\n }\n\n handleRef.current = null;\n setHandle(null);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [initKey]);\n\n const showLoading = status === \"loading\" && !props.hideLoadingUI;\n const showError = status === \"error\" && !!lastError && !props.hideErrorUI;\n\n const ctx: AppKitContextValue = useMemo(() => {\n return {\n status,\n error: lastError,\n readyInfo,\n snapshot,\n isAuthenticated: isAuthedSnapshot(snapshot),\n handle,\n\n refresh: () => {\n try {\n handle?.refresh?.();\n } catch {\n // ignore\n }\n },\n logout: async () => {\n try {\n await handle?.logout?.();\n } catch {\n // ignore\n }\n },\n setToken: (tok: string | null) => {\n try {\n handle?.setToken?.(tok);\n } catch {\n // ignore\n }\n },\n destroy: () => {\n try {\n handle?.destroy?.();\n } catch {\n // ignore\n }\n },\n info: () => {\n try {\n return handle?.info?.() ?? null;\n } catch {\n return null;\n }\n },\n };\n }, [status, lastError, readyInfo, snapshot, handle]);\n\n return (\n <Ctx.Provider value={ctx}>\n <div className={props.className} style={props.style}>\n {showLoading && props.loading ? props.loading : null}\n {showError && lastError\n ? props.errorUI\n ? props.errorUI(lastError)\n : <DefaultError err={lastError} />\n : null}\n\n {/* Runtime owns all UI inside this container */}\n <div id={containerId} />\n\n {/* Host-side children (can use AppKitAuthed/useAppKit).\n Hidden while the runtime is showing login UI so children\n (e.g. AppKitAuthed fallback) don't cover the Auth card. */}\n <div style={\n status === \"mounted\" && snapshot && !isAuthedSnapshot(snapshot)\n ? { display: \"none\" }\n : undefined\n }>\n {props.children}\n </div>\n </div>\n </Ctx.Provider>\n );\n}\n","import React, { useState, useEffect, useCallback } from \"react\";\nimport { useAppKit } from \"./AppKit\";\n\ntype ToastType = { message: string; type: \"success\" | \"error\" } | null;\n\nfunction Toast({ toast, onClose }: { toast: ToastType; onClose: () => void }) {\n useEffect(() => {\n if (toast) {\n const timer = setTimeout(onClose, 4000);\n return () => clearTimeout(timer);\n }\n }, [toast, onClose]);\n\n if (!toast) return null;\n\n return (\n <div\n style={{\n position: \"fixed\",\n bottom: 24,\n left: \"50%\",\n transform: \"translateX(-50%)\",\n padding: \"12px 20px\",\n borderRadius: 8,\n backgroundColor: toast.type === \"success\" ? \"#2e7d32\" : \"#d32f2f\",\n color: \"#fff\",\n fontSize: 14,\n fontWeight: 500,\n boxShadow: \"0 4px 12px rgba(0,0,0,0.2)\",\n zIndex: 10000,\n display: \"flex\",\n alignItems: \"center\",\n gap: 12,\n }}\n >\n {toast.message}\n <button\n onClick={onClose}\n style={{\n background: \"none\",\n border: \"none\",\n color: \"#fff\",\n cursor: \"pointer\",\n fontSize: 18,\n lineHeight: 1,\n padding: 0,\n opacity: 0.8,\n }}\n >\n ×\n </button>\n </div>\n );\n}\n\nfunction getInitials(name?: string, email?: string): string {\n if (name) {\n const parts = name.trim().split(/\\s+/);\n if (parts.length >= 2) {\n return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();\n }\n return name.slice(0, 2).toUpperCase();\n }\n if (email) {\n return email.slice(0, 2).toUpperCase();\n }\n return \"?\";\n}\n\nfunction stringToColor(str: string): string {\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n hash = str.charCodeAt(i) + ((hash << 5) - hash);\n }\n const colors = [\n \"#1976d2\", \"#388e3c\", \"#d32f2f\", \"#7b1fa2\",\n \"#c2185b\", \"#0288d1\", \"#00796b\", \"#f57c00\",\n ];\n return colors[Math.abs(hash) % colors.length];\n}\n\nexport interface UserButtonProps {\n size?: \"small\" | \"medium\" | \"large\";\n}\n\nexport function UserButton({ size = \"medium\" }: UserButtonProps) {\n const { snapshot, logout, refresh, readyInfo } = useAppKit();\n const [open, setOpen] = useState(false);\n const [loggingOut, setLoggingOut] = useState(false);\n\n const account = snapshot?.appData?.account;\n const initials = getInitials(account?.name, account?.email);\n const avatarColor = stringToColor(account?.email || \"user\");\n\n const sizeMap = { small: 32, medium: 40, large: 48 };\n const fontSizeMap = { small: 14, medium: 16, large: 20 };\n const avatarSize = sizeMap[size];\n\n const handleLogout = async () => {\n setLoggingOut(true);\n try {\n await logout();\n } finally {\n setLoggingOut(false);\n setOpen(false);\n }\n };\n\n return (\n <>\n <button\n onClick={() => setOpen(true)}\n aria-label=\"Open profile\"\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: avatarSize,\n height: avatarSize,\n borderRadius: \"50%\",\n backgroundColor: avatarColor,\n color: \"#fff\",\n border: \"none\",\n cursor: \"pointer\",\n fontSize: fontSizeMap[size],\n fontWeight: 600,\n fontFamily: \"inherit\",\n padding: 0,\n }}\n >\n {initials}\n </button>\n\n {open && (\n <ProfileModal\n account={account}\n onClose={() => setOpen(false)}\n onLogout={handleLogout}\n loggingOut={loggingOut}\n avatarColor={avatarColor}\n initials={initials}\n baseURL={readyInfo?.baseURL}\n jwtToken={snapshot?.jwtToken}\n onNameUpdated={refresh}\n />\n )}\n </>\n );\n}\n\ninterface ProfileModalProps {\n account?: { email?: string; name?: string };\n onClose: () => void;\n onLogout: () => void;\n loggingOut: boolean;\n avatarColor: string;\n initials: string;\n baseURL?: string;\n jwtToken?: string | null;\n onNameUpdated: () => void;\n}\n\nfunction ProfileModal({\n account,\n onClose,\n onLogout,\n loggingOut,\n avatarColor,\n initials,\n baseURL,\n jwtToken,\n onNameUpdated,\n}: ProfileModalProps) {\n const [editing, setEditing] = useState(false);\n const [editName, setEditName] = useState(account?.name || \"\");\n const [saving, setSaving] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [toast, setToast] = useState<ToastType>(null);\n\n const clearToast = useCallback(() => setToast(null), []);\n\n useEffect(() => {\n setEditName(account?.name || \"\");\n setEditing(false);\n setError(null);\n }, [account?.name]);\n\n const handleSave = async () => {\n const trimmed = editName.trim();\n if (!trimmed) {\n setError(\"Display name is required\");\n return;\n }\n if (trimmed.length > 200) {\n setError(\"Display name is too long\");\n return;\n }\n if (trimmed === account?.name) {\n setEditing(false);\n return;\n }\n\n setSaving(true);\n setError(null);\n\n try {\n const res = await fetch(`${baseURL}/a/profile/display-name`, {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${jwtToken}`,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ displayName: trimmed }),\n });\n if (!res.ok) {\n const text = await res.text();\n throw new Error(text || \"Failed to update name\");\n }\n setEditing(false);\n onNameUpdated();\n setToast({ message: \"Display name updated\", type: \"success\" });\n } catch (err: any) {\n const msg = err.message || \"Failed to update name\";\n setError(msg);\n setToast({ message: msg, type: \"error\" });\n } finally {\n setSaving(false);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n handleSave();\n } else if (e.key === \"Escape\") {\n setEditing(false);\n setEditName(account?.name || \"\");\n setError(null);\n }\n };\n\n return (\n <div\n style={{\n position: \"fixed\",\n inset: 0,\n zIndex: 9999,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n {/* Backdrop */}\n <div\n onClick={onClose}\n style={{\n position: \"absolute\",\n inset: 0,\n backgroundColor: \"rgba(0, 0, 0, 0.5)\",\n }}\n />\n\n {/* Modal */}\n <div\n style={{\n position: \"relative\",\n backgroundColor: \"#fff\",\n borderRadius: 12,\n boxShadow: \"0 8px 32px rgba(0,0,0,0.2)\",\n width: \"100%\",\n maxWidth: 360,\n margin: 16,\n overflow: \"hidden\",\n }}\n >\n {/* Header */}\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n padding: \"16px 20px\",\n borderBottom: \"1px solid #eee\",\n }}\n >\n <h2 style={{ margin: 0, fontSize: 18, fontWeight: 600 }}>Profile</h2>\n <button\n onClick={onClose}\n style={{\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n padding: 4,\n fontSize: 20,\n lineHeight: 1,\n color: \"#666\",\n }}\n >\n ×\n </button>\n </div>\n\n {/* Content */}\n <div style={{ padding: 20 }}>\n {/* Avatar and name */}\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 16, marginBottom: 20 }}>\n <div\n style={{\n width: 64,\n height: 64,\n borderRadius: \"50%\",\n backgroundColor: avatarColor,\n color: \"#fff\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontSize: 24,\n fontWeight: 600,\n flexShrink: 0,\n }}\n >\n {initials}\n </div>\n <div style={{ minWidth: 0, flex: 1 }}>\n <div style={{ fontSize: 18, fontWeight: 600, marginBottom: 2 }}>\n {account?.name || \"User\"}\n </div>\n <div\n style={{\n fontSize: 14,\n color: \"#666\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {account?.email}\n </div>\n </div>\n </div>\n\n <hr style={{ border: \"none\", borderTop: \"1px solid #eee\", margin: \"16px 0\" }} />\n\n {/* Error */}\n {error && (\n <div\n style={{\n padding: \"10px 14px\",\n marginBottom: 16,\n backgroundColor: \"#ffebee\",\n color: \"#c62828\",\n borderRadius: 6,\n fontSize: 14,\n }}\n >\n {error}\n </div>\n )}\n\n {/* Account details */}\n <div style={{ marginBottom: 16 }}>\n <div style={{ display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", marginBottom: 4 }}>\n <div style={{ fontSize: 12, color: \"#888\", fontWeight: 600 }}>\n Display Name\n </div>\n {!editing && (\n <button\n onClick={() => setEditing(true)}\n style={{\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n padding: 2,\n fontSize: 12,\n color: \"#1976d2\",\n }}\n >\n Edit\n </button>\n )}\n </div>\n {editing ? (\n <div style={{ display: \"flex\", gap: 8 }}>\n <input\n type=\"text\"\n value={editName}\n onChange={(e) => setEditName(e.target.value)}\n onKeyDown={handleKeyDown}\n disabled={saving}\n autoFocus\n placeholder=\"Enter display name\"\n style={{\n flex: 1,\n padding: \"8px 12px\",\n fontSize: 14,\n border: `1px solid ${error ? \"#d32f2f\" : \"#ddd\"}`,\n borderRadius: 6,\n outline: \"none\",\n }}\n />\n <button\n onClick={handleSave}\n disabled={saving}\n style={{\n padding: \"8px 14px\",\n fontSize: 14,\n backgroundColor: \"#1976d2\",\n color: \"#fff\",\n border: \"none\",\n borderRadius: 6,\n cursor: saving ? \"not-allowed\" : \"pointer\",\n opacity: saving ? 0.6 : 1,\n }}\n >\n {saving ? \"…\" : \"Save\"}\n </button>\n </div>\n ) : (\n <div style={{ fontSize: 15 }}>{account?.name || \"—\"}</div>\n )}\n </div>\n <div style={{ marginBottom: 20 }}>\n <div style={{ fontSize: 12, color: \"#888\", fontWeight: 600, marginBottom: 4 }}>\n Email\n </div>\n <div style={{ fontSize: 15 }}>{account?.email || \"—\"}</div>\n </div>\n\n <hr style={{ border: \"none\", borderTop: \"1px solid #eee\", margin: \"16px 0\" }} />\n\n {/* Logout button */}\n <button\n onClick={onLogout}\n disabled={loggingOut}\n style={{\n width: \"100%\",\n padding: \"10px 16px\",\n fontSize: 15,\n fontWeight: 500,\n color: \"#d32f2f\",\n backgroundColor: \"#fff\",\n border: \"1px solid #d32f2f\",\n borderRadius: 8,\n cursor: loggingOut ? \"not-allowed\" : \"pointer\",\n opacity: loggingOut ? 0.6 : 1,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 8,\n }}\n >\n {loggingOut ? \"Logging out…\" : \"Log out\"}\n </button>\n </div>\n </div>\n\n <Toast toast={toast} onClose={clearToast} />\n </div>\n );\n}\n\nexport default UserButton;\n","// appkit-react/hooks.ts — convenience hooks for common data access\nimport { useAppKit } from \"./AppKit\";\nimport type { AppKitAccount, AppKitProjectAccess, AppKitFeatureFlag, AppKitConfigValue } from \"./types\";\n\n/**\n * Returns the authenticated user's account, or null if not authenticated.\n *\n * ```tsx\n * const user = useUser();\n * if (!user) return <p>Not logged in</p>;\n * return <p>Hello, {user.name || user.email}</p>;\n * ```\n */\nexport function useUser(): AppKitAccount | null {\n const { snapshot } = useAppKit();\n return snapshot?.appData?.account ?? null;\n}\n\n/**\n * Returns the current project access info (name, roles, permissions), or null.\n */\nexport function useProject(): AppKitProjectAccess | null {\n const { snapshot } = useAppKit();\n return snapshot?.appData?.project ?? null;\n}\n\n/**\n * Returns the user's roles in the current project.\n *\n * ```tsx\n * const roles = useRoles(); // [\"admin\", \"editor\"]\n * ```\n */\nexport function useRoles(): string[] {\n const { snapshot } = useAppKit();\n return snapshot?.appData?.project?.roles ?? [];\n}\n\n/**\n * Returns the user's permissions in the current project.\n *\n * ```tsx\n * const permissions = usePermissions(); // [\"read\", \"write\", \"delete\"]\n * ```\n */\nexport function usePermissions(): string[] {\n const { snapshot } = useAppKit();\n return snapshot?.appData?.project?.permissions ?? [];\n}\n\n/**\n * Returns true if the user has the given permission.\n *\n * ```tsx\n * const canEdit = usePermission(\"edit\"); // true\n * ```\n */\nexport function usePermission(permission: string): boolean {\n const perms = usePermissions();\n return perms.includes(permission);\n}\n\n/**\n * Returns true if the user has the given role.\n *\n * ```tsx\n * const isAdmin = useRole(\"admin\"); // true\n * ```\n */\nexport function useRole(role: string): boolean {\n const roles = useRoles();\n return roles.includes(role);\n}\n\n/**\n * Returns all feature flags for the current app/environment.\n *\n * ```tsx\n * const flags = useFeatureFlags(); // [{ key: \"dark-mode\", enabled: true }]\n * ```\n */\nexport function useFeatureFlags(): AppKitFeatureFlag[] {\n const { snapshot } = useAppKit();\n return (snapshot?.appData?.featureFlags ?? []) as AppKitFeatureFlag[];\n}\n\n/**\n * Returns whether a specific feature flag is enabled.\n *\n * ```tsx\n * const darkMode = useFeatureFlag(\"dark-mode\"); // true\n * ```\n */\nexport function useFeatureFlag(key: string): boolean {\n const flags = useFeatureFlags();\n const flag = flags.find((f) => f.key === key);\n return flag?.enabled ?? false;\n}\n\n/**\n * Returns all config values for the current app/environment.\n *\n * ```tsx\n * const config = useConfig(); // [{ key: \"api-url\", type: \"string\", value: \"https://...\" }]\n * ```\n */\nexport function useConfig(): AppKitConfigValue[] {\n const { snapshot } = useAppKit();\n return (snapshot?.appData?.config ?? []) as AppKitConfigValue[];\n}\n\n/**\n * Returns a specific config value by key, or the fallback if not found.\n *\n * ```tsx\n * const apiUrl = useConfigValue(\"api-url\"); // \"https://api.example.com\"\n * const limit = useConfigValue(\"max-items\", 100); // 100 if not set\n * ```\n */\nexport function useConfigValue<T = any>(key: string, fallback?: T): T | undefined {\n const config = useConfig();\n const entry = config.find((c) => c.key === key);\n return entry?.value !== undefined ? entry.value : fallback;\n}\n\n/**\n * Returns the JWT token for making authenticated API calls.\n *\n * ```tsx\n * const token = useToken();\n * fetch(\"/api/data\", { headers: { Authorization: `Bearer ${token}` } });\n * ```\n */\nexport function useToken(): string | null {\n const { snapshot } = useAppKit();\n return snapshot?.jwtToken ?? null;\n}\n\n/**\n * Returns the admin-managed metadata for the current user.\n *\n * ```tsx\n * const metadata = useMetadata(); // { tier: \"premium\", department: \"engineering\" }\n * ```\n */\nexport function useMetadata(): Record<string, any> {\n const { snapshot } = useAppKit();\n return snapshot?.appData?.account?.metadata ?? {};\n}\n\n/**\n * Returns the app-managed metadata for the current user.\n *\n * ```tsx\n * const appMetadata = useAppMetadata(); // { theme: \"dark\", onboarded: true }\n * ```\n */\nexport function useAppMetadata(): Record<string, any> {\n const { snapshot } = useAppKit();\n return snapshot?.appData?.account?.appMetadata ?? {};\n}\n\n/**\n * Returns a function to update the current user's app metadata (merge semantics).\n * After updating, call `refresh()` to reload the snapshot with the new values.\n *\n * ```tsx\n * const updateAppMetadata = useUpdateAppMetadata();\n * await updateAppMetadata({ theme: \"dark\" }); // merges into existing app_metadata\n * ```\n */\nexport function useUpdateAppMetadata(): (patch: Record<string, any>) => Promise<void> {\n const { snapshot } = useAppKit();\n\n return async (patch: Record<string, any>) => {\n const token = snapshot?.jwtToken;\n const baseURL = snapshot?.workspaceBaseURL;\n if (!token || !baseURL) {\n throw new Error(\"Not authenticated\");\n }\n\n const res = await fetch(`${baseURL}/a/me/metadata`, {\n method: \"PATCH\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${token}`,\n },\n body: JSON.stringify(patch),\n });\n\n if (!res.ok) {\n const body = await res.json().catch(() => ({}));\n throw new Error(body?.issues?.[0]?.message || body?.error || \"Failed to update metadata\");\n }\n };\n}\n","import { isSafeOrigin } from \"./runtime\";\n\ntype AppResourceData = {\n imagesBaseURL: string | null;\n filesBaseURL: string | null;\n};\n\ntype CacheEntry = { data: AppResourceData; fetchedAt: number };\nconst cache = new Map<string, CacheEntry>();\nconst CACHE_TTL = 5 * 60 * 1000; // 5 minutes\nconst inflight = new Map<string, Promise<AppResourceData>>();\n\nexport async function fetchAppResource(\n workspaceBaseURL: string,\n appId: string,\n): Promise<AppResourceData> {\n const key = `${workspaceBaseURL}|${appId}`;\n\n const cached = cache.get(key);\n if (cached && Date.now() - cached.fetchedAt < CACHE_TTL) return cached.data;\n\n const pending = inflight.get(key);\n if (pending) return pending;\n\n const p = fetch(`${workspaceBaseURL}/apps/${appId}`)\n .then((res) => {\n if (!res.ok) throw new Error(`HTTP ${res.status}`);\n return res.json();\n })\n .then((data) => {\n const rawImages: string | null = data.imagesBaseURL || null;\n const rawFiles: string | null = data.filesBaseURL || null;\n const result: AppResourceData = {\n imagesBaseURL: rawImages && isSafeOrigin(rawImages) ? rawImages : null,\n filesBaseURL: rawFiles && isSafeOrigin(rawFiles) ? rawFiles : null,\n };\n cache.set(key, { data: result, fetchedAt: Date.now() });\n inflight.delete(key);\n return result;\n })\n .catch((err) => {\n inflight.delete(key);\n throw err;\n });\n\n inflight.set(key, p);\n return p;\n}\n","import { useEffect, useState, useRef } from \"react\";\nimport { useAppKit } from \"../AppKit\";\nimport { fetchAppResource } from \"../appResource\";\n\ntype ImagesConfig = {\n imagesBaseURL: string | null;\n loading: boolean;\n error: string | null;\n};\n\nexport function useImagesConfig(): ImagesConfig {\n const { snapshot } = useAppKit();\n const [imagesBaseURL, setImagesBaseURL] = useState<string | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const fetchedRef = useRef(\"\");\n const retryCountRef = useRef(0);\n const maxRetries = 3;\n const retryDelayMs = 5000;\n\n // Read from snapshot instead of readyInfo to avoid a race condition\n // where onReady hasn't fired yet but the snapshot already has the info.\n const workspaceBaseURL: string | undefined = snapshot?.workspaceBaseURL;\n const appId: string | undefined = snapshot?.appId;\n\n // Reset fetchedRef when deps change so the hook can retry with new values\n useEffect(() => {\n const cacheKey = workspaceBaseURL && appId ? `${workspaceBaseURL}|${appId}` : \"\";\n if (fetchedRef.current !== cacheKey) {\n fetchedRef.current = \"\";\n retryCountRef.current = 0;\n }\n }, [workspaceBaseURL, appId]);\n\n useEffect(() => {\n if (!workspaceBaseURL || !appId) {\n setLoading(false);\n return;\n }\n\n const cacheKey = `${workspaceBaseURL}|${appId}`;\n\n if (fetchedRef.current === cacheKey) return;\n\n let cancelled = false;\n let retryTimer: ReturnType<typeof setTimeout> | null = null;\n setLoading(true);\n setError(null);\n\n const doFetch = () => {\n fetchAppResource(workspaceBaseURL, appId)\n .then((data) => {\n if (cancelled) return;\n setImagesBaseURL(data.imagesBaseURL);\n setLoading(false);\n fetchedRef.current = cacheKey;\n retryCountRef.current = 0;\n })\n .catch((err) => {\n if (cancelled) return;\n retryCountRef.current += 1;\n if (retryCountRef.current < maxRetries) {\n retryTimer = setTimeout(doFetch, retryDelayMs);\n } else {\n setError(err.message);\n setLoading(false);\n }\n });\n };\n\n doFetch();\n\n return () => {\n cancelled = true;\n if (retryTimer != null) clearTimeout(retryTimer);\n };\n }, [workspaceBaseURL, appId]);\n\n return { imagesBaseURL, loading, error };\n}\n","import type {\n ImageResource,\n ImageListResponse,\n ImageUploadOptions,\n ImageUpdateOptions,\n} from \"../types\";\n\ntype AuthParams = {\n imagesBaseURL: string;\n appId: string;\n jwtToken: string;\n};\n\nfunction headers(jwt: string): Record<string, string> {\n return { Authorization: `Bearer ${jwt}` };\n}\n\nfunction apiBase(p: AuthParams): string {\n return `${p.imagesBaseURL}/api/${encodeURIComponent(p.appId)}`;\n}\n\nexport async function listImages(\n p: AuthParams,\n opts?: { page?: number; pageSize?: number; q?: string; refType?: string; refId?: string },\n): Promise<ImageListResponse> {\n const url = new URL(`${apiBase(p)}/images`);\n if (opts?.page != null) url.searchParams.set(\"page\", String(opts.page));\n if (opts?.pageSize != null)\n url.searchParams.set(\"pageSize\", String(opts.pageSize));\n if (opts?.q) url.searchParams.set(\"q\", opts.q);\n if (opts?.refType) url.searchParams.set(\"refType\", opts.refType);\n if (opts?.refId) url.searchParams.set(\"refId\", opts.refId);\n\n const res = await fetch(url.toString(), { headers: headers(p.jwtToken) });\n if (!res.ok) throw new Error(`List images failed: HTTP ${res.status}`);\n return res.json();\n}\n\nexport async function getImage(\n p: AuthParams,\n imageId: string,\n): Promise<ImageResource> {\n const res = await fetch(`${apiBase(p)}/images/${encodeURIComponent(imageId)}`, {\n headers: headers(p.jwtToken),\n });\n if (!res.ok) throw new Error(`Get image failed: HTTP ${res.status}`);\n return res.json();\n}\n\nexport function uploadImage(\n p: AuthParams,\n opts: ImageUploadOptions,\n onProgress?: (pct: number, loaded: number, total: number) => void,\n signal?: AbortSignal,\n): Promise<{ status: number; body: any }> {\n return new Promise((resolve, reject) => {\n const xhr = new XMLHttpRequest();\n xhr.open(\"POST\", `${apiBase(p)}/upload`);\n xhr.setRequestHeader(\"Authorization\", `Bearer ${p.jwtToken}`);\n\n if (signal) {\n signal.addEventListener(\"abort\", () => xhr.abort(), { once: true });\n }\n\n xhr.upload.onprogress = (e) => {\n if (e.lengthComputable && onProgress) {\n const pct = Math.round((e.loaded / e.total) * 100);\n onProgress(pct, e.loaded, e.total);\n }\n };\n\n xhr.onload = () => {\n let body = null;\n try {\n body = JSON.parse(xhr.responseText);\n } catch {\n // no json body (e.g. 204)\n }\n resolve({ status: xhr.status, body });\n };\n\n xhr.onerror = () => reject(new Error(\"Upload network error\"));\n xhr.onabort = () => reject(new Error(\"Upload aborted\"));\n\n const fd = new FormData();\n fd.append(\"file\", opts.file);\n fd.append(\"title\", opts.title);\n if (opts.description) fd.append(\"description\", opts.description);\n if (opts.variants) fd.append(\"variants\", opts.variants);\n if (opts.refType) fd.append(\"refType\", opts.refType);\n if (opts.refId) fd.append(\"refId\", opts.refId);\n xhr.send(fd);\n });\n}\n\nexport async function updateImage(\n p: AuthParams,\n imageId: string,\n opts: ImageUpdateOptions,\n): Promise<void> {\n const res = await fetch(`${apiBase(p)}/images/${encodeURIComponent(imageId)}`, {\n method: \"POST\",\n headers: { ...headers(p.jwtToken), \"Content-Type\": \"application/json\" },\n body: JSON.stringify(opts),\n });\n if (!res.ok) throw new Error(`Update image failed: HTTP ${res.status}`);\n}\n\nexport async function deleteImage(\n p: AuthParams,\n imageId: string,\n): Promise<void> {\n const res = await fetch(`${apiBase(p)}/images/${encodeURIComponent(imageId)}`, {\n method: \"DELETE\",\n headers: headers(p.jwtToken),\n });\n if (!res.ok) throw new Error(`Delete image failed: HTTP ${res.status}`);\n}\n","import { useState, useEffect, useCallback, useRef } from \"react\";\nimport { useAppKit } from \"../AppKit\";\nimport { useImagesConfig } from \"./config\";\nimport { listImages, deleteImage, updateImage } from \"./api\";\nimport type { ImageResource, ImageUpdateOptions } from \"../types\";\n\nexport type UseImagesOptions = {\n page?: number;\n pageSize?: number;\n q?: string;\n refType?: string;\n refId?: string;\n enabled?: boolean;\n};\n\nexport type UseImagesReturn = {\n images: ImageResource[];\n page: number;\n pageSize: number;\n total: number;\n pageCount: number;\n loading: boolean;\n error: string | null;\n refetch: () => void;\n setPage: (page: number) => void;\n setQuery: (q: string) => void;\n available: boolean;\n removeImage: (imageId: string) => Promise<void>;\n updateImage: (imageId: string, opts: ImageUpdateOptions) => Promise<void>;\n};\n\nexport function useImages(opts?: UseImagesOptions): UseImagesReturn {\n const { snapshot } = useAppKit();\n const { imagesBaseURL, loading: configLoading } = useImagesConfig();\n\n const [images, setImages] = useState<ImageResource[]>([]);\n const [page, setPageState] = useState(opts?.page ?? 0);\n const [pageSize] = useState(opts?.pageSize ?? 50);\n const [total, setTotal] = useState(0);\n const [pageCount, setPageCount] = useState(0);\n const [query, setQueryState] = useState(opts?.q ?? \"\");\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const fetchIdRef = useRef(0);\n const enabled = opts?.enabled !== false;\n const jwtToken = snapshot?.jwtToken as string | undefined;\n const appId = snapshot?.appId as string | undefined;\n const available = !!imagesBaseURL;\n\n const refType = opts?.refType;\n const refId = opts?.refId;\n\n const doFetch = useCallback(() => {\n if (!imagesBaseURL || !appId || !jwtToken || !enabled) return;\n\n const id = ++fetchIdRef.current;\n setLoading(true);\n setError(null);\n\n listImages(\n { imagesBaseURL, appId, jwtToken },\n { page, pageSize, q: query || undefined, refType, refId },\n )\n .then((res) => {\n if (id !== fetchIdRef.current) return;\n setImages(res.images ?? []);\n setTotal(res.total);\n setPageCount(res.pageCount);\n setLoading(false);\n })\n .catch((err) => {\n if (id !== fetchIdRef.current) return;\n setError(err.message);\n setLoading(false);\n });\n }, [imagesBaseURL, appId, jwtToken, page, pageSize, query, refType, refId, enabled]);\n\n useEffect(() => {\n doFetch();\n return () => {\n fetchIdRef.current++;\n };\n }, [doFetch]);\n\n const setPage = useCallback((p: number) => setPageState(p), []);\n const setQuery = useCallback((q: string) => {\n setQueryState(q);\n setPageState(0);\n }, []);\n\n const removeImage = useCallback(\n async (imageId: string) => {\n if (!imagesBaseURL || !appId || !jwtToken) return;\n await deleteImage({ imagesBaseURL, appId, jwtToken }, imageId);\n doFetch();\n },\n [imagesBaseURL, appId, jwtToken, doFetch],\n );\n\n const doUpdateImage = useCallback(\n async (imageId: string, updateOpts: ImageUpdateOptions) => {\n if (!imagesBaseURL || !appId || !jwtToken) return;\n await updateImage(\n { imagesBaseURL, appId, jwtToken },\n imageId,\n updateOpts,\n );\n doFetch();\n },\n [imagesBaseURL, appId, jwtToken, doFetch],\n );\n\n return {\n images,\n page,\n pageSize,\n total,\n pageCount,\n loading: loading || configLoading,\n error,\n refetch: doFetch,\n setPage,\n setQuery,\n available,\n removeImage,\n updateImage: doUpdateImage,\n };\n}\n","import { useState, useEffect, useCallback, useRef } from \"react\";\nimport { useAppKit } from \"../AppKit\";\nimport { useImagesConfig } from \"./config\";\nimport { uploadImage } from \"./api\";\nimport type { UploadProgress, ImageUploadOptions } from \"../types\";\n\nexport type UseImageUploadReturn = {\n upload: (opts: ImageUploadOptions) => Promise<void>;\n cancel: () => void;\n progress: UploadProgress;\n reset: () => void;\n available: boolean;\n};\n\nconst IDLE: UploadProgress = {\n status: \"idle\",\n progress: 0,\n bytesUploaded: 0,\n bytesTotal: 0,\n error: null,\n};\n\nexport function useImageUpload(): UseImageUploadReturn {\n const { snapshot } = useAppKit();\n const { imagesBaseURL } = useImagesConfig();\n\n const [progress, setProgress] = useState<UploadProgress>(IDLE);\n const abortRef = useRef<AbortController | null>(null);\n\n const jwtToken = snapshot?.jwtToken as string | undefined;\n const appId = snapshot?.appId as string | undefined;\n const available = !!imagesBaseURL;\n\n // Abort upload if auth is lost\n useEffect(() => {\n if (!jwtToken && progress.status === \"uploading\") {\n abortRef.current?.abort();\n }\n }, [jwtToken, progress.status]);\n\n const upload = useCallback(\n async (opts: ImageUploadOptions) => {\n if (!imagesBaseURL || !appId || !jwtToken) {\n setProgress({\n ...IDLE,\n status: \"error\",\n error: \"Images service not available\",\n });\n return;\n }\n\n abortRef.current?.abort();\n const controller = new AbortController();\n abortRef.current = controller;\n\n setProgress({\n status: \"uploading\",\n progress: 0,\n bytesUploaded: 0,\n bytesTotal: opts.file.size,\n error: null,\n });\n\n try {\n const result = await uploadImage(\n { imagesBaseURL, appId, jwtToken },\n opts,\n (pct, loaded, total) => {\n setProgress((prev) => ({\n ...prev,\n progress: pct,\n bytesUploaded: loaded,\n bytesTotal: total,\n }));\n },\n controller.signal,\n );\n\n if (result.status === 204) {\n setProgress({\n status: \"success\",\n progress: 100,\n bytesUploaded: opts.file.size,\n bytesTotal: opts.file.size,\n error: null,\n });\n } else if (result.status === 409) {\n setProgress({\n status: \"conflict\",\n progress: 100,\n bytesUploaded: opts.file.size,\n bytesTotal: opts.file.size,\n error: result.body?.message || \"An image with identical content already exists\",\n existingImageId: result.body?.imageId,\n });\n } else if (result.status === 413) {\n throw new Error(\"File exceeds 4MB limit\");\n } else if (result.status === 415) {\n throw new Error(\n \"Unsupported file type. Allowed: PNG, JPEG, GIF, WEBP, AVIF\",\n );\n } else if (result.status === 429) {\n throw new Error(result.body?.message || \"Storage limit reached\");\n } else {\n throw new Error(`Upload failed: HTTP ${result.status}`);\n }\n } catch (err: any) {\n if (err.message === \"Upload aborted\") return;\n setProgress({\n status: \"error\",\n progress: 0,\n bytesUploaded: 0,\n bytesTotal: opts.file.size,\n error: err.message || \"Upload failed\",\n });\n }\n },\n [imagesBaseURL, appId, jwtToken],\n );\n\n const cancel = useCallback(() => {\n abortRef.current?.abort();\n setProgress(IDLE);\n }, []);\n\n const reset = useCallback(() => {\n setProgress(IDLE);\n }, []);\n\n return { upload, cancel, progress, reset, available };\n}\n","import { useState, useEffect, useCallback, useRef } from \"react\";\nimport { useAppKit } from \"../AppKit\";\nimport { useImagesConfig } from \"./config\";\nimport { getImage } from \"./api\";\nimport type { ImageResource } from \"../types\";\n\nexport type UseImageOptions = {\n enabled?: boolean;\n};\n\nexport type UseImageReturn = {\n image: ImageResource | null;\n loading: boolean;\n error: string | null;\n refetch: () => void;\n available: boolean;\n};\n\nexport function useImage(\n imageId: string | null | undefined,\n opts?: UseImageOptions,\n): UseImageReturn {\n const { snapshot } = useAppKit();\n const { imagesBaseURL, loading: configLoading } = useImagesConfig();\n\n const [image, setImage] = useState<ImageResource | null>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const fetchIdRef = useRef(0);\n const enabled = opts?.enabled !== false;\n const jwtToken = snapshot?.jwtToken as string | undefined;\n const appId = snapshot?.appId as string | undefined;\n const available = !!imagesBaseURL;\n\n const doFetch = useCallback(() => {\n if (!imagesBaseURL || !appId || !jwtToken || !imageId || !enabled) return;\n\n const id = ++fetchIdRef.current;\n setLoading(true);\n setError(null);\n\n getImage({ imagesBaseURL, appId, jwtToken }, imageId)\n .then((res) => {\n if (id !== fetchIdRef.current) return;\n setImage(res);\n setLoading(false);\n })\n .catch((err) => {\n if (id !== fetchIdRef.current) return;\n setError(err.message);\n setLoading(false);\n });\n }, [imagesBaseURL, appId, jwtToken, imageId, enabled]);\n\n useEffect(() => {\n doFetch();\n return () => {\n fetchIdRef.current++;\n };\n }, [doFetch]);\n\n return {\n image,\n loading: loading || configLoading,\n error,\n refetch: doFetch,\n available,\n };\n}\n","import React, { useState, useRef, useCallback, useEffect } from \"react\";\nimport { useImageUpload } from \"./useImageUpload\";\nimport type { ImageUploadOptions } from \"../types\";\n\nexport interface ImageUploaderProps {\n onUpload?: () => void;\n onError?: (error: string) => void;\n defaultTitle?: string;\n defaultDescription?: string;\n variants?: string;\n showFields?: boolean;\n showVariantPicker?: boolean;\n accept?: string;\n maxSize?: number;\n refType?: string;\n refId?: string;\n className?: string;\n style?: React.CSSProperties;\n label?: string;\n disabled?: boolean;\n}\n\nconst FONT =\n 'ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif';\nconst ACCEPT_DEFAULT =\n \"image/png,image/jpeg,image/gif,image/webp,image/avif\";\nconst MAX_SIZE_DEFAULT = 4 * 1024 * 1024;\n\nconst VARIANT_PRESETS: { key: string; label: string; desc: string; required?: boolean }[] = [\n { key: \"sq200\", label: \"sq200\", desc: \"Thumbnail (200x200)\", required: true },\n { key: \"sq400\", label: \"sq400\", desc: \"Square (400x400)\" },\n { key: \"w400\", label: \"w400\", desc: \"Small (400w)\" },\n { key: \"w800\", label: \"w800\", desc: \"Medium (800w)\" },\n { key: \"w1200\", label: \"w1200\", desc: \"Large (1200w)\" },\n { key: \"w1600\", label: \"w1600\", desc: \"Retina (1600w)\" },\n { key: \"w1920\", label: \"w1920\", desc: \"Full HD (1920w)\" },\n];\n\nconst DEFAULT_VARIANTS = new Set([\"sq200\", \"w400\", \"w800\"]);\n\nfunction formatSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nfunction parseVariants(csv: string | undefined): Set<string> {\n if (!csv) return new Set(DEFAULT_VARIANTS);\n return new Set(csv.split(\",\").map((s) => s.trim()).filter(Boolean));\n}\n\nexport function ImageUploader({\n onUpload,\n onError,\n defaultTitle,\n defaultDescription = \"\",\n variants: variantsProp,\n showFields = true,\n showVariantPicker = false,\n accept = ACCEPT_DEFAULT,\n maxSize = MAX_SIZE_DEFAULT,\n refType,\n refId,\n className,\n style,\n label = \"Drop an image here or click to select\",\n disabled = false,\n}: ImageUploaderProps) {\n const { upload, cancel, progress, reset, available } = useImageUpload();\n const fileInputRef = useRef<HTMLInputElement>(null);\n const [dragOver, setDragOver] = useState(false);\n const [title, setTitle] = useState(defaultTitle ?? \"\");\n const [description, setDescription] = useState(defaultDescription);\n const [selectedFile, setSelectedFile] = useState<File | null>(null);\n const [validationError, setValidationError] = useState<string | null>(null);\n const [selectedVariants, setSelectedVariants] = useState<Set<string>>(\n () => parseVariants(variantsProp),\n );\n const [previewURL, setPreviewURL] = useState<string | null>(null);\n const [showAdvanced, setShowAdvanced] = useState(false);\n const [showSuccess, setShowSuccess] = useState(false);\n\n // Create/revoke object URL for image preview\n useEffect(() => {\n if (!selectedFile) {\n setPreviewURL(null);\n return;\n }\n const url = URL.createObjectURL(selectedFile);\n setPreviewURL(url);\n return () => URL.revokeObjectURL(url);\n }, [selectedFile]);\n\n const handleFile = useCallback(\n (file: File) => {\n setValidationError(null);\n if (file.size > maxSize) {\n setValidationError(\n `File too large (${(file.size / 1024 / 1024).toFixed(1)}MB). Max ${(maxSize / 1024 / 1024).toFixed(0)}MB.`,\n );\n return;\n }\n setSelectedFile(file);\n if (!title) {\n setTitle(file.name.replace(/\\.[^.]+$/, \"\"));\n }\n },\n [maxSize, title],\n );\n\n const handleDrop = useCallback(\n (e: React.DragEvent) => {\n e.preventDefault();\n setDragOver(false);\n const file = e.dataTransfer.files[0];\n if (file) handleFile(file);\n },\n [handleFile],\n );\n\n const toggleVariant = useCallback((key: string) => {\n setSelectedVariants((prev) => {\n const next = new Set(prev);\n if (next.has(key)) next.delete(key);\n else next.add(key);\n // sq200 always required\n next.add(\"sq200\");\n return next;\n });\n }, []);\n\n const handleSubmit = useCallback(async () => {\n if (!selectedFile || !title.trim()) return;\n reset();\n const variantCsv = showVariantPicker\n ? Array.from(selectedVariants).join(\",\")\n : variantsProp;\n const opts: ImageUploadOptions = {\n file: selectedFile,\n title: title.trim(),\n description: description.trim() || undefined,\n variants: variantCsv,\n refType,\n refId,\n };\n await upload(opts);\n }, [selectedFile, title, description, variantsProp, showVariantPicker, selectedVariants, refType, refId, upload, reset]);\n\n // Watch for upload completion\n const prevStatus = useRef(progress.status);\n useEffect(() => {\n if (prevStatus.current === progress.status) return;\n prevStatus.current = progress.status;\n if (progress.status === \"success\") {\n setSelectedFile(null);\n setTitle(defaultTitle ?? \"\");\n setDescription(defaultDescription);\n setShowSuccess(true);\n onUpload?.();\n }\n if (progress.status === \"conflict\") {\n setSelectedFile(null);\n setTitle(defaultTitle ?? \"\");\n setDescription(defaultDescription);\n }\n if (progress.status === \"error\" && progress.error) {\n onError?.(progress.error);\n }\n }, [progress.status, progress.error, onUpload, onError, defaultTitle, defaultDescription]);\n\n // Auto-dismiss success toast\n useEffect(() => {\n if (!showSuccess) return;\n const t = setTimeout(() => setShowSuccess(false), 4000);\n return () => clearTimeout(t);\n }, [showSuccess]);\n\n if (!available) return null;\n\n const isUploading = progress.status === \"uploading\";\n const isDisabled = disabled || isUploading;\n\n return (\n <div className={className} style={{ fontFamily: FONT, ...style }}>\n {/* Drop zone */}\n <div\n onDragEnter={(e) => {\n e.preventDefault();\n setDragOver(true);\n }}\n onDragOver={(e) => {\n e.preventDefault();\n setDragOver(true);\n }}\n onDragLeave={() => setDragOver(false)}\n onDrop={handleDrop}\n onClick={() => !isDisabled && fileInputRef.current?.click()}\n style={{\n border: `2px dashed ${dragOver ? \"#1976d2\" : \"#ccc\"}`,\n borderRadius: 8,\n padding: \"24px 16px\",\n textAlign: \"center\",\n cursor: isDisabled ? \"default\" : \"pointer\",\n backgroundColor: dragOver ? \"#e3f2fd\" : \"#fafafa\",\n transition: \"all 0.15s ease\",\n opacity: isDisabled ? 0.6 : 1,\n }}\n >\n <input\n ref={fileInputRef}\n type=\"file\"\n accept={accept}\n style={{ display: \"none\" }}\n onChange={(e) => {\n const file = e.target.files?.[0];\n if (file) handleFile(file);\n e.target.value = \"\";\n }}\n />\n {!selectedFile && (\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#999\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ marginBottom: 6 }}>\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" />\n <polyline points=\"17 8 12 3 7 8\" />\n <line x1=\"12\" y1=\"3\" x2=\"12\" y2=\"15\" />\n </svg>\n )}\n <div style={{ fontSize: 14, color: \"#666\" }}>\n {selectedFile ? selectedFile.name : label}\n </div>\n {selectedFile && (\n <div style={{ fontSize: 12, color: \"#999\", marginTop: 4 }}>\n {(selectedFile.size / 1024).toFixed(0)} KB\n </div>\n )}\n </div>\n\n {/* Image preview */}\n {previewURL && selectedFile && (\n <div\n style={{\n marginTop: 12,\n borderRadius: 8,\n overflow: \"hidden\",\n backgroundColor: \"#f5f5f5\",\n textAlign: \"center\",\n }}\n >\n <img\n src={previewURL}\n alt={title || selectedFile.name}\n style={{\n maxWidth: \"100%\",\n maxHeight: 300,\n objectFit: \"contain\",\n display: \"block\",\n margin: \"0 auto\",\n }}\n />\n </div>\n )}\n\n {/* Validation error */}\n {validationError && (\n <div\n style={{ color: \"#d32f2f\", fontSize: 13, marginTop: 8 }}\n >\n {validationError}\n </div>\n )}\n\n {/* Title / Description fields */}\n {showFields && selectedFile && (\n <div style={{ marginTop: 12, display: \"flex\", flexDirection: \"column\", gap: 8 }}>\n <input\n type=\"text\"\n placeholder=\"Title\"\n value={title}\n onChange={(e) => setTitle(e.target.value)}\n disabled={isDisabled}\n maxLength={250}\n style={{\n padding: \"8px 12px\",\n borderRadius: 6,\n border: \"1px solid #ddd\",\n fontSize: 14,\n fontFamily: FONT,\n outline: \"none\",\n }}\n />\n <input\n type=\"text\"\n placeholder=\"Description (optional)\"\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n disabled={isDisabled}\n maxLength={500}\n style={{\n padding: \"8px 12px\",\n borderRadius: 6,\n border: \"1px solid #ddd\",\n fontSize: 14,\n fontFamily: FONT,\n outline: \"none\",\n }}\n />\n </div>\n )}\n\n {/* Advanced options (variant selection) */}\n {showVariantPicker && selectedFile && (\n <div style={{ marginTop: 12 }}>\n <button\n type=\"button\"\n onClick={() => setShowAdvanced(!showAdvanced)}\n style={{\n background: \"none\",\n border: \"none\",\n padding: 0,\n fontSize: 13,\n color: \"#666\",\n cursor: \"pointer\",\n fontFamily: FONT,\n display: \"flex\",\n alignItems: \"center\",\n gap: 4,\n }}\n >\n <span style={{\n display: \"inline-block\",\n transition: \"transform 0.15s ease\",\n transform: showAdvanced ? \"rotate(90deg)\" : \"rotate(0deg)\",\n fontSize: 10,\n }}>\n &#9654;\n </span>\n Advanced\n </button>\n {showAdvanced && (\n <div style={{ marginTop: 8 }}>\n <div style={{ fontSize: 12, color: \"#888\", marginBottom: 6 }}>Variants:</div>\n <div style={{ display: \"flex\", flexWrap: \"wrap\", gap: 6 }}>\n {VARIANT_PRESETS.map((v) => {\n const active = selectedVariants.has(v.key);\n return (\n <button\n key={v.key}\n type=\"button\"\n onClick={() => !v.required && toggleVariant(v.key)}\n disabled={isDisabled || v.required}\n title={v.desc}\n style={{\n padding: \"4px 10px\",\n borderRadius: 12,\n border: active ? \"1px solid #1976d2\" : \"1px solid #ccc\",\n backgroundColor: active ? \"#e3f2fd\" : \"#fff\",\n color: active ? \"#1976d2\" : \"#666\",\n fontSize: 12,\n fontFamily: FONT,\n cursor: v.required ? \"default\" : isDisabled ? \"default\" : \"pointer\",\n opacity: isDisabled ? 0.6 : v.required ? 0.8 : 1,\n }}\n >\n {v.label}\n </button>\n );\n })}\n </div>\n </div>\n )}\n </div>\n )}\n\n {/* Progress */}\n {isUploading && (\n <div style={{ marginTop: 12 }}>\n <div style={{ fontSize: 12, color: \"#666\", marginBottom: 4 }}>\n Uploading... — {Math.round(progress.progress)}%\n {progress.bytesTotal > 0 && (\n <> · {formatSize(progress.bytesUploaded)} / {formatSize(progress.bytesTotal)}</>\n )}\n </div>\n <div\n style={{\n height: 6,\n borderRadius: 3,\n backgroundColor: \"#e0e0e0\",\n overflow: \"hidden\",\n }}\n >\n <div\n style={{\n width: `${progress.progress}%`,\n height: \"100%\",\n backgroundColor: \"#1976d2\",\n transition: \"width 0.2s ease\",\n }}\n />\n </div>\n </div>\n )}\n\n {/* Upload / Cancel buttons */}\n {selectedFile && (\n <div style={{ marginTop: 12, display: \"flex\", gap: 8 }}>\n <button\n onClick={handleSubmit}\n disabled={isDisabled || !title.trim()}\n style={{\n padding: \"8px 20px\",\n borderRadius: 6,\n border: \"none\",\n backgroundColor: isDisabled ? \"#bbb\" : \"#1976d2\",\n color: \"#fff\",\n fontSize: 14,\n fontFamily: FONT,\n cursor: isDisabled ? \"default\" : \"pointer\",\n fontWeight: 500,\n }}\n >\n Upload\n </button>\n {isUploading && (\n <button\n onClick={cancel}\n style={{\n padding: \"8px 16px\",\n borderRadius: 6,\n border: \"1px solid #ddd\",\n backgroundColor: \"#fff\",\n fontSize: 14,\n fontFamily: FONT,\n cursor: \"pointer\",\n color: \"#666\",\n }}\n >\n Cancel\n </button>\n )}\n </div>\n )}\n\n {/* Error message */}\n {progress.status === \"error\" && progress.error && (\n <div style={{ color: \"#d32f2f\", fontSize: 13, marginTop: 8 }}>\n {progress.error}\n </div>\n )}\n\n {/* Conflict message */}\n {progress.status === \"conflict\" && (\n <div\n style={{\n marginTop: 12,\n padding: \"10px 14px\",\n borderRadius: 8,\n backgroundColor: \"#fff3e0\",\n border: \"1px solid #ffcc80\",\n color: \"#e65100\",\n fontSize: 13,\n fontFamily: FONT,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n }}\n >\n <span>{progress.error || \"An image with identical content already exists\"}</span>\n <button\n onClick={() => reset()}\n style={{\n background: \"none\",\n border: \"none\",\n color: \"#e65100\",\n cursor: \"pointer\",\n fontSize: 16,\n lineHeight: 1,\n padding: \"0 2px\",\n }}\n >\n &times;\n </button>\n </div>\n )}\n\n {/* Success toast */}\n {showSuccess && (\n <div\n style={{\n marginTop: 12,\n padding: \"10px 14px\",\n borderRadius: 8,\n backgroundColor: \"#e8f5e9\",\n border: \"1px solid #a5d6a7\",\n color: \"#2e7d32\",\n fontSize: 13,\n fontFamily: FONT,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n }}\n >\n <span>Image uploaded successfully</span>\n <button\n onClick={() => setShowSuccess(false)}\n style={{\n background: \"none\",\n border: \"none\",\n color: \"#2e7d32\",\n cursor: \"pointer\",\n fontSize: 16,\n lineHeight: 1,\n padding: \"0 2px\",\n }}\n >\n &times;\n </button>\n </div>\n )}\n </div>\n );\n}\n","import React, { useMemo, useState, useEffect } from \"react\";\nimport type { ImageResource, ImageVariant } from \"../types\";\n\nexport interface MrImageProps {\n image: ImageResource;\n width?: number;\n height?: number;\n variant?: string;\n alt?: string;\n className?: string;\n style?: React.CSSProperties;\n loading?: \"lazy\" | \"eager\";\n objectFit?: React.CSSProperties[\"objectFit\"];\n sizes?: string;\n onLoad?: () => void;\n onError?: () => void;\n}\n\nfunction pickVariant(\n variants: ImageVariant[],\n opts: { width?: number; height?: number; variant?: string },\n): ImageVariant | null {\n if (!variants || variants.length === 0) return null;\n\n if (opts.variant) {\n const exact = variants.find((v) => v.variant === opts.variant);\n if (exact) return exact;\n }\n\n if (!opts.width && !opts.height) {\n return variants.find((v) => v.variant === \"orig\") || variants[0];\n }\n\n const dpr =\n typeof window !== \"undefined\" ? window.devicePixelRatio || 1 : 1;\n const targetW = (opts.width || 0) * dpr;\n const targetH = (opts.height || 0) * dpr;\n const targetMax = Math.max(targetW, targetH);\n\n const candidates = variants\n .filter((v) => v.width > 0)\n .sort((a, b) => a.width - b.width);\n\n if (candidates.length === 0) return variants[0];\n\n for (const v of candidates) {\n if (v.width >= targetMax) return v;\n }\n\n return candidates[candidates.length - 1];\n}\n\nfunction buildSrcSet(variants: ImageVariant[]): string | undefined {\n const widthVariants = variants.filter(\n (v) => v.objectURL && v.width > 0 && v.variant !== \"orig\",\n );\n if (widthVariants.length <= 1) return undefined;\n\n return widthVariants\n .sort((a, b) => a.width - b.width)\n .map((v) => `${v.objectURL} ${v.width}w`)\n .join(\", \");\n}\n\nexport function MrImage({\n image,\n width,\n height,\n variant: variantName,\n alt,\n className,\n style,\n loading = \"lazy\",\n objectFit = \"cover\",\n sizes,\n onLoad,\n onError,\n}: MrImageProps) {\n const chosen = useMemo(\n () => pickVariant(image.variants, { width, height, variant: variantName }),\n [image.variants, width, height, variantName],\n );\n\n const srcSet = useMemo(() => {\n if (variantName) return undefined;\n return buildSrcSet(image.variants);\n }, [image.variants, variantName]);\n\n const [loaded, setLoaded] = useState(false);\n\n // Reset loaded state when the source URL changes\n const url = chosen?.objectURL;\n useEffect(() => {\n setLoaded(false);\n }, [url]);\n\n if (!chosen?.objectURL) {\n return (\n <div\n className={className}\n role=\"img\"\n aria-label={alt ?? image.title}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: \"#f0f0f0\",\n color: \"#bbb\",\n width,\n height,\n maxWidth: \"100%\",\n ...style,\n }}\n >\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\" />\n <circle cx=\"8.5\" cy=\"8.5\" r=\"1.5\" />\n <polyline points=\"21 15 16 10 5 21\" />\n </svg>\n </div>\n );\n }\n\n return (\n <img\n src={chosen.objectURL}\n srcSet={srcSet}\n sizes={sizes}\n alt={alt ?? image.title}\n width={width}\n height={height}\n className={className}\n loading={loading}\n onLoad={() => {\n setLoaded(true);\n onLoad?.();\n }}\n onError={onError}\n style={{\n objectFit,\n maxWidth: \"100%\",\n opacity: loaded ? 1 : 0,\n transition: \"opacity 0.2s ease\",\n backgroundColor: loaded ? undefined : \"#f0f0f0\",\n ...style,\n }}\n />\n );\n}\n","import React, { useState, useMemo, useCallback } from \"react\";\nimport type { ImageResource, ImageVariant } from \"../types\";\n\nexport interface ImageDetailsProps {\n image: ImageResource;\n onClose: () => void;\n onEdit?: (image: ImageResource) => void;\n onDelete?: (image: ImageResource) => void;\n className?: string;\n style?: React.CSSProperties;\n}\n\nconst FONT =\n 'ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif';\n\nconst VARIANT_DESCRIPTIONS: Record<string, string> = {\n orig: \"Original upload\",\n sq200: \"Thumbnail (200x200)\",\n sq400: \"Square (400x400)\",\n w400: \"Small (400w)\",\n w800: \"Medium (800w)\",\n w1200: \"Large (1200w)\",\n w1600: \"Retina (1600w)\",\n w1920: \"Full HD (1920w)\",\n};\n\nfunction describeVariant(name: string): string {\n if (VARIANT_DESCRIPTIONS[name]) return VARIANT_DESCRIPTIONS[name];\n const sqMatch = name.match(/^sq(\\d+)$/);\n if (sqMatch) return `Square (${sqMatch[1]}x${sqMatch[1]})`;\n const wMatch = name.match(/^w(\\d+)$/);\n if (wMatch) return `Width ${wMatch[1]}px`;\n return name;\n}\n\nfunction formatBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nfunction isSafeURL(url: string): boolean {\n return url.startsWith(\"https://\") || url.startsWith(\"http://localhost\");\n}\n\nfunction sanitizeFilename(name: string): string {\n return name.replace(/[/\\\\:*?\"<>|\\x00-\\x1f]/g, \"_\");\n}\n\nfunction preferredVariant(variants: ImageVariant[]): ImageVariant {\n const prefs = [\"w1600\", \"w800\", \"w400\", \"orig\"];\n for (const p of prefs) {\n const v = variants.find((v) => v.variant === p);\n if (v) return v;\n }\n return variants[0];\n}\n\nexport function ImageDetails({\n image,\n onClose,\n onEdit,\n onDelete,\n className,\n style,\n}: ImageDetailsProps) {\n const [selected, setSelected] = useState<ImageVariant>(() =>\n preferredVariant(image.variants),\n );\n const [copiedField, setCopiedField] = useState<string | null>(null);\n\n const sortedVariants = useMemo(\n () =>\n [...image.variants].sort((a, b) => {\n if (a.variant === \"orig\") return -1;\n if (b.variant === \"orig\") return 1;\n return a.width - b.width;\n }),\n [image.variants],\n );\n\n const copyText = useCallback((text: string, field: string) => {\n navigator.clipboard?.writeText(text).then(() => {\n setCopiedField(field);\n setTimeout(() => setCopiedField(null), 1200);\n }).catch(() => { /* clipboard not available */ });\n }, []);\n\n const handleDownload = useCallback(async () => {\n if (!selected?.objectURL) return;\n try {\n const res = await fetch(selected.objectURL);\n const blob = await res.blob();\n const url = URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.href = url;\n const ext = selected.format || selected.content_type?.split(\"/\")[1] || \"jpg\";\n a.download = sanitizeFilename(`${image.title}-${selected.variant}.${ext}`);\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n } catch {\n if (isSafeURL(selected.objectURL)) {\n window.open(selected.objectURL, \"_blank\");\n }\n }\n }, [selected, image.title]);\n\n return (\n <div\n style={{\n position: \"fixed\",\n inset: 0,\n zIndex: 9999,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: \"rgba(0,0,0,0.5)\",\n }}\n onClick={(e) => {\n if (e.target === e.currentTarget) onClose();\n }}\n >\n <div\n className={className}\n style={{\n backgroundColor: \"#fff\",\n borderRadius: 12,\n maxWidth: 720,\n width: \"95vw\",\n maxHeight: \"90vh\",\n overflow: \"auto\",\n boxShadow: \"0 8px 32px rgba(0,0,0,0.2)\",\n fontFamily: FONT,\n ...style,\n }}\n >\n {/* Header */}\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n padding: \"16px 20px 12px\",\n borderBottom: \"1px solid #eee\",\n }}\n >\n <div style={{ fontWeight: 600, fontSize: 16 }}>{image.title}</div>\n <button\n onClick={onClose}\n style={{\n background: \"none\",\n border: \"none\",\n fontSize: 22,\n cursor: \"pointer\",\n color: \"#666\",\n lineHeight: 1,\n padding: \"4px 8px\",\n }}\n >\n &times;\n </button>\n </div>\n\n {/* Image preview */}\n <div style={{ padding: \"16px 20px\", textAlign: \"center\" }}>\n {selected?.objectURL && (\n <img\n src={selected.objectURL}\n alt={image.title}\n style={{\n maxWidth: \"100%\",\n maxHeight: 500,\n borderRadius: 6,\n objectFit: \"contain\",\n }}\n />\n )}\n </div>\n\n {/* Variant chips */}\n <div style={{ padding: \"0 20px 12px\", display: \"flex\", flexWrap: \"wrap\", gap: 6 }}>\n {sortedVariants.map((v) => {\n const active = v.variant === selected.variant;\n return (\n <button\n key={v.variant}\n onClick={() => setSelected(v)}\n style={{\n padding: \"4px 12px\",\n borderRadius: 14,\n border: active ? \"1px solid #1976d2\" : \"1px solid #ddd\",\n backgroundColor: active ? \"#e3f2fd\" : \"#fff\",\n color: active ? \"#1976d2\" : \"#555\",\n fontSize: 12,\n fontFamily: FONT,\n cursor: \"pointer\",\n }}\n title={describeVariant(v.variant)}\n >\n {v.variant}\n {v.size_bytes > 0 && (\n <span style={{ opacity: 0.6, marginLeft: 4 }}>\n {formatBytes(v.size_bytes)}\n </span>\n )}\n </button>\n );\n })}\n </div>\n\n {/* Metadata */}\n <div style={{ padding: \"0 20px 16px\" }}>\n <div style={{ display: \"flex\", flexWrap: \"wrap\", gap: 8, fontSize: 13 }}>\n <MetaItem label=\"Size\" value={formatBytes(selected.size_bytes)} />\n {selected.width > 0 && (\n <MetaItem label=\"Dimensions\" value={`${selected.width} x ${selected.height}`} />\n )}\n <MetaItem label=\"Format\" value={selected.format || selected.content_type} />\n <MetaItem\n label=\"ID\"\n value={image.imageId.slice(0, 12) + \"...\"}\n onClick={() => copyText(image.imageId, \"id\")}\n actionLabel={copiedField === \"id\" ? \"Copied\" : \"Copy\"}\n />\n {selected?.objectURL && (\n <MetaItem\n label=\"URL\"\n value={new URL(selected.objectURL).pathname.split(\"/\").pop() || \"...\"}\n onClick={() => copyText(selected.objectURL, \"url\")}\n actionLabel={copiedField === \"url\" ? \"Copied\" : \"Copy\"}\n />\n )}\n </div>\n\n {image.description && (\n <div style={{ marginTop: 10, fontSize: 13, color: \"#666\" }}>\n {image.description}\n </div>\n )}\n\n <div style={{ marginTop: 6, fontSize: 12, color: \"#999\" }}>\n Uploaded {new Date(image.uploadedAt).toLocaleDateString()}\n </div>\n </div>\n\n {/* Actions */}\n <div\n style={{\n display: \"flex\",\n justifyContent: \"space-between\",\n padding: \"12px 20px 16px\",\n borderTop: \"1px solid #eee\",\n gap: 8,\n }}\n >\n <div style={{ display: \"flex\", gap: 8 }}>\n {onEdit && (\n <button\n onClick={() => onEdit(image)}\n style={{\n padding: \"6px 14px\",\n borderRadius: 6,\n border: \"1px solid #ddd\",\n backgroundColor: \"#fff\",\n fontSize: 13,\n fontFamily: FONT,\n cursor: \"pointer\",\n color: \"#333\",\n }}\n >\n Edit\n </button>\n )}\n {onDelete && (\n <button\n onClick={() => onDelete(image)}\n style={{\n padding: \"6px 14px\",\n borderRadius: 6,\n border: \"1px solid #ffcdd2\",\n backgroundColor: \"#fff\",\n fontSize: 13,\n fontFamily: FONT,\n cursor: \"pointer\",\n color: \"#d32f2f\",\n }}\n >\n Delete\n </button>\n )}\n </div>\n <div style={{ display: \"flex\", gap: 8 }}>\n {selected?.objectURL && (\n <>\n {isSafeURL(selected.objectURL) && (\n <a\n href={selected.objectURL}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{\n padding: \"6px 14px\",\n borderRadius: 6,\n border: \"1px solid #ddd\",\n backgroundColor: \"#fff\",\n fontSize: 13,\n fontFamily: FONT,\n cursor: \"pointer\",\n color: \"#333\",\n textDecoration: \"none\",\n display: \"inline-flex\",\n alignItems: \"center\",\n }}\n >\n Open\n </a>\n )}\n <button\n onClick={handleDownload}\n style={{\n padding: \"6px 14px\",\n borderRadius: 6,\n border: \"1px solid #ddd\",\n backgroundColor: \"#fff\",\n fontSize: 13,\n fontFamily: FONT,\n cursor: \"pointer\",\n color: \"#333\",\n }}\n >\n Download\n </button>\n </>\n )}\n <button\n onClick={onClose}\n style={{\n padding: \"6px 14px\",\n borderRadius: 6,\n border: \"1px solid #ddd\",\n backgroundColor: \"#fafafa\",\n fontSize: 13,\n fontFamily: FONT,\n cursor: \"pointer\",\n color: \"#333\",\n }}\n >\n Close\n </button>\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nfunction MetaItem({\n label,\n value,\n onClick,\n actionLabel,\n}: {\n label: string;\n value: string;\n onClick?: () => void;\n actionLabel?: string;\n}) {\n return (\n <span\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 4,\n padding: \"3px 10px\",\n borderRadius: 10,\n backgroundColor: \"#f5f5f5\",\n color: \"#555\",\n fontSize: 12,\n }}\n >\n <span style={{ fontWeight: 500, color: \"#888\" }}>{label}:</span>{\" \"}\n <span style={{ fontFamily: \"monospace\" }}>{value}</span>\n {onClick && (\n <button\n onClick={onClick}\n style={{\n background: \"none\",\n border: \"none\",\n color: \"#1976d2\",\n cursor: \"pointer\",\n fontSize: 11,\n padding: \"0 2px\",\n fontFamily: FONT,\n }}\n >\n {actionLabel}\n </button>\n )}\n </span>\n );\n}\n","import React, { useState, useCallback, useEffect, useRef } from \"react\";\nimport { useImages } from \"./useImages\";\nimport { MrImage } from \"./MrImage\";\nimport { ImageDetails } from \"./ImageDetails\";\nimport type { ImageResource } from \"../types\";\n\nexport interface ImagePickerProps {\n onSelect?: (image: ImageResource) => void;\n onClose?: () => void;\n mode?: \"modal\" | \"inline\";\n pageSize?: number;\n showSearch?: boolean;\n searchPlaceholder?: string;\n selectedImageId?: string;\n columns?: number;\n showActions?: boolean;\n refType?: string;\n refId?: string;\n /** Increment to trigger a refetch (e.g. after an upload). */\n refreshSignal?: number;\n className?: string;\n style?: React.CSSProperties;\n}\n\nconst FONT =\n 'ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif';\n\nconst SKELETON_STYLE_ID = \"mr-skeleton-keyframes\";\n\nfunction useSkeletonStyle() {\n useEffect(() => {\n if (document.getElementById(SKELETON_STYLE_ID)) return;\n const style = document.createElement(\"style\");\n style.id = SKELETON_STYLE_ID;\n style.textContent =\n \"@keyframes mr-skeleton-pulse{0%,100%{opacity:1}50%{opacity:.4}}\";\n document.head.appendChild(style);\n // intentionally not removed — shared singleton, harmless to leave\n }, []);\n}\n\nexport function ImagePicker({\n onSelect,\n onClose,\n mode = \"inline\",\n pageSize = 20,\n showSearch = true,\n searchPlaceholder = \"Search images...\",\n selectedImageId,\n columns = 4,\n showActions = false,\n refType,\n refId,\n refreshSignal,\n className,\n style,\n}: ImagePickerProps) {\n const {\n images,\n page,\n pageCount,\n total,\n loading,\n error,\n setPage,\n setQuery,\n refetch,\n available,\n removeImage,\n updateImage,\n } = useImages({ pageSize, refType, refId });\n\n useSkeletonStyle();\n\n const [searchInput, setSearchInput] = useState(\"\");\n const [activeTile, setActiveTile] = useState<string | null>(null);\n const [detailImage, setDetailImage] = useState<ImageResource | null>(null);\n const [editImage, setEditImage] = useState<ImageResource | null>(null);\n const [editTitle, setEditTitle] = useState(\"\");\n const [editDesc, setEditDesc] = useState(\"\");\n const [editSaving, setEditSaving] = useState(false);\n const [deleteConfirm, setDeleteConfirm] = useState<ImageResource | null>(null);\n const [deleting, setDeleting] = useState(false);\n const [actionError, setActionError] = useState<string | null>(null);\n\n // Debounced search\n useEffect(() => {\n const timer = setTimeout(() => setQuery(searchInput), 300);\n return () => clearTimeout(timer);\n }, [searchInput, setQuery]);\n\n // External refresh trigger\n const prevSignal = useRef(refreshSignal);\n useEffect(() => {\n if (refreshSignal != null && refreshSignal !== prevSignal.current) {\n prevSignal.current = refreshSignal;\n refetch();\n }\n }, [refreshSignal, refetch]);\n\n // Dismiss active tile when clicking outside the grid\n useEffect(() => {\n if (!activeTile) return;\n const handler = () => setActiveTile(null);\n document.addEventListener(\"click\", handler);\n return () => document.removeEventListener(\"click\", handler);\n }, [activeTile]);\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === \"Escape\") onClose?.();\n },\n [onClose],\n );\n\n const handleDelete = useCallback(\n async (img: ImageResource) => {\n setDeleting(true);\n setActionError(null);\n try {\n await removeImage(img.imageId);\n setDeleteConfirm(null);\n setDetailImage(null);\n } catch (err: any) {\n setActionError(err.message || \"Delete failed\");\n } finally {\n setDeleting(false);\n }\n },\n [removeImage],\n );\n\n const handleEditSave = useCallback(async () => {\n if (!editImage || !editTitle.trim()) return;\n setEditSaving(true);\n setActionError(null);\n try {\n await updateImage(editImage.imageId, {\n title: editTitle.trim(),\n description: editDesc.trim() || undefined,\n });\n setEditImage(null);\n } catch (err: any) {\n setActionError(err.message || \"Update failed\");\n } finally {\n setEditSaving(false);\n }\n }, [editImage, editTitle, editDesc, updateImage]);\n\n const openEdit = useCallback((img: ImageResource) => {\n setEditTitle(img.title);\n setEditDesc(img.description || \"\");\n setEditImage(img);\n setDetailImage(null);\n setActionError(null);\n }, []);\n\n const openDelete = useCallback((img: ImageResource) => {\n setDeleteConfirm(img);\n setDetailImage(null);\n setActionError(null);\n }, []);\n\n if (!available) return null;\n\n const skeletonCount = Math.min(pageSize, 8);\n\n const content = (\n <div\n className={className}\n style={{\n fontFamily: FONT,\n display: \"flex\",\n flexDirection: \"column\",\n gap: 12,\n ...(!mode || mode === \"inline\" ? style : {}),\n }}\n onKeyDown={handleKeyDown}\n >\n {/* Header with search */}\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 8 }}>\n {showSearch && (\n <div style={{ flex: 1, position: \"relative\" }}>\n <input\n type=\"text\"\n placeholder={searchPlaceholder}\n value={searchInput}\n onChange={(e) => setSearchInput(e.target.value)}\n style={{\n width: \"100%\",\n padding: \"8px 12px\",\n paddingRight: searchInput ? 32 : 12,\n borderRadius: 6,\n border: \"1px solid #ddd\",\n fontSize: 14,\n fontFamily: FONT,\n outline: \"none\",\n boxSizing: \"border-box\",\n }}\n />\n {searchInput && (\n <button\n onClick={() => setSearchInput(\"\")}\n style={{\n position: \"absolute\",\n right: 6,\n top: \"50%\",\n transform: \"translateY(-50%)\",\n background: \"none\",\n border: \"none\",\n fontSize: 16,\n cursor: \"pointer\",\n color: \"#999\",\n lineHeight: 1,\n padding: \"2px 4px\",\n }}\n >\n &times;\n </button>\n )}\n </div>\n )}\n {mode === \"modal\" && onClose && (\n <button\n onClick={onClose}\n style={{\n background: \"none\",\n border: \"none\",\n fontSize: 20,\n cursor: \"pointer\",\n padding: \"4px 8px\",\n color: \"#666\",\n lineHeight: 1,\n }}\n >\n &times;\n </button>\n )}\n </div>\n\n {/* Action error */}\n {actionError && (\n <div style={{ color: \"#d32f2f\", fontSize: 13, padding: \"4px 0\" }}>\n {actionError}\n </div>\n )}\n\n {/* Loading skeleton */}\n {loading && (\n <div\n style={{\n display: \"grid\",\n gridTemplateColumns: `repeat(${columns}, 1fr)`,\n gap: 8,\n }}\n >\n {Array.from({ length: skeletonCount }).map((_, i) => (\n <div\n key={i}\n style={{\n aspectRatio: \"1\",\n borderRadius: 6,\n backgroundColor: \"#f0f0f0\",\n animation: \"mr-skeleton-pulse 1.5s ease-in-out infinite\",\n }}\n />\n ))}\n </div>\n )}\n\n {/* Fetch error */}\n {error && (\n <div style={{ textAlign: \"center\", padding: 20, color: \"#d32f2f\", fontSize: 14 }}>\n {error}\n </div>\n )}\n\n {/* Empty state */}\n {!loading && !error && images.length === 0 && (\n <div style={{ textAlign: \"center\", padding: \"40px 20px\", color: \"#999\" }}>\n <svg\n width=\"36\"\n height=\"36\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n style={{ opacity: 0.4, marginBottom: 8 }}\n >\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\" />\n <circle cx=\"8.5\" cy=\"8.5\" r=\"1.5\" />\n <polyline points=\"21 15 16 10 5 21\" />\n </svg>\n <div style={{ fontSize: 14, fontWeight: 500, color: \"#666\" }}>No images yet</div>\n <div style={{ fontSize: 13, marginTop: 4 }}>\n {searchInput ? \"Try a different search term\" : \"Upload an image to get started\"}\n </div>\n </div>\n )}\n\n {/* Image grid */}\n {!loading && images.length > 0 && (\n <div\n style={{\n display: \"grid\",\n gridTemplateColumns: `repeat(${columns}, 1fr)`,\n gap: 8,\n }}\n >\n {images.map((img) => {\n const isSelected = img.imageId === selectedImageId;\n const isActive = activeTile === img.imageId;\n return (\n <div\n key={img.imageId}\n style={{\n position: \"relative\",\n borderRadius: 6,\n overflow: \"hidden\",\n border: isSelected\n ? \"2px solid #1976d2\"\n : \"2px solid transparent\",\n transition: \"border-color 0.15s ease\",\n aspectRatio: \"1\",\n }}\n onMouseEnter={() => setActiveTile(img.imageId)}\n onMouseLeave={() => setActiveTile(null)}\n onClick={(e) => {\n // Prevent document click handler from immediately dismissing\n e.stopPropagation();\n }}\n >\n <div\n onClick={() => {\n if (showActions && !isActive) {\n // First tap: reveal actions\n setActiveTile(img.imageId);\n } else {\n // Second tap (or no actions): select\n onSelect?.(img);\n }\n }}\n style={{\n cursor: \"pointer\",\n width: \"100%\",\n height: \"100%\",\n }}\n >\n <MrImage\n image={img}\n variant=\"sq200\"\n style={{\n width: \"100%\",\n height: \"100%\",\n objectFit: \"cover\",\n display: \"block\",\n }}\n alt={img.title}\n />\n </div>\n\n {/* Title label — always visible */}\n <div\n style={{\n position: \"absolute\",\n bottom: 0,\n left: 0,\n right: 0,\n padding: \"16px 6px 4px\",\n background: \"linear-gradient(transparent, rgba(0,0,0,0.5))\",\n color: \"#fff\",\n fontSize: 11,\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n pointerEvents: \"none\",\n }}\n >\n {img.title}\n </div>\n\n {/* Action buttons overlay — shown on hover/tap */}\n {showActions && isActive && (\n <div\n style={{\n position: \"absolute\",\n inset: 0,\n display: \"flex\",\n alignItems: \"flex-end\",\n justifyContent: \"center\",\n gap: 6,\n padding: \"8px 8px 24px\",\n background: \"linear-gradient(transparent 30%, rgba(0,0,0,0.55))\",\n }}\n >\n <ActionBtn label=\"Info\" onClick={() => setDetailImage(img)} />\n <ActionBtn label=\"Edit\" onClick={() => openEdit(img)} />\n <ActionBtn label=\"Del\" onClick={() => openDelete(img)} color=\"#ff8a80\" />\n </div>\n )}\n </div>\n );\n })}\n </div>\n )}\n\n {/* Pagination */}\n {pageCount > 1 && (\n <div\n style={{\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n gap: 12,\n fontSize: 14,\n }}\n >\n <button\n disabled={page <= 0}\n onClick={() => setPage(page - 1)}\n style={{\n padding: \"4px 12px\",\n borderRadius: 4,\n border: \"1px solid #ddd\",\n background: page <= 0 ? \"#f5f5f5\" : \"#fff\",\n cursor: page <= 0 ? \"default\" : \"pointer\",\n fontFamily: FONT,\n fontSize: 13,\n color: page <= 0 ? \"#bbb\" : \"#333\",\n }}\n >\n Prev\n </button>\n <span style={{ color: \"#666\", fontSize: 13 }}>\n Page {page + 1} of {pageCount} &middot; {total} image{total !== 1 ? \"s\" : \"\"}\n </span>\n <button\n disabled={page >= pageCount - 1}\n onClick={() => setPage(page + 1)}\n style={{\n padding: \"4px 12px\",\n borderRadius: 4,\n border: \"1px solid #ddd\",\n background: page >= pageCount - 1 ? \"#f5f5f5\" : \"#fff\",\n cursor: page >= pageCount - 1 ? \"default\" : \"pointer\",\n fontFamily: FONT,\n fontSize: 13,\n color: page >= pageCount - 1 ? \"#bbb\" : \"#333\",\n }}\n >\n Next\n </button>\n </div>\n )}\n\n {/* Details modal */}\n {detailImage && (\n <ImageDetails\n image={detailImage}\n onClose={() => setDetailImage(null)}\n onEdit={showActions ? openEdit : undefined}\n onDelete={showActions ? openDelete : undefined}\n />\n )}\n\n {/* Edit dialog */}\n {editImage && (\n <div\n style={{\n position: \"fixed\",\n inset: 0,\n zIndex: 10000,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: \"rgba(0,0,0,0.4)\",\n }}\n onClick={(e) => {\n if (e.target === e.currentTarget && !editSaving) setEditImage(null);\n }}\n >\n <div\n style={{\n backgroundColor: \"#fff\",\n borderRadius: 10,\n padding: 20,\n maxWidth: 400,\n width: \"90vw\",\n fontFamily: FONT,\n }}\n >\n <div style={{ fontWeight: 600, fontSize: 15, marginBottom: 12 }}>\n Edit Image\n </div>\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 8 }}>\n <input\n type=\"text\"\n placeholder=\"Title\"\n value={editTitle}\n onChange={(e) => setEditTitle(e.target.value)}\n disabled={editSaving}\n maxLength={250}\n style={{\n padding: \"8px 12px\",\n borderRadius: 6,\n border: \"1px solid #ddd\",\n fontSize: 14,\n fontFamily: FONT,\n outline: \"none\",\n }}\n />\n <input\n type=\"text\"\n placeholder=\"Description (optional)\"\n value={editDesc}\n onChange={(e) => setEditDesc(e.target.value)}\n disabled={editSaving}\n maxLength={500}\n style={{\n padding: \"8px 12px\",\n borderRadius: 6,\n border: \"1px solid #ddd\",\n fontSize: 14,\n fontFamily: FONT,\n outline: \"none\",\n }}\n />\n </div>\n <div style={{ display: \"flex\", justifyContent: \"flex-end\", gap: 8, marginTop: 16 }}>\n <button\n onClick={() => setEditImage(null)}\n disabled={editSaving}\n style={{\n padding: \"6px 14px\",\n borderRadius: 6,\n border: \"1px solid #ddd\",\n backgroundColor: \"#fff\",\n fontSize: 13,\n fontFamily: FONT,\n cursor: \"pointer\",\n color: \"#333\",\n }}\n >\n Cancel\n </button>\n <button\n onClick={handleEditSave}\n disabled={editSaving || !editTitle.trim()}\n style={{\n padding: \"6px 14px\",\n borderRadius: 6,\n border: \"none\",\n backgroundColor: editSaving || !editTitle.trim() ? \"#bbb\" : \"#1976d2\",\n color: \"#fff\",\n fontSize: 13,\n fontFamily: FONT,\n cursor: editSaving ? \"default\" : \"pointer\",\n }}\n >\n {editSaving ? \"Saving...\" : \"Save\"}\n </button>\n </div>\n </div>\n </div>\n )}\n\n {/* Delete confirmation */}\n {deleteConfirm && (\n <div\n style={{\n position: \"fixed\",\n inset: 0,\n zIndex: 10000,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: \"rgba(0,0,0,0.4)\",\n }}\n onClick={(e) => {\n if (e.target === e.currentTarget && !deleting) setDeleteConfirm(null);\n }}\n >\n <div\n style={{\n backgroundColor: \"#fff\",\n borderRadius: 10,\n padding: 20,\n maxWidth: 360,\n width: \"90vw\",\n fontFamily: FONT,\n }}\n >\n <div style={{ fontWeight: 600, fontSize: 15, marginBottom: 8 }}>\n Delete Image\n </div>\n <div style={{ fontSize: 14, color: \"#555\", marginBottom: 16 }}>\n Delete &ldquo;{deleteConfirm.title}&rdquo;? This removes all variants and cannot be undone.\n </div>\n <div style={{ display: \"flex\", justifyContent: \"flex-end\", gap: 8 }}>\n <button\n onClick={() => setDeleteConfirm(null)}\n disabled={deleting}\n style={{\n padding: \"6px 14px\",\n borderRadius: 6,\n border: \"1px solid #ddd\",\n backgroundColor: \"#fff\",\n fontSize: 13,\n fontFamily: FONT,\n cursor: \"pointer\",\n color: \"#333\",\n }}\n >\n Cancel\n </button>\n <button\n onClick={() => handleDelete(deleteConfirm)}\n disabled={deleting}\n style={{\n padding: \"6px 14px\",\n borderRadius: 6,\n border: \"none\",\n backgroundColor: deleting ? \"#bbb\" : \"#d32f2f\",\n color: \"#fff\",\n fontSize: 13,\n fontFamily: FONT,\n cursor: deleting ? \"default\" : \"pointer\",\n }}\n >\n {deleting ? \"Deleting...\" : \"Delete\"}\n </button>\n </div>\n </div>\n </div>\n )}\n </div>\n );\n\n if (mode === \"modal\") {\n return (\n <div\n style={{\n position: \"fixed\",\n inset: 0,\n zIndex: 9999,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: \"rgba(0,0,0,0.4)\",\n }}\n onClick={(e) => {\n if (e.target === e.currentTarget) onClose?.();\n }}\n >\n <div\n style={{\n backgroundColor: \"#fff\",\n borderRadius: 12,\n padding: 20,\n maxWidth: 640,\n width: \"90vw\",\n maxHeight: \"80vh\",\n overflow: \"auto\",\n boxShadow: \"0 8px 32px rgba(0,0,0,0.2)\",\n ...style,\n }}\n >\n {content}\n </div>\n </div>\n );\n }\n\n return content;\n}\n\nfunction ActionBtn({\n label,\n onClick,\n color,\n}: {\n label: string;\n onClick: () => void;\n color?: string;\n}) {\n return (\n <button\n onClick={(e) => {\n e.stopPropagation();\n onClick();\n }}\n style={{\n padding: \"6px 12px\",\n borderRadius: 4,\n border: \"none\",\n backgroundColor: \"rgba(255,255,255,0.2)\",\n color: color || \"#fff\",\n fontSize: 12,\n fontWeight: 500,\n cursor: \"pointer\",\n fontFamily:\n 'ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n minHeight: 32,\n backdropFilter: \"blur(4px)\",\n }}\n >\n {label}\n </button>\n );\n}\n","import { useEffect, useState, useRef } from \"react\";\nimport { useAppKit } from \"../AppKit\";\nimport { fetchAppResource } from \"../appResource\";\n\ntype FilesConfig = {\n filesBaseURL: string | null;\n loading: boolean;\n error: string | null;\n};\n\nexport function useFilesConfig(): FilesConfig {\n const { snapshot } = useAppKit();\n const [filesBaseURL, setFilesBaseURL] = useState<string | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const fetchedRef = useRef(\"\");\n const retryCountRef = useRef(0);\n const maxRetries = 3;\n const retryDelayMs = 5000;\n\n const workspaceBaseURL: string | undefined = snapshot?.workspaceBaseURL;\n const appId: string | undefined = snapshot?.appId;\n\n // Reset fetchedRef when deps change so the hook can retry with new values\n useEffect(() => {\n const cacheKey = workspaceBaseURL && appId ? `${workspaceBaseURL}|${appId}` : \"\";\n if (fetchedRef.current !== cacheKey) {\n fetchedRef.current = \"\";\n retryCountRef.current = 0;\n }\n }, [workspaceBaseURL, appId]);\n\n useEffect(() => {\n if (!workspaceBaseURL || !appId) {\n setLoading(false);\n return;\n }\n\n const cacheKey = `${workspaceBaseURL}|${appId}`;\n\n if (fetchedRef.current === cacheKey) return;\n\n let cancelled = false;\n let retryTimer: ReturnType<typeof setTimeout> | null = null;\n setLoading(true);\n setError(null);\n\n const doFetch = () => {\n fetchAppResource(workspaceBaseURL, appId)\n .then((data) => {\n if (cancelled) return;\n setFilesBaseURL(data.filesBaseURL);\n setLoading(false);\n fetchedRef.current = cacheKey;\n retryCountRef.current = 0;\n })\n .catch((err) => {\n if (cancelled) return;\n retryCountRef.current += 1;\n if (retryCountRef.current < maxRetries) {\n retryTimer = setTimeout(doFetch, retryDelayMs);\n } else {\n setError(err.message);\n setLoading(false);\n }\n });\n };\n\n doFetch();\n\n return () => {\n cancelled = true;\n if (retryTimer != null) clearTimeout(retryTimer);\n };\n }, [workspaceBaseURL, appId]);\n\n return { filesBaseURL, loading, error };\n}\n","import type {\n FileResource,\n FileListResponse,\n FileUploadOptions,\n FileUpdateOptions,\n} from \"../types\";\n\ntype AuthParams = {\n filesBaseURL: string;\n appId: string;\n jwtToken: string;\n};\n\nfunction headers(jwt: string): Record<string, string> {\n return { Authorization: `Bearer ${jwt}` };\n}\n\nfunction apiBase(p: AuthParams): string {\n return `${p.filesBaseURL}/api/${encodeURIComponent(p.appId)}`;\n}\n\nexport async function listFiles(\n p: AuthParams,\n opts?: { page?: number; pageSize?: number; q?: string; refType?: string; refId?: string },\n): Promise<FileListResponse> {\n const url = new URL(`${apiBase(p)}/files`);\n if (opts?.page != null) url.searchParams.set(\"page\", String(opts.page));\n if (opts?.pageSize != null)\n url.searchParams.set(\"pageSize\", String(opts.pageSize));\n if (opts?.q) url.searchParams.set(\"q\", opts.q);\n if (opts?.refType) url.searchParams.set(\"refType\", opts.refType);\n if (opts?.refId) url.searchParams.set(\"refId\", opts.refId);\n\n const res = await fetch(url.toString(), { headers: headers(p.jwtToken) });\n if (!res.ok) throw new Error(`List files failed: HTTP ${res.status}`);\n return res.json();\n}\n\nexport async function getFile(\n p: AuthParams,\n fileId: string,\n): Promise<FileResource> {\n const res = await fetch(`${apiBase(p)}/files/${encodeURIComponent(fileId)}`, {\n headers: headers(p.jwtToken),\n });\n if (!res.ok) throw new Error(`Get file failed: HTTP ${res.status}`);\n return res.json();\n}\n\nexport function uploadFile(\n p: AuthParams,\n opts: FileUploadOptions,\n onProgress?: (pct: number, loaded: number, total: number) => void,\n signal?: AbortSignal,\n): Promise<{ status: number; body: any }> {\n return new Promise((resolve, reject) => {\n const xhr = new XMLHttpRequest();\n xhr.open(\"POST\", `${apiBase(p)}/files/upload`);\n xhr.setRequestHeader(\"Authorization\", `Bearer ${p.jwtToken}`);\n\n if (signal) {\n signal.addEventListener(\"abort\", () => xhr.abort(), { once: true });\n }\n\n xhr.upload.onprogress = (e) => {\n if (e.lengthComputable && onProgress) {\n const pct = Math.round((e.loaded / e.total) * 100);\n onProgress(pct, e.loaded, e.total);\n }\n };\n\n xhr.onload = () => {\n let body = null;\n try {\n body = JSON.parse(xhr.responseText);\n } catch {\n // no json body (e.g. 204)\n }\n resolve({ status: xhr.status, body });\n };\n\n xhr.onerror = () => reject(new Error(\"Upload network error\"));\n xhr.onabort = () => reject(new Error(\"Upload aborted\"));\n\n const fd = new FormData();\n fd.append(\"file\", opts.file);\n fd.append(\"title\", opts.title);\n if (opts.description) fd.append(\"description\", opts.description);\n if (opts.refType) fd.append(\"refType\", opts.refType);\n if (opts.refId) fd.append(\"refId\", opts.refId);\n xhr.send(fd);\n });\n}\n\nexport async function updateFile(\n p: AuthParams,\n fileId: string,\n opts: FileUpdateOptions,\n): Promise<void> {\n const res = await fetch(`${apiBase(p)}/files/${encodeURIComponent(fileId)}`, {\n method: \"POST\",\n headers: { ...headers(p.jwtToken), \"Content-Type\": \"application/json\" },\n body: JSON.stringify(opts),\n });\n if (!res.ok) throw new Error(`Update file failed: HTTP ${res.status}`);\n}\n\nexport async function deleteFile(\n p: AuthParams,\n fileId: string,\n): Promise<void> {\n const res = await fetch(`${apiBase(p)}/files/${encodeURIComponent(fileId)}`, {\n method: \"DELETE\",\n headers: headers(p.jwtToken),\n });\n if (!res.ok) throw new Error(`Delete file failed: HTTP ${res.status}`);\n}\n","import { useState, useEffect, useCallback, useRef } from \"react\";\nimport { useAppKit } from \"../AppKit\";\nimport { useFilesConfig } from \"./config\";\nimport { listFiles, deleteFile, updateFile } from \"./api\";\nimport type { FileResource, FileUpdateOptions } from \"../types\";\n\nexport type UseFilesOptions = {\n page?: number;\n pageSize?: number;\n q?: string;\n refType?: string;\n refId?: string;\n enabled?: boolean;\n};\n\nexport type UseFilesReturn = {\n files: FileResource[];\n page: number;\n pageSize: number;\n total: number;\n pageCount: number;\n loading: boolean;\n error: string | null;\n refetch: () => void;\n setPage: (page: number) => void;\n setQuery: (q: string) => void;\n available: boolean;\n removeFile: (fileId: string) => Promise<void>;\n updateFile: (fileId: string, opts: FileUpdateOptions) => Promise<void>;\n};\n\nexport function useFiles(opts?: UseFilesOptions): UseFilesReturn {\n const { snapshot } = useAppKit();\n const { filesBaseURL, loading: configLoading } = useFilesConfig();\n\n const [files, setFiles] = useState<FileResource[]>([]);\n const [page, setPageState] = useState(opts?.page ?? 0);\n const [pageSize] = useState(opts?.pageSize ?? 50);\n const [total, setTotal] = useState(0);\n const [pageCount, setPageCount] = useState(0);\n const [query, setQueryState] = useState(opts?.q ?? \"\");\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const fetchIdRef = useRef(0);\n const enabled = opts?.enabled !== false;\n const jwtToken = snapshot?.jwtToken as string | undefined;\n const appId = snapshot?.appId as string | undefined;\n const available = !!filesBaseURL;\n\n const refType = opts?.refType;\n const refId = opts?.refId;\n\n const doFetch = useCallback(() => {\n if (!filesBaseURL || !appId || !jwtToken || !enabled) return;\n\n const id = ++fetchIdRef.current;\n setLoading(true);\n setError(null);\n\n listFiles(\n { filesBaseURL, appId, jwtToken },\n { page, pageSize, q: query || undefined, refType, refId },\n )\n .then((res) => {\n if (id !== fetchIdRef.current) return;\n setFiles(res.files ?? []);\n setTotal(res.total);\n setPageCount(res.pageCount);\n setLoading(false);\n })\n .catch((err) => {\n if (id !== fetchIdRef.current) return;\n setError(err.message);\n setLoading(false);\n });\n }, [filesBaseURL, appId, jwtToken, page, pageSize, query, refType, refId, enabled]);\n\n useEffect(() => {\n doFetch();\n return () => {\n fetchIdRef.current++;\n };\n }, [doFetch]);\n\n const setPage = useCallback((p: number) => setPageState(p), []);\n const setQuery = useCallback((q: string) => {\n setQueryState(q);\n setPageState(0);\n }, []);\n\n const removeFile = useCallback(\n async (fileId: string) => {\n if (!filesBaseURL || !appId || !jwtToken) return;\n await deleteFile({ filesBaseURL, appId, jwtToken }, fileId);\n doFetch();\n },\n [filesBaseURL, appId, jwtToken, doFetch],\n );\n\n const doUpdateFile = useCallback(\n async (fileId: string, updateOpts: FileUpdateOptions) => {\n if (!filesBaseURL || !appId || !jwtToken) return;\n await updateFile(\n { filesBaseURL, appId, jwtToken },\n fileId,\n updateOpts,\n );\n doFetch();\n },\n [filesBaseURL, appId, jwtToken, doFetch],\n );\n\n return {\n files,\n page,\n pageSize,\n total,\n pageCount,\n loading: loading || configLoading,\n error,\n refetch: doFetch,\n setPage,\n setQuery,\n available,\n removeFile,\n updateFile: doUpdateFile,\n };\n}\n","import { useState, useEffect, useCallback, useRef } from \"react\";\nimport { useAppKit } from \"../AppKit\";\nimport { useFilesConfig } from \"./config\";\nimport { getFile } from \"./api\";\nimport type { FileResource } from \"../types\";\n\nexport type UseFileOptions = {\n enabled?: boolean;\n};\n\nexport type UseFileReturn = {\n file: FileResource | null;\n loading: boolean;\n error: string | null;\n refetch: () => void;\n available: boolean;\n};\n\nexport function useFile(\n fileId: string | null | undefined,\n opts?: UseFileOptions,\n): UseFileReturn {\n const { snapshot } = useAppKit();\n const { filesBaseURL, loading: configLoading } = useFilesConfig();\n\n const [file, setFile] = useState<FileResource | null>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const fetchIdRef = useRef(0);\n const enabled = opts?.enabled !== false;\n const jwtToken = snapshot?.jwtToken as string | undefined;\n const appId = snapshot?.appId as string | undefined;\n const available = !!filesBaseURL;\n\n const doFetch = useCallback(() => {\n if (!filesBaseURL || !appId || !jwtToken || !fileId || !enabled) return;\n\n const id = ++fetchIdRef.current;\n setLoading(true);\n setError(null);\n\n getFile({ filesBaseURL, appId, jwtToken }, fileId)\n .then((res) => {\n if (id !== fetchIdRef.current) return;\n setFile(res);\n setLoading(false);\n })\n .catch((err) => {\n if (id !== fetchIdRef.current) return;\n setError(err.message);\n setLoading(false);\n });\n }, [filesBaseURL, appId, jwtToken, fileId, enabled]);\n\n useEffect(() => {\n doFetch();\n return () => {\n fetchIdRef.current++;\n };\n }, [doFetch]);\n\n return {\n file,\n loading: loading || configLoading,\n error,\n refetch: doFetch,\n available,\n };\n}\n","import { useState, useEffect, useCallback, useRef } from \"react\";\nimport { useAppKit } from \"../AppKit\";\nimport { useFilesConfig } from \"./config\";\nimport { uploadFile } from \"./api\";\nimport type { UploadProgress, FileUploadOptions } from \"../types\";\n\nexport type UseFileUploadReturn = {\n upload: (opts: FileUploadOptions) => Promise<void>;\n cancel: () => void;\n progress: UploadProgress;\n reset: () => void;\n available: boolean;\n};\n\nconst IDLE: UploadProgress = {\n status: \"idle\",\n progress: 0,\n bytesUploaded: 0,\n bytesTotal: 0,\n error: null,\n};\n\nexport function useFileUpload(): UseFileUploadReturn {\n const { snapshot } = useAppKit();\n const { filesBaseURL } = useFilesConfig();\n\n const [progress, setProgress] = useState<UploadProgress>(IDLE);\n const abortRef = useRef<AbortController | null>(null);\n\n const jwtToken = snapshot?.jwtToken as string | undefined;\n const appId = snapshot?.appId as string | undefined;\n const available = !!filesBaseURL;\n\n // Abort upload if auth is lost\n useEffect(() => {\n if (!jwtToken && progress.status === \"uploading\") {\n abortRef.current?.abort();\n }\n }, [jwtToken, progress.status]);\n\n const upload = useCallback(\n async (opts: FileUploadOptions) => {\n if (!filesBaseURL || !appId || !jwtToken) {\n setProgress({\n ...IDLE,\n status: \"error\",\n error: \"Files service not available\",\n });\n return;\n }\n\n abortRef.current?.abort();\n const controller = new AbortController();\n abortRef.current = controller;\n\n setProgress({\n status: \"uploading\",\n progress: 0,\n bytesUploaded: 0,\n bytesTotal: opts.file.size,\n error: null,\n });\n\n try {\n const result = await uploadFile(\n { filesBaseURL, appId, jwtToken },\n opts,\n (pct, loaded, total) => {\n setProgress((prev) => ({\n ...prev,\n progress: pct,\n bytesUploaded: loaded,\n bytesTotal: total,\n }));\n },\n controller.signal,\n );\n\n if (result.status === 204) {\n setProgress({\n status: \"success\",\n progress: 100,\n bytesUploaded: opts.file.size,\n bytesTotal: opts.file.size,\n error: null,\n });\n } else if (result.status === 409) {\n setProgress({\n status: \"conflict\",\n progress: 100,\n bytesUploaded: opts.file.size,\n bytesTotal: opts.file.size,\n error: result.body?.message || \"A file with identical content already exists\",\n existingFileId: result.body?.fileId,\n });\n } else if (result.status === 413) {\n throw new Error(\"File exceeds 10MB limit\");\n } else if (result.status === 415) {\n throw new Error(\n \"Unsupported file type. Allowed: PDF, DOC, DOCX, XLS, XLSX, PPT, PPTX, CSV, TXT, ZIP, GZ, JSON, XML\",\n );\n } else if (result.status === 429) {\n throw new Error(result.body?.message || \"Storage limit reached\");\n } else {\n throw new Error(`Upload failed: HTTP ${result.status}`);\n }\n } catch (err: any) {\n if (err.message === \"Upload aborted\") return;\n setProgress({\n status: \"error\",\n progress: 0,\n bytesUploaded: 0,\n bytesTotal: opts.file.size,\n error: err.message || \"Upload failed\",\n });\n }\n },\n [filesBaseURL, appId, jwtToken],\n );\n\n const cancel = useCallback(() => {\n abortRef.current?.abort();\n setProgress(IDLE);\n }, []);\n\n const reset = useCallback(() => {\n setProgress(IDLE);\n }, []);\n\n return { upload, cancel, progress, reset, available };\n}\n","import React, { useState, useRef, useCallback, useEffect } from \"react\";\nimport { useFileUpload } from \"./useFileUpload\";\nimport type { FileUploadOptions } from \"../types\";\n\nexport interface FileUploaderProps {\n onUpload?: () => void;\n onError?: (error: string) => void;\n defaultTitle?: string;\n defaultDescription?: string;\n showFields?: boolean;\n accept?: string;\n maxSize?: number;\n refType?: string;\n refId?: string;\n className?: string;\n style?: React.CSSProperties;\n label?: string;\n disabled?: boolean;\n}\n\nconst FONT =\n 'ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif';\nconst ACCEPT_DEFAULT =\n \"application/pdf,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.csv,text/plain,.zip,.gz,application/json,.xml\";\nconst MAX_SIZE_DEFAULT = 10 * 1024 * 1024;\n\nfunction formatSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nexport function FileUploader({\n onUpload,\n onError,\n defaultTitle,\n defaultDescription = \"\",\n showFields = true,\n accept = ACCEPT_DEFAULT,\n maxSize = MAX_SIZE_DEFAULT,\n refType,\n refId,\n className,\n style,\n label = \"Drop a file here or click to select\",\n disabled = false,\n}: FileUploaderProps) {\n const { upload, cancel, progress, reset, available } = useFileUpload();\n const fileInputRef = useRef<HTMLInputElement>(null);\n const [dragOver, setDragOver] = useState(false);\n const [title, setTitle] = useState(defaultTitle ?? \"\");\n const [description, setDescription] = useState(defaultDescription);\n const [selectedFile, setSelectedFile] = useState<File | null>(null);\n const [validationError, setValidationError] = useState<string | null>(null);\n const [showSuccess, setShowSuccess] = useState(false);\n\n const handleFile = useCallback(\n (file: File) => {\n setValidationError(null);\n if (file.size > maxSize) {\n setValidationError(\n `File too large (${(file.size / 1024 / 1024).toFixed(1)}MB). Max ${(maxSize / 1024 / 1024).toFixed(0)}MB.`,\n );\n return;\n }\n setSelectedFile(file);\n if (!title) {\n setTitle(file.name.replace(/\\.[^.]+$/, \"\"));\n }\n },\n [maxSize, title],\n );\n\n const handleDrop = useCallback(\n (e: React.DragEvent) => {\n e.preventDefault();\n setDragOver(false);\n const file = e.dataTransfer.files[0];\n if (file) handleFile(file);\n },\n [handleFile],\n );\n\n const handleSubmit = useCallback(async () => {\n if (!selectedFile || !title.trim()) return;\n reset();\n const opts: FileUploadOptions = {\n file: selectedFile,\n title: title.trim(),\n description: description.trim() || undefined,\n refType,\n refId,\n };\n await upload(opts);\n }, [selectedFile, title, description, refType, refId, upload, reset]);\n\n // Watch for upload completion\n const prevStatus = useRef(progress.status);\n useEffect(() => {\n if (prevStatus.current === progress.status) return;\n prevStatus.current = progress.status;\n if (progress.status === \"success\") {\n setSelectedFile(null);\n setTitle(defaultTitle ?? \"\");\n setDescription(defaultDescription);\n setShowSuccess(true);\n onUpload?.();\n }\n if (progress.status === \"conflict\") {\n setSelectedFile(null);\n setTitle(defaultTitle ?? \"\");\n setDescription(defaultDescription);\n }\n if (progress.status === \"error\" && progress.error) {\n onError?.(progress.error);\n }\n }, [progress.status, progress.error, onUpload, onError, defaultTitle, defaultDescription]);\n\n // Auto-dismiss success toast\n useEffect(() => {\n if (!showSuccess) return;\n const t = setTimeout(() => setShowSuccess(false), 4000);\n return () => clearTimeout(t);\n }, [showSuccess]);\n\n if (!available) return null;\n\n const isUploading = progress.status === \"uploading\";\n const isDisabled = disabled || isUploading;\n\n return (\n <div className={className} style={{ fontFamily: FONT, ...style }}>\n {/* Drop zone */}\n <div\n onDragEnter={(e) => {\n e.preventDefault();\n setDragOver(true);\n }}\n onDragOver={(e) => {\n e.preventDefault();\n setDragOver(true);\n }}\n onDragLeave={() => setDragOver(false)}\n onDrop={handleDrop}\n onClick={() => !isDisabled && fileInputRef.current?.click()}\n style={{\n border: `2px dashed ${dragOver ? \"#1976d2\" : \"#ccc\"}`,\n borderRadius: 8,\n padding: \"24px 16px\",\n textAlign: \"center\",\n cursor: isDisabled ? \"default\" : \"pointer\",\n backgroundColor: dragOver ? \"#e3f2fd\" : \"#fafafa\",\n transition: \"all 0.15s ease\",\n opacity: isDisabled ? 0.6 : 1,\n }}\n >\n <input\n ref={fileInputRef}\n type=\"file\"\n accept={accept}\n style={{ display: \"none\" }}\n onChange={(e) => {\n const file = e.target.files?.[0];\n if (file) handleFile(file);\n e.target.value = \"\";\n }}\n />\n {!selectedFile && (\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#999\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ marginBottom: 6 }}>\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" />\n <polyline points=\"17 8 12 3 7 8\" />\n <line x1=\"12\" y1=\"3\" x2=\"12\" y2=\"15\" />\n </svg>\n )}\n {selectedFile && (\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#666\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ marginBottom: 6 }}>\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n </svg>\n )}\n <div style={{ fontSize: 14, color: \"#666\" }}>\n {selectedFile ? selectedFile.name : label}\n </div>\n {selectedFile && (\n <div style={{ fontSize: 12, color: \"#999\", marginTop: 4 }}>\n {formatSize(selectedFile.size)}\n </div>\n )}\n </div>\n\n {/* Validation error */}\n {validationError && (\n <div style={{ color: \"#d32f2f\", fontSize: 13, marginTop: 8 }}>\n {validationError}\n </div>\n )}\n\n {/* Title / Description fields */}\n {showFields && selectedFile && (\n <div style={{ marginTop: 12, display: \"flex\", flexDirection: \"column\", gap: 8 }}>\n <input\n type=\"text\"\n placeholder=\"Title\"\n value={title}\n onChange={(e) => setTitle(e.target.value)}\n disabled={isDisabled}\n maxLength={250}\n style={{\n padding: \"8px 12px\",\n borderRadius: 6,\n border: \"1px solid #ddd\",\n fontSize: 14,\n fontFamily: FONT,\n outline: \"none\",\n }}\n />\n <input\n type=\"text\"\n placeholder=\"Description (optional)\"\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n disabled={isDisabled}\n maxLength={500}\n style={{\n padding: \"8px 12px\",\n borderRadius: 6,\n border: \"1px solid #ddd\",\n fontSize: 14,\n fontFamily: FONT,\n outline: \"none\",\n }}\n />\n </div>\n )}\n\n {/* Progress */}\n {isUploading && (\n <div style={{ marginTop: 12 }}>\n <div style={{ fontSize: 12, color: \"#666\", marginBottom: 4 }}>\n Uploading... — {Math.round(progress.progress)}%\n {progress.bytesTotal > 0 && (\n <> · {formatSize(progress.bytesUploaded)} / {formatSize(progress.bytesTotal)}</>\n )}\n </div>\n <div\n style={{\n height: 6,\n borderRadius: 3,\n backgroundColor: \"#e0e0e0\",\n overflow: \"hidden\",\n }}\n >\n <div\n style={{\n width: `${progress.progress}%`,\n height: \"100%\",\n backgroundColor: \"#1976d2\",\n transition: \"width 0.2s ease\",\n }}\n />\n </div>\n </div>\n )}\n\n {/* Upload / Cancel buttons */}\n {selectedFile && (\n <div style={{ marginTop: 12, display: \"flex\", gap: 8 }}>\n <button\n onClick={handleSubmit}\n disabled={isDisabled || !title.trim()}\n style={{\n padding: \"8px 20px\",\n borderRadius: 6,\n border: \"none\",\n backgroundColor: isDisabled ? \"#bbb\" : \"#1976d2\",\n color: \"#fff\",\n fontSize: 14,\n fontFamily: FONT,\n cursor: isDisabled ? \"default\" : \"pointer\",\n fontWeight: 500,\n }}\n >\n Upload\n </button>\n {isUploading && (\n <button\n onClick={cancel}\n style={{\n padding: \"8px 16px\",\n borderRadius: 6,\n border: \"1px solid #ddd\",\n backgroundColor: \"#fff\",\n fontSize: 14,\n fontFamily: FONT,\n cursor: \"pointer\",\n color: \"#666\",\n }}\n >\n Cancel\n </button>\n )}\n </div>\n )}\n\n {/* Error message */}\n {progress.status === \"error\" && progress.error && (\n <div style={{ color: \"#d32f2f\", fontSize: 13, marginTop: 8 }}>\n {progress.error}\n </div>\n )}\n\n {/* Conflict message */}\n {progress.status === \"conflict\" && (\n <div\n style={{\n marginTop: 12,\n padding: \"10px 14px\",\n borderRadius: 8,\n backgroundColor: \"#fff3e0\",\n border: \"1px solid #ffcc80\",\n color: \"#e65100\",\n fontSize: 13,\n fontFamily: FONT,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n }}\n >\n <span>{progress.error || \"A file with identical content already exists\"}</span>\n <button\n onClick={() => reset()}\n style={{\n background: \"none\",\n border: \"none\",\n color: \"#e65100\",\n cursor: \"pointer\",\n fontSize: 16,\n lineHeight: 1,\n padding: \"0 2px\",\n }}\n >\n &times;\n </button>\n </div>\n )}\n\n {/* Success toast */}\n {showSuccess && (\n <div\n style={{\n marginTop: 12,\n padding: \"10px 14px\",\n borderRadius: 8,\n backgroundColor: \"#e8f5e9\",\n border: \"1px solid #a5d6a7\",\n color: \"#2e7d32\",\n fontSize: 13,\n fontFamily: FONT,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n }}\n >\n <span>File uploaded successfully</span>\n <button\n onClick={() => setShowSuccess(false)}\n style={{\n background: \"none\",\n border: \"none\",\n color: \"#2e7d32\",\n cursor: \"pointer\",\n fontSize: 16,\n lineHeight: 1,\n padding: \"0 2px\",\n }}\n >\n &times;\n </button>\n </div>\n )}\n </div>\n );\n}\n","import React, { useState, useCallback } from \"react\";\nimport type { FileResource } from \"../types\";\n\nexport interface FileDetailsProps {\n file: FileResource;\n onClose: () => void;\n onEdit?: (file: FileResource) => void;\n onDelete?: (file: FileResource) => void;\n className?: string;\n style?: React.CSSProperties;\n}\n\nconst FONT =\n 'ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif';\n\nfunction formatBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nconst FORMAT_LABELS: Record<string, string> = {\n pdf: \"PDF\",\n doc: \"Word\",\n docx: \"Word\",\n xls: \"Excel\",\n xlsx: \"Excel\",\n ppt: \"PowerPoint\",\n pptx: \"PowerPoint\",\n csv: \"CSV\",\n txt: \"Text\",\n zip: \"ZIP\",\n gz: \"GZip\",\n json: \"JSON\",\n xml: \"XML\",\n};\n\nfunction formatLabel(format: string): string {\n return FORMAT_LABELS[format.toLowerCase()] || format.toUpperCase();\n}\n\nfunction isSafeURL(url: string): boolean {\n return url.startsWith(\"https://\") || url.startsWith(\"http://localhost\");\n}\n\nfunction sanitizeFilename(name: string): string {\n return name.replace(/[/\\\\:*?\"<>|\\x00-\\x1f]/g, \"_\");\n}\n\nexport function FileDetails({\n file,\n onClose,\n onEdit,\n onDelete,\n className,\n style,\n}: FileDetailsProps) {\n const [copiedField, setCopiedField] = useState<string | null>(null);\n\n const copyText = useCallback((text: string, field: string) => {\n navigator.clipboard?.writeText(text).then(() => {\n setCopiedField(field);\n setTimeout(() => setCopiedField(null), 1200);\n }).catch(() => { /* clipboard not available */ });\n }, []);\n\n const handleDownload = useCallback(async () => {\n if (!file.objectURL) return;\n try {\n const res = await fetch(file.objectURL);\n const blob = await res.blob();\n const url = URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = sanitizeFilename(file.originalName || `${file.title}.${file.ext}`);\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n } catch {\n if (isSafeURL(file.objectURL)) {\n window.open(file.objectURL, \"_blank\");\n }\n }\n }, [file]);\n\n return (\n <div\n style={{\n position: \"fixed\",\n inset: 0,\n zIndex: 9999,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: \"rgba(0,0,0,0.5)\",\n }}\n onClick={(e) => {\n if (e.target === e.currentTarget) onClose();\n }}\n >\n <div\n className={className}\n style={{\n backgroundColor: \"#fff\",\n borderRadius: 12,\n maxWidth: 600,\n width: \"95vw\",\n maxHeight: \"90vh\",\n overflow: \"auto\",\n boxShadow: \"0 8px 32px rgba(0,0,0,0.2)\",\n fontFamily: FONT,\n ...style,\n }}\n >\n {/* Header */}\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n padding: \"16px 20px 12px\",\n borderBottom: \"1px solid #eee\",\n }}\n >\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 10 }}>\n <FileIcon format={file.format} />\n <div style={{ fontWeight: 600, fontSize: 16 }}>{file.title}</div>\n </div>\n <button\n onClick={onClose}\n style={{\n background: \"none\",\n border: \"none\",\n fontSize: 22,\n cursor: \"pointer\",\n color: \"#666\",\n lineHeight: 1,\n padding: \"4px 8px\",\n }}\n >\n &times;\n </button>\n </div>\n\n {/* Metadata */}\n <div style={{ padding: \"16px 20px\" }}>\n <div style={{ display: \"flex\", flexWrap: \"wrap\", gap: 8, fontSize: 13 }}>\n <MetaItem label=\"Format\" value={formatLabel(file.format)} />\n <MetaItem label=\"Size\" value={formatBytes(file.sizeBytes)} />\n <MetaItem label=\"Type\" value={file.contentType} />\n <MetaItem\n label=\"ID\"\n value={file.fileId.slice(0, 12) + \"...\"}\n onClick={() => copyText(file.fileId, \"id\")}\n actionLabel={copiedField === \"id\" ? \"Copied\" : \"Copy\"}\n />\n {file.objectURL && (\n <MetaItem\n label=\"URL\"\n value={new URL(file.objectURL).pathname.split(\"/\").pop() || \"...\"}\n onClick={() => copyText(file.objectURL, \"url\")}\n actionLabel={copiedField === \"url\" ? \"Copied\" : \"Copy\"}\n />\n )}\n </div>\n\n <div style={{ marginTop: 12, fontSize: 13, color: \"#555\" }}>\n <span style={{ fontWeight: 500, color: \"#888\" }}>File:</span>{\" \"}\n {file.originalName}\n </div>\n\n {file.description && (\n <div style={{ marginTop: 8, fontSize: 13, color: \"#666\" }}>\n {file.description}\n </div>\n )}\n\n <div style={{ marginTop: 6, fontSize: 12, color: \"#999\" }}>\n Uploaded {new Date(file.uploadedAt).toLocaleDateString()}\n </div>\n </div>\n\n {/* Actions */}\n <div\n style={{\n display: \"flex\",\n justifyContent: \"space-between\",\n padding: \"12px 20px 16px\",\n borderTop: \"1px solid #eee\",\n gap: 8,\n }}\n >\n <div style={{ display: \"flex\", gap: 8 }}>\n {onEdit && (\n <button\n onClick={() => onEdit(file)}\n style={{\n padding: \"6px 14px\",\n borderRadius: 6,\n border: \"1px solid #ddd\",\n backgroundColor: \"#fff\",\n fontSize: 13,\n fontFamily: FONT,\n cursor: \"pointer\",\n color: \"#333\",\n }}\n >\n Edit\n </button>\n )}\n {onDelete && (\n <button\n onClick={() => onDelete(file)}\n style={{\n padding: \"6px 14px\",\n borderRadius: 6,\n border: \"1px solid #ffcdd2\",\n backgroundColor: \"#fff\",\n fontSize: 13,\n fontFamily: FONT,\n cursor: \"pointer\",\n color: \"#d32f2f\",\n }}\n >\n Delete\n </button>\n )}\n </div>\n <div style={{ display: \"flex\", gap: 8 }}>\n {file.objectURL && (\n <>\n {isSafeURL(file.objectURL) && (\n <a\n href={file.objectURL}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{\n padding: \"6px 14px\",\n borderRadius: 6,\n border: \"1px solid #ddd\",\n backgroundColor: \"#fff\",\n fontSize: 13,\n fontFamily: FONT,\n cursor: \"pointer\",\n color: \"#333\",\n textDecoration: \"none\",\n display: \"inline-flex\",\n alignItems: \"center\",\n }}\n >\n Open\n </a>\n )}\n <button\n onClick={handleDownload}\n style={{\n padding: \"6px 14px\",\n borderRadius: 6,\n border: \"1px solid #ddd\",\n backgroundColor: \"#fff\",\n fontSize: 13,\n fontFamily: FONT,\n cursor: \"pointer\",\n color: \"#333\",\n }}\n >\n Download\n </button>\n </>\n )}\n <button\n onClick={onClose}\n style={{\n padding: \"6px 14px\",\n borderRadius: 6,\n border: \"1px solid #ddd\",\n backgroundColor: \"#fafafa\",\n fontSize: 13,\n fontFamily: FONT,\n cursor: \"pointer\",\n color: \"#333\",\n }}\n >\n Close\n </button>\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nfunction FileIcon({ format }: { format: string }) {\n const colors: Record<string, string> = {\n pdf: \"#d32f2f\",\n doc: \"#1565c0\",\n docx: \"#1565c0\",\n xls: \"#2e7d32\",\n xlsx: \"#2e7d32\",\n ppt: \"#e65100\",\n pptx: \"#e65100\",\n csv: \"#2e7d32\",\n json: \"#6a1b9a\",\n xml: \"#6a1b9a\",\n txt: \"#616161\",\n zip: \"#795548\",\n gz: \"#795548\",\n };\n const color = colors[format.toLowerCase()] || \"#757575\";\n return (\n <div\n style={{\n width: 32,\n height: 32,\n borderRadius: 6,\n backgroundColor: color,\n color: \"#fff\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontSize: 10,\n fontWeight: 700,\n fontFamily: FONT,\n flexShrink: 0,\n textTransform: \"uppercase\",\n }}\n >\n {format.slice(0, 4)}\n </div>\n );\n}\n\nfunction MetaItem({\n label,\n value,\n onClick,\n actionLabel,\n}: {\n label: string;\n value: string;\n onClick?: () => void;\n actionLabel?: string;\n}) {\n return (\n <span\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 4,\n padding: \"3px 10px\",\n borderRadius: 10,\n backgroundColor: \"#f5f5f5\",\n color: \"#555\",\n fontSize: 12,\n }}\n >\n <span style={{ fontWeight: 500, color: \"#888\" }}>{label}:</span>{\" \"}\n <span style={{ fontFamily: \"monospace\" }}>{value}</span>\n {onClick && (\n <button\n onClick={onClick}\n style={{\n background: \"none\",\n border: \"none\",\n color: \"#1976d2\",\n cursor: \"pointer\",\n fontSize: 11,\n padding: \"0 2px\",\n fontFamily: FONT,\n }}\n >\n {actionLabel}\n </button>\n )}\n </span>\n );\n}\n","import React, { useState, useCallback, useEffect, useRef } from \"react\";\nimport { useFiles } from \"./useFiles\";\nimport { FileDetails } from \"./FileDetails\";\nimport type { FileResource } from \"../types\";\n\nexport interface FilePickerProps {\n onSelect?: (file: FileResource) => void;\n onClose?: () => void;\n mode?: \"modal\" | \"inline\";\n pageSize?: number;\n showSearch?: boolean;\n searchPlaceholder?: string;\n selectedFileId?: string;\n showActions?: boolean;\n refType?: string;\n refId?: string;\n /** Increment to trigger a refetch (e.g. after an upload). */\n refreshSignal?: number;\n className?: string;\n style?: React.CSSProperties;\n}\n\nconst FONT =\n 'ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif';\n\nconst SKELETON_STYLE_ID = \"mr-file-skeleton-keyframes\";\n\nfunction useSkeletonStyle() {\n useEffect(() => {\n if (document.getElementById(SKELETON_STYLE_ID)) return;\n const style = document.createElement(\"style\");\n style.id = SKELETON_STYLE_ID;\n style.textContent =\n \"@keyframes mr-skeleton-pulse{0%,100%{opacity:1}50%{opacity:.4}}\";\n document.head.appendChild(style);\n }, []);\n}\n\nfunction formatBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nconst FORMAT_COLORS: Record<string, string> = {\n pdf: \"#d32f2f\",\n doc: \"#1565c0\",\n docx: \"#1565c0\",\n xls: \"#2e7d32\",\n xlsx: \"#2e7d32\",\n ppt: \"#e65100\",\n pptx: \"#e65100\",\n csv: \"#2e7d32\",\n json: \"#6a1b9a\",\n xml: \"#6a1b9a\",\n txt: \"#616161\",\n zip: \"#795548\",\n gz: \"#795548\",\n};\n\nexport function FilePicker({\n onSelect,\n onClose,\n mode = \"inline\",\n pageSize = 20,\n showSearch = true,\n searchPlaceholder = \"Search files...\",\n selectedFileId,\n showActions = false,\n refType,\n refId,\n refreshSignal,\n className,\n style,\n}: FilePickerProps) {\n const {\n files,\n page,\n pageCount,\n total,\n loading,\n error,\n setPage,\n setQuery,\n refetch,\n available,\n removeFile,\n updateFile,\n } = useFiles({ pageSize, refType, refId });\n\n useSkeletonStyle();\n\n const [searchInput, setSearchInput] = useState(\"\");\n const [activeRow, setActiveRow] = useState<string | null>(null);\n const [detailFile, setDetailFile] = useState<FileResource | null>(null);\n const [editFile, setEditFile] = useState<FileResource | null>(null);\n const [editTitle, setEditTitle] = useState(\"\");\n const [editDesc, setEditDesc] = useState(\"\");\n const [editSaving, setEditSaving] = useState(false);\n const [deleteConfirm, setDeleteConfirm] = useState<FileResource | null>(null);\n const [deleting, setDeleting] = useState(false);\n const [actionError, setActionError] = useState<string | null>(null);\n\n // Debounced search\n useEffect(() => {\n const timer = setTimeout(() => setQuery(searchInput), 300);\n return () => clearTimeout(timer);\n }, [searchInput, setQuery]);\n\n // External refresh trigger\n const prevSignal = useRef(refreshSignal);\n useEffect(() => {\n if (refreshSignal != null && refreshSignal !== prevSignal.current) {\n prevSignal.current = refreshSignal;\n refetch();\n }\n }, [refreshSignal, refetch]);\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === \"Escape\") onClose?.();\n },\n [onClose],\n );\n\n const handleDelete = useCallback(\n async (f: FileResource) => {\n setDeleting(true);\n setActionError(null);\n try {\n await removeFile(f.fileId);\n setDeleteConfirm(null);\n setDetailFile(null);\n } catch (err: any) {\n setActionError(err.message || \"Delete failed\");\n } finally {\n setDeleting(false);\n }\n },\n [removeFile],\n );\n\n const handleEditSave = useCallback(async () => {\n if (!editFile || !editTitle.trim()) return;\n setEditSaving(true);\n setActionError(null);\n try {\n await updateFile(editFile.fileId, {\n title: editTitle.trim(),\n description: editDesc.trim() || undefined,\n });\n setEditFile(null);\n } catch (err: any) {\n setActionError(err.message || \"Update failed\");\n } finally {\n setEditSaving(false);\n }\n }, [editFile, editTitle, editDesc, updateFile]);\n\n const openEdit = useCallback((f: FileResource) => {\n setEditTitle(f.title);\n setEditDesc(f.description || \"\");\n setEditFile(f);\n setDetailFile(null);\n setActionError(null);\n }, []);\n\n const openDelete = useCallback((f: FileResource) => {\n setDeleteConfirm(f);\n setDetailFile(null);\n setActionError(null);\n }, []);\n\n if (!available) return null;\n\n const skeletonCount = Math.min(pageSize, 6);\n\n const content = (\n <div\n className={className}\n style={{\n fontFamily: FONT,\n display: \"flex\",\n flexDirection: \"column\",\n gap: 12,\n ...(!mode || mode === \"inline\" ? style : {}),\n }}\n onKeyDown={handleKeyDown}\n >\n {/* Header with search */}\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 8 }}>\n {showSearch && (\n <div style={{ flex: 1, position: \"relative\" }}>\n <input\n type=\"text\"\n placeholder={searchPlaceholder}\n value={searchInput}\n onChange={(e) => setSearchInput(e.target.value)}\n style={{\n width: \"100%\",\n padding: \"8px 12px\",\n paddingRight: searchInput ? 32 : 12,\n borderRadius: 6,\n border: \"1px solid #ddd\",\n fontSize: 14,\n fontFamily: FONT,\n outline: \"none\",\n boxSizing: \"border-box\",\n }}\n />\n {searchInput && (\n <button\n onClick={() => setSearchInput(\"\")}\n style={{\n position: \"absolute\",\n right: 6,\n top: \"50%\",\n transform: \"translateY(-50%)\",\n background: \"none\",\n border: \"none\",\n fontSize: 16,\n cursor: \"pointer\",\n color: \"#999\",\n lineHeight: 1,\n padding: \"2px 4px\",\n }}\n >\n &times;\n </button>\n )}\n </div>\n )}\n {mode === \"modal\" && onClose && (\n <button\n onClick={onClose}\n style={{\n background: \"none\",\n border: \"none\",\n fontSize: 20,\n cursor: \"pointer\",\n padding: \"4px 8px\",\n color: \"#666\",\n lineHeight: 1,\n }}\n >\n &times;\n </button>\n )}\n </div>\n\n {/* Action error */}\n {actionError && (\n <div style={{ color: \"#d32f2f\", fontSize: 13, padding: \"4px 0\" }}>\n {actionError}\n </div>\n )}\n\n {/* Loading skeleton */}\n {loading && (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 4 }}>\n {Array.from({ length: skeletonCount }).map((_, i) => (\n <div\n key={i}\n style={{\n height: 48,\n borderRadius: 6,\n backgroundColor: \"#f0f0f0\",\n animation: \"mr-skeleton-pulse 1.5s ease-in-out infinite\",\n }}\n />\n ))}\n </div>\n )}\n\n {/* Fetch error */}\n {error && (\n <div style={{ textAlign: \"center\", padding: 20, color: \"#d32f2f\", fontSize: 14 }}>\n {error}\n </div>\n )}\n\n {/* Empty state */}\n {!loading && !error && files.length === 0 && (\n <div style={{ textAlign: \"center\", padding: \"40px 20px\", color: \"#999\" }}>\n <svg\n width=\"36\"\n height=\"36\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n style={{ opacity: 0.4, marginBottom: 8 }}\n >\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n </svg>\n <div style={{ fontSize: 14, fontWeight: 500, color: \"#666\" }}>No files yet</div>\n <div style={{ fontSize: 13, marginTop: 4 }}>\n {searchInput ? \"Try a different search term\" : \"Upload a file to get started\"}\n </div>\n </div>\n )}\n\n {/* File list */}\n {!loading && files.length > 0 && (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 2 }}>\n {files.map((f) => {\n const isSelected = f.fileId === selectedFileId;\n const isActive = activeRow === f.fileId;\n const fmtColor = FORMAT_COLORS[f.format.toLowerCase()] || \"#757575\";\n return (\n <div\n key={f.fileId}\n onMouseEnter={() => setActiveRow(f.fileId)}\n onMouseLeave={() => setActiveRow(null)}\n onClick={() => onSelect?.(f)}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 10,\n padding: \"8px 12px\",\n borderRadius: 6,\n border: isSelected\n ? \"1px solid #1976d2\"\n : \"1px solid #eee\",\n backgroundColor: isSelected\n ? \"#e3f2fd\"\n : isActive\n ? \"#fafafa\"\n : \"#fff\",\n cursor: \"pointer\",\n transition: \"all 0.1s ease\",\n }}\n >\n {/* Format badge */}\n <div\n style={{\n width: 36,\n height: 36,\n borderRadius: 6,\n backgroundColor: fmtColor,\n color: \"#fff\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontSize: 10,\n fontWeight: 700,\n flexShrink: 0,\n textTransform: \"uppercase\",\n }}\n >\n {f.format.slice(0, 4)}\n </div>\n\n {/* Title + meta */}\n <div style={{ flex: 1, minWidth: 0 }}>\n <div\n style={{\n fontSize: 14,\n fontWeight: 500,\n color: \"#222\",\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n }}\n >\n {f.title}\n </div>\n <div\n style={{\n fontSize: 12,\n color: \"#888\",\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n }}\n >\n {f.originalName} · {formatBytes(f.sizeBytes)}\n </div>\n </div>\n\n {/* Action buttons */}\n {showActions && isActive && (\n <div\n style={{ display: \"flex\", gap: 4, flexShrink: 0 }}\n onClick={(e) => e.stopPropagation()}\n >\n <RowActionBtn label=\"Info\" onClick={() => setDetailFile(f)} />\n <RowActionBtn label=\"Edit\" onClick={() => openEdit(f)} />\n <RowActionBtn label=\"Del\" onClick={() => openDelete(f)} color=\"#d32f2f\" />\n </div>\n )}\n </div>\n );\n })}\n </div>\n )}\n\n {/* Pagination */}\n {pageCount > 1 && (\n <div\n style={{\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n gap: 12,\n fontSize: 14,\n }}\n >\n <button\n disabled={page <= 0}\n onClick={() => setPage(page - 1)}\n style={{\n padding: \"4px 12px\",\n borderRadius: 4,\n border: \"1px solid #ddd\",\n background: page <= 0 ? \"#f5f5f5\" : \"#fff\",\n cursor: page <= 0 ? \"default\" : \"pointer\",\n fontFamily: FONT,\n fontSize: 13,\n color: page <= 0 ? \"#bbb\" : \"#333\",\n }}\n >\n Prev\n </button>\n <span style={{ color: \"#666\", fontSize: 13 }}>\n Page {page + 1} of {pageCount} · {total} file{total !== 1 ? \"s\" : \"\"}\n </span>\n <button\n disabled={page >= pageCount - 1}\n onClick={() => setPage(page + 1)}\n style={{\n padding: \"4px 12px\",\n borderRadius: 4,\n border: \"1px solid #ddd\",\n background: page >= pageCount - 1 ? \"#f5f5f5\" : \"#fff\",\n cursor: page >= pageCount - 1 ? \"default\" : \"pointer\",\n fontFamily: FONT,\n fontSize: 13,\n color: page >= pageCount - 1 ? \"#bbb\" : \"#333\",\n }}\n >\n Next\n </button>\n </div>\n )}\n\n {/* Details modal */}\n {detailFile && (\n <FileDetails\n file={detailFile}\n onClose={() => setDetailFile(null)}\n onEdit={showActions ? openEdit : undefined}\n onDelete={showActions ? openDelete : undefined}\n />\n )}\n\n {/* Edit dialog */}\n {editFile && (\n <div\n style={{\n position: \"fixed\",\n inset: 0,\n zIndex: 10000,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: \"rgba(0,0,0,0.4)\",\n }}\n onClick={(e) => {\n if (e.target === e.currentTarget && !editSaving) setEditFile(null);\n }}\n >\n <div\n style={{\n backgroundColor: \"#fff\",\n borderRadius: 10,\n padding: 20,\n maxWidth: 400,\n width: \"90vw\",\n fontFamily: FONT,\n }}\n >\n <div style={{ fontWeight: 600, fontSize: 15, marginBottom: 12 }}>\n Edit File\n </div>\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 8 }}>\n <input\n type=\"text\"\n placeholder=\"Title\"\n value={editTitle}\n onChange={(e) => setEditTitle(e.target.value)}\n disabled={editSaving}\n maxLength={250}\n style={{\n padding: \"8px 12px\",\n borderRadius: 6,\n border: \"1px solid #ddd\",\n fontSize: 14,\n fontFamily: FONT,\n outline: \"none\",\n }}\n />\n <input\n type=\"text\"\n placeholder=\"Description (optional)\"\n value={editDesc}\n onChange={(e) => setEditDesc(e.target.value)}\n disabled={editSaving}\n maxLength={500}\n style={{\n padding: \"8px 12px\",\n borderRadius: 6,\n border: \"1px solid #ddd\",\n fontSize: 14,\n fontFamily: FONT,\n outline: \"none\",\n }}\n />\n </div>\n <div style={{ display: \"flex\", justifyContent: \"flex-end\", gap: 8, marginTop: 16 }}>\n <button\n onClick={() => setEditFile(null)}\n disabled={editSaving}\n style={{\n padding: \"6px 14px\",\n borderRadius: 6,\n border: \"1px solid #ddd\",\n backgroundColor: \"#fff\",\n fontSize: 13,\n fontFamily: FONT,\n cursor: \"pointer\",\n color: \"#333\",\n }}\n >\n Cancel\n </button>\n <button\n onClick={handleEditSave}\n disabled={editSaving || !editTitle.trim()}\n style={{\n padding: \"6px 14px\",\n borderRadius: 6,\n border: \"none\",\n backgroundColor: editSaving || !editTitle.trim() ? \"#bbb\" : \"#1976d2\",\n color: \"#fff\",\n fontSize: 13,\n fontFamily: FONT,\n cursor: editSaving ? \"default\" : \"pointer\",\n }}\n >\n {editSaving ? \"Saving...\" : \"Save\"}\n </button>\n </div>\n </div>\n </div>\n )}\n\n {/* Delete confirmation */}\n {deleteConfirm && (\n <div\n style={{\n position: \"fixed\",\n inset: 0,\n zIndex: 10000,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: \"rgba(0,0,0,0.4)\",\n }}\n onClick={(e) => {\n if (e.target === e.currentTarget && !deleting) setDeleteConfirm(null);\n }}\n >\n <div\n style={{\n backgroundColor: \"#fff\",\n borderRadius: 10,\n padding: 20,\n maxWidth: 360,\n width: \"90vw\",\n fontFamily: FONT,\n }}\n >\n <div style={{ fontWeight: 600, fontSize: 15, marginBottom: 8 }}>\n Delete File\n </div>\n <div style={{ fontSize: 14, color: \"#555\", marginBottom: 16 }}>\n Delete &ldquo;{deleteConfirm.title}&rdquo;? This cannot be undone.\n </div>\n <div style={{ display: \"flex\", justifyContent: \"flex-end\", gap: 8 }}>\n <button\n onClick={() => setDeleteConfirm(null)}\n disabled={deleting}\n style={{\n padding: \"6px 14px\",\n borderRadius: 6,\n border: \"1px solid #ddd\",\n backgroundColor: \"#fff\",\n fontSize: 13,\n fontFamily: FONT,\n cursor: \"pointer\",\n color: \"#333\",\n }}\n >\n Cancel\n </button>\n <button\n onClick={() => handleDelete(deleteConfirm)}\n disabled={deleting}\n style={{\n padding: \"6px 14px\",\n borderRadius: 6,\n border: \"none\",\n backgroundColor: deleting ? \"#bbb\" : \"#d32f2f\",\n color: \"#fff\",\n fontSize: 13,\n fontFamily: FONT,\n cursor: deleting ? \"default\" : \"pointer\",\n }}\n >\n {deleting ? \"Deleting...\" : \"Delete\"}\n </button>\n </div>\n </div>\n </div>\n )}\n </div>\n );\n\n if (mode === \"modal\") {\n return (\n <div\n style={{\n position: \"fixed\",\n inset: 0,\n zIndex: 9999,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: \"rgba(0,0,0,0.4)\",\n }}\n onClick={(e) => {\n if (e.target === e.currentTarget) onClose?.();\n }}\n >\n <div\n style={{\n backgroundColor: \"#fff\",\n borderRadius: 12,\n padding: 20,\n maxWidth: 640,\n width: \"90vw\",\n maxHeight: \"80vh\",\n overflow: \"auto\",\n boxShadow: \"0 8px 32px rgba(0,0,0,0.2)\",\n ...style,\n }}\n >\n {content}\n </div>\n </div>\n );\n }\n\n return content;\n}\n\nfunction RowActionBtn({\n label,\n onClick,\n color,\n}: {\n label: string;\n onClick: () => void;\n color?: string;\n}) {\n return (\n <button\n onClick={(e) => {\n e.stopPropagation();\n onClick();\n }}\n style={{\n padding: \"4px 10px\",\n borderRadius: 4,\n border: \"1px solid #e0e0e0\",\n backgroundColor: \"#fff\",\n color: color || \"#555\",\n fontSize: 12,\n fontWeight: 500,\n cursor: \"pointer\",\n fontFamily: FONT,\n }}\n >\n {label}\n </button>\n );\n}\n"]}